@bleedingdev/modern-js-create 3.5.0-ultramodern.36 → 3.5.0-ultramodern.37

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 (198) hide show
  1. package/README.md +11 -14
  2. package/dist/cjs/cli/flags.cjs +0 -31
  3. package/dist/cjs/cli/help.cjs +0 -1
  4. package/dist/cjs/cli/package-source.cjs +0 -3
  5. package/dist/cjs/cli/prompts.cjs +2 -20
  6. package/dist/cjs/index.cjs +0 -5
  7. package/dist/cjs/locale/en.cjs +2 -6
  8. package/dist/cjs/locale/zh.cjs +2 -6
  9. package/dist/cjs/ultramodern-package-source.cjs +0 -32
  10. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +1 -0
  11. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +1 -1
  12. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +1 -1
  13. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +5 -3
  14. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +3 -0
  15. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +2 -8
  16. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +8 -0
  17. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +0 -12
  18. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +2 -26
  19. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +1 -1
  20. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +6 -4
  21. package/dist/cjs/ultramodern-workspace/app-files.cjs +2 -23
  22. package/dist/cjs/ultramodern-workspace/contracts.cjs +25 -16
  23. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +1 -1
  24. package/dist/cjs/ultramodern-workspace/demo-components.cjs +0 -3
  25. package/dist/cjs/ultramodern-workspace/fs-io.cjs +0 -33
  26. package/dist/cjs/ultramodern-workspace/locales.cjs +1 -14
  27. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +2 -10
  28. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +2 -17
  29. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +0 -6
  30. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +2 -29
  31. package/dist/cjs/ultramodern-workspace/mf-validation/validate.cjs +1 -1
  32. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +19 -8
  33. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +3 -2
  34. package/dist/cjs/ultramodern-workspace/naming.cjs +0 -6
  35. package/dist/cjs/ultramodern-workspace/package-json.cjs +5 -14
  36. package/dist/cjs/ultramodern-workspace/policy.cjs +0 -21
  37. package/dist/cjs/ultramodern-workspace/public-surface.cjs +0 -21
  38. package/dist/cjs/ultramodern-workspace/routes.cjs +0 -15
  39. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +4 -3
  40. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +2 -8
  41. package/dist/cjs/ultramodern-workspace/versions.cjs +25 -37
  42. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +2 -20
  43. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +0 -21
  44. package/dist/cjs/ultramodern-workspace/write-app.cjs +3 -6
  45. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +3 -5
  46. package/dist/esm/cli/flags.js +1 -11
  47. package/dist/esm/cli/help.js +0 -1
  48. package/dist/esm/cli/package-source.js +1 -1
  49. package/dist/esm/cli/prompts.js +2 -14
  50. package/dist/esm/index.js +2 -7
  51. package/dist/esm/locale/en.js +2 -6
  52. package/dist/esm/locale/zh.js +2 -6
  53. package/dist/esm/ultramodern-package-source.js +1 -24
  54. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +2 -1
  55. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +1 -1
  56. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +1 -1
  57. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +6 -4
  58. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +4 -1
  59. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +1 -1
  60. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +3 -1
  61. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +1 -1
  62. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +1 -1
  63. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +1 -1
  64. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +6 -4
  65. package/dist/esm/ultramodern-workspace/app-files.js +1 -4
  66. package/dist/esm/ultramodern-workspace/contracts.js +25 -16
  67. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +1 -1
  68. package/dist/esm/ultramodern-workspace/demo-components.js +1 -1
  69. package/dist/esm/ultramodern-workspace/fs-io.js +1 -15
  70. package/dist/esm/ultramodern-workspace/locales.js +1 -1
  71. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +3 -2
  72. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +1 -1
  73. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +1 -1
  74. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +1 -1
  75. package/dist/esm/ultramodern-workspace/mf-validation/validate.js +1 -1
  76. package/dist/esm/ultramodern-workspace/module-federation/config.js +19 -8
  77. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +4 -3
  78. package/dist/esm/ultramodern-workspace/naming.js +1 -1
  79. package/dist/esm/ultramodern-workspace/package-json.js +5 -8
  80. package/dist/esm/ultramodern-workspace/policy.js +1 -7
  81. package/dist/esm/ultramodern-workspace/public-surface.js +1 -1
  82. package/dist/esm/ultramodern-workspace/routes.js +1 -1
  83. package/dist/esm/ultramodern-workspace/shared-patches.js +4 -3
  84. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +1 -1
  85. package/dist/esm/ultramodern-workspace/versions.js +20 -23
  86. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +1 -1
  87. package/dist/esm/ultramodern-workspace/workspace-scripts.js +6 -9
  88. package/dist/esm/ultramodern-workspace/write-app.js +4 -7
  89. package/dist/esm/ultramodern-workspace/write-workspace.js +3 -2
  90. package/dist/esm-node/cli/flags.js +1 -11
  91. package/dist/esm-node/cli/help.js +0 -1
  92. package/dist/esm-node/cli/package-source.js +1 -1
  93. package/dist/esm-node/cli/prompts.js +2 -14
  94. package/dist/esm-node/index.js +2 -7
  95. package/dist/esm-node/locale/en.js +2 -6
  96. package/dist/esm-node/locale/zh.js +2 -6
  97. package/dist/esm-node/ultramodern-package-source.js +1 -24
  98. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +2 -1
  99. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +1 -1
  100. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +1 -1
  101. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +6 -4
  102. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +4 -1
  103. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +1 -1
  104. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +3 -1
  105. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +1 -1
  106. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +1 -1
  107. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +1 -1
  108. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +6 -4
  109. package/dist/esm-node/ultramodern-workspace/app-files.js +1 -4
  110. package/dist/esm-node/ultramodern-workspace/contracts.js +25 -16
  111. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +1 -1
  112. package/dist/esm-node/ultramodern-workspace/demo-components.js +1 -1
  113. package/dist/esm-node/ultramodern-workspace/fs-io.js +1 -15
  114. package/dist/esm-node/ultramodern-workspace/locales.js +1 -1
  115. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +3 -2
  116. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +1 -1
  117. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +1 -1
  118. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +1 -1
  119. package/dist/esm-node/ultramodern-workspace/mf-validation/validate.js +1 -1
  120. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +19 -8
  121. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +4 -3
  122. package/dist/esm-node/ultramodern-workspace/naming.js +1 -1
  123. package/dist/esm-node/ultramodern-workspace/package-json.js +5 -8
  124. package/dist/esm-node/ultramodern-workspace/policy.js +1 -7
  125. package/dist/esm-node/ultramodern-workspace/public-surface.js +1 -1
  126. package/dist/esm-node/ultramodern-workspace/routes.js +1 -1
  127. package/dist/esm-node/ultramodern-workspace/shared-patches.js +4 -3
  128. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +1 -1
  129. package/dist/esm-node/ultramodern-workspace/versions.js +20 -23
  130. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +1 -1
  131. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +6 -9
  132. package/dist/esm-node/ultramodern-workspace/write-app.js +4 -7
  133. package/dist/esm-node/ultramodern-workspace/write-workspace.js +3 -2
  134. package/dist/types/cli/flags.d.ts +4 -9
  135. package/dist/types/cli/package-source.d.ts +3 -3
  136. package/dist/types/cli/project-setup.d.ts +1 -1
  137. package/dist/types/cli/prompts.d.ts +0 -2
  138. package/dist/types/locale/en.d.ts +0 -4
  139. package/dist/types/locale/index.d.ts +0 -8
  140. package/dist/types/locale/zh.d.ts +0 -4
  141. package/dist/types/ultramodern-package-source.d.ts +0 -11
  142. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +1 -1
  143. package/dist/types/ultramodern-tooling/commands/context.d.ts +3 -3
  144. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +1 -1
  145. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +0 -5
  146. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +8 -6
  147. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +1 -1
  148. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +1 -1
  149. package/dist/types/ultramodern-tooling/commands/skills.d.ts +1 -1
  150. package/dist/types/ultramodern-tooling/commands/validate.d.ts +1 -1
  151. package/dist/types/ultramodern-tooling/commands.d.ts +1 -1
  152. package/dist/types/ultramodern-tooling/config/load.d.ts +1 -1
  153. package/dist/types/ultramodern-workspace/add-vertical/plan.d.ts +1 -6
  154. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +1 -9
  155. package/dist/types/ultramodern-workspace/app-files.d.ts +1 -7
  156. package/dist/types/ultramodern-workspace/codesmith.d.ts +5 -5
  157. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +1 -1
  158. package/dist/types/ultramodern-workspace/demo-components.d.ts +0 -1
  159. package/dist/types/ultramodern-workspace/fs-io.d.ts +1 -7
  160. package/dist/types/ultramodern-workspace/generation-result.d.ts +2 -1
  161. package/dist/types/ultramodern-workspace/locales.d.ts +0 -181
  162. package/dist/types/ultramodern-workspace/mf-validation/inspect.d.ts +0 -3
  163. package/dist/types/ultramodern-workspace/mf-validation/object-literal.d.ts +0 -5
  164. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +0 -2
  165. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +0 -9
  166. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +1 -1
  167. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +1 -1
  168. package/dist/types/ultramodern-workspace/naming.d.ts +0 -2
  169. package/dist/types/ultramodern-workspace/package-json.d.ts +0 -2
  170. package/dist/types/ultramodern-workspace/policy.d.ts +0 -47
  171. package/dist/types/ultramodern-workspace/public-surface.d.ts +5 -15
  172. package/dist/types/ultramodern-workspace/routes.d.ts +0 -9
  173. package/dist/types/ultramodern-workspace/shared-patches.d.ts +1 -2
  174. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +4 -4
  175. package/dist/types/ultramodern-workspace/types.d.ts +3 -2
  176. package/dist/types/ultramodern-workspace/versions.d.ts +20 -23
  177. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +7 -21
  178. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +2 -9
  179. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +0 -1
  180. package/dist/types/ultramodern-workspace/write-workspace.d.ts +0 -1
  181. package/package.json +14 -12
  182. package/template-workspace/AGENTS.md.handlebars +2 -2
  183. package/template-workspace/README.md.handlebars +3 -4
  184. package/template-workspace/patches/{@module-federation__bridge-react@2.6.0.patch → @module-federation__bridge-react@2.7.0.patch} +22 -22
  185. package/template-workspace/patches/@module-federation__dts-plugin@2.7.0.patch +37 -0
  186. package/template-workspace/patches/{@module-federation__modern-js-v3@2.6.0.patch → @module-federation__modern-js-v3@2.7.0.patch} +22 -22
  187. package/template-workspace/patches/@tanstack__router-core@1.171.14.patch +123 -0
  188. package/template-workspace/pnpm-workspace.yaml.handlebars +24 -2
  189. package/templates/workspace/apps/modern.config.ts.handlebars +1 -1
  190. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +4 -4
  191. package/templates/workspace-scripts/ultramodern-typecheck.mjs +1 -1
  192. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +3 -5
  193. package/dist/cjs/ultramodern-workspace/pnpm-workspace-policy-plan.cjs +0 -166
  194. package/dist/esm/ultramodern-workspace/pnpm-workspace-policy-plan.js +0 -113
  195. package/dist/esm-node/ultramodern-workspace/pnpm-workspace-policy-plan.js +0 -114
  196. package/dist/types/ultramodern-workspace/pnpm-workspace-policy-plan.d.ts +0 -39
  197. package/template-workspace/patches/@tanstack__router-core@1.171.13.patch +0 -51
  198. package/templates/workspace/postcss.config.mjs.handlebars +0 -5
@@ -116,4 +116,4 @@ function resolveWorkspacePackageSource(args, createPackage, packageSource) {
116
116
  };
117
117
  return resolveInstallBackedPackageSource(args, createPackage, packageSource);
118
118
  }
119
- export { detectUltramodernPackageSource, getBleedingDevFrameworkVersion, isBleedingDevCreatePackage, readCreatePackageJson, resolveInstallBackedPackageSource, resolveWorkspacePackageSource };
119
+ export { detectUltramodernPackageSource, getBleedingDevFrameworkVersion, isBleedingDevCreatePackage, readCreatePackageJson, resolveWorkspacePackageSource };
@@ -1,7 +1,7 @@
1
1
  import node_path from "node:path";
2
2
  import node_readline from "node:readline";
3
3
  import { i18n, localeKeys } from "../locale/index.js";
4
- import { LEGACY_MODERN_JS_CONFIRMATION, collectPositionalArgs } from "./flags.js";
4
+ import { collectPositionalArgs } from "./flags.js";
5
5
  import { isDirectoryEmpty } from "./project-setup.js";
6
6
  function promptInput(question) {
7
7
  const rl = node_readline.createInterface({
@@ -15,18 +15,6 @@ function promptInput(question) {
15
15
  });
16
16
  });
17
17
  }
