@bleedingdev/modern-js-ultramodern-create 3.8.3-ultramodern.2

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 (631) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +459 -0
  3. package/bin/run.js +74 -0
  4. package/dist/cjs/agent-files.cjs +96 -0
  5. package/dist/cjs/agents-md.cjs +98 -0
  6. package/dist/cjs/cli/flags.cjs +358 -0
  7. package/dist/cjs/cli/help.cjs +111 -0
  8. package/dist/cjs/cli/package-source.cjs +188 -0
  9. package/dist/cjs/cli/project-setup.cjs +159 -0
  10. package/dist/cjs/cli/prompts.cjs +100 -0
  11. package/dist/cjs/create-package-root.cjs +63 -0
  12. package/dist/cjs/docs-location.cjs +143 -0
  13. package/dist/cjs/index.cjs +169 -0
  14. package/dist/cjs/locale/en.cjs +126 -0
  15. package/dist/cjs/locale/index.cjs +50 -0
  16. package/dist/cjs/locale/zh.cjs +126 -0
  17. package/dist/cjs/ultramodern-package-source.cjs +115 -0
  18. package/dist/cjs/ultramodern-release-cohort.cjs +206 -0
  19. package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +132 -0
  20. package/dist/cjs/ultramodern-tooling/commands/context.cjs +131 -0
  21. package/dist/cjs/ultramodern-tooling/commands/mf-types.cjs +55 -0
  22. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +212 -0
  23. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +47 -0
  24. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +112 -0
  25. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +55 -0
  26. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +102 -0
  27. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +187 -0
  28. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +146 -0
  29. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.cjs +110 -0
  30. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +67 -0
  31. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +279 -0
  32. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +58 -0
  33. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +71 -0
  34. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs +67 -0
  35. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.cjs +151 -0
  36. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +67 -0
  37. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +52 -0
  38. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +447 -0
  39. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +309 -0
  40. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +87 -0
  41. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +588 -0
  42. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +376 -0
  43. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +73 -0
  44. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.cjs +215 -0
  45. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.cjs +135 -0
  46. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +454 -0
  47. package/dist/cjs/ultramodern-tooling/commands/options.cjs +59 -0
  48. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +122 -0
  49. package/dist/cjs/ultramodern-tooling/commands/skills.cjs +49 -0
  50. package/dist/cjs/ultramodern-tooling/commands/sync-delivery-unit.cjs +40 -0
  51. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +53 -0
  52. package/dist/cjs/ultramodern-tooling/commands.cjs +99 -0
  53. package/dist/cjs/ultramodern-tooling/config/constants.cjs +48 -0
  54. package/dist/cjs/ultramodern-tooling/config/index.cjs +104 -0
  55. package/dist/cjs/ultramodern-tooling/config/json.cjs +61 -0
  56. package/dist/cjs/ultramodern-tooling/config/load.cjs +62 -0
  57. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +92 -0
  58. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +236 -0
  59. package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +157 -0
  60. package/dist/cjs/ultramodern-tooling/config/types.cjs +18 -0
  61. package/dist/cjs/ultramodern-tooling/config.cjs +62 -0
  62. package/dist/cjs/ultramodern-workspace/add-shell.cjs +277 -0
  63. package/dist/cjs/ultramodern-workspace/add-vertical/constants.cjs +52 -0
  64. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +186 -0
  65. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +255 -0
  66. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +256 -0
  67. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +99 -0
  68. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +152 -0
  69. package/dist/cjs/ultramodern-workspace/add-vertical/transaction.cjs +590 -0
  70. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +137 -0
  71. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +84 -0
  72. package/dist/cjs/ultramodern-workspace/api/checkout-cart.cjs +145 -0
  73. package/dist/cjs/ultramodern-workspace/api/client.cjs +224 -0
  74. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +187 -0
  75. package/dist/cjs/ultramodern-workspace/api/names.cjs +98 -0
  76. package/dist/cjs/ultramodern-workspace/api/rpc.cjs +264 -0
  77. package/dist/cjs/ultramodern-workspace/api/service.cjs +252 -0
  78. package/dist/cjs/ultramodern-workspace/api/shared.cjs +264 -0
  79. package/dist/cjs/ultramodern-workspace/api.cjs +108 -0
  80. package/dist/cjs/ultramodern-workspace/app-files.cjs +206 -0
  81. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +355 -0
  82. package/dist/cjs/ultramodern-workspace/bridge-config/cli.cjs +71 -0
  83. package/dist/cjs/ultramodern-workspace/bridge-config/defaults.cjs +44 -0
  84. package/dist/cjs/ultramodern-workspace/bridge-config/gates.cjs +93 -0
  85. package/dist/cjs/ultramodern-workspace/bridge-config/index.cjs +60 -0
  86. package/dist/cjs/ultramodern-workspace/bridge-config/normalize.cjs +68 -0
  87. package/dist/cjs/ultramodern-workspace/bridge-config/schema.cjs +78 -0
  88. package/dist/cjs/ultramodern-workspace/bridge-config/shared.cjs +110 -0
  89. package/dist/cjs/ultramodern-workspace/bridge-config/validation.cjs +68 -0
  90. package/dist/cjs/ultramodern-workspace/bridge-config/workspace-packages.cjs +108 -0
  91. package/dist/cjs/ultramodern-workspace/bridge-config.cjs +62 -0
  92. package/dist/cjs/ultramodern-workspace/codesmith.cjs +144 -0
  93. package/dist/cjs/ultramodern-workspace/contracts.cjs +366 -0
  94. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/types.cjs +292 -0
  95. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/up-projection.cjs +188 -0
  96. package/dist/cjs/ultramodern-workspace/delivery-unit-stamp.cjs +59 -0
  97. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +150 -0
  98. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +75 -0
  99. package/dist/cjs/ultramodern-workspace/demo-components.cjs +685 -0
  100. package/dist/cjs/ultramodern-workspace/descriptors.cjs +307 -0
  101. package/dist/cjs/ultramodern-workspace/effect-diagnostics.cjs +114 -0
  102. package/dist/cjs/ultramodern-workspace/fs-io.cjs +324 -0
  103. package/dist/cjs/ultramodern-workspace/generation-result.cjs +191 -0
  104. package/dist/cjs/ultramodern-workspace/index.cjs +79 -0
  105. package/dist/cjs/ultramodern-workspace/locales.cjs +159 -0
  106. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +69 -0
  107. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +77 -0
  108. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +84 -0
  109. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +188 -0
  110. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +165 -0
  111. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +211 -0
  112. package/dist/cjs/ultramodern-workspace/mf-validation/types.cjs +18 -0
  113. package/dist/cjs/ultramodern-workspace/mf-validation/validate.cjs +112 -0
  114. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +48 -0
  115. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +343 -0
  116. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +111 -0
  117. package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +106 -0
  118. package/dist/cjs/ultramodern-workspace/module-federation/shared-config.cjs +53 -0
  119. package/dist/cjs/ultramodern-workspace/module-federation.cjs +77 -0
  120. package/dist/cjs/ultramodern-workspace/naming.cjs +155 -0
  121. package/dist/cjs/ultramodern-workspace/overlay-baseline-guard.cjs +408 -0
  122. package/dist/cjs/ultramodern-workspace/overlays.cjs +155 -0
  123. package/dist/cjs/ultramodern-workspace/package-json.cjs +269 -0
  124. package/dist/cjs/ultramodern-workspace/package-source.cjs +68 -0
  125. package/dist/cjs/ultramodern-workspace/policy.cjs +1020 -0
  126. package/dist/cjs/ultramodern-workspace/public-api.cjs +58 -0
  127. package/dist/cjs/ultramodern-workspace/public-surface.cjs +247 -0
  128. package/dist/cjs/ultramodern-workspace/routes.cjs +226 -0
  129. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +41 -0
  130. package/dist/cjs/ultramodern-workspace/shells.cjs +152 -0
  131. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +147 -0
  132. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +201 -0
  133. package/dist/cjs/ultramodern-workspace/types.cjs +88 -0
  134. package/dist/cjs/ultramodern-workspace/versions.cjs +184 -0
  135. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +175 -0
  136. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +261 -0
  137. package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +424 -0
  138. package/dist/cjs/ultramodern-workspace/write-app.cjs +148 -0
  139. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +232 -0
  140. package/dist/cjs/ultramodern-workspace/zerops.cjs +108 -0
  141. package/dist/esm/agent-files.js +47 -0
  142. package/dist/esm/agents-md.js +50 -0
  143. package/dist/esm/cli/flags.js +263 -0
  144. package/dist/esm/cli/help.js +70 -0
  145. package/dist/esm/cli/package-source.js +124 -0
  146. package/dist/esm/cli/project-setup.js +102 -0
  147. package/dist/esm/cli/prompts.js +51 -0
  148. package/dist/esm/create-package-root.js +14 -0
  149. package/dist/esm/docs-location.js +79 -0
  150. package/dist/esm/index.js +133 -0
  151. package/dist/esm/locale/en.js +88 -0
  152. package/dist/esm/locale/index.js +9 -0
  153. package/dist/esm/locale/zh.js +88 -0
  154. package/dist/esm/ultramodern-package-source.js +43 -0
  155. package/dist/esm/ultramodern-release-cohort.js +133 -0
  156. package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +84 -0
  157. package/dist/esm/ultramodern-tooling/commands/context.js +66 -0
  158. package/dist/esm/ultramodern-tooling/commands/mf-types.js +17 -0
  159. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +154 -0
  160. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +9 -0
  161. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +63 -0
  162. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +7 -0
  163. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +47 -0
  164. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +138 -0
  165. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +97 -0
  166. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.js +61 -0
  167. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +16 -0
  168. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +230 -0
  169. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +10 -0
  170. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +8 -0
  171. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +15 -0
  172. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +100 -0
  173. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +29 -0
  174. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +14 -0
  175. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +385 -0
  176. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +262 -0
  177. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +49 -0
  178. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +535 -0
  179. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +329 -0
  180. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +19 -0
  181. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.js +148 -0
  182. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +80 -0
  183. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +405 -0
  184. package/dist/esm/ultramodern-tooling/commands/options.js +18 -0
  185. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +74 -0
  186. package/dist/esm/ultramodern-tooling/commands/skills.js +11 -0
  187. package/dist/esm/ultramodern-tooling/commands/sync-delivery-unit.js +1 -0
  188. package/dist/esm/ultramodern-tooling/commands/validate.js +15 -0
  189. package/dist/esm/ultramodern-tooling/commands.js +51 -0
  190. package/dist/esm/ultramodern-tooling/config/constants.js +4 -0
  191. package/dist/esm/ultramodern-tooling/config/index.js +7 -0
  192. package/dist/esm/ultramodern-tooling/config/json.js +10 -0
  193. package/dist/esm/ultramodern-tooling/config/load.js +13 -0
  194. package/dist/esm/ultramodern-tooling/config/metadata.js +37 -0
  195. package/dist/esm/ultramodern-tooling/config/normalize.js +173 -0
  196. package/dist/esm/ultramodern-tooling/config/synthesize.js +108 -0
  197. package/dist/esm/ultramodern-tooling/config/types.js +0 -0
  198. package/dist/esm/ultramodern-tooling/config.js +1 -0
  199. package/dist/esm/ultramodern-workspace/add-shell.js +224 -0
  200. package/dist/esm/ultramodern-workspace/add-vertical/constants.js +5 -0
  201. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +138 -0
  202. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +205 -0
  203. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +198 -0
  204. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +48 -0
  205. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +108 -0
  206. package/dist/esm/ultramodern-workspace/add-vertical/transaction.js +529 -0
  207. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +67 -0
  208. package/dist/esm/ultramodern-workspace/add-vertical.js +6 -0
  209. package/dist/esm/ultramodern-workspace/api/checkout-cart.js +86 -0
  210. package/dist/esm/ultramodern-workspace/api/client.js +183 -0
  211. package/dist/esm/ultramodern-workspace/api/contracts.js +149 -0
  212. package/dist/esm/ultramodern-workspace/api/names.js +33 -0
  213. package/dist/esm/ultramodern-workspace/api/rpc.js +205 -0
  214. package/dist/esm/ultramodern-workspace/api/service.js +211 -0
  215. package/dist/esm/ultramodern-workspace/api/shared.js +226 -0
  216. package/dist/esm/ultramodern-workspace/api.js +6 -0
  217. package/dist/esm/ultramodern-workspace/app-files.js +150 -0
  218. package/dist/esm/ultramodern-workspace/backend-federation.js +290 -0
  219. package/dist/esm/ultramodern-workspace/bridge-config/cli.js +30 -0
  220. package/dist/esm/ultramodern-workspace/bridge-config/defaults.js +6 -0
  221. package/dist/esm/ultramodern-workspace/bridge-config/gates.js +52 -0
  222. package/dist/esm/ultramodern-workspace/bridge-config/index.js +3 -0
  223. package/dist/esm/ultramodern-workspace/bridge-config/normalize.js +30 -0
  224. package/dist/esm/ultramodern-workspace/bridge-config/schema.js +31 -0
  225. package/dist/esm/ultramodern-workspace/bridge-config/shared.js +51 -0
  226. package/dist/esm/ultramodern-workspace/bridge-config/validation.js +27 -0
  227. package/dist/esm/ultramodern-workspace/bridge-config/workspace-packages.js +67 -0
  228. package/dist/esm/ultramodern-workspace/bridge-config.js +1 -0
  229. package/dist/esm/ultramodern-workspace/codesmith.js +96 -0
  230. package/dist/esm/ultramodern-workspace/contracts.js +319 -0
  231. package/dist/esm/ultramodern-workspace/delivery-unit-schema/types.js +236 -0
  232. package/dist/esm/ultramodern-workspace/delivery-unit-schema/up-projection.js +129 -0
  233. package/dist/esm/ultramodern-workspace/delivery-unit-stamp.js +18 -0
  234. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +101 -0
  235. package/dist/esm/ultramodern-workspace/delivery-unit.js +21 -0
  236. package/dist/esm/ultramodern-workspace/demo-components.js +617 -0
  237. package/dist/esm/ultramodern-workspace/descriptors.js +191 -0
  238. package/dist/esm/ultramodern-workspace/effect-diagnostics.js +76 -0
  239. package/dist/esm/ultramodern-workspace/fs-io.js +235 -0
  240. package/dist/esm/ultramodern-workspace/generation-result.js +132 -0
  241. package/dist/esm/ultramodern-workspace/index.js +7 -0
  242. package/dist/esm/ultramodern-workspace/locales.js +121 -0
  243. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +19 -0
  244. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +28 -0
  245. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +46 -0
  246. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +144 -0
  247. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +89 -0
  248. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +161 -0
  249. package/dist/esm/ultramodern-workspace/mf-validation/types.js +0 -0
  250. package/dist/esm/ultramodern-workspace/mf-validation/validate.js +57 -0
  251. package/dist/esm/ultramodern-workspace/mf-validation.js +3 -0
  252. package/dist/esm/ultramodern-workspace/module-federation/config.js +296 -0
  253. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +67 -0
  254. package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +65 -0
  255. package/dist/esm/ultramodern-workspace/module-federation/shared-config.js +12 -0
  256. package/dist/esm/ultramodern-workspace/module-federation.js +5 -0
  257. package/dist/esm/ultramodern-workspace/naming.js +71 -0
  258. package/dist/esm/ultramodern-workspace/overlay-baseline-guard.js +350 -0
  259. package/dist/esm/ultramodern-workspace/overlays.js +103 -0
  260. package/dist/esm/ultramodern-workspace/package-json.js +201 -0
  261. package/dist/esm/ultramodern-workspace/package-source.js +27 -0
  262. package/dist/esm/ultramodern-workspace/policy.js +955 -0
  263. package/dist/esm/ultramodern-workspace/public-api.js +4 -0
  264. package/dist/esm/ultramodern-workspace/public-surface.js +183 -0
  265. package/dist/esm/ultramodern-workspace/routes.js +146 -0
  266. package/dist/esm/ultramodern-workspace/shared-patches.js +3 -0
  267. package/dist/esm/ultramodern-workspace/shells.js +96 -0
  268. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +100 -0
  269. package/dist/esm/ultramodern-workspace/tsconfigs.js +138 -0
  270. package/dist/esm/ultramodern-workspace/types.js +31 -0
  271. package/dist/esm/ultramodern-workspace/versions.js +38 -0
  272. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +125 -0
  273. package/dist/esm/ultramodern-workspace/workspace-scripts.js +200 -0
  274. package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +386 -0
  275. package/dist/esm/ultramodern-workspace/write-app.js +105 -0
  276. package/dist/esm/ultramodern-workspace/write-workspace.js +178 -0
  277. package/dist/esm/ultramodern-workspace/zerops.js +70 -0
  278. package/dist/esm-node/agent-files.js +48 -0
  279. package/dist/esm-node/agents-md.js +51 -0
  280. package/dist/esm-node/cli/flags.js +264 -0
  281. package/dist/esm-node/cli/help.js +71 -0
  282. package/dist/esm-node/cli/package-source.js +125 -0
  283. package/dist/esm-node/cli/project-setup.js +103 -0
  284. package/dist/esm-node/cli/prompts.js +52 -0
  285. package/dist/esm-node/create-package-root.js +15 -0
  286. package/dist/esm-node/docs-location.js +80 -0
  287. package/dist/esm-node/index.js +134 -0
  288. package/dist/esm-node/locale/en.js +89 -0
  289. package/dist/esm-node/locale/index.js +10 -0
  290. package/dist/esm-node/locale/zh.js +89 -0
  291. package/dist/esm-node/ultramodern-package-source.js +44 -0
  292. package/dist/esm-node/ultramodern-release-cohort.js +134 -0
  293. package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +85 -0
  294. package/dist/esm-node/ultramodern-tooling/commands/context.js +67 -0
  295. package/dist/esm-node/ultramodern-tooling/commands/mf-types.js +18 -0
  296. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +155 -0
  297. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +10 -0
  298. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +64 -0
  299. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +8 -0
  300. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +48 -0
  301. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +139 -0
  302. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +98 -0
  303. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.js +62 -0
  304. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +17 -0
  305. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +231 -0
  306. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +11 -0
  307. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +9 -0
  308. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +16 -0
  309. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +101 -0
  310. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +30 -0
  311. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +15 -0
  312. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +386 -0
  313. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +263 -0
  314. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +50 -0
  315. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +536 -0
  316. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +330 -0
  317. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +20 -0
  318. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.js +149 -0
  319. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +81 -0
  320. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +406 -0
  321. package/dist/esm-node/ultramodern-tooling/commands/options.js +19 -0
  322. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +75 -0
  323. package/dist/esm-node/ultramodern-tooling/commands/skills.js +12 -0
  324. package/dist/esm-node/ultramodern-tooling/commands/sync-delivery-unit.js +2 -0
  325. package/dist/esm-node/ultramodern-tooling/commands/validate.js +16 -0
  326. package/dist/esm-node/ultramodern-tooling/commands.js +52 -0
  327. package/dist/esm-node/ultramodern-tooling/config/constants.js +5 -0
  328. package/dist/esm-node/ultramodern-tooling/config/index.js +8 -0
  329. package/dist/esm-node/ultramodern-tooling/config/json.js +11 -0
  330. package/dist/esm-node/ultramodern-tooling/config/load.js +14 -0
  331. package/dist/esm-node/ultramodern-tooling/config/metadata.js +38 -0
  332. package/dist/esm-node/ultramodern-tooling/config/normalize.js +174 -0
  333. package/dist/esm-node/ultramodern-tooling/config/synthesize.js +109 -0
  334. package/dist/esm-node/ultramodern-tooling/config/types.js +1 -0
  335. package/dist/esm-node/ultramodern-tooling/config.js +2 -0
  336. package/dist/esm-node/ultramodern-workspace/add-shell.js +225 -0
  337. package/dist/esm-node/ultramodern-workspace/add-vertical/constants.js +6 -0
  338. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +139 -0
  339. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +206 -0
  340. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +199 -0
  341. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +49 -0
  342. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +109 -0
  343. package/dist/esm-node/ultramodern-workspace/add-vertical/transaction.js +530 -0
  344. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +68 -0
  345. package/dist/esm-node/ultramodern-workspace/add-vertical.js +7 -0
  346. package/dist/esm-node/ultramodern-workspace/api/checkout-cart.js +87 -0
  347. package/dist/esm-node/ultramodern-workspace/api/client.js +184 -0
  348. package/dist/esm-node/ultramodern-workspace/api/contracts.js +150 -0
  349. package/dist/esm-node/ultramodern-workspace/api/names.js +34 -0
  350. package/dist/esm-node/ultramodern-workspace/api/rpc.js +206 -0
  351. package/dist/esm-node/ultramodern-workspace/api/service.js +212 -0
  352. package/dist/esm-node/ultramodern-workspace/api/shared.js +227 -0
  353. package/dist/esm-node/ultramodern-workspace/api.js +7 -0
  354. package/dist/esm-node/ultramodern-workspace/app-files.js +151 -0
  355. package/dist/esm-node/ultramodern-workspace/backend-federation.js +291 -0
  356. package/dist/esm-node/ultramodern-workspace/bridge-config/cli.js +31 -0
  357. package/dist/esm-node/ultramodern-workspace/bridge-config/defaults.js +7 -0
  358. package/dist/esm-node/ultramodern-workspace/bridge-config/gates.js +53 -0
  359. package/dist/esm-node/ultramodern-workspace/bridge-config/index.js +4 -0
  360. package/dist/esm-node/ultramodern-workspace/bridge-config/normalize.js +31 -0
  361. package/dist/esm-node/ultramodern-workspace/bridge-config/schema.js +32 -0
  362. package/dist/esm-node/ultramodern-workspace/bridge-config/shared.js +52 -0
  363. package/dist/esm-node/ultramodern-workspace/bridge-config/validation.js +28 -0
  364. package/dist/esm-node/ultramodern-workspace/bridge-config/workspace-packages.js +68 -0
  365. package/dist/esm-node/ultramodern-workspace/bridge-config.js +2 -0
  366. package/dist/esm-node/ultramodern-workspace/codesmith.js +97 -0
  367. package/dist/esm-node/ultramodern-workspace/contracts.js +320 -0
  368. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/types.js +237 -0
  369. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/up-projection.js +130 -0
  370. package/dist/esm-node/ultramodern-workspace/delivery-unit-stamp.js +19 -0
  371. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +102 -0
  372. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +22 -0
  373. package/dist/esm-node/ultramodern-workspace/demo-components.js +618 -0
  374. package/dist/esm-node/ultramodern-workspace/descriptors.js +192 -0
  375. package/dist/esm-node/ultramodern-workspace/effect-diagnostics.js +77 -0
  376. package/dist/esm-node/ultramodern-workspace/fs-io.js +236 -0
  377. package/dist/esm-node/ultramodern-workspace/generation-result.js +133 -0
  378. package/dist/esm-node/ultramodern-workspace/index.js +8 -0
  379. package/dist/esm-node/ultramodern-workspace/locales.js +122 -0
  380. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +20 -0
  381. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +29 -0
  382. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +47 -0
  383. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +145 -0
  384. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +90 -0
  385. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +162 -0
  386. package/dist/esm-node/ultramodern-workspace/mf-validation/types.js +1 -0
  387. package/dist/esm-node/ultramodern-workspace/mf-validation/validate.js +58 -0
  388. package/dist/esm-node/ultramodern-workspace/mf-validation.js +4 -0
  389. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +297 -0
  390. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +68 -0
  391. package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +66 -0
  392. package/dist/esm-node/ultramodern-workspace/module-federation/shared-config.js +13 -0
  393. package/dist/esm-node/ultramodern-workspace/module-federation.js +6 -0
  394. package/dist/esm-node/ultramodern-workspace/naming.js +72 -0
  395. package/dist/esm-node/ultramodern-workspace/overlay-baseline-guard.js +351 -0
  396. package/dist/esm-node/ultramodern-workspace/overlays.js +104 -0
  397. package/dist/esm-node/ultramodern-workspace/package-json.js +202 -0
  398. package/dist/esm-node/ultramodern-workspace/package-source.js +28 -0
  399. package/dist/esm-node/ultramodern-workspace/policy.js +956 -0
  400. package/dist/esm-node/ultramodern-workspace/public-api.js +5 -0
  401. package/dist/esm-node/ultramodern-workspace/public-surface.js +184 -0
  402. package/dist/esm-node/ultramodern-workspace/routes.js +147 -0
  403. package/dist/esm-node/ultramodern-workspace/shared-patches.js +4 -0
  404. package/dist/esm-node/ultramodern-workspace/shells.js +97 -0
  405. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +101 -0
  406. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +139 -0
  407. package/dist/esm-node/ultramodern-workspace/types.js +32 -0
  408. package/dist/esm-node/ultramodern-workspace/versions.js +39 -0
  409. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +126 -0
  410. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +201 -0
  411. package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +387 -0
  412. package/dist/esm-node/ultramodern-workspace/write-app.js +106 -0
  413. package/dist/esm-node/ultramodern-workspace/write-workspace.js +179 -0
  414. package/dist/esm-node/ultramodern-workspace/zerops.js +71 -0
  415. package/dist/types/agent-files.d.ts +11 -0
  416. package/dist/types/agents-md.d.ts +1 -0
  417. package/dist/types/cli/flags.d.ts +35 -0
  418. package/dist/types/cli/help.d.ts +2 -0
  419. package/dist/types/cli/package-source.d.ts +15 -0
  420. package/dist/types/cli/project-setup.d.ts +8 -0
  421. package/dist/types/cli/prompts.d.ts +4 -0
  422. package/dist/types/create-package-root.d.ts +1 -0
  423. package/dist/types/docs-location.d.ts +23 -0
  424. package/dist/types/index.d.ts +1 -0
  425. package/dist/types/locale/en.d.ts +87 -0
  426. package/dist/types/locale/index.d.ts +176 -0
  427. package/dist/types/locale/zh.d.ts +87 -0
  428. package/dist/types/ultramodern-package-source.d.ts +20 -0
  429. package/dist/types/ultramodern-release-cohort.d.ts +30 -0
  430. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -0
  431. package/dist/types/ultramodern-tooling/commands/context.d.ts +11 -0
  432. package/dist/types/ultramodern-tooling/commands/mf-types.d.ts +2 -0
  433. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +12 -0
  434. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +4 -0
  435. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +1 -0
  436. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +3 -0
  437. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +5 -0
  438. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +3 -0
  439. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +2 -0
  440. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.d.ts +2 -0
  441. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +4 -0
  442. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +3 -0
  443. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +3 -0
  444. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +8 -0
  445. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +3 -0
  446. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.d.ts +3 -0
  447. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +1 -0
  448. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +2 -0
  449. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +26 -0
  450. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +25 -0
  451. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +3 -0
  452. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +26 -0
  453. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +26 -0
  454. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +6 -0
  455. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.d.ts +37 -0
  456. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.d.ts +4 -0
  457. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +2 -0
  458. package/dist/types/ultramodern-tooling/commands/options.d.ts +2 -0
  459. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +2 -0
  460. package/dist/types/ultramodern-tooling/commands/skills.d.ts +2 -0
  461. package/dist/types/ultramodern-tooling/commands/sync-delivery-unit.d.ts +1 -0
  462. package/dist/types/ultramodern-tooling/commands/validate.d.ts +2 -0
  463. package/dist/types/ultramodern-tooling/commands.d.ts +1 -0
  464. package/dist/types/ultramodern-tooling/config/constants.d.ts +3 -0
  465. package/dist/types/ultramodern-tooling/config/index.d.ts +7 -0
  466. package/dist/types/ultramodern-tooling/config/json.d.ts +2 -0
  467. package/dist/types/ultramodern-tooling/config/load.d.ts +2 -0
  468. package/dist/types/ultramodern-tooling/config/metadata.d.ts +4 -0
  469. package/dist/types/ultramodern-tooling/config/normalize.d.ts +22 -0
  470. package/dist/types/ultramodern-tooling/config/synthesize.d.ts +5 -0
  471. package/dist/types/ultramodern-tooling/config/types.d.ts +45 -0
  472. package/dist/types/ultramodern-tooling/config.d.ts +1 -0
  473. package/dist/types/ultramodern-workspace/add-shell.d.ts +14 -0
  474. package/dist/types/ultramodern-workspace/add-vertical/constants.d.ts +4 -0
  475. package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +9 -0
  476. package/dist/types/ultramodern-workspace/add-vertical/plan.d.ts +2 -0
  477. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +42 -0
  478. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +4 -0
  479. package/dist/types/ultramodern-workspace/add-vertical/topology.d.ts +9 -0
  480. package/dist/types/ultramodern-workspace/add-vertical/transaction.d.ts +49 -0
  481. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +15 -0
  482. package/dist/types/ultramodern-workspace/add-vertical.d.ts +7 -0
  483. package/dist/types/ultramodern-workspace/api/checkout-cart.d.ts +33 -0
  484. package/dist/types/ultramodern-workspace/api/client.d.ts +6 -0
  485. package/dist/types/ultramodern-workspace/api/contracts.d.ts +2 -0
  486. package/dist/types/ultramodern-workspace/api/names.d.ts +41 -0
  487. package/dist/types/ultramodern-workspace/api/rpc.d.ts +41 -0
  488. package/dist/types/ultramodern-workspace/api/service.d.ts +6 -0
  489. package/dist/types/ultramodern-workspace/api/shared.d.ts +5 -0
  490. package/dist/types/ultramodern-workspace/api.d.ts +6 -0
  491. package/dist/types/ultramodern-workspace/app-files.d.ts +8 -0
  492. package/dist/types/ultramodern-workspace/backend-federation.d.ts +11 -0
  493. package/dist/types/ultramodern-workspace/bridge-config/cli.d.ts +3 -0
  494. package/dist/types/ultramodern-workspace/bridge-config/defaults.d.ts +1 -0
  495. package/dist/types/ultramodern-workspace/bridge-config/gates.d.ts +3 -0
  496. package/dist/types/ultramodern-workspace/bridge-config/index.d.ts +4 -0
  497. package/dist/types/ultramodern-workspace/bridge-config/normalize.d.ts +2 -0
  498. package/dist/types/ultramodern-workspace/bridge-config/schema.d.ts +61 -0
  499. package/dist/types/ultramodern-workspace/bridge-config/shared.d.ts +12 -0
  500. package/dist/types/ultramodern-workspace/bridge-config/validation.d.ts +3 -0
  501. package/dist/types/ultramodern-workspace/bridge-config/workspace-packages.d.ts +3 -0
  502. package/dist/types/ultramodern-workspace/bridge-config.d.ts +1 -0
  503. package/dist/types/ultramodern-workspace/codesmith.d.ts +60 -0
  504. package/dist/types/ultramodern-workspace/contracts.d.ts +6 -0
  505. package/dist/types/ultramodern-workspace/delivery-unit-schema/types.d.ts +290 -0
  506. package/dist/types/ultramodern-workspace/delivery-unit-schema/up-projection.d.ts +189 -0
  507. package/dist/types/ultramodern-workspace/delivery-unit-stamp.d.ts +4 -0
  508. package/dist/types/ultramodern-workspace/delivery-unit-sync.d.ts +6 -0
  509. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +8 -0
  510. package/dist/types/ultramodern-workspace/demo-components.d.ts +19 -0
  511. package/dist/types/ultramodern-workspace/descriptors.d.ts +63 -0
  512. package/dist/types/ultramodern-workspace/effect-diagnostics.d.ts +1 -0
  513. package/dist/types/ultramodern-workspace/fs-io.d.ts +14 -0
  514. package/dist/types/ultramodern-workspace/generation-result.d.ts +16 -0
  515. package/dist/types/ultramodern-workspace/index.d.ts +10 -0
  516. package/dist/types/ultramodern-workspace/locales.d.ts +51 -0
  517. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +5 -0
  518. package/dist/types/ultramodern-workspace/mf-validation/discovery.d.ts +2 -0
  519. package/dist/types/ultramodern-workspace/mf-validation/inspect.d.ts +2 -0
  520. package/dist/types/ultramodern-workspace/mf-validation/object-literal.d.ts +4 -0
  521. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +11 -0
  522. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +6 -0
  523. package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +38 -0
  524. package/dist/types/ultramodern-workspace/mf-validation/validate.d.ts +4 -0
  525. package/dist/types/ultramodern-workspace/mf-validation.d.ts +4 -0
  526. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +5 -0
  527. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +4 -0
  528. package/dist/types/ultramodern-workspace/module-federation/remote-refs.d.ts +3 -0
  529. package/dist/types/ultramodern-workspace/module-federation/shared-config.d.ts +2 -0
  530. package/dist/types/ultramodern-workspace/module-federation.d.ts +5 -0
  531. package/dist/types/ultramodern-workspace/naming.d.ts +14 -0
  532. package/dist/types/ultramodern-workspace/overlay-baseline-guard.d.ts +57 -0
  533. package/dist/types/ultramodern-workspace/overlays.d.ts +6 -0
  534. package/dist/types/ultramodern-workspace/package-json.d.ts +8 -0
  535. package/dist/types/ultramodern-workspace/package-source.d.ts +3 -0
  536. package/dist/types/ultramodern-workspace/policy.d.ts +281 -0
  537. package/dist/types/ultramodern-workspace/public-api.d.ts +6 -0
  538. package/dist/types/ultramodern-workspace/public-surface.d.ts +27 -0
  539. package/dist/types/ultramodern-workspace/routes.d.ts +16 -0
  540. package/dist/types/ultramodern-workspace/shared-patches.d.ts +1 -0
  541. package/dist/types/ultramodern-workspace/shells.d.ts +48 -0
  542. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +18 -0
  543. package/dist/types/ultramodern-workspace/tsconfigs.d.ts +14 -0
  544. package/dist/types/ultramodern-workspace/types.d.ts +334 -0
  545. package/dist/types/ultramodern-workspace/versions.d.ts +42 -0
  546. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +63 -0
  547. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +16 -0
  548. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +217 -0
  549. package/dist/types/ultramodern-workspace/write-app.d.ts +4 -0
  550. package/dist/types/ultramodern-workspace/write-workspace.d.ts +6 -0
  551. package/dist/types/ultramodern-workspace/zerops.d.ts +2 -0
  552. package/package.json +115 -0
  553. package/template/AGENTS.md +20 -0
  554. package/template-workspace/.agents/agent-reference-repos.json +24 -0
  555. package/template-workspace/.codex/hooks.json +16 -0
  556. package/template-workspace/.codex/rstackjs-agent-skills-LICENSE +21 -0
  557. package/template-workspace/.codex/skills/rsbuild-best-practices/SKILL.md +57 -0
  558. package/template-workspace/.codex/skills/rsdoctor-analysis/SKILL.md +96 -0
  559. package/template-workspace/.codex/skills/rsdoctor-analysis/references/command-map.md +113 -0
  560. package/template-workspace/.codex/skills/rsdoctor-analysis/references/common-analysis-patterns.md +190 -0
  561. package/template-workspace/.codex/skills/rsdoctor-analysis/references/install-rsdoctor-common.md +88 -0
  562. package/template-workspace/.codex/skills/rsdoctor-analysis/references/install-rsdoctor-rspack.md +138 -0
  563. package/template-workspace/.codex/skills/rsdoctor-analysis/references/install-rsdoctor-webpack.md +71 -0
  564. package/template-workspace/.codex/skills/rsdoctor-analysis/references/install-rsdoctor.md +39 -0
  565. package/template-workspace/.codex/skills/rsdoctor-analysis/references/rsdoctor-data-types.md +103 -0
  566. package/template-workspace/.codex/skills/rslib-best-practices/SKILL.md +58 -0
  567. package/template-workspace/.codex/skills/rslib-modern-package/SKILL.md +173 -0
  568. package/template-workspace/.codex/skills/rspack-best-practices/SKILL.md +70 -0
  569. package/template-workspace/.codex/skills/rspack-tracing/SKILL.md +75 -0
  570. package/template-workspace/.codex/skills/rspack-tracing/references/bottlenecks.md +47 -0
  571. package/template-workspace/.codex/skills/rspack-tracing/references/tracing-guide.md +38 -0
  572. package/template-workspace/.codex/skills/rspack-tracing/scripts/analyze_trace.js +184 -0
  573. package/template-workspace/.codex/skills/rstest-best-practices/SKILL.md +133 -0
  574. package/template-workspace/.codex/skills-lock.json +114 -0
  575. package/template-workspace/.github/renovate.json +29 -0
  576. package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +71 -0
  577. package/template-workspace/.gitignore.handlebars +16 -0
  578. package/template-workspace/.mise.toml.handlebars +3 -0
  579. package/template-workspace/.modernjs/release-cohort.json +244 -0
  580. package/template-workspace/AGENTS.md.handlebars +30 -0
  581. package/template-workspace/CLAUDE.md.handlebars +1 -0
  582. package/template-workspace/README.md.handlebars +229 -0
  583. package/template-workspace/lefthook.yml +24 -0
  584. package/template-workspace/oxfmt.config.ts +20 -0
  585. package/template-workspace/oxlint.config.ts +38 -0
  586. package/template-workspace/patches/@module-federation__bridge-react@2.9.0.patch +47 -0
  587. package/template-workspace/patches/@module-federation__dts-plugin@2.9.0.patch +26 -0
  588. package/template-workspace/patches/@module-federation__modern-js-v3@2.9.0.patch +268 -0
  589. package/template-workspace/patches/@module-federation__runtime-core@2.9.0.patch +13 -0
  590. package/template-workspace/patches/@tanstack__router-core@1.171.27.patch +28 -0
  591. package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +471 -0
  592. package/template-workspace/patches/msgpackr@2.0.6.patch +29 -0
  593. package/template-workspace/patches/zod@4.4.3.patch +54 -0
  594. package/template-workspace/pnpm-workspace.yaml.handlebars +54 -0
  595. package/template-workspace/scripts/bootstrap-agent-skills.mjs +308 -0
  596. package/template-workspace/scripts/setup-agent-reference-repos.mjs +370 -0
  597. package/templates/app/shell-frame.tsx +49 -0
  598. package/templates/app/ultramodern-route-head.tsx.handlebars +153 -0
  599. package/templates/packages/shared-contracts-index.ts +400 -0
  600. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +42 -0
  601. package/templates/workspace/apps/modern.config.ts.handlebars +187 -0
  602. package/templates/workspace/apps/shared/src/routes/ultramodern-jsonld.ts.handlebars +119 -0
  603. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -0
  604. package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +49 -0
  605. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +27 -0
  606. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +4 -0
  607. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +44 -0
  608. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.helpers.tsx.handlebars +17 -0
  609. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.imports.tsx.handlebars +1 -0
  610. package/templates/workspace/packages/shared-design-tokens/tokens.css.handlebars +7 -0
  611. package/templates/workspace/tailwind.config.ts.handlebars +3 -0
  612. package/templates/workspace/verticals/server/checkout-cart-handlers.ts.handlebars +49 -0
  613. package/templates/workspace/verticals/server/checkout-cart-state.ts.handlebars +23 -0
  614. package/templates/workspace/verticals/shared/api.checkout-cart-contract-fields.ts.handlebars +1 -0
  615. package/templates/workspace/verticals/shared/api.checkout-cart-endpoints.ts.handlebars +23 -0
  616. package/templates/workspace/verticals/shared/api.checkout-cart-operation-contexts.ts.handlebars +29 -0
  617. package/templates/workspace/verticals/shared/api.checkout-cart-schemas.ts.handlebars +48 -0
  618. package/templates/workspace/verticals/src/api/checkout-cart-client-exports.ts.handlebars +70 -0
  619. package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +779 -0
  620. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mts +9 -0
  621. package/templates/workspace-scripts/generate-node-backend-federation.mjs +383 -0
  622. package/templates/workspace-scripts/generate-public-surface-assets.mjs +766 -0
  623. package/templates/workspace-scripts/materialize-zerops-runtime.mjs +447 -0
  624. package/templates/workspace-scripts/proof-cloudflare-version.mjs +682 -0
  625. package/templates/workspace-scripts/proof-node-backend-federation.mjs +1281 -0
  626. package/templates/workspace-scripts/proof-workerd-ssr.mts +847 -0
  627. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +1116 -0
  628. package/templates/workspace-scripts/ultramodern-performance-readiness.config.mjs +7 -0
  629. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +412 -0
  630. package/templates/workspace-scripts/ultramodern-typecheck.mjs +159 -0
  631. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +4094 -0
