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