@softarc/native-federation-orchestrator 4.2.2 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +2 -2
  2. package/fesm2022/@softarc/native-federation-orchestrator.mjs +905 -922
  3. package/fesm2022/@softarc/native-federation-orchestrator.mjs.map +4 -4
  4. package/fesm2022/audit.mjs +2 -2
  5. package/fesm2022/audit.mjs.map +2 -2
  6. package/fesm2022/node.mjs +444 -456
  7. package/fesm2022/node.mjs.map +4 -4
  8. package/fesm2022/options.mjs +17 -15
  9. package/fesm2022/options.mjs.map +3 -3
  10. package/fesm2022/registry.mjs +2 -2
  11. package/fesm2022/registry.mjs.map +3 -3
  12. package/fesm2022/sdk.mjs +2 -2
  13. package/fesm2022/sdk.mjs.map +2 -2
  14. package/init-registry.mjs +1 -1
  15. package/node-loader/loader.mjs +1 -1
  16. package/node-loader/loader.mjs.map +1 -1
  17. package/package.json +2 -5
  18. package/quickstart.mjs +13 -13
  19. package/types/lib/audit/externals-audit.d.ts +4 -0
  20. package/types/lib/{2.app/driver-ports/audit → audit}/for-auditing-externals.port.d.ts +1 -1
  21. package/types/lib/audit.index.d.ts +2 -2
  22. package/types/lib/{2.app → core/2.app}/config/mode.contract.d.ts +1 -0
  23. package/types/lib/{2.app → core/2.app}/driver-ports/init/drivers.contract.d.ts +6 -0
  24. package/types/lib/core/2.app/driver-ports/init/flow.contract.d.ts +14 -0
  25. package/types/lib/{2.app/driver-ports/dynamic-init → core/2.app/driver-ports/init}/for-getting-remote-entry.port.d.ts +1 -1
  26. package/types/lib/{2.app → core/2.app}/driver-ports/init/index.d.ts +3 -0
  27. package/types/lib/{2.app → core/2.app}/driving-ports/for-remote-info-storage.port.d.ts +1 -1
  28. package/types/lib/{2.app → core/2.app}/driving-ports/for-scoped-externals-storage.port.d.ts +1 -1
  29. package/types/lib/{2.app → core/2.app}/driving-ports/for-shared-chunks-storage.port.d.ts +1 -1
  30. package/types/lib/{2.app → core/2.app}/driving-ports/for-shared-externals-storage.port.d.ts +1 -1
  31. package/types/lib/core/2.app/flows/init-remote-entry.flow.d.ts +4 -0
  32. package/types/lib/core/2.app/flows/init.flow.d.ts +4 -0
  33. package/types/lib/core/2.app/steps/commit-changes.d.ts +4 -0
  34. package/types/lib/core/2.app/steps/convert-to-import-map.d.ts +4 -0
  35. package/types/lib/core/2.app/steps/determine-shared-externals.d.ts +5 -0
  36. package/types/lib/core/2.app/steps/expose-module-loader.d.ts +4 -0
  37. package/types/lib/core/2.app/steps/generate-import-map.d.ts +5 -0
  38. package/types/lib/core/2.app/steps/get-remote-entries.d.ts +6 -0
  39. package/types/lib/core/2.app/steps/get-remote-entry.d.ts +5 -0
  40. package/types/lib/core/2.app/steps/process-remote-entries.d.ts +5 -0
  41. package/types/lib/core/2.app/steps/store-remote-entry.d.ts +23 -0
  42. package/types/lib/core/2.app/steps/update-cache.d.ts +5 -0
  43. package/types/lib/{3.adapters → core/3.adapters}/browser/sse-handler.d.ts +1 -1
  44. package/types/lib/{4.config → core/4.config}/import-map/trusted-types.d.ts +5 -1
  45. package/types/lib/core/5.di/federation-result.factory.d.ts +12 -0
  46. package/types/lib/core/5.di/init.factory.d.ts +12 -0
  47. package/types/lib/{init-federation.contract.d.ts → core/init-federation.contract.d.ts} +1 -1
  48. package/types/lib/index.d.ts +10 -8
  49. package/types/lib/{3.adapters/node → node/adapters}/fs-manifest-provider.d.ts +1 -1
  50. package/types/lib/{3.adapters/node → node/adapters}/fs-remote-entry-provider.d.ts +1 -1
  51. package/types/lib/{3.adapters/node → node/adapters}/node-loader.client.d.ts +1 -1
  52. package/types/lib/node/adapters/noop-sse.d.ts +3 -0
  53. package/types/lib/{init-federation.node.d.ts → node/init-federation.node.d.ts} +5 -5
  54. package/types/lib/{4.config/import-map → node}/resolve-host-instances.d.ts +3 -3
  55. package/types/lib/{4.config/import-map → node}/use-node.d.ts +2 -2
  56. package/types/lib/{utils/node → node/utils}/to-url.d.ts +1 -1
  57. package/types/lib/node.index.d.ts +5 -5
  58. package/types/lib/options.index.d.ts +5 -5
  59. package/types/lib/registry/for-managing-events.port.d.ts +2 -0
  60. package/types/lib/registry/setup-registry.d.ts +3 -0
  61. package/types/lib/registry.index.d.ts +5 -4
  62. package/types/lib/sdk.index.d.ts +4 -5
  63. package/types/lib/testing/handlers/log.handler.d.ts +3 -0
  64. package/types/lib/utils/clone-entry.d.ts +1 -1
  65. package/types/{init-registry.d.ts → scripts/init-registry.d.ts} +1 -1
  66. package/types/lib/1.domain/registry/index.d.ts +0 -2
  67. package/types/lib/2.app/driver-ports/audit/index.d.ts +0 -1
  68. package/types/lib/2.app/driver-ports/dynamic-init/drivers.contract.d.ts +0 -13
  69. package/types/lib/2.app/driver-ports/dynamic-init/flow.contract.d.ts +0 -8
  70. package/types/lib/2.app/driver-ports/dynamic-init/index.d.ts +0 -5
  71. package/types/lib/2.app/driver-ports/init/flow.contract.d.ts +0 -6
  72. package/types/lib/2.app/driver-ports/registry/for-managing-events.port.d.ts +0 -2
  73. package/types/lib/2.app/flows/audit/externals-audit.d.ts +0 -4
  74. package/types/lib/2.app/flows/dynamic-init/convert-to-import-map.d.ts +0 -4
  75. package/types/lib/2.app/flows/dynamic-init/get-remote-entry.d.ts +0 -5
  76. package/types/lib/2.app/flows/dynamic-init/update-cache.d.ts +0 -5
  77. package/types/lib/2.app/flows/init/commit-changes.d.ts +0 -4
  78. package/types/lib/2.app/flows/init/determine-shared-externals.d.ts +0 -5
  79. package/types/lib/2.app/flows/init/expose-module-loader.d.ts +0 -4
  80. package/types/lib/2.app/flows/init/generate-import-map.d.ts +0 -5
  81. package/types/lib/2.app/flows/init/get-remote-entries.d.ts +0 -6
  82. package/types/lib/2.app/flows/init/process-remote-entries.d.ts +0 -5
  83. package/types/lib/2.app/flows/registry/setup-registry.d.ts +0 -3
  84. package/types/lib/3.adapters/node/noop-sse.d.ts +0 -3
  85. package/types/lib/5.di/flows/dynamic-init.factory.d.ts +0 -14
  86. package/types/lib/5.di/flows/init.factory.d.ts +0 -14
  87. package/types/lib/6.mocks/handlers/log.handler.d.ts +0 -2
  88. /package/types/lib/{1.domain → core/1.domain}/externals/chunks.contract.d.ts +0 -0
  89. /package/types/lib/{1.domain → core/1.domain}/externals/external.contract.d.ts +0 -0
  90. /package/types/lib/{1.domain → core/1.domain}/externals/version.contract.d.ts +0 -0
  91. /package/types/lib/{1.domain → core/1.domain}/import-map/import-map.contract.d.ts +0 -0
  92. /package/types/lib/{1.domain → core/1.domain}/index.d.ts +0 -0
  93. /package/types/lib/{1.domain → core/1.domain}/remote/remote-info.contract.d.ts +0 -0
  94. /package/types/lib/{1.domain → core/1.domain}/remote/remote-module.contract.d.ts +0 -0
  95. /package/types/lib/{1.domain → core/1.domain}/remote-entry/manifest.contract.d.ts +0 -0
  96. /package/types/lib/{1.domain → core/1.domain}/remote-entry/remote-entry.contract.d.ts +0 -0
  97. /package/types/lib/{2.app → core/2.app}/config/config.contract.d.ts +0 -0
  98. /package/types/lib/{2.app → core/2.app}/config/host.contract.d.ts +0 -0
  99. /package/types/lib/{2.app → core/2.app}/config/import-map.contract.d.ts +0 -0
  100. /package/types/lib/{2.app → core/2.app}/config/index.d.ts +0 -0
  101. /package/types/lib/{2.app → core/2.app}/config/log.contract.d.ts +0 -0
  102. /package/types/lib/{2.app → core/2.app}/config/storage.contract.d.ts +0 -0
  103. /package/types/lib/{2.app → core/2.app}/driver-ports/flow-factory.contract.d.ts +0 -0
  104. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-committing-changes.port.d.ts +0 -0
  105. /package/types/lib/{2.app/driver-ports/dynamic-init → core/2.app/driver-ports/init}/for-converting-to-import-map.d.ts +0 -0
  106. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-determining-shared-externals.port.d.ts +0 -0
  107. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-exposing-module-loader.port.d.ts +0 -0
  108. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-generating-import-map.d.ts +0 -0
  109. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-getting-remote-entries.port.d.ts +0 -0
  110. /package/types/lib/{2.app → core/2.app}/driver-ports/init/for-processing-remote-entries.port.d.ts +0 -0
  111. /package/types/lib/{2.app/driver-ports/dynamic-init → core/2.app/driver-ports/init}/for-updating-cache.d.ts +0 -0
  112. /package/types/lib/{2.app → core/2.app}/driving-ports/driving.contract.d.ts +0 -0
  113. /package/types/lib/{2.app → core/2.app}/driving-ports/for-browser-tasks.d.ts +0 -0
  114. /package/types/lib/{2.app → core/2.app}/driving-ports/for-providing-manifest.port.d.ts +0 -0
  115. /package/types/lib/{2.app → core/2.app}/driving-ports/for-providing-remote-entries.port.d.ts +0 -0
  116. /package/types/lib/{2.app → core/2.app}/driving-ports/for-sse.port.d.ts +0 -0
  117. /package/types/lib/{2.app → core/2.app}/driving-ports/for-version-checking.port.d.ts +0 -0
  118. /package/types/lib/{2.app → core/2.app}/driving-ports/index.d.ts +0 -0
  119. /package/types/lib/{3.adapters → core/3.adapters}/browser/browser.d.ts +0 -0
  120. /package/types/lib/{3.adapters → core/3.adapters}/checks/version.check.d.ts +0 -0
  121. /package/types/lib/{3.adapters → core/3.adapters}/http/manifest-provider.d.ts +0 -0
  122. /package/types/lib/{3.adapters → core/3.adapters}/http/remote-entry-provider.d.ts +0 -0
  123. /package/types/lib/{3.adapters → core/3.adapters}/storage/chunk.repository.d.ts +0 -0
  124. /package/types/lib/{3.adapters → core/3.adapters}/storage/remote-info.repository.d.ts +0 -0
  125. /package/types/lib/{3.adapters → core/3.adapters}/storage/scoped-externals.repository.d.ts +0 -0
  126. /package/types/lib/{3.adapters → core/3.adapters}/storage/shared-externals.repository.d.ts +0 -0
  127. /package/types/lib/{4.config → core/4.config}/host/host.config.d.ts +0 -0
  128. /package/types/lib/{4.config → core/4.config}/import-map/import-map.config.d.ts +0 -0
  129. /package/types/lib/{4.config → core/4.config}/import-map/index.d.ts +0 -0
  130. /package/types/lib/{4.config → core/4.config}/import-map/replace-in-dom.d.ts +0 -0
  131. /package/types/lib/{4.config → core/4.config}/import-map/use-default.d.ts +0 -0
  132. /package/types/lib/{4.config → core/4.config}/import-map/use-import-shim.d.ts +0 -0
  133. /package/types/lib/{4.config → core/4.config}/logging/console.logger.d.ts +0 -0
  134. /package/types/lib/{4.config → core/4.config}/logging/index.d.ts +0 -0
  135. /package/types/lib/{4.config → core/4.config}/logging/log.config.d.ts +0 -0
  136. /package/types/lib/{4.config → core/4.config}/logging/log.handler.d.ts +0 -0
  137. /package/types/lib/{4.config → core/4.config}/logging/noop.logger.d.ts +0 -0
  138. /package/types/lib/{4.config → core/4.config}/mode/caching.profile.d.ts +0 -0
  139. /package/types/lib/{4.config → core/4.config}/mode/default.profile.d.ts +0 -0
  140. /package/types/lib/{4.config → core/4.config}/mode/index.d.ts +0 -0
  141. /package/types/lib/{4.config → core/4.config}/mode/mode.config.d.ts +0 -0
  142. /package/types/lib/{4.config → core/4.config}/storage/global-this.storage.d.ts +0 -0
  143. /package/types/lib/{4.config → core/4.config}/storage/index.d.ts +0 -0
  144. /package/types/lib/{4.config → core/4.config}/storage/local.storage.d.ts +0 -0
  145. /package/types/lib/{4.config → core/4.config}/storage/session.storage.d.ts +0 -0
  146. /package/types/lib/{4.config → core/4.config}/storage/storage.config.d.ts +0 -0
  147. /package/types/lib/{5.di → core/5.di}/config.factory.d.ts +0 -0
  148. /package/types/lib/{5.di → core/5.di}/driving.factory.d.ts +0 -0
  149. /package/types/lib/{init-federation.d.ts → core/init-federation.d.ts} +0 -0
  150. /package/types/lib/{native-federation.error.d.ts → core/native-federation.error.d.ts} +0 -0
  151. /package/types/lib/{3.adapters/node → node/adapters}/loader-url.d.ts +0 -0
  152. /package/types/lib/{utils/node → node/utils}/read-source.d.ts +0 -0
  153. /package/types/lib/{1.domain/registry → registry}/event-registry.contract.d.ts +0 -0
  154. /package/types/lib/{1.domain/registry → registry}/event.contract.d.ts +0 -0
  155. /package/types/lib/{2.app/config → registry}/registry.contract.d.ts +0 -0
  156. /package/types/{node-loader.d.ts → scripts/node-loader.d.ts} +0 -0
  157. /package/types/{quickstart.d.ts → scripts/quickstart.d.ts} +0 -0