18
- async function confirmLegacyModernJsSetup() {
19
- console.error('');
20
- console.error(i18n.t(localeKeys.message.legacyModernJsWarning));
21
- console.error('');
22
- const answer = await promptInput(i18n.t(localeKeys.prompt.legacyModernJsConfirmation, {
23
- confirmation: LEGACY_MODERN_JS_CONFIRMATION
24
- }));
25
- if (answer !== LEGACY_MODERN_JS_CONFIRMATION) {
26
- console.error(i18n.t(localeKeys.error.legacyModernJsNotConfirmed));
27
- process.exit(1);
28
- }
29
- }
30
18
  async function getProjectName() {
31
19
  const args = process.argv.slice(2);
32
20
  const positionalArgs = collectPositionalArgs(args);
@@ -60,4 +48,4 @@ async function getProjectName() {
60
48
  useCurrentDir: false
61
49
  };
62
50
  }
63
- export { confirmLegacyModernJsSetup, getProjectName, promptInput };
51
+ export { getProjectName };
package/dist/esm/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import node_fs from "node:fs";
2
2
  import node_path from "node:path";
3
- import { DRY_RUN_FLAG, VERTICAL_FLAG, detectBffRuntime, detectCodeSmithOverlays, detectDryRunFlag, detectExplicitTailwindFlag, detectLanguage, detectLegacyModernJsFlag, detectTailwindFlag, readBridgeCliOptions, resolveVerticalCliInput } from "./cli/flags.js";
3
+ import { DRY_RUN_FLAG, VERTICAL_FLAG, detectBffRuntime, detectCodeSmithOverlays, detectDryRunFlag, detectExplicitTailwindFlag, detectLanguage, detectTailwindFlag, readBridgeCliOptions, resolveVerticalCliInput } from "./cli/flags.js";
4
4
  import { showHelp, showVersion } from "./cli/help.js";
5
5
  import { detectUltramodernPackageSource, getBleedingDevFrameworkVersion, isBleedingDevCreatePackage, readCreatePackageJson, resolveWorkspacePackageSource } from "./cli/package-source.js";
6
6
  import { initializeGeneratedGitRepository } from "./cli/project-setup.js";
7
- import { confirmLegacyModernJsSetup, getProjectName } from "./cli/prompts.js";
7
+ import { getProjectName } from "./cli/prompts.js";
8
8
  import { i18n, localeKeys } from "./locale/index.js";
9
9
  import { runUltramodernToolingCli } from "./ultramodern-tooling/commands.js";
10
10
  import { addUltramodernVertical, generateUltramodernWorkspace, planUltramodernVertical } from "./ultramodern-workspace/index.js";
@@ -20,11 +20,6 @@ async function main() {
20
20
  }
21
21
  if (args.includes('--help') || args.includes('-h')) return void showHelp();
22
22
  if (args.includes('--version') || args.includes('-v')) return void showVersion();
23
- if (detectLegacyModernJsFlag(args)) {
24
- await confirmLegacyModernJsSetup();
25
- delegateLegacyModernJsSetup(args);
26
- return;
27
- }
28
23
  detectBffRuntime(args);
29
24
  const dryRun = detectDryRunFlag(args);
30
25
  const verticalInput = resolveVerticalCliInput(args);
@@ -1,14 +1,12 @@
1
1
  const EN_LOCALE = {
2
2
  prompt: {
3
- projectName: 'Please enter project name: ',
4
- legacyModernJsConfirmation: 'Type "{confirmation}" to continue with the original Modern.js setup: '
3
+ projectName: 'Please enter project name: '
5
4
  },
6
5
  error: {
7
6
  projectNameEmpty: 'Error: Project name cannot be empty',
8
7
  directoryExists: 'Error: Directory "{projectName}" already exists and is not empty',
9
8
  verticalNameMissing: 'Error: Missing MicroVertical name. Use <name> --vertical, --vertical=<name>, or --vertical-name <name>.',
10
9
  verticalNameAmbiguous: 'Error: Ambiguous MicroVertical name: "{firstName}" from {firstSource} does not match "{secondName}" from {secondSource}.',
11
- legacyModernJsNotConfirmed: 'Aborted. UltraModern.js remains the default unattended setup.',
12
10
  createFailed: 'Error creating project:'
13
11
  },
14
12
  message: {
@@ -17,8 +15,7 @@ const EN_LOCALE = {
17
15
  nextSteps: '📋 Next steps:',
18
16
  step1: 'cd {projectName}',
19
17
  step2: 'pnpm install',
20
- step3: 'pnpm dev',
21
- legacyModernJsWarning: "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\nBRUTAL WARNING: YOU ARE OPTING OUT OF ULTRAMODERN.JS DEFAULTS.\nThe unattended default is the best UltraModern.js configuration:\na structured SuperApp workspace, presetUltramodern, TanStack Router,\na strict Effect API runtime, Tailwind CSS v4, and the BleedingDev package cohort.\nThe original Modern.js setup is a dangerous opt-in path.\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
18
+ step3: 'pnpm dev'
22
19
  },
23
20
  help: {
24
21
  title: '🚀 UltraModern.js Project Creator',
@@ -52,7 +49,6 @@ const EN_LOCALE = {
52
49
  optionVerticalName: ' --vertical-name <name> Explicit MicroVertical name for automation-friendly workspace mutation',
53
50
  optionDryRun: ' --dry-run Preview a MicroVertical mutation plan without writing files (supported with --vertical)',
54
51
  optionCodeSmithOverlay: ' --codesmith-overlay <package-or-path> Run an explicit CodeSmith overlay after generation',
55
- optionLegacyModernJs: ' --legacy-modern-js Opt into the original Modern.js setup after a large warning and typed confirmation',
56
52
  examples: '💡 Examples:',
57
53
  example1: ' pnpm dlx @bleedingdev/modern-js-create my-workspace',
58
54
  example2: ' pnpm dlx @bleedingdev/modern-js-create my-workspace --lang zh',
@@ -1,14 +1,12 @@
1
1
  const ZH_LOCALE = {
2
2
  prompt: {
3
- projectName: '请输入项目名称: ',
4
- legacyModernJsConfirmation: '输入 "{confirmation}" 以继续使用原始 Modern.js 初始化: '
3
+ projectName: '请输入项目名称: '
5
4
  },
6
5
  error: {
7
6
  projectNameEmpty: '错误: 项目名称不能为空',
8
7
  directoryExists: '错误: 目录 "{projectName}" 已存在且不为空',
9
8
  verticalNameMissing: '错误: 缺少 MicroVertical 名称。请使用 <名称> --vertical、--vertical=<名称> 或 --vertical-name <名称>。',
10
9
  verticalNameAmbiguous: '错误: MicroVertical 名称不明确:{firstSource} 的 "{firstName}" 与 {secondSource} 的 "{secondName}" 不一致。',
11
- legacyModernJsNotConfirmed: '已中止。UltraModern.js 仍是默认的免交互初始化方案。',
12
10
  createFailed: '创建项目时出错:'
13
11
  },
14
12
  message: {
@@ -17,8 +15,7 @@ const ZH_LOCALE = {
17
15
  nextSteps: '📋 下一步:',
18
16
  step1: 'cd {projectName}',
19
17
  step2: 'pnpm install',
20
- step3: 'pnpm dev',
21
- legacyModernJsWarning: "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n严重警告:你正在退出 ULTRAMODERN.JS 默认配置。\n免交互默认值是最佳 UltraModern.js 配置:\n结构化 SuperApp 工作区、presetUltramodern、TanStack Router、\n严格 Effect API 运行时、Tailwind CSS v4,以及 BleedingDev 包版本队列。\n原始 Modern.js 初始化是危险的显式选择路径。\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
18
+ step3: 'pnpm dev'
22
19
  },
23
20
  help: {
24
21
  title: '🚀 UltraModern.js 项目创建工具',
@@ -52,7 +49,6 @@ const ZH_LOCALE = {
52
49
  optionVerticalName: ' --vertical-name <名称> 为自动化工作流显式指定 MicroVertical 名称',
53
50
  optionDryRun: ' --dry-run 预览 MicroVertical 修改计划但不写入文件(与 --vertical 一起使用)',
54
51
  optionCodeSmithOverlay: ' --codesmith-overlay <包或路径> 生成完成后运行显式配置的 CodeSmith overlay',
55
- optionLegacyModernJs: ' --legacy-modern-js 在大型警告和输入确认后,选择原始 Modern.js 初始化',
56
52
  examples: '💡 示例:',
57
53
  example1: ' pnpm dlx @bleedingdev/modern-js-create my-workspace',
58
54
  example2: ' pnpm dlx @bleedingdev/modern-js-create my-workspace --lang zh',
@@ -37,27 +37,4 @@ function modernPackageSpecifier(packageName, packageSource) {
37
37
  if (!packageSource.aliasScope) return packageSource.modernPackageVersion;
38
38
  return `npm:${modernAliasPackageName(packageName, packageSource)}@${packageSource.modernPackageVersion}`;
39
39
  }
40
- function modernPackageAliases(packageNames, packageSource) {
41
- if (!packageSource.aliasScope) return;
42
- return Object.fromEntries(packageNames.map((packageName)=>[
43
- packageName,
44
- modernAliasPackageName(packageName, packageSource)
45
- ]));
46
- }
47
- function createModernPackagesMetadata(packageNames, packageSource, options = {}) {
48
- const includeAliases = options.includeAliases ?? Boolean(packageSource.aliasScope);
49
- const aliases = includeAliases ? modernPackageAliases(packageNames, packageSource) : void 0;
50
- return {
51
- packages: [
52
- ...packageNames
53
- ],
54
- specifier: modernPackageVersion(packageSource),
55
- ...packageSource.registry ? {
56
- registry: packageSource.registry
57
- } : {},
58
- ...aliases ? {
59
- aliases
60
- } : {}
61
- };
62
- }
63
- export { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_FRAMEWORK_VERSION_ENV, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES, ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, WORKSPACE_PACKAGE_VERSION, createModernPackagesMetadata, modernAliasPackageName, modernPackageAliases, modernPackageSpecifier, modernPackageVersion };
40
+ export { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_FRAMEWORK_VERSION_ENV, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES, ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, WORKSPACE_PACKAGE_VERSION, modernPackageSpecifier, modernPackageVersion };
@@ -1,8 +1,9 @@
1
1
  import { ensureGeneratedPatchFile, removeGeneratedPatchFileIfUnchanged } from "./generated-patches.js";
2
- import { drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath, effectDeclarationPatchPath, effectDeclarationPatchSourcePath, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath } from "./policy-constants.js";
2
+ import { drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath, effectDeclarationPatchPath, effectDeclarationPatchSourcePath, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath, moduleFederationDtsPluginPatchPath, moduleFederationDtsPluginPatchSourcePath, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath } from "./policy-constants.js";
3
3
  function ensureGeneratedDeclarationPatches(io, options) {
4
4
  let changed = false;
5
5
  changed = ensureGeneratedPatchFile(io, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath) || changed;
6
+ changed = ensureGeneratedPatchFile(io, moduleFederationDtsPluginPatchPath, moduleFederationDtsPluginPatchSourcePath) || changed;
6
7
  changed = ensureGeneratedPatchFile(io, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath) || changed;
7
8
  changed = ensureGeneratedPatchFile(io, effectDeclarationPatchPath, effectDeclarationPatchSourcePath) || changed;
8
9
  changed = options.includeDrizzleOrmPatch ? ensureGeneratedPatchFile(io, drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath) || changed : removeGeneratedPatchFileIfUnchanged(io, drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath) || changed;
@@ -6,7 +6,7 @@ function updateGeneratedBuildIdentityModules(io, config) {
6
6
  let changed = false;
7
7
  for (const app of workspaceAppsFromToolingConfig(config)){
8
8
  changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'src/ultramodern-build.ts'), createUltramodernBuildReexportModule()) || changed;
9
- changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'shared/ultramodern-build.ts'), createUltramodernBuildModule()) || changed;
9
+ changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'shared/ultramodern-build.ts'), createUltramodernBuildModule(config.workspace.packageScope, app)) || changed;
10
10
  changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'shared/ultramodern-build.json'), createUltramodernBuildArtifactJson(config.workspace.packageScope, app)) || changed;
11
11
  }
12
12
  return changed;
@@ -6,7 +6,7 @@ function updateGeneratedModernConfigs(io, config) {
6
6
  let changed = false;
7
7
  const apps = workspaceAppsFromToolingConfig(config);
8
8
  const remotes = apps.filter((app)=>'shell' !== app.kind);
9
- for (const app of apps)changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'modern.config.ts'), createAppModernConfig(config.workspace.packageScope, app, remotes)) || changed;
9
+ for (const app of apps)changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'modern.config.ts'), createAppModernConfig(config.workspace.packageScope, app, remotes, config.features.tailwind)) || changed;
10
10
  return changed;
11
11
  }
12
12
  export { updateGeneratedModernConfigs };
@@ -1,5 +1,5 @@
1
1
  import { ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES, ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, modernPackageSpecifier } from "../../../ultramodern-package-source.js";
2
- import { EFFECT_TSGO_VERSION, OXFMT_VERSION, OXLINT_VERSION, TYPESCRIPT_NATIVE_PREVIEW_VERSION, WRANGLER_VERSION, ZEPHYR_AGENT_VERSION, ZEPHYR_RSPACK_PLUGIN_VERSION } from "../../../ultramodern-workspace/versions.js";
2
+ import { EFFECT_TSGO_VERSION, OXFMT_VERSION, OXLINT_VERSION, TYPESCRIPT_VERSION, WRANGLER_VERSION, ZEPHYR_AGENT_VERSION, ZEPHYR_RSPACK_PLUGIN_VERSION } from "../../../ultramodern-workspace/versions.js";
3
3
  import { createWorkspaceAppPackageScripts, createWorkspaceRootPackageScripts } from "../../../ultramodern-workspace/workspace-script-plan.js";
4
4
  import { migratedWorkspaceScriptBasenames } from "../../../ultramodern-workspace/workspace-scripts.js";
5
5
  const modernPackageNames = new Set([
@@ -32,8 +32,8 @@ const generatedToolingDependencyPins = new Map([
32
32
  EFFECT_TSGO_VERSION
33
33
  ],
34
34
  [
35
- "@typescript/native-preview",
36
- TYPESCRIPT_NATIVE_PREVIEW_VERSION
35
+ "typescript",
36
+ TYPESCRIPT_VERSION
37
37
  ],
38
38
  [
39
39
  'oxfmt',
@@ -139,7 +139,9 @@ function updateGeneratedPackageScripts(packageJson, options = {}) {
139
139
  }
140
140
  continue;
141
141
  }
142
- const nextValue = 'check' === name && 'string' == typeof scripts[name] ? mergeAggregateCheckScript(scripts[name], value) : value;
142
+ if (void 0 === value) continue;
143
+ const existingScript = scripts[name];
144
+ const nextValue = 'check' === name && 'string' == typeof existingScript ? mergeAggregateCheckScript(existingScript, value) : value;
143
145
  if (scripts[name] !== nextValue) {
144
146
  scripts[name] = nextValue;
145
147
  changed = true;
@@ -3,7 +3,7 @@ import node_path from "node:path";
3
3
  import { DRIZZLE_ORM_VERSION, EFFECT_VERSION, EFFECT_VITEST_VERSION, MODULE_FEDERATION_VERSION } from "../../../ultramodern-workspace/versions.js";
4
4
  import { workspaceUsesDependency } from "./dependency-usage.js";
5
5
  import { ensureYamlListItem, ensureYamlMapEntry, ensureYamlScalarMapEntry, removeYamlMapEntry, replaceYamlLine } from "./pnpm-yaml.js";
6
- import { drizzleOrmDeclarationPatchPath, effectDeclarationPatchPath, moduleFederationBridgeReactPatchPath, moduleFederationModernJsPatchPath, strictEffectPackageVersionPolicyExclusions } from "./policy-constants.js";
6
+ import { drizzleOrmDeclarationPatchPath, effectDeclarationPatchPath, moduleFederationBridgeReactPatchPath, moduleFederationDtsPluginPatchPath, moduleFederationModernJsPatchPath, strictEffectPackageVersionPolicyExclusions } from "./policy-constants.js";
7
7
  function updateGeneratedPnpmWorkspacePolicy(io) {
8
8
  const workspaceFile = node_path.join(io.workspaceRoot, 'pnpm-workspace.yaml');
9
9
  if (!node_fs.existsSync(workspaceFile)) return false;
@@ -63,6 +63,9 @@ function updateGeneratedPnpmWorkspacePolicy(io) {
63
63
  const moduleFederationModernJsPatch = ensureYamlMapEntry(source, 'patchedDependencies', `@module-federation/modern-js-v3@${MODULE_FEDERATION_VERSION}`, moduleFederationModernJsPatchPath);
64
64
  source = moduleFederationModernJsPatch.source;
65
65
  changed = moduleFederationModernJsPatch.changed || changed;
66
+ const moduleFederationDtsPluginPatch = ensureYamlMapEntry(source, 'patchedDependencies', `@module-federation/dts-plugin@${MODULE_FEDERATION_VERSION}`, moduleFederationDtsPluginPatchPath);
67
+ source = moduleFederationDtsPluginPatch.source;
68
+ changed = moduleFederationDtsPluginPatch.changed || changed;
66
69
  const moduleFederationBridgeReactPatch = ensureYamlMapEntry(source, 'patchedDependencies', `@module-federation/bridge-react@${MODULE_FEDERATION_VERSION}`, moduleFederationBridgeReactPatchPath);
67
70
  source = moduleFederationBridgeReactPatch.source;
68
71
  changed = moduleFederationBridgeReactPatch.changed || changed;
@@ -102,4 +102,4 @@ function removeYamlMapEntry(source, entryKey) {
102
102
  changed
103
103
  };
104
104
  }
105
- export { ensureYamlListItem, ensureYamlMapEntry, ensureYamlScalarMapEntry, removeYamlMapEntry, replaceYamlLine, upsertYamlEntry, yamlEntryPattern };
105
+ export { ensureYamlListItem, ensureYamlMapEntry, ensureYamlScalarMapEntry, removeYamlMapEntry, replaceYamlLine };
@@ -7,10 +7,12 @@ const strictEffectPackageVersionPolicyExclusions = [
7
7
  ];
8
8
  const moduleFederationModernJsPatchPath = `patches/@module-federation__modern-js-v3@${MODULE_FEDERATION_VERSION}.patch`;
9
9
  const moduleFederationModernJsPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', moduleFederationModernJsPatchPath);
10
+ const moduleFederationDtsPluginPatchPath = `patches/@module-federation__dts-plugin@${MODULE_FEDERATION_VERSION}.patch`;
11
+ const moduleFederationDtsPluginPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', moduleFederationDtsPluginPatchPath);
10
12
  const moduleFederationBridgeReactPatchPath = `patches/@module-federation__bridge-react@${MODULE_FEDERATION_VERSION}.patch`;
11
13
  const moduleFederationBridgeReactPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', moduleFederationBridgeReactPatchPath);
12
14
  const effectDeclarationPatchPath = 'patches/effect-schema-error-type-id.patch';
13
15
  const effectDeclarationPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', effectDeclarationPatchPath);
14
16
  const drizzleOrmDeclarationPatchPath = 'patches/drizzle-orm-ts7-strict-declarations.patch';
15
17
  const drizzleOrmDeclarationPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', drizzleOrmDeclarationPatchPath);
16
- export { drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath, effectDeclarationPatchPath, effectDeclarationPatchSourcePath, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath, strictEffectPackageVersionPolicyExclusions };
18
+ export { drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath, effectDeclarationPatchPath, effectDeclarationPatchSourcePath, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath, moduleFederationDtsPluginPatchPath, moduleFederationDtsPluginPatchSourcePath, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath, strictEffectPackageVersionPolicyExclusions };
@@ -181,4 +181,4 @@ function createShellDependencyChanges(scope, vertical) {
181
181
  ] : []
182
182
  ];
183
183
  }
184
- export { copyWorkspaceForPlan, createDryRunJsonMutations, createShellDependencyChanges, createVerticalPlan, planUltramodernVertical };
184
+ export { planUltramodernVertical };
@@ -119,4 +119,4 @@ function assertNonEmptyString(value, label) {
119
119
  function assertSafeOutputPath(relativePath, appId) {
120
120
  if (node_path.isAbsolute(relativePath) || relativePath.split(/[\\/]+/u).includes('..')) throw new Error(`Unsafe output path for ${appId}: ${relativePath}`);
121
121
  }
122
- export { assertNonEmptyString, assertOptionalJsonArray, assertOptionalJsonObject, assertSafeOutputPath, assertUniqueAppField, prepareAddUltramodernVertical, readRequiredJsonObject, readRequiredWorkspaceConfig, validateUniqueWorkspaceAppDescriptors, validateWorkspaceAppDescriptors };
122
+ export { assertNonEmptyString, prepareAddUltramodernVertical };
@@ -24,7 +24,7 @@ function rewriteShellAppFiles(workspaceRoot, scope, packageSource, enableTailwin
24
24
  writeJsonFile(node_path.join(workspaceRoot, `${shellApp.directory}/tsconfig.json`), createAppTsConfig(shellHost, remotes));
25
25
  writeJsonFile(node_path.join(workspaceRoot, `${shellApp.directory}/tsconfig.mf-types.json`), createAppMfTypesTsConfig(shellHost));
26
26
  writeFileReplacing(workspaceRoot, `${shellApp.directory}/src/modern-app-env.d.ts`, createAppEnvDts(shellHost, remotes));
27
- writeFileReplacing(workspaceRoot, `${shellApp.directory}/modern.config.ts`, createAppModernConfig(scope, shellHost, remotes));
27
+ writeFileReplacing(workspaceRoot, `${shellApp.directory}/modern.config.ts`, createAppModernConfig(scope, shellHost, remotes, enableTailwind));
28
28
  writeFileReplacing(workspaceRoot, publicWeb.jsonLdHelperFile.path, publicWeb.jsonLdHelperFile.content);
29
29
  writeFileReplacing(workspaceRoot, publicWeb.routeMetadataFile.path, publicWeb.routeMetadataFile.content);
30
30
  writeFileReplacing(workspaceRoot, publicWeb.routeHeadFile.path, publicWeb.routeHeadFile.content);
@@ -5,10 +5,13 @@ import { createModuleFederationRemoteContracts, createNeutralOwnership, shellApp
5
5
  import { packageName, toEnvSegment, toPascalCase } from "../naming.js";
6
6
  import { createCloudflareDeployContract } from "../policy.js";
7
7
  function verticalTopologyEntry(scope, vertical, remotes = []) {
8
+ const backendFederation = createBackendFederationContract(scope, vertical);
8
9
  return {
9
10
  id: vertical.id,
10
11
  kind: vertical.kind,
11
- domain: vertical.domain,
12
+ ...vertical.domain ? {
13
+ domain: vertical.domain
14
+ } : {},
12
15
  package: packageName(scope, vertical.packageSuffix),
13
16
  path: vertical.directory,
14
17
  moduleFederation: {
@@ -21,11 +24,10 @@ function verticalTopologyEntry(scope, vertical, remotes = []) {
21
24
  remotes: createModuleFederationRemoteContracts(vertical, remotes)
22
25
  } : {},
23
26
  ssr: true,
24
- fallbackTelemetryEvent: 'modernjs:mv-runtime-parity',
25
27
  sharedContractVersion: 'mf-ssr-contract-v1'
26
28
  },
27
- ...createBackendFederationContract(scope, vertical) ? {
28
- backendFederation: createBackendFederationContract(scope, vertical)
29
+ ...backendFederation ? {
30
+ backendFederation
29
31
  } : {},
30
32
  ...vertical.api ? {
31
33
  deliveryUnit: deliveryUnitContractBlock(createDeliveryUnitRecord(scope, vertical))
@@ -111,9 +111,6 @@ function createRemoteStyles(enableTailwind, scope, app) {
111
111
  function createAppStyles(enableTailwind, scope, app) {
112
112
  return 'shell' === app.kind ? createShellStyles(enableTailwind, scope) : createRemoteStyles(enableTailwind, scope, app);
113
113
  }
114
- function createPostcssConfig() {
115
- return renderFileTemplate('workspace/postcss.config.mjs', {});
116
- }
117
114
  function createTailwindConfig() {
118
115
  return renderFileTemplate('workspace/tailwind.config.ts', {});
119
116
  }
@@ -128,4 +125,4 @@ function createRouteHeadModule(app) {
128
125
  function createShellFrameComponent() {
129
126
  return readFileTemplate('app/shell-frame.tsx');
130
127
  }
131
- export { createAppEnvDts, createAppRuntimeConfig, createAppStyles, createBoundaryDebugMetadata, createCssTokenImport, createPostcssConfig, createRemoteStyles, createRouteHeadModule, createSharedDesignTokensCss, createShellFrameComponent, createShellStyles, createTailwindConfig, createTailwindImport };
128
+ export { createAppEnvDts, createAppRuntimeConfig, createAppStyles, createRouteHeadModule, createSharedDesignTokensCss, createShellFrameComponent, createTailwindConfig };
@@ -6,6 +6,20 @@ import { packageName } from "./naming.js";
6
6
  import { createCloudflareDeployContract } from "./policy.js";
7
7
  import { createGeneratedToolingWrapperMap } from "./tooling-command-catalog.js";
8
8
  import { CLOUDFLARE_COMPATIBILITY_DATE, NODE_VERSION, PNPM_VERSION } from "./versions.js";
9
+ function isJsonValue(value) {
10
+ return void 0 !== value;
11
+ }
12
+ function optionalJsonEntry(key, value) {
13
+ return void 0 === value ? {} : {
14
+ [key]: value
15
+ };
16
+ }
17
+ function jsonEntries(entries) {
18
+ return Object.fromEntries(entries.filter((entry)=>isJsonValue(entry[1])));
19
+ }
20
+ function presentJsonValues(values) {
21
+ return values.filter(isJsonValue);
22
+ }
9
23
  function createTopology(scope, remotes = []) {
10
24
  const shellHost = createShellHost(remotes);
11
25
  return {
@@ -17,7 +31,7 @@ function createTopology(scope, remotes = []) {
17
31
  id: shellApp.id,
18
32
  kind: 'shell',
19
33
  package: packageName(scope, shellApp.packageSuffix),
20
- verticalRefs: shellHost.verticalRefs,
34
+ verticalRefs: shellHost.verticalRefs ?? [],
21
35
  moduleFederation: {
22
36
  role: 'host',
23
37
  name: shellApp.mfName,
@@ -31,7 +45,9 @@ function createTopology(scope, remotes = []) {
31
45
  verticals: remotes.map((vertical)=>({
32
46
  id: vertical.id,
33
47
  kind: vertical.kind,
34
- domain: vertical.domain,
48
+ ...vertical.domain ? {
49
+ domain: vertical.domain
50
+ } : {},
35
51
  package: packageName(scope, vertical.packageSuffix),
36
52
  path: vertical.directory,
37
53
  moduleFederation: {
@@ -44,18 +60,13 @@ function createTopology(scope, remotes = []) {
44
60
  remotes: createModuleFederationRemoteContracts(vertical)
45
61
  } : {},
46
62
  ssr: true,
47
- fallbackTelemetryEvent: 'modernjs:mv-runtime-parity',
48
63
  sharedContractVersion: 'mf-ssr-contract-v1'
49
64
  },
50
- ...createBackendFederationContract(scope, vertical) ? {
51
- backendFederation: createBackendFederationContract(scope, vertical)
52
- } : {},
65
+ ...optionalJsonEntry('backendFederation', createBackendFederationContract(scope, vertical)),
53
66
  ...vertical.api ? {
54
67
  deliveryUnit: deliveryUnitContractBlock(createDeliveryUnitRecord(scope, vertical))
55
68
  } : {},
56
- ...apiTopologyMetadata(vertical) ? {
57
- api: apiTopologyMetadata(vertical)
58
- } : {},
69
+ ...optionalJsonEntry('api', apiTopologyMetadata(vertical)),
59
70
  cloudflare: createCloudflareDeployContract(scope, vertical),
60
71
  ownership: vertical.ownership
61
72
  })),
@@ -124,7 +135,7 @@ function createDevelopmentOverlay(scope, remotes = []) {
124
135
  remote.id,
125
136
  `http://localhost:${remote.port}/mf-manifest.json`
126
137
  ])),
127
- serverExecution: Object.fromEntries(verticalApiApps(remotes).map((app)=>[
138
+ serverExecution: jsonEntries(verticalApiApps(remotes).map((app)=>[
128
139
  app.id,
129
140
  createServerExecutionOverlay(scope, app)
130
141
  ])),
@@ -192,7 +203,7 @@ function createUltramodernConfig(scope, modernVersion, packageSource, apps = [
192
203
  name: app.mfName,
193
204
  exposes: Object.keys(app.exposes ?? {}),
194
205
  ...'shell' === app.kind ? {
195
- verticalRefs: shellHost.verticalRefs,
206
+ verticalRefs: shellHost.verticalRefs ?? [],
196
207
  remotes: createModuleFederationRemoteContracts(shellHost, remotes)
197
208
  } : app.verticalRefs?.length ? {
198
209
  verticalRefs: app.verticalRefs,
@@ -200,13 +211,11 @@ function createUltramodernConfig(scope, modernVersion, packageSource, apps = [
200
211
  } : {},
201
212
  ssr: true,
202
213
  dts: {
203
- compilerInstance: 'tsgo',
214
+ compilerInstance: 'effect-tsgo',
204
215
  tsConfigPath: './tsconfig.mf-types.json'
205
216
  }
206
217
  },
207
- ...createBackendFederationContract(scope, app) ? {
208
- backendFederation: createBackendFederationContract(scope, app)
209
- } : {},
218
+ ...optionalJsonEntry('backendFederation', createBackendFederationContract(scope, app)),
210
219
  ...app.api ? {
211
220
  deliveryUnit: deliveryUnitContractBlock(createDeliveryUnitRecord(scope, app))
212
221
  } : {},
@@ -254,7 +263,7 @@ function createUltramodernConfig(scope, modernVersion, packageSource, apps = [
254
263
  }))
255
264
  },
256
265
  backendFederation: {
257
- apps: verticalApiApps(remotes).map((app)=>createBackendFederationSummary(scope, app))
266
+ apps: presentJsonValues(verticalApiApps(remotes).map((app)=>createBackendFederationSummary(scope, app)))
258
267
  },
259
268
  agentSkills: {
260
269
  target: 'codex',
@@ -96,7 +96,7 @@ nothing.
96
96
  for (const app of apiApps){
97
97
  const buildModulePath = node_path.join(app.directory, 'shared/ultramodern-build.ts');
98
98
  const buildArtifactPath = node_path.join(app.directory, 'shared/ultramodern-build.json');
99
- track(buildModulePath, writeTextIfChanged(node_path.join(workspaceRoot, buildModulePath), createUltramodernBuildModule()));
99
+ track(buildModulePath, writeTextIfChanged(node_path.join(workspaceRoot, buildModulePath), createUltramodernBuildModule(scope, app)));
100
100
  track(buildArtifactPath, writeTextIfChanged(node_path.join(workspaceRoot, buildArtifactPath), createUltramodernBuildArtifactJson(scope, app)));
101
101
  }
102
102
  if (0 === written.length) process.stdout.write('[ultramodern] sync-delivery-unit: already in sync; no files written.\n');
@@ -211,4 +211,4 @@ function remoteComponentOutputPath(app, expose) {
211
211
  if (!exposePath?.startsWith('./src/components/')) return;
212
212
  return `${app.directory}/${exposePath.replace(/^\.\//u, '')}`;
213
213
  }
214
- export { createLayout, createRemoteEntry, createRemoteExposeComponent, createRemotePage, createRemoteWidget, createShellPage, createShellRemoteComponents, remoteComponentOutputPath };
214
+ export { createLayout, createRemoteEntry, createRemoteExposeComponent, createRemotePage, createShellPage, createShellRemoteComponents, remoteComponentOutputPath };
@@ -1,5 +1,4 @@
1
1
  import { spawnSync } from "node:child_process";
2
- import node_crypto from "node:crypto";
3
2
  import node_fs from "node:fs";
4
3
  import { createRequire } from "node:module";
5
4
  import node_path from "node:path";
@@ -196,19 +195,6 @@ function collectTemplateFiles(dir) {
196
195
  collect(dir);
197
196
  return files;
198
197
  }
199
- function hashFile(filePath) {
200
- return node_crypto.createHash('sha256').update(node_fs.readFileSync(filePath)).digest('hex');
201
- }
202
- function hashTemplateTree(dir) {
203
- const hash = node_crypto.createHash('sha256');
204
- for (const relativePath of collectTemplateFiles(dir)){
205
- hash.update(relativePath);
206
- hash.update('\0');
207
- hash.update(hashFile(node_path.join(dir, relativePath)));
208
- hash.update('\0');
209
- }
210
- return hash.digest('hex');
211
- }
212
198
  function copyRootTemplate(targetDir, data) {
213
199
  for (const relativePath of collectTemplateFiles(workspaceTemplateDir)){
214
200
  const sourcePath = node_path.join(workspaceTemplateDir, relativePath);
@@ -223,4 +209,4 @@ function readJsonFile(filePath) {
223
209
  function writeJsonFile(filePath, value) {
224
210
  node_fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf-8');
225
211
  }
226
- export { assertSafeRelativePath, collectTemplateFiles, copyRootTemplate, createPackageRoot, ensureInsideRoot, fileTemplatesDir, formatGeneratedWorkspaceFiles, hashFile, hashTemplateTree, readFileTemplate, readJsonFile, renderFileTemplate, renderTemplate, workspaceTemplateDir, writeFile, writeFileReplacing, writeJson, writeJsonFile };
212
+ export { copyRootTemplate, createPackageRoot, formatGeneratedWorkspaceFiles, readFileTemplate, readJsonFile, renderFileTemplate, renderTemplate, workspaceTemplateDir, writeFile, writeFileReplacing, writeJson, writeJsonFile };
@@ -119,4 +119,4 @@ function createAppPublicLocaleMessages(app, language, remotes = []) {
119
119
  if ('shell' !== app.kind) return createAppLocaleMessages(app, language);
120
120
  return Object.assign({}, createAppLocaleMessages(app, language), ...remotes.map((remote)=>createAppLocaleMessages(remote, language)));
121
121
  }
122
- export { commonLocaleMessages, createAppLocaleMessages, createAppPublicLocaleMessages, createFallbackLocaleMessages, generatedLocaleResources };
122
+ export { createAppPublicLocaleMessages };
@@ -17,8 +17,9 @@ function extractDtsSettings(configPath, value) {
17
17
  if (!dts || dts.hasSpread) throw new Error(`Cannot statically extract Module Federation DTS settings from ${configPath}; use a literal dts object.`);
18
18
  const generateTypes = parseObjectLiteral(dts.properties.get('generateTypes'));
19
19
  if (generateTypes?.hasSpread) throw new Error(`Cannot statically extract Module Federation generateTypes settings from ${configPath}; use a literal generateTypes object.`);
20
+ const compilerInstanceSource = generateTypes?.properties.get('compilerInstance');
20
21
  return {
21
- compilerInstance: parseLiteralString(generateTypes?.properties.get('compilerInstance')),
22
+ compilerInstance: parseLiteralString(compilerInstanceSource) ?? ('tsgoCompilerInstance' === compilerInstanceSource ? 'effect-tsgo' : void 0),
22
23
  tsConfigPath: parseLiteralString(dts.properties.get('tsConfigPath'))
23
24
  };
24
25
  }
@@ -42,4 +43,4 @@ function inspectModuleFederationConfigSource(source, appDir, configPath) {
42
43
  hostOnlyNoExposes
43
44
  };
44
45
  }
45
- export { extractDtsSettings, extractExposes, hasHostOnlyNoExposesDeclaration, inspectModuleFederationConfigSource };
46
+ export { inspectModuleFederationConfigSource };
@@ -141,4 +141,4 @@ function parseArrayLiteral(source) {
141
141
  }
142
142
  return exposes;
143
143
  }
144
- export { findTopLevelColon, parseArrayLiteral, parseLiteralString, parseObjectKey, parseObjectLiteral, splitTopLevelEntries, stripConstAssertion, unescapeSingleQuotedString };
144
+ export { parseArrayLiteral, parseLiteralString, parseObjectLiteral };
@@ -86,4 +86,4 @@ function scanForModuleFederationConfigs(workspaceRoot, scanRoot, appDirs) {
86
86
  };
87
87
  visit(absoluteRoot);
88
88
  }
89
- export { addMetadataAppDir, collectBridgeScanRoots, collectMetadataAppDirs, firstSegment, isRecord, literalRootFromPattern, normalizeRelativePath, readGeneratedMetadata, readJsonIfExists, relativePath, scanForModuleFederationConfigs, toPosixPath };
89
+ export { collectBridgeScanRoots, collectMetadataAppDirs, firstSegment, isRecord, normalizeRelativePath, readGeneratedMetadata, readJsonIfExists, relativePath, scanForModuleFederationConfigs, toPosixPath };
@@ -151,4 +151,4 @@ function getOuterBlock(source, open, close) {
151
151
  suffix
152
152
  };
153
153
  }
154
- export { findBalanced, findCreateModuleFederationConfigObject, findExportDefaultObject, getOuterBlock, hasIdentifierBoundary, isEscaped, skipBlockComment, skipLineComment, skipQuoted, skipSyntax, skipTemplate, skipTemplateExpression, skipWhitespaceAndComments };
154
+ export { findCreateModuleFederationConfigObject, findExportDefaultObject, getOuterBlock, skipSyntax };
@@ -5,7 +5,7 @@ import { discoverModuleFederationConfigs } from "./discovery.js";
5
5
  import { inspectModuleFederationConfigSource } from "./inspect.js";
6
6
  import { relativePath } from "./path-utils.js";
7
7
  function assertExposedAppDtsSettings(app) {
8
- if ('tsgo' !== app.dts.compilerInstance) throw new Error(`Module Federation DTS compilerInstance must be "tsgo" for ${app.appDir}.`);
8
+ if ('effect-tsgo' !== app.dts.compilerInstance) throw new Error(`Module Federation DTS compilerInstance must resolve "@effect/tsgo" for ${app.appDir}.`);
9
9
  if ('./tsconfig.mf-types.json' !== app.dts.tsConfigPath) throw new Error(`Module Federation DTS tsConfigPath must be "./tsconfig.mf-types.json" for ${app.appDir}.`);
10
10
  }
11
11
  function assertTypesArchive(workspaceRoot, appDir) {