@softarc/native-federation-orchestrator 4.2.2 → 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 (156) hide show
  1. package/fesm2022/@softarc/native-federation-orchestrator.mjs +884 -917
  2. package/fesm2022/@softarc/native-federation-orchestrator.mjs.map +4 -4
  3. package/fesm2022/audit.mjs +2 -2
  4. package/fesm2022/audit.mjs.map +2 -2
  5. package/fesm2022/node.mjs +424 -444
  6. package/fesm2022/node.mjs.map +4 -4
  7. package/fesm2022/options.mjs +13 -13
  8. package/fesm2022/options.mjs.map +3 -3
  9. package/fesm2022/registry.mjs +2 -2
  10. package/fesm2022/registry.mjs.map +3 -3
  11. package/fesm2022/sdk.mjs +2 -2
  12. package/fesm2022/sdk.mjs.map +2 -2
  13. package/init-registry.mjs +1 -1
  14. package/node-loader/loader.mjs +1 -1
  15. package/node-loader/loader.mjs.map +1 -1
  16. package/package.json +2 -5
  17. package/quickstart.mjs +13 -13
  18. package/types/lib/audit/externals-audit.d.ts +4 -0
  19. package/types/lib/{2.app/driver-ports/audit → audit}/for-auditing-externals.port.d.ts +1 -1
  20. package/types/lib/audit.index.d.ts +2 -2
  21. package/types/lib/{2.app → core/2.app}/driver-ports/init/drivers.contract.d.ts +6 -0
  22. package/types/lib/core/2.app/driver-ports/init/flow.contract.d.ts +14 -0
  23. package/types/lib/{2.app/driver-ports/dynamic-init → core/2.app/driver-ports/init}/for-getting-remote-entry.port.d.ts +1 -1
  24. package/types/lib/{2.app → core/2.app}/driver-ports/init/index.d.ts +3 -0
  25. package/types/lib/{2.app → core/2.app}/driving-ports/for-remote-info-storage.port.d.ts +1 -1
  26. package/types/lib/{2.app → core/2.app}/driving-ports/for-scoped-externals-storage.port.d.ts +1 -1
  27. package/types/lib/{2.app → core/2.app}/driving-ports/for-shared-chunks-storage.port.d.ts +1 -1
  28. package/types/lib/{2.app → core/2.app}/driving-ports/for-shared-externals-storage.port.d.ts +1 -1
  29. package/types/lib/core/2.app/flows/init-remote-entry.flow.d.ts +4 -0
  30. package/types/lib/core/2.app/flows/init.flow.d.ts +4 -0
  31. package/types/lib/core/2.app/steps/commit-changes.d.ts +4 -0
  32. package/types/lib/core/2.app/steps/convert-to-import-map.d.ts +4 -0
  33. package/types/lib/core/2.app/steps/determine-shared-externals.d.ts +5 -0
  34. package/types/lib/core/2.app/steps/expose-module-loader.d.ts +4 -0
  35. package/types/lib/core/2.app/steps/generate-import-map.d.ts +5 -0
  36. package/types/lib/core/2.app/steps/get-remote-entries.d.ts +6 -0
  37. package/types/lib/core/2.app/steps/get-remote-entry.d.ts +5 -0
  38. package/types/lib/core/2.app/steps/process-remote-entries.d.ts +5 -0
  39. package/types/lib/core/2.app/steps/store-remote-entry.d.ts +23 -0
  40. package/types/lib/core/2.app/steps/update-cache.d.ts +5 -0
  41. package/types/lib/{3.adapters → core/3.adapters}/browser/sse-handler.d.ts +1 -1
  42. package/types/lib/core/5.di/federation-result.factory.d.ts +12 -0
  43. package/types/lib/core/5.di/init.factory.d.ts +12 -0
  44. package/types/lib/{init-federation.contract.d.ts → core/init-federation.contract.d.ts} +1 -1
  45. package/types/lib/index.d.ts +10 -8
  46. package/types/lib/{3.adapters/node → node/adapters}/fs-manifest-provider.d.ts +1 -1
  47. package/types/lib/{3.adapters/node → node/adapters}/fs-remote-entry-provider.d.ts +1 -1
  48. package/types/lib/{3.adapters/node → node/adapters}/node-loader.client.d.ts +1 -1
  49. package/types/lib/node/adapters/noop-sse.d.ts +3 -0
  50. package/types/lib/{init-federation.node.d.ts → node/init-federation.node.d.ts} +5 -5
  51. package/types/lib/{4.config/import-map → node}/resolve-host-instances.d.ts +3 -3
  52. package/types/lib/{4.config/import-map → node}/use-node.d.ts +2 -2
  53. package/types/lib/{utils/node → node/utils}/to-url.d.ts +1 -1
  54. package/types/lib/node.index.d.ts +5 -5
  55. package/types/lib/options.index.d.ts +5 -5
  56. package/types/lib/registry/for-managing-events.port.d.ts +2 -0
  57. package/types/lib/registry/setup-registry.d.ts +3 -0
  58. package/types/lib/registry.index.d.ts +5 -4
  59. package/types/lib/sdk.index.d.ts +4 -5
  60. package/types/lib/testing/handlers/log.handler.d.ts +3 -0
  61. package/types/lib/utils/clone-entry.d.ts +1 -1
  62. package/types/{init-registry.d.ts → scripts/init-registry.d.ts} +1 -1
  63. package/types/lib/1.domain/registry/index.d.ts +0 -2
  64. package/types/lib/2.app/driver-ports/audit/index.d.ts +0 -1
  65. package/types/lib/2.app/driver-ports/dynamic-init/drivers.contract.d.ts +0 -13
  66. package/types/lib/2.app/driver-ports/dynamic-init/flow.contract.d.ts +0 -8
  67. package/types/lib/2.app/driver-ports/dynamic-init/index.d.ts +0 -5
  68. package/types/lib/2.app/driver-ports/init/flow.contract.d.ts +0 -6
  69. package/types/lib/2.app/driver-ports/registry/for-managing-events.port.d.ts +0 -2
  70. package/types/lib/2.app/flows/audit/externals-audit.d.ts +0 -4
  71. package/types/lib/2.app/flows/dynamic-init/convert-to-import-map.d.ts +0 -4
  72. package/types/lib/2.app/flows/dynamic-init/get-remote-entry.d.ts +0 -5
  73. package/types/lib/2.app/flows/dynamic-init/update-cache.d.ts +0 -5
  74. package/types/lib/2.app/flows/init/commit-changes.d.ts +0 -4
  75. package/types/lib/2.app/flows/init/determine-shared-externals.d.ts +0 -5
  76. package/types/lib/2.app/flows/init/expose-module-loader.d.ts +0 -4
  77. package/types/lib/2.app/flows/init/generate-import-map.d.ts +0 -5
  78. package/types/lib/2.app/flows/init/get-remote-entries.d.ts +0 -6
  79. package/types/lib/2.app/flows/init/process-remote-entries.d.ts +0 -5
  80. package/types/lib/2.app/flows/registry/setup-registry.d.ts +0 -3
  81. package/types/lib/3.adapters/node/noop-sse.d.ts +0 -3
  82. package/types/lib/5.di/flows/dynamic-init.factory.d.ts +0 -14
  83. package/types/lib/5.di/flows/init.factory.d.ts +0 -14
  84. package/types/lib/6.mocks/handlers/log.handler.d.ts +0 -2
  85. /package/types/lib/{1.domain → core/1.domain}/externals/chunks.contract.d.ts +0 -0
  86. /package/types/lib/{1.domain → core/1.domain}/externals/external.contract.d.ts +0 -0
  87. /package/types/lib/{1.domain → core/1.domain}/externals/version.contract.d.ts +0 -0
  88. /package/types/lib/{1.domain → core/1.domain}/import-map/import-map.contract.d.ts +0 -0
  89. /package/types/lib/{1.domain → core/1.domain}/index.d.ts +0 -0
  90. /package/types/lib/{1.domain → core/1.domain}/remote/remote-info.contract.d.ts +0 -0
  91. /package/types/lib/{1.domain → core/1.domain}/remote/remote-module.contract.d.ts +0 -0
  92. /package/types/lib/{1.domain → core/1.domain}/remote-entry/manifest.contract.d.ts +0 -0
  93. /package/types/lib/{1.domain → core/1.domain}/remote-entry/remote-entry.contract.d.ts +0 -0
  94. /package/types/lib/{2.app → core/2.app}/config/config.contract.d.ts +0 -0
  95. /package/types/lib/{2.app → core/2.app}/config/host.contract.d.ts +0 -0
  96. /package/types/lib/{2.app → core/2.app}/config/import-map.contract.d.ts +0 -0
  97. /package/types/lib/{2.app → core/2.app}/config/index.d.ts +0 -0
  98. /package/types/lib/{2.app → core/2.app}/config/log.contract.d.ts +0 -0
  99. /package/types/lib/{2.app → core/2.app}/config/mode.contract.d.ts +0 -0
  100. /package/types/lib/{2.app → core/2.app}/config/storage.contract.d.ts +0 -0
  101. /package/types/lib/{2.app → core/2.app}/driver-ports/flow-factory.contract.d.ts +0 -0
  102. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-committing-changes.port.d.ts +0 -0
  103. /package/types/lib/{2.app/driver-ports/dynamic-init → core/2.app/driver-ports/init}/for-converting-to-import-map.d.ts +0 -0
  104. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-determining-shared-externals.port.d.ts +0 -0
  105. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-exposing-module-loader.port.d.ts +0 -0
  106. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-generating-import-map.d.ts +0 -0
  107. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-getting-remote-entries.port.d.ts +0 -0
  108. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-processing-remote-entries.port.d.ts +0 -0
  109. /package/types/lib/{2.app/driver-ports/dynamic-init → core/2.app/driver-ports/init}/for-updating-cache.d.ts +0 -0
  110. /package/types/lib/{2.app → core/2.app}/driving-ports/driving.contract.d.ts +0 -0
  111. /package/types/lib/{2.app → core/2.app}/driving-ports/for-browser-tasks.d.ts +0 -0
  112. /package/types/lib/{2.app → core/2.app}/driving-ports/for-providing-manifest.port.d.ts +0 -0
  113. /package/types/lib/{2.app → core/2.app}/driving-ports/for-providing-remote-entries.port.d.ts +0 -0
  114. /package/types/lib/{2.app → core/2.app}/driving-ports/for-sse.port.d.ts +0 -0
  115. /package/types/lib/{2.app → core/2.app}/driving-ports/for-version-checking.port.d.ts +0 -0
  116. /package/types/lib/{2.app → core/2.app}/driving-ports/index.d.ts +0 -0
  117. /package/types/lib/{3.adapters → core/3.adapters}/browser/browser.d.ts +0 -0
  118. /package/types/lib/{3.adapters → core/3.adapters}/checks/version.check.d.ts +0 -0
  119. /package/types/lib/{3.adapters → core/3.adapters}/http/manifest-provider.d.ts +0 -0
  120. /package/types/lib/{3.adapters → core/3.adapters}/http/remote-entry-provider.d.ts +0 -0
  121. /package/types/lib/{3.adapters → core/3.adapters}/storage/chunk.repository.d.ts +0 -0
  122. /package/types/lib/{3.adapters → core/3.adapters}/storage/remote-info.repository.d.ts +0 -0
  123. /package/types/lib/{3.adapters → core/3.adapters}/storage/scoped-externals.repository.d.ts +0 -0
  124. /package/types/lib/{3.adapters → core/3.adapters}/storage/shared-externals.repository.d.ts +0 -0
  125. /package/types/lib/{4.config → core/4.config}/host/host.config.d.ts +0 -0
  126. /package/types/lib/{4.config → core/4.config}/import-map/import-map.config.d.ts +0 -0
  127. /package/types/lib/{4.config → core/4.config}/import-map/index.d.ts +0 -0
  128. /package/types/lib/{4.config → core/4.config}/import-map/replace-in-dom.d.ts +0 -0
  129. /package/types/lib/{4.config → core/4.config}/import-map/trusted-types.d.ts +0 -0
  130. /package/types/lib/{4.config → core/4.config}/import-map/use-default.d.ts +0 -0
  131. /package/types/lib/{4.config → core/4.config}/import-map/use-import-shim.d.ts +0 -0
  132. /package/types/lib/{4.config → core/4.config}/logging/console.logger.d.ts +0 -0
  133. /package/types/lib/{4.config → core/4.config}/logging/index.d.ts +0 -0
  134. /package/types/lib/{4.config → core/4.config}/logging/log.config.d.ts +0 -0
  135. /package/types/lib/{4.config → core/4.config}/logging/log.handler.d.ts +0 -0
  136. /package/types/lib/{4.config → core/4.config}/logging/noop.logger.d.ts +0 -0
  137. /package/types/lib/{4.config → core/4.config}/mode/caching.profile.d.ts +0 -0
  138. /package/types/lib/{4.config → core/4.config}/mode/default.profile.d.ts +0 -0
  139. /package/types/lib/{4.config → core/4.config}/mode/index.d.ts +0 -0
  140. /package/types/lib/{4.config → core/4.config}/mode/mode.config.d.ts +0 -0
  141. /package/types/lib/{4.config → core/4.config}/storage/global-this.storage.d.ts +0 -0
  142. /package/types/lib/{4.config → core/4.config}/storage/index.d.ts +0 -0
  143. /package/types/lib/{4.config → core/4.config}/storage/local.storage.d.ts +0 -0
  144. /package/types/lib/{4.config → core/4.config}/storage/session.storage.d.ts +0 -0
  145. /package/types/lib/{4.config → core/4.config}/storage/storage.config.d.ts +0 -0
  146. /package/types/lib/{5.di → core/5.di}/config.factory.d.ts +0 -0
  147. /package/types/lib/{5.di → core/5.di}/driving.factory.d.ts +0 -0
  148. /package/types/lib/{init-federation.d.ts → core/init-federation.d.ts} +0 -0
  149. /package/types/lib/{native-federation.error.d.ts → core/native-federation.error.d.ts} +0 -0
  150. /package/types/lib/{3.adapters/node → node/adapters}/loader-url.d.ts +0 -0
  151. /package/types/lib/{utils/node → node/utils}/read-source.d.ts +0 -0
  152. /package/types/lib/{1.domain/registry → registry}/event-registry.contract.d.ts +0 -0
  153. /package/types/lib/{1.domain/registry → registry}/event.contract.d.ts +0 -0
  154. /package/types/lib/{2.app/config → registry}/registry.contract.d.ts +0 -0
  155. /package/types/{node-loader.d.ts → scripts/node-loader.d.ts} +0 -0
  156. /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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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 {
@@ -1031,9 +1044,9 @@ var require_range = __commonJS({
1031
1044
  debug("no pr");
1032
1045
  if (M === "0") {
1033
1046
  if (m === "0") {
1034
- ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
1047
+ ret = `>=${M}.${m}.${p} <${M}.${m}.${+p + 1}-0`;
1035
1048
  } else {
1036
- ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
1049
+ ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
1037
1050
  }
1038
1051
  } else {
1039
1052
  ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
@@ -1163,9 +1176,9 @@ var require_range = __commonJS({
1163
1176
  }
1164
1177
  });
1165
1178
 
1166
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/satisfies.js
1179
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/satisfies.js
1167
1180
  var require_satisfies = __commonJS({
1168
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/satisfies.js"(exports, module) {
1181
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/functions/satisfies.js"(exports, module) {
1169
1182
  "use strict";
1170
1183
  var Range = require_range();
1171
1184
  var satisfies = (version, range, options) => {
@@ -1180,9 +1193,9 @@ var require_satisfies = __commonJS({
1180
1193
  }
1181
1194
  });
1182
1195
 
1183
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/ranges/min-version.js
1196
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/ranges/min-version.js
1184
1197
  var require_min_version = __commonJS({
1185
- "node_modules/.pnpm/semver@7.8.1/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) {
1186
1199
  "use strict";
1187
1200
  var SemVer = require_semver();
1188
1201
  var Range = require_range();
@@ -1239,9 +1252,9 @@ var require_min_version = __commonJS({
1239
1252
  }
1240
1253
  });
1241
1254
 
1242
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/ranges/valid.js
1255
+ // node_modules/.pnpm/semver@7.8.3/node_modules/semver/ranges/valid.js
1243
1256
  var require_valid2 = __commonJS({
1244
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/ranges/valid.js"(exports, module) {
1257
+ "node_modules/.pnpm/semver@7.8.3/node_modules/semver/ranges/valid.js"(exports, module) {
1245
1258
  "use strict";
1246
1259
  var Range = require_range();
1247
1260
  var validRange = (range, options) => {
@@ -1255,7 +1268,28 @@ var require_valid2 = __commonJS({
1255
1268
  }
1256
1269
  });
1257
1270
 
1258
- // 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
1259
1293
  var NFError = class extends Error {
1260
1294
  constructor(message, cause) {
1261
1295
  super(message, cause);
@@ -1279,7 +1313,7 @@ function getScope(path) {
1279
1313
  return `${parts.join("/")}/`;
1280
1314
  }
1281
1315
 
1282
- // src/lib/2.app/flows/init/get-remote-entries.ts
1316
+ // src/lib/core/2.app/steps/get-remote-entries.ts
1283
1317
  function createGetRemoteEntries(config, ports) {
1284
1318
  return (remotesOrManifestUrl = {}) => {
1285
1319
  const manifestPromise = config.manifestIntegrity ? ports.manifestProvider.provide(remotesOrManifestUrl, {
@@ -1373,20 +1407,13 @@ function createGetRemoteEntries(config, ports) {
1373
1407
  }
1374
1408
  }
1375
1409
 
1376
- // src/lib/2.app/flows/init/process-remote-entries.ts
1377
- function createProcessRemoteEntries(config, ports) {
1378
- return (remoteEntries) => {
1379
- try {
1380
- remoteEntries.forEach((remoteEntry) => {
1381
- if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
1382
- addRemoteInfoToStorage(remoteEntry);
1383
- addExternalsToStorage(remoteEntry);
1384
- addSharedChunksToStorage(remoteEntry);
1385
- });
1386
- return Promise.resolve(remoteEntries);
1387
- } catch (e) {
1388
- return Promise.reject(e);
1389
- }
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);
1390
1417
  };
1391
1418
  function removeCachedRemoteEntry(remoteEntry) {
1392
1419
  ports.remoteInfoRepo.remove(remoteEntry.name);
@@ -1403,92 +1430,128 @@ function createProcessRemoteEntries(config, ports) {
1403
1430
  ...integrity ? { integrity } : {}
1404
1431
  });
1405
1432
  }
1406
- function addExternalsToStorage(remoteEntry) {
1433
+ function addExternalsToStorage(remoteEntry, onSharedExternal) {
1407
1434
  remoteEntry.shared.forEach((external) => {
1408
- if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
1409
- const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
1410
- if (config.strict.strictExternalVersion) {
1411
- config.log.error(2, errorMsg);
1412
- throw new NFError(`Could not process remote '${remoteEntry.name}'`);
1413
- }
1414
- config.log.warn(2, errorMsg);
1415
- }
1435
+ validateExternalVersion(remoteEntry, external);
1416
1436
  if (external.singleton) {
1417
- addSharedExternal(remoteEntry.name, external, remoteEntry);
1437
+ onSharedExternal(remoteEntry, external, sharedExternalContext(remoteEntry, external));
1418
1438
  } else {
1419
- addScopedExternal(remoteEntry.name, external);
1439
+ addScopedExternal(remoteEntry, external);
1420
1440
  }
1421
1441
  });
1422
1442
  }
1423
1443
  function addSharedChunksToStorage(remoteEntry) {
1424
1444
  if (!remoteEntry.chunks) return;
1425
1445
  config.log.debug(
1426
- 2,
1446
+ logStep,
1427
1447
  `Adding chunks for remote "${remoteEntry.name}", bundles: [${Object.keys(remoteEntry.chunks).join(", ")}]`
1428
1448
  );
1429
1449
  Object.entries(remoteEntry.chunks).forEach(([bundleName, chunks]) => {
1430
1450
  ports.sharedChunksRepo.addOrReplace(remoteEntry.name, bundleName, chunks);
1431
1451
  });
1432
1452
  }
1433
- function addSharedExternal(remoteName, sharedInfo, remoteEntry) {
1434
- 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) {
1435
1471
  const tag = sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion);
1472
+ const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
1436
1473
  const remote = {
1437
1474
  file: sharedInfo.outFileName,
1438
- name: remoteName,
1475
+ name: remoteEntry.name,
1439
1476
  bundle: sharedInfo.bundle,
1440
1477
  strictVersion: sharedInfo.strictVersion,
1441
1478
  cached: false,
1442
- requiredVersion: sharedInfo.requiredVersion || tag
1479
+ requiredVersion: scopeType === "strict" ? tag : sharedInfo.requiredVersion || tag
1443
1480
  };
1444
- const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
1445
- if (scopeType === "strict") {
1446
- action = "share";
1447
- remote.requiredVersion = tag;
1448
- }
1449
1481
  const cached = ports.sharedExternalsRepo.tryGet(sharedInfo.packageName, sharedInfo.shareScope).orElse({ dirty: false, versions: [] });
1450
- const matchingVersion = cached.versions.find((version) => version.tag === sharedInfo.version);
1451
- let dirty = cached.dirty;
1452
- if (!!matchingVersion) {
1453
- if (remote.strictVersion && matchingVersion.remotes[0].requiredVersion !== remote.requiredVersion) {
1454
- 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}'`;
1455
1491
  if (config.strict.strictExternalSameVersionCompatibility) {
1456
- config.log.error(2, errorMsg);
1492
+ config.log.error(logStep, errorMsg);
1457
1493
  throw new NFError(`Could not process remote '${remoteEntry.name}'`);
1458
1494
  }
1459
- 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
+ );
1460
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);
1461
1533
  if (!matchingVersion.host && !!remoteEntry?.host) {
1462
1534
  matchingVersion.host = true;
1463
1535
  matchingVersion.remotes.unshift(remote);
1464
1536
  } else matchingVersion.remotes.push(remote);
1465
1537
  } else {
1466
- if (scopeType !== "strict") dirty = true;
1467
- 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
+ });
1468
1545
  }
1469
- ports.sharedExternalsRepo.addOrUpdate(
1470
- sharedInfo.packageName,
1471
- {
1472
- dirty,
1473
- versions: cached.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
1474
- },
1475
- sharedInfo.shareScope
1476
- );
1477
- }
1478
- function addScopedExternal(scope, sharedInfo) {
1479
- ports.scopedExternalsRepo.addExternal(scope, sharedInfo.packageName, {
1480
- tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
1481
- file: sharedInfo.outFileName,
1482
- bundle: sharedInfo.bundle
1483
- });
1546
+ commit();
1484
1547
  }
1485
1548
  }
1486
1549
 
1487
- // src/lib/1.domain/externals/external.contract.ts
1550
+ // src/lib/core/1.domain/externals/external.contract.ts
1488
1551
  var GLOBAL_SCOPE = "__GLOBAL__";
1489
1552
  var STRICT_SCOPE = "strict";
1490
1553
 
1491
- // src/lib/2.app/flows/init/determine-shared-externals.ts
1554
+ // src/lib/core/2.app/steps/determine-shared-externals.ts
1492
1555
  function createDetermineSharedExternals(config, ports) {
1493
1556
  return () => {
1494
1557
  for (const shareScope of ports.sharedExternalsRepo.getScopes()) {
@@ -1565,7 +1628,7 @@ function createDetermineSharedExternals(config, ports) {
1565
1628
  }
1566
1629
  }
1567
1630
 
1568
- // 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
1569
1632
  var BuildNotificationType;
1570
1633
  (function(BuildNotificationType2) {
1571
1634
  BuildNotificationType2["COMPLETED"] = "federation-rebuild-complete";
@@ -1573,7 +1636,7 @@ var BuildNotificationType;
1573
1636
  BuildNotificationType2["CANCELLED"] = "federation-rebuild-cancelled";
1574
1637
  })(BuildNotificationType || (BuildNotificationType = {}));
1575
1638
 
1576
- // 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
1577
1640
  var CHUNK_PREFIX = "@nf-internal";
1578
1641
  function toChunkImport(fileName) {
1579
1642
  if (fileName.startsWith("./")) {
@@ -1583,7 +1646,7 @@ function toChunkImport(fileName) {
1583
1646
  return CHUNK_PREFIX + "/" + packageName;
1584
1647
  }
1585
1648
 
1586
- // src/lib/2.app/flows/init/generate-import-map.ts
1649
+ // src/lib/core/2.app/steps/generate-import-map.ts
1587
1650
  function createGenerateImportMap(config, ports) {
1588
1651
  return () => {
1589
1652
  const importMap = { imports: {} };
@@ -1608,7 +1671,12 @@ function createGenerateImportMap(config, ports) {
1608
1671
  });
1609
1672
  addToScope(importMap, remote.scopeUrl, createScopeModules(externals, remote.scopeUrl));
1610
1673
  for (const version of Object.values(externals)) {
1611
- 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
+ );
1612
1680
  }
1613
1681
  Object.values(externals).filter((e) => !!e.bundle).forEach((e) => registerBundleChunks(chunkBundles, remoteName, e.bundle));
1614
1682
  }
@@ -1817,7 +1885,7 @@ function createGenerateImportMap(config, ports) {
1817
1885
  }
1818
1886
  }
1819
1887
 
1820
- // src/lib/2.app/flows/init/commit-changes.ts
1888
+ // src/lib/core/2.app/steps/commit-changes.ts
1821
1889
  function createCommitChanges(config, ports) {
1822
1890
  return (importMap) => Promise.resolve(importMap).then(addToBrowser).then(persistRepositoryChanges);
1823
1891
  function addToBrowser(importMap) {
@@ -1834,7 +1902,7 @@ function createCommitChanges(config, ports) {
1834
1902
  }
1835
1903
  }
1836
1904
 
1837
- // src/lib/2.app/flows/init/expose-module-loader.ts
1905
+ // src/lib/core/2.app/steps/expose-module-loader.ts
1838
1906
  function createExposeModuleLoader(config, ports) {
1839
1907
  const loadRemoteModule = (remoteName, exposedModule) => {
1840
1908
  try {
@@ -1860,167 +1928,6 @@ function createExposeModuleLoader(config, ports) {
1860
1928
  return () => Promise.resolve(loadRemoteModule);
1861
1929
  }
1862
1930
 
1863
- // src/lib/5.di/flows/init.factory.ts
1864
- var createInitDrivers = ({
1865
- config,
1866
- adapters
1867
- }) => ({
1868
- getRemoteEntries: createGetRemoteEntries(config, adapters),
1869
- processRemoteEntries: createProcessRemoteEntries(config, adapters),
1870
- determineSharedExternals: createDetermineSharedExternals(config, adapters),
1871
- generateImportMap: createGenerateImportMap(config, adapters),
1872
- commitChanges: createCommitChanges(config, adapters),
1873
- exposeModuleLoader: createExposeModuleLoader(config, adapters)
1874
- });
1875
- var INIT_FLOW_FACTORY = ({
1876
- config,
1877
- adapters
1878
- }) => {
1879
- const flow = createInitDrivers({ config, adapters });
1880
- return {
1881
- flow,
1882
- adapters,
1883
- config
1884
- };
1885
- };
1886
- var createInitFlow = ({
1887
- flow,
1888
- adapters,
1889
- config
1890
- }) => {
1891
- return (remotesOrManifestUrl) => flow.getRemoteEntries(remotesOrManifestUrl).then(flow.processRemoteEntries).then(flow.determineSharedExternals).then(flow.generateImportMap).then(flow.commitChanges).then(flow.exposeModuleLoader).then((loadRemoteModule) => ({
1892
- config,
1893
- adapters,
1894
- loadRemoteModule
1895
- }));
1896
- };
1897
-
1898
- // src/lib/3.adapters/browser/browser.ts
1899
- var createBrowser = (config) => {
1900
- return {
1901
- setImportMapFn: config.setImportMapFn,
1902
- importModule: config.loadModuleFn
1903
- };
1904
- };
1905
-
1906
- // src/lib/3.adapters/checks/version.check.ts
1907
- var import_valid = __toESM(require_valid());
1908
- var import_satisfies = __toESM(require_satisfies());
1909
- var import_compare = __toESM(require_compare());
1910
- var import_min_version = __toESM(require_min_version());
1911
- var import_valid2 = __toESM(require_valid2());
1912
- var createVersionCheck = () => {
1913
- return {
1914
- isValidSemver: function(version) {
1915
- return (0, import_valid.default)(version) !== null;
1916
- },
1917
- isCompatible: function(version, range) {
1918
- return (0, import_satisfies.default)(version, range);
1919
- },
1920
- compare: function(versionA, versionB) {
1921
- return (0, import_compare.default)(versionA, versionB, true);
1922
- },
1923
- smallestVersion: function(versionRange) {
1924
- if (!(0, import_valid2.default)(versionRange)) return "0.0.0";
1925
- const minVersion = (0, import_min_version.default)(versionRange);
1926
- return minVersion?.raw ?? "0.0.0";
1927
- }
1928
- };
1929
- };
1930
-
1931
- // src/lib/utils/integrity.ts
1932
- var SUPPORTED_ALGORITHMS = {
1933
- "sha256-": "SHA-256",
1934
- "sha384-": "SHA-384",
1935
- "sha512-": "SHA-512"
1936
- };
1937
- var parseIntegrity = (integrity) => {
1938
- for (const prefix of Object.keys(SUPPORTED_ALGORITHMS)) {
1939
- if (integrity.startsWith(prefix)) {
1940
- return { algorithm: SUPPORTED_ALGORITHMS[prefix], expected: integrity };
1941
- }
1942
- }
1943
- return null;
1944
- };
1945
- var toBase64 = (bytes) => {
1946
- const view = new Uint8Array(bytes);
1947
- let bin = "";
1948
- for (let i = 0; i < view.length; i++) bin += String.fromCharCode(view[i]);
1949
- return btoa(bin);
1950
- };
1951
- var verifyIntegrity = async (bytes, integrity) => {
1952
- const parsed = parseIntegrity(integrity);
1953
- if (!parsed) {
1954
- throw new TypeError(
1955
- `Unsupported integrity prefix in '${integrity}'. Expected sha256-, sha384-, or sha512-.`
1956
- );
1957
- }
1958
- const subtle = typeof crypto !== "undefined" && crypto.subtle ? crypto.subtle : void 0;
1959
- if (!subtle) {
1960
- throw new Error("SubtleCrypto is not available in this environment.");
1961
- }
1962
- const digest = await subtle.digest(parsed.algorithm, bytes);
1963
- const actual = integrity.substring(0, integrity.indexOf("-") + 1) + toBase64(digest);
1964
- if (actual !== parsed.expected) {
1965
- throw new Error(`Integrity mismatch: expected ${parsed.expected}, got ${actual}`);
1966
- }
1967
- };
1968
-
1969
- // src/lib/3.adapters/http/manifest-provider.ts
1970
- var createManifestProvider = () => {
1971
- const ensureOk = (response) => {
1972
- if (!response.ok)
1973
- return Promise.reject(new NFError(`${response.status} - ${response.statusText}`));
1974
- return response;
1975
- };
1976
- const formatError = (manifestUrl) => (err) => {
1977
- const msg = err instanceof Error ? err.message : String(err);
1978
- throw new NFError(`Fetch of '${manifestUrl}' returned ${msg}`);
1979
- };
1980
- return {
1981
- provide: async function(remotesOrManifestUrl, opts = {}) {
1982
- if (typeof remotesOrManifestUrl !== "string") return Promise.resolve(remotesOrManifestUrl);
1983
- const parse = async (response) => {
1984
- if (!opts.integrity) return response.json();
1985
- const bytes = await response.arrayBuffer();
1986
- await verifyIntegrity(bytes, opts.integrity);
1987
- return JSON.parse(new TextDecoder().decode(bytes));
1988
- };
1989
- return fetch(remotesOrManifestUrl).then(ensureOk).then(parse).catch(formatError(remotesOrManifestUrl));
1990
- }
1991
- };
1992
- };
1993
-
1994
- // src/lib/3.adapters/http/remote-entry-provider.ts
1995
- var createRemoteEntryProvider = () => {
1996
- const ensureOk = (response) => {
1997
- if (!response.ok)
1998
- return Promise.reject(new Error(`${response.status} - ${response.statusText}`));
1999
- return response;
2000
- };
2001
- const fillEmptyFields = (remoteEntryUrl) => (remoteEntry) => {
2002
- if (!remoteEntry.exposes) remoteEntry.exposes = [];
2003
- if (!remoteEntry.shared) remoteEntry.shared = [];
2004
- if (!remoteEntry.url) remoteEntry.url = remoteEntryUrl;
2005
- return remoteEntry;
2006
- };
2007
- const formatError = (remoteEntryUrl) => (err) => {
2008
- const msg = err instanceof Error ? err.message : String(err);
2009
- throw new NFError(`Fetch of '${remoteEntryUrl}' returned ${msg}`);
2010
- };
2011
- return {
2012
- provide: async function(remoteEntryUrl, opts = {}) {
2013
- const parse = async (response) => {
2014
- if (!opts.integrity) return response.json();
2015
- const bytes = await response.arrayBuffer();
2016
- await verifyIntegrity(bytes, opts.integrity);
2017
- return JSON.parse(new TextDecoder().decode(bytes));
2018
- };
2019
- return fetch(remoteEntryUrl).then(ensureOk).then(parse).then(fillEmptyFields(remoteEntryUrl)).catch(formatError(remoteEntryUrl));
2020
- }
2021
- };
2022
- };
2023
-
2024
1931
  // src/lib/utils/optional.ts
2025
1932
  var Optional = class _Optional {
2026
1933
  constructor(item) {
@@ -2060,42 +1967,422 @@ var Optional = class _Optional {
2060
1967
  }
2061
1968
  };
2062
1969
 
2063
- // src/lib/3.adapters/storage/remote-info.repository.ts
2064
- var createRemoteInfoRepository = (config) => {
2065
- const STORAGE = config.storage("remotes", {});
2066
- if (config.clearStorage) STORAGE.clear();
2067
- const _cache = STORAGE.get() ?? {};
2068
- return {
2069
- contains: function(remoteName) {
2070
- return !!_cache[remoteName];
2071
- },
2072
- remove: function(remoteName) {
2073
- delete _cache[remoteName];
2074
- return this;
2075
- },
2076
- addOrUpdate: function(remoteName, remote) {
2077
- _cache[remoteName] = remote;
2078
- return this;
2079
- },
2080
- tryGet: function(remoteName) {
2081
- return Optional.of(_cache[remoteName]);
2082
- },
2083
- tryGetModule: function(remoteName, exposedModule) {
2084
- return Optional.of(_cache[remoteName]?.exposes.find((m) => m.moduleName === exposedModule)).map(
2085
- (m) => join(_cache[remoteName].scopeUrl, m.file)
2086
- );
2087
- },
2088
- getAll: function() {
2089
- return _cache;
2090
- },
2091
- commit: function() {
2092
- STORAGE.set(_cache);
2093
- return this;
2094
- }
2095
- };
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
+ };
2096
2383
  };
2097
2384
 
2098
- // src/lib/3.adapters/storage/scoped-externals.repository.ts
2385
+ // src/lib/core/3.adapters/storage/scoped-externals.repository.ts
2099
2386
  var createScopedExternalsRepository = (config) => {
2100
2387
  const STORAGE = config.storage("scoped-externals", {});
2101
2388
  if (config.clearStorage) STORAGE.clear();
@@ -2123,7 +2410,7 @@ var createScopedExternalsRepository = (config) => {
2123
2410
  };
2124
2411
  };
2125
2412
 
2126
- // src/lib/3.adapters/storage/shared-externals.repository.ts
2413
+ // src/lib/core/3.adapters/storage/shared-externals.repository.ts
2127
2414
  var createSharedExternalsRepository = (config) => {
2128
2415
  const STORAGE = config.storage(
2129
2416
  "shared-externals",
@@ -2189,7 +2476,7 @@ var createSharedExternalsRepository = (config) => {
2189
2476
  };
2190
2477
  };
2191
2478
 
2192
- // src/lib/3.adapters/browser/sse-handler.ts
2479
+ // src/lib/core/3.adapters/browser/sse-handler.ts
2193
2480
  var createSSEHandler = (config) => {
2194
2481
  const subscribers = [];
2195
2482
  return {
@@ -2215,22 +2502,7 @@ var createSSEHandler = (config) => {
2215
2502
  };
2216
2503
  };
2217
2504
 
2218
- // src/lib/utils/clone-entry.ts
2219
- var cloneEntry = (name, raw) => {
2220
- try {
2221
- if (typeof structuredClone === "function") {
2222
- return structuredClone(raw);
2223
- }
2224
- } catch {
2225
- }
2226
- try {
2227
- return JSON.parse(JSON.stringify(raw));
2228
- } catch {
2229
- }
2230
- throw new NFError(`Could not clone entry '${String(name)}'`);
2231
- };
2232
-
2233
- // src/lib/3.adapters/storage/chunk.repository.ts
2505
+ // src/lib/core/3.adapters/storage/chunk.repository.ts
2234
2506
  var createChunkRepository = (config) => {
2235
2507
  const STORAGE = config.storage("shared-chunks", {});
2236
2508
  if (config.clearStorage) STORAGE.clear();
@@ -2241,644 +2513,339 @@ var createChunkRepository = (config) => {
2241
2513
  _cache[remoteName][bundleName] = chunks;
2242
2514
  return this;
2243
2515
  },
2244
- tryGet: function(remoteName, bundleName) {
2245
- return Optional.of(_cache[remoteName]?.[bundleName]);
2246
- },
2247
- commit: function() {
2248
- STORAGE.set(_cache);
2249
- return this;
2250
- }
2251
- };
2252
- };
2253
-
2254
- // src/lib/5.di/driving.factory.ts
2255
- var createDriving = (config) => {
2256
- const adapters = {
2257
- versionCheck: createVersionCheck(),
2258
- manifestProvider: createManifestProvider(),
2259
- remoteEntryProvider: createRemoteEntryProvider(),
2260
- remoteInfoRepo: createRemoteInfoRepository(config),
2261
- scopedExternalsRepo: createScopedExternalsRepository(config),
2262
- sharedExternalsRepo: createSharedExternalsRepository(config),
2263
- sharedChunksRepo: createChunkRepository(config),
2264
- browser: createBrowser(config),
2265
- sse: createSSEHandler(config)
2266
- };
2267
- return { adapters, config };
2268
- };
2269
-
2270
- // src/lib/4.config/import-map/trusted-types.ts
2271
- var IMPORT_MAP_KEYS = /* @__PURE__ */ new Set(["imports", "scopes", "integrity"]);
2272
- var validateImportMapJSON = (input) => {
2273
- let parsed;
2274
- try {
2275
- parsed = JSON.parse(input);
2276
- } catch {
2277
- throw new TypeError("[nf-orchestrator] trusted-types: import map is not valid JSON");
2278
- }
2279
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
2280
- throw new TypeError("[nf-orchestrator] trusted-types: import map must be a plain object");
2281
- }
2282
- for (const key of Object.keys(parsed)) {
2283
- if (!IMPORT_MAP_KEYS.has(key)) {
2284
- throw new TypeError(`[nf-orchestrator] trusted-types: unexpected key "${key}" in import map`);
2285
- }
2286
- }
2287
- return input;
2288
- };
2289
- var validateScriptURL = (input) => {
2290
- const base = typeof location !== "undefined" ? location.href : "http://localhost/";
2291
- let url;
2292
- try {
2293
- url = new URL(input, base);
2294
- } catch {
2295
- throw new TypeError(`[nf-orchestrator] trusted-types: invalid script URL "${input}"`);
2296
- }
2297
- if (url.protocol !== "https:" && url.protocol !== "http:") {
2298
- throw new TypeError(
2299
- `[nf-orchestrator] trusted-types: disallowed protocol "${url.protocol}" for script URL`
2300
- );
2301
- }
2302
- return input;
2303
- };
2304
- var passThroughPolicy = {
2305
- createScript: (input) => input,
2306
- createScriptURL: (input) => input
2307
- };
2308
- var cachedPolicy = null;
2309
- var getTrustedTypesPolicy = (name = "nfo") => {
2310
- if (name === false) return passThroughPolicy;
2311
- if (cachedPolicy) return cachedPolicy;
2312
- const factory = globalThis.trustedTypes;
2313
- if (!factory) {
2314
- cachedPolicy = passThroughPolicy;
2315
- return cachedPolicy;
2316
- }
2317
- const native = factory.createPolicy(name, {
2318
- createScript: validateImportMapJSON,
2319
- createScriptURL: validateScriptURL
2320
- });
2321
- cachedPolicy = {
2322
- createScript: (input) => native.createScript(input),
2323
- createScriptURL: (input) => native.createScriptURL(input)
2324
- };
2325
- return cachedPolicy;
2326
- };
2327
-
2328
- // src/lib/4.config/import-map/replace-in-dom.ts
2329
- var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts = {}) => {
2330
- if (opts?.override) {
2331
- document.head.querySelectorAll(`script[type="${mapType}"]`).forEach((importMap2) => importMap2.remove());
2332
- }
2333
- const policy = getTrustedTypesPolicy(trustedTypesPolicyName);
2334
- document.head.appendChild(
2335
- Object.assign(document.createElement("script"), {
2336
- type: mapType,
2337
- text: policy.createScript(JSON.stringify(importMap))
2338
- })
2339
- );
2340
- return Promise.resolve(importMap);
2341
- };
2342
-
2343
- // src/lib/4.config/import-map/use-default.ts
2344
- var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
2345
- loadModuleFn: (url) => {
2346
- const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);
2347
- return import(
2348
- /* @vite-ignore */
2349
- trusted
2350
- );
2351
- },
2352
- setImportMapFn: replaceInDOM("importmap", trustedTypesPolicyName),
2353
- reloadBrowserFn: () => {
2354
- window.location.reload();
2355
- }
2356
- });
2357
-
2358
- // src/lib/4.config/import-map/import-map.config.ts
2359
- var createImportMapConfig = (o) => {
2360
- const fallback = useDefaultImportMap(o.trustedTypesPolicyName);
2361
- return {
2362
- setImportMapFn: o.setImportMapFn ?? fallback.setImportMapFn,
2363
- loadModuleFn: o.loadModuleFn ?? fallback.loadModuleFn,
2364
- reloadBrowserFn: o.reloadBrowserFn ?? fallback.reloadBrowserFn
2365
- };
2366
- };
2367
-
2368
- // src/lib/4.config/host/host.config.ts
2369
- var createHostConfig = (override) => {
2370
- const extras = override?.manifestIntegrity ? { manifestIntegrity: override.manifestIntegrity } : {};
2371
- if (!override?.hostRemoteEntry) {
2372
- return { hostRemoteEntry: false, ...extras };
2373
- }
2374
- if (typeof override.hostRemoteEntry === "string") {
2375
- return {
2376
- hostRemoteEntry: {
2377
- name: "__NF-HOST__",
2378
- url: override.hostRemoteEntry
2379
- },
2380
- ...extras
2381
- };
2382
- }
2383
- return {
2384
- hostRemoteEntry: {
2385
- name: "__NF-HOST__",
2386
- ...override.hostRemoteEntry
2387
- },
2388
- ...extras
2389
- };
2390
- };
2391
-
2392
- // src/lib/4.config/logging/noop.logger.ts
2393
- var noopLogger = {
2394
- debug: () => {
2395
- },
2396
- error: () => {
2397
- },
2398
- warn: () => {
2399
- }
2400
- };
2401
-
2402
- // src/lib/2.app/config/log.contract.ts
2403
- var LogLevel = {
2404
- debug: 0,
2405
- warn: 1,
2406
- error: 2
2407
- };
2408
-
2409
- // src/lib/4.config/logging/log.handler.ts
2410
- var createLogHandler = (logger, logLevel) => {
2411
- const logTypes = Object.keys(LogLevel).filter((key) => isNaN(Number(key)));
2412
- return logTypes.reduce(
2413
- (acc, logMessageType) => {
2414
- return {
2415
- ...acc,
2416
- [logMessageType]: (step, message, details) => {
2417
- if (LogLevel[logMessageType] >= LogLevel[logLevel]) {
2418
- logger[logMessageType](step, message, details);
2419
- }
2420
- }
2421
- };
2422
- },
2423
- { level: logLevel }
2424
- );
2425
- };
2426
-
2427
- // src/lib/4.config/logging/log.config.ts
2428
- var createLogConfig = ({ logger, logLevel, sse }) => ({
2429
- log: createLogHandler(logger ?? noopLogger, logLevel ?? "error"),
2430
- sse: !!sse
2431
- });
2432
-
2433
- // src/lib/4.config/storage/global-this.storage.ts
2434
- var globalThisStorageEntry = (namespace) => (key, initialValue) => {
2435
- if (!globalThis[namespace]) {
2436
- globalThis[namespace] = {};
2437
- }
2438
- const storage = globalThis[namespace];
2439
- if (!storage[key]) storage[key] = initialValue;
2440
- const entry = {
2441
- get() {
2442
- return cloneEntry(key, storage[key]);
2443
- },
2444
- set(value) {
2445
- storage[key] = cloneEntry(key, value);
2446
- return entry;
2516
+ tryGet: function(remoteName, bundleName) {
2517
+ return Optional.of(_cache[remoteName]?.[bundleName]);
2447
2518
  },
2448
- clear() {
2449
- storage[key] = cloneEntry(key, initialValue);
2519
+ commit: function() {
2520
+ STORAGE.set(_cache);
2450
2521
  return this;
2451
2522
  }
2452
2523
  };
2453
- return entry;
2454
- };
2455
-
2456
- // src/lib/4.config/storage/storage.config.ts
2457
- var createStorageConfig = (override) => ({
2458
- storage: override.storage ? override.storage(override.storageNamespace ?? "__NATIVE_FEDERATION__") : globalThisStorageEntry(override.storageNamespace ?? "__NATIVE_FEDERATION__"),
2459
- clearStorage: override.clearStorage ?? false
2460
- });
2461
-
2462
- // src/lib/4.config/mode/default.profile.ts
2463
- var defaultProfile = {
2464
- latestSharedExternal: false,
2465
- overrideCachedRemotes: "init-only",
2466
- overrideCachedRemotesIfURLMatches: false
2467
2524
  };
2468
2525
 
2469
- // src/lib/4.config/mode/mode.config.ts
2470
- var createModeConfig = (override) => {
2471
- const strictnessConfig = typeof override.strict === "boolean" ? {
2472
- strictRemoteEntry: override.strict,
2473
- strictExternalCompatibility: override.strict,
2474
- strictExternalSameVersionCompatibility: override.strict,
2475
- strictExternalVersion: override.strict,
2476
- strictImportMap: override.strict
2477
- } : {
2478
- strictRemoteEntry: override.strict?.strictRemoteEntry ?? false,
2479
- strictExternalCompatibility: override.strict?.strictExternalCompatibility ?? false,
2480
- strictExternalSameVersionCompatibility: override.strict?.strictExternalSameVersionCompatibility ?? false,
2481
- strictExternalVersion: override.strict?.strictExternalVersion ?? false,
2482
- strictImportMap: override.strict?.strictImportMap ?? false
2483
- };
2484
- return {
2485
- strict: strictnessConfig,
2486
- 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)
2487
2538
  };
2539
+ return { adapters, config };
2488
2540
  };
2489
2541
 
2490
- // src/lib/5.di/config.factory.ts
2491
- var createConfigHandlers = (overrides) => ({
2492
- ...createImportMapConfig(overrides),
2493
- ...createHostConfig(overrides),
2494
- ...createLogConfig(overrides),
2495
- ...createStorageConfig(overrides),
2496
- ...createModeConfig(overrides)
2497
- });
2498
-
2499
- // src/lib/2.app/flows/dynamic-init/convert-to-import-map.ts
2500
- function createConvertToImportMap({ log }, ports) {
2501
- return ({ entry, actions }) => {
2502
- const importMap = { imports: {} };
2503
- addExternals(entry, actions, importMap);
2504
- addRemoteInfos(entry, importMap);
2505
- log.debug(9, `[${entry.name}] Processed actions:`, actions);
2506
- return Promise.resolve(importMap);
2507
- };
2508
- function addExternals(remoteEntry, actions, importMap) {
2509
- if (!remoteEntry.shared) {
2510
- return;
2511
- }
2512
- const remoteEntryScope = getScope(remoteEntry.url);
2513
- const integrityMap = remoteEntry.integrity;
2514
- const chunkBundles = /* @__PURE__ */ new Set(["mapping-or-exposed"]);
2515
- remoteEntry.shared.forEach((external) => {
2516
- if (!external.singleton) {
2517
- const url2 = join(remoteEntryScope, external.outFileName);
2518
- addToScopes(remoteEntryScope, external.packageName, url2, importMap);
2519
- addIntegrity(importMap, url2, integrityMap, external.outFileName);
2520
- if (external?.bundle) chunkBundles.add(external?.bundle);
2521
- return;
2522
- }
2523
- if (!actions[external.packageName]) {
2524
- log.warn(
2525
- 9,
2526
- `[${remoteEntry.name}] No action defined for shared external '${external.packageName}', skipping.`
2527
- );
2528
- return;
2529
- }
2530
- if (actions[external.packageName].action === "skip") {
2531
- if (!external.shareScope) return;
2532
- if (actions[external.packageName].override) {
2533
- addToScopes(
2534
- remoteEntryScope,
2535
- external.packageName,
2536
- actions[external.packageName].override,
2537
- importMap
2538
- );
2539
- return;
2540
- }
2541
- }
2542
- if (external?.bundle) chunkBundles.add(external?.bundle);
2543
- if (actions[external.packageName].action === "scope") {
2544
- const url2 = join(remoteEntryScope, external.outFileName);
2545
- addToScopes(remoteEntryScope, external.packageName, url2, importMap);
2546
- addIntegrity(importMap, url2, integrityMap, external.outFileName);
2547
- return;
2548
- }
2549
- if (external.shareScope) {
2550
- const url2 = join(remoteEntryScope, external.outFileName);
2551
- addToScopes(remoteEntryScope, external.packageName, url2, importMap);
2552
- addIntegrity(importMap, url2, integrityMap, external.outFileName);
2553
- return;
2554
- }
2555
- const url = join(remoteEntryScope, external.outFileName);
2556
- importMap.imports[external.packageName] = url;
2557
- addIntegrity(importMap, url, integrityMap, external.outFileName);
2558
- });
2559
- 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");
2560
2550
  }
2561
- function addToScopes(scope, packageName, url, importMap) {
2562
- if (!importMap.scopes) importMap.scopes = {};
2563
- if (!importMap.scopes[scope]) importMap.scopes[scope] = {};
2564
- 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");
2565
2553
  }
2566
- function addRemoteInfos(remoteEntry, importMap) {
2567
- if (!remoteEntry.exposes) return;
2568
- const scope = getScope(remoteEntry.url);
2569
- remoteEntry.exposes.forEach((exposed) => {
2570
- const moduleName = join(remoteEntry.name, exposed.key);
2571
- const moduleUrl = join(scope, exposed.outFileName);
2572
- importMap.imports[moduleName] = moduleUrl;
2573
- addIntegrity(importMap, moduleUrl, remoteEntry.integrity, exposed.outFileName);
2574
- });
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
+ }
2575
2558
  }
2576
- function addChunkImports(importMap, remoteEntry, remoteEntryScope, chunkBundles) {
2577
- Array.from(chunkBundles).forEach((bundleName) => {
2578
- ports.sharedChunksRepo.tryGet(remoteEntry.name, bundleName).ifPresent((files) => {
2579
- files.forEach((file) => {
2580
- const url = join(remoteEntryScope, file);
2581
- addToScopes(remoteEntryScope, toChunkImport(file), url, importMap);
2582
- addIntegrity(importMap, url, remoteEntry.integrity, file);
2583
- });
2584
- });
2585
- });
2586
- 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}"`);
2587
2568
  }
2588
- function addIntegrity(importMap, url, integrityMap, file) {
2589
- const hash = integrityMap?.[file];
2590
- if (!hash) return;
2591
- if (!importMap.integrity) importMap.integrity = {};
2592
- 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
+ );
2593
2573
  }
2594
- }
2595
-
2596
- // src/lib/2.app/flows/dynamic-init/get-remote-entry.ts
2597
- var normalizeRemoteRef = (remote) => {
2598
- if (!remote) return {};
2599
- if (typeof remote === "string") return { name: remote };
2600
- return remote;
2574
+ return input;
2601
2575
  };
2602
- function createGetRemoteEntry(config, ports) {
2603
- return async (remoteEntryUrl, remote) => {
2604
- const { name: remoteName, integrity } = normalizeRemoteRef(remote);
2605
- if (!!remoteName && shouldSkipCachedRemote(remoteEntryUrl, remoteName)) {
2606
- config.log.debug(7, `Found remote '${remoteName}' in storage, omitting fetch.`);
2607
- return Optional.empty();
2608
- }
2609
- try {
2610
- const remoteEntry = integrity ? await ports.remoteEntryProvider.provide(remoteEntryUrl, { integrity }) : await ports.remoteEntryProvider.provide(remoteEntryUrl);
2611
- config.log.debug(
2612
- 7,
2613
- `[${remoteEntry.name}] Fetched from '${remoteEntry.url}', exposing: ${JSON.stringify(remoteEntry.exposes)}`
2614
- );
2615
- if (!!remoteName && remoteEntry.name !== remoteName) {
2616
- const errorMsg = `Fetched remote '${remoteEntry.name}' does not match requested '${remoteName}'.`;
2617
- if (config.strict.strictRemoteEntry) {
2618
- config.log.error(7, errorMsg);
2619
- throw new NFError("Could not fetch remote entry");
2620
- }
2621
- config.log.warn(7, errorMsg + " Omitting expected name.");
2622
- }
2623
- if (ports.remoteInfoRepo.contains(remoteEntry.name)) {
2624
- remoteEntry.override = true;
2625
- config.log.debug(7, `Overriding existing remote '${remoteName}' with '${remoteEntryUrl}'.`);
2626
- }
2627
- return Optional.of(checkForSSE(remoteEntry));
2628
- } catch (error) {
2629
- config.log.error(
2630
- 7,
2631
- `[${remoteName ?? "unknown"}] Could not fetch remoteEntry from ${remoteEntryUrl}.`,
2632
- error
2633
- );
2634
- return Promise.reject(
2635
- new NFError(`[${remoteName ?? remoteEntryUrl}] Could not fetch remoteEntry.`)
2636
- );
2637
- }
2638
- };
2639
- function shouldSkipCachedRemote(remoteEntryUrl, remoteName) {
2640
- return ports.remoteInfoRepo.tryGet(remoteName).map(
2641
- (cachedRemoteInfo) => config.profile.overrideCachedRemotes !== "always" || !config.profile.overrideCachedRemotesIfURLMatches && remoteEntryUrl === join(cachedRemoteInfo.scopeUrl, "remoteEntry.json")
2642
- ).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;
2643
2588
  }
2644
- function checkForSSE(entry) {
2645
- if (config.sse) {
2646
- if (entry.buildNotificationsEndpoint) {
2647
- ports.sse.watchRemoteBuilds(
2648
- join(getScope(entry.url), entry.buildNotificationsEndpoint)
2649
- );
2650
- config.log.debug(7, `Registered SSE endpoint of remote '${entry.name}' `);
2651
- } else {
2652
- config.log.debug(7, `Remote ${entry.name} has no defined 'buildNotificationsEndpoint'`);
2653
- }
2654
- }
2655
- 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());
2656
2604
  }
2657
- }
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
+ };
2658
2614
 
2659
- // src/lib/2.app/flows/dynamic-init/update-cache.ts
2660
- function createUpdateCache(config, ports) {
2661
- return (remoteEntry) => {
2662
- try {
2663
- if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
2664
- addRemoteInfoToStorage(remoteEntry);
2665
- const actions = mergeExternalsIntoStorage(remoteEntry);
2666
- addSharedChunksToStorage(remoteEntry);
2667
- return Promise.resolve({ entry: remoteEntry, actions });
2668
- } catch (error) {
2669
- return Promise.reject(error);
2670
- }
2671
- };
2672
- function removeCachedRemoteEntry(remoteEntry) {
2673
- ports.remoteInfoRepo.remove(remoteEntry.name);
2674
- ports.scopedExternalsRepo.remove(remoteEntry.name);
2675
- 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();
2676
2627
  }
2677
- function addRemoteInfoToStorage({ name, url, exposes }) {
2678
- ports.remoteInfoRepo.addOrUpdate(name, {
2679
- scopeUrl: getScope(url),
2680
- exposes: Object.values(exposes ?? []).map((m) => ({
2681
- moduleName: m.key,
2682
- file: m.outFileName
2683
- }))
2684
- });
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 };
2685
2645
  }
2686
- function mergeExternalsIntoStorage(remoteEntry) {
2687
- const actions = {};
2688
- remoteEntry.shared.forEach((external) => {
2689
- if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
2690
- const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
2691
- if (config.strict.strictExternalVersion) {
2692
- config.log.error(8, errorMsg);
2693
- throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2694
- }
2695
- config.log.warn(8, errorMsg);
2696
- }
2697
- if (external.singleton) {
2698
- const { action, sharedVersion } = addSharedExternal(remoteEntry.name, external);
2699
- actions[external.packageName] = { action };
2700
- if (action === "skip" && external.shareScope && sharedVersion?.remotes[0]?.file) {
2701
- actions[external.packageName].override = ports.remoteInfoRepo.tryGet(sharedVersion.remotes[0].name).map((remote) => join(remote.scopeUrl, sharedVersion.remotes[0].file)).orThrow(() => {
2702
- config.log.error(
2703
- 8,
2704
- `[${external.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}][${external.packageName}@${external.version}][override] Remote name not found in cache.`
2705
- );
2706
- return new NFError(
2707
- `Could not find override url from remote ${sharedVersion.remotes[0].name}`
2708
- );
2709
- });
2710
- }
2711
- } else {
2712
- addScopedExternal(remoteEntry.name, external);
2713
- }
2714
- });
2715
- return actions;
2646
+ if (typeof override.hostRemoteEntry === "string") {
2647
+ return {
2648
+ hostRemoteEntry: {
2649
+ name: "__NF-HOST__",
2650
+ url: override.hostRemoteEntry
2651
+ },
2652
+ ...extras
2653
+ };
2716
2654
  }
2717
- function addSharedChunksToStorage(remoteEntry) {
2718
- if (!remoteEntry.chunks) return;
2719
- config.log.debug(
2720
- 8,
2721
- `Adding chunks for remote "${remoteEntry.name}", bundles: [${Object.keys(remoteEntry.chunks).join(", ")}]`
2722
- );
2723
- Object.entries(remoteEntry.chunks).forEach(([bundleName, chunks]) => {
2724
- ports.sharedChunksRepo.addOrReplace(remoteEntry.name, bundleName, chunks);
2725
- });
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: () => {
2726
2671
  }
2727
- function addSharedExternal(remoteName, sharedInfo) {
2728
- const cached = ports.sharedExternalsRepo.tryGet(sharedInfo.packageName, sharedInfo.shareScope).orElse({ dirty: false, versions: [] });
2729
- let action = "skip";
2730
- const tag = sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion);
2731
- const remote = {
2732
- file: sharedInfo.outFileName,
2733
- strictVersion: sharedInfo.strictVersion,
2734
- requiredVersion: sharedInfo.requiredVersion || tag,
2735
- name: remoteName,
2736
- bundle: sharedInfo.bundle,
2737
- cached: false
2738
- };
2739
- const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2740
- if (scopeType === "strict") {
2741
- remote.requiredVersion = tag;
2742
- action = "share";
2743
- }
2744
- const sharedVersion = cached.versions.find((c) => c.action === "share");
2745
- const isCompatible = !sharedVersion || ports.versionCheck.isCompatible(sharedVersion.tag, remote.requiredVersion);
2746
- if (action === "skip" && !isCompatible && remote.strictVersion) {
2747
- action = "scope";
2748
- 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}'`;
2749
- if (config.strict.strictExternalCompatibility) {
2750
- config.log.error(8, errorMsg);
2751
- throw new NFError(`Could not process remote '${remoteName}'`);
2752
- }
2753
- config.log.warn(8, errorMsg);
2754
- }
2755
- const matchingVersion = cached.versions.find((cached2) => cached2.tag === tag);
2756
- if (!!matchingVersion) {
2757
- if (remote.strictVersion && matchingVersion.remotes[0].requiredVersion !== remote.requiredVersion) {
2758
- const errorMsg = `[${remoteName}][${sharedInfo.packageName}@${sharedInfo.version}] Required version '${remote.requiredVersion}' does not match existing '${matchingVersion.remotes[0].requiredVersion}'`;
2759
- if (config.strict.strictExternalCompatibility) {
2760
- config.log.error(8, errorMsg);
2761
- 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
+ }
2762
2692
  }
2763
- config.log.warn(8, errorMsg);
2764
- }
2765
- matchingVersion.remotes.push(remote);
2766
- } else {
2767
- if (!sharedVersion) action = "share";
2768
- remote.cached = action !== "skip";
2769
- 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);
2770
2710
  }
2771
- ports.sharedExternalsRepo.addOrUpdate(
2772
- sharedInfo.packageName,
2773
- {
2774
- dirty: cached.dirty,
2775
- versions: cached.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
2776
- },
2777
- sharedInfo.shareScope
2778
- );
2779
- return { action, sharedVersion };
2711
+ } catch {
2780
2712
  }
2781
- function addScopedExternal(remoteName, sharedInfo) {
2782
- ports.scopedExternalsRepo.addExternal(remoteName, sharedInfo.packageName, {
2783
- tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
2784
- file: sharedInfo.outFileName,
2785
- bundle: sharedInfo.bundle
2786
- });
2713
+ try {
2714
+ return JSON.parse(JSON.stringify(raw));
2715
+ } catch {
2787
2716
  }
2788
- }
2717
+ throw new NFError(`Could not clone entry '${String(name)}'`);
2718
+ };
2789
2719
 
2790
- // src/lib/5.di/flows/dynamic-init.factory.ts
2791
- var createDynamicInitDrivers = ({
2792
- config,
2793
- adapters
2794
- }) => ({
2795
- getRemoteEntry: createGetRemoteEntry(config, adapters),
2796
- updateCache: createUpdateCache(config, adapters),
2797
- convertToImportMap: createConvertToImportMap(config, adapters),
2798
- 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
2799
2747
  });
2800
- var DYNAMIC_INIT_FLOW_FACTORY = ({
2801
- config,
2802
- adapters
2803
- }) => {
2804
- 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
+ };
2805
2771
  return {
2806
- flow,
2807
- adapters,
2808
- config
2772
+ strict: strictnessConfig,
2773
+ profile: { ...defaultProfile, ...override.profile ?? {} }
2809
2774
  };
2810
2775
  };
