@nx/angular 19.5.1 → 19.5.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.
- package/ng-package.json +3 -0
 - package/package.json +8 -8
 - package/src/executors/module-federation-dev-server/lib/build-static-remotes.d.ts +2 -2
 - package/src/executors/module-federation-dev-server/lib/build-static-remotes.js +1 -1
 - package/src/executors/module-federation-dev-server/lib/index.d.ts +0 -1
 - package/src/executors/module-federation-dev-server/lib/index.js +0 -1
 - package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.d.ts +1 -1
 - package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.js +5 -0
 - package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +9 -21
 - package/src/generators/setup-ssr/files/server/server-builder/v17+/__serverFileName__ +7 -5
 - package/src/executors/module-federation-dev-server/lib/parse-static-remotes-config.d.ts +0 -11
 - package/src/executors/module-federation-dev-server/lib/parse-static-remotes-config.js +0 -17
 
    
        package/ng-package.json
    CHANGED
    
    
    
        package/package.json
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
2 
     | 
    
         
             
              "name": "@nx/angular",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": "19.5. 
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "19.5.2",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "private": false,
         
     | 
| 
       5 
5 
     | 
    
         
             
              "description": "The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: \n\n- Integration with libraries such as Storybook, Jest, ESLint, Tailwind CSS, Playwright and Cypress. \n\n- Generators to help scaffold code quickly (like: Micro Frontends, Libraries, both internal to your codebase and publishable to npm) \n\n- Single Component Application Modules (SCAMs) \n\n- NgRx helpers. \n\n- Utilities for automatic workspace refactoring.",
         
     | 
| 
       6 
6 
     | 
    
         
             
              "repository": {
         
     | 
| 
         @@ -80,14 +80,14 @@ 
     | 
|
| 
       80 
80 
     | 
    
         
             
                "webpack-merge": "^5.8.0",
         
     | 
| 
       81 
81 
     | 
    
         
             
                "webpack": "^5.88.0",
         
     | 
| 
       82 
82 
     | 
    
         
             
                "@module-federation/enhanced": "~0.2.3",
         
     | 
| 
       83 
     | 
    
         
            -
                "@nx/devkit": "19.5. 
     | 
| 
       84 
     | 
    
         
            -
                "@nx/js": "19.5. 
     | 
| 
       85 
     | 
    
         
            -
                "@nx/eslint": "19.5. 
     | 
| 
       86 
     | 
    
         
            -
                "@nx/webpack": "19.5. 
     | 
| 
       87 
     | 
    
         
            -
                "@nx/web": "19.5. 
     | 
| 
       88 
     | 
    
         
            -
                "@nx/workspace": "19.5. 
     | 
| 
      
 83 
     | 
    
         
            +
                "@nx/devkit": "19.5.2",
         
     | 
| 
      
 84 
     | 
    
         
            +
                "@nx/js": "19.5.2",
         
     | 
| 
      
 85 
     | 
    
         
            +
                "@nx/eslint": "19.5.2",
         
     | 
| 
      
 86 
     | 
    
         
            +
                "@nx/webpack": "19.5.2",
         
     | 
| 
      
 87 
     | 
    
         
            +
                "@nx/web": "19.5.2",
         
     | 
| 
      
 88 
     | 
    
         
            +
                "@nx/workspace": "19.5.2",
         
     | 
| 
       89 
89 
     | 
    
         
             
                "piscina": "^4.4.0",
         
     | 
| 
       90 
     | 
    
         
            -
                "@nrwl/angular": "19.5. 
     | 
| 
      
 90 
     | 
    
         
            +
                "@nrwl/angular": "19.5.2"
         
     | 
| 
       91 
91 
     | 
    
         
             
              },
         
     | 
| 
       92 
