@bleedingdev/modern-js-ultramodern-create 3.9.3-ultramodern.1 → 3.9.3-ultramodern.10

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 (74) hide show
  1. package/README.md +46 -5
  2. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +1 -1
  3. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +2 -7
  4. package/dist/cjs/ultramodern-workspace/api/client.cjs +2 -37
  5. package/dist/cjs/ultramodern-workspace/api.cjs +0 -3
  6. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +9 -8
  7. package/dist/cjs/ultramodern-workspace/native-app.cjs +0 -2
  8. package/dist/cjs/ultramodern-workspace/native-federation.cjs +1 -1
  9. package/dist/cjs/ultramodern-workspace/package-json.cjs +10 -5
  10. package/dist/cjs/ultramodern-workspace/patch-inventory.cjs +20 -2
  11. package/dist/cjs/ultramodern-workspace/policy.cjs +6 -1
  12. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +5 -0
  13. package/dist/cjs/ultramodern-workspace/validation/architecture.cjs +25 -11
  14. package/dist/cjs/ultramodern-workspace/validation/native-shell-runtime.cjs +117 -0
  15. package/dist/cjs/ultramodern-workspace/validation/renderer.cjs +3 -3
  16. package/dist/cjs/ultramodern-workspace/validation/workspace.cjs +1 -1
  17. package/dist/cjs/ultramodern-workspace/versions.cjs +52 -21
  18. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +6 -1
  19. package/dist/cjs/ultramodern-workspace/write-app.cjs +1 -3
  20. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +9 -2
  21. package/dist/esm/ultramodern-tooling/config/normalize.js +2 -2
  22. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +3 -8
  23. package/dist/esm/ultramodern-workspace/api/client.js +4 -36
  24. package/dist/esm/ultramodern-workspace/api.js +1 -1
  25. package/dist/esm/ultramodern-workspace/module-federation/config.js +9 -8
  26. package/dist/esm/ultramodern-workspace/native-app.js +0 -2
  27. package/dist/esm/ultramodern-workspace/native-federation.js +1 -1
  28. package/dist/esm/ultramodern-workspace/package-json.js +10 -5
  29. package/dist/esm/ultramodern-workspace/patch-inventory.js +20 -2
  30. package/dist/esm/ultramodern-workspace/policy.js +7 -2
  31. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +5 -0
  32. package/dist/esm/ultramodern-workspace/validation/architecture.js +25 -11
  33. package/dist/esm/ultramodern-workspace/validation/native-shell-runtime.js +76 -0
  34. package/dist/esm/ultramodern-workspace/validation/renderer.js +3 -3
  35. package/dist/esm/ultramodern-workspace/validation/workspace.js +1 -1
  36. package/dist/esm/ultramodern-workspace/versions.js +47 -22
  37. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +6 -1
  38. package/dist/esm/ultramodern-workspace/write-app.js +1 -3
  39. package/dist/esm/ultramodern-workspace/write-workspace.js +9 -2
  40. package/dist/esm-node/ultramodern-tooling/config/normalize.js +2 -2
  41. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +3 -8
  42. package/dist/esm-node/ultramodern-workspace/api/client.js +4 -36
  43. package/dist/esm-node/ultramodern-workspace/api.js +1 -1
  44. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +9 -8
  45. package/dist/esm-node/ultramodern-workspace/native-app.js +0 -2
  46. package/dist/esm-node/ultramodern-workspace/native-federation.js +1 -1
  47. package/dist/esm-node/ultramodern-workspace/package-json.js +10 -5
  48. package/dist/esm-node/ultramodern-workspace/patch-inventory.js +20 -2
  49. package/dist/esm-node/ultramodern-workspace/policy.js +7 -2
  50. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +5 -0
  51. package/dist/esm-node/ultramodern-workspace/validation/architecture.js +25 -11
  52. package/dist/esm-node/ultramodern-workspace/validation/native-shell-runtime.js +77 -0
  53. package/dist/esm-node/ultramodern-workspace/validation/renderer.js +3 -3
  54. package/dist/esm-node/ultramodern-workspace/validation/workspace.js +1 -1
  55. package/dist/esm-node/ultramodern-workspace/versions.js +47 -22
  56. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +6 -1
  57. package/dist/esm-node/ultramodern-workspace/write-app.js +1 -3
  58. package/dist/esm-node/ultramodern-workspace/write-workspace.js +9 -2
  59. package/dist/types/ultramodern-workspace/api/client.d.ts +1 -2
  60. package/dist/types/ultramodern-workspace/api.d.ts +1 -1
  61. package/dist/types/ultramodern-workspace/policy.d.ts +34 -27
  62. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +2 -2
  63. package/dist/types/ultramodern-workspace/validation/native-shell-runtime.d.ts +22 -0
  64. package/dist/types/ultramodern-workspace/versions.d.ts +49 -45
  65. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +1 -1
  66. package/package.json +35 -34
  67. package/release-cohort.json +52 -64
  68. package/template-workspace/README.md.handlebars +14 -5
  69. package/templates/workspace/apps/modern.config.ts.handlebars +1 -2
  70. package/templates/workspace-scripts/materialize-zerops-runtime.mjs +332 -82
  71. package/templates/workspace-scripts/proof-workerd-ssr.mjs +398 -43
  72. package/templates/workspace-scripts/ultramodern-compiler-prepare.mjs +89 -0
  73. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +5 -2
  74. package/templates/workspace-scripts/ultramodern-typecheck.mjs +9 -65
package/README.md CHANGED
@@ -96,7 +96,7 @@ workspaces declare an engine baseline of Node `>=26` with pnpm `12+`.
96
96
  `packageManager`, `.mise.toml`, generated validation, and CI should all agree
97
97
  on those values; do not reintroduce Corepack or older pnpm aliases.
98
98
 
99
- The current React dependency cohort also pins `@effect/tsgo@0.45.0`,
99
+ The current React dependency cohort also pins `@effect/tsgo@0.59.0`,
100
100
  `@tanstack/react-router@1.170.41`, `@tanstack/router-core@1.171.34`,
101
101
  `@tanstack/history@1.162.4`, and the Module Federation integration `2.9.2`