package/fesm2022/node.mjs CHANGED
@@ -5,7 +5,11 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
7
  var __commonJS = (cb, mod) => function __require() {
8
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
8
+ try {
9
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
+ } catch (e) {
11
+ throw mod = 0, e;
12
+ }
9
13
  };
10
14
  var __copyProps = (to, from, except, desc) => {
11
15
  if (from && typeof from === "object" || typeof from === "function") {
@@ -24,9 +28,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
28
  mod
25
29
  ));
26
30
 
27
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/debug.js
31
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/debug.js
28
32
  var require_debug = __commonJS({
29
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/debug.js"(exports, module) {
33
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/debug.js"(exports, module) {
30
34
  "use strict";
31
35
  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
36
  };
@@ -34,9 +38,9 @@ var require_debug = __commonJS({
34
38
  }
35
39
  });
36
40
 
37
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/constants.js
41
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/constants.js
38
42
  var require_constants = __commonJS({
39
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/constants.js"(exports, module) {
43
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/constants.js"(exports, module) {
40
44
  "use strict";
41
45
  var SEMVER_SPEC_VERSION = "2.0.0";
42
46
  var MAX_LENGTH = 256;
@@ -66,9 +70,9 @@ var require_constants = __commonJS({
66
70
  }
67
71
  });
68
72
 
69
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/re.js
73
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/re.js
70
74
  var require_re = __commonJS({
71
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/re.js"(exports, module) {
75
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/re.js"(exports, module) {
72
76
  "use strict";
73
77
  var {
74
78
  MAX_SAFE_COMPONENT_LENGTH,
@@ -154,9 +158,9 @@ var require_re = __commonJS({
154
158
  }
155
159
  });
156
160
 
157
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/parse-options.js
161
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/parse-options.js
158
162
  var require_parse_options = __commonJS({
159
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/parse-options.js"(exports, module) {
163
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/parse-options.js"(exports, module) {
160
164
  "use strict";
161
165
  var looseOption = Object.freeze({ loose: true });
162
166
  var emptyOpts = Object.freeze({});
@@ -173,9 +177,9 @@ var require_parse_options = __commonJS({
173
177
  }
174
178
  });
175
179
 
176
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/identifiers.js
180
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/identifiers.js
177
181
  var require_identifiers = __commonJS({
178
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/identifiers.js"(exports, module) {
182
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/identifiers.js"(exports, module) {
179
183
  "use strict";
180
184
  var numeric = /^[0-9]+$/;
181
185
  var compareIdentifiers = (a, b) => {
@@ -198,15 +202,27 @@ var require_identifiers = __commonJS({
198
202
  }
199
203
  });
200
204
 
201
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/classes/semver.js
205
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/semver.js
202
206
  var require_semver = __commonJS({
203
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/classes/semver.js"(exports, module) {
207
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/semver.js"(exports, module) {
204
208
  "use strict";
205
209
  var debug = require_debug();
206
210
  var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
207
211
  var { safeRe: re, t } = require_re();
208
212
  var parseOptions = require_parse_options();
209
213
  var { compareIdentifiers } = require_identifiers();
214
+ var isPrereleaseIdentifier = (prerelease, identifier) => {
215
+ const identifiers = identifier.split(".");
216
+ if (identifiers.length > prerelease.length) {
217
+ return false;
218
+ }
219
+ for (let i = 0; i < identifiers.length; i++) {
220
+ if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {
221
+ return false;
222
+ }
223
+ }
224
+ return true;
225
+ };
210
226
  var SemVer = class _SemVer {
211
227
  constructor(version, options) {
212
228
  options = parseOptions(options);
@@ -453,8 +469,9 @@ var require_semver = __commonJS({
453
469
  if (identifierBase === false) {
454
470
  prerelease = [identifier];
455
471
  }
456
- if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
457
- if (isNaN(this.prerelease[1])) {
472
+ if (isPrereleaseIdentifier(this.prerelease, identifier)) {
473
+ const prereleaseBase = this.prerelease[identifier.split(".").length];
474
+ if (isNaN(prereleaseBase)) {
458
475
  this.prerelease = prerelease;
459
476
  }
460
477
  } else {
@@ -477,9 +494,9 @@ var require_semver = __commonJS({
477
494
  }
478
495
  });
479
496
 
480
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/parse.js
497
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/parse.js
481
498
  var require_parse = __commonJS({
482
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/parse.js"(exports, module) {
499
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/parse.js"(exports, module) {
483
500
  "use strict";
484
501
  var SemVer = require_semver();
485
502
  var parse = (version, options, throwErrors = false) => {
@@ -499,9 +516,9 @@ var require_parse = __commonJS({
499
516
  }
500
517
  });
501
518
 
502
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/valid.js
519
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/valid.js
503
520
  var require_valid = __commonJS({
504
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/valid.js"(exports, module) {
521
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/valid.js"(exports, module) {
505
522
  "use strict";
506
523
  var parse = require_parse();
507
524
  var valid = (version, options) => {
@@ -512,9 +529,9 @@ var require_valid = __commonJS({
512
529
  }
513
530
  });
514
531
 
515
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/lrucache.js
532
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/lrucache.js
516
533
  var require_lrucache = __commonJS({
517
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/internal/lrucache.js"(exports, module) {
534
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/lrucache.js"(exports, module) {
518
535
  "use strict";
519
536
  var LRUCache = class {
520
537
  constructor() {
@@ -550,9 +567,9 @@ var require_lrucache = __commonJS({
550
567
  }
551
568
  });
552
569
 
553
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/compare.js
570
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/compare.js
554
571
  var require_compare = __commonJS({
555
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/compare.js"(exports, module) {
572
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/compare.js"(exports, module) {
556
573
  "use strict";
557
574
  var SemVer = require_semver();
558
575
  var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
@@ -560,9 +577,9 @@ var require_compare = __commonJS({
560
577
  }
561
578
  });
562
579
 
563
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/eq.js
580
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/eq.js
564
581
  var require_eq = __commonJS({
565
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/eq.js"(exports, module) {
582
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/eq.js"(exports, module) {
566
583
  "use strict";
567
584
  var compare = require_compare();
568
585
  var eq = (a, b, loose) => compare(a, b, loose) === 0;
@@ -570,9 +587,9 @@ var require_eq = __commonJS({
570
587
  }
571
588
  });
572
589
 
573
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/neq.js
590
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/neq.js
574
591
  var require_neq = __commonJS({
575
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/neq.js"(exports, module) {
592
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/neq.js"(exports, module) {
576
593
  "use strict";
577
594
  var compare = require_compare();
578
595
  var neq = (a, b, loose) => compare(a, b, loose) !== 0;
@@ -580,9 +597,9 @@ var require_neq = __commonJS({
580
597
  }
581
598
  });
582
599
 
583
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/gt.js
600
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/gt.js
584
601
  var require_gt = __commonJS({
585
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/gt.js"(exports, module) {
602
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/gt.js"(exports, module) {
586
603
  "use strict";
587
604
  var compare = require_compare();
588
605
  var gt = (a, b, loose) => compare(a, b, loose) > 0;
@@ -590,9 +607,9 @@ var require_gt = __commonJS({
590
607
  }
591
608
  });
592
609
 
593
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/gte.js
610
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/gte.js
594
611
  var require_gte = __commonJS({
595
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/gte.js"(exports, module) {
612
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/gte.js"(exports, module) {
596
613
  "use strict";
597
614
  var compare = require_compare();
598
615
  var gte = (a, b, loose) => compare(a, b, loose) >= 0;
@@ -600,9 +617,9 @@ var require_gte = __commonJS({
600
617
  }
601
618
  });
602
619
 
603
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/lt.js
620
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/lt.js
604
621
  var require_lt = __commonJS({
605
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/lt.js"(exports, module) {
622
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/lt.js"(exports, module) {
606
623
  "use strict";
607
624
  var compare = require_compare();
608
625
  var lt = (a, b, loose) => compare(a, b, loose) < 0;
@@ -610,9 +627,9 @@ var require_lt = __commonJS({
610
627
  }
611
628
  });
612
629
 
613
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/lte.js
630
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/lte.js
614
631
  var require_lte = __commonJS({
615
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/lte.js"(exports, module) {
632
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/lte.js"(exports, module) {
616
633
  "use strict";
617
634
  var compare = require_compare();
618
635
  var lte = (a, b, loose) => compare(a, b, loose) <= 0;
@@ -620,9 +637,9 @@ var require_lte = __commonJS({
620
637
  }
621
638
  });
622
639
 
623
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/cmp.js
640
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/cmp.js
624
641
  var require_cmp = __commonJS({
625
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/cmp.js"(exports, module) {
642
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/cmp.js"(exports, module) {
626
643
  "use strict";
627
644
  var eq = require_eq();
628
645
  var neq = require_neq();
@@ -670,9 +687,9 @@ var require_cmp = __commonJS({
670
687
  }
671
688
  });
672
689
 
673
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/classes/comparator.js
690
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/comparator.js
674
691
  var require_comparator = __commonJS({
675
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/classes/comparator.js"(exports, module) {
692
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/comparator.js"(exports, module) {
676
693
  "use strict";
677
694
  var ANY = /* @__PURE__ */ Symbol("SemVer ANY");
678
695
  var Comparator = class _Comparator {
@@ -783,9 +800,9 @@ var require_comparator = __commonJS({
783
800
  }
784
801
  });
785
802
 
786
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/classes/range.js
803
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/range.js
787
804
  var require_range = __commonJS({
788
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/classes/range.js"(exports, module) {
805
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/range.js"(exports, module) {
789
806
  "use strict";
790
807
  var SPACE_CHARACTERS = /\s+/g;
791
808
  var Range = class _Range {
@@ -972,20 +989,22 @@ var require_range = __commonJS({
972
989
  return comp;
973
990
  };
974
991
  var isX = (id) => !id || id.toLowerCase() === "x" || id === "*";
992
+ var invalidXRangeOrder = (M, m, p) => isX(M) && !isX(m) || isX(m) && p && !isX(p);
975
993
  var replaceTildes = (comp, options) => {
976
994
  return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" ");
977
995
  };
978
996
  var replaceTilde = (comp, options) => {
979
997
  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
998
+ const z = options.includePrerelease ? "-0" : "";
980
999
  return comp.replace(r, (_, M, m, p, pr) => {
981
1000
  debug("tilde", comp, _, M, m, p, pr);
982
1001
  let ret;
983
1002
  if (isX(M)) {
984
1003
  ret = "";
985
1004
  } else if (isX(m)) {
986
- ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
1005
+ ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
987
1006
  } else if (isX(p)) {
988
- ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
1007
+ ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
989
1008
  } else if (pr) {
990
1009
  debug("replaceTilde pr", pr);
991
1010
  ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
@@ -1031,9 +1050,9 @@ var require_range = __commonJS({
1031
1050
  debug("no pr");
1032
1051
  if (M === "0") {
1033
1052
  if (m === "0") {
1034
- ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
1053
+ ret = `>=${M}.${m}.${p} <${M}.${m}.${+p + 1}-0`;
1035
1054
  } else {
1036
- ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
1055
+ ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
1037
1056
  }
1038
1057
  } else {
1039
1058
  ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
@@ -1052,6 +1071,9 @@ var require_range = __commonJS({
1052
1071
  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
1053
1072
  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
1054
1073
  debug("xRange", comp, ret, gtlt, M, m, p, pr);
1074
+ if (invalidXRangeOrder(M, m, p)) {
1075
+ return comp;
1076
+ }
1055
1077
  const xM = isX(M);
1056
1078
  const xm = xM || isX(m);
1057
1079
  const xp = xm || isX(p);
@@ -1163,9 +1185,9 @@ var require_range = __commonJS({
1163
1185
  }
1164
1186
  });
1165
1187
 
1166
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/satisfies.js
1188
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/satisfies.js
1167
1189
  var require_satisfies = __commonJS({
1168
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/functions/satisfies.js"(exports, module) {
1190
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/satisfies.js"(exports, module) {
1169
1191
  "use strict";
1170
1192
  var Range = require_range();
1171
1193
  var satisfies = (version, range, options) => {
@@ -1180,9 +1202,9 @@ var require_satisfies = __commonJS({
1180
1202
  }
1181
1203
  });
1182
1204
 
1183
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/ranges/min-version.js
1205
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/min-version.js
1184
1206
  var require_min_version = __commonJS({
1185
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/ranges/min-version.js"(exports, module) {
1207
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/min-version.js"(exports, module) {
1186
1208
  "use strict";
1187
1209
  var SemVer = require_semver();
1188
1210
  var Range = require_range();
@@ -1239,9 +1261,9 @@ var require_min_version = __commonJS({
1239
1261
  }
1240
1262
  });
1241
1263
 
1242
- // node_modules/.pnpm/semver@7.8.1/node_modules/semver/ranges/valid.js
1264
+ // node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/valid.js
1243
1265
  var require_valid2 = __commonJS({
1244
- "node_modules/.pnpm/semver@7.8.1/node_modules/semver/ranges/valid.js"(exports, module) {
1266
+ "node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/valid.js"(exports, module) {
1245
1267
  "use strict";
1246
1268
  var Range = require_range();
1247
1269
  var validRange = (range, options) => {
@@ -1255,7 +1277,7 @@ var require_valid2 = __commonJS({
1255
1277
  }
1256
1278
  });
1257
1279
 
1258
- // src/lib/3.adapters/browser/browser.ts
1280
+ // src/lib/core/3.adapters/browser/browser.ts
1259
1281
  var createBrowser = (config) => {
1260
1282
  return {
1261
1283
  setImportMapFn: config.setImportMapFn,
@@ -1263,7 +1285,7 @@ var createBrowser = (config) => {
1263
1285
  };
1264
1286
  };
1265
1287
 
1266
- // src/lib/3.adapters/checks/version.check.ts
1288
+ // src/lib/core/3.adapters/checks/version.check.ts
1267
1289
  var import_valid = __toESM(require_valid());
1268
1290
  var import_satisfies = __toESM(require_satisfies());
1269
1291
  var import_compare = __toESM(require_compare());
@@ -1288,7 +1310,7 @@ var createVersionCheck = () => {
1288
1310
  };
1289
1311
  };
1290
1312
 
1291
- // src/lib/native-federation.error.ts
1313
+ // src/lib/core/native-federation.error.ts
1292
1314
  var NFError = class extends Error {
1293
1315
  constructor(message, cause) {
1294
1316
  super(message, cause);
@@ -1334,7 +1356,7 @@ var verifyIntegrity = async (bytes, integrity) => {
1334
1356
  }
1335
1357
  };
1336
1358
 
1337
- // src/lib/utils/node/read-source.ts
1359
+ // src/lib/node/utils/read-source.ts
1338
1360
  import * as fs from "node:fs/promises";
1339
1361
  import { fileURLToPath } from "node:url";
1340
1362
  var isHttpUrl = (input) => input.startsWith("http://") || input.startsWith("https://");
@@ -1352,7 +1374,7 @@ var readSourceBytes = async (input) => {
1352
1374
  return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
1353
1375
  };
1354
1376
 
1355
- // src/lib/3.adapters/node/fs-manifest-provider.ts
1377
+ // src/lib/node/adapters/fs-manifest-provider.ts
1356
1378
  var createFsManifestProvider = () => {
1357
1379
  const formatError = (manifestUrl) => (err) => {
1358
1380
  if (err instanceof NFError) throw err;
@@ -1373,7 +1395,7 @@ var createFsManifestProvider = () => {
1373
1395
  };
1374
1396
  };
1375
1397
 
1376
- // src/lib/3.adapters/node/fs-remote-entry-provider.ts
1398
+ // src/lib/node/adapters/fs-remote-entry-provider.ts
1377
1399
  var createFsRemoteEntryProvider = () => {
1378
1400
  const fillEmptyFields = (remoteEntryUrl) => (remoteEntry) => {
1379
1401
  if (!remoteEntry.exposes) remoteEntry.exposes = [];
@@ -1400,7 +1422,7 @@ var createFsRemoteEntryProvider = () => {
1400
1422
  };
1401
1423
  };
1402
1424
 
1403
- // src/lib/3.adapters/node/noop-sse.ts
1425
+ // src/lib/node/adapters/noop-sse.ts
1404
1426
  var createNoopSSE = () => ({
1405
1427
  watchRemoteBuilds: () => {
1406
1428
  },
@@ -1463,7 +1485,7 @@ var Optional = class _Optional {
1463
1485
  }
1464
1486
  };
1465
1487
 
1466
- // src/lib/3.adapters/storage/remote-info.repository.ts
1488
+ // src/lib/core/3.adapters/storage/remote-info.repository.ts
1467
1489
  var createRemoteInfoRepository = (config) => {
1468
1490
  const STORAGE = config.storage("remotes", {});
1469
1491
  if (config.clearStorage) STORAGE.clear();
@@ -1498,7 +1520,7 @@ var createRemoteInfoRepository = (config) => {
1498
1520
  };
1499
1521
  };
1500
1522
 
1501
- // src/lib/3.adapters/storage/scoped-externals.repository.ts
1523
+ // src/lib/core/3.adapters/storage/scoped-externals.repository.ts
1502
1524
  var createScopedExternalsRepository = (config) => {
1503
1525
  const STORAGE = config.storage("scoped-externals", {});
1504
1526
  if (config.clearStorage) STORAGE.clear();
@@ -1526,11 +1548,11 @@ var createScopedExternalsRepository = (config) => {
1526
1548
  };
1527
1549
  };
1528
1550
 
1529
- // src/lib/1.domain/externals/external.contract.ts
1551
+ // src/lib/core/1.domain/externals/external.contract.ts
1530
1552
  var GLOBAL_SCOPE = "__GLOBAL__";
1531
1553
  var STRICT_SCOPE = "strict";
1532
1554
 
1533
- // src/lib/3.adapters/storage/shared-externals.repository.ts
1555
+ // src/lib/core/3.adapters/storage/shared-externals.repository.ts
1534
1556
  var createSharedExternalsRepository = (config) => {
1535
1557
  const STORAGE = config.storage(
1536
1558
  "shared-externals",
@@ -1596,22 +1618,7 @@ var createSharedExternalsRepository = (config) => {
1596
1618
  };
1597
1619
  };
1598
1620
 
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
1621
+ // src/lib/core/3.adapters/storage/chunk.repository.ts
1615
1622
  var createChunkRepository = (config) => {
1616
1623
  const STORAGE = config.storage("shared-chunks", {});
1617
1624
  if (config.clearStorage) STORAGE.clear();
@@ -1632,7 +1639,7 @@ var createChunkRepository = (config) => {
1632
1639
  };
1633
1640
  };
1634
1641
 
1635
- // src/lib/4.config/import-map/trusted-types.ts
1642
+ // src/lib/core/4.config/import-map/trusted-types.ts
1636
1643
  var IMPORT_MAP_KEYS = /* @__PURE__ */ new Set(["imports", "scopes", "integrity"]);
1637
1644
  var validateImportMapJSON = (input) => {
1638
1645
  let parsed;
@@ -1685,12 +1692,12 @@ var getTrustedTypesPolicy = (name = "nfo") => {
1685
1692
  });
1686
1693
  cachedPolicy = {
1687
1694
  createScript: (input) => native.createScript(input),
1688
- createScriptURL: (input) => native.createScriptURL(input)
1695
+ createScriptURL: (input) => String(native.createScriptURL(input))
1689
1696
  };
1690
1697
  return cachedPolicy;
1691
1698
  };
1692
1699
 
1693
- // src/lib/4.config/import-map/replace-in-dom.ts
1700
+ // src/lib/core/4.config/import-map/replace-in-dom.ts
1694
1701
  var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts = {}) => {
1695
1702
  if (opts?.override) {
1696
1703
  document.head.querySelectorAll(`script[type="${mapType}"]`).forEach((importMap2) => importMap2.remove());
@@ -1705,7 +1712,7 @@ var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts
1705
1712
  return Promise.resolve(importMap);
1706
1713
  };
1707
1714
 
1708
- // src/lib/4.config/import-map/use-default.ts
1715
+ // src/lib/core/4.config/import-map/use-default.ts
1709
1716
  var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
1710
1717
  loadModuleFn: (url) => {
1711
1718
  const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);
@@ -1720,7 +1727,7 @@ var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
1720
1727
  }
1721
1728
  });
1722
1729
 
1723
- // src/lib/4.config/import-map/import-map.config.ts
1730
+ // src/lib/core/4.config/import-map/import-map.config.ts
1724
1731
  var createImportMapConfig = (o) => {
1725
1732
  const fallback = useDefaultImportMap(o.trustedTypesPolicyName);
1726
1733
  return {
@@ -1730,7 +1737,7 @@ var createImportMapConfig = (o) => {
1730
1737
  };
1731
1738
  };
1732
1739
 
1733
- // src/lib/4.config/host/host.config.ts
1740
+ // src/lib/core/4.config/host/host.config.ts
1734
1741
  var createHostConfig = (override) => {
1735
1742
  const extras = override?.manifestIntegrity ? { manifestIntegrity: override.manifestIntegrity } : {};
1736
1743
  if (!override?.hostRemoteEntry) {
@@ -1754,7 +1761,7 @@ var createHostConfig = (override) => {
1754
1761
  };
1755
1762
  };
1756
1763
 
1757
- // src/lib/4.config/logging/noop.logger.ts
1764
+ // src/lib/core/4.config/logging/noop.logger.ts
1758
1765
  var noopLogger = {
1759
1766
  debug: () => {
1760
1767
  },
@@ -1764,14 +1771,14 @@ var noopLogger = {
1764
1771
  }
1765
1772
  };
1766
1773
 
1767
- // src/lib/2.app/config/log.contract.ts
1774
+ // src/lib/core/2.app/config/log.contract.ts
1768
1775
  var LogLevel = {
1769
1776
  debug: 0,
1770
1777
  warn: 1,
1771
1778
  error: 2
1772
1779
  };
1773
1780
 
1774
- // src/lib/4.config/logging/log.handler.ts
1781
+ // src/lib/core/4.config/logging/log.handler.ts
1775
1782
  var createLogHandler = (logger, logLevel) => {
1776
1783
  const logTypes = Object.keys(LogLevel).filter((key) => isNaN(Number(key)));
1777
1784
  return logTypes.reduce(
@@ -1789,13 +1796,28 @@ var createLogHandler = (logger, logLevel) => {
1789
1796
  );
1790
1797
  };
1791
1798
 
1792
- // src/lib/4.config/logging/log.config.ts
1799
+ // src/lib/core/4.config/logging/log.config.ts
1793
1800
  var createLogConfig = ({ logger, logLevel, sse }) => ({
1794
1801
  log: createLogHandler(logger ?? noopLogger, logLevel ?? "error"),
1795
1802
  sse: !!sse
1796
1803
  });
1797
1804
 
1798
- // src/lib/4.config/storage/global-this.storage.ts
1805
+ // src/lib/utils/clone-entry.ts
1806
+ var cloneEntry = (name, raw) => {
1807
+ try {
1808
+ if (typeof structuredClone === "function") {
1809
+ return structuredClone(raw);
1810
+ }
1811
+ } catch {
1812
+ }
1813
+ try {
1814
+ return JSON.parse(JSON.stringify(raw));
1815
+ } catch {
1816
+ }
1817
+ throw new NFError(`Could not clone entry '${String(name)}'`);
1818
+ };
1819
+
1820
+ // src/lib/core/4.config/storage/global-this.storage.ts
1799
1821
  var globalThisStorageEntry = (namespace) => (key, initialValue) => {
1800
1822
  if (!globalThis[namespace]) {
1801
1823
  globalThis[namespace] = {};
@@ -1818,20 +1840,21 @@ var globalThisStorageEntry = (namespace) => (key, initialValue) => {
1818
1840
  return entry;
1819
1841
  };
1820
1842
 
1821
- // src/lib/4.config/storage/storage.config.ts
1843
+ // src/lib/core/4.config/storage/storage.config.ts
1822
1844
  var createStorageConfig = (override) => ({
1823
1845
  storage: override.storage ? override.storage(override.storageNamespace ?? "__NATIVE_FEDERATION__") : globalThisStorageEntry(override.storageNamespace ?? "__NATIVE_FEDERATION__"),
1824
1846
  clearStorage: override.clearStorage ?? false
1825
1847
  });
1826
1848
 
1827
- // src/lib/4.config/mode/default.profile.ts
1849
+ // src/lib/core/4.config/mode/default.profile.ts
1828
1850
  var defaultProfile = {
1829
1851
  latestSharedExternal: false,
1852
+ skipInvalidExternalVersions: false,
1830
1853
  overrideCachedRemotes: "init-only",
1831
1854
  overrideCachedRemotesIfURLMatches: false
1832
1855
  };
1833
1856
 
1834
- // src/lib/4.config/mode/mode.config.ts
1857
+ // src/lib/core/4.config/mode/mode.config.ts
1835
1858
  var createModeConfig = (override) => {
1836
1859
  const strictnessConfig = typeof override.strict === "boolean" ? {
1837
1860
  strictRemoteEntry: override.strict,
@@ -1852,7 +1875,7 @@ var createModeConfig = (override) => {
1852
1875
  };
1853
1876
  };
1854
1877
 
1855
- // src/lib/5.di/config.factory.ts
1878
+ // src/lib/core/5.di/config.factory.ts
1856
1879
  var createConfigHandlers = (overrides) => ({
1857
1880
  ...createImportMapConfig(overrides),
1858
1881
  ...createHostConfig(overrides),
@@ -1861,7 +1884,28 @@ var createConfigHandlers = (overrides) => ({
1861
1884
  ...createModeConfig(overrides)
1862
1885
  });
1863
1886
 
1864
- // src/lib/2.app/flows/init/get-remote-entries.ts
1887
+ // src/lib/core/2.app/flows/init.flow.ts
1888
+ var createInitFlow = ({
1889
+ flow,
1890
+ adapters,
1891
+ config
1892
+ }) => {
1893
+ return (remotesOrManifestUrl) => flow.getRemoteEntries(remotesOrManifestUrl).then(flow.processRemoteEntries).then(flow.determineSharedExternals).then(flow.generateImportMap).then(flow.commitChanges).then(flow.exposeModuleLoader).then((loadRemoteModule) => ({
1894
+ config,
1895
+ adapters,
1896
+ loadRemoteModule
1897
+ }));
1898
+ };
1899
+
1900
+ // src/lib/core/2.app/flows/init-remote-entry.flow.ts
1901
+ var createInitRemoteEntryFlow = ({
1902
+ flow
1903
+ }) => {
1904
+ const processDynamicRemoteEntry = (remoteEntry) => flow.updateCache(remoteEntry).then(flow.convertToImportMap).then(flow.commitChanges);
1905
+ return (remoteEntryUrl, remote) => flow.getRemoteEntry(remoteEntryUrl, remote).then((entry) => entry.map(processDynamicRemoteEntry).orElse(Promise.resolve())).then(() => void 0);
1906
+ };
1907
+
1908
+ // src/lib/core/2.app/steps/get-remote-entries.ts
1865
1909
  function createGetRemoteEntries(config, ports) {
1866
1910
  return (remotesOrManifestUrl = {}) => {
1867
1911
  const manifestPromise = config.manifestIntegrity ? ports.manifestProvider.provide(remotesOrManifestUrl, {
@@ -1955,20 +1999,13 @@ function createGetRemoteEntries(config, ports) {
1955
1999
  }
1956
2000
  }
1957
2001
 
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
- }
2002
+ // src/lib/core/2.app/steps/store-remote-entry.ts
2003
+ function createStoreRemoteEntry(config, ports, logStep) {
2004
+ return (remoteEntry, onSharedExternal) => {
2005
+ if (remoteEntry?.override) removeCachedRemoteEntry(remoteEntry);
2006
+ addRemoteInfoToStorage(remoteEntry);
2007
+ addExternalsToStorage(remoteEntry, onSharedExternal);
2008
+ addSharedChunksToStorage(remoteEntry);
1972
2009
  };
1973
2010
  function removeCachedRemoteEntry(remoteEntry) {
1974
2011
  ports.remoteInfoRepo.remove(remoteEntry.name);
@@ -1985,88 +2022,130 @@ function createProcessRemoteEntries(config, ports) {
1985
2022
  ...integrity ? { integrity } : {}
1986
2023
  });
1987
2024
  }
1988
- function addExternalsToStorage(remoteEntry) {
2025
+ function addExternalsToStorage(remoteEntry, onSharedExternal) {
1989
2026
  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
- }
2027
+ const tag = resolveVersion(remoteEntry, external);
2028
+ if (tag === null) return;
1998
2029
  if (external.singleton) {
1999
- addSharedExternal(remoteEntry.name, external, remoteEntry);
2030
+ onSharedExternal(remoteEntry, external, sharedExternalContext(remoteEntry, external, tag));
2000
2031
  } else {
2001
- addScopedExternal(remoteEntry.name, external);
2032
+ addScopedExternal(remoteEntry, external, tag);
2002
2033
  }
2003
2034
  });
2004
2035
  }
2005
2036
  function addSharedChunksToStorage(remoteEntry) {
2006
2037
  if (!remoteEntry.chunks) return;
2007
2038
  config.log.debug(
2008
- 2,
2039
+ logStep,
2009
2040
  `Adding chunks for remote "${remoteEntry.name}", bundles: [${Object.keys(remoteEntry.chunks).join(", ")}]`
2010
2041
  );
2011
2042
  Object.entries(remoteEntry.chunks).forEach(([bundleName, chunks]) => {
2012
2043
  ports.sharedChunksRepo.addOrReplace(remoteEntry.name, bundleName, chunks);
2013
2044
  });
2014
2045
  }
2015
- function addSharedExternal(remoteName, sharedInfo, remoteEntry) {
2016
- let action = "skip";
2017
- const tag = sharedInfo.version ?? ports.versionCheck.smallestVersion(sharedInfo.requiredVersion);
2046
+ function addScopedExternal(remoteEntry, sharedInfo, tag) {
2047
+ ports.scopedExternalsRepo.addExternal(remoteEntry.name, sharedInfo.packageName, {
2048
+ tag,
2049
+ file: sharedInfo.outFileName,
2050
+ bundle: sharedInfo.bundle
2051
+ });
2052
+ }
2053
+ function resolveVersion(remoteEntry, external) {
2054
+ if (external.version && ports.versionCheck.isValidSemver(external.version)) {
2055
+ return external.version;
2056
+ }
2057
+ const errorMsg = `[${remoteEntry.name}][${external.packageName}] Version '${external.version}' is not a valid version.`;
2058
+ if (config.strict.strictExternalVersion) {
2059
+ config.log.error(logStep, errorMsg);
2060
+ throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2061
+ }
2062
+ if (config.profile.skipInvalidExternalVersions) {
2063
+ config.log.warn(logStep, `${errorMsg} Skipping external.`);
2064
+ return null;
2065
+ }
2066
+ config.log.warn(logStep, errorMsg);
2067
+ return ports.versionCheck.smallestVersion(external.requiredVersion);
2068
+ }
2069
+ function sharedExternalContext(remoteEntry, sharedInfo, tag) {
2070
+ const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2018
2071
  const remote = {
2019
2072
  file: sharedInfo.outFileName,
2020
- name: remoteName,
2073
+ name: remoteEntry.name,
2021
2074
  bundle: sharedInfo.bundle,
2022
2075
  strictVersion: sharedInfo.strictVersion,
2023
2076
  cached: false,
2024
- requiredVersion: sharedInfo.requiredVersion || tag
2077
+ requiredVersion: scopeType === "strict" ? tag : sharedInfo.requiredVersion || tag
2025
2078
  };
2026
- const scopeType = ports.sharedExternalsRepo.scopeType(sharedInfo.shareScope);
2027
- if (scopeType === "strict") {
2028
- action = "share";
2029
- remote.requiredVersion = tag;
2030
- }
2031
2079
  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}'`;
2080
+ return {
2081
+ tag,
2082
+ remote,
2083
+ cached: cached2,
2084
+ scopeType,
2085
+ assertSameVersionCompatibility(matchingVersion) {
2086
+ if (!remote.strictVersion) return;
2087
+ if (matchingVersion.remotes[0].requiredVersion === remote.requiredVersion) return;
2088
+ const errorMsg = `[${remoteEntry.name}][${sharedInfo.packageName}@${sharedInfo.version}] Required version-range '${remote.requiredVersion}' does not match cached version-range '${matchingVersion.remotes[0].requiredVersion}'`;
2037
2089
  if (config.strict.strictExternalSameVersionCompatibility) {
2038
- config.log.error(2, errorMsg);
2090
+ config.log.error(logStep, errorMsg);
2039
2091
  throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2040
2092
  }
2041
- config.log.warn(2, errorMsg);
2093
+ config.log.warn(logStep, errorMsg);
2094
+ },
2095
+ commit() {
2096
+ ports.sharedExternalsRepo.addOrUpdate(
2097
+ sharedInfo.packageName,
2098
+ {
2099
+ dirty: cached2.dirty,
2100
+ versions: cached2.versions.sort((a, b) => ports.versionCheck.compare(b.tag, a.tag))
2101
+ },
2102
+ sharedInfo.shareScope
2103
+ );
2042
2104
  }
2105
+ };
2106
+ }
2107
+ }
2108
+
2109
+ // src/lib/core/2.app/steps/process-remote-entries.ts
2110
+ function createProcessRemoteEntries(config, ports) {
2111
+ const storeRemoteEntry = createStoreRemoteEntry(config, ports, 2);
2112
+ return (remoteEntries) => {
2113
+ try {
2114
+ remoteEntries.forEach((remoteEntry) => storeRemoteEntry(remoteEntry, addSharedExternal));
2115
+ return Promise.resolve(remoteEntries);
2116
+ } catch (e) {
2117
+ return Promise.reject(e);
2118
+ }
2119
+ };
2120
+ function addSharedExternal(remoteEntry, _sharedInfo, {
2121
+ tag,
2122
+ remote,
2123
+ cached: cached2,
2124
+ scopeType,
2125
+ assertSameVersionCompatibility,
2126
+ commit
2127
+ }) {
2128
+ const matchingVersion = cached2.versions.find((version) => version.tag === tag);
2129
+ if (matchingVersion) {
2130
+ assertSameVersionCompatibility(matchingVersion);
2043
2131
  if (!matchingVersion.host && !!remoteEntry?.host) {
2044
2132
  matchingVersion.host = true;
2045
2133
  matchingVersion.remotes.unshift(remote);
2046
2134
  } else matchingVersion.remotes.push(remote);
2047
2135
  } else {
2048
- if (scopeType !== "strict") dirty = true;
2049
- cached2.versions.push({ tag, action, host: !!remoteEntry?.host, remotes: [remote] });
2136
+ if (scopeType !== "strict") cached2.dirty = true;
2137
+ cached2.versions.push({
2138
+ tag,
2139
+ action: scopeType === "strict" ? "share" : "skip",
2140
+ host: !!remoteEntry?.host,
2141
+ remotes: [remote]
2142
+ });
2050
2143
  }
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
- });
2144
+ commit();
2066
2145
  }
2067
2146
  }
2068
2147
 
2069
- // src/lib/2.app/flows/init/determine-shared-externals.ts
2148
+ // src/lib/core/2.app/steps/determine-shared-externals.ts
2070
2149
  function createDetermineSharedExternals(config, ports) {
2071
2150
  return () => {
2072
2151
  for (const shareScope of ports.sharedExternalsRepo.getScopes()) {
@@ -2143,15 +2222,7 @@ function createDetermineSharedExternals(config, ports) {
2143
2222
  }
2144
2223
  }
2145
2224
 
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
2147
- var BuildNotificationType;
2148
- (function(BuildNotificationType2) {
2149
- BuildNotificationType2["COMPLETED"] = "federation-rebuild-complete";
2150
- BuildNotificationType2["ERROR"] = "federation-rebuild-error";
2151
- BuildNotificationType2["CANCELLED"] = "federation-rebuild-cancelled";
2152
- })(BuildNotificationType || (BuildNotificationType = {}));
2153
-
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
2225
+ // node_modules/.pnpm/@softarc+native-federation@4.2.0_typescript@6.0.3/node_modules/@softarc/native-federation/dist/lib/domain/core/chunk.js
2155
2226
  var CHUNK_PREFIX = "@nf-internal";
2156
2227
  function toChunkImport(fileName) {
2157
2228
  if (fileName.startsWith("./")) {
@@ -2161,7 +2232,7 @@ function toChunkImport(fileName) {
2161
2232
  return CHUNK_PREFIX + "/" + packageName;
2162
2233
  }
2163
2234
 
2164
- // src/lib/2.app/flows/init/generate-import-map.ts
2235
+ // src/lib/core/2.app/steps/generate-import-map.ts
2165
2236
  function createGenerateImportMap(config, ports) {
2166
2237
  return () => {
2167
2238
  const importMap = { imports: {} };
@@ -2186,7 +2257,12 @@ function createGenerateImportMap(config, ports) {
2186
2257
  });
2187
2258
  addToScope(importMap, remote.scopeUrl, createScopeModules(externals, remote.scopeUrl));
2188
2259
  for (const version of Object.values(externals)) {
2189
- addIntegrity(importMap, join(remote.scopeUrl, version.file), remoteName, version.file);
2260
+ addIntegrity(
2261
+ importMap,
2262
+ join(remote.scopeUrl, version.file),
2263
+ remoteName,
2264
+ version.file
2265
+ );
2190
2266
  }
2191
2267
  Object.values(externals).filter((e) => !!e.bundle).forEach((e) => registerBundleChunks(chunkBundles, remoteName, e.bundle));
2192
2268
  }
@@ -2395,7 +2471,7 @@ function createGenerateImportMap(config, ports) {
2395
2471
  }
2396
2472
  }
2397
2473
 
2398
- // src/lib/2.app/flows/init/commit-changes.ts
2474
+ // src/lib/core/2.app/steps/commit-changes.ts
2399
2475
  function createCommitChanges(config, ports) {
2400
2476
  return (importMap) => Promise.resolve(importMap).then(addToBrowser).then(persistRepositoryChanges);
2401
2477
  function addToBrowser(importMap) {
@@ -2412,7 +2488,7 @@ function createCommitChanges(config, ports) {
2412
2488
  }
2413
2489
  }
2414
2490
 
2415
- // src/lib/2.app/flows/init/expose-module-loader.ts
2491
+ // src/lib/core/2.app/steps/expose-module-loader.ts
2416
2492
  function createExposeModuleLoader(config, ports) {
2417
2493
  const loadRemoteModule = (remoteName, exposedModule) => {
2418
2494
  try {
@@ -2438,42 +2514,137 @@ function createExposeModuleLoader(config, ports) {
2438
2514
  return () => Promise.resolve(loadRemoteModule);
2439
2515
  }
2440
2516
 
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
- }));
2517
+ // src/lib/core/2.app/steps/get-remote-entry.ts
2518
+ var normalizeRemoteRef = (remote) => {
2519
+ if (!remote) return {};
2520
+ if (typeof remote === "string") return { name: remote };
2521
+ return remote;
2474
2522
  };
2523
+ function createGetRemoteEntry(config, ports) {
2524
+ return async (remoteEntryUrl, remote) => {
2525
+ const { name: remoteName, integrity } = normalizeRemoteRef(remote);
2526
+ if (!!remoteName && shouldSkipCachedRemote(remoteEntryUrl, remoteName)) {
2527
+ config.log.debug(7, `Found remote '${remoteName}' in storage, omitting fetch.`);
2528
+ return Optional.empty();
2529
+ }
2530
+ try {
2531
+ const remoteEntry = integrity ? await ports.remoteEntryProvider.provide(remoteEntryUrl, { integrity }) : await ports.remoteEntryProvider.provide(remoteEntryUrl);
2532
+ config.log.debug(
2533
+ 7,
2534
+ `[${remoteEntry.name}] Fetched from '${remoteEntry.url}', exposing: ${JSON.stringify(remoteEntry.exposes)}`
2535
+ );
2536
+ if (!!remoteName && remoteEntry.name !== remoteName) {
2537
+ const errorMsg = `Fetched remote '${remoteEntry.name}' does not match requested '${remoteName}'.`;
2538
+ if (config.strict.strictRemoteEntry) {
2539
+ config.log.error(7, errorMsg);
2540
+ throw new NFError("Could not fetch remote entry");
2541
+ }
2542
+ config.log.warn(7, errorMsg + " Omitting expected name.");
2543
+ }
2544
+ if (ports.remoteInfoRepo.contains(remoteEntry.name)) {
2545
+ remoteEntry.override = true;
2546
+ config.log.debug(7, `Overriding existing remote '${remoteName}' with '${remoteEntryUrl}'.`);
2547
+ }
2548
+ return Optional.of(checkForSSE(remoteEntry));
2549
+ } catch (error) {
2550
+ config.log.error(
2551
+ 7,
2552
+ `[${remoteName ?? "unknown"}] Could not fetch remoteEntry from ${remoteEntryUrl}.`,
2553
+ error
2554
+ );
2555
+ return Promise.reject(
2556
+ new NFError(`[${remoteName ?? remoteEntryUrl}] Could not fetch remoteEntry.`)
2557
+ );
2558
+ }
2559
+ };
2560
+ function shouldSkipCachedRemote(remoteEntryUrl, remoteName) {
2561
+ return ports.remoteInfoRepo.tryGet(remoteName).map(
2562
+ (cachedRemoteInfo) => config.profile.overrideCachedRemotes !== "always" || !config.profile.overrideCachedRemotesIfURLMatches && remoteEntryUrl === join(cachedRemoteInfo.scopeUrl, "remoteEntry.json")
2563
+ ).orElse(false);
2564
+ }
2565
+ function checkForSSE(entry) {
2566
+ if (config.sse) {
2567
+ if (entry.buildNotificationsEndpoint) {
2568
+ ports.sse.watchRemoteBuilds(
2569
+ join(getScope(entry.url), entry.buildNotificationsEndpoint)
2570
+ );
2571
+ config.log.debug(7, `Registered SSE endpoint of remote '${entry.name}' `);
2572
+ } else {
2573
+ config.log.debug(7, `Remote ${entry.name} has no defined 'buildNotificationsEndpoint'`);
2574
+ }
2575
+ }
2576
+ return entry;
2577
+ }
2578
+ }
2579
+
2580
+ // src/lib/core/2.app/steps/update-cache.ts
2581
+ function createUpdateCache(config, ports) {
2582
+ const storeRemoteEntry = createStoreRemoteEntry(config, ports, 8);
2583
+ return (remoteEntry) => {
2584
+ try {
2585
+ const actions = {};
2586
+ storeRemoteEntry(remoteEntry, (entry, external, ctx) => {
2587
+ const { action, sharedVersion } = resolveSharedExternal(entry, external, ctx);
2588
+ actions[external.packageName] = { action };
2589
+ if (action === "skip" && external.shareScope && sharedVersion?.remotes[0]?.file) {
2590
+ actions[external.packageName].override = resolveOverrideUrl(
2591
+ entry,
2592
+ external,
2593
+ sharedVersion
2594
+ );
2595
+ }
2596
+ });
2597
+ return Promise.resolve({ entry: remoteEntry, actions });
2598
+ } catch (error) {
2599
+ return Promise.reject(error);
2600
+ }
2601
+ };
2602
+ function resolveSharedExternal(remoteEntry, sharedInfo, {
2603
+ tag,
2604
+ remote,
2605
+ cached: cached2,
2606
+ scopeType,
2607
+ assertSameVersionCompatibility,
2608
+ commit
2609
+ }) {
2610
+ let action = scopeType === "strict" ? "share" : "skip";
2611
+ const sharedVersion = cached2.versions.find((c) => c.action === "share");
2612
+ const isCompatible = !sharedVersion || ports.versionCheck.isCompatible(sharedVersion.tag, remote.requiredVersion);
2613
+ if (action === "skip" && !isCompatible && remote.strictVersion) {
2614
+ action = "scope";
2615
+ 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}'`;
2616
+ if (config.strict.strictExternalCompatibility) {
2617
+ config.log.error(8, errorMsg);
2618
+ throw new NFError(`Could not process remote '${remoteEntry.name}'`);
2619
+ }
2620
+ config.log.warn(8, errorMsg);
2621
+ }
2622
+ const matchingVersion = cached2.versions.find((cached3) => cached3.tag === tag);
2623
+ if (matchingVersion) {
2624
+ assertSameVersionCompatibility(matchingVersion);
2625
+ matchingVersion.remotes.push(remote);
2626
+ } else {
2627
+ if (!sharedVersion) action = "share";
2628
+ remote.cached = action !== "skip";
2629
+ cached2.versions.push({ tag, action, host: false, remotes: [remote] });
2630
+ }
2631
+ commit();
2632
+ return { action, sharedVersion };
2633
+ }
2634
+ function resolveOverrideUrl(remoteEntry, external, sharedVersion) {
2635
+ return ports.remoteInfoRepo.tryGet(sharedVersion.remotes[0].name).map((remote) => join(remote.scopeUrl, sharedVersion.remotes[0].file)).orThrow(() => {
2636
+ config.log.error(
2637
+ 8,
2638
+ `[${external.shareScope ?? GLOBAL_SCOPE}][${remoteEntry.name}][${external.packageName}@${external.version}][override] Remote name not found in cache.`
2639
+ );
2640
+ return new NFError(
2641
+ `Could not find override url from remote ${sharedVersion.remotes[0].name}`
2642
+ );
2643
+ });
2644
+ }
2645
+ }
2475
2646
 
2476
- // src/lib/2.app/flows/dynamic-init/convert-to-import-map.ts
2647
+ // src/lib/core/2.app/steps/convert-to-import-map.ts
2477
2648
  function createConvertToImportMap({ log }, ports) {
2478
2649
  return ({ entry, actions }) => {
2479
2650
  const importMap = { imports: {} };
@@ -2570,242 +2741,78 @@ function createConvertToImportMap({ log }, ports) {
2570
2741
  }
2571
2742
  }
2572
2743
 
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 = ({
2744
+ // src/lib/core/5.di/init.factory.ts
2745
+ var createInitDrivers = ({
2769
2746
  config,
2770
2747
  adapters
2771
2748
  }) => ({
2749
+ getRemoteEntries: createGetRemoteEntries(config, adapters),
2750
+ processRemoteEntries: createProcessRemoteEntries(config, adapters),
2751
+ determineSharedExternals: createDetermineSharedExternals(config, adapters),
2752
+ generateImportMap: createGenerateImportMap(config, adapters),
2753
+ commitChanges: createCommitChanges(config, adapters),
2754
+ exposeModuleLoader: createExposeModuleLoader(config, adapters),
2772
2755
  getRemoteEntry: createGetRemoteEntry(config, adapters),
2773
2756
  updateCache: createUpdateCache(config, adapters),
2774
- convertToImportMap: createConvertToImportMap(config, adapters),
2775
- commitChanges: createCommitChanges(config, adapters)
2757
+ convertToImportMap: createConvertToImportMap(config, adapters)
2776
2758
  });
2777
- var DYNAMIC_INIT_FLOW_FACTORY = ({
2759
+ var INIT_FLOW_FACTORY = ({
2778
2760
  config,
2779
2761
  adapters
2780
2762
  }) => {
2781
- const flow = createDynamicInitDrivers({ config, adapters });
2763
+ const flow = createInitDrivers({ config, adapters });
2782
2764
  return {
2783
2765
  flow,
2784
2766
  adapters,
2785
2767
  config
2786
2768
  };
2787
2769
  };
2788
- var createDynamicInitFlow = ({
2789
- flow,
2770
+
2771
+ // src/lib/core/5.di/federation-result.factory.ts
2772
+ var createStateDump = (config, adapters) => (msg) => config.log.debug(0, msg, {
2773
+ remotes: { ...adapters.remoteInfoRepo.getAll() },
2774
+ "shared-externals": adapters.sharedExternalsRepo.getScopes({ includeGlobal: true }).reduce(
2775
+ (acc, scope) => ({ ...acc, [scope]: adapters.sharedExternalsRepo.getFromScope(scope) }),
2776
+ {}
2777
+ ),
2778
+ "scoped-externals": adapters.scopedExternalsRepo.getAll()
2779
+ });
2780
+ var createFederationResult = ({
2781
+ config,
2790
2782
  adapters,
2791
- config
2783
+ loadRemoteModule,
2784
+ initRemoteEntryFlow,
2785
+ afterInitRemoteEntry
2792
2786
  }) => {
2793
- const processDynamicRemoteEntry = async (remoteEntry) => {
2794
- return flow.updateCache(remoteEntry).then(flow.convertToImportMap).then(flow.commitChanges);
2787
+ const stateDump = createStateDump(config, adapters);
2788
+ const initRemoteEntry = async (remoteEntryUrl, remote) => {
2789
+ const remoteName = typeof remote === "string" ? remote : remote?.name;
2790
+ return initRemoteEntryFlow(remoteEntryUrl, remote).catch((e) => {
2791
+ stateDump(`[dynamic-init][${remoteName ?? remoteEntryUrl}] STATE DUMP`);
2792
+ if (config.strict.strictRemoteEntry) return Promise.reject(e);
2793
+ else console.warn("Failed to initialize remote entry, continuing anyway.");
2794
+ return Promise.resolve();
2795
+ }).then(() => afterInitRemoteEntry?.()).then(() => result);
2795
2796
  };
2796
- const initRemoteEntry = (remoteEntryUrl, remote) => flow.getRemoteEntry(remoteEntryUrl, remote).then((entry) => entry.map(processDynamicRemoteEntry).orElse(Promise.resolve())).then(() => ({
2797
+ const result = {
2797
2798
  config,
2798
2799
  adapters,
2800
+ loadRemoteModule,
2801
+ load: loadRemoteModule,
2802
+ as: () => ({
2803
+ loadRemoteModule,
2804
+ load: loadRemoteModule
2805
+ }),
2799
2806
  initRemoteEntry
2800
- }));
2801
- return initRemoteEntry;
2807
+ };
2808
+ return result;
2802
2809
  };
2803
2810
 
2804
- // src/lib/3.adapters/node/node-loader.client.ts
2811
+ // src/lib/node/adapters/node-loader.client.ts
2805
2812
  import { register } from "node:module";
2806
2813
  import { MessageChannel } from "node:worker_threads";
2807
2814
 
2808
- // src/lib/3.adapters/node/loader-url.ts
2815
+ // src/lib/node/adapters/loader-url.ts
2809
2816
  import { createRequire } from "node:module";
2810
2817
  import { pathToFileURL } from "node:url";
2811
2818
  var getLoaderUrl = () => {
@@ -2823,7 +2830,7 @@ var getLoaderUrl = () => {
2823
2830
  }
2824
2831
  };
2825
2832
 
2826
- // src/lib/3.adapters/node/node-loader.client.ts
2833
+ // src/lib/node/adapters/node-loader.client.ts
2827
2834
  var NODE_LOADER_CLIENT_ACK_TIMEOUT_MS = 1e4;
2828
2835
  var cached = null;
2829
2836
  var createClient = () => {
@@ -2838,7 +2845,9 @@ var createClient = () => {
2838
2845
  const omitBridged = (map) => {
2839
2846
  if (bridged.size === 0) return map;
2840
2847
  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;
2848
+ const scopes = map.scopes ? Object.fromEntries(
2849
+ Object.entries(map.scopes).map(([scope, imports]) => [scope, drop(imports)])
2850
+ ) : map.scopes;
2842
2851
  return { ...map, imports: drop(map.imports), ...scopes ? { scopes } : {} };
2843
2852
  };
2844
2853
  const postAndAwaitAck = (message, ackType) => new Promise((resolve, reject) => {
@@ -2891,7 +2900,7 @@ var getNodeLoaderClient = () => {
2891
2900
  return cached;
2892
2901
  };
2893
2902
 
2894
- // src/lib/4.config/import-map/use-node.ts
2903
+ // src/lib/node/use-node.ts
2895
2904
  var useNodeImportMap = () => {
2896
2905
  const nodeLoader = getNodeLoaderClient();
2897
2906
  return {
@@ -2907,7 +2916,7 @@ var useNodeImportMap = () => {
2907
2916
  };
2908
2917
  };
2909
2918
 
2910
- // src/lib/4.config/import-map/resolve-host-instances.ts
2919
+ // src/lib/node/resolve-host-instances.ts
2911
2920
  var matches = (specifier, patterns) => patterns.some((p) => specifier === p || specifier.startsWith(p));
2912
2921
  var isAuto = (option) => option === "all" || typeof option === "object" && option !== null && ("include" in option || "exclude" in option || "load" in option);
2913
2922
  var resolveHostInstances = async (option, deps) => {
@@ -2926,7 +2935,9 @@ var resolveHostInstances = async (option, deps) => {
2926
2935
  const integrity = typeof hostRemoteEntry === "string" ? void 0 : hostRemoteEntry.integrity;
2927
2936
  const entry = await deps.remoteEntryProvider.provide(url, { integrity });
2928
2937
  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);
2938
+ const specifiers = [
2939
+ ...new Set((entry.shared ?? []).filter((s) => s.singleton).map((s) => s.packageName))
2940
+ ].filter((s) => auto.include ? matches(s, auto.include) : true).filter((s) => auto.exclude ? !matches(s, auto.exclude) : true);
2930
2941
  const map = {};
2931
2942
  for (const specifier of specifiers) {
2932
2943
  try {
@@ -2939,11 +2950,14 @@ var resolveHostInstances = async (option, deps) => {
2939
2950
  );
2940
2951
  }
2941
2952
  }
2942
- deps.log.debug(0, `[native-federation] hostInstances bridged: ${Object.keys(map).join(", ") || "(none)"}`);
2953
+ deps.log.debug(
2954
+ 0,
2955
+ `[native-federation] hostInstances bridged: ${Object.keys(map).join(", ") || "(none)"}`
2956
+ );
2943
2957
  return map;
2944
2958
  };
2945
2959
 
2946
- // src/lib/utils/node/to-url.ts
2960
+ // src/lib/node/utils/to-url.ts
2947
2961
  import { pathToFileURL as pathToFileURL2 } from "node:url";
2948
2962
  var URL_SCHEME = /^[a-z][a-z0-9+\-.]*:/i;
2949
2963
  var toUrl = (pathOrUrl) => URL_SCHEME.test(pathOrUrl) ? pathOrUrl : pathToFileURL2(pathOrUrl).href;
@@ -2953,7 +2967,7 @@ var normalizeHostRemoteEntry = (hostRemoteEntry) => {
2953
2967
  return { ...hostRemoteEntry, url: toUrl(hostRemoteEntry.url) };
2954
2968
  };
2955
2969
 
2956
- // src/lib/init-federation.node.ts
2970
+ // src/lib/node/init-federation.node.ts
2957
2971
  var HOST_INSTANCES_GLOBAL = "__NF_HOST_INSTANCES__";
2958
2972
  var buildNodeAdapters = (config) => ({
2959
2973
  versionCheck: createVersionCheck(),
@@ -2995,45 +3009,19 @@ var initNodeFederation = (remotesOrManifestUrl, options = {}) => {
2995
3009
  );
2996
3010
  await nodeConfig.setHostInstancesFn(keys);
2997
3011
  })();
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 = {
3012
+ const factory = INIT_FLOW_FACTORY({ adapters, config });
3013
+ const initFlow = createInitFlow(factory);
3014
+ const initRemoteEntryFlow = createInitRemoteEntryFlow(factory);
3015
+ return hostInstancesReady.then(() => initFlow(remotesOrManifestUrl)).then(({ loadRemoteModule }) => nodeConfig.nodeLoader.ready().then(() => loadRemoteModule)).then(
3016
+ (loadRemoteModule) => createFederationResult({
3010
3017
  config,
3011
3018
  adapters,
3012
3019
  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`);
3020
+ initRemoteEntryFlow,
3021
+ afterInitRemoteEntry: () => nodeConfig.nodeLoader.ready()
3022
+ })
3023
+ ).catch((e) => {
3024
+ createStateDump(config, adapters)(`[init] STATE DUMP`);
3037
3025
  return Promise.reject(e);
3038
3026
  });
3039
3027
  };