@bleedingdev/modern-js-create 3.4.0-ultramodern.9 → 3.5.0-ultramodern.1

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 (135) hide show
  1. package/README.md +49 -23
  2. package/dist/cjs/index.cjs +37 -4
  3. package/dist/cjs/locale/en.cjs +12 -2
  4. package/dist/cjs/locale/zh.cjs +12 -2
  5. package/dist/cjs/ultramodern-tooling/commands.cjs +431 -0
  6. package/dist/cjs/ultramodern-tooling/config.cjs +172 -0
  7. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +87 -75
  8. package/dist/cjs/ultramodern-workspace/{effect-api.cjs → api.cjs} +207 -208
  9. package/dist/cjs/ultramodern-workspace/bridge-config.cjs +327 -0
  10. package/dist/cjs/ultramodern-workspace/codesmith.cjs +1 -0
  11. package/dist/cjs/ultramodern-workspace/contracts.cjs +128 -657
  12. package/dist/cjs/ultramodern-workspace/demo-components.cjs +12 -12
  13. package/dist/cjs/ultramodern-workspace/descriptors.cjs +25 -25
  14. package/dist/cjs/ultramodern-workspace/fs-io.cjs +117 -0
  15. package/dist/cjs/ultramodern-workspace/generation-result.cjs +5 -5
  16. package/dist/cjs/ultramodern-workspace/index.cjs +4 -0
  17. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +571 -0
  18. package/dist/cjs/ultramodern-workspace/module-federation.cjs +39 -12
  19. package/dist/cjs/ultramodern-workspace/overlays.cjs +2 -2
  20. package/dist/cjs/ultramodern-workspace/package-json.cjs +58 -41
  21. package/dist/cjs/ultramodern-workspace/policy.cjs +4 -4
  22. package/dist/cjs/ultramodern-workspace/public-api.cjs +4 -0
  23. package/dist/cjs/ultramodern-workspace/public-surface.cjs +2 -2
  24. package/dist/cjs/ultramodern-workspace/versions.cjs +15 -0
  25. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +120 -50
  26. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +64 -21
  27. package/dist/esm/index.js +37 -4
  28. package/dist/esm/locale/en.js +12 -2
  29. package/dist/esm/locale/zh.js +12 -2
  30. package/dist/esm/ultramodern-tooling/commands.js +378 -0
  31. package/dist/esm/ultramodern-tooling/config.js +120 -0
  32. package/dist/esm/ultramodern-workspace/add-vertical.js +88 -79
  33. package/dist/esm/ultramodern-workspace/{effect-api.js → api.js} +146 -147
  34. package/dist/esm/ultramodern-workspace/bridge-config.js +270 -0
  35. package/dist/esm/ultramodern-workspace/codesmith.js +1 -0
  36. package/dist/esm/ultramodern-workspace/contracts.js +130 -611
  37. package/dist/esm/ultramodern-workspace/demo-components.js +13 -13
  38. package/dist/esm/ultramodern-workspace/descriptors.js +11 -11
  39. package/dist/esm/ultramodern-workspace/fs-io.js +116 -2
  40. package/dist/esm/ultramodern-workspace/generation-result.js +6 -6
  41. package/dist/esm/ultramodern-workspace/index.js +1 -0
  42. package/dist/esm/ultramodern-workspace/mf-validation.js +516 -0
  43. package/dist/esm/ultramodern-workspace/module-federation.js +40 -13
  44. package/dist/esm/ultramodern-workspace/overlays.js +2 -2
  45. package/dist/esm/ultramodern-workspace/package-json.js +57 -40
  46. package/dist/esm/ultramodern-workspace/policy.js +5 -5
  47. package/dist/esm/ultramodern-workspace/public-api.js +1 -0
  48. package/dist/esm/ultramodern-workspace/public-surface.js +2 -2
  49. package/dist/esm/ultramodern-workspace/versions.js +7 -1
  50. package/dist/esm/ultramodern-workspace/workspace-scripts.js +108 -34
  51. package/dist/esm/ultramodern-workspace/write-workspace.js +66 -26
  52. package/dist/esm-node/index.js +37 -4
  53. package/dist/esm-node/locale/en.js +12 -2
  54. package/dist/esm-node/locale/zh.js +12 -2
  55. package/dist/esm-node/ultramodern-tooling/commands.js +379 -0
  56. package/dist/esm-node/ultramodern-tooling/config.js +121 -0
  57. package/dist/esm-node/ultramodern-workspace/add-vertical.js +88 -79
  58. package/dist/esm-node/ultramodern-workspace/{effect-api.js → api.js} +146 -147
  59. package/dist/esm-node/ultramodern-workspace/bridge-config.js +271 -0
  60. package/dist/esm-node/ultramodern-workspace/codesmith.js +1 -0
  61. package/dist/esm-node/ultramodern-workspace/contracts.js +130 -611
  62. package/dist/esm-node/ultramodern-workspace/demo-components.js +13 -13
  63. package/dist/esm-node/ultramodern-workspace/descriptors.js +11 -11
  64. package/dist/esm-node/ultramodern-workspace/fs-io.js +116 -2
  65. package/dist/esm-node/ultramodern-workspace/generation-result.js +6 -6
  66. package/dist/esm-node/ultramodern-workspace/index.js +1 -0
  67. package/dist/esm-node/ultramodern-workspace/mf-validation.js +517 -0
  68. package/dist/esm-node/ultramodern-workspace/module-federation.js +40 -13
  69. package/dist/esm-node/ultramodern-workspace/overlays.js +2 -2
  70. package/dist/esm-node/ultramodern-workspace/package-json.js +57 -40
  71. package/dist/esm-node/ultramodern-workspace/policy.js +5 -5
  72. package/dist/esm-node/ultramodern-workspace/public-api.js +1 -0
  73. package/dist/esm-node/ultramodern-workspace/public-surface.js +2 -2
  74. package/dist/esm-node/ultramodern-workspace/versions.js +7 -1
  75. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +108 -34
  76. package/dist/esm-node/ultramodern-workspace/write-workspace.js +66 -26
  77. package/dist/types/locale/en.d.ts +10 -0
  78. package/dist/types/locale/index.d.ts +20 -0
  79. package/dist/types/locale/zh.d.ts +10 -0
  80. package/dist/types/ultramodern-tooling/commands.d.ts +1 -0
  81. package/dist/types/ultramodern-tooling/config.d.ts +43 -0
  82. package/dist/types/ultramodern-workspace/add-vertical.d.ts +5 -2
  83. package/dist/types/ultramodern-workspace/api.d.ts +73 -0
  84. package/dist/types/ultramodern-workspace/bridge-config.d.ts +64 -0
  85. package/dist/types/ultramodern-workspace/codesmith.d.ts +1 -0
  86. package/dist/types/ultramodern-workspace/contracts.d.ts +2 -17
  87. package/dist/types/ultramodern-workspace/descriptors.d.ts +10 -10
  88. package/dist/types/ultramodern-workspace/fs-io.d.ts +1 -0
  89. package/dist/types/ultramodern-workspace/index.d.ts +2 -0
  90. package/dist/types/ultramodern-workspace/mf-validation.d.ts +27 -0
  91. package/dist/types/ultramodern-workspace/package-json.d.ts +5 -4
  92. package/dist/types/ultramodern-workspace/public-api.d.ts +2 -0
  93. package/dist/types/ultramodern-workspace/types.d.ts +9 -7
  94. package/dist/types/ultramodern-workspace/versions.d.ts +6 -0
  95. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +2 -7
  96. package/dist/types/ultramodern-workspace/write-workspace.d.ts +4 -2
  97. package/package.json +5 -3
  98. package/template-workspace/{.agents → .codex}/skills-lock.json +12 -12
  99. package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +2 -0
  100. package/template-workspace/.gitignore.handlebars +3 -0
  101. package/template-workspace/AGENTS.md.handlebars +11 -5
  102. package/template-workspace/README.md.handlebars +55 -13
  103. package/template-workspace/oxfmt.config.ts +1 -0
  104. package/template-workspace/oxlint.config.ts +1 -0
  105. package/template-workspace/patches/@tanstack__router-core@1.171.13.patch +51 -0
  106. package/template-workspace/pnpm-workspace.yaml.handlebars +7 -0
  107. package/template-workspace/scripts/bootstrap-agent-skills.mjs +77 -67
  108. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +51 -8
  109. package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +366 -0
  110. package/templates/workspace-scripts/{check-ultramodern-i18n-boundaries.mjs → check-ultramodern-i18n-boundaries.mts} +1 -1
  111. package/templates/workspace-scripts/generate-public-surface-assets.mjs +246 -9
  112. package/templates/workspace-scripts/proof-cloudflare-version.mjs +277 -9
  113. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +35 -10
  114. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +165 -2
  115. package/templates/workspace-scripts/ultramodern-typecheck.mjs +4 -2
  116. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +842 -84
  117. package/dist/types/ultramodern-workspace/effect-api.d.ts +0 -73
  118. /package/template-workspace/{.agents → .codex}/rstackjs-agent-skills-LICENSE +0 -0
  119. /package/template-workspace/{.agents → .codex}/skills/rsbuild-best-practices/SKILL.md +0 -0
  120. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/SKILL.md +0 -0
  121. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/command-map.md +0 -0
  122. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/common-analysis-patterns.md +0 -0
  123. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-common.md +0 -0
  124. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-rspack.md +0 -0
  125. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-webpack.md +0 -0
  126. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor.md +0 -0
  127. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/rsdoctor-data-types.md +0 -0
  128. /package/template-workspace/{.agents → .codex}/skills/rslib-best-practices/SKILL.md +0 -0
  129. /package/template-workspace/{.agents → .codex}/skills/rslib-modern-package/SKILL.md +0 -0
  130. /package/template-workspace/{.agents → .codex}/skills/rspack-best-practices/SKILL.md +0 -0
  131. /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/SKILL.md +0 -0
  132. /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/references/bottlenecks.md +0 -0
  133. /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/references/tracing-guide.md +0 -0
  134. /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/scripts/analyze_trace.js +0 -0
  135. /package/template-workspace/{.agents → .codex}/skills/rstest-best-practices/SKILL.md +0 -0
@@ -1,11 +1,11 @@
1
1
  import "node:module";
2
2
  import { WORKSPACE_PACKAGE_VERSION, modernPackageSpecifier } from "../ultramodern-package-source.js";
3
- import { appHasEffectApi, remoteDependencyAlias, resolveRemoteRefs, sharedPackages, shellApp, verticalEffectApps, zephyrRemoteDependency } from "./descriptors.js";
3
+ import { appHasApi, remoteDependencyAlias, resolveRemoteRefs, sharedPackages, shellApp, verticalApiApps, zephyrRemoteDependency } from "./descriptors.js";
4
4
  import { readFileTemplate } from "./fs-io.js";
5
5
  import { packageName, relativeRootFor } from "./naming.js";
6
6
  import { createPublicSurfaceGenerationCommand } from "./public-surface.js";
7
7
  import { EFFECT_TSGO_VERSION, I18NEXT_VERSION, LEFTHOOK_VERSION, MODULE_FEDERATION_VERSION, NODE_FETCH_VERSION, OXFMT_VERSION, OXLINT_VERSION, PNPM_VERSION, POSTCSS_VERSION, REACT_DOM_VERSION, REACT_ROUTER_VERSION, REACT_VERSION, TAILWIND_POSTCSS_VERSION, TAILWIND_VERSION, TANSTACK_ROUTER_VERSION, TYPESCRIPT_NATIVE_PREVIEW_VERSION, TYPESCRIPT_VERSION, TYPES_REACT_DOM_VERSION, TYPES_REACT_VERSION, ULTRACITE_VERSION, WRANGLER_VERSION, ZEPHYR_AGENT_VERSION, ZEPHYR_RSPACK_PLUGIN_VERSION } from "./versions.js";
