@softarc/native-federation-orchestrator 4.1.1 → 4.2.1

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 (32) hide show
  1. package/README.md +5 -0
  2. package/fesm2022/@softarc/native-federation-orchestrator.mjs +47 -47
  3. package/fesm2022/@softarc/native-federation-orchestrator.mjs.map +3 -3
  4. package/fesm2022/node.mjs +2973 -0
  5. package/fesm2022/node.mjs.map +7 -0
  6. package/fesm2022/options.mjs +1 -1
  7. package/fesm2022/options.mjs.map +2 -2
  8. package/fesm2022/registry.mjs +78 -30
  9. package/fesm2022/registry.mjs.map +4 -4
  10. package/fesm2022/sdk.mjs +1 -1
  11. package/fesm2022/sdk.mjs.map +2 -2
  12. package/init-registry.mjs +1 -1
  13. package/node-loader/loader.mjs +92 -0
  14. package/node-loader/loader.mjs.map +7 -0
  15. package/package.json +12 -4
  16. package/quickstart.mjs +11 -11
  17. package/types/lib/1.domain/registry/event-registry.contract.d.ts +4 -1
  18. package/types/lib/1.domain/registry/index.d.ts +0 -1
  19. package/types/lib/2.app/config/registry.contract.d.ts +2 -2
  20. package/types/lib/2.app/flows/registry/setup-registry.d.ts +2 -2
  21. package/types/lib/3.adapters/node/fs-manifest-provider.d.ts +3 -0
  22. package/types/lib/3.adapters/node/fs-remote-entry-provider.d.ts +3 -0
  23. package/types/lib/3.adapters/node/loader-url.d.ts +8 -0
  24. package/types/lib/3.adapters/node/node-loader.client.d.ts +9 -0
  25. package/types/lib/3.adapters/node/noop-sse.d.ts +3 -0
  26. package/types/lib/4.config/import-map/use-node.d.ts +6 -0
  27. package/types/lib/init-federation.node.d.ts +6 -0
  28. package/types/lib/node.index.d.ts +5 -0
  29. package/types/lib/utils/node/read-source.d.ts +1 -0
  30. package/types/lib/utils/node/to-url.d.ts +3 -0
  31. package/types/node-loader.d.ts +41 -0
  32. package/types/lib/1.domain/registry/registry-options.contract.d.ts +0 -11
package/README.md CHANGED
@@ -16,6 +16,7 @@ A lightweight **runtime micro frontend orchestrator** that loads micro frontends
16
16
  - 💾 **Advanced Caching** - Optimized for page-reload scenarios with flexible storage options like localStorage and sessionStorage
17
17
  - 🔄 **Smart Dependency Resolution** - Automatic version conflict resolution and sharing based on the module federation mental model.
18
18
  - 🌐 **Full native-federation compatibility** - Works with standard remoteEntry.json format.
19
+ - 🖥️ **Server-side rendering ready** - First-class Node.js entry point (`/node`) that runs the same pipeline through a `module.register()` loader hook.
19
20
  - ⚡ **Lightweight & Fast** - Minimal bundle size (~80kb) with tree-shaking support.
20
21
  - 🛠️ **Highly Configurable** - Extensive options and SDK for fine-tuning behavior.
21
22
 
@@ -23,6 +24,8 @@ A lightweight **runtime micro frontend orchestrator** that loads micro frontends
23
24
 
24
25
  The library runs in the browser to orchestrate the integration of micro frontends into plain HTML pages. While the host application can be SSR, the micro frontends are loaded as ES modules at runtime, providing the benefits of micro frontend architecture without requiring a full SPA framework.
25
26
 
27
+ The same pipeline is also available on the server via the `/node` subpath export, which installs a Node `module.register()` loader hook so federated `import(...)` calls resolve through the orchestrator-built import map. See the [Node.js usage guide](./docs/node.md).
28
+
26
29
  ### Extends the Native Federation Ecosystem
27
30
 
