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.
Files changed (88) hide show
  1. package/dist/{chunk-VJO4PTWG.js → chunk-4XWEMPKO.js} +6 -6
  2. package/dist/chunk-4XWEMPKO.js.map +1 -0
  3. package/dist/{chunk-YJJFRORQ.cjs → chunk-6NAV4SCF.cjs} +315 -74
  4. package/dist/chunk-6NAV4SCF.cjs.map +1 -0
  5. package/dist/{chunk-JZRA6DPE.js → chunk-6NUHDFSH.js} +6 -53
  6. package/dist/chunk-6NUHDFSH.js.map +1 -0
  7. package/dist/{chunk-EW5O3Q24.cjs → chunk-EZG36EB4.cjs} +23 -23
  8. package/dist/{chunk-EW5O3Q24.cjs.map → chunk-EZG36EB4.cjs.map} +1 -1
  9. package/dist/{chunk-KAFPXSRI.cjs → chunk-J42V6HSP.cjs} +18 -18
  10. package/dist/{chunk-STMO56U2.js → chunk-JYGC7T6L.js} +264 -23
  11. package/dist/chunk-JYGC7T6L.js.map +1 -0
  12. package/dist/{chunk-I7VKDF3E.cjs → chunk-SELGX4Y2.cjs} +4 -51
  13. package/dist/chunk-SELGX4Y2.cjs.map +1 -0
  14. package/dist/{chunk-KCUEMMYL.js → chunk-T6E2WPAB.js} +3 -3
  15. package/dist/{chunk-4MLJE6UP.cjs → chunk-VB64GQX7.cjs} +3 -3
  16. package/dist/{chunk-FF4SXSSG.js → chunk-X6SKTJ5N.js} +3 -3
  17. package/dist/{chunk-O4ED3BUP.cjs → chunk-XPMI4K3U.cjs} +19 -19
  18. package/dist/{chunk-WGSS7TJP.js → chunk-ZJW3GQTP.js} +2 -2
  19. package/dist/config/nextjs.cjs +5 -5
  20. package/dist/config/nextjs.cjs.map +1 -1
  21. package/dist/config/nextjs.js +1 -1
  22. package/dist/config/nextjs.js.map +1 -1
  23. package/dist/host/html.cjs +19 -19
  24. package/dist/host/html.js +7 -7
  25. package/dist/host/nextjs/app/client-only.cjs +11 -11
  26. package/dist/host/nextjs/app/client-only.js +6 -6
  27. package/dist/host/react.cjs +7 -7
  28. package/dist/host/react.js +6 -6
  29. package/dist/internal/config/webpack/apply-shared-modules.cjs +8 -0
  30. package/dist/internal/config/webpack/apply-shared-modules.cjs.map +1 -1
  31. package/dist/internal/config/webpack/apply-shared-modules.d.ts +6 -1
  32. package/dist/internal/config/webpack/apply-shared-modules.js +10 -0
  33. package/dist/internal/config/webpack/apply-shared-modules.js.map +1 -1
  34. package/dist/internal/config/webpack/provider-adapter.cjs +85 -0
  35. package/dist/internal/config/webpack/provider-adapter.cjs.map +1 -0
  36. package/dist/internal/config/webpack/provider-adapter.d.ts +7 -0
  37. package/dist/internal/config/webpack/provider-adapter.js +64 -0
  38. package/dist/internal/config/webpack/provider-adapter.js.map +1 -0
  39. package/dist/internal/config/webpack/shared-module-resolver.cjs +73 -0
  40. package/dist/internal/config/webpack/shared-module-resolver.cjs.map +1 -0
  41. package/dist/internal/config/webpack/shared-module-resolver.d.ts +35 -0
  42. package/dist/internal/config/webpack/shared-module-resolver.js +50 -0
  43. package/dist/internal/config/webpack/shared-module-resolver.js.map +1 -0
  44. package/dist/internal/host/shared/provider.cjs +188 -0
  45. package/dist/internal/host/shared/provider.cjs.map +1 -0
  46. package/dist/internal/host/shared/provider.d.ts +71 -0
  47. package/dist/internal/host/shared/provider.js +161 -0
  48. package/dist/internal/host/shared/provider.js.map +1 -0
  49. package/dist/internal/host/shared/shared-broker.cjs +0 -30
  50. package/dist/internal/host/shared/shared-broker.cjs.map +1 -1
  51. package/dist/internal/host/shared/shared-broker.d.ts +1 -7
  52. package/dist/internal/host/shared/shared-broker.js +0 -29
  53. package/dist/internal/host/shared/shared-broker.js.map +1 -1
  54. package/dist/internal/host/shared/shared-module-resolver.cjs +6 -28
  55. package/dist/internal/host/shared/shared-module-resolver.cjs.map +1 -1
  56. package/dist/internal/host/shared/shared-module-resolver.d.ts +9 -31
  57. package/dist/internal/host/shared/shared-module-resolver.js +4 -28
  58. package/dist/internal/host/shared/shared-module-resolver.js.map +1 -1
  59. package/dist/internal/runtime/loaders/component-loader.cjs +3 -2
  60. package/dist/internal/runtime/loaders/component-loader.cjs.map +1 -1
  61. package/dist/internal/runtime/loaders/component-loader.js +2 -4
  62. package/dist/internal/runtime/loaders/component-loader.js.map +1 -1
  63. package/dist/internal/runtime/turbopack/shared-modules.cjs +13 -19
  64. package/dist/internal/runtime/turbopack/shared-modules.cjs.map +1 -1
  65. package/dist/internal/runtime/turbopack/shared-modules.js +17 -21
  66. package/dist/internal/runtime/turbopack/shared-modules.js.map +1 -1
  67. package/dist/{turbopack-RXVSOWF7.cjs → turbopack-6BXAJGS5.cjs} +11 -11
  68. package/dist/{turbopack-XDIGB4GI.js → turbopack-WAERWSWW.js} +4 -4
  69. package/dist/{webpack-HKD7RZRE.cjs → webpack-VTSF2B2G.cjs} +11 -11
  70. package/dist/webpack-VTSF2B2G.cjs.map +1 -0
  71. package/dist/{webpack-3QXPAZN4.js → webpack-ZYOBNVFE.js} +6 -6
  72. package/dist/webpack-ZYOBNVFE.js.map +1 -0
  73. package/package.json +1 -1
  74. package/dist/chunk-I7VKDF3E.cjs.map +0 -1
  75. package/dist/chunk-JZRA6DPE.js.map +0 -1
  76. package/dist/chunk-STMO56U2.js.map +0 -1
  77. package/dist/chunk-VJO4PTWG.js.map +0 -1
  78. package/dist/chunk-YJJFRORQ.cjs.map +0 -1
  79. package/dist/webpack-3QXPAZN4.js.map +0 -1
  80. package/dist/webpack-HKD7RZRE.cjs.map +0 -1
  81. /package/dist/{chunk-KAFPXSRI.cjs.map → chunk-J42V6HSP.cjs.map} +0 -0
  82. /package/dist/{chunk-KCUEMMYL.js.map → chunk-T6E2WPAB.js.map} +0 -0
  83. /package/dist/{chunk-4MLJE6UP.cjs.map → chunk-VB64GQX7.cjs.map} +0 -0
  84. /package/dist/{chunk-FF4SXSSG.js.map → chunk-X6SKTJ5N.js.map} +0 -0
  85. /package/dist/{chunk-O4ED3BUP.cjs.map → chunk-XPMI4K3U.cjs.map} +0 -0
  86. /package/dist/{chunk-WGSS7TJP.js.map → chunk-ZJW3GQTP.js.map} +0 -0
  87. /package/dist/{turbopack-RXVSOWF7.cjs.map → turbopack-6BXAJGS5.cjs.map} +0 -0
  88. /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\nexport async function installSharedModulePlan({\n plan,\n target,\n callerTag = 'SharedBroker',\n onMissing,\n}: {\n plan: SharedModulePlan;\n target: Record<string, unknown>;\n callerTag?: LogLocation;\n onMissing?: (entry: SharedModuleResolution) => void;\n}): Promise<undefined[]> {\n return 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(callerTag, plan, entry);\n return undefined;\n }\n if (onMissing) {\n onMissing(entry);\n } else {\n logError(\n callerTag,\n `Shared module \"${entry.specifier}\" not found for \"${plan.bundle}\".`,\n );\n }\n return undefined;\n }\n\n target[entry.id] =\n typeof entry.provider === 'function'\n ? await (entry.provider as SharedModuleFactory)(plan.bundle)\n : entry.provider;\n return undefined;\n }),\n );\n}\n"],"mappings":"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","names":[]}
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, installSharedModulePlan, isSharedModuleManifest, resolveSharedModulePlan };
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\nexport async function installSharedModulePlan({\n plan,\n target,\n callerTag = 'SharedBroker',\n onMissing,\n}: {\n plan: SharedModulePlan;\n target: Record<string, unknown>;\n callerTag?: LogLocation;\n onMissing?: (entry: SharedModuleResolution) => void;\n}): Promise<undefined[]> {\n return 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(callerTag, plan, entry);\n return undefined;\n }\n if (onMissing) {\n onMissing(entry);\n } else {\n logError(\n callerTag,\n `Shared module \"${entry.specifier}\" not found for \"${plan.bundle}\".`,\n );\n }\n return undefined;\n }\n\n target[entry.id] =\n typeof entry.provider === 'function'\n ? await (entry.provider as SharedModuleFactory)(plan.bundle)\n : entry.provider;\n return undefined;\n }),\n );\n}\n"],"mappings":"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","names":[]}
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":[]}