@bleedingdev/modern-js-ultramodern-create 3.9.0-ultramodern.17 → 3.9.0-ultramodern.18

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 (73) hide show
  1. package/README.md +14 -7
  2. package/dist/cjs/ultramodern-tooling/commands/routes-generate-app.cjs +13 -6
  3. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +12 -5
  4. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +1 -1
  5. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +2 -2
  6. package/dist/cjs/ultramodern-workspace/demo-components.cjs +2 -4
  7. package/dist/cjs/ultramodern-workspace/fs-io.cjs +2 -1
  8. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +9 -6
  9. package/dist/cjs/ultramodern-workspace/package-json.cjs +10 -9
  10. package/dist/cjs/ultramodern-workspace/patch-inventory.cjs +3 -12
  11. package/dist/cjs/ultramodern-workspace/policy.cjs +1 -55
  12. package/dist/cjs/ultramodern-workspace/public-surface.cjs +1 -1
  13. package/dist/cjs/ultramodern-workspace/routes.cjs +2 -15
  14. package/dist/cjs/ultramodern-workspace/validation/workspace.cjs +2 -1
  15. package/dist/cjs/ultramodern-workspace/versions.cjs +58 -0
  16. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +10 -5
  17. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +0 -4
  18. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +9 -2
  19. package/dist/cjs/ultramodern-workspace/zerops.cjs +2 -0
  20. package/dist/esm/ultramodern-tooling/commands/routes-generate-app.js +13 -6
  21. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +12 -5
  22. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +1 -1
  23. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +2 -2
  24. package/dist/esm/ultramodern-workspace/demo-components.js +2 -4
  25. package/dist/esm/ultramodern-workspace/fs-io.js +2 -1
  26. package/dist/esm/ultramodern-workspace/module-federation/config.js +9 -6
  27. package/dist/esm/ultramodern-workspace/package-json.js +3 -2
  28. package/dist/esm/ultramodern-workspace/patch-inventory.js +3 -12
  29. package/dist/esm/ultramodern-workspace/policy.js +2 -53
  30. package/dist/esm/ultramodern-workspace/public-surface.js +1 -1
  31. package/dist/esm/ultramodern-workspace/routes.js +2 -15
  32. package/dist/esm/ultramodern-workspace/validation/workspace.js +2 -1
  33. package/dist/esm/ultramodern-workspace/versions.js +53 -1
  34. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +11 -6
  35. package/dist/esm/ultramodern-workspace/workspace-scripts.js +0 -4
  36. package/dist/esm/ultramodern-workspace/write-workspace.js +10 -3
  37. package/dist/esm/ultramodern-workspace/zerops.js +2 -0
  38. package/dist/esm-node/ultramodern-tooling/commands/routes-generate-app.js +13 -6
  39. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +12 -5
  40. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +1 -1
  41. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +2 -2
  42. package/dist/esm-node/ultramodern-workspace/demo-components.js +2 -4
  43. package/dist/esm-node/ultramodern-workspace/fs-io.js +2 -1
  44. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +9 -6
  45. package/dist/esm-node/ultramodern-workspace/package-json.js +3 -2
  46. package/dist/esm-node/ultramodern-workspace/patch-inventory.js +3 -12
  47. package/dist/esm-node/ultramodern-workspace/policy.js +2 -53
  48. package/dist/esm-node/ultramodern-workspace/public-surface.js +1 -1
  49. package/dist/esm-node/ultramodern-workspace/routes.js +2 -15
  50. package/dist/esm-node/ultramodern-workspace/validation/workspace.js +2 -1
  51. package/dist/esm-node/ultramodern-workspace/versions.js +53 -1
  52. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +11 -6
  53. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +0 -4
  54. package/dist/esm-node/ultramodern-workspace/write-workspace.js +10 -3
  55. package/dist/esm-node/ultramodern-workspace/zerops.js +2 -0
  56. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +1 -1
  57. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +2 -2
  58. package/dist/types/ultramodern-workspace/policy.d.ts +1 -52
  59. package/dist/types/ultramodern-workspace/routes.d.ts +6 -1
  60. package/dist/types/ultramodern-workspace/versions.d.ts +52 -0
  61. package/package.json +10 -11
  62. package/release-cohort.json +48 -48
  63. package/template-workspace/.codex/skills/rspack-tracing/scripts/analyze_trace.js +1 -1
  64. package/template-workspace/README.md.handlebars +4 -3
  65. package/template-workspace/oxfmt.config.ts +1 -0
  66. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +10 -0
  67. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +30 -7
  68. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +3 -5
  69. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +1 -1
  70. package/templates/workspace-scripts/generate-node-backend-federation.mjs +28 -27
  71. package/templates/workspace-scripts/generate-public-surface-assets.mjs +6 -39
  72. package/templates/workspace-scripts/proof-node-backend-federation.mjs +1 -1
  73. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mts +0 -9
package/README.md CHANGED
@@ -195,9 +195,15 @@ for local monorepo development. After installation, run `pnpm contract:check`,
195
195
  which invokes the installed CLI directly. The installed generator owns its
196
196
  release-integrity metadata.
197
197
 
198
- Normal installs retain the generated release-age and trust policy. Release
199
- acceptance uses exact, temporary exceptions for the artifacts being tested;
200
- it does not add permanent exception lists to the application.
198
+ Normal installs retain the generated strict 24-hour release-age and trust
199
+ policy. The one exception is `minimumReleaseAgeExclude`: it lists the exact
200
+ `package@version` of every package in the cohort the create package ships, so a
201
+ workspace created on the day that cohort is published can install it. Every
202
+ other dependency still waits 24 hours, including a cohort selected with
203
+ `--ultramodern-package-version` that differs from the create package's own; to
204
+ install a fresh cohort on publish day, run that release's create package.
205
+ Release acceptance adds exact, temporary exceptions for the sidecars under test
206
+ on the command line.
201
207
 
202
208
  ## CodeSmith Adapter And Overlays
203
209
 
@@ -300,10 +306,11 @@ Federation manifests and vertical APIs through generated Effect clients
300
306
  exported by the vertical packages.
301
307
 
302
308
  Route metadata is route-owned and colocated in
303
- `src/routes/**/route.meta.ts`. The scaffold regenerates
304
- `src/routes/ultramodern-route-metadata.ts` as a generated route manifest for
305
- Modern.js config, i18n, public head, and public surface contracts; authors
306
- should not hand-maintain it. Locale JSON is served from
309
+ `src/routes/**/route.meta.ts`; each file exports `routeMeta`.
310
+ `ultramodern-create ultramodern routes-generate` (run before every app `dev`
311
+ and `build`) regenerates `src/routes/ultramodern-route-metadata.ts` as a
312
+ formatted route manifest for Modern.js config, i18n, public head, and public
313
+ surface contracts; authors should not hand-maintain it. Locale JSON is served from
307
314
  `/locales/{{lng}}/{{ns}}.json`; Czech and English routes are generated from the
308
315
  route owner, not from shell rewrites.
309
316
 
@@ -30,16 +30,23 @@ const external_node_path_namespaceObject = require("node:path");
30
30
  var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
31
31
  const external_node_url_namespaceObject = require("node:url");
32
32
  async function main() {
33
- const [appDirectory, label] = process.argv.slice(2);
33
+ const [appDirectory, label, mode] = process.argv.slice(2);
34
34
  try {
35
35
  if (!appDirectory || !label) throw new Error('Route generation requires an app directory and label.');
36
36
  const appRequire = (0, external_node_module_namespaceObject.createRequire)(external_node_path_default().join(appDirectory, 'package.json'));
37
37
  const pluginUrl = (0, external_node_url_namespaceObject.pathToFileURL)(appRequire.resolve('@modern-js/plugin-tanstack')).href;
38
- const { generateTanstackRouteArtifacts } = await import(pluginUrl);
39
- await generateTanstackRouteArtifacts({
40
- appDirectory
41
- });
42
- console.log(`[ultramodern] TanStack route artifacts generated: ${label}`);
38
+ const plugin = await import(pluginUrl);
39
+ if ('manifest' === mode) {
40
+ await plugin.writeRouteMetadataManifest({
41
+ appDirectory
42
+ });
43
+ console.log(`[ultramodern] Route metadata manifest generated: ${label}`);
44
+ } else {
45
+ await plugin.generateTanstackRouteArtifacts({
46
+ appDirectory
47
+ });
48
+ console.log(`[ultramodern] TanStack route artifacts generated: ${label}`);
49
+ }
43
50
  } catch (error) {
44
51
  process.exitCode = 1;
45
52
  console.error(`[ultramodern] TanStack route generation failed: ${label}`);
@@ -56,20 +56,27 @@ const resolveRoutesGenerateTargets = (args, context)=>{
56
56
  function runRoutesGenerate(args, context) {
57
57
  if (args.includes('--help') || args.includes('-h')) {
58
58
  process.stdout.write(`Usage:
59
- ultramodern-create ultramodern routes-generate [--app <id>]
59
+ ultramodern-create ultramodern routes-generate [--app <id>] [--manifest-only]
60
60
 
61
- Regenerates TanStack route artifacts (router.gen.ts, register.gen.d.ts) for
62
- generated UltraModern apps without running dev or build. Without --app, every
63
- generated workspace app is regenerated.
61
+ Regenerates src/routes/ultramodern-route-metadata.ts from the app's
62
+ route.meta.ts files and the TanStack route artifacts (router.gen.ts,
63
+ register.gen.d.ts) for generated UltraModern apps without running dev or build.
64
+ Without --app, every generated workspace app is regenerated.
65
+
66
+ --manifest-only writes only the route metadata manifest. It never loads the
67
+ app config, so app dev and build scripts run it before \`modern dev\` and
68
+ \`modern build\`, which regenerate the router artifacts themselves.
64
69
  `);
65
70
  return 0;
66
71
  }
67
72
  const targets = resolveRoutesGenerateTargets(args, context);
73
+ const mode = args.includes('--manifest-only') ? 'manifest' : 'all';
68
74
  let failed = false;
69
75
  for (const target of targets){
70
76
  const status = (0, external_context_cjs_namespaceObject.spawnNodeScript)('dist/esm-node/ultramodern-tooling/commands/routes-generate-app.js', [
71
77
  target.appDirectory,
72
- target.label
78
+ target.label,
79
+ mode
73
80
  ], context, {
74
81
  cwd: target.appDirectory
75
82
  });
@@ -54,7 +54,7 @@ const external_module_federation_cjs_namespaceObject = require("../module-federa
54
54
  const external_package_json_cjs_namespaceObject = require("../package-json.cjs");
55
55
  const external_public_surface_cjs_namespaceObject = require("../public-surface.cjs");
56
56
  const external_workspace_artifact_ownership_cjs_namespaceObject = require("../workspace-artifact-ownership.cjs");
57
- function updateRootWorkspaceScripts(workspaceRoot, scope, packageSource, remotes, bridge, additionalShells = [], previousRemotes = remotes, primaryShell = external_descriptors_cjs_namespaceObject.shellApp, previousAdditionalShells = additionalShells) {
57
+ function updateRootWorkspaceScripts(workspaceRoot, scope, packageSource, remotes, bridge, additionalShells = [], previousRemotes = remotes, _primaryShell = external_descriptors_cjs_namespaceObject.shellApp, previousAdditionalShells = additionalShells) {
58
58
  const packagePath = external_node_path_default().join(workspaceRoot, 'package.json');
59
59
  const rootPackage = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(packagePath);
60
60
  const generatedRootPackage = (0, external_package_json_cjs_namespaceObject.createRootPackageJson)(scope, packageSource, remotes, bridge, additionalShells);
@@ -70,14 +70,14 @@ function assertValidVerticalName(name) {
70
70
  if (!normalized || normalized !== name) throw new Error(`Invalid Vertical name "${name}". Use lowercase kebab-case.`);
71
71
  return normalized;
72
72
  }
73
- function configuredDevelopmentPorts(ports, additionalShells = []) {
73
+ function configuredDevelopmentPorts(ports, _additionalShells = []) {
74
74
  return [
75
75
  ...new Set([
76
76
  ...Object.values(ports)
77
77
  ].filter((value)=>'number' == typeof value && Number.isFinite(value)))
78
78
  ];
79
79
  }
80
- function assertGlobalPortUniqueness(ports, additionalShells = []) {
80
+ function assertGlobalPortUniqueness(ports, _additionalShells = []) {
81
81
  const owners = new Map();
82
82
  for (const [id, value] of Object.entries(ports)){
83
83
  if ('number' != typeof value || !Number.isFinite(value)) continue;
@@ -152,19 +152,17 @@ function createFederatedComponentsRegistry(scope, host, remotes, worker = false)
152
152
  {null}
153
153
  </DistributedSsrBoundary>
154
154
  ),` : ` ${entry.exportName}: createDistributedSsrComponent<${entry.exportName}Props>({
155
- createComponent: () =>
155
+ createComponent: options =>
156
156
  createLazyComponent<
157
157
  RemoteComponentModule<${entry.exportName}Props>,
158
158
  'default'
159
159
  >({
160
- export: 'default',
161
- fallback,
160
+ ...options,
162
161
  instance: getInstance(),
163
162
  loader: () =>
164
163
  import('${entry.remoteAlias}') as Promise<
165
164
  RemoteComponentModule<${entry.exportName}Props>
166
165
  >,
167
- loading: null,
168
166
  }),
169
167
  expose: '${entry.expose}',
170
168
  fallback,
@@ -83,7 +83,8 @@ const workspaceOxfmtIgnorePatterns = [
83
83
  '.modern',
84
84
  '.modernjs',
85
85
  '**/modern-tanstack/**',
86
- '**/routeTree.gen.*'
86
+ '**/routeTree.gen.*',
87
+ '**/src/routes/ultramodern-route-metadata.ts'
87
88
  ];
88
89
  const formattableExtensions = new Set([
89
90
  '.cjs',
@@ -47,7 +47,7 @@ function createAppModernConfig(scope, app, remotes = [], enableTailwind = true,
47
47
  const deliveryUnit = (0, external_delivery_unit_cjs_namespaceObject.createDeliveryUnitRecord)(scope, app);
48
48
  const emitsUi = (0, external_descriptors_cjs_namespaceObject.appEmitsBrowserUi)(app);
49
49
  const bffImport = (0, external_descriptors_cjs_namespaceObject.appHasApi)(app) ? "import { bffPlugin } from '@modern-js/plugin-bff-build-extensions';\n" : '';
50
- const uiImports = emitsUi ? `import { getBuildConfigEnvironment, withBuildConfigEnvironment } from '@modern-js/app-tools-extensions/config';
50
+ const uiImports = emitsUi ? `import { getBuildConfigEnvironment } from '@modern-js/app-tools-extensions/config';
51
51
  import { moduleFederationPlugin } from '@module-federation/modern-js-v3';
52
52
  import { withZephyr as withZephyrRspack } from 'zephyr-rspack-plugin';
53
53
  import { ultramodernLocalisedUrls } from './src/routes/ultramodern-route-metadata';
@@ -68,16 +68,19 @@ import { ultramodernLocalisedUrls } from './src/routes/ultramodern-route-metadat
68
68
  // no account, and is never blocked. This is the framework's "works with or
69
69
  // without Zephyr" contract. The plugin stays registered unconditionally
70
70
  // (this gate keys on Zephyr's native deploy token, not any UltraModern
71
- // opt-out). When deploying, ZE_FAIL_BUILD=true makes an upload failure a
72
- // hard build failure.
71
+ // opt-out). The deploy environment sets ZE_FAIL_BUILD=true next to
72
+ // ZE_CI_TOKEN so an upload failure is a hard build failure.
73
73
  const zephyrCiDeploy =
74
74
  (getBuildConfigEnvironment('ZE_CI_TOKEN') ?? '').length > 0;
75
75
  if (!zephyrCiDeploy) {
76
76
  return;
77
77
  }
78
- api.modifyRspackConfig(
79
- withBuildConfigEnvironment('ZE_FAIL_BUILD', 'true', withZephyrRspack()),
80
- );
78
+ if (getBuildConfigEnvironment('ZE_FAIL_BUILD') !== 'true') {
79
+ throw new Error(
80
+ 'ZE_CI_TOKEN is set but ZE_FAIL_BUILD is not "true", so a failed Zephyr upload would not fail the deploy. Set ZE_FAIL_BUILD=true in the deploy environment next to ZE_CI_TOKEN.',
81
+ );
82
+ }
83
+ api.modifyRspackConfig(withZephyrRspack());
81
84
  },
82
85
  });
83
86
 
@@ -45,6 +45,7 @@ const external_descriptors_cjs_namespaceObject = require("./descriptors.cjs");
45
45
  const external_fs_io_cjs_namespaceObject = require("./fs-io.cjs");
46
46
  const external_naming_cjs_namespaceObject = require("./naming.cjs");
47
47
  const external_policy_cjs_namespaceObject = require("./policy.cjs");
48
+ const external_versions_cjs_namespaceObject = require("./versions.cjs");
48
49
  const external_workspace_script_plan_cjs_namespaceObject = require("./workspace-script-plan.cjs");
49
50
  const external_tsconfigs_cjs_namespaceObject = require("./tsconfigs.cjs");
50
51
  const frameworkRequest = (packageSource)=>'install' === packageSource.strategy ? 'catalog:ultramodern' : 'workspace:*';
@@ -57,7 +58,7 @@ function appDependencies(scope, packageSource, app, remotes = [], bridge) {
57
58
  '@modern-js/runtime-renderer-extensions': frameworkRequest(packageSource),
58
59
  '@modern-js/runtime-extensions': frameworkRequest(packageSource),
59
60
  '@modern-js/runtime': frameworkRequest(packageSource),
60
- ...external_policy_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.appDependencies,
61
+ ...external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.appDependencies,
61
62
  [(0, external_naming_cjs_namespaceObject.packageName)(scope, 'shared-contracts')]: external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION,
62
63
  [(0, external_naming_cjs_namespaceObject.packageName)(scope, 'shared-design-tokens')]: external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION
63
64
  };
@@ -70,19 +71,19 @@ function appDependencies(scope, packageSource, app, remotes = [], bridge) {
70
71
  if ('shell' === app.kind) {
71
72
  dependencies['@modern-js/boundary-debugger'] = frameworkRequest(packageSource);
72
73
  dependencies['@modern-js/plugin-bff'] = frameworkRequest(packageSource);
73
- Object.assign(dependencies, external_policy_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.bffEffectDependencies);
74
+ Object.assign(dependencies, external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.bffEffectDependencies);
74
75
  for (const remote of (0, external_descriptors_cjs_namespaceObject.verticalApiApps)(remotes))dependencies[(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)] = external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION;
75
76
  }
76
77
  for (const remote of appRemotes)dependencies[(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)] = external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION;
77
78
  if ((0, external_descriptors_cjs_namespaceObject.appHasApi)(app)) {
78
79
  dependencies['@modern-js/plugin-bff'] = frameworkRequest(packageSource);
79
80
  dependencies['@modern-js/bff-effect'] = frameworkRequest(packageSource);
80
- Object.assign(dependencies, external_policy_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.bffEffectDependencies);
81
+ Object.assign(dependencies, external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.bffEffectDependencies);
81
82
  }
82
83
  return dependencies;
83
84
  }
84
85
  function appDevDependencies(packageSource, enableTailwind, app) {
85
- const { '@rsbuild/plugin-tailwindcss': tailwindPluginVersion, tailwindcss: tailwindVersion, ...always } = external_policy_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.appDevDependencies;
86
+ const { '@rsbuild/plugin-tailwindcss': tailwindPluginVersion, tailwindcss: tailwindVersion, ...always } = external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.appDevDependencies;
86
87
  return {
87
88
  ...(0, external_descriptors_cjs_namespaceObject.appHasApi)(app) || 'shell' === app.kind ? {
88
89
  '@modern-js/plugin-bff-build-extensions': frameworkRequest(packageSource)
@@ -156,7 +157,7 @@ function createRootPackageJson(scope, packageSource, remotes = [], bridge, addit
156
157
  'agents:refs:check': "node ./scripts/setup-agent-reference-repos.mts --check",
157
158
  'api:check': 'modern-api-check',
158
159
  'api:check:files': 'modern-api-check-files',
159
- 'i18n:boundaries': "node ./scripts/check-ultramodern-i18n-boundaries.mts",
160
+ 'i18n:boundaries': 'modern-i18n-check',
160
161
  ...bridgeScripts,
161
162
  postinstall: external_workspace_script_plan_cjs_namespaceObject.GENERATED_POSTINSTALL_SCRIPT
162
163
  },
@@ -172,7 +173,7 @@ function createRootPackageJson(scope, packageSource, remotes = [], bridge, addit
172
173
  ownership: './topology/ownership.json'
173
174
  },
174
175
  devDependencies: {
175
- ...external_policy_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.rootDevDependencies,
176
+ ...external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.rootDevDependencies,
176
177
  '@modern-js/app-tools': frameworkRequest(packageSource),
177
178
  '@modern-js/plugin-bff-extensions': frameworkRequest(packageSource),
178
179
  '@modern-js/plugin-bff-build-extensions': frameworkRequest(packageSource),
@@ -183,7 +184,7 @@ function createRootPackageJson(scope, packageSource, remotes = [], bridge, addit
183
184
  '@modern-js/code-tools': frameworkRequest(packageSource),
184
185
  [external_ultramodern_package_source_cjs_namespaceObject.ULTRAMODERN_CREATE_PACKAGE]: frameworkRequest(packageSource),
185
186
  '@modern-js/plugin-bff': frameworkRequest(packageSource),
186
- ...external_policy_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.bffEffectDependencies
187
+ ...external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.bffEffectDependencies
187
188
  }
188
189
  };
189
190
  }
@@ -247,11 +248,11 @@ function createSharedPackage(scope, id, description, packageSource) {
247
248
  typecheck: (0, external_workspace_script_plan_cjs_namespaceObject.createStrictTsgoTypecheckCommand)(`packages/${id}`)
248
249
  },
249
250
  devDependencies: {
250
- '@effect/tsgo': external_policy_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.appDevDependencies["@effect/tsgo"]
251
+ '@effect/tsgo': external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.appDevDependencies["@effect/tsgo"]
251
252
  }
252
253
  };
253
254
  if ('shared-contracts' === id) packageJson.dependencies = {
254
- ...external_policy_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.bffEffectDependencies,
255
+ ...external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS.bffEffectDependencies,
255
256
  '@modern-js/bff-effect': packageSource ? frameworkRequest(packageSource) : external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION,
256
257
  '@modern-js/runtime-extensions': packageSource ? frameworkRequest(packageSource) : external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION,
257
258
  '@modern-js/plugin-bff': packageSource ? frameworkRequest(packageSource) : external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION
@@ -44,7 +44,7 @@ const __rspack_default_export = [
44
44
  sha256: 'c52b86d551da354492cf255cfb8c0e56e51cb6b4452319b47295ac969704819d',
45
45
  repository: true,
46
46
  workspace: null,
47
- reason: 'Preserve declaration rootDir and execute native compiler paths without shell parsing.'
47
+ reason: 'Bind the type server before publishing its port (upstream PR pending); execute absolute compilerInstance paths without a shell ([#5131](https://github.com/module-federation/core/pull/5131)); preserve declaration rootDir ([#4947](https://github.com/module-federation/core/pull/4947)).'
48
48
  },
49
49
  {
50
50
  packageName: '@module-federation/manifest',
@@ -59,10 +59,10 @@ const __rspack_default_export = [
59
59
  packageName: '@module-federation/modern-js-v3',
60
60
  version: '2.9.1',
61
61
  path: 'patches/@module-federation__modern-js-v3@2.9.1.patch',
62
- sha256: '0ab5fa14ed744c31c8221c6f663c9fc5b50a134f641e65277900c88da6cb72d0',
62
+ sha256: '3d000f33015d32b14dcf9e46672e7d6867317ad9f43e95b2c392c3d5a7c052ab',
63
63
  repository: true,
64
64
  workspace: null,
65
- reason: 'Preserve lazy compilation, framework CSS ownership, SSR manifest recovery, valid async splitting and native ESM CLI package resolution.'
65
+ reason: "Preserve lazy compilation, framework CSS ownership, SSR manifest recovery, valid async splitting and native ESM CLI package resolution; keep the SSR dev reload script out of client renders ([#5158](https://github.com/module-federation/core/pull/5158))."
66
66
  },
67
67
  {
68
68
  packageName: '@module-federation/rspack',
@@ -82,15 +82,6 @@ const __rspack_default_export = [
82
82
  workspace: null,
83
83
  reason: 'Import ResourceLoadContext used by public remote hooks.'
84
84
  },
85
- {
86
- packageName: 'drizzle-orm',
87
- version: '1.0.0-rc.4',
88
- path: 'patches/drizzle-orm-ts7-strict-declarations.patch',
89
- sha256: '5c37f228e3916f32a502dbb0a5075acdd60751047f72778d789a2362b6cdfbc6',
90
- repository: false,
91
- workspace: null,
92
- reason: 'Strict TypeScript declarations for generated database applications.'
93
- },
94
85
  {
95
86
  packageName: 'effect',
96
87
  version: '4.0.0-rc.117',
@@ -28,7 +28,6 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
- ULTRAMODERN_PACKAGE_PINS: ()=>ULTRAMODERN_PACKAGE_PINS,
32
31
  ULTRAMODERN_WORKSPACE_POLICY: ()=>ULTRAMODERN_WORKSPACE_POLICY,
33
32
  createCloudflareDeployContract: ()=>createCloudflareDeployContract,
34
33
  createCloudflareSecurityContract: ()=>createCloudflareSecurityContract,
@@ -251,60 +250,9 @@ function createCloudflareDeployContract(scope, app) {
251
250
  } : {}
252
251
  };
253
252
  }
254
- const ULTRAMODERN_PACKAGE_PINS = {
255
- appDependencies: {
256
- '@module-federation/bridge-react': `npm:@bleedingdev/mf-bridge-react@${external_versions_cjs_namespaceObject.MODULE_FEDERATION_VERSION}`,
257
- '@module-federation/modern-js-v3': `npm:@bleedingdev/mf-modern-js-v3@${external_versions_cjs_namespaceObject.MODULE_FEDERATION_VERSION}`,
258
- '@module-federation/runtime': `npm:@bleedingdev/mf-runtime@${external_versions_cjs_namespaceObject.MODULE_FEDERATION_VERSION}`,
259
- '@tanstack/react-router': external_versions_cjs_namespaceObject.TANSTACK_ROUTER_VERSION,
260
- i18next: external_versions_cjs_namespaceObject.I18NEXT_VERSION,
261
- 'node-fetch': external_versions_cjs_namespaceObject.NODE_FETCH_VERSION,
262
- react: external_versions_cjs_namespaceObject.REACT_VERSION,
263
- 'react-dom': external_versions_cjs_namespaceObject.REACT_DOM_VERSION
264
- },
265
- bffEffectDependencies: {
266
- '@effect/opentelemetry': external_versions_cjs_namespaceObject.EFFECT_VERSION,
267
- effect: `npm:@bleedingdev/effect@${external_versions_cjs_namespaceObject.EFFECT_VERSION}`
268
- },
269
- appDevDependencies: {
270
- '@effect/tsgo': external_versions_cjs_namespaceObject.EFFECT_TSGO_VERSION,
271
- '@rsbuild/plugin-tailwindcss': `^${external_versions_cjs_namespaceObject.RSBUILD_PLUGIN_TAILWINDCSS_VERSION}`,
272
- "@typescript/native": `npm:typescript@${external_versions_cjs_namespaceObject.TYPESCRIPT_VERSION}`,
273
- '@types/node': external_versions_cjs_namespaceObject.TYPES_NODE_VERSION,
274
- '@types/react': external_versions_cjs_namespaceObject.TYPES_REACT_VERSION,
275
- '@types/react-dom': external_versions_cjs_namespaceObject.TYPES_REACT_DOM_VERSION,
276
- 'cross-env': external_versions_cjs_namespaceObject.CROSS_ENV_VERSION,
277
- tailwindcss: `^${external_versions_cjs_namespaceObject.TAILWIND_VERSION}`,
278
- typescript: external_versions_cjs_namespaceObject.TYPESCRIPT_VERSION,
279
- wrangler: external_versions_cjs_namespaceObject.WRANGLER_VERSION,
280
- 'zephyr-rspack-plugin': external_versions_cjs_namespaceObject.ZEPHYR_RSPACK_PLUGIN_VERSION
281
- },
282
- rootDevDependencies: {
283
- '@effect/tsgo': external_versions_cjs_namespaceObject.EFFECT_TSGO_VERSION,
284
- "@typescript/native": `npm:typescript@${external_versions_cjs_namespaceObject.TYPESCRIPT_VERSION}`,
285
- '@types/node': external_versions_cjs_namespaceObject.TYPES_NODE_VERSION,
286
- 'cross-env': external_versions_cjs_namespaceObject.CROSS_ENV_VERSION,
287
- lefthook: external_versions_cjs_namespaceObject.LEFTHOOK_VERSION,
288
- miniflare: external_versions_cjs_namespaceObject.MINIFLARE_VERSION,
289
- oxlint: external_versions_cjs_namespaceObject.OXLINT_VERSION,
290
- oxfmt: external_versions_cjs_namespaceObject.OXFMT_VERSION,
291
- ultracite: external_versions_cjs_namespaceObject.ULTRACITE_VERSION,
292
- wrangler: external_versions_cjs_namespaceObject.WRANGLER_VERSION,
293
- 'zephyr-agent': external_versions_cjs_namespaceObject.ZEPHYR_AGENT_VERSION
294
- },
295
- transitiveDependencies: {
296
- '@cloudflare/workers-types': external_versions_cjs_namespaceObject.CLOUDFLARE_WORKERS_TYPES_VERSION,
297
- '@module-federation/node': external_versions_cjs_namespaceObject.MODULE_FEDERATION_NODE_VERSION,
298
- '@tanstack/history': external_versions_cjs_namespaceObject.TANSTACK_HISTORY_VERSION,
299
- '@tanstack/router-core': external_versions_cjs_namespaceObject.TANSTACK_ROUTER_CORE_VERSION,
300
- "@typescript/native-preview": external_versions_cjs_namespaceObject.TYPESCRIPT_NATIVE_PREVIEW_VERSION,
301
- miniflare: external_versions_cjs_namespaceObject.MINIFLARE_VERSION,
302
- workerd: external_versions_cjs_namespaceObject.WORKERD_VERSION
303
- }
304
- };
305
253
  const ULTRAMODERN_WORKSPACE_POLICY = {
306
254
  schemaVersion: 1,
307
- dependencies: ULTRAMODERN_PACKAGE_PINS,
255
+ dependencies: external_versions_cjs_namespaceObject.ULTRAMODERN_PACKAGE_PINS,
308
256
  toolchain: {
309
257
  node: {
310
258
  version: external_versions_cjs_namespaceObject.NODE_VERSION,
@@ -344,7 +292,6 @@ const ULTRAMODERN_WORKSPACE_POLICY = {
344
292
  }
345
293
  }
346
294
  };
347
- exports.ULTRAMODERN_PACKAGE_PINS = __webpack_exports__.ULTRAMODERN_PACKAGE_PINS;
348
295
  exports.ULTRAMODERN_WORKSPACE_POLICY = __webpack_exports__.ULTRAMODERN_WORKSPACE_POLICY;
349
296
  exports.createCloudflareDeployContract = __webpack_exports__.createCloudflareDeployContract;
350
297
  exports.createCloudflareSecurityContract = __webpack_exports__.createCloudflareSecurityContract;
@@ -352,7 +299,6 @@ exports.createPublicHeadRobotsPolicy = __webpack_exports__.createPublicHeadRobot
352
299
  exports.createPublicSurfaceContentExpansionPolicy = __webpack_exports__.createPublicSurfaceContentExpansionPolicy;
353
300
  exports.formatTsJsonValue = __webpack_exports__.formatTsJsonValue;
354
301
  for(var __rspack_i in __webpack_exports__)if (-1 === [
355
- "ULTRAMODERN_PACKAGE_PINS",
356
302
  "ULTRAMODERN_WORKSPACE_POLICY",
357
303
  "createCloudflareDeployContract",
358
304
  "createCloudflareSecurityContract",
@@ -210,7 +210,7 @@ function createPublicWebAppArtifacts(app) {
210
210
  },
211
211
  routeMetadataFile: {
212
212
  path: `${app.directory}/src/routes/ultramodern-route-metadata.ts`,
213
- content: (0, external_routes_cjs_namespaceObject.createRouteMetadataModule)(app)
213
+ content: (0, external_routes_cjs_namespaceObject.createRouteMetadataModule)()
214
214
  },
215
215
  routeHeadFile: {
216
216
  path: `${app.directory}/src/routes/ultramodern-route-head.tsx`,
@@ -120,21 +120,8 @@ function createPublicRouteMetadata(app) {
120
120
  function createJsonLdHelperModule() {
121
121
  return (0, external_fs_io_cjs_namespaceObject.renderFileTemplate)('workspace/apps/shared/src/routes/ultramodern-jsonld.ts', {});
122
122
  }
123
- function createRouteMetadataModule(app) {
124
- const routes = createRouteOwnedI18nPaths(app).map((route)=>({
125
- file: createRouteMetaFilePath(app, route.canonicalPath)
126
- })).sort((left, right)=>left.file < right.file ? -1 : left.file > right.file ? 1 : 0);
127
- const routesRoot = `${app.directory}/src/routes/`;
128
- const imports = routes.map(({ file }, index)=>{
129
- const relative = file.slice(routesRoot.length).replace(/\.ts$/u, '');
130
- return `import { routeMeta as route${index} } from ${JSON.stringify(`./${relative}`)};`;
131
- });
132
- const namespace = (0, external_descriptors_cjs_namespaceObject.appI18nNamespace)(app);
133
- return (0, external_fs_io_cjs_namespaceObject.renderFileTemplate)('workspace/apps/shared/src/routes/ultramodern-route-metadata.ts', {
134
- value0: imports.join('\n'),
135
- value1: JSON.stringify(namespace),
136
- value2: routes.map((_, index)=>`route${index}`).join(', ')
137
- });
123
+ function createRouteMetadataModule() {
124
+ return (0, external_fs_io_cjs_namespaceObject.renderFileTemplate)('workspace/apps/shared/src/routes/ultramodern-route-metadata.ts', {});
138
125
  }
139
126
  function createRouteMetaModule(route) {
140
127
  return `const routeMeta = ${JSON.stringify((0, external_types_cjs_namespaceObject.sortJsonValue)(route), null, 2)} as const;
@@ -274,8 +274,8 @@ function validateWorkspace(root, expected) {
274
274
  for (const owner of owners)assert(ids.has(owner.id) || shared.some((pkg)=>pkg.id === owner.id), `Ownership names unknown package ${owner.id}`);
275
275
  const catalogs = record(workspace.catalogs ?? {}, 'workspace catalogs');
276
276
  const catalog = record(catalogs.ultramodern ?? {}, 'ultramodern catalog');
277
- assert((0, external_ultramodern_release_cohort_cjs_namespaceObject.hasCreateReleaseCohort)() || (0, external_ultramodern_release_cohort_cjs_namespaceObject.isCreatePackageSourceCheckout)(), 'Installed ultramodern-create package is missing release-cohort.json');
278
277
  const producer = (0, external_ultramodern_release_cohort_cjs_namespaceObject.hasCreateReleaseCohort)() ? (0, external_ultramodern_release_cohort_cjs_namespaceObject.readCreateReleaseCohort)() : void 0;
278
+ const sourceCheckout = (0, external_ultramodern_release_cohort_cjs_namespaceObject.isCreatePackageSourceCheckout)();
279
279
  const cohort = new Map(producer?.packages.map((pkg)=>[
280
280
  pkg.sourceName,
281
281
  pkg
@@ -299,6 +299,7 @@ function validateWorkspace(root, expected) {
299
299
  const effective = catalogRequest ?? request;
300
300
  assert('string' == typeof effective && effective.length > 0, `${member} ${name} has no catalog entry`);
301
301
  if ('workspace:*' !== request) assert('catalog:ultramodern' === request, `${member} ${name} must use the ultramodern catalog`);
302
+ assert(producer || sourceCheckout || 'workspace:*' === request, `${member} ${name} uses the ultramodern catalog, but the installed ultramodern-create package is missing release-cohort.json. Install a published ultramodern-create release, or generate with --ultramodern-package-source workspace.`);
302
303
  if (producer && 'workspace:*' !== request) {
303
304
  const release = cohort.get(name);
304
305
  assert(release, `${member} ${name} is absent from the installed release cohort`);
@@ -31,6 +31,7 @@ const TANSTACK_ROUTER_VERSION = '1.170.39';
31
31
  const TANSTACK_ROUTER_CORE_VERSION = '1.171.32';
32
32
  const TANSTACK_HISTORY_VERSION = '1.162.4';
33
33
  const MODULE_FEDERATION_VERSION = '2.9.1';
34
+ const MODULE_FEDERATION_MODERN_JS_V3_FORK_VERSION = '2.9.2';
34
35
  const ZEPHYR_RSPACK_PLUGIN_VERSION = '1.4.0';
35
36
  const ZEPHYR_AGENT_VERSION = '1.4.0';
36
37
  const WRANGLER_VERSION = '4.137.0';
@@ -60,6 +61,57 @@ const TYPES_REACT_VERSION = '^19.3.0';
60
61
  const TYPES_REACT_DOM_VERSION = '^19.3.0';
61
62
  const NODE_VERSION = '26.7.0';
62
63
  const PNPM_VERSION = '11.27.1';
64
+ const ULTRAMODERN_PACKAGE_PINS = {
65
+ appDependencies: {
66
+ '@module-federation/bridge-react': `npm:@bleedingdev/mf-bridge-react@${MODULE_FEDERATION_VERSION}`,
67
+ '@module-federation/modern-js-v3': `npm:@bleedingdev/mf-modern-js-v3@${MODULE_FEDERATION_MODERN_JS_V3_FORK_VERSION}`,
68
+ '@module-federation/runtime': `npm:@bleedingdev/mf-runtime@${MODULE_FEDERATION_VERSION}`,
69
+ '@tanstack/react-router': TANSTACK_ROUTER_VERSION,
70
+ i18next: I18NEXT_VERSION,
71
+ 'node-fetch': NODE_FETCH_VERSION,
72
+ react: REACT_VERSION,
73
+ 'react-dom': REACT_DOM_VERSION
74
+ },
75
+ bffEffectDependencies: {
76
+ '@effect/opentelemetry': EFFECT_VERSION,
77
+ effect: `npm:@bleedingdev/effect@${EFFECT_VERSION}`
78
+ },
79
+ appDevDependencies: {
80
+ '@effect/tsgo': EFFECT_TSGO_VERSION,
81
+ '@rsbuild/plugin-tailwindcss': `^${RSBUILD_PLUGIN_TAILWINDCSS_VERSION}`,
82
+ "@typescript/native": `npm:typescript@${TYPESCRIPT_VERSION}`,
83
+ '@types/node': TYPES_NODE_VERSION,
84
+ '@types/react': TYPES_REACT_VERSION,
85
+ '@types/react-dom': TYPES_REACT_DOM_VERSION,
86
+ 'cross-env': CROSS_ENV_VERSION,
87
+ tailwindcss: `^${TAILWIND_VERSION}`,
88
+ typescript: TYPESCRIPT_VERSION,
89
+ wrangler: WRANGLER_VERSION,
90
+ 'zephyr-rspack-plugin': ZEPHYR_RSPACK_PLUGIN_VERSION
91
+ },
92
+ rootDevDependencies: {
93
+ '@effect/tsgo': EFFECT_TSGO_VERSION,
94
+ "@typescript/native": `npm:typescript@${TYPESCRIPT_VERSION}`,
95
+ '@types/node': TYPES_NODE_VERSION,
96
+ 'cross-env': CROSS_ENV_VERSION,
97
+ lefthook: LEFTHOOK_VERSION,
98
+ miniflare: MINIFLARE_VERSION,
99
+ oxlint: OXLINT_VERSION,
100
+ oxfmt: OXFMT_VERSION,
101
+ ultracite: ULTRACITE_VERSION,
102
+ wrangler: WRANGLER_VERSION,
103
+ 'zephyr-agent': ZEPHYR_AGENT_VERSION
104
+ },
105
+ transitiveDependencies: {
106
+ '@cloudflare/workers-types': CLOUDFLARE_WORKERS_TYPES_VERSION,
107
+ '@module-federation/node': MODULE_FEDERATION_NODE_VERSION,
108
+ '@tanstack/history': TANSTACK_HISTORY_VERSION,
109
+ '@tanstack/router-core': TANSTACK_ROUTER_CORE_VERSION,
110
+ "@typescript/native-preview": TYPESCRIPT_NATIVE_PREVIEW_VERSION,
111
+ miniflare: MINIFLARE_VERSION,
112
+ workerd: WORKERD_VERSION
113
+ }
114
+ };
63
115
  __webpack_require__.d(__webpack_exports__, {}, {
64
116
  CLOUDFLARE_COMPATIBILITY_DATE: CLOUDFLARE_COMPATIBILITY_DATE,
65
117
  CLOUDFLARE_WORKERS_TYPES_VERSION: CLOUDFLARE_WORKERS_TYPES_VERSION,
@@ -69,6 +121,7 @@ __webpack_require__.d(__webpack_exports__, {}, {
69
121
  I18NEXT_VERSION: I18NEXT_VERSION,
70
122
  LEFTHOOK_VERSION: LEFTHOOK_VERSION,
71
123
  MINIFLARE_VERSION: MINIFLARE_VERSION,
124
+ MODULE_FEDERATION_MODERN_JS_V3_FORK_VERSION: MODULE_FEDERATION_MODERN_JS_V3_FORK_VERSION,
72
125
  MODULE_FEDERATION_NODE_VERSION: MODULE_FEDERATION_NODE_VERSION,
73
126
  MODULE_FEDERATION_VERSION: MODULE_FEDERATION_VERSION,
74
127
  NODE_FETCH_VERSION: NODE_FETCH_VERSION,
@@ -90,6 +143,7 @@ __webpack_require__.d(__webpack_exports__, {}, {
90
143
  TYPES_REACT_DOM_VERSION: TYPES_REACT_DOM_VERSION,
91
144
  TYPES_REACT_VERSION: TYPES_REACT_VERSION,
92
145
  ULTRACITE_VERSION: ULTRACITE_VERSION,
146
+ ULTRAMODERN_PACKAGE_PINS: ULTRAMODERN_PACKAGE_PINS,
93
147
  WORKERD_VERSION: WORKERD_VERSION,
94
148
  WRANGLER_VERSION: WRANGLER_VERSION,
95
149
  ZEPHYR_AGENT_VERSION: ZEPHYR_AGENT_VERSION,
@@ -103,6 +157,7 @@ exports.EFFECT_VERSION = __webpack_exports__.EFFECT_VERSION;
103
157
  exports.I18NEXT_VERSION = __webpack_exports__.I18NEXT_VERSION;
104
158
  exports.LEFTHOOK_VERSION = __webpack_exports__.LEFTHOOK_VERSION;
105
159
  exports.MINIFLARE_VERSION = __webpack_exports__.MINIFLARE_VERSION;
160
+ exports.MODULE_FEDERATION_MODERN_JS_V3_FORK_VERSION = __webpack_exports__.MODULE_FEDERATION_MODERN_JS_V3_FORK_VERSION;
106
161
  exports.MODULE_FEDERATION_NODE_VERSION = __webpack_exports__.MODULE_FEDERATION_NODE_VERSION;
107
162
  exports.MODULE_FEDERATION_VERSION = __webpack_exports__.MODULE_FEDERATION_VERSION;
108
163
  exports.NODE_FETCH_VERSION = __webpack_exports__.NODE_FETCH_VERSION;
@@ -124,6 +179,7 @@ exports.TYPES_NODE_VERSION = __webpack_exports__.TYPES_NODE_VERSION;
124
179
  exports.TYPES_REACT_DOM_VERSION = __webpack_exports__.TYPES_REACT_DOM_VERSION;
125
180
  exports.TYPES_REACT_VERSION = __webpack_exports__.TYPES_REACT_VERSION;
126
181
  exports.ULTRACITE_VERSION = __webpack_exports__.ULTRACITE_VERSION;
182
+ exports.ULTRAMODERN_PACKAGE_PINS = __webpack_exports__.ULTRAMODERN_PACKAGE_PINS;
127
183
  exports.WORKERD_VERSION = __webpack_exports__.WORKERD_VERSION;
128
184
  exports.WRANGLER_VERSION = __webpack_exports__.WRANGLER_VERSION;
129
185
  exports.ZEPHYR_AGENT_VERSION = __webpack_exports__.ZEPHYR_AGENT_VERSION;
@@ -137,6 +193,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
137
193
  "I18NEXT_VERSION",
138
194
  "LEFTHOOK_VERSION",
139
195
  "MINIFLARE_VERSION",
196
+ "MODULE_FEDERATION_MODERN_JS_V3_FORK_VERSION",
140
197
  "MODULE_FEDERATION_NODE_VERSION",
141
198
  "MODULE_FEDERATION_VERSION",
142
199
  "NODE_FETCH_VERSION",
@@ -158,6 +215,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
158
215
  "TYPES_REACT_DOM_VERSION",
159
216
  "TYPES_REACT_VERSION",
160
217
  "ULTRACITE_VERSION",
218
+ "ULTRAMODERN_PACKAGE_PINS",
161
219
  "WORKERD_VERSION",
162
220
  "WRANGLER_VERSION",
163
221
  "ZEPHYR_AGENT_VERSION",
@@ -36,6 +36,7 @@ __webpack_require__.d(__webpack_exports__, {
36
36
  createWorkspaceRootScriptPlan: ()=>createWorkspaceRootScriptPlan
37
37
  });
38
38
  const external_descriptors_cjs_namespaceObject = require("./descriptors.cjs");
39
+ const external_naming_cjs_namespaceObject = require("./naming.cjs");
39
40
  const external_public_surface_cjs_namespaceObject = require("./public-surface.cjs");
40
41
  const external_tooling_command_catalog_cjs_namespaceObject = require("./tooling-command-catalog.cjs");
41
42
  const GENERATED_POSTINSTALL_SCRIPT = 'ultramodern-create ultramodern skills install --postinstall';
@@ -83,25 +84,30 @@ const workspaceAppPackageScriptNames = {
83
84
  typecheck: 'typecheck'
84
85
  };
85
86
  const createStrictTsgoTypecheckCommand = (packageDir)=>`${packageToolingWrapperCommand(packageDir, 'typecheck')} --project tsconfig.json`;
87
+ const createRoutesGenerateCommand = (app)=>(0, external_descriptors_cjs_namespaceObject.appEmitsBrowserUi)(app) ? `pnpm --dir ${(0, external_naming_cjs_namespaceObject.relativeRootFor)(app.directory)} exec ${toolingCommand('routesGenerate')} --app ${app.id} --manifest-only` : void 0;
86
88
  function createWorkspaceAppScriptPlan(app) {
89
+ const routesGenerate = createRoutesGenerateCommand(app);
87
90
  const buildSteps = [
88
- `${(0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'dist')} --sync-route-metadata`,
91
+ routesGenerate,
89
92
  'modern build',
90
93
  (0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'dist'),
91
94
  'cross-env MODERNJS_DEPLOY=node modern deploy --skip-build'
92
95
  ].filter((step)=>Boolean(step));
93
96
  const cloudflareBuildSteps = [
94
- `${(0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'cloudflare-dist')} --sync-route-metadata`,
97
+ routesGenerate,
95
98
  'cross-env MODERNJS_DEPLOY=cloudflare modern build',
96
99
  (0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'cloudflare-dist'),
97
100
  'cross-env MODERNJS_DEPLOY=cloudflare modern deploy --skip-build',
98
101
  `${packageToolingWrapperCommand(app.directory, 'cloudflareOutputVerify')} --app ${app.id}`
99
102
  ].filter((step)=>Boolean(step));
100
103
  return {
101
- dev: `${(0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'dist')} --sync-route-metadata && modern dev`,
104
+ dev: [
105
+ routesGenerate,
106
+ 'modern dev'
107
+ ].filter((step)=>Boolean(step)).join(' && '),
102
108
  build: buildSteps.join(' && '),
103
109
  cloudflareBuild: cloudflareBuildSteps.join(' && '),
104
- cloudflareDeploy: 'cross-env ULTRAMODERN_CLOUDFLARE_REQUIRE_PUBLIC_URLS=true pnpm run cloudflare:build && wrangler deploy --config .output/wrangler.json',
110
+ cloudflareDeploy: 'cross-env ULTRAMODERN_CLOUDFLARE_REQUIRE_PUBLIC_URLS=true ZE_FAIL_BUILD=true pnpm run cloudflare:build && wrangler deploy --config .output/wrangler.json',
105
111
  cloudflarePreview: 'pnpm run cloudflare:build && wrangler dev --config .output/wrangler.json',
106
112
  cloudflareProof: `${packageToolingWrapperCommand(app.directory, 'cloudflareProof')} --app ${app.id}`,
107
113
  serve: 'modern serve',
@@ -140,7 +146,6 @@ function createReferencedRemoteDeclarationBuilds(remotes) {
140
146
  }
141
147
  function createWorkspaceRootScriptPlan(remotes = [], options = {}) {
142
148
  const hasRemotes = remotes.length > 0;
143
- remotes.some(external_descriptors_cjs_namespaceObject.appHasApi);
144
149
  const shells = options.shells && options.shells.length > 0 ? options.shells : [
145
150
  external_descriptors_cjs_namespaceObject.shellApp
146
151
  ];