@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
package/fesm2022/node.mjs CHANGED
@@ -24,9 +24,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  mod
25
25
  ));
26
26
 
27
- // node_modules/.pnpm/semver@7.8.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,7 @@ var require_valid2 = __commonJS({
1255
1268
  }
1256
1269
  });
1257
1270
 
1258
- // src/lib/3.adapters/browser/browser.ts
1271
+ // src/lib/core/3.adapters/browser/browser.ts
1259
1272
  var createBrowser = (config) => {
1260
1273
  return {
1261
1274
  setImportMapFn: config.setImportMapFn,
@@ -1263,7 +1276,7 @@ var createBrowser = (config) => {
1263
1276
  };
1264
1277
  };
1265
1278
 
1266
- // src/lib/3.adapters/checks/version.check.ts
1279
+ // src/lib/core/3.adapters/checks/version.check.ts
1267
1280
  var import_valid = __toESM(require_valid());
1268
1281
  var import_satisfies = __toESM(require_satisfies());
1269
1282
  var import_compare = __toESM(require_compare());
@@ -1288,7 +1301,7 @@ var createVersionCheck = () => {
1288
1301
  };
1289
1302
  };
1290
1303
 
1291
- // src/lib/native-federation.error.ts
1304
+ // src/lib/core/native-federation.error.ts
1292
1305
  var NFError = class extends Error {
1293
1306
  constructor(message, cause) {
1294
1307
  super(message, cause);
@@ -1334,7 +1347,7 @@ var verifyIntegrity = async (bytes, integrity) => {
1334
1347
  }
1335
1348
  };
1336
1349
 
1337
- // src/lib/utils/node/read-source.ts
1350
+ // src/lib/node/utils/read-source.ts
1338
1351
  import * as fs from "node:fs/promises";
1339
1352
  import { fileURLToPath } from "node:url";
1340
1353
  var isHttpUrl = (input) => input.startsWith("http://") || input.startsWith("https://");
@@ -1352,7 +1365,7 @@ var readSourceBytes = async (input) => {
1352
1365
  return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
1353
1366
  };
1354
1367
 
1355
- // src/lib/3.adapters/node/fs-manifest-provider.ts
1368
+ // src/lib/node/adapters/fs-manifest-provider.ts
1356
1369
  var createFsManifestProvider = () => {
1357
1370
  const formatError = (manifestUrl) => (err) => {
1358
1371
  if (err instanceof NFError) throw err;
@@ -1373,7 +1386,7 @@ var createFsManifestProvider = () => {
1373
1386
  };
1374
1387
  };
1375
1388
 
1376
- // src/lib/3.adapters/node/fs-remote-entry-provider.ts
1389
+ // src/lib/node/adapters/fs-remote-entry-provider.ts
1377
1390
  var createFsRemoteEntryProvider = () => {
1378
1391
  const fillEmptyFields = (remoteEntryUrl) => (remoteEntry) => {
1379
1392
  if (!remoteEntry.exposes) remoteEntry.exposes = [];
@@ -1400,7 +1413,7 @@ var createFsRemoteEntryProvider = () => {
1400
1413
  };
1401
1414
  };
1402
1415
 
1403
- // src/lib/3.adapters/node/noop-sse.ts
1416
+ // src/lib/node/adapters/noop-sse.ts
1404
1417
  var createNoopSSE = () => ({
1405
1418
  watchRemoteBuilds: () => {
1406
1419
  },
@@ -1463,7 +1476,7 @@ var Optional = class _Optional {
1463
1476
  }
1464
1477
  };
1465
1478
 
1466
- // src/lib/3.adapters/storage/remote-info.repository.ts
1479
+ // src/lib/core/3.adapters/storage/remote-info.repository.ts
1467
1480
  var createRemoteInfoRepository = (config) => {
1468
1481
  const STORAGE = config.storage("remotes", {});
1469
1482
  if (config.clearStorage) STORAGE.clear();
@@ -1498,7 +1511,7 @@ var createRemoteInfoRepository = (config) => {
1498
1511
  };
1499
1512
  };
1500
1513
 
1501
- // src/lib/3.adapters/storage/scoped-externals.repository.ts
1514
+ // src/lib/core/3.adapters/storage/scoped-externals.repository.ts
1502
1515
  var createScopedExternalsRepository = (config) => {
1503
1516
  const STORAGE = config.storage("scoped-externals", {});
1504
1517
  if (config.clearStorage) STORAGE.clear();
@@ -1526,11 +1539,11 @@ var createScopedExternalsRepository = (config) => {
1526
1539
  };
1527
1540
  };
1528
1541
 
1529
- // src/lib/1.domain/externals/external.contract.ts
1542
+ // src/lib/core/1.domain/externals/external.contract.ts
1530
1543
  var GLOBAL_SCOPE = "__GLOBAL__";
1531
1544
  var STRICT_SCOPE = "strict";
1532
1545
 
1533
- // src/lib/3.adapters/storage/shared-externals.repository.ts
1546
+ // src/lib/core/3.adapters/storage/shared-externals.repository.ts
1534
1547
  var createSharedExternalsRepository = (config) => {
1535
1548
  const STORAGE = config.storage(
1536
1549
  "shared-externals",
@@ -1596,22 +1609,7 @@ var createSharedExternalsRepository = (config) => {
1596
1609
  };
1597
1610
  };
1598
1611
 
1599
- // src/lib/utils/clone-entry.ts
1600
- var cloneEntry = (name, raw) => {
1601
- try {
1602
- if (typeof structuredClone === "function") {
1603
- return structuredClone(raw);
1604
- }
1605
- } catch {
1606
- }
1607
- try {
1608
- return JSON.parse(JSON.stringify(raw));
1609
- } catch {
1610
- }
1611
- throw new NFError(`Could not clone entry '${String(name)}'`);
1612
- };
1613
-
1614
- // src/lib/3.adapters/storage/chunk.repository.ts
1612
+ // src/lib/core/3.adapters/storage/chunk.repository.ts
1615
1613
  var createChunkRepository = (config) => {
1616
1614
  const STORAGE = config.storage("shared-chunks", {});
1617
1615
  if (config.clearStorage) STORAGE.clear();
@@ -1632,7 +1630,7 @@ var createChunkRepository = (config) => {
1632
1630
  };
1633
1631
  };
1634
1632
 
1635
- // src/lib/4.config/import-map/trusted-types.ts
1633
+ // src/lib/core/4.config/import-map/trusted-types.ts
1636
1634
  var IMPORT_MAP_KEYS = /* @__PURE__ */ new Set(["imports", "scopes", "integrity"]);
1637
1635
  var validateImportMapJSON = (input) => {
1638
1636
  let parsed;
@@ -1690,7 +1688,7 @@ var getTrustedTypesPolicy = (name = "nfo") => {
1690
1688
  return cachedPolicy;
1691
1689
  };
1692
1690
 
1693
- // src/lib/4.config/import-map/replace-in-dom.ts
1691
+ // src/lib/core/4.config/import-map/replace-in-dom.ts
1694
1692
  var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts = {}) => {
1695
1693
  if (opts?.override) {
1696
1694
  document.head.querySelectorAll(`script[type="${mapType}"]`).forEach((importMap2) => importMap2.remove());
@@ -1705,7 +1703,7 @@ var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts
1705
1703
  return Promise.resolve(importMap);
1706
1704
  };
1707
1705
 
1708
- // src/lib/4.config/import-map/use-default.ts
1706
+ // src/lib/core/4.config/import-map/use-default.ts
1709
1707
  var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
1710
1708
  loadModuleFn: (url) => {
1711
1709
  const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);
@@ -1720,7 +1718,7 @@ var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
1720
1718
  }
1721
1719
  });
1722
1720
 
1723
- // src/lib/4.config/import-map/import-map.config.ts
1721
+ // src/lib/core/4.config/import-map/import-map.config.ts
1724
1722
  var createImportMapConfig = (o) => {
1725
1723
  const fallback = useDefaultImportMap(o.trustedTypesPolicyName);
1726
1724
  return {
@@ -1730,7 +1728,7 @@ var createImportMapConfig = (o) => {
1730
1728
  };
1731
1729
  };
1732
1730
 
1733
- // src/lib/4.config/host/host.config.ts
1731
+ // src/lib/core/4.config/host/host.config.ts
1734
1732
  var createHostConfig = (override) => {
1735
1733
  const extras = override?.manifestIntegrity ? { manifestIntegrity: override.manifestIntegrity } : {};
1736
1734
  if (!override?.hostRemoteEntry) {
@@ -1754,7 +1752,7 @@ var createHostConfig = (override) => {
1754
1752
  };
1755
1753
  };
1756
1754
 
1757
- // src/lib/4.config/logging/noop.logger.ts
1755
+ // src/lib/core/4.config/logging/noop.logger.ts
1758
1756
  var noopLogger = {
1759
1757
  debug: () => {
1760
1758
  },
@@ -1764,14 +1762,14 @@ var noopLogger = {
1764
1762
  }
1765
1763
  };
1766
1764
 
1767
- // src/lib/2.app/config/log.contract.ts
1765
+ // src/lib/core/2.app/config/log.contract.ts
1768
1766
  var LogLevel = {
1769
1767
  debug: 0,
1770
1768
  warn: 1,
1771
1769
  error: 2
1772
1770
  };
1773
1771
 
1774
- // src/lib/4.config/logging/log.handler.ts
1772
+ // src/lib/core/4.config/logging/log.handler.ts
1775
1773
  var createLogHandler = (logger, logLevel) => {
1776
1774
  const logTypes = Object.keys(LogLevel).filter((key) => isNaN(Number(key)));
1777
1775
  return logTypes.reduce(
@@ -1789,13 +1787,28 @@ var createLogHandler = (logger, logLevel) => {
1789
1787
  );
1790
1788
  };
1791
1789
 
1792
- // src/lib/4.config/logging/log.config.ts
1790
+ // src/lib/core/4.config/logging/log.config.ts
1793
1791
  var createLogConfig = ({ logger, logLevel, sse }) => ({
1794
1792
  log: createLogHandler(logger ?? noopLogger, logLevel ?? "error"),
1795
1793
  sse: !!sse
1796
1794
  });
1797
1795
 
1798
- // src/lib/4.config/storage/global-this.storage.ts
1796
+ // src/lib/utils/clone-entry.ts
1797
+ var cloneEntry = (name, raw) => {
1798
+ try {
1799
+ if (typeof structuredClone === "function") {
1800
+ return structuredClone(raw);
1801
+ }
1802
+ } catch {
1803
+ }
1804
+ try {
1805
+ return JSON.parse(JSON.stringify(raw));
1806
+ } catch {
1807
+ }
1808
+ throw new NFError(`Could not clone entry '${String(name)}'`);
1809
+ };
1810
+
1811
+ // src/lib/core/4.config/storage/global-this.storage.ts
1799
1812
  var globalThisStorageEntry = (namespace) => (key, initialValue) => {
1800
1813
  if (!globalThis[namespace]) {
1801
1814
  globalThis[namespace] = {};
@@ -1818,20 +1831,20 @@ var globalThisStorageEntry = (namespace) => (key, initialValue) => {
1818
1831
  return entry;
1819
1832
  };
1820
1833
 
1821
- // src/lib/4.config/storage/storage.config.ts
1834
+ // src/lib/core/4.config/storage/storage.config.ts
1822
1835
  var createStorageConfig = (override) => ({
1823
1836
  storage: override.storage ? override.storage(override.storageNamespace ?? "__NATIVE_FEDERATION__") : globalThisStorageEntry(override.storageNamespace ?? "__NATIVE_FEDERATION__"),
1824
1837
  clearStorage: override.clearStorage ?? false
1825
1838
  });
1826
1839
 
1827
- // src/lib/4.config/mode/default.profile.ts
1840
+ // src/lib/core/4.config/mode/default.profile.ts
1828
1841
  var defaultProfile = {
1829
1842
  latestSharedExternal: false,
1830
1843
  overrideCachedRemotes: "init-only",
1831
1844
  overrideCachedRemotesIfURLMatches: false
1832
1845
  };
1833
1846
 
1834
- // src/lib/4.config/mode/mode.config.ts
1847
+ // src/lib/core/4.config/mode/mode.config.ts
1835
1848
  var createModeConfig = (override) => {
1836
1849
  const strictnessConfig = typeof override.strict === "boolean" ? {
1837
1850
  strictRemoteEntry: override.strict,
@@ -1852,7 +1865,7 @@ var createModeConfig = (override) => {
1852
1865
  };
1853
1866
  };
1854
1867
 
1855
- // src/lib/5.di/config.factory.ts
1868
+ // src/lib/core/5.di/config.factory.ts
1856
1869
  var createConfigHandlers = (overrides) => ({
1857
1870
  ...createImportMapConfig(overrides),
1858
1871
  ...createHostConfig(overrides),
@@ -1861,7 +1874,28 @@ var createConfigHandlers = (overrides) => ({
1861
1874
  ...createModeConfig(overrides)
1862
1875
  });
1863
1876
 
1864
- // src/lib/2.app/flows/init/get-remote-entries.ts
1877
+ // src/lib/core/2.app/flows/init.flow.ts
1878
+ var createInitFlow = ({
1879
+ flow,
1880
+ adapters,
1881
+ config
1882
+ }) => {
1883
+ return (remotesOrManifestUrl) => flow.getRemoteEntries(remotesOrManifestUrl).then(flow.processRemoteEntries).then(flow.determineSharedExternals).then(flow.generateImportMap).then(flow.commitChanges).then(flow.exposeModuleLoader).then((loadRemoteModule) => ({
1884
+ config,
1885
+ adapters,
1886
+ loadRemoteModule
1887
+ }));
1888
+ };
1889
+
1890
+ // src/lib/core/2.app/flows/init-remote-entry.flow.ts
1891
+ var createInitRemoteEntryFlow = ({
1892
+ flow
1893
+ }) => {
1894
+ const processDynamicRemoteEntry = (remoteEntry) => flow.updateCache(remoteEntry).then(flow.convertToImportMap).then(flow.commitChanges);
1895
+ return (remoteEntryUrl, remote) => flow.getRemoteEntry(remoteEntryUrl, remote).then((entry) => entry.map(processDynamicRemoteEntry).orElse(Promise.resolve())).then(() => void 0);
1896
+ };
1897
+
1898
+ // src/lib/core/2.app/steps/get-remote-entries.ts
1865
1899
  function createGetRemoteEntries(config, ports) {
1866
1900
  return (remotesOrManifestUrl = {}) => {
1867
1901
  const manifestPromise = config.manifestIntegrity ? ports.manifestProvider.provide(remotesOrManifestUrl, {
@@ -1955,20 +1989,13 @@ function createGetRemoteEntries(config, ports) {
1955
1989
  }
1956
1990
  }
1957
1991
 
1958
- // src/lib/2.app/flows/init/process-remote-entries.ts
1959
- function createProcessRemoteEntries(config, ports) {
1960
- return (remoteEntries) => {
1961
- try {
1962
- remoteEntries.forEach((remoteEntry) => {
1963
- if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
1964
- addRemoteInfoToStorage(remoteEntry);
1965
- addExternalsToStorage(remoteEntry);
1966
- addSharedChunksToStorage(remoteEntry);
1967
- });
1968
- return Promise.resolve(remoteEntries);
1969
- } catch (e) {
1970
- return Promise.reject(e);
1971
- }
1992
+ // src/lib/core/2.app/steps/store-remote-entry.ts
1993
+ function createStoreRemoteEntry(config, ports, logStep) {
1994
+ return (remoteEntry, onSharedExternal) => {
1995
+ if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
1996
+ addRemoteInfoToStorage(remoteEntry);
1997
+ addExternalsToStorage(remoteEntry, onSharedExternal);
1998
+ addSharedChunksToStorage(remoteEntry);
1972
1999
  };
1973
2000
  function removeCachedRemoteEntry(remoteEntry) {
1974
2001
  ports.remoteInfoRepo.remove(remoteEntry.name);
@@ -1985,88 +2012,124 @@ function createProcessRemoteEntries(config, ports) {
1985
2012
  ...integrity ? { integrity } : {}
1986
2013
  });
1987
2014
  }
1988
- function addExternalsToStorage(remoteEntry) {
2015
+ function addExternalsToStorage(remoteEntry, onSharedExternal) {
1989
2016
  remoteEntry.shared.forEach((external) => {
1990
- if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
1991
- const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
1992
- if (config.strict.strictExternalVersion) {
1993
- config.log.error(2, errorMsg);
1994
- throw new NFError(`Could not process remote '${remoteEntry.name}'`);
1995
- }
1996
- config.log.warn(2, errorMsg);
1997
- }
2017
+ validateExternalVersion(remoteEntry, external);
1998
2018
  if (external.singleton) {
1999
- addSharedExternal(remoteEntry.name, external, remoteEntry);
2019
+ onSharedExternal(remoteEntry, external, sharedExternalContext(remoteEntry, external));
2000
2020
  } else {
2001
- addScopedExternal(remoteEntry.name, external);
2021
+ addScopedExternal(remoteEntry, external);
2002
2022
  }
2003
2023
  });
2004
2024
  }
2005
2025
  function addSharedChunksToStorage(remoteEntry) {
2006
2026
  if (!remoteEntry.chunks) return;
2007
2027
  config.log.debug(
2008
- 2,
2028
+ logStep,
2009
2029
  `Adding chunks for remote "${remoteEntry.name}", bundles: [${Object.keys(remoteEntry.chunks).join(", ")}]`
2010
2030
  );
2011
2031
  Object.entries(remoteEntry.chunks).forEach(([bundleName, chunks]) => {
2012
2032
  ports.sharedChunksRepo.addOrReplace(remoteEntry.name, bundleName, chunks);
2013
2033
  });
2014
2034
  }
2015
- function addSharedExternal(remoteName, sharedInfo, remoteEntry) {
2016
- let action = "skip";
2035
+ function addScopedExternal(remoteEntry, sharedInfo) {
2036
+ ports.scopedExternalsRepo.addExternal(remoteEntry.name, sharedInfo.packageName, {
2037
+ tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
2038
+ file: sharedInfo.outFileName,
2039
+ bundle: sharedInfo.bundle
2040
+ });
2041
+ }
2042
+ function validateExternalVersion(remoteEntry, external) {
2043
+ if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
2044
+ const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
2045
+ if (config.strict.strictExternalVersion) {
2046
+ config.log.error(logStep, errorMsg);
2047
+ throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2048
+ }
2049
+ config.log.warn(logStep, errorMsg);
2050
+ }
2051
+ }
2052
+ function sharedExternalContext(remoteEntry, sharedInfo) {
2017
2053
  const tag = sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion);
2054
+ const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2018
2055
  const remote = {
2019
2056
  file: sharedInfo.outFileName,
2020
- name: remoteName,
2057
+ name: remoteEntry.name,
2021
2058
  bundle: sharedInfo.bundle,
2022
2059
  strictVersion: sharedInfo.strictVersion,
2023
2060
  cached: false,
2024
- requiredVersion: sharedInfo.requiredVersion || tag
2061
+ requiredVersion: scopeType === "strict" ? tag : sharedInfo.requiredVersion || tag
2025
2062
  };
2026
- const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2027
- if (scopeType === "strict") {
2028
- action = "share";
2029
- remote.requiredVersion = tag;
2030
- }
2031
2063
  const cached2 = ports.sharedExternalsRepo.tryGet(sharedInfo.packageName, sharedInfo.shareScope).orElse({ dirty: false, versions: [] });
2032
- const matchingVersion = cached2.versions.find((version) => version.tag === sharedInfo.version);
2033
- let dirty = cached2.dirty;
2034
- if (!!matchingVersion) {
2035
- if (remote.strictVersion && matchingVersion.remotes[0].requiredVersion !== remote.requiredVersion) {
2036
- const errorMsg = `[${remoteName}][${sharedInfo.packageName}@${sharedInfo.version}] Required version-range '${remote.requiredVersion}' does not match cached version-range '${matchingVersion.remotes[0].requiredVersion}'`;
2064
+ return {
2065
+ tag,
2066
+ remote,
2067
+ cached: cached2,
2068
+ scopeType,
2069
+ assertSameVersionCompatibility(matchingVersion) {
2070
+ if (!remote.strictVersion) return;
2071
+ if (matchingVersion.remotes[0].requiredVersion === remote.requiredVersion) return;
2072
+ const errorMsg = `[${remoteEntry.name}][${sharedInfo.packageName}@${sharedInfo.version}] Required version-range '${remote.requiredVersion}' does not match cached version-range '${matchingVersion.remotes[0].requiredVersion}'`;
2037
2073
  if (config.strict.strictExternalSameVersionCompatibility) {
2038
- config.log.error(2, errorMsg);
2074
+ config.log.error(logStep, errorMsg);
2039
2075
  throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2040
2076
  }
2041
- config.log.warn(2, errorMsg);
2077
+ config.log.warn(logStep, errorMsg);
2078
+ },
2079
+ commit() {
2080
+ ports.sharedExternalsRepo.addOrUpdate(
2081
+ sharedInfo.packageName,
2082
+ {
2083
+ dirty: cached2.dirty,
2084
+ versions: cached2.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
2085
+ },
2086
+ sharedInfo.shareScope
2087
+ );
2042
2088
  }
2089
+ };
2090
+ }
2091
+ }
2092
+
2093
+ // src/lib/core/2.app/steps/process-remote-entries.ts
2094
+ function createProcessRemoteEntries(config, ports) {
2095
+ const storeRemoteEntry = createStoreRemoteEntry(config, ports, 2);
2096
+ return (remoteEntries) => {
2097
+ try {
2098
+ remoteEntries.forEach((remoteEntry) => storeRemoteEntry(remoteEntry, addSharedExternal));
2099
+ return Promise.resolve(remoteEntries);
2100
+ } catch (e) {
2101
+ return Promise.reject(e);
2102
+ }
2103
+ };
2104
+ function addSharedExternal(remoteEntry, _sharedInfo, {
2105
+ tag,
2106
+ remote,
2107
+ cached: cached2,
2108
+ scopeType,
2109
+ assertSameVersionCompatibility,
2110
+ commit
2111
+ }) {
2112
+ const matchingVersion = cached2.versions.find((version) => version.tag === tag);
2113
+ if (matchingVersion) {
2114
+ assertSameVersionCompatibility(matchingVersion);
2043
2115
  if (!matchingVersion.host && !!remoteEntry?.host) {
2044
2116
  matchingVersion.host = true;
2045
2117
  matchingVersion.remotes.unshift(remote);
2046
2118
  } else matchingVersion.remotes.push(remote);
2047
2119
  } else {
2048
- if (scopeType !== "strict") dirty = true;
2049
- cached2.versions.push({ tag, action, host: !!remoteEntry?.host, remotes: [remote] });
2120
+ if (scopeType !== "strict") cached2.dirty = true;
2121
+ cached2.versions.push({
2122
+ tag,
2123
+ action: scopeType === "strict" ? "share" : "skip",
2124
+ host: !!remoteEntry?.host,
2125
+ remotes: [remote]
2126
+ });
2050
2127
  }
2051
- ports.sharedExternalsRepo.addOrUpdate(
2052
- sharedInfo.packageName,
2053
- {
2054
- dirty,
2055
- versions: cached2.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
2056
- },
2057
- sharedInfo.shareScope
2058
- );
2059
- }
2060
- function addScopedExternal(scope, sharedInfo) {
2061
- ports.scopedExternalsRepo.addExternal(scope, sharedInfo.packageName, {
2062
- tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
2063
- file: sharedInfo.outFileName,
2064
- bundle: sharedInfo.bundle
2065
- });
2128
+ commit();
2066
2129
  }
2067
2130
  }
2068
2131
 
2069
- // src/lib/2.app/flows/init/determine-shared-externals.ts
2132
+ // src/lib/core/2.app/steps/determine-shared-externals.ts
2070
2133
  function createDetermineSharedExternals(config, ports) {
2071
2134
  return () => {
2072
2135
  for (const shareScope of ports.sharedExternalsRepo.getScopes()) {
@@ -2143,7 +2206,7 @@ function createDetermineSharedExternals(config, ports) {
2143
2206
  }
2144
2207
  }
2145
2208
 
2146
- // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@5.9.3/node_modules/@softarc/native-federation/src/lib/domain/core/build-notification-options.contract.js
2209
+ // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@6.0.3/node_modules/@softarc/native-federation/src/lib/domain/core/build-notification-options.contract.js
2147
2210
  var BuildNotificationType;
2148
2211
  (function(BuildNotificationType2) {
2149
2212
  BuildNotificationType2["COMPLETED"] = "federation-rebuild-complete";
@@ -2151,7 +2214,7 @@ var BuildNotificationType;
2151
2214
  BuildNotificationType2["CANCELLED"] = "federation-rebuild-cancelled";
2152
2215
  })(BuildNotificationType || (BuildNotificationType = {}));
2153
2216
 
2154
- // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@5.9.3/node_modules/@softarc/native-federation/src/lib/domain/core/chunk.js
2217
+ // node_modules/.pnpm/@softarc+native-federation@4.1.3_typescript@6.0.3/node_modules/@softarc/native-federation/src/lib/domain/core/chunk.js
2155
2218
  var CHUNK_PREFIX = "@nf-internal";
2156
2219
  function toChunkImport(fileName) {
2157
2220
  if (fileName.startsWith("./")) {
@@ -2161,7 +2224,7 @@ function toChunkImport(fileName) {
2161
2224
  return CHUNK_PREFIX + "/" + packageName;
2162
2225
  }
2163
2226
 
2164
- // src/lib/2.app/flows/init/generate-import-map.ts
2227
+ // src/lib/core/2.app/steps/generate-import-map.ts
2165
2228
  function createGenerateImportMap(config, ports) {
2166
2229
  return () => {
2167
2230
  const importMap = { imports: {} };
@@ -2186,7 +2249,12 @@ function createGenerateImportMap(config, ports) {
2186
2249
  });
2187
2250
  addToScope(importMap, remote.scopeUrl, createScopeModules(externals, remote.scopeUrl));
2188
2251
  for (const version of Object.values(externals)) {
2189
- addIntegrity(importMap, join(remote.scopeUrl, version.file), remoteName, version.file);
2252
+ addIntegrity(
2253
+ importMap,
2254
+ join(remote.scopeUrl, version.file),
2255
+ remoteName,
2256
+ version.file
2257
+ );
2190
2258
  }
2191
2259
  Object.values(externals).filter((e) => !!e.bundle).forEach((e) => registerBundleChunks(chunkBundles, remoteName, e.bundle));
2192
2260
  }
@@ -2395,7 +2463,7 @@ function createGenerateImportMap(config, ports) {
2395
2463
  }
2396
2464
  }
2397
2465
 
2398
- // src/lib/2.app/flows/init/commit-changes.ts
2466
+ // src/lib/core/2.app/steps/commit-changes.ts
2399
2467
  function createCommitChanges(config, ports) {
2400
2468
  return (importMap) => Promise.resolve(importMap).then(addToBrowser).then(persistRepositoryChanges);
2401
2469
  function addToBrowser(importMap) {
@@ -2412,7 +2480,7 @@ function createCommitChanges(config, ports) {
2412
2480
  }
2413
2481
  }
2414
2482
 
2415
- // src/lib/2.app/flows/init/expose-module-loader.ts
2483
+ // src/lib/core/2.app/steps/expose-module-loader.ts
2416
2484
  function createExposeModuleLoader(config, ports) {
2417
2485
  const loadRemoteModule = (remoteName, exposedModule) => {
2418
2486
  try {
@@ -2438,42 +2506,137 @@ function createExposeModuleLoader(config, ports) {
2438
2506
  return () => Promise.resolve(loadRemoteModule);
2439
2507
  }
2440
2508
 
2441
- // src/lib/5.di/flows/init.factory.ts
2442
- var createInitDrivers = ({
2443
- config,
2444
- adapters
2445
- }) => ({
2446
- getRemoteEntries: createGetRemoteEntries(config, adapters),
2447
- processRemoteEntries: createProcessRemoteEntries(config, adapters),
2448
- determineSharedExternals: createDetermineSharedExternals(config, adapters),
2449
- generateImportMap: createGenerateImportMap(config, adapters),
2450
- commitChanges: createCommitChanges(config, adapters),
2451
- exposeModuleLoader: createExposeModuleLoader(config, adapters)
2452
- });
2453
- var INIT_FLOW_FACTORY = ({
2454
- config,
2455
- adapters
2456
- }) => {
2457
- const flow = createInitDrivers({ config, adapters });
2458
- return {
2459
- flow,
2460
- adapters,
2461
- config
2462
- };
2463
- };
2464
- var createInitFlow = ({
2465
- flow,
2466
- adapters,
2467
- config
2468
- }) => {
2469
- return (remotesOrManifestUrl) => flow.getRemoteEntries(remotesOrManifestUrl).then(flow.processRemoteEntries).then(flow.determineSharedExternals).then(flow.generateImportMap).then(flow.commitChanges).then(flow.exposeModuleLoader).then((loadRemoteModule) => ({
2470
- config,
2471
- adapters,
2472
- loadRemoteModule
2473
- }));
2509
+ // src/lib/core/2.app/steps/get-remote-entry.ts
2510
+ var normalizeRemoteRef = (remote) => {
2511
+ if (!remote) return {};
2512
+ if (typeof remote === "string") return { name: remote };
2513
+ return remote;
2474
2514
  };
2515
+ function createGetRemoteEntry(config, ports) {
2516
+ return async (remoteEntryUrl, remote) => {
2517
+ const { name: remoteName, integrity } = normalizeRemoteRef(remote);
2518
+ if (!!remoteName && shouldSkipCachedRemote(remoteEntryUrl, remoteName)) {
2519
+ config.log.debug(7, `Found remote '${remoteName}' in storage, omitting fetch.`);
2520
+ return Optional.empty();
2521
+ }
2522
+ try {
2523
+ const remoteEntry = integrity ? await ports.remoteEntryProvider.provide(remoteEntryUrl, { integrity }) : await ports.remoteEntryProvider.provide(remoteEntryUrl);
2524
+ config.log.debug(
2525
+ 7,
2526
+ `[${remoteEntry.name}] Fetched from '${remoteEntry.url}', exposing: ${JSON.stringify(remoteEntry.exposes)}`
2527
+ );
2528
+ if (!!remoteName && remoteEntry.name !== remoteName) {
2529
+ const errorMsg = `Fetched remote '${remoteEntry.name}' does not match requested '${remoteName}'.`;
2530
+ if (config.strict.strictRemoteEntry) {
2531
+ config.log.error(7, errorMsg);
2532
+ throw new NFError("Could not fetch remote entry");
2533
+ }
2534
+ config.log.warn(7, errorMsg + " Omitting expected name.");
2535
+ }
2536
+ if (ports.remoteInfoRepo.contains(remoteEntry.name)) {
2537
+ remoteEntry.override = true;
2538
+ config.log.debug(7, `Overriding existing remote '${remoteName}' with '${remoteEntryUrl}'.`);
2539
+ }
2540
+ return Optional.of(checkForSSE(remoteEntry));
2541
+ } catch (error) {
2542
+ config.log.error(
2543
+ 7,
2544
+ `[${remoteName ?? "unknown"}] Could not fetch remoteEntry from ${remoteEntryUrl}.`,
2545
+ error
2546
+ );
2547
+ return Promise.reject(
2548
+ new NFError(`[${remoteName ?? remoteEntryUrl}] Could not fetch remoteEntry.`)
2549
+ );
2550
+ }
2551
+ };
2552
+ function shouldSkipCachedRemote(remoteEntryUrl, remoteName) {
2553
+ return ports.remoteInfoRepo.tryGet(remoteName).map(
2554
+ (cachedRemoteInfo) => config.profile.overrideCachedRemotes !== "always" || !config.profile.overrideCachedRemotesIfURLMatches && remoteEntryUrl === join(cachedRemoteInfo.scopeUrl, "remoteEntry.json")
2555
+ ).orElse(false);
2556
+ }
2557
+ function checkForSSE(entry) {
2558
+ if (config.sse) {
2559
+ if (entry.buildNotificationsEndpoint) {
2560
+ ports.sse.watchRemoteBuilds(
2561
+ join(getScope(entry.url), entry.buildNotificationsEndpoint)
2562
+ );
2563
+ config.log.debug(7, `Registered SSE endpoint of remote '${entry.name}' `);
2564
+ } else {
2565
+ config.log.debug(7, `Remote ${entry.name} has no defined 'buildNotificationsEndpoint'`);
2566
+ }
2567
+ }
2568
+ return entry;
2569
+ }
2570
+ }
2571
+
2572
+ // src/lib/core/2.app/steps/update-cache.ts
2573
+ function createUpdateCache(config, ports) {
2574
+ const storeRemoteEntry = createStoreRemoteEntry(config, ports, 8);
2575
+ return (remoteEntry) => {
2576
+ try {
2577
+ const actions = {};
2578
+ storeRemoteEntry(remoteEntry, (entry, external, ctx) => {
2579
+ const { action, sharedVersion } = resolveSharedExternal(entry, external, ctx);
2580
+ actions[external.packageName] = { action };
2581
+ if (action === "skip" && external.shareScope && sharedVersion?.remotes[0]?.file) {
2582
+ actions[external.packageName].override = resolveOverrideUrl(
2583
+ entry,
2584
+ external,
2585
+ sharedVersion
2586
+ );
2587
+ }
2588
+ });
2589
+ return Promise.resolve({ entry: remoteEntry, actions });
2590
+ } catch (error) {
2591
+ return Promise.reject(error);
2592
+ }
2593
+ };
2594
+ function resolveSharedExternal(remoteEntry, sharedInfo, {
2595
+ tag,
2596
+ remote,
2597
+ cached: cached2,
2598
+ scopeType,
2599
+ assertSameVersionCompatibility,
2600
+ commit
2601
+ }) {
2602
+ let action = scopeType === "strict" ? "share" : "skip";
2603
+ const sharedVersion = cached2.versions.find((c) => c.action === "share");
2604
+ const isCompatible = !sharedVersion || ports.versionCheck.isCompatible(sharedVersion.tag, remote.requiredVersion);
2605
+ if (action === "skip" && !isCompatible && remote.strictVersion) {
2606
+ action = "scope";
2607
+ const errorMsg = `[${sharedInfo.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}] ${sharedInfo.packageName}@${sharedInfo.version} Is not compatible with existing ${sharedInfo.packageName}@${sharedVersion.tag} requiredRange '${sharedVersion.remotes[0]?.requiredVersion}'`;
2608
+ if (config.strict.strictExternalCompatibility) {
2609
+ config.log.error(8, errorMsg);
2610
+ throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2611
+ }
2612
+ config.log.warn(8, errorMsg);
2613
+ }
2614
+ const matchingVersion = cached2.versions.find((cached3) => cached3.tag === tag);
2615
+ if (matchingVersion) {
2616
+ assertSameVersionCompatibility(matchingVersion);
2617
+ matchingVersion.remotes.push(remote);
2618
+ } else {
2619
+ if (!sharedVersion) action = "share";
2620
+ remote.cached = action !== "skip";
2621
+ cached2.versions.push({ tag, action, host: false, remotes: [remote] });
2622
+ }
2623
+ commit();
2624
+ return { action, sharedVersion };
2625
+ }
2626
+ function resolveOverrideUrl(remoteEntry, external, sharedVersion) {
2627
+ return ports.remoteInfoRepo.tryGet(sharedVersion.remotes[0].name).map((remote) => join(remote.scopeUrl, sharedVersion.remotes[0].file)).orThrow(() => {
2628
+ config.log.error(
2629
+ 8,
2630
+ `[${external.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}][${external.packageName}@${external.version}][override] Remote name not found in cache.`
2631
+ );
2632
+ return new NFError(
2633
+ `Could not find override url from remote ${sharedVersion.remotes[0].name}`
2634
+ );
2635
+ });
2636
+ }
2637
+ }
2475
2638
 
2476
- // src/lib/2.app/flows/dynamic-init/convert-to-import-map.ts
2639
+ // src/lib/core/2.app/steps/convert-to-import-map.ts
2477
2640
  function createConvertToImportMap({ log }, ports) {
2478
2641
  return ({ entry, actions }) => {
2479
2642
  const importMap = { imports: {} };
@@ -2570,242 +2733,78 @@ function createConvertToImportMap({ log }, ports) {
2570
2733
  }
2571
2734
  }
2572
2735
 
2573
- // src/lib/2.app/flows/dynamic-init/get-remote-entry.ts
2574
- var normalizeRemoteRef = (remote) => {
2575
- if (!remote) return {};
2576
- if (typeof remote === "string") return { name: remote };
2577
- return remote;
2578
- };
2579
- function createGetRemoteEntry(config, ports) {
2580
- return async (remoteEntryUrl, remote) => {
2581
- const { name: remoteName, integrity } = normalizeRemoteRef(remote);
2582
- if (!!remoteName && shouldSkipCachedRemote(remoteEntryUrl, remoteName)) {
2583
- config.log.debug(7, `Found remote '${remoteName}' in storage, omitting fetch.`);
2584
- return Optional.empty();
2585
- }
2586
- try {
2587
- const remoteEntry = integrity ? await ports.remoteEntryProvider.provide(remoteEntryUrl, { integrity }) : await ports.remoteEntryProvider.provide(remoteEntryUrl);
2588
- config.log.debug(
2589
- 7,
2590
- `[${remoteEntry.name}] Fetched from '${remoteEntry.url}', exposing: ${JSON.stringify(remoteEntry.exposes)}`
2591
- );
2592
- if (!!remoteName && remoteEntry.name !== remoteName) {
2593
- const errorMsg = `Fetched remote '${remoteEntry.name}' does not match requested '${remoteName}'.`;
2594
- if (config.strict.strictRemoteEntry) {
2595
- config.log.error(7, errorMsg);
2596
- throw new NFError("Could not fetch remote entry");
2597
- }
2598
- config.log.warn(7, errorMsg + " Omitting expected name.");
2599
- }
2600
- if (ports.remoteInfoRepo.contains(remoteEntry.name)) {
2601
- remoteEntry.override = true;
2602
- config.log.debug(7, `Overriding existing remote '${remoteName}' with '${remoteEntryUrl}'.`);
2603
- }
2604
- return Optional.of(checkForSSE(remoteEntry));
2605
- } catch (error) {
2606
- config.log.error(
2607
- 7,
2608
- `[${remoteName ?? "unknown"}] Could not fetch remoteEntry from ${remoteEntryUrl}.`,
2609
- error
2610
- );
2611
- return Promise.reject(
2612
- new NFError(`[${remoteName ?? remoteEntryUrl}] Could not fetch remoteEntry.`)
2613
- );
2614
- }
2615
- };
2616
- function shouldSkipCachedRemote(remoteEntryUrl, remoteName) {
2617
- return ports.remoteInfoRepo.tryGet(remoteName).map(
2618
- (cachedRemoteInfo) => config.profile.overrideCachedRemotes !== "always" || !config.profile.overrideCachedRemotesIfURLMatches && remoteEntryUrl === join(cachedRemoteInfo.scopeUrl, "remoteEntry.json")
2619
- ).orElse(false);
2620
- }
2621
- function checkForSSE(entry) {
2622
- if (config.sse) {
2623
- if (entry.buildNotificationsEndpoint) {
2624
- ports.sse.watchRemoteBuilds(
2625
- join(getScope(entry.url), entry.buildNotificationsEndpoint)
2626
- );
2627
- config.log.debug(7, `Registered SSE endpoint of remote '${entry.name}' `);
2628
- } else {
2629
- config.log.debug(7, `Remote ${entry.name} has no defined 'buildNotificationsEndpoint'`);
2630
- }
2631
- }
2632
- return entry;
2633
- }
2634
- }
2635
-
2636
- // src/lib/2.app/flows/dynamic-init/update-cache.ts
2637
- function createUpdateCache(config, ports) {
2638
- return (remoteEntry) => {
2639
- try {
2640
- if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
2641
- addRemoteInfoToStorage(remoteEntry);
2642
- const actions = mergeExternalsIntoStorage(remoteEntry);
2643
- addSharedChunksToStorage(remoteEntry);
2644
- return Promise.resolve({ entry: remoteEntry, actions });
2645
- } catch (error) {
2646
- return Promise.reject(error);
2647
- }
2648
- };
2649
- function removeCachedRemoteEntry(remoteEntry) {
2650
- ports.remoteInfoRepo.remove(remoteEntry.name);
2651
- ports.scopedExternalsRepo.remove(remoteEntry.name);
2652
- ports.sharedExternalsRepo.removeFromAllScopes(remoteEntry.name);
2653
- }
2654
- function addRemoteInfoToStorage({ name, url, exposes }) {
2655
- ports.remoteInfoRepo.addOrUpdate(name, {
2656
- scopeUrl: getScope(url),
2657
- exposes: Object.values(exposes ?? []).map((m) => ({
2658
- moduleName: m.key,
2659
- file: m.outFileName
2660
- }))
2661
- });
2662
- }
2663
- function mergeExternalsIntoStorage(remoteEntry) {
2664
- const actions = {};
2665
- remoteEntry.shared.forEach((external) => {
2666
- if (!external.version || !ports.versionCheck.isValidSemver(external.version)) {
2667
- const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
2668
- if (config.strict.strictExternalVersion) {
2669
- config.log.error(8, errorMsg);
2670
- throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2671
- }
2672
- config.log.warn(8, errorMsg);
2673
- }
2674
- if (external.singleton) {
2675
- const { action, sharedVersion } = addSharedExternal(remoteEntry.name, external);
2676
- actions[external.packageName] = { action };
2677
- if (action === "skip" && external.shareScope && sharedVersion?.remotes[0]?.file) {
2678
- actions[external.packageName].override = ports.remoteInfoRepo.tryGet(sharedVersion.remotes[0].name).map((remote) => join(remote.scopeUrl, sharedVersion.remotes[0].file)).orThrow(() => {
2679
- config.log.error(
2680
- 8,
2681
- `[${external.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}][${external.packageName}@${external.version}][override] Remote name not found in cache.`
2682
- );
2683
- return new NFError(
2684
- `Could not find override url from remote ${sharedVersion.remotes[0].name}`
2685
- );
2686
- });
2687
- }
2688
- } else {
2689
- addScopedExternal(remoteEntry.name, external);
2690
- }
2691
- });
2692
- return actions;
2693
- }
2694
- function addSharedChunksToStorage(remoteEntry) {
2695
- if (!remoteEntry.chunks) return;
2696
- config.log.debug(
2697
- 8,
2698
- `Adding chunks for remote "${remoteEntry.name}", bundles: [${Object.keys(remoteEntry.chunks).join(", ")}]`
2699
- );
2700
- Object.entries(remoteEntry.chunks).forEach(([bundleName, chunks]) => {
2701
- ports.sharedChunksRepo.addOrReplace(remoteEntry.name, bundleName, chunks);
2702
- });
2703
- }
2704
- function addSharedExternal(remoteName, sharedInfo) {
2705
- const cached2 = ports.sharedExternalsRepo.tryGet(sharedInfo.packageName, sharedInfo.shareScope).orElse({ dirty: false, versions: [] });
2706
- let action = "skip";
2707
- const tag = sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion);
2708
- const remote = {
2709
- file: sharedInfo.outFileName,
2710
- strictVersion: sharedInfo.strictVersion,
2711
- requiredVersion: sharedInfo.requiredVersion || tag,
2712
- name: remoteName,
2713
- bundle: sharedInfo.bundle,
2714
- cached: false
2715
- };
2716
- const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2717
- if (scopeType === "strict") {
2718
- remote.requiredVersion = tag;
2719
- action = "share";
2720
- }
2721
- const sharedVersion = cached2.versions.find((c) => c.action === "share");
2722
- const isCompatible = !sharedVersion || ports.versionCheck.isCompatible(sharedVersion.tag, remote.requiredVersion);
2723
- if (action === "skip" && !isCompatible && remote.strictVersion) {
2724
- action = "scope";
2725
- 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}'`;
2726
- if (config.strict.strictExternalCompatibility) {
2727
- config.log.error(8, errorMsg);
2728
- throw new NFError(`Could not process remote '${remoteName}'`);
2729
- }
2730
- config.log.warn(8, errorMsg);
2731
- }
2732
- const matchingVersion = cached2.versions.find((cached3) => cached3.tag === tag);
2733
- if (!!matchingVersion) {
2734
- if (remote.strictVersion && matchingVersion.remotes[0].requiredVersion !== remote.requiredVersion) {
2735
- const errorMsg = `[${remoteName}][${sharedInfo.packageName}@${sharedInfo.version}] Required version '${remote.requiredVersion}' does not match existing '${matchingVersion.remotes[0].requiredVersion}'`;
2736
- if (config.strict.strictExternalCompatibility) {
2737
- config.log.error(8, errorMsg);
2738
- throw new NFError(`Could not process remote '${remoteName}'`);
2739
- }
2740
- config.log.warn(8, errorMsg);
2741
- }
2742
- matchingVersion.remotes.push(remote);
2743
- } else {
2744
- if (!sharedVersion) action = "share";
2745
- remote.cached = action !== "skip";
2746
- cached2.versions.push({ tag, action, host: false, remotes: [remote] });
2747
- }
2748
- ports.sharedExternalsRepo.addOrUpdate(
2749
- sharedInfo.packageName,
2750
- {
2751
- dirty: cached2.dirty,
2752
- versions: cached2.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
2753
- },
2754
- sharedInfo.shareScope
2755
- );
2756
- return { action, sharedVersion };
2757
- }
2758
- function addScopedExternal(remoteName, sharedInfo) {
2759
- ports.scopedExternalsRepo.addExternal(remoteName, sharedInfo.packageName, {
2760
- tag: sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion),
2761
- file: sharedInfo.outFileName,
2762
- bundle: sharedInfo.bundle
2763
- });
2764
- }
2765
- }
2766
-
2767
- // src/lib/5.di/flows/dynamic-init.factory.ts
2768
- var createDynamicInitDrivers = ({
2736
+ // src/lib/core/5.di/init.factory.ts
2737
+ var createInitDrivers = ({
2769
2738
  config,
2770
2739
  adapters
2771
2740
  }) => ({
2741
+ getRemoteEntries: createGetRemoteEntries(config, adapters),
2742
+ processRemoteEntries: createProcessRemoteEntries(config, adapters),
2743
+ determineSharedExternals: createDetermineSharedExternals(config, adapters),
2744
+ generateImportMap: createGenerateImportMap(config, adapters),
2745
+ commitChanges: createCommitChanges(config, adapters),
2746
+ exposeModuleLoader: createExposeModuleLoader(config, adapters),
2772
2747
  getRemoteEntry: createGetRemoteEntry(config, adapters),
2773
2748
  updateCache: createUpdateCache(config, adapters),
2774
- convertToImportMap: createConvertToImportMap(config, adapters),
2775
- commitChanges: createCommitChanges(config, adapters)
2749
+ convertToImportMap: createConvertToImportMap(config, adapters)
2776
2750
  });
2777
- var DYNAMIC_INIT_FLOW_FACTORY = ({
2751
+ var INIT_FLOW_FACTORY = ({
2778
2752
  config,
2779
2753
  adapters
2780
2754
  }) => {
2781
- const flow = createDynamicInitDrivers({ config, adapters });
2755
+ const flow = createInitDrivers({ config, adapters });
2782
2756
  return {
2783
2757
  flow,
2784
2758
  adapters,
2785
2759
  config
2786
2760
  };
2787
2761
  };
2788
- var createDynamicInitFlow = ({
2789
- flow,
2762
+
2763
+ // src/lib/core/5.di/federation-result.factory.ts
2764
+ var createStateDump = (config, adapters) => (msg) => config.log.debug(0, msg, {
2765
+ remotes: { ...adapters.remoteInfoRepo.getAll() },
2766
+ "shared-externals": adapters.sharedExternalsRepo.getScopes({ includeGlobal: true }).reduce(
2767
+ (acc, scope) => ({ ...acc, [scope]: adapters.sharedExternalsRepo.getFromScope(scope) }),
2768
+ {}
2769
+ ),
2770
+ "scoped-externals": adapters.scopedExternalsRepo.getAll()
2771
+ });
2772
+ var createFederationResult = ({
2773
+ config,
2790
2774
  adapters,
2791
- config
2775
+ loadRemoteModule,
2776
+ initRemoteEntryFlow,
2777
+ afterInitRemoteEntry
2792
2778
  }) => {
2793
- const processDynamicRemoteEntry = async (remoteEntry) => {
2794
- return flow.updateCache(remoteEntry).then(flow.convertToImportMap).then(flow.commitChanges);
2779
+ const stateDump = createStateDump(config, adapters);
2780
+ const initRemoteEntry = async (remoteEntryUrl, remote) => {
2781
+ const remoteName = typeof remote === "string" ? remote : remote?.name;
2782
+ return initRemoteEntryFlow(remoteEntryUrl, remote).catch((e) => {
2783
+ stateDump(`[dynamic-init][${remoteName ?? remoteEntryUrl}] STATE DUMP`);
2784
+ if (config.strict.strictRemoteEntry) return Promise.reject(e);
2785
+ else console.warn("Failed to initialize remote entry, continuing anyway.");
2786
+ return Promise.resolve();
2787
+ }).then(() => afterInitRemoteEntry?.()).then(() => result);
2795
2788
  };
2796
- const initRemoteEntry = (remoteEntryUrl, remote) => flow.getRemoteEntry(remoteEntryUrl, remote).then((entry) => entry.map(processDynamicRemoteEntry).orElse(Promise.resolve())).then(() => ({
2789
+ const result = {
2797
2790
  config,
2798
2791
  adapters,
2792
+ loadRemoteModule,
2793
+ load: loadRemoteModule,
2794
+ as: () => ({
2795
+ loadRemoteModule,
2796
+ load: loadRemoteModule
2797
+ }),
2799
2798
  initRemoteEntry
2800
- }));
2801
- return initRemoteEntry;
2799
+ };
2800
+ return result;
2802
2801
  };
2803
2802
 
2804
- // src/lib/3.adapters/node/node-loader.client.ts
2803
+ // src/lib/node/adapters/node-loader.client.ts
2805
2804
  import { register } from "node:module";
2806
2805
  import { MessageChannel } from "node:worker_threads";
2807
2806
 
2808
- // src/lib/3.adapters/node/loader-url.ts
2807
+ // src/lib/node/adapters/loader-url.ts
2809
2808
  import { createRequire } from "node:module";
2810
2809
  import { pathToFileURL } from "node:url";
2811
2810
  var getLoaderUrl = () => {
@@ -2823,7 +2822,7 @@ var getLoaderUrl = () => {
2823
2822
  }
2824
2823
  };
2825
2824
 
2826
- // src/lib/3.adapters/node/node-loader.client.ts
2825
+ // src/lib/node/adapters/node-loader.client.ts
2827
2826
  var NODE_LOADER_CLIENT_ACK_TIMEOUT_MS = 1e4;
2828
2827
  var cached = null;
2829
2828
  var createClient = () => {
@@ -2838,7 +2837,9 @@ var createClient = () => {
2838
2837
  const omitBridged = (map) => {
2839
2838
  if (bridged.size === 0) return map;
2840
2839
  const drop = (imports) => Object.fromEntries(Object.entries(imports).filter(([specifier]) => !bridged.has(specifier)));
2841
- const scopes = map.scopes ? Object.fromEntries(Object.entries(map.scopes).map(([scope, imports]) => [scope, drop(imports)])) : map.scopes;
2840
+ const scopes = map.scopes ? Object.fromEntries(
2841
+ Object.entries(map.scopes).map(([scope, imports]) => [scope, drop(imports)])
2842
+ ) : map.scopes;
2842
2843
  return { ...map, imports: drop(map.imports), ...scopes ? { scopes } : {} };
2843
2844
  };
2844
2845
  const postAndAwaitAck = (message, ackType) => new Promise((resolve, reject) => {
@@ -2891,7 +2892,7 @@ var getNodeLoaderClient = () => {
2891
2892
  return cached;
2892
2893
  };
2893
2894
 
2894
- // src/lib/4.config/import-map/use-node.ts
2895
+ // src/lib/node/use-node.ts
2895
2896
  var useNodeImportMap = () => {
2896
2897
  const nodeLoader = getNodeLoaderClient();
2897
2898
  return {
@@ -2907,7 +2908,7 @@ var useNodeImportMap = () => {
2907
2908
  };
2908
2909
  };
2909
2910
 
2910
- // src/lib/4.config/import-map/resolve-host-instances.ts
2911
+ // src/lib/node/resolve-host-instances.ts
2911
2912
  var matches = (specifier, patterns) => patterns.some((p) => specifier === p || specifier.startsWith(p));
2912
2913
  var isAuto = (option) => option === "all" || typeof option === "object" && option !== null && ("include" in option || "exclude" in option || "load" in option);
2913
2914
  var resolveHostInstances = async (option, deps) => {
@@ -2926,7 +2927,9 @@ var resolveHostInstances = async (option, deps) => {
2926
2927
  const integrity = typeof hostRemoteEntry === "string" ? void 0 : hostRemoteEntry.integrity;
2927
2928
  const entry = await deps.remoteEntryProvider.provide(url, { integrity });
2928
2929
  const load = auto.load ?? ((specifier) => import(specifier));
2929
- const specifiers = [...new Set((entry.shared ?? []).filter((s) => s.singleton).map((s) => s.packageName))].filter((s) => auto.include ? matches(s, auto.include) : true).filter((s) => auto.exclude ? !matches(s, auto.exclude) : true);
2930
+ const specifiers = [
2931
+ ...new Set((entry.shared ?? []).filter((s) => s.singleton).map((s) => s.packageName))
2932
+ ].filter((s) => auto.include ? matches(s, auto.include) : true).filter((s) => auto.exclude ? !matches(s, auto.exclude) : true);
2930
2933
  const map = {};
2931
2934
  for (const specifier of specifiers) {
2932
2935
  try {
@@ -2939,11 +2942,14 @@ var resolveHostInstances = async (option, deps) => {
2939
2942
  );
2940
2943
  }
2941
2944
  }
2942
- deps.log.debug(0, `[native-federation] hostInstances bridged: ${Object.keys(map).join(", ") || "(none)"}`);
2945
+ deps.log.debug(
2946
+ 0,
2947
+ `[native-federation] hostInstances bridged: ${Object.keys(map).join(", ") || "(none)"}`
2948
+ );
2943
2949
  return map;
2944
2950
  };
2945
2951
 
2946
- // src/lib/utils/node/to-url.ts
2952
+ // src/lib/node/utils/to-url.ts
2947
2953
  import { pathToFileURL as pathToFileURL2 } from "node:url";
2948
2954
  var URL_SCHEME = /^[a-z][a-z0-9+\-.]*:/i;
2949
2955
  var toUrl = (pathOrUrl) => URL_SCHEME.test(pathOrUrl) ? pathOrUrl : pathToFileURL2(pathOrUrl).href;
@@ -2953,7 +2959,7 @@ var normalizeHostRemoteEntry = (hostRemoteEntry) => {
2953
2959
  return { ...hostRemoteEntry, url: toUrl(hostRemoteEntry.url) };
2954
2960
  };
2955
2961
 
2956
- // src/lib/init-federation.node.ts
2962
+ // src/lib/node/init-federation.node.ts
2957
2963
  var HOST_INSTANCES_GLOBAL = "__NF_HOST_INSTANCES__";
2958
2964
  var buildNodeAdapters = (config) => ({
2959
2965
  versionCheck: createVersionCheck(),
@@ -2995,45 +3001,19 @@ var initNodeFederation = (remotesOrManifestUrl, options = {}) => {
2995
3001
  );
2996
3002
  await nodeConfig.setHostInstancesFn(keys);
2997
3003
  })();
2998
- const stateDump = (msg) => config.log.debug(0, msg, {
2999
- remotes: { ...adapters.remoteInfoRepo.getAll() },
3000
- "shared-externals": adapters.sharedExternalsRepo.getScopes({ includeGlobal: true }).reduce(
3001
- (acc, scope) => ({ ...acc, [scope]: adapters.sharedExternalsRepo.getFromScope(scope) }),
3002
- {}
3003
- ),
3004
- "scoped-externals": adapters.scopedExternalsRepo.getAll()
3005
- });
3006
- const initFlow = createInitFlow(INIT_FLOW_FACTORY({ adapters, config }));
3007
- const dynamicInitFlow = createDynamicInitFlow(DYNAMIC_INIT_FLOW_FACTORY({ config, adapters }));
3008
- return hostInstancesReady.then(() => initFlow(remotesOrManifestUrl)).then(({ loadRemoteModule }) => nodeConfig.nodeLoader.ready().then(() => loadRemoteModule)).then((loadRemoteModule) => {
3009
- const output = {
3004
+ const factory = INIT_FLOW_FACTORY({ adapters, config });
3005
+ const initFlow = createInitFlow(factory);
3006
+ const initRemoteEntryFlow = createInitRemoteEntryFlow(factory);
3007
+ return hostInstancesReady.then(() => initFlow(remotesOrManifestUrl)).then(({ loadRemoteModule }) => nodeConfig.nodeLoader.ready().then(() => loadRemoteModule)).then(
3008
+ (loadRemoteModule) => createFederationResult({
3010
3009
  config,
3011
3010
  adapters,
3012
3011
  loadRemoteModule,
3013
- as: () => ({
3014
- loadRemoteModule,
3015
- load: loadRemoteModule
3016
- }),
3017
- load: loadRemoteModule
3018
- };
3019
- const initRemoteEntry = async (remoteEntryUrl, remote) => {
3020
- const remoteName = typeof remote === "string" ? remote : remote?.name;
3021
- return dynamicInitFlow(remoteEntryUrl, remote).catch((e) => {
3022
- stateDump(`[dynamic-init][${remoteName ?? remoteEntryUrl}] STATE DUMP`);
3023
- if (config.strict.strictRemoteEntry) return Promise.reject(e);
3024
- else console.warn("Failed to initialize remote entry, continuing anyway.");
3025
- return Promise.resolve();
3026
- }).then(() => nodeConfig.nodeLoader.ready()).then(() => ({
3027
- ...output,
3028
- initRemoteEntry
3029
- }));
3030
- };
3031
- return {
3032
- ...output,
3033
- initRemoteEntry
3034
- };
3035
- }).catch((e) => {
3036
- stateDump(`[init] STATE DUMP`);
3012
+ initRemoteEntryFlow,
3013
+ afterInitRemoteEntry: () => nodeConfig.nodeLoader.ready()
3014
+ })
3015
+ ).catch((e) => {
3016
+ createStateDump(config, adapters)(`[init] STATE DUMP`);
3037
3017
  return Promise.reject(e);
3038
3018
  });
3039
3019
  };