102
102
  cohort, `@module-federation/node@2.7.52`. Move these only through the
@@ -120,15 +120,32 @@ pnpm --filter @modern-js/ultramodern-create build
120
120
  ```
121
121
 
122
122
  That command lets Rslib emit runtime modules and declarations together through
123
- the installed stable TypeScript 7 backend. The same declaration configuration
123
+ the repository's compiler integration. The same declaration configuration
124
124
  stays active during `rslib build --watch`. Run
125
125
  `pnpm --filter @modern-js/ultramodern-create test` when changing generator behavior; it
126
126
  includes a boundary test that scans generator sources, templates, and generated
127
127
  workspace output for compiler API imports.
128
128
 
129
- All renderer profiles use exact stable `typescript@7.0.2`. React and Solid apps
130
- use the generated TS-Go check; Octane apps use `octane-tsc` with their native
131
- TS7 checker. Modern/Rspack and `@effect/tsgo` also use TS-Go by default.
129
+ Generated workspaces and apps pin `tsrs@0.20.0-ts7.1.0-beta` and
130
+ `@effect/tsgo@0.59.0`. Root postinstall runs
131
+ `ultramodern-create ultramodern compiler-prepare` before skills install.
132
+ The installed tsrs platform metadata selects the official
133
+ `effect-tsgo tsrs --version` readiness check on supported hosts.
134
+ Hosts without a declared native tsrs package use `effect-tsgo tsc --version`
135
+ and print an explicit Effect-Go notice. Missing supported artifacts remain
136
+ fatal. These official proxy commands run the provider's Effect-enabled
137
+ binaries without changing the package store.
138
+ The shared compiler resolver selects the provider's tsrs for generated React and
139
+ Solid checks and Modern/Rspack builds, or Effect-Go on unsupported tsrs hosts.
140
+ The installed typecheck command sets
141
+ `TSRS_CHECKER_ASSIGNMENT` to the caller's explicit value or `go` by default,
142
+ and does not add `--checkers` or `--builders` in build mode. Octane apps retain
143
+ `octane-tsc` for their native TS7 checker.
144
+ All renderer profiles retain exact stable `typescript@7.0.2` for metadata and
145
+ tool dependencies. This is separate from tsrs's embedded TypeScript
146
+ `7.1.0-beta`. Only these exact compiler releases and their declared native
147
+ platform packages receive a release-age exception; the strict 24-hour gate
148
+ still applies to other packages apart from the authenticated release cohort.
132
149
  Generated app/package source must not
133
150
  depend on compiler API internals. If a future AST utility is needed, keep it
134
151
  behind a dedicated TypeScript adapter and test it against stable `typescript`.
@@ -365,6 +382,30 @@ Cloudflare Worker output. The shell consumes vertical UI through Module
365
382
  Federation manifests and vertical APIs through generated Effect clients
366
383
  exported by the vertical packages.
367
384
 
385
+ Shell routes load federated modules through `createLazyComponent` or the
386
+ generated loaders. A route that drives the runtime itself calls
387
+ `loadRemote()` or `loadShare()` on the instance from `getInstance()`
388
+ (`@module-federation/modern-js-v3/runtime`), and only inside the true branch
389
+ of `import.meta.env.MODERN_TARGET === 'browser'`:
390
+
391
+ ```tsx
392
+ import { getInstance } from '@module-federation/modern-js-v3/runtime';
393
+
394
+ export const loadWidget = () => {
395
+ if (import.meta.env.MODERN_TARGET === 'browser') {
396
+ const host = getInstance();
397
+ if (host !== null) return host.loadRemote('inventory/Widget');
398
+ }
399
+ return undefined;
400
+ };
401
+ ```
402
+
403
+ The React composition defines `import.meta.env.MODERN_TARGET` per bundle as
404
+ `'browser'` or `'node'`, the same value as `process.env.MODERN_TARGET`, so the
405
+ server bundle drops the branch. Shell routes must not read `process.env`:
406
+ `pnpm typecheck` rejects it through Effect's `processEnv` rule and
407
+ `pnpm contract:check` rejects it too.
408
+
368
409
  Route metadata is route-owned and colocated in
369
410
  `src/routes/**/route.meta.ts`; each file exports `routeMeta`.
370
411
  `ultramodern-create ultramodern routes-generate` (run before every app `dev`
@@ -165,7 +165,7 @@ function normalizeWorkspaceInputs(workspaceRoot, inputs) {
165
165
  rendererProfile: app.rendererProfile,
166
166
  routerBindings: app.routerBindings,
167
167
  rendererCapabilities: app.rendererCapabilities,
168
- ...'api-only' === app.surfaceProfile || void 0 !== app.renderer && !(0, renderer_profile_cjs_namespaceObject.appSupportsFederation)(app) ? {} : {
168
+ ...'api-only' === app.surfaceProfile || void 0 !== app.renderer && ('none' === app.renderer || !(0, renderer_profile_cjs_namespaceObject.getRendererGenerationProfile)(app.renderer).capabilities.federation) ? {} : {
169
169
  moduleFederation: {
170
170
  role: 'shell' === app.kind ? 'host' : 'remote',
171
171
  name: app.mfName,
@@ -45,7 +45,6 @@ const external_node_fs_namespaceObject = require("node:fs");
45
45
  var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
46
46
  const external_node_path_namespaceObject = require("node:path");
47
47
  var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
48
- const external_api_cjs_namespaceObject = require("../api.cjs");
49
48
  const external_app_files_cjs_namespaceObject = require("../app-files.cjs");
50
49
  const external_demo_components_cjs_namespaceObject = require("../demo-components.cjs");
51
50
  const external_descriptors_cjs_namespaceObject = require("../descriptors.cjs");
@@ -85,10 +84,7 @@ function shellAppArtifacts(scope, packageSource, enableTailwind, remotes, bridge
85
84
  ...Object.fromEntries((0, external_native_federation_cjs_namespaceObject.createNativeFederationArtifacts)(scope, shellHost, remotes).map((artifact)=>[
86
85
  `${shellHost.directory}/${artifact.path}`,
87
86
  artifact.content
88
- ])),
89
- ...remotes.some(external_descriptors_cjs_namespaceObject.appHasApi) ? {
90
- [`${shellHost.directory}/src/api/vertical-clients.ts`]: (0, external_api_cjs_namespaceObject.createShellApiClient)(scope, remotes)
91
- } : {}
87
+ ]))
92
88
  };
93
89
  return {
94
90
  shellHost,
@@ -128,8 +124,7 @@ function shellAppArtifacts(scope, packageSource, enableTailwind, remotes, bridge
128
124
  [`${shellHost.directory}/src/routes/[lang]/page.tsx`]: (0, external_demo_components_cjs_namespaceObject.createShellPage)(shellHost, uiRemotes),
129
125
  [`${shellHost.directory}/src/routes/vertical-components.tsx`]: (0, external_demo_components_cjs_namespaceObject.createShellRemoteComponents)(shellHost, uiRemotes),
130
126
  [`${shellHost.directory}/src/routes/vertical-components.worker.tsx`]: (0, external_demo_components_cjs_namespaceObject.createShellWorkerRemoteComponents)(shellHost, uiRemotes),
131
- [`${shellHost.directory}/src/routes/shell-frame.tsx`]: (0, external_app_files_cjs_namespaceObject.createShellFrameComponent)(shellHost),
132
- [`${shellHost.directory}/src/api/vertical-clients.ts`]: (0, external_api_cjs_namespaceObject.createShellApiClient)(scope, remotes)
127
+ [`${shellHost.directory}/src/routes/shell-frame.tsx`]: (0, external_app_files_cjs_namespaceObject.createShellFrameComponent)(shellHost)
133
128
  };
134
129
  return {
135
130
  shellHost,
@@ -28,8 +28,7 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
- createApiClient: ()=>createApiClient,
32
- createShellApiClient: ()=>createShellApiClient
31
+ createApiClient: ()=>createApiClient
33
32
  });
34
33
  const external_descriptors_cjs_namespaceObject = require("../descriptors.cjs");
35
34
  const external_naming_cjs_namespaceObject = require("../naming.cjs");
@@ -181,43 +180,9 @@ export const ${createName} = (
181
180
  );${checkoutCartClientExports}
182
181
  `;
183
182
  }
184
- function createShellApiClient(scope, remotes = []) {
185
- const exports1 = (0, external_descriptors_cjs_namespaceObject.verticalApiApps)(remotes).map((remote)=>{
186
- const stem = (0, external_descriptors_cjs_namespaceObject.resolveApiStem)(remote);
187
- const pascalStem = (0, external_naming_cjs_namespaceObject.toPascalCase)(stem);
188
- const rpc = 'rpc' === (0, external_descriptors_cjs_namespaceObject.resolveApiProtocol)(remote);
189
- const pascalSingular = (0, external_naming_cjs_namespaceObject.toPascalCase)((0, external_names_cjs_namespaceObject.verticalApiErrorStem)(remote));
190
- const checkoutCartExports = !rpc && (0, external_checkout_cart_cjs_namespaceObject.serviceHasCheckoutCartState)(remote) ? ` addCheckoutCartItem,
191
- clearCheckoutCart,
192
- getCheckoutCart,
193
- removeCheckoutCartItem,
194
- type CheckoutAddCartItemInput,
195
- type CheckoutCart,
196
- type CheckoutCartLine,
197
- ` : '';
198
- if (rpc) return `export {
199
- get${pascalStem}Rpc,
200
- list${pascalStem}Rpc,
201
- make${pascalStem}RpcClient,
202
- type ${pascalStem}RpcClientOptions,
203
- } from '${(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)}/api/rpc-client';`;
204
- return `export {
205
- ${checkoutCartExports} create${pascalSingular},
206
- create${pascalStem}Client,
207
- get${pascalSingular},
208
- get${pascalStem}Readiness,
209
- list${pascalStem},
210
- type ${pascalStem}ClientOptions,
211
- } from '${(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)}/api/client';`;
212
- }).join('\n\n');
213
- return exports1 ? `${exports1}\n` : `export const ultramodernVerticalClients = [] as const;
214
- `;
215
- }
216
183
  exports.createApiClient = __webpack_exports__.createApiClient;
