From 6b04e44a4c84d6270665930a66178ccf6f59fb66 Mon Sep 17 00:00:00 2001 From: Aukevanoost Date: Fri, 7 Aug 2026 13:42:52 +0200 Subject: [PATCH 1/3] fix(schematics): drop the @schematics/angular runtime import add-dependencies.ts imported '@schematics/angular/utility/dependencies' at runtime, but the package was only a devDependency. npm's flat node_modules made it resolve by accident; under pnpm's isolated layout `ng g @angular-architects/native-federation:init` failed with "Cannot find package '@schematics/angular'". Only addPackageJsonDependency and NodeDependencyType were used, so replace them with a local helper following the readJson/overwrite pattern already used in update-package-json.ts, and remove the dependency instead of promoting it to a runtime one. --- package.json | 1 - pnpm-lock.yaml | 123 +++++------------- src/schematics/init/steps/add-dependencies.ts | 49 +++---- 3 files changed, 62 insertions(+), 111 deletions(-) diff --git a/package.json b/package.json index 60c9469..5d722f6 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,6 @@ "@angular/build": "~22.1.0", "@eslint/js": "^10.0.1", "@nx/devkit": "^23.1.0", - "@schematics/angular": "~22.1.0", "@types/node": "~24.10.0", "@vitest/coverage-v8": "^4.0.0", "eslint": "^10.8.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ae0d99..653d618 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,16 +43,13 @@ importers: devDependencies: '@angular/build': specifier: ~22.1.0 - version: 22.1.3(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.0)(typescript@6.0.3))(@angular/compiler@22.1.0)(@types/node@24.10.15)(chokidar@5.0.0)(jiti@2.7.0)(postcss@8.5.25)(rollup@4.62.4)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.10)(yaml@2.9.0) + version: 22.1.3(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.0)(typescript@6.0.3))(@angular/compiler@22.1.0)(@types/node@24.10.15)(chokidar@5.0.0)(jiti@2.7.0)(postcss@8.5.25)(rollup@4.62.4)(supports-color@7.2.0)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.10)(yaml@2.9.0) '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.8.0(jiti@2.7.0)) + version: 10.0.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0)) '@nx/devkit': specifier: ^23.1.0 version: 23.1.1(nx@23.1.1) - '@schematics/angular': - specifier: ~22.1.0 - version: 22.1.2(chokidar@5.0.0) '@types/node': specifier: ~24.10.0 version: 24.10.15 @@ -61,7 +58,7 @@ importers: version: 4.1.10(vitest@4.1.10) eslint: specifier: ^10.8.0 - version: 10.8.0(jiti@2.7.0) + version: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) globals: specifier: ^17.0.0 version: 17.8.0 @@ -82,7 +79,7 @@ importers: version: 6.0.3 typescript-eslint: specifier: ^8.65.0 - version: 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3) + version: 8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) vite: specifier: ^7.0.0 version: 7.3.6(@types/node@24.10.15)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.101.0)(yaml@2.9.0) @@ -101,15 +98,6 @@ packages: engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular-devkit/core@22.1.2': - resolution: {integrity: sha512-tF1oEE7KPs8I08HJQmH5e4GkLUB3+MXXy8t6gMJULaLFxZYP9K1oXRFLappMpdm9OIbEXOChk23hrho0By9aYg==, tarball: https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.2.tgz} - engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - chokidar: ^5.0.0 - peerDependenciesMeta: - chokidar: - optional: true - '@angular-devkit/core@22.1.3': resolution: {integrity: sha512-ASK8oZVElt/Zpz5FrzJjLnnUbzp/fW57eFFSRgpA+n9KRnuFi6YvNdSS3HkG5049Jcukce+PiMBdfzw/jBVkEw==, tarball: https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.3.tgz} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -119,10 +107,6 @@ packages: chokidar: optional: true - '@angular-devkit/schematics@22.1.2': - resolution: {integrity: sha512-Lw6NvW5rfMUl/2dsuWY8l6wlfWCuYBzCYSSqqliLPDco0doGzBliHwY9uxuzuUKZgOl5TvuVyvEo0t3o4Jj4GA==, tarball: https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.2.tgz} - engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/schematics@22.1.3': resolution: {integrity: sha512-ebY5bwZVB0onxxyTbJch//VidVVV8jo/F13n+TV5s/3ZywsC3/XZsfMHaxlFmpvP/G17+/C9JVoEXT+uwjT+/Q==, tarball: https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.3.tgz} engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1598,10 +1582,6 @@ packages: cpu: [x64] os: [win32] - '@schematics/angular@22.1.2': - resolution: {integrity: sha512-52udja/QGSNH5geSnL4JWFOEfx8M7tqf7LNXz8byjki4VshVOkKHTawQcL4YbJfo3MfwwXm4AsoadMOk8EST2w==, tarball: https://registry.npmjs.org/@schematics/angular/-/angular-22.1.2.tgz} - engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@softarc/native-federation-orchestrator@4.6.0': resolution: {integrity: sha512-8529SINGc3zBdKZcyUsP9vGj4EFjUOljy+43qfwzYSgC3FwkHcAjddf/p86t8kI9CmCp0JGeLkM1IjJ7xahVXQ==, tarball: https://registry.npmjs.org/@softarc/native-federation-orchestrator/-/native-federation-orchestrator-4.6.0.tgz} engines: {node: '>=24.16.0'} @@ -3287,17 +3267,6 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/core@22.1.2(chokidar@5.0.0)': - dependencies: - ajv: 8.20.0 - ajv-formats: 3.0.1(ajv@8.20.0) - jsonc-parser: 3.3.1 - picomatch: 4.0.5 - rxjs: 7.8.2 - source-map: 0.7.6 - optionalDependencies: - chokidar: 5.0.0 - '@angular-devkit/core@22.1.3(chokidar@5.0.0)': dependencies: ajv: 8.20.0 @@ -3309,16 +3278,6 @@ snapshots: optionalDependencies: chokidar: 5.0.0 - '@angular-devkit/schematics@22.1.2(chokidar@5.0.0)': - dependencies: - '@angular-devkit/core': 22.1.2(chokidar@5.0.0) - jsonc-parser: 3.3.1 - magic-string: 1.0.0 - ora: 9.4.1 - rxjs: 7.8.2 - transitivePeerDependencies: - - chokidar - '@angular-devkit/schematics@22.1.3(chokidar@5.0.0)': dependencies: '@angular-devkit/core': 22.1.3(chokidar@5.0.0) @@ -3329,7 +3288,7 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular/build@22.1.3(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.0)(typescript@6.0.3))(@angular/compiler@22.1.0)(@types/node@24.10.15)(chokidar@5.0.0)(jiti@2.7.0)(postcss@8.5.25)(rollup@4.62.4)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.10)(yaml@2.9.0)': + '@angular/build@22.1.3(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.0)(typescript@6.0.3))(@angular/compiler@22.1.0)(@types/node@24.10.15)(chokidar@5.0.0)(jiti@2.7.0)(postcss@8.5.25)(rollup@4.62.4)(supports-color@7.2.0)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.10)(yaml@2.9.0)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2201.3(chokidar@5.0.0) @@ -3343,7 +3302,7 @@ snapshots: beasties: 0.4.3 browserslist: 4.28.7 esbuild: 0.28.1 - https-proxy-agent: 9.1.0 + https-proxy-agent: 9.1.0(supports-color@7.2.0) jsonc-parser: 3.3.1 listr2: 10.2.2 magic-string: 1.0.0 @@ -3536,7 +3495,6 @@ snapshots: dependencies: '@emnapi/wasi-threads': 1.2.2 tslib: 2.8.1 - optional: true '@emnapi/core@1.4.5': dependencies: @@ -3551,7 +3509,6 @@ snapshots: '@emnapi/runtime@1.11.2': dependencies: tslib: 2.8.1 - optional: true '@emnapi/runtime@1.4.5': dependencies: @@ -3564,7 +3521,6 @@ snapshots: '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 - optional: true '@esbuild/aix-ppc64@0.28.1': optional: true @@ -3644,14 +3600,14 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.10.1(eslint@10.8.0(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))': dependencies: - eslint: 10.8.0(jiti@2.7.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.5': + '@eslint/config-array@0.23.5(supports-color@7.2.0)': dependencies: '@eslint/object-schema': 3.0.5 debug: 4.4.3(supports-color@7.2.0) @@ -3667,9 +3623,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.8.0(jiti@2.7.0))': + '@eslint/js@10.0.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))': optionalDependencies: - eslint: 10.8.0(jiti@2.7.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) '@eslint/object-schema@3.0.5': {} @@ -3911,8 +3867,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.4': dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 '@tybys/wasm-util': 0.9.0 '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': @@ -4348,15 +4304,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.62.4': optional: true - '@schematics/angular@22.1.2(chokidar@5.0.0)': - dependencies: - '@angular-devkit/core': 22.1.2(chokidar@5.0.0) - '@angular-devkit/schematics': 22.1.2(chokidar@5.0.0) - jsonc-parser: 3.3.1 - typescript: 6.0.3 - transitivePeerDependencies: - - chokidar - '@softarc/native-federation-orchestrator@4.6.0': dependencies: semver: 7.8.5 @@ -4407,15 +4354,15 @@ snapshots: dependencies: undici-types: 7.16.0 - '@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/type-utils': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/type-utils': 8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.65.0 - eslint: 10.8.0(jiti@2.7.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -4423,14 +4370,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/parser@8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.65.0 '@typescript-eslint/types': 8.65.0 '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.65.0 debug: 4.4.3(supports-color@7.2.0) - eslint: 10.8.0(jiti@2.7.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -4453,13 +4400,13 @@ snapshots: dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.65.0 '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(typescript@6.0.3) debug: 4.4.3(supports-color@7.2.0) - eslint: 10.8.0(jiti@2.7.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -4482,13 +4429,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3)': + '@typescript-eslint/utils@8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0)) '@typescript-eslint/scope-manager': 8.65.0 '@typescript-eslint/types': 8.65.0 '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) - eslint: 10.8.0(jiti@2.7.0) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -4923,11 +4870,11 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.8.0(jiti@2.7.0): + eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 + '@eslint/config-array': 0.23.5(supports-color@7.2.0) '@eslint/config-helpers': 0.7.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 @@ -5143,7 +5090,7 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@9.1.0: + https-proxy-agent@9.1.0(supports-color@7.2.0): dependencies: agent-base: 9.0.0 debug: 4.4.3(supports-color@7.2.0) @@ -6002,13 +5949,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3): + typescript-eslint@8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3) - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0))(typescript@6.0.3) - eslint: 10.8.0(jiti@2.7.0) + '@typescript-eslint/utils': 8.65.0(eslint@10.8.0(jiti@2.7.0)(supports-color@7.2.0))(typescript@6.0.3) + eslint: 10.8.0(jiti@2.7.0)(supports-color@7.2.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color diff --git a/src/schematics/init/steps/add-dependencies.ts b/src/schematics/init/steps/add-dependencies.ts index 11d6608..78aa6f4 100644 --- a/src/schematics/init/steps/add-dependencies.ts +++ b/src/schematics/init/steps/add-dependencies.ts @@ -1,40 +1,45 @@ import type { SchematicContext, Tree } from '@angular-devkit/schematics'; import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks/index.js'; -import { - addPackageJsonDependency, - NodeDependencyType, -} from '@schematics/angular/utility/dependencies'; + +type DependencyType = 'dependencies' | 'devDependencies'; +type PackageJson = Partial>>; export function addDependencies(tree: Tree, context: SchematicContext, ssr: boolean): void { - addPackageJsonDependency(tree, { - name: 'es-module-shims', - type: NodeDependencyType.Default, - version: '^2.8.0', - overwrite: false, - }); + const packageJson = (tree.readJson('package.json') as PackageJson) ?? {}; + + function addDependency( + type: DependencyType, + name: string, + version: string, + overwrite = false, + ): void { + const deps = (packageJson[type] ??= {}); + if (overwrite || !deps[name]) { + deps[name] = version; + } + } + + addDependency('dependencies', 'es-module-shims', '^2.8.0'); // Browser-only projects bundle the orchestrator into the app, so a dev // dependency suffices. For SSR it must be a runtime dependency: the generated // server entry imports '@softarc/native-federation-orchestrator/node' as a // bare specifier resolved from node_modules at runtime. - addPackageJsonDependency(tree, { - name: '@softarc/native-federation-orchestrator', - type: ssr ? NodeDependencyType.Default : NodeDependencyType.Dev, - version: '^4.2.2', - overwrite: true, - }); + addDependency( + ssr ? 'dependencies' : 'devDependencies', + '@softarc/native-federation-orchestrator', + '^4.2.2', + true, + ); if (ssr) { console.log('SSR detected ...'); console.log('Activating CORS ...'); - addPackageJsonDependency(tree, { - name: 'cors', - type: NodeDependencyType.Default, - version: '^2.8.5', - overwrite: false, - }); + addDependency('dependencies', 'cors', '^2.8.5'); } + tree.overwrite('package.json', JSON.stringify(packageJson, null, 2)); + context.addTask(new NodePackageInstallTask()); } From 4fd84304145bb8599fe1c5de0cfc57da01c7693a Mon Sep 17 00:00:00 2001 From: Aukevanoost Date: Fri, 7 Aug 2026 13:44:09 +0200 Subject: [PATCH 2/3] fix(schematics): emit initFederation() without a remote map for remotes getFederationArg's default branch (--type=remote) returned `{ '': './remoteEntry.json' }`, so a generated remote passed a map pointing at its own remoteEntry. Return an empty arg instead. Also reformats the file to prettier's double-quote/trailing-comma style. --- src/schematics/init/steps/make-main-async.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/schematics/init/steps/make-main-async.ts b/src/schematics/init/steps/make-main-async.ts index 5590aed..d146fb5 100644 --- a/src/schematics/init/steps/make-main-async.ts +++ b/src/schematics/init/steps/make-main-async.ts @@ -1,6 +1,6 @@ -import type { Rule } from '@angular-devkit/schematics'; -import type { NfSchematicSchema } from '../schema.js'; -import * as path from 'path'; +import type { Rule } from "@angular-devkit/schematics"; +import type { NfSchematicSchema } from "../schema.js"; +import * as path from "path"; // The adapter's `initFederation` wrapper hides shimMode/logger/storage, so // generated apps don't ship internal orchestrator options or `logLevel: 'debug'`. @@ -9,15 +9,15 @@ const FEDERATION_IMPORT = `import { initFederation } from '@angular-architects/n function getFederationArg( options: NfSchematicSchema, remoteMap: unknown, - manifestRelPath: string + manifestRelPath: string, ): string { switch (options.type) { - case 'dynamic-host': + case "dynamic-host": return `'${manifestRelPath}'`; - case 'host': + case "host": return JSON.stringify(remoteMap, null, 2).replace(/"/g, "'"); default: - return `{ '${options.project}': './remoteEntry.json' }`; + return ``; } } @@ -25,11 +25,11 @@ export function makeMainAsync( main: string, options: NfSchematicSchema, remoteMap: unknown, - manifestRelPath: string + manifestRelPath: string, ): Rule { return async function (tree) { const mainPath = path.dirname(main); - const bootstrapName = path.join(mainPath, 'bootstrap.ts'); + const bootstrapName = path.join(mainPath, "bootstrap.ts"); if (tree.exists(bootstrapName)) { console.info(`${bootstrapName} already exists.`); @@ -49,7 +49,7 @@ initFederation(${federationArg}) .catch(err => console.error(err)) .then(_ => import('./bootstrap')) .catch(err => console.error(err)); -` +`, ); }; } From 91dec6a338a324c2fec57307478f47e6b9d1b90b Mon Sep 17 00:00:00 2001 From: Aukevanoost Date: Tue, 11 Aug 2026 07:46:48 +0200 Subject: [PATCH 3/3] fix: Explicitly set hostRemoteEntry --- src/schematics/init/steps/add-dependencies.ts | 34 +++++++++---------- src/schematics/init/steps/make-main-async.ts | 6 ++-- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/schematics/init/steps/add-dependencies.ts b/src/schematics/init/steps/add-dependencies.ts index 78aa6f4..fbec339 100644 --- a/src/schematics/init/steps/add-dependencies.ts +++ b/src/schematics/init/steps/add-dependencies.ts @@ -1,11 +1,15 @@ -import type { SchematicContext, Tree } from '@angular-devkit/schematics'; -import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks/index.js'; +import type { SchematicContext, Tree } from "@angular-devkit/schematics"; +import { NodePackageInstallTask } from "@angular-devkit/schematics/tasks/index.js"; -type DependencyType = 'dependencies' | 'devDependencies'; +type DependencyType = "dependencies" | "devDependencies"; type PackageJson = Partial>>; -export function addDependencies(tree: Tree, context: SchematicContext, ssr: boolean): void { - const packageJson = (tree.readJson('package.json') as PackageJson) ?? {}; +export function addDependencies( + tree: Tree, + context: SchematicContext, + ssr: boolean, +): void { + const packageJson = (tree.readJson("package.json") as PackageJson) ?? {}; function addDependency( type: DependencyType, @@ -19,27 +23,23 @@ export function addDependencies(tree: Tree, context: SchematicContext, ssr: bool } } - addDependency('dependencies', 'es-module-shims', '^2.8.0'); + addDependency("dependencies", "es-module-shims", "^2.8.0"); - // Browser-only projects bundle the orchestrator into the app, so a dev - // dependency suffices. For SSR it must be a runtime dependency: the generated - // server entry imports '@softarc/native-federation-orchestrator/node' as a - // bare specifier resolved from node_modules at runtime. addDependency( - ssr ? 'dependencies' : 'devDependencies', - '@softarc/native-federation-orchestrator', - '^4.2.2', + "devDependencies", + "@softarc/native-federation-orchestrator", + "^4.6.0", true, ); if (ssr) { - console.log('SSR detected ...'); - console.log('Activating CORS ...'); + console.log("SSR detected ..."); + console.log("Activating CORS ..."); - addDependency('dependencies', 'cors', '^2.8.5'); + addDependency("dependencies", "cors", "^2.8.5"); } - tree.overwrite('package.json', JSON.stringify(packageJson, null, 2)); + tree.overwrite("package.json", JSON.stringify(packageJson, null, 2)); context.addTask(new NodePackageInstallTask()); } diff --git a/src/schematics/init/steps/make-main-async.ts b/src/schematics/init/steps/make-main-async.ts index d146fb5..69c2b76 100644 --- a/src/schematics/init/steps/make-main-async.ts +++ b/src/schematics/init/steps/make-main-async.ts @@ -17,7 +17,7 @@ function getFederationArg( case "host": return JSON.stringify(remoteMap, null, 2).replace(/"/g, "'"); default: - return ``; + return `{}`; } } @@ -45,7 +45,9 @@ export function makeMainAsync( main, `${FEDERATION_IMPORT} -initFederation(${federationArg}) +initFederation(${federationArg}, { + hostRemoteEntry: { url: "./remoteEntry.json" } +}) .catch(err => console.error(err)) .then(_ => import('./bootstrap')) .catch(err => console.error(err));