@bleedingdev/modern-js-create 3.5.0-ultramodern.3 → 3.5.0-ultramodern.31

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 (461) hide show
  1. package/README.md +21 -17
  2. package/dist/cjs/cli/flags.cjs +326 -0
  3. package/dist/cjs/cli/help.cjs +106 -0
  4. package/dist/cjs/cli/package-source.cjs +186 -0
  5. package/dist/cjs/cli/project-setup.cjs +138 -0
  6. package/dist/cjs/cli/prompts.cjs +118 -0
  7. package/dist/cjs/index.cjs +24 -581
  8. package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +132 -0
  9. package/dist/cjs/ultramodern-tooling/commands/context.cjs +131 -0
  10. package/dist/cjs/ultramodern-tooling/commands/mf-types.cjs +55 -0
  11. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +158 -0
  12. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +49 -0
  13. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +87 -0
  14. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +58 -0
  15. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +62 -0
  16. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +60 -0
  17. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +132 -0
  18. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +67 -0
  19. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +93 -0
  20. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +60 -0
  21. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +67 -0
  22. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs +67 -0
  23. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +54 -0
  24. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +52 -0
  25. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +133 -0
  26. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +219 -0
  27. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +76 -0
  28. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +131 -0
  29. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +161 -0
  30. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +88 -0
  31. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +149 -0
  32. package/dist/cjs/ultramodern-tooling/commands/options.cjs +59 -0
  33. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +122 -0
  34. package/dist/cjs/ultramodern-tooling/commands/skills.cjs +49 -0
  35. package/dist/cjs/ultramodern-tooling/commands/sync-delivery-unit.cjs +40 -0
  36. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +49 -0
  37. package/dist/cjs/ultramodern-tooling/commands.cjs +27 -478
  38. package/dist/cjs/ultramodern-tooling/config/constants.cjs +48 -0
  39. package/dist/cjs/ultramodern-tooling/config/index.cjs +104 -0
  40. package/dist/cjs/ultramodern-tooling/config/json.cjs +61 -0
  41. package/dist/cjs/ultramodern-tooling/config/load.cjs +62 -0
  42. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +92 -0
  43. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +160 -0
  44. package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +157 -0
  45. package/dist/cjs/ultramodern-tooling/config/types.cjs +18 -0
  46. package/dist/cjs/ultramodern-tooling/config.cjs +23 -133
  47. package/dist/cjs/ultramodern-workspace/add-vertical/constants.cjs +52 -0
  48. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +156 -0
  49. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +246 -0
  50. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +198 -0
  51. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +116 -0
  52. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +133 -0
  53. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +107 -0
  54. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +22 -571
  55. package/dist/cjs/ultramodern-workspace/api/checkout-cart.cjs +145 -0
  56. package/dist/cjs/ultramodern-workspace/api/client.cjs +218 -0
  57. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +222 -0
  58. package/dist/cjs/ultramodern-workspace/api/names.cjs +98 -0
  59. package/dist/cjs/ultramodern-workspace/api/service.cjs +220 -0
  60. package/dist/cjs/ultramodern-workspace/api/shared.cjs +252 -0
  61. package/dist/cjs/ultramodern-workspace/api.cjs +29 -1004
  62. package/dist/cjs/ultramodern-workspace/app-files.cjs +11 -29
  63. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +296 -0
  64. package/dist/cjs/ultramodern-workspace/bridge-config/cli.cjs +71 -0
  65. package/dist/cjs/ultramodern-workspace/bridge-config/defaults.cjs +43 -0
  66. package/dist/cjs/ultramodern-workspace/bridge-config/gates.cjs +93 -0
  67. package/dist/cjs/ultramodern-workspace/bridge-config/index.cjs +60 -0
  68. package/dist/cjs/ultramodern-workspace/bridge-config/normalize.cjs +68 -0
  69. package/dist/cjs/ultramodern-workspace/bridge-config/schema.cjs +78 -0
  70. package/dist/cjs/ultramodern-workspace/bridge-config/shared.cjs +110 -0
  71. package/dist/cjs/ultramodern-workspace/bridge-config/validation.cjs +68 -0
  72. package/dist/cjs/ultramodern-workspace/bridge-config/workspace-packages.cjs +108 -0
  73. package/dist/cjs/ultramodern-workspace/bridge-config.cjs +32 -297
  74. package/dist/cjs/ultramodern-workspace/contracts.cjs +24 -8
  75. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +159 -0
  76. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +75 -0
  77. package/dist/cjs/ultramodern-workspace/demo-components.cjs +47 -189
  78. package/dist/cjs/ultramodern-workspace/descriptors.cjs +36 -1
  79. package/dist/cjs/ultramodern-workspace/effect-diagnostics.cjs +114 -0
  80. package/dist/cjs/ultramodern-workspace/fs-io.cjs +24 -2
  81. package/dist/cjs/ultramodern-workspace/index.cjs +4 -0
  82. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +69 -0
  83. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +77 -0
  84. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +92 -0
  85. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +203 -0
  86. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +171 -0
  87. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +228 -0
  88. package/dist/cjs/ultramodern-workspace/mf-validation/types.cjs +18 -0
  89. package/dist/cjs/ultramodern-workspace/mf-validation/validate.cjs +112 -0
  90. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +6 -529
  91. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +251 -0
  92. package/dist/cjs/ultramodern-workspace/module-federation/index.cjs +73 -0
  93. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +73 -0
  94. package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +105 -0
  95. package/dist/cjs/ultramodern-workspace/module-federation/shared-config.cjs +53 -0
  96. package/dist/cjs/ultramodern-workspace/module-federation.cjs +18 -477
  97. package/dist/cjs/ultramodern-workspace/package-json.cjs +25 -258
  98. package/dist/cjs/ultramodern-workspace/pnpm-workspace-policy-plan.cjs +166 -0
  99. package/dist/cjs/ultramodern-workspace/routes.cjs +8 -142
  100. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +44 -0
  101. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +153 -0
  102. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +199 -0
  103. package/dist/cjs/ultramodern-workspace/versions.cjs +8 -3
  104. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +175 -0
  105. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +104 -63
  106. package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +97 -0
  107. package/dist/cjs/ultramodern-workspace/write-app.cjs +128 -0
  108. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +10 -59
  109. package/dist/cjs/ultramodern-workspace/zerops.cjs +103 -0
  110. package/dist/esm/cli/flags.js +228 -0
  111. package/dist/esm/cli/help.js +65 -0
  112. package/dist/esm/cli/package-source.js +119 -0
  113. package/dist/esm/cli/project-setup.js +81 -0
  114. package/dist/esm/cli/prompts.js +63 -0
  115. package/dist/esm/index.js +6 -559
  116. package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +84 -0
  117. package/dist/esm/ultramodern-tooling/commands/context.js +66 -0
  118. package/dist/esm/ultramodern-tooling/commands/mf-types.js +17 -0
  119. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +106 -0
  120. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +11 -0
  121. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +38 -0
  122. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +10 -0
  123. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +14 -0
  124. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +12 -0
  125. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +83 -0
  126. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +16 -0
  127. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +44 -0
  128. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +12 -0
  129. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +7 -0
  130. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +15 -0
  131. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +16 -0
  132. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +14 -0
  133. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +69 -0
  134. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +175 -0
  135. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +38 -0
  136. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +76 -0
  137. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +105 -0
  138. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +16 -0
  139. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +100 -0
  140. package/dist/esm/ultramodern-tooling/commands/options.js +18 -0
  141. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +74 -0
  142. package/dist/esm/ultramodern-tooling/commands/skills.js +11 -0
  143. package/dist/esm/ultramodern-tooling/commands/sync-delivery-unit.js +1 -0
  144. package/dist/esm/ultramodern-tooling/commands/validate.js +11 -0
  145. package/dist/esm/ultramodern-tooling/commands.js +22 -468
  146. package/dist/esm/ultramodern-tooling/config/constants.js +4 -0
  147. package/dist/esm/ultramodern-tooling/config/index.js +7 -0
  148. package/dist/esm/ultramodern-tooling/config/json.js +10 -0
  149. package/dist/esm/ultramodern-tooling/config/load.js +13 -0
  150. package/dist/esm/ultramodern-tooling/config/metadata.js +37 -0
  151. package/dist/esm/ultramodern-tooling/config/normalize.js +106 -0
  152. package/dist/esm/ultramodern-tooling/config/synthesize.js +108 -0
  153. package/dist/esm/ultramodern-tooling/config/types.js +0 -0
  154. package/dist/esm/ultramodern-tooling/config.js +1 -120
  155. package/dist/esm/ultramodern-workspace/add-vertical/constants.js +5 -0
  156. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +108 -0
  157. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +184 -0
  158. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +122 -0
  159. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +59 -0
  160. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +89 -0
  161. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +43 -0
  162. package/dist/esm/ultramodern-workspace/add-vertical.js +6 -544
  163. package/dist/esm/ultramodern-workspace/api/checkout-cart.js +86 -0
  164. package/dist/esm/ultramodern-workspace/api/client.js +177 -0
  165. package/dist/esm/ultramodern-workspace/api/contracts.js +172 -0
  166. package/dist/esm/ultramodern-workspace/api/names.js +33 -0
  167. package/dist/esm/ultramodern-workspace/api/service.js +179 -0
  168. package/dist/esm/ultramodern-workspace/api/shared.js +208 -0
  169. package/dist/esm/ultramodern-workspace/api.js +5 -984
  170. package/dist/esm/ultramodern-workspace/app-files.js +11 -29
  171. package/dist/esm/ultramodern-workspace/backend-federation.js +231 -0
  172. package/dist/esm/ultramodern-workspace/bridge-config/cli.js +30 -0
  173. package/dist/esm/ultramodern-workspace/bridge-config/defaults.js +5 -0
  174. package/dist/esm/ultramodern-workspace/bridge-config/gates.js +52 -0
  175. package/dist/esm/ultramodern-workspace/bridge-config/index.js +3 -0
  176. package/dist/esm/ultramodern-workspace/bridge-config/normalize.js +30 -0
  177. package/dist/esm/ultramodern-workspace/bridge-config/schema.js +31 -0
  178. package/dist/esm/ultramodern-workspace/bridge-config/shared.js +51 -0
  179. package/dist/esm/ultramodern-workspace/bridge-config/validation.js +27 -0
  180. package/dist/esm/ultramodern-workspace/bridge-config/workspace-packages.js +67 -0
  181. package/dist/esm/ultramodern-workspace/bridge-config.js +1 -270
  182. package/dist/esm/ultramodern-workspace/contracts.js +24 -8
  183. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +110 -0
  184. package/dist/esm/ultramodern-workspace/delivery-unit.js +21 -0
  185. package/dist/esm/ultramodern-workspace/demo-components.js +47 -189
  186. package/dist/esm/ultramodern-workspace/descriptors.js +25 -2
  187. package/dist/esm/ultramodern-workspace/effect-diagnostics.js +76 -0
  188. package/dist/esm/ultramodern-workspace/fs-io.js +24 -2
  189. package/dist/esm/ultramodern-workspace/index.js +1 -0
  190. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +19 -0
  191. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +28 -0
  192. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +45 -0
  193. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +144 -0
  194. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +89 -0
  195. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +154 -0
  196. package/dist/esm/ultramodern-workspace/mf-validation/types.js +0 -0
  197. package/dist/esm/ultramodern-workspace/mf-validation/validate.js +57 -0
  198. package/dist/esm/ultramodern-workspace/mf-validation.js +3 -516
  199. package/dist/esm/ultramodern-workspace/module-federation/config.js +204 -0
  200. package/dist/esm/ultramodern-workspace/module-federation/index.js +4 -0
  201. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +29 -0
  202. package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +64 -0
  203. package/dist/esm/ultramodern-workspace/module-federation/shared-config.js +12 -0
  204. package/dist/esm/ultramodern-workspace/module-federation.js +2 -458
  205. package/dist/esm/ultramodern-workspace/package-json.js +18 -245
  206. package/dist/esm/ultramodern-workspace/pnpm-workspace-policy-plan.js +113 -0
  207. package/dist/esm/ultramodern-workspace/routes.js +8 -142
  208. package/dist/esm/ultramodern-workspace/shared-patches.js +6 -0
  209. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +100 -0
  210. package/dist/esm/ultramodern-workspace/tsconfigs.js +136 -0
  211. package/dist/esm/ultramodern-workspace/versions.js +6 -4
  212. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +110 -0
  213. package/dist/esm/ultramodern-workspace/workspace-scripts.js +88 -65
  214. package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +59 -0
  215. package/dist/esm/ultramodern-workspace/write-app.js +90 -0
  216. package/dist/esm/ultramodern-workspace/write-workspace.js +11 -60
  217. package/dist/esm/ultramodern-workspace/zerops.js +65 -0
  218. package/dist/esm-node/cli/flags.js +229 -0
  219. package/dist/esm-node/cli/help.js +66 -0
  220. package/dist/esm-node/cli/package-source.js +120 -0
  221. package/dist/esm-node/cli/project-setup.js +82 -0
  222. package/dist/esm-node/cli/prompts.js +64 -0
  223. package/dist/esm-node/index.js +6 -559
  224. package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +85 -0
  225. package/dist/esm-node/ultramodern-tooling/commands/context.js +67 -0
  226. package/dist/esm-node/ultramodern-tooling/commands/mf-types.js +18 -0
  227. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +107 -0
  228. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +12 -0
  229. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +39 -0
  230. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +11 -0
  231. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +15 -0
  232. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +13 -0
  233. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +84 -0
  234. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +17 -0
  235. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +45 -0
  236. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +13 -0
  237. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +8 -0
  238. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +16 -0
  239. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +17 -0
  240. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +15 -0
  241. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +70 -0
  242. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +176 -0
  243. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +39 -0
  244. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +77 -0
  245. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +106 -0
  246. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +17 -0
  247. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +101 -0
  248. package/dist/esm-node/ultramodern-tooling/commands/options.js +19 -0
  249. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +75 -0
  250. package/dist/esm-node/ultramodern-tooling/commands/skills.js +12 -0
  251. package/dist/esm-node/ultramodern-tooling/commands/sync-delivery-unit.js +2 -0
  252. package/dist/esm-node/ultramodern-tooling/commands/validate.js +12 -0
  253. package/dist/esm-node/ultramodern-tooling/commands.js +22 -468
  254. package/dist/esm-node/ultramodern-tooling/config/constants.js +5 -0
  255. package/dist/esm-node/ultramodern-tooling/config/index.js +8 -0
  256. package/dist/esm-node/ultramodern-tooling/config/json.js +11 -0
  257. package/dist/esm-node/ultramodern-tooling/config/load.js +14 -0
  258. package/dist/esm-node/ultramodern-tooling/config/metadata.js +38 -0
  259. package/dist/esm-node/ultramodern-tooling/config/normalize.js +107 -0
  260. package/dist/esm-node/ultramodern-tooling/config/synthesize.js +109 -0
  261. package/dist/esm-node/ultramodern-tooling/config/types.js +1 -0
  262. package/dist/esm-node/ultramodern-tooling/config.js +1 -120
  263. package/dist/esm-node/ultramodern-workspace/add-vertical/constants.js +6 -0
  264. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +109 -0
  265. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +185 -0
  266. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +123 -0
  267. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +60 -0
  268. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +90 -0
  269. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +44 -0
  270. package/dist/esm-node/ultramodern-workspace/add-vertical.js +6 -544
  271. package/dist/esm-node/ultramodern-workspace/api/checkout-cart.js +87 -0
  272. package/dist/esm-node/ultramodern-workspace/api/client.js +178 -0
  273. package/dist/esm-node/ultramodern-workspace/api/contracts.js +173 -0
  274. package/dist/esm-node/ultramodern-workspace/api/names.js +34 -0
  275. package/dist/esm-node/ultramodern-workspace/api/service.js +180 -0
  276. package/dist/esm-node/ultramodern-workspace/api/shared.js +209 -0
  277. package/dist/esm-node/ultramodern-workspace/api.js +5 -984
  278. package/dist/esm-node/ultramodern-workspace/app-files.js +11 -29
  279. package/dist/esm-node/ultramodern-workspace/backend-federation.js +232 -0
  280. package/dist/esm-node/ultramodern-workspace/bridge-config/cli.js +31 -0
  281. package/dist/esm-node/ultramodern-workspace/bridge-config/defaults.js +6 -0
  282. package/dist/esm-node/ultramodern-workspace/bridge-config/gates.js +53 -0
  283. package/dist/esm-node/ultramodern-workspace/bridge-config/index.js +4 -0
  284. package/dist/esm-node/ultramodern-workspace/bridge-config/normalize.js +31 -0
  285. package/dist/esm-node/ultramodern-workspace/bridge-config/schema.js +32 -0
  286. package/dist/esm-node/ultramodern-workspace/bridge-config/shared.js +52 -0
  287. package/dist/esm-node/ultramodern-workspace/bridge-config/validation.js +28 -0
  288. package/dist/esm-node/ultramodern-workspace/bridge-config/workspace-packages.js +68 -0
  289. package/dist/esm-node/ultramodern-workspace/bridge-config.js +1 -270
  290. package/dist/esm-node/ultramodern-workspace/contracts.js +24 -8
  291. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +111 -0
  292. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +22 -0
  293. package/dist/esm-node/ultramodern-workspace/demo-components.js +47 -189
  294. package/dist/esm-node/ultramodern-workspace/descriptors.js +25 -2
  295. package/dist/esm-node/ultramodern-workspace/effect-diagnostics.js +77 -0
  296. package/dist/esm-node/ultramodern-workspace/fs-io.js +24 -2
  297. package/dist/esm-node/ultramodern-workspace/index.js +1 -0
  298. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +20 -0
  299. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +29 -0
  300. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +46 -0
  301. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +145 -0
  302. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +90 -0
  303. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +155 -0
  304. package/dist/esm-node/ultramodern-workspace/mf-validation/types.js +1 -0
  305. package/dist/esm-node/ultramodern-workspace/mf-validation/validate.js +58 -0
  306. package/dist/esm-node/ultramodern-workspace/mf-validation.js +3 -516
  307. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +205 -0
  308. package/dist/esm-node/ultramodern-workspace/module-federation/index.js +5 -0
  309. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +30 -0
  310. package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +65 -0
  311. package/dist/esm-node/ultramodern-workspace/module-federation/shared-config.js +13 -0
  312. package/dist/esm-node/ultramodern-workspace/module-federation.js +2 -458
  313. package/dist/esm-node/ultramodern-workspace/package-json.js +18 -245
  314. package/dist/esm-node/ultramodern-workspace/pnpm-workspace-policy-plan.js +114 -0
  315. package/dist/esm-node/ultramodern-workspace/routes.js +8 -142
  316. package/dist/esm-node/ultramodern-workspace/shared-patches.js +7 -0
  317. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +101 -0
  318. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +137 -0
  319. package/dist/esm-node/ultramodern-workspace/versions.js +6 -4
  320. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +111 -0
  321. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +88 -65
  322. package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +60 -0
  323. package/dist/esm-node/ultramodern-workspace/write-app.js +91 -0
  324. package/dist/esm-node/ultramodern-workspace/write-workspace.js +11 -60
  325. package/dist/esm-node/ultramodern-workspace/zerops.js +66 -0
  326. package/dist/types/cli/flags.d.ts +30 -0
  327. package/dist/types/cli/help.d.ts +2 -0
  328. package/dist/types/cli/package-source.d.ts +15 -0
  329. package/dist/types/cli/project-setup.d.ts +8 -0
  330. package/dist/types/cli/prompts.d.ts +6 -0
  331. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -0
  332. package/dist/types/ultramodern-tooling/commands/context.d.ts +11 -0
  333. package/dist/types/ultramodern-tooling/commands/mf-types.d.ts +2 -0
  334. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +4 -0
  335. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +4 -0
  336. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +1 -0
  337. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +3 -0
  338. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +3 -0
  339. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +3 -0
  340. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +2 -0
  341. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +4 -0
  342. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +3 -0
  343. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +3 -0
  344. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +7 -0
  345. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +3 -0
  346. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +1 -0
  347. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +2 -0
  348. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +14 -0
  349. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +9 -0
  350. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +3 -0
  351. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +4 -0
  352. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +25 -0
  353. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +9 -0
  354. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +2 -0
  355. package/dist/types/ultramodern-tooling/commands/options.d.ts +2 -0
  356. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +2 -0
  357. package/dist/types/ultramodern-tooling/commands/skills.d.ts +2 -0
  358. package/dist/types/ultramodern-tooling/commands/sync-delivery-unit.d.ts +1 -0
  359. package/dist/types/ultramodern-tooling/commands/validate.d.ts +2 -0
  360. package/dist/types/ultramodern-tooling/config/constants.d.ts +3 -0
  361. package/dist/types/ultramodern-tooling/config/index.d.ts +7 -0
  362. package/dist/types/ultramodern-tooling/config/json.d.ts +2 -0
  363. package/dist/types/ultramodern-tooling/config/load.d.ts +2 -0
  364. package/dist/types/ultramodern-tooling/config/metadata.d.ts +4 -0
  365. package/dist/types/ultramodern-tooling/config/normalize.d.ts +5 -0
  366. package/dist/types/ultramodern-tooling/config/synthesize.d.ts +5 -0
  367. package/dist/types/ultramodern-tooling/config/types.d.ts +41 -0
  368. package/dist/types/ultramodern-tooling/config.d.ts +1 -43
  369. package/dist/types/ultramodern-workspace/add-vertical/constants.d.ts +4 -0
  370. package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +2 -0
  371. package/dist/types/ultramodern-workspace/add-vertical/plan.d.ts +7 -0
  372. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +28 -0
  373. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +6 -0
  374. package/dist/types/ultramodern-workspace/add-vertical/topology.d.ts +9 -0
  375. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +8 -0
  376. package/dist/types/ultramodern-workspace/add-vertical.d.ts +7 -39
  377. package/dist/types/ultramodern-workspace/api/checkout-cart.d.ts +33 -0
  378. package/dist/types/ultramodern-workspace/api/client.d.ts +6 -0
  379. package/dist/types/ultramodern-workspace/api/contracts.d.ts +15 -0
  380. package/dist/types/ultramodern-workspace/api/names.d.ts +41 -0
  381. package/dist/types/ultramodern-workspace/api/service.d.ts +6 -0
  382. package/dist/types/ultramodern-workspace/api/shared.d.ts +10 -0
  383. package/dist/types/ultramodern-workspace/api.d.ts +5 -73
  384. package/dist/types/ultramodern-workspace/backend-federation.d.ts +11 -0
  385. package/dist/types/ultramodern-workspace/bridge-config/cli.d.ts +3 -0
  386. package/dist/types/ultramodern-workspace/bridge-config/defaults.d.ts +1 -0
  387. package/dist/types/ultramodern-workspace/bridge-config/gates.d.ts +3 -0
  388. package/dist/types/ultramodern-workspace/bridge-config/index.d.ts +4 -0
  389. package/dist/types/ultramodern-workspace/bridge-config/normalize.d.ts +2 -0
  390. package/dist/types/ultramodern-workspace/bridge-config/schema.d.ts +61 -0
  391. package/dist/types/ultramodern-workspace/bridge-config/shared.d.ts +12 -0
  392. package/dist/types/ultramodern-workspace/bridge-config/validation.d.ts +3 -0
  393. package/dist/types/ultramodern-workspace/bridge-config/workspace-packages.d.ts +3 -0
  394. package/dist/types/ultramodern-workspace/bridge-config.d.ts +1 -64
  395. package/dist/types/ultramodern-workspace/contracts.d.ts +1 -1
  396. package/dist/types/ultramodern-workspace/delivery-unit-sync.d.ts +6 -0
  397. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +8 -0
  398. package/dist/types/ultramodern-workspace/descriptors.d.ts +4 -0
  399. package/dist/types/ultramodern-workspace/effect-diagnostics.d.ts +1 -0
  400. package/dist/types/ultramodern-workspace/index.d.ts +1 -0
  401. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +5 -0
  402. package/dist/types/ultramodern-workspace/mf-validation/discovery.d.ts +2 -0
  403. package/dist/types/ultramodern-workspace/mf-validation/inspect.d.ts +5 -0
  404. package/dist/types/ultramodern-workspace/mf-validation/object-literal.d.ts +9 -0
  405. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +13 -0
  406. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +14 -0
  407. package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +33 -0
  408. package/dist/types/ultramodern-workspace/mf-validation/validate.d.ts +4 -0
  409. package/dist/types/ultramodern-workspace/mf-validation.d.ts +4 -27
  410. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +5 -0
  411. package/dist/types/ultramodern-workspace/module-federation/index.d.ts +4 -0
  412. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +4 -0
  413. package/dist/types/ultramodern-workspace/module-federation/remote-refs.d.ts +3 -0
  414. package/dist/types/ultramodern-workspace/module-federation/shared-config.d.ts +2 -0
  415. package/dist/types/ultramodern-workspace/module-federation.d.ts +2 -17
  416. package/dist/types/ultramodern-workspace/package-json.d.ts +1 -14
  417. package/dist/types/ultramodern-workspace/pnpm-workspace-policy-plan.d.ts +39 -0
  418. package/dist/types/ultramodern-workspace/shared-patches.d.ts +2 -0
  419. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +18 -0
  420. package/dist/types/ultramodern-workspace/tsconfigs.d.ts +13 -0
  421. package/dist/types/ultramodern-workspace/versions.d.ts +5 -3
  422. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +72 -0
  423. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +13 -0
  424. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +42 -0
  425. package/dist/types/ultramodern-workspace/write-app.d.ts +3 -0
  426. package/dist/types/ultramodern-workspace/write-workspace.d.ts +2 -1
  427. package/dist/types/ultramodern-workspace/zerops.d.ts +2 -0
  428. package/package.json +4 -3
  429. package/template-workspace/.gitignore.handlebars +4 -0
  430. package/template-workspace/README.md.handlebars +18 -15
  431. package/template-workspace/patches/@module-federation__bridge-react@2.6.0.patch +140 -0
  432. package/template-workspace/patches/@module-federation__modern-js-v3@2.6.0.patch +57 -0
  433. package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +452 -0
  434. package/template-workspace/patches/effect-schema-error-type-id.patch +18 -0
  435. package/template-workspace/pnpm-workspace.yaml.handlebars +8 -0
  436. package/template-workspace/scripts/bootstrap-agent-skills.mjs +11 -3
  437. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +37 -0
  438. package/templates/workspace/apps/modern.config.ts.handlebars +252 -0
  439. package/templates/workspace/apps/shared/src/routes/ultramodern-jsonld.ts.handlebars +119 -0
  440. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -0
  441. package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +49 -0
  442. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +79 -0
  443. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +11 -0
  444. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +46 -0
  445. package/templates/workspace/packages/shared-design-tokens/tokens.css.handlebars +7 -0
  446. package/templates/workspace/postcss.config.mjs.handlebars +5 -0
  447. package/templates/workspace/tailwind.config.ts.handlebars +3 -0
  448. package/templates/workspace/verticals/server/checkout-cart-handlers.ts.handlebars +49 -0
  449. package/templates/workspace/verticals/server/checkout-cart-state.ts.handlebars +23 -0
  450. package/templates/workspace/verticals/shared/api.checkout-cart-contract-fields.ts.handlebars +1 -0
  451. package/templates/workspace/verticals/shared/api.checkout-cart-endpoints.ts.handlebars +23 -0
  452. package/templates/workspace/verticals/shared/api.checkout-cart-operation-contexts.ts.handlebars +25 -0
  453. package/templates/workspace/verticals/shared/api.checkout-cart-schemas.ts.handlebars +48 -0
  454. package/templates/workspace/verticals/src/api/checkout-cart-client-exports.ts.handlebars +70 -0
  455. package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +40 -2
  456. package/templates/workspace-scripts/generate-node-backend-federation.mjs +299 -0
  457. package/templates/workspace-scripts/materialize-zerops-runtime.mjs +448 -0
  458. package/templates/workspace-scripts/proof-cloudflare-version.mjs +237 -9
  459. package/templates/workspace-scripts/proof-node-backend-federation.mjs +760 -0
  460. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +188 -2
  461. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +476 -26
