@nx/angular 17.2.0-beta.9 → 17.2.0-canary.20231207-b8d24e6

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 (41) hide show
  1. package/executors.d.ts +2 -1
  2. package/executors.js +2 -1
  3. package/executors.json +10 -5
  4. package/package.json +10 -10
  5. package/src/builders/dev-server/dev-server.impl.js +65 -24
  6. package/src/builders/utilities/module-federation.js +1 -1
  7. package/src/builders/webpack-browser/webpack-browser.impl.js +2 -1
  8. package/src/builders/webpack-server/webpack-server.impl.js +2 -1
  9. package/src/executors/application/application.impl.d.ts +9 -0
  10. package/src/executors/application/application.impl.js +28 -0
  11. package/src/executors/application/schema.d.ts +7 -0
  12. package/src/executors/application/schema.json +612 -0
  13. package/src/executors/browser-esbuild/browser-esbuild.impl.d.ts +2 -3
  14. package/src/executors/browser-esbuild/browser-esbuild.impl.js +15 -6
  15. package/src/executors/browser-esbuild/schema.d.ts +3 -1
  16. package/src/executors/browser-esbuild/schema.json +30 -0
  17. package/src/executors/module-federation-dev-server/lib/build-static-remotes.d.ts +7 -0
  18. package/src/executors/module-federation-dev-server/lib/build-static-remotes.js +49 -0
  19. package/src/executors/module-federation-dev-server/lib/index.d.ts +4 -0
  20. package/src/executors/module-federation-dev-server/lib/index.js +7 -0
  21. package/src/executors/module-federation-dev-server/lib/normalize-options.d.ts +2 -0
  22. package/src/executors/module-federation-dev-server/lib/normalize-options.js +20 -0
  23. package/src/executors/module-federation-dev-server/lib/start-dev-remotes.d.ts +9 -0
  24. package/src/executors/module-federation-dev-server/lib/start-dev-remotes.js +29 -0
  25. package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.d.ts +12 -0
  26. package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.js +48 -0
  27. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts +3 -0
  28. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +110 -0
  29. package/src/{builders → executors}/module-federation-dev-server/schema.json +9 -3
  30. package/src/executors/utilities/buildable-libs.d.ts +6 -0
  31. package/src/executors/{browser-esbuild/lib → utilities}/buildable-libs.js +3 -4
  32. package/src/executors/utilities/esbuild-extensions.d.ts +6 -0
  33. package/src/executors/utilities/esbuild-extensions.js +27 -0
  34. package/src/executors/utilities/module-loader.d.ts +15 -0
  35. package/src/executors/utilities/module-loader.js +52 -0
  36. package/src/executors/utilities/ng-compiler-cli.d.ts +0 -14
  37. package/src/executors/utilities/ng-compiler-cli.js +3 -23
  38. package/src/builders/module-federation-dev-server/module-federation-dev-server.impl.d.ts +0 -5
  39. package/src/builders/module-federation-dev-server/module-federation-dev-server.impl.js +0 -232
  40. package/src/executors/browser-esbuild/lib/buildable-libs.d.ts +0 -9
  41. /package/src/{builders → executors}/module-federation-dev-server/schema.d.ts +0 -0
