@softarc/native-federation-orchestrator 4.2.1 → 4.3.0

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 (159) hide show
  1. package/README.md +2 -2
  2. package/fesm2022/@softarc/native-federation-orchestrator.mjs +887 -917
  3. package/fesm2022/@softarc/native-federation-orchestrator.mjs.map +4 -4
  4. package/fesm2022/audit.mjs +2 -2
  5. package/fesm2022/audit.mjs.map +2 -2
  6. package/fesm2022/node.mjs +499 -448
  7. package/fesm2022/node.mjs.map +4 -4
  8. package/fesm2022/options.mjs +13 -13
  9. package/fesm2022/options.mjs.map +3 -3
  10. package/fesm2022/registry.mjs +2 -2
  11. package/fesm2022/registry.mjs.map +3 -3
  12. package/fesm2022/sdk.mjs +2 -2
  13. package/fesm2022/sdk.mjs.map +2 -2
  14. package/init-registry.mjs +1 -1
  15. package/node-loader/loader.mjs +38 -1
  16. package/node-loader/loader.mjs.map +3 -3
  17. package/package.json +2 -5
  18. package/quickstart.mjs +13 -13
  19. package/types/lib/audit/externals-audit.d.ts +4 -0
  20. package/types/lib/{2.app/driver-ports/audit → audit}/for-auditing-externals.port.d.ts +1 -1
  21. package/types/lib/audit.index.d.ts +2 -2
  22. package/types/lib/{2.app → core/2.app}/driver-ports/init/drivers.contract.d.ts +6 -0
  23. package/types/lib/core/2.app/driver-ports/init/flow.contract.d.ts +14 -0
  24. package/types/lib/{2.app/driver-ports/dynamic-init → core/2.app/driver-ports/init}/for-getting-remote-entry.port.d.ts +1 -1
  25. package/types/lib/{2.app → core/2.app}/driver-ports/init/index.d.ts +3 -0
  26. package/types/lib/{2.app → core/2.app}/driving-ports/for-remote-info-storage.port.d.ts +1 -1
  27. package/types/lib/{2.app → core/2.app}/driving-ports/for-scoped-externals-storage.port.d.ts +1 -1
  28. package/types/lib/{2.app → core/2.app}/driving-ports/for-shared-chunks-storage.port.d.ts +1 -1
  29. package/types/lib/{2.app → core/2.app}/driving-ports/for-shared-externals-storage.port.d.ts +1 -1
  30. package/types/lib/core/2.app/flows/init-remote-entry.flow.d.ts +4 -0
  31. package/types/lib/core/2.app/flows/init.flow.d.ts +4 -0
  32. package/types/lib/core/2.app/steps/commit-changes.d.ts +4 -0
  33. package/types/lib/core/2.app/steps/convert-to-import-map.d.ts +4 -0
  34. package/types/lib/core/2.app/steps/determine-shared-externals.d.ts +5 -0
  35. package/types/lib/core/2.app/steps/expose-module-loader.d.ts +4 -0
  36. package/types/lib/core/2.app/steps/generate-import-map.d.ts +5 -0
  37. package/types/lib/core/2.app/steps/get-remote-entries.d.ts +6 -0
  38. package/types/lib/core/2.app/steps/get-remote-entry.d.ts +5 -0
  39. package/types/lib/core/2.app/steps/process-remote-entries.d.ts +5 -0
  40. package/types/lib/core/2.app/steps/store-remote-entry.d.ts +23 -0
  41. package/types/lib/core/2.app/steps/update-cache.d.ts +5 -0
  42. package/types/lib/{3.adapters → core/3.adapters}/browser/sse-handler.d.ts +1 -1
  43. package/types/lib/core/5.di/federation-result.factory.d.ts +12 -0
  44. package/types/lib/core/5.di/init.factory.d.ts +12 -0
  45. package/types/lib/{init-federation.contract.d.ts → core/init-federation.contract.d.ts} +1 -1
  46. package/types/lib/index.d.ts +10 -8
  47. package/types/lib/{3.adapters/node → node/adapters}/fs-manifest-provider.d.ts +1 -1
  48. package/types/lib/{3.adapters/node → node/adapters}/fs-remote-entry-provider.d.ts +1 -1
  49. package/types/lib/{3.adapters/node → node/adapters}/node-loader.client.d.ts +4 -1
  50. package/types/lib/node/adapters/noop-sse.d.ts +3 -0
  51. package/types/lib/node/init-federation.node.d.ts +32 -0
  52. package/types/lib/node/resolve-host-instances.d.ts +50 -0
  53. package/types/lib/node/use-node.d.ts +8 -0
  54. package/types/lib/{utils/node → node/utils}/to-url.d.ts +1 -1
  55. package/types/lib/node.index.d.ts +5 -5
  56. package/types/lib/options.index.d.ts +5 -5
  57. package/types/lib/registry/for-managing-events.port.d.ts +2 -0
  58. package/types/lib/registry/setup-registry.d.ts +3 -0
  59. package/types/lib/registry.index.d.ts +5 -4
  60. package/types/lib/sdk.index.d.ts +4 -5
  61. package/types/lib/testing/handlers/log.handler.d.ts +3 -0
  62. package/types/lib/utils/clone-entry.d.ts +1 -1
  63. package/types/{init-registry.d.ts → scripts/init-registry.d.ts} +1 -1
  64. package/types/lib/1.domain/registry/index.d.ts +0 -2
  65. package/types/lib/2.app/driver-ports/audit/index.d.ts +0 -1
  66. package/types/lib/2.app/driver-ports/dynamic-init/drivers.contract.d.ts +0 -13
  67. package/types/lib/2.app/driver-ports/dynamic-init/flow.contract.d.ts +0 -8
  68. package/types/lib/2.app/driver-ports/dynamic-init/index.d.ts +0 -5
  69. package/types/lib/2.app/driver-ports/init/flow.contract.d.ts +0 -6
  70. package/types/lib/2.app/driver-ports/registry/for-managing-events.port.d.ts +0 -2
  71. package/types/lib/2.app/flows/audit/externals-audit.d.ts +0 -4
  72. package/types/lib/2.app/flows/dynamic-init/convert-to-import-map.d.ts +0 -4
  73. package/types/lib/2.app/flows/dynamic-init/get-remote-entry.d.ts +0 -5
  74. package/types/lib/2.app/flows/dynamic-init/update-cache.d.ts +0 -5
  75. package/types/lib/2.app/flows/init/commit-changes.d.ts +0 -4
  76. package/types/lib/2.app/flows/init/determine-shared-externals.d.ts +0 -5
  77. package/types/lib/2.app/flows/init/expose-module-loader.d.ts +0 -4
  78. package/types/lib/2.app/flows/init/generate-import-map.d.ts +0 -5
  79. package/types/lib/2.app/flows/init/get-remote-entries.d.ts +0 -6
  80. package/types/lib/2.app/flows/init/process-remote-entries.d.ts +0 -5
  81. package/types/lib/2.app/flows/registry/setup-registry.d.ts +0 -3
  82. package/types/lib/3.adapters/node/noop-sse.d.ts +0 -3
  83. package/types/lib/4.config/import-map/use-node.d.ts +0 -6
  84. package/types/lib/5.di/flows/dynamic-init.factory.d.ts +0 -14
  85. package/types/lib/5.di/flows/init.factory.d.ts +0 -14
  86. package/types/lib/6.mocks/handlers/log.handler.d.ts +0 -2
  87. package/types/lib/init-federation.node.d.ts +0 -6
  88. /package/types/lib/{1.domain → core/1.domain}/externals/chunks.contract.d.ts +0 -0
  89. /package/types/lib/{1.domain → core/1.domain}/externals/external.contract.d.ts +0 -0
  90. /package/types/lib/{1.domain → core/1.domain}/externals/version.contract.d.ts +0 -0
  91. /package/types/lib/{1.domain → core/1.domain}/import-map/import-map.contract.d.ts +0 -0
  92. /package/types/lib/{1.domain → core/1.domain}/index.d.ts +0 -0
  93. /package/types/lib/{1.domain → core/1.domain}/remote/remote-info.contract.d.ts +0 -0
  94. /package/types/lib/{1.domain → core/1.domain}/remote/remote-module.contract.d.ts +0 -0
  95. /package/types/lib/{1.domain → core/1.domain}/remote-entry/manifest.contract.d.ts +0 -0
  96. /package/types/lib/{1.domain → core/1.domain}/remote-entry/remote-entry.contract.d.ts +0 -0
  97. /package/types/lib/{2.app → core/2.app}/config/config.contract.d.ts +0 -0
  98. /package/types/lib/{2.app → core/2.app}/config/host.contract.d.ts +0 -0
  99. /package/types/lib/{2.app → core/2.app}/config/import-map.contract.d.ts +0 -0
  100. /package/types/lib/{2.app → core/2.app}/config/index.d.ts +0 -0
  101. /package/types/lib/{2.app → core/2.app}/config/log.contract.d.ts +0 -0
  102. /package/types/lib/{2.app → core/2.app}/config/mode.contract.d.ts +0 -0
  103. /package/types/lib/{2.app → core/2.app}/config/storage.contract.d.ts +0 -0
  104. /package/types/lib/{2.app → core/2.app}/driver-ports/flow-factory.contract.d.ts +0 -0
  105. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-committing-changes.port.d.ts +0 -0
  106. /package/types/lib/{2.app/driver-ports/dynamic-init → core/2.app/driver-ports/init}/for-converting-to-import-map.d.ts +0 -0
  107. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-determining-shared-externals.port.d.ts +0 -0
  108. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-exposing-module-loader.port.d.ts +0 -0
  109. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-generating-import-map.d.ts +0 -0
  110. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-getting-remote-entries.port.d.ts +0 -0
  111. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-processing-remote-entries.port.d.ts +0 -0
  112. /package/types/lib/{2.app/driver-ports/dynamic-init → core/2.app/driver-ports/init}/for-updating-cache.d.ts +0 -0
  113. /package/types/lib/{2.app → core/2.app}/driving-ports/driving.contract.d.ts +0 -0
  114. /package/types/lib/{2.app → core/2.app}/driving-ports/for-browser-tasks.d.ts +0 -0
  115. /package/types/lib/{2.app → core/2.app}/driving-ports/for-providing-manifest.port.d.ts +0 -0
  116. /package/types/lib/{2.app → core/2.app}/driving-ports/for-providing-remote-entries.port.d.ts +0 -0
  117. /package/types/lib/{2.app → core/2.app}/driving-ports/for-sse.port.d.ts +0 -0
  118. /package/types/lib/{2.app → core/2.app}/driving-ports/for-version-checking.port.d.ts +0 -0
  119. /package/types/lib/{2.app → core/2.app}/driving-ports/index.d.ts +0 -0
  120. /package/types/lib/{3.adapters → core/3.adapters}/browser/browser.d.ts +0 -0
  121. /package/types/lib/{3.adapters → core/3.adapters}/checks/version.check.d.ts +0 -0
  122. /package/types/lib/{3.adapters → core/3.adapters}/http/manifest-provider.d.ts +0 -0
  123. /package/types/lib/{3.adapters → core/3.adapters}/http/remote-entry-provider.d.ts +0 -0
  124. /package/types/lib/{3.adapters → core/3.adapters}/storage/chunk.repository.d.ts +0 -0
  125. /package/types/lib/{3.adapters → core/3.adapters}/storage/remote-info.repository.d.ts +0 -0
  126. /package/types/lib/{3.adapters → core/3.adapters}/storage/scoped-externals.repository.d.ts +0 -0
  127. /package/types/lib/{3.adapters → core/3.adapters}/storage/shared-externals.repository.d.ts +0 -0
  128. /package/types/lib/{4.config → core/4.config}/host/host.config.d.ts +0 -0
  129. /package/types/lib/{4.config → core/4.config}/import-map/import-map.config.d.ts +0 -0
  130. /package/types/lib/{4.config → core/4.config}/import-map/index.d.ts +0 -0
  131. /package/types/lib/{4.config → core/4.config}/import-map/replace-in-dom.d.ts +0 -0
  132. /package/types/lib/{4.config → core/4.config}/import-map/trusted-types.d.ts +0 -0
  133. /package/types/lib/{4.config → core/4.config}/import-map/use-default.d.ts +0 -0
  134. /package/types/lib/{4.config → core/4.config}/import-map/use-import-shim.d.ts +0 -0
  135. /package/types/lib/{4.config → core/4.config}/logging/console.logger.d.ts +0 -0
  136. /package/types/lib/{4.config → core/4.config}/logging/index.d.ts +0 -0
  137. /package/types/lib/{4.config → core/4.config}/logging/log.config.d.ts +0 -0
  138. /package/types/lib/{4.config → core/4.config}/logging/log.handler.d.ts +0 -0
  139. /package/types/lib/{4.config → core/4.config}/logging/noop.logger.d.ts +0 -0
  140. /package/types/lib/{4.config → core/4.config}/mode/caching.profile.d.ts +0 -0
  141. /package/types/lib/{4.config → core/4.config}/mode/default.profile.d.ts +0 -0
  142. /package/types/lib/{4.config → core/4.config}/mode/index.d.ts +0 -0
  143. /package/types/lib/{4.config → core/4.config}/mode/mode.config.d.ts +0 -0
  144. /package/types/lib/{4.config → core/4.config}/storage/global-this.storage.d.ts +0 -0
  145. /package/types/lib/{4.config → core/4.config}/storage/index.d.ts +0 -0
  146. /package/types/lib/{4.config → core/4.config}/storage/local.storage.d.ts +0 -0
  147. /package/types/lib/{4.config → core/4.config}/storage/session.storage.d.ts +0 -0
  148. /package/types/lib/{4.config → core/4.config}/storage/storage.config.d.ts +0 -0
  149. /package/types/lib/{5.di → core/5.di}/config.factory.d.ts +0 -0
  150. /package/types/lib/{5.di → core/5.di}/driving.factory.d.ts +0 -0
  151. /package/types/lib/{init-federation.d.ts → core/init-federation.d.ts} +0 -0
  152. /package/types/lib/{native-federation.error.d.ts → core/native-federation.error.d.ts} +0 -0
  153. /package/types/lib/{3.adapters/node → node/adapters}/loader-url.d.ts +0 -0
  154. /package/types/lib/{utils/node → node/utils}/read-source.d.ts +0 -0
  155. /package/types/lib/{1.domain/registry → registry}/event-registry.contract.d.ts +0 -0
  156. /package/types/lib/{1.domain/registry → registry}/event.contract.d.ts +0 -0
  157. /package/types/lib/{2.app/config → registry}/registry.contract.d.ts +0 -0
  158. /package/types/{node-loader.d.ts → scripts/node-loader.d.ts} +0 -0
  159. /package/types/{quickstart.d.ts → scripts/quickstart.d.ts} +0 -0
package/fesm2022/node.mjs CHANGED
@@ -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.8.0/node_modules/semver/internal/debug.js
27
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/internal/debug.js
28
28
  var require_debug = __commonJS({
29
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/debug.js"(exports, module) {
29
+ "node_modules/.pnpm/semver@7.8.3/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.8.0/node_modules/semver/internal/constants.js
37
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/internal/constants.js
38
38
  var require_constants = __commonJS({
39
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/constants.js"(exports, module) {
39
+ "node_modules/.pnpm/semver@7.8.3/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.8.0/node_modules/semver/internal/re.js
69
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/internal/re.js
70
70
  var require_re = __commonJS({
71
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/re.js"(exports, module) {
71
+ "node_modules/.pnpm/semver@7.8.3/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.8.0/node_modules/semver/internal/parse-options.js
157
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/internal/parse-options.js
158
158
  var require_parse_options = __commonJS({
159
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/parse-options.js"(exports, module) {
159
+ "node_modules/.pnpm/semver@7.8.3/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.8.0/node_modules/semver/internal/identifiers.js
176
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/internal/identifiers.js
177
177
  var require_identifiers = __commonJS({
178
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/identifiers.js"(exports, module) {
178
+ "node_modules/.pnpm/semver@7.8.3/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,15 +198,27 @@ var require_identifiers = __commonJS({
198
198
  }
199
199
  });
200
200
 
201
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/semver.js
201
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/classes/semver.js
202
202
  var require_semver = __commonJS({
203
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/semver.js"(exports, module) {
203
+ "node_modules/.pnpm/semver@7.8.3/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();
207
207
  var { safeRe: re, t } = require_re();
208
208
  var parseOptions = require_parse_options();
209
209
  var { compareIdentifiers } = require_identifiers();
210
+ var isPrereleaseIdentifier = (prerelease, identifier) => {
211
+ const identifiers = identifier.split(".");
212
+ if (identifiers.length > prerelease.length) {
213
+ return false;
214
+ }
215
+ for (let i = 0; i < identifiers.length; i++) {
216
+ if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {
217
+ return false;
218
+ }
219
+ }
220
+ return true;
221
+ };
210
222
  var SemVer = class _SemVer {
211
223
  constructor(version, options) {
212
224
  options = parseOptions(options);
@@ -453,8 +465,9 @@ var require_semver = __commonJS({
453
465
  if (identifierBase === false) {
454
466
  prerelease = [identifier];
455
467
  }
456
- if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
457
- if (isNaN(this.prerelease[1])) {
468
+ if (isPrereleaseIdentifier(this.prerelease, identifier)) {
469
+ const prereleaseBase = this.prerelease[identifier.split(".").length];
470
+ if (isNaN(prereleaseBase)) {
458
471
  this.prerelease = prerelease;
459
472
  }
460
473
  } else {
@@ -477,9 +490,9 @@ var require_semver = __commonJS({
477
490
  }
478
491
  });
479
492
 
480
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/parse.js
493
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/parse.js
481
494
  var require_parse = __commonJS({
482
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/parse.js"(exports, module) {
495
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/parse.js"(exports, module) {
483
496
  "use strict";
484
497
  var SemVer = require_semver();
485
498
  var parse = (version, options, throwErrors = false) => {
@@ -499,9 +512,9 @@ var require_parse = __commonJS({
499
512
  }
500
513
  });
501
514
 
502
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/valid.js
515
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/valid.js
503
516
  var require_valid = __commonJS({
504
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/valid.js"(exports, module) {
517
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/valid.js"(exports, module) {
505
518
  "use strict";
506
519
  var parse = require_parse();
507
520
  var valid = (version, options) => {
@@ -512,9 +525,9 @@ var require_valid = __commonJS({
512
525
  }
513
526
  });
514
527
 
515
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/lrucache.js
528
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/internal/lrucache.js
516
529
  var require_lrucache = __commonJS({
517
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/internal/lrucache.js"(exports, module) {
530
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/internal/lrucache.js"(exports, module) {
518
531
  "use strict";
519
532
  var LRUCache = class {
520
533
  constructor() {
@@ -550,9 +563,9 @@ var require_lrucache = __commonJS({
550
563
  }
551
564
  });
552
565
 
553
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/compare.js
566
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/compare.js
554
567
  var require_compare = __commonJS({
555
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/compare.js"(exports, module) {
568
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/compare.js"(exports, module) {
556
569
  "use strict";
557
570
  var SemVer = require_semver();
558
571
  var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
@@ -560,9 +573,9 @@ var require_compare = __commonJS({
560
573
  }
561
574
  });
562
575
 
563
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/eq.js
576
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/eq.js
564
577
  var require_eq = __commonJS({
565
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/eq.js"(exports, module) {
578
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/eq.js"(exports, module) {
566
579
  "use strict";
567
580
  var compare = require_compare();
568
581
  var eq = (a, b, loose) => compare(a, b, loose) === 0;
@@ -570,9 +583,9 @@ var require_eq = __commonJS({
570
583
  }
571
584
  });
572
585
 
573
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/neq.js
586
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/neq.js
574
587
  var require_neq = __commonJS({
575
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/neq.js"(exports, module) {
588
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/neq.js"(exports, module) {
576
589
  "use strict";
577
590
  var compare = require_compare();
578
591
  var neq = (a, b, loose) => compare(a, b, loose) !== 0;
@@ -580,9 +593,9 @@ var require_neq = __commonJS({
580
593
  }
581
594
  });
582
595
 
583
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gt.js
596
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/gt.js
584
597
  var require_gt = __commonJS({
585
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gt.js"(exports, module) {
598
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/gt.js"(exports, module) {
586
599
  "use strict";
587
600
  var compare = require_compare();
588
601
  var gt = (a, b, loose) => compare(a, b, loose) > 0;
@@ -590,9 +603,9 @@ var require_gt = __commonJS({
590
603
  }
591
604
  });
592
605
 
593
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gte.js
606
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/gte.js
594
607
  var require_gte = __commonJS({
595
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/gte.js"(exports, module) {
608
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/gte.js"(exports, module) {
596
609
  "use strict";
597
610
  var compare = require_compare();
598
611
  var gte = (a, b, loose) => compare(a, b, loose) >= 0;
@@ -600,9 +613,9 @@ var require_gte = __commonJS({
600
613
  }
601
614
  });
602
615
 
603
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lt.js
616
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/lt.js
604
617
  var require_lt = __commonJS({
605
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lt.js"(exports, module) {
618
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/lt.js"(exports, module) {
606
619
  "use strict";
607
620
  var compare = require_compare();
608
621
  var lt = (a, b, loose) => compare(a, b, loose) < 0;
@@ -610,9 +623,9 @@ var require_lt = __commonJS({
610
623
  }
611
624
  });
612
625
 
613
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lte.js
626
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/lte.js
614
627
  var require_lte = __commonJS({
615
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/lte.js"(exports, module) {
628
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/lte.js"(exports, module) {
616
629
  "use strict";
617
630
  var compare = require_compare();
618
631
  var lte = (a, b, loose) => compare(a, b, loose) <= 0;
@@ -620,9 +633,9 @@ var require_lte = __commonJS({
620
633
  }
621
634
  });
622
635
 
623
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/cmp.js
636
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/cmp.js
624
637
  var require_cmp = __commonJS({
625
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/cmp.js"(exports, module) {
638
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/cmp.js"(exports, module) {
626
639
  "use strict";
627
640
  var eq = require_eq();
628
641
  var neq = require_neq();
@@ -670,9 +683,9 @@ var require_cmp = __commonJS({
670
683
  }
671
684
  });
672
685
 
673
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/comparator.js
686
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/classes/comparator.js
674
687
  var require_comparator = __commonJS({
675
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/comparator.js"(exports, module) {
688
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/classes/comparator.js"(exports, module) {
676
689
  "use strict";
677
690
  var ANY = /* @__PURE__ */ Symbol("SemVer ANY");
678
691
  var Comparator = class _Comparator {
@@ -783,9 +796,9 @@ var require_comparator = __commonJS({
783
796
  }
784
797
  });
785
798
 
786
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/range.js
799
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/classes/range.js
787
800
  var require_range = __commonJS({
788
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/classes/range.js"(exports, module) {
801
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/classes/range.js"(exports, module) {
789
802
  "use strict";
790
803
  var SPACE_CHARACTERS = /\s+/g;
791
804
  var Range = class _Range {
@@ -853,6 +866,7 @@ var require_range = __commonJS({
853
866
  return this.range;
854
867
  }
855
868
  parseRange(range) {
869
+ range = range.replace(BUILDSTRIPRE, "");
856
870
  const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);
857
871
  const memoKey = memoOpts + ":" + range;
858
872
  const cached2 = cache.get(memoKey);
@@ -935,12 +949,14 @@ var require_range = __commonJS({
935
949
  var SemVer = require_semver();
936
950
  var {
937
951
  safeRe: re,
952
+ src,
938
953
  t,
939
954
  comparatorTrimReplace,
940
955
  tildeTrimReplace,
941
956
  caretTrimReplace
942
957
  } = require_re();
943
958
  var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants();
959
+ var BUILDSTRIPRE = new RegExp(src[t.BUILD], "g");
944
960
  var isNullSet = (c) => c.value === "<0.0.0-0";
945
961
  var isAny = (c) => c.value === "";
946
962
  var isSatisfiable = (comparators, options) => {
@@ -1028,9 +1044,9 @@ var require_range = __commonJS({
1028
1044
  debug("no pr");
1029
1045
  if (M === "0") {
1030
1046
  if (m === "0") {
1031
- ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
1047
+ ret = `>=${M}.${m}.${p} <${M}.${m}.${+p + 1}-0`;
1032
1048
  } else {
1033
- ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
1049
+ ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
1034
1050
  }
1035
1051
  } else {
1036
1052
  ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
@@ -1160,9 +1176,9 @@ var require_range = __commonJS({
1160
1176
  }
1161
1177
  });
1162
1178
 
1163
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/satisfies.js
1179
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/satisfies.js
1164
1180
  var require_satisfies = __commonJS({
1165
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/functions/satisfies.js"(exports, module) {
1181
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/satisfies.js"(exports, module) {
1166
1182
  "use strict";
1167
1183
  var Range = require_range();
1168
1184
  var satisfies = (version, range, options) => {
@@ -1177,9 +1193,9 @@ var require_satisfies = __commonJS({
1177
1193
  }
1178
1194
  });
1179
1195
 
1180
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/min-version.js
1196
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/ranges/min-version.js
1181
1197
  var require_min_version = __commonJS({
1182
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/min-version.js"(exports, module) {
1198
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/ranges/min-version.js"(exports, module) {
1183
1199
  "use strict";
1184
1200
  var SemVer = require_semver();
1185
1201
  var Range = require_range();
@@ -1236,9 +1252,9 @@ var require_min_version = __commonJS({
1236
1252
  }
1237
1253
  });
1238
1254
 
1239
- // node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/valid.js
1255
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/ranges/valid.js
1240
1256
  var require_valid2 = __commonJS({
1241
- "node_modules/.pnpm/semver@7.8.0/node_modules/semver/ranges/valid.js"(exports, module) {
1257
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/ranges/valid.js"(exports, module) {
1242
1258
  "use strict";
1243
1259
  var Range = require_range();
1244
1260
  var validRange = (range, options) => {
@@ -1252,7 +1268,7 @@ var require_valid2 = __commonJS({
1252
1268
  }
1253
1269
  });
1254
1270
 
1255
- // src/lib/3.adapters/browser/browser.ts
1271
+ // src/lib/core/3.adapters/browser/browser.ts
1256
1272
  var createBrowser = (config) => {
1257
1273
  return {
1258
1274
  setImportMapFn: config.setImportMapFn,
@@ -1260,7 +1276,7 @@ var createBrowser = (config) => {
1260
1276
  };
1261
1277
  };
1262
1278
 
1263
- // src/lib/3.adapters/checks/version.check.ts
1279
+ // src/lib/core/3.adapters/checks/version.check.ts
1264
1280
  var import_valid = __toESM(require_valid());
1265
1281
  var import_satisfies = __toESM(require_satisfies());
1266
1282
  var import_compare = __toESM(require_compare());
@@ -1285,7 +1301,7 @@ var createVersionCheck = () => {
1285
1301
  };
1286
1302
  };
1287
1303
 
1288
- // src/lib/native-federation.error.ts
1304
+ // src/lib/core/native-federation.error.ts
1289
1305
  var NFError = class extends Error {
1290
1306
  constructor(message, cause) {
1291
1307
  super(message, cause);
@@ -1331,7 +1347,7 @@ var verifyIntegrity = async (bytes, integrity) => {
1331
1347
  }
1332
1348
  };
1333
1349
 
1334
- // src/lib/utils/node/read-source.ts
1350
+ // src/lib/node/utils/read-source.ts
1335
1351
  import * as fs from "node:fs/promises";
1336
1352
  import { fileURLToPath } from "node:url";
1337
1353
  var isHttpUrl = (input) => input.startsWith("http://") || input.startsWith("https://");
@@ -1349,7 +1365,7 @@ var readSourceBytes = async (input) => {
1349
1365
  return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
1350
1366
  };
1351
1367
 
1352
- // src/lib/3.adapters/node/fs-manifest-provider.ts
1368
+ // src/lib/node/adapters/fs-manifest-provider.ts
1353
1369
  var createFsManifestProvider = () => {
1354
1370
  const formatError = (manifestUrl) => (err) => {
1355
1371
  if (err instanceof NFError) throw err;
@@ -1370,7 +1386,7 @@ var createFsManifestProvider = () => {
1370
1386
  };
1371
1387
  };
1372
1388
 
1373
- // src/lib/3.adapters/node/fs-remote-entry-provider.ts
1389
+ // src/lib/node/adapters/fs-remote-entry-provider.ts
1374
1390
  var createFsRemoteEntryProvider = () => {
1375
1391
  const fillEmptyFields = (remoteEntryUrl) => (remoteEntry) => {
1376
1392
  if (!remoteEntry.exposes) remoteEntry.exposes = [];
@@ -1397,7 +1413,7 @@ var createFsRemoteEntryProvider = () => {
1397
1413
  };
1398
1414
  };
1399
1415
 
1400
- // src/lib/3.adapters/node/noop-sse.ts
1416
+ // src/lib/node/adapters/noop-sse.ts
1401
1417
  var createNoopSSE = () => ({
1402
1418
  watchRemoteBuilds: () => {
1403
1419
  },
@@ -1460,7 +1476,7 @@ var Optional = class _Optional {
1460
1476
  }
1461
1477
  };
1462
1478
 
1463
- // src/lib/3.adapters/storage/remote-info.repository.ts
1479
+ // src/lib/core/3.adapters/storage/remote-info.repository.ts
1464
1480
  var createRemoteInfoRepository = (config) => {
1465
1481
  const STORAGE = config.storage("remotes", {});
1466
1482
  if (config.clearStorage) STORAGE.clear();
@@ -1495,7 +1511,7 @@ var createRemoteInfoRepository = (config) => {
1495
1511
  };
1496
1512
  };
1497
1513
 
1498
- // src/lib/3.adapters/storage/scoped-externals.repository.ts
1514
+ // src/lib/core/3.adapters/storage/scoped-externals.repository.ts
1499
1515
  var createScopedExternalsRepository = (config) => {
1500
1516
  const STORAGE = config.storage("scoped-externals", {});
1501
1517
  if (config.clearStorage) STORAGE.clear();
@@ -1523,11 +1539,11 @@ var createScopedExternalsRepository = (config) => {
1523
1539
  };
1524
1540
  };
1525
1541
 
1526
- // src/lib/1.domain/externals/external.contract.ts
1542
+ // src/lib/core/1.domain/externals/external.contract.ts
1527
1543
  var GLOBAL_SCOPE = "__GLOBAL__";
1528
1544
  var STRICT_SCOPE = "strict";
1529
1545
 
1530
- // src/lib/3.adapters/storage/shared-externals.repository.ts
1546
+ // src/lib/core/3.adapters/storage/shared-externals.repository.ts
1531
1547
  var createSharedExternalsRepository = (config) => {
1532
1548
  const STORAGE = config.storage(
1533
1549
  "shared-externals",
@@ -1593,22 +1609,7 @@ var createSharedExternalsRepository = (config) => {
1593
1609
  };
1594
1610
  };
1595
1611
 
1596
- // src/lib/utils/clone-entry.ts
1597
- var cloneEntry = (name, raw) => {
1598
- try {
1599
- if (typeof structuredClone === "function") {
1600
- return structuredClone(raw);
1601
- }
1602
- } catch {
1603
- }
1604
- try {
1605
- return JSON.parse(JSON.stringify(raw));
1606
- } catch {
1607
- }
1608
- throw new NFError(`Could not clone entry '${String(name)}'`);
1609
- };
1610
-
1611
- // src/lib/3.adapters/storage/chunk.repository.ts
1612
+ // src/lib/core/3.adapters/storage/chunk.repository.ts
1612
1613
  var createChunkRepository = (config) => {
1613
1614
  const STORAGE = config.storage("shared-chunks", {});
1614
1615
  if (config.clearStorage) STORAGE.clear();
@@ -1629,7 +1630,7 @@ var createChunkRepository = (config) => {
1629
1630
  };
1630
1631
  };
1631
1632
 
1632
- // src/lib/4.config/import-map/trusted-types.ts
1633
+ // src/lib/core/4.config/import-map/trusted-types.ts
1633
1634
  var IMPORT_MAP_KEYS = /* @__PURE__ */ new Set(["imports", "scopes", "integrity"]);
1634
1635
  var validateImportMapJSON = (input) => {
1635
1636
  let parsed;
@@ -1687,7 +1688,7 @@ var getTrustedTypesPolicy = (name = "nfo") => {
1687
1688
  return cachedPolicy;
1688
1689
  };
1689
1690
 
1690
- // src/lib/4.config/import-map/replace-in-dom.ts
1691
+ // src/lib/core/4.config/import-map/replace-in-dom.ts
1691
1692
  var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts = {}) => {
1692
1693
  if (opts?.override) {
1693
1694
  document.head.querySelectorAll(`script[type="${mapType}"]`).forEach((importMap2) => importMap2.remove());
@@ -1702,7 +1703,7 @@ var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts
1702
1703
  return Promise.resolve(importMap);
1703
1704
  };
1704
1705
 
1705
- // src/lib/4.config/import-map/use-default.ts
1706
+ // src/lib/core/4.config/import-map/use-default.ts
1706
1707
  var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
1707
1708
  loadModuleFn: (url) => {
1708
1709
  const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);
@@ -1717,7 +1718,7 @@ var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
1717
1718
  }
1718
1719
  });
1719
1720
 
1720
- // src/lib/4.config/import-map/import-map.config.ts
1721
+ // src/lib/core/4.config/import-map/import-map.config.ts
1721
1722
  var createImportMapConfig = (o) => {
1722
1723
  const fallback = useDefaultImportMap(o.trustedTypesPolicyName);
1723
1724
  return {
@@ -1727,7 +1728,7 @@ var createImportMapConfig = (o) => {
1727
1728
  };
1728
1729
  };
1729
1730
 
1730
- // src/lib/4.config/host/host.config.ts
1731
+ // src/lib/core/4.config/host/host.config.ts
1731
1732
  var createHostConfig = (override) => {
1732
1733
  const extras = override?.manifestIntegrity ? { manifestIntegrity: override.manifestIntegrity } : {};
1733
1734
  if (!override?.hostRemoteEntry) {
@@ -1751,7 +1752,7 @@ var createHostConfig = (override) => {
1751
1752
  };
1752
1753
  };
1753
1754
 
1754
- // src/lib/4.config/logging/noop.logger.ts
1755
+ // src/lib/core/4.config/logging/noop.logger.ts
1755
1756
  var noopLogger = {
1756
1757
  debug: () => {
1757
1758
  },
@@ -1761,14 +1762,14 @@ var noopLogger = {
1761
1762
  }
1762
1763
  };
1763
1764
 
1764
- // src/lib/2.app/config/log.contract.ts
1765
+ // src/lib/core/2.app/config/log.contract.ts
1765
1766
  var LogLevel = {
1766
1767
  debug: 0,
1767
1768
  warn: 1,
1768
1769
  error: 2
1769
1770
  };
1770
1771
 
1771
- // src/lib/4.config/logging/log.handler.ts
1772
+ // src/lib/core/4.config/logging/log.handler.ts
1772
1773
  var createLogHandler = (logger, logLevel) => {
1773
1774
  const logTypes = Object.keys(LogLevel).filter((key) => isNaN(Number(key)));
1774
1775
  return logTypes.reduce(
@@ -1786,13 +1787,28 @@ var createLogHandler = (logger, logLevel) => {
1786
1787
  );
1787
1788
  };
1788
1789
 
1789
- // src/lib/4.config/logging/log.config.ts
1790
+ // src/lib/core/4.config/logging/log.config.ts
1790
1791
  var createLogConfig = ({ logger, logLevel, sse }) => ({
1791
1792
  log: createLogHandler(logger ?? noopLogger, logLevel ?? "error"),
1792
1793
  sse: !!sse
1793
1794
  });
1794
1795
 
1795
- // src/lib/4.config/storage/global-this.storage.ts
1796
+ // src/lib/utils/clone-entry.ts
1797
+ var cloneEntry = (name, raw) => {
1798
+ try {
1799
+ if (typeof structuredClone === "function") {
1800
+ return structuredClone(raw);
1801
+ }
1802
+ } catch {
1803
+ }
1804
+ try {
1805
+ return JSON.parse(JSON.stringify(raw));
1806
+ } catch {
1807
+ }
1808
+ throw new NFError(`Could not clone entry '${String(name)}'`);
1809
+ };
1810
+
1811
+ // src/lib/core/4.config/storage/global-this.storage.ts
1796
1812
  var globalThisStorageEntry = (namespace) => (key, initialValue) => {
1797
1813
  if (!globalThis[namespace]) {
1798
1814
  globalThis[namespace] = {};
@@ -1815,20 +1831,20 @@ var globalThisStorageEntry = (namespace) => (key, initialValue) => {
1815
1831
  return entry;
1816
1832
  };
1817
1833
 
1818
- // src/lib/4.config/storage/storage.config.ts
1834
+ // src/lib/core/4.config/storage/storage.config.ts
1819
1835
  var createStorageConfig = (override) => ({
1820
1836
  storage: override.storage ? override.storage(override.storageNamespace ?? "__NATIVE_FEDERATION__") : globalThisStorageEntry(override.storageNamespace ?? "__NATIVE_FEDERATION__"),
1821
1837
  clearStorage: override.clearStorage ?? false
1822
1838
  });
1823
1839
 
1824
- // src/lib/4.config/mode/default.profile.ts
1840
+ // src/lib/core/4.config/mode/default.profile.ts
1825
1841
  var defaultProfile = {
1826
1842
  latestSharedExternal: false,
1827
1843
  overrideCachedRemotes: "init-only",
1828
1844
  overrideCachedRemotesIfURLMatches: false
1829
1845
  };
1830
1846
 
1831
- // src/lib/4.config/mode/mode.config.ts
1847
+ // src/lib/core/4.config/mode/mode.config.ts
1832
1848
  var createModeConfig = (override) => {
1833
1849
  const strictnessConfig = typeof override.strict === "boolean" ? {
1834
1850
  strictRemoteEntry: override.strict,
@@ -1849,7 +1865,7 @@ var createModeConfig = (override) => {
1849
1865
  };
1850
1866
  };
1851
1867
 
1852
- // src/lib/5.di/config.factory.ts
1868
+ // src/lib/core/5.di/config.factory.ts
1853
1869
  var createConfigHandlers = (overrides) => ({
1854
1870
  ...createImportMapConfig(overrides),
1855
1871
  ...createHostConfig(overrides),
@@ -1858,7 +1874,28 @@ var createConfigHandlers = (overrides) => ({
1858
1874
  ...createModeConfig(overrides)
1859
1875
  });
1860
1876
 
1861
- // src/lib/2.app/flows/init/get-remote-entries.ts
1877
+ // src/lib/core/2.app/flows/init.flow.ts
1878
+ var createInitFlow = ({
1879
+ flow,
1880
+ adapters,
1881
+ config
1882
+ }) => {
1883
+ return (remotesOrManifestUrl) => flow.getRemoteEntries(remotesOrManifestUrl).then(flow.processRemoteEntries).then(flow.determineSharedExternals).then(flow.generateImportMap).then(flow.commitChanges).then(flow.exposeModuleLoader).then((loadRemoteModule) => ({
1884
+ config,
1885
+ adapters,
1886
+ loadRemoteModule
1887
+ }));
1888
+ };
1889
+
1890
+ // src/lib/core/2.app/flows/init-remote-entry.flow.ts
1891
+ var createInitRemoteEntryFlow = ({
1892
+ flow
1893
+ }) => {
1894
+ const processDynamicRemoteEntry = (remoteEntry) => flow.updateCache(remoteEntry).then(flow.convertToImportMap).then(flow.commitChanges);
1895
+ return (remoteEntryUrl, remote) => flow.getRemoteEntry(remoteEntryUrl, remote).then((entry) => entry.map(processDynamicRemoteEntry).orElse(Promise.resolve())).then(() => void 0);
1896
+ };
1897
+
1898
+ // src/lib/core/2.app/steps/get-remote-entries.ts
1862
1899
  function createGetRemoteEntries(config, ports) {
1863
1900
  return (remotesOrManifestUrl = {}) => {
1864
1901
  const manifestPromise = config.manifestIntegrity ? ports.manifestProvider.provide(remotesOrManifestUrl, {
@@ -1952,20 +1989,13 @@ function createGetRemoteEntries(config, ports) {
1952
1989
  }
1953
1990
  }
1954
1991
 
1955
- // src/lib/2.app/flows/init/process-remote-entries.ts
1956
- function createProcessRemoteEntries(config, ports) {
1957
- return (remoteEntries) => {
1958
- try {
1959
- remoteEntries.forEach((remoteEntry) => {
1960
- if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
1961
- addRemoteInfoToStorage(remoteEntry);
1962
- addExternalsToStorage(remoteEntry);
1963
- addSharedChunksToStorage(remoteEntry);
1964
- });
1965
- return Promise.resolve(remoteEntries);
1966
- } catch (e) {
1967
- return Promise.reject(e);
1968
- }
1992
+ // src/lib/core/2.app/steps/store-remote-entry.ts
1993
+ function createStoreRemoteEntry(config, ports, logStep) {
1994
+ return (remoteEntry, onSharedExternal) => {
1995
+ if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
1996
+ addRemoteInfoToStorage(remoteEntry);
1997
+ addExternalsToStorage(remoteEntry, onSharedExternal);
1998
+ addSharedChunksToStorage(remoteEntry);
1969
1999
  };
1970
2000
  function removeCachedRemoteEntry(remoteEntry) {
1971
2001
  ports.remoteInfoRepo.remove(remoteEntry.name);
@@ -1982,88 +2012,124 @@ function createProcessRemoteEntries(config, ports) {
1982
2012
  ...integrity ? { integrity } : {}
1983
2013
  });
1984
2014
  }
1985
- function addExternalsToStorage(remoteEntry) {
2015
+ function addExternalsToStorage(remoteEntry, onSharedExternal) {
1986
2016
  remoteEntry.shared.forEach((external) => {
1987
- if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
1988
- const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
1989
- if (config.strict.strictExternalVersion) {
1990
- config.log.error(2, errorMsg);
1991
- throw new NFError(`Could not process remote '${remoteEntry.name}'`);
1992
- }
1993
- config.log.warn(2, errorMsg);
1994
- }
2017
+ validateExternalVersion(remoteEntry, external);
1995
2018
  if (external.singleton) {
1996
- addSharedExternal(remoteEntry.name, external, remoteEntry);
2019
+ onSharedExternal(remoteEntry, external, sharedExternalContext(remoteEntry, external));
1997
2020
  } else {
1998
- addScopedExternal(remoteEntry.name, external);
2021
+ addScopedExternal(remoteEntry, external);
1999
2022
  }
2000
2023
  });
2001
2024
  }
2002
2025
  function addSharedChunksToStorage(remoteEntry) {
2003
2026
  if (!remoteEntry.chunks) return;
2004
2027
  config.log.debug(
2005
- 2,
2028
+ logStep,
2006
2029
  `Adding chunks for remote "${remoteEntry.name}", bundles: [${Object.keys(remoteEntry.chunks).join(", ")}]`
2007
2030
  );
2008
2031
  Object.entries(remoteEntry.chunks).forEach(([bundleName, chunks]) => {
2009
2032
  ports.sharedChunksRepo.addOrReplace(remoteEntry.name, bundleName, chunks);
2010
2033
  });
2011
2034
  }
2012
- function addSharedExternal(remoteName, sharedInfo, remoteEntry) {
2013
- let action = "skip";
2035
+ function addScopedExternal(remoteEntry, sharedInfo) {
2036
+ ports.scopedExternalsRepo.addExternal(remoteEntry.name, sharedInfo.packageName, {
2037
+ tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
2038
+ file: sharedInfo.outFileName,
2039
+ bundle: sharedInfo.bundle
2040
+ });
2041
+ }
2042
+ function validateExternalVersion(remoteEntry, external) {
2043
+ if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
2044
+ const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
2045
+ if (config.strict.strictExternalVersion) {
2046
+ config.log.error(logStep, errorMsg);
2047
+ throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2048
+ }
2049
+ config.log.warn(logStep, errorMsg);
2050
+ }
2051
+ }
2052
+ function sharedExternalContext(remoteEntry, sharedInfo) {
2014
2053
  const tag = sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion);
2054
+ const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2015
2055
  const remote = {
2016
2056
  file: sharedInfo.outFileName,
2017
- name: remoteName,
2057
+ name: remoteEntry.name,
2018
2058
  bundle: sharedInfo.bundle,
2019
2059
  strictVersion: sharedInfo.strictVersion,
2020
2060
  cached: false,
2021
- requiredVersion: sharedInfo.requiredVersion || tag
2061
+ requiredVersion: scopeType === "strict" ? tag : sharedInfo.requiredVersion || tag
2022
2062
  };
2023
- const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2024
- if (scopeType === "strict") {
2025
- action = "share";
2026
- remote.requiredVersion = tag;
2027
- }
2028
2063
  const cached2 = ports.sharedExternalsRepo.tryGet(sharedInfo.packageName, sharedInfo.shareScope).orElse({ dirty: false, versions: [] });
2029
- const matchingVersion = cached2.versions.find((version) => version.tag === sharedInfo.version);
2030
- let dirty = cached2.dirty;
2031
- if (!!matchingVersion) {
2032
- if (remote.strictVersion && matchingVersion.remotes[0].requiredVersion !== remote.requiredVersion) {
2033
- const errorMsg = `[${remoteName}][${sharedInfo.packageName}@${sharedInfo.version}] Required version-range '${remote.requiredVersion}' does not match cached version-range '${matchingVersion.remotes[0].requiredVersion}'`;
2064
+ return {
2065
+ tag,
2066
+ remote,
2067
+ cached: cached2,
2068
+ scopeType,
2069
+ assertSameVersionCompatibility(matchingVersion) {
2070
+ if (!remote.strictVersion) return;
2071
+ if (matchingVersion.remotes[0].requiredVersion === remote.requiredVersion) return;
2072
+ const errorMsg = `[${remoteEntry.name}][${sharedInfo.packageName}@${sharedInfo.version}] Required version-range '${remote.requiredVersion}' does not match cached version-range '${matchingVersion.remotes[0].requiredVersion}'`;
2034
2073
  if (config.strict.strictExternalSameVersionCompatibility) {
2035
- config.log.error(2, errorMsg);
2074
+ config.log.error(logStep, errorMsg);
2036
2075
  throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2037
2076
  }
2038
- config.log.warn(2, errorMsg);
2077
+ config.log.warn(logStep, errorMsg);
2078
+ },
2079
+ commit() {
2080
+ ports.sharedExternalsRepo.addOrUpdate(
2081
+ sharedInfo.packageName,
2082
+ {
2083
+ dirty: cached2.dirty,
2084
+ versions: cached2.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
2085
+ },
2086
+ sharedInfo.shareScope
2087
+ );
2039
2088
  }
2089
+ };
2090
+ }
2091
+ }
2092
+
2093
+ // src/lib/core/2.app/steps/process-remote-entries.ts
2094
+ function createProcessRemoteEntries(config, ports) {
2095
+ const storeRemoteEntry = createStoreRemoteEntry(config, ports, 2);
2096
+ return (remoteEntries) => {
2097
+ try {
2098
+ remoteEntries.forEach((remoteEntry) => storeRemoteEntry(remoteEntry, addSharedExternal));
2099
+ return Promise.resolve(remoteEntries);
2100
+ } catch (e) {
2101
+ return Promise.reject(e);
2102
+ }
2103
+ };
2104
+ function addSharedExternal(remoteEntry, _sharedInfo, {
2105
+ tag,
2106
+ remote,
2107
+ cached: cached2,
2108
+ scopeType,
2109
+ assertSameVersionCompatibility,
2110
+ commit
2111
+ }) {
2112
+ const matchingVersion = cached2.versions.find((version) => version.tag === tag);
2113
+ if (matchingVersion) {
2114
+ assertSameVersionCompatibility(matchingVersion);
2040
2115
  if (!matchingVersion.host && !!remoteEntry?.host) {
2041
2116
  matchingVersion.host = true;
2042
2117
  matchingVersion.remotes.unshift(remote);
2043
2118
  } else matchingVersion.remotes.push(remote);
2044
2119
  } else {
2045
- if (scopeType !== "strict") dirty = true;
2046
- cached2.versions.push({ tag, action, host: !!remoteEntry?.host, remotes: [remote] });
2120
+ if (scopeType !== "strict") cached2.dirty = true;
2121
+ cached2.versions.push({
2122
+ tag,
2123
+ action: scopeType === "strict" ? "share" : "skip",
2124
+ host: !!remoteEntry?.host,
2125
+ remotes: [remote]
2126
+ });
2047
2127
  }
2048
- ports.sharedExternalsRepo.addOrUpdate(
2049
- sharedInfo.packageName,
2050
- {
2051
- dirty,
2052
- versions: cached2.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
2053
- },
2054
- sharedInfo.shareScope
2055
- );
2056
- }
2057
- function addScopedExternal(scope, sharedInfo) {
2058
- ports.scopedExternalsRepo.addExternal(scope, sharedInfo.packageName, {
2059
- tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
2060
- file: sharedInfo.outFileName,
2061
- bundle: sharedInfo.bundle
2062
- });
2128
+ commit();
2063
2129
  }
2064
2130
  }
2065
2131
 
2066
- // src/lib/2.app/flows/init/determine-shared-externals.ts
2132
+ // src/lib/core/2.app/steps/determine-shared-externals.ts
2067
2133
  function createDetermineSharedExternals(config, ports) {
2068
2134
  return () => {
2069
2135
  for (const shareScope of ports.sharedExternalsRepo.getScopes()) {
@@ -2140,7 +2206,7 @@ function createDetermineSharedExternals(config, ports) {
2140
2206
  }
2141
2207
  }
2142
2208
 
2143
- // 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
2209
+ // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@6.0.3/node_modules/@softarc/native-federation/src/lib/domain/core/build-notification-options.contract.js
2144
2210
  var BuildNotificationType;
2145
2211
  (function(BuildNotificationType2) {
2146
2212
  BuildNotificationType2["COMPLETED"] = "federation-rebuild-complete";
@@ -2148,7 +2214,7 @@ var BuildNotificationType;
2148
2214
  BuildNotificationType2["CANCELLED"] = "federation-rebuild-cancelled";
2149
2215
  })(BuildNotificationType || (BuildNotificationType = {}));
2150
2216
 
2151
- // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@5.9.3/node_modules/@softarc/native-federation/src/lib/domain/core/chunk.js
2217
+ // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@6.0.3/node_modules/@softarc/native-federation/src/lib/domain/core/chunk.js
2152
2218
  var CHUNK_PREFIX = "@nf-internal";
2153
2219
  function toChunkImport(fileName) {
2154
2220
  if (fileName.startsWith("./")) {
@@ -2158,7 +2224,7 @@ function toChunkImport(fileName) {
2158
2224
  return CHUNK_PREFIX + "/" + packageName;
2159
2225
  }
2160
2226
 
2161
- // src/lib/2.app/flows/init/generate-import-map.ts
2227
+ // src/lib/core/2.app/steps/generate-import-map.ts
2162
2228
  function createGenerateImportMap(config, ports) {
2163
2229
  return () => {
2164
2230
  const importMap = { imports: {} };
@@ -2183,7 +2249,12 @@ function createGenerateImportMap(config, ports) {
2183
2249
  });
2184
2250
  addToScope(importMap, remote.scopeUrl, createScopeModules(externals, remote.scopeUrl));
2185
2251
  for (const version of Object.values(externals)) {
2186
- addIntegrity(importMap, join(remote.scopeUrl, version.file), remoteName, version.file);
2252
+ addIntegrity(
2253
+ importMap,
2254
+ join(remote.scopeUrl, version.file),
2255
+ remoteName,
2256
+ version.file
2257
+ );
2187
2258
  }
2188
2259
  Object.values(externals).filter((e) => !!e.bundle).forEach((e) => registerBundleChunks(chunkBundles, remoteName, e.bundle));
2189
2260
  }
@@ -2392,7 +2463,7 @@ function createGenerateImportMap(config, ports) {
2392
2463
  }
2393
2464
  }
2394
2465
 
2395
- // src/lib/2.app/flows/init/commit-changes.ts
2466
+ // src/lib/core/2.app/steps/commit-changes.ts
2396
2467
  function createCommitChanges(config, ports) {
2397
2468
  return (importMap) => Promise.resolve(importMap).then(addToBrowser).then(persistRepositoryChanges);
2398
2469
  function addToBrowser(importMap) {
@@ -2409,7 +2480,7 @@ function createCommitChanges(config, ports) {
2409
2480
  }
2410
2481
  }
2411
2482
 
2412
- // src/lib/2.app/flows/init/expose-module-loader.ts
2483
+ // src/lib/core/2.app/steps/expose-module-loader.ts
2413
2484
  function createExposeModuleLoader(config, ports) {
2414
2485
  const loadRemoteModule = (remoteName, exposedModule) => {
2415
2486
  try {
@@ -2435,42 +2506,137 @@ function createExposeModuleLoader(config, ports) {
2435
2506
  return () => Promise.resolve(loadRemoteModule);
2436
2507
  }
2437
2508
 
2438
- // src/lib/5.di/flows/init.factory.ts
2439
- var createInitDrivers = ({
2440
- config,
2441
- adapters
2442
- }) => ({
2443
- getRemoteEntries: createGetRemoteEntries(config, adapters),
2444
- processRemoteEntries: createProcessRemoteEntries(config, adapters),
2445
- determineSharedExternals: createDetermineSharedExternals(config, adapters),
2446
- generateImportMap: createGenerateImportMap(config, adapters),
2447
- commitChanges: createCommitChanges(config, adapters),
2448
- exposeModuleLoader: createExposeModuleLoader(config, adapters)
2449
- });
2450
- var INIT_FLOW_FACTORY = ({
2451
- config,
2452
- adapters
2453
- }) => {
2454
- const flow = createInitDrivers({ config, adapters });
2455
- return {
2456
- flow,
2457
- adapters,
2458
- config
2459
- };
2460
- };
2461
- var createInitFlow = ({
2462
- flow,
2463
- adapters,
2464
- config
2465
- }) => {
2466
- return (remotesOrManifestUrl) => flow.getRemoteEntries(remotesOrManifestUrl).then(flow.processRemoteEntries).then(flow.determineSharedExternals).then(flow.generateImportMap).then(flow.commitChanges).then(flow.exposeModuleLoader).then((loadRemoteModule) => ({
2467
- config,
2468
- adapters,
2469
- loadRemoteModule
2470
- }));
2509
+ // src/lib/core/2.app/steps/get-remote-entry.ts
2510
+ var normalizeRemoteRef = (remote) => {
2511
+ if (!remote) return {};
2512
+ if (typeof remote === "string") return { name: remote };
2513
+ return remote;
2471
2514
  };
2515
+ function createGetRemoteEntry(config, ports) {
2516
+ return async (remoteEntryUrl, remote) => {
2517
+ const { name: remoteName, integrity } = normalizeRemoteRef(remote);
2518
+ if (!!remoteName && shouldSkipCachedRemote(remoteEntryUrl, remoteName)) {
2519
+ config.log.debug(7, `Found remote '${remoteName}' in storage, omitting fetch.`);
2520
+ return Optional.empty();
2521
+ }
2522
+ try {
2523
+ const remoteEntry = integrity ? await ports.remoteEntryProvider.provide(remoteEntryUrl, { integrity }) : await ports.remoteEntryProvider.provide(remoteEntryUrl);
2524
+ config.log.debug(
2525
+ 7,
2526
+ `[${remoteEntry.name}] Fetched from '${remoteEntry.url}', exposing: ${JSON.stringify(remoteEntry.exposes)}`
2527
+ );
2528
+ if (!!remoteName && remoteEntry.name !== remoteName) {
2529
+ const errorMsg = `Fetched remote '${remoteEntry.name}' does not match requested '${remoteName}'.`;
2530
+ if (config.strict.strictRemoteEntry) {
2531
+ config.log.error(7, errorMsg);
2532
+ throw new NFError("Could not fetch remote entry");
2533
+ }
2534
+ config.log.warn(7, errorMsg + " Omitting expected name.");
2535
+ }
2536
+ if (ports.remoteInfoRepo.contains(remoteEntry.name)) {
2537
+ remoteEntry.override = true;
2538
+ config.log.debug(7, `Overriding existing remote '${remoteName}' with '${remoteEntryUrl}'.`);
2539
+ }
2540
+ return Optional.of(checkForSSE(remoteEntry));
2541
+ } catch (error) {
2542
+ config.log.error(
2543
+ 7,
2544
+ `[${remoteName ?? "unknown"}] Could not fetch remoteEntry from ${remoteEntryUrl}.`,
2545
+ error
2546
+ );
2547
+ return Promise.reject(
2548
+ new NFError(`[${remoteName ?? remoteEntryUrl}] Could not fetch remoteEntry.`)
2549
+ );
2550
+ }
2551
+ };
2552
+ function shouldSkipCachedRemote(remoteEntryUrl, remoteName) {
2553
+ return ports.remoteInfoRepo.tryGet(remoteName).map(
2554
+ (cachedRemoteInfo) => config.profile.overrideCachedRemotes !== "always" || !config.profile.overrideCachedRemotesIfURLMatches && remoteEntryUrl === join(cachedRemoteInfo.scopeUrl, "remoteEntry.json")
2555
+ ).orElse(false);
2556
+ }
2557
+ function checkForSSE(entry) {
2558
+ if (config.sse) {
2559
+ if (entry.buildNotificationsEndpoint) {
2560
+ ports.sse.watchRemoteBuilds(
2561
+ join(getScope(entry.url), entry.buildNotificationsEndpoint)
2562
+ );
2563
+ config.log.debug(7, `Registered SSE endpoint of remote '${entry.name}' `);
2564
+ } else {
2565
+ config.log.debug(7, `Remote ${entry.name} has no defined 'buildNotificationsEndpoint'`);
2566
+ }
2567
+ }
2568
+ return entry;
2569
+ }
2570
+ }
2472
2571
 
2473
- // src/lib/2.app/flows/dynamic-init/convert-to-import-map.ts
2572
+ // src/lib/core/2.app/steps/update-cache.ts
2573
+ function createUpdateCache(config, ports) {
2574
+ const storeRemoteEntry = createStoreRemoteEntry(config, ports, 8);
2575
+ return (remoteEntry) => {
2576
+ try {
2577
+ const actions = {};
2578
+ storeRemoteEntry(remoteEntry, (entry, external, ctx) => {
2579
+ const { action, sharedVersion } = resolveSharedExternal(entry, external, ctx);
2580
+ actions[external.packageName] = { action };
2581
+ if (action === "skip" && external.shareScope && sharedVersion?.remotes[0]?.file) {
2582
+ actions[external.packageName].override = resolveOverrideUrl(
2583
+ entry,
2584
+ external,
2585
+ sharedVersion
2586
+ );
2587
+ }
2588
+ });
2589
+ return Promise.resolve({ entry: remoteEntry, actions });
2590
+ } catch (error) {
2591
+ return Promise.reject(error);
2592
+ }
2593
+ };
2594
+ function resolveSharedExternal(remoteEntry, sharedInfo, {
2595
+ tag,
2596
+ remote,
2597
+ cached: cached2,
2598
+ scopeType,
2599
+ assertSameVersionCompatibility,
2600
+ commit
2601
+ }) {
2602
+ let action = scopeType === "strict" ? "share" : "skip";
2603
+ const sharedVersion = cached2.versions.find((c) => c.action === "share");
2604
+ const isCompatible = !sharedVersion || ports.versionCheck.isCompatible(sharedVersion.tag, remote.requiredVersion);
2605
+ if (action === "skip" && !isCompatible && remote.strictVersion) {
2606
+ action = "scope";
2607
+ const errorMsg = `[${sharedInfo.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}] ${sharedInfo.packageName}@${sharedInfo.version} Is not compatible with existing ${sharedInfo.packageName}@${sharedVersion.tag} requiredRange '${sharedVersion.remotes[0]?.requiredVersion}'`;
2608
+ if (config.strict.strictExternalCompatibility) {
2609
+ config.log.error(8, errorMsg);
2610
+ throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2611
+ }
2612
+ config.log.warn(8, errorMsg);
2613
+ }
2614
+ const matchingVersion = cached2.versions.find((cached3) => cached3.tag === tag);
2615
+ if (matchingVersion) {
2616
+ assertSameVersionCompatibility(matchingVersion);
2617
+ matchingVersion.remotes.push(remote);
2618
+ } else {
2619
+ if (!sharedVersion) action = "share";
2620
+ remote.cached = action !== "skip";
2621
+ cached2.versions.push({ tag, action, host: false, remotes: [remote] });
2622
+ }
2623
+ commit();
2624
+ return { action, sharedVersion };
2625
+ }
2626
+ function resolveOverrideUrl(remoteEntry, external, sharedVersion) {
2627
+ return ports.remoteInfoRepo.tryGet(sharedVersion.remotes[0].name).map((remote) => join(remote.scopeUrl, sharedVersion.remotes[0].file)).orThrow(() => {
2628
+ config.log.error(
2629
+ 8,
2630
+ `[${external.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}][${external.packageName}@${external.version}][override] Remote name not found in cache.`
2631
+ );
2632
+ return new NFError(
2633
+ `Could not find override url from remote ${sharedVersion.remotes[0].name}`
2634
+ );
2635
+ });
2636
+ }
2637
+ }
2638
+
2639
+ // src/lib/core/2.app/steps/convert-to-import-map.ts
2474
2640
  function createConvertToImportMap({ log }, ports) {
2475
2641
  return ({ entry, actions }) => {
2476
2642
  const importMap = { imports: {} };
@@ -2567,242 +2733,78 @@ function createConvertToImportMap({ log }, ports) {
2567
2733
  }
2568
2734
  }
2569
2735
 
2570
- // src/lib/2.app/flows/dynamic-init/get-remote-entry.ts
2571
- var normalizeRemoteRef = (remote) => {
2572
- if (!remote) return {};
2573
- if (typeof remote === "string") return { name: remote };
2574
- return remote;
2575
- };
2576
- function createGetRemoteEntry(config, ports) {
2577
- return async (remoteEntryUrl, remote) => {
2578
- const { name: remoteName, integrity } = normalizeRemoteRef(remote);
2579
- if (!!remoteName && shouldSkipCachedRemote(remoteEntryUrl, remoteName)) {
2580
- config.log.debug(7, `Found remote '${remoteName}' in storage, omitting fetch.`);
2581
- return Optional.empty();
2582
- }
2583
- try {
2584
- const remoteEntry = integrity ? await ports.remoteEntryProvider.provide(remoteEntryUrl, { integrity }) : await ports.remoteEntryProvider.provide(remoteEntryUrl);
2585
- config.log.debug(
2586
- 7,
2587
- `[${remoteEntry.name}] Fetched from '${remoteEntry.url}', exposing: ${JSON.stringify(remoteEntry.exposes)}`
2588
- );
2589
- if (!!remoteName && remoteEntry.name !== remoteName) {
2590
- const errorMsg = `Fetched remote '${remoteEntry.name}' does not match requested '${remoteName}'.`;
2591
- if (config.strict.strictRemoteEntry) {
2592
- config.log.error(7, errorMsg);
2593
- throw new NFError("Could not fetch remote entry");
2594
- }
2595
- config.log.warn(7, errorMsg + " Omitting expected name.");
2596
- }
2597
- if (ports.remoteInfoRepo.contains(remoteEntry.name)) {
2598
- remoteEntry.override = true;
2599
- config.log.debug(7, `Overriding existing remote '${remoteName}' with '${remoteEntryUrl}'.`);
2600
- }
2601
- return Optional.of(checkForSSE(remoteEntry));
2602
- } catch (error) {
2603
- config.log.error(
2604
- 7,
2605
- `[${remoteName ?? "unknown"}] Could not fetch remoteEntry from ${remoteEntryUrl}.`,
2606
- error
2607
- );
2608
- return Promise.reject(
2609
- new NFError(`[${remoteName ?? remoteEntryUrl}] Could not fetch remoteEntry.`)
2610
- );
2611
- }
2612
- };
2613
- function shouldSkipCachedRemote(remoteEntryUrl, remoteName) {
2614
- return ports.remoteInfoRepo.tryGet(remoteName).map(
2615
- (cachedRemoteInfo) => config.profile.overrideCachedRemotes !== "always" || !config.profile.overrideCachedRemotesIfURLMatches && remoteEntryUrl === join(cachedRemoteInfo.scopeUrl, "remoteEntry.json")
2616
- ).orElse(false);
2617
- }
2618
- function checkForSSE(entry) {
2619
- if (config.sse) {
2620
- if (entry.buildNotificationsEndpoint) {
2621
- ports.sse.watchRemoteBuilds(
2622
- join(getScope(entry.url), entry.buildNotificationsEndpoint)
2623
- );
2624
- config.log.debug(7, `Registered SSE endpoint of remote '${entry.name}' `);
2625
- } else {
2626
- config.log.debug(7, `Remote ${entry.name} has no defined 'buildNotificationsEndpoint'`);
2627
- }
2628
- }
2629
- return entry;
2630
- }
2631
- }
2632
-
2633
- // src/lib/2.app/flows/dynamic-init/update-cache.ts
2634
- function createUpdateCache(config, ports) {
2635
- return (remoteEntry) => {
2636
- try {
2637
- if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
2638
- addRemoteInfoToStorage(remoteEntry);
2639
- const actions = mergeExternalsIntoStorage(remoteEntry);
2640
- addSharedChunksToStorage(remoteEntry);
2641
- return Promise.resolve({ entry: remoteEntry, actions });
2642
- } catch (error) {
2643
- return Promise.reject(error);
2644
- }
2645
- };
2646
- function removeCachedRemoteEntry(remoteEntry) {
2647
- ports.remoteInfoRepo.remove(remoteEntry.name);
2648
- ports.scopedExternalsRepo.remove(remoteEntry.name);
2649
- ports.sharedExternalsRepo.removeFromAllScopes(remoteEntry.name);
2650
- }
2651
- function addRemoteInfoToStorage({ name, url, exposes }) {
2652
- ports.remoteInfoRepo.addOrUpdate(name, {
2653
- scopeUrl: getScope(url),
2654
- exposes: Object.values(exposes ?? []).map((m) => ({
2655
- moduleName: m.key,
2656
- file: m.outFileName
2657
- }))
2658
- });
2659
- }
2660
- function mergeExternalsIntoStorage(remoteEntry) {
2661
- const actions = {};
2662
- remoteEntry.shared.forEach((external) => {
2663
- if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
2664
- const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
2665
- if (config.strict.strictExternalVersion) {
2666
- config.log.error(8, errorMsg);
2667
- throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2668
- }
2669
- config.log.warn(8, errorMsg);
2670
- }
2671
- if (external.singleton) {
2672
- const { action, sharedVersion } = addSharedExternal(remoteEntry.name, external);
2673
- actions[external.packageName] = { action };
2674
- if (action === "skip" && external.shareScope && sharedVersion?.remotes[0]?.file) {
2675
- actions[external.packageName].override = ports.remoteInfoRepo.tryGet(sharedVersion.remotes[0].name).map((remote) => join(remote.scopeUrl, sharedVersion.remotes[0].file)).orThrow(() => {
2676
- config.log.error(
2677
- 8,
2678
- `[${external.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}][${external.packageName}@${external.version}][override] Remote name not found in cache.`
2679
- );
2680
- return new NFError(
2681
- `Could not find override url from remote ${sharedVersion.remotes[0].name}`
2682
- );
2683
- });
2684
- }
2685
- } else {
2686
- addScopedExternal(remoteEntry.name, external);
2687
- }
2688
- });
2689
- return actions;
2690
- }
2691
- function addSharedChunksToStorage(remoteEntry) {
2692
- if (!remoteEntry.chunks) return;
2693
- config.log.debug(
2694
- 8,
2695
- `Adding chunks for remote "${remoteEntry.name}", bundles: [${Object.keys(remoteEntry.chunks).join(", ")}]`
2696
- );
2697
- Object.entries(remoteEntry.chunks).forEach(([bundleName, chunks]) => {
2698
- ports.sharedChunksRepo.addOrReplace(remoteEntry.name, bundleName, chunks);
2699
- });
2700
- }
2701
- function addSharedExternal(remoteName, sharedInfo) {
2702
- const cached2 = ports.sharedExternalsRepo.tryGet(sharedInfo.packageName, sharedInfo.shareScope).orElse({ dirty: false, versions: [] });
2703
- let action = "skip";
2704
- const tag = sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion);
2705
- const remote = {
2706
- file: sharedInfo.outFileName,
2707
- strictVersion: sharedInfo.strictVersion,
2708
- requiredVersion: sharedInfo.requiredVersion || tag,
2709
- name: remoteName,
2710
- bundle: sharedInfo.bundle,
2711
- cached: false
2712
- };
2713
- const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2714
- if (scopeType === "strict") {
2715
- remote.requiredVersion = tag;
2716
- action = "share";
2717
- }
2718
- const sharedVersion = cached2.versions.find((c) => c.action === "share");
2719
- const isCompatible = !sharedVersion || ports.versionCheck.isCompatible(sharedVersion.tag, remote.requiredVersion);
2720
- if (action === "skip" && !isCompatible && remote.strictVersion) {
2721
- action = "scope";
2722
- const errorMsg = `[${sharedInfo.shareScope ?? GLOBAL_SCOPE}][${remoteName}] ${sharedInfo.packageName}@${sharedInfo.version} Is not compatible with existing ${sharedInfo.packageName}@${sharedVersion.tag} requiredRange '${sharedVersion.remotes[0]?.requiredVersion}'`;
2723
- if (config.strict.strictExternalCompatibility) {
2724
- config.log.error(8, errorMsg);
2725
- throw new NFError(`Could not process remote '${remoteName}'`);
2726
- }
2727
- config.log.warn(8, errorMsg);
2728
- }
2729
- const matchingVersion = cached2.versions.find((cached3) => cached3.tag === tag);
2730
- if (!!matchingVersion) {
2731
- if (remote.strictVersion && matchingVersion.remotes[0].requiredVersion !== remote.requiredVersion) {
2732
- const errorMsg = `[${remoteName}][${sharedInfo.packageName}@${sharedInfo.version}] Required version '${remote.requiredVersion}' does not match existing '${matchingVersion.remotes[0].requiredVersion}'`;
2733
- if (config.strict.strictExternalCompatibility) {
2734
- config.log.error(8, errorMsg);
2735
- throw new NFError(`Could not process remote '${remoteName}'`);
2736
- }
2737
- config.log.warn(8, errorMsg);
2738
- }
2739
- matchingVersion.remotes.push(remote);
2740
- } else {
2741
- if (!sharedVersion) action = "share";
2742
- remote.cached = action !== "skip";
2743
- cached2.versions.push({ tag, action, host: false, remotes: [remote] });
2744
- }
2745
- ports.sharedExternalsRepo.addOrUpdate(
2746
- sharedInfo.packageName,
2747
- {
2748
- dirty: cached2.dirty,
2749
- versions: cached2.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
2750
- },
2751
- sharedInfo.shareScope
2752
- );
2753
- return { action, sharedVersion };
2754
- }
2755
- function addScopedExternal(remoteName, sharedInfo) {
2756
- ports.scopedExternalsRepo.addExternal(remoteName, sharedInfo.packageName, {
2757
- tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
2758
- file: sharedInfo.outFileName,
2759
- bundle: sharedInfo.bundle
2760
- });
2761
- }
2762
- }
2763
-
2764
- // src/lib/5.di/flows/dynamic-init.factory.ts
2765
- var createDynamicInitDrivers = ({
2736
+ // src/lib/core/5.di/init.factory.ts
2737
+ var createInitDrivers = ({
2766
2738
  config,
2767
2739
  adapters
2768
2740
  }) => ({
2741
+ getRemoteEntries: createGetRemoteEntries(config, adapters),
2742
+ processRemoteEntries: createProcessRemoteEntries(config, adapters),
2743
+ determineSharedExternals: createDetermineSharedExternals(config, adapters),
2744
+ generateImportMap: createGenerateImportMap(config, adapters),
2745
+ commitChanges: createCommitChanges(config, adapters),
2746
+ exposeModuleLoader: createExposeModuleLoader(config, adapters),
2769
2747
  getRemoteEntry: createGetRemoteEntry(config, adapters),
2770
2748
  updateCache: createUpdateCache(config, adapters),
2771
- convertToImportMap: createConvertToImportMap(config, adapters),
2772
- commitChanges: createCommitChanges(config, adapters)
2749
+ convertToImportMap: createConvertToImportMap(config, adapters)
2773
2750
  });
2774
- var DYNAMIC_INIT_FLOW_FACTORY = ({
2751
+ var INIT_FLOW_FACTORY = ({
2775
2752
  config,
2776
2753
  adapters
2777
2754
  }) => {
2778
- const flow = createDynamicInitDrivers({ config, adapters });
2755
+ const flow = createInitDrivers({ config, adapters });
2779
2756
  return {
2780
2757
  flow,
2781
2758
  adapters,
2782
2759
  config
2783
2760
  };
2784
2761
  };
2785
- var createDynamicInitFlow = ({
2786
- flow,
2762
+
2763
+ // src/lib/core/5.di/federation-result.factory.ts
2764
+ var createStateDump = (config, adapters) => (msg) => config.log.debug(0, msg, {
2765
+ remotes: { ...adapters.remoteInfoRepo.getAll() },
2766
+ "shared-externals": adapters.sharedExternalsRepo.getScopes({ includeGlobal: true }).reduce(
2767
+ (acc, scope) => ({ ...acc, [scope]: adapters.sharedExternalsRepo.getFromScope(scope) }),
2768
+ {}
2769
+ ),
2770
+ "scoped-externals": adapters.scopedExternalsRepo.getAll()
2771
+ });
2772
+ var createFederationResult = ({
2773
+ config,
2787
2774
  adapters,
2788
- config
2775
+ loadRemoteModule,
2776
+ initRemoteEntryFlow,
2777
+ afterInitRemoteEntry
2789
2778
  }) => {
2790
- const processDynamicRemoteEntry = async (remoteEntry) => {
2791
- return flow.updateCache(remoteEntry).then(flow.convertToImportMap).then(flow.commitChanges);
2779
+ const stateDump = createStateDump(config, adapters);
2780
+ const initRemoteEntry = async (remoteEntryUrl, remote) => {
2781
+ const remoteName = typeof remote === "string" ? remote : remote?.name;
2782
+ return initRemoteEntryFlow(remoteEntryUrl, remote).catch((e) => {
2783
+ stateDump(`[dynamic-init][${remoteName ?? remoteEntryUrl}] STATE DUMP`);
2784
+ if (config.strict.strictRemoteEntry) return Promise.reject(e);
2785
+ else console.warn("Failed to initialize remote entry, continuing anyway.");
2786
+ return Promise.resolve();
2787
+ }).then(() => afterInitRemoteEntry?.()).then(() => result);
2792
2788
  };
2793
- const initRemoteEntry = (remoteEntryUrl, remote) => flow.getRemoteEntry(remoteEntryUrl, remote).then((entry) => entry.map(processDynamicRemoteEntry).orElse(Promise.resolve())).then(() => ({
2789
+ const result = {
2794
2790
  config,
2795
2791
  adapters,
2792
+ loadRemoteModule,
2793
+ load: loadRemoteModule,
2794
+ as: () => ({
2795
+ loadRemoteModule,
2796
+ load: loadRemoteModule
2797
+ }),
2796
2798
  initRemoteEntry
2797
- }));
2798
- return initRemoteEntry;
2799
+ };
2800
+ return result;
2799
2801
  };
2800
2802
 
2801
- // src/lib/3.adapters/node/node-loader.client.ts
2803
+ // src/lib/node/adapters/node-loader.client.ts
2802
2804
  import { register } from "node:module";
2803
2805
  import { MessageChannel } from "node:worker_threads";
2804
2806
 
2805
- // src/lib/3.adapters/node/loader-url.ts
2807
+ // src/lib/node/adapters/loader-url.ts
2806
2808
  import { createRequire } from "node:module";
2807
2809
  import { pathToFileURL } from "node:url";
2808
2810
  var getLoaderUrl = () => {
@@ -2820,7 +2822,7 @@ var getLoaderUrl = () => {
2820
2822
  }
2821
2823
  };
2822
2824
 
2823
- // src/lib/3.adapters/node/node-loader.client.ts
2825
+ // src/lib/node/adapters/node-loader.client.ts
2824
2826
  var NODE_LOADER_CLIENT_ACK_TIMEOUT_MS = 1e4;
2825
2827
  var cached = null;
2826
2828
  var createClient = () => {
@@ -2831,14 +2833,23 @@ var createClient = () => {
2831
2833
  });
2832
2834
  port1.unref();
2833
2835
  let pending = Promise.resolve();
2834
- const postAndAwaitAck = (map) => new Promise((resolve, reject) => {
2836
+ const bridged = /* @__PURE__ */ new Set();
2837
+ const omitBridged = (map) => {
2838
+ if (bridged.size === 0) return map;
2839
+ const drop = (imports) => Object.fromEntries(Object.entries(imports).filter(([specifier]) => !bridged.has(specifier)));
2840
+ const scopes = map.scopes ? Object.fromEntries(
2841
+ Object.entries(map.scopes).map(([scope, imports]) => [scope, drop(imports)])
2842
+ ) : map.scopes;
2843
+ return { ...map, imports: drop(map.imports), ...scopes ? { scopes } : {} };
2844
+ };
2845
+ const postAndAwaitAck = (message, ackType) => new Promise((resolve, reject) => {
2835
2846
  let timer = null;
2836
2847
  const cleanup = () => {
2837
2848
  port1.off("message", onMessage);
2838
2849
  if (timer !== null) clearTimeout(timer);
2839
2850
  };
2840
2851
  const onMessage = (msg) => {
2841
- if (msg?.type === "import-map-applied") {
2852
+ if (msg?.type === ackType) {
2842
2853
  cleanup();
2843
2854
  resolve();
2844
2855
  }
@@ -2848,26 +2859,31 @@ var createClient = () => {
2848
2859
  cleanup();
2849
2860
  reject(
2850
2861
  new Error(
2851
- `node-loader.client: loader did not acknowledge set-import-map within ${NODE_LOADER_CLIENT_ACK_TIMEOUT_MS}ms`
2862
+ `node-loader.client: loader did not acknowledge ${message.type} within ${NODE_LOADER_CLIENT_ACK_TIMEOUT_MS}ms`
2852
2863
  )
2853
2864
  );
2854
2865
  }, NODE_LOADER_CLIENT_ACK_TIMEOUT_MS);
2855
2866
  timer.unref?.();
2856
2867
  try {
2857
- const outgoing = { type: "set-import-map", map };
2858
- port1.postMessage(outgoing);
2868
+ port1.postMessage(message);
2859
2869
  } catch (err) {
2860
2870
  cleanup();
2861
2871
  reject(err);
2862
2872
  }
2863
2873
  });
2864
- const setMap = (map) => {
2865
- const next = pending.catch(() => void 0).then(() => postAndAwaitAck(map));
2874
+ const enqueue = (message, ackType) => {
2875
+ const next = pending.catch(() => void 0).then(() => postAndAwaitAck(message, ackType));
2866
2876
  pending = next;
2867
2877
  return next;
2868
2878
  };
2879
+ const setMap = (map) => enqueue({ type: "set-import-map", map: omitBridged(map) }, "import-map-applied");
2880
+ const setHostInstances = (keys) => {
2881
+ Object.keys(keys).forEach((specifier) => bridged.add(specifier));
2882
+ return enqueue({ type: "set-host-instances", keys }, "host-instances-applied");
2883
+ };
2869
2884
  return {
2870
2885
  setMap,
2886
+ setHostInstances,
2871
2887
  ready: () => pending
2872
2888
  };
2873
2889
  };
@@ -2876,7 +2892,7 @@ var getNodeLoaderClient = () => {
2876
2892
  return cached;
2877
2893
  };
2878
2894
 
2879
- // src/lib/4.config/import-map/use-node.ts
2895
+ // src/lib/node/use-node.ts
2880
2896
  var useNodeImportMap = () => {
2881
2897
  const nodeLoader = getNodeLoaderClient();
2882
2898
  return {
@@ -2886,12 +2902,54 @@ var useNodeImportMap = () => {
2886
2902
  url
2887
2903
  ),
2888
2904
  setImportMapFn: (importMap) => nodeLoader.setMap(importMap).then(() => importMap),
2905
+ setHostInstancesFn: (keys) => nodeLoader.setHostInstances(keys).then(() => keys),
2889
2906
  reloadBrowserFn: () => {
2890
2907
  }
2891
2908
  };
2892
2909
  };
2893
2910
 
2894
- // src/lib/utils/node/to-url.ts
2911
+ // src/lib/node/resolve-host-instances.ts
2912
+ var matches = (specifier, patterns) => patterns.some((p) => specifier === p || specifier.startsWith(p));
2913
+ var isAuto = (option) => option === "all" || typeof option === "object" && option !== null && ("include" in option || "exclude" in option || "load" in option);
2914
+ var resolveHostInstances = async (option, deps) => {
2915
+ if (!option) return void 0;
2916
+ if (!isAuto(option)) return option;
2917
+ const auto = option === "all" ? {} : option;
2918
+ const { hostRemoteEntry } = deps;
2919
+ if (!hostRemoteEntry) {
2920
+ deps.log.warn(
2921
+ 0,
2922
+ "[native-federation] hostInstances auto mode needs a hostRemoteEntry to derive shared singletons from; skipping."
2923
+ );
2924
+ return void 0;
2925
+ }
2926
+ const url = typeof hostRemoteEntry === "string" ? hostRemoteEntry : hostRemoteEntry.url;
2927
+ const integrity = typeof hostRemoteEntry === "string" ? void 0 : hostRemoteEntry.integrity;
2928
+ const entry = await deps.remoteEntryProvider.provide(url, { integrity });
2929
+ const load = auto.load ?? ((specifier) => import(specifier));
2930
+ const specifiers = [
2931
+ ...new Set((entry.shared ?? []).filter((s) => s.singleton).map((s) => s.packageName))
2932
+ ].filter((s) => auto.include ? matches(s, auto.include) : true).filter((s) => auto.exclude ? !matches(s, auto.exclude) : true);
2933
+ const map = {};
2934
+ for (const specifier of specifiers) {
2935
+ try {
2936
+ map[specifier] = await load(specifier);
2937
+ } catch (err) {
2938
+ const msg = err instanceof Error ? err.message : String(err);
2939
+ deps.log.warn(
2940
+ 0,
2941
+ `[native-federation] hostInstances: could not load '${specifier}' from the host realm; skipping (${msg})`
2942
+ );
2943
+ }
2944
+ }
2945
+ deps.log.debug(
2946
+ 0,
2947
+ `[native-federation] hostInstances bridged: ${Object.keys(map).join(", ") || "(none)"}`
2948
+ );
2949
+ return map;
2950
+ };
2951
+
2952
+ // src/lib/node/utils/to-url.ts
2895
2953
  import { pathToFileURL as pathToFileURL2 } from "node:url";
2896
2954
  var URL_SCHEME = /^[a-z][a-z0-9+\-.]*:/i;
2897
2955
  var toUrl = (pathOrUrl) => URL_SCHEME.test(pathOrUrl) ? pathOrUrl : pathToFileURL2(pathOrUrl).href;
@@ -2901,7 +2959,8 @@ var normalizeHostRemoteEntry = (hostRemoteEntry) => {
2901
2959
  return { ...hostRemoteEntry, url: toUrl(hostRemoteEntry.url) };
2902
2960
  };
2903
2961
 
2904
- // src/lib/init-federation.node.ts
2962
+ // src/lib/node/init-federation.node.ts
2963
+ var HOST_INSTANCES_GLOBAL = "__NF_HOST_INSTANCES__";
2905
2964
  var buildNodeAdapters = (config) => ({
2906
2965
  versionCheck: createVersionCheck(),
2907
2966
  manifestProvider: createFsManifestProvider(),
@@ -2915,54 +2974,46 @@ var buildNodeAdapters = (config) => ({
2915
2974
  });
2916
2975
  var initNodeFederation = (remotesOrManifestUrl, options = {}) => {
2917
2976
  const nodeConfig = useNodeImportMap();
2977
+ const hostRemoteEntry = normalizeHostRemoteEntry(options.hostRemoteEntry);
2918
2978
  const config = createConfigHandlers({
2919
2979
  ...options,
2920
- hostRemoteEntry: normalizeHostRemoteEntry(options.hostRemoteEntry),
2980
+ hostRemoteEntry,
2921
2981
  loadModuleFn: options.loadModuleFn ?? nodeConfig.loadModuleFn,
2922
2982
  setImportMapFn: options.setImportMapFn ?? nodeConfig.setImportMapFn,
2923
2983
  reloadBrowserFn: options.reloadBrowserFn ?? nodeConfig.reloadBrowserFn,
2924
2984
  sse: false
2925
2985
  });
2926
2986
  const adapters = buildNodeAdapters(config);
2927
- const stateDump = (msg) => config.log.debug(0, msg, {
2928
- remotes: { ...adapters.remoteInfoRepo.getAll() },
2929
- "shared-externals": adapters.sharedExternalsRepo.getScopes({ includeGlobal: true }).reduce(
2930
- (acc, scope) => ({ ...acc, [scope]: adapters.sharedExternalsRepo.getFromScope(scope) }),
2931
- {}
2932
- ),
2933
- "scoped-externals": adapters.scopedExternalsRepo.getAll()
2934
- });
2935
- const initFlow = createInitFlow(INIT_FLOW_FACTORY({ adapters, config }));
2936
- const dynamicInitFlow = createDynamicInitFlow(DYNAMIC_INIT_FLOW_FACTORY({ config, adapters }));
2937
- return initFlow(remotesOrManifestUrl).then(({ loadRemoteModule }) => nodeConfig.nodeLoader.ready().then(() => loadRemoteModule)).then((loadRemoteModule) => {
2938
- const output = {
2987
+ const hostInstancesReady = (async () => {
2988
+ const instances = await resolveHostInstances(options.hostInstances, {
2989
+ remoteEntryProvider: adapters.remoteEntryProvider,
2990
+ hostRemoteEntry,
2991
+ log: config.log
2992
+ });
2993
+ if (!instances || Object.keys(instances).length === 0) return;
2994
+ const globals = globalThis;
2995
+ globals[HOST_INSTANCES_GLOBAL] = {
2996
+ ...globals[HOST_INSTANCES_GLOBAL] ?? {},
2997
+ ...instances
2998
+ };
2999
+ const keys = Object.fromEntries(
3000
+ Object.entries(instances).map(([specifier, ns]) => [specifier, Object.keys(ns)])
3001
+ );
3002
+ await nodeConfig.setHostInstancesFn(keys);
3003
+ })();
3004
+ const factory = INIT_FLOW_FACTORY({ adapters, config });
3005
+ const initFlow = createInitFlow(factory);
3006
+ const initRemoteEntryFlow = createInitRemoteEntryFlow(factory);
3007
+ return hostInstancesReady.then(() => initFlow(remotesOrManifestUrl)).then(({ loadRemoteModule }) => nodeConfig.nodeLoader.ready().then(() => loadRemoteModule)).then(
3008
+ (loadRemoteModule) => createFederationResult({
2939
3009
  config,
2940
3010
  adapters,
2941
3011
  loadRemoteModule,
2942
- as: () => ({
2943
- loadRemoteModule,
2944
- load: loadRemoteModule
2945
- }),
2946
- load: loadRemoteModule
2947
- };
2948
- const initRemoteEntry = async (remoteEntryUrl, remote) => {
2949
- const remoteName = typeof remote === "string" ? remote : remote?.name;
2950
- return dynamicInitFlow(remoteEntryUrl, remote).catch((e) => {
2951
- stateDump(`[dynamic-init][${remoteName ?? remoteEntryUrl}] STATE DUMP`);
2952
- if (config.strict.strictRemoteEntry) return Promise.reject(e);
2953
- else console.warn("Failed to initialize remote entry, continuing anyway.");
2954
- return Promise.resolve();
2955
- }).then(() => nodeConfig.nodeLoader.ready()).then(() => ({
2956
- ...output,
2957
- initRemoteEntry
2958
- }));
2959
- };
2960
- return {
2961
- ...output,
2962
- initRemoteEntry
2963
- };
2964
- }).catch((e) => {
2965
- stateDump(`[init] STATE DUMP`);
3012
+ initRemoteEntryFlow,
3013
+ afterInitRemoteEntry: () => nodeConfig.nodeLoader.ready()
3014
+ })
3015
+ ).catch((e) => {
3016
+ createStateDump(config, adapters)(`[init] STATE DUMP`);
2966
3017
  return Promise.reject(e);
2967
3018
  });
2968
3019
  };