@@ -1,58 +1,32 @@
1
1
  import { appHasApi, remoteDependencyAlias, resolveApiStem, shellApp } from "./descriptors.js";
2
+ import { renderFileTemplate } from "./fs-io.js";
2
3
  import { createTw, packageName, tailwindPrefixForApp, toPascalCase } from "./naming.js";
3
4
  function createShellPage(remotes = []) {
4
5
  const tw = createTw(tailwindPrefixForApp(shellApp));
5
6
  const remoteCount = String(remotes.length);
6
- return `import { Link, useModernI18n } from '@modern-js/plugin-i18n/runtime';
7
- import ShellFrame from '../shell-frame';
8
- import { UltramodernRouteHead } from '../ultramodern-route-head';
9
- import { VerticalShowcase } from '../vertical-components';
10
- import { ultramodernUiMarker } from '../../ultramodern-build';
11
-
12
- export default function ShellHome() {
13
- const { t } = useModernI18n();
14
-
15
- return (
16
- <ShellFrame>
17
- <UltramodernRouteHead />
18
- <section className="${tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14')}">
19
- <div className="${tw('min-w-0')}">
20
- <p className="${tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800')}">{t('shell.hero.eyebrow')}</p>
21
- <h1 className="${tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl')}">{t('shell.title')}</h1>
22
- <p className="${tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600')}">{t('shell.hero.lede')}</p>
23
- <div className="${tw('mt-7 flex flex-wrap gap-3')}">
24
- <Link className="${tw('inline-flex min-h-11 items-center justify-center rounded-full bg-emerald-800 px-5 font-bold text-white shadow-lg shadow-stone-900/10')}" to="/">
25
- {t('shell.hero.primary')}
26
- </Link>
27
- <span className="${tw('inline-flex min-h-11 items-center justify-center rounded-full border border-stone-900/15 bg-white/90 px-5 font-bold text-stone-950 shadow-lg shadow-stone-900/10')}">
28
- {t('shell.hero.secondary')}
29
- </span>
30
- </div>
31
- </div>
32
- <div className="${tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15')}">
33
- <div className="${tw('grid gap-4 sm:grid-cols-2')}">
34
- <article className="${tw('rounded-2xl bg-emerald-50 p-5')}">
35
- <span className="${tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800')}">{t('shell.hero.cardOneKicker')}</span>
36
- <strong className="${tw('mt-3 block text-3xl font-black text-stone-950')}">${remoteCount}</strong>
37
- <p className="${tw('mt-2 text-sm font-semibold text-stone-600')}">{t('shell.hero.cardOne')}</p>
38
- </article>
39
- <article className="${tw('rounded-2xl bg-amber-50 p-5')}">
40
- <span className="${tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800')}">{t('shell.hero.cardTwoKicker')}</span>
41
- <strong className="${tw('mt-3 block text-3xl font-black text-stone-950')}">SSR</strong>
42
- <p className="${tw('mt-2 text-sm font-semibold text-stone-600')}">{t('shell.hero.cardTwo')}</p>
43
- </article>
44
- </div>
45
- </div>
46
- </section>
47
- <VerticalShowcase />
48
- <p className="${tw('sr-only')}" data-testid="ultramodern-preset">presetUltramodern workspace</p>
49
- <p className="${tw('sr-only')}" data-build-marker={ultramodernUiMarker.build} data-testid="ultramodern-ui-marker">
50
- {ultramodernUiMarker.appId}:{ultramodernUiMarker.version}
51
- </p>
52
- </ShellFrame>
53
- );
54
- }
55
- `;
7
+ return renderFileTemplate('workspace/apps/shell-super-app/src/routes/[lang]/page.tsx', {
8
+ value0: tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14'),
9
+ value1: tw('min-w-0'),
10
+ value2: tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800'),
11
+ value3: tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl'),
12
+ value4: tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600'),
13
+ value5: tw('mt-7 flex flex-wrap gap-3'),
14
+ value6: tw('inline-flex min-h-11 items-center justify-center rounded-full bg-emerald-800 px-5 font-bold text-white shadow-lg shadow-stone-900/10'),
15
+ value7: tw('inline-flex min-h-11 items-center justify-center rounded-full border border-stone-900/15 bg-white/90 px-5 font-bold text-stone-950 shadow-lg shadow-stone-900/10'),
16
+ value8: tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15'),
17
+ value9: tw('grid gap-4 sm:grid-cols-2'),
18
+ value10: tw('rounded-2xl bg-emerald-50 p-5'),
19
+ value11: tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800'),
20
+ value12: tw('mt-3 block text-3xl font-black text-stone-950'),
21
+ value13: remoteCount,
22
+ value14: tw('mt-2 text-sm font-semibold text-stone-600'),
23
+ value15: tw('rounded-2xl bg-amber-50 p-5'),
24
+ value16: tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800'),
25
+ value17: tw('mt-3 block text-3xl font-black text-stone-950'),
26
+ value18: tw('mt-2 text-sm font-semibold text-stone-600'),
27
+ value19: tw('sr-only'),
28
+ value20: tw('sr-only')
29
+ });
56
30
  }
