@nx/next 23.0.0-beta.17 → 23.0.0-beta.19

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/next",
3
- "version": "23.0.0-beta.17",
3
+ "version": "23.0.0-beta.19",
4
4
  "private": false,
5
5
  "description": "The Next.js plugin for Nx contains executors and generators for managing Next.js applications and libraries within an Nx workspace. It provides:\n\n\n- Scaffolding for creating, building, serving, linting, and testing Next.js applications.\n\n- Integration with building, serving, and exporting a Next.js application.\n\n- Integration with React libraries within the workspace. \n\nWhen using Next.js in Nx, you get the out-of-the-box support for TypeScript, Playwright, Cypress, and Jest. No need to configure anything: watch mode, source maps, and typings just work.",
6
6
  "repository": {
@@ -36,7 +36,7 @@
36
36
  "next": ">=14.0.0 <17.0.0"
37
37
  },
38
38
  "dependencies": {
39
- "@nx/devkit": "23.0.0-beta.17",
39
+ "@nx/devkit": "23.0.0-beta.19",
40
40
  "@babel/plugin-proposal-decorators": "^7.22.7",
41
41
  "@svgr/webpack": "^8.0.1",
42
42
  "copy-webpack-plugin": "^14.0.0",
@@ -44,17 +44,17 @@
44
44
  "semver": "^7.6.3",
45
45
  "tslib": "^2.3.0",
46
46
  "webpack-merge": "^5.8.0",
47
- "@nx/js": "23.0.0-beta.17",
48
- "@nx/eslint": "23.0.0-beta.17",
49
- "@nx/react": "23.0.0-beta.17",
50
- "@nx/web": "23.0.0-beta.17",
51
- "@nx/webpack": "23.0.0-beta.17",
47
+ "@nx/js": "23.0.0-beta.19",
48
+ "@nx/eslint": "23.0.0-beta.19",
49
+ "@nx/react": "23.0.0-beta.19",
50
+ "@nx/web": "23.0.0-beta.19",
51
+ "@nx/webpack": "23.0.0-beta.19",
52
52
  "@phenomnomnominal/tsquery": "~6.2.0"
53
53
  },
54
54
  "devDependencies": {
55
- "@nx/cypress": "23.0.0-beta.17",
56
- "@nx/playwright": "23.0.0-beta.17",
57
- "nx": "23.0.0-beta.17"
55
+ "@nx/cypress": "23.0.0-beta.19",
56
+ "@nx/playwright": "23.0.0-beta.19",
57
+ "nx": "23.0.0-beta.19"
58
58
  },
