Jack Hsu ec5a5e6360
feat(react): update app and lib generators to support new TS solution setup (#28808)
This PR updates app and lib generators in the following packages such
that they will generate files with the TS solution setup if it is
detected.

- `@nx/react`
- `@nx/next`
- `@nx/remix`
- `@nx/expo`
- `@nx/react-native`

React apps and libs will be linked using npm/pnpm/yarn/bun workspaces
feature rather than through tsconfig paths. This means that local
aliases like `@/` will work with Next.js and Remix apps.

Note: This will be behind `--workspaces` flag when using `npx
create-nx-workspace` and choosing React stack. If you use the None/TS
stack then adding plugins like `nx add @nx/react` then generating apps,
it will automatically pick up the new TS solution setup.


<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
React generators are not compatible with TS solution setup (i.e.
workspaces + TS project references).

## Expected Behavior
React generators work with new TS solution setup (Plain, Next.js, Remix,
Expo, React Native).

## Related Issue(s)
#28322

---------

Co-authored-by: Leosvel Pérez Espinosa <leosvel.perez.espinosa@gmail.com>
Co-authored-by: Nicholas Cunningham <ndcunningham@gmail.com>
2024-11-28 22:18:45 -05:00

44 lines
1.1 KiB
TypeScript

import type { Linter, LinterType } from '@nx/eslint';
import type { SupportedStyles } from '../../../typings/style';
export interface Schema {
appProject?: string;
buildable?: boolean;
bundler?: 'none' | 'rollup' | 'vite';
compiler?: 'babel' | 'swc';
component?: boolean;
directory: string;
globalCss?: boolean;
importPath?: string;
inSourceTests?: boolean;
js?: boolean;
linter: Linter | LinterType;
name?: string;
publishable?: boolean;
routing?: boolean;
setParserOptionsProject?: boolean;
skipFormat?: boolean;
skipPackageJson?: boolean;
skipTsConfig?: boolean;
strict?: boolean;
style: SupportedStyles;
tags?: string;
unitTestRunner?: 'jest' | 'vitest' | 'none';
minimal?: boolean;
simpleName?: boolean;
addPlugin?: boolean;
}
export interface NormalizedSchema extends Schema {
js: boolean;
name: string;
fileName: string;
projectRoot: string;
routePath: string;
parsedTags: string[];
appMain?: string;
appSourceRoot?: string;
unitTestRunner: 'jest' | 'vitest' | 'none';
isUsingTsSolutionConfig?: boolean;
}