28
31
  This library provides an alternative runtime to [@softarc/native-federation-runtime](https://www.npmjs.com/package/@softarc/native-federation-runtime), extending native federation capabilities while maintaining full compatibility with the broader ecosystem. It can load any remotes that have been built using [@softarc/native-federation](https://www.npmjs.com/package/@softarc/native-federation) and expose a `remoteEntry.json` metadata file.
@@ -123,8 +126,10 @@ const HeaderComponent = await loadRemoteModule('team/mfe2', './Header');
123
126
  | Guide | Description |
124
127
  | ------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
125
128
  | [🚀 Getting Started](https://github.com/native-federation/orchestrator/blob/main/docs/getting-started.md) | Detailed setup instructions and examples |
129
+ | [🖥️ Node.js (server-side) usage](https://github.com/native-federation/orchestrator/blob/main/docs/node.md) | SSR / Node entry, loader hook, migration guide |
126
130
  | [🏗️ Architecture](https://github.com/native-federation/orchestrator/blob/main/docs/architecture.md) | Understanding the native federation domain |
127
131
  | [⚙️ Configuration](https://github.com/native-federation/orchestrator/blob/main/docs/config.md) | Complete configuration reference |
132
+ | [📡 Event Registry](https://github.com/native-federation/orchestrator/blob/main/docs/event-registry.md) | In-page event bus for cross-MFE communication |
128
133
  | [🔄 Version Resolution](https://github.com/native-federation/orchestrator/blob/main/docs/version-resolver.md) | How dependency conflicts are resolved |
129
134
  | [🔒 Security & Trusted Types](https://github.com/native-federation/orchestrator/blob/main/docs/security.md) | CSP setup and the built-in Trusted Types policy |
130
135
 
@@ -24,9 +24,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  mod
25
25
  ));
26
26
 
27
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/debug.js
27
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/debug.js
28
28
  var require_debug = __commonJS({
29
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/debug.js"(exports, module) {
29
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/debug.js"(exports, module) {
30
30
  "use strict";
31
31
  var debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {
32
32
  };
@@ -34,9 +34,9 @@ var require_debug = __commonJS({
34
34
  }
35
35
  });
36
36
 
37
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/constants.js
37
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/constants.js
38
38
  var require_constants = __commonJS({
39
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/constants.js"(exports, module) {
39
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/constants.js"(exports, module) {
40
40
  "use strict";
41
41
  var SEMVER_SPEC_VERSION = "2.0.0";
42
42
  var MAX_LENGTH = 256;
@@ -66,9 +66,9 @@ var require_constants = __commonJS({
66
66
  }
67
67
  });
68
68
 
69
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/re.js
69
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/re.js
70
70
  var require_re = __commonJS({
71
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/re.js"(exports, module) {
71
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/re.js"(exports, module) {
72
72
  "use strict";
73
73
  var {
74
74
  MAX_SAFE_COMPONENT_LENGTH,
@@ -154,9 +154,9 @@ var require_re = __commonJS({
154
154
  }
155
155
  });
156
156
 
157
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/parse-options.js
157
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/parse-options.js
158
158
  var require_parse_options = __commonJS({
159
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/parse-options.js"(exports, module) {
159
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/parse-options.js"(exports, module) {
160
160
  "use strict";
161
161
  var looseOption = Object.freeze({ loose: true });
162
162
  var emptyOpts = Object.freeze({});
@@ -173,9 +173,9 @@ var require_parse_options = __commonJS({
173
173
  }
174
174
  });
175
175
 
176
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/identifiers.js
176
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/identifiers.js
177
177
  var require_identifiers = __commonJS({
178
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/identifiers.js"(exports, module) {
178
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/identifiers.js"(exports, module) {
179
179
  "use strict";
180
180
  var numeric = /^[0-9]+$/;
181
181
  var compareIdentifiers = (a, b) => {
@@ -198,9 +198,9 @@ var require_identifiers = __commonJS({
198
198
  }
199
199
  });
200
200
 
201
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/semver.js
201
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/semver.js
202
202
  var require_semver = __commonJS({
203
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/semver.js"(exports, module) {
203
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/semver.js"(exports, module) {
204
204
  "use strict";
205
205
  var debug = require_debug();
206
206
  var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
@@ -477,9 +477,9 @@ var require_semver = __commonJS({
477
477
  }
478
478
  });
479
479
 
480
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/parse.js
480
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/parse.js
481
481
  var require_parse = __commonJS({
482
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/parse.js"(exports, module) {
482
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/parse.js"(exports, module) {
483
483
  "use strict";
484
484
  var SemVer = require_semver();
485
485
  var parse = (version, options, throwErrors = false) => {
@@ -499,9 +499,9 @@ var require_parse = __commonJS({
499
499
  }
500
500
  });
501
501
 
502
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/valid.js
502
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/valid.js
503
503
  var require_valid = __commonJS({
504
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/valid.js"(exports, module) {
504
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/valid.js"(exports, module) {
505
505
  "use strict";
506
506
  var parse = require_parse();
507
507
  var valid = (version, options) => {
@@ -512,9 +512,9 @@ var require_valid = __commonJS({
512
512
  }
513
513
  });
514
514
 
515
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/lrucache.js
515
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/lrucache.js
516
516
  var require_lrucache = __commonJS({
517
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/lrucache.js"(exports, module) {
517
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/lrucache.js"(exports, module) {
518
518
  "use strict";
519
519
  var LRUCache = class {
520
520
  constructor() {
@@ -550,9 +550,9 @@ var require_lrucache = __commonJS({
550
550
  }
551
551
  });
552
552
 
553
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare.js
553
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/compare.js
554
554
  var require_compare = __commonJS({
555
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare.js"(exports, module) {
555
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/compare.js"(exports, module) {
556
556
  "use strict";
557
557
  var SemVer = require_semver();
558
558
  var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
@@ -560,9 +560,9 @@ var require_compare = __commonJS({
560
560
  }
561
561
  });
562
562
 
563
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/eq.js
563
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/eq.js
564
564
  var require_eq = __commonJS({
565
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/eq.js"(exports, module) {
565
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/eq.js"(exports, module) {
566
566
  "use strict";
567
567
  var compare = require_compare();
568
568
  var eq = (a, b, loose) => compare(a, b, loose) === 0;
@@ -570,9 +570,9 @@ var require_eq = __commonJS({
570
570
  }
571
571
  });
572
572
 
573
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/neq.js
573
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/neq.js
574
574
  var require_neq = __commonJS({
575
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/neq.js"(exports, module) {
575
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/neq.js"(exports, module) {
576
576
  "use strict";
577
577
  var compare = require_compare();
578
578
  var neq = (a, b, loose) => compare(a, b, loose) !== 0;
@@ -580,9 +580,9 @@ var require_neq = __commonJS({
580
580
  }
581
581
  });
582
582
 
583
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gt.js
583
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gt.js
584
584
  var require_gt = __commonJS({
585
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gt.js"(exports, module) {
585
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gt.js"(exports, module) {
586
586
  "use strict";
587
587
  var compare = require_compare();
588
588
  var gt = (a, b, loose) => compare(a, b, loose) > 0;
@@ -590,9 +590,9 @@ var require_gt = __commonJS({
590
590
  }
591
591
  });
592
592
 
593
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gte.js
593
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gte.js
594
594
  var require_gte = __commonJS({
595
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gte.js"(exports, module) {
595
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gte.js"(exports, module) {
596
596
  "use strict";
597
597
  var compare = require_compare();
598
598
  var gte = (a, b, loose) => compare(a, b, loose) >= 0;
@@ -600,9 +600,9 @@ var require_gte = __commonJS({
600
600
  }
601
601
  });
602
602
 
603
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lt.js
603
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lt.js
604
604
  var require_lt = __commonJS({
605
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lt.js"(exports, module) {
605
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lt.js"(exports, module) {
606
606
  "use strict";
607
607
  var compare = require_compare();
608
608
  var lt = (a, b, loose) => compare(a, b, loose) < 0;
@@ -610,9 +610,9 @@ var require_lt = __commonJS({
610
610
  }
611
611
  });
612
612
 
613
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lte.js
613
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lte.js
614
614
  var require_lte = __commonJS({
615
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lte.js"(exports, module) {
615
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lte.js"(exports, module) {
616
616
  "use strict";
617
617
  var compare = require_compare();
618
618
  var lte = (a, b, loose) => compare(a, b, loose) <= 0;
@@ -620,9 +620,9 @@ var require_lte = __commonJS({
620
620
  }
621
621
  });
622
622
 
623
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/cmp.js
623
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/cmp.js
624
624
  var require_cmp = __commonJS({
625
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/cmp.js"(exports, module) {
625
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/cmp.js"(exports, module) {
626
626
  "use strict";
627
627
  var eq = require_eq();
628
628
  var neq = require_neq();
@@ -670,9 +670,9 @@ var require_cmp = __commonJS({
670
670
  }
671
671
  });
672
672
 
673
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/comparator.js
673
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/comparator.js
674
674
  var require_comparator = __commonJS({
675
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/comparator.js"(exports, module) {
675
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/comparator.js"(exports, module) {
676
676
  "use strict";
677
677
  var ANY = /* @__PURE__ */ Symbol("SemVer ANY");
678
678
  var Comparator = class _Comparator {
@@ -783,9 +783,9 @@ var require_comparator = __commonJS({
783
783
  }
784
784
  });
785
785
 
786
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/range.js
786
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/range.js
787
787
  var require_range = __commonJS({
788
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/range.js"(exports, module) {
788
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/range.js"(exports, module) {
789
789
  "use strict";
790
790
  var SPACE_CHARACTERS = /\s+/g;
791
791
  var Range = class _Range {
@@ -1160,9 +1160,9 @@ var require_range = __commonJS({
1160
1160
  }
1161
1161
  });
1162
1162
 
1163
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/satisfies.js
1163
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/satisfies.js
1164
1164
  var require_satisfies = __commonJS({
1165
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/satisfies.js"(exports, module) {
1165
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/satisfies.js"(exports, module) {
1166
1166
  "use strict";
1167
1167
  var Range = require_range();
1168
1168
  var satisfies = (version, range, options) => {
@@ -1177,9 +1177,9 @@ var require_satisfies = __commonJS({
1177
1177
  }
1178
1178
  });
1179
1179
 
1180
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/min-version.js
1180
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/min-version.js
1181
1181
  var require_min_version = __commonJS({
1182
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/min-version.js"(exports, module) {
1182
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/min-version.js"(exports, module) {
1183
1183
  "use strict";
1184
1184
  var SemVer = require_semver();
1185
1185
  var Range = require_range();
@@ -1236,9 +1236,9 @@ var require_min_version = __commonJS({
1236
1236
  }
1237
1237
  });
1238
1238
 
1239
- // node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/valid.js
1239
+ // node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/valid.js
1240
1240
  var require_valid2 = __commonJS({
1241
- "node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/valid.js"(exports, module) {
1241
+ "node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/valid.js"(exports, module) {
1242
1242
  "use strict";
1243
1243
  var Range = require_range();
1244
1244
  var validRange = (range, options) => {
@@ -1562,7 +1562,7 @@ function createDetermineSharedExternals(config, ports) {
1562
1562
  }
1563
1563
  }
1564
1564
 
1565
- // node_modules/.pnpm/@softarc+native-federation@4.1.0_typescript@5.9.3/node_modules/@softarc/native-federation/src/lib/domain/core/build-notification-options.contract.js
1565
+ // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@5.9.3/node_modules/@softarc/native-federation/src/lib/domain/core/build-notification-options.contract.js
1566
1566
  var BuildNotificationType;
1567
1567
  (function(BuildNotificationType2) {
1568
1568
  BuildNotificationType2["COMPLETED"] = "federation-rebuild-complete";
@@ -1570,7 +1570,7 @@ var BuildNotificationType;
1570
1570
  BuildNotificationType2["CANCELLED"] = "federation-rebuild-cancelled";
1571
1571
  })(BuildNotificationType || (BuildNotificationType = {}));
1572
1572
 
1573
- // node_modules/.pnpm/@softarc+native-federation@4.1.0_typescript@5.9.3/node_modules/@softarc/native-federation/src/lib/domain/core/chunk.js
1573
+ // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@5.9.3/node_modules/@softarc/native-federation/src/lib/domain/core/chunk.js
1574
1574
  var CHUNK_PREFIX = "@nf-internal";
1575
1575
  function toChunkImport(fileName) {
1576
1576
  if (fileName.startsWith("./")) {
@@ -2224,7 +2224,7 @@ var cloneEntry = (name, raw) => {
2224
2224
  return JSON.parse(JSON.stringify(raw));
2225
2225
  } catch {
2226
2226
  }
2227
- throw new NFError(`Could not parse storage entry '${String(name)}'`);
2227
+ throw new NFError(`Could not clone entry '${String(name)}'`);
2228
2228
  };
2229
2229
 
2230
2230
  // src/lib/3.adapters/storage/chunk.repository.ts