8
- const createEffectTsgoTypecheckCommand = (packageDir)=>`node ${relativeRootFor(packageDir)}/scripts/ultramodern-typecheck.mjs --project tsconfig.json`;
8
+ const createStrictTsgoTypecheckCommand = (packageDir)=>`node ${relativeRootFor(packageDir)}/scripts/ultramodern-typecheck.mts --project tsconfig.json`;
9
9
  const effectDiagnostics = [
10
10
  'anyUnknownInErrorContext',
11
11
  'classSelfMismatch',
@@ -81,7 +81,7 @@ const effectDiagnostics = [
81
81
  'unnecessaryPipe',
82
82
  'unnecessaryPipeChain'
83
83
  ];
84
- function appDependencies(scope, packageSource, app, remotes = []) {
84
+ function appDependencies(scope, packageSource, app, remotes = [], bridge) {
85
85
  const dependencies = {
86
86
  '@modern-js/plugin-tanstack': modernPackageSpecifier('@modern-js/plugin-tanstack', packageSource),
87
87
  '@modern-js/plugin-i18n': modernPackageSpecifier('@modern-js/plugin-i18n', packageSource),
@@ -96,14 +96,16 @@ function appDependencies(scope, packageSource, app, remotes = []) {
96
96
  [packageName(scope, 'shared-design-tokens')]: WORKSPACE_PACKAGE_VERSION,
97
97
  react: REACT_VERSION,
98
98
  'react-dom': REACT_DOM_VERSION,
99
- 'react-router': REACT_ROUTER_VERSION
99
+ 'react-router': REACT_ROUTER_VERSION,
100
+ 'react-router-dom': REACT_ROUTER_VERSION
100
101
  };
102
+ for (const dependency of bridge?.dependencies ?? [])dependencies[dependency] = WORKSPACE_PACKAGE_VERSION;
101
103
  if ('shell' === app.kind) {
102
104
  dependencies['@modern-js/plugin-bff'] = modernPackageSpecifier('@modern-js/plugin-bff', packageSource);
103
- for (const remote of verticalEffectApps(remotes))dependencies[packageName(scope, remote.packageSuffix)] = WORKSPACE_PACKAGE_VERSION;
105
+ for (const remote of verticalApiApps(remotes))dependencies[packageName(scope, remote.packageSuffix)] = WORKSPACE_PACKAGE_VERSION;
104
106
  }
105
107
  for (const remote of resolveRemoteRefs(app, remotes))dependencies[packageName(scope, remote.packageSuffix)] = WORKSPACE_PACKAGE_VERSION;
106
- if (appHasEffectApi(app)) dependencies['@modern-js/plugin-bff'] = modernPackageSpecifier('@modern-js/plugin-bff', packageSource);
108
+ if (appHasApi(app)) dependencies['@modern-js/plugin-bff'] = modernPackageSpecifier('@modern-js/plugin-bff', packageSource);
107
109
  return dependencies;
108
110
  }
109
111
  function appDevDependencies(packageSource, enableTailwind) {
@@ -124,12 +126,28 @@ function appDevDependencies(packageSource, enableTailwind) {
124
126
  wrangler: WRANGLER_VERSION
125
127
  };
126
128
  }
127
- function createRootPackageJson(scope, packageSource, remotes = []) {
129
+ function createRootPackageJson(scope, packageSource, remotes = [], bridge) {
128
130
  const shellFilter = `--filter ${packageName(scope, shellApp.packageSuffix)}`;
129
131
  const remoteFilters = remotes.map((remote)=>`--filter ${packageName(scope, remote.packageSuffix)}`);
130
132
  const remoteBuildPrefix = remotes.length > 0 ? 'ULTRAMODERN_ZEPHYR=false pnpm -r --filter "./verticals/*" run build && ' : '';
131
133
  const remoteCloudflareBuildPrefix = remotes.length > 0 ? 'pnpm -r --filter "./verticals/*" run cloudflare:build && ' : '';
132
134
  const remoteCloudflareDeployPrefix = remotes.length > 0 ? 'pnpm -r --filter "./verticals/*" run cloudflare:deploy && ' : '';
135
+ const generatedPackageTypecheck = 'pnpm -r --filter "./apps/*" --filter "./verticals/*" --filter "./packages/*" run typecheck';
136
+ const typecheck = bridge ? generatedPackageTypecheck : "node ./scripts/ultramodern-typecheck.mts --build tsconfig.json";
137
+ const bridgeScripts = bridge ? {
138
+ ...Object.fromEntries(bridge.gates.map((gate)=>[
139
+ `bridge:${gate.name}`,
140
+ `${gate.cwd ? `cd ${gate.cwd} && ` : ''}${gate.command}`
141
+ ])),
142
+ 'bridge:check': bridge.gates.map((gate)=>`pnpm run bridge:${gate.name}`).join(' && ')
143
+ } : {};
144
+ const bridgeCheck = bridge ? ' && pnpm bridge:check' : '';
145
+ const workspacePackages = [
146
+ 'apps/*',
147
+ 'verticals/*',
148
+ 'packages/*',
149
+ ...bridge?.workspacePackages.map((entry)=>entry.pattern) ?? []
150
+ ];
133
151
  return {
134
152
  private: true,
135
153
  name: scope,
@@ -151,30 +169,29 @@ function createRootPackageJson(scope, packageSource, remotes = []) {
151
169
  'format:check': "oxfmt --check . '!repos/**'",
152
170
  lint: 'oxlint apps verticals packages',
153
171
  'lint:fix': 'oxlint apps verticals packages --fix',
154
- typecheck: "node ./scripts/ultramodern-typecheck.mjs --build tsconfig.json",
172
+ typecheck,
155
173
  'cloudflare:build': `${remoteCloudflareBuildPrefix}pnpm --filter "./apps/shell-super-app" run cloudflare:build && pnpm mf:types`,
156
174
  'cloudflare:deploy': `${remoteCloudflareDeployPrefix}pnpm --filter "./apps/shell-super-app" run cloudflare:deploy`,
157
- 'cloudflare:proof': "node ./scripts/proof-cloudflare-version.mjs --out .codex/reports/cloudflare-version-proof/public-url-proof.json",
158
- 'skills:install': "node ./scripts/bootstrap-agent-skills.mjs",
159
- 'skills:check': "node ./scripts/bootstrap-agent-skills.mjs --check",
160
- 'agents:refs:install': "node ./scripts/setup-agent-reference-repos.mjs",
161
- 'agents:refs:check': "node ./scripts/setup-agent-reference-repos.mjs --check",
162
- 'mf:types': "node ./scripts/assert-mf-types.mjs",
163
- 'performance:readiness': "node ./scripts/ultramodern-performance-readiness.mjs",
164
- 'contract:check': "node ./scripts/validate-ultramodern-workspace.mjs",
165
- 'i18n:boundaries': "node ./scripts/check-ultramodern-i18n-boundaries.mjs",
166
- postinstall: "oxfmt . '!repos/**' && node ./scripts/bootstrap-agent-skills.mjs --postinstall",
167
- check: 'pnpm format:check && pnpm lint && pnpm typecheck && pnpm skills:check && pnpm i18n:boundaries && pnpm contract:check && pnpm performance:readiness'
175
+ 'cloudflare:proof': "node ./scripts/proof-cloudflare-version.mts --out .codex/reports/cloudflare-version-proof/public-url-proof.json",
176
+ 'skills:install': "node ./scripts/bootstrap-agent-skills.mts",
177
+ 'skills:check': "node ./scripts/bootstrap-agent-skills.mts --check",
178
+ 'agents:refs:install': "node ./scripts/setup-agent-reference-repos.mts",
179
+ 'agents:refs:check': "node ./scripts/setup-agent-reference-repos.mts --check",
180
+ 'mf:types': "node ./scripts/assert-mf-types.mts",
181
+ 'performance:readiness': "node ./scripts/ultramodern-performance-readiness.mts",
182
+ 'migrate:strict-effect': "node ./scripts/migrate-strict-effect.mts",
183
+ 'contract:check': "node ./scripts/validate-ultramodern-workspace.mts",
184
+ 'api:check': "node ./scripts/check-ultramodern-api-boundaries.mts",
185
+ 'i18n:boundaries': "node ./scripts/check-ultramodern-i18n-boundaries.mts",
186
+ ...bridgeScripts,
187
+ postinstall: "oxfmt . '!repos/**' && node ./scripts/bootstrap-agent-skills.mts --postinstall",
188
+ check: `pnpm format:check && pnpm lint && pnpm typecheck && pnpm skills:check && pnpm i18n:boundaries && pnpm api:check && pnpm contract:check && pnpm performance:readiness${bridgeCheck}`
168
189
  },
169
190
  engines: {
170
191
  node: '>=26',
171
192
  pnpm: '>=11'
172
193
  },
173
- workspaces: [
174
- 'apps/*',
175
- 'verticals/*',
176
- 'packages/*'
177
- ],
194
+ workspaces: workspacePackages,
178
195
  modernjs: {
179
196
  preset: 'presetUltramodern',
180
197
  workspace: 'ultramodern-superapp',
@@ -182,7 +199,7 @@ function createRootPackageJson(scope, packageSource, remotes = []) {
182
199
  ownership: './topology/ownership.json',
183
200
  packageSource: {
184
201
  strategy: packageSource.strategy,
185
- config: './.modernjs/ultramodern-package-source.json'
202
+ config: './.modernjs/ultramodern.json'
186
203
  }
187
204
  },
188
205
  devDependencies: {
@@ -301,10 +318,10 @@ function createPackageTsConfig(packageDir, options = {}) {
301
318
  function createAppTsConfig(app, remotes = []) {
302
319
  const references = [
303
320
  ...sharedPackages.map((sharedPackage)=>sharedPackage.directory),
304
- ...'shell' === app.kind ? verticalEffectApps(remotes).map((remote)=>remote.directory) : resolveRemoteRefs(app, remotes).map((remote)=>remote.directory)
321
+ ...'shell' === app.kind ? verticalApiApps(remotes).map((remote)=>remote.directory) : resolveRemoteRefs(app, remotes).map((remote)=>remote.directory)
305
322
  ];
306
323
  return createPackageTsConfig(app.directory, {
307
- includeApi: appHasEffectApi(app),
324
+ includeApi: appHasApi(app),
308
325
  references
309
326
  });
310
327
  }
@@ -340,7 +357,7 @@ function createRootTsConfig(apps = []) {
340
357
  ]
341
358
  };
342
359
  }
343
- function createAppPackage(scope, app, packageSource, enableTailwind, remotes = []) {
360
+ function createAppPackage(scope, app, packageSource, enableTailwind, remotes = [], bridge) {
344
361
  const publicSurfaceBuildCommand = createPublicSurfaceGenerationCommand(app, 'dist');
345
362
  const publicSurfaceCloudflareBuildCommand = createPublicSurfaceGenerationCommand(app, 'dist');
346
363
  const publicSurfaceCloudflareOutputCommand = createPublicSurfaceGenerationCommand(app, 'cloudflare');
@@ -354,33 +371,33 @@ function createAppPackage(scope, app, packageSource, enableTailwind, remotes = [
354
371
  version: '0.1.0',
355
372
  scripts: {
356
373
  dev: 'modern dev',
357
- build: app.exposes ? `ULTRAMODERN_ZEPHYR=false modern build && ${publicSurfaceBuildCommand} && node ${relativeRootFor(app.directory)}/scripts/assert-mf-types.mjs` : `ULTRAMODERN_ZEPHYR=false modern build && ${publicSurfaceBuildCommand}`,
374
+ build: app.exposes ? `ULTRAMODERN_ZEPHYR=false modern build && ${publicSurfaceBuildCommand} && node ${relativeRootFor(app.directory)}/scripts/assert-mf-types.mts` : `ULTRAMODERN_ZEPHYR=false modern build && ${publicSurfaceBuildCommand}`,
358
375
  'cloudflare:build': `ULTRAMODERN_ZEPHYR=false MODERNJS_DEPLOY=cloudflare modern build && ${publicSurfaceCloudflareBuildCommand} && ULTRAMODERN_ZEPHYR=false MODERNJS_DEPLOY=cloudflare modern deploy && ${publicSurfaceCloudflareOutputCommand}`,
359
376
  'cloudflare:deploy': 'ULTRAMODERN_CLOUDFLARE_REQUIRE_PUBLIC_URLS=true pnpm run cloudflare:build && wrangler deploy --config .output/wrangler.json',
360
377
  'cloudflare:preview': 'pnpm run cloudflare:build && wrangler dev --config .output/wrangler.json',
361
- 'cloudflare:proof': `node ${relativeRootFor(app.directory)}/scripts/proof-cloudflare-version.mjs --app ${app.id}`,
378
+ 'cloudflare:proof': `node ${relativeRootFor(app.directory)}/scripts/proof-cloudflare-version.mts --app ${app.id}`,
362
379
  serve: 'modern serve',
363
- typecheck: createEffectTsgoTypecheckCommand(app.directory)
380
+ typecheck: createStrictTsgoTypecheckCommand(app.directory)
364
381
  },
365
382
  modernjs: {
366
383
  preset: 'presetUltramodern',
367
384
  role: 'shell' === app.kind ? 'shell' : 'module-federation-remote',
368
385
  appId: app.id,
369
386
  topology: `${relativeRootFor(app.directory)}/topology/reference-topology.json`,
370
- ...appHasEffectApi(app) ? {
371
- apiRuntime: 'effect-bff'
387
+ ...appHasApi(app) ? {
388
+ apiRuntime: 'effect'
372
389
  } : {}
373
390
  },
374
391
  'zephyr:dependencies': createZephyrDependencies(scope, app, remotes),
375
- dependencies: appDependencies(scope, packageSource, app, remotes),
392
+ dependencies: appDependencies(scope, packageSource, app, remotes, bridge),
376
393
  devDependencies: appDevDependencies(packageSource, enableTailwind)
377
394
  };
378
- if (appHasEffectApi(app)) Object.assign(packageExports, {
379
- './effect/client': `./src/effect/${app.effectApi.stem}-client.ts`,
380
- './shared/effect/api': './shared/effect/api.ts'
395
+ if (appHasApi(app)) Object.assign(packageExports, {
396
+ './api': './shared/api.ts',
397
+ './api/client': `./src/api/${app.api.stem}-client.ts`
381
398
  });
382
399
  else if ('shell' === app.kind) Object.assign(packageExports, {
383
- './effect/clients': './src/effect/vertical-clients.ts'
400
+ './api/clients': './src/api/vertical-clients.ts'
384
401
  });
385
402
  if (Object.keys(packageExports).length > 0) packageJson.exports = packageExports;
386
403
  return packageJson;
@@ -396,7 +413,7 @@ function createSharedPackage(scope, id, description) {
396
413
  '.': './src/index.ts'
397
414
  },
398
415
  scripts: {
399
- typecheck: createEffectTsgoTypecheckCommand(`packages/${id}`)
416
+ typecheck: createStrictTsgoTypecheckCommand(`packages/${id}`)
400
417
  },
401
418
  devDependencies: {
402
419
  '@effect/tsgo': EFFECT_TSGO_VERSION,
@@ -412,4 +429,4 @@ function createSharedPackage(scope, id, description) {
412
429
  function createSharedContractsIndex() {
413
430
  return readFileTemplate('packages/shared-contracts-index.ts');
414
431
  }
415
- export { appDependencies, appDevDependencies, createAppMfTypesTsConfig, createAppPackage, createAppTsConfig, createEffectTsgoTypecheckCommand, createPackageTsConfig, createRootPackageJson, createRootTsConfig, createSharedContractsIndex, createSharedPackage, createSharedPackageTsConfig, createTsConfigBase, createZephyrDependencies, effectDiagnostics };
432
+ export { appDependencies, appDevDependencies, createAppMfTypesTsConfig, createAppPackage, createAppTsConfig, createPackageTsConfig, createRootPackageJson, createRootTsConfig, createSharedContractsIndex, createSharedPackage, createSharedPackageTsConfig, createStrictTsgoTypecheckCommand, createTsConfigBase, createZephyrDependencies, effectDiagnostics };
@@ -1,5 +1,5 @@
1
1
  import "node:module";
2
- import { appHasEffectApi, appI18nNamespace, createCloudflarePublicUrlEnv, createCloudflareWorkerName, effectApiPrefix, effectApiStem } from "./descriptors.js";
2
+ import { appHasApi, appI18nNamespace, createCloudflarePublicUrlEnv, createCloudflareWorkerName, resolveApiPrefix, resolveApiStem } from "./descriptors.js";
3
3
  import { createLocalisedUrlsMap } from "./routes.js";
4
4
  import { isRecord } from "./types.js";
5
5
  import { CLOUDFLARE_COMPATIBILITY_DATE } from "./versions.js";
@@ -16,8 +16,8 @@ function createCloudflareProofRoute(app) {
16
16
  ssr: localizedPath ?? '/en',
17
17
  mfManifest: '/mf-manifest.json',
18
18
  locale: `/locales/en/${appI18nNamespace(app)}.json`,
19
- ...appHasEffectApi(app) ? {
20
- effectReadiness: `${effectApiPrefix(app)}/effect/${effectApiStem(app)}/readiness`
19
+ ...appHasApi(app) ? {
20
+ apiReadiness: `${resolveApiPrefix(app)}/${resolveApiStem(app)}/readiness`
21
21
  } : {}
22
22
  };
23
23
  }
@@ -108,7 +108,7 @@ const PUBLIC_WEBSITE_POLICY = {
108
108
  requireWebManifestWhenPresent: true
109
109
  },
110
110
  statusCodes: {
111
- notFoundRoute: '/__ultramodern-smoke-missing',
111
+ notFoundRoute: '/__ultramodern-smoke-missing/nope',
112
112
  unknownRouteStatus: 404
113
113
  },
114
114
  indexing: {
@@ -176,7 +176,7 @@ function createCloudflareDeployContract(scope, app) {
176
176
  security: createCloudflareSecurityContract(),
177
177
  qualityGates: createPublicWebsiteQualityGateContract(),
178
178
  evidence: {
179
- proofScript: "scripts/proof-cloudflare-version.mjs",
179
+ proofScript: "scripts/proof-cloudflare-version.mts",
180
180
  reportDefault: '.codex/reports/cloudflare-version-proof/public-url-proof.json'
181
181
  }
182
182
  };
@@ -1,3 +1,4 @@
1
1
  import "node:module";
2
2
  export { addUltramodernVertical, planUltramodernVertical } from "./add-vertical.js";
3
+ export { normalizeUltramodernBridgeConfig } from "./bridge-config.js";
3
4
  export { generateUltramodernWorkspace } from "./write-workspace.js";
@@ -49,7 +49,7 @@ function createPublicSurfaceOutputFiles(app) {
49
49
  ];
50
50
  }
51
51
  function createPublicSurfaceGenerationCommand(app, target, requirePublicOrigin = false) {
52
- return `node ${relativeRootFor(app.directory)}/scripts/generate-public-surface-assets.mjs --app ${app.id} --target ${target}${requirePublicOrigin ? ' --require-public-origin' : ''}`;
52
+ return `node ${relativeRootFor(app.directory)}/scripts/generate-public-surface-assets.mts --app ${app.id} --target ${target}${requirePublicOrigin ? ' --require-public-origin' : ''}`;
53
53
  }
54
54
  function rewriteWorkspaceAssetsForApp(workspaceRoot, app) {
55
55
  for (const relativePath of publicSurfaceManagedSourceAssetPaths)node_fs.rmSync(node_path.join(workspaceRoot, app.directory, relativePath), {
@@ -65,7 +65,7 @@ function createPublicSurfaceContract(app) {
65
65
  generatedManifest: './src/routes/ultramodern-route-metadata',
66
66
  source: 'route-owned-public-routes',
67
67
  metadataExport: './src/routes/ultramodern-route-metadata',
68
- generator: "scripts/generate-public-surface-assets.mjs",
68
+ generator: "scripts/generate-public-surface-assets.mts",
69
69
  outputRoot: 'dist/public',
70
70
  cloudflareOutputRoot: '.output/public',
71
71
  privateRoutePolicy: 'omit-from-generated-public-surface',
@@ -1,5 +1,6 @@
1
1
  import "node:module";
2
2
  const TANSTACK_ROUTER_VERSION = '1.170.16';
3
+ const TANSTACK_ROUTER_CORE_VERSION = '1.171.13';
3
4
  const MODULE_FEDERATION_VERSION = '2.6.0';
4
5
  const ZEPHYR_RSPACK_PLUGIN_VERSION = '1.1.1';
5
6
  const ZEPHYR_AGENT_VERSION = '1.1.1';
@@ -8,6 +9,8 @@ const CLOUDFLARE_COMPATIBILITY_DATE = '2026-06-02';
8
9
  const TAILWIND_VERSION = '4.3.1';
9
10
  const TAILWIND_POSTCSS_VERSION = '4.3.1';
10
11
  const POSTCSS_VERSION = '8.5.15';
12
+ const EFFECT_VERSION = '4.0.0-beta.89';
13
+ const EFFECT_VITEST_VERSION = '4.0.0-beta.89';
11
14
  const EFFECT_TSGO_VERSION = '0.14.6';
12
15
  const TYPESCRIPT_STABLE_VERSION = '6.0.3';
13
16
  const TYPESCRIPT_NATIVE_PREVIEW_VERSION = '7.0.0-dev.20260624.1';
@@ -29,8 +32,11 @@ const RSTACK_AGENT_SKILLS_COMMIT = '61c948b42512e223bad44b83af4080eba48b2677';
29
32
  const MODULE_FEDERATION_AGENT_SKILLS_COMMIT = '07bb5b6c43ad457609e00c081b72d4c42508ec76';
30
33
  const ultramodernWorkspaceVersions = {
31
34
  tanstackRouter: TANSTACK_ROUTER_VERSION,
35
+ tanstackRouterCore: TANSTACK_ROUTER_CORE_VERSION,
32
36
  moduleFederation: MODULE_FEDERATION_VERSION,
37
+ effect: EFFECT_VERSION,
38
+ effectVitest: EFFECT_VITEST_VERSION,
33
39
  tailwind: TAILWIND_VERSION,
34
40
  tailwindPostcss: TAILWIND_POSTCSS_VERSION
35
41
  };
36
- export { CLOUDFLARE_COMPATIBILITY_DATE, EFFECT_TSGO_VERSION, I18NEXT_VERSION, LEFTHOOK_VERSION, MODULE_FEDERATION_AGENT_SKILLS_COMMIT, MODULE_FEDERATION_VERSION, NODE_FETCH_VERSION, NODE_VERSION, OXFMT_VERSION, OXLINT_VERSION, PNPM_VERSION, POSTCSS_VERSION, REACT_DOM_VERSION, REACT_ROUTER_VERSION, REACT_VERSION, RSTACK_AGENT_SKILLS_COMMIT, TAILWIND_POSTCSS_VERSION, TAILWIND_VERSION, TANSTACK_ROUTER_VERSION, TYPESCRIPT_NATIVE_PREVIEW_VERSION, TYPESCRIPT_STABLE_VERSION, TYPESCRIPT_VERSION, TYPES_REACT_DOM_VERSION, TYPES_REACT_VERSION, ULTRACITE_VERSION, WRANGLER_VERSION, ZEPHYR_AGENT_VERSION, ZEPHYR_RSPACK_PLUGIN_VERSION, ultramodernWorkspaceVersions };
42
+ export { CLOUDFLARE_COMPATIBILITY_DATE, EFFECT_TSGO_VERSION, EFFECT_VERSION, EFFECT_VITEST_VERSION, I18NEXT_VERSION, LEFTHOOK_VERSION, MODULE_FEDERATION_AGENT_SKILLS_COMMIT, MODULE_FEDERATION_VERSION, NODE_FETCH_VERSION, NODE_VERSION, OXFMT_VERSION, OXLINT_VERSION, PNPM_VERSION, POSTCSS_VERSION, REACT_DOM_VERSION, REACT_ROUTER_VERSION, REACT_VERSION, RSTACK_AGENT_SKILLS_COMMIT, TAILWIND_POSTCSS_VERSION, TAILWIND_VERSION, TANSTACK_ROUTER_CORE_VERSION, TANSTACK_ROUTER_VERSION, TYPESCRIPT_NATIVE_PREVIEW_VERSION, TYPESCRIPT_STABLE_VERSION, TYPESCRIPT_VERSION, TYPES_REACT_DOM_VERSION, TYPES_REACT_VERSION, ULTRACITE_VERSION, WRANGLER_VERSION, ZEPHYR_AGENT_VERSION, ZEPHYR_RSPACK_PLUGIN_VERSION, ultramodernWorkspaceVersions };
@@ -1,28 +1,111 @@
1
1
  import "node:module";
2
+ import node_fs from "node:fs";
3
+ import node_path from "node:path";
4
+ import { verticalApiGroupName } from "./api.js";
2
5
  import { remoteComponentOutputPath } from "./demo-components.js";
3
- import { appHasEffectApi, appI18nNamespace, remoteDependencyAlias, shellApp } from "./descriptors.js";
4
- import { verticalEffectGroupName } from "./effect-api.js";
6
+ import { appHasApi, appI18nNamespace, remoteDependencyAlias, shellApp } from "./descriptors.js";
5
7
  import { readFileTemplate, renderFileTemplate, writeFileReplacing } from "./fs-io.js";
6
8
  import { packageName, tailwindPrefixForApp } from "./naming.js";
7
9
  import { createCloudflareSecurityContract } from "./policy.js";
8
10
  import { publicSurfaceManagedSourceAssetPaths } from "./public-surface.js";
9
11
  import { createLocalisedUrlsMap, createRouteMetaFilePath, createRouteOwnedI18nPaths, createRoutePageFilePath } from "./routes.js";
10
12
  import { CLOUDFLARE_COMPATIBILITY_DATE, NODE_VERSION, PNPM_VERSION } from "./versions.js";
11
- function createAssertMfTypesScript(remotes = []) {
12
- return renderFileTemplate("workspace-scripts/assert-mf-types.mjs", {
13
- defaultAppDirsJson: JSON.stringify(remotes.map((remote)=>remote.directory), null, 2)
13
+ function createToolWrapperScript(command, extraArgs = []) {
14
+ const commandJson = JSON.stringify(command);
15
+ const extraArgsJson = JSON.stringify(extraArgs);
16
+ return `#!/usr/bin/env node
17
+ import { spawnSync } from 'node:child_process';
18
+ import path from 'node:path';
19
+ import { fileURLToPath } from 'node:url';
20
+
21
+ const createBin = process.env.ULTRAMODERN_CREATE_BIN;
22
+ const forwardedArgs = process.argv.slice(2);
23
+ const workspaceRoot =
24
+ process.env.ULTRAMODERN_WORKSPACE_ROOT ??
25
+ path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
26
+ const ultramodernArgs = ['ultramodern', ${commandJson}, ...${extraArgsJson}, ...forwardedArgs];
27
+ const result = createBin
28
+ ? spawnSync(process.execPath, [createBin, ...ultramodernArgs], {
29
+ env: { ...process.env, ULTRAMODERN_WORKSPACE_ROOT: workspaceRoot },
30
+ stdio: 'inherit',
31
+ })
32
+ : spawnSync('modern-js-create', ultramodernArgs, {
33
+ env: { ...process.env, ULTRAMODERN_WORKSPACE_ROOT: workspaceRoot },
34
+ shell: process.platform === 'win32',
35
+ stdio: 'inherit',
14
36
  });
37
+
38
+ if (result.error) {
39
+ console.error(result.error.message);
40
+ process.exit(1);
41
+ }
42
+
43
+ process.exit(result.status ?? 1);
44
+ `;
45
+ }
46
+ function createSkillsToolWrapperScript() {
47
+ return `#!/usr/bin/env node
48
+ import { spawnSync } from 'node:child_process';
49
+ import path from 'node:path';
50
+ import { fileURLToPath } from 'node:url';
51
+
52
+ const createBin = process.env.ULTRAMODERN_CREATE_BIN;
53
+ const forwardedArgs = process.argv.slice(2);
54
+ const workspaceRoot =
55
+ process.env.ULTRAMODERN_WORKSPACE_ROOT ??
56
+ path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
57
+ const checkOnly = forwardedArgs.includes('--check');
58
+ const skillArgs = checkOnly
59
+ ? ['skills', 'check', ...forwardedArgs.filter(arg => arg !== '--check')]
60
+ : ['skills', 'install', ...forwardedArgs];
61
+ const ultramodernArgs = ['ultramodern', ...skillArgs];
62
+ const result = createBin
63
+ ? spawnSync(process.execPath, [createBin, ...ultramodernArgs], {
64
+ env: { ...process.env, ULTRAMODERN_WORKSPACE_ROOT: workspaceRoot },
65
+ stdio: 'inherit',
66
+ })
67
+ : spawnSync('modern-js-create', ultramodernArgs, {
68
+ env: { ...process.env, ULTRAMODERN_WORKSPACE_ROOT: workspaceRoot },
69
+ shell: process.platform === 'win32',
70
+ stdio: 'inherit',
71
+ });
72
+
73
+ if (result.error) {
74
+ console.error(result.error.message);
75
+ process.exit(1);
76
+ }
77
+
78
+ process.exit(result.status ?? 1);
79
+ `;
80
+ }
81
+ function removeLegacyWorkspaceScript(targetDir, relativePath) {
82
+ node_fs.rmSync(node_path.join(targetDir, relativePath), {
83
+ force: true
84
+ });
85
+ }
86
+ function writeWorkspaceOwnedMtsScript(targetDir, name, content) {
87
+ writeFileReplacing(targetDir, `scripts/${name}.mts`, content);
88
+ removeLegacyWorkspaceScript(targetDir, `scripts/${name}.mjs`);
89
+ }
90
+ function migrateCopiedWorkspaceScriptToMts(targetDir, name) {
91
+ const legacyPath = node_path.join(targetDir, `scripts/${name}.mjs`);
92
+ const migratedPath = node_path.join(targetDir, `scripts/${name}.mts`);
93
+ if (!node_fs.existsSync(legacyPath)) return;
94
+ if (node_fs.existsSync(migratedPath)) return void node_fs.rmSync(legacyPath, {
95
+ force: true
96
+ });
97
+ node_fs.renameSync(legacyPath, migratedPath);
15
98
  }
16
99
  function createWorkspaceValidationScript(scope, enableTailwind, remotes = []) {
17
- const verticals = remotes.filter(appHasEffectApi).map((remote)=>({
100
+ const verticals = remotes.filter(appHasApi).map((remote)=>({
18
101
  id: remote.id,
19
102
  domain: remote.domain,
20
- stem: remote.effectApi.stem,
21
- group: verticalEffectGroupName(remote),
103
+ stem: remote.api.stem,
104
+ group: verticalApiGroupName(remote),
22
105
  path: remote.directory,
23
106
  port: remote.port,
24
107
  mfName: remote.mfName,
25
- apiPrefix: remote.effectApi.prefix,
108
+ apiPrefix: remote.api.prefix,
26
109
  tailwindPrefix: tailwindPrefixForApp(remote),
27
110
  zephyrAlias: remoteDependencyAlias(remote),
28
111
  packageName: packageName(scope, remote.packageSuffix),
@@ -63,35 +146,26 @@ function createWorkspaceValidationScript(scope, enableTailwind, remotes = []) {
63
146
  });
64
147
  }
65
148
  function createWorkspaceI18nBoundaryValidationScript() {
66
- return readFileTemplate("workspace-scripts/check-ultramodern-i18n-boundaries.mjs");
67
- }
68
- function createPublicSurfaceAssetsScript() {
69
- return readFileTemplate("workspace-scripts/generate-public-surface-assets.mjs");
149
+ return readFileTemplate("workspace-scripts/check-ultramodern-i18n-boundaries.mts");
70
150
  }
71
- function createCloudflareProofHelperScript() {
72
- return readFileTemplate("workspace-scripts/ultramodern-cloudflare-proof.mjs");
73
- }
74
- function createCloudflareVersionProofScript() {
75
- return readFileTemplate("workspace-scripts/proof-cloudflare-version.mjs");
151
+ function createWorkspaceApiBoundaryValidationScript() {
152
+ return readFileTemplate("workspace-scripts/check-ultramodern-api-boundaries.mts");
76
153
  }
77
154
  function createPerformanceReadinessConfigScript() {
78
155
  return readFileTemplate("workspace-scripts/ultramodern-performance-readiness.config.mjs");
79
156
  }
80
- function createPerformanceReadinessScript() {
81
- return readFileTemplate("workspace-scripts/ultramodern-performance-readiness.mjs");
82
- }
83
- function createUltramodernTypecheckScript() {
84
- return readFileTemplate("workspace-scripts/ultramodern-typecheck.mjs");
85
- }
86
- function writeGeneratedWorkspaceScripts(targetDir, scope, enableTailwind, remotes = []) {
87
- writeFileReplacing(targetDir, "scripts/assert-mf-types.mjs", createAssertMfTypesScript(remotes));
88
- writeFileReplacing(targetDir, "scripts/validate-ultramodern-workspace.mjs", createWorkspaceValidationScript(scope, enableTailwind, remotes));
89
- writeFileReplacing(targetDir, "scripts/check-ultramodern-i18n-boundaries.mjs", createWorkspaceI18nBoundaryValidationScript());
90
- writeFileReplacing(targetDir, "scripts/generate-public-surface-assets.mjs", createPublicSurfaceAssetsScript());
91
- writeFileReplacing(targetDir, "scripts/ultramodern-cloudflare-proof.mjs", createCloudflareProofHelperScript());
92
- writeFileReplacing(targetDir, "scripts/proof-cloudflare-version.mjs", createCloudflareVersionProofScript());
157
+ function writeGeneratedWorkspaceScripts(targetDir, _scope, _enableTailwind, _remotes = []) {
158
+ writeWorkspaceOwnedMtsScript(targetDir, 'assert-mf-types', createToolWrapperScript('mf-types'));
159
+ writeWorkspaceOwnedMtsScript(targetDir, 'validate-ultramodern-workspace', createToolWrapperScript('validate'));
160
+ writeWorkspaceOwnedMtsScript(targetDir, 'check-ultramodern-i18n-boundaries', createWorkspaceI18nBoundaryValidationScript());
161
+ writeWorkspaceOwnedMtsScript(targetDir, 'check-ultramodern-api-boundaries', createWorkspaceApiBoundaryValidationScript());
162
+ writeWorkspaceOwnedMtsScript(targetDir, 'generate-public-surface-assets', createToolWrapperScript('public-surface'));
163
+ writeWorkspaceOwnedMtsScript(targetDir, 'proof-cloudflare-version', createToolWrapperScript('cloudflare-proof'));
93
164
  writeFileReplacing(targetDir, "scripts/ultramodern-performance-readiness.config.mjs", createPerformanceReadinessConfigScript());
94
- writeFileReplacing(targetDir, "scripts/ultramodern-performance-readiness.mjs", createPerformanceReadinessScript());
95
- writeFileReplacing(targetDir, "scripts/ultramodern-typecheck.mjs", createUltramodernTypecheckScript());
165
+ writeWorkspaceOwnedMtsScript(targetDir, 'ultramodern-performance-readiness', createToolWrapperScript('performance-readiness'));
166
+ writeWorkspaceOwnedMtsScript(targetDir, 'migrate-strict-effect', createToolWrapperScript('migrate-strict-effect'));
167
+ writeWorkspaceOwnedMtsScript(targetDir, 'ultramodern-typecheck', createToolWrapperScript('typecheck'));
168
+ writeWorkspaceOwnedMtsScript(targetDir, 'bootstrap-agent-skills', createSkillsToolWrapperScript());
169
+ migrateCopiedWorkspaceScriptToMts(targetDir, 'setup-agent-reference-repos');
96
170
  }
97
- export { createAssertMfTypesScript, createCloudflareProofHelperScript, createCloudflareVersionProofScript, createPerformanceReadinessConfigScript, createPerformanceReadinessScript, createPublicSurfaceAssetsScript, createUltramodernTypecheckScript, createWorkspaceI18nBoundaryValidationScript, createWorkspaceValidationScript, writeGeneratedWorkspaceScripts };
171
+ export { createPerformanceReadinessConfigScript, createWorkspaceApiBoundaryValidationScript, createWorkspaceI18nBoundaryValidationScript, createWorkspaceValidationScript, writeGeneratedWorkspaceScripts };