@@ -1,232 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executeModuleFederationDevServerBuilder = void 0;
4
- const devkit_1 = require("@nx/devkit");
5
- const ngcli_adapter_1 = require("nx/src/adapter/ngcli-adapter");
6
- const dev_server_impl_1 = require("../dev-server/dev-server.impl");
7
- const project_graph_1 = require("nx/src/project-graph/project-graph");
8
- const executor_utils_1 = require("nx/src/command-line/run/executor-utils");
9
- const module_federation_1 = require("../utilities/module-federation");
10
- const fs_1 = require("fs");
11
- const path_1 = require("path");
12
- const module_federation_2 = require("@nx/webpack/src/utils/module-federation");
13
- const child_process_1 = require("child_process");
14
- const rxjs_1 = require("rxjs");
15
- const fs_2 = require("fs");
16
- function buildStaticRemotes(remotes, nxBin, context, options) {
17
- if (!remotes.staticRemotes.length) {
18
- return Promise.resolve();
19
- }
20
- const mappedLocationOfRemotes = {};
21
- for (const app of remotes.staticRemotes) {
22
- mappedLocationOfRemotes[app] = `http${options.ssl ? 's' : ''}://${options.host}:${options.staticRemotesPort}/${app}`;
23
- }
24
- process.env.NX_MF_DEV_SERVER_STATIC_REMOTES = JSON.stringify(mappedLocationOfRemotes);
25
- const staticRemoteBuildPromise = new Promise((res) => {
26
- devkit_1.logger.info(`NX Building ${remotes.staticRemotes.length} static remotes...`);
27
- const staticProcess = (0, child_process_1.fork)(nxBin, [
28
- 'run-many',
29
- `--target=build`,
30
- `--projects=${remotes.staticRemotes.join(',')}`,
31
- ...(context.target.configuration
32
- ? [`--configuration=${context.target.configuration}`]
33
- : []),
34
- ...(options.parallel ? [`--parallel=${options.parallel}`] : []),
35
- ], {
36
- cwd: context.workspaceRoot,
37
- stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
38
- });
39
- staticProcess.stdout.on('data', (data) => {
40
- const ANSII_CODE_REGEX = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
41
- const stdoutString = data.toString().replace(ANSII_CODE_REGEX, '');
42
- if (stdoutString.includes('Successfully ran target build')) {
43
- staticProcess.stdout.removeAllListeners('data');
44
- devkit_1.logger.info(`NX Built ${remotes.staticRemotes.length} static remotes`);
45
- res();
46
- }
47
- });
48
- staticProcess.stderr.on('data', (data) => devkit_1.logger.info(data.toString()));
49
- staticProcess.on('exit', (code) => {
50
- if (code !== 0) {
51
- throw new Error(`Remotes failed to build. See above for errors.`);
52
- }
53
- });
54
- process.on('SIGTERM', () => staticProcess.kill('SIGTERM'));
55
- process.on('exit', () => staticProcess.kill('SIGTERM'));
56
- });
57
- return staticRemoteBuildPromise;
58
- }
59
- function startStaticRemotesFileServer(remotes, projectGraph, options, context) {
60
- let shouldMoveToCommonLocation = false;
61
- let commonOutputDirectory;
62
- for (const app of remotes.staticRemotes) {
63
- const outputPath = projectGraph.nodes[app].data.targets['build'].options.outputPath;
64
- const directoryOfOutputPath = (0, path_1.dirname)(outputPath);
65
- if (!commonOutputDirectory) {
66
- commonOutputDirectory = directoryOfOutputPath;
67
- }
68
- else if (commonOutputDirectory !== directoryOfOutputPath ||
69
- !outputPath.endsWith(app)) {
70
- shouldMoveToCommonLocation = true;
71
- }
72
- }
73
- if (shouldMoveToCommonLocation) {
74
- commonOutputDirectory = (0, path_1.join)(devkit_1.workspaceRoot, 'tmp/static-remotes');
75
- for (const app of remotes.staticRemotes) {
76
- const outputPath = projectGraph.nodes[app].data.targets['build'].options.outputPath;
77
- (0, fs_2.cpSync)(outputPath, (0, path_1.join)(commonOutputDirectory, app), {
78
- force: true,
79
- recursive: true,
80
- });
81
- }
82
- }
83
- const staticRemotesIter$ = (0, rxjs_1.from)(Promise.resolve().then(() => require('@nx/web/src/executors/file-server/file-server.impl'))).pipe((0, rxjs_1.switchMap)((fileServerExecutor) => fileServerExecutor.default({
84
- cors: true,
85
- watch: false,
86
- staticFilePath: commonOutputDirectory,
87
- parallel: false,
88
- spa: false,
89
- withDeps: false,
90
- host: options.host,
91
- port: options.staticRemotesPort,
92
- ssl: options.ssl,
93
- sslCert: options.sslCert,
94
- sslKey: options.sslKey,
95
- }, {
96
- projectGraph,
97
- root: context.workspaceRoot,
98
- target: projectGraph.nodes[context.target.project].data.targets[context.target.target],
99
- targetName: context.target.target,
100
- projectName: context.target.project,
101
- configurationName: context.target.configuration,
102
- cwd: context.currentDirectory,
103
- isVerbose: options.verbose,
104
- projectsConfigurations: (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(projectGraph),
105
- nxJsonConfiguration: (0, devkit_1.readNxJson)(),
106
- })));
107
- return staticRemotesIter$;
108
- }
109
- function startDevRemotes(remotes, workspaceProjects, options, context) {
110
- const devRemotes$ = [];
111
- for (const app of remotes.devRemotes) {
112
- if (!workspaceProjects[app].targets?.['serve']) {
113
- throw new Error(`Could not find "serve" target in "${app}" project.`);
114
- }
115
- else if (!workspaceProjects[app].targets?.['serve'].executor) {
116
- throw new Error(`Could not find executor for "serve" target in "${app}" project.`);
117
- }
118
- const runOptions = {};
119
- const [collection, executor] = workspaceProjects[app].targets['serve'].executor.split(':');
120
- const isUsingModuleFederationDevServerExecutor = executor.includes('module-federation-dev-server');
121
- const { schema } = (0, executor_utils_1.getExecutorInformation)(collection, executor, devkit_1.workspaceRoot, workspaceProjects);
122
- if ((options.verbose && schema.additionalProperties) ||
123
- 'verbose' in schema.properties) {
124
- runOptions.verbose = options.verbose;
125
- }
126
- if (isUsingModuleFederationDevServerExecutor) {
127
- runOptions.isInitialHost = false;
128
- }
129
- const serve$ = (0, ngcli_adapter_1.scheduleTarget)(context.workspaceRoot, {
130
- project: app,
131
- target: 'serve',
132
- configuration: context.target.configuration,
133
- runOptions,
134
- projects: workspaceProjects,
135
- }, options.verbose).then((obs) => {
136
- obs.toPromise().catch((err) => {
137
- throw new Error(`Remote '${app}' failed to serve correctly due to the following: \r\n${err.toString()}`);
138
- });
139
- });
140
- devRemotes$.push(serve$);
141
- }
142
- return devRemotes$;
143
- }
144
- function executeModuleFederationDevServerBuilder(schema, context) {
145
- // Force Node to resolve to look for the nx binary that is inside node_modules
146
- const nxBin = require.resolve('nx/bin/nx');
147
- const options = normalizeOptions(schema);
148
- options.staticRemotesPort ??= options.port + 1;
149
- const projectGraph = (0, devkit_1.readCachedProjectGraph)();
150
- const { projects: workspaceProjects } = (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(projectGraph);
151
- const project = workspaceProjects[context.target.project];
152
- const staticFileServer = (0, rxjs_1.from)(Promise.resolve().then(() => require('@nx/web/src/executors/file-server/file-server.impl'))).pipe((0, rxjs_1.switchMap)((fileServerExecutor) => fileServerExecutor.default({
153
- port: options.port,
154
- host: options.host,
155
- ssl: options.ssl,
156
- buildTarget: options.buildTarget,
157
- parallel: false,
158
- spa: false,
159
- withDeps: false,
160
- cors: true,
161
- }, {
162
- projectGraph,
163
- root: context.workspaceRoot,
164
- target: projectGraph.nodes[context.target.project].data.targets[context.target.target],
165
- targetName: context.target.target,
166
- projectName: context.target.project,
167
- configurationName: context.target.configuration,
168
- cwd: context.currentDirectory,
169
- isVerbose: options.verbose,
170
- projectsConfigurations: { projects: workspaceProjects, version: 2 },
171
- nxJsonConfiguration: (0, devkit_1.readNxJson)(),
172
- })));
173
- const webpackDevServer = (0, dev_server_impl_1.executeDevServerBuilder)(options, context);
174
- const currExecutor = options.static ? staticFileServer : webpackDevServer;
175
- if (options.isInitialHost === false) {
176
- return currExecutor;
177
- }
178
- let pathToManifestFile = (0, path_1.join)(context.workspaceRoot, project.sourceRoot, 'assets/module-federation.manifest.json');
179
- if (options.pathToManifestFile) {
180
- const userPathToManifestFile = (0, path_1.join)(context.workspaceRoot, options.pathToManifestFile);
181
- if (!(0, fs_1.existsSync)(userPathToManifestFile)) {
182
- throw new Error(`The provided Module Federation manifest file path does not exist. Please check the file exists at "${userPathToManifestFile}".`);
183
- }
184
- else if ((0, path_1.extname)(options.pathToManifestFile) !== '.json') {
185
- throw new Error(`The Module Federation manifest file must be a JSON. Please ensure the file at ${userPathToManifestFile} is a JSON.`);
186
- }
187
- pathToManifestFile = userPathToManifestFile;
188
- }
189
- (0, module_federation_1.validateDevRemotes)(options, workspaceProjects);
190
- const moduleFederationConfig = (0, module_federation_2.getModuleFederationConfig)(project.targets.build.options.tsConfig, context.workspaceRoot, project.root, 'angular');
191
- const remotes = (0, module_federation_2.getRemotes)(options.devRemotes, options.skipRemotes, moduleFederationConfig, {
192
- projectName: project.name,
193
- projectGraph,
194
- root: context.workspaceRoot,
195
- }, pathToManifestFile);
196
- if (remotes.devRemotes.length > 0 && !schema.staticRemotesPort) {
197
- options.staticRemotesPort = options.devRemotes.reduce((portToUse, r) => {
198
- const remotePort = projectGraph.nodes[r].data.targets['serve'].options.port;
199
- if (remotePort >= portToUse) {
200
- return remotePort + 1;
201
- }
202
- }, options.staticRemotesPort);
203
- }
204
- const staticRemoteBuildPromise = buildStaticRemotes(remotes, nxBin, context, options);
205
- return (0, rxjs_1.from)(staticRemoteBuildPromise).pipe((0, rxjs_1.concatMap)(() => {
206
- const staticRemotesIter$ = remotes.staticRemotes.length > 0
207
- ? startStaticRemotesFileServer(remotes, projectGraph, options, context)
208
- : (0, rxjs_1.from)(Promise.resolve());
209
- const devRemotes$ = startDevRemotes(remotes, workspaceProjects, options, context);
210
- return devRemotes$.length > 0
211
- ? (0, rxjs_1.combineLatest)([...devRemotes$, staticRemotesIter$]).pipe((0, rxjs_1.concatMap)(() => currExecutor))
212
- : (0, rxjs_1.from)(staticRemotesIter$).pipe((0, rxjs_1.concatMap)(() => currExecutor));
213
- }));
214
- }
215
- exports.executeModuleFederationDevServerBuilder = executeModuleFederationDevServerBuilder;
216
- exports.default = require('@angular-devkit/architect').createBuilder(executeModuleFederationDevServerBuilder);
217
- function normalizeOptions(schema) {
218
- let buildTarget = schema.buildTarget;
219
- if (schema.browserTarget) {
220
- buildTarget ??= schema.browserTarget;
221
- delete schema.browserTarget;
222
- }
223
- return {
224
- ...schema,
225
- buildTarget,
226
- host: schema.host ?? 'localhost',
227
- port: schema.port ?? 4200,
228
- liveReload: schema.liveReload ?? true,
229
- open: schema.open ?? false,
230
- ssl: schema.ssl ?? false,
231
- };
232
- }
@@ -1,9 +0,0 @@
1
- import { DependentBuildableProjectNode } from '@nx/js/src/utils/buildable-libs-utils';
2
- import { type ExecutorContext, type ProjectGraph } from '@nx/devkit';
3
- export declare function createTmpTsConfigForBuildableLibs(tsConfigPath: string, context: ExecutorContext, options?: {
4
- projectGraph?: ProjectGraph;
5
- target?: string;
6
- }): {
7
- tsConfigPath: string;
8
- dependencies: DependentBuildableProjectNode[];
9
- };