@bleedingdev/modern-js-renderer-octane 3.9.3-ultramodern.8 → 3.9.3-ultramodern.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/cjs/client.js +56 -6
- package/dist/cjs/entry-application.js +7 -2
- package/dist/cjs/entry-client.js +3 -0
- package/dist/cjs/entry-server.js +11 -3
- package/dist/cjs/federation.js +108 -6
- package/dist/cjs/i18n/LocalizedLink.js +24 -33
- package/dist/cjs/i18n/index.js +0 -3
- package/dist/cjs/i18n-external-snapshot.js +645 -0
- package/dist/cjs/plugin/index.js +1 -1
- package/dist/cjs/plugin/profile.js +5 -4
- package/dist/cjs/router-external-snapshot.js +263 -0
- package/dist/cjs/server.js +15 -2
- package/dist/cjs/worker-federation-context.js +63 -0
- package/dist/cjs/worker-federation-contexts.js +97 -0
- package/dist/cjs/worker-federation.js +97 -0
- package/dist/esm/client.mjs +56 -6
- package/dist/esm/entry-application.mjs +7 -2
- package/dist/esm/entry-client.mjs +3 -0
- package/dist/esm/entry-server.mjs +8 -3
- package/dist/esm/federation.mjs +110 -8
- package/dist/esm/i18n/LocalizedLink.mjs +24 -30
- package/dist/esm/i18n/index.mjs +1 -1
- package/dist/esm/i18n-external-snapshot.mjs +576 -0
- package/dist/esm/router-external-snapshot.mjs +216 -0
- package/dist/esm/server.mjs +15 -2
- package/dist/esm/worker-federation-context.mjs +19 -0
- package/dist/esm/worker-federation-contexts.mjs +47 -0
- package/dist/esm/worker-federation.mjs +59 -0
- package/dist/esm-node/plugin/index.mjs +1 -1
- package/dist/esm-node/plugin/profile.mjs +5 -4
- package/dist/types/client.d.ts +5 -1
- package/dist/types/entry-client.d.ts +2 -0
- package/dist/types/entry-server.d.ts +4 -1
- package/dist/types/federation.d.ts +2 -0
- package/dist/types/i18n/LocalizedLink.d.ts +5 -32
- package/dist/types/i18n/context.d.ts +1 -1
- package/dist/types/i18n/index.d.ts +1 -1
- package/dist/types/i18n-external-snapshot.d.ts +43 -0
- package/dist/types/router-external-snapshot.d.ts +10 -0
- package/dist/types/server.d.ts +3 -0
- package/dist/types/worker-federation-context.d.ts +34 -0
- package/dist/types/worker-federation-contexts.d.ts +25 -0
- package/dist/types/worker-federation.d.ts +20 -0
- package/package.json +69 -12
- package/src/client.ts +99 -16
- package/src/entry-application.ts +7 -3
- package/src/entry-client.ts +10 -0
- package/src/entry-server.ts +17 -6
- package/src/federation.ts +159 -15
- package/src/i18n/LocalizedLink.ts +46 -72
- package/src/i18n/context.ts +1 -1
- package/src/i18n/index.ts +1 -5
- package/src/i18n-external-snapshot.ts +803 -0
- package/src/plugin/compiler-manifest.cjs +27 -1
- package/src/plugin/index.ts +1 -1
- package/src/plugin/profile.ts +6 -4
- package/src/router-external-snapshot.ts +306 -0
- package/src/server.ts +29 -4
- package/src/worker-federation-context.ts +51 -0
- package/src/worker-federation-contexts.ts +91 -0
- package/src/worker-federation.ts +120 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE: ()=>OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE,
|
|
32
|
+
associateOctaneFileRouteSnapshot: ()=>associateOctaneFileRouteSnapshot,
|
|
33
|
+
captureOctaneRouterSnapshot: ()=>captureOctaneRouterSnapshot,
|
|
34
|
+
registerOctaneRouterWorkerContexts: ()=>registerOctaneRouterWorkerContexts
|
|
35
|
+
});
|
|
36
|
+
const tanstack_router_namespaceObject = require("@octanejs/tanstack-router");
|
|
37
|
+
const external_worker_federation_contexts_js_namespaceObject = require("./worker-federation-contexts.js");
|
|
38
|
+
const OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE = Object.freeze({
|
|
39
|
+
key: 'ultramodern.file-routes',
|
|
40
|
+
version: '1'
|
|
41
|
+
});
|
|
42
|
+
const origins = new WeakMap();
|
|
43
|
+
let profileRegistered = false;
|
|
44
|
+
function plainRecord(value) {
|
|
45
|
+
return null !== value && 'object' == typeof value && [
|
|
46
|
+
Object.prototype,
|
|
47
|
+
null
|
|
48
|
+
].includes(Object.getPrototypeOf(value));
|
|
49
|
+
}
|
|
50
|
+
function record(value, fields) {
|
|
51
|
+
if (!plainRecord(value)) throw new TypeError('Worker router context requires a plain record');
|
|
52
|
+
for (const key of Reflect.ownKeys(value)){
|
|
53
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
54
|
+
if ('string' != typeof key || fields && !fields.includes(key) || !descriptor || !descriptor.enumerable || !('value' in descriptor)) throw new TypeError('Unknown Worker router context field or accessor');
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
function nonempty(value) {
|
|
59
|
+
if ('string' != typeof value || !value.trim() || value.length > 1024) throw new TypeError('Invalid Worker router identity');
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
function publicContext(value) {
|
|
63
|
+
const context = record(value, [
|
|
64
|
+
'ultramodern'
|
|
65
|
+
]);
|
|
66
|
+
const metadata = record(context.ultramodern, [
|
|
67
|
+
'rendererIdentity'
|
|
68
|
+
]);
|
|
69
|
+
const identity = record(metadata.rendererIdentity, [
|
|
70
|
+
'renderer',
|
|
71
|
+
'appId',
|
|
72
|
+
'entryName',
|
|
73
|
+
'protocolVersion',
|
|
74
|
+
'buildId'
|
|
75
|
+
]);
|
|
76
|
+
if ('octane' !== identity.renderer || 1 !== identity.protocolVersion) throw new TypeError('Unsupported Worker router identity');
|
|
77
|
+
return Object.freeze({
|
|
78
|
+
ultramodern: Object.freeze({
|
|
79
|
+
rendererIdentity: Object.freeze({
|
|
80
|
+
renderer: 'octane',
|
|
81
|
+
appId: nonempty(identity.appId),
|
|
82
|
+
entryName: nonempty(identity.entryName),
|
|
83
|
+
protocolVersion: 1,
|
|
84
|
+
buildId: nonempty(identity.buildId)
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function localizedUrls(value) {
|
|
90
|
+
if (void 0 === value || 'boolean' == typeof value) return value;
|
|
91
|
+
const input = record(value);
|
|
92
|
+
const result = {};
|
|
93
|
+
for (const [path, translations] of Object.entries(input)){
|
|
94
|
+
const names = {};
|
|
95
|
+
for (const [language, target] of Object.entries(record(translations)))names[nonempty(language)] = nonempty(target);
|
|
96
|
+
result[path] = names;
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
function rewriteDescriptor(value) {
|
|
101
|
+
if (void 0 === value) return;
|
|
102
|
+
const input = record(value, [
|
|
103
|
+
'language',
|
|
104
|
+
'languages',
|
|
105
|
+
'localisedUrls'
|
|
106
|
+
]);
|
|
107
|
+
if (!Array.isArray(input.languages) || !input.languages.length || input.languages.length > 64) throw new TypeError('Invalid Worker router i18n languages');
|
|
108
|
+
const languages = input.languages.map(nonempty);
|
|
109
|
+
const language = nonempty(input.language);
|
|
110
|
+
if (new Set(languages).size !== languages.length || !languages.includes(language)) throw new TypeError('Invalid Worker router i18n language');
|
|
111
|
+
const urls = localizedUrls(input.localisedUrls);
|
|
112
|
+
return {
|
|
113
|
+
language,
|
|
114
|
+
languages,
|
|
115
|
+
...void 0 === urls ? {} : {
|
|
116
|
+
localisedUrls: urls
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function nativeRewriteDescriptor(router) {
|
|
121
|
+
if (!router.options.rewrite) return;
|
|
122
|
+
const known = (0, external_worker_federation_contexts_js_namespaceObject.getOctaneWorkerRouterRewrite)()?.capture(router.options.rewrite);
|
|
123
|
+
if (!known) throw new TypeError('Custom router rewrite requires an exact Worker profile');
|
|
124
|
+
const descriptor = rewriteDescriptor(known);
|
|
125
|
+
if (!descriptor) throw new TypeError('Missing native router rewrite provenance');
|
|
126
|
+
return {
|
|
127
|
+
language: descriptor.language,
|
|
128
|
+
languages: [
|
|
129
|
+
...descriptor.languages
|
|
130
|
+
],
|
|
131
|
+
...void 0 === descriptor.localisedUrls ? {} : {
|
|
132
|
+
localisedUrls: descriptor.localisedUrls
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function validateDefaultSnapshot(snapshot) {
|
|
137
|
+
publicContext(snapshot.publicContext);
|
|
138
|
+
rewriteDescriptor(snapshot.i18n);
|
|
139
|
+
}
|
|
140
|
+
function ensureDefaultProfile() {
|
|
141
|
+
if (profileRegistered) return;
|
|
142
|
+
(0, tanstack_router_namespaceObject.registerRouterRenderProfile)({
|
|
143
|
+
id: OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE,
|
|
144
|
+
assertHost: (router, snapshot)=>{
|
|
145
|
+
const origin = origins.get(router);
|
|
146
|
+
if (!origin || origin.rewrite !== router.options.rewrite || JSON.stringify(publicContext(router.options.context)) !== JSON.stringify(origin.publicContext)) throw new TypeError('Generated Worker router origin changed');
|
|
147
|
+
(0, tanstack_router_namespaceObject.assertDefaultRouterRenderHost)(router, void 0 !== snapshot.i18n);
|
|
148
|
+
validateDefaultSnapshot(snapshot);
|
|
149
|
+
if (JSON.stringify(nativeRewriteDescriptor(router)) !== JSON.stringify(snapshot.i18n)) throw new TypeError('Worker router rewrite differs from its native provenance');
|
|
150
|
+
},
|
|
151
|
+
createRoutingTree: (snapshot)=>{
|
|
152
|
+
validateDefaultSnapshot(snapshot);
|
|
153
|
+
return (0, tanstack_router_namespaceObject.createRouterRenderRouteTree)(snapshot.routes);
|
|
154
|
+
},
|
|
155
|
+
routingOptions: (snapshot)=>{
|
|
156
|
+
const defaults = {
|
|
157
|
+
parseSearch: tanstack_router_namespaceObject.defaultParseSearch,
|
|
158
|
+
stringifySearch: tanstack_router_namespaceObject.defaultStringifySearch
|
|
159
|
+
};
|
|
160
|
+
const i18n = rewriteDescriptor(snapshot.i18n);
|
|
161
|
+
if (!i18n) return defaults;
|
|
162
|
+
const codec = (0, external_worker_federation_contexts_js_namespaceObject.getOctaneWorkerRouterRewrite)();
|
|
163
|
+
if (!codec) throw new TypeError('Missing owning Worker router i18n codec');
|
|
164
|
+
return {
|
|
165
|
+
...defaults,
|
|
166
|
+
rewrite: codec.restore(i18n)
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
profileRegistered = true;
|
|
171
|
+
}
|
|
172
|
+
function associateOctaneFileRouteSnapshot(router) {
|
|
173
|
+
ensureDefaultProfile();
|
|
174
|
+
const context = publicContext(router.options.context);
|
|
175
|
+
origins.set(router, {
|
|
176
|
+
publicContext: context,
|
|
177
|
+
rewrite: router.options.rewrite
|
|
178
|
+
});
|
|
179
|
+
(0, tanstack_router_namespaceObject.associateRouterRenderProfile)(router, {
|
|
180
|
+
id: OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE,
|
|
181
|
+
publicContext: context
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function captureOctaneRouterSnapshot(router) {
|
|
185
|
+
const origin = origins.get(router);
|
|
186
|
+
const declared = (0, tanstack_router_namespaceObject.getRouterRenderProfile)(router);
|
|
187
|
+
if (origin && declared?.key === OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE.key && declared.version === OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE.version) {
|
|
188
|
+
const i18n = nativeRewriteDescriptor(router);
|
|
189
|
+
(0, tanstack_router_namespaceObject.associateRouterRenderProfile)(router, {
|
|
190
|
+
id: OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE,
|
|
191
|
+
publicContext: origin.publicContext,
|
|
192
|
+
...void 0 === i18n ? {} : {
|
|
193
|
+
i18n
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
return (0, tanstack_router_namespaceObject.captureRouterRenderSnapshot)(router);
|
|
198
|
+
}
|
|
199
|
+
let registrations = 0;
|
|
200
|
+
let releaseContexts;
|
|
201
|
+
function registerOctaneRouterWorkerContexts() {
|
|
202
|
+
ensureDefaultProfile();
|
|
203
|
+
if (!releaseContexts) {
|
|
204
|
+
const releaseRouter = (0, external_worker_federation_contexts_js_namespaceObject.registerOctaneWorkerContext)(tanstack_router_namespaceObject.routerContext, {
|
|
205
|
+
key: external_worker_federation_contexts_js_namespaceObject.OCTANE_WORKER_CONTEXT_KEYS.router,
|
|
206
|
+
encode: (value)=>{
|
|
207
|
+
if (!value) throw new TypeError('Missing native router provider');
|
|
208
|
+
return captureOctaneRouterSnapshot(value);
|
|
209
|
+
},
|
|
210
|
+
decode: (value, signal)=>(0, tanstack_router_namespaceObject.restoreRouterRenderSnapshot)(value, {
|
|
211
|
+
signal
|
|
212
|
+
}),
|
|
213
|
+
dispose: (value)=>{
|
|
214
|
+
if (value) (0, tanstack_router_namespaceObject.disposeRouterRenderSnapshot)(value);
|
|
215
|
+
},
|
|
216
|
+
isProvided: (value)=>void 0 !== value
|
|
217
|
+
});
|
|
218
|
+
try {
|
|
219
|
+
const releaseMatch = (0, external_worker_federation_contexts_js_namespaceObject.registerOctaneWorkerContext)(tanstack_router_namespaceObject.matchContext, {
|
|
220
|
+
key: external_worker_federation_contexts_js_namespaceObject.OCTANE_WORKER_CONTEXT_KEYS.match,
|
|
221
|
+
encode: nonempty,
|
|
222
|
+
decode: nonempty,
|
|
223
|
+
validate: (value, readContext)=>{
|
|
224
|
+
const selected = readContext(tanstack_router_namespaceObject.routerContext);
|
|
225
|
+
const router = selected.present ? selected.value : void 0;
|
|
226
|
+
const current = router?.state.matches.find((match)=>match.routeId === value);
|
|
227
|
+
if (!router || !current || 'string' != typeof value || router.stores.getMatchStore(value).get() !== current) throw new TypeError('Worker match context requires its selected native router and a current match');
|
|
228
|
+
},
|
|
229
|
+
isProvided: (value)=>void 0 !== value
|
|
230
|
+
});
|
|
231
|
+
releaseContexts = ()=>{
|
|
232
|
+
releaseMatch();
|
|
233
|
+
releaseRouter();
|
|
234
|
+
};
|
|
235
|
+
} catch (error) {
|
|
236
|
+
releaseRouter();
|
|
237
|
+
throw error;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
registrations++;
|
|
241
|
+
let released = false;
|
|
242
|
+
return ()=>{
|
|
243
|
+
if (released) return;
|
|
244
|
+
released = true;
|
|
245
|
+
if (0 === --registrations) {
|
|
246
|
+
releaseContexts?.();
|
|
247
|
+
releaseContexts = void 0;
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
exports.OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE = __webpack_exports__.OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE;
|
|
252
|
+
exports.associateOctaneFileRouteSnapshot = __webpack_exports__.associateOctaneFileRouteSnapshot;
|
|
253
|
+
exports.captureOctaneRouterSnapshot = __webpack_exports__.captureOctaneRouterSnapshot;
|
|
254
|
+
exports.registerOctaneRouterWorkerContexts = __webpack_exports__.registerOctaneRouterWorkerContexts;
|
|
255
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
256
|
+
"OCTANE_FILE_ROUTE_SNAPSHOT_PROFILE",
|
|
257
|
+
"associateOctaneFileRouteSnapshot",
|
|
258
|
+
"captureOctaneRouterSnapshot",
|
|
259
|
+
"registerOctaneRouterWorkerContexts"
|
|
260
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
261
|
+
Object.defineProperty(exports, '__esModule', {
|
|
262
|
+
value: true
|
|
263
|
+
});
|
package/dist/cjs/server.js
CHANGED
|
@@ -37,6 +37,7 @@ const server_namespaceObject = require("@octanejs/tanstack-router/ssr/server");
|
|
|
37
37
|
const external_octane_server_namespaceObject = require("octane/server");
|
|
38
38
|
const external_bootstrap_js_namespaceObject = require("./bootstrap.js");
|
|
39
39
|
const external_federation_context_js_namespaceObject = require("./federation-context.js");
|
|
40
|
+
const external_worker_federation_context_js_namespaceObject = require("./worker-federation-context.js");
|
|
40
41
|
function prepareOctaneDocument(session, document, hydrating) {
|
|
41
42
|
(0, external_bootstrap_js_namespaceObject.assertOctaneIdentity)(session.identity);
|
|
42
43
|
if ('node' !== session.platform.kind && 'worker' !== session.platform.kind) throw new Error('An Octane document requires a Node or worker request platform.');
|
|
@@ -107,12 +108,21 @@ async function renderOctaneApplication(input) {
|
|
|
107
108
|
if (session.responsePolicy?.kind === 'terminal') return session.respond(null);
|
|
108
109
|
session.startRendering();
|
|
109
110
|
let head = '';
|
|
110
|
-
const federation = input.federation ? (0, external_federation_context_js_namespaceObject.createFederationScope)(input.federation, true, document.nonce) : void 0;
|
|
111
|
+
const federation = input.federation || input.workerFederation ? (0, external_federation_context_js_namespaceObject.createFederationScope)(input.federation, true, document.nonce) : void 0;
|
|
111
112
|
const App = federation ? ()=>(0, external_octane_server_namespaceObject.createElement)(external_federation_context_js_namespaceObject.FederationRoot, {
|
|
112
113
|
scope: federation,
|
|
113
114
|
children: 'function' == typeof input.App ? (0, external_octane_server_namespaceObject.createElement)(input.App, input.props) : input.App
|
|
114
115
|
}) : input.App;
|
|
115
|
-
const
|
|
116
|
+
const workerFederation = input.workerFederation ? {
|
|
117
|
+
transport: input.workerFederation,
|
|
118
|
+
locale: input.workerFederationLocale ?? 'default',
|
|
119
|
+
signal: session.signal
|
|
120
|
+
} : void 0;
|
|
121
|
+
const NativeApp = workerFederation ? ()=>(0, external_octane_server_namespaceObject.createElement)(external_worker_federation_context_js_namespaceObject.WorkerFederationRoot, {
|
|
122
|
+
scope: workerFederation,
|
|
123
|
+
children: 'function' == typeof App ? (0, external_octane_server_namespaceObject.createElement)(App, input.props) : App
|
|
124
|
+
}) : App;
|
|
125
|
+
const nativeStream = await (0, external_octane_server_namespaceObject.renderToReadableStream)(NativeApp, input.props, {
|
|
116
126
|
signal: session.signal,
|
|
117
127
|
...void 0 === document.nonce ? {} : {
|
|
118
128
|
nonce: document.nonce
|
|
@@ -125,6 +135,9 @@ async function renderOctaneApplication(input) {
|
|
|
125
135
|
buildId: document.nativeHydrationBuildId,
|
|
126
136
|
documentId: document.documentId
|
|
127
137
|
},
|
|
138
|
+
externalSnapshots: {
|
|
139
|
+
documentId: document.documentId
|
|
140
|
+
},
|
|
128
141
|
headChannel: 'separate',
|
|
129
142
|
onHeadReady (value) {
|
|
130
143
|
head = value;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
WorkerFederationApplication: ()=>WorkerFederationApplication,
|
|
32
|
+
WorkerFederationContext: ()=>WorkerFederationContext,
|
|
33
|
+
WorkerFederationRoot: ()=>WorkerFederationRoot
|
|
34
|
+
});
|
|
35
|
+
const external_octane_namespaceObject = require("octane");
|
|
36
|
+
const external_federation_context_js_namespaceObject = require("./federation-context.js");
|
|
37
|
+
const WorkerFederationContext = (0, external_octane_namespaceObject.createContext)(null);
|
|
38
|
+
function WorkerFederationRoot(props) {
|
|
39
|
+
return (0, external_octane_namespaceObject.createElement)(WorkerFederationContext, {
|
|
40
|
+
value: props.scope,
|
|
41
|
+
children: props.children
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function WorkerFederationApplication(props) {
|
|
45
|
+
return (0, external_octane_namespaceObject.createElement)(WorkerFederationRoot, {
|
|
46
|
+
scope: props.scope,
|
|
47
|
+
children: props.federation ? (0, external_octane_namespaceObject.createElement)(external_federation_context_js_namespaceObject.FederationApplication, {
|
|
48
|
+
scope: props.federation,
|
|
49
|
+
application: props.application
|
|
50
|
+
}) : (0, external_octane_namespaceObject.createElement)(props.application.default, props.application.props)
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
exports.WorkerFederationApplication = __webpack_exports__.WorkerFederationApplication;
|
|
54
|
+
exports.WorkerFederationContext = __webpack_exports__.WorkerFederationContext;
|
|
55
|
+
exports.WorkerFederationRoot = __webpack_exports__.WorkerFederationRoot;
|
|
56
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
57
|
+
"WorkerFederationApplication",
|
|
58
|
+
"WorkerFederationContext",
|
|
59
|
+
"WorkerFederationRoot"
|
|
60
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
61
|
+
Object.defineProperty(exports, '__esModule', {
|
|
62
|
+
value: true
|
|
63
|
+
});
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
OCTANE_WORKER_CONTEXT_KEYS: ()=>OCTANE_WORKER_CONTEXT_KEYS,
|
|
32
|
+
getOctaneWorkerRouterRewrite: ()=>getOctaneWorkerRouterRewrite,
|
|
33
|
+
registerOctaneWorkerContext: ()=>registerOctaneWorkerContext,
|
|
34
|
+
registerOctaneWorkerRouterRewrite: ()=>registerOctaneWorkerRouterRewrite,
|
|
35
|
+
useOctaneWorkerContextKeys: ()=>useOctaneWorkerContextKeys
|
|
36
|
+
});
|
|
37
|
+
const external_octane_namespaceObject = require("octane");
|
|
38
|
+
const OCTANE_WORKER_CONTEXT_KEYS = Object.freeze({
|
|
39
|
+
router: 'ultramodern.octane.router-context.v1',
|
|
40
|
+
match: 'ultramodern.octane.match-context.v1',
|
|
41
|
+
i18n: 'ultramodern.octane.i18n-context.v1'
|
|
42
|
+
});
|
|
43
|
+
const builtinKeys = Object.values(OCTANE_WORKER_CONTEXT_KEYS);
|
|
44
|
+
const contexts = new Map();
|
|
45
|
+
function registerOctaneWorkerContext(context, codec) {
|
|
46
|
+
const { key, isProvided } = codec;
|
|
47
|
+
if (!builtinKeys.includes(key) || 'function' != typeof isProvided) throw new TypeError('Invalid Octane Worker builtin context codec');
|
|
48
|
+
const unregister = (0, external_octane_namespaceObject.registerExternalSnapshotContext)(context, codec);
|
|
49
|
+
const hasProvider = ()=>isProvided((0, external_octane_namespaceObject.useContext)(context));
|
|
50
|
+
contexts.set(key, hasProvider);
|
|
51
|
+
return ()=>{
|
|
52
|
+
if (contexts.get(key) !== hasProvider) return;
|
|
53
|
+
unregister();
|
|
54
|
+
contexts.delete(key);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function useOctaneWorkerContextKeys(explicit = []) {
|
|
58
|
+
const selected = [];
|
|
59
|
+
for (const key of builtinKeys){
|
|
60
|
+
const hasProvider = contexts.get(key);
|
|
61
|
+
if (hasProvider?.() && !explicit.includes(key)) selected.push(key);
|
|
62
|
+
}
|
|
63
|
+
return [
|
|
64
|
+
...selected,
|
|
65
|
+
...explicit
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
let routerRewrite;
|
|
69
|
+
function registerOctaneWorkerRouterRewrite(codec) {
|
|
70
|
+
if (routerRewrite || 'function' != typeof codec.capture || 'function' != typeof codec.restore) throw new TypeError('Invalid or duplicate Octane Worker router rewrite codec');
|
|
71
|
+
const captured = Object.freeze({
|
|
72
|
+
capture: codec.capture,
|
|
73
|
+
restore: codec.restore
|
|
74
|
+
});
|
|
75
|
+
routerRewrite = captured;
|
|
76
|
+
return ()=>{
|
|
77
|
+
if (routerRewrite === captured) routerRewrite = void 0;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function getOctaneWorkerRouterRewrite() {
|
|
81
|
+
return routerRewrite;
|
|
82
|
+
}
|
|
83
|
+
exports.OCTANE_WORKER_CONTEXT_KEYS = __webpack_exports__.OCTANE_WORKER_CONTEXT_KEYS;
|
|
84
|
+
exports.getOctaneWorkerRouterRewrite = __webpack_exports__.getOctaneWorkerRouterRewrite;
|
|
85
|
+
exports.registerOctaneWorkerContext = __webpack_exports__.registerOctaneWorkerContext;
|
|
86
|
+
exports.registerOctaneWorkerRouterRewrite = __webpack_exports__.registerOctaneWorkerRouterRewrite;
|
|
87
|
+
exports.useOctaneWorkerContextKeys = __webpack_exports__.useOctaneWorkerContextKeys;
|
|
88
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
89
|
+
"OCTANE_WORKER_CONTEXT_KEYS",
|
|
90
|
+
"getOctaneWorkerRouterRewrite",
|
|
91
|
+
"registerOctaneWorkerContext",
|
|
92
|
+
"registerOctaneWorkerRouterRewrite",
|
|
93
|
+
"useOctaneWorkerContextKeys"
|
|
94
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
95
|
+
Object.defineProperty(exports, '__esModule', {
|
|
96
|
+
value: true
|
|
97
|
+
});
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
createNativeWorkerFederationRuntime: ()=>createNativeWorkerFederationRuntime
|
|
32
|
+
});
|
|
33
|
+
const worker_federation_namespaceObject = require("@modern-js/renderer-core/worker-federation");
|
|
34
|
+
const server_namespaceObject = require("octane/server");
|
|
35
|
+
const external_federation_context_js_namespaceObject = require("./federation-context.js");
|
|
36
|
+
const external_worker_federation_context_js_namespaceObject = require("./worker-federation-context.js");
|
|
37
|
+
function isNativeWorkerComponent(value) {
|
|
38
|
+
return 'function' == typeof value;
|
|
39
|
+
}
|
|
40
|
+
function createNativeWorkerFederationRuntime(options, compiler) {
|
|
41
|
+
const { resources } = options;
|
|
42
|
+
const bindings = options.bindings;
|
|
43
|
+
const transport = resources.workerFederationServices?.length ? (0, worker_federation_namespaceObject.createWorkerFederationTransport)({
|
|
44
|
+
admitRendererContract: compiler.admitRendererContract,
|
|
45
|
+
services: resources.workerFederationServices.map((service)=>{
|
|
46
|
+
const binding = bindings && Reflect.get(bindings, service.binding);
|
|
47
|
+
if (!binding || 'object' != typeof binding && 'function' != typeof binding || !('fetch' in binding) || 'function' != typeof binding.fetch) throw new Error(`Native Worker federation requires service binding ${service.binding}.`);
|
|
48
|
+
return {
|
|
49
|
+
...service,
|
|
50
|
+
fetch: binding.fetch.bind(binding)
|
|
51
|
+
};
|
|
52
|
+
})
|
|
53
|
+
}) : void 0;
|
|
54
|
+
let handle;
|
|
55
|
+
if (resources.workerFederation) {
|
|
56
|
+
if (!compiler.registry || !resources.workerFederationManifestUrl) throw new Error('Native Worker federation requires its compiled expose registry and pinned manifest URL.');
|
|
57
|
+
handle = compiler.registry.initialize({
|
|
58
|
+
publication: resources.workerFederation.worker,
|
|
59
|
+
manifestUrl: resources.workerFederationManifestUrl,
|
|
60
|
+
admitRendererContract: compiler.admitRendererContract,
|
|
61
|
+
admitNativeRequest (payload, { admitted, signal }) {
|
|
62
|
+
const initializeContexts = transport ? (provide, request)=>{
|
|
63
|
+
provide(external_federation_context_js_namespaceObject.FederationContext, (0, external_federation_context_js_namespaceObject.createFederationScope)(void 0, true, request.nonce));
|
|
64
|
+
provide(external_worker_federation_context_js_namespaceObject.WorkerFederationContext, {
|
|
65
|
+
transport,
|
|
66
|
+
locale: admitted.locale,
|
|
67
|
+
signal
|
|
68
|
+
});
|
|
69
|
+
} : void 0;
|
|
70
|
+
return (0, server_namespaceObject.prepareExternalSnapshotRequest)(payload, {
|
|
71
|
+
authority: admitted.coordinate.native,
|
|
72
|
+
signal,
|
|
73
|
+
...initializeContexts ? {
|
|
74
|
+
initializeContexts
|
|
75
|
+
} : {}
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
releaseNativeRequest: server_namespaceObject.releasePreparedExternalSnapshotRequest,
|
|
79
|
+
async renderNativeSnapshot (module, request, { admitted }) {
|
|
80
|
+
const component = module && 'object' == typeof module && 'default' in module ? module.default : void 0;
|
|
81
|
+
if (!isNativeWorkerComponent(component)) throw new TypeError(`Native Worker expose ${admitted.expose} requires a default Octane component.`);
|
|
82
|
+
return (0, server_namespaceObject.serializeExternalSnapshot)(await (0, server_namespaceObject.renderExternalSnapshot)(component, request));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
transport,
|
|
88
|
+
handleRequest: handle ?? (()=>Promise.resolve(void 0))
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
exports.createNativeWorkerFederationRuntime = __webpack_exports__.createNativeWorkerFederationRuntime;
|
|
92
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
93
|
+
"createNativeWorkerFederationRuntime"
|
|
94
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
95
|
+
Object.defineProperty(exports, '__esModule', {
|
|
96
|
+
value: true
|
|
97
|
+
});
|