57
31
  function createShellRemoteComponents(scope, remotes = []) {
58
32
  const tw = createTw(tailwindPrefixForApp(shellApp));
@@ -62,150 +36,34 @@ function createShellRemoteComponents(scope, remotes = []) {
62
36
  const componentName = `${toPascalCase(remote.id)}Widget`;
63
37
  return `const ${componentName} = createHydratedRemote(${componentName}Server, '${remoteDependencyAlias(remote)}/Widget');`;
64
38
  }).join('\n');
65
- const federationImports = widgetRemotes.length > 0 ? `import {
66
- classifyModuleFederationFallback,
67
- createModuleFederationFallbackTelemetry,
68
- emitModuleFederationFallbackTelemetry,
69
- toModuleFederationFallbackAttributes,
70
- } from '@modern-js/runtime/module-federation';
71
- import { createLazyComponent } from '@module-federation/bridge-react';
72
- import { getInstance, loadRemote } from '@module-federation/modern-js-v3/runtime';
73
- import { Suspense, useEffect, useMemo, useState } from 'react';
74
- import type { ComponentType } from 'react';
75
- ${serverImports}
76
- ` : '';
77
- const federationHelpers = widgetRemotes.length > 0 ? `interface RemoteComponentModule {
78
- default: ComponentType;
79
- }
80
-
81
- const loadRemoteComponent = (specifier: string) =>
82
- loadRemote<RemoteComponentModule>(specifier) as Promise<RemoteComponentModule>;
83
-
84
- const createRemoteFallback = (specifier: string) =>
85
- ({ error }: { error: Error }) => {
86
- const { t } = useModernI18n();
87
- const classification = classifyModuleFederationFallback(error);
88
- const telemetryEntry =
89
- typeof window === 'undefined' ? undefined : window.location.href;
90
- const telemetry = createModuleFederationFallbackTelemetry({
91
- appName: '${shellApp.id}',
92
- classification,
93
- ...(telemetryEntry === undefined ? {} : { entry: telemetryEntry }),
94
- error,
95
- eventName: 'mf.client.remote.fallback',
96
- exportName: 'default',
97
- phase: 'load',
98
- remote: specifier,
99
- status: 'degraded',
100
- });
101
-
102
- useEffect(() => {
103
- void emitModuleFederationFallbackTelemetry({
104
- appName: telemetry.appName,
105
- classification,
106
- ...(telemetry.entry === undefined ? {} : { entry: telemetry.entry }),
107
- error,
108
- eventName: telemetry.eventName,
109
- exportName: 'default',
110
- metadata: telemetry.metadata,
111
- phase: telemetry.phase,
112
- remote: specifier,
113
- status: 'degraded',
114
- });
115
- }, [classification, error, telemetry]);
116
-
117
- return <div className="${tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')}" data-remote-error={error.name} {...toModuleFederationFallbackAttributes(telemetry)}>{t('shell.remoteUnavailable')}</div>;
118
- };
119
-
120
- const createHydratedRemote =
121
- (ServerComponent: ComponentType, specifier: string) =>
122
- function HydratedRemote() {
123
- const [hydrated, setHydrated] = useState(false);
124
-
125
- useEffect(() => {
126
- setHydrated(true);
127
- }, []);
128
-
129
- const FederatedComponent = useMemo(() => {
130
- if (!hydrated) {
131
- return null;
132
- }
133
- const instance = getInstance();
134
- if (instance === null || instance === undefined) {
135
- return null;
136
- }
137
- return createLazyComponent({
138
- export: 'default',
139
- fallback: createRemoteFallback(specifier),
140
- instance,
141
- loader: () => loadRemoteComponent(specifier),
142
- loading: <ServerComponent />,
143
- });
144
- }, [hydrated]);
145
-
146
- if (FederatedComponent === null) {
147
- return <ServerComponent />;
148
- }
149
-
150
- return (
151
- <Suspense fallback={<ServerComponent />}>
152
- <FederatedComponent />
153
- </Suspense>
154
- );
155
- };
156
- ` : '';
39
+ const federationImports = widgetRemotes.length > 0 ? renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx', {
40
+ value0: serverImports
41
+ }) : '';
42
+ const federationHelpers = widgetRemotes.length > 0 ? renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx', {
43
+ value0: shellApp.id,
44
+ value1: tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')
45
+ }) : '';
157
46
  const showcaseItems = widgetRemotes.map((remote)=>{
158
47
  const componentName = `${toPascalCase(remote.id)}Widget`;
159
48
  return ` <${componentName} key="${remote.id}" />`;
160
49
  }).join('\n');
