@softarc/native-federation-orchestrator 4.2.1 → 4.2.2

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.
@@ -1,5 +1,7 @@
1
1
  // src/node-loader.ts
2
2
  var EMPTY_MAP = Object.freeze({ imports: {}, scopes: {} });
3
+ var HOST_PREFIX = "nf-host:";
4
+ var HOST_INSTANCES_GLOBAL = "__NF_HOST_INSTANCES__";
3
5
  var baseURL = (() => {
4
6
  const cwd = process.cwd();
5
7
  const url = new URL("file://");
@@ -7,6 +9,7 @@ var baseURL = (() => {
7
9
  return url.href.endsWith("/") ? url.href : url.href + "/";
8
10
  })();
9
11
  var activeMap = EMPTY_MAP;
12
+ var hostInstanceKeys = /* @__PURE__ */ Object.create(null);
10
13
  function initialize(data = {}) {
11
14
  if (data.initialImportMap) {
12
15
  activeMap = normalize(data.initialImportMap);
@@ -16,16 +19,30 @@ function initialize(data = {}) {
16
19
  if (msg && msg.type === "set-import-map") {
17
20
  activeMap = normalize(msg.map);
18
21
  data.port.postMessage({ type: "import-map-applied" });
22
+ } else if (msg && msg.type === "set-host-instances") {
23
+ hostInstanceKeys = msg.keys ?? /* @__PURE__ */ Object.create(null);
24
+ data.port.postMessage({ type: "host-instances-applied" });
19
25
  }
20
26
  });
21
27
  data.port.unref?.();
22
28
  }
23
29
  }
24
30
  async function resolve(specifier, context, nextResolve) {
31
+ if (Object.prototype.hasOwnProperty.call(hostInstanceKeys, specifier)) {
32
+ return { url: HOST_PREFIX + encodeURIComponent(specifier), shortCircuit: true };
33
+ }
25
34
  const mapped = resolveSpecifier(activeMap, specifier, context.parentURL);
26
35
  return nextResolve(mapped ?? specifier, context);
27
36
  }
28
37
  async function load(url, context, nextLoad) {
38
+ if (url.startsWith(HOST_PREFIX)) {
39
+ const specifier = decodeURIComponent(url.slice(HOST_PREFIX.length));
40
+ return {
41
+ shortCircuit: true,
42
+ format: "module",
43
+ source: synthHostModule(specifier, hostInstanceKeys[specifier])
44
+ };
45
+ }
29
46
  if (url.startsWith("http://") || url.startsWith("https://")) {
30
47
  const res = await fetch(url);
31
48
  if (!res.ok) {
@@ -39,6 +56,26 @@ async function load(url, context, nextLoad) {
39
56
  }
40
57
  return nextLoad(url, context);
41
58
  }
59
+ function synthHostModule(specifier, keys) {
60
+ const ID = /^[\p{ID_Start}$_][\p{ID_Continue}$]*$/u;
61
+ const ref = `globalThis[${JSON.stringify(HOST_INSTANCES_GLOBAL)}][${JSON.stringify(specifier)}]`;
62
+ const lines = [
63
+ `const __ns = ${ref};`,
64
+ `if (!__ns) throw new Error(${JSON.stringify(
65
+ `[native-federation] host instance '${specifier}' not published`
66
+ )});`
67
+ ];
68
+ let hasDefault = false;
69
+ for (const k of keys ?? []) {
70
+ if (k === "default") {
71
+ hasDefault = true;
72
+ continue;
73
+ }
74
+ if (ID.test(k)) lines.push(`export const ${k} = __ns[${JSON.stringify(k)}];`);
75
+ }
76
+ if (hasDefault) lines.push(`export default __ns["default"];`);
77
+ return lines.join("\n") + "\n";
78
+ }
42
79
  function resolveSpecifier(map, specifier, parentURL) {
43
80
  const currentBaseURL = parentURL ? parentURL.slice(0, parentURL.lastIndexOf("/") + 1) : baseURL;
44
81
  const normalizedSpecifier = parseURLLikeSpecifier(specifier, currentBaseURL) ?? specifier;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/node-loader.ts"],
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\ntype InitData = {\n port?: MessagePort;\n initialImportMap?: ImportMap;\n};\n\nconst EMPTY_MAP: ImportMap = Object.freeze({ imports: {}, scopes: {} });\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;\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: { type: 'set-import-map'; map: ImportMap }) => {\n if (msg && msg.type === 'set-import-map') {\n activeMap = normalize(msg.map);\n data.port!.postMessage({ type: 'import-map-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 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('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// --- 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
- "mappings": "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",
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
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.2.1",
2
+ "version": "4.2.2",
3
3
  "name": "@softarc/native-federation-orchestrator",
4
4
  "author": "Aukevanoost",
5
5
  "keywords": [