@nx/js 23.1.1 → 23.1.2

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.
Files changed (40) hide show
  1. package/dist/internal.d.ts +3 -3
  2. package/dist/internal.js +12 -15
  3. package/dist/src/executors/copy-workspace-modules/copy-workspace-modules.js +4 -6
  4. package/dist/src/executors/node/lib/output-file.js +4 -4
  5. package/dist/src/executors/node/node.impl.js +9 -10
  6. package/dist/src/executors/prune-lockfile/prune-lockfile.d.ts +1 -1
  7. package/dist/src/executors/prune-lockfile/prune-lockfile.js +4 -9
  8. package/dist/src/executors/tsc/lib/batch/watch.js +3 -3
  9. package/dist/src/executors/tsc/tsc.batch-impl.d.ts +1 -1
  10. package/dist/src/executors/tsc/tsc.batch-impl.js +2 -2
  11. package/dist/src/executors/verdaccio/verdaccio.impl.js +1 -2
  12. package/dist/src/generators/library/utils/add-release-config.js +2 -2
  13. package/dist/src/generators/setup-build/generator.js +1 -2
  14. package/dist/src/generators/typescript-sync/typescript-sync.d.ts +1 -1
  15. package/dist/src/generators/typescript-sync/typescript-sync.js +2 -2
  16. package/dist/src/index.d.ts +2 -2
  17. package/dist/src/index.js +5 -7
  18. package/dist/src/plugins/typescript/plugin.js +9 -14
  19. package/dist/src/plugins/typescript/util.d.ts +1 -1
  20. package/dist/src/release/utils/update-lock-file.js +5 -7
  21. package/dist/src/release/version-actions.d.ts +12 -3
  22. package/dist/src/release/version-actions.js +232 -74
  23. package/dist/src/utils/assets/copy-assets-handler.d.ts +1 -1
  24. package/dist/src/utils/assets/copy-assets-handler.js +2 -2
  25. package/dist/src/utils/buildable-libs-utils.js +10 -13
  26. package/dist/src/utils/find-npm-dependencies.js +7 -10
  27. package/dist/src/utils/generate-globs.js +11 -14
  28. package/dist/src/utils/get-main-file-dir.js +2 -2
  29. package/dist/src/utils/npm-config.d.ts +1 -1
  30. package/dist/src/utils/package-json/update-package-json.d.ts +1 -1
  31. package/dist/src/utils/package-json/update-package-json.js +6 -11
  32. package/dist/src/utils/package-manager-workspaces.js +2 -2
  33. package/dist/src/utils/typescript/create-ts-config.d.ts +1 -1
  34. package/dist/src/utils/typescript/create-ts-config.js +5 -5
  35. package/dist/src/utils/typescript/plugin.js +2 -2
  36. package/dist/src/utils/typescript/run-type-check.js +2 -2
  37. package/dist/src/utils/typescript/ts-solution-setup.d.ts +1 -1
  38. package/dist/src/utils/typescript/ts-solution-setup.js +3 -3
  39. package/dist/src/utils/watch-for-single-file-changes.js +2 -2
  40. package/package.json +5 -5
@@ -5,11 +5,13 @@ const internal_1 = require("@nx/devkit/internal");
5
5
  const devkit_1 = require("@nx/devkit");
6
6
  const node_child_process_1 = require("node:child_process");
7
7
  const node_path_1 = require("node:path");
8
+ const jsonc_parser_1 = require("jsonc-parser");
9
+ const semver_1 = require("semver");
8
10
  const release_1 = require("nx/release");
9
11
  const npm_config_1 = require("../utils/npm-config");
10
12
  const update_lock_file_1 = require("./utils/update-lock-file");
11
13
  const chalk = require("chalk");
12
- const semver_1 = require("./utils/semver");
14
+ const semver_2 = require("./utils/semver");
13
15
  const afterAllProjectsVersioned = async (cwd, { rootVersionActionsOptions, ...opts }) => {
14
16
  return {
15
17
  changedFiles: await (0, update_lock_file_1.updateLockFile)(cwd, {
@@ -22,10 +24,14 @@ const afterAllProjectsVersioned = async (cwd, { rootVersionActionsOptions, ...op
22
24
  exports.afterAllProjectsVersioned = afterAllProjectsVersioned;
23
25
  // Cache at the module level to avoid re-detecting the package manager for each instance
24
26
  let pm;
27
+ // Every project in a release receives the same ProjectGraph. Building these
28
+ // indexes once avoids turning dependency updates into quadratic graph scans.
29
+ const localDependencyProjectsByGraph = new WeakMap();
25
30
  class JsVersionActions extends release_1.VersionActions {
26
31
  constructor() {
27
32
  super(...arguments);
28
33
  this.validManifestFilenames = ['package.json'];
34
+ this.excludeManifestsFromFormatting = true;
29
35
  }
30
36
  async readCurrentVersionFromSourceManifest(tree) {
31
37
  const sourcePackageJsonPath = (0, node_path_1.join)(this.projectGraphNode.data.root, 'package.json');
@@ -90,25 +96,26 @@ class JsVersionActions extends release_1.VersionActions {
90
96
  async readCurrentVersionOfDependency(tree, projectGraph, dependencyProjectName) {
91
97
  const sourcePackageJsonPath = (0, node_path_1.join)(this.projectGraphNode.data.root, 'package.json');
92
98
  const json = (0, devkit_1.readJson)(tree, sourcePackageJsonPath);
93
- // Resolve the package name from the project graph metadata, as it may not match the project name
94
- const dependencyPackageName = projectGraph.nodes[dependencyProjectName].data.metadata?.js?.packageName;
95
99
  const dependencyTypes = [
96
100
  'dependencies',
97
101
  'devDependencies',
98
102
  'peerDependencies',
99
103
  'optionalDependencies',
100
104
  ];
105
+ const dependencyPackageName = projectGraph.nodes[dependencyProjectName]?.data.metadata?.js?.packageName;
101
106
  let currentVersion = null;
102
107
  let dependencyCollection = null;
103
- for (const depType of dependencyTypes) {
104
- if (json[depType] && json[depType][dependencyPackageName]) {
105
- currentVersion = json[depType][dependencyPackageName];
106
- dependencyCollection = depType;
107
- break;
108
+ if (dependencyPackageName) {
109
+ for (const depType of dependencyTypes) {
110
+ if (json[depType]?.[dependencyPackageName]) {
111
+ currentVersion = json[depType][dependencyPackageName];
112
+ dependencyCollection = depType;
113
+ break;
114
+ }
108
115
  }
109
116
  }
110
117
  // Resolve catalog references if needed
111
- if (currentVersion) {
118
+ if (currentVersion && dependencyPackageName) {
112
119
  const catalogManager = (0, internal_1.getCatalogManager)(tree.root);
113
120
  if (catalogManager?.isCatalogReference(currentVersion)) {
114
121
  currentVersion = catalogManager.resolveCatalogReference(tree, dependencyPackageName, currentVersion);
@@ -122,90 +129,127 @@ class JsVersionActions extends release_1.VersionActions {
122
129
  async updateProjectVersion(tree, newVersion) {
123
130
  const logMessages = [];
124
131
  for (const manifestToUpdate of this.manifestsToUpdate) {
125
- (0, devkit_1.updateJson)(tree, manifestToUpdate.manifestPath, (json) => {
126
- json.version = newVersion;
127
- return json;
128
- });
132
+ this.updateManifestValues(tree, manifestToUpdate.manifestPath, [
133
+ { path: ['version'], value: newVersion },
134
+ ]);
129
135
  logMessages.push(`✍️ New version ${newVersion} written to manifest: ${manifestToUpdate.manifestPath}`);
130
136
  }
131
137
  return logMessages;
132
138
  }
133
- async updateProjectDependencies(tree, projectGraph, dependenciesToUpdate) {
134
- let numDependenciesToUpdate = Object.keys(dependenciesToUpdate).length;
135
- if (numDependenciesToUpdate === 0) {
139
+ async updateProjectDependencies(tree, projectGraph, dependenciesToUpdate, resolveVersionForDependency) {
140
+ if (Object.keys(dependenciesToUpdate).length === 0 &&
141
+ !resolveVersionForDependency) {
136
142
  return [];
137
143
  }
138
- const logMessages = [];
144
+ const dependencyTypes = [
145
+ 'dependencies',
146
+ 'devDependencies',
147
+ 'peerDependencies',
148
+ 'optionalDependencies',
149
+ ];
150
+ const localDependencyProjects = this.getLocalDependencyProjectLookup(projectGraph);
151
+ for (const projectName of Object.keys(dependenciesToUpdate)) {
152
+ if (!projectGraph.nodes[projectName]?.data.metadata?.js?.packageName) {
153
+ throw new Error(`Unable to determine the package name for project "${projectName}" from the project graph metadata, please ensure that the "@nx/js" plugin is installed and the project graph has been built. If the issue persists, please report this issue on https://github.com/nrwl/nx/issues`);
154
+ }
155
+ }
156
+ const resolvedVersions = new Map();
157
+ const resolveVersion = (projectName) => {
158
+ let resolution = resolvedVersions.get(projectName);
159
+ if (!resolution) {
160
+ if (!resolveVersionForDependency) {
161
+ throw new Error(`No version resolver was provided for dependency project "${projectName}".`);
162
+ }
163
+ resolution = resolveVersionForDependency(projectName);
164
+ resolvedVersions.set(projectName, resolution);
165
+ }
166
+ return resolution;
167
+ };
168
+ const manifestUpdates = [];
139
169
  const catalogUpdates = [];
140
170
  const catalogManager = (0, internal_1.getCatalogManager)(tree.root);
141
171
  for (const manifestToUpdate of this.manifestsToUpdate) {
142
- (0, devkit_1.updateJson)(tree, manifestToUpdate.manifestPath, (json) => {
143
- const dependencyTypes = [
144
- 'dependencies',
145
- 'devDependencies',
146
- 'peerDependencies',
147
- 'optionalDependencies',
148
- ];
149
- const preserveMatchingDependencyRanges = this.finalConfigForProject.preserveMatchingDependencyRanges === true
150
- ? dependencyTypes
151
- : this.finalConfigForProject.preserveMatchingDependencyRanges ===
152
- false
153
- ? []
154
- : this.finalConfigForProject.preserveMatchingDependencyRanges ||
155
- dependencyTypes;
156
- for (const depType of dependencyTypes) {
157
- if (json[depType]) {
158
- for (const [dep, version] of Object.entries(dependenciesToUpdate)) {
159
- // Resolve the package name from the project graph metadata, as it may not match the project name
160
- const packageName = projectGraph.nodes[dep].data.metadata?.js?.packageName;
161
- if (!packageName) {
162
- throw new Error(`Unable to determine the package name for project "${dep}" from the project graph metadata, please ensure that the "@nx/js" plugin is installed and the project graph has been built. If the issue persists, please report this issue on https://github.com/nrwl/nx/issues`);
172
+ const json = (0, devkit_1.readJson)(tree, manifestToUpdate.manifestPath);
173
+ const updates = [];
174
+ const preserveMatchingDependencyRanges = this.finalConfigForProject.preserveMatchingDependencyRanges === true
175
+ ? dependencyTypes
176
+ : this.finalConfigForProject.preserveMatchingDependencyRanges ===
177
+ false
178
+ ? []
179
+ : this.finalConfigForProject.preserveMatchingDependencyRanges ||
180
+ dependencyTypes;
181
+ for (const depType of dependencyTypes) {
182
+ if (json[depType]) {
183
+ for (const [dependencyName, currentVersion] of Object.entries(json[depType])) {
184
+ const targetProject = localDependencyProjects.get(dependencyName);
185
+ if (!targetProject) {
186
+ continue;
187
+ }
188
+ let version = dependenciesToUpdate[targetProject.projectName];
189
+ if (version !== undefined) {
190
+ if (catalogManager?.isCatalogReference(currentVersion)) {
191
+ // collect the catalog updates so we can update the catalog definitions later
192
+ const catalogRef = catalogManager.parseCatalogReference(currentVersion);
193
+ catalogUpdates.push({
194
+ packageName: dependencyName,
195
+ version,
196
+ catalogName: catalogRef.catalogName,
197
+ });
198
+ continue;
163
199
  }
164
- const currentVersion = json[depType][packageName];
165
- if (currentVersion) {
166
- if (catalogManager?.isCatalogReference(currentVersion)) {
167
- // collect the catalog updates so we can update the catalog definitions later
168
- const catalogRef = catalogManager.parseCatalogReference(currentVersion);
169
- catalogUpdates.push({
170
- packageName,
171
- version,
172
- catalogName: catalogRef.catalogName,
173
- });
174
- numDependenciesToUpdate--;
175
- continue;
200
+ if (manifestToUpdate.preserveLocalDependencyProtocols &&
201
+ this.isLocalDependencyProtocol(currentVersion)) {
202
+ continue;
203
+ }
204
+ if (this.isLocalDependencyProtocol(currentVersion)) {
205
+ version = this.applyVersionPrefix(currentVersion, version);
206
+ }
207
+ if (preserveMatchingDependencyRanges.includes(depType) &&
208
+ !this.isLocalDependencyProtocol(currentVersion)) {
209
+ // If the dependency is specified using a range, do some additional processing to determine whether to update the version
210
+ if ((0, semver_2.isValidRange)(currentVersion) &&
211
+ !(0, semver_2.isMatchingDependencyRange)(version, currentVersion)) {
212
+ throw new Error(`"preserveMatchingDependencyRanges" is enabled for "${depType}" and the new version "${version}" is outside the current range for "${dependencyName}" in manifest "${manifestToUpdate.manifestPath}". Please update the range before releasing.`);
176
213
  }
177
- // Check if other local dependency protocols should be preserved
178
- else if (manifestToUpdate.preserveLocalDependencyProtocols &&
179
- this.isLocalDependencyProtocol(currentVersion)) {
180
- // Reduce the count appropriately to avoid confusing user-facing logs
181
- numDependenciesToUpdate--;
214
+ else if ((0, semver_2.isValidRange)(currentVersion)) {
182
215
  continue;
183
216
  }
184
- else if (preserveMatchingDependencyRanges.includes(depType) &&
185
- !this.isLocalDependencyProtocol(currentVersion)) {
186
- // If the dependency is specified using a range, do some additional processing to determine whether to update the version
187
- if ((0, semver_1.isValidRange)(currentVersion) &&
188
- !(0, semver_1.isMatchingDependencyRange)(version, currentVersion)) {
189
- throw new Error(`"preserveMatchingDependencyRanges" is enabled for "${depType}" and the new version "${version}" is outside the current range for "${packageName}" in manifest "${manifestToUpdate.manifestPath}". Please update the range before releasing.`);
190
- }
191
- else if ((0, semver_1.isValidRange)(currentVersion)) {
192
- // it is a range, but it is valid
193
- continue;
194
- }
195
- }
196
- json[depType][packageName] = version;
197
217
  }
198
218
  }
219
+ else if (resolveVersionForDependency &&
220
+ !manifestToUpdate.preserveLocalDependencyProtocols &&
221
+ this.isLocalDependencyProtocol(currentVersion)) {
222
+ try {
223
+ version = await this.resolveLocalDependencySpecifier(dependencyName, currentVersion, targetProject, resolveVersion);
224
+ }
225
+ catch (error) {
226
+ const message = error instanceof Error ? error.message : String(error);
227
+ throw new Error(`Unable to replace local dependency protocol "${currentVersion}" for "${dependencyName}" in manifest "${manifestToUpdate.manifestPath}". ${message}`);
228
+ }
229
+ }
230
+ if (version !== undefined) {
231
+ updates.push({
232
+ path: [depType, dependencyName],
233
+ value: version,
234
+ });
235
+ }
199
236
  }
200
237
  }
201
- return json;
238
+ }
239
+ manifestUpdates.push({
240
+ manifestPath: manifestToUpdate.manifestPath,
241
+ updates,
202
242
  });
203
- // If we ignored local dependecy protocols, then we could have dynamically ended up with zero here and we should not log anything related to dependencies
204
- if (numDependenciesToUpdate === 0) {
205
- return [];
243
+ }
244
+ // Resolve every requested version before writing any manifest so one
245
+ // failed resolver cannot leave a partially updated set of manifests.
246
+ const logMessages = [];
247
+ for (const manifestUpdate of manifestUpdates) {
248
+ this.updateManifestValues(tree, manifestUpdate.manifestPath, manifestUpdate.updates);
249
+ if (manifestUpdate.updates.length > 0) {
250
+ const depText = manifestUpdate.updates.length === 1 ? 'dependency' : 'dependencies';
251
+ logMessages.push(`✍️ Updated ${manifestUpdate.updates.length} ${depText} in manifest: ${manifestUpdate.manifestPath}`);
206
252
  }
207
- const depText = numDependenciesToUpdate === 1 ? 'dependency' : 'dependencies';
208
- logMessages.push(`✍️ Updated ${numDependenciesToUpdate} ${depText} in manifest: ${manifestToUpdate.manifestPath}`);
209
253
  }
210
254
  // Update catalog definitions in pnpm-workspace.yaml
211
255
  if (catalogUpdates.length > 0) {
@@ -216,6 +260,120 @@ class JsVersionActions extends release_1.VersionActions {
216
260
  }
217
261
  return logMessages;
218
262
  }
263
+ getLocalDependencyProjectLookup(projectGraph) {
264
+ let lookup = localDependencyProjectsByGraph.get(projectGraph);
265
+ if (lookup) {
266
+ return lookup;
267
+ }
268
+ // This lookup requires the dependency key to match the package name.
269
+ // Package aliases need relationship-specific manifest data that the
270
+ // project graph does not retain. Support is tracked in
271
+ // https://github.com/nrwl/nx/issues/36630.
272
+ lookup = new Map();
273
+ for (const [projectName, node] of Object.entries(projectGraph.nodes)) {
274
+ const packageName = node.data.metadata?.js?.packageName;
275
+ if (!packageName) {
276
+ continue;
277
+ }
278
+ lookup.set(packageName, { projectName });
279
+ }
280
+ localDependencyProjectsByGraph.set(projectGraph, lookup);
281
+ return lookup;
282
+ }
283
+ async resolveLocalDependencySpecifier(dependencyName, versionSpecifier, targetProject, resolveVersion) {
284
+ if (versionSpecifier.startsWith('file:')) {
285
+ const resolvedVersion = await resolveVersion(targetProject.projectName);
286
+ return this.applyVersionPrefix(versionSpecifier, resolvedVersion);
287
+ }
288
+ const range = versionSpecifier.slice('workspace:'.length);
289
+ if (range !== '' &&
290
+ range !== '*' &&
291
+ range !== '^' &&
292
+ range !== '~' &&
293
+ (0, semver_1.validRange)(range) !== null) {
294
+ return range;
295
+ }
296
+ const isRelativePath = range.startsWith('.');
297
+ if (!isRelativePath &&
298
+ range !== '' &&
299
+ range !== '*' &&
300
+ range !== '^' &&
301
+ range !== '~') {
302
+ throw new Error(`The workspace protocol used by "${dependencyName}" is not a supported range or relative workspace path.`);
303
+ }
304
+ const resolvedVersion = await resolveVersion(targetProject.projectName);
305
+ return this.applyVersionPrefix(isRelativePath ? 'workspace:*' : `workspace:${range}`, resolvedVersion);
306
+ }
307
+ applyVersionPrefix(versionSpecifier, resolvedVersion) {
308
+ const configuredPrefix = this.finalConfigForProject.versionPrefix;
309
+ let prefix = '';
310
+ if (configuredPrefix === '~' ||
311
+ configuredPrefix === '^' ||
312
+ configuredPrefix === '=') {
313
+ prefix = configuredPrefix;
314
+ }
315
+ else if (configuredPrefix === 'auto' &&
316
+ versionSpecifier.startsWith('workspace:')) {
317
+ const range = versionSpecifier.slice('workspace:'.length);
318
+ if (range.startsWith('^')) {
319
+ prefix = '^';
320
+ }
321
+ else if (range.startsWith('~')) {
322
+ prefix = '~';
323
+ }
324
+ }
325
+ return `${prefix}${resolvedVersion.replace(/^[~^=]/, '')}`;
326
+ }
327
+ updateManifestValues(tree, manifestPath, updates) {
328
+ if (updates.length === 0) {
329
+ return;
330
+ }
331
+ let content = this.readAndValidateManifest(tree, manifestPath);
332
+ const formattingOptions = this.detectFormattingOptions(content);
333
+ for (const update of updates) {
334
+ content = (0, jsonc_parser_1.applyEdits)(content, (0, jsonc_parser_1.modify)(content, update.path, update.value, { formattingOptions }));
335
+ }
336
+ this.validateManifestUpdates(content, manifestPath, updates);
337
+ tree.write(manifestPath, content);
338
+ }
339
+ readAndValidateManifest(tree, manifestPath) {
340
+ const content = tree.read(manifestPath, 'utf-8');
341
+ try {
342
+ // Match readJson's support for comments and trailing commas while
343
+ // retaining the original text for targeted edits.
344
+ (0, devkit_1.parseJson)(content);
345
+ }
346
+ catch (error) {
347
+ throw new Error(`Cannot parse ${manifestPath}: ${error.message}`);
348
+ }
349
+ return content;
350
+ }
351
+ validateManifestUpdates(content, manifestPath, updates) {
352
+ const manifest = (0, devkit_1.parseJson)(content);
353
+ for (const update of updates) {
354
+ let actualValue = manifest;
355
+ for (const pathSegment of update.path) {
356
+ if (actualValue === null ||
357
+ typeof actualValue !== 'object' ||
358
+ !(pathSegment in actualValue)) {
359
+ actualValue = undefined;
360
+ break;
361
+ }
362
+ actualValue = actualValue[pathSegment];
363
+ }
364
+ if (actualValue !== update.value) {
365
+ throw new Error(`Cannot update ${manifestPath}: "${update.path.join('.')}" resolves to ${JSON.stringify(actualValue)} instead of ${JSON.stringify(update.value)} after editing. The manifest may contain duplicate keys.`);
366
+ }
367
+ }
368
+ }
369
+ detectFormattingOptions(content) {
370
+ const indentation = content.match(/^[\t ]+(?=")/m)?.[0] ?? ' ';
371
+ const insertSpaces = !indentation.includes('\t');
372
+ return {
373
+ insertSpaces,
374
+ tabSize: insertSpaces ? indentation.length : 1,
375
+ };
376
+ }
219
377
  // NOTE: The TODOs were carried over from the original implementation, they are not yet implemented
220
378
  isLocalDependencyProtocol(versionSpecifier) {
221
379
  const localPackageProtocols = [
@@ -1,6 +1,6 @@
1
1
  import { AssetGlob } from './assets';
2
2
  import { normalizeAssets, getAssetOutputPath, NormalizedAssetEntry as AssetEntry } from './normalize-assets';
3
- import { ChangedFile } from 'nx/src/daemon/client/client';
3
+ import { ChangedFile } from '@nx/devkit/internal';
4
4
  export type { AssetEntry };
5
5
  export { normalizeAssets, getAssetOutputPath };
6
6
  export type FileEventType = 'create' | 'update' | 'delete';
@@ -12,7 +12,7 @@ const normalize_assets_1 = require("./normalize-assets");
12
12
  Object.defineProperty(exports, "normalizeAssets", { enumerable: true, get: function () { return normalize_assets_1.normalizeAssets; } });
13
13
  Object.defineProperty(exports, "getAssetOutputPath", { enumerable: true, get: function () { return normalize_assets_1.getAssetOutputPath; } });
14
14
  const devkit_1 = require("@nx/devkit");
15
- const client_1 = require("nx/src/daemon/client/client");
15
+ const internal_1 = require("@nx/devkit/internal");
16
16
  const picocolors_1 = require("picocolors");
17
17
  const defaultFileEventHandler = (events) => {
18
18
  const dirs = new Set(events.map((event) => path.dirname(event.dest)));
@@ -93,7 +93,7 @@ class CopyAssetsHandler {
93
93
  return ['**/node_modules/**', '**/.git/**'];
94
94
  }
95
95
  async watchAndProcessOnAssetChange() {
96
- const unregisterFileWatcher = await client_1.daemonClient.registerFileWatcher({
96
+ const unregisterFileWatcher = await internal_1.daemonClient.registerFileWatcher({
97
97
  watchProjects: 'all',
98
98
  includeGlobalWorkspaceFiles: true,
99
99
  }, (err, data) => {
@@ -9,14 +9,11 @@ exports.updatePaths = updatePaths;
9
9
  exports.updateBuildableProjectPackageJsonDependencies = updateBuildableProjectPackageJsonDependencies;
10
10
  const devkit_1 = require("@nx/devkit");
11
11
  const fs_1 = require("fs");
12
- const operators_1 = require("nx/src/project-graph/operators");
13
- const fileutils_1 = require("nx/src/utils/fileutils");
14
- const output_1 = require("nx/src/utils/output");
15
12
  const path_1 = require("path");
16
13
  const ts_config_1 = require("./typescript/ts-config");
17
14
  const strip_glob_to_base_dir_1 = require("./strip-glob-to-base-dir");
18
15
  const crypto_1 = require("crypto");
19
- const project_graph_1 = require("nx/src/config/project-graph");
16
+ const internal_1 = require("@nx/devkit/internal");
20
17
  function isBuildable(target, node) {
21
18
  return (node.data.targets &&
22
19
  node.data.targets[target] &&
@@ -49,11 +46,11 @@ function calculateProjectDependencies(projGraph, root, projectName, targetName,
49
46
  .map(({ name: dep, isTopLevel }) => {
50
47
  let project = null;
51
48
  const depNode = projGraph.nodes[dep] || projGraph.externalNodes[dep];
52
- if ((0, project_graph_1.isProjectGraphProjectNode)(depNode) && depNode.type === 'lib') {
49
+ if ((0, internal_1.isProjectGraphProjectNode)(depNode) && depNode.type === 'lib') {
53
50
  if (isBuildable(targetName, depNode)) {
54
51
  const libPackageJsonPath = (0, path_1.join)(root, depNode.data.root, 'package.json');
55
52
  project = {
56
- name: (0, fileutils_1.fileExists)(libPackageJsonPath)
53
+ name: (0, internal_1.fileExists)(libPackageJsonPath)
57
54
  ? (0, devkit_1.readJsonFile)(libPackageJsonPath).name // i.e. @workspace/mylib
58
55
  : dep,
59
56
  outputs: (0, devkit_1.getOutputsForTargetAndConfiguration)({
@@ -68,7 +65,7 @@ function calculateProjectDependencies(projGraph, root, projectName, targetName,
68
65
  nonBuildableDependencies.push(dep);
69
66
  }
70
67
  }
71
- else if ((0, project_graph_1.isProjectGraphExternalNode)(depNode)) {
68
+ else if ((0, internal_1.isProjectGraphExternalNode)(depNode)) {
72
69
  project = {
73
70
  name: depNode.data.packageName,
74
71
  outputs: [],
@@ -130,7 +127,7 @@ function readTsConfigWithRemappedPaths(originalTsconfigPath, generatedTsconfigPa
130
127
  }
131
128
  generatedTsConfig.compilerOptions.paths = paths;
132
129
  if (process.env.NX_VERBOSE_LOGGING_PATH_MAPPINGS === 'true') {
133
- output_1.output.log({
130
+ devkit_1.output.log({
134
131
  title: 'TypeScript path mappings have been rewritten.',
135
132
  });
136
133
  console.log(JSON.stringify(generatedTsConfig.compilerOptions.paths, null, 2));
@@ -158,7 +155,7 @@ function calculateDependenciesFromTaskGraph(taskGraph, projectGraph, root, proje
158
155
  }
159
156
  const libPackageJsonPath = (0, path_1.join)(root, depProjectNode.data.root, 'package.json');
160
157
  project = {
161
- name: (0, fileutils_1.fileExists)(libPackageJsonPath)
158
+ name: (0, internal_1.fileExists)(libPackageJsonPath)
162
159
  ? (0, devkit_1.readJsonFile)(libPackageJsonPath).name // i.e. @workspace/mylib
163
160
  : depTask.target.project,
164
161
  outputs,
@@ -264,7 +261,7 @@ function updatePaths(dependencies, paths) {
264
261
  const pathsKeys = Object.keys(paths);
265
262
  // For each registered dependency
266
263
  dependencies
267
- .filter((dep) => (0, project_graph_1.isProjectGraphProjectNode)(dep.node))
264
+ .filter((dep) => (0, internal_1.isProjectGraphProjectNode)(dep.node))
268
265
  .forEach((dep) => {
269
266
  // If there are outputs
270
267
  if (dep.outputs && dep.outputs.length > 0) {
@@ -335,7 +332,7 @@ function updateBuildableProjectPackageJsonDependencies(root, projectName, target
335
332
  packageJson.peerDependencies = packageJson.peerDependencies || {};
336
333
  let updatePackageJson = false;
337
334
  dependencies.forEach((entry) => {
338
- const packageName = (0, operators_1.isNpmProject)(entry.node)
335
+ const packageName = (0, internal_1.isNpmProject)(entry.node)
339
336
  ? entry.node.data.packageName
340
337
  : entry.name;
341
338
  if (!hasDependency(packageJson, 'dependencies', packageName) &&
@@ -343,7 +340,7 @@ function updateBuildableProjectPackageJsonDependencies(root, projectName, target
343
340
  !hasDependency(packageJson, 'peerDependencies', packageName)) {
344
341
  try {
345
342
  let depVersion;
346
- if ((0, project_graph_1.isProjectGraphProjectNode)(entry.node) &&
343
+ if ((0, internal_1.isProjectGraphProjectNode)(entry.node) &&
347
344
  entry.node.type === 'lib') {
348
345
  const outputs = (0, devkit_1.getOutputsForTargetAndConfiguration)({
349
346
  project: projectName,
@@ -354,7 +351,7 @@ function updateBuildableProjectPackageJsonDependencies(root, projectName, target
354
351
  depVersion = (0, devkit_1.readJsonFile)(depPackageJsonPath).version;
355
352
  packageJson[typeOfDependency][packageName] = depVersion;
356
353
  }
357
- else if ((0, operators_1.isNpmProject)(entry.node)) {
354
+ else if ((0, internal_1.isNpmProject)(entry.node)) {
358
355
  // If an npm dep is part of the workspace devDependencies, do not include it the library
359
356
  if (!!workspacePackageJson.devDependencies?.[entry.node.data.packageName]) {
360
357
  return;
@@ -2,12 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.findNpmDependencies = findNpmDependencies;
4
4
  const path_1 = require("path");
5
- const configuration_1 = require("nx/src/config/configuration");
6
5
  const devkit_1 = require("@nx/devkit");
7
- const fileutils_1 = require("nx/src/utils/fileutils");
8
- const project_graph_1 = require("nx/src/config/project-graph");
9
6
  const ts_config_1 = require("./typescript/ts-config");
10
- const task_hasher_1 = require("nx/src/hasher/task-hasher");
7
+ const internal_1 = require("@nx/devkit/internal");
11
8
  /**
12
9
  * Finds all npm dependencies and their expected versions for a given project.
13
10
  */
@@ -44,14 +41,14 @@ function collectDependenciesFromFileMap(workspaceRoot, sourceProject, projectGra
44
41
  // If build target does not exist in project, use all files as input.
45
42
  // This is needed for transitive dependencies for apps -- where libs may not be buildable.
46
43
  const inputs = sourceProject.data.targets[buildTarget]
47
- ? (0, task_hasher_1.getTargetInputs)((0, configuration_1.readNxJson)(), sourceProject, buildTarget).selfInputs
44
+ ? (0, internal_1.getTargetInputs)((0, internal_1.readNxJsonFromDisk)(), sourceProject, buildTarget).selfInputs
48
45
  : ['{projectRoot}/**/*'];
49
46
  if (ignoredFiles) {
50
47
  for (const pattern of ignoredFiles) {
51
48
  inputs.push(`!${pattern}`);
52
49
  }
53
50
  }
54
- const files = (0, task_hasher_1.filterUsingGlobPatterns)(sourceProject.data.root, projectFileMap[sourceProject.name] || [], inputs);
51
+ const files = (0, internal_1.filterUsingGlobPatterns)(sourceProject.data.root, projectFileMap[sourceProject.name] || [], inputs);
55
52
  for (const fileData of files) {
56
53
  if (!fileData.deps ||
57
54
  fileData.file ===
@@ -59,7 +56,7 @@ function collectDependenciesFromFileMap(workspaceRoot, sourceProject, projectGra
59
56
  continue;
60
57
  }
61
58
  for (const dep of fileData.deps) {
62
- const target = (0, project_graph_1.fileDataDepTarget)(dep);
59
+ const target = (0, internal_1.fileDataDepTarget)(dep);
63
60
  // If the node is external, then read package info from `data`.
64
61
  const externalDep = projectGraph.externalNodes[target];
65
62
  if (externalDep?.type === 'npm') {
@@ -110,7 +107,7 @@ function collectDependenciesFromFileMap(workspaceRoot, sourceProject, projectGra
110
107
  }
111
108
  function readPackageJson(project, workspaceRoot) {
112
109
  const packageJsonPath = (0, path_1.join)(workspaceRoot, project.data.root, 'package.json');
113
- if ((0, fileutils_1.fileExists)(packageJsonPath))
110
+ if ((0, internal_1.fileExists)(packageJsonPath))
114
111
  return (0, devkit_1.readJsonFile)(packageJsonPath);
115
112
  return null;
116
113
  }
@@ -139,7 +136,7 @@ function collectHelperDependencies(workspaceRoot, sourceProject, projectGraph, b
139
136
  const swcConfigPath = target.options.swcrc
140
137
  ? (0, path_1.join)(workspaceRoot, target.options.swcrc)
141
138
  : (0, path_1.join)(workspaceRoot, sourceProject.data.root, '.swcrc');
142
- const swcConfig = (0, fileutils_1.fileExists)(swcConfigPath)
139
+ const swcConfig = (0, internal_1.fileExists)(swcConfigPath)
143
140
  ? (0, devkit_1.readJsonFile)(swcConfigPath)
144
141
  : {};
145
142
  if (swcConfig?.jsc?.externalHelpers &&
@@ -169,7 +166,7 @@ function resolveTsConfigForRunCommandsTarget(workspaceRoot, sourceProject, targe
169
166
  const resolved = (0, path_1.isAbsolute)(commandTsConfig)
170
167
  ? commandTsConfig
171
168
  : (0, path_1.join)(cwdAbsolute, commandTsConfig);
172
- if ((0, fileutils_1.fileExists)(resolved))
169
+ if ((0, internal_1.fileExists)(resolved))
173
170
  return resolved;
174
171
  }
175
172
  // Preserves prior behavior when the tsconfig can't be determined from the command.
@@ -3,16 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createGlobPatternsForDependencies = createGlobPatternsForDependencies;
4
4
  const tslib_1 = require("tslib");
5
5
  const devkit_1 = require("@nx/devkit");
6
- const workspace_root_1 = require("nx/src/utils/workspace-root");
7
6
  const path_1 = require("path");
8
- const project_graph_1 = require("nx/src/project-graph/project-graph");
9
- const project_graph_utils_1 = require("nx/src/utils/project-graph-utils");
10
7
  const fs_1 = require("fs");
11
8
  const ignore_1 = tslib_1.__importDefault(require("ignore"));
12
- const find_project_for_path_1 = require("nx/src/project-graph/utils/find-project-for-path");
9
+ const internal_1 = require("@nx/devkit/internal");
13
10
  function configureIgnore() {
14
11
  let ig;
15
- const pathToGitIgnore = (0, path_1.join)(workspace_root_1.workspaceRoot, '.gitignore');
12
+ const pathToGitIgnore = (0, path_1.join)(devkit_1.workspaceRoot, '.gitignore');
16
13
  if ((0, fs_1.existsSync)(pathToGitIgnore)) {
17
14
  ig = (0, ignore_1.default)();
18
15
  ig.add((0, fs_1.readFileSync)(pathToGitIgnore, { encoding: 'utf-8' }));
@@ -26,13 +23,13 @@ function configureIgnore() {
26
23
  */
27
24
  function createGlobPatternsForDependencies(dirPath, fileGlobPattern) {
28
25
  let ig = configureIgnore();
29
- const filenameRelativeToWorkspaceRoot = (0, devkit_1.normalizePath)((0, path_1.relative)(workspace_root_1.workspaceRoot, dirPath));
30
- const projectGraph = (0, project_graph_1.readCachedProjectGraph)();
31
- const projectRootMappings = (0, find_project_for_path_1.createProjectRootMappings)(projectGraph.nodes);
26
+ const filenameRelativeToWorkspaceRoot = (0, devkit_1.normalizePath)((0, path_1.relative)(devkit_1.workspaceRoot, dirPath));
27
+ const projectGraph = (0, devkit_1.readCachedProjectGraph)();
28
+ const projectRootMappings = (0, internal_1.createProjectRootMappings)(projectGraph.nodes);
32
29
  // find the project
33
30
  let projectName;
34
31
  try {
35
- projectName = (0, find_project_for_path_1.findProjectForPath)(filenameRelativeToWorkspaceRoot, projectRootMappings);
32
+ projectName = (0, internal_1.findProjectForPath)(filenameRelativeToWorkspaceRoot, projectRootMappings);
36
33
  if (!projectName) {
37
34
  throw new Error(`createGlobPatternsForDependencies: Could not find any project containing the file "${filenameRelativeToWorkspaceRoot}" among it's project files`);
38
35
  }
@@ -42,17 +39,17 @@ function createGlobPatternsForDependencies(dirPath, fileGlobPattern) {
42
39
  }
43
40
  // generate the glob
44
41
  try {
45
- const [projectDirs, warnings] = (0, project_graph_utils_1.getSourceDirOfDependentProjects)(projectName, projectGraph);
42
+ const [projectDirs, warnings] = (0, internal_1.getSourceDirOfDependentProjects)(projectName, projectGraph);
46
43
  const dirsToUse = [];
47
44
  const recursiveScanDirs = (dirPath) => {
48
- const children = (0, fs_1.readdirSync)((0, path_1.resolve)(workspace_root_1.workspaceRoot, dirPath));
45
+ const children = (0, fs_1.readdirSync)((0, path_1.resolve)(devkit_1.workspaceRoot, dirPath));
49
46
  for (const child of children) {
50
47
  const childPath = (0, path_1.join)(dirPath, child);
51
48
  if (ig?.ignores(childPath) ||
52
- !(0, fs_1.lstatSync)((0, path_1.resolve)(workspace_root_1.workspaceRoot, childPath)).isDirectory()) {
49
+ !(0, fs_1.lstatSync)((0, path_1.resolve)(devkit_1.workspaceRoot, childPath)).isDirectory()) {
53
50
  continue;
54
51
  }
55
- if ((0, fs_1.existsSync)((0, path_1.join)(workspace_root_1.workspaceRoot, childPath, 'ng-package.json'))) {
52
+ if ((0, fs_1.existsSync)((0, path_1.join)(devkit_1.workspaceRoot, childPath, 'ng-package.json'))) {
56
53
  dirsToUse.push(childPath);
57
54
  }
58
55
  else {
@@ -72,7 +69,7 @@ ${warnings.join('\n- ')}\n
72
69
  due to missing "sourceRoot" in the dependencies' project configuration
73
70
  `);
74
71
  }
75
- return dirsToUse.map((sourceDir) => (0, path_1.resolve)(workspace_root_1.workspaceRoot, (0, devkit_1.joinPathFragments)(sourceDir, fileGlobPattern)));
72
+ return dirsToUse.map((sourceDir) => (0, path_1.resolve)(devkit_1.workspaceRoot, (0, devkit_1.joinPathFragments)(sourceDir, fileGlobPattern)));
76
73
  }
77
74
  catch (e) {
78
75
  throw new Error(`createGlobPatternsForDependencies: Error when generating globs.\n${e?.message}`);
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRelativeDirectoryToProjectRoot = getRelativeDirectoryToProjectRoot;
4
4
  const path_1 = require("path");
5
- const path_2 = require("nx/src/utils/path");
5
+ const devkit_1 = require("@nx/devkit");
6
6
  function getRelativeDirectoryToProjectRoot(file, projectRoot) {
7
7
  const dir = (0, path_1.dirname)(file);
8
- const relativeDir = (0, path_2.normalizePath)((0, path_1.relative)(projectRoot, dir));
8
+ const relativeDir = (0, devkit_1.normalizePath)((0, path_1.relative)(projectRoot, dir));
9
9
  return relativeDir === '' ? `./` : `./${relativeDir}/`;
10
10
  }