59
59
  "publishConfig": {
60
60
  "access": "public"
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.nxComponentTestingPreset = nxComponentTestingPreset;
4
4
  const cypress_preset_1 = require("@nx/cypress/plugins/cypress-preset");
5
- const ct_helpers_1 = require("@nx/cypress/src/utils/ct-helpers");
5
+ const internal_1 = require("@nx/cypress/internal");
6
6
  const devkit_1 = require("@nx/devkit");
7
- const internal_1 = require("@nx/js/internal");
7
+ const internal_2 = require("@nx/js/internal");
8
8
  const react_1 = require("@nx/react");
9
9
  const webpack_1 = require("@nx/webpack");
10
10
  const configuration_1 = require("nx/src/config/configuration");
@@ -16,10 +16,10 @@ function nxComponentTestingPreset(pathToConfig, options) {
16
16
  return (0, cypress_preset_1.nxBaseCypressPreset)(pathToConfig);
17
17
  }
18
18
  const graph = (0, devkit_1.readCachedProjectGraph)();
19
- const { targets: ctTargets, name: ctProjectName } = (0, ct_helpers_1.getProjectConfigByPath)(graph, pathToConfig);
19
+ const { targets: ctTargets, name: ctProjectName } = (0, internal_1.getProjectConfigByPath)(graph, pathToConfig);
20
20
  const ctTargetName = options?.ctTargetName || 'component-test';
21
21
  const ctConfigurationName = process.env.NX_CYPRESS_TARGET_CONFIGURATION;
22
- const ctExecutorContext = (0, ct_helpers_1.createExecutorContext)(graph, ctTargets, ctProjectName, ctTargetName, ctConfigurationName);
22
+ const ctExecutorContext = (0, internal_1.createExecutorContext)(graph, ctTargets, ctProjectName, ctTargetName, ctConfigurationName);
23
23
  let buildTarget = options?.buildTarget;
24
24
  if (!buildTarget) {
25
25
  const ctExecutorOptions = (0, devkit_1.readTargetOptions)({
@@ -50,7 +50,7 @@ function nxComponentTestingPreset(pathToConfig, options) {
50
50
  ]}' project is not using the '@nx/next:build' executor. ` +
51
51
  `Please make sure to use '@nx/next:build' executor in that target to use Cypress Component Testing.`);
52
52
  }
53
- const buildExecutorContext = (0, ct_helpers_1.createExecutorContext)(graph, buildProjectConfig.targets, parsedBuildTarget.project, parsedBuildTarget.target, parsedBuildTarget.configuration);
53
+ const buildExecutorContext = (0, internal_1.createExecutorContext)(graph, buildProjectConfig.targets, parsedBuildTarget.project, parsedBuildTarget.target, parsedBuildTarget.configuration);
54
54
  const buildExecutorOptions = (0, devkit_1.readTargetOptions)({
55
55
  project: parsedBuildTarget.project,
56
56
  target: parsedBuildTarget.target,
@@ -69,7 +69,7 @@ Able to find CT project, ${!!ctProjectConfig}.`);
69
69
  const webpackOptions = {
70
70
  root: ctExecutorContext.root,
71
71
  projectRoot: ctProjectConfig.root,
72
- sourceRoot: (0, internal_1.getProjectSourceRoot)(ctProjectConfig),
72
+ sourceRoot: (0, internal_2.getProjectSourceRoot)(ctProjectConfig),
73
73
  main: '',
74
74
  useTsconfigPaths: undefined,
75
75
  fileReplacements: buildFileReplacements,
@@ -80,8 +80,8 @@ async function cypressComponentConfigurationInternal(tree, options) {
80
80
  return (0, devkit_1.runTasksInSerial)(...tasks);
81
81
  }
82
82
  async function addFiles(tree, projectConfig, opts) {
83
- const { addMountDefinition, addDefaultCTConfig } = await Promise.resolve().then(() => __importStar(require('@nx/cypress/src/utils/config')));
84
- const { getInstalledCypressMajorVersion } = await Promise.resolve().then(() => __importStar(require('@nx/cypress/src/utils/versions')));
83
+ const { addMountDefinition, addDefaultCTConfig } = await Promise.resolve().then(() => __importStar(require('@nx/cypress/internal')));
84
+ const { getInstalledCypressMajorVersion } = await Promise.resolve().then(() => __importStar(require('@nx/cypress/internal')));
85
85
  const installedCypressMajorVersion = getInstalledCypressMajorVersion(tree);
86
86
  const ctFile = (0, devkit_1.joinPathFragments)(projectConfig.root, 'cypress', 'support', 'component.ts');
87
87
  const updatedCommandFile = await addMountDefinition(tree.read(ctFile, 'utf-8'));
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/next/src/plugins/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,kBAAkB,EAGlB,aAAa,EAKd,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAMD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAEhC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,iBAAiB,CA+BxD,CAAC;AAEF,eAAO,MAAM,aAAa,kCAAc,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../../packages/next/src/plugins/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,kBAAkB,EAIlB,aAAa,EAKd,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAMD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAEhC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,iBAAiB,CA6DxD,CAAC;AAEF,eAAO,MAAM,aAAa,kCAAc,CAAC"}
@@ -27,8 +27,29 @@ exports.createNodes = [
27
27
  const packageManager = (0, devkit_1.detectPackageManager)(context.workspaceRoot);
28
28
  const pmc = (0, devkit_1.getPackageManagerCommand)(packageManager);
29
29
  const lockFileName = (0, js_1.getLockFileName)(packageManager);
30
+ const normalizedOptions = normalizeOptions(options);
30
31
  try {
31
- return await (0, devkit_1.createNodesFromFiles)((configFile, options, context) => createNodesInternal(configFile, options, context, targetsCache, isTsSolutionSetup, pmc, lockFileName), configFiles, options, context);
32
+ const { entries, preErrors } = await filterNextConfigs(configFiles, context);
33
+ const projectHashes = await (0, internal_1.calculateHashesForCreateNodes)(entries.map((e) => e.projectRoot), normalizedOptions, context, entries.map(() => [lockFileName]));
34
+ let results = [];
35
+ let nodeErrors = [];
36
+ try {
37
+ results = await (0, devkit_1.createNodesFromFiles)((configFile, _, ctx, idx) => createNodesInternal(configFile, normalizedOptions, ctx, targetsCache, isTsSolutionSetup, pmc, projectHashes[idx]), entries.map((e) => e.configFile), options, context);
38
+ }
39
+ catch (e) {
40
+ if (e instanceof devkit_1.AggregateCreateNodesError) {
41
+ results = e.partialResults ?? [];
42
+ nodeErrors = e.errors;
43
+ }
44
+ else {
45
+ throw e;
46
+ }
47
+ }
48
+ const allErrors = [...preErrors, ...nodeErrors];
49
+ if (allErrors.length > 0) {
50
+ throw new devkit_1.AggregateCreateNodesError(allErrors, results);
51
+ }
52
+ return results;
32
53
  }
33
54
  finally {
34
55
  targetsCache.writeToDisk();
@@ -36,16 +57,8 @@ exports.createNodes = [
36
57
  },
37
58
  ];
38
59
  exports.createNodesV2 = exports.createNodes;
39
- async function createNodesInternal(configFilePath, options, context, targetsCache, isTsSolutionSetup, pmc, lockFileName) {
60
+ async function createNodesInternal(configFilePath, options, context, targetsCache, isTsSolutionSetup, pmc, hash) {
40
61
  const projectRoot = (0, path_1.dirname)(configFilePath);
41
- // Do not create a project if package.json and project.json isn't there.
42
- const siblingFiles = (0, fs_1.readdirSync)((0, path_1.join)(context.workspaceRoot, projectRoot));
43
- if (!siblingFiles.includes('package.json') &&
44
- !siblingFiles.includes('project.json')) {
45
- return {};
46
- }
47
- options = normalizeOptions(options);
48
- const hash = await (0, internal_1.calculateHashForCreateNodes)(projectRoot, options, context, [lockFileName]);
49
62
  if (!targetsCache.has(hash)) {
50
63
  targetsCache.set(hash, await buildNextTargets(configFilePath, projectRoot, options, context, isTsSolutionSetup, pmc));
51
64
  }
@@ -140,6 +153,28 @@ function getNextConfig(configFilePath, context) {
140
153
  const resolvedPath = (0, path_1.join)(context.workspaceRoot, configFilePath);
141
154
  return (0, internal_1.loadConfigFile)(resolvedPath);
142
155
  }
156
+ async function filterNextConfigs(configFiles, context) {
157
+ const preErrors = [];
158
+ const candidates = await Promise.all(configFiles.map(async (configFile) => {
159
+ try {
160
+ const projectRoot = (0, path_1.dirname)(configFile);
161
+ const siblingFiles = (0, fs_1.readdirSync)((0, path_1.join)(context.workspaceRoot, projectRoot));
162
+ if (!siblingFiles.includes('package.json') &&
163
+ !siblingFiles.includes('project.json')) {
164
+ return null;
165
+ }
166
+ return { configFile, projectRoot };
167
+ }
168
+ catch (e) {
169
+ preErrors.push([configFile, e]);
170
+ return null;
171
+ }
172
+ }));
173
+ return {
174
+ entries: candidates.filter((c) => c !== null),
175
+ preErrors,
176
+ };
177
+ }
143
178
  function normalizeOptions(options) {
144
179
  options ??= {};
145
180
  options.buildTargetName ??= 'build';