remote-components 0.4.8 → 0.4.9
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/dist/{chunk-VJO4PTWG.js → chunk-4XWEMPKO.js} +6 -6
- package/dist/chunk-4XWEMPKO.js.map +1 -0
- package/dist/{chunk-YJJFRORQ.cjs → chunk-6NAV4SCF.cjs} +315 -74
- package/dist/chunk-6NAV4SCF.cjs.map +1 -0
- package/dist/{chunk-JZRA6DPE.js → chunk-6NUHDFSH.js} +6 -53
- package/dist/chunk-6NUHDFSH.js.map +1 -0
- package/dist/{chunk-EW5O3Q24.cjs → chunk-EZG36EB4.cjs} +23 -23
- package/dist/{chunk-EW5O3Q24.cjs.map → chunk-EZG36EB4.cjs.map} +1 -1
- package/dist/{chunk-KAFPXSRI.cjs → chunk-J42V6HSP.cjs} +18 -18
- package/dist/{chunk-STMO56U2.js → chunk-JYGC7T6L.js} +264 -23
- package/dist/chunk-JYGC7T6L.js.map +1 -0
- package/dist/{chunk-I7VKDF3E.cjs → chunk-SELGX4Y2.cjs} +4 -51
- package/dist/chunk-SELGX4Y2.cjs.map +1 -0
- package/dist/{chunk-KCUEMMYL.js → chunk-T6E2WPAB.js} +3 -3
- package/dist/{chunk-4MLJE6UP.cjs → chunk-VB64GQX7.cjs} +3 -3
- package/dist/{chunk-FF4SXSSG.js → chunk-X6SKTJ5N.js} +3 -3
- package/dist/{chunk-O4ED3BUP.cjs → chunk-XPMI4K3U.cjs} +19 -19
- package/dist/{chunk-WGSS7TJP.js → chunk-ZJW3GQTP.js} +2 -2
- package/dist/config/nextjs.cjs +5 -5
- package/dist/config/nextjs.cjs.map +1 -1
- package/dist/config/nextjs.js +1 -1
- package/dist/config/nextjs.js.map +1 -1
- package/dist/host/html.cjs +19 -19
- package/dist/host/html.js +7 -7
- package/dist/host/nextjs/app/client-only.cjs +11 -11
- package/dist/host/nextjs/app/client-only.js +6 -6
- package/dist/host/react.cjs +7 -7
- package/dist/host/react.js +6 -6
- package/dist/internal/config/webpack/apply-shared-modules.cjs +8 -0
- package/dist/internal/config/webpack/apply-shared-modules.cjs.map +1 -1
- package/dist/internal/config/webpack/apply-shared-modules.d.ts +6 -1
- package/dist/internal/config/webpack/apply-shared-modules.js +10 -0
- package/dist/internal/config/webpack/apply-shared-modules.js.map +1 -1
- package/dist/internal/config/webpack/provider-adapter.cjs +85 -0
- package/dist/internal/config/webpack/provider-adapter.cjs.map +1 -0
- package/dist/internal/config/webpack/provider-adapter.d.ts +7 -0
- package/dist/internal/config/webpack/provider-adapter.js +64 -0
- package/dist/internal/config/webpack/provider-adapter.js.map +1 -0
- package/dist/internal/config/webpack/shared-module-resolver.cjs +73 -0
- package/dist/internal/config/webpack/shared-module-resolver.cjs.map +1 -0
- package/dist/internal/config/webpack/shared-module-resolver.d.ts +35 -0
- package/dist/internal/config/webpack/shared-module-resolver.js +50 -0
- package/dist/internal/config/webpack/shared-module-resolver.js.map +1 -0
- package/dist/internal/host/shared/provider.cjs +188 -0
- package/dist/internal/host/shared/provider.cjs.map +1 -0
- package/dist/internal/host/shared/provider.d.ts +71 -0
- package/dist/internal/host/shared/provider.js +161 -0
- package/dist/internal/host/shared/provider.js.map +1 -0
- package/dist/internal/host/shared/shared-broker.cjs +0 -30
- package/dist/internal/host/shared/shared-broker.cjs.map +1 -1
- package/dist/internal/host/shared/shared-broker.d.ts +1 -7
- package/dist/internal/host/shared/shared-broker.js +0 -29
- package/dist/internal/host/shared/shared-broker.js.map +1 -1
- package/dist/internal/host/shared/shared-module-resolver.cjs +6 -28
- package/dist/internal/host/shared/shared-module-resolver.cjs.map +1 -1
- package/dist/internal/host/shared/shared-module-resolver.d.ts +9 -31
- package/dist/internal/host/shared/shared-module-resolver.js +4 -28
- package/dist/internal/host/shared/shared-module-resolver.js.map +1 -1
- package/dist/internal/runtime/loaders/component-loader.cjs +3 -2
- package/dist/internal/runtime/loaders/component-loader.cjs.map +1 -1
- package/dist/internal/runtime/loaders/component-loader.js +2 -4
- package/dist/internal/runtime/loaders/component-loader.js.map +1 -1
- package/dist/internal/runtime/turbopack/shared-modules.cjs +13 -19
- package/dist/internal/runtime/turbopack/shared-modules.cjs.map +1 -1
- package/dist/internal/runtime/turbopack/shared-modules.js +17 -21
- package/dist/internal/runtime/turbopack/shared-modules.js.map +1 -1
- package/dist/{turbopack-RXVSOWF7.cjs → turbopack-6BXAJGS5.cjs} +11 -11
- package/dist/{turbopack-XDIGB4GI.js → turbopack-WAERWSWW.js} +4 -4
- package/dist/{webpack-HKD7RZRE.cjs → webpack-VTSF2B2G.cjs} +11 -11
- package/dist/webpack-VTSF2B2G.cjs.map +1 -0
- package/dist/{webpack-3QXPAZN4.js → webpack-ZYOBNVFE.js} +6 -6
- package/dist/webpack-ZYOBNVFE.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-I7VKDF3E.cjs.map +0 -1
- package/dist/chunk-JZRA6DPE.js.map +0 -1
- package/dist/chunk-STMO56U2.js.map +0 -1
- package/dist/chunk-VJO4PTWG.js.map +0 -1
- package/dist/chunk-YJJFRORQ.cjs.map +0 -1
- package/dist/webpack-3QXPAZN4.js.map +0 -1
- package/dist/webpack-HKD7RZRE.cjs.map +0 -1
- /package/dist/{chunk-KAFPXSRI.cjs.map → chunk-J42V6HSP.cjs.map} +0 -0
- /package/dist/{chunk-KCUEMMYL.js.map → chunk-T6E2WPAB.js.map} +0 -0
- /package/dist/{chunk-4MLJE6UP.cjs.map → chunk-VB64GQX7.cjs.map} +0 -0
- /package/dist/{chunk-FF4SXSSG.js.map → chunk-X6SKTJ5N.js.map} +0 -0
- /package/dist/{chunk-O4ED3BUP.cjs.map → chunk-XPMI4K3U.cjs.map} +0 -0
- /package/dist/{chunk-WGSS7TJP.js.map → chunk-ZJW3GQTP.js.map} +0 -0
- /package/dist/{turbopack-RXVSOWF7.cjs.map → turbopack-6BXAJGS5.cjs.map} +0 -0
- /package/dist/{turbopack-XDIGB4GI.js.map → turbopack-WAERWSWW.js.map} +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var provider_exports = {};
|
|
20
|
+
__export(provider_exports, {
|
|
21
|
+
buildSharedProviderPlan: () => buildSharedProviderPlan,
|
|
22
|
+
createSharedProvider: () => createSharedProvider,
|
|
23
|
+
createSharedProviderEntry: () => createSharedProviderEntry,
|
|
24
|
+
getSharedProvider: () => getSharedProvider,
|
|
25
|
+
getSharedProviderModule: () => getSharedProviderModule,
|
|
26
|
+
installSharedProvider: () => installSharedProvider,
|
|
27
|
+
installSharedProviderEntry: () => installSharedProviderEntry,
|
|
28
|
+
resetSharedProviderScopesForTest: () => resetSharedProviderScopesForTest
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(provider_exports);
|
|
31
|
+
var import_shared_broker = require("#internal/host/shared/shared-broker");
|
|
32
|
+
const DEFAULT_VERSION = "0";
|
|
33
|
+
const GLOBAL_PROVIDER_SCOPES_KEY = "__remote_components_shared_provider_scopes__";
|
|
34
|
+
function getProviderScopes() {
|
|
35
|
+
const self = globalThis;
|
|
36
|
+
self[GLOBAL_PROVIDER_SCOPES_KEY] ??= {};
|
|
37
|
+
return self[GLOBAL_PROVIDER_SCOPES_KEY];
|
|
38
|
+
}
|
|
39
|
+
function createSharedProvider({
|
|
40
|
+
value,
|
|
41
|
+
from
|
|
42
|
+
}) {
|
|
43
|
+
return {
|
|
44
|
+
get: () => value,
|
|
45
|
+
from,
|
|
46
|
+
eager: true,
|
|
47
|
+
loaded: 1
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function createSharedProviderEntry({
|
|
51
|
+
id,
|
|
52
|
+
specifier,
|
|
53
|
+
value,
|
|
54
|
+
required = true,
|
|
55
|
+
singleton = true,
|
|
56
|
+
scope,
|
|
57
|
+
from = "host"
|
|
58
|
+
}) {
|
|
59
|
+
return {
|
|
60
|
+
id,
|
|
61
|
+
specifier,
|
|
62
|
+
provider: createSharedProvider({ value, from }),
|
|
63
|
+
required,
|
|
64
|
+
singleton,
|
|
65
|
+
scope
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async function buildSharedProviderPlan({
|
|
69
|
+
bundle,
|
|
70
|
+
hostShared,
|
|
71
|
+
remoteShared,
|
|
72
|
+
scope = `remote:${bundle}`,
|
|
73
|
+
callerTag = "SharedBroker",
|
|
74
|
+
normalizeId = (id) => id,
|
|
75
|
+
additionalEntries = [],
|
|
76
|
+
onMissing
|
|
77
|
+
}) {
|
|
78
|
+
const sharedModulePlan = (0, import_shared_broker.createSharedModulePlan)({
|
|
79
|
+
bundle,
|
|
80
|
+
hostShared,
|
|
81
|
+
remoteShared,
|
|
82
|
+
scope,
|
|
83
|
+
callerTag
|
|
84
|
+
});
|
|
85
|
+
const resolved = await (0, import_shared_broker.resolveSharedModulePlan)(sharedModulePlan);
|
|
86
|
+
const entriesByIdAndSpecifier = /* @__PURE__ */ new Map();
|
|
87
|
+
const addEntry = (entry) => {
|
|
88
|
+
entriesByIdAndSpecifier.set(`${entry.id}\0${entry.specifier}`, entry);
|
|
89
|
+
};
|
|
90
|
+
for (const entry of additionalEntries) {
|
|
91
|
+
addEntry(
|
|
92
|
+
createSharedProviderEntry({
|
|
93
|
+
...entry,
|
|
94
|
+
scope: entry.scope ?? scope
|
|
95
|
+
})
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
for (const entry of sharedModulePlan.entries) {
|
|
99
|
+
if (entry.status !== "resolved") {
|
|
100
|
+
if (onMissing && !(sharedModulePlan.protocol === import_shared_broker.SHARED_MODULE_MANIFEST_PROTOCOL && entry.required)) {
|
|
101
|
+
onMissing(entry);
|
|
102
|
+
}
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const value = resolved[entry.id];
|
|
106
|
+
if (typeof value === "undefined")
|
|
107
|
+
continue;
|
|
108
|
+
addEntry(
|
|
109
|
+
createSharedProviderEntry({
|
|
110
|
+
id: normalizeId(entry.id),
|
|
111
|
+
specifier: entry.specifier,
|
|
112
|
+
value,
|
|
113
|
+
required: entry.required,
|
|
114
|
+
singleton: entry.singleton,
|
|
115
|
+
scope: entry.scope
|
|
116
|
+
})
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
protocol: sharedModulePlan.protocol,
|
|
121
|
+
entries: Array.from(entriesByIdAndSpecifier.values())
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function installSharedProvider({
|
|
125
|
+
scope,
|
|
126
|
+
specifier,
|
|
127
|
+
value,
|
|
128
|
+
from,
|
|
129
|
+
provider,
|
|
130
|
+
version = DEFAULT_VERSION
|
|
131
|
+
}) {
|
|
132
|
+
const scopes = getProviderScopes();
|
|
133
|
+
const providerScope = scopes[scope] ??= {};
|
|
134
|
+
const versions = providerScope[specifier] ??= {};
|
|
135
|
+
const sharedProvider = provider ?? createSharedProvider({
|
|
136
|
+
value,
|
|
137
|
+
from: from ?? "host"
|
|
138
|
+
});
|
|
139
|
+
versions[version] = sharedProvider;
|
|
140
|
+
return sharedProvider;
|
|
141
|
+
}
|
|
142
|
+
function installSharedProviderEntry(entry) {
|
|
143
|
+
return installSharedProvider({
|
|
144
|
+
scope: entry.scope,
|
|
145
|
+
specifier: entry.specifier,
|
|
146
|
+
provider: entry.provider
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function getSharedProvider({
|
|
150
|
+
scope,
|
|
151
|
+
specifier,
|
|
152
|
+
version = DEFAULT_VERSION
|
|
153
|
+
}) {
|
|
154
|
+
const versions = getProviderScopes()[scope]?.[specifier];
|
|
155
|
+
if (!versions)
|
|
156
|
+
return void 0;
|
|
157
|
+
return versions[version] ?? (version === DEFAULT_VERSION ? void 0 : versions[DEFAULT_VERSION]);
|
|
158
|
+
}
|
|
159
|
+
function getSharedProviderModule({
|
|
160
|
+
scope,
|
|
161
|
+
specifier,
|
|
162
|
+
version
|
|
163
|
+
}) {
|
|
164
|
+
const provider = getSharedProvider({ scope, specifier, version });
|
|
165
|
+
if (!provider) {
|
|
166
|
+
throw new Error(
|
|
167
|
+
`Shared module "${specifier}" not found in provider scope "${scope}".`
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
provider.loaded = 1;
|
|
171
|
+
return provider.get();
|
|
172
|
+
}
|
|
173
|
+
function resetSharedProviderScopesForTest() {
|
|
174
|
+
const self = globalThis;
|
|
175
|
+
delete self[GLOBAL_PROVIDER_SCOPES_KEY];
|
|
176
|
+
}
|
|
177
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
178
|
+
0 && (module.exports = {
|
|
179
|
+
buildSharedProviderPlan,
|
|
180
|
+
createSharedProvider,
|
|
181
|
+
createSharedProviderEntry,
|
|
182
|
+
getSharedProvider,
|
|
183
|
+
getSharedProviderModule,
|
|
184
|
+
installSharedProvider,
|
|
185
|
+
installSharedProviderEntry,
|
|
186
|
+
resetSharedProviderScopesForTest
|
|
187
|
+
});
|
|
188
|
+
//# sourceMappingURL=provider.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/host/shared/provider.ts"],"sourcesContent":["import {\n createSharedModulePlan,\n type RemoteSharedModules,\n resolveSharedModulePlan,\n SHARED_MODULE_MANIFEST_PROTOCOL,\n type SharedModuleFactory,\n type SharedModuleResolution,\n} from '#internal/host/shared/shared-broker';\nimport type { LogLocation } from '#internal/utils/logger';\n\nconst DEFAULT_VERSION = '0';\nconst GLOBAL_PROVIDER_SCOPES_KEY =\n '__remote_components_shared_provider_scopes__';\n\nexport interface SharedProvider {\n get: () => unknown;\n from: string;\n eager?: boolean;\n loaded?: boolean | number;\n}\n\nexport type SharedProviderScope = Record<\n string,\n Record<string, SharedProvider>\n>;\n\nexport type SharedProviderScopes = Record<string, SharedProviderScope>;\n\nexport interface SharedProviderEntry {\n id: string;\n specifier: string;\n provider: SharedProvider;\n required: boolean;\n singleton: boolean;\n scope: string;\n}\n\nexport interface SharedProviderPlan {\n protocol: 'legacy' | typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n entries: SharedProviderEntry[];\n}\n\nexport interface AdditionalSharedProviderEntry {\n id: string;\n specifier: string;\n value: unknown;\n required?: boolean;\n singleton?: boolean;\n scope?: string;\n from?: string;\n}\n\nfunction getProviderScopes(): SharedProviderScopes {\n const self = globalThis as typeof globalThis & {\n [GLOBAL_PROVIDER_SCOPES_KEY]?: SharedProviderScopes;\n };\n self[GLOBAL_PROVIDER_SCOPES_KEY] ??= {};\n return self[GLOBAL_PROVIDER_SCOPES_KEY];\n}\n\nexport function createSharedProvider({\n value,\n from,\n}: {\n value: unknown;\n from: string;\n}): SharedProvider {\n return {\n get: () => value,\n from,\n eager: true,\n loaded: 1,\n };\n}\n\nexport function createSharedProviderEntry({\n id,\n specifier,\n value,\n required = true,\n singleton = true,\n scope,\n from = 'host',\n}: AdditionalSharedProviderEntry & { scope: string }): SharedProviderEntry {\n return {\n id,\n specifier,\n provider: createSharedProvider({ value, from }),\n required,\n singleton,\n scope,\n };\n}\n\nexport async function buildSharedProviderPlan({\n bundle,\n hostShared,\n remoteShared,\n scope = `remote:${bundle}`,\n callerTag = 'SharedBroker',\n normalizeId = (id) => id,\n additionalEntries = [],\n onMissing,\n}: {\n bundle: string;\n hostShared: Record<string, SharedModuleFactory | unknown>;\n remoteShared: RemoteSharedModules;\n scope?: string;\n callerTag?: LogLocation;\n normalizeId?: (id: string) => string;\n additionalEntries?: AdditionalSharedProviderEntry[];\n onMissing?: (entry: SharedModuleResolution) => void;\n}): Promise<SharedProviderPlan> {\n const sharedModulePlan = createSharedModulePlan({\n bundle,\n hostShared,\n remoteShared,\n scope,\n callerTag,\n });\n const resolved = await resolveSharedModulePlan(sharedModulePlan);\n const entriesByIdAndSpecifier = new Map<string, SharedProviderEntry>();\n const addEntry = (entry: SharedProviderEntry) => {\n entriesByIdAndSpecifier.set(`${entry.id}\\0${entry.specifier}`, entry);\n };\n\n for (const entry of additionalEntries) {\n addEntry(\n createSharedProviderEntry({\n ...entry,\n scope: entry.scope ?? scope,\n }),\n );\n }\n\n for (const entry of sharedModulePlan.entries) {\n if (entry.status !== 'resolved') {\n if (\n onMissing &&\n !(\n sharedModulePlan.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n entry.required\n )\n ) {\n onMissing(entry);\n }\n continue;\n }\n\n const value = resolved[entry.id];\n if (typeof value === 'undefined') continue;\n addEntry(\n createSharedProviderEntry({\n id: normalizeId(entry.id),\n specifier: entry.specifier,\n value,\n required: entry.required,\n singleton: entry.singleton,\n scope: entry.scope,\n }),\n );\n }\n\n return {\n protocol: sharedModulePlan.protocol,\n entries: Array.from(entriesByIdAndSpecifier.values()),\n };\n}\n\nexport function installSharedProvider({\n scope,\n specifier,\n value,\n from,\n provider,\n version = DEFAULT_VERSION,\n}: {\n scope: string;\n specifier: string;\n value?: unknown;\n from?: string;\n provider?: SharedProvider;\n version?: string;\n}): SharedProvider {\n const scopes = getProviderScopes();\n const providerScope = (scopes[scope] ??= {});\n const versions = (providerScope[specifier] ??= {});\n const sharedProvider =\n provider ??\n createSharedProvider({\n value,\n from: from ?? 'host',\n });\n versions[version] = sharedProvider;\n return sharedProvider;\n}\n\nexport function installSharedProviderEntry(\n entry: SharedProviderEntry,\n): SharedProvider {\n return installSharedProvider({\n scope: entry.scope,\n specifier: entry.specifier,\n provider: entry.provider,\n });\n}\n\nexport function getSharedProvider({\n scope,\n specifier,\n version = DEFAULT_VERSION,\n}: {\n scope: string;\n specifier: string;\n version?: string;\n}): SharedProvider | undefined {\n const versions = getProviderScopes()[scope]?.[specifier];\n if (!versions) return undefined;\n\n // This provider scope does not implement semver negotiation. Use an exact\n // version match, then the host default provider when a constrained version is\n // unavailable.\n return (\n versions[version] ??\n (version === DEFAULT_VERSION ? undefined : versions[DEFAULT_VERSION])\n );\n}\n\nexport function getSharedProviderModule({\n scope,\n specifier,\n version,\n}: {\n scope: string;\n specifier: string;\n version?: string;\n}): unknown {\n const provider = getSharedProvider({ scope, specifier, version });\n if (!provider) {\n throw new Error(\n `Shared module \"${specifier}\" not found in provider scope \"${scope}\".`,\n );\n }\n provider.loaded = 1;\n return provider.get();\n}\n\nexport function resetSharedProviderScopesForTest(): void {\n const self = globalThis as typeof globalThis & {\n [GLOBAL_PROVIDER_SCOPES_KEY]?: SharedProviderScopes;\n };\n delete self[GLOBAL_PROVIDER_SCOPES_KEY];\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { SHARED_MODULE_MANIFEST_PROTOCOL, SharedModuleFactory, RemoteSharedModules, SharedModuleResolution } from './shared-broker.js';
|
|
2
|
+
import { LogLocation } from '../../utils/logger.js';
|
|
3
|
+
|
|
4
|
+
interface SharedProvider {
|
|
5
|
+
get: () => unknown;
|
|
6
|
+
from: string;
|
|
7
|
+
eager?: boolean;
|
|
8
|
+
loaded?: boolean | number;
|
|
9
|
+
}
|
|
10
|
+
type SharedProviderScope = Record<string, Record<string, SharedProvider>>;
|
|
11
|
+
type SharedProviderScopes = Record<string, SharedProviderScope>;
|
|
12
|
+
interface SharedProviderEntry {
|
|
13
|
+
id: string;
|
|
14
|
+
specifier: string;
|
|
15
|
+
provider: SharedProvider;
|
|
16
|
+
required: boolean;
|
|
17
|
+
singleton: boolean;
|
|
18
|
+
scope: string;
|
|
19
|
+
}
|
|
20
|
+
interface SharedProviderPlan {
|
|
21
|
+
protocol: 'legacy' | typeof SHARED_MODULE_MANIFEST_PROTOCOL;
|
|
22
|
+
entries: SharedProviderEntry[];
|
|
23
|
+
}
|
|
24
|
+
interface AdditionalSharedProviderEntry {
|
|
25
|
+
id: string;
|
|
26
|
+
specifier: string;
|
|
27
|
+
value: unknown;
|
|
28
|
+
required?: boolean;
|
|
29
|
+
singleton?: boolean;
|
|
30
|
+
scope?: string;
|
|
31
|
+
from?: string;
|
|
32
|
+
}
|
|
33
|
+
declare function createSharedProvider({ value, from, }: {
|
|
34
|
+
value: unknown;
|
|
35
|
+
from: string;
|
|
36
|
+
}): SharedProvider;
|
|
37
|
+
declare function createSharedProviderEntry({ id, specifier, value, required, singleton, scope, from, }: AdditionalSharedProviderEntry & {
|
|
38
|
+
scope: string;
|
|
39
|
+
}): SharedProviderEntry;
|
|
40
|
+
declare function buildSharedProviderPlan({ bundle, hostShared, remoteShared, scope, callerTag, normalizeId, additionalEntries, onMissing, }: {
|
|
41
|
+
bundle: string;
|
|
42
|
+
hostShared: Record<string, SharedModuleFactory | unknown>;
|
|
43
|
+
remoteShared: RemoteSharedModules;
|
|
44
|
+
scope?: string;
|
|
45
|
+
callerTag?: LogLocation;
|
|
46
|
+
normalizeId?: (id: string) => string;
|
|
47
|
+
additionalEntries?: AdditionalSharedProviderEntry[];
|
|
48
|
+
onMissing?: (entry: SharedModuleResolution) => void;
|
|
49
|
+
}): Promise<SharedProviderPlan>;
|
|
50
|
+
declare function installSharedProvider({ scope, specifier, value, from, provider, version, }: {
|
|
51
|
+
scope: string;
|
|
52
|
+
specifier: string;
|
|
53
|
+
value?: unknown;
|
|
54
|
+
from?: string;
|
|
55
|
+
provider?: SharedProvider;
|
|
56
|
+
version?: string;
|
|
57
|
+
}): SharedProvider;
|
|
58
|
+
declare function installSharedProviderEntry(entry: SharedProviderEntry): SharedProvider;
|
|
59
|
+
declare function getSharedProvider({ scope, specifier, version, }: {
|
|
60
|
+
scope: string;
|
|
61
|
+
specifier: string;
|
|
62
|
+
version?: string;
|
|
63
|
+
}): SharedProvider | undefined;
|
|
64
|
+
declare function getSharedProviderModule({ scope, specifier, version, }: {
|
|
65
|
+
scope: string;
|
|
66
|
+
specifier: string;
|
|
67
|
+
version?: string;
|
|
68
|
+
}): unknown;
|
|
69
|
+
declare function resetSharedProviderScopesForTest(): void;
|
|
70
|
+
|
|
71
|
+
export { AdditionalSharedProviderEntry, SharedProvider, SharedProviderEntry, SharedProviderPlan, SharedProviderScope, SharedProviderScopes, buildSharedProviderPlan, createSharedProvider, createSharedProviderEntry, getSharedProvider, getSharedProviderModule, installSharedProvider, installSharedProviderEntry, resetSharedProviderScopesForTest };
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createSharedModulePlan,
|
|
3
|
+
resolveSharedModulePlan,
|
|
4
|
+
SHARED_MODULE_MANIFEST_PROTOCOL
|
|
5
|
+
} from "#internal/host/shared/shared-broker";
|
|
6
|
+
const DEFAULT_VERSION = "0";
|
|
7
|
+
const GLOBAL_PROVIDER_SCOPES_KEY = "__remote_components_shared_provider_scopes__";
|
|
8
|
+
function getProviderScopes() {
|
|
9
|
+
const self = globalThis;
|
|
10
|
+
self[GLOBAL_PROVIDER_SCOPES_KEY] ??= {};
|
|
11
|
+
return self[GLOBAL_PROVIDER_SCOPES_KEY];
|
|
12
|
+
}
|
|
13
|
+
function createSharedProvider({
|
|
14
|
+
value,
|
|
15
|
+
from
|
|
16
|
+
}) {
|
|
17
|
+
return {
|
|
18
|
+
get: () => value,
|
|
19
|
+
from,
|
|
20
|
+
eager: true,
|
|
21
|
+
loaded: 1
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function createSharedProviderEntry({
|
|
25
|
+
id,
|
|
26
|
+
specifier,
|
|
27
|
+
value,
|
|
28
|
+
required = true,
|
|
29
|
+
singleton = true,
|
|
30
|
+
scope,
|
|
31
|
+
from = "host"
|
|
32
|
+
}) {
|
|
33
|
+
return {
|
|
34
|
+
id,
|
|
35
|
+
specifier,
|
|
36
|
+
provider: createSharedProvider({ value, from }),
|
|
37
|
+
required,
|
|
38
|
+
singleton,
|
|
39
|
+
scope
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
async function buildSharedProviderPlan({
|
|
43
|
+
bundle,
|
|
44
|
+
hostShared,
|
|
45
|
+
remoteShared,
|
|
46
|
+
scope = `remote:${bundle}`,
|
|
47
|
+
callerTag = "SharedBroker",
|
|
48
|
+
normalizeId = (id) => id,
|
|
49
|
+
additionalEntries = [],
|
|
50
|
+
onMissing
|
|
51
|
+
}) {
|
|
52
|
+
const sharedModulePlan = createSharedModulePlan({
|
|
53
|
+
bundle,
|
|
54
|
+
hostShared,
|
|
55
|
+
remoteShared,
|
|
56
|
+
scope,
|
|
57
|
+
callerTag
|
|
58
|
+
});
|
|
59
|
+
const resolved = await resolveSharedModulePlan(sharedModulePlan);
|
|
60
|
+
const entriesByIdAndSpecifier = /* @__PURE__ */ new Map();
|
|
61
|
+
const addEntry = (entry) => {
|
|
62
|
+
entriesByIdAndSpecifier.set(`${entry.id}\0${entry.specifier}`, entry);
|
|
63
|
+
};
|
|
64
|
+
for (const entry of additionalEntries) {
|
|
65
|
+
addEntry(
|
|
66
|
+
createSharedProviderEntry({
|
|
67
|
+
...entry,
|
|
68
|
+
scope: entry.scope ?? scope
|
|
69
|
+
})
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
for (const entry of sharedModulePlan.entries) {
|
|
73
|
+
if (entry.status !== "resolved") {
|
|
74
|
+
if (onMissing && !(sharedModulePlan.protocol === SHARED_MODULE_MANIFEST_PROTOCOL && entry.required)) {
|
|
75
|
+
onMissing(entry);
|
|
76
|
+
}
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const value = resolved[entry.id];
|
|
80
|
+
if (typeof value === "undefined")
|
|
81
|
+
continue;
|
|
82
|
+
addEntry(
|
|
83
|
+
createSharedProviderEntry({
|
|
84
|
+
id: normalizeId(entry.id),
|
|
85
|
+
specifier: entry.specifier,
|
|
86
|
+
value,
|
|
87
|
+
required: entry.required,
|
|
88
|
+
singleton: entry.singleton,
|
|
89
|
+
scope: entry.scope
|
|
90
|
+
})
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
protocol: sharedModulePlan.protocol,
|
|
95
|
+
entries: Array.from(entriesByIdAndSpecifier.values())
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function installSharedProvider({
|
|
99
|
+
scope,
|
|
100
|
+
specifier,
|
|
101
|
+
value,
|
|
102
|
+
from,
|
|
103
|
+
provider,
|
|
104
|
+
version = DEFAULT_VERSION
|
|
105
|
+
}) {
|
|
106
|
+
const scopes = getProviderScopes();
|
|
107
|
+
const providerScope = scopes[scope] ??= {};
|
|
108
|
+
const versions = providerScope[specifier] ??= {};
|
|
109
|
+
const sharedProvider = provider ?? createSharedProvider({
|
|
110
|
+
value,
|
|
111
|
+
from: from ?? "host"
|
|
112
|
+
});
|
|
113
|
+
versions[version] = sharedProvider;
|
|
114
|
+
return sharedProvider;
|
|
115
|
+
}
|
|
116
|
+
function installSharedProviderEntry(entry) {
|
|
117
|
+
return installSharedProvider({
|
|
118
|
+
scope: entry.scope,
|
|
119
|
+
specifier: entry.specifier,
|
|
120
|
+
provider: entry.provider
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function getSharedProvider({
|
|
124
|
+
scope,
|
|
125
|
+
specifier,
|
|
126
|
+
version = DEFAULT_VERSION
|
|
127
|
+
}) {
|
|
128
|
+
const versions = getProviderScopes()[scope]?.[specifier];
|
|
129
|
+
if (!versions)
|
|
130
|
+
return void 0;
|
|
131
|
+
return versions[version] ?? (version === DEFAULT_VERSION ? void 0 : versions[DEFAULT_VERSION]);
|
|
132
|
+
}
|
|
133
|
+
function getSharedProviderModule({
|
|
134
|
+
scope,
|
|
135
|
+
specifier,
|
|
136
|
+
version
|
|
137
|
+
}) {
|
|
138
|
+
const provider = getSharedProvider({ scope, specifier, version });
|
|
139
|
+
if (!provider) {
|
|
140
|
+
throw new Error(
|
|
141
|
+
`Shared module "${specifier}" not found in provider scope "${scope}".`
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
provider.loaded = 1;
|
|
145
|
+
return provider.get();
|
|
146
|
+
}
|
|
147
|
+
function resetSharedProviderScopesForTest() {
|
|
148
|
+
const self = globalThis;
|
|
149
|
+
delete self[GLOBAL_PROVIDER_SCOPES_KEY];
|
|
150
|
+
}
|
|
151
|
+
export {
|
|
152
|
+
buildSharedProviderPlan,
|
|
153
|
+
createSharedProvider,
|
|
154
|
+
createSharedProviderEntry,
|
|
155
|
+
getSharedProvider,
|
|
156
|
+
getSharedProviderModule,
|
|
157
|
+
installSharedProvider,
|
|
158
|
+
installSharedProviderEntry,
|
|
159
|
+
resetSharedProviderScopesForTest
|
|
160
|
+
};
|
|
161
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/host/shared/provider.ts"],"sourcesContent":["import {\n createSharedModulePlan,\n type RemoteSharedModules,\n resolveSharedModulePlan,\n SHARED_MODULE_MANIFEST_PROTOCOL,\n type SharedModuleFactory,\n type SharedModuleResolution,\n} from '#internal/host/shared/shared-broker';\nimport type { LogLocation } from '#internal/utils/logger';\n\nconst DEFAULT_VERSION = '0';\nconst GLOBAL_PROVIDER_SCOPES_KEY =\n '__remote_components_shared_provider_scopes__';\n\nexport interface SharedProvider {\n get: () => unknown;\n from: string;\n eager?: boolean;\n loaded?: boolean | number;\n}\n\nexport type SharedProviderScope = Record<\n string,\n Record<string, SharedProvider>\n>;\n\nexport type SharedProviderScopes = Record<string, SharedProviderScope>;\n\nexport interface SharedProviderEntry {\n id: string;\n specifier: string;\n provider: SharedProvider;\n required: boolean;\n singleton: boolean;\n scope: string;\n}\n\nexport interface SharedProviderPlan {\n protocol: 'legacy' | typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n entries: SharedProviderEntry[];\n}\n\nexport interface AdditionalSharedProviderEntry {\n id: string;\n specifier: string;\n value: unknown;\n required?: boolean;\n singleton?: boolean;\n scope?: string;\n from?: string;\n}\n\nfunction getProviderScopes(): SharedProviderScopes {\n const self = globalThis as typeof globalThis & {\n [GLOBAL_PROVIDER_SCOPES_KEY]?: SharedProviderScopes;\n };\n self[GLOBAL_PROVIDER_SCOPES_KEY] ??= {};\n return self[GLOBAL_PROVIDER_SCOPES_KEY];\n}\n\nexport function createSharedProvider({\n value,\n from,\n}: {\n value: unknown;\n from: string;\n}): SharedProvider {\n return {\n get: () => value,\n from,\n eager: true,\n loaded: 1,\n };\n}\n\nexport function createSharedProviderEntry({\n id,\n specifier,\n value,\n required = true,\n singleton = true,\n scope,\n from = 'host',\n}: AdditionalSharedProviderEntry & { scope: string }): SharedProviderEntry {\n return {\n id,\n specifier,\n provider: createSharedProvider({ value, from }),\n required,\n singleton,\n scope,\n };\n}\n\nexport async function buildSharedProviderPlan({\n bundle,\n hostShared,\n remoteShared,\n scope = `remote:${bundle}`,\n callerTag = 'SharedBroker',\n normalizeId = (id) => id,\n additionalEntries = [],\n onMissing,\n}: {\n bundle: string;\n hostShared: Record<string, SharedModuleFactory | unknown>;\n remoteShared: RemoteSharedModules;\n scope?: string;\n callerTag?: LogLocation;\n normalizeId?: (id: string) => string;\n additionalEntries?: AdditionalSharedProviderEntry[];\n onMissing?: (entry: SharedModuleResolution) => void;\n}): Promise<SharedProviderPlan> {\n const sharedModulePlan = createSharedModulePlan({\n bundle,\n hostShared,\n remoteShared,\n scope,\n callerTag,\n });\n const resolved = await resolveSharedModulePlan(sharedModulePlan);\n const entriesByIdAndSpecifier = new Map<string, SharedProviderEntry>();\n const addEntry = (entry: SharedProviderEntry) => {\n entriesByIdAndSpecifier.set(`${entry.id}\\0${entry.specifier}`, entry);\n };\n\n for (const entry of additionalEntries) {\n addEntry(\n createSharedProviderEntry({\n ...entry,\n scope: entry.scope ?? scope,\n }),\n );\n }\n\n for (const entry of sharedModulePlan.entries) {\n if (entry.status !== 'resolved') {\n if (\n onMissing &&\n !(\n sharedModulePlan.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n entry.required\n )\n ) {\n onMissing(entry);\n }\n continue;\n }\n\n const value = resolved[entry.id];\n if (typeof value === 'undefined') continue;\n addEntry(\n createSharedProviderEntry({\n id: normalizeId(entry.id),\n specifier: entry.specifier,\n value,\n required: entry.required,\n singleton: entry.singleton,\n scope: entry.scope,\n }),\n );\n }\n\n return {\n protocol: sharedModulePlan.protocol,\n entries: Array.from(entriesByIdAndSpecifier.values()),\n };\n}\n\nexport function installSharedProvider({\n scope,\n specifier,\n value,\n from,\n provider,\n version = DEFAULT_VERSION,\n}: {\n scope: string;\n specifier: string;\n value?: unknown;\n from?: string;\n provider?: SharedProvider;\n version?: string;\n}): SharedProvider {\n const scopes = getProviderScopes();\n const providerScope = (scopes[scope] ??= {});\n const versions = (providerScope[specifier] ??= {});\n const sharedProvider =\n provider ??\n createSharedProvider({\n value,\n from: from ?? 'host',\n });\n versions[version] = sharedProvider;\n return sharedProvider;\n}\n\nexport function installSharedProviderEntry(\n entry: SharedProviderEntry,\n): SharedProvider {\n return installSharedProvider({\n scope: entry.scope,\n specifier: entry.specifier,\n provider: entry.provider,\n });\n}\n\nexport function getSharedProvider({\n scope,\n specifier,\n version = DEFAULT_VERSION,\n}: {\n scope: string;\n specifier: string;\n version?: string;\n}): SharedProvider | undefined {\n const versions = getProviderScopes()[scope]?.[specifier];\n if (!versions) return undefined;\n\n // This provider scope does not implement semver negotiation. Use an exact\n // version match, then the host default provider when a constrained version is\n // unavailable.\n return (\n versions[version] ??\n (version === DEFAULT_VERSION ? undefined : versions[DEFAULT_VERSION])\n );\n}\n\nexport function getSharedProviderModule({\n scope,\n specifier,\n version,\n}: {\n scope: string;\n specifier: string;\n version?: string;\n}): unknown {\n const provider = getSharedProvider({ scope, specifier, version });\n if (!provider) {\n throw new Error(\n `Shared module \"${specifier}\" not found in provider scope \"${scope}\".`,\n );\n }\n provider.loaded = 1;\n return provider.get();\n}\n\nexport function resetSharedProviderScopesForTest(): void {\n const self = globalThis as typeof globalThis & {\n [GLOBAL_PROVIDER_SCOPES_KEY]?: SharedProviderScopes;\n };\n delete self[GLOBAL_PROVIDER_SCOPES_KEY];\n}\n"],"mappings":"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","names":[]}
|
|
@@ -21,7 +21,6 @@ __export(shared_broker_exports, {
|
|
|
21
21
|
SHARED_MODULE_MANIFEST_PROTOCOL: () => SHARED_MODULE_MANIFEST_PROTOCOL,
|
|
22
22
|
createSharedModulePlan: () => createSharedModulePlan,
|
|
23
23
|
getMissingSharedModulesMessage: () => getMissingSharedModulesMessage,
|
|
24
|
-
installSharedModulePlan: () => installSharedModulePlan,
|
|
25
24
|
isSharedModuleManifest: () => isSharedModuleManifest,
|
|
26
25
|
resolveSharedModulePlan: () => resolveSharedModulePlan
|
|
27
26
|
});
|
|
@@ -107,40 +106,11 @@ async function resolveSharedModulePlan(plan) {
|
|
|
107
106
|
);
|
|
108
107
|
return resolved;
|
|
109
108
|
}
|
|
110
|
-
async function installSharedModulePlan({
|
|
111
|
-
plan,
|
|
112
|
-
target,
|
|
113
|
-
callerTag = "SharedBroker",
|
|
114
|
-
onMissing
|
|
115
|
-
}) {
|
|
116
|
-
return Promise.all(
|
|
117
|
-
plan.entries.map(async (entry) => {
|
|
118
|
-
if (entry.status !== "resolved") {
|
|
119
|
-
if (plan.protocol === SHARED_MODULE_MANIFEST_PROTOCOL && entry.required) {
|
|
120
|
-
logMissingRequiredSharedModule(callerTag, plan, entry);
|
|
121
|
-
return void 0;
|
|
122
|
-
}
|
|
123
|
-
if (onMissing) {
|
|
124
|
-
onMissing(entry);
|
|
125
|
-
} else {
|
|
126
|
-
(0, import_logger.logError)(
|
|
127
|
-
callerTag,
|
|
128
|
-
`Shared module "${entry.specifier}" not found for "${plan.bundle}".`
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
return void 0;
|
|
132
|
-
}
|
|
133
|
-
target[entry.id] = typeof entry.provider === "function" ? await entry.provider(plan.bundle) : entry.provider;
|
|
134
|
-
return void 0;
|
|
135
|
-
})
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
109
|
// Annotate the CommonJS export names for ESM import in node:
|
|
139
110
|
0 && (module.exports = {
|
|
140
111
|
SHARED_MODULE_MANIFEST_PROTOCOL,
|
|
141
112
|
createSharedModulePlan,
|
|
142
113
|
getMissingSharedModulesMessage,
|
|
143
|
-
installSharedModulePlan,
|
|
144
114
|
isSharedModuleManifest,
|
|
145
115
|
resolveSharedModulePlan
|
|
146
116
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/host/shared/shared-broker.ts"],"sourcesContent":["import type { LogLocation } from '#internal/utils/logger';\nimport { logDebug, logError } from '#internal/utils/logger';\n\nexport type SharedModuleFactory = (bundle?: string) => Promise<unknown>;\n\nexport const SHARED_MODULE_MANIFEST_PROTOCOL =\n 'remote-components.shared.v1' as const;\n\nexport type LegacySharedModuleMap = Record<string, string | number>;\n\nexport interface SharedModuleManifestRequirement {\n id: string | number;\n specifier: string;\n required?: boolean;\n singleton?: boolean;\n scope?: string;\n}\n\nexport interface SharedModuleManifest {\n protocol: typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n requirements: SharedModuleManifestRequirement[];\n}\n\nexport type RemoteSharedModules = LegacySharedModuleMap | SharedModuleManifest;\n\nexport interface SharedModuleRequirement {\n id: string;\n specifier: string;\n required: boolean;\n singleton: boolean;\n scope: string;\n}\n\nexport interface SharedModuleResolution extends SharedModuleRequirement {\n provider?: SharedModuleFactory | unknown;\n status: 'resolved' | 'missing';\n}\n\nexport interface SharedModulePlan {\n protocol: 'legacy' | typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n bundle: string;\n entries: SharedModuleResolution[];\n}\n\nexport function isSharedModuleManifest(\n value: unknown,\n): value is SharedModuleManifest {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'protocol' in value &&\n value.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n 'requirements' in value &&\n Array.isArray(value.requirements)\n );\n}\n\nexport function getMissingSharedModulesMessage(\n remoteShared: RemoteSharedModules,\n): string | undefined {\n if (isSharedModuleManifest(remoteShared)) return undefined;\n const message = remoteShared.__remote_components_missing_shared__;\n return typeof message === 'string' ? message : undefined;\n}\n\nexport function createSharedModulePlan({\n bundle,\n hostShared,\n remoteShared,\n scope = `remote:${bundle}`,\n callerTag = 'SharedBroker',\n}: {\n bundle: string;\n hostShared: Record<string, SharedModuleFactory | unknown>;\n remoteShared: RemoteSharedModules;\n scope?: string;\n callerTag?: LogLocation;\n}): SharedModulePlan {\n const protocol = isSharedModuleManifest(remoteShared)\n ? remoteShared.protocol\n : 'legacy';\n const requirements: SharedModuleManifestRequirement[] =\n isSharedModuleManifest(remoteShared)\n ? remoteShared.requirements\n : // @legacy(remote-components<=0.4.x): normalize the historical shared\n // map until hosts and remotes on 0.4.x are no longer supported.\n Object.entries(remoteShared).map(([id, specifier]) => ({\n id,\n specifier: String(specifier),\n required: true,\n singleton: true,\n }));\n\n const entries = requirements.map((requirement) => {\n const specifier = String(requirement.specifier);\n const provider = hostShared[specifier];\n const entry: SharedModuleResolution = {\n id: String(requirement.id),\n specifier,\n required: requirement.required ?? true,\n singleton: requirement.singleton ?? true,\n scope: requirement.scope ?? scope,\n provider,\n status: typeof provider === 'undefined' ? 'missing' : 'resolved',\n };\n\n if (entry.status === 'missing') {\n logDebug(\n callerTag,\n `Remote \"${bundle}\" requests \"${specifier}\" for \"${entry.id}\" but the host does not provide it`,\n );\n }\n\n return entry;\n });\n\n logDebug(\n callerTag,\n `Share plan (${protocol}) for \"${bundle}\": ${entries\n .map((entry) => `${entry.id}=>${entry.specifier}:${entry.status}`)\n .join(', ')}`,\n );\n\n return {\n protocol,\n bundle,\n entries,\n };\n}\n\nfunction missingRequiredSharedModuleMessage(\n plan: SharedModulePlan,\n entry: SharedModuleResolution,\n): string {\n return (\n `Remote Component \"${plan.bundle}\" requires shared module \"${entry.specifier}\", but the host does not provide it. ` +\n 'Add it to the host shared modules through `withRemoteComponentsConfig({ shared: [...] })` or the `shared` prop. ' +\n 'This diagnostic runs when both host and remote support the shared-module manifest in remote-components >=0.5.0. ' +\n 'The remote may load its bundled copy during the compatibility window; this will become a load error after remote-components <=0.4.x support is removed.'\n );\n}\n\nfunction logMissingRequiredSharedModule(\n callerTag: LogLocation,\n plan: SharedModulePlan,\n entry: SharedModuleResolution,\n): void {\n logError(callerTag, missingRequiredSharedModuleMessage(plan, entry));\n}\n\nexport async function resolveSharedModulePlan(\n plan: SharedModulePlan,\n): Promise<Record<string, unknown>> {\n const resolved: Record<string, unknown> = {};\n\n await Promise.all(\n plan.entries.map(async (entry) => {\n if (entry.status !== 'resolved') {\n if (\n plan.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n entry.required\n ) {\n logMissingRequiredSharedModule('SharedBroker', plan, entry);\n }\n return;\n }\n const value =\n typeof entry.provider === 'function'\n ? await (entry.provider as SharedModuleFactory)(plan.bundle)\n : entry.provider;\n resolved[entry.id] = value;\n }),\n );\n\n return resolved;\n}\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/host/shared/shared-broker.ts"],"sourcesContent":["import type { LogLocation } from '#internal/utils/logger';\nimport { logDebug, logError } from '#internal/utils/logger';\n\nexport type SharedModuleFactory = (bundle?: string) => Promise<unknown>;\n\nexport const SHARED_MODULE_MANIFEST_PROTOCOL =\n 'remote-components.shared.v1' as const;\n\n// @legacy(remote-components<=0.4.x): remove this map shape once all supported\n// remotes emit sharedManifest. The provider path should then consume only\n// SharedModuleManifest requirements.\nexport type LegacySharedModuleMap = Record<string, string | number>;\n\nexport interface SharedModuleManifestRequirement {\n id: string | number;\n specifier: string;\n required?: boolean;\n singleton?: boolean;\n scope?: string;\n}\n\nexport interface SharedModuleManifest {\n protocol: typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n requirements: SharedModuleManifestRequirement[];\n}\n\nexport type RemoteSharedModules = LegacySharedModuleMap | SharedModuleManifest;\n\nexport interface SharedModuleRequirement {\n id: string;\n specifier: string;\n required: boolean;\n singleton: boolean;\n scope: string;\n}\n\nexport interface SharedModuleResolution extends SharedModuleRequirement {\n provider?: SharedModuleFactory | unknown;\n status: 'resolved' | 'missing';\n}\n\nexport interface SharedModulePlan {\n protocol: 'legacy' | typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n bundle: string;\n entries: SharedModuleResolution[];\n}\n\nexport function isSharedModuleManifest(\n value: unknown,\n): value is SharedModuleManifest {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'protocol' in value &&\n value.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n 'requirements' in value &&\n Array.isArray(value.requirements)\n );\n}\n\nexport function getMissingSharedModulesMessage(\n remoteShared: RemoteSharedModules,\n): string | undefined {\n if (isSharedModuleManifest(remoteShared)) return undefined;\n const message = remoteShared.__remote_components_missing_shared__;\n return typeof message === 'string' ? message : undefined;\n}\n\nexport function createSharedModulePlan({\n bundle,\n hostShared,\n remoteShared,\n scope = `remote:${bundle}`,\n callerTag = 'SharedBroker',\n}: {\n bundle: string;\n hostShared: Record<string, SharedModuleFactory | unknown>;\n remoteShared: RemoteSharedModules;\n scope?: string;\n callerTag?: LogLocation;\n}): SharedModulePlan {\n const protocol = isSharedModuleManifest(remoteShared)\n ? remoteShared.protocol\n : 'legacy';\n const requirements: SharedModuleManifestRequirement[] =\n isSharedModuleManifest(remoteShared)\n ? remoteShared.requirements\n : // @legacy(remote-components<=0.4.x): normalize the historical shared\n // map until hosts and remotes on 0.4.x are no longer supported.\n Object.entries(remoteShared).map(([id, specifier]) => ({\n id,\n specifier: String(specifier),\n required: true,\n singleton: true,\n }));\n\n const entries = requirements.map((requirement) => {\n const specifier = String(requirement.specifier);\n const provider = hostShared[specifier];\n const entry: SharedModuleResolution = {\n id: String(requirement.id),\n specifier,\n required: requirement.required ?? true,\n singleton: requirement.singleton ?? true,\n scope: requirement.scope ?? scope,\n provider,\n status: typeof provider === 'undefined' ? 'missing' : 'resolved',\n };\n\n if (entry.status === 'missing') {\n logDebug(\n callerTag,\n `Remote \"${bundle}\" requests \"${specifier}\" for \"${entry.id}\" but the host does not provide it`,\n );\n }\n\n return entry;\n });\n\n logDebug(\n callerTag,\n `Share plan (${protocol}) for \"${bundle}\": ${entries\n .map((entry) => `${entry.id}=>${entry.specifier}:${entry.status}`)\n .join(', ')}`,\n );\n\n return {\n protocol,\n bundle,\n entries,\n };\n}\n\nfunction missingRequiredSharedModuleMessage(\n plan: SharedModulePlan,\n entry: SharedModuleResolution,\n): string {\n return (\n `Remote Component \"${plan.bundle}\" requires shared module \"${entry.specifier}\", but the host does not provide it. ` +\n 'Add it to the host shared modules through `withRemoteComponentsConfig({ shared: [...] })` or the `shared` prop. ' +\n 'This diagnostic runs when both host and remote support the shared-module manifest in remote-components >=0.5.0. ' +\n 'The remote may load its bundled copy during the compatibility window; this will become a load error after remote-components <=0.4.x support is removed.'\n );\n}\n\nfunction logMissingRequiredSharedModule(\n callerTag: LogLocation,\n plan: SharedModulePlan,\n entry: SharedModuleResolution,\n): void {\n logError(callerTag, missingRequiredSharedModuleMessage(plan, entry));\n}\n\nexport async function resolveSharedModulePlan(\n plan: SharedModulePlan,\n): Promise<Record<string, unknown>> {\n const resolved: Record<string, unknown> = {};\n\n await Promise.all(\n plan.entries.map(async (entry) => {\n if (entry.status !== 'resolved') {\n if (\n plan.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n entry.required\n ) {\n logMissingRequiredSharedModule('SharedBroker', plan, entry);\n }\n return;\n }\n const value =\n typeof entry.provider === 'function'\n ? await (entry.provider as SharedModuleFactory)(plan.bundle)\n : entry.provider;\n resolved[entry.id] = value;\n }),\n );\n\n return resolved;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAmC;AAI5B,MAAM,kCACX;AAyCK,SAAS,uBACd,OAC+B;AAC/B,SACE,OAAO,UAAU,YACjB,UAAU,QACV,cAAc,SACd,MAAM,aAAa,mCACnB,kBAAkB,SAClB,MAAM,QAAQ,MAAM,YAAY;AAEpC;AAEO,SAAS,+BACd,cACoB;AACpB,MAAI,uBAAuB,YAAY;AAAG,WAAO;AACjD,QAAM,UAAU,aAAa;AAC7B,SAAO,OAAO,YAAY,WAAW,UAAU;AACjD;AAEO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,UAAU;AAAA,EAClB,YAAY;AACd,GAMqB;AACnB,QAAM,WAAW,uBAAuB,YAAY,IAChD,aAAa,WACb;AACJ,QAAM,eACJ,uBAAuB,YAAY,IAC/B,aAAa;AAAA;AAAA;AAAA,IAGb,OAAO,QAAQ,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,SAAS,OAAO;AAAA,MACrD;AAAA,MACA,WAAW,OAAO,SAAS;AAAA,MAC3B,UAAU;AAAA,MACV,WAAW;AAAA,IACb,EAAE;AAAA;AAER,QAAM,UAAU,aAAa,IAAI,CAAC,gBAAgB;AAChD,UAAM,YAAY,OAAO,YAAY,SAAS;AAC9C,UAAM,WAAW,WAAW,SAAS;AACrC,UAAM,QAAgC;AAAA,MACpC,IAAI,OAAO,YAAY,EAAE;AAAA,MACzB;AAAA,MACA,UAAU,YAAY,YAAY;AAAA,MAClC,WAAW,YAAY,aAAa;AAAA,MACpC,OAAO,YAAY,SAAS;AAAA,MAC5B;AAAA,MACA,QAAQ,OAAO,aAAa,cAAc,YAAY;AAAA,IACxD;AAEA,QAAI,MAAM,WAAW,WAAW;AAC9B;AAAA,QACE;AAAA,QACA,WAAW,qBAAqB,mBAAmB,MAAM;AAAA,MAC3D;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AAED;AAAA,IACE;AAAA,IACA,eAAe,kBAAkB,YAAY,QAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,OAAO,MAAM,aAAa,MAAM,QAAQ,EAChE,KAAK,IAAI;AAAA,EACd;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,mCACP,MACA,OACQ;AACR,SACE,qBAAqB,KAAK,mCAAmC,MAAM;AAKvE;AAEA,SAAS,+BACP,WACA,MACA,OACM;AACN,8BAAS,WAAW,mCAAmC,MAAM,KAAK,CAAC;AACrE;AAEA,eAAsB,wBACpB,MACkC;AAClC,QAAM,WAAoC,CAAC;AAE3C,QAAM,QAAQ;AAAA,IACZ,KAAK,QAAQ,IAAI,OAAO,UAAU;AAChC,UAAI,MAAM,WAAW,YAAY;AAC/B,YACE,KAAK,aAAa,mCAClB,MAAM,UACN;AACA,yCAA+B,gBAAgB,MAAM,KAAK;AAAA,QAC5D;AACA;AAAA,MACF;AACA,YAAM,QACJ,OAAO,MAAM,aAAa,aACtB,MAAO,MAAM,SAAiC,KAAK,MAAM,IACzD,MAAM;AACZ,eAAS,MAAM,EAAE,IAAI;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -41,11 +41,5 @@ declare function createSharedModulePlan({ bundle, hostShared, remoteShared, scop
|
|
|
41
41
|
callerTag?: LogLocation;
|
|
42
42
|
}): SharedModulePlan;
|
|
43
43
|
declare function resolveSharedModulePlan(plan: SharedModulePlan): Promise<Record<string, unknown>>;
|
|
44
|
-
declare function installSharedModulePlan({ plan, target, callerTag, onMissing, }: {
|
|
45
|
-
plan: SharedModulePlan;
|
|
46
|
-
target: Record<string, unknown>;
|
|
47
|
-
callerTag?: LogLocation;
|
|
48
|
-
onMissing?: (entry: SharedModuleResolution) => void;
|
|
49
|
-
}): Promise<undefined[]>;
|
|
50
44
|
|
|
51
|
-
export { LegacySharedModuleMap, RemoteSharedModules, SHARED_MODULE_MANIFEST_PROTOCOL, SharedModuleFactory, SharedModuleManifest, SharedModuleManifestRequirement, SharedModulePlan, SharedModuleRequirement, SharedModuleResolution, createSharedModulePlan, getMissingSharedModulesMessage,
|
|
45
|
+
export { LegacySharedModuleMap, RemoteSharedModules, SHARED_MODULE_MANIFEST_PROTOCOL, SharedModuleFactory, SharedModuleManifest, SharedModuleManifestRequirement, SharedModulePlan, SharedModuleRequirement, SharedModuleResolution, createSharedModulePlan, getMissingSharedModulesMessage, isSharedModuleManifest, resolveSharedModulePlan };
|
|
@@ -79,39 +79,10 @@ async function resolveSharedModulePlan(plan) {
|
|
|
79
79
|
);
|
|
80
80
|
return resolved;
|
|
81
81
|
}
|
|
82
|
-
async function installSharedModulePlan({
|
|
83
|
-
plan,
|
|
84
|
-
target,
|
|
85
|
-
callerTag = "SharedBroker",
|
|
86
|
-
onMissing
|
|
87
|
-
}) {
|
|
88
|
-
return Promise.all(
|
|
89
|
-
plan.entries.map(async (entry) => {
|
|
90
|
-
if (entry.status !== "resolved") {
|
|
91
|
-
if (plan.protocol === SHARED_MODULE_MANIFEST_PROTOCOL && entry.required) {
|
|
92
|
-
logMissingRequiredSharedModule(callerTag, plan, entry);
|
|
93
|
-
return void 0;
|
|
94
|
-
}
|
|
95
|
-
if (onMissing) {
|
|
96
|
-
onMissing(entry);
|
|
97
|
-
} else {
|
|
98
|
-
logError(
|
|
99
|
-
callerTag,
|
|
100
|
-
`Shared module "${entry.specifier}" not found for "${plan.bundle}".`
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
return void 0;
|
|
104
|
-
}
|
|
105
|
-
target[entry.id] = typeof entry.provider === "function" ? await entry.provider(plan.bundle) : entry.provider;
|
|
106
|
-
return void 0;
|
|
107
|
-
})
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
82
|
export {
|
|
111
83
|
SHARED_MODULE_MANIFEST_PROTOCOL,
|
|
112
84
|
createSharedModulePlan,
|
|
113
85
|
getMissingSharedModulesMessage,
|
|
114
|
-
installSharedModulePlan,
|
|
115
86
|
isSharedModuleManifest,
|
|
116
87
|
resolveSharedModulePlan
|
|
117
88
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/host/shared/shared-broker.ts"],"sourcesContent":["import type { LogLocation } from '#internal/utils/logger';\nimport { logDebug, logError } from '#internal/utils/logger';\n\nexport type SharedModuleFactory = (bundle?: string) => Promise<unknown>;\n\nexport const SHARED_MODULE_MANIFEST_PROTOCOL =\n 'remote-components.shared.v1' as const;\n\nexport type LegacySharedModuleMap = Record<string, string | number>;\n\nexport interface SharedModuleManifestRequirement {\n id: string | number;\n specifier: string;\n required?: boolean;\n singleton?: boolean;\n scope?: string;\n}\n\nexport interface SharedModuleManifest {\n protocol: typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n requirements: SharedModuleManifestRequirement[];\n}\n\nexport type RemoteSharedModules = LegacySharedModuleMap | SharedModuleManifest;\n\nexport interface SharedModuleRequirement {\n id: string;\n specifier: string;\n required: boolean;\n singleton: boolean;\n scope: string;\n}\n\nexport interface SharedModuleResolution extends SharedModuleRequirement {\n provider?: SharedModuleFactory | unknown;\n status: 'resolved' | 'missing';\n}\n\nexport interface SharedModulePlan {\n protocol: 'legacy' | typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n bundle: string;\n entries: SharedModuleResolution[];\n}\n\nexport function isSharedModuleManifest(\n value: unknown,\n): value is SharedModuleManifest {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'protocol' in value &&\n value.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n 'requirements' in value &&\n Array.isArray(value.requirements)\n );\n}\n\nexport function getMissingSharedModulesMessage(\n remoteShared: RemoteSharedModules,\n): string | undefined {\n if (isSharedModuleManifest(remoteShared)) return undefined;\n const message = remoteShared.__remote_components_missing_shared__;\n return typeof message === 'string' ? message : undefined;\n}\n\nexport function createSharedModulePlan({\n bundle,\n hostShared,\n remoteShared,\n scope = `remote:${bundle}`,\n callerTag = 'SharedBroker',\n}: {\n bundle: string;\n hostShared: Record<string, SharedModuleFactory | unknown>;\n remoteShared: RemoteSharedModules;\n scope?: string;\n callerTag?: LogLocation;\n}): SharedModulePlan {\n const protocol = isSharedModuleManifest(remoteShared)\n ? remoteShared.protocol\n : 'legacy';\n const requirements: SharedModuleManifestRequirement[] =\n isSharedModuleManifest(remoteShared)\n ? remoteShared.requirements\n : // @legacy(remote-components<=0.4.x): normalize the historical shared\n // map until hosts and remotes on 0.4.x are no longer supported.\n Object.entries(remoteShared).map(([id, specifier]) => ({\n id,\n specifier: String(specifier),\n required: true,\n singleton: true,\n }));\n\n const entries = requirements.map((requirement) => {\n const specifier = String(requirement.specifier);\n const provider = hostShared[specifier];\n const entry: SharedModuleResolution = {\n id: String(requirement.id),\n specifier,\n required: requirement.required ?? true,\n singleton: requirement.singleton ?? true,\n scope: requirement.scope ?? scope,\n provider,\n status: typeof provider === 'undefined' ? 'missing' : 'resolved',\n };\n\n if (entry.status === 'missing') {\n logDebug(\n callerTag,\n `Remote \"${bundle}\" requests \"${specifier}\" for \"${entry.id}\" but the host does not provide it`,\n );\n }\n\n return entry;\n });\n\n logDebug(\n callerTag,\n `Share plan (${protocol}) for \"${bundle}\": ${entries\n .map((entry) => `${entry.id}=>${entry.specifier}:${entry.status}`)\n .join(', ')}`,\n );\n\n return {\n protocol,\n bundle,\n entries,\n };\n}\n\nfunction missingRequiredSharedModuleMessage(\n plan: SharedModulePlan,\n entry: SharedModuleResolution,\n): string {\n return (\n `Remote Component \"${plan.bundle}\" requires shared module \"${entry.specifier}\", but the host does not provide it. ` +\n 'Add it to the host shared modules through `withRemoteComponentsConfig({ shared: [...] })` or the `shared` prop. ' +\n 'This diagnostic runs when both host and remote support the shared-module manifest in remote-components >=0.5.0. ' +\n 'The remote may load its bundled copy during the compatibility window; this will become a load error after remote-components <=0.4.x support is removed.'\n );\n}\n\nfunction logMissingRequiredSharedModule(\n callerTag: LogLocation,\n plan: SharedModulePlan,\n entry: SharedModuleResolution,\n): void {\n logError(callerTag, missingRequiredSharedModuleMessage(plan, entry));\n}\n\nexport async function resolveSharedModulePlan(\n plan: SharedModulePlan,\n): Promise<Record<string, unknown>> {\n const resolved: Record<string, unknown> = {};\n\n await Promise.all(\n plan.entries.map(async (entry) => {\n if (entry.status !== 'resolved') {\n if (\n plan.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n entry.required\n ) {\n logMissingRequiredSharedModule('SharedBroker', plan, entry);\n }\n return;\n }\n const value =\n typeof entry.provider === 'function'\n ? await (entry.provider as SharedModuleFactory)(plan.bundle)\n : entry.provider;\n resolved[entry.id] = value;\n }),\n );\n\n return resolved;\n}\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/host/shared/shared-broker.ts"],"sourcesContent":["import type { LogLocation } from '#internal/utils/logger';\nimport { logDebug, logError } from '#internal/utils/logger';\n\nexport type SharedModuleFactory = (bundle?: string) => Promise<unknown>;\n\nexport const SHARED_MODULE_MANIFEST_PROTOCOL =\n 'remote-components.shared.v1' as const;\n\n// @legacy(remote-components<=0.4.x): remove this map shape once all supported\n// remotes emit sharedManifest. The provider path should then consume only\n// SharedModuleManifest requirements.\nexport type LegacySharedModuleMap = Record<string, string | number>;\n\nexport interface SharedModuleManifestRequirement {\n id: string | number;\n specifier: string;\n required?: boolean;\n singleton?: boolean;\n scope?: string;\n}\n\nexport interface SharedModuleManifest {\n protocol: typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n requirements: SharedModuleManifestRequirement[];\n}\n\nexport type RemoteSharedModules = LegacySharedModuleMap | SharedModuleManifest;\n\nexport interface SharedModuleRequirement {\n id: string;\n specifier: string;\n required: boolean;\n singleton: boolean;\n scope: string;\n}\n\nexport interface SharedModuleResolution extends SharedModuleRequirement {\n provider?: SharedModuleFactory | unknown;\n status: 'resolved' | 'missing';\n}\n\nexport interface SharedModulePlan {\n protocol: 'legacy' | typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n bundle: string;\n entries: SharedModuleResolution[];\n}\n\nexport function isSharedModuleManifest(\n value: unknown,\n): value is SharedModuleManifest {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'protocol' in value &&\n value.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n 'requirements' in value &&\n Array.isArray(value.requirements)\n );\n}\n\nexport function getMissingSharedModulesMessage(\n remoteShared: RemoteSharedModules,\n): string | undefined {\n if (isSharedModuleManifest(remoteShared)) return undefined;\n const message = remoteShared.__remote_components_missing_shared__;\n return typeof message === 'string' ? message : undefined;\n}\n\nexport function createSharedModulePlan({\n bundle,\n hostShared,\n remoteShared,\n scope = `remote:${bundle}`,\n callerTag = 'SharedBroker',\n}: {\n bundle: string;\n hostShared: Record<string, SharedModuleFactory | unknown>;\n remoteShared: RemoteSharedModules;\n scope?: string;\n callerTag?: LogLocation;\n}): SharedModulePlan {\n const protocol = isSharedModuleManifest(remoteShared)\n ? remoteShared.protocol\n : 'legacy';\n const requirements: SharedModuleManifestRequirement[] =\n isSharedModuleManifest(remoteShared)\n ? remoteShared.requirements\n : // @legacy(remote-components<=0.4.x): normalize the historical shared\n // map until hosts and remotes on 0.4.x are no longer supported.\n Object.entries(remoteShared).map(([id, specifier]) => ({\n id,\n specifier: String(specifier),\n required: true,\n singleton: true,\n }));\n\n const entries = requirements.map((requirement) => {\n const specifier = String(requirement.specifier);\n const provider = hostShared[specifier];\n const entry: SharedModuleResolution = {\n id: String(requirement.id),\n specifier,\n required: requirement.required ?? true,\n singleton: requirement.singleton ?? true,\n scope: requirement.scope ?? scope,\n provider,\n status: typeof provider === 'undefined' ? 'missing' : 'resolved',\n };\n\n if (entry.status === 'missing') {\n logDebug(\n callerTag,\n `Remote \"${bundle}\" requests \"${specifier}\" for \"${entry.id}\" but the host does not provide it`,\n );\n }\n\n return entry;\n });\n\n logDebug(\n callerTag,\n `Share plan (${protocol}) for \"${bundle}\": ${entries\n .map((entry) => `${entry.id}=>${entry.specifier}:${entry.status}`)\n .join(', ')}`,\n );\n\n return {\n protocol,\n bundle,\n entries,\n };\n}\n\nfunction missingRequiredSharedModuleMessage(\n plan: SharedModulePlan,\n entry: SharedModuleResolution,\n): string {\n return (\n `Remote Component \"${plan.bundle}\" requires shared module \"${entry.specifier}\", but the host does not provide it. ` +\n 'Add it to the host shared modules through `withRemoteComponentsConfig({ shared: [...] })` or the `shared` prop. ' +\n 'This diagnostic runs when both host and remote support the shared-module manifest in remote-components >=0.5.0. ' +\n 'The remote may load its bundled copy during the compatibility window; this will become a load error after remote-components <=0.4.x support is removed.'\n );\n}\n\nfunction logMissingRequiredSharedModule(\n callerTag: LogLocation,\n plan: SharedModulePlan,\n entry: SharedModuleResolution,\n): void {\n logError(callerTag, missingRequiredSharedModuleMessage(plan, entry));\n}\n\nexport async function resolveSharedModulePlan(\n plan: SharedModulePlan,\n): Promise<Record<string, unknown>> {\n const resolved: Record<string, unknown> = {};\n\n await Promise.all(\n plan.entries.map(async (entry) => {\n if (entry.status !== 'resolved') {\n if (\n plan.protocol === SHARED_MODULE_MANIFEST_PROTOCOL &&\n entry.required\n ) {\n logMissingRequiredSharedModule('SharedBroker', plan, entry);\n }\n return;\n }\n const value =\n typeof entry.provider === 'function'\n ? await (entry.provider as SharedModuleFactory)(plan.bundle)\n : entry.provider;\n resolved[entry.id] = value;\n }),\n );\n\n return resolved;\n}\n"],"mappings":"AACA,SAAS,UAAU,gBAAgB;AAI5B,MAAM,kCACX;AAyCK,SAAS,uBACd,OAC+B;AAC/B,SACE,OAAO,UAAU,YACjB,UAAU,QACV,cAAc,SACd,MAAM,aAAa,mCACnB,kBAAkB,SAClB,MAAM,QAAQ,MAAM,YAAY;AAEpC;AAEO,SAAS,+BACd,cACoB;AACpB,MAAI,uBAAuB,YAAY;AAAG,WAAO;AACjD,QAAM,UAAU,aAAa;AAC7B,SAAO,OAAO,YAAY,WAAW,UAAU;AACjD;AAEO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,UAAU;AAAA,EAClB,YAAY;AACd,GAMqB;AACnB,QAAM,WAAW,uBAAuB,YAAY,IAChD,aAAa,WACb;AACJ,QAAM,eACJ,uBAAuB,YAAY,IAC/B,aAAa;AAAA;AAAA;AAAA,IAGb,OAAO,QAAQ,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,SAAS,OAAO;AAAA,MACrD;AAAA,MACA,WAAW,OAAO,SAAS;AAAA,MAC3B,UAAU;AAAA,MACV,WAAW;AAAA,IACb,EAAE;AAAA;AAER,QAAM,UAAU,aAAa,IAAI,CAAC,gBAAgB;AAChD,UAAM,YAAY,OAAO,YAAY,SAAS;AAC9C,UAAM,WAAW,WAAW,SAAS;AACrC,UAAM,QAAgC;AAAA,MACpC,IAAI,OAAO,YAAY,EAAE;AAAA,MACzB;AAAA,MACA,UAAU,YAAY,YAAY;AAAA,MAClC,WAAW,YAAY,aAAa;AAAA,MACpC,OAAO,YAAY,SAAS;AAAA,MAC5B;AAAA,MACA,QAAQ,OAAO,aAAa,cAAc,YAAY;AAAA,IACxD;AAEA,QAAI,MAAM,WAAW,WAAW;AAC9B;AAAA,QACE;AAAA,QACA,WAAW,qBAAqB,mBAAmB,MAAM;AAAA,MAC3D;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AAED;AAAA,IACE;AAAA,IACA,eAAe,kBAAkB,YAAY,QAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,OAAO,MAAM,aAAa,MAAM,QAAQ,EAChE,KAAK,IAAI;AAAA,EACd;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,mCACP,MACA,OACQ;AACR,SACE,qBAAqB,KAAK,mCAAmC,MAAM;AAKvE;AAEA,SAAS,+BACP,WACA,MACA,OACM;AACN,WAAS,WAAW,mCAAmC,MAAM,KAAK,CAAC;AACrE;AAEA,eAAsB,wBACpB,MACkC;AAClC,QAAM,WAAoC,CAAC;AAE3C,QAAM,QAAQ;AAAA,IACZ,KAAK,QAAQ,IAAI,OAAO,UAAU;AAChC,UAAI,MAAM,WAAW,YAAY;AAC/B,YACE,KAAK,aAAa,mCAClB,MAAM,UACN;AACA,yCAA+B,gBAAgB,MAAM,KAAK;AAAA,QAC5D;AACA;AAAA,MACF;AACA,YAAM,QACJ,OAAO,MAAM,aAAa,aACtB,MAAO,MAAM,SAAiC,KAAK,MAAM,IACzD,MAAM;AACZ,eAAS,MAAM,EAAE,IAAI;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
|