217
- exports.createShellApiClient = __webpack_exports__.createShellApiClient;
218
184
  for(var __rspack_i in __webpack_exports__)if (-1 === [
219
- "createApiClient",
220
- "createShellApiClient"
185
+ "createApiClient"
221
186
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
222
187
  Object.defineProperty(exports, '__esModule', {
223
188
  value: true
@@ -36,7 +36,6 @@ __webpack_require__.d(__webpack_exports__, {
36
36
  createRpcClientFile: ()=>rpc_cjs_namespaceObject.createRpcClientFile,
37
37
  createRpcContractFile: ()=>rpc_cjs_namespaceObject.createRpcContractFile,
38
38
  createSharedApi: ()=>shared_cjs_namespaceObject.createSharedApi,
39
- createShellApiClient: ()=>client_cjs_namespaceObject.createShellApiClient,
40
39
  rpcPath: ()=>rpc_cjs_namespaceObject.rpcPath,
41
40
  verticalApiCreatePayloadSchemaExport: ()=>names_cjs_namespaceObject.verticalApiCreatePayloadSchemaExport,
42
41
  verticalApiErrorStem: ()=>names_cjs_namespaceObject.verticalApiErrorStem,
@@ -65,7 +64,6 @@ exports.createRpcApiServiceEntry = __webpack_exports__.createRpcApiServiceEntry;
65
64
  exports.createRpcClientFile = __webpack_exports__.createRpcClientFile;
66
65
  exports.createRpcContractFile = __webpack_exports__.createRpcContractFile;
67
66
  exports.createSharedApi = __webpack_exports__.createSharedApi;
68
- exports.createShellApiClient = __webpack_exports__.createShellApiClient;
69
67
  exports.rpcPath = __webpack_exports__.rpcPath;
70
68
  exports.verticalApiCreatePayloadSchemaExport = __webpack_exports__.verticalApiCreatePayloadSchemaExport;
71
69
  exports.verticalApiErrorStem = __webpack_exports__.verticalApiErrorStem;
@@ -88,7 +86,6 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
88
86
  "createRpcClientFile",
89
87
  "createRpcContractFile",
90
88
  "createSharedApi",
91
- "createShellApiClient",
92
89
  "rpcPath",
93
90
  "verticalApiCreatePayloadSchemaExport",
94
91
  "verticalApiErrorStem",
@@ -44,12 +44,12 @@ function createAppModernConfig(app, enableTailwind = true) {
44
44
  const renderer = (0, external_renderer_profile_cjs_namespaceObject.resolveWorkspaceRenderer)(app);
45
45
  if ((0, external_renderer_generations_cjs_namespaceObject.hasNativeAppGeneration)(renderer)) {
46
46
  const generation = (0, external_renderer_profile_cjs_namespaceObject.resolveAppGenerationProfile)(app);
47
- const exposes = Object.keys(app.exposes ?? {}).length > 0;
48
- return `import { defineConfig } from '@modern-js/ultramodern-app-tools';
49
- ${exposes ? "import { createRemoteManifestUrl } from '@modern-js/app-tools-extensions/config';\n" : ''}
47
+ const authoredAssetPrefix = !generation.capabilities.workers && Object.keys(app.exposes ?? {}).length > 0;
48
+ return `import { defineConfig${generation.capabilities.workers ? ', presetUltramodernWorkspace' : ''} } from '@modern-js/ultramodern-app-tools';
49
+ ${authoredAssetPrefix ? "import { createRemoteManifestUrl } from '@modern-js/app-tools-extensions/config';\n" : ''}
50
50
  ${(0, external_descriptors_cjs_namespaceObject.appHasApi)(app) ? "import { bffPlugin } from '@modern-js/plugin-bff-build-extensions';\n" : ''}
51
51
  ${enableTailwind ? "import { pluginTailwindcss } from '@rsbuild/plugin-tailwindcss';\n" : ''}
52
- ${exposes ? `// Set ${(0, external_descriptors_cjs_namespaceObject.createCloudflarePublicUrlEnv)(app)} to this remote's public origin when deploying.
52
+ ${authoredAssetPrefix ? `// Set ${(0, external_descriptors_cjs_namespaceObject.createCloudflarePublicUrlEnv)(app)} to this remote's public origin when deploying.
53
53
  const remoteAddress = createRemoteManifestUrl({
54
54
  manifestEnv: ${JSON.stringify((0, external_descriptors_cjs_namespaceObject.createRemoteManifestEnv)(app))},
55
55
  publicUrlEnv: ${JSON.stringify((0, external_descriptors_cjs_namespaceObject.createCloudflarePublicUrlEnv)(app))},
@@ -59,10 +59,10 @@ const remoteAddress = createRemoteManifestUrl({
59
59
  const assetPrefix = new URL('.', remoteAddress.replace(/^[^@]+@(?=https?:\\/\\/)/u, '')).href;
60
60
 
61
61
  ` : ''}
62
- export default defineConfig({
62
+ export default defineConfig(${generation.capabilities.workers ? 'presetUltramodernWorkspace(' : ''}{
63
63
  ${enableTailwind ? ' builderPlugins: [pluginTailwindcss()],\n' : ''} renderer: ${JSON.stringify(renderer)},
64
64
  ${(0, external_descriptors_cjs_namespaceObject.appHasApi)(app) ? ' plugins: [bffPlugin()],\n' : ''}
65
- ${exposes ? ' output: { assetPrefix },\n' : ''}
65
+ ${authoredAssetPrefix ? ' output: { assetPrefix },\n' : ''}
66
66
  server: { port: ${app.port}, ssr: ${generation.capabilities.ssr}${(0, external_descriptors_cjs_namespaceObject.appHasApi)(app) ? `,
67
67
  bff: {
68
68
  effect: {
@@ -73,7 +73,7 @@ ${'rest' === (0, external_descriptors_cjs_namespaceObject.resolveApiProtocol)(ap
73
73
  runtimeFramework: 'effect',
74
74
  }` : ''} },
75
75
  source: { mainEntryName: 'main' },
76
- });
76
+ }${generation.capabilities.workers ? `, { appId: ${JSON.stringify(app.id)}, from: import.meta.url })` : ''});
77
77
  `;
78
78
  }
79
79
  const emitsUi = (0, external_descriptors_cjs_namespaceObject.appEmitsBrowserUi)(app);
@@ -104,7 +104,8 @@ ${'rest' === (0, external_descriptors_cjs_namespaceObject.resolveApiProtocol)(ap
104
104
  localisedUrls: ' localisedUrls: ultramodernLocalisedUrls as Record<string, Record<string, string>>,\n'
105
105
  }) : '',
106
106
  bffPlugin: (0, external_descriptors_cjs_namespaceObject.appHasApi)(app) ? ' bffPlugin(),\n' : '',
107
- federationPlugin: emitsUi ? ' moduleFederationPlugin(),\n' : ''
107
+ federationPlugin: emitsUi ? ' moduleFederationPlugin(),\n' : '',
108
+ renderer: emitsUi ? ` renderer: '${renderer}',\n` : ''
108
109
  });
109
110
  }
110
111
  function createModuleFederationBridgeConfig(enableBridgeRouter) {
@@ -30,7 +30,6 @@ __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
31
  writeNativeApp: ()=>writeNativeApp
32
32
  });
33
- const external_api_cjs_namespaceObject = require("./api.cjs");
34
33
  const write_app_api_cjs_namespaceObject = require("./api/write-app-api.cjs");
35
34
  const external_app_files_cjs_namespaceObject = require("./app-files.cjs");
36
35
  const external_descriptors_cjs_namespaceObject = require("./descriptors.cjs");
@@ -93,7 +92,6 @@ function writeNativeApp(targetDir, scope, app, packageSource, enableTailwind, re
93
92
  resolvedApp: app,
94
93
  emitsUi: true
95
94
  });
96
- if ('shell' === app.kind && remotes.some(external_descriptors_cjs_namespaceObject.appHasApi)) write('src/api/vertical-clients.ts', (0, external_api_cjs_namespaceObject.createShellApiClient)(scope, remotes));
97
95
  }
98
96
  exports.writeNativeApp = __webpack_exports__.writeNativeApp;
99
97
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -71,7 +71,7 @@ function createNativeFederationArtifacts(scope, app, remotes = []) {
71
71
  const relativePath = source.slice(2);
72
72
  if (exposedSources.has(relativePath)) continue;
73
73
  exposedSources.add(relativePath);
74
- const counterPath = external_node_path_default().posix.relative(external_node_path_default().posix.dirname(relativePath), 'src/components/Counter').replace(/^(?!\.)/u, './');
74
+ const counterPath = external_node_path_default().posix.relative(external_node_path_default().posix.dirname(relativePath), 'octane' === generation.renderer ? 'src/components/counter' : 'src/components/Counter').replace(/^(?!\.)/u, './');
75
75
  artifacts.push({
76
76
  path: relativePath,
77
77
  content: `import { Link } from ${JSON.stringify(adapter.runtime.router)};
@@ -102,7 +102,7 @@ function appDevDependencies(packageSource, enableTailwind, app) {
102
102
  const { '@rsbuild/plugin-tailwindcss': tailwindPluginVersion, tailwindcss: tailwindVersion, ...always } = external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.appDevDependencies;
103
103
  const renderer = (0, external_renderer_profile_cjs_namespaceObject.resolveWorkspaceRenderer)(app);
104
104
  const generationProfile = (0, external_renderer_profile_cjs_namespaceObject.resolveAppGenerationProfile)(app);
105
- const selectedAlways = 'react' === renderer ? always : Object.fromEntries(Object.entries(always).filter(([name])=>'@types/react' !== name && '@types/react-dom' !== name && 'zephyr-rspack-plugin' !== name && 'wrangler' !== name));
105
+ const selectedAlways = 'react' === renderer ? always : Object.fromEntries(Object.entries(always).filter(([name])=>'@types/react' !== name && '@types/react-dom' !== name && 'zephyr-rspack-plugin' !== name && ('wrangler' !== name || generationProfile?.capabilities.workers === true)));
106
106
  return {
107
107
  ...(0, external_descriptors_cjs_namespaceObject.appHasApi)(app) || 'shell' === app.kind && 'react' === renderer ? {
108
108
  '@modern-js/plugin-bff-build-extensions': frameworkRequest(packageSource)
@@ -128,8 +128,10 @@ function createRootPackageJson(scope, packageSource, remotes = [], bridge, addit
128
128
  ...additionalShells,
129
129
  ...remotes
130
130
  ];
131
+ const workerApps = apps.filter((app)=>(0, external_renderer_profile_cjs_namespaceObject.resolveAppGenerationProfile)(app)?.capabilities.workers);
132
+ const workerFilters = workerApps.map((app)=>`--filter ${(0, external_naming_cjs_namespaceObject.packageName)(scope, app.packageSuffix)}`).join(' ');
131
133
  if (bridge) throw new Error(`Renderer ${renderer} does not support React bridge configuration.`);
132
- const rootDevDependencies = Object.fromEntries(Object.entries(external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.rootDevDependencies).filter(([name])=>'wrangler' !== name && 'zephyr-agent' !== name && 'miniflare' !== name));
134
+ const rootDevDependencies = Object.fromEntries(Object.entries(external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.rootDevDependencies).filter(([name])=>('wrangler' !== name || workerApps.length > 0) && 'zephyr-agent' !== name && 'miniflare' !== name));
133
135
  return {
134
136
  private: true,
135
137
  name: scope,
@@ -144,6 +146,11 @@ function createRootPackageJson(scope, packageSource, remotes = [], bridge, addit
144
146
  dev: `pnpm --parallel ${apps.map((app)=>`--filter ${(0, external_naming_cjs_namespaceObject.packageName)(scope, app.packageSuffix)}`).join(' ')} dev`,
145
147
  'dev:shell': `pnpm --filter ${(0, external_naming_cjs_namespaceObject.packageName)(scope, primaryShell.packageSuffix)} dev`,
146
148
  build: 'pnpm -r --filter "./apps/*" --filter "./verticals/*" run build',
149
+ ...workerApps.length > 0 ? {
150
+ 'cloudflare:build': `pnpm -r ${workerFilters} run cloudflare:build`,
151
+ 'cloudflare:deploy': `pnpm -r ${workerFilters} run cloudflare:deploy`,
152
+ 'cloudflare:preview': `pnpm --parallel ${workerFilters} run cloudflare:preview`
153
+ } : {},
147
154
  typecheck: 'pnpm -r --filter "./packages/*" run typecheck && pnpm -r --filter "./apps/*" --filter "./verticals/*" run typecheck',
148
155
  'contract:check': 'ultramodern-create ultramodern validate',
149
156
  check: 'pnpm format:check && pnpm lint && pnpm typecheck && pnpm contract:check',
@@ -312,9 +319,7 @@ function createAppPackage(scope, app, packageSource, enableTailwind, remotes = [
312
319
  './api': './shared/api.ts',
313
320
  './api/client': `./${clientDirectory}/${app.api.stem}-client.ts`
314
321
  });
315
- } else if ('shell' === app.kind && ('react' === (0, external_renderer_profile_cjs_namespaceObject.resolveWorkspaceRenderer)(app) || (0, external_descriptors_cjs_namespaceObject.verticalApiApps)(remotes).length > 0)) Object.assign(packageExports, {
316
- './api/clients': './src/api/vertical-clients.ts'
317
- });
322
+ }
318
323
  if (Object.keys(packageExports).length > 0) packageJson.exports = packageExports;
319
324
  return packageJson;
320
325
  }
@@ -28,10 +28,28 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  const __rspack_default_export = [
31
+ {
32
+ packageName: '@tanstack/router-core',
33
+ version: '1.171.34',
34
+ path: 'patches/@tanstack__router-core@1.171.34.patch',
35
+ sha256: '0e526bc0a1fd038c459fbf45b2b62da81f7f2516176b585f41fed7098ac4abbb',
36
+ repository: true,
37
+ workspace: null,
38
+ reason: 'Let native localized masks inherit the canonical resolved search without rerunning middleware or validation, including public types and emitted CJS/ESM source maps. Applies only to the accepted Octane router-core 1.171.34 closure during local qualification. Generated workspaces remain patch-free; retire when their mature accepted router sidecar or upstream release supplies the same runtime and declaration contract.'
39
+ },
40
+ {
41
+ packageName: '@tanstack/router-core',
42
+ version: '1.171.37',
43
+ path: 'patches/@tanstack__router-core@1.171.37.patch',
44
+ sha256: '6ffa70914ed338f3cb56d3cd1f526e35286e09f287ecf48ee6dbc1aa18305458',
45
+ repository: true,
46
+ workspace: null,
47
+ reason: 'Let native localized masks inherit the canonical resolved search without rerunning middleware or validation, preserving current location caching and SSR rewrite behavior, public types and emitted CJS/ESM source maps. Applies only to Modern router-core 1.171.37 during local qualification. Generated workspaces remain patch-free; retire when their mature accepted router sidecar or upstream release supplies the same runtime and declaration contract.'
48
+ },
31
49
  {
32
50
  packageName: 'ultracite',
33
- version: '7.12.2',
34
- path: 'patches/ultracite@7.12.2.patch',
51
+ version: '8.0.1',
52
+ path: 'patches/ultracite@8.0.1.patch',
35
53
  sha256: 'a18b2c7be68a6823a793f0def8ce13d7655c67c56c2200978a2be600cb29ba74',
36
54
  repository: false,
37
55
  workspace: null,
@@ -264,9 +264,14 @@ const ULTRAMODERN_WORKSPACE_POLICY = {
264
264
  pnpm: {
265
265
  overrides: {
266
266
  'braces@>=3.0.0 <3.0.4': `npm:@bleedingdev/braces@${external_versions_cjs_namespaceObject.BRACES_FORK_VERSION}`,
267
- 'sharp@>=0.35.0 <0.35.5': external_versions_cjs_namespaceObject.SHARP_VERSION
267
+ 'sharp@>=0.35.0 <0.35.5': external_versions_cjs_namespaceObject.SHARP_VERSION,
268
+ 'undici@>=7.0.0 <7.30.1': '7.30.1',
269
+ 'undici@>=8.0.0 <8.12.2': '8.12.2',
270
+ 'body-parser@>=2.0.0 <2.4.0': '2.4.0',
271
+ 'dompurify@>=3.0.0 <3.4.17': '3.4.17'
268
272
  },
269
273
  minimumReleaseAge: 1440,
274
+ minimumReleaseAgeExclude: external_versions_cjs_namespaceObject.COMPILER_RELEASE_AGE_EXCEPTIONS,
270
275
  minimumReleaseAgeStrict: true,
271
276
  minimumReleaseAgeIgnoreMissingTime: false,
272
277
  trustPolicy: 'no-downgrade',
@@ -41,6 +41,11 @@ const generatedToolingCommands = [
41
41
  templatePath: "templates/workspace-scripts/ultramodern-typecheck.mjs",
42
42
  cwd: 'invocation'
43
43
  }),
44
+ defineToolingCommand({
45
+ id: 'compilerPrepare',
46
+ command: 'compiler-prepare',
47
+ templatePath: "templates/workspace-scripts/ultramodern-compiler-prepare.mjs"
48
+ }),
44
49
  defineToolingCommand({
45
50
  id: 'mfTypes',
46
51
  command: 'mf-types',
@@ -47,6 +47,7 @@ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_no
47
47
  const external_renderer_generations_cjs_namespaceObject = require("../renderer-generations.cjs");
48
48
  const external_renderer_profile_cjs_namespaceObject = require("../renderer-profile.cjs");
49
49
  const external_assertions_cjs_namespaceObject = require("./assertions.cjs");
50
+ const external_native_shell_runtime_cjs_namespaceObject = require("./native-shell-runtime.cjs");
50
51
  const external_renderer_cjs_namespaceObject = require("./renderer.cjs");
51
52
  function assertCompilerArchitecture(root, workspaceValidationContract) {
52
53
  const fullStackVerticals = workspaceValidationContract.apps.filter((app)=>'shell' !== app.kind);
@@ -105,12 +106,16 @@ function assertCompilerArchitecture(root, workspaceValidationContract) {
105
106
  ]
106
107
  });
107
108
  };
108
- const parseCompilerInput = (absolutePath)=>{
109
+ const compilerInput = (absolutePath)=>{
109
110
  const project = compilerSnapshot?.getDefaultProjectForFile(absolutePath);
110
111
  const sourceFile = project?.program.getSourceFile(absolutePath);
111
- (0, external_assertions_cjs_namespaceObject.assert)(void 0 !== sourceFile, `Native TypeScript compiler could not parse ${external_node_path_default().relative(root, absolutePath)}`);
112
- return sourceFile;
112
+ (0, external_assertions_cjs_namespaceObject.assert)(void 0 !== project && void 0 !== sourceFile, `Native TypeScript compiler could not parse ${external_node_path_default().relative(root, absolutePath)}`);
113
+ return {
114
+ checker: project.checker,
115
+ sourceFile
116
+ };
113
117
  };
118
+ const parseCompilerInput = (absolutePath)=>compilerInput(absolutePath).sourceFile;
114
119
  const nodeName = (node)=>{
115
120
  if (!node) return;
116
121
  if (typescript.isIdentifier(node) || typescript.isPrivateIdentifier(node) || typescript.isStringLiteralLikeNode(node) || typescript.isNumericLiteral(node)) return node.text;
@@ -198,6 +203,12 @@ function assertCompilerArchitecture(root, workspaceValidationContract) {
198
203
  const accessPath = propertyAccessPath(node.expression);
199
204
  return void 0 !== accessPath && names.has(accessPath.at(-1));
200
205
  };
206
+ const calleeName = (node)=>{
207
+ let callee = node.expression;
208
+ while(typescript.isParenthesizedExpression(callee) || typescript.isNonNullExpression(callee) || typescript.isAsExpression(callee))callee = callee.expression;
209
+ if (typescript.isIdentifier(callee)) return callee.text;
210
+ if (typescript.isPropertyAccessExpression(callee)) return callee.name.text;
211
+ };
201
212
  const objectLiteralProperty = (objectLiteral, name)=>objectLiteral.properties.find((property)=>typescript.isPropertyAssignment(property) && nodeName(property.name) === name);
202
213
  const moduleFederationConfigArgument = (sourceFile)=>{
203
214
  let argument;
@@ -345,11 +356,12 @@ function assertCompilerArchitecture(root, workspaceValidationContract) {
345
356
  ...configFiles.map((relativePath)=>external_node_path_default().join(root, relativePath)).filter((absolutePath)=>external_node_fs_default().existsSync(absolutePath))
346
357
  ]);
347
358
  for (const absolutePath of checkedFiles){
348
- const sourceFile = parseCompilerInput(absolutePath);
359
+ const { checker, sourceFile } = compilerInput(absolutePath);
349
360
  const isShellRoute = shellRouteDirectories.some((relativeDirectory)=>{
350
361
  const absoluteDirectory = external_node_path_default().join(root, relativeDirectory);
351
362
  return absolutePath.startsWith(absoluteDirectory + external_node_path_default().sep);
352
363
  });
364
+ const shellRuntime = isShellRoute ? (0, external_native_shell_runtime_cjs_namespaceObject.createNativeShellRuntimeEvidence)(typescript, typescriptApi, checker, sourceFile) : void 0;
353
365
  const moduleFederationAppPath = moduleFederationConfigAppPaths.get(absolutePath);
354
366
  const nativeFederation = void 0 === moduleFederationAppPath ? void 0 : nativeModuleFederationApps.get(moduleFederationAppPath);
355
367
  const tailwindFactories = new Set();
@@ -372,6 +384,12 @@ function assertCompilerArchitecture(root, workspaceValidationContract) {
372
384
  ].includes(imported)) presetFactories.add(binding.name.text);
373
385
  }
374
386
  }
387
+ const manualLoadingCallees = new Set([
388
+ 'hydrateRoot',
389
+ 'loadRemote',
390
+ 'loadShare',
391
+ ...nativeRemoteLoaders
392
+ ]);
375
393
  const modernConfigApp = workspaceValidationContract.apps.find((app)=>absolutePath === external_node_path_default().join(root, app.path, 'modern.config.ts'));
376
394
  let insideDefaultExport = false;
377
395
  const visit = (node)=>{
@@ -399,7 +417,8 @@ function assertCompilerArchitecture(root, workspaceValidationContract) {
399
417
  if ((0, external_assertions_cjs_namespaceObject.sameJson)(accessPath, [
400
418
  'process',
401
419
  'env'
402
- ])) compilerFailure(sourceFile, node, 'framework config API direct-process-env-access', 'Generated config must use the framework config environment API instead of process.env.', 'use getBuildConfigEnvironment');
420
+ ])) compilerFailure(sourceFile, node, 'framework config API direct-process-env-access', isShellRoute ? 'Shell routes must not read process.env.' : 'Generated config must use the framework config environment API instead of process.env.', isShellRoute ? 'branch on import.meta.env.MODERN_TARGET for the build target' : 'use getBuildConfigEnvironment');
421
+ if (!isShellRoute && (0, external_native_shell_runtime_cjs_namespaceObject.isBuildTargetAccess)(typescript, node)) compilerFailure(sourceFile, node, 'framework config API build-target-outside-bundle', 'Config runs in Node, where the framework defines no import.meta.env.MODERN_TARGET.', 'use getBuildConfigEnvironment');
403
422
  if (typescript.isIdentifier(node) && 'ULTRAMODERN_ZEPHYR' === node.text) compilerFailure(sourceFile, node, 'zephyr gating ultramodern-zephyr-environment-gate', 'Generated Zephyr integration must not be gated through ULTRAMODERN_ZEPHYR.', 'use Zephyr native deploy-token behavior');
404
423
  if (typescript.isPropertyAssignment(node) || typescript.isShorthandPropertyAssignment(node)) {
405
424
  const property = nodeName(node.name);
@@ -407,12 +426,7 @@ function assertCompilerArchitecture(root, workspaceValidationContract) {
407
426
  }
408
427
  if (isShellRoute) {
409
428
  if (typescript.isJsxOpeningElement(node) && 'a' === jsxTagName(node.tagName) && void 0 !== jsxAttribute(node.attributes, 'onClick')) compilerFailure(sourceFile, node, 'shell routing synthetic-anchor-click-interception', 'Shell routing must not intercept anchor clicks synthetically.', 'use the router Link primitive');
410
- if (isCallNamed(node, new Set([
411
- 'hydrateRoot',
412
- 'loadRemote',
413
- 'loadShare',
414
- ...nativeRemoteLoaders
415
- ])) && !nativeLoaderCalls.has(node)) compilerFailure(sourceFile, node, 'module federation native loading', 'Shell routing must use framework Module Federation loading primitives.', 'remove manual hydration or remote-loading wrappers');
429
+ if (typescript.isCallExpression(node) && manualLoadingCallees.has(calleeName(node) ?? '') && !nativeLoaderCalls.has(node) && !shellRuntime?.isBrowserFederationMemberLoad(node)) compilerFailure(sourceFile, node, 'module federation native loading', 'Shell routing must use framework Module Federation loading primitives.', 'remove manual hydration or remote-loading wrappers');
416
430
  if (typescript.isBinaryExpression(node) && node.operatorToken.kind === typescript.SyntaxKind.EqualsToken && propertyAccessPath(node.left)?.slice(0, 2).join('.') === 'window.location' || typescript.isCallExpression(node) && propertyAccessPath(node.expression)?.slice(0, 2).join('.') === 'window.location') compilerFailure(sourceFile, node, 'shell routing window-location-navigation', 'Shell routing must use router navigation instead of window.location.', 'use the router navigation primitive');
417
431
  }
418
432
  node.forEachChild(visit);
@@ -0,0 +1,117 @@
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
+ const FEDERATION_RUNTIME = '@module-federation/modern-js-v3/runtime';
31
+ const FEDERATION_MEMBER_LOADERS = new Set([
32
+ 'loadRemote',
33
+ 'loadShare'
34
+ ]);
35
+ function isBuildTargetAccess(typescript, node) {
36
+ if (!typescript.isPropertyAccessExpression(node) || void 0 !== node.questionDotToken || 'MODERN_TARGET' !== node.name.text) return false;
37
+ const env = node.expression;
38
+ return typescript.isPropertyAccessExpression(env) && void 0 === env.questionDotToken && 'env' === env.name.text && typescript.isMetaProperty(env.expression) && env.expression.keywordToken === typescript.SyntaxKind.ImportKeyword && 'meta' === env.expression.name.text;
39
+ }
40
+ function createNativeShellRuntimeEvidence(typescript, typescriptApi, checker, sourceFile) {
41
+ const unwrapParentheses = (node)=>{
42
+ while(typescript.isParenthesizedExpression(node))node = node.expression;
43
+ return node;
44
+ };
45
+ const isBuildTargetLiteral = (node)=>typescript.isStringLiteral(node) && ('browser' === node.text || 'node' === node.text);
46
+ const buildTargetComparison = (node)=>{
47
+ node = unwrapParentheses(node);
48
+ if (!typescript.isBinaryExpression(node) || node.operatorToken.kind !== typescript.SyntaxKind.EqualsEqualsEqualsToken) return;
49
+ const literal = isBuildTargetAccess(typescript, node.left) ? node.right : isBuildTargetAccess(typescript, node.right) ? node.left : void 0;
50
+ return void 0 !== literal && isBuildTargetLiteral(literal) ? literal.text : void 0;
51
+ };
52
+ const conjuncts = (node)=>{
53
+ node = unwrapParentheses(node);
54
+ return typescript.isBinaryExpression(node) && node.operatorToken.kind === typescript.SyntaxKind.AmpersandAmpersandToken ? [
55
+ ...conjuncts(node.left),
56
+ ...conjuncts(node.right)
57
+ ] : [
58
+ node
59
+ ];
60
+ };
61
+ const requiresBrowserTarget = (condition)=>conjuncts(condition).some((conjunct)=>'browser' === buildTargetComparison(conjunct));
62
+ const isBrowserGuarded = (node)=>{
63
+ for(let child = node; void 0 !== child.parent; child = child.parent){
64
+ const parent = child.parent;
65
+ if (typescript.isIfStatement(parent) && parent.thenStatement === child && requiresBrowserTarget(parent.expression)) return true;
66
+ if (typescript.isConditionalExpression(parent) && parent.whenTrue === child && requiresBrowserTarget(parent.condition)) return true;
67
+ }
68
+ return false;
69
+ };
70
+ let federationInstanceTypeIds;
71
+ const federationInstanceTypes = ()=>{
72
+ if (void 0 !== federationInstanceTypeIds) return federationInstanceTypeIds;
73
+ const typeIds = new Set();
74
+ const recordRuntime = (specifier)=>{
75
+ const runtime = checker.getSymbolAtLocation(specifier);
76
+ const getInstance = void 0 === runtime ? void 0 : checker.getMemberInModuleExports(runtime, 'getInstance');
77
+ const getInstanceType = void 0 === getInstance ? void 0 : checker.getTypeOfSymbol(getInstance);
78
+ if (void 0 === getInstanceType) return;
79
+ for (const signature of checker.getSignaturesOfType(getInstanceType, typescriptApi.SignatureKind.Call)){
80
+ const returnType = checker.getReturnTypeOfSignature(signature);
81
+ const instanceType = void 0 === returnType ? void 0 : checker.getNonNullableType(returnType);
82
+ if (void 0 !== instanceType && instanceType.getSymbol()?.name === 'ModuleFederation') typeIds.add(instanceType.id);
83
+ }
84
+ };
85
+ const visit = (node)=>{
86
+ if (typescript.isImportDeclaration(node) && typescript.isStringLiteralLikeNode(node.moduleSpecifier) && node.moduleSpecifier.text === FEDERATION_RUNTIME && node.importClause?.phaseModifier !== typescript.SyntaxKind.TypeKeyword) recordRuntime(node.moduleSpecifier);
87
+ else if (typescript.isCallExpression(node) && node.expression.kind === typescript.SyntaxKind.ImportKeyword && 1 === node.arguments.length && typescript.isStringLiteralLikeNode(node.arguments[0]) && node.arguments[0].text === FEDERATION_RUNTIME) recordRuntime(node.arguments[0]);
88
+ node.forEachChild(visit);
89
+ };
90
+ visit(sourceFile);
91
+ federationInstanceTypeIds = typeIds;
92
+ return typeIds;
93
+ };
94
+ const isBrowserFederationMemberLoad = (node)=>{
95
+ if (!typescript.isCallExpression(node)) return false;
96
+ const callee = unwrapParentheses(node.expression);
97
+ if (!typescript.isPropertyAccessExpression(callee) || !FEDERATION_MEMBER_LOADERS.has(callee.name.text)) return false;
98
+ const receiverType = checker.getTypeAtLocation(callee.expression);
99
+ return void 0 !== receiverType && federationInstanceTypes().has(receiverType.id) && isBrowserGuarded(node);
100
+ };
101
+ return {
102
+ isBrowserFederationMemberLoad
103
+ };
104
+ }
105
+ __webpack_require__.d(__webpack_exports__, {
106
+ createNativeShellRuntimeEvidence: ()=>createNativeShellRuntimeEvidence,
107
+ isBuildTargetAccess: ()=>isBuildTargetAccess
108
+ });
109
+ exports.createNativeShellRuntimeEvidence = __webpack_exports__.createNativeShellRuntimeEvidence;
110
+ exports.isBuildTargetAccess = __webpack_exports__.isBuildTargetAccess;
111
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
112
+ "createNativeShellRuntimeEvidence",
113
+ "isBuildTargetAccess"
114
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
115
+ Object.defineProperty(exports, '__esModule', {
116
+ value: true
117
+ });