92 
     | 
    
         
             
              "peerDependencies": {
         
     | 
| 
       93 
93 
     | 
    
         
             
                "@angular-devkit/build-angular": ">= 16.0.0 < 19.0.0",
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import { type Schema } from '../schema';
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { type ExecutorContext } from '@nx/devkit';
         
     | 
| 
       3 
     | 
    
         
            -
            import type { StaticRemotesConfig } from ' 
     | 
| 
       4 
     | 
    
         
            -
            export declare function buildStaticRemotes(staticRemotesConfig: StaticRemotesConfig, nxBin: any, context: ExecutorContext, options: Schema): Promise< 
     | 
| 
      
 3 
     | 
    
         
            +
            import type { StaticRemotesConfig } from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
         
     | 
| 
      
 4 
     | 
    
         
            +
            export declare function buildStaticRemotes(staticRemotesConfig: StaticRemotesConfig, nxBin: any, context: ExecutorContext, options: Schema): Promise<Record<string, string>>;
         
     | 
| 
         @@ -14,7 +14,6 @@ async function buildStaticRemotes(staticRemotesConfig, nxBin, context, options) 
     | 
|
| 
       14 
14 
     | 
    
         
             
                for (const app of staticRemotesConfig.remotes) {
         
     | 
| 
       15 
15 
     | 
    
         
             
                    mappedLocationOfRemotes[app] = `http${options.ssl ? 's' : ''}://${options.host}:${options.staticRemotesPort}/${staticRemotesConfig.config[app].urlSegment}`;
         
     | 
| 
       16 
16 
     | 
    
         
             
                }
         
     | 
| 
       17 
     | 
    
         
            -
                process.env.NX_MF_DEV_SERVER_STATIC_REMOTES = JSON.stringify(mappedLocationOfRemotes);
         
     | 
| 
       18 
17 
     | 
    
         
             
                await new Promise((res) => {
         
     | 
| 
       19 
18 
     | 
    
         
             
                    devkit_1.logger.info(`NX Building ${staticRemotesConfig.remotes.length} static remotes...`);
         
     | 
| 
       20 
19 
     | 
    
         
             
                    const staticProcess = (0, node_child_process_1.fork)(nxBin, [
         
     | 
| 
         @@ -55,4 +54,5 @@ async function buildStaticRemotes(staticRemotesConfig, nxBin, context, options) 
     | 
|
| 
       55 
54 
     | 
    
         
             
                    process.on('SIGTERM', () => staticProcess.kill('SIGTERM'));
         
     | 
| 
       56 
55 
     | 
    
         
             
                    process.on('exit', () => staticProcess.kill('SIGTERM'));
         
     | 
| 
       57 
56 
     | 
    
         
             
                });
         
     | 
| 
      
 57 
     | 
    
         
            +
                return mappedLocationOfRemotes;
         
     | 
| 
       58 
58 
     | 
    
         
             
            }
         
     | 
| 
         @@ -3,6 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); 
     | 
|
| 
       3 
3 
     | 
    
         
             
            const tslib_1 = require("tslib");
         
     | 
| 
       4 
4 
     | 
    
         
             
            tslib_1.__exportStar(require("./build-static-remotes"), exports);
         
     | 
| 
       5 
5 
     | 
    
         
             
            tslib_1.__exportStar(require("./normalize-options"), exports);
         
     | 
| 
       6 
     | 
    
         
            -
            tslib_1.__exportStar(require("./parse-static-remotes-config"), exports);
         
     | 
| 
       7 
6 
     | 
    
         
             
            tslib_1.__exportStar(require("./start-dev-remotes"), exports);
         
     | 
| 
       8 
7 
     | 
    
         
             
            tslib_1.__exportStar(require("./start-static-remotes-file-server"), exports);
         
     | 
    
        package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.d.ts
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import { type ExecutorContext } from '@nx/devkit';
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { type Schema } from '../schema';
         
     | 
| 
       3 
     | 
    
         
            -
            import type { StaticRemotesConfig } from ' 
     | 
| 
      
 3 
     | 
    
         
            +
            import type { StaticRemotesConfig } from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
         
     | 
| 
       4 
4 
     | 
    
         
             
            export declare function startStaticRemotesFileServer(staticRemotesConfig: StaticRemotesConfig, context: ExecutorContext, options: Schema): AsyncGenerator<{
         
     | 
| 
       5 
5 
     | 
    
         
             
                success: boolean;
         
     | 
| 
       6 
6 
     | 
    
         
             
                baseUrl: string;
         
     | 
| 
         @@ -7,6 +7,10 @@ const file_server_impl_1 = tslib_1.__importDefault(require("@nx/web/src/executor 
     | 
|
| 
       7 
7 
     | 
    
         
             
            const path_1 = require("path");
         
     | 
| 
       8 
8 
     | 
    
         
             
            const fs_1 = require("fs");
         
     | 
| 
       9 
9 
     | 
    
         
             
            function startStaticRemotesFileServer(staticRemotesConfig, context, options) {
         
     | 
| 
      
 10 
     | 
    
         
            +
                if (!staticRemotesConfig.remotes ||
         
     | 
| 
      
 11 
     | 
    
         
            +
                    staticRemotesConfig.remotes.length === 0) {
         
     | 
| 
      
 12 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 13 
     | 
    
         
            +
                }
         
     | 
| 
       10 
14 
     | 
    
         
             
                let shouldMoveToCommonLocation = false;
         
     | 
| 
       11 
15 
     | 
    
         
             
                let commonOutputDirectory;
         
     | 
| 
       12 
16 
     | 
    
         
             
                for (const app of staticRemotesConfig.remotes) {
         
     | 
| 
         @@ -41,6 +45,7 @@ function startStaticRemotesFileServer(staticRemotesConfig, context, options) { 
     | 
|
| 
       41 
45 
     | 
    
         
             
                    ssl: options.ssl,
         
     | 
| 
       42 
46 
     | 
    
         
             
                    sslCert: options.sslCert,
         
     | 
| 
       43 
47 
     | 
    
         
             
                    sslKey: options.sslKey,
         
     | 
| 
      
 48 
     | 
    
         
            +
                    cacheSeconds: -1,
         
     | 
| 
       44 
49 
     | 
    
         
             
                }, context);
         
     | 
| 
       45 
50 
     | 
    
         
             
                return staticRemotesIter;
         
     | 
| 
       46 
51 
     | 
    
         
             
            }
         
     | 
| 
         @@ -14,11 +14,12 @@ const dev_server_impl_1 = require("../../builders/dev-server/dev-server.impl"); 
     | 
|
| 
       14 
14 
     | 
    
         
             
            const module_federation_2 = require("../../builders/utilities/module-federation");
         
     | 
| 
       15 
15 
     | 
    
         
             
            const path_1 = require("path");
         
     | 
| 
       16 
16 
     | 
    
         
             
            const fs_1 = require("fs");
         
     | 
| 
      
 17 
     | 
    
         
            +
            const start_remote_proxies_1 = require("@nx/webpack/src/utils/module-federation/start-remote-proxies");
         
     | 
| 
      
 18 
     | 
    
         
            +
            const parse_static_remotes_config_1 = require("@nx/webpack/src/utils/module-federation/parse-static-remotes-config");
         
     | 
| 
       17 
19 
     | 
    
         
             
            async function* moduleFederationDevServerExecutor(schema, context) {
         
     | 
| 
       18 
20 
     | 
    
         
             
                // Force Node to resolve to look for the nx binary that is inside node_modules
         
     | 
| 
       19 
21 
     | 
    
         
             
                const nxBin = require.resolve('nx/bin/nx');
         
     | 
| 
       20 
22 
     | 
    
         
             
                const options = (0, lib_1.normalizeOptions)(schema);
         
     | 
| 
       21 
     | 
    
         
            -
                options.staticRemotesPort ??= options.port + 1;
         
     | 
| 
       22 
23 
     | 
    
         
             
                const { projects: workspaceProjects } = (0, devkit_1.readProjectsConfigurationFromProjectGraph)(context.projectGraph);
         
     | 
| 
       23 
24 
     | 
    
         
             
                const project = workspaceProjects[context.projectName];
         
     | 
| 
       24 
25 
     | 
    
         
             
                const currIter = options.static
         
     | 
| 
         @@ -31,6 +32,7 @@ async function* moduleFederationDevServerExecutor(schema, context) { 
     | 
|
| 
       31 
32 
     | 
    
         
             
                        spa: false,
         
     | 
| 
       32 
33 
     | 
    
         
             
                        withDeps: false,
         
     | 
| 
       33 
34 
     | 
    
         
             
                        cors: true,
         
     | 
| 
      
 35 
     | 
    
         
            +
                        cacheSeconds: -1,
         
     | 
| 
       34 
36 
     | 
    
         
             
                    }, context)
         
     | 
| 
       35 
37 
     | 
    
         
             
                    : (0, rxjs_for_await_1.eachValueFrom)((0, dev_server_impl_1.executeDevServerBuilder)(options, await (0, ngcli_adapter_1.createBuilderContext)({
         
     | 
| 
       36 
38 
     | 
    
         
             
                        builderName: '@nx/angular:webpack-browser',
         
     | 
| 
         @@ -62,33 +64,19 @@ async function* moduleFederationDevServerExecutor(schema, context) { 
     | 
|
| 
       62 
64 
     | 
    
         
             
                    projectGraph: context.projectGraph,
         
     | 
| 
       63 
65 
     | 
    
         
             
                    root: context.root,
         
     | 
| 
       64 
66 
     | 
    
         
             
                }, pathToManifestFile);
         
     | 
| 
      
 67 
     | 
    
         
            +
                options.staticRemotesPort ??= remotes.staticRemotePort;
         
     | 
| 
       65 
68 
     | 
    
         
             
                // Set NX_MF_DEV_REMOTES for the Nx Runtime Library Control Plugin
         
     | 
| 
       66 
69 
     | 
    
         
             
                process.env.NX_MF_DEV_REMOTES = JSON.stringify(remotes.devRemotes.map((r) => (typeof r === 'string' ? r : r.remoteName)));
         
     | 
| 
       67 
     | 
    
         
            -
                 
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                        const remoteName = typeof r === 'string' ? r : r.remoteName;
         
     | 
| 
       70 
     | 
    
         
            -
                        const remotePort = context.projectGraph.nodes[remoteName].data.targets['serve'].options
         
     | 
| 
       71 
     | 
    
         
            -
                            .port;
         
     | 
| 
       72 
     | 
    
         
            -
                        if (remotePort >= portToUse) {
         
     | 
| 
       73 
     | 
    
         
            -
                            return remotePort + 1;
         
     | 
| 
       74 
     | 
    
         
            -
                        }
         
     | 
| 
       75 
     | 
    
         
            -
                        else {
         
     | 
| 
       76 
     | 
    
         
            -
                            return portToUse;
         
     | 
| 
       77 
     | 
    
         
            -
                        }
         
     | 
| 
       78 
     | 
    
         
            -
                    }, options.staticRemotesPort);
         
     | 
| 
       79 
     | 
    
         
            -
                }
         
     | 
| 
       80 
     | 
    
         
            -
                const staticRemotesConfig = (0, lib_1.parseStaticRemotesConfig)(remotes.staticRemotes, context);
         
     | 
| 
       81 
     | 
    
         
            -
                await (0, lib_1.buildStaticRemotes)(staticRemotesConfig, nxBin, context, options);
         
     | 
| 
      
 70 
     | 
    
         
            +
                const staticRemotesConfig = (0, parse_static_remotes_config_1.parseStaticRemotesConfig)([...remotes.staticRemotes, ...remotes.dynamicRemotes], context);
         
     | 
| 
      
 71 
     | 
    
         
            +
                const mappedLocationsOfStaticRemotes = await (0, lib_1.buildStaticRemotes)(staticRemotesConfig, nxBin, context, options);
         
     | 
| 
       82 
72 
     | 
    
         
             
                const devRemoteIters = await (0, lib_1.startRemotes)(remotes.devRemotes, workspaceProjects, options, context, 'serve');
         
     | 
| 
       83 
     | 
    
         
            -
                const  
     | 
| 
       84 
     | 
    
         
            -
                 
     | 
| 
       85 
     | 
    
         
            -
                    ? (0, lib_1.startStaticRemotesFileServer)(staticRemotesConfig, context, options)
         
     | 
| 
       86 
     | 
    
         
            -
                    : undefined;
         
     | 
| 
      
 73 
     | 
    
         
            +
                const staticRemotesIter = (0, lib_1.startStaticRemotesFileServer)(staticRemotesConfig, context, options);
         
     | 
| 
      
 74 
     | 
    
         
            +
                (0, start_remote_proxies_1.startRemoteProxies)(staticRemotesConfig, mappedLocationsOfStaticRemotes);
         
     | 
| 
       87 
75 
     | 
    
         
             
                const removeBaseUrlEmission = (iter) => (0, async_iterable_1.mapAsyncIterable)(iter, (v) => ({
         
     | 
| 
       88 
76 
     | 
    
         
             
                    ...v,
         
     | 
| 
       89 
77 
     | 
    
         
             
                    baseUrl: undefined,
         
     | 
| 
       90 
78 
     | 
    
         
             
                }));
         
     | 
| 
       91 
     | 
    
         
            -
                return yield* (0, async_iterable_1.combineAsyncIterables)(removeBaseUrlEmission(currIter), ...devRemoteIters.map(removeBaseUrlEmission), ... 
     | 
| 
      
 79 
     | 
    
         
            +
                return yield* (0, async_iterable_1.combineAsyncIterables)(removeBaseUrlEmission(currIter), ...devRemoteIters.map(removeBaseUrlEmission), ...(staticRemotesIter ? [removeBaseUrlEmission(staticRemotesIter)] : []), (0, async_iterable_1.createAsyncIterable)(async ({ next, done }) => {
         
     | 
| 
       92 
80 
     | 
    
         
             
                    if (!options.isInitialHost) {
         
     | 
| 
       93 
81 
     | 
    
         
             
                        done();
         
     | 
| 
       94 
82 
     | 
    
         
             
                        return;
         
     | 
| 
         @@ -23,13 +23,15 @@ export function app(): express.Express { 
     | 
|
| 
       23 
23 
     | 
    
         
             
              // Example Express Rest API endpoints
         
     | 
| 
       24 
24 
     | 
    
         
             
              // server.get('/api/**', (req, res) => { });
         
     | 
| 
       25 
25 
     | 
    
         
             
              // Serve static files from /browser
         
     | 
| 
       26 
     | 
    
         
            -
              server.get( 
     | 
| 
       27 
     | 
    
         
            -
                 
     | 
| 
       28 
     | 
    
         
            -
                 
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
      
 26 
     | 
    
         
            +
              server.get(
         
     | 
| 
      
 27 
     | 
    
         
            +
                '*.*',
         
     | 
| 
      
 28 
     | 
    
         
            +
                express.static(distFolder, {
         
     | 
| 
      
 29 
     | 
    
         
            +
                  maxAge: '1y',
         
     | 
| 
      
 30 
     | 
    
         
            +
                })
         
     | 
| 
      
 31 
     | 
    
         
            +
              );
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
       31 
33 
     | 
    
         
             
              // All regular routes use the Angular engine
         
     | 
| 
       32 
     | 
    
         
            -
              server.get(' 
     | 
| 
      
 34 
     | 
    
         
            +
              server.get('*', (req, res, next) => {
         
     | 
| 
       33 
35 
     | 
    
         
             
                const { protocol, originalUrl, baseUrl, headers } = req;
         
     | 
| 
       34 
36 
     | 
    
         | 
| 
       35 
37 
     | 
    
         
             
                commonEngine
         
     | 
| 
         @@ -1,11 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import type { ExecutorContext } from '@nx/devkit';
         
     | 
| 
       2 
     | 
    
         
            -
            export type StaticRemoteConfig = {
         
     | 
| 
       3 
     | 
    
         
            -
                basePath: string;
         
     | 
| 
       4 
     | 
    
         
            -
                outputPath: string;
         
     | 
| 
       5 
     | 
    
         
            -
                urlSegment: string;
         
     | 
| 
       6 
     | 
    
         
            -
            };
         
     | 
| 
       7 
     | 
    
         
            -
            export type StaticRemotesConfig = {
         
     | 
| 
       8 
     | 
    
         
            -
                remotes: string[];
         
     | 
| 
       9 
     | 
    
         
            -
                config: Record<string, StaticRemoteConfig> | undefined;
         
     | 
| 
       10 
     | 
    
         
            -
            };
         
     | 
| 
       11 
     | 
    
         
            -
            export declare function parseStaticRemotesConfig(staticRemotes: string[] | undefined, context: ExecutorContext): StaticRemotesConfig;
         
     | 
| 
         @@ -1,17 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            "use strict";
         
     | 
| 
       2 
     | 
    
         
            -
            Object.defineProperty(exports, "__esModule", { value: true });
         
     | 
| 
       3 
     | 
    
         
            -
            exports.parseStaticRemotesConfig = parseStaticRemotesConfig;
         
     | 
| 
       4 
     | 
    
         
            -
            const path_1 = require("path");
         
     | 
| 
       5 
     | 
    
         
            -
            function parseStaticRemotesConfig(staticRemotes, context) {
         
     | 
| 
       6 
     | 
    
         
            -
                if (!staticRemotes?.length) {
         
     | 
| 
       7 
     | 
    
         
            -
                    return { remotes: [], config: undefined };
         
     | 
| 
       8 
     | 
    
         
            -
                }
         
     | 
| 
       9 
     | 
    
         
            -
                const config = {};
         
     | 
| 
       10 
     | 
    
         
            -
                for (const app of staticRemotes) {
         
     | 
| 
       11 
     | 
    
         
            -
                    const outputPath = context.projectGraph.nodes[app].data.targets['build'].options.outputPath;
         
     | 
| 
       12 
     | 
    
         
            -
                    const basePath = (0, path_1.dirname)(outputPath);
         
     | 
| 
       13 
     | 
    
         
            -
                    const urlSegment = (0, path_1.basename)(outputPath);
         
     | 
| 
       14 
     | 
    
         
            -
                    config[app] = { basePath, outputPath, urlSegment };
         
     | 
| 
       15 
     | 
    
         
            -
                }
         
     | 
| 
       16 
     | 
    
         
            -
                return { remotes: staticRemotes, config };
         
     | 
| 
       17 
     | 
    
         
            -
            }
         
     |