2811
- var createDynamicInitFlow = ({
2812
- 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,
2813
2797
  adapters,
2814
- config
2798
+ loadRemoteModule,
2799
+ initRemoteEntryFlow,
2800
+ afterInitRemoteEntry
2815
2801
  }) => {
2816
- const processDynamicRemoteEntry = async (remoteEntry) => {
2817
- 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);
2818
2811
  };
2819
- const initRemoteEntry = (remoteEntryUrl, remote) => flow.getRemoteEntry(remoteEntryUrl, remote).then((entry) => entry.map(processDynamicRemoteEntry).orElse(Promise.resolve())).then(() => ({
2812
+ const result = {
2820
2813
  config,
2821
2814
  adapters,
2815
+ loadRemoteModule,
2816
+ load: loadRemoteModule,
2817
+ as: () => ({
2818
+ loadRemoteModule,
2819
+ load: loadRemoteModule
2820
+ }),
2822
2821
  initRemoteEntry
2823
- }));
2824
- return initRemoteEntry;
2822
+ };
2823
+ return result;
2825
2824
  };
2826
2825
 
2827
- // src/lib/init-federation.ts
2826
+ // src/lib/core/init-federation.ts
2828
2827
  var initFederation = (remotesOrManifestUrl, options = {}) => {
2829
2828
  const { adapters, config } = createDriving(createConfigHandlers(options));
2830
- const stateDump = (msg) => config.log.debug(0, msg, {
2831
- remotes: { ...adapters.remoteInfoRepo.getAll() },
2832
- "shared-externals": adapters.sharedExternalsRepo.getScopes({ includeGlobal: true }).reduce(
2833
- (acc, scope) => ({ ...acc, [scope]: adapters.sharedExternalsRepo.getFromScope(scope) }),
2834
- {}
2835
- ),
2836
- "scoped-externals": adapters.scopedExternalsRepo.getAll()
2837
- });
2838
- const initFlow = createInitFlow(INIT_FLOW_FACTORY({ adapters, config }));
2839
- const dynamicInitFlow = createDynamicInitFlow(DYNAMIC_INIT_FLOW_FACTORY({ config, adapters }));
2840
- return initFlow(remotesOrManifestUrl).then(({ loadRemoteModule }) => {
2841
- const output = {
2842
- config,
2843
- adapters,
2844
- loadRemoteModule,
2845
- as: () => ({
2846
- loadRemoteModule,
2847
- load: loadRemoteModule
2848
- }),
2849
- load: loadRemoteModule
2850
- };
2851
- const initRemoteEntry = async (remoteEntryUrl, remote) => {
2852
- const remoteName = typeof remote === "string" ? remote : remote?.name;
2853
- return dynamicInitFlow(remoteEntryUrl, remote).catch((e) => {
2854
- stateDump(`[dynamic-init][${remoteName ?? remoteEntryUrl}] STATE DUMP`);
2855
- if (config.strict.strictRemoteEntry) return Promise.reject(e);
2856
- else console.warn("Failed to initialize remote entry, continuing anyway.");
2857
- return Promise.resolve();
2858
- }).then(() => ({
2859
- ...output,
2860
- initRemoteEntry
2861
- }));
2862
- };
2863
- return {
2864
- ...output,
2865
- initRemoteEntry
2866
- };
2867
- }).catch((e) => {
2868
- 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`);
2869
2836
  return Promise.reject(e);
2870
2837
  });
2871
2838
  };
2872
2839
  export {
2873
- DYNAMIC_INIT_FLOW_FACTORY,
2874
2840
  INIT_FLOW_FACTORY,
2875
2841
  NFError,
2876
2842
  createConfigHandlers,
2877
2843
  createDriving,
2878
- createDynamicInitDrivers,
2879
- createDynamicInitFlow,
2844
+ createFederationResult,
2880
2845
  createInitDrivers,
2881
2846
  createInitFlow,
2847
+ createInitRemoteEntryFlow,
2848
+ createStateDump,
2882
2849
  initFederation
2883
2850
  };
2884
2851
  //# sourceMappingURL=native-federation-orchestrator.mjs.map