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