@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
package/fesm2022/options.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
// src/lib/2.app/config/log.contract.ts
|
|
1
|
+
// src/lib/core/2.app/config/log.contract.ts
|
|
2
2
|
var LogLevel = {
|
|
3
3
|
debug: 0,
|
|
4
4
|
warn: 1,
|
|
5
5
|
error: 2
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
// src/lib/4.config/logging/console.logger.ts
|
|
8
|
+
// src/lib/core/4.config/logging/console.logger.ts
|
|
9
9
|
var consoleLogger = {
|
|
10
10
|
/* eslint no-console: "off", curly: "error" */
|
|
11
11
|
debug: (step, msg, err) => !!err ? console.log(`[DEBUG][${step}]: ${msg}`, err) : console.log(`[DEBUG][${step}]: ${msg}`),
|
|
@@ -13,7 +13,7 @@ var consoleLogger = {
|
|
|
13
13
|
warn: (step, msg, err) => !!err ? console.warn(`[NF][${step}]: ${msg}`, err) : console.warn(`[NF][${step}]: ${msg}`)
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
// src/lib/4.config/logging/noop.logger.ts
|
|
16
|
+
// src/lib/core/4.config/logging/noop.logger.ts
|
|
17
17
|
var noopLogger = {
|
|
18
18
|
debug: () => {
|
|
19
19
|
},
|
|
@@ -23,7 +23,7 @@ var noopLogger = {
|
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
// src/lib/native-federation.error.ts
|
|
26
|
+
// src/lib/core/native-federation.error.ts
|
|
27
27
|
var NFError = class extends Error {
|
|
28
28
|
constructor(message, cause) {
|
|
29
29
|
super(message, cause);
|
|
@@ -46,7 +46,7 @@ var cloneEntry = (name, raw) => {
|
|
|
46
46
|
throw new NFError(`Could not clone entry '${String(name)}'`);
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
-
// src/lib/4.config/storage/global-this.storage.ts
|
|
49
|
+
// src/lib/core/4.config/storage/global-this.storage.ts
|
|
50
50
|
var globalThisStorageEntry = (namespace) => (key, initialValue) => {
|
|
51
51
|
if (!globalThis[namespace]) {
|
|
52
52
|
globalThis[namespace] = {};
|
|
@@ -69,7 +69,7 @@ var globalThisStorageEntry = (namespace) => (key, initialValue) => {
|
|
|
69
69
|
return entry;
|
|
70
70
|
};
|
|
71
71
|
|
|
72
|
-
// src/lib/4.config/storage/local.storage.ts
|
|
72
|
+
// src/lib/core/4.config/storage/local.storage.ts
|
|
73
73
|
var localStorageEntry = (namespace) => (key, initialValue) => {
|
|
74
74
|
if (!localStorage.getItem(`${namespace}.${String(key)}`)) {
|
|
75
75
|
localStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));
|
|
@@ -92,7 +92,7 @@ var localStorageEntry = (namespace) => (key, initialValue) => {
|
|
|
92
92
|
return entry;
|
|
93
93
|
};
|
|
94
94
|
|
|
95
|
-
// src/lib/4.config/storage/session.storage.ts
|
|
95
|
+
// src/lib/core/4.config/storage/session.storage.ts
|
|
96
96
|
var sessionStorageEntry = (namespace) => (key, initialValue) => {
|
|
97
97
|
if (!sessionStorage.getItem(`${namespace}.${String(key)}`)) {
|
|
98
98
|
sessionStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));
|
|
@@ -115,7 +115,7 @@ var sessionStorageEntry = (namespace) => (key, initialValue) => {
|
|
|
115
115
|
return entry;
|
|
116
116
|
};
|
|
117
117
|
|
|
118
|
-
// src/lib/4.config/import-map/trusted-types.ts
|
|
118
|
+
// src/lib/core/4.config/import-map/trusted-types.ts
|
|
119
119
|
var IMPORT_MAP_KEYS = /* @__PURE__ */ new Set(["imports", "scopes", "integrity"]);
|
|
120
120
|
var validateImportMapJSON = (input) => {
|
|
121
121
|
let parsed;
|
|
@@ -173,7 +173,7 @@ var getTrustedTypesPolicy = (name = "nfo") => {
|
|
|
173
173
|
return cachedPolicy;
|
|
174
174
|
};
|
|
175
175
|
|
|
176
|
-
// src/lib/4.config/import-map/replace-in-dom.ts
|
|
176
|
+
// src/lib/core/4.config/import-map/replace-in-dom.ts
|
|
177
177
|
var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts = {}) => {
|
|
178
178
|
if (opts?.override) {
|
|
179
179
|
document.head.querySelectorAll(`script[type="${mapType}"]`).forEach((importMap2) => importMap2.remove());
|
|
@@ -188,7 +188,7 @@ var replaceInDOM = (mapType, trustedTypesPolicyName = "nfo") => (importMap, opts
|
|
|
188
188
|
return Promise.resolve(importMap);
|
|
189
189
|
};
|
|
190
190
|
|
|
191
|
-
// src/lib/4.config/import-map/use-import-shim.ts
|
|
191
|
+
// src/lib/core/4.config/import-map/use-import-shim.ts
|
|
192
192
|
var useShimImportMap = (cfg = { shimMode: false }, trustedTypesPolicyName = "nfo") => ({
|
|
193
193
|
loadModuleFn: (url) => {
|
|
194
194
|
const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);
|
|
@@ -203,7 +203,7 @@ var useShimImportMap = (cfg = { shimMode: false }, trustedTypesPolicyName = "nfo
|
|
|
203
203
|
}
|
|
204
204
|
});
|
|
205
205
|
|
|
206
|
-
// src/lib/4.config/import-map/use-default.ts
|
|
206
|
+
// src/lib/core/4.config/import-map/use-default.ts
|
|
207
207
|
var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
|
|
208
208
|
loadModuleFn: (url) => {
|
|
209
209
|
const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);
|
|
@@ -218,14 +218,14 @@ var useDefaultImportMap = (trustedTypesPolicyName = "nfo") => ({
|
|
|
218
218
|
}
|
|
219
219
|
});
|
|
220
220
|
|
|
221
|
-
// src/lib/4.config/mode/default.profile.ts
|
|
221
|
+
// src/lib/core/4.config/mode/default.profile.ts
|
|
222
222
|
var defaultProfile = {
|
|
223
223
|
latestSharedExternal: false,
|
|
224
224
|
overrideCachedRemotes: "init-only",
|
|
225
225
|
overrideCachedRemotesIfURLMatches: false
|
|
226
226
|
};
|
|
227
227
|
|
|
228
|
-
// src/lib/4.config/mode/caching.profile.ts
|
|
228
|
+
// src/lib/core/4.config/mode/caching.profile.ts
|
|
229
229
|
var cachingProfile = {
|
|
230
230
|
latestSharedExternal: false,
|
|
231
231
|
overrideCachedRemotes: "never",
|
package/fesm2022/options.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/lib/2.app/config/log.contract.ts", "../../src/lib/4.config/logging/console.logger.ts", "../../src/lib/4.config/logging/noop.logger.ts", "../../src/lib/native-federation.error.ts", "../../src/lib/utils/clone-entry.ts", "../../src/lib/4.config/storage/global-this.storage.ts", "../../src/lib/4.config/storage/local.storage.ts", "../../src/lib/4.config/storage/session.storage.ts", "../../src/lib/4.config/import-map/trusted-types.ts", "../../src/lib/4.config/import-map/replace-in-dom.ts", "../../src/lib/4.config/import-map/use-import-shim.ts", "../../src/lib/4.config/import-map/use-default.ts", "../../src/lib/4.config/mode/default.profile.ts", "../../src/lib/4.config/mode/caching.profile.ts"],
|
|
4
|
-
"sourcesContent": ["export const LogLevel = {\n debug: 0,\n warn: 1,\n error: 2,\n};\n\nexport type LogType = keyof typeof LogLevel;\n\nexport type Logger = {\n error: (step: number, msg: string, details?: unknown) => void;\n warn: (step: number, msg: string, details?: unknown) => void;\n debug: (step: number, msg: string, details?: unknown) => void;\n};\n\nexport type LogHandler = Logger & {\n level: LogType;\n};\n\nexport type LoggingConfig = {\n log: LogHandler;\n sse: boolean;\n};\n\nexport type LoggingOptions = {\n logger?: Logger;\n logLevel?: LogType;\n sse?: boolean;\n};\n", "import type { Logger } from 'lib/2.app/config/log.contract';\n\nconst consoleLogger: Logger = {\n /* eslint no-console: \"off\", curly: \"error\" */\n debug: (step: number, msg: string, err) =>\n !!err ? console.log(`[DEBUG][${step}]: ${msg}`, err) : console.log(`[DEBUG][${step}]: ${msg}`),\n error: (step: number, msg: string, err) =>\n !!err ? console.error(`[NF][${step}]: ${msg}`, err) : console.error(`[NF][${step}]: ${msg}`),\n warn: (step: number, msg: string, err) =>\n !!err ? console.warn(`[NF][${step}]: ${msg}`, err) : console.warn(`[NF][${step}]: ${msg}`),\n};\n\nexport { consoleLogger };\n", "import type { Logger } from 'lib/2.app/config/log.contract';\n\nconst noopLogger: Logger = {\n debug: () => {},\n error: () => {},\n warn: () => {},\n};\n\nexport { noopLogger };\n", "class NFError extends Error {\n constructor(message: string, cause?: Error) {\n super(message, cause);\n this.name = 'NFError';\n }\n}\n\nexport { NFError };\n", "import type { StorageEntryKey } from 'lib/2.app/config/storage.contract';\nimport { NFError } from 'lib/native-federation.error';\n\ntype CloneEntry = <T>(name: StorageEntryKey, raw: T) => T;\n\nconst cloneEntry: CloneEntry = <T>(name: StorageEntryKey, raw: T) => {\n try {\n if (typeof structuredClone === 'function') {\n return structuredClone(raw);\n }\n } catch {\n /* structured clone is unavailable */\n }\n try {\n return JSON.parse(JSON.stringify(raw));\n } catch {\n /* object is not stringifyable */\n }\n throw new NFError(`Could not clone entry '${String(name)}'`);\n};\n\nexport { CloneEntry, cloneEntry };\n", "import { cloneEntry } from '../../utils/clone-entry';\nimport { type StorageEntryCreator, type StorageEntry } from 'lib/2.app/config/storage.contract';\n\nconst globalThisStorageEntry: StorageEntryCreator =\n (namespace: string) =>\n <TValue>(key: string, initialValue: TValue) => {\n if (!(globalThis as unknown as { [namespace]: unknown })[namespace]) {\n (globalThis as unknown as { [namespace]: unknown })[namespace] = {};\n }\n\n const storage = (globalThis as unknown as { [namespace]: { [P in typeof key]: TValue } })[\n namespace\n ]!;\n if (!storage[key]) storage[key] = initialValue;\n\n const entry: StorageEntry<TValue> = {\n get(): TValue {\n return cloneEntry(key, storage[key])!;\n },\n set(value: TValue): StorageEntry<TValue> {\n storage[key] = cloneEntry(key, value);\n return entry;\n },\n clear(): StorageEntry<TValue> {\n storage[key] = cloneEntry(key, initialValue);\n return this;\n },\n };\n\n return entry;\n };\n\nexport { globalThisStorageEntry };\n", "import type { StorageEntryCreator, StorageEntry } from 'lib/2.app/config/storage.contract';\n\nconst localStorageEntry: StorageEntryCreator =\n (namespace: string) =>\n <TValue>(key: string, initialValue: TValue) => {\n if (!localStorage.getItem(`${namespace}.${String(key)}`)) {\n localStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));\n }\n const entry: StorageEntry<TValue> = {\n get() {\n const fromCache = localStorage.getItem(`${namespace}.${String(key)}`);\n if (!fromCache) return undefined;\n return JSON.parse(fromCache);\n },\n set(value: TValue): StorageEntry<TValue> {\n localStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(value));\n return entry;\n },\n clear(): StorageEntry<TValue> {\n localStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));\n return this;\n },\n };\n return entry;\n };\n\nexport { localStorageEntry };\n", "import type { StorageEntryCreator, StorageEntry } from 'lib/2.app/config/storage.contract';\n\nconst sessionStorageEntry: StorageEntryCreator =\n (namespace: string) =>\n <TValue>(key: string, initialValue: TValue) => {\n if (!sessionStorage.getItem(`${namespace}.${String(key)}`)) {\n sessionStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));\n }\n const entry: StorageEntry<TValue> = {\n get() {\n const fromCache = sessionStorage.getItem(`${namespace}.${String(key)}`);\n if (!fromCache) return undefined;\n return JSON.parse(fromCache);\n },\n set(value: TValue): StorageEntry<TValue> {\n sessionStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(value));\n return entry;\n },\n clear(): StorageEntry<TValue> {\n sessionStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));\n return this;\n },\n };\n return entry;\n };\n\nexport { sessionStorageEntry };\n", "type TTCreateScript = (input: string) => string;\ntype TTCreateScriptURL = (input: string) => string;\n\ntype TTPolicyRules = {\n createScript?: TTCreateScript;\n createScriptURL?: TTCreateScriptURL;\n};\n\ntype TTPolicy = {\n createScript: TTCreateScript;\n createScriptURL: TTCreateScriptURL;\n};\n\ntype TTFactory = {\n createPolicy: (name: string, rules: TTPolicyRules) => TTPolicy;\n};\n\nexport type NFTrustedTypesPolicy = {\n createScript: (input: string) => string;\n createScriptURL: (input: string) => string;\n};\n\nconst IMPORT_MAP_KEYS = new Set(['imports', 'scopes', 'integrity']);\n\nconst validateImportMapJSON = (input: string): string => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch {\n throw new TypeError('[nf-orchestrator] trusted-types: import map is not valid JSON');\n }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new TypeError('[nf-orchestrator] trusted-types: import map must be a plain object');\n }\n for (const key of Object.keys(parsed as Record<string, unknown>)) {\n if (!IMPORT_MAP_KEYS.has(key)) {\n throw new TypeError(`[nf-orchestrator] trusted-types: unexpected key \"${key}\" in import map`);\n }\n }\n return input;\n};\n\nconst validateScriptURL = (input: string): string => {\n const base = typeof location !== 'undefined' ? location.href : 'http://localhost/';\n let url: URL;\n try {\n url = new URL(input, base);\n } catch {\n throw new TypeError(`[nf-orchestrator] trusted-types: invalid script URL \"${input}\"`);\n }\n if (url.protocol !== 'https:' && url.protocol !== 'http:') {\n throw new TypeError(\n `[nf-orchestrator] trusted-types: disallowed protocol \"${url.protocol}\" for script URL`\n );\n }\n return input;\n};\n\nconst passThroughPolicy: NFTrustedTypesPolicy = {\n createScript: input => input,\n createScriptURL: input => input,\n};\n\nlet cachedPolicy: NFTrustedTypesPolicy | null = null;\n\nexport const getTrustedTypesPolicy = (\n name: string | false = 'nfo'\n): NFTrustedTypesPolicy => {\n if (name === false) return passThroughPolicy;\n if (cachedPolicy) return cachedPolicy;\n\n const factory = (globalThis as { trustedTypes?: TTFactory }).trustedTypes;\n if (!factory) {\n cachedPolicy = passThroughPolicy;\n return cachedPolicy;\n }\n\n const native = factory.createPolicy(name, {\n createScript: validateImportMapJSON,\n createScriptURL: validateScriptURL,\n });\n\n cachedPolicy = {\n createScript: input => native.createScript(input) as unknown as string,\n createScriptURL: input => native.createScriptURL(input) as unknown as string,\n };\n return cachedPolicy;\n};\n\nexport const __resetTrustedTypesPolicyForTests = (): void => {\n cachedPolicy = null;\n};\n", "import type { ImportMap } from 'lib/1.domain';\nimport type { SetImportMap } from 'lib/2.app/config/import-map.contract';\nimport { getTrustedTypesPolicy } from './trusted-types';\n\nexport const replaceInDOM =\n (mapType: string, trustedTypesPolicyName: string | false = 'nfo'): SetImportMap =>\n (importMap: ImportMap, opts = {}) => {\n if (opts?.override) {\n document.head\n .querySelectorAll(`script[type=\"${mapType}\"]`)\n .forEach(importMap => importMap.remove());\n }\n\n const policy = getTrustedTypesPolicy(trustedTypesPolicyName);\n document.head.appendChild(\n Object.assign(document.createElement('script'), {\n type: mapType,\n text: policy.createScript(JSON.stringify(importMap)),\n })\n );\n return Promise.resolve(importMap);\n };\n", "import type { ImportMapConfig } from 'lib/2.app/config/import-map.contract';\nimport { replaceInDOM } from './replace-in-dom';\nimport { getTrustedTypesPolicy } from './trusted-types';\n\ndeclare function importShim<T>(url: string): T;\n\nconst useShimImportMap = (\n cfg: { shimMode: boolean } = { shimMode: false },\n trustedTypesPolicyName: string | false = 'nfo'\n): ImportMapConfig => ({\n loadModuleFn: url => {\n const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);\n return importShim(String(trusted));\n },\n setImportMapFn: replaceInDOM(\n cfg.shimMode ? 'importmap-shim' : 'importmap',\n trustedTypesPolicyName\n ),\n reloadBrowserFn: () => {\n window.location.reload();\n },\n});\n\nexport { useShimImportMap };\n", "import type { ImportMapConfig } from 'lib/2.app/config/import-map.contract';\nimport { replaceInDOM } from './replace-in-dom';\nimport { getTrustedTypesPolicy } from './trusted-types';\n\nconst useDefaultImportMap = (\n trustedTypesPolicyName: string | false = 'nfo'\n): ImportMapConfig => ({\n loadModuleFn: url => {\n const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);\n return import(/* @vite-ignore */ trusted);\n },\n setImportMapFn: replaceInDOM('importmap', trustedTypesPolicyName),\n reloadBrowserFn: () => {\n window.location.reload();\n },\n});\n\nexport { useDefaultImportMap };\n", "import type { ModeProfileConfig } from 'lib/2.app/config/mode.contract';\n\nexport const defaultProfile: ModeProfileConfig = {\n latestSharedExternal: false,\n overrideCachedRemotes: 'init-only',\n overrideCachedRemotesIfURLMatches: false,\n};\n", "import type { ModeProfileConfig } from 'lib/2.app/config/mode.contract';\n\nexport const cachingProfile: ModeProfileConfig = {\n latestSharedExternal: false,\n overrideCachedRemotes: 'never',\n overrideCachedRemotesIfURLMatches: false,\n};\n"],
|
|
5
|
-
"mappings": ";AAAO,IAAM,WAAW;AAAA,EACtB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AACT;;;ACFA,IAAM,gBAAwB;AAAA;AAAA,EAE5B,OAAO,CAAC,MAAc,KAAa,QACjC,CAAC,CAAC,MAAM,QAAQ,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,QAAQ,IAAI,WAAW,IAAI,MAAM,GAAG,EAAE;AAAA,EAC/F,OAAO,CAAC,MAAc,KAAa,QACjC,CAAC,CAAC,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,QAAQ,MAAM,QAAQ,IAAI,MAAM,GAAG,EAAE;AAAA,EAC7F,MAAM,CAAC,MAAc,KAAa,QAChC,CAAC,CAAC,MAAM,QAAQ,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,QAAQ,KAAK,QAAQ,IAAI,MAAM,GAAG,EAAE;AAC7F;;;ACRA,IAAM,aAAqB;AAAA,EACzB,OAAO,MAAM;AAAA,EAAC;AAAA,EACd,OAAO,MAAM;AAAA,EAAC;AAAA,EACd,MAAM,MAAM;AAAA,EAAC;AACf;;;ACNA,IAAM,UAAN,cAAsB,MAAM;AAAA,EAC1B,YAAY,SAAiB,OAAe;AAC1C,UAAM,SAAS,KAAK;AACpB,SAAK,OAAO;AAAA,EACd;AACF;;;ACAA,IAAM,aAAyB,CAAI,MAAuB,QAAW;AACnE,MAAI;AACF,QAAI,OAAO,oBAAoB,YAAY;AACzC,aAAO,gBAAgB,GAAG;AAAA,IAC5B;AAAA,EACF,QAAQ;AAAA,EAER;AACA,MAAI;AACF,WAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAAA,EACvC,QAAQ;AAAA,EAER;AACA,QAAM,IAAI,QAAQ,0BAA0B,OAAO,IAAI,CAAC,GAAG;AAC7D;;;
|
|
3
|
+
"sources": ["../../src/lib/core/2.app/config/log.contract.ts", "../../src/lib/core/4.config/logging/console.logger.ts", "../../src/lib/core/4.config/logging/noop.logger.ts", "../../src/lib/core/native-federation.error.ts", "../../src/lib/utils/clone-entry.ts", "../../src/lib/core/4.config/storage/global-this.storage.ts", "../../src/lib/core/4.config/storage/local.storage.ts", "../../src/lib/core/4.config/storage/session.storage.ts", "../../src/lib/core/4.config/import-map/trusted-types.ts", "../../src/lib/core/4.config/import-map/replace-in-dom.ts", "../../src/lib/core/4.config/import-map/use-import-shim.ts", "../../src/lib/core/4.config/import-map/use-default.ts", "../../src/lib/core/4.config/mode/default.profile.ts", "../../src/lib/core/4.config/mode/caching.profile.ts"],
|
|
4
|
+
"sourcesContent": ["export const LogLevel = {\n debug: 0,\n warn: 1,\n error: 2,\n};\n\nexport type LogType = keyof typeof LogLevel;\n\nexport type Logger = {\n error: (step: number, msg: string, details?: unknown) => void;\n warn: (step: number, msg: string, details?: unknown) => void;\n debug: (step: number, msg: string, details?: unknown) => void;\n};\n\nexport type LogHandler = Logger & {\n level: LogType;\n};\n\nexport type LoggingConfig = {\n log: LogHandler;\n sse: boolean;\n};\n\nexport type LoggingOptions = {\n logger?: Logger;\n logLevel?: LogType;\n sse?: boolean;\n};\n", "import type { Logger } from 'lib/core/2.app/config/log.contract';\n\nconst consoleLogger: Logger = {\n /* eslint no-console: \"off\", curly: \"error\" */\n debug: (step: number, msg: string, err) =>\n !!err ? console.log(`[DEBUG][${step}]: ${msg}`, err) : console.log(`[DEBUG][${step}]: ${msg}`),\n error: (step: number, msg: string, err) =>\n !!err ? console.error(`[NF][${step}]: ${msg}`, err) : console.error(`[NF][${step}]: ${msg}`),\n warn: (step: number, msg: string, err) =>\n !!err ? console.warn(`[NF][${step}]: ${msg}`, err) : console.warn(`[NF][${step}]: ${msg}`),\n};\n\nexport { consoleLogger };\n", "import type { Logger } from 'lib/core/2.app/config/log.contract';\n\nconst noopLogger: Logger = {\n debug: () => {},\n error: () => {},\n warn: () => {},\n};\n\nexport { noopLogger };\n", "class NFError extends Error {\n constructor(message: string, cause?: Error) {\n super(message, cause);\n this.name = 'NFError';\n }\n}\n\nexport { NFError };\n", "import type { StorageEntryKey } from 'lib/core/2.app/config/storage.contract';\nimport { NFError } from 'lib/core/native-federation.error';\n\ntype CloneEntry = <T>(name: StorageEntryKey, raw: T) => T;\n\nconst cloneEntry: CloneEntry = <T>(name: StorageEntryKey, raw: T) => {\n try {\n if (typeof structuredClone === 'function') {\n return structuredClone(raw);\n }\n } catch {\n /* structured clone is unavailable */\n }\n try {\n return JSON.parse(JSON.stringify(raw));\n } catch {\n /* object is not stringifyable */\n }\n throw new NFError(`Could not clone entry '${String(name)}'`);\n};\n\nexport { CloneEntry, cloneEntry };\n", "import { cloneEntry } from 'lib/utils/clone-entry';\nimport {\n type StorageEntryCreator,\n type StorageEntry,\n} from 'lib/core/2.app/config/storage.contract';\n\nconst globalThisStorageEntry: StorageEntryCreator =\n (namespace: string) =>\n <TValue>(key: string, initialValue: TValue) => {\n if (!(globalThis as unknown as { [namespace]: unknown })[namespace]) {\n (globalThis as unknown as { [namespace]: unknown })[namespace] = {};\n }\n\n const storage = (globalThis as unknown as { [namespace]: { [P in typeof key]: TValue } })[\n namespace\n ]!;\n if (!storage[key]) storage[key] = initialValue;\n\n const entry: StorageEntry<TValue> = {\n get(): TValue {\n return cloneEntry(key, storage[key])!;\n },\n set(value: TValue): StorageEntry<TValue> {\n storage[key] = cloneEntry(key, value);\n return entry;\n },\n clear(): StorageEntry<TValue> {\n storage[key] = cloneEntry(key, initialValue);\n return this;\n },\n };\n\n return entry;\n };\n\nexport { globalThisStorageEntry };\n", "import type { StorageEntryCreator, StorageEntry } from 'lib/core/2.app/config/storage.contract';\n\nconst localStorageEntry: StorageEntryCreator =\n (namespace: string) =>\n <TValue>(key: string, initialValue: TValue) => {\n if (!localStorage.getItem(`${namespace}.${String(key)}`)) {\n localStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));\n }\n const entry: StorageEntry<TValue> = {\n get() {\n const fromCache = localStorage.getItem(`${namespace}.${String(key)}`);\n if (!fromCache) return undefined;\n return JSON.parse(fromCache);\n },\n set(value: TValue): StorageEntry<TValue> {\n localStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(value));\n return entry;\n },\n clear(): StorageEntry<TValue> {\n localStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));\n return this;\n },\n };\n return entry;\n };\n\nexport { localStorageEntry };\n", "import type { StorageEntryCreator, StorageEntry } from 'lib/core/2.app/config/storage.contract';\n\nconst sessionStorageEntry: StorageEntryCreator =\n (namespace: string) =>\n <TValue>(key: string, initialValue: TValue) => {\n if (!sessionStorage.getItem(`${namespace}.${String(key)}`)) {\n sessionStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));\n }\n const entry: StorageEntry<TValue> = {\n get() {\n const fromCache = sessionStorage.getItem(`${namespace}.${String(key)}`);\n if (!fromCache) return undefined;\n return JSON.parse(fromCache);\n },\n set(value: TValue): StorageEntry<TValue> {\n sessionStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(value));\n return entry;\n },\n clear(): StorageEntry<TValue> {\n sessionStorage.setItem(`${namespace}.${String(key)}`, JSON.stringify(initialValue));\n return this;\n },\n };\n return entry;\n };\n\nexport { sessionStorageEntry };\n", "type TTCreateScript = (input: string) => string;\ntype TTCreateScriptURL = (input: string) => string;\n\ntype TTPolicyRules = {\n createScript?: TTCreateScript;\n createScriptURL?: TTCreateScriptURL;\n};\n\ntype TTPolicy = {\n createScript: TTCreateScript;\n createScriptURL: TTCreateScriptURL;\n};\n\ntype TTFactory = {\n createPolicy: (name: string, rules: TTPolicyRules) => TTPolicy;\n};\n\nexport type NFTrustedTypesPolicy = {\n createScript: (input: string) => string;\n createScriptURL: (input: string) => string;\n};\n\nconst IMPORT_MAP_KEYS = new Set(['imports', 'scopes', 'integrity']);\n\nconst validateImportMapJSON = (input: string): string => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch {\n throw new TypeError('[nf-orchestrator] trusted-types: import map is not valid JSON');\n }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new TypeError('[nf-orchestrator] trusted-types: import map must be a plain object');\n }\n for (const key of Object.keys(parsed as Record<string, unknown>)) {\n if (!IMPORT_MAP_KEYS.has(key)) {\n throw new TypeError(`[nf-orchestrator] trusted-types: unexpected key \"${key}\" in import map`);\n }\n }\n return input;\n};\n\nconst validateScriptURL = (input: string): string => {\n const base = typeof location !== 'undefined' ? location.href : 'http://localhost/';\n let url: URL;\n try {\n url = new URL(input, base);\n } catch {\n throw new TypeError(`[nf-orchestrator] trusted-types: invalid script URL \"${input}\"`);\n }\n if (url.protocol !== 'https:' && url.protocol !== 'http:') {\n throw new TypeError(\n `[nf-orchestrator] trusted-types: disallowed protocol \"${url.protocol}\" for script URL`\n );\n }\n return input;\n};\n\nconst passThroughPolicy: NFTrustedTypesPolicy = {\n createScript: input => input,\n createScriptURL: input => input,\n};\n\nlet cachedPolicy: NFTrustedTypesPolicy | null = null;\n\nexport const getTrustedTypesPolicy = (\n name: string | false = 'nfo'\n): NFTrustedTypesPolicy => {\n if (name === false) return passThroughPolicy;\n if (cachedPolicy) return cachedPolicy;\n\n const factory = (globalThis as { trustedTypes?: TTFactory }).trustedTypes;\n if (!factory) {\n cachedPolicy = passThroughPolicy;\n return cachedPolicy;\n }\n\n const native = factory.createPolicy(name, {\n createScript: validateImportMapJSON,\n createScriptURL: validateScriptURL,\n });\n\n cachedPolicy = {\n createScript: input => native.createScript(input) as unknown as string,\n createScriptURL: input => native.createScriptURL(input) as unknown as string,\n };\n return cachedPolicy;\n};\n\nexport const __resetTrustedTypesPolicyForTests = (): void => {\n cachedPolicy = null;\n};\n", "import type { ImportMap } from 'lib/core/1.domain';\nimport type { SetImportMap } from 'lib/core/2.app/config/import-map.contract';\nimport { getTrustedTypesPolicy } from './trusted-types';\n\nexport const replaceInDOM =\n (mapType: string, trustedTypesPolicyName: string | false = 'nfo'): SetImportMap =>\n (importMap: ImportMap, opts = {}) => {\n if (opts?.override) {\n document.head\n .querySelectorAll(`script[type=\"${mapType}\"]`)\n .forEach(importMap => importMap.remove());\n }\n\n const policy = getTrustedTypesPolicy(trustedTypesPolicyName);\n document.head.appendChild(\n Object.assign(document.createElement('script'), {\n type: mapType,\n text: policy.createScript(JSON.stringify(importMap)),\n })\n );\n return Promise.resolve(importMap);\n };\n", "import type { ImportMapConfig } from 'lib/core/2.app/config/import-map.contract';\nimport { replaceInDOM } from './replace-in-dom';\nimport { getTrustedTypesPolicy } from './trusted-types';\n\ndeclare function importShim<T>(url: string): T;\n\nconst useShimImportMap = (\n cfg: { shimMode: boolean } = { shimMode: false },\n trustedTypesPolicyName: string | false = 'nfo'\n): ImportMapConfig => ({\n loadModuleFn: url => {\n const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);\n return importShim(String(trusted));\n },\n setImportMapFn: replaceInDOM(\n cfg.shimMode ? 'importmap-shim' : 'importmap',\n trustedTypesPolicyName\n ),\n reloadBrowserFn: () => {\n window.location.reload();\n },\n});\n\nexport { useShimImportMap };\n", "import type { ImportMapConfig } from 'lib/core/2.app/config/import-map.contract';\nimport { replaceInDOM } from './replace-in-dom';\nimport { getTrustedTypesPolicy } from './trusted-types';\n\nconst useDefaultImportMap = (trustedTypesPolicyName: string | false = 'nfo'): ImportMapConfig => ({\n loadModuleFn: url => {\n const trusted = getTrustedTypesPolicy(trustedTypesPolicyName).createScriptURL(url);\n return import(/* @vite-ignore */ trusted);\n },\n setImportMapFn: replaceInDOM('importmap', trustedTypesPolicyName),\n reloadBrowserFn: () => {\n window.location.reload();\n },\n});\n\nexport { useDefaultImportMap };\n", "import type { ModeProfileConfig } from 'lib/core/2.app/config/mode.contract';\n\nexport const defaultProfile: ModeProfileConfig = {\n latestSharedExternal: false,\n overrideCachedRemotes: 'init-only',\n overrideCachedRemotesIfURLMatches: false,\n};\n", "import type { ModeProfileConfig } from 'lib/core/2.app/config/mode.contract';\n\nexport const cachingProfile: ModeProfileConfig = {\n latestSharedExternal: false,\n overrideCachedRemotes: 'never',\n overrideCachedRemotesIfURLMatches: false,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["importMap"]
|
|
7
7
|
}
|
package/fesm2022/registry.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/lib/native-federation.error.ts
|
|
1
|
+
// src/lib/core/native-federation.error.ts
|
|
2
2
|
var NFError = class extends Error {
|
|
3
3
|
constructor(message, cause) {
|
|
4
4
|
super(message, cause);
|
|
@@ -21,7 +21,7 @@ var cloneEntry = (name, raw) => {
|
|
|
21
21
|
throw new NFError(`Could not clone entry '${String(name)}'`);
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
// src/lib/
|
|
24
|
+
// src/lib/registry/setup-registry.ts
|
|
25
25
|
function createRegistry(opts) {
|
|
26
26
|
const cfg = {
|
|
27
27
|
maxStreams: opts.maxStreams,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/lib/native-federation.error.ts", "../../src/lib/utils/clone-entry.ts", "../../src/lib/
|
|
4
|
-
"sourcesContent": ["class NFError extends Error {\n constructor(message: string, cause?: Error) {\n super(message, cause);\n this.name = 'NFError';\n }\n}\n\nexport { NFError };\n", "import type { StorageEntryKey } from 'lib/2.app/config/storage.contract';\nimport { NFError } from 'lib/native-federation.error';\n\ntype CloneEntry = <T>(name: StorageEntryKey, raw: T) => T;\n\nconst cloneEntry: CloneEntry = <T>(name: StorageEntryKey, raw: T) => {\n try {\n if (typeof structuredClone === 'function') {\n return structuredClone(raw);\n }\n } catch {\n /* structured clone is unavailable */\n }\n try {\n return JSON.parse(JSON.stringify(raw));\n } catch {\n /* object is not stringifyable */\n }\n throw new NFError(`Could not clone entry '${String(name)}'`);\n};\n\nexport { CloneEntry, cloneEntry };\n", "import type {\n NFEventConsumer,\n NFEventData,\n NFEventProvider,\n NFEventUnsubscribe,\n} from '
|
|
5
|
-
"mappings": ";AAAA,IAAM,UAAN,cAAsB,MAAM;AAAA,EAC1B,YAAY,SAAiB,OAAe;AAC1C,UAAM,SAAS,KAAK;AACpB,SAAK,OAAO;AAAA,EACd;AACF;;;ACAA,IAAM,aAAyB,CAAI,MAAuB,QAAW;AACnE,MAAI;AACF,QAAI,OAAO,oBAAoB,YAAY;AACzC,aAAO,gBAAgB,GAAG;AAAA,IAC5B;AAAA,EACF,QAAQ;AAAA,EAER;AACA,MAAI;AACF,WAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAAA,EACvC,QAAQ;AAAA,EAER;AACA,QAAM,IAAI,QAAQ,0BAA0B,OAAO,IAAI,CAAC,GAAG;AAC7D;;;
|
|
3
|
+
"sources": ["../../src/lib/core/native-federation.error.ts", "../../src/lib/utils/clone-entry.ts", "../../src/lib/registry/setup-registry.ts"],
|
|
4
|
+
"sourcesContent": ["class NFError extends Error {\n constructor(message: string, cause?: Error) {\n super(message, cause);\n this.name = 'NFError';\n }\n}\n\nexport { NFError };\n", "import type { StorageEntryKey } from 'lib/core/2.app/config/storage.contract';\nimport { NFError } from 'lib/core/native-federation.error';\n\ntype CloneEntry = <T>(name: StorageEntryKey, raw: T) => T;\n\nconst cloneEntry: CloneEntry = <T>(name: StorageEntryKey, raw: T) => {\n try {\n if (typeof structuredClone === 'function') {\n return structuredClone(raw);\n }\n } catch {\n /* structured clone is unavailable */\n }\n try {\n return JSON.parse(JSON.stringify(raw));\n } catch {\n /* object is not stringifyable */\n }\n throw new NFError(`Could not clone entry '${String(name)}'`);\n};\n\nexport { CloneEntry, cloneEntry };\n", "import type {\n NFEventConsumer,\n NFEventData,\n NFEventProvider,\n NFEventUnsubscribe,\n} from './event.contract';\nimport type { ForManagingEvents } from './for-managing-events.port';\nimport type { NFEventRegistryConfig, NFEventRegistryOptions } from './registry.contract';\nimport { cloneEntry } from 'lib/utils/clone-entry';\n\nexport function createRegistry(opts: NFEventRegistryOptions): ForManagingEvents {\n const cfg: NFEventRegistryConfig = {\n maxStreams: opts.maxStreams,\n maxEvents: opts.maxEvents ?? 1,\n removePercentage: opts.removePercentage,\n };\n\n // resources\n const resources = new Map<string, unknown>();\n const pending = new Map<string, Set<NFEventConsumer<any>>>();\n\n // events\n const events = new Map<string, NFEventData[]>();\n const listeners = new Map<string, Set<NFEventConsumer<NFEventData<any>>>>();\n const recentlyUsedStreams = new Set<string>();\n\n // Clamp to (maxEvents - 1) so at least one event always survives the trim.\n // Without this, maxEvents=1 (or any config where REMOVE_EVENTS == maxEvents)\n // would compute slice(-0), which returns the whole array and never trims.\n const REMOVE_EVENTS = Math.min(\n cfg.maxEvents - 1,\n cfg.removePercentage ? Math.ceil(cfg.maxEvents * cfg.removePercentage) : 1\n );\n\n /**\n * Mark `type` as the most-recently-used stream. When `maxStreams` is set and\n * the LRU set grows past that bound, the oldest stream (and its history) is\n * dropped. No-op when `maxStreams` is undefined \u2014 streams are then unbounded.\n */\n const touchStream = (type: string): void => {\n if (!cfg.maxStreams) return;\n recentlyUsedStreams.delete(type);\n recentlyUsedStreams.add(type);\n\n if (recentlyUsedStreams.size > cfg.maxStreams) {\n const oldest = recentlyUsedStreams.values().next().value;\n if (oldest) {\n recentlyUsedStreams.delete(oldest);\n events.delete(oldest);\n }\n }\n };\n\n /**\n * Append an event to `type`'s history, trim the history if it exceeds\n * `maxEvents`, and synchronously notify all current listeners. Trimming is\n * batched: when the history overflows, it is sliced down to\n * `(maxEvents - REMOVE_EVENTS)` items so subsequent emits don't slice on\n * every call.\n */\n const appendAndNotify = <T>(type: string, event: NFEventData<T>): void => {\n let history = events.get(type) ?? [];\n history.push(event);\n\n if (history.length > cfg.maxEvents) {\n history = history.slice(-(cfg.maxEvents - REMOVE_EVENTS));\n }\n\n events.set(type, history);\n\n const typeListeners = listeners.get(type);\n if (typeListeners && typeListeners.size > 0) {\n typeListeners.forEach(listener => listener(event));\n }\n };\n\n /**\n * RESOURCE: Register a resource by name. If the resource is a provider function, it is\n * invoked to obtain the actual resource. All callbacks waiting for this\n * resource via `onReady` are invoked once the resource is registered.\n */\n const register = async <T>(type: string, resource: T | NFEventProvider<T>): Promise<void> => {\n const value =\n typeof resource === 'function' ? await (resource as NFEventProvider<T>)() : resource;\n\n resources.set(type, value);\n\n const callbacks = pending.get(type);\n if (callbacks) {\n pending.delete(type);\n callbacks.forEach(cb => cb(value));\n }\n };\n\n /**\n * RESOURCE: Subscribe to the readiness of a resource. If the resource is already\n * registered, the callback is invoked immediately. Otherwise, the callback\n * is invoked once the resource is registered.\n */\n const onReady = <T>(type: string, callback: NFEventConsumer<T>): NFEventUnsubscribe => {\n const existing = resources.get(type);\n if (existing !== undefined) {\n callback(existing as T);\n return () => {};\n }\n\n let callbacks = pending.get(type);\n if (!callbacks) {\n callbacks = new Set();\n pending.set(type, callbacks);\n }\n callbacks.add(callback);\n\n return () => {\n callbacks!.delete(callback);\n if (callbacks!.size === 0) {\n pending.delete(type);\n }\n };\n };\n\n /**\n * EVENT: Subscribe to events of a specific type. The callback is invoked for\n * all future events of that type, and \u2014 when `opts.replay > 0` \u2014 for the\n * most recent `opts.replay` events already in history. Replay deliveries are\n * scheduled via `queueMicrotask`, so the unsubscribe handle is returned\n * synchronously and the callback fires after the current task completes.\n *\n * @param type Stream identifier.\n * @param callback Listener invoked with each event (replay + future).\n * @param opts.replay Number of buffered events to replay on subscribe, taken\n * from the tail of history (most recent first, delivered\n * in chronological order). Defaults to `1`, matching the\n * BehaviorSubject pattern: a fresh subscriber receives\n * the latest state. Pass `0` to suppress replay; pass a\n * larger value (capped by `maxEvents`) to receive more\n * history.\n * @returns Function that unsubscribes the listener.\n */\n const on = <T>(\n type: string,\n callback: NFEventConsumer<NFEventData<T>>,\n opts: { replay?: number } = {}\n ): NFEventUnsubscribe => {\n const replay = opts.replay ?? 1;\n const history = events.get(type);\n\n let typeListeners = listeners.get(type);\n if (!typeListeners) {\n typeListeners = new Set();\n listeners.set(type, typeListeners);\n }\n typeListeners.add(callback);\n\n if (history && history.length > 0 && replay > 0) {\n queueMicrotask(() => {\n const start = Math.max(0, history.length - replay);\n for (let i = start; i < history.length; i++) {\n callback(cloneEntry('event channel ' + type, history[i]!));\n }\n });\n }\n\n return () => {\n typeListeners!.delete(callback);\n if (typeListeners!.size === 0) {\n listeners.delete(type);\n }\n };\n };\n\n /**\n * EVENT: Publish a new event on `type`. The event is appended to the stream's\n * history and delivered synchronously to every current listener. When\n * `maxEvents` is exceeded the history is batch-trimmed; when `maxStreams` is\n * set, emitting to a new type may evict the least-recently-used stream.\n */\n const emit = <T>(type: string, data: T): void => {\n touchStream(type);\n appendAndNotify(type, { data, timestamp: Date.now() });\n };\n\n /**\n * EVENT: Publish a new event on `type` derived from the previous value, in\n * the style of a state reducer. `updateFn` receives a structured clone of\n * the last event's data (or `undefined` if the stream is empty), and its\n * return value becomes the next event. The clone protects historical events\n * from accidental mutation inside `updateFn`.\n *\n * Use this instead of `emit` when the new state depends on the old one \u2014 it\n * collapses the read-modify-write into a single, race-free call. Requires\n * `data` to be structured-clone-able when the stream is non-empty.\n *\n * @param type Stream identifier.\n * @param updateFn Reducer: `(current | undefined) => next`. Called with a\n * cloned snapshot of the last value (or `undefined` on\n * first emit).\n */\n const update = <T>(type: string, updateFn: (current: T | undefined) => T): void => {\n touchStream(type);\n\n const history = events.get(type) ?? [];\n const lastEvent = history[history.length - 1];\n const current =\n lastEvent === undefined ? undefined : cloneEntry('event channel ' + type, lastEvent.data);\n\n appendAndNotify(type, {\n data: updateFn(current),\n timestamp: Date.now(),\n });\n };\n\n const clear = (type?: string): void => {\n if (type) {\n // Clear event-related data\n events.delete(type);\n listeners.delete(type);\n\n // Clear resource-related data\n resources.delete(type);\n pending.delete(type);\n\n recentlyUsedStreams.delete(type);\n } else {\n // Clear all data\n events.clear();\n listeners.clear();\n pending.clear();\n resources.clear();\n recentlyUsedStreams.clear();\n }\n };\n\n return () => ({\n register,\n onReady,\n emit,\n update,\n on,\n clear,\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["opts"]
|
|
7
7
|
}
|
package/fesm2022/sdk.mjs
CHANGED
|
@@ -4,7 +4,7 @@ var __export = (target, all) => {
|
|
|
4
4
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
-
// src/lib/1.domain/externals/external.contract.ts
|
|
7
|
+
// src/lib/core/1.domain/externals/external.contract.ts
|
|
8
8
|
var GLOBAL_SCOPE = "__GLOBAL__";
|
|
9
9
|
var STRICT_SCOPE = "strict";
|
|
10
10
|
|
|
@@ -68,7 +68,7 @@ function getScope(path) {
|
|
|
68
68
|
return `${parts.join("/")}/`;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
// src/lib/native-federation.error.ts
|
|
71
|
+
// src/lib/core/native-federation.error.ts
|
|
72
72
|
var NFError = class extends Error {
|
|
73
73
|
constructor(message, cause) {
|
|
74
74
|
super(message, cause);
|
package/fesm2022/sdk.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/lib/1.domain/externals/external.contract.ts", "../../src/lib/utils/optional.ts", "../../src/lib/utils/path.ts", "../../src/lib/native-federation.error.ts", "../../src/lib/utils/clone-entry.ts"],
|
|
4
|
-
"sourcesContent": ["import type { SharedVersion, ScopedVersion } from './version.contract';\n\nexport type ExternalName = string;\n\nexport type ScopedExternals = Record<string, ScopedExternal>;\n\nexport const GLOBAL_SCOPE = '__GLOBAL__';\n\nexport const STRICT_SCOPE = 'strict';\n\nexport type SharedExternal = {\n dirty: boolean;\n versions: SharedVersion[];\n};\n\nexport type shareScope = Record<string, SharedExternal>;\n\nexport type SharedExternals = Record<string, shareScope> & { [GLOBAL_SCOPE]: shareScope };\n\nexport type ScopedExternal = Record<string, ScopedVersion>;\n", "export class Optional<T> {\n private constructor(private item?: T) {}\n\n public static of<T>(item?: T): Optional<T> {\n return new Optional(item);\n }\n public static empty<U>(): Optional<U> {\n return Optional.of<U>(undefined);\n }\n\n public isPresent() {\n return typeof this.item !== 'undefined' && this.item !== null;\n }\n public set<U>(other: U) {\n return Optional.of(other);\n }\n\n public ifPresent(callback: (_: T) => void): void {\n if (this.isPresent()) callback(this.item as T);\n }\n\n public map<U>(callback: (_: NonNullable<T>) => U | Optional<U>): Optional<U> {\n if (!this.isPresent()) return Optional.empty();\n\n const result = callback(this.item as NonNullable<T>);\n return result instanceof Optional ? result : Optional.of(result);\n }\n\n public orElse(other: Required<T>): NonNullable<T> {\n return this.isPresent() ? (this.item as NonNullable<T>) : (other as NonNullable<T>);\n }\n\n public orThrow(error: Error | string | (() => Error)): NonNullable<T> {\n if (this.isPresent()) return this.item as NonNullable<T>;\n if (typeof error === 'function') throw error();\n throw typeof error === 'string' ? new Error(error) : error;\n }\n\n public get(): T | undefined {\n return this.item;\n }\n}\n", "function join(pathA: string, pathB: string): string {\n pathA = pathA.endsWith('/') ? pathA.slice(0, -1) : pathA;\n pathB = pathB.startsWith('/') ? pathB.slice(1) : pathB;\n return `${pathA}/${pathB}`;\n}\n\nfunction getScope(path: string) {\n if (!path) return '';\n\n const parts = path.split('/');\n\n if (parts[parts.length - 1] === '' || parts[parts.length - 1]!.includes('.')) {\n parts.pop();\n }\n if (parts.length < 1) return '';\n\n return `${parts.join('/')}/`;\n}\n\nexport { join, getScope };\n", "class NFError extends Error {\n constructor(message: string, cause?: Error) {\n super(message, cause);\n this.name = 'NFError';\n }\n}\n\nexport { NFError };\n", "import type { StorageEntryKey } from 'lib/2.app/config/storage.contract';\nimport { NFError } from 'lib/native-federation.error';\n\ntype CloneEntry = <T>(name: StorageEntryKey, raw: T) => T;\n\nconst cloneEntry: CloneEntry = <T>(name: StorageEntryKey, raw: T) => {\n try {\n if (typeof structuredClone === 'function') {\n return structuredClone(raw);\n }\n } catch {\n /* structured clone is unavailable */\n }\n try {\n return JSON.parse(JSON.stringify(raw));\n } catch {\n /* object is not stringifyable */\n }\n throw new NFError(`Could not clone entry '${String(name)}'`);\n};\n\nexport { CloneEntry, cloneEntry };\n"],
|
|
3
|
+
"sources": ["../../src/lib/core/1.domain/externals/external.contract.ts", "../../src/lib/utils/optional.ts", "../../src/lib/utils/path.ts", "../../src/lib/core/native-federation.error.ts", "../../src/lib/utils/clone-entry.ts"],
|
|
4
|
+
"sourcesContent": ["import type { SharedVersion, ScopedVersion } from './version.contract';\n\nexport type ExternalName = string;\n\nexport type ScopedExternals = Record<string, ScopedExternal>;\n\nexport const GLOBAL_SCOPE = '__GLOBAL__';\n\nexport const STRICT_SCOPE = 'strict';\n\nexport type SharedExternal = {\n dirty: boolean;\n versions: SharedVersion[];\n};\n\nexport type shareScope = Record<string, SharedExternal>;\n\nexport type SharedExternals = Record<string, shareScope> & { [GLOBAL_SCOPE]: shareScope };\n\nexport type ScopedExternal = Record<string, ScopedVersion>;\n", "export class Optional<T> {\n private constructor(private item?: T) {}\n\n public static of<T>(item?: T): Optional<T> {\n return new Optional(item);\n }\n public static empty<U>(): Optional<U> {\n return Optional.of<U>(undefined);\n }\n\n public isPresent() {\n return typeof this.item !== 'undefined' && this.item !== null;\n }\n public set<U>(other: U) {\n return Optional.of(other);\n }\n\n public ifPresent(callback: (_: T) => void): void {\n if (this.isPresent()) callback(this.item as T);\n }\n\n public map<U>(callback: (_: NonNullable<T>) => U | Optional<U>): Optional<U> {\n if (!this.isPresent()) return Optional.empty();\n\n const result = callback(this.item as NonNullable<T>);\n return result instanceof Optional ? result : Optional.of(result);\n }\n\n public orElse(other: Required<T>): NonNullable<T> {\n return this.isPresent() ? (this.item as NonNullable<T>) : (other as NonNullable<T>);\n }\n\n public orThrow(error: Error | string | (() => Error)): NonNullable<T> {\n if (this.isPresent()) return this.item as NonNullable<T>;\n if (typeof error === 'function') throw error();\n throw typeof error === 'string' ? new Error(error) : error;\n }\n\n public get(): T | undefined {\n return this.item;\n }\n}\n", "function join(pathA: string, pathB: string): string {\n pathA = pathA.endsWith('/') ? pathA.slice(0, -1) : pathA;\n pathB = pathB.startsWith('/') ? pathB.slice(1) : pathB;\n return `${pathA}/${pathB}`;\n}\n\nfunction getScope(path: string) {\n if (!path) return '';\n\n const parts = path.split('/');\n\n if (parts[parts.length - 1] === '' || parts[parts.length - 1]!.includes('.')) {\n parts.pop();\n }\n if (parts.length < 1) return '';\n\n return `${parts.join('/')}/`;\n}\n\nexport { join, getScope };\n", "class NFError extends Error {\n constructor(message: string, cause?: Error) {\n super(message, cause);\n this.name = 'NFError';\n }\n}\n\nexport { NFError };\n", "import type { StorageEntryKey } from 'lib/core/2.app/config/storage.contract';\nimport { NFError } from 'lib/core/native-federation.error';\n\ntype CloneEntry = <T>(name: StorageEntryKey, raw: T) => T;\n\nconst cloneEntry: CloneEntry = <T>(name: StorageEntryKey, raw: T) => {\n try {\n if (typeof structuredClone === 'function') {\n return structuredClone(raw);\n }\n } catch {\n /* structured clone is unavailable */\n }\n try {\n return JSON.parse(JSON.stringify(raw));\n } catch {\n /* object is not stringifyable */\n }\n throw new NFError(`Could not clone entry '${String(name)}'`);\n};\n\nexport { CloneEntry, cloneEntry };\n"],
|
|
5
5
|
"mappings": ";;;;;;;AAMO,IAAM,eAAe;AAErB,IAAM,eAAe;;;ACRrB,IAAM,WAAN,MAAM,UAAY;AAAA,EACf,YAAoB,MAAU;AAAV;AAAA,EAAW;AAAA,EAAX;AAAA,EAE5B,OAAc,GAAM,MAAuB;AACzC,WAAO,IAAI,UAAS,IAAI;AAAA,EAC1B;AAAA,EACA,OAAc,QAAwB;AACpC,WAAO,UAAS,GAAM,MAAS;AAAA,EACjC;AAAA,EAEO,YAAY;AACjB,WAAO,OAAO,KAAK,SAAS,eAAe,KAAK,SAAS;AAAA,EAC3D;AAAA,EACO,IAAO,OAAU;AACtB,WAAO,UAAS,GAAG,KAAK;AAAA,EAC1B;AAAA,EAEO,UAAU,UAAgC;AAC/C,QAAI,KAAK,UAAU,EAAG,UAAS,KAAK,IAAS;AAAA,EAC/C;AAAA,EAEO,IAAO,UAA+D;AAC3E,QAAI,CAAC,KAAK,UAAU,EAAG,QAAO,UAAS,MAAM;AAE7C,UAAM,SAAS,SAAS,KAAK,IAAsB;AACnD,WAAO,kBAAkB,YAAW,SAAS,UAAS,GAAG,MAAM;AAAA,EACjE;AAAA,EAEO,OAAO,OAAoC;AAChD,WAAO,KAAK,UAAU,IAAK,KAAK,OAA2B;AAAA,EAC7D;AAAA,EAEO,QAAQ,OAAuD;AACpE,QAAI,KAAK,UAAU,EAAG,QAAO,KAAK;AAClC,QAAI,OAAO,UAAU,WAAY,OAAM,MAAM;AAC7C,UAAM,OAAO,UAAU,WAAW,IAAI,MAAM,KAAK,IAAI;AAAA,EACvD;AAAA,EAEO,MAAqB;AAC1B,WAAO,KAAK;AAAA,EACd;AACF;;;ACzCA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,KAAK,OAAe,OAAuB;AAClD,UAAQ,MAAM,SAAS,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI;AACnD,UAAQ,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,IAAI;AACjD,SAAO,GAAG,KAAK,IAAI,KAAK;AAC1B;AAEA,SAAS,SAAS,MAAc;AAC9B,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,QAAQ,KAAK,MAAM,GAAG;AAE5B,MAAI,MAAM,MAAM,SAAS,CAAC,MAAM,MAAM,MAAM,MAAM,SAAS,CAAC,EAAG,SAAS,GAAG,GAAG;AAC5E,UAAM,IAAI;AAAA,EACZ;AACA,MAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,SAAO,GAAG,MAAM,KAAK,GAAG,CAAC;AAC3B;;;ACjBA,IAAM,UAAN,cAAsB,MAAM;AAAA,EAC1B,YAAY,SAAiB,OAAe;AAC1C,UAAM,SAAS,KAAK;AACpB,SAAK,OAAO;AAAA,EACd;AACF;;;ACAA,IAAM,aAAyB,CAAI,MAAuB,QAAW;AACnE,MAAI;AACF,QAAI,OAAO,oBAAoB,YAAY;AACzC,aAAO,gBAAgB,GAAG;AAAA,IAC5B;AAAA,EACF,QAAQ;AAAA,EAER;AACA,MAAI;AACF,WAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAAA,EACvC,QAAQ;AAAA,EAER;AACA,QAAM,IAAI,QAAQ,0BAA0B,OAAO,IAAI,CAAC,GAAG;AAC7D;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/init-registry.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var l=class extends Error{constructor(s,i){super(s,i),this.name="NFError"}};var u=(o,s)=>{try{if(typeof structuredClone=="function")return structuredClone(s)}catch{}try{return JSON.parse(JSON.stringify(s))}catch{}throw new l(`Could not clone entry '${String(o)}'`)};function y(o){let s={maxStreams:o.maxStreams,maxEvents:o.maxEvents??1,removePercentage:o.removePercentage},i=new Map,c=new Map,m=new Map,d=new Map,g=new Set,F=Math.min(s.maxEvents-1,s.removePercentage?Math.ceil(s.maxEvents*s.removePercentage):1),f=e=>{if(s.maxStreams&&(g.delete(e),g.add(e),g.size>s.maxStreams)){let t=g.values().next().value;t&&(g.delete(t),m.delete(t))}},N=(e,t)=>{let r=m.get(e)??[];r.push(t),r.length>s.maxEvents&&(r=r.slice(-(s.maxEvents-F))),m.set(e,r);let n=d.get(e);n&&n.size>0&&n.forEach(a=>a(t))},p=async(e,t)=>{let r=typeof t=="function"?await t():t;i.set(e,r);let n=c.get(e);n&&(c.delete(e),n.forEach(a=>a(r)))},S=(e,t)=>{let r=i.get(e);if(r!==void 0)return t(r),()=>{};let n=c.get(e);return n||(n=new Set,c.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&c.delete(e)}},T=(e,t,r={})=>{let n=r.replay??1,a=m.get(e),v=d.get(e);return v||(v=new Set,d.set(e,v)),v.add(t),a&&a.length>0&&n>0&&queueMicrotask(()=>{let R=Math.max(0,a.length-n);for(let E=R;E<a.length;E++)t(u("event channel "+e,a[E]))}),()=>{v.delete(t),v.size===0&&d.delete(e)}},x=(e,t)=>{f(e),N(e,{data:t,timestamp:Date.now()})},h=(e,t)=>{f(e);let r=m.get(e)??[],n=r[r.length-1],a=n===void 0?void 0:u("event channel "+e,n.data);N(e,{data:t(a),timestamp:Date.now()})},w=e=>{e?(m.delete(e),d.delete(e),i.delete(e),c.delete(e),g.delete(e)):(m.clear(),d.clear(),c.clear(),i.clear(),g.clear())};return()=>({register:p,onReady:S,emit:x,update:h,on:T,clear:w})}(function(){let o=document.currentScript,s={maxStreams:o?.dataset?.maxStreams?Number(o.dataset.maxStreams):void 0,maxEvents:o?.dataset?.maxEvents?Number(o.dataset.maxEvents):void 0,removePercentage:o?.dataset?.removePercentage?Number(o.dataset.removePercentage)/100:void 0},i=y(s);window.__NF_REGISTRY__=Object.freeze(i())})();
|
package/node-loader/loader.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/node-loader.ts"],
|
|
3
|
+
"sources": ["../../src/scripts/node-loader.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Node.js module customization hooks for native-federation.\n *\n * Registered via `module.register(<this file>, import.meta.url, { data: { port }, transferList: [port] })`\n * from the orchestrator. The main thread posts the resolved import map over the\n * MessagePort whenever it changes; this loader rewrites `import` specifiers\n * accordingly and fetches http(s) modules into the loader as source text.\n */\n\nimport type { MessagePort } from 'node:worker_threads';\n\ntype Imports = Record<string, string>;\ntype Scopes = Record<string, Imports>;\ntype ImportMap = { imports: Imports; scopes?: Scopes };\n\n/** Per-specifier list of export names to re-export from the host's published instances. */\ntype HostInstanceKeys = Record<string, string[]>;\n\ntype InitData = {\n port?: MessagePort;\n initialImportMap?: ImportMap;\n};\n\ntype IncomingMessage =\n | { type: 'set-import-map'; map: ImportMap }\n | { type: 'set-host-instances'; keys?: HostInstanceKeys };\n\nconst EMPTY_MAP: ImportMap = Object.freeze({ imports: {}, scopes: {} });\n\n/** Synthetic URL scheme for specifiers bridged to the host's instances. */\nconst HOST_PREFIX = 'nf-host:';\n/** Global key on the main thread holding `{ [specifier]: namespaceObject }`. */\nconst HOST_INSTANCES_GLOBAL = '__NF_HOST_INSTANCES__';\n\nconst baseURL = (() => {\n const cwd = process.cwd();\n const url = new URL('file://');\n url.pathname = cwd.endsWith('/') ? cwd : cwd + '/';\n return url.href.endsWith('/') ? url.href : url.href + '/';\n})();\n\nlet activeMap: ImportMap = EMPTY_MAP;\nlet hostInstanceKeys: HostInstanceKeys = Object.create(null);\n\nexport function initialize(data: InitData = {}): void {\n if (data.initialImportMap) {\n activeMap = normalize(data.initialImportMap);\n }\n if (data.port) {\n data.port.on('message', (msg: IncomingMessage) => {\n if (msg && msg.type === 'set-import-map') {\n activeMap = normalize(msg.map);\n data.port!.postMessage({ type: 'import-map-applied' });\n } else if (msg && msg.type === 'set-host-instances') {\n hostInstanceKeys = msg.keys ?? Object.create(null);\n data.port!.postMessage({ type: 'host-instances-applied' });\n }\n });\n data.port.unref?.();\n }\n}\n\ntype ResolveContext = { parentURL?: string };\ntype ResolveResult = { url: string; format?: string | null; shortCircuit?: boolean };\ntype NextResolve = (specifier: string, context?: ResolveContext) => Promise<ResolveResult>;\n\nexport async function resolve(\n specifier: string,\n context: ResolveContext,\n nextResolve: NextResolve\n): Promise<ResolveResult> {\n // Bridged specifiers win over the import map: route them to a synthetic\n // module that re-exports from the host's published instances.\n if (Object.prototype.hasOwnProperty.call(hostInstanceKeys, specifier)) {\n return { url: HOST_PREFIX + encodeURIComponent(specifier), shortCircuit: true };\n }\n const mapped = resolveSpecifier(activeMap, specifier, context.parentURL);\n return nextResolve(mapped ?? specifier, context);\n}\n\ntype LoadContext = { format?: string | null };\ntype LoadResult = {\n format: string;\n source?: string | ArrayBuffer | Uint8Array;\n shortCircuit?: boolean;\n};\ntype NextLoad = (url: string, context?: LoadContext) => Promise<LoadResult>;\n\nexport async function load(\n url: string,\n context: LoadContext,\n nextLoad: NextLoad\n): Promise<LoadResult> {\n if (url.startsWith(HOST_PREFIX)) {\n const specifier = decodeURIComponent(url.slice(HOST_PREFIX.length));\n return {\n shortCircuit: true,\n format: 'module',\n source: synthHostModule(specifier, hostInstanceKeys[specifier]),\n };\n }\n if (url.startsWith('http://') || url.startsWith('https://')) {\n const res = await fetch(url);\n if (!res.ok) {\n throw new Error(`Failed to fetch module from ${url}: ${res.status} ${res.statusText}`);\n }\n const source = await res.text();\n return { shortCircuit: true, format: 'module', source };\n }\n if (!url.startsWith('node:')) {\n context.format = 'module';\n }\n return nextLoad(url, context);\n}\n\n// --- host-instance bridge --------------------------------------------------\n// Synthesizes an in-memory ESM module whose exports forward to the namespace\n// the host published on `globalThis[HOST_INSTANCES_GLOBAL]`. The export-key\n// list is computed on the main thread (where the namespace lives) and shipped\n// over the port, so the loader realm never has to enumerate a namespace it\n// can't see. The `globalThis[...]` reads below run at module-eval time on the\n// main thread, where the instances actually exist.\n\nfunction synthHostModule(specifier: string, keys: string[] | undefined): string {\n const ID = /^[\\p{ID_Start}$_][\\p{ID_Continue}$]*$/u;\n const ref = `globalThis[${JSON.stringify(HOST_INSTANCES_GLOBAL)}][${JSON.stringify(specifier)}]`;\n const lines = [\n `const __ns = ${ref};`,\n `if (!__ns) throw new Error(${JSON.stringify(\n `[native-federation] host instance '${specifier}' not published`\n )});`,\n ];\n let hasDefault = false;\n for (const k of keys ?? []) {\n if (k === 'default') {\n hasDefault = true;\n continue;\n }\n // Defensive: only emit syntactically valid export identifiers. Angular's\n // \u0275\u2026 names pass \\p{ID_Start}; anything else is skipped.\n if (ID.test(k)) lines.push(`export const ${k} = __ns[${JSON.stringify(k)}];`);\n }\n if (hasDefault) lines.push(`export default __ns[\"default\"];`);\n return lines.join('\\n') + '\\n';\n}\n\n// --- WICG import-map resolve algorithm ------------------------------------\n// https://wicg.github.io/import-maps/#new-resolve-algorithm\n\nfunction resolveSpecifier(map: ImportMap, specifier: string, parentURL?: string): string | null {\n const currentBaseURL = parentURL ? parentURL.slice(0, parentURL.lastIndexOf('/') + 1) : baseURL;\n const normalizedSpecifier = parseURLLikeSpecifier(specifier, currentBaseURL) ?? specifier;\n\n if (map.scopes) {\n for (const scopePrefix in map.scopes) {\n if (\n scopePrefix === currentBaseURL ||\n (scopePrefix.endsWith('/') && currentBaseURL.startsWith(scopePrefix))\n ) {\n const match = resolveImportsMatch(normalizedSpecifier, map.scopes[scopePrefix]!);\n if (match) return match;\n }\n }\n }\n\n return resolveImportsMatch(normalizedSpecifier, map.imports);\n}\n\nfunction resolveImportsMatch(normalizedSpecifier: string, specifierMap: Imports): string | null {\n for (const specifierKey in specifierMap) {\n const resolutionResult = specifierMap[specifierKey];\n if (resolutionResult === undefined) continue;\n\n if (specifierKey === normalizedSpecifier) return resolutionResult;\n\n if (specifierKey.endsWith('/') && normalizedSpecifier.startsWith(specifierKey)) {\n const afterPrefix = normalizedSpecifier.slice(specifierKey.length);\n try {\n return new URL(afterPrefix, resolutionResult).href;\n } catch {\n throw new TypeError(\n `import-map resolution of '${specifierKey}' failed due to URL parse failure`\n );\n }\n }\n }\n return null;\n}\n\nfunction parseURLLikeSpecifier(specifier: string, base: string): string | null {\n const useBase =\n specifier.startsWith('/') || specifier.startsWith('./') || specifier.startsWith('../');\n try {\n return new URL(specifier, useBase ? base : undefined).href;\n } catch {\n return null;\n }\n}\n\nfunction normalize(parsed: ImportMap): ImportMap {\n return {\n imports: parsed.imports ?? {},\n scopes: parsed.scopes ?? {},\n };\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "4.
|
|
2
|
+
"version": "4.3.0",
|
|
3
3
|
"name": "@softarc/native-federation-orchestrator",
|
|
4
4
|
"author": "Aukevanoost",
|
|
5
5
|
"keywords": [
|
|
@@ -11,12 +11,9 @@
|
|
|
11
11
|
"type": "git",
|
|
12
12
|
"url": "https://github.com/native-federation/orchestrator.git"
|
|
13
13
|
},
|
|
14
|
-
"pnpm": {
|
|
15
|
-
"overrides": {}
|
|
16
|
-
},
|
|
17
14
|
"license": "MIT",
|
|
18
15
|
"engines": {
|
|
19
|
-
"node": ">=
|
|
16
|
+
"node": ">=22.14.0"
|
|
20
17
|
},
|
|
21
18
|
"sideEffects": false,
|
|
22
19
|
"dependencies": {
|