161
50
  const remoteCount = String(widgetRemotes.length);
162
- return `${federationImports}import { Link, useModernI18n } from '@modern-js/plugin-i18n/runtime';
163
-
164
- const widgetCount = Number('${remoteCount}');
165
-
166
- ${federationHelpers}
167
- ${hydratedExports}
168
-
169
- export const Header = () => {
170
- const { t } = useModernI18n();
171
-
172
- return (
173
- <header className="${tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1')}" data-modern-boundary-id="${shellApp.mfName}" data-modern-mf-expose="shell/Header">
174
- <Link className="${tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline')}" to="/">{t('shell.title')}</Link>
175
- </header>
176
- );
177
- };
178
-
179
- export const StatusBadge = () => {
180
- const { t } = useModernI18n();
181
-
182
- return (
183
- <span className="${tw('inline-flex h-10 shrink-0 items-center justify-center rounded-full border border-stone-900/15 bg-white px-4 text-sm font-extrabold text-stone-950 shadow-lg shadow-stone-900/5')}">
184
- {widgetCount} {t('shell.hero.cardOneKicker')}
185
- </span>
186
- );
187
- };
188
-
189
- export const VerticalShowcase = () => {
190
- const { t } = useModernI18n();
191
-
192
- if (widgetCount === 0) {
193
- return (
194
- <section className="${tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10')}">
195
- <p className="${tw('text-lg font-bold text-stone-700')}">{t('shell.hero.empty')}</p>
196
- </section>
197
- );
198
- }
199
-
200
- return (
201
- <section className="${tw('mx-auto mt-12 max-w-7xl')}" data-modern-boundary-id="${shellApp.mfName}">
202
- <div className="${tw('grid gap-4 md:grid-cols-2')}">
203
- ${showcaseItems}
204
- </div>
205
- </section>
206
- );
207
- };
208
- `;
51
+ return renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.tsx', {
52
+ value0: federationImports,
53
+ value1: remoteCount,
54
+ value2: federationHelpers,
55
+ value3: hydratedExports,
56
+ value4: tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1'),
57
+ value5: shellApp.mfName,
58
+ value6: tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline'),
59
+ value7: tw('inline-flex h-10 shrink-0 items-center justify-center rounded-full border border-stone-900/15 bg-white px-4 text-sm font-extrabold text-stone-950 shadow-lg shadow-stone-900/5'),
60
+ value8: tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10'),
61
+ value9: tw('text-lg font-bold text-stone-700'),
62
+ value10: tw('mx-auto mt-12 max-w-7xl'),
63
+ value11: shellApp.mfName,
64
+ value12: tw('grid gap-4 md:grid-cols-2'),
65
+ value13: showcaseItems
66
+ });
209
67
  }
