@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.
Files changed (61) hide show
  1. package/dist/cjs/client.js +56 -6
  2. package/dist/cjs/entry-application.js +7 -2
  3. package/dist/cjs/entry-client.js +3 -0
  4. package/dist/cjs/entry-server.js +11 -3
  5. package/dist/cjs/federation.js +108 -6
  6. package/dist/cjs/i18n/LocalizedLink.js +24 -33
  7. package/dist/cjs/i18n/index.js +0 -3
  8. package/dist/cjs/i18n-external-snapshot.js +645 -0
  9. package/dist/cjs/plugin/index.js +1 -1
  10. package/dist/cjs/plugin/profile.js +5 -4
  11. package/dist/cjs/router-external-snapshot.js +263 -0
  12. package/dist/cjs/server.js +15 -2
  13. package/dist/cjs/worker-federation-context.js +63 -0
  14. package/dist/cjs/worker-federation-contexts.js +97 -0
  15. package/dist/cjs/worker-federation.js +97 -0
  16. package/dist/esm/client.mjs +56 -6
  17. package/dist/esm/entry-application.mjs +7 -2
  18. package/dist/esm/entry-client.mjs +3 -0
  19. package/dist/esm/entry-server.mjs +8 -3
  20. package/dist/esm/federation.mjs +110 -8
  21. package/dist/esm/i18n/LocalizedLink.mjs +24 -30
  22. package/dist/esm/i18n/index.mjs +1 -1
  23. package/dist/esm/i18n-external-snapshot.mjs +576 -0
  24. package/dist/esm/router-external-snapshot.mjs +216 -0
  25. package/dist/esm/server.mjs +15 -2
  26. package/dist/esm/worker-federation-context.mjs +19 -0
  27. package/dist/esm/worker-federation-contexts.mjs +47 -0
  28. package/dist/esm/worker-federation.mjs +59 -0
  29. package/dist/esm-node/plugin/index.mjs +1 -1
  30. package/dist/esm-node/plugin/profile.mjs +5 -4
  31. package/dist/types/client.d.ts +5 -1
  32. package/dist/types/entry-client.d.ts +2 -0
  33. package/dist/types/entry-server.d.ts +4 -1
  34. package/dist/types/federation.d.ts +2 -0
  35. package/dist/types/i18n/LocalizedLink.d.ts +5 -32
  36. package/dist/types/i18n/context.d.ts +1 -1
  37. package/dist/types/i18n/index.d.ts +1 -1
  38. package/dist/types/i18n-external-snapshot.d.ts +43 -0
  39. package/dist/types/router-external-snapshot.d.ts +10 -0
  40. package/dist/types/server.d.ts +3 -0
  41. package/dist/types/worker-federation-context.d.ts +34 -0
  42. package/dist/types/worker-federation-contexts.d.ts +25 -0
  43. package/dist/types/worker-federation.d.ts +20 -0
  44. package/package.json +69 -12
  45. package/src/client.ts +99 -16
  46. package/src/entry-application.ts +7 -3
  47. package/src/entry-client.ts +10 -0
  48. package/src/entry-server.ts +17 -6
  49. package/src/federation.ts +159 -15
  50. package/src/i18n/LocalizedLink.ts +46 -72
  51. package/src/i18n/context.ts +1 -1
  52. package/src/i18n/index.ts +1 -5
  53. package/src/i18n-external-snapshot.ts +803 -0
  54. package/src/plugin/compiler-manifest.cjs +27 -1
  55. package/src/plugin/index.ts +1 -1
  56. package/src/plugin/profile.ts +6 -4
  57. package/src/router-external-snapshot.ts +306 -0
  58. package/src/server.ts +29 -4
  59. package/src/worker-federation-context.ts +51 -0
  60. package/src/worker-federation-contexts.ts +91 -0
  61. 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
+ });
@@ -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 nativeStream = await (0, external_octane_server_namespaceObject.renderToReadableStream)(App, input.props, {
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
+ });