@nx/angular 24.0.0-beta.2 → 24.0.0-beta.3

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 (187) hide show
  1. package/dist/executors.d.ts +0 -2
  2. package/dist/executors.js +0 -2
  3. package/dist/generators.d.ts +0 -4
  4. package/dist/generators.js +0 -4
  5. package/dist/src/generators/add-linting/add-linting.js +0 -2
  6. package/dist/src/generators/add-linting/schema.d.ts +0 -1
  7. package/dist/src/generators/application/application.js +1 -2
  8. package/dist/src/generators/application/lib/add-e2e.js +0 -6
  9. package/dist/src/generators/application/lib/add-linting.js +0 -1
  10. package/dist/src/generators/application/lib/add-unit-test-runner.js +0 -2
  11. package/dist/src/generators/application/lib/normalize-options.d.ts +1 -1
  12. package/dist/src/generators/application/lib/normalize-options.js +1 -8
  13. package/dist/src/generators/application/schema.d.ts +0 -1
  14. package/dist/src/generators/application/schema.json +1 -1
  15. package/dist/src/generators/convert-to-rspack/convert-to-rspack.js +3 -4
  16. package/dist/src/generators/convert-to-rspack/lib/get-custom-webpack-config.d.ts +1 -2
  17. package/dist/src/generators/convert-to-rspack/lib/get-custom-webpack-config.js +0 -63
  18. package/dist/src/generators/convert-to-rspack/lib/validate-no-module-federation.d.ts +2 -0
  19. package/dist/src/generators/convert-to-rspack/lib/validate-no-module-federation.js +32 -0
  20. package/dist/src/generators/cypress-component-configuration/cypress-component-configuration.js +3 -15
  21. package/dist/src/generators/init/init.js +1 -2
  22. package/dist/src/generators/init/schema.d.ts +0 -2
  23. package/dist/src/generators/library/schema.d.ts +0 -1
  24. package/dist/src/generators/ng-add/migrators/builders/angular-eslint-lint.migrator.js +12 -1
  25. package/dist/src/generators/ng-add/migrators/projects/e2e.migrator.js +12 -16
  26. package/dist/src/generators/ng-add/utilities/workspace.js +1 -3
  27. package/dist/src/generators/storybook-configuration/lib/generate-storybook-configuration.js +0 -2
  28. package/dist/src/generators/utils/add-jest.d.ts +0 -1
  29. package/dist/src/generators/utils/add-jest.js +0 -2
  30. package/dist/src/generators/utils/add-vitest.d.ts +0 -1
  31. package/dist/src/generators/utils/add-vitest.js +0 -1
  32. package/dist/src/generators/utils/testing.d.ts +0 -4
  33. package/dist/src/generators/utils/testing.js +0 -12
  34. package/dist/src/utils/backward-compatible-versions.js +0 -8
  35. package/dist/src/utils/versions.d.ts +0 -4
  36. package/dist/src/utils/versions.js +1 -5
  37. package/executors.json +0 -10
  38. package/generators.json +0 -35
  39. package/package.json +11 -20
  40. package/dist/.npmignore +0 -2
  41. package/dist/fesm2022/nx-angular-mf.mjs +0 -193
  42. package/dist/fesm2022/nx-angular-mf.mjs.map +0 -1
  43. package/dist/mf/package.json +0 -4
  44. package/dist/src/builders/utilities/module-federation.d.ts +0 -11
  45. package/dist/src/builders/utilities/module-federation.js +0 -109
  46. package/dist/src/executors/module-federation-dev-server/lib/index.d.ts +0 -2
  47. package/dist/src/executors/module-federation-dev-server/lib/index.js +0 -5
  48. package/dist/src/executors/module-federation-dev-server/lib/normalize-options.d.ts +0 -2
  49. package/dist/src/executors/module-federation-dev-server/lib/normalize-options.js +0 -22
  50. package/dist/src/executors/module-federation-dev-server/lib/start-dev-remotes.d.ts +0 -5
  51. package/dist/src/executors/module-federation-dev-server/lib/start-dev-remotes.js +0 -29
  52. package/dist/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts +0 -4
  53. package/dist/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +0 -111
  54. package/dist/src/executors/module-federation-dev-server/schema.d.ts +0 -38
  55. package/dist/src/executors/module-federation-dev-server/schema.json +0 -171
  56. package/dist/src/executors/module-federation-ssr-dev-server/lib/normalize-options.d.ts +0 -2
  57. package/dist/src/executors/module-federation-ssr-dev-server/lib/normalize-options.js +0 -20
  58. package/dist/src/executors/module-federation-ssr-dev-server/lib/start-dev-remotes.d.ts +0 -5
  59. package/dist/src/executors/module-federation-ssr-dev-server/lib/start-dev-remotes.js +0 -30
  60. package/dist/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.d.ts +0 -4
  61. package/dist/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +0 -110
  62. package/dist/src/executors/module-federation-ssr-dev-server/schema.d.ts +0 -17
  63. package/dist/src/executors/module-federation-ssr-dev-server/schema.json +0 -124
  64. package/dist/src/generators/convert-to-with-mf/convert-to-with-mf.d.ts +0 -4
  65. package/dist/src/generators/convert-to-with-mf/convert-to-with-mf.js +0 -36
  66. package/dist/src/generators/convert-to-with-mf/convert-to-with-mf.test-data.d.ts +0 -5
  67. package/dist/src/generators/convert-to-with-mf/convert-to-with-mf.test-data.js +0 -448
  68. package/dist/src/generators/convert-to-with-mf/lib/check-name-matches.d.ts +0 -2
  69. package/dist/src/generators/convert-to-with-mf/lib/check-name-matches.js +0 -22
  70. package/dist/src/generators/convert-to-with-mf/lib/check-shared-npm-packages.d.ts +0 -2
  71. package/dist/src/generators/convert-to-with-mf/lib/check-shared-npm-packages.js +0 -45
  72. package/dist/src/generators/convert-to-with-mf/lib/get-webpack-config-path.d.ts +0 -2
  73. package/dist/src/generators/convert-to-with-mf/lib/get-webpack-config-path.js +0 -18
  74. package/dist/src/generators/convert-to-with-mf/lib/index.d.ts +0 -6
  75. package/dist/src/generators/convert-to-with-mf/lib/index.js +0 -9
  76. package/dist/src/generators/convert-to-with-mf/lib/is-host-remote-config.d.ts +0 -5
  77. package/dist/src/generators/convert-to-with-mf/lib/is-host-remote-config.js +0 -57
  78. package/dist/src/generators/convert-to-with-mf/lib/parse-ast-webpack-config.d.ts +0 -2
  79. package/dist/src/generators/convert-to-with-mf/lib/parse-ast-webpack-config.js +0 -13
  80. package/dist/src/generators/convert-to-with-mf/lib/write-new-webpack-config.d.ts +0 -3
  81. package/dist/src/generators/convert-to-with-mf/lib/write-new-webpack-config.js +0 -50
  82. package/dist/src/generators/convert-to-with-mf/schema.d.ts +0 -4
  83. package/dist/src/generators/convert-to-with-mf/schema.json +0 -33
  84. package/dist/src/generators/federate-module/federate-module.d.ts +0 -4
  85. package/dist/src/generators/federate-module/federate-module.js +0 -49
  86. package/dist/src/generators/federate-module/lib/add-file-to-remote-tsconfig.d.ts +0 -2
  87. package/dist/src/generators/federate-module/lib/add-file-to-remote-tsconfig.js +0 -14
  88. package/dist/src/generators/federate-module/lib/add-path-to-exposes.d.ts +0 -8
  89. package/dist/src/generators/federate-module/lib/add-path-to-exposes.js +0 -77
  90. package/dist/src/generators/federate-module/lib/add-path-to-ts-config.d.ts +0 -8
  91. package/dist/src/generators/federate-module/lib/add-path-to-ts-config.js +0 -11
  92. package/dist/src/generators/federate-module/lib/add-remote.d.ts +0 -7
  93. package/dist/src/generators/federate-module/lib/add-remote.js +0 -42
  94. package/dist/src/generators/federate-module/lib/check-remote-exists.d.ts +0 -2
  95. package/dist/src/generators/federate-module/lib/check-remote-exists.js +0 -21
  96. package/dist/src/generators/federate-module/lib/index.d.ts +0 -4
  97. package/dist/src/generators/federate-module/lib/index.js +0 -7
  98. package/dist/src/generators/federate-module/schema.d.ts +0 -13
  99. package/dist/src/generators/federate-module/schema.json +0 -83
  100. package/dist/src/generators/host/files/common/src/main.server.ts__tmpl__ +0 -78
  101. package/dist/src/generators/host/files/js/webpack.server.config.js__tmpl__ +0 -8
  102. package/dist/src/generators/host/files/ts/webpack.server.config.ts__tmpl__ +0 -9
  103. package/dist/src/generators/host/host.d.ts +0 -4
  104. package/dist/src/generators/host/host.js +0 -133
  105. package/dist/src/generators/host/lib/index.d.ts +0 -2
  106. package/dist/src/generators/host/lib/index.js +0 -5
  107. package/dist/src/generators/host/lib/update-ssr-setup.d.ts +0 -3
  108. package/dist/src/generators/host/lib/update-ssr-setup.js +0 -54
  109. package/dist/src/generators/host/lib/validate-options.d.ts +0 -3
  110. package/dist/src/generators/host/lib/validate-options.js +0 -12
  111. package/dist/src/generators/host/schema.d.ts +0 -36
  112. package/dist/src/generators/host/schema.json +0 -195
  113. package/dist/src/generators/remote/files/base/webpack.server.config.js__tmpl__ +0 -9
  114. package/dist/src/generators/remote/files/base-ts/webpack.server.config.ts__tmpl__ +0 -9
  115. package/dist/src/generators/remote/files/common/src/main.server.ts__tmpl__ +0 -84
  116. package/dist/src/generators/remote/files/standalone/src/bootstrap.server.ts__tmpl__ +0 -12
  117. package/dist/src/generators/remote/lib/find-next-available-port.d.ts +0 -2
  118. package/dist/src/generators/remote/lib/find-next-available-port.js +0 -16
  119. package/dist/src/generators/remote/lib/index.d.ts +0 -3
  120. package/dist/src/generators/remote/lib/index.js +0 -6
  121. package/dist/src/generators/remote/lib/update-ssr-setup.d.ts +0 -9
  122. package/dist/src/generators/remote/lib/update-ssr-setup.js +0 -82
  123. package/dist/src/generators/remote/lib/validate-options.d.ts +0 -3
  124. package/dist/src/generators/remote/lib/validate-options.js +0 -12
  125. package/dist/src/generators/remote/remote.d.ts +0 -4
  126. package/dist/src/generators/remote/remote.js +0 -114
  127. package/dist/src/generators/remote/schema.d.ts +0 -34
  128. package/dist/src/generators/remote/schema.json +0 -184
  129. package/dist/src/generators/setup-mf/files/entry-module-files/__entryModuleFileName__.ts__tmpl__ +0 -18
  130. package/dist/src/generators/setup-mf/files/entry-module-files/entry.routes.ts__tmpl__ +0 -4
  131. package/dist/src/generators/setup-mf/files/entry-module-files/entry__componentFileSuffix__.ts__tmpl__ +0 -10
  132. package/dist/src/generators/setup-mf/files/host-files/__appFileName__.spec.ts__tmpl__ +0 -42
  133. package/dist/src/generators/setup-mf/files/standalone-entry-component-files/entry.routes.ts__tmpl__ +0 -4
  134. package/dist/src/generators/setup-mf/files/standalone-entry-component-files/entry__componentFileSuffix__.ts__tmpl__ +0 -11
  135. package/dist/src/generators/setup-mf/files/ts-webpack/module-federation.config.ts__tmpl__ +0 -27
  136. package/dist/src/generators/setup-mf/files/ts-webpack/tsconfig.lint.json__tmpl__ +0 -12
  137. package/dist/src/generators/setup-mf/files/ts-webpack/webpack.config.ts__tmpl__ +0 -9
  138. package/dist/src/generators/setup-mf/files/ts-webpack/webpack.prod.config.ts__tmpl__ +0 -21
  139. package/dist/src/generators/setup-mf/files/webpack/module-federation.config.js__tmpl__ +0 -23
  140. package/dist/src/generators/setup-mf/files/webpack/webpack.config.js__tmpl__ +0 -9
  141. package/dist/src/generators/setup-mf/files/webpack/webpack.prod.config.js__tmpl__ +0 -21
  142. package/dist/src/generators/setup-mf/lib/add-cypress-workaround.d.ts +0 -3
  143. package/dist/src/generators/setup-mf/lib/add-cypress-workaround.js +0 -52
  144. package/dist/src/generators/setup-mf/lib/add-remote-entry.d.ts +0 -3
  145. package/dist/src/generators/setup-mf/lib/add-remote-entry.js +0 -27
  146. package/dist/src/generators/setup-mf/lib/add-remote-to-host.d.ts +0 -9
  147. package/dist/src/generators/setup-mf/lib/add-remote-to-host.js +0 -127
  148. package/dist/src/generators/setup-mf/lib/change-build-target.d.ts +0 -3
  149. package/dist/src/generators/setup-mf/lib/change-build-target.js +0 -24
  150. package/dist/src/generators/setup-mf/lib/fix-bootstrap.d.ts +0 -3
  151. package/dist/src/generators/setup-mf/lib/fix-bootstrap.js +0 -40
  152. package/dist/src/generators/setup-mf/lib/generate-config.d.ts +0 -6
  153. package/dist/src/generators/setup-mf/lib/generate-config.js +0 -32
  154. package/dist/src/generators/setup-mf/lib/get-remotes-with-ports.d.ts +0 -6
  155. package/dist/src/generators/setup-mf/lib/get-remotes-with-ports.js +0 -20
  156. package/dist/src/generators/setup-mf/lib/index.d.ts +0 -15
  157. package/dist/src/generators/setup-mf/lib/index.js +0 -18
  158. package/dist/src/generators/setup-mf/lib/move-angular-plugin-to-dependencies.d.ts +0 -2
  159. package/dist/src/generators/setup-mf/lib/move-angular-plugin-to-dependencies.js +0 -15
  160. package/dist/src/generators/setup-mf/lib/normalize-options.d.ts +0 -3
  161. package/dist/src/generators/setup-mf/lib/normalize-options.js +0 -26
  162. package/dist/src/generators/setup-mf/lib/remove-dead-code-from-remote.d.ts +0 -3
  163. package/dist/src/generators/setup-mf/lib/remove-dead-code-from-remote.js +0 -61
  164. package/dist/src/generators/setup-mf/lib/setup-host-if-dynamic.d.ts +0 -3
  165. package/dist/src/generators/setup-mf/lib/setup-host-if-dynamic.js +0 -20
  166. package/dist/src/generators/setup-mf/lib/setup-serve-target.d.ts +0 -3
  167. package/dist/src/generators/setup-mf/lib/setup-serve-target.js +0 -39
  168. package/dist/src/generators/setup-mf/lib/setup-tspath-for-remote.d.ts +0 -3
  169. package/dist/src/generators/setup-mf/lib/setup-tspath-for-remote.js +0 -15
  170. package/dist/src/generators/setup-mf/lib/update-host-app-routes.d.ts +0 -3
  171. package/dist/src/generators/setup-mf/lib/update-host-app-routes.js +0 -39
  172. package/dist/src/generators/setup-mf/lib/update-tsconfig.d.ts +0 -3
  173. package/dist/src/generators/setup-mf/lib/update-tsconfig.js +0 -18
  174. package/dist/src/generators/setup-mf/schema.d.ts +0 -35
  175. package/dist/src/generators/setup-mf/schema.json +0 -99
  176. package/dist/src/generators/setup-mf/setup-mf.d.ts +0 -4
  177. package/dist/src/generators/setup-mf/setup-mf.js +0 -90
  178. package/dist/src/generators/utils/add-mf-env-to-inputs.d.ts +0 -2
  179. package/dist/src/generators/utils/add-mf-env-to-inputs.js +0 -36
  180. package/dist/src/generators/utils/assert-mf-utils.d.ts +0 -1
  181. package/dist/src/generators/utils/assert-mf-utils.js +0 -8
  182. package/dist/src/utils/get-mf-projects.d.ts +0 -4
  183. package/dist/src/utils/get-mf-projects.js +0 -31
  184. package/dist/src/utils/module-federation-deprecation.d.ts +0 -4
  185. package/dist/src/utils/module-federation-deprecation.js +0 -29
  186. package/dist/types/nx-angular-mf.d.ts +0 -72
  187. package/dist/types/nx-angular-mf.d.ts.map +0 -1
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkSharedNpmPackagesMatchExpected = checkSharedNpmPackagesMatchExpected;
4
- const internal_1 = require("@nx/js/internal");
5
- function checkSharedNpmPackagesMatchExpected(sourceFile) {
6
- (0, internal_1.ensureTypescript)();
7
- const { query } = require('@phenomnomnominal/tsquery');
8
- const SHARE_HELPER_SELECTOR = 'PropertyAssignment:has(Identifier[name=shared]) > CallExpression:has(Identifier[name=share])';
9
- const SHARED_PACKAGE_CONFIG_SELECTOR = 'ObjectLiteralExpression > PropertyAssignment > ObjectLiteralExpression';
10
- const shareHelperNodes = query(sourceFile, SHARE_HELPER_SELECTOR);
11
- let sharedPackageConfigNodes;
12
- let settingsToMatch = [];
13
- if (shareHelperNodes.length === 0) {
14
- // if we arent sharing using share helper, check for standard object sharing syntax
15
- const SHARED_OBJECT_SELECTOR = 'PropertyAssignment:has(Identifier[name=shared]) > ObjectLiteralExpression';
16
- const sharedObjectNodes = query(sourceFile, SHARED_OBJECT_SELECTOR);
17
- if (sharedObjectNodes.length === 0) {
18
- // nothing is being shared, we're safe to continue
19
- return true;
20
- }
21
- sharedPackageConfigNodes = query(sourceFile, `${SHARED_OBJECT_SELECTOR} ${SHARED_PACKAGE_CONFIG_SELECTOR}`);
22
- settingsToMatch = [`singleton: true`, `strictVersion: true`];
23
- }
24
- else {
25
- sharedPackageConfigNodes = query(sourceFile, `${SHARE_HELPER_SELECTOR} ${SHARED_PACKAGE_CONFIG_SELECTOR}`);
26
- settingsToMatch = [
27
- `singleton: true`,
28
- `strictVersion: true`,
29
- `requiredVersion: 'auto'`,
30
- ];
31
- }
32
- if (sharedPackageConfigNodes.length === 0) {
33
- // we arent sharing configs with the share helper, so we can safely continue
34
- return true;
35
- }
36
- let packagesMatch = true;
37
- for (const configNode of sharedPackageConfigNodes) {
38
- const configText = configNode.getText();
39
- packagesMatch = settingsToMatch.every((setting) => configText.includes(setting));
40
- if (!packagesMatch) {
41
- break;
42
- }
43
- }
44
- return packagesMatch;
45
- }
@@ -1,2 +0,0 @@
1
- import type { ProjectConfiguration } from '@nx/devkit';
2
- export declare function getWebpackConfigPath(project: ProjectConfiguration, projectName: string): string;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getWebpackConfigPath = getWebpackConfigPath;
4
- function getWebpackConfigPath(project, projectName) {
5
- let pathToWebpackConfig = '';
6
- for (const target of Object.values(project.targets ?? {})) {
7
- if ((target.executor === '@nx/angular:webpack-browser' ||
8
- target.executor === '@nrwl/angular:webpack-browser') &&
9
- target.options.customWebpackConfig?.path) {
10
- pathToWebpackConfig = target.options.customWebpackConfig?.path;
11
- break;
12
- }
13
- }
14
- if (!pathToWebpackConfig) {
15
- throw new Error(`Could not find webpack config for \`${projectName}\` in your workspace.`);
16
- }
17
- return pathToWebpackConfig;
18
- }
@@ -1,6 +0,0 @@
1
- export * from './check-name-matches';
2
- export * from './check-shared-npm-packages';
3
- export * from './get-webpack-config-path';
4
- export * from './is-host-remote-config';
5
- export * from './parse-ast-webpack-config';
6
- export * from './write-new-webpack-config';
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./check-name-matches"), exports);
5
- tslib_1.__exportStar(require("./check-shared-npm-packages"), exports);
6
- tslib_1.__exportStar(require("./get-webpack-config-path"), exports);
7
- tslib_1.__exportStar(require("./is-host-remote-config"), exports);
8
- tslib_1.__exportStar(require("./parse-ast-webpack-config"), exports);
9
- tslib_1.__exportStar(require("./write-new-webpack-config"), exports);
@@ -1,5 +0,0 @@
1
- import type { SourceFile } from 'typescript';
2
- export type IsHostRemoteConfigResult = 'host' | 'remote' | 'both' | false;
3
- export declare function isHostRemoteConfig(sourceFile: SourceFile): IsHostRemoteConfigResult;
4
- export declare function getRemotesFromHost(sourceFile: SourceFile): any[];
5
- export declare function getExposedModulesFromRemote(sourceFile: SourceFile): any;
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isHostRemoteConfig = isHostRemoteConfig;
4
- exports.getRemotesFromHost = getRemotesFromHost;
5
- exports.getExposedModulesFromRemote = getExposedModulesFromRemote;
6
- const internal_1 = require("@nx/js/internal");
7
- const REMOTES_EXPRESSION_SELECTOR = 'PropertyAssignment:has(Identifier[name=remotes]) > ObjectLiteralExpression';
8
- const EXPOSES_EXPRESSION_SELECTOR = 'PropertyAssignment:has(Identifier[name=exposes]) > ObjectLiteralExpression';
9
- const PROPERTY_SELECTOR = 'ObjectLiteralExpression > PropertyAssignment';
10
- function isHostRemoteConfig(sourceFile) {
11
- let isHost = false;
12
- let isRemote = false;
13
- (0, internal_1.ensureTypescript)();
14
- const { query } = require('@phenomnomnominal/tsquery');
15
- const remotesNodes = query(sourceFile, REMOTES_EXPRESSION_SELECTOR);
16
- if (remotesNodes.length > 0) {
17
- isHost = true;
18
- }
19
- const exposesNodes = query(sourceFile, EXPOSES_EXPRESSION_SELECTOR);
20
- if (exposesNodes.length > 0) {
21
- isRemote = true;
22
- }
23
- let result = isHost && isRemote ? 'both' : isHost ? 'host' : isRemote ? 'remote' : false;
24
- return result;
25
- }
26
- function getRemotesFromHost(sourceFile) {
27
- (0, internal_1.ensureTypescript)();
28
- const { query } = require('@phenomnomnominal/tsquery');
29
- const remotesObjectNodes = query(sourceFile, REMOTES_EXPRESSION_SELECTOR);
30
- if (remotesObjectNodes.length === 0) {
31
- return [];
32
- }
33
- const remotesNodes = query(remotesObjectNodes[0], PROPERTY_SELECTOR);
34
- if (remotesNodes.length === 0) {
35
- return [];
36
- }
37
- const remotes = [];
38
- for (const remoteNode of remotesNodes) {
39
- const remoteText = remoteNode.getText();
40
- const remoteParts = remoteText
41
- .split(':')
42
- .map((part) => part.trim().replace(/'/g, ''));
43
- const remoteName = remoteParts.shift();
44
- const remoteLocation = remoteParts.join(':').replace(/\/[^\/]+$/, '');
45
- remotes.push([remoteName, remoteLocation]);
46
- }
47
- return remotes;
48
- }
49
- function getExposedModulesFromRemote(sourceFile) {
50
- (0, internal_1.ensureTypescript)();
51
- const { query } = require('@phenomnomnominal/tsquery');
52
- const exposesObjectNodes = query(sourceFile, EXPOSES_EXPRESSION_SELECTOR);
53
- if (exposesObjectNodes.length === 0) {
54
- return {};
55
- }
56
- return exposesObjectNodes[0].getText();
57
- }
@@ -1,2 +0,0 @@
1
- import type { Tree } from '@nx/devkit';
2
- export declare function parseASTOfWebpackConfig(tree: Tree, pathToWebpackConfig: string): any;
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseASTOfWebpackConfig = parseASTOfWebpackConfig;
4
- const internal_1 = require("@nx/js/internal");
5
- function parseASTOfWebpackConfig(tree, pathToWebpackConfig) {
6
- if (!tree.exists(pathToWebpackConfig)) {
7
- throw new Error(`Cannot migrate webpack config at \`${pathToWebpackConfig}\` as it does not exist. Please ensure this file exists and that the path to the file is correct.`);
8
- }
9
- (0, internal_1.ensureTypescript)();
10
- const { tsquery } = require('@phenomnomnominal/tsquery');
11
- const source = tree.read(pathToWebpackConfig, 'utf-8');
12
- return tsquery.ast(source);
13
- }
@@ -1,3 +0,0 @@
1
- import type { SourceFile } from 'typescript';
2
- import { IsHostRemoteConfigResult } from './is-host-remote-config';
3
- export declare function writeNewWebpackConfig(ast: SourceFile, mfType: IsHostRemoteConfigResult, projectName: string): string[];
@@ -1,50 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.writeNewWebpackConfig = writeNewWebpackConfig;
4
- const is_host_remote_config_1 = require("./is-host-remote-config");
5
- function writeNewWebpackConfig(ast, mfType, projectName) {
6
- const webpackConfig = `const { withModuleFederation } = require('@nx/module-federation/angular');
7
- const config = require('./module-federation.config');
8
- module.exports = withModuleFederation(config);
9
- `;
10
- let mfeConfig = '';
11
- if (!mfType) {
12
- mfeConfig = `
13
- module.exports = {
14
- name: '${projectName}',
15
- };`;
16
- }
17
- else if (mfType === 'host') {
18
- const remotes = hostRemotesToString(ast);
19
- mfeConfig = `
20
- module.exports = {
21
- name: '${projectName}',
22
- remotes: ${remotes},
23
- };`;
24
- }
25
- else if (mfType === 'remote') {
26
- const exposedModules = (0, is_host_remote_config_1.getExposedModulesFromRemote)(ast);
27
- mfeConfig = `
28
- module.exports = {
29
- name: '${projectName}',
30
- exposes: ${exposedModules},
31
- };`;
32
- }
33
- else if (mfType === 'both') {
34
- const remotes = hostRemotesToString(ast);
35
- const exposedModules = (0, is_host_remote_config_1.getExposedModulesFromRemote)(ast);
36
- mfeConfig = `
37
- module.exports = {
38
- name: '${projectName}',
39
- remotes: ${remotes},
40
- exposes: ${exposedModules},
41
- };`;
42
- }
43
- return [webpackConfig, mfeConfig];
44
- }
45
- function hostRemotesToString(ast) {
46
- const remotes = (0, is_host_remote_config_1.getRemotesFromHost)(ast)
47
- .reduce((acc, remotePair) => `['${remotePair[0]}', '${remotePair[1]}'], ${acc}`, '')
48
- .trim();
49
- return `[${remotes.endsWith(',') ? remotes.slice(0, -1) : remotes}]`;
50
- }
@@ -1,4 +0,0 @@
1
- export interface Schema {
2
- project: string;
3
- skipFormat?: boolean;
4
- }
@@ -1,33 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema",
3
- "$id": "ConvertToWithMFGenerator",
4
- "cli": "nx",
5
- "title": "Convert to withModuleFederation Generator Options Schema",
6
- "type": "object",
7
- "description": "Converts an old micro frontend configuration to use the new withModuleFederation helper. It will run successfully if the following conditions are met: \n - Is either a host or remote application \n - Shared npm package configurations have not been modified \n - Name used to identify the Micro Frontend application matches the project name \n\n{% callout type=\"warning\" title=\"Overrides\" %}This generator will overwrite your webpack config. If you have additional custom configuration in your config file, it will be lost!{% /callout %}.",
8
- "additionalProperties": false,
9
- "examples": [
10
- {
11
- "command": "nx g @nx/angular:convert-to-with-mf --project mf-app",
12
- "description": "Convert a Module Federation Project using legacy webpack config to use the `withModuleFederation` helper."
13
- }
14
- ],
15
- "properties": {
16
- "project": {
17
- "type": "string",
18
- "description": "The name of the micro frontend project to migrate.",
19
- "$default": {
20
- "$source": "argv",
21
- "index": 0
22
- },
23
- "x-prompt": "What micro frontend project would you like to migrate?",
24
- "x-priority": "important"
25
- },
26
- "skipFormat": {
27
- "description": "Skip formatting files.",
28
- "type": "boolean",
29
- "default": false,
30
- "x-priority": "internal"
31
- }
32
- }
33
- }
@@ -1,4 +0,0 @@
1
- import { type Tree } from '@nx/devkit';
2
- import type { Schema } from './schema';
3
- export declare function federateModuleGenerator(tree: Tree, schema: Schema): Promise<import("@nx/devkit").GeneratorCallback>;
4
- export default federateModuleGenerator;
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.federateModuleGenerator = federateModuleGenerator;
4
- const devkit_1 = require("@nx/devkit");
5
- const assert_supported_angular_version_1 = require("../../utils/assert-supported-angular-version");
6
- const test_runners_1 = require("../../utils/test-runners");
7
- const version_utils_1 = require("../utils/version-utils");
8
- const lib_1 = require("./lib");
9
- async function federateModuleGenerator(tree, schema) {
10
- (0, assert_supported_angular_version_1.assertSupportedAngularVersion)(tree);
11
- if (!tree.exists(schema.path)) {
12
- throw new Error((0, devkit_1.stripIndents) `The "path" provided does not exist. Please verify the path is correct and pointing to a file that exists in the workspace.
13
-
14
- Path: ${schema.path}`);
15
- }
16
- schema.standalone = schema.standalone ?? true;
17
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
18
- // federate-module uses webpack/rspack bundlers, so vitest-angular is not available
19
- schema.unitTestRunner ??=
20
- angularMajorVersion >= 21
21
- ? test_runners_1.UnitTestRunner.VitestAnalog
22
- : test_runners_1.UnitTestRunner.Jest;
23
- const { tasks, projectRoot, remoteName } = await (0, lib_1.addRemote)(tree, schema);
24
- (0, lib_1.addFileToRemoteTsconfig)(tree, remoteName, schema.path);
25
- (0, lib_1.addPathToExposes)(tree, {
26
- projectPath: projectRoot,
27
- modulePath: schema.path,
28
- moduleName: schema.name,
29
- });
30
- (0, lib_1.addPathToTsConfig)(tree, {
31
- remoteName,
32
- moduleName: schema.name,
33
- pathToFile: schema.path,
34
- });
35
- if (!schema.skipFormat) {
36
- await (0, devkit_1.formatFiles)(tree);
37
- }
38
- devkit_1.logger.info(`✅️ Updated module federation config.
39
- Now you can use the module from your remote app like this:
40
-
41
- Static import:
42
- import { MyComponent } from '${remoteName}/${schema.name}';
43
-
44
- Dynamic import:
45
- import('${remoteName}/${schema.name}').then((m) => m.MyComponent);
46
- `);
47
- return (0, devkit_1.runTasksInSerial)(...tasks);
48
- }
49
- exports.default = federateModuleGenerator;
@@ -1,2 +0,0 @@
1
- import { type Tree } from '@nx/devkit';
2
- export declare function addFileToRemoteTsconfig(tree: Tree, remoteName: string, pathToExpose: string): void;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addFileToRemoteTsconfig = addFileToRemoteTsconfig;
4
- const devkit_1 = require("@nx/devkit");
5
- function addFileToRemoteTsconfig(tree, remoteName, pathToExpose) {
6
- const remote = (0, devkit_1.readProjectConfiguration)(tree, remoteName);
7
- (0, devkit_1.updateJson)(tree, remote.targets.build.options.tsConfig, (json) => ({
8
- ...json,
9
- files: [
10
- ...json.files,
11
- (0, devkit_1.joinPathFragments)((0, devkit_1.offsetFromRoot)(remote.root), pathToExpose),
12
- ],
13
- }));
14
- }
@@ -1,8 +0,0 @@
1
- import { type Tree } from '@nx/devkit';
2
- type AddPathToExposesOptions = {
3
- projectPath: string;
4
- moduleName: string;
5
- modulePath: string;
6
- };
7
- export declare function addPathToExposes(tree: Tree, { projectPath, moduleName, modulePath }: AddPathToExposesOptions): void;
8
- export {};
@@ -1,77 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addPathToExposes = addPathToExposes;
4
- const devkit_1 = require("@nx/devkit");
5
- const internal_1 = require("@nx/js/internal");
6
- let tsModule;
7
- function addPathToExposes(tree, { projectPath, moduleName, modulePath }) {
8
- const moduleFederationConfigPath = (0, devkit_1.joinPathFragments)(projectPath, tree.exists((0, devkit_1.joinPathFragments)(projectPath, 'module-federation.config.ts'))
9
- ? 'module-federation.config.ts'
10
- : 'module-federation.config.js');
11
- updateExposesProperty(tree, moduleFederationConfigPath, moduleName, modulePath);
12
- }
13
- function updateExposesProperty(tree, moduleFederationConfigPath, moduleName, modulePath) {
14
- if (!tsModule) {
15
- tsModule = (0, internal_1.ensureTypescript)();
16
- }
17
- const fileContent = tree.read(moduleFederationConfigPath, 'utf-8');
18
- const source = tsModule.createSourceFile(moduleFederationConfigPath, fileContent, tsModule.ScriptTarget.ES2015, true);
19
- const exposesObject = findExposes(source);
20
- if (!exposesObject)
21
- return;
22
- const newEntry = createObjectEntry(moduleName, modulePath);
23
- const updatedSourceFile = updateExposesPropertyinAST(source, exposesObject, newEntry);
24
- writeToConfig(tree, moduleFederationConfigPath, source, updatedSourceFile);
25
- }
26
- function findExposes(sourceFile) {
27
- if (!tsModule) {
28
- tsModule = (0, internal_1.ensureTypescript)();
29
- }
30
- let exposesObject = null;
31
- const visit = (node) => {
32
- if (tsModule.isPropertyAssignment(node) &&
33
- tsModule.isIdentifier(node.name) &&
34
- node.name.text === 'exposes' &&
35
- tsModule.isObjectLiteralExpression(node.initializer)) {
36
- exposesObject = node.initializer;
37
- }
38
- else {
39
- tsModule.forEachChild(node, visit);
40
- }
41
- };
42
- tsModule.forEachChild(sourceFile, visit);
43
- return exposesObject;
44
- }
45
- // Create a new property assignment
46
- function createObjectEntry(moduleName, modulePath) {
47
- if (!tsModule) {
48
- tsModule = (0, internal_1.ensureTypescript)();
49
- }
50
- return tsModule.factory.createPropertyAssignment(tsModule.factory.createStringLiteral(`./${moduleName}`, true), tsModule.factory.createStringLiteral(modulePath, true));
51
- }
52
- // Update the exposes property in the AST
53
- function updateExposesPropertyinAST(source, exposesObject, newEntry) {
54
- if (!tsModule) {
55
- tsModule = (0, internal_1.ensureTypescript)();
56
- }
57
- const updatedExposes = tsModule.factory.updateObjectLiteralExpression(exposesObject, [...exposesObject.properties, newEntry]);
58
- const transform = (context) => {
59
- const visit = (node) => {
60
- // Comparing nodes indirectly to ensure type compatibility. You must ensure that the nodes are identical.
61
- return tsModule.isObjectLiteralExpression(node) && node === exposesObject
62
- ? updatedExposes
63
- : tsModule.visitEachChild(node, visit, context);
64
- };
65
- return (node) => tsModule.visitNode(node, visit);
66
- };
67
- return tsModule.transform(source, [transform]).transformed[0];
68
- }
69
- // Write the updated AST to the file (module-federation.config.js)
70
- function writeToConfig(tree, filename, source, updatedSourceFile) {
71
- if (!tsModule) {
72
- tsModule = (0, internal_1.ensureTypescript)();
73
- }
74
- const printer = tsModule.createPrinter();
75
- const update = printer.printNode(tsModule.EmitHint.Unspecified, updatedSourceFile, source);
76
- tree.write(filename, update);
77
- }
@@ -1,8 +0,0 @@
1
- import { type Tree } from '@nx/devkit';
2
- type AddPathToTsConfigOptions = {
3
- remoteName: string;
4
- moduleName: string;
5
- pathToFile: string;
6
- };
7
- export declare function addPathToTsConfig(tree: Tree, { remoteName, moduleName, pathToFile }: AddPathToTsConfigOptions): void;
8
- export {};
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addPathToTsConfig = addPathToTsConfig;
4
- const devkit_1 = require("@nx/devkit");
5
- const js_1 = require("@nx/js");
6
- function addPathToTsConfig(tree, { remoteName, moduleName, pathToFile }) {
7
- const rootTsConfig = (0, devkit_1.readJson)(tree, (0, js_1.getRootTsConfigPathInTree)(tree));
8
- if (!rootTsConfig.compilerOptions?.paths[`${remoteName}/${moduleName}`]) {
9
- (0, js_1.addTsConfigPath)(tree, `${remoteName}/${moduleName}`, [pathToFile]);
10
- }
11
- }
@@ -1,7 +0,0 @@
1
- import type { GeneratorCallback, Tree } from '@nx/devkit';
2
- import { type Schema } from '../schema';
3
- export declare function addRemote(tree: Tree, schema: Schema): Promise<{
4
- tasks: GeneratorCallback[];
5
- projectRoot: any;
6
- remoteName: any;
7
- }>;
@@ -1,42 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addRemote = addRemote;
4
- const tslib_1 = require("tslib");
5
- const internal_1 = require("@nx/devkit/internal");
6
- const test_runners_1 = require("../../../utils/test-runners");
7
- const remote_1 = tslib_1.__importDefault(require("../../remote/remote"));
8
- const check_remote_exists_1 = require("./check-remote-exists");
9
- async function addRemote(tree, schema) {
10
- const tasks = [];
11
- const remote = (0, check_remote_exists_1.getRemoteIfExists)(tree, schema.remote);
12
- let projectRoot, remoteName;
13
- if (!remote) {
14
- const remoteGeneratorCallback = await (0, remote_1.default)(tree, {
15
- name: schema.remote,
16
- directory: schema.remoteDirectory,
17
- host: schema.host,
18
- standalone: schema.standalone,
19
- unitTestRunner: schema.unitTestRunner,
20
- e2eTestRunner: schema.e2eTestRunner ?? test_runners_1.E2eTestRunner.Cypress,
21
- skipFormat: true,
22
- });
23
- tasks.push(remoteGeneratorCallback);
24
- const { projectName, projectRoot: remoteRoot } = await (0, internal_1.determineProjectNameAndRootOptions)(tree, {
25
- name: schema.remote,
26
- directory: schema.remoteDirectory,
27
- projectType: 'application',
28
- });
29
- projectRoot = remoteRoot;
30
- remoteName = projectName;
31
- }
32
- else {
33
- projectRoot = remote.root;
34
- remoteName = remote.name;
35
- }
36
- // TODO(Colum): add implicit dependency if the path points to a file in a different project
37
- return {
38
- tasks,
39
- projectRoot,
40
- remoteName,
41
- };
42
- }
@@ -1,2 +0,0 @@
1
- import { type Tree } from '@nx/devkit';
2
- export declare function getRemoteIfExists(tree: Tree, remote: string): false | import("@nx/devkit").ProjectConfiguration;
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRemoteIfExists = getRemoteIfExists;
4
- const devkit_1 = require("@nx/devkit");
5
- function getRemoteIfExists(tree, remote) {
6
- const remoteProject = getRemote(tree, remote);
7
- if (!remoteProject) {
8
- return false;
9
- }
10
- const hasModuleFederationConfig = tree.exists((0, devkit_1.joinPathFragments)(remoteProject.root, 'module-federation.config.ts')) ||
11
- tree.exists((0, devkit_1.joinPathFragments)(remoteProject.root, 'module-federation.config.js'));
12
- return hasModuleFederationConfig ? remoteProject : false;
13
- }
14
- function getRemote(tree, remote) {
15
- try {
16
- return (0, devkit_1.readProjectConfiguration)(tree, remote);
17
- }
18
- catch {
19
- return false;
20
- }
21
- }
@@ -1,4 +0,0 @@
1
- export * from './add-remote';
2
- export * from './add-path-to-ts-config';
3
- export * from './add-path-to-exposes';
4
- export * from './add-file-to-remote-tsconfig';
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./add-remote"), exports);
5
- tslib_1.__exportStar(require("./add-path-to-ts-config"), exports);
6
- tslib_1.__exportStar(require("./add-path-to-exposes"), exports);
7
- tslib_1.__exportStar(require("./add-file-to-remote-tsconfig"), exports);
@@ -1,13 +0,0 @@
1
- import type { E2eTestRunner, UnitTestRunner } from '../../utils/test-runners';
2
-
3
- export interface Schema {
4
- name: string;
5
- path: string;
6
- remote: string;
7
- remoteDirectory?: string;
8
- host?: string;
9
- unitTestRunner?: Exclude<UnitTestRunner, UnitTestRunner.VitestAngular>;
10
- e2eTestRunner?: E2eTestRunner;
11
- standalone?: boolean;
12
- skipFormat?: boolean;
13
- }
@@ -1,83 +0,0 @@
1
- {
2
- "$schema": "https://json-schema.org/schema",
3
- "cli": "nx",
4
- "$id": "NxReactFederateModule",
5
- "title": "Federate Module",
6
- "description": "Create a federated module, which is exposed by a Producer (remote) and can be subsequently loaded by a Consumer (host).",
7
- "examples": [
8
- {
9
- "command": "nx g federate-module MyModule --path=./src/component/my-cmp.ts --remote=myRemoteApp --remoteDirectory=apps/myRemoteApp",
10
- "description": "Create a federated module from my-remote-app, that exposes my-cmp from ./src/component/my-cmp.ts as MyModule."
11
- },
12
- {
13
- "command": "nx g federate-module MyModule --path=./src/component/my-cmp.ts --producer=myProducer --producerDirectory=apps/myProducer",
14
- "description": "Create a federated module from myProducer, that exposes my-cmp from ./src/component/my-cmp.ts as MyModule."
15
- }
16
- ],
17
- "type": "object",
18
- "properties": {
19
- "path": {
20
- "type": "string",
21
- "$default": {
22
- "$source": "argv",
23
- "index": 0
24
- },
25
- "description": "The path to locate the federated module.",
26
- "x-prompt": "What is the path to the module to be federated?"
27
- },
28
- "name": {
29
- "description": "The name of the module.",
30
- "type": "string",
31
- "x-prompt": "What name would you like to use for the module?",
32
- "pattern": "^[a-zA-Z][^:]*$",
33
- "x-priority": "important"
34
- },
35
- "remote": {
36
- "type": "string",
37
- "description": "The name of the Producer (remote).",
38
- "x-prompt": "What is/should the Producer (remote) be named?",
39
- "alias": "producer"
40
- },
41
- "remoteDirectory": {
42
- "description": "The directory of the new Producer (remote) application if one needs to be created.",
43
- "type": "string",
44
- "alias": "producerDirectory"
45
- },
46
- "style": {
47
- "description": "The file extension to be used for style files for the Producer (remote) if one needs to be created.",
48
- "type": "string",
49
- "default": "css",
50
- "enum": ["css", "scss", "sass", "less"]
51
- },
52
- "skipFormat": {
53
- "description": "Skip formatting files.",
54
- "type": "boolean",
55
- "default": false,
56
- "x-priority": "internal"
57
- },
58
- "unitTestRunner": {
59
- "type": "string",
60
- "enum": ["vitest-analog", "jest", "none"],
61
- "description": "Test runner to use for unit tests of the Producer (remote) if it needs to be created. `vitest-analog` uses AnalogJS-based setup with `@nx/vitest`. It defaults to `vitest-analog` for Angular versions >= 21.0.0, otherwise `jest`.",
62
- "x-prompt": "Which unit test runner would you like to use?"
63
- },
64
- "e2eTestRunner": {
65
- "type": "string",
66
- "enum": ["cypress", "none"],
67
- "description": "Test runner to use for end to end (e2e) tests of the Producer (remote) if it needs to be created.",
68
- "default": "cypress"
69
- },
70
- "standalone": {
71
- "description": "Whether to generate the Producer (remote) application with standalone components if it needs to be created.",
72
- "type": "boolean",
73
- "default": true
74
- },
75
- "host": {
76
- "type": "string",
77
- "description": "The Consumer (host) application for this Producer (remote).",
78
- "alias": "consumer"
79
- }
80
- },
81
- "required": ["name", "path", "remote"],
82
- "additionalProperties": false
83
- }