210
68
  function createRemotePage(app) {
211
69
  const tw = createTw(tailwindPrefixForApp(app));
@@ -107,11 +107,34 @@ function zephyrRemoteDependency(scope, remote) {
107
107
  }
108
108
  function resolveRemoteRefs(app, remotes = []) {
109
109
  const verticalRefs = app.verticalRefs ?? [];
110
- return verticalRefs.map((remoteRef)=>remotes.find((remote)=>remote.id === remoteRef)).filter((remote)=>void 0 !== remote);
110
+ const remotesById = new Map(remotes.map((remote)=>[
111
+ remote.id,
112
+ remote
113
+ ]));
114
+ return verticalRefs.map((remoteRef)=>{
115
+ const remote = remotesById.get(remoteRef);
116
+ if (void 0 === remote) {
117
+ const availableRemotes = remotes.map((remote)=>remote.id).join(', ');
118
+ throw new Error(`Unknown remote vertical reference ${remoteRef} for ${app.id}. Available remotes: ${availableRemotes || 'none'}.`);
119
+ }
120
+ return remote;
121
+ });
111
122
  }
112
123
  function createRemoteManifestEnv(remote) {
113
124
  return `VERTICAL_${toEnvSegment(remote.domain ?? remote.id)}_MF_MANIFEST`;
114
125
  }
126
+ function createBackendFederationManifestEnv(remote) {
127
+ return `VERTICAL_${toEnvSegment(remote.domain ?? remote.id)}_BACKEND_MF_MANIFEST`;
128
+ }
129
+ function createBackendFederationName(app) {
130
+ return `${app.mfName}Backend`;
131
+ }
132
+ function createBackendFederationManifestUrl(app) {
133
+ return `http://localhost:${app.port}/backend-mf-manifest.json`;
134
+ }
135
+ function createBackendFederationContainerEntry(app) {
136
+ return `http://localhost:${app.port}/backendRemoteEntry.mjs`;
137
+ }
115
138
  function createModuleFederationRemoteContracts(app, remotes = []) {
116
139
  return resolveRemoteRefs(app, remotes).map((remote)=>({
117
140
  id: remote.id,
@@ -130,4 +153,4 @@ function createCloudflarePublicUrlEnv(app) {
130
153
  function appI18nNamespace(app) {
131
154
  return 'shell' === app.kind ? 'shell' : app.domain ?? app.id;
132
155
  }
133
- export { ULTRAMODERN_CONFIG_PATH, appHasApi, appI18nNamespace, createCloudflarePublicUrlEnv, createCloudflareWorkerName, createModuleFederationRemoteContracts, createNeutralOwnership, createRemoteManifestEnv, createShellHost, createVerticalDescriptor, remoteDependencyAlias, resolveApiPrefix, resolveApiStem, resolveRemoteRefs, sharedPackages, shellApp, verticalApiApps, zephyrRemoteDependency };
156
+ export { ULTRAMODERN_CONFIG_PATH, appHasApi, appI18nNamespace, createBackendFederationContainerEntry, createBackendFederationManifestEnv, createBackendFederationManifestUrl, createBackendFederationName, createCloudflarePublicUrlEnv, createCloudflareWorkerName, createModuleFederationRemoteContracts, createNeutralOwnership, createRemoteManifestEnv, createShellHost, createVerticalDescriptor, remoteDependencyAlias, resolveApiPrefix, resolveApiStem, resolveRemoteRefs, sharedPackages, shellApp, verticalApiApps, zephyrRemoteDependency };
@@ -0,0 +1,76 @@
1
+ const effectDiagnostics = [
2
+ 'anyUnknownInErrorContext',
3
+ 'classSelfMismatch',
4
+ 'duplicatePackage',
5
+ 'effectFnImplicitAny',
6
+ 'floatingEffect',
7
+ 'genericEffectServices',
8
+ 'missingEffectContext',
9
+ 'missingEffectError',
10
+ 'missingLayerContext',
11
+ 'missingReturnYieldStar',
12
+ 'missingStarInYieldEffectGen',
13
+ 'nonObjectEffectServiceType',
14
+ 'outdatedApi',
15
+ 'overriddenSchemaConstructor',
16
+ 'catchUnfailableEffect',
17
+ 'effectFnIife',
18
+ 'effectGenUsesAdapter',
19
+ 'effectInFailure',
20
+ 'effectInVoidSuccess',
21
+ 'globalErrorInEffectCatch',
22
+ 'globalErrorInEffectFailure',
23
+ 'layerMergeAllWithDependencies',
24
+ 'lazyPromiseInEffectSync',
25
+ 'leakingRequirements',
26
+ 'multipleEffectProvide',
27
+ 'returnEffectInGen',
28
+ 'runEffectInsideEffect',
29
+ 'schemaSyncInEffect',
30
+ 'scopeInLayerEffect',
31
+ 'strictEffectProvide',
32
+ 'tryCatchInEffectGen',
33
+ 'unknownInEffectCatch',
34
+ 'asyncFunction',
35
+ 'cryptoRandomUUID',
36
+ 'cryptoRandomUUIDInEffect',
37
+ 'extendsNativeError',
38
+ 'globalConsole',
39
+ 'globalConsoleInEffect',
40
+ 'globalDate',
41
+ 'globalDateInEffect',
42
+ 'globalFetch',
43
+ 'globalFetchInEffect',
44
+ 'globalRandom',
45
+ 'globalRandomInEffect',
46
+ 'globalTimers',
47
+ 'globalTimersInEffect',
48
+ 'instanceOfSchema',
49
+ 'newPromise',
50
+ 'nodeBuiltinImport',
51
+ 'preferSchemaOverJson',
52
+ 'processEnv',
53
+ 'processEnvInEffect',
54
+ 'unsafeEffectTypeAssertion',
55
+ 'catchAllToMapError',
56
+ 'deterministicKeys',
57
+ 'effectDoNotation',
58
+ 'effectFnOpportunity',
59
+ 'effectMapFlatten',
60
+ 'effectMapVoid',
61
+ 'effectSucceedWithVoid',
62
+ 'missedPipeableOpportunity',
63
+ 'missingEffectServiceDependency',
64
+ 'nestedEffectGenYield',
65
+ 'redundantSchemaTagIdentifier',
66
+ 'schemaStructWithTag',
67
+ 'schemaUnionOfLiterals',
68
+ 'serviceNotAsClass',
69
+ 'strictBooleanExpressions',
70
+ 'unnecessaryArrowBlock',
71
+ 'unnecessaryEffectGen',
72
+ 'unnecessaryFailYieldableError',
73
+ 'unnecessaryPipe',
74
+ 'unnecessaryPipeChain'
75
+ ];
76
+ export { effectDiagnostics };
@@ -51,9 +51,31 @@ function renderFileTemplate(relativePath, data) {
51
51
  function assertSafeRelativePath(relativePath) {
52
52
  if (0 === relativePath.length || node_path.isAbsolute(relativePath) || relativePath.split(/[\\/]+/).includes('..')) throw new Error(`Unsafe workspace template path: ${relativePath}`);
53
53
  }
54
- function ensureInsideRoot(root, targetPath) {
54
+ function isPathInsideRoot(root, targetPath) {
55
55
  const relativePath = node_path.relative(root, targetPath);
56
- if (relativePath.startsWith('..') || node_path.isAbsolute(relativePath)) throw new Error(`Refusing to write outside workspace root: ${targetPath}`);
56
+ return '' === relativePath || !relativePath.startsWith('..') && !node_path.isAbsolute(relativePath);
57
+ }
58
+ function findExistingAncestor(targetPath) {
59
+ let currentPath = targetPath;
60
+ while(!node_fs.existsSync(currentPath)){
61
+ const parentPath = node_path.dirname(currentPath);
62
+ if (parentPath === currentPath) return;
63
+ currentPath = parentPath;
64
+ }
65
+ return currentPath;
66
+ }
67
+ function ensureInsideRoot(root, targetPath) {
68
+ const absoluteRoot = node_path.resolve(root);
69
+ const absoluteTargetPath = node_path.resolve(targetPath);
70
+ if (!isPathInsideRoot(absoluteRoot, absoluteTargetPath)) throw new Error(`Refusing to write outside workspace root: ${targetPath}`);
71
+ if (!node_fs.existsSync(absoluteRoot)) return;
72
+ const existingAncestor = findExistingAncestor(absoluteTargetPath);
73
+ if (!existingAncestor) return;
74
+ const rootRealPath = node_fs.realpathSync.native(absoluteRoot);
75
+ const ancestorRealPath = node_fs.realpathSync.native(existingAncestor);
76
+ const unresolvedRelativePath = node_path.relative(existingAncestor, absoluteTargetPath);
77
+ const resolvedTargetPath = node_path.resolve(ancestorRealPath, unresolvedRelativePath);
78
+ if (!isPathInsideRoot(rootRealPath, resolvedTargetPath)) throw new Error(`Refusing to write outside workspace root: ${targetPath}`);
57
79
  }
58
80
  function writeFile(targetDir, relativePath, content) {
59
81
  assertSafeRelativePath(relativePath);
@@ -1,4 +1,5 @@
1
1
  export { addUltramodernVertical, planUltramodernVertical } from "./add-vertical.js";
2
2
  export { normalizeUltramodernBridgeConfig } from "./bridge-config.js";
3
+ export { SHARED_ULTRAMODERN_WORKSPACE_PATCH_FILES } from "./shared-patches.js";
3
4
  export { ultramodernWorkspaceVersions } from "./versions.js";
4
5
  export { generateUltramodernWorkspace } from "./write-workspace.js";
@@ -0,0 +1,19 @@
1
+ const moduleFederationConfigFile = 'module-federation.config.ts';
2
+ const mfTypesArchive = 'dist/@mf-types.zip';
3
+ const generatedMetadataPaths = [
4
+ '.modernjs/ultramodern.json'
5
+ ];
6
+ const defaultAppRootDirs = [
7
+ 'apps',
8
+ 'verticals'
9
+ ];
10
+ const skippedScanDirs = new Set([
11
+ '.git',
12
+ '.modernjs',
13
+ '.nx',
14
+ '.turbo',
15
+ 'coverage',
16
+ 'dist',
17
+ 'node_modules'
18
+ ]);
19
+ export { defaultAppRootDirs, generatedMetadataPaths, mfTypesArchive, moduleFederationConfigFile, skippedScanDirs };
@@ -0,0 +1,28 @@
1
+ import node_fs from "node:fs";
2
+ import node_path from "node:path";
3
+ import { defaultAppRootDirs, moduleFederationConfigFile } from "./constants.js";
4
+ import { collectBridgeScanRoots, collectMetadataAppDirs, firstSegment, normalizeRelativePath, readGeneratedMetadata, scanForModuleFederationConfigs } from "./path-utils.js";
5
+ function discoverModuleFederationConfigs(options) {
6
+ const workspaceRoot = node_path.resolve(options.workspaceRoot);
7
+ const appDirs = new Set();
8
+ if (options.appDirs && options.appDirs.length > 0) for (const appDir of options.appDirs)appDirs.add(normalizeRelativePath(appDir));
9
+ else {
10
+ const metadata = readGeneratedMetadata(workspaceRoot);
11
+ const scanRoots = new Set(defaultAppRootDirs);
12
+ for (const metadataEntry of metadata){
13
+ collectMetadataAppDirs(metadataEntry, appDirs);
14
+ collectBridgeScanRoots(metadataEntry, scanRoots);
15
+ }
16
+ for (const appDir of appDirs){
17
+ const segment = firstSegment(appDir);
18
+ if (segment) scanRoots.add(segment);
19
+ }
20
+ if (node_fs.existsSync(node_path.join(workspaceRoot, moduleFederationConfigFile))) appDirs.add('.');
21
+ for (const scanRoot of scanRoots)scanForModuleFederationConfigs(workspaceRoot, scanRoot, appDirs);
22
+ }
23
+ return Array.from(appDirs).sort().map((appDir)=>({
24
+ appDir,
25
+ configPath: node_path.join(workspaceRoot, appDir, moduleFederationConfigFile)
26
+ }));
27
+ }
28
+ export { discoverModuleFederationConfigs };
@@ -0,0 +1,45 @@
1
+ import { parseArrayLiteral, parseLiteralString, parseObjectLiteral } from "./object-literal.js";
2
+ import { findCreateModuleFederationConfigObject, findExportDefaultObject } from "./syntax.js";
3
+ function extractExposes(configPath, value) {
4
+ if (void 0 === value) return [];
5
+ const object = parseObjectLiteral(value);
6
+ if (object) {
7
+ if (object.hasSpread) throw new Error(`Cannot statically extract Module Federation exposes from ${configPath}; use a literal exposes object without spreads.`);
8
+ return Array.from(object.properties.keys()).sort();
9
+ }
10
+ const array = parseArrayLiteral(value);
11
+ if (array) return array.sort();
12
+ throw new Error(`Cannot statically extract Module Federation exposes from ${configPath}; use a literal exposes object or string array.`);
13
+ }
14
+ function extractDtsSettings(configPath, value) {
15
+ if (void 0 === value) return {};
16
+ const dts = parseObjectLiteral(value);
17
+ if (!dts || dts.hasSpread) throw new Error(`Cannot statically extract Module Federation DTS settings from ${configPath}; use a literal dts object.`);
18
+ const generateTypes = parseObjectLiteral(dts.properties.get('generateTypes'));
19
+ if (generateTypes?.hasSpread) throw new Error(`Cannot statically extract Module Federation generateTypes settings from ${configPath}; use a literal generateTypes object.`);
20
+ return {
21
+ compilerInstance: parseLiteralString(generateTypes?.properties.get('compilerInstance')),
22
+ tsConfigPath: parseLiteralString(dts.properties.get('tsConfigPath'))
23
+ };
24
+ }
25
+ function hasHostOnlyNoExposesDeclaration(source) {
26
+ return /@?ultramodern-mf\s*:?\s*(?:host-only|no-exposes)\b/iu.test(source);
27
+ }
28
+ function inspectModuleFederationConfigSource(source, appDir, configPath) {
29
+ const configObject = findCreateModuleFederationConfigObject(source) ?? findExportDefaultObject(source);
30
+ if (!configObject) throw new Error(`Cannot statically inspect Module Federation config ${configPath}; export or pass a literal config object.`);
31
+ const properties = parseObjectLiteral(configObject);
32
+ if (!properties) throw new Error(`Cannot statically inspect Module Federation config ${configPath}; expected a literal config object.`);
33
+ if (properties.hasSpread) throw new Error(`Cannot statically inspect Module Federation config ${configPath}; top-level config spreads are not supported.`);
34
+ const exposes = extractExposes(configPath, properties.properties.get('exposes'));
35
+ const hostOnlyNoExposes = hasHostOnlyNoExposesDeclaration(source);
36
+ if (hostOnlyNoExposes && exposes.length > 0) throw new Error(`Module Federation host-only/no-exposes declaration conflicts with actual exposes in ${configPath}.`);
37
+ return {
38
+ appDir,
39
+ configPath,
40
+ dts: extractDtsSettings(configPath, properties.properties.get('dts')),
41
+ exposes,
42
+ hostOnlyNoExposes
43
+ };
44
+ }
45
+ export { extractDtsSettings, extractExposes, hasHostOnlyNoExposesDeclaration, inspectModuleFederationConfigSource };
@@ -0,0 +1,144 @@
1
+ import { getOuterBlock, skipSyntax } from "./syntax.js";
2
+ function splitTopLevelEntries(source) {
3
+ const entries = [];
4
+ let start = 0;
5
+ let braceDepth = 0;
6
+ let bracketDepth = 0;
7
+ let parenDepth = 0;
8
+ for(let index = 0; index < source.length; index += 1){
9
+ const skipped = skipSyntax(source, index);
10
+ if (skipped !== index) {
11
+ index = skipped - 1;
12
+ continue;
13
+ }
14
+ const char = source[index];
15
+ if ('{' === char) braceDepth += 1;
16
+ else if ('}' === char) braceDepth -= 1;
17
+ else if ('[' === char) bracketDepth += 1;
18
+ else if (']' === char) bracketDepth -= 1;
19
+ else if ('(' === char) parenDepth += 1;
20
+ else if (')' === char) parenDepth -= 1;
21
+ else if (',' === char && 0 === braceDepth && 0 === bracketDepth && 0 === parenDepth) {
22
+ const entry = source.slice(start, index).trim();
23
+ if (entry) entries.push(entry);
24
+ start = index + 1;
25
+ }
26
+ }
27
+ const finalEntry = source.slice(start).trim();
28
+ if (finalEntry) entries.push(finalEntry);
29
+ return entries;
30
+ }
31
+ function findTopLevelColon(source) {
32
+ let braceDepth = 0;
33
+ let bracketDepth = 0;
34
+ let parenDepth = 0;
35
+ for(let index = 0; index < source.length; index += 1){
36
+ const skipped = skipSyntax(source, index);
37
+ if (skipped !== index) {
38
+ index = skipped - 1;
39
+ continue;
40
+ }
41
+ const char = source[index];
42
+ if ('{' === char) braceDepth += 1;
43
+ else if ('}' === char) braceDepth -= 1;
44
+ else if ('[' === char) bracketDepth += 1;
45
+ else if (']' === char) bracketDepth -= 1;
46
+ else if ('(' === char) parenDepth += 1;
47
+ else if (')' === char) parenDepth -= 1;
48
+ else if (':' === char && 0 === braceDepth && 0 === bracketDepth && 0 === parenDepth) return index;
49
+ }
50
+ return -1;
51
+ }
52
+ function stripConstAssertion(source) {
53
+ return source.trim().replace(/\s+as\s+const\s*$/u, '').trim();
54
+ }
55
+ function unescapeSingleQuotedString(value) {
56
+ return value.replace(/\\(['"\\nrtbfv0])/gu, (_, sequence)=>{
57
+ switch(sequence){
58
+ case 'n':
59
+ return '\n';
60
+ case 'r':
61
+ return '\r';
62
+ case 't':
63
+ return '\t';
64
+ case 'b':
65
+ return '\b';
66
+ case 'f':
67
+ return '\f';
68
+ case 'v':
69
+ return '\v';
70
+ case '0':
71
+ return '\0';
72
+ default:
73
+ return sequence;
74
+ }
75
+ });
76
+ }
77
+ function parseLiteralString(source) {
78
+ if (void 0 === source) return;
79
+ const trimmed = stripConstAssertion(source);
80
+ const quote = trimmed[0];
81
+ if ("'" !== quote && '"' !== quote && '`' !== quote) return;
82
+ if ('`' === quote) {
83
+ if (trimmed.includes('${')) return;
84
+ const close = trimmed.lastIndexOf('`');
85
+ return close > 0 ? trimmed.slice(1, close).replaceAll('\\`', '`') : void 0;
86
+ }
87
+ const close = trimmed.lastIndexOf(quote);
88
+ if (close <= 0 || '' !== trimmed.slice(close + 1).trim()) return;
89
+ const content = trimmed.slice(1, close);
90
+ if ('"' === quote) try {
91
+ return JSON.parse(trimmed);
92
+ } catch {
93
+ return;
94
+ }
95
+ return unescapeSingleQuotedString(content);
96
+ }
97
+ function parseObjectKey(source) {
98
+ const trimmed = source.trim();
99
+ const literal = parseLiteralString(trimmed);
100
+ if (void 0 !== literal) return literal;
101
+ return /^[$A-Z_a-z][$\w]*$/u.test(trimmed) ? trimmed : void 0;
102
+ }
103
+ function parseObjectLiteral(source) {
104
+ if (void 0 === source) return;
105
+ const block = getOuterBlock(source, '{', '}');
106
+ if (!block) return;
107
+ const properties = new Map();
108
+ let hasSpread = false;
109
+ for (const entry of splitTopLevelEntries(block.inner)){
110
+ if (entry.startsWith('...')) {
111
+ hasSpread = true;
112
+ continue;
113
+ }
114
+ const colon = findTopLevelColon(entry);
115
+ if (-1 === colon) {
116
+ hasSpread = true;
117
+ continue;
118
+ }
119
+ const key = parseObjectKey(entry.slice(0, colon));
120
+ if (void 0 === key) {
121
+ hasSpread = true;
122
+ continue;
123
+ }
124
+ properties.set(key, entry.slice(colon + 1).trim());
125
+ }
126
+ return {
127
+ hasSpread,
128
+ properties
129
+ };
130
+ }
131
+ function parseArrayLiteral(source) {
132
+ if (void 0 === source) return;
133
+ const block = getOuterBlock(source, '[', ']');
134
+ if (!block) return;
135
+ const entries = splitTopLevelEntries(block.inner);
136
+ const exposes = [];
137
+ for (const entry of entries){
138
+ const expose = parseLiteralString(entry);
139
+ if (void 0 === expose) return;
140
+ exposes.push(expose);
141
+ }
142
+ return exposes;
143
+ }
144
+ export { findTopLevelColon, parseArrayLiteral, parseLiteralString, parseObjectKey, parseObjectLiteral, splitTopLevelEntries, stripConstAssertion, unescapeSingleQuotedString };