@softarc/native-federation-orchestrator 4.4.0 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/fesm2022/@softarc/native-federation-orchestrator.mjs +523 -82
- package/fesm2022/@softarc/native-federation-orchestrator.mjs.map +4 -4
- package/fesm2022/module-federation.mjs +21 -17
- package/fesm2022/module-federation.mjs.map +2 -2
- package/fesm2022/node.mjs +453 -76
- package/fesm2022/node.mjs.map +4 -4
- package/fesm2022/sdk.mjs +63 -1
- package/fesm2022/sdk.mjs.map +3 -3
- package/package.json +1 -1
- package/quickstart.mjs +13 -13
- package/types/lib/core/1.domain/externals/version.contract.d.ts +3 -2
- package/types/lib/core/1.domain/remote-entry/remote-entry.contract.d.ts +8 -4
- package/types/lib/core/2.app/config/mode.contract.d.ts +7 -0
- package/types/lib/core/2.app/driver-ports/init/drivers.contract.d.ts +4 -0
- package/types/lib/core/2.app/driver-ports/init/for-pooling-dynamic-externals.port.d.ts +8 -0
- package/types/lib/core/2.app/driver-ports/init/for-pooling-shared-externals.port.d.ts +1 -0
- package/types/lib/core/2.app/driver-ports/init/index.d.ts +2 -0
- package/types/lib/core/2.app/driving-ports/for-shared-externals-storage.port.d.ts +2 -0
- package/types/lib/core/2.app/steps/convert-to-import-map.d.ts +2 -1
- package/types/lib/core/2.app/steps/pooling/pool-dynamic-externals.d.ts +3 -0
- package/types/lib/core/2.app/steps/pooling/pool-graph.d.ts +25 -0
- package/types/lib/core/2.app/steps/pooling/pool-shared-externals.d.ts +5 -0
- package/types/lib/core/2.app/steps/pooling/pool.types.d.ts +25 -0
- package/types/lib/core/2.app/steps/pooling/pool.util.d.ts +4 -0
- package/types/lib/core/2.app/steps/store-remote-entry.d.ts +2 -2
- package/types/lib/core/3.adapters/http/remote-entry-provider.d.ts +2 -1
package/fesm2022/sdk.mjs
CHANGED
|
@@ -8,6 +8,66 @@ var __export = (target, all) => {
|
|
|
8
8
|
var GLOBAL_SCOPE = "__GLOBAL__";
|
|
9
9
|
var STRICT_SCOPE = "strict";
|
|
10
10
|
|
|
11
|
+
// src/lib/core/1.domain/remote-entry/remote-entry.contract.ts
|
|
12
|
+
var CHUNK_PREFIX = "@nf-internal";
|
|
13
|
+
function toDenseSharedInfoFormat(shared) {
|
|
14
|
+
return shared.map((external) => {
|
|
15
|
+
if ("entries" in external) return external;
|
|
16
|
+
const { outFileName, ...baseSharedInfoProps } = external;
|
|
17
|
+
return {
|
|
18
|
+
...baseSharedInfoProps,
|
|
19
|
+
entries: { [external.packageName]: outFileName }
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function inferPackageFromSecondary(secondary) {
|
|
24
|
+
const parts = secondary.split("/");
|
|
25
|
+
if (secondary.startsWith("@") && parts.length >= 2) {
|
|
26
|
+
return parts[0] + "/" + parts[1];
|
|
27
|
+
}
|
|
28
|
+
return parts[0] ?? secondary;
|
|
29
|
+
}
|
|
30
|
+
function densifyExternals(shared) {
|
|
31
|
+
const result = [];
|
|
32
|
+
const groupIndex = /* @__PURE__ */ new Map();
|
|
33
|
+
for (const entry of shared) {
|
|
34
|
+
const isDense = "entries" in entry;
|
|
35
|
+
const isChunk = entry.packageName.startsWith(CHUNK_PREFIX + "/");
|
|
36
|
+
if (isDense || isChunk) {
|
|
37
|
+
result.push(entry);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const parent = inferPackageFromSecondary(entry.packageName);
|
|
41
|
+
const sig = JSON.stringify({
|
|
42
|
+
singleton: entry.singleton,
|
|
43
|
+
strictVersion: entry.strictVersion,
|
|
44
|
+
requiredVersion: entry.requiredVersion,
|
|
45
|
+
version: entry.version,
|
|
46
|
+
shareScope: entry.shareScope
|
|
47
|
+
});
|
|
48
|
+
const key = parent + " " + sig;
|
|
49
|
+
const existing = groupIndex.get(key);
|
|
50
|
+
if (existing === void 0) {
|
|
51
|
+
const dense = {
|
|
52
|
+
singleton: entry.singleton,
|
|
53
|
+
strictVersion: entry.strictVersion,
|
|
54
|
+
requiredVersion: entry.requiredVersion,
|
|
55
|
+
packageName: parent,
|
|
56
|
+
entries: { [entry.packageName]: entry.outFileName }
|
|
57
|
+
};
|
|
58
|
+
if (entry.version !== void 0) dense.version = entry.version;
|
|
59
|
+
if (entry.shareScope !== void 0) dense.shareScope = entry.shareScope;
|
|
60
|
+
if (entry.bundle !== void 0) dense.bundle = entry.bundle;
|
|
61
|
+
if (entry.dev !== void 0) dense.dev = entry.dev;
|
|
62
|
+
groupIndex.set(key, result.length);
|
|
63
|
+
result.push(dense);
|
|
64
|
+
} else {
|
|
65
|
+
result[existing].entries[entry.packageName] = entry.outFileName;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
|
|
11
71
|
// src/lib/utils/optional.ts
|
|
12
72
|
var Optional = class _Optional {
|
|
13
73
|
constructor(item) {
|
|
@@ -95,6 +155,8 @@ export {
|
|
|
95
155
|
Optional,
|
|
96
156
|
STRICT_SCOPE,
|
|
97
157
|
path_exports as _path,
|
|
98
|
-
cloneEntry
|
|
158
|
+
cloneEntry,
|
|
159
|
+
densifyExternals,
|
|
160
|
+
toDenseSharedInfoFormat
|
|
99
161
|
};
|
|
100
162
|
//# sourceMappingURL=sdk.mjs.map
|
package/fesm2022/sdk.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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
|
-
"mappings": ";;;;;;;AAMO,IAAM,eAAe;AAErB,IAAM,eAAe;;;
|
|
3
|
+
"sources": ["../../src/lib/core/1.domain/externals/external.contract.ts", "../../src/lib/core/1.domain/remote-entry/remote-entry.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", "import type { SharedVersionAction } from '../externals/version.contract';\nimport type { RemoteEntryUrl } from './manifest.contract';\nimport type {\n DenseSharedInfo,\n ExposesInfo,\n FederationInfo,\n SharedInfo,\n} from '@softarc/native-federation/domain';\n\ntype RawRemoteEntry = FederationInfo;\n\nconst CHUNK_PREFIX = '@nf-internal';\n\ntype RemoteEntry = Omit<FederationInfo, 'shared'> & {\n shared: DenseSharedInfo[];\n url: RemoteEntryUrl;\n host?: boolean;\n override?: boolean;\n};\n\nfunction toDenseSharedInfoFormat(shared: Array<SharedInfo | DenseSharedInfo>): DenseSharedInfo[] {\n return shared.map(external => {\n if ('entries' in external) return external;\n const { outFileName, ...baseSharedInfoProps } = external;\n return {\n ...baseSharedInfoProps,\n entries: { [external.packageName]: outFileName },\n };\n });\n}\n\nfunction inferPackageFromSecondary(secondary: string): string {\n const parts = secondary.split('/');\n if (secondary.startsWith('@') && parts.length >= 2) {\n return parts[0] + '/' + parts[1];\n }\n return parts[0] ?? secondary;\n}\n\nfunction densifyExternals(\n shared: Array<SharedInfo | DenseSharedInfo>\n): Array<SharedInfo | DenseSharedInfo> {\n const result: Array<SharedInfo | DenseSharedInfo> = [];\n const groupIndex = new Map<string, number>();\n for (const entry of shared) {\n const isDense = 'entries' in entry;\n const isChunk = entry.packageName.startsWith(CHUNK_PREFIX + '/');\n if (isDense || isChunk) {\n result.push(entry);\n continue;\n }\n const parent = inferPackageFromSecondary(entry.packageName);\n const sig = JSON.stringify({\n singleton: entry.singleton,\n strictVersion: entry.strictVersion,\n requiredVersion: entry.requiredVersion,\n version: entry.version,\n shareScope: entry.shareScope,\n });\n const key = parent + ' ' + sig;\n const existing = groupIndex.get(key);\n if (existing === undefined) {\n const dense: DenseSharedInfo = {\n singleton: entry.singleton,\n strictVersion: entry.strictVersion,\n requiredVersion: entry.requiredVersion,\n packageName: parent,\n entries: { [entry.packageName]: entry.outFileName },\n };\n if (entry.version !== undefined) dense.version = entry.version;\n if (entry.shareScope !== undefined) dense.shareScope = entry.shareScope;\n if (entry.bundle !== undefined) dense.bundle = entry.bundle;\n if (entry.dev !== undefined) dense.dev = entry.dev;\n groupIndex.set(key, result.length);\n result.push(dense);\n } else {\n (result[existing] as DenseSharedInfo).entries[entry.packageName] = entry.outFileName;\n }\n }\n return result;\n}\n\ntype SharedInfoActions = Record<\n string,\n { action: SharedVersionAction; override?: Record<string, string> }\n>;\n\nexport {\n RawRemoteEntry,\n RemoteEntry,\n FederationInfo,\n ExposesInfo,\n SharedInfo,\n DenseSharedInfo,\n SharedInfoActions,\n toDenseSharedInfoFormat,\n densifyExternals,\n};\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
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED