@nx/node 0.0.0-pr-3-e51e28c → 0.0.0-pr-30418-4e2b721

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/node",
3
- "version": "0.0.0-pr-3-e51e28c",
3
+ "version": "0.0.0-pr-30418-4e2b721",
4
4
  "private": false,
5
5
  "description": "The Node Plugin for Nx contains generators to manage Node applications within an Nx workspace.",
6
6
  "repository": {
@@ -32,10 +32,10 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "tslib": "^2.3.0",
35
- "@nx/devkit": "0.0.0-pr-3-e51e28c",
36
- "@nx/jest": "0.0.0-pr-3-e51e28c",
37
- "@nx/js": "0.0.0-pr-3-e51e28c",
38
- "@nx/eslint": "0.0.0-pr-3-e51e28c"
35
+ "@nx/devkit": "0.0.0-pr-30418-4e2b721",
36
+ "@nx/jest": "0.0.0-pr-30418-4e2b721",
37
+ "@nx/js": "0.0.0-pr-30418-4e2b721",
38
+ "@nx/eslint": "0.0.0-pr-30418-4e2b721"
39
39
  },
40
40
  "publishConfig": {
41
41
  "access": "public"
@@ -1,9 +1,10 @@
1
1
  import { GeneratorCallback, Tree } from '@nx/devkit';
2
2
  import { Schema } from './schema';
3
- export interface NormalizedSchema extends Schema {
3
+ export interface NormalizedSchema extends Omit<Schema, 'useTsSolution'> {
4
4
  appProjectRoot: string;
5
5
  parsedTags: string[];
6
6
  outputPath: string;
7
+ importPath: string;
7
8
  isUsingTsSolutionConfig: boolean;
8
9
  }
9
10
  export declare function addLintingToApplication(tree: Tree, options: NormalizedSchema): Promise<GeneratorCallback>;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addLintingToApplication = addLintingToApplication;
4
4
  exports.applicationGenerator = applicationGenerator;
5
5
  exports.applicationGeneratorInternal = applicationGeneratorInternal;
6
- const get_import_path_1 = require("@nx/js/src/utils/get-import-path");
7
6
  const devkit_1 = require("@nx/devkit");
8
7
  const project_name_and_root_utils_1 = require("@nx/devkit/src/generators/project-name-and-root-utils");
9
8
  const jest_1 = require("@nx/jest");
@@ -79,7 +78,6 @@ function getEsBuildConfig(project, options) {
79
78
  }
80
79
  function getServeConfig(options) {
81
80
  return {
82
- continuous: true,
83
81
  executor: '@nx/js:node',
84
82
  defaultConfiguration: 'development',
85
83
  // Run build, which includes dependency on "^build" by default, so the first run
@@ -139,23 +137,24 @@ function addProject(tree, options) {
139
137
  }
140
138
  }
141
139
  project.targets.serve = getServeConfig(options);
142
- if (options.isUsingTsSolutionConfig) {
143
- (0, devkit_1.writeJson)(tree, (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'package.json'), {
144
- name: (0, get_import_path_1.getImportPath)(tree, options.name),
145
- version: '0.0.1',
146
- private: true,
147
- nx: {
148
- name: options.name,
149
- projectType: 'application',
150
- sourceRoot: project.sourceRoot,
151
- targets: project.targets,
152
- tags: project.tags?.length ? project.tags : undefined,
153
- },
154
- });
140
+ const packageJson = {
141
+ name: options.importPath,
142
+ version: '0.0.1',
143
+ private: true,
144
+ };
145
+ if (!options.useProjectJson) {
146
+ packageJson.nx = {
147
+ name: options.name !== options.importPath ? options.name : undefined,
148
+ targets: project.targets,
149
+ tags: project.tags?.length ? project.tags : undefined,
150
+ };
155
151
  }
156
152
  else {
157
153
  (0, devkit_1.addProjectConfiguration)(tree, options.name, project, options.standaloneConfig);
158
154
  }
155
+ if (!options.useProjectJson || options.isUsingTsSolutionConfig) {
156
+ (0, devkit_1.writeJson)(tree, (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'package.json'), packageJson);
157
+ }
159
158
  }
160
159
  function addAppFiles(tree, options) {
161
160
  (0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, './files/common'), options.appProjectRoot, {
@@ -195,16 +194,10 @@ function addAppFiles(tree, options) {
195
194
  }
196
195
  function addProxy(tree, options) {
197
196
  const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.frontendProject);
198
- if (projectConfig.targets &&
199
- ['serve', 'dev'].find((t) => !!projectConfig.targets[t])) {
200
- const targetName = ['serve', 'dev'].find((t) => !!projectConfig.targets[t]);
201
- projectConfig.targets[targetName].dependsOn = [
202
- ...(projectConfig.targets[targetName].dependsOn ?? []),
203
- `${options.name}:serve`,
204
- ];
197
+ if (projectConfig.targets && projectConfig.targets.serve) {
205
198
  const pathToProxyFile = `${projectConfig.root}/proxy.conf.json`;
206
- projectConfig.targets[targetName].options = {
207
- ...projectConfig.targets[targetName].options,
199
+ projectConfig.targets.serve.options = {
200
+ ...projectConfig.targets.serve.options,
208
201
  proxyConfig: pathToProxyFile,
209
202
  };
210
203
  if (!tree.exists(pathToProxyFile)) {
@@ -321,6 +314,7 @@ function updateTsConfigOptions(tree, options) {
321
314
  async function applicationGenerator(tree, schema) {
322
315
  return await applicationGeneratorInternal(tree, {
323
316
  addPlugin: false,
317
+ useProjectJson: true,
324
318
  ...schema,
325
319
  });
326
320
  }
@@ -381,6 +375,11 @@ async function applicationGeneratorInternal(tree, schema) {
381
375
  }
382
376
  addAppFiles(tree, options);
383
377
  addProject(tree, options);
378
+ // If we are using the new TS solution
379
+ // We need to update the workspace file (package.json or pnpm-workspaces.yaml) to include the new project
380
+ if (options.isUsingTsSolutionConfig) {
381
+ await (0, ts_solution_setup_1.addProjectToTsSolutionWorkspace)(tree, options.appProjectRoot);
382
+ }
384
383
  updateTsConfigOptions(tree, options);
385
384
  if (options.linter === eslint_1.Linter.EsLint) {
386
385
  const lintTask = await addLintingToApplication(tree, options);
@@ -445,11 +444,6 @@ async function applicationGeneratorInternal(tree, schema) {
445
444
  ? ['eslint.config.js', 'eslint.config.cjs', 'eslint.config.mjs']
446
445
  : undefined);
447
446
  }
448
- // If we are using the new TS solution
449
- // We need to update the workspace file (package.json or pnpm-workspaces.yaml) to include the new project
450
- if (options.isUsingTsSolutionConfig) {
451
- (0, ts_solution_setup_1.addProjectToTsSolutionWorkspace)(tree, options.appProjectRoot);
452
- }
453
447
  (0, sort_fields_1.sortPackageJsonFields)(tree, options.appProjectRoot);
454
448
  if (!options.skipFormat) {
455
449
  await (0, devkit_1.formatFiles)(tree);
@@ -460,8 +454,8 @@ async function applicationGeneratorInternal(tree, schema) {
460
454
  return (0, devkit_1.runTasksInSerial)(...tasks);
461
455
  }
462
456
  async function normalizeOptions(host, options) {
463
- await (0, project_name_and_root_utils_1.ensureProjectName)(host, options, 'application');
464
- const { projectName: appProjectName, projectRoot: appProjectRoot } = await (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(host, {
457
+ await (0, project_name_and_root_utils_1.ensureRootProjectName)(options, 'application');
458
+ const { projectName, projectRoot: appProjectRoot, importPath, } = await (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(host, {
465
459
  name: options.name,
466
460
  projectType: 'application',
467
461
  directory: options.directory,
@@ -478,6 +472,8 @@ async function normalizeOptions(host, options) {
478
472
  nxJson.useInferencePlugins !== false;
479
473
  const isUsingTsSolutionConfig = (0, ts_solution_setup_1.isUsingTsSolutionSetup)(host);
480
474
  const swcJest = options.swcJest ?? isUsingTsSolutionConfig;
475
+ const appProjectName = !isUsingTsSolutionConfig || options.name ? projectName : importPath;
476
+ const useProjectJson = options.useProjectJson ?? !isUsingTsSolutionConfig;
481
477
  return {
482
478
  addPlugin,
483
479
  ...options,
@@ -486,6 +482,7 @@ async function normalizeOptions(host, options) {
486
482
  ? (0, devkit_1.names)(options.frontendProject).fileName
487
483
  : undefined,
488
484
  appProjectRoot,
485
+ importPath,
489
486
  parsedTags,
490
487
  linter: options.linter ?? eslint_1.Linter.EsLint,
491
488
  unitTestRunner: options.unitTestRunner ?? 'jest',
@@ -493,9 +490,10 @@ async function normalizeOptions(host, options) {
493
490
  port: options.port ?? 3000,
494
491
  outputPath: isUsingTsSolutionConfig
495
492
  ? (0, devkit_1.joinPathFragments)(appProjectRoot, 'dist')
496
- : (0, devkit_1.joinPathFragments)('dist', options.rootProject ? options.name : appProjectRoot),
493
+ : (0, devkit_1.joinPathFragments)('dist', options.rootProject ? appProjectName : appProjectRoot),
497
494
  isUsingTsSolutionConfig,
498
495
  swcJest,
496
+ useProjectJson,
499
497
  };
500
498
  }
501
499
  exports.default = applicationGenerator;
@@ -25,6 +25,7 @@ export interface Schema {
25
25
  isNest?: boolean;
26
26
  addPlugin?: boolean;
27
27
  useTsSolution?: boolean;
28
+ useProjectJson?: boolean;
28
29
  }
29
30
 
30
31
  export type NodeJsFrameWorks = 'express' | 'koa' | 'fastify' | 'nest' | 'none';
@@ -123,6 +123,10 @@
123
123
  "docker": {
124
124
  "type": "boolean",
125
125
  "description": "Add a docker build target"
126
+ },
127
+ "useProjectJson": {
128
+ "type": "boolean",
129
+ "description": "Use a `project.json` configuration file instead of inlining the Nx configuration in the `package.json` file."
126
130
  }
127
131
  },
128
132
  "required": ["directory"]
@@ -12,12 +12,12 @@ const eslint_file_1 = require("@nx/eslint/src/generators/utils/eslint-file");
12
12
  const log_show_project_command_1 = require("@nx/devkit/src/utils/log-show-project-command");
13
13
  const config_file_1 = require("@nx/jest/src/utils/config/config-file");
14
14
  const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
15
- const get_import_path_1 = require("@nx/js/src/utils/get-import-path");
16
15
  const posix_1 = require("node:path/posix");
17
16
  const add_swc_config_1 = require("@nx/js/src/utils/swc/add-swc-config");
18
17
  async function e2eProjectGenerator(host, options) {
19
18
  return await e2eProjectGeneratorInternal(host, {
20
19
  addPlugin: false,
20
+ useProjectJson: true,
21
21
  ...options,
22
22
  });
23
23
  }
@@ -25,30 +25,30 @@ async function e2eProjectGeneratorInternal(host, _options) {
25
25
  const tasks = [];
26
26
  const options = await normalizeOptions(host, _options);
27
27
  const appProject = (0, devkit_1.readProjectConfiguration)(host, options.project);
28
- const isUsingTsSolutionConfig = (0, ts_solution_setup_1.isUsingTsSolutionSetup)(host);
29
28
  // TODO(@ndcunningham): This is broken.. the outputs are wrong.. and this isn't using the jest generator
30
- if (isUsingTsSolutionConfig) {
31
- (0, devkit_1.writeJson)(host, (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'package.json'), {
32
- name: (0, get_import_path_1.getImportPath)(host, options.e2eProjectName),
33
- version: '0.0.1',
34
- private: true,
35
- nx: {
36
- name: options.e2eProjectName,
37
- projectType: 'application',
38
- implicitDependencies: [options.project],
39
- targets: {
40
- e2e: {
41
- executor: '@nx/jest:jest',
42
- outputs: ['{workspaceRoot}/coverage/{e2eProjectRoot}'],
43
- options: {
44
- jestConfig: `${options.e2eProjectRoot}/jest.config.ts`,
45
- passWithNoTests: true,
46
- },
47
- dependsOn: [`${options.project}:build`],
29
+ const packageJson = {
30
+ name: options.importPath,
31
+ version: '0.0.1',
32
+ private: true,
33
+ };
34
+ if (!options.useProjectJson) {
35
+ packageJson.nx = {
36
+ name: options.e2eProjectName !== options.importPath
37
+ ? options.e2eProjectName
38
+ : undefined,
39
+ implicitDependencies: [options.project],
40
+ targets: {
41
+ e2e: {
42
+ executor: '@nx/jest:jest',
43
+ outputs: ['{projectRoot}/test-output/jest/coverage'],
44
+ options: {
45
+ jestConfig: `${options.e2eProjectRoot}/jest.config.ts`,
46
+ passWithNoTests: true,
48
47
  },
48
+ dependsOn: [`${options.project}:build`],
49
49
  },
50
50
  },
51
- });
51
+ };
52
52
  }
53
53
  else {
54
54
  (0, devkit_1.addProjectConfiguration)(host, options.e2eProjectName, {
@@ -68,6 +68,9 @@ async function e2eProjectGeneratorInternal(host, _options) {
68
68
  },
69
69
  });
70
70
  }
71
+ if (!options.useProjectJson || options.isUsingTsSolutionConfig) {
72
+ (0, devkit_1.writeJson)(host, (0, devkit_1.joinPathFragments)(options.e2eProjectRoot, 'package.json'), packageJson);
73
+ }
71
74
  // TODO(@nicholas): Find a better way to get build target
72
75
  // We remove the 'test' target from the e2e project because it is not needed
73
76
  // The 'e2e' target is the one that should run the tests for the e2e project
@@ -94,28 +97,28 @@ async function e2eProjectGeneratorInternal(host, _options) {
94
97
  });
95
98
  }
96
99
  const jestPreset = (0, config_file_1.findRootJestPreset)(host) ?? 'jest.preset.js';
97
- const tsConfigFile = isUsingTsSolutionConfig
100
+ const tsConfigFile = options.isUsingTsSolutionConfig
98
101
  ? 'tsconfig.json'
99
102
  : 'tsconfig.spec.json';
100
103
  const rootOffset = (0, devkit_1.offsetFromRoot)(options.e2eProjectRoot);
101
- const coverageDirectory = isUsingTsSolutionConfig
104
+ const coverageDirectory = options.isUsingTsSolutionConfig
102
105
  ? 'test-output/jest/coverage'
103
106
  : (0, devkit_1.joinPathFragments)(rootOffset, 'coverage', options.e2eProjectName);
107
+ const projectSimpleName = options.project.split('/').pop();
104
108
  if (options.projectType === 'server') {
105
109
  (0, devkit_1.generateFiles)(host, path.join(__dirname, 'files/server/common'), options.e2eProjectRoot, {
106
110
  ...options,
107
- ...(0, devkit_1.names)(options.rootProject ? 'server' : options.project),
111
+ ...(0, devkit_1.names)(options.rootProject ? 'server' : projectSimpleName),
108
112
  tsConfigFile,
109
113
  offsetFromRoot: rootOffset,
110
114
  jestPreset,
111
115
  coverageDirectory,
112
- isUsingTsSolutionConfig,
113
116
  tmpl: '',
114
117
  });
115
118
  if (options.isNest) {
116
119
  (0, devkit_1.generateFiles)(host, path.join(__dirname, 'files/server/nest'), options.e2eProjectRoot, {
117
120
  ...options,
118
- ...(0, devkit_1.names)(options.rootProject ? 'server' : options.project),
121
+ ...(0, devkit_1.names)(options.rootProject ? 'server' : projectSimpleName),
119
122
  tsConfigFile,
120
123
  offsetFromRoot: rootOffset,
121
124
  tmpl: '',
@@ -126,17 +129,16 @@ async function e2eProjectGeneratorInternal(host, _options) {
126
129
  const mainFile = appProject.targets.build?.options?.outputPath;
127
130
  (0, devkit_1.generateFiles)(host, path.join(__dirname, 'files/cli'), options.e2eProjectRoot, {
128
131
  ...options,
129
- ...(0, devkit_1.names)(options.rootProject ? 'cli' : options.project),
132
+ ...(0, devkit_1.names)(options.rootProject ? 'cli' : projectSimpleName),
130
133
  mainFile,
131
134
  tsConfigFile,
132
135
  offsetFromRoot: rootOffset,
133
136
  jestPreset,
134
137
  coverageDirectory,
135
- isUsingTsSolutionConfig,
136
138
  tmpl: '',
137
139
  });
138
140
  }
139
- if (isUsingTsSolutionConfig) {
141
+ if (options.isUsingTsSolutionConfig) {
140
142
  (0, add_swc_config_1.addSwcTestConfig)(host, options.e2eProjectRoot, 'es6');
141
143
  (0, devkit_1.generateFiles)(host, path.join(__dirname, 'files/ts-solution'), options.e2eProjectRoot, {
142
144
  ...options,
@@ -177,7 +179,7 @@ async function e2eProjectGeneratorInternal(host, _options) {
177
179
  ]);
178
180
  }
179
181
  }
180
- if (isUsingTsSolutionConfig) {
182
+ if (options.isUsingTsSolutionConfig) {
181
183
  (0, devkit_1.updateJson)(host, 'tsconfig.json', (json) => {
182
184
  json.references ??= [];
183
185
  const e2eRef = `./${options.e2eProjectRoot}`;
@@ -189,8 +191,8 @@ async function e2eProjectGeneratorInternal(host, _options) {
189
191
  }
190
192
  // If we are using the new TS solution
191
193
  // We need to update the workspace file (package.json or pnpm-workspaces.yaml) to include the new project
192
- if (isUsingTsSolutionConfig) {
193
- (0, ts_solution_setup_1.addProjectToTsSolutionWorkspace)(host, options.e2eProjectRoot);
194
+ if (options.isUsingTsSolutionConfig) {
195
+ await (0, ts_solution_setup_1.addProjectToTsSolutionWorkspace)(host, options.e2eProjectRoot);
194
196
  }
195
197
  if (!options.skipFormat) {
196
198
  await (0, devkit_1.formatFiles)(host);
@@ -201,22 +203,30 @@ async function e2eProjectGeneratorInternal(host, _options) {
201
203
  return (0, devkit_1.runTasksInSerial)(...tasks);
202
204
  }
203
205
  async function normalizeOptions(tree, options) {
204
- options.directory = options.directory ?? `${options.project}-e2e`;
205
- const { projectName: e2eProjectName, projectRoot: e2eProjectRoot } = await (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(tree, {
206
+ let directory = options.rootProject ? 'e2e' : options.directory;
207
+ if (!directory) {
208
+ const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.project);
209
+ directory = `${projectConfig.root}-e2e`;
210
+ }
211
+ const { projectName: e2eProjectName, projectRoot: e2eProjectRoot, importPath, } = await (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(tree, {
206
212
  name: options.name,
207
- projectType: 'library',
208
- directory: options.rootProject ? 'e2e' : options.directory,
213
+ projectType: 'application',
214
+ directory,
209
215
  });
210
216
  const nxJson = (0, devkit_1.readNxJson)(tree);
211
217
  const addPlugin = process.env.NX_ADD_PLUGINS !== 'false' &&
212
218
  nxJson.useInferencePlugins !== false;
219
+ const isUsingTsSolutionConfig = (0, ts_solution_setup_1.isUsingTsSolutionSetup)(tree);
213
220
  return {
214
221
  addPlugin,
215
222
  ...options,
216
223
  e2eProjectRoot,
217
224
  e2eProjectName,
225
+ importPath,
218
226
  port: options.port ?? 3000,
219
227
  rootProject: !!options.rootProject,
228
+ isUsingTsSolutionConfig,
229
+ useProjectJson: options.useProjectJson ?? !isUsingTsSolutionConfig,
220
230
  };
221
231
  }
222
232
  exports.default = e2eProjectGenerator;
@@ -9,4 +9,5 @@ export interface Schema {
9
9
  isNest?: boolean;
10
10
  skipFormat?: boolean;
11
11
  addPlugin?: boolean;
12
+ useProjectJson?: boolean;
12
13
  }
@@ -59,6 +59,10 @@
59
59
  "default": false,
60
60
  "hidden": true,
61
61
  "x-priority": "internal"
62
+ },
63
+ "useProjectJson": {
64
+ "type": "boolean",
65
+ "description": "Use a `project.json` configuration file instead of inlining the Nx configuration in the `package.json` file."
62
66
  }
63
67
  },
64
68
  "required": ["project"]
@@ -12,11 +12,11 @@ const versions_1 = require("../../utils/versions");
12
12
  const init_1 = require("../init/init");
13
13
  const target_defaults_utils_1 = require("@nx/devkit/src/generators/target-defaults-utils");
14
14
  const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
15
- const get_import_path_1 = require("@nx/js/src/utils/get-import-path");
16
15
  const sort_fields_1 = require("@nx/js/src/utils/package-json/sort-fields");
17
16
  async function libraryGenerator(tree, schema) {
18
17
  return await libraryGeneratorInternal(tree, {
19
18
  addPlugin: false,
19
+ useProjectJson: true,
20
20
  ...schema,
21
21
  });
22
22
  }
@@ -25,21 +25,21 @@ async function libraryGeneratorInternal(tree, schema) {
25
25
  // If we are using the new TS solution
26
26
  // We need to update the workspace file (package.json or pnpm-workspaces.yaml) to include the new project
27
27
  if (options.isUsingTsSolutionConfig) {
28
- (0, ts_solution_setup_1.addProjectToTsSolutionWorkspace)(tree, options.projectRoot);
28
+ await (0, ts_solution_setup_1.addProjectToTsSolutionWorkspace)(tree, options.projectRoot);
29
29
  }
30
30
  const tasks = [];
31
31
  if (options.publishable === true && !schema.importPath) {
32
32
  throw new Error(`For publishable libs you have to provide a proper "--importPath" which needs to be a valid npm package name (e.g. my-awesome-lib or @myorg/my-lib)`);
33
33
  }
34
34
  // Create `package.json` first because @nx/js:lib generator will update it.
35
- if (options.isUsingTsSolutionConfig ||
35
+ if (!options.useProjectJson ||
36
+ options.isUsingTsSolutionConfig ||
36
37
  options.publishable ||
37
38
  options.buildable) {
38
39
  (0, devkit_1.writeJson)(tree, (0, devkit_1.joinPathFragments)(options.projectRoot, 'package.json'), {
39
- name: (0, get_import_path_1.getImportPath)(tree, options.name),
40
+ name: options.importPath,
40
41
  version: '0.0.1',
41
42
  private: true,
42
- files: options.publishable ? ['dist', '!**/*.tsbuildinfo'] : undefined,
43
43
  });
44
44
  }
45
45
  tasks.push(await (0, js_1.libraryGenerator)(tree, {
@@ -50,7 +50,7 @@ async function libraryGeneratorInternal(tree, schema) {
50
50
  testEnvironment: 'node',
51
51
  skipFormat: true,
52
52
  setParserOptionsProject: schema.setParserOptionsProject,
53
- useProjectJson: !options.isUsingTsSolutionConfig,
53
+ useProjectJson: options.useProjectJson,
54
54
  }));
55
55
  updatePackageJson(tree, options);
56
56
  tasks.push(await (0, init_1.initGenerator)(tree, {
@@ -75,7 +75,7 @@ async function libraryGeneratorInternal(tree, schema) {
75
75
  }
76
76
  exports.default = libraryGenerator;
77
77
  async function normalizeOptions(tree, options) {
78
- await (0, project_name_and_root_utils_1.ensureProjectName)(tree, options, 'library');
78
+ await (0, project_name_and_root_utils_1.ensureRootProjectName)(options, 'library');
79
79
  const { projectName, names: projectNames, projectRoot, importPath, } = await (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(tree, {
80
80
  name: options.name,
81
81
  projectType: 'library',
@@ -96,13 +96,12 @@ async function normalizeOptions(tree, options) {
96
96
  return {
97
97
  ...options,
98
98
  fileName,
99
- projectName: isUsingTsSolutionConfig
100
- ? (0, get_import_path_1.getImportPath)(tree, projectName)
101
- : projectName,
99
+ projectName: isUsingTsSolutionConfig && !options.name ? importPath : projectName,
102
100
  projectRoot,
103
101
  parsedTags,
104
102
  importPath,
105
103
  isUsingTsSolutionConfig,
104
+ useProjectJson: options.useProjectJson ?? !isUsingTsSolutionConfig,
106
105
  };
107
106
  }
108
107
  function createFiles(tree, options) {
@@ -21,4 +21,5 @@ export interface Schema {
21
21
  setParserOptionsProject?: boolean;
22
22
  compiler: 'tsc' | 'swc';
23
23
  addPlugin?: boolean;
24
+ useProjectJson?: boolean;
24
25
  }
@@ -123,6 +123,10 @@
123
123
  "type": "boolean",
124
124
  "description": "Whether or not to configure the ESLint `parserOptions.project`. We do not do this by default for lint performance reasons.",
125
125
  "default": false
126
+ },
127
+ "useProjectJson": {
128
+ "type": "boolean",
129
+ "description": "Use a `project.json` configuration file instead of inlining the Nx configuration in the `package.json` file."
126
130
  }
127
131
  },
128
132
  "required": ["directory"]