@@ -0,0 +1,766 @@
1
+ #!/usr/bin/env node
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { fileURLToPath, pathToFileURL } from 'node:url';
5
+
6
+ const workspaceRoot = path.resolve(
7
+ process.env.ULTRAMODERN_WORKSPACE_ROOT ??
8
+ path.join(path.dirname(fileURLToPath(import.meta.url)), '..'),
9
+ );
10
+ const compactConfigPath = path.join(workspaceRoot, '.modernjs/ultramodern.json');
11
+
12
+ function readJson(filePath) {
13
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
14
+ }
15
+
16
+ function toKebabCase(value) {
17
+ return String(value)
18
+ .trim()
19
+ .replace(/([a-z0-9])([A-Z])/gu, '$1-$2')
20
+ .replace(/[^a-zA-Z0-9._-]+/gu, '-')
21
+ .replace(/[._]+/gu, '-')
22
+ .toLowerCase()
23
+ .replace(/-+/gu, '-')
24
+ .replace(/^-+|-+$/gu, '');
25
+ }
26
+
27
+ function toEnvSegment(value) {
28
+ return toKebabCase(value).replace(/-/gu, '_').toUpperCase();
29
+ }
30
+
31
+ function normalizeRelativePath(value) {
32
+ return String(value ?? '').replace(/\\/gu, '/').replace(/^\.\/+/u, '');
33
+ }
34
+
35
+ function appNamespace(app) {
36
+ return app.kind === 'shell' ? 'shell' : (app.domain ?? app.id);
37
+ }
38
+
39
+ function defaultPortEnv(app) {
40
+ return app.kind === 'shell'
41
+ ? 'SHELL_SUPER_APP_PORT'
42
+ : `VERTICAL_${toEnvSegment(app.domain ?? app.id)}_PORT`;
43
+ }
44
+
45
+ function defaultPort(app) {
46
+ return app.kind === 'shell' ? 3020 : 3030;
47
+ }
48
+
49
+ function normalizeCompactApp(rawApp) {
50
+ const id = String(rawApp.id);
51
+ const kind = rawApp.kind === 'vertical' ? 'vertical' : 'shell';
52
+ const appPath =
53
+ typeof rawApp.path === 'string'
54
+ ? normalizeRelativePath(rawApp.path)
55
+ : kind === 'shell'
56
+ ? 'apps/shell-super-app'
57
+ : `verticals/${toKebabCase(id)}`;
58
+ const packageSuffix =
59
+ typeof rawApp.packageSuffix === 'string'
60
+ ? rawApp.packageSuffix
61
+ : appPath.split('/').at(-1) ?? id;
62
+ const domain =
63
+ typeof rawApp.domain === 'string'
64
+ ? rawApp.domain
65
+ : kind === 'vertical'
66
+ ? packageSuffix
67
+ : undefined;
68
+ const moduleFederation =
69
+ rawApp.moduleFederation && typeof rawApp.moduleFederation === 'object'
70
+ ? rawApp.moduleFederation
71
+ : {};
72
+
73
+ return {
74
+ id,
75
+ kind,
76
+ path: appPath,
77
+ packageSuffix,
78
+ domain,
79
+ port:
80
+ typeof rawApp.port === 'number'
81
+ ? rawApp.port
82
+ : defaultPort({ id, kind, domain }),
83
+ portEnv:
84
+ typeof rawApp.portEnv === 'string'
85
+ ? rawApp.portEnv
86
+ : defaultPortEnv({ id, kind, domain }),
87
+ mfName:
88
+ typeof moduleFederation.name === 'string'
89
+ ? moduleFederation.name
90
+ : kind === 'shell'
91
+ ? 'shellSuperApp'
92
+ : `vertical${toKebabCase(domain ?? id)
93
+ .split('-')
94
+ .filter(Boolean)
95
+ .map(part => part.charAt(0).toUpperCase() + part.slice(1))
96
+ .join('')}`,
97
+ exposes: Array.isArray(moduleFederation.exposes)
98
+ ? moduleFederation.exposes.filter(expose => typeof expose === 'string')
99
+ : [],
100
+ verticalRefs: Array.isArray(moduleFederation.verticalRefs)
101
+ ? moduleFederation.verticalRefs.filter(ref => typeof ref === 'string')
102
+ : [],
103
+ marker: {
104
+ appId: id,
105
+ },
106
+ routes:
107
+ rawApp.routes && typeof rawApp.routes === 'object'
108
+ ? rawApp.routes
109
+ : undefined,
110
+ api:
111
+ rawApp.api && typeof rawApp.api === 'object'
112
+ ? {
113
+ stem:
114
+ typeof rawApp.api.stem === 'string'
115
+ ? rawApp.api.stem
116
+ : domain ?? id,
117
+ prefix:
118
+ typeof rawApp.api.prefix === 'string'
119
+ ? rawApp.api.prefix
120
+ : `/${domain ?? id}-api`,
121
+ }
122
+ : undefined,
123
+ };
124
+ }
125
+
126
+ function createRouteOwnedEntries(app) {
127
+ const namespace = appNamespace(app);
128
+ const base = {
129
+ descriptionKey: `${namespace}.seo.description`,
130
+ mfBoundaryId: app.mfName,
131
+ namespace,
132
+ ownerAppId: app.id,
133
+ public: false,
134
+ indexable: false,
135
+ publicSurface: 'private-app-screen',
136
+ };
137
+
138
+ return [
139
+ {
140
+ ...base,
141
+ canonicalPath: '/',
142
+ id: app.kind === 'shell' ? 'shell-home' : `${app.id}-home`,
143
+ localisedPaths: {
144
+ cs: '/',
145
+ en: '/',
146
+ },
147
+ titleKey: app.kind === 'shell' ? 'shell.title' : `${namespace}.title`,
148
+ },
149
+ ];
150
+ }
151
+
152
+ function createPublicRoutes(app) {
153
+ return createRouteOwnedEntries(app)
154
+ .filter(route => route.public && route.indexable)
155
+ .map(route => ({
156
+ canonicalPath: route.canonicalPath,
157
+ id: route.id,
158
+ localisedPaths: route.localisedPaths,
159
+ namespace: route.namespace,
160
+ ownerAppId: route.ownerAppId,
161
+ descriptionKey: route.descriptionKey,
162
+ titleKey: route.titleKey,
163
+ }));
164
+ }
165
+
166
+ function createPublicSurface(app) {
167
+ const publicRoutes = createPublicRoutes(app);
168
+ const basePublicSurface = {
169
+ authoring: 'colocated-route-meta',
170
+ artifactLifecycle: 'build-and-deploy-output',
171
+ generatedManifest: './src/routes/ultramodern-route-metadata',
172
+ source: 'route-owned-public-routes',
173
+ metadataExport: './src/routes/ultramodern-route-metadata',
174
+ generator: 'scripts/generate-public-surface-assets.mts',
175
+ outputRoot: 'dist/public',
176
+ cloudflareBuildOutputRoot: 'dist-cloudflare/public',
177
+ privateRoutePolicy: 'omit-from-generated-public-surface',
178
+ files:
179
+ publicRoutes.length > 0
180
+ ? ['robots.txt', 'sitemap.xml', 'site.webmanifest']
181
+ : ['robots.txt'],
182
+ omittedByDefault: ['api-catalog.json', 'llms.txt', 'security.txt'],
183
+ languages: ['en', 'cs'],
184
+ contentExpansion: {
185
+ authoring: 'route-owned-esm-provider',
186
+ defaultProviderFile: 'route.sitemap.mjs',
187
+ entryExport: 'default-or-entries',
188
+ paramsSource: 'params-or-localeParams',
189
+ draftPolicy: 'omit-draft-by-default',
190
+ indexablePolicy: 'omit-indexable-false',
191
+ lifecycle: 'executed-during-public-surface-generation',
192
+ },
193
+ contentSources: [],
194
+ publicRoutes,
195
+ routeEntries: [],
196
+ concreteUrlPaths: [],
197
+ };
198
+
199
+ return app.routes?.publicSurface &&
200
+ typeof app.routes.publicSurface === 'object'
201
+ ? {
202
+ ...basePublicSurface,
203
+ ...app.routes.publicSurface,
204
+ }
205
+ : basePublicSurface;
206
+ }
207
+
208
+ function createCloudflareDeploy(config, app) {
209
+ const packageScope =
210
+ typeof config.workspace?.packageScope === 'string'
211
+ ? config.workspace.packageScope
212
+ : path.basename(workspaceRoot);
213
+ const compatibilityDate =
214
+ typeof config.deploy?.worker?.compatibilityDate === 'string'
215
+ ? config.deploy.worker.compatibilityDate
216
+ : '2026-06-02';
217
+ return {
218
+ workerName: `${toKebabCase(packageScope)}-${app.packageSuffix}`.slice(0, 63),
219
+ publicUrlEnv: `ULTRAMODERN_PUBLIC_URL_${toEnvSegment(app.id)}`,
220
+ compatibilityDate,
221
+ compatibilityFlags: ['nodejs_compat', 'global_fetch_strictly_public'],
222
+ };
223
+ }
224
+
225
+ function synthesizeContractFromCompactConfig(config) {
226
+ const apps = Array.isArray(config.topology?.apps)
227
+ ? config.topology.apps.map(normalizeCompactApp)
228
+ : [];
229
+
230
+ return {
231
+ sourcePath: compactConfigPath,
232
+ apps: apps.map(app => ({
233
+ ...app,
234
+ deploy: {
235
+ cloudflare: createCloudflareDeploy(config, app),
236
+ },
237
+ routes: {
238
+ publicSurface: createPublicSurface(app),
239
+ },
240
+ })),
241
+ };
242
+ }
243
+
244
+ function readGeneratedContractView() {
245
+ if (fs.existsSync(compactConfigPath)) {
246
+ return synthesizeContractFromCompactConfig(readJson(compactConfigPath));
247
+ }
248
+ throw new Error(
249
+ `Missing UltraModern config. Expected ${path.relative(
250
+ workspaceRoot,
251
+ compactConfigPath,
252
+ )}.`,
253
+ );
254
+ }
255
+
256
+ function parseArgs(argv) {
257
+ const parsed = {
258
+ appId: undefined,
259
+ target: 'dist',
260
+ requirePublicOrigin: false,
261
+ };
262
+
263
+ for (let index = 0; index < argv.length; index += 1) {
264
+ const arg = argv[index];
265
+ if (arg === '--app') {
266
+ parsed.appId = argv[index + 1];
267
+ index += 1;
268
+ } else if (arg === '--target') {
269
+ parsed.target = argv[index + 1];
270
+ index += 1;
271
+ } else if (arg === '--require-public-origin') {
272
+ parsed.requirePublicOrigin = true;
273
+ } else if (arg === '--help' || arg === '-h') {
274
+ parsed.help = true;
275
+ } else {
276
+ throw new Error(`Unknown argument: ${arg}`);
277
+ }
278
+ }
279
+
280
+ if (!parsed.appId && !parsed.help) {
281
+ throw new Error('Missing required --app argument');
282
+ }
283
+ if (!['dist', 'cloudflare-dist'].includes(parsed.target)) {
284
+ throw new Error(`Unsupported public surface target: ${parsed.target}`);
285
+ }
286
+
287
+ return parsed;
288
+ }
289
+
290
+ function printHelp() {
291
+ process.stdout.write(`Usage:
292
+ node scripts/generate-public-surface-assets.mts --app shell-super-app [--target dist|cloudflare-dist] [--require-public-origin]
293
+
294
+ Set each app's production URL using the contract env key, for example:
295
+ ULTRAMODERN_PUBLIC_URL_SHELL_SUPER_APP=https://example.com
296
+
297
+ Dynamic public routes can opt into sitemap expansion by adding a route-owned
298
+ route.sitemap.mjs provider beside route metadata, or by adding an
299
+ explicit provider to routes.publicSurface.contentSources. Providers should export
300
+ an entries array, entries() function, or default entries/loader returning
301
+ UltramodernPublicSitemapEntry[].
302
+ `);
303
+ }
304
+
305
+ function normalizeOrigin(value) {
306
+ if (typeof value !== 'string' || value.trim() === '') {
307
+ return undefined;
308
+ }
309
+ const url = new URL(value);
310
+ return url.origin;
311
+ }
312
+
313
+ function resolveOrigin(app, requirePublicOrigin) {
314
+ const cloudflare = app.deploy?.cloudflare ?? {};
315
+ const publicUrlEnv = cloudflare.publicUrlEnv;
316
+ const fromAppEnv =
317
+ typeof publicUrlEnv === 'string' ? normalizeOrigin(process.env[publicUrlEnv]) : undefined;
318
+ const fromGlobalEnv = normalizeOrigin(process.env.MODERN_PUBLIC_SITE_URL);
319
+ const workersDevSubdomain = process.env.ULTRAMODERN_CLOUDFLARE_WORKERS_DEV_SUBDOMAIN;
320
+ const fromWorkersDev =
321
+ typeof workersDevSubdomain === 'string' && workersDevSubdomain.trim() !== ''
322
+ ? normalizeOrigin(`https://${cloudflare.workerName}.${workersDevSubdomain}.workers.dev`)
323
+ : undefined;
324
+
325
+ // SEO output (sitemap <loc>, robots Sitemap:) uses the site-wide origin
326
+ // first; the per-app deployment URL is only a fallback.
327
+ const configuredOrigin = fromGlobalEnv ?? fromAppEnv ?? fromWorkersDev;
328
+ if (configuredOrigin) {
329
+ return configuredOrigin;
330
+ }
331
+ if (requirePublicOrigin) {
332
+ throw new Error(
333
+ `${app.id} has public routes but no production public URL. Set ${publicUrlEnv ?? 'ULTRAMODERN_PUBLIC_URL_<APP>'} or MODERN_PUBLIC_SITE_URL.`,
334
+ );
335
+ }
336
+ return undefined;
337
+ }
338
+
339
+ function ensureOutputDir(app, target) {
340
+ const relativeDir =
341
+ target === 'cloudflare-dist'
342
+ ? app.routes?.publicSurface?.cloudflareBuildOutputRoot
343
+ : app.routes?.publicSurface?.outputRoot;
344
+ if (typeof relativeDir !== 'string') {
345
+ throw new Error(`${app.id} public surface contract is missing outputRoot for ${target}`);
346
+ }
347
+ const outputDir = path.resolve(workspaceRoot, app.path, relativeDir);
348
+ const appRoot = path.resolve(workspaceRoot, app.path);
349
+ if (!outputDir.startsWith(appRoot + path.sep)) {
350
+ throw new Error(`${app.id} public surface output escaped the app directory`);
351
+ }
352
+ fs.mkdirSync(outputDir, { recursive: true });
353
+ return outputDir;
354
+ }
355
+
356
+ function resolveAppRelativePath(app, relativePath) {
357
+ if (
358
+ typeof relativePath !== 'string' ||
359
+ relativePath.trim() === '' ||
360
+ path.isAbsolute(relativePath) ||
361
+ relativePath.split(/[\\/]+/).includes('..')
362
+ ) {
363
+ throw new Error(app.id + ' public content source has an unsafe module path');
364
+ }
365
+ const appRoot = path.resolve(workspaceRoot, app.path);
366
+ const resolved = path.resolve(appRoot, relativePath);
367
+ if (resolved !== appRoot && !resolved.startsWith(appRoot + path.sep)) {
368
+ throw new Error(app.id + ' public content source escaped the app directory');
369
+ }
370
+ return resolved;
371
+ }
372
+
373
+ function normalizePublicPath(pathname) {
374
+ if (typeof pathname !== 'string') {
375
+ throw new Error('Public route path must be a string');
376
+ }
377
+ const normalised = pathname
378
+ .trim()
379
+ .replaceAll(/\/+/gu, '/')
380
+ .replace(/\/+$/u, '');
381
+ return normalised.length > 0 && normalised.startsWith('/')
382
+ ? normalised
383
+ : '/' + normalised;
384
+ }
385
+
386
+ function createLocalisedPublicPath(pathname, language) {
387
+ const publicPath = normalizePublicPath(pathname);
388
+ return publicPath === '/' ? '/' + language : '/' + language + publicPath;
389
+ }
390
+
391
+ function splitPublicPathSegments(pathname) {
392
+ return normalizePublicPath(pathname).split('/').filter(Boolean);
393
+ }
394
+
395
+ function routePathParamName(segment) {
396
+ if (segment.startsWith(':')) {
397
+ return segment.slice(1).replace(/[?*+]$/u, '');
398
+ }
399
+ if (segment.startsWith('[') && segment.endsWith(']')) {
400
+ return segment.slice(1, -1).replace(/^\.\.\./u, '').replace(/\$$/u, '');
401
+ }
402
+ return undefined;
403
+ }
404
+
405
+ function routeSegmentToDirectory(segment) {
406
+ const paramName = routePathParamName(segment);
407
+ if (paramName && segment.startsWith(':')) {
408
+ return segment.endsWith('?') ? '[' + paramName + '$]' : '[' + paramName + ']';
409
+ }
410
+ return segment;
411
+ }
412
+
413
+ function assertParamValue(routeId, language, paramName, value) {
414
+ if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean') {
415
+ throw new Error(routeId + ' ' + language + ' sitemap param ' + paramName + ' must be a string, number, or boolean');
416
+ }
417
+ const text = String(value).trim();
418
+ if (text === '' || text.includes('/')) {
419
+ throw new Error(routeId + ' ' + language + ' sitemap param ' + paramName + ' must be a non-empty path segment');
420
+ }
421
+ return encodeURIComponent(text);
422
+ }
423
+
424
+ function expandPublicPathPattern(routeId, language, pattern, params) {
425
+ const segments = splitPublicPathSegments(pattern);
426
+ if (segments.length === 0) {
427
+ return '/';
428
+ }
429
+ const expanded = segments.map(segment => {
430
+ const paramName = routePathParamName(segment);
431
+ if (!paramName) {
432
+ if (segment.includes('*')) {
433
+ throw new Error(routeId + ' ' + language + ' sitemap expansion does not support wildcard path segment ' + segment);
434
+ }
435
+ return segment;
436
+ }
437
+ if (!Object.prototype.hasOwnProperty.call(params, paramName)) {
438
+ throw new Error(routeId + ' ' + language + ' sitemap entry is missing param ' + paramName);
439
+ }
440
+ return assertParamValue(routeId, language, paramName, params[paramName]);
441
+ });
442
+ return '/' + expanded.join('/');
443
+ }
444
+
445
+ function assertPlainObject(value, label) {
446
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
447
+ throw new Error(label + ' must be an object');
448
+ }
449
+ return value;
450
+ }
451
+
452
+ function normalizeSitemapFields(routeId, entry) {
453
+ const normalized = {};
454
+ if (entry.lastModified !== undefined) {
455
+ const lastModified = String(entry.lastModified).trim();
456
+ if (lastModified === '' || Number.isNaN(Date.parse(lastModified))) {
457
+ throw new Error(routeId + ' sitemap entry has invalid lastModified');
458
+ }
459
+ normalized.lastModified = lastModified;
460
+ }
461
+ if (entry.changeFrequency !== undefined) {
462
+ const allowed = new Set(['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never']);
463
+ if (!allowed.has(entry.changeFrequency)) {
464
+ throw new Error(routeId + ' sitemap entry has invalid changeFrequency');
465
+ }
466
+ normalized.changeFrequency = entry.changeFrequency;
467
+ }
468
+ if (entry.priority !== undefined) {
469
+ if (typeof entry.priority !== 'number' || entry.priority < 0 || entry.priority > 1) {
470
+ throw new Error(routeId + ' sitemap entry priority must be a number between 0 and 1');
471
+ }
472
+ normalized.priority = entry.priority;
473
+ }
474
+ return normalized;
475
+ }
476
+
477
+ function routePathToProviderDirectory(routePath) {
478
+ const segments = splitPublicPathSegments(routePath);
479
+ if (segments.length === 0) {
480
+ return 'src/routes/[lang]';
481
+ }
482
+ return path.posix.join(
483
+ 'src/routes/[lang]',
484
+ ...segments.map(routeSegmentToDirectory),
485
+ );
486
+ }
487
+
488
+ function createDiscoveredContentSources(app, publicSurface) {
489
+ const explicitRouteIds = new Set(
490
+ (publicSurface.contentSources ?? []).map(source => source.routeId),
491
+ );
492
+ const discovered = [];
493
+ for (const route of publicSurface.publicRoutes ?? []) {
494
+ if (
495
+ explicitRouteIds.has(route.id) ||
496
+ !Object.values(route.localisedPaths ?? {}).some(routePath =>
497
+ /(?:^|\/):[^/]+|\[[^\]]+\]/u.test(routePath),
498
+ )
499
+ ) {
500
+ continue;
501
+ }
502
+ const providerModule = path.posix.join(
503
+ routePathToProviderDirectory(route.canonicalPath),
504
+ 'route.sitemap.mjs',
505
+ );
506
+ if (fs.existsSync(resolveAppRelativePath(app, providerModule))) {
507
+ discovered.push({
508
+ entryExport: 'default-or-entries',
509
+ module: providerModule,
510
+ routeId: route.id,
511
+ });
512
+ }
513
+ }
514
+ return discovered;
515
+ }
516
+
517
+ function resolveContentSources(app, publicSurface) {
518
+ return [
519
+ ...(publicSurface.contentSources ?? []),
520
+ ...createDiscoveredContentSources(app, publicSurface),
521
+ ];
522
+ }
523
+
524
+ async function loadContentSourceEntries(app, contentSource, languages) {
525
+ if (typeof contentSource?.routeId !== 'string' || contentSource.routeId.trim() === '') {
526
+ throw new Error(app.id + ' public content source is missing routeId');
527
+ }
528
+ const modulePath = resolveAppRelativePath(app, contentSource.module);
529
+ const moduleExports = await import(pathToFileURL(modulePath).href);
530
+ const exported = moduleExports.default ?? moduleExports.entries;
531
+ const rawEntries =
532
+ typeof exported === 'function'
533
+ ? await exported({
534
+ appId: app.id,
535
+ languages,
536
+ routeId: contentSource.routeId,
537
+ })
538
+ : exported;
539
+ if (!Array.isArray(rawEntries)) {
540
+ throw new Error(app.id + ' public content source for ' + contentSource.routeId + ' must export an entries array or loader');
541
+ }
542
+ return rawEntries;
543
+ }
544
+
545
+ async function expandContentSources(app, publicSurface, languages) {
546
+ const routesById = new Map(
547
+ (publicSurface.publicRoutes ?? []).map(route => [route.id, route]),
548
+ );
549
+ const expanded = [];
550
+ for (const contentSource of resolveContentSources(app, publicSurface)) {
551
+ const route = routesById.get(contentSource.routeId);
552
+ if (!route) {
553
+ throw new Error(app.id + ' public content source references unknown route ' + contentSource.routeId);
554
+ }
555
+ const rawEntries = await loadContentSourceEntries(app, contentSource, languages);
556
+ for (const rawEntry of rawEntries) {
557
+ const entry = assertPlainObject(rawEntry, route.id + ' sitemap entry');
558
+ if (entry.draft === true || entry.indexable === false) {
559
+ continue;
560
+ }
561
+ const baseParams = assertPlainObject(entry.params, route.id + ' sitemap entry params');
562
+ const localeParams = entry.localeParams === undefined
563
+ ? {}
564
+ : assertPlainObject(entry.localeParams, route.id + ' sitemap entry localeParams');
565
+ const localeUrlPaths = {};
566
+ for (const language of languages) {
567
+ const params = {
568
+ ...baseParams,
569
+ ...(localeParams[language] ?? {}),
570
+ };
571
+ localeUrlPaths[language] = createLocalisedPublicPath(
572
+ expandPublicPathPattern(route.id, language, route.localisedPaths[language], params),
573
+ language,
574
+ );
575
+ }
576
+ expanded.push({
577
+ ...route,
578
+ ...normalizeSitemapFields(route.id, entry),
579
+ canonicalUrlPath: localeUrlPaths.en,
580
+ localeUrlPaths,
581
+ });
582
+ }
583
+ }
584
+ return expanded;
585
+ }
586
+
587
+ function mergeRouteEntries(routeEntries, expandedRouteEntries, languages) {
588
+ const byKey = new Map();
589
+ const urlPathOwners = new Map();
590
+ for (const route of [...routeEntries, ...expandedRouteEntries]) {
591
+ const key = route.id + ':' + route.canonicalUrlPath;
592
+ if (byKey.has(key)) {
593
+ throw new Error('Duplicate public sitemap route entry ' + key);
594
+ }
595
+ for (const language of languages) {
596
+ const urlPath = route.localeUrlPaths?.[language];
597
+ if (typeof urlPath !== 'string') {
598
+ throw new Error(route.id + ' public route entry is missing ' + language + ' locale URL path');
599
+ }
600
+ const existingOwner = urlPathOwners.get(urlPath);
601
+ if (existingOwner && existingOwner !== route.id) {
602
+ throw new Error('Duplicate public sitemap URL path ' + urlPath + ' from ' + existingOwner + ' and ' + route.id);
603
+ }
604
+ urlPathOwners.set(urlPath, route.id);
605
+ }
606
+ byKey.set(key, route);
607
+ }
608
+ return Array.from(byKey.values()).sort(
609
+ (left, right) =>
610
+ left.canonicalUrlPath.localeCompare(right.canonicalUrlPath) ||
611
+ left.id.localeCompare(right.id),
612
+ );
613
+ }
614
+
615
+ function uniqueSorted(values) {
616
+ return Array.from(new Set(values)).sort((left, right) =>
617
+ left.localeCompare(right),
618
+ );
619
+ }
620
+
621
+ function createConcreteUrlPaths(routeEntries, languages) {
622
+ return uniqueSorted(
623
+ routeEntries.flatMap(route => languages.map(language => route.localeUrlPaths[language])),
624
+ );
625
+ }
626
+
627
+ function escapeXmlText(value) {
628
+ return value
629
+ .replaceAll('&', '&amp;')
630
+ .replaceAll('<', '&lt;')
631
+ .replaceAll('>', '&gt;');
632
+ }
633
+
634
+ function escapeXmlAttribute(value) {
635
+ return escapeXmlText(value).replaceAll('"', '&quot;');
636
+ }
637
+
638
+ function renderRobotsTxt(urlPaths, sitemapUrl) {
639
+ const lines = ['User-agent: *'];
640
+ if (urlPaths.length === 0) {
641
+ lines.push('Disallow: /');
642
+ } else {
643
+ for (const urlPath of urlPaths) {
644
+ lines.push(`Allow: ${urlPath}$`);
645
+ }
646
+ lines.push('Disallow: /');
647
+ if (sitemapUrl) {
648
+ lines.push(`Sitemap: ${sitemapUrl}`);
649
+ }
650
+ }
651
+ return `${lines.join('\n')}\n`;
652
+ }
653
+
654
+ function renderSitemapXml(origin, routeEntries, languages) {
655
+ const lines = [
656
+ '<?xml version="1.0" encoding="UTF-8"?>',
657
+ '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">',
658
+ ];
659
+
660
+ for (const route of routeEntries) {
661
+ for (const language of languages) {
662
+ lines.push(' <url>');
663
+ lines.push(` <loc>${escapeXmlText(`${origin}${route.localeUrlPaths[language]}`)}</loc>`);
664
+ for (const alternateLanguage of languages) {
665
+ lines.push(
666
+ ` <xhtml:link rel="alternate" hreflang="${alternateLanguage}" href="${escapeXmlAttribute(
667
+ `${origin}${route.localeUrlPaths[alternateLanguage]}`,
668
+ )}" />`,
669
+ );
670
+ }
671
+ lines.push(
672
+ ` <xhtml:link rel="alternate" hreflang="x-default" href="${escapeXmlAttribute(
673
+ `${origin}${route.localeUrlPaths.en}`,
674
+ )}" />`,
675
+ );
676
+ if (route.lastModified) {
677
+ lines.push(` <lastmod>${escapeXmlText(route.lastModified)}</lastmod>`);
678
+ }
679
+ if (route.changeFrequency) {
680
+ lines.push(` <changefreq>${escapeXmlText(route.changeFrequency)}</changefreq>`);
681
+ }
682
+ if (route.priority !== undefined) {
683
+ lines.push(` <priority>${route.priority.toFixed(1).replace(/\.0$/u, '')}</priority>`);
684
+ }
685
+ lines.push(' </url>');
686
+ }
687
+ }
688
+
689
+ lines.push('</urlset>');
690
+ return `${lines.join('\n')}\n`;
691
+ }
692
+
693
+ function renderWebManifest(app, urlPaths) {
694
+ const startUrl = urlPaths[0];
695
+ const manifest = {
696
+ background_color: '#ffffff',
697
+ categories: ['business', 'productivity'],
698
+ display: 'standalone',
699
+ icons: [],
700
+ lang: 'en',
701
+ name: app.marker?.appId ?? app.id,
702
+ short_name: app.marker?.appId ?? app.id,
703
+ theme_color: '#133225',
704
+ ...(startUrl ? { scope: '/', start_url: startUrl } : {}),
705
+ };
706
+ return `${JSON.stringify(manifest, null, 2)}\n`;
707
+ }
708
+
709
+ function removeIfExists(outputDir, fileName) {
710
+ fs.rmSync(path.join(outputDir, fileName), { force: true });
711
+ }
712
+
713
+ function writeText(outputDir, fileName, content) {
714
+ fs.writeFileSync(path.join(outputDir, fileName), content);
715
+ }
716
+
717
+ async function generatePublicSurfaceAssets(app, target, requirePublicOrigin) {
718
+ const publicSurface = app.routes?.publicSurface ?? {};
719
+ const languages = publicSurface.languages ?? ['en', 'cs'];
720
+ const outputDir = ensureOutputDir(app, target);
721
+ const shouldRequirePublicOrigin =
722
+ requirePublicOrigin ||
723
+ process.env.ULTRAMODERN_CLOUDFLARE_REQUIRE_PUBLIC_URLS === 'true';
724
+ const routeEntries = mergeRouteEntries(
725
+ publicSurface.routeEntries ?? [],
726
+ await expandContentSources(app, publicSurface, languages),
727
+ languages,
728
+ );
729
+ const urlPaths = createConcreteUrlPaths(routeEntries, languages);
730
+
731
+ if (routeEntries.length === 0) {
732
+ writeText(outputDir, 'robots.txt', renderRobotsTxt([], undefined));
733
+ removeIfExists(outputDir, 'sitemap.xml');
734
+ removeIfExists(outputDir, 'site.webmanifest');
735
+ return;
736
+ }
737
+
738
+ const origin = resolveOrigin(app, shouldRequirePublicOrigin);
739
+ if (!origin) {
740
+ writeText(outputDir, 'robots.txt', renderRobotsTxt([], undefined));
741
+ removeIfExists(outputDir, 'sitemap.xml');
742
+ removeIfExists(outputDir, 'site.webmanifest');
743
+ return;
744
+ }
745
+
746
+ writeText(outputDir, 'sitemap.xml', renderSitemapXml(origin, routeEntries, languages));
747
+ writeText(outputDir, 'site.webmanifest', renderWebManifest(app, urlPaths));
748
+ writeText(outputDir, 'robots.txt', renderRobotsTxt(urlPaths, `${origin}/sitemap.xml`));
749
+ }
750
+
751
+ try {
752
+ const args = parseArgs(process.argv.slice(2));
753
+ if (args.help) {
754
+ printHelp();
755
+ process.exit(0);
756
+ }
757
+ const contract = readGeneratedContractView();
758
+ const app = contract.apps?.find(candidate => candidate.id === args.appId);
759
+ if (!app) {
760
+ throw new Error(`Unknown app in UltraModern config: ${args.appId}`);
761
+ }
762
+ await generatePublicSurfaceAssets(app, args.target, args.requirePublicOrigin);
763
+ } catch (error) {
764
+ process.stderr.write(`[public-surface] ${error.message}\n`);
765
+ process.exitCode = 1;
766
+ }