@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
@@ -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 cached = 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,28 @@ var require_valid2 = __commonJS({
1252
1268
  }
1253
1269
  });
1254
1270
 
1255
- // src/lib/native-federation.error.ts
1271
+ // src/lib/core/2.app/flows/init.flow.ts
1272
+ var createInitFlow = ({
1273
+ flow,
1274
+ adapters,
1275
+ config
1276
+ }) => {
1277
+ return (remotesOrManifestUrl) => flow.getRemoteEntries(remotesOrManifestUrl).then(flow.processRemoteEntries).then(flow.determineSharedExternals).then(flow.generateImportMap).then(flow.commitChanges).then(flow.exposeModuleLoader).then((loadRemoteModule) => ({
1278
+ config,
1279
+ adapters,
1280
+ loadRemoteModule
1281
+ }));
1282
+ };
1283
+
1284
+ // src/lib/core/2.app/flows/init-remote-entry.flow.ts
1285
+ var createInitRemoteEntryFlow = ({
1286
+ flow
1287
+ }) => {
1288
+ const processDynamicRemoteEntry = (remoteEntry) => flow.updateCache(remoteEntry).then(flow.convertToImportMap).then(flow.commitChanges);
1289
+ return (remoteEntryUrl, remote) => flow.getRemoteEntry(remoteEntryUrl, remote).then((entry) => entry.map(processDynamicRemoteEntry).orElse(Promise.resolve())).then(() => void 0);
1290
+ };
1291
+
1292
+ // src/lib/core/native-federation.error.ts
1256
1293
  var NFError = class extends Error {
1257
1294
  constructor(message, cause) {
1258
1295
  super(message, cause);
@@ -1276,7 +1313,7 @@ function getScope(path) {
1276
1313
  return `${parts.join("/")}/`;
1277
1314
  }
1278
1315
 
1279
- // src/lib/2.app/flows/init/get-remote-entries.ts
1316
+ // src/lib/core/2.app/steps/get-remote-entries.ts
1280
1317
  function createGetRemoteEntries(config, ports) {
1281
1318
  return (remotesOrManifestUrl = {}) => {
1282
1319
  const manifestPromise = config.manifestIntegrity ? ports.manifestProvider.provide(remotesOrManifestUrl, {
@@ -1370,20 +1407,13 @@ function createGetRemoteEntries(config, ports) {
1370
1407
  }
1371
1408
  }
1372
1409
 
1373
- // src/lib/2.app/flows/init/process-remote-entries.ts
1374
- function createProcessRemoteEntries(config, ports) {
1375
- return (remoteEntries) => {
1376
- try {
1377
- remoteEntries.forEach((remoteEntry) => {
1378
- if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
1379
- addRemoteInfoToStorage(remoteEntry);
1380
- addExternalsToStorage(remoteEntry);
1381
- addSharedChunksToStorage(remoteEntry);
1382
- });
1383
- return Promise.resolve(remoteEntries);
1384
- } catch (e) {
1385
- return Promise.reject(e);
1386
- }
1410
+ // src/lib/core/2.app/steps/store-remote-entry.ts
1411
+ function createStoreRemoteEntry(config, ports, logStep) {
1412
+ return (remoteEntry, onSharedExternal) => {
1413
+ if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
1414
+ addRemoteInfoToStorage(remoteEntry);
1415
+ addExternalsToStorage(remoteEntry, onSharedExternal);
1416
+ addSharedChunksToStorage(remoteEntry);
1387
1417
  };
1388
1418
  function removeCachedRemoteEntry(remoteEntry) {
1389
1419
  ports.remoteInfoRepo.remove(remoteEntry.name);
@@ -1400,92 +1430,128 @@ function createProcessRemoteEntries(config, ports) {
1400
1430
  ...integrity ? { integrity } : {}
1401
1431
  });
1402
1432
  }
1403
- function addExternalsToStorage(remoteEntry) {
1433
+ function addExternalsToStorage(remoteEntry, onSharedExternal) {
1404
1434
  remoteEntry.shared.forEach((external) => {
1405
- if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
1406
- const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
1407
- if (config.strict.strictExternalVersion) {
1408
- config.log.error(2, errorMsg);
1409
- throw new NFError(`Could not process remote '${remoteEntry.name}'`);
1410
- }
1411
- config.log.warn(2, errorMsg);
1412
- }
1435
+ validateExternalVersion(remoteEntry, external);
1413
1436
  if (external.singleton) {
1414
- addSharedExternal(remoteEntry.name, external, remoteEntry);
1437
+ onSharedExternal(remoteEntry, external, sharedExternalContext(remoteEntry, external));
1415
1438
  } else {
1416
- addScopedExternal(remoteEntry.name, external);
1439
+ addScopedExternal(remoteEntry, external);
1417
1440
  }
1418
1441
  });
1419
1442
  }
1420
1443
  function addSharedChunksToStorage(remoteEntry) {
1421
1444
  if (!remoteEntry.chunks) return;
1422
1445
  config.log.debug(
1423
- 2,
1446
+ logStep,
1424
1447
  `Adding chunks for remote "${remoteEntry.name}", bundles: [${Object.keys(remoteEntry.chunks).join(", ")}]`
1425
1448
  );
1426
1449
  Object.entries(remoteEntry.chunks).forEach(([bundleName, chunks]) => {
1427
1450
  ports.sharedChunksRepo.addOrReplace(remoteEntry.name, bundleName, chunks);
1428
1451
  });
1429
1452
  }
1430
- function addSharedExternal(remoteName, sharedInfo, remoteEntry) {
1431
- let action = "skip";
1453
+ function addScopedExternal(remoteEntry, sharedInfo) {
1454
+ ports.scopedExternalsRepo.addExternal(remoteEntry.name, sharedInfo.packageName, {
1455
+ tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
1456
+ file: sharedInfo.outFileName,
1457
+ bundle: sharedInfo.bundle
1458
+ });
1459
+ }
1460
+ function validateExternalVersion(remoteEntry, external) {
1461
+ if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
1462
+ const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
1463
+ if (config.strict.strictExternalVersion) {
1464
+ config.log.error(logStep, errorMsg);
1465
+ throw new NFError(`Could not process remote '${remoteEntry.name}'`);
1466
+ }
1467
+ config.log.warn(logStep, errorMsg);
1468
+ }
1469
+ }
1470
+ function sharedExternalContext(remoteEntry, sharedInfo) {
1432
1471
  const tag = sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion);
1472
+ const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
1433
1473
  const remote = {
1434
1474
  file: sharedInfo.outFileName,
1435
- name: remoteName,
1475
+ name: remoteEntry.name,
1436
1476
  bundle: sharedInfo.bundle,
1437
1477
  strictVersion: sharedInfo.strictVersion,
1438
1478
  cached: false,
1439
- requiredVersion: sharedInfo.requiredVersion || tag
1479
+ requiredVersion: scopeType === "strict" ? tag : sharedInfo.requiredVersion || tag
1440
1480
  };
1441
- const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
1442
- if (scopeType === "strict") {
1443
- action = "share";
1444
- remote.requiredVersion = tag;
1445
- }
1446
1481
  const cached = ports.sharedExternalsRepo.tryGet(sharedInfo.packageName, sharedInfo.shareScope).orElse({ dirty: false, versions: [] });
1447
- const matchingVersion = cached.versions.find((version) => version.tag === sharedInfo.version);
1448
- let dirty = cached.dirty;
1449
- if (!!matchingVersion) {
1450
- if (remote.strictVersion && matchingVersion.remotes[0].requiredVersion !== remote.requiredVersion) {
1451
- const errorMsg = `[${remoteName}][${sharedInfo.packageName}@${sharedInfo.version}] Required version-range '${remote.requiredVersion}' does not match cached version-range '${matchingVersion.remotes[0].requiredVersion}'`;
1482
+ return {
1483
+ tag,
1484
+ remote,
1485
+ cached,
1486
+ scopeType,
1487
+ assertSameVersionCompatibility(matchingVersion) {
1488
+ if (!remote.strictVersion) return;
1489
+ if (matchingVersion.remotes[0].requiredVersion === remote.requiredVersion) return;
1490
+ const errorMsg = `[${remoteEntry.name}][${sharedInfo.packageName}@${sharedInfo.version}] Required version-range '${remote.requiredVersion}' does not match cached version-range '${matchingVersion.remotes[0].requiredVersion}'`;
1452
1491
  if (config.strict.strictExternalSameVersionCompatibility) {
1453
- config.log.error(2, errorMsg);
1492
+ config.log.error(logStep, errorMsg);
1454
1493
  throw new NFError(`Could not process remote '${remoteEntry.name}'`);
1455
1494
  }
1456
- config.log.warn(2, errorMsg);
1495
+ config.log.warn(logStep, errorMsg);
1496
+ },
1497
+ commit() {
1498
+ ports.sharedExternalsRepo.addOrUpdate(
1499
+ sharedInfo.packageName,
1500
+ {
1501
+ dirty: cached.dirty,
1502
+ versions: cached.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
1503
+ },
1504
+ sharedInfo.shareScope
1505
+ );
1457
1506
  }
1507
+ };
1508
+ }
1509
+ }
1510
+
1511
+ // src/lib/core/2.app/steps/process-remote-entries.ts
1512
+ function createProcessRemoteEntries(config, ports) {
1513
+ const storeRemoteEntry = createStoreRemoteEntry(config, ports, 2);
1514
+ return (remoteEntries) => {
1515
+ try {
1516
+ remoteEntries.forEach((remoteEntry) => storeRemoteEntry(remoteEntry, addSharedExternal));
1517
+ return Promise.resolve(remoteEntries);
1518
+ } catch (e) {
1519
+ return Promise.reject(e);
1520
+ }
1521
+ };
1522
+ function addSharedExternal(remoteEntry, _sharedInfo, {
1523
+ tag,
1524
+ remote,
1525
+ cached,
1526
+ scopeType,
1527
+ assertSameVersionCompatibility,
1528
+ commit
1529
+ }) {
1530
+ const matchingVersion = cached.versions.find((version) => version.tag === tag);
1531
+ if (matchingVersion) {
1532
+ assertSameVersionCompatibility(matchingVersion);
1458
1533
  if (!matchingVersion.host && !!remoteEntry?.host) {
1459
1534
  matchingVersion.host = true;
1460
1535
  matchingVersion.remotes.unshift(remote);
1461
1536
  } else matchingVersion.remotes.push(remote);
1462
1537
  } else {
1463
- if (scopeType !== "strict") dirty = true;
1464
- cached.versions.push({ tag, action, host: !!remoteEntry?.host, remotes: [remote] });
1538
+ if (scopeType !== "strict") cached.dirty = true;
1539
+ cached.versions.push({
1540
+ tag,
1541
+ action: scopeType === "strict" ? "share" : "skip",
1542
+ host: !!remoteEntry?.host,
1543
+ remotes: [remote]
1544
+ });
1465
1545
  }
1466
- ports.sharedExternalsRepo.addOrUpdate(
1467
- sharedInfo.packageName,
1468
- {
1469
- dirty,
1470
- versions: cached.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
1471
- },
1472
- sharedInfo.shareScope
1473
- );
1474
- }
1475
- function addScopedExternal(scope, sharedInfo) {
1476
- ports.scopedExternalsRepo.addExternal(scope, sharedInfo.packageName, {
1477
- tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
1478
- file: sharedInfo.outFileName,
1479
- bundle: sharedInfo.bundle
1480
- });
1546
+ commit();
1481
1547
  }
1482
1548
  }
1483
1549
 
1484
- // src/lib/1.domain/externals/external.contract.ts
1550
+ // src/lib/core/1.domain/externals/external.contract.ts
1485
1551
  var GLOBAL_SCOPE = "__GLOBAL__";
1486
1552
  var STRICT_SCOPE = "strict";
1487
1553
 
1488
- // src/lib/2.app/flows/init/determine-shared-externals.ts
1554
+ // src/lib/core/2.app/steps/determine-shared-externals.ts
1489
1555
  function createDetermineSharedExternals(config, ports) {
1490
1556
  return () => {
1491
1557
  for (const shareScope of ports.sharedExternalsRepo.getScopes()) {
@@ -1562,7 +1628,7 @@ function createDetermineSharedExternals(config, ports) {
1562
1628
  }
1563
1629
  }
1564
1630
 
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
1631
+ // 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
1566
1632
  var BuildNotificationType;
1567
1633
  (function(BuildNotificationType2) {
1568
1634
  BuildNotificationType2["COMPLETED"] = "federation-rebuild-complete";
@@ -1570,7 +1636,7 @@ var BuildNotificationType;
1570
1636
  BuildNotificationType2["CANCELLED"] = "federation-rebuild-cancelled";
1571
1637
  })(BuildNotificationType || (BuildNotificationType = {}));
1572
1638
 
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
1639
+ // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@6.0.3/node_modules/@softarc/native-federation/src/lib/domain/core/chunk.js
1574
1640
  var CHUNK_PREFIX = "@nf-internal";
1575
1641
  function toChunkImport(fileName) {
1576
1642
  if (fileName.startsWith("./")) {
@@ -1580,7 +1646,7 @@ function toChunkImport(fileName) {
1580
1646
  return CHUNK_PREFIX + "/" + packageName;
1581
1647
  }
1582
1648
 
1583
- // src/lib/2.app/flows/init/generate-import-map.ts
1649
+ // src/lib/core/2.app/steps/generate-import-map.ts
1584
1650
  function createGenerateImportMap(config, ports) {
1585
1651
  return () => {
1586
1652
  const importMap = { imports: {} };
@@ -1605,7 +1671,12 @@ function createGenerateImportMap(config, ports) {
1605
1671
  });
1606
1672
  addToScope(importMap, remote.scopeUrl, createScopeModules(externals, remote.scopeUrl));
1607
1673
  for (const version of Object.values(externals)) {
1608
- addIntegrity(importMap, join(remote.scopeUrl, version.file), remoteName, version.file);
1674
+ addIntegrity(
1675
+ importMap,
1676
+ join(remote.scopeUrl, version.file),
1677
+ remoteName,
1678
+ version.file
1679
+ );
1609
1680
  }
1610
1681
  Object.values(externals).filter((e) => !!e.bundle).forEach((e) => registerBundleChunks(chunkBundles, remoteName, e.bundle));
1611
1682
  }
@@ -1814,7 +1885,7 @@ function createGenerateImportMap(config, ports) {
1814
1885
  }
1815
1886
  }
1816
1887
 
1817
- // src/lib/2.app/flows/init/commit-changes.ts
1888
+ // src/lib/core/2.app/steps/commit-changes.ts
1818
1889
  function createCommitChanges(config, ports) {
1819
1890
  return (importMap) => Promise.resolve(importMap).then(addToBrowser).then(persistRepositoryChanges);
1820
1891
  function addToBrowser(importMap) {
@@ -1831,7 +1902,7 @@ function createCommitChanges(config, ports) {
1831
1902
  }
1832
1903
  }
1833
1904
 
1834
- // src/lib/2.app/flows/init/expose-module-loader.ts
1905
+ // src/lib/core/2.app/steps/expose-module-loader.ts
1835
1906
  function createExposeModuleLoader(config, ports) {
1836
1907
  const loadRemoteModule = (remoteName, exposedModule) => {
1837
1908
  try {
@@ -1857,167 +1928,6 @@ function createExposeModuleLoader(config, ports) {
1857
1928
  return () => Promise.resolve(loadRemoteModule);
1858
1929
  }
1859
1930
 
1860
- // src/lib/5.di/flows/init.factory.ts
1861
- var createInitDrivers = ({
1862
- config,
1863
- adapters
1864
- }) => ({
1865
- getRemoteEntries: createGetRemoteEntries(config, adapters),
1866
- processRemoteEntries: createProcessRemoteEntries(config, adapters),
1867
- determineSharedExternals: createDetermineSharedExternals(config, adapters),
1868
- generateImportMap: createGenerateImportMap(config, adapters),
1869
- commitChanges: createCommitChanges(config, adapters),
1870
- exposeModuleLoader: createExposeModuleLoader(config, adapters)
1871
- });
1872
- var INIT_FLOW_FACTORY = ({
1873
- config,
1874
- adapters
1875
- }) => {
1876
- const flow = createInitDrivers({ config, adapters });
1877
- return {
1878
- flow,
1879
- adapters,
1880
- config
1881
- };
1882
- };
1883
- var createInitFlow = ({
1884
- flow,
1885
- adapters,
1886
- config
1887
- }) => {
1888
- return (remotesOrManifestUrl) => flow.getRemoteEntries(remotesOrManifestUrl).then(flow.processRemoteEntries).then(flow.determineSharedExternals).then(flow.generateImportMap).then(flow.commitChanges).then(flow.exposeModuleLoader).then((loadRemoteModule) => ({
1889
- config,
1890
- adapters,
1891
- loadRemoteModule
1892
- }));
1893
- };
1894
-
1895
- // src/lib/3.adapters/browser/browser.ts
1896
- var createBrowser = (config) => {
1897
- return {
1898
- setImportMapFn: config.setImportMapFn,
1899
- importModule: config.loadModuleFn
1900
- };
1901
- };
1902
-
1903
- // src/lib/3.adapters/checks/version.check.ts
1904
- var import_valid = __toESM(require_valid());
1905
- var import_satisfies = __toESM(require_satisfies());
1906
- var import_compare = __toESM(require_compare());
1907
- var import_min_version = __toESM(require_min_version());
1908
- var import_valid2 = __toESM(require_valid2());
1909
- var createVersionCheck = () => {
1910
- return {
1911
- isValidSemver: function(version) {
1912
- return (0, import_valid.default)(version) !== null;
1913
- },
1914
- isCompatible: function(version, range) {
1915
- return (0, import_satisfies.default)(version, range);
1916
- },
1917
- compare: function(versionA, versionB) {
1918
- return (0, import_compare.default)(versionA, versionB, true);
1919
- },
1920
- smallestVersion: function(versionRange) {
1921
- if (!(0, import_valid2.default)(versionRange)) return "0.0.0";
1922
- const minVersion = (0, import_min_version.default)(versionRange);
1923
- return minVersion?.raw ?? "0.0.0";
1924
- }
1925
- };
1926
- };
1927
-
1928
- // src/lib/utils/integrity.ts
1929
- var SUPPORTED_ALGORITHMS = {
1930
- "sha256-": "SHA-256",
1931
- "sha384-": "SHA-384",
1932
- "sha512-": "SHA-512"
1933
- };
1934
- var parseIntegrity = (integrity) => {
1935
- for (const prefix of Object.keys(SUPPORTED_ALGORITHMS)) {
1936
- if (integrity.startsWith(prefix)) {
1937
- return { algorithm: SUPPORTED_ALGORITHMS[prefix], expected: integrity };
1938
- }
1939
- }
1940
- return null;
1941
- };
1942
- var toBase64 = (bytes) => {
1943
- const view = new Uint8Array(bytes);
1944
- let bin = "";
1945
- for (let i = 0; i < view.length; i++) bin += String.fromCharCode(view[i]);
1946
- return btoa(bin);
1947
- };
1948
- var verifyIntegrity = async (bytes, integrity) => {
1949
- const parsed = parseIntegrity(integrity);
1950
- if (!parsed) {
1951
- throw new TypeError(
1952
- `Unsupported integrity prefix in '${integrity}'. Expected sha256-, sha384-, or sha512-.`
1953
- );
1954
- }
1955
- const subtle = typeof crypto !== "undefined" && crypto.subtle ? crypto.subtle : void 0;
1956
- if (!subtle) {
1957
- throw new Error("SubtleCrypto is not available in this environment.");
1958
- }
1959
- const digest = await subtle.digest(parsed.algorithm, bytes);
1960
- const actual = integrity.substring(0, integrity.indexOf("-") + 1) + toBase64(digest);
1961
- if (actual !== parsed.expected) {
1962
- throw new Error(`Integrity mismatch: expected ${parsed.expected}, got ${actual}`);
1963
- }
1964
- };
1965
-
1966
- // src/lib/3.adapters/http/manifest-provider.ts
1967
- var createManifestProvider = () => {
1968
- const ensureOk = (response) => {
1969
- if (!response.ok)
1970
- return Promise.reject(new NFError(`${response.status} - ${response.statusText}`));
1971
- return response;
1972
- };
1973
- const formatError = (manifestUrl) => (err) => {
1974
- const msg = err instanceof Error ? err.message : String(err);
1975
- throw new NFError(`Fetch of '${manifestUrl}' returned ${msg}`);
1976
- };
1977
- return {
1978
- provide: async function(remotesOrManifestUrl, opts = {}) {
1979
- if (typeof remotesOrManifestUrl !== "string") return Promise.resolve(remotesOrManifestUrl);
1980
- const parse = async (response) => {
1981
- if (!opts.integrity) return response.json();
1982
- const bytes = await response.arrayBuffer();
1983
- await verifyIntegrity(bytes, opts.integrity);
1984
- return JSON.parse(new TextDecoder().decode(bytes));
1985
- };
1986
- return fetch(remotesOrManifestUrl).then(ensureOk).then(parse).catch(formatError(remotesOrManifestUrl));
1987
- }
1988
- };
1989
- };
1990
-
1991
- // src/lib/3.adapters/http/remote-entry-provider.ts
1992
- var createRemoteEntryProvider = () => {
1993
- const ensureOk = (response) => {
1994
- if (!response.ok)
1995
- return Promise.reject(new Error(`${response.status} - ${response.statusText}`));
1996
- return response;
1997
- };
1998
- const fillEmptyFields = (remoteEntryUrl) => (remoteEntry) => {
1999
- if (!remoteEntry.exposes) remoteEntry.exposes = [];
2000
- if (!remoteEntry.shared) remoteEntry.shared = [];
2001
- if (!remoteEntry.url) remoteEntry.url = remoteEntryUrl;
2002
- return remoteEntry;
2003
- };
2004
- const formatError = (remoteEntryUrl) => (err) => {
2005
- const msg = err instanceof Error ? err.message : String(err);
2006
- throw new NFError(`Fetch of '${remoteEntryUrl}' returned ${msg}`);
2007
- };
2008
- return {
2009
- provide: async function(remoteEntryUrl, opts = {}) {
2010
- const parse = async (response) => {
2011
- if (!opts.integrity) return response.json();
2012
- const bytes = await response.arrayBuffer();
2013
- await verifyIntegrity(bytes, opts.integrity);
2014
- return JSON.parse(new TextDecoder().decode(bytes));
2015
- };
2016
- return fetch(remoteEntryUrl).then(ensureOk).then(parse).then(fillEmptyFields(remoteEntryUrl)).catch(formatError(remoteEntryUrl));
2017
- }
2018
- };
2019
- };
2020
-
2021
1931
  // src/lib/utils/optional.ts
2022
1932
  var Optional = class _Optional {
2023
1933
  constructor(item) {
@@ -2057,42 +1967,422 @@ var Optional = class _Optional {
2057
1967
  }
2058
1968
  };
2059
1969
 
2060
- // src/lib/3.adapters/storage/remote-info.repository.ts
2061
- var createRemoteInfoRepository = (config) => {
2062
- const STORAGE = config.storage("remotes", {});
2063
- if (config.clearStorage) STORAGE.clear();
2064
- const _cache = STORAGE.get() ?? {};
2065
- return {
2066
- contains: function(remoteName) {
2067
- return !!_cache[remoteName];
2068
- },
2069
- remove: function(remoteName) {
2070
- delete _cache[remoteName];
2071
- return this;
2072
- },
2073
- addOrUpdate: function(remoteName, remote) {
2074
- _cache[remoteName] = remote;
2075
- return this;
2076
- },
2077
- tryGet: function(remoteName) {
2078
- return Optional.of(_cache[remoteName]);
2079
- },
2080
- tryGetModule: function(remoteName, exposedModule) {
2081
- return Optional.of(_cache[remoteName]?.exposes.find((m) => m.moduleName === exposedModule)).map(
2082
- (m) => join(_cache[remoteName].scopeUrl, m.file)
2083
- );
2084
- },
2085
- getAll: function() {
2086
- return _cache;
2087
- },
2088
- commit: function() {
2089
- STORAGE.set(_cache);
2090
- return this;
2091
- }
2092
- };
1970
+ // src/lib/core/2.app/steps/get-remote-entry.ts
1971
+ var normalizeRemoteRef = (remote) => {
1972
+ if (!remote) return {};
1973
+ if (typeof remote === "string") return { name: remote };
1974
+ return remote;
1975
+ };
1976
+ function createGetRemoteEntry(config, ports) {
1977
+ return async (remoteEntryUrl, remote) => {
1978
+ const { name: remoteName, integrity } = normalizeRemoteRef(remote);
1979
+ if (!!remoteName && shouldSkipCachedRemote(remoteEntryUrl, remoteName)) {
1980
+ config.log.debug(7, `Found remote '${remoteName}' in storage, omitting fetch.`);
1981
+ return Optional.empty();
1982
+ }
1983
+ try {
1984
+ const remoteEntry = integrity ? await ports.remoteEntryProvider.provide(remoteEntryUrl, { integrity }) : await ports.remoteEntryProvider.provide(remoteEntryUrl);
1985
+ config.log.debug(
1986
+ 7,
1987
+ `[${remoteEntry.name}] Fetched from '${remoteEntry.url}', exposing: ${JSON.stringify(remoteEntry.exposes)}`
1988
+ );
1989
+ if (!!remoteName && remoteEntry.name !== remoteName) {
1990
+ const errorMsg = `Fetched remote '${remoteEntry.name}' does not match requested '${remoteName}'.`;
1991
+ if (config.strict.strictRemoteEntry) {
1992
+ config.log.error(7, errorMsg);
1993
+ throw new NFError("Could not fetch remote entry");
1994
+ }
1995
+ config.log.warn(7, errorMsg + " Omitting expected name.");
1996
+ }
1997
+ if (ports.remoteInfoRepo.contains(remoteEntry.name)) {
1998
+ remoteEntry.override = true;
1999
+ config.log.debug(7, `Overriding existing remote '${remoteName}' with '${remoteEntryUrl}'.`);
2000
+ }
2001
+ return Optional.of(checkForSSE(remoteEntry));
2002
+ } catch (error) {
2003
+ config.log.error(
2004
+ 7,
2005
+ `[${remoteName ?? "unknown"}] Could not fetch remoteEntry from ${remoteEntryUrl}.`,
2006
+ error
2007
+ );
2008
+ return Promise.reject(
2009
+ new NFError(`[${remoteName ?? remoteEntryUrl}] Could not fetch remoteEntry.`)
2010
+ );
2011
+ }
2012
+ };
2013
+ function shouldSkipCachedRemote(remoteEntryUrl, remoteName) {
2014
+ return ports.remoteInfoRepo.tryGet(remoteName).map(
2015
+ (cachedRemoteInfo) => config.profile.overrideCachedRemotes !== "always" || !config.profile.overrideCachedRemotesIfURLMatches && remoteEntryUrl === join(cachedRemoteInfo.scopeUrl, "remoteEntry.json")
2016
+ ).orElse(false);
2017
+ }
2018
+ function checkForSSE(entry) {
2019
+ if (config.sse) {
2020
+ if (entry.buildNotificationsEndpoint) {
2021
+ ports.sse.watchRemoteBuilds(
2022
+ join(getScope(entry.url), entry.buildNotificationsEndpoint)
2023
+ );
2024
+ config.log.debug(7, `Registered SSE endpoint of remote '${entry.name}' `);
2025
+ } else {
2026
+ config.log.debug(7, `Remote ${entry.name} has no defined 'buildNotificationsEndpoint'`);
2027
+ }
2028
+ }
2029
+ return entry;
2030
+ }
2031
+ }
2032
+
2033
+ // src/lib/core/2.app/steps/update-cache.ts
2034
+ function createUpdateCache(config, ports) {
2035
+ const storeRemoteEntry = createStoreRemoteEntry(config, ports, 8);
2036
+ return (remoteEntry) => {
2037
+ try {
2038
+ const actions = {};
2039
+ storeRemoteEntry(remoteEntry, (entry, external, ctx) => {
2040
+ const { action, sharedVersion } = resolveSharedExternal(entry, external, ctx);
2041
+ actions[external.packageName] = { action };
2042
+ if (action === "skip" && external.shareScope && sharedVersion?.remotes[0]?.file) {
2043
+ actions[external.packageName].override = resolveOverrideUrl(
2044
+ entry,
2045
+ external,
2046
+ sharedVersion
2047
+ );
2048
+ }
2049
+ });
2050
+ return Promise.resolve({ entry: remoteEntry, actions });
2051
+ } catch (error) {
2052
+ return Promise.reject(error);
2053
+ }
2054
+ };
2055
+ function resolveSharedExternal(remoteEntry, sharedInfo, {
2056
+ tag,
2057
+ remote,
2058
+ cached,
2059
+ scopeType,
2060
+ assertSameVersionCompatibility,
2061
+ commit
2062
+ }) {
2063
+ let action = scopeType === "strict" ? "share" : "skip";
2064
+ const sharedVersion = cached.versions.find((c) => c.action === "share");
2065
+ const isCompatible = !sharedVersion || ports.versionCheck.isCompatible(sharedVersion.tag, remote.requiredVersion);
2066
+ if (action === "skip" && !isCompatible && remote.strictVersion) {
2067
+ action = "scope";
2068
+ 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}'`;
2069
+ if (config.strict.strictExternalCompatibility) {
2070
+ config.log.error(8, errorMsg);
2071
+ throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2072
+ }
2073
+ config.log.warn(8, errorMsg);
2074
+ }
2075
+ const matchingVersion = cached.versions.find((cached2) => cached2.tag === tag);
2076
+ if (matchingVersion) {
2077
+ assertSameVersionCompatibility(matchingVersion);
2078
+ matchingVersion.remotes.push(remote);
2079
+ } else {
2080
+ if (!sharedVersion) action = "share";
2081
+ remote.cached = action !== "skip";
2082
+ cached.versions.push({ tag, action, host: false, remotes: [remote] });
2083
+ }
2084
+ commit();
2085
+ return { action, sharedVersion };
2086
+ }
2087
+ function resolveOverrideUrl(remoteEntry, external, sharedVersion) {
2088
+ return ports.remoteInfoRepo.tryGet(sharedVersion.remotes[0].name).map((remote) => join(remote.scopeUrl, sharedVersion.remotes[0].file)).orThrow(() => {
2089
+ config.log.error(
2090
+ 8,
2091
+ `[${external.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}][${external.packageName}@${external.version}][override] Remote name not found in cache.`
2092
+ );
2093
+ return new NFError(
2094
+ `Could not find override url from remote ${sharedVersion.remotes[0].name}`
2095
+ );
2096
+ });
2097
+ }
2098
+ }
2099
+
2100
+ // src/lib/core/2.app/steps/convert-to-import-map.ts
2101
+ function createConvertToImportMap({ log }, ports) {
2102
+ return ({ entry, actions }) => {
2103
+ const importMap = { imports: {} };
2104
+ addExternals(entry, actions, importMap);
2105
+ addRemoteInfos(entry, importMap);
2106
+ log.debug(9, `[${entry.name}] Processed actions:`, actions);
2107
+ return Promise.resolve(importMap);
2108
+ };
2109
+ function addExternals(remoteEntry, actions, importMap) {
2110
+ if (!remoteEntry.shared) {
2111
+ return;
2112
+ }
2113
+ const remoteEntryScope = getScope(remoteEntry.url);
2114
+ const integrityMap = remoteEntry.integrity;
2115
+ const chunkBundles = /* @__PURE__ */ new Set(["mapping-or-exposed"]);
2116
+ remoteEntry.shared.forEach((external) => {
2117
+ if (!external.singleton) {
2118
+ const url2 = join(remoteEntryScope, external.outFileName);
2119
+ addToScopes(remoteEntryScope, external.packageName, url2, importMap);
2120
+ addIntegrity(importMap, url2, integrityMap, external.outFileName);
2121
+ if (external?.bundle) chunkBundles.add(external?.bundle);
2122
+ return;
2123
+ }
2124
+ if (!actions[external.packageName]) {
2125
+ log.warn(
2126
+ 9,
2127
+ `[${remoteEntry.name}] No action defined for shared external '${external.packageName}', skipping.`
2128
+ );
2129
+ return;
2130
+ }
2131
+ if (actions[external.packageName].action === "skip") {
2132
+ if (!external.shareScope) return;
2133
+ if (actions[external.packageName].override) {
2134
+ addToScopes(
2135
+ remoteEntryScope,
2136
+ external.packageName,
2137
+ actions[external.packageName].override,
2138
+ importMap
2139
+ );
2140
+ return;
2141
+ }
2142
+ }
2143
+ if (external?.bundle) chunkBundles.add(external?.bundle);
2144
+ if (actions[external.packageName].action === "scope") {
2145
+ const url2 = join(remoteEntryScope, external.outFileName);
2146
+ addToScopes(remoteEntryScope, external.packageName, url2, importMap);
2147
+ addIntegrity(importMap, url2, integrityMap, external.outFileName);
2148
+ return;
2149
+ }
2150
+ if (external.shareScope) {
2151
+ const url2 = join(remoteEntryScope, external.outFileName);
2152
+ addToScopes(remoteEntryScope, external.packageName, url2, importMap);
2153
+ addIntegrity(importMap, url2, integrityMap, external.outFileName);
2154
+ return;
2155
+ }
2156
+ const url = join(remoteEntryScope, external.outFileName);
2157
+ importMap.imports[external.packageName] = url;
2158
+ addIntegrity(importMap, url, integrityMap, external.outFileName);
2159
+ });
2160
+ addChunkImports(importMap, remoteEntry, remoteEntryScope, chunkBundles);
2161
+ }
2162
+ function addToScopes(scope, packageName, url, importMap) {
2163
+ if (!importMap.scopes) importMap.scopes = {};
2164
+ if (!importMap.scopes[scope]) importMap.scopes[scope] = {};
2165
+ importMap.scopes[scope][packageName] = url;
2166
+ }
2167
+ function addRemoteInfos(remoteEntry, importMap) {
2168
+ if (!remoteEntry.exposes) return;
2169
+ const scope = getScope(remoteEntry.url);
2170
+ remoteEntry.exposes.forEach((exposed) => {
2171
+ const moduleName = join(remoteEntry.name, exposed.key);
2172
+ const moduleUrl = join(scope, exposed.outFileName);
2173
+ importMap.imports[moduleName] = moduleUrl;
2174
+ addIntegrity(importMap, moduleUrl, remoteEntry.integrity, exposed.outFileName);
2175
+ });
2176
+ }
2177
+ function addChunkImports(importMap, remoteEntry, remoteEntryScope, chunkBundles) {
2178
+ Array.from(chunkBundles).forEach((bundleName) => {
2179
+ ports.sharedChunksRepo.tryGet(remoteEntry.name, bundleName).ifPresent((files) => {
2180
+ files.forEach((file) => {
2181
+ const url = join(remoteEntryScope, file);
2182
+ addToScopes(remoteEntryScope, toChunkImport(file), url, importMap);
2183
+ addIntegrity(importMap, url, remoteEntry.integrity, file);
2184
+ });
2185
+ });
2186
+ });
2187
+ return importMap;
2188
+ }
2189
+ function addIntegrity(importMap, url, integrityMap, file) {
2190
+ const hash = integrityMap?.[file];
2191
+ if (!hash) return;
2192
+ if (!importMap.integrity) importMap.integrity = {};
2193
+ importMap.integrity[url] = hash;
2194
+ }
2195
+ }
2196
+
2197
+ // src/lib/core/5.di/init.factory.ts
2198
+ var createInitDrivers = ({
2199
+ config,
2200
+ adapters
2201
+ }) => ({
2202
+ getRemoteEntries: createGetRemoteEntries(config, adapters),
2203
+ processRemoteEntries: createProcessRemoteEntries(config, adapters),
2204
+ determineSharedExternals: createDetermineSharedExternals(config, adapters),
2205
+ generateImportMap: createGenerateImportMap(config, adapters),
2206
+ commitChanges: createCommitChanges(config, adapters),
2207
+ exposeModuleLoader: createExposeModuleLoader(config, adapters),
2208
+ getRemoteEntry: createGetRemoteEntry(config, adapters),
2209
+ updateCache: createUpdateCache(config, adapters),
2210
+ convertToImportMap: createConvertToImportMap(config, adapters)
2211
+ });
2212
+ var INIT_FLOW_FACTORY = ({
2213
+ config,
2214
+ adapters
2215
+ }) => {
2216
+ const flow = createInitDrivers({ config, adapters });
2217
+ return {
2218
+ flow,
2219
+ adapters,
2220
+ config
2221
+ };
2222
+ };
2223
+
2224
+ // src/lib/core/3.adapters/browser/browser.ts
2225
+ var createBrowser = (config) => {
2226
+ return {
2227
+ setImportMapFn: config.setImportMapFn,
2228
+ importModule: config.loadModuleFn
2229
+ };
2230
+ };
2231
+
2232
+ // src/lib/core/3.adapters/checks/version.check.ts
2233
+ var import_valid = __toESM(require_valid());
2234
+ var import_satisfies = __toESM(require_satisfies());
2235
+ var import_compare = __toESM(require_compare());
2236
+ var import_min_version = __toESM(require_min_version());
2237
+ var import_valid2 = __toESM(require_valid2());
2238
+ var createVersionCheck = () => {
2239
+ return {
2240
+ isValidSemver: function(version) {
2241
+ return (0, import_valid.default)(version) !== null;
2242
+ },
2243
+ isCompatible: function(version, range) {
2244
+ return (0, import_satisfies.default)(version, range);
2245
+ },
2246
+ compare: function(versionA, versionB) {
2247
+ return (0, import_compare.default)(versionA, versionB, true);
2248
+ },
2249
+ smallestVersion: function(versionRange) {
2250
+ if (!(0, import_valid2.default)(versionRange)) return "0.0.0";
2251
+ const minVersion = (0, import_min_version.default)(versionRange);
2252
+ return minVersion?.raw ?? "0.0.0";
2253
+ }
2254
+ };
2255
+ };
2256
+
2257
+ // src/lib/utils/integrity.ts
2258
+ var SUPPORTED_ALGORITHMS = {
2259
+ "sha256-": "SHA-256",
2260
+ "sha384-": "SHA-384",
2261
+ "sha512-": "SHA-512"
2262
+ };
2263
+ var parseIntegrity = (integrity) => {
2264
+ for (const prefix of Object.keys(SUPPORTED_ALGORITHMS)) {
2265
+ if (integrity.startsWith(prefix)) {
2266
+ return { algorithm: SUPPORTED_ALGORITHMS[prefix], expected: integrity };
2267
+ }
2268
+ }
2269
+ return null;
2270
+ };
2271
+ var toBase64 = (bytes) => {
2272
+ const view = new Uint8Array(bytes);
2273
+ let bin = "";
2274
+ for (let i = 0; i < view.length; i++) bin += String.fromCharCode(view[i]);
2275
+ return btoa(bin);
2276
+ };
2277
+ var verifyIntegrity = async (bytes, integrity) => {
2278
+ const parsed = parseIntegrity(integrity);
2279
+ if (!parsed) {
2280
+ throw new TypeError(
2281
+ `Unsupported integrity prefix in '${integrity}'. Expected sha256-, sha384-, or sha512-.`
2282
+ );
2283
+ }
2284
+ const subtle = typeof crypto !== "undefined" && crypto.subtle ? crypto.subtle : void 0;
2285
+ if (!subtle) {
2286
+ throw new Error("SubtleCrypto is not available in this environment.");
2287
+ }
2288
+ const digest = await subtle.digest(parsed.algorithm, bytes);
2289
+ const actual = integrity.substring(0, integrity.indexOf("-") + 1) + toBase64(digest);
2290
+ if (actual !== parsed.expected) {
2291
+ throw new Error(`Integrity mismatch: expected ${parsed.expected}, got ${actual}`);
2292
+ }
2293
+ };
2294
+
2295
+ // src/lib/core/3.adapters/http/manifest-provider.ts
2296
+ var createManifestProvider = () => {
2297
+ const ensureOk = (response) => {
2298
+ if (!response.ok)
2299
+ return Promise.reject(new NFError(`${response.status} - ${response.statusText}`));
2300
+ return response;
2301
+ };
2302
+ const formatError = (manifestUrl) => (err) => {
2303
+ const msg = err instanceof Error ? err.message : String(err);
2304
+ throw new NFError(`Fetch of '${manifestUrl}' returned ${msg}`);
2305
+ };
2306
+ return {
2307
+ provide: async function(remotesOrManifestUrl, opts = {}) {
2308
+ if (typeof remotesOrManifestUrl !== "string") return Promise.resolve(remotesOrManifestUrl);
2309
+ const parse = async (response) => {
2310
+ if (!opts.integrity) return response.json();
2311
+ const bytes = await response.arrayBuffer();
2312
+ await verifyIntegrity(bytes, opts.integrity);
2313
+ return JSON.parse(new TextDecoder().decode(bytes));
2314
+ };
2315
+ return fetch(remotesOrManifestUrl).then(ensureOk).then(parse).catch(formatError(remotesOrManifestUrl));
2316
+ }
2317
+ };
2318
+ };
2319
+
2320
+ // src/lib/core/3.adapters/http/remote-entry-provider.ts
2321
+ var createRemoteEntryProvider = () => {
2322
+ const ensureOk = (response) => {
2323
+ if (!response.ok)
2324
+ return Promise.reject(new Error(`${response.status} - ${response.statusText}`));
2325
+ return response;
2326
+ };
2327
+ const fillEmptyFields = (remoteEntryUrl) => (remoteEntry) => {
2328
+ if (!remoteEntry.exposes) remoteEntry.exposes = [];
2329
+ if (!remoteEntry.shared) remoteEntry.shared = [];
2330
+ if (!remoteEntry.url) remoteEntry.url = remoteEntryUrl;
2331
+ return remoteEntry;
2332
+ };
2333
+ const formatError = (remoteEntryUrl) => (err) => {
2334
+ const msg = err instanceof Error ? err.message : String(err);
2335
+ throw new NFError(`Fetch of '${remoteEntryUrl}' returned ${msg}`);
2336
+ };
2337
+ return {
2338
+ provide: async function(remoteEntryUrl, opts = {}) {
2339
+ const parse = async (response) => {
2340
+ if (!opts.integrity) return response.json();
2341
+ const bytes = await response.arrayBuffer();
2342
+ await verifyIntegrity(bytes, opts.integrity);
2343
+ return JSON.parse(new TextDecoder().decode(bytes));
2344
+ };
2345
+ return fetch(remoteEntryUrl).then(ensureOk).then(parse).then(fillEmptyFields(remoteEntryUrl)).catch(formatError(remoteEntryUrl));
2346
+ }
2347
+ };
2348
+ };
2349
+
2350
+ // src/lib/core/3.adapters/storage/remote-info.repository.ts
2351
+ var createRemoteInfoRepository = (config) => {
2352
+ const STORAGE = config.storage("remotes", {});
2353
+ if (config.clearStorage) STORAGE.clear();
2354
+ const _cache = STORAGE.get() ?? {};
2355
+ return {
2356
+ contains: function(remoteName) {
2357
+ return !!_cache[remoteName];
2358
+ },
2359
+ remove: function(remoteName) {
2360
+ delete _cache[remoteName];
2361
+ return this;
2362
+ },
2363
+ addOrUpdate: function(remoteName, remote) {
2364
+ _cache[remoteName] = remote;
2365
+ return this;
2366
+ },
2367
+ tryGet: function(remoteName) {
2368
+ return Optional.of(_cache[remoteName]);
2369
+ },
2370
+ tryGetModule: function(remoteName, exposedModule) {
2371
+ return Optional.of(_cache[remoteName]?.exposes.find((m) => m.moduleName === exposedModule)).map(
2372
+ (m) => join(_cache[remoteName].scopeUrl, m.file)
2373
+ );
2374
+ },
2375
+ getAll: function() {
2376
+ return _cache;
2377
+ },
2378
+ commit: function() {
2379
+ STORAGE.set(_cache);
2380
+ return this;
2381
+ }
2382
+ };
2093
2383
  };
2094
2384
 
2095
- // src/lib/3.adapters/storage/scoped-externals.repository.ts
2385
+ // src/lib/core/3.adapters/storage/scoped-externals.repository.ts
2096
2386
  var createScopedExternalsRepository = (config) => {
2097
2387
  const STORAGE = config.storage("scoped-externals", {});
2098
2388
  if (config.clearStorage) STORAGE.clear();
@@ -2120,7 +2410,7 @@ var createScopedExternalsRepository = (config) => {
2120
2410
  };
2121
2411
  };
2122
2412
 
2123
- // src/lib/3.adapters/storage/shared-externals.repository.ts
2413
+ // src/lib/core/3.adapters/storage/shared-externals.repository.ts
2124
2414
  var createSharedExternalsRepository = (config) => {
2125
2415
  const STORAGE = config.storage(
2126
2416
  "shared-externals",
@@ -2186,7 +2476,7 @@ var createSharedExternalsRepository = (config) => {
2186
2476
  };
2187
2477
  };
2188
2478
 
2189
- // src/lib/3.adapters/browser/sse-handler.ts
2479
+ // src/lib/core/3.adapters/browser/sse-handler.ts
2190
2480
  var createSSEHandler = (config) => {
2191
2481
  const subscribers = [];
2192
2482
  return {
@@ -2212,22 +2502,7 @@ var createSSEHandler = (config) => {
2212
2502
  };
2213
2503
  };
2214
2504
 
2215
- // src/lib/utils/clone-entry.ts
2216
- var cloneEntry = (name, raw) => {
2217
- try {
2218
- if (typeof structuredClone === "function") {
2219
- return structuredClone(raw);
2220
- }
2221
- } catch {
2222
- }
2223
- try {
2224
- return JSON.parse(JSON.stringify(raw));
2225
- } catch {
2226
- }
2227
- throw new NFError(`Could not clone entry '${String(name)}'`);
2228
- };
2229
-
2230
- // src/lib/3.adapters/storage/chunk.repository.ts
2505
+ // src/lib/core/3.adapters/storage/chunk.repository.ts
2231
2506
  var createChunkRepository = (config) => {
2232
2507
  const STORAGE = config.storage("shared-chunks", {});
2233
2508
  if (config.clearStorage) STORAGE.clear();
@@ -2238,644 +2513,339 @@ var createChunkRepository = (config) => {
2238
2513
  _cache[remoteName][bundleName] = chunks;
2239
2514
  return this;
2240
2515
  },
2241
- tryGet: function(remoteName, bundleName) {
2242
- return Optional.of(_cache[remoteName]?.[bundleName]);
2243
- },
2244
- commit: function() {
2245
- STORAGE.set(_cache);
2246
- return this;
2247
- }
2248
- };
2249
- };
2250
-
2251
- // src/lib/5.di/driving.factory.ts
2252
- var createDriving = (config) => {
2253
- const adapters = {
2254
- versionCheck: createVersionCheck(),
2255
- manifestProvider: createManifestProvider(),
2256
- remoteEntryProvider: createRemoteEntryProvider(),
2257
- remoteInfoRepo: createRemoteInfoRepository(config),
2258
- scopedExternalsRepo: createScopedExternalsRepository(config),
2259
- sharedExternalsRepo: createSharedExternalsRepository(config),
2260
- sharedChunksRepo: createChunkRepository(config),
2261
- browser: createBrowser(config),
2262
- sse: createSSEHandler(config)
2263
- };
2264
- return { adapters, config };
2265
- };
2266
-
2267
- // src/lib/4.config/import-map/trusted-types.ts
2268
- var IMPORT_MAP_KEYS = /* @__PURE__ */ new Set(["imports", "scopes", "integrity"]);
2269
- var validateImportMapJSON = (input) => {
2270
- let parsed;
2271
- try {
2272
- parsed = JSON.parse(input);
2273
- } catch {
2274
- throw new TypeError("[nf-orchestrator] trusted-types: import map is not valid JSON");
2275
- }
2276
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
2277
- throw new TypeError("[nf-orchestrator] trusted-types: import map must be a plain object");
2278
- }
2279
- for (const key of Object.keys(parsed)) {
2280
- if (!IMPORT_MAP_KEYS.has(key)) {
2281
- throw new TypeError(`[nf-orchestrator] trusted-types: unexpected key "${key}" in import map`);
2282
- }
2283
- }
2284
- return input;
2285
- };
2286
- var validateScriptURL = (input) => {
2287
- const base = typeof location !== "undefined" ? location.href : "http://localhost/";
2288
- let url;
2289
- try {
2290
- url = new URL(input, base);
2291
- } catch {
2292
- throw new TypeError(`[nf-orchestrator] trusted-types: invalid script URL "${input}"`);
2293
- }
2294
- if (url.protocol !== "https:" && url.protocol !== "http:") {
2295
- throw new TypeError(
2296
- `[nf-orchestrator] trusted-types: disallowed protocol "${url.protocol}" for script URL`
2297
- );
2298
- }
2299
- return input;
2300
- };
2301
- var passThroughPolicy = {
2302
- createScript: (input) => input,
2303
- createScriptURL: (input) => input
2304
- };
2305
- var cachedPolicy = null;
2306
- var getTrustedTypesPolicy = (name = "nfo") => {
2307
- if (name === false) return passThroughPolicy;
2308
- if (cachedPolicy) return cachedPolicy;
2309
- const factory = globalThis.trustedTypes;
2310
- if (!factory) {
2311
- cachedPolicy = passThroughPolicy;
2312
- return cachedPolicy;
2313
- }
2314
- const native = factory.createPolicy(name, {
2315
- createScript: validateImportMapJSON,
2316
- createScriptURL: validateScriptURL
2317
- });
2318
- cachedPolicy = {
2319
- createScript: (input) => native.createScript(input),
2320
- createScriptURL: (input) => native.createScriptURL(input)
2321
- };
2322
- return cachedPolicy;
2323
- };
2324
-
2325
- // src/lib/4.config/import-map/replace-in-dom.ts
2326
- var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts = {}) => {
2327
- if (opts?.override) {
2328
- document.head.querySelectorAll(`script[type="${mapType}"]`).forEach((importMap2) => importMap2.remove());
2329
- }
2330
- const policy = getTrustedTypesPolicy(trustedTypesPolicyName);
2331
- document.head.appendChild(
2332
- Object.assign(document.createElement("script"), {
2333
- type: mapType,
2334
- text: policy.createScript(JSON.stringify(importMap))
2335
- })
2336
- );
2337
- return Promise.resolve(importMap);
2338
- };
2339
-
2340
- // src/lib/4.config/import-map/use-default.ts
2341
- var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
2342
- loadModuleFn: (url) => {
2343
- const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);
2344
- return import(
2345
- /* @vite-ignore */
2346
- trusted
2347
- );
2348
- },
2349
- setImportMapFn: replaceInDOM("importmap", trustedTypesPolicyName),
2350
- reloadBrowserFn: () => {
2351
- window.location.reload();
2352
- }
2353
- });
2354
-
2355
- // src/lib/4.config/import-map/import-map.config.ts
2356
- var createImportMapConfig = (o) => {
2357
- const fallback = useDefaultImportMap(o.trustedTypesPolicyName);
2358
- return {
2359
- setImportMapFn: o.setImportMapFn ?? fallback.setImportMapFn,
2360
- loadModuleFn: o.loadModuleFn ?? fallback.loadModuleFn,
2361
- reloadBrowserFn: o.reloadBrowserFn ?? fallback.reloadBrowserFn
2362
- };
2363
- };
2364
-
2365
- // src/lib/4.config/host/host.config.ts
2366
- var createHostConfig = (override) => {
2367
- const extras = override?.manifestIntegrity ? { manifestIntegrity: override.manifestIntegrity } : {};
2368
- if (!override?.hostRemoteEntry) {
2369
- return { hostRemoteEntry: false, ...extras };
2370
- }
2371
- if (typeof override.hostRemoteEntry === "string") {
2372
- return {
2373
- hostRemoteEntry: {
2374
- name: "__NF-HOST__",
2375
- url: override.hostRemoteEntry
2376
- },
2377
- ...extras
2378
- };
2379
- }
2380
- return {
2381
- hostRemoteEntry: {
2382
- name: "__NF-HOST__",
2383
- ...override.hostRemoteEntry
2384
- },
2385
- ...extras
2386
- };
2387
- };
2388
-
2389
- // src/lib/4.config/logging/noop.logger.ts
2390
- var noopLogger = {
2391
- debug: () => {
2392
- },
2393
- error: () => {
2394
- },
2395
- warn: () => {
2396
- }
2397
- };
2398
-
2399
- // src/lib/2.app/config/log.contract.ts
2400
- var LogLevel = {
2401
- debug: 0,
2402
- warn: 1,
2403
- error: 2
2404
- };
2405
-
2406
- // src/lib/4.config/logging/log.handler.ts
2407
- var createLogHandler = (logger, logLevel) => {
2408
- const logTypes = Object.keys(LogLevel).filter((key) => isNaN(Number(key)));
2409
- return logTypes.reduce(
2410
- (acc, logMessageType) => {
2411
- return {
2412
- ...acc,
2413
- [logMessageType]: (step, message, details) => {
2414
- if (LogLevel[logMessageType] >= LogLevel[logLevel]) {
2415
- logger[logMessageType](step, message, details);
2416
- }
2417
- }
2418
- };
2419
- },
2420
- { level: logLevel }
2421
- );
2422
- };
2423
-
2424
- // src/lib/4.config/logging/log.config.ts
2425
- var createLogConfig = ({ logger, logLevel, sse }) => ({
2426
- log: createLogHandler(logger ?? noopLogger, logLevel ?? "error"),
2427
- sse: !!sse
2428
- });
2429
-
2430
- // src/lib/4.config/storage/global-this.storage.ts
2431
- var globalThisStorageEntry = (namespace) => (key, initialValue) => {
2432
- if (!globalThis[namespace]) {
2433
- globalThis[namespace] = {};
2434
- }
2435
- const storage = globalThis[namespace];
2436
- if (!storage[key]) storage[key] = initialValue;
2437
- const entry = {
2438
- get() {
2439
- return cloneEntry(key, storage[key]);
2440
- },
2441
- set(value) {
2442
- storage[key] = cloneEntry(key, value);
2443
- return entry;
2516
+ tryGet: function(remoteName, bundleName) {
2517
+ return Optional.of(_cache[remoteName]?.[bundleName]);
2444
2518
  },
2445
- clear() {
2446
- storage[key] = cloneEntry(key, initialValue);
2519
+ commit: function() {
2520
+ STORAGE.set(_cache);
2447
2521
  return this;
2448
2522
  }
2449
2523
  };
2450
- return entry;
2451
- };
2452
-
2453
- // src/lib/4.config/storage/storage.config.ts
2454
- var createStorageConfig = (override) => ({
2455
- storage: override.storage ? override.storage(override.storageNamespace ?? "__NATIVE_FEDERATION__") : globalThisStorageEntry(override.storageNamespace ?? "__NATIVE_FEDERATION__"),
2456
- clearStorage: override.clearStorage ?? false
2457
- });
2458
-
2459
- // src/lib/4.config/mode/default.profile.ts
2460
- var defaultProfile = {
2461
- latestSharedExternal: false,
2462
- overrideCachedRemotes: "init-only",
2463
- overrideCachedRemotesIfURLMatches: false
2464
2524
  };
2465
2525
 
2466
- // src/lib/4.config/mode/mode.config.ts
2467
- var createModeConfig = (override) => {
2468
- const strictnessConfig = typeof override.strict === "boolean" ? {
2469
- strictRemoteEntry: override.strict,
2470
- strictExternalCompatibility: override.strict,
2471
- strictExternalSameVersionCompatibility: override.strict,
2472
- strictExternalVersion: override.strict,
2473
- strictImportMap: override.strict
2474
- } : {
2475
- strictRemoteEntry: override.strict?.strictRemoteEntry ?? false,
2476
- strictExternalCompatibility: override.strict?.strictExternalCompatibility ?? false,
2477
- strictExternalSameVersionCompatibility: override.strict?.strictExternalSameVersionCompatibility ?? false,
2478
- strictExternalVersion: override.strict?.strictExternalVersion ?? false,
2479
- strictImportMap: override.strict?.strictImportMap ?? false
2480
- };
2481
- return {
2482
- strict: strictnessConfig,
2483
- profile: { ...defaultProfile, ...override.profile ?? {} }
2526
+ // src/lib/core/5.di/driving.factory.ts
2527
+ var createDriving = (config) => {
2528
+ const adapters = {
2529
+ versionCheck: createVersionCheck(),
2530
+ manifestProvider: createManifestProvider(),
2531
+ remoteEntryProvider: createRemoteEntryProvider(),
2532
+ remoteInfoRepo: createRemoteInfoRepository(config),
2533
+ scopedExternalsRepo: createScopedExternalsRepository(config),
2534
+ sharedExternalsRepo: createSharedExternalsRepository(config),
2535
+ sharedChunksRepo: createChunkRepository(config),
2536
+ browser: createBrowser(config),
2537
+ sse: createSSEHandler(config)
2484
2538
  };
2539
+ return { adapters, config };
2485
2540
  };
2486
2541
 
2487
- // src/lib/5.di/config.factory.ts
2488
- var createConfigHandlers = (overrides) => ({
2489
- ...createImportMapConfig(overrides),
2490
- ...createHostConfig(overrides),
2491
- ...createLogConfig(overrides),
2492
- ...createStorageConfig(overrides),
2493
- ...createModeConfig(overrides)
2494
- });
2495
-
2496
- // src/lib/2.app/flows/dynamic-init/convert-to-import-map.ts
2497
- function createConvertToImportMap({ log }, ports) {
2498
- return ({ entry, actions }) => {
2499
- const importMap = { imports: {} };
2500
- addExternals(entry, actions, importMap);
2501
- addRemoteInfos(entry, importMap);
2502
- log.debug(9, `[${entry.name}] Processed actions:`, actions);
2503
- return Promise.resolve(importMap);
2504
- };
2505
- function addExternals(remoteEntry, actions, importMap) {
2506
- if (!remoteEntry.shared) {
2507
- return;
2508
- }
2509
- const remoteEntryScope = getScope(remoteEntry.url);
2510
- const integrityMap = remoteEntry.integrity;
2511
- const chunkBundles = /* @__PURE__ */ new Set(["mapping-or-exposed"]);
2512
- remoteEntry.shared.forEach((external) => {
2513
- if (!external.singleton) {
2514
- const url2 = join(remoteEntryScope, external.outFileName);
2515
- addToScopes(remoteEntryScope, external.packageName, url2, importMap);
2516
- addIntegrity(importMap, url2, integrityMap, external.outFileName);
2517
- if (external?.bundle) chunkBundles.add(external?.bundle);
2518
- return;
2519
- }
2520
- if (!actions[external.packageName]) {
2521
- log.warn(
2522
- 9,
2523
- `[${remoteEntry.name}] No action defined for shared external '${external.packageName}', skipping.`
2524
- );
2525
- return;
2526
- }
2527
- if (actions[external.packageName].action === "skip") {
2528
- if (!external.shareScope) return;
2529
- if (actions[external.packageName].override) {
2530
- addToScopes(
2531
- remoteEntryScope,
2532
- external.packageName,
2533
- actions[external.packageName].override,
2534
- importMap
2535
- );
2536
- return;
2537
- }
2538
- }
2539
- if (external?.bundle) chunkBundles.add(external?.bundle);
2540
- if (actions[external.packageName].action === "scope") {
2541
- const url2 = join(remoteEntryScope, external.outFileName);
2542
- addToScopes(remoteEntryScope, external.packageName, url2, importMap);
2543
- addIntegrity(importMap, url2, integrityMap, external.outFileName);
2544
- return;
2545
- }
2546
- if (external.shareScope) {
2547
- const url2 = join(remoteEntryScope, external.outFileName);
2548
- addToScopes(remoteEntryScope, external.packageName, url2, importMap);
2549
- addIntegrity(importMap, url2, integrityMap, external.outFileName);
2550
- return;
2551
- }
2552
- const url = join(remoteEntryScope, external.outFileName);
2553
- importMap.imports[external.packageName] = url;
2554
- addIntegrity(importMap, url, integrityMap, external.outFileName);
2555
- });
2556
- addChunkImports(importMap, remoteEntry, remoteEntryScope, chunkBundles);
2542
+ // src/lib/core/4.config/import-map/trusted-types.ts
2543
+ var IMPORT_MAP_KEYS = /* @__PURE__ */ new Set(["imports", "scopes", "integrity"]);
2544
+ var validateImportMapJSON = (input) => {
2545
+ let parsed;
2546
+ try {
2547
+ parsed = JSON.parse(input);
2548
+ } catch {
2549
+ throw new TypeError("[nf-orchestrator] trusted-types: import map is not valid JSON");
2557
2550
  }
2558
- function addToScopes(scope, packageName, url, importMap) {
2559
- if (!importMap.scopes) importMap.scopes = {};
2560
- if (!importMap.scopes[scope]) importMap.scopes[scope] = {};
2561
- importMap.scopes[scope][packageName] = url;
2551
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
2552
+ throw new TypeError("[nf-orchestrator] trusted-types: import map must be a plain object");
2562
2553
  }
2563
- function addRemoteInfos(remoteEntry, importMap) {
2564
- if (!remoteEntry.exposes) return;
2565
- const scope = getScope(remoteEntry.url);
2566
- remoteEntry.exposes.forEach((exposed) => {
2567
- const moduleName = join(remoteEntry.name, exposed.key);
2568
- const moduleUrl = join(scope, exposed.outFileName);
2569
- importMap.imports[moduleName] = moduleUrl;
2570
- addIntegrity(importMap, moduleUrl, remoteEntry.integrity, exposed.outFileName);
2571
- });
2554
+ for (const key of Object.keys(parsed)) {
2555
+ if (!IMPORT_MAP_KEYS.has(key)) {
2556
+ throw new TypeError(`[nf-orchestrator] trusted-types: unexpected key "${key}" in import map`);
2557
+ }
2572
2558
  }
2573
- function addChunkImports(importMap, remoteEntry, remoteEntryScope, chunkBundles) {
2574
- Array.from(chunkBundles).forEach((bundleName) => {
2575
- ports.sharedChunksRepo.tryGet(remoteEntry.name, bundleName).ifPresent((files) => {
2576
- files.forEach((file) => {
2577
- const url = join(remoteEntryScope, file);
2578
- addToScopes(remoteEntryScope, toChunkImport(file), url, importMap);
2579
- addIntegrity(importMap, url, remoteEntry.integrity, file);
2580
- });
2581
- });
2582
- });
2583
- return importMap;
2559
+ return input;
2560
+ };
2561
+ var validateScriptURL = (input) => {
2562
+ const base = typeof location !== "undefined" ? location.href : "http://localhost/";
2563
+ let url;
2564
+ try {
2565
+ url = new URL(input, base);
2566
+ } catch {
2567
+ throw new TypeError(`[nf-orchestrator] trusted-types: invalid script URL "${input}"`);
2584
2568
  }
2585
- function addIntegrity(importMap, url, integrityMap, file) {
2586
- const hash = integrityMap?.[file];
2587
- if (!hash) return;
2588
- if (!importMap.integrity) importMap.integrity = {};
2589
- importMap.integrity[url] = hash;
2569
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
2570
+ throw new TypeError(
2571
+ `[nf-orchestrator] trusted-types: disallowed protocol "${url.protocol}" for script URL`
2572
+ );
2590
2573
  }
2591
- }
2592
-
2593
- // src/lib/2.app/flows/dynamic-init/get-remote-entry.ts
2594
- var normalizeRemoteRef = (remote) => {
2595
- if (!remote) return {};
2596
- if (typeof remote === "string") return { name: remote };
2597
- return remote;
2574
+ return input;
2598
2575
  };
2599
- function createGetRemoteEntry(config, ports) {
2600
- return async (remoteEntryUrl, remote) => {
2601
- const { name: remoteName, integrity } = normalizeRemoteRef(remote);
2602
- if (!!remoteName && shouldSkipCachedRemote(remoteEntryUrl, remoteName)) {
2603
- config.log.debug(7, `Found remote '${remoteName}' in storage, omitting fetch.`);
2604
- return Optional.empty();
2605
- }
2606
- try {
2607
- const remoteEntry = integrity ? await ports.remoteEntryProvider.provide(remoteEntryUrl, { integrity }) : await ports.remoteEntryProvider.provide(remoteEntryUrl);
2608
- config.log.debug(
2609
- 7,
2610
- `[${remoteEntry.name}] Fetched from '${remoteEntry.url}', exposing: ${JSON.stringify(remoteEntry.exposes)}`
2611
- );
2612
- if (!!remoteName && remoteEntry.name !== remoteName) {
2613
- const errorMsg = `Fetched remote '${remoteEntry.name}' does not match requested '${remoteName}'.`;
2614
- if (config.strict.strictRemoteEntry) {
2615
- config.log.error(7, errorMsg);
2616
- throw new NFError("Could not fetch remote entry");
2617
- }
2618
- config.log.warn(7, errorMsg + " Omitting expected name.");
2619
- }
2620
- if (ports.remoteInfoRepo.contains(remoteEntry.name)) {
2621
- remoteEntry.override = true;
2622
- config.log.debug(7, `Overriding existing remote '${remoteName}' with '${remoteEntryUrl}'.`);
2623
- }
2624
- return Optional.of(checkForSSE(remoteEntry));
2625
- } catch (error) {
2626
- config.log.error(
2627
- 7,
2628
- `[${remoteName ?? "unknown"}] Could not fetch remoteEntry from ${remoteEntryUrl}.`,
2629
- error
2630
- );
2631
- return Promise.reject(
2632
- new NFError(`[${remoteName ?? remoteEntryUrl}] Could not fetch remoteEntry.`)
2633
- );
2634
- }
2635
- };
2636
- function shouldSkipCachedRemote(remoteEntryUrl, remoteName) {
2637
- return ports.remoteInfoRepo.tryGet(remoteName).map(
2638
- (cachedRemoteInfo) => config.profile.overrideCachedRemotes !== "always" || !config.profile.overrideCachedRemotesIfURLMatches && remoteEntryUrl === join(cachedRemoteInfo.scopeUrl, "remoteEntry.json")
2639
- ).orElse(false);
2576
+ var passThroughPolicy = {
2577
+ createScript: (input) => input,
2578
+ createScriptURL: (input) => input
2579
+ };
2580
+ var cachedPolicy = null;
2581
+ var getTrustedTypesPolicy = (name = "nfo") => {
2582
+ if (name === false) return passThroughPolicy;
2583
+ if (cachedPolicy) return cachedPolicy;
2584
+ const factory = globalThis.trustedTypes;
2585
+ if (!factory) {
2586
+ cachedPolicy = passThroughPolicy;
2587
+ return cachedPolicy;
2640
2588
  }
2641
- function checkForSSE(entry) {
2642
- if (config.sse) {
2643
- if (entry.buildNotificationsEndpoint) {
2644
- ports.sse.watchRemoteBuilds(
2645
- join(getScope(entry.url), entry.buildNotificationsEndpoint)
2646
- );
2647
- config.log.debug(7, `Registered SSE endpoint of remote '${entry.name}' `);
2648
- } else {
2649
- config.log.debug(7, `Remote ${entry.name} has no defined 'buildNotificationsEndpoint'`);
2650
- }
2651
- }
2652
- return entry;
2589
+ const native = factory.createPolicy(name, {
2590
+ createScript: validateImportMapJSON,
2591
+ createScriptURL: validateScriptURL
2592
+ });
2593
+ cachedPolicy = {
2594
+ createScript: (input) => native.createScript(input),
2595
+ createScriptURL: (input) => native.createScriptURL(input)
2596
+ };
2597
+ return cachedPolicy;
2598
+ };
2599
+
2600
+ // src/lib/core/4.config/import-map/replace-in-dom.ts
2601
+ var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts = {}) => {
2602
+ if (opts?.override) {
2603
+ document.head.querySelectorAll(`script[type="${mapType}"]`).forEach((importMap2) => importMap2.remove());
2653
2604
  }
2654
- }
2605
+ const policy = getTrustedTypesPolicy(trustedTypesPolicyName);
2606
+ document.head.appendChild(
2607
+ Object.assign(document.createElement("script"), {
2608
+ type: mapType,
2609
+ text: policy.createScript(JSON.stringify(importMap))
2610
+ })
2611
+ );
2612
+ return Promise.resolve(importMap);
2613
+ };
2655
2614
 
2656
- // src/lib/2.app/flows/dynamic-init/update-cache.ts
2657
- function createUpdateCache(config, ports) {
2658
- return (remoteEntry) => {
2659
- try {
2660
- if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
2661
- addRemoteInfoToStorage(remoteEntry);
2662
- const actions = mergeExternalsIntoStorage(remoteEntry);
2663
- addSharedChunksToStorage(remoteEntry);
2664
- return Promise.resolve({ entry: remoteEntry, actions });
2665
- } catch (error) {
2666
- return Promise.reject(error);
2667
- }
2668
- };
2669
- function removeCachedRemoteEntry(remoteEntry) {
2670
- ports.remoteInfoRepo.remove(remoteEntry.name);
2671
- ports.scopedExternalsRepo.remove(remoteEntry.name);
2672
- ports.sharedExternalsRepo.removeFromAllScopes(remoteEntry.name);
2615
+ // src/lib/core/4.config/import-map/use-default.ts
2616
+ var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
2617
+ loadModuleFn: (url) => {
2618
+ const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);
2619
+ return import(
2620
+ /* @vite-ignore */
2621
+ trusted
2622
+ );
2623
+ },
2624
+ setImportMapFn: replaceInDOM("importmap", trustedTypesPolicyName),
2625
+ reloadBrowserFn: () => {
2626
+ window.location.reload();
2673
2627
  }
2674
- function addRemoteInfoToStorage({ name, url, exposes }) {
2675
- ports.remoteInfoRepo.addOrUpdate(name, {
2676
- scopeUrl: getScope(url),
2677
- exposes: Object.values(exposes ?? []).map((m) => ({
2678
- moduleName: m.key,
2679
- file: m.outFileName
2680
- }))
2681
- });
2628
+ });
2629
+
2630
+ // src/lib/core/4.config/import-map/import-map.config.ts
2631
+ var createImportMapConfig = (o) => {
2632
+ const fallback = useDefaultImportMap(o.trustedTypesPolicyName);
2633
+ return {
2634
+ setImportMapFn: o.setImportMapFn ?? fallback.setImportMapFn,
2635
+ loadModuleFn: o.loadModuleFn ?? fallback.loadModuleFn,
2636
+ reloadBrowserFn: o.reloadBrowserFn ?? fallback.reloadBrowserFn
2637
+ };
2638
+ };
2639
+
2640
+ // src/lib/core/4.config/host/host.config.ts
2641
+ var createHostConfig = (override) => {
2642
+ const extras = override?.manifestIntegrity ? { manifestIntegrity: override.manifestIntegrity } : {};
2643
+ if (!override?.hostRemoteEntry) {
2644
+ return { hostRemoteEntry: false, ...extras };
2682
2645
  }
2683
- function mergeExternalsIntoStorage(remoteEntry) {
2684
- const actions = {};
2685
- remoteEntry.shared.forEach((external) => {
2686
- if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
2687
- const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
2688
- if (config.strict.strictExternalVersion) {
2689
- config.log.error(8, errorMsg);
2690
- throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2691
- }
2692
- config.log.warn(8, errorMsg);
2693
- }
2694
- if (external.singleton) {
2695
- const { action, sharedVersion } = addSharedExternal(remoteEntry.name, external);
2696
- actions[external.packageName] = { action };
2697
- if (action === "skip" && external.shareScope && sharedVersion?.remotes[0]?.file) {
2698
- actions[external.packageName].override = ports.remoteInfoRepo.tryGet(sharedVersion.remotes[0].name).map((remote) => join(remote.scopeUrl, sharedVersion.remotes[0].file)).orThrow(() => {
2699
- config.log.error(
2700
- 8,
2701
- `[${external.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}][${external.packageName}@${external.version}][override] Remote name not found in cache.`
2702
- );
2703
- return new NFError(
2704
- `Could not find override url from remote ${sharedVersion.remotes[0].name}`
2705
- );
2706
- });
2707
- }
2708
- } else {
2709
- addScopedExternal(remoteEntry.name, external);
2710
- }
2711
- });
2712
- return actions;
2646
+ if (typeof override.hostRemoteEntry === "string") {
2647
+ return {
2648
+ hostRemoteEntry: {
2649
+ name: "__NF-HOST__",
2650
+ url: override.hostRemoteEntry
2651
+ },
2652
+ ...extras
2653
+ };
2713
2654
  }
2714
- function addSharedChunksToStorage(remoteEntry) {
2715
- if (!remoteEntry.chunks) return;
2716
- config.log.debug(
2717
- 8,
2718
- `Adding chunks for remote "${remoteEntry.name}", bundles: [${Object.keys(remoteEntry.chunks).join(", ")}]`
2719
- );
2720
- Object.entries(remoteEntry.chunks).forEach(([bundleName, chunks]) => {
2721
- ports.sharedChunksRepo.addOrReplace(remoteEntry.name, bundleName, chunks);
2722
- });
2655
+ return {
2656
+ hostRemoteEntry: {
2657
+ name: "__NF-HOST__",
2658
+ ...override.hostRemoteEntry
2659
+ },
2660
+ ...extras
2661
+ };
2662
+ };
2663
+
2664
+ // src/lib/core/4.config/logging/noop.logger.ts
2665
+ var noopLogger = {
2666
+ debug: () => {
2667
+ },
2668
+ error: () => {
2669
+ },
2670
+ warn: () => {
2723
2671
  }
2724
- function addSharedExternal(remoteName, sharedInfo) {
2725
- const cached = ports.sharedExternalsRepo.tryGet(sharedInfo.packageName, sharedInfo.shareScope).orElse({ dirty: false, versions: [] });
2726
- let action = "skip";
2727
- const tag = sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion);
2728
- const remote = {
2729
- file: sharedInfo.outFileName,
2730
- strictVersion: sharedInfo.strictVersion,
2731
- requiredVersion: sharedInfo.requiredVersion || tag,
2732
- name: remoteName,
2733
- bundle: sharedInfo.bundle,
2734
- cached: false
2735
- };
2736
- const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2737
- if (scopeType === "strict") {
2738
- remote.requiredVersion = tag;
2739
- action = "share";
2740
- }
2741
- const sharedVersion = cached.versions.find((c) => c.action === "share");
2742
- const isCompatible = !sharedVersion || ports.versionCheck.isCompatible(sharedVersion.tag, remote.requiredVersion);
2743
- if (action === "skip" && !isCompatible && remote.strictVersion) {
2744
- action = "scope";
2745
- 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}'`;
2746
- if (config.strict.strictExternalCompatibility) {
2747
- config.log.error(8, errorMsg);
2748
- throw new NFError(`Could not process remote '${remoteName}'`);
2749
- }
2750
- config.log.warn(8, errorMsg);
2751
- }
2752
- const matchingVersion = cached.versions.find((cached2) => cached2.tag === tag);
2753
- if (!!matchingVersion) {
2754
- if (remote.strictVersion && matchingVersion.remotes[0].requiredVersion !== remote.requiredVersion) {
2755
- const errorMsg = `[${remoteName}][${sharedInfo.packageName}@${sharedInfo.version}] Required version '${remote.requiredVersion}' does not match existing '${matchingVersion.remotes[0].requiredVersion}'`;
2756
- if (config.strict.strictExternalCompatibility) {
2757
- config.log.error(8, errorMsg);
2758
- throw new NFError(`Could not process remote '${remoteName}'`);
2672
+ };
2673
+
2674
+ // src/lib/core/2.app/config/log.contract.ts
2675
+ var LogLevel = {
2676
+ debug: 0,
2677
+ warn: 1,
2678
+ error: 2
2679
+ };
2680
+
2681
+ // src/lib/core/4.config/logging/log.handler.ts
2682
+ var createLogHandler = (logger, logLevel) => {
2683
+ const logTypes = Object.keys(LogLevel).filter((key) => isNaN(Number(key)));
2684
+ return logTypes.reduce(
2685
+ (acc, logMessageType) => {
2686
+ return {
2687
+ ...acc,
2688
+ [logMessageType]: (step, message, details) => {
2689
+ if (LogLevel[logMessageType] >= LogLevel[logLevel]) {
2690
+ logger[logMessageType](step, message, details);
2691
+ }
2759
2692
  }
2760
- config.log.warn(8, errorMsg);
2761
- }
2762
- matchingVersion.remotes.push(remote);
2763
- } else {
2764
- if (!sharedVersion) action = "share";
2765
- remote.cached = action !== "skip";
2766
- cached.versions.push({ tag, action, host: false, remotes: [remote] });
2693
+ };
2694
+ },
2695
+ { level: logLevel }
2696
+ );
2697
+ };
2698
+
2699
+ // src/lib/core/4.config/logging/log.config.ts
2700
+ var createLogConfig = ({ logger, logLevel, sse }) => ({
2701
+ log: createLogHandler(logger ?? noopLogger, logLevel ?? "error"),
2702
+ sse: !!sse
2703
+ });
2704
+
2705
+ // src/lib/utils/clone-entry.ts
2706
+ var cloneEntry = (name, raw) => {
2707
+ try {
2708
+ if (typeof structuredClone === "function") {
2709
+ return structuredClone(raw);
2767
2710
  }
2768
- ports.sharedExternalsRepo.addOrUpdate(
2769
- sharedInfo.packageName,
2770
- {
2771
- dirty: cached.dirty,
2772
- versions: cached.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
2773
- },
2774
- sharedInfo.shareScope
2775
- );
2776
- return { action, sharedVersion };
2711
+ } catch {
2777
2712
  }
2778
- function addScopedExternal(remoteName, sharedInfo) {
2779
- ports.scopedExternalsRepo.addExternal(remoteName, sharedInfo.packageName, {
2780
- tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
2781
- file: sharedInfo.outFileName,
2782
- bundle: sharedInfo.bundle
2783
- });
2713
+ try {
2714
+ return JSON.parse(JSON.stringify(raw));
2715
+ } catch {
2784
2716
  }
2785
- }
2717
+ throw new NFError(`Could not clone entry '${String(name)}'`);
2718
+ };
2786
2719
 
2787
- // src/lib/5.di/flows/dynamic-init.factory.ts
2788
- var createDynamicInitDrivers = ({
2789
- config,
2790
- adapters
2791
- }) => ({
2792
- getRemoteEntry: createGetRemoteEntry(config, adapters),
2793
- updateCache: createUpdateCache(config, adapters),
2794
- convertToImportMap: createConvertToImportMap(config, adapters),
2795
- commitChanges: createCommitChanges(config, adapters)
2720
+ // src/lib/core/4.config/storage/global-this.storage.ts
2721
+ var globalThisStorageEntry = (namespace) => (key, initialValue) => {
2722
+ if (!globalThis[namespace]) {
2723
+ globalThis[namespace] = {};
2724
+ }
2725
+ const storage = globalThis[namespace];
2726
+ if (!storage[key]) storage[key] = initialValue;
2727
+ const entry = {
2728
+ get() {
2729
+ return cloneEntry(key, storage[key]);
2730
+ },
2731
+ set(value) {
2732
+ storage[key] = cloneEntry(key, value);
2733
+ return entry;
2734
+ },
2735
+ clear() {
2736
+ storage[key] = cloneEntry(key, initialValue);
2737
+ return this;
2738
+ }
2739
+ };
2740
+ return entry;
2741
+ };
2742
+
2743
+ // src/lib/core/4.config/storage/storage.config.ts
2744
+ var createStorageConfig = (override) => ({
2745
+ storage: override.storage ? override.storage(override.storageNamespace ?? "__NATIVE_FEDERATION__") : globalThisStorageEntry(override.storageNamespace ?? "__NATIVE_FEDERATION__"),
2746
+ clearStorage: override.clearStorage ?? false
2796
2747
  });
2797
- var DYNAMIC_INIT_FLOW_FACTORY = ({
2798
- config,
2799
- adapters
2800
- }) => {
2801
- const flow = createDynamicInitDrivers({ config, adapters });
2748
+
2749
+ // src/lib/core/4.config/mode/default.profile.ts
2750
+ var defaultProfile = {
2751
+ latestSharedExternal: false,
2752
+ overrideCachedRemotes: "init-only",
2753
+ overrideCachedRemotesIfURLMatches: false
2754
+ };
2755
+
2756
+ // src/lib/core/4.config/mode/mode.config.ts
2757
+ var createModeConfig = (override) => {
2758
+ const strictnessConfig = typeof override.strict === "boolean" ? {
2759
+ strictRemoteEntry: override.strict,
2760
+ strictExternalCompatibility: override.strict,
2761
+ strictExternalSameVersionCompatibility: override.strict,
2762
+ strictExternalVersion: override.strict,
2763
+ strictImportMap: override.strict
2764
+ } : {
2765
+ strictRemoteEntry: override.strict?.strictRemoteEntry ?? false,
2766
+ strictExternalCompatibility: override.strict?.strictExternalCompatibility ?? false,
2767
+ strictExternalSameVersionCompatibility: override.strict?.strictExternalSameVersionCompatibility ?? false,
2768
+ strictExternalVersion: override.strict?.strictExternalVersion ?? false,
2769
+ strictImportMap: override.strict?.strictImportMap ?? false
2770
+ };
2802
2771
  return {
2803
- flow,
2804
- adapters,
2805
- config
2772
+ strict: strictnessConfig,
2773
+ profile: { ...defaultProfile, ...override.profile ?? {} }
2806
2774
  };
2807
2775
  };
2808
- var createDynamicInitFlow = ({
2809
- flow,
2776
+
2777
+ // src/lib/core/5.di/config.factory.ts
2778
+ var createConfigHandlers = (overrides) => ({
2779
+ ...createImportMapConfig(overrides),
2780
+ ...createHostConfig(overrides),
2781
+ ...createLogConfig(overrides),
2782
+ ...createStorageConfig(overrides),
2783
+ ...createModeConfig(overrides)
2784
+ });
2785
+
2786
+ // src/lib/core/5.di/federation-result.factory.ts
2787
+ var createStateDump = (config, adapters) => (msg) => config.log.debug(0, msg, {
2788
+ remotes: { ...adapters.remoteInfoRepo.getAll() },
2789
+ "shared-externals": adapters.sharedExternalsRepo.getScopes({ includeGlobal: true }).reduce(
2790
+ (acc, scope) => ({ ...acc, [scope]: adapters.sharedExternalsRepo.getFromScope(scope) }),
2791
+ {}
2792
+ ),
2793
+ "scoped-externals": adapters.scopedExternalsRepo.getAll()
2794
+ });
2795
+ var createFederationResult = ({
2796
+ config,
2810
2797
  adapters,
2811
- config
2798
+ loadRemoteModule,
2799
+ initRemoteEntryFlow,
2800
+ afterInitRemoteEntry
2812
2801
  }) => {
2813
- const processDynamicRemoteEntry = async (remoteEntry) => {
2814
- return flow.updateCache(remoteEntry).then(flow.convertToImportMap).then(flow.commitChanges);
2802
+ const stateDump = createStateDump(config, adapters);
2803
+ const initRemoteEntry = async (remoteEntryUrl, remote) => {
2804
+ const remoteName = typeof remote === "string" ? remote : remote?.name;
2805
+ return initRemoteEntryFlow(remoteEntryUrl, remote).catch((e) => {
2806
+ stateDump(`[dynamic-init][${remoteName ?? remoteEntryUrl}] STATE DUMP`);
2807
+ if (config.strict.strictRemoteEntry) return Promise.reject(e);
2808
+ else console.warn("Failed to initialize remote entry, continuing anyway.");
2809
+ return Promise.resolve();
2810
+ }).then(() => afterInitRemoteEntry?.()).then(() => result);
2815
2811
  };
2816
- const initRemoteEntry = (remoteEntryUrl, remote) => flow.getRemoteEntry(remoteEntryUrl, remote).then((entry) => entry.map(processDynamicRemoteEntry).orElse(Promise.resolve())).then(() => ({
2812
+ const result = {
2817
2813
  config,
2818
2814
  adapters,
2815
+ loadRemoteModule,
2816
+ load: loadRemoteModule,
2817
+ as: () => ({
2818
+ loadRemoteModule,
2819
+ load: loadRemoteModule
2820
+ }),
2819
2821
  initRemoteEntry
2820
- }));
2821
- return initRemoteEntry;
2822
+ };
2823
+ return result;
2822
2824
  };
2823
2825
 
2824
- // src/lib/init-federation.ts
2826
+ // src/lib/core/init-federation.ts
2825
2827
  var initFederation = (remotesOrManifestUrl, options = {}) => {
2826
2828
  const { adapters, config } = createDriving(createConfigHandlers(options));
2827
- const stateDump = (msg) => config.log.debug(0, msg, {
2828
- remotes: { ...adapters.remoteInfoRepo.getAll() },
2829
- "shared-externals": adapters.sharedExternalsRepo.getScopes({ includeGlobal: true }).reduce(
2830
- (acc, scope) => ({ ...acc, [scope]: adapters.sharedExternalsRepo.getFromScope(scope) }),
2831
- {}
2832
- ),
2833
- "scoped-externals": adapters.scopedExternalsRepo.getAll()
2834
- });
2835
- const initFlow = createInitFlow(INIT_FLOW_FACTORY({ adapters, config }));
2836
- const dynamicInitFlow = createDynamicInitFlow(DYNAMIC_INIT_FLOW_FACTORY({ config, adapters }));
2837
- return initFlow(remotesOrManifestUrl).then(({ loadRemoteModule }) => {
2838
- const output = {
2839
- config,
2840
- adapters,
2841
- loadRemoteModule,
2842
- as: () => ({
2843
- loadRemoteModule,
2844
- load: loadRemoteModule
2845
- }),
2846
- load: loadRemoteModule
2847
- };
2848
- const initRemoteEntry = async (remoteEntryUrl, remote) => {
2849
- const remoteName = typeof remote === "string" ? remote : remote?.name;
2850
- return dynamicInitFlow(remoteEntryUrl, remote).catch((e) => {
2851
- stateDump(`[dynamic-init][${remoteName ?? remoteEntryUrl}] STATE DUMP`);
2852
- if (config.strict.strictRemoteEntry) return Promise.reject(e);
2853
- else console.warn("Failed to initialize remote entry, continuing anyway.");
2854
- return Promise.resolve();
2855
- }).then(() => ({
2856
- ...output,
2857
- initRemoteEntry
2858
- }));
2859
- };
2860
- return {
2861
- ...output,
2862
- initRemoteEntry
2863
- };
2864
- }).catch((e) => {
2865
- stateDump(`[init] STATE DUMP`);
2829
+ const factory = INIT_FLOW_FACTORY({ adapters, config });
2830
+ const initFlow = createInitFlow(factory);
2831
+ const initRemoteEntryFlow = createInitRemoteEntryFlow(factory);
2832
+ return initFlow(remotesOrManifestUrl).then(
2833
+ ({ loadRemoteModule }) => createFederationResult({ config, adapters, loadRemoteModule, initRemoteEntryFlow })
2834
+ ).catch((e) => {
2835
+ createStateDump(config, adapters)(`[init] STATE DUMP`);
2866
2836
  return Promise.reject(e);
2867
2837
  });
2868
2838
  };
2869
2839
  export {
2870
- DYNAMIC_INIT_FLOW_FACTORY,
2871
2840
  INIT_FLOW_FACTORY,
2872
2841
  NFError,
2873
2842
  createConfigHandlers,
2874
2843
  createDriving,
2875
- createDynamicInitDrivers,
2876
- createDynamicInitFlow,
2844
+ createFederationResult,
2877
2845
  createInitDrivers,
2878
2846
  createInitFlow,
2847
+ createInitRemoteEntryFlow,
2848
+ createStateDump,
2879
2849
  initFederation
2880
2850
  };
2881
2851
  //# sourceMappingURL=native-federation-orchestrator.mjs.map