@bleedingdev/modern-js-create 3.5.0-ultramodern.30 → 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 (421) hide show
  1. package/dist/cjs/cli/flags.cjs +326 -0
  2. package/dist/cjs/cli/help.cjs +106 -0
  3. package/dist/cjs/cli/package-source.cjs +186 -0
  4. package/dist/cjs/cli/project-setup.cjs +138 -0
  5. package/dist/cjs/cli/prompts.cjs +118 -0
  6. package/dist/cjs/index.cjs +24 -581
  7. package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +132 -0
  8. package/dist/cjs/ultramodern-tooling/commands/context.cjs +131 -0
  9. package/dist/cjs/ultramodern-tooling/commands/mf-types.cjs +55 -0
  10. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +158 -0
  11. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +49 -0
  12. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +87 -0
  13. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +58 -0
  14. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +62 -0
  15. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +60 -0
  16. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +132 -0
  17. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +67 -0
  18. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +93 -0
  19. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +60 -0
  20. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +67 -0
  21. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs +67 -0
  22. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +54 -0
  23. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +52 -0
  24. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +133 -0
  25. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +219 -0
  26. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +76 -0
  27. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +131 -0
  28. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +161 -0
  29. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +88 -0
  30. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +149 -0
  31. package/dist/cjs/ultramodern-tooling/commands/options.cjs +59 -0
  32. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +122 -0
  33. package/dist/cjs/ultramodern-tooling/commands/skills.cjs +49 -0
  34. package/dist/cjs/ultramodern-tooling/commands/sync-delivery-unit.cjs +40 -0
  35. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +49 -0
  36. package/dist/cjs/ultramodern-tooling/commands.cjs +17 -1165
  37. package/dist/cjs/ultramodern-tooling/config/constants.cjs +48 -0
  38. package/dist/cjs/ultramodern-tooling/config/index.cjs +104 -0
  39. package/dist/cjs/ultramodern-tooling/config/json.cjs +61 -0
  40. package/dist/cjs/ultramodern-tooling/config/load.cjs +62 -0
  41. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +92 -0
  42. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +160 -0
  43. package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +157 -0
  44. package/dist/cjs/ultramodern-tooling/config/types.cjs +18 -0
  45. package/dist/cjs/ultramodern-tooling/config.cjs +23 -274
  46. package/dist/cjs/ultramodern-workspace/add-vertical/constants.cjs +52 -0
  47. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +156 -0
  48. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +246 -0
  49. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +198 -0
  50. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +116 -0
  51. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +133 -0
  52. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +107 -0
  53. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +22 -596
  54. package/dist/cjs/ultramodern-workspace/api/checkout-cart.cjs +145 -0
  55. package/dist/cjs/ultramodern-workspace/api/client.cjs +218 -0
  56. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +222 -0
  57. package/dist/cjs/ultramodern-workspace/api/names.cjs +98 -0
  58. package/dist/cjs/ultramodern-workspace/api/service.cjs +220 -0
  59. package/dist/cjs/ultramodern-workspace/api/shared.cjs +252 -0
  60. package/dist/cjs/ultramodern-workspace/api.cjs +27 -1046
  61. package/dist/cjs/ultramodern-workspace/app-files.cjs +3 -18
  62. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +38 -24
  63. package/dist/cjs/ultramodern-workspace/bridge-config/cli.cjs +71 -0
  64. package/dist/cjs/ultramodern-workspace/bridge-config/defaults.cjs +43 -0
  65. package/dist/cjs/ultramodern-workspace/bridge-config/gates.cjs +93 -0
  66. package/dist/cjs/ultramodern-workspace/bridge-config/index.cjs +60 -0
  67. package/dist/cjs/ultramodern-workspace/bridge-config/normalize.cjs +68 -0
  68. package/dist/cjs/ultramodern-workspace/bridge-config/schema.cjs +78 -0
  69. package/dist/cjs/ultramodern-workspace/bridge-config/shared.cjs +110 -0
  70. package/dist/cjs/ultramodern-workspace/bridge-config/validation.cjs +68 -0
  71. package/dist/cjs/ultramodern-workspace/bridge-config/workspace-packages.cjs +108 -0
  72. package/dist/cjs/ultramodern-workspace/bridge-config.cjs +32 -297
  73. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +22 -20
  74. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +7 -20
  75. package/dist/cjs/ultramodern-workspace/demo-components.cjs +47 -189
  76. package/dist/cjs/ultramodern-workspace/descriptors.cjs +12 -1
  77. package/dist/cjs/ultramodern-workspace/effect-diagnostics.cjs +114 -0
  78. package/dist/cjs/ultramodern-workspace/fs-io.cjs +24 -2
  79. package/dist/cjs/ultramodern-workspace/index.cjs +4 -0
  80. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +69 -0
  81. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +77 -0
  82. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +92 -0
  83. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +203 -0
  84. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +171 -0
  85. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +228 -0
  86. package/dist/cjs/ultramodern-workspace/mf-validation/types.cjs +18 -0
  87. package/dist/cjs/ultramodern-workspace/mf-validation/validate.cjs +112 -0
  88. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +6 -529
  89. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +251 -0
  90. package/dist/cjs/ultramodern-workspace/module-federation/index.cjs +73 -0
  91. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +73 -0
  92. package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +105 -0
  93. package/dist/cjs/ultramodern-workspace/module-federation/shared-config.cjs +53 -0
  94. package/dist/cjs/ultramodern-workspace/module-federation.cjs +14 -584
  95. package/dist/cjs/ultramodern-workspace/package-json.cjs +13 -229
  96. package/dist/cjs/ultramodern-workspace/routes.cjs +8 -142
  97. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +44 -0
  98. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +199 -0
  99. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +2 -2
  100. package/dist/cjs/ultramodern-workspace/write-app.cjs +128 -0
  101. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +4 -61
  102. package/dist/cjs/ultramodern-workspace/zerops.cjs +13 -10
  103. package/dist/esm/cli/flags.js +228 -0
  104. package/dist/esm/cli/help.js +65 -0
  105. package/dist/esm/cli/package-source.js +119 -0
  106. package/dist/esm/cli/project-setup.js +81 -0
  107. package/dist/esm/cli/prompts.js +63 -0
  108. package/dist/esm/index.js +6 -559
  109. package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +84 -0
  110. package/dist/esm/ultramodern-tooling/commands/context.js +66 -0
  111. package/dist/esm/ultramodern-tooling/commands/mf-types.js +17 -0
  112. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +106 -0
  113. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +11 -0
  114. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +38 -0
  115. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +10 -0
  116. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +14 -0
  117. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +12 -0
  118. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +83 -0
  119. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +16 -0
  120. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +44 -0
  121. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +12 -0
  122. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +7 -0
  123. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +15 -0
  124. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +16 -0
  125. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +14 -0
  126. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +69 -0
  127. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +175 -0
  128. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +38 -0
  129. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +76 -0
  130. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +105 -0
  131. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +16 -0
  132. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +100 -0
  133. package/dist/esm/ultramodern-tooling/commands/options.js +18 -0
  134. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +74 -0
  135. package/dist/esm/ultramodern-tooling/commands/skills.js +11 -0
  136. package/dist/esm/ultramodern-tooling/commands/sync-delivery-unit.js +1 -0
  137. package/dist/esm/ultramodern-tooling/commands/validate.js +11 -0
  138. package/dist/esm/ultramodern-tooling/commands.js +9 -1152
  139. package/dist/esm/ultramodern-tooling/config/constants.js +4 -0
  140. package/dist/esm/ultramodern-tooling/config/index.js +7 -0
  141. package/dist/esm/ultramodern-tooling/config/json.js +10 -0
  142. package/dist/esm/ultramodern-tooling/config/load.js +13 -0
  143. package/dist/esm/ultramodern-tooling/config/metadata.js +37 -0
  144. package/dist/esm/ultramodern-tooling/config/normalize.js +106 -0
  145. package/dist/esm/ultramodern-tooling/config/synthesize.js +108 -0
  146. package/dist/esm/ultramodern-tooling/config/types.js +0 -0
  147. package/dist/esm/ultramodern-tooling/config.js +1 -255
  148. package/dist/esm/ultramodern-workspace/add-vertical/constants.js +5 -0
  149. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +108 -0
  150. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +184 -0
  151. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +122 -0
  152. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +59 -0
  153. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +89 -0
  154. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +43 -0
  155. package/dist/esm/ultramodern-workspace/add-vertical.js +6 -569
  156. package/dist/esm/ultramodern-workspace/api/checkout-cart.js +86 -0
  157. package/dist/esm/ultramodern-workspace/api/client.js +177 -0
  158. package/dist/esm/ultramodern-workspace/api/contracts.js +172 -0
  159. package/dist/esm/ultramodern-workspace/api/names.js +33 -0
  160. package/dist/esm/ultramodern-workspace/api/service.js +179 -0
  161. package/dist/esm/ultramodern-workspace/api/shared.js +208 -0
  162. package/dist/esm/ultramodern-workspace/api.js +5 -1025
  163. package/dist/esm/ultramodern-workspace/app-files.js +3 -18
  164. package/dist/esm/ultramodern-workspace/backend-federation.js +27 -13
  165. package/dist/esm/ultramodern-workspace/bridge-config/cli.js +30 -0
  166. package/dist/esm/ultramodern-workspace/bridge-config/defaults.js +5 -0
  167. package/dist/esm/ultramodern-workspace/bridge-config/gates.js +52 -0
  168. package/dist/esm/ultramodern-workspace/bridge-config/index.js +3 -0
  169. package/dist/esm/ultramodern-workspace/bridge-config/normalize.js +30 -0
  170. package/dist/esm/ultramodern-workspace/bridge-config/schema.js +31 -0
  171. package/dist/esm/ultramodern-workspace/bridge-config/shared.js +51 -0
  172. package/dist/esm/ultramodern-workspace/bridge-config/validation.js +27 -0
  173. package/dist/esm/ultramodern-workspace/bridge-config/workspace-packages.js +67 -0
  174. package/dist/esm/ultramodern-workspace/bridge-config.js +1 -270
  175. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +23 -21
  176. package/dist/esm/ultramodern-workspace/delivery-unit.js +6 -16
  177. package/dist/esm/ultramodern-workspace/demo-components.js +47 -189
  178. package/dist/esm/ultramodern-workspace/descriptors.js +12 -1
  179. package/dist/esm/ultramodern-workspace/effect-diagnostics.js +76 -0
  180. package/dist/esm/ultramodern-workspace/fs-io.js +24 -2
  181. package/dist/esm/ultramodern-workspace/index.js +1 -0
  182. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +19 -0
  183. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +28 -0
  184. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +45 -0
  185. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +144 -0
  186. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +89 -0
  187. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +154 -0
  188. package/dist/esm/ultramodern-workspace/mf-validation/types.js +0 -0
  189. package/dist/esm/ultramodern-workspace/mf-validation/validate.js +57 -0
  190. package/dist/esm/ultramodern-workspace/mf-validation.js +3 -516
  191. package/dist/esm/ultramodern-workspace/module-federation/config.js +204 -0
  192. package/dist/esm/ultramodern-workspace/module-federation/index.js +4 -0
  193. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +29 -0
  194. package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +64 -0
  195. package/dist/esm/ultramodern-workspace/module-federation/shared-config.js +12 -0
  196. package/dist/esm/ultramodern-workspace/module-federation.js +2 -576
  197. package/dist/esm/ultramodern-workspace/package-json.js +7 -210
  198. package/dist/esm/ultramodern-workspace/routes.js +8 -142
  199. package/dist/esm/ultramodern-workspace/shared-patches.js +6 -0
  200. package/dist/esm/ultramodern-workspace/tsconfigs.js +136 -0
  201. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +2 -2
  202. package/dist/esm/ultramodern-workspace/write-app.js +90 -0
  203. package/dist/esm/ultramodern-workspace/write-workspace.js +4 -61
  204. package/dist/esm/ultramodern-workspace/zerops.js +13 -10
  205. package/dist/esm-node/cli/flags.js +229 -0
  206. package/dist/esm-node/cli/help.js +66 -0
  207. package/dist/esm-node/cli/package-source.js +120 -0
  208. package/dist/esm-node/cli/project-setup.js +82 -0
  209. package/dist/esm-node/cli/prompts.js +64 -0
  210. package/dist/esm-node/index.js +6 -559
  211. package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +85 -0
  212. package/dist/esm-node/ultramodern-tooling/commands/context.js +67 -0
  213. package/dist/esm-node/ultramodern-tooling/commands/mf-types.js +18 -0
  214. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +107 -0
  215. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +12 -0
  216. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +39 -0
  217. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +11 -0
  218. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +15 -0
  219. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +13 -0
  220. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +84 -0
  221. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +17 -0
  222. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +45 -0
  223. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +13 -0
  224. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +8 -0
  225. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +16 -0
  226. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +17 -0
  227. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +15 -0
  228. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +70 -0
  229. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +176 -0
  230. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +39 -0
  231. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +77 -0
  232. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +106 -0
  233. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +17 -0
  234. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +101 -0
  235. package/dist/esm-node/ultramodern-tooling/commands/options.js +19 -0
  236. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +75 -0
  237. package/dist/esm-node/ultramodern-tooling/commands/skills.js +12 -0
  238. package/dist/esm-node/ultramodern-tooling/commands/sync-delivery-unit.js +2 -0
  239. package/dist/esm-node/ultramodern-tooling/commands/validate.js +12 -0
  240. package/dist/esm-node/ultramodern-tooling/commands.js +9 -1152
  241. package/dist/esm-node/ultramodern-tooling/config/constants.js +5 -0
  242. package/dist/esm-node/ultramodern-tooling/config/index.js +8 -0
  243. package/dist/esm-node/ultramodern-tooling/config/json.js +11 -0
  244. package/dist/esm-node/ultramodern-tooling/config/load.js +14 -0
  245. package/dist/esm-node/ultramodern-tooling/config/metadata.js +38 -0
  246. package/dist/esm-node/ultramodern-tooling/config/normalize.js +107 -0
  247. package/dist/esm-node/ultramodern-tooling/config/synthesize.js +109 -0
  248. package/dist/esm-node/ultramodern-tooling/config/types.js +1 -0
  249. package/dist/esm-node/ultramodern-tooling/config.js +1 -255
  250. package/dist/esm-node/ultramodern-workspace/add-vertical/constants.js +6 -0
  251. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +109 -0
  252. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +185 -0
  253. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +123 -0
  254. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +60 -0
  255. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +90 -0
  256. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +44 -0
  257. package/dist/esm-node/ultramodern-workspace/add-vertical.js +6 -569
  258. package/dist/esm-node/ultramodern-workspace/api/checkout-cart.js +87 -0
  259. package/dist/esm-node/ultramodern-workspace/api/client.js +178 -0
  260. package/dist/esm-node/ultramodern-workspace/api/contracts.js +173 -0
  261. package/dist/esm-node/ultramodern-workspace/api/names.js +34 -0
  262. package/dist/esm-node/ultramodern-workspace/api/service.js +180 -0
  263. package/dist/esm-node/ultramodern-workspace/api/shared.js +209 -0
  264. package/dist/esm-node/ultramodern-workspace/api.js +5 -1025
  265. package/dist/esm-node/ultramodern-workspace/app-files.js +3 -18
  266. package/dist/esm-node/ultramodern-workspace/backend-federation.js +27 -13
  267. package/dist/esm-node/ultramodern-workspace/bridge-config/cli.js +31 -0
  268. package/dist/esm-node/ultramodern-workspace/bridge-config/defaults.js +6 -0
  269. package/dist/esm-node/ultramodern-workspace/bridge-config/gates.js +53 -0
  270. package/dist/esm-node/ultramodern-workspace/bridge-config/index.js +4 -0
  271. package/dist/esm-node/ultramodern-workspace/bridge-config/normalize.js +31 -0
  272. package/dist/esm-node/ultramodern-workspace/bridge-config/schema.js +32 -0
  273. package/dist/esm-node/ultramodern-workspace/bridge-config/shared.js +52 -0
  274. package/dist/esm-node/ultramodern-workspace/bridge-config/validation.js +28 -0
  275. package/dist/esm-node/ultramodern-workspace/bridge-config/workspace-packages.js +68 -0
  276. package/dist/esm-node/ultramodern-workspace/bridge-config.js +1 -270
  277. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +23 -21
  278. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +6 -16
  279. package/dist/esm-node/ultramodern-workspace/demo-components.js +47 -189
  280. package/dist/esm-node/ultramodern-workspace/descriptors.js +12 -1
  281. package/dist/esm-node/ultramodern-workspace/effect-diagnostics.js +77 -0
  282. package/dist/esm-node/ultramodern-workspace/fs-io.js +24 -2
  283. package/dist/esm-node/ultramodern-workspace/index.js +1 -0
  284. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +20 -0
  285. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +29 -0
  286. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +46 -0
  287. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +145 -0
  288. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +90 -0
  289. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +155 -0
  290. package/dist/esm-node/ultramodern-workspace/mf-validation/types.js +1 -0
  291. package/dist/esm-node/ultramodern-workspace/mf-validation/validate.js +58 -0
  292. package/dist/esm-node/ultramodern-workspace/mf-validation.js +3 -516
  293. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +205 -0
  294. package/dist/esm-node/ultramodern-workspace/module-federation/index.js +5 -0
  295. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +30 -0
  296. package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +65 -0
  297. package/dist/esm-node/ultramodern-workspace/module-federation/shared-config.js +13 -0
  298. package/dist/esm-node/ultramodern-workspace/module-federation.js +2 -576
  299. package/dist/esm-node/ultramodern-workspace/package-json.js +7 -210
  300. package/dist/esm-node/ultramodern-workspace/routes.js +8 -142
  301. package/dist/esm-node/ultramodern-workspace/shared-patches.js +7 -0
  302. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +137 -0
  303. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +2 -2
  304. package/dist/esm-node/ultramodern-workspace/write-app.js +91 -0
  305. package/dist/esm-node/ultramodern-workspace/write-workspace.js +4 -61
  306. package/dist/esm-node/ultramodern-workspace/zerops.js +13 -10
  307. package/dist/types/cli/flags.d.ts +30 -0
  308. package/dist/types/cli/help.d.ts +2 -0
  309. package/dist/types/cli/package-source.d.ts +15 -0
  310. package/dist/types/cli/project-setup.d.ts +8 -0
  311. package/dist/types/cli/prompts.d.ts +6 -0
  312. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -0
  313. package/dist/types/ultramodern-tooling/commands/context.d.ts +11 -0
  314. package/dist/types/ultramodern-tooling/commands/mf-types.d.ts +2 -0
  315. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +4 -0
  316. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +4 -0
  317. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +1 -0
  318. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +3 -0
  319. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +3 -0
  320. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +3 -0
  321. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +2 -0
  322. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +4 -0
  323. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +3 -0
  324. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +3 -0
  325. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +7 -0
  326. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +3 -0
  327. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +1 -0
  328. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +2 -0
  329. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +14 -0
  330. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +9 -0
  331. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +3 -0
  332. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +4 -0
  333. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +25 -0
  334. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +9 -0
  335. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +2 -0
  336. package/dist/types/ultramodern-tooling/commands/options.d.ts +2 -0
  337. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +2 -0
  338. package/dist/types/ultramodern-tooling/commands/skills.d.ts +2 -0
  339. package/dist/types/ultramodern-tooling/commands/sync-delivery-unit.d.ts +1 -0
  340. package/dist/types/ultramodern-tooling/commands/validate.d.ts +2 -0
  341. package/dist/types/ultramodern-tooling/config/constants.d.ts +3 -0
  342. package/dist/types/ultramodern-tooling/config/index.d.ts +7 -0
  343. package/dist/types/ultramodern-tooling/config/json.d.ts +2 -0
  344. package/dist/types/ultramodern-tooling/config/load.d.ts +2 -0
  345. package/dist/types/ultramodern-tooling/config/metadata.d.ts +4 -0
  346. package/dist/types/ultramodern-tooling/config/normalize.d.ts +5 -0
  347. package/dist/types/ultramodern-tooling/config/synthesize.d.ts +5 -0
  348. package/dist/types/ultramodern-tooling/config/types.d.ts +41 -0
  349. package/dist/types/ultramodern-tooling/config.d.ts +1 -49
  350. package/dist/types/ultramodern-workspace/add-vertical/constants.d.ts +4 -0
  351. package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +2 -0
  352. package/dist/types/ultramodern-workspace/add-vertical/plan.d.ts +7 -0
  353. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +28 -0
  354. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +6 -0
  355. package/dist/types/ultramodern-workspace/add-vertical/topology.d.ts +9 -0
  356. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +8 -0
  357. package/dist/types/ultramodern-workspace/add-vertical.d.ts +7 -39
  358. package/dist/types/ultramodern-workspace/api/checkout-cart.d.ts +33 -0
  359. package/dist/types/ultramodern-workspace/api/client.d.ts +6 -0
  360. package/dist/types/ultramodern-workspace/api/contracts.d.ts +15 -0
  361. package/dist/types/ultramodern-workspace/api/names.d.ts +41 -0
  362. package/dist/types/ultramodern-workspace/api/service.d.ts +6 -0
  363. package/dist/types/ultramodern-workspace/api/shared.d.ts +10 -0
  364. package/dist/types/ultramodern-workspace/api.d.ts +5 -74
  365. package/dist/types/ultramodern-workspace/backend-federation.d.ts +2 -2
  366. package/dist/types/ultramodern-workspace/bridge-config/cli.d.ts +3 -0
  367. package/dist/types/ultramodern-workspace/bridge-config/defaults.d.ts +1 -0
  368. package/dist/types/ultramodern-workspace/bridge-config/gates.d.ts +3 -0
  369. package/dist/types/ultramodern-workspace/bridge-config/index.d.ts +4 -0
  370. package/dist/types/ultramodern-workspace/bridge-config/normalize.d.ts +2 -0
  371. package/dist/types/ultramodern-workspace/bridge-config/schema.d.ts +61 -0
  372. package/dist/types/ultramodern-workspace/bridge-config/shared.d.ts +12 -0
  373. package/dist/types/ultramodern-workspace/bridge-config/validation.d.ts +3 -0
  374. package/dist/types/ultramodern-workspace/bridge-config/workspace-packages.d.ts +3 -0
  375. package/dist/types/ultramodern-workspace/bridge-config.d.ts +1 -64
  376. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +2 -21
  377. package/dist/types/ultramodern-workspace/effect-diagnostics.d.ts +1 -0
  378. package/dist/types/ultramodern-workspace/index.d.ts +1 -0
  379. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +5 -0
  380. package/dist/types/ultramodern-workspace/mf-validation/discovery.d.ts +2 -0
  381. package/dist/types/ultramodern-workspace/mf-validation/inspect.d.ts +5 -0
  382. package/dist/types/ultramodern-workspace/mf-validation/object-literal.d.ts +9 -0
  383. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +13 -0
  384. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +14 -0
  385. package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +33 -0
  386. package/dist/types/ultramodern-workspace/mf-validation/validate.d.ts +4 -0
  387. package/dist/types/ultramodern-workspace/mf-validation.d.ts +4 -27
  388. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +5 -0
  389. package/dist/types/ultramodern-workspace/module-federation/index.d.ts +4 -0
  390. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +4 -0
  391. package/dist/types/ultramodern-workspace/module-federation/remote-refs.d.ts +3 -0
  392. package/dist/types/ultramodern-workspace/module-federation/shared-config.d.ts +2 -0
  393. package/dist/types/ultramodern-workspace/module-federation.d.ts +1 -11
  394. package/dist/types/ultramodern-workspace/package-json.d.ts +1 -13
  395. package/dist/types/ultramodern-workspace/shared-patches.d.ts +2 -0
  396. package/dist/types/ultramodern-workspace/tsconfigs.d.ts +13 -0
  397. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +1 -1
  398. package/dist/types/ultramodern-workspace/write-app.d.ts +3 -0
  399. package/dist/types/ultramodern-workspace/write-workspace.d.ts +2 -1
  400. package/package.json +4 -3
  401. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +37 -0
  402. package/templates/workspace/apps/modern.config.ts.handlebars +252 -0
  403. package/templates/workspace/apps/shared/src/routes/ultramodern-jsonld.ts.handlebars +119 -0
  404. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -0
  405. package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +49 -0
  406. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +79 -0
  407. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +11 -0
  408. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +46 -0
  409. package/templates/workspace/packages/shared-design-tokens/tokens.css.handlebars +7 -0
  410. package/templates/workspace/postcss.config.mjs.handlebars +5 -0
  411. package/templates/workspace/tailwind.config.ts.handlebars +3 -0
  412. package/templates/workspace/verticals/server/checkout-cart-handlers.ts.handlebars +49 -0
  413. package/templates/workspace/verticals/server/checkout-cart-state.ts.handlebars +23 -0
  414. package/templates/workspace/verticals/shared/api.checkout-cart-contract-fields.ts.handlebars +1 -0
  415. package/templates/workspace/verticals/shared/api.checkout-cart-endpoints.ts.handlebars +23 -0
  416. package/templates/workspace/verticals/shared/api.checkout-cart-operation-contexts.ts.handlebars +25 -0
  417. package/templates/workspace/verticals/shared/api.checkout-cart-schemas.ts.handlebars +48 -0
  418. package/templates/workspace/verticals/src/api/checkout-cart-client-exports.ts.handlebars +70 -0
  419. package/templates/workspace-scripts/generate-node-backend-federation.mjs +29 -0
  420. package/templates/workspace-scripts/proof-node-backend-federation.mjs +31 -0
  421. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +74 -40
@@ -107,7 +107,18 @@ 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`;
@@ -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 };
@@ -0,0 +1,89 @@
1
+ import node_fs from "node:fs";
2
+ import node_path from "node:path";
3
+ import { generatedMetadataPaths, moduleFederationConfigFile, skippedScanDirs } from "./constants.js";
4
+ function isRecord(value) {
5
+ return null !== value && 'object' == typeof value && !Array.isArray(value);
6
+ }
7
+ function toPosixPath(value) {
8
+ return value.split(node_path.sep).join('/');
9
+ }
10
+ function normalizeRelativePath(value) {
11
+ const normalized = value.replace(/\\/g, '/').replace(/^\.\/+/u, '');
12
+ const trimmed = normalized.replace(/\/+$/u, '');
13
+ return '' === trimmed ? '.' : trimmed;
14
+ }
15
+ function relativePath(root, target) {
16
+ return normalizeRelativePath(toPosixPath(node_path.relative(root, target)));
17
+ }
18
+ function readJsonIfExists(filePath) {
19
+ if (!node_fs.existsSync(filePath)) return;
20
+ return JSON.parse(node_fs.readFileSync(filePath, 'utf-8'));
21
+ }
22
+ function addMetadataAppDir(value, appDirs, hint = '') {
23
+ if (!isRecord(value)) return;
24
+ const pathValue = 'string' == typeof value.path ? value.path : 'string' == typeof value.directory ? value.directory : void 0;
25
+ const hasModuleFederationDeclaration = isRecord(value.moduleFederation) || 'string' == typeof value.moduleFederationName || 'apps' === hint || 'verticals' === hint || 'remotes' === hint || 'moduleFederation' === hint;
26
+ if (pathValue && hasModuleFederationDeclaration && !node_path.isAbsolute(pathValue)) appDirs.add(normalizeRelativePath(pathValue));
27
+ }
28
+ function collectMetadataAppDirs(value, appDirs, hint = '') {
29
+ if (Array.isArray(value)) {
30
+ for (const entry of value)collectMetadataAppDirs(entry, appDirs, hint);
31
+ return;
32
+ }
33
+ if (!isRecord(value)) return;
34
+ addMetadataAppDir(value, appDirs, hint);
35
+ for (const [key, entry] of Object.entries(value))collectMetadataAppDirs(entry, appDirs, key);
36
+ }
37
+ function literalRootFromPattern(pattern) {
38
+ const normalized = normalizeRelativePath(pattern);
39
+ if ('.' === normalized || node_path.isAbsolute(normalized) || normalized.startsWith('../')) return;
40
+ const segments = normalized.split('/');
41
+ const literalSegments = [];
42
+ for (const segment of segments){
43
+ if (/[*?[\]{}]/u.test(segment)) break;
44
+ literalSegments.push(segment);
45
+ }
46
+ return literalSegments.length > 0 ? literalSegments.join('/') : void 0;
47
+ }
48
+ function collectBridgeScanRoots(value, roots) {
49
+ if (Array.isArray(value)) {
50
+ for (const entry of value)collectBridgeScanRoots(entry, roots);
51
+ return;
52
+ }
53
+ if (!isRecord(value)) return;
54
+ const workspacePackages = value.bridge;
55
+ if (isRecord(workspacePackages)) {
56
+ const entries = workspacePackages.workspacePackages;
57
+ if (Array.isArray(entries)) {
58
+ for (const entry of entries)if (isRecord(entry) && 'string' == typeof entry.pattern) {
59
+ const root = literalRootFromPattern(entry.pattern);
60
+ if (root) roots.add(root);
61
+ }
62
+ }
63
+ }
64
+ for (const entry of Object.values(value))collectBridgeScanRoots(entry, roots);
65
+ }
66
+ function readGeneratedMetadata(workspaceRoot) {
67
+ return generatedMetadataPaths.map((metadataPath)=>readJsonIfExists(node_path.join(workspaceRoot, metadataPath))).filter((metadata)=>void 0 !== metadata);
68
+ }
69
+ function firstSegment(appDir) {
70
+ if ('.' === appDir) return;
71
+ return appDir.split('/')[0];
72
+ }
73
+ function scanForModuleFederationConfigs(workspaceRoot, scanRoot, appDirs) {
74
+ const absoluteRoot = node_path.join(workspaceRoot, scanRoot);
75
+ if (!node_fs.existsSync(absoluteRoot) || !node_fs.statSync(absoluteRoot).isDirectory()) return;
76
+ const visit = (directory)=>{
77
+ for (const entry of node_fs.readdirSync(directory, {
78
+ withFileTypes: true
79
+ })){
80
+ if (entry.isDirectory()) {
81
+ if (!skippedScanDirs.has(entry.name)) visit(node_path.join(directory, entry.name));
82
+ continue;
83
+ }
84
+ if (entry.isFile() && entry.name === moduleFederationConfigFile) appDirs.add(relativePath(workspaceRoot, directory));
85
+ }
86
+ };
87
+ visit(absoluteRoot);
88
+ }
89
+ export { addMetadataAppDir, collectBridgeScanRoots, collectMetadataAppDirs, firstSegment, isRecord, literalRootFromPattern, normalizeRelativePath, readGeneratedMetadata, readJsonIfExists, relativePath, scanForModuleFederationConfigs, toPosixPath };
@@ -0,0 +1,154 @@
1
+ function isEscaped(source, index) {
2
+ let slashCount = 0;
3
+ for(let cursor = index - 1; cursor >= 0 && '\\' === source[cursor]; cursor -= 1)slashCount += 1;
4
+ return slashCount % 2 === 1;
5
+ }
6
+ function skipQuoted(source, start, quote) {
7
+ for(let index = start + 1; index < source.length; index += 1)if (source[index] === quote && !isEscaped(source, index)) return index + 1;
8
+ return source.length;
9
+ }
10
+ function skipLineComment(source, start) {
11
+ const newline = source.indexOf('\n', start + 2);
12
+ return -1 === newline ? source.length : newline + 1;
13
+ }
14
+ function skipBlockComment(source, start) {
15
+ const close = source.indexOf('*/', start + 2);
16
+ return -1 === close ? source.length : close + 2;
17
+ }
18
+ function skipTemplateExpression(source, start) {
19
+ let depth = 1;
20
+ for(let index = start + 1; index < source.length; index += 1){
21
+ const char = source[index];
22
+ const next = source[index + 1];
23
+ if ("'" === char) {
24
+ index = skipQuoted(source, index, "'") - 1;
25
+ continue;
26
+ }
27
+ if ('"' === char) {
28
+ index = skipQuoted(source, index, '"') - 1;
29
+ continue;
30
+ }
31
+ if ('`' === char) {
32
+ index = skipTemplate(source, index) - 1;
33
+ continue;
34
+ }
35
+ if ('/' === char && '/' === next) {
36
+ index = skipLineComment(source, index) - 1;
37
+ continue;
38
+ }
39
+ if ('/' === char && '*' === next) {
40
+ index = skipBlockComment(source, index) - 1;
41
+ continue;
42
+ }
43
+ if ('{' === char) {
44
+ depth += 1;
45
+ continue;
46
+ }
47
+ if ('}' === char) {
48
+ depth -= 1;
49
+ if (0 === depth) return index + 1;
50
+ }
51
+ }
52
+ return source.length;
53
+ }
54
+ function skipTemplate(source, start) {
55
+ for(let index = start + 1; index < source.length; index += 1){
56
+ const char = source[index];
57
+ const next = source[index + 1];
58
+ if ('`' === char && !isEscaped(source, index)) return index + 1;
59
+ if ('$' === char && '{' === next && !isEscaped(source, index)) index = skipTemplateExpression(source, index + 1) - 1;
60
+ }
61
+ return source.length;
62
+ }
63
+ function skipSyntax(source, index) {
64
+ const char = source[index];
65
+ const next = source[index + 1];
66
+ if ("'" === char) return skipQuoted(source, index, "'");
67
+ if ('"' === char) return skipQuoted(source, index, '"');
68
+ if ('`' === char) return skipTemplate(source, index);
69
+ if ('/' === char && '/' === next) return skipLineComment(source, index);
70
+ if ('/' === char && '*' === next) return skipBlockComment(source, index);
71
+ return index;
72
+ }
73
+ function findBalanced(source, start, open, close) {
74
+ let depth = 1;
75
+ for(let index = start + 1; index < source.length; index += 1){
76
+ const skipped = skipSyntax(source, index);
77
+ if (skipped !== index) {
78
+ index = skipped - 1;
79
+ continue;
80
+ }
81
+ if (source[index] === open) {
82
+ depth += 1;
83
+ continue;
84
+ }
85
+ if (source[index] === close) {
86
+ depth -= 1;
87
+ if (0 === depth) return index;
88
+ }
89
+ }
90
+ }
91
+ function skipWhitespaceAndComments(source, start) {
92
+ let index = start;
93
+ while(index < source.length){
94
+ const char = source[index];
95
+ const next = source[index + 1];
96
+ if (/\s/u.test(char ?? '')) {
97
+ index += 1;
98
+ continue;
99
+ }
100
+ if ('/' === char && '/' === next) {
101
+ index = skipLineComment(source, index);
102
+ continue;
103
+ }
104
+ if ('/' === char && '*' === next) {
105
+ index = skipBlockComment(source, index);
106
+ continue;
107
+ }
108
+ break;
109
+ }
110
+ return index;
111
+ }
112
+ function hasIdentifierBoundary(source, start, end) {
113
+ return !/[$\w]/u.test(source[start - 1] ?? '') && !/[$\w]/u.test(source[end] ?? '');
114
+ }
115
+ function findCreateModuleFederationConfigObject(source) {
116
+ const callee = 'createModuleFederationConfig';
117
+ let offset = 0;
118
+ while(offset < source.length){
119
+ const index = source.indexOf(callee, offset);
120
+ if (-1 === index) break;
121
+ offset = index + callee.length;
122
+ if (!hasIdentifierBoundary(source, index, offset)) continue;
123
+ const parenIndex = skipWhitespaceAndComments(source, offset);
124
+ if ('(' !== source[parenIndex]) continue;
125
+ const argumentIndex = skipWhitespaceAndComments(source, parenIndex + 1);
126
+ if ('{' !== source[argumentIndex]) throw new Error('Module Federation config must pass a static object literal to createModuleFederationConfig.');
127
+ const closeIndex = findBalanced(source, argumentIndex, '{', '}');
128
+ if (void 0 === closeIndex) throw new Error('Module Federation config object literal is not closed.');
129
+ return source.slice(argumentIndex, closeIndex + 1);
130
+ }
131
+ }
132
+ function findExportDefaultObject(source) {
133
+ const exportDefault = 'export default';
134
+ const index = source.indexOf(exportDefault);
135
+ if (-1 === index) return;
136
+ const objectStart = skipWhitespaceAndComments(source, index + exportDefault.length);
137
+ if ('{' !== source[objectStart]) return;
138
+ const objectEnd = findBalanced(source, objectStart, '{', '}');
139
+ if (void 0 === objectEnd) throw new Error('Module Federation export default object is not closed.');
140
+ return source.slice(objectStart, objectEnd + 1);
141
+ }
142
+ function getOuterBlock(source, open, close) {
143
+ const trimmed = source.trim();
144
+ if (trimmed[0] !== open) return;
145
+ const end = findBalanced(trimmed, 0, open, close);
146
+ if (void 0 === end) return;
147
+ const suffix = trimmed.slice(end + 1).trim();
148
+ if ('' !== suffix && !suffix.startsWith('as ') && !suffix.startsWith('satisfies ')) return;
149
+ return {
150
+ inner: trimmed.slice(1, end),
151
+ suffix
152
+ };
153
+ }
154
+ export { findBalanced, findCreateModuleFederationConfigObject, findExportDefaultObject, getOuterBlock, hasIdentifierBoundary, isEscaped, skipBlockComment, skipLineComment, skipQuoted, skipSyntax, skipTemplate, skipTemplateExpression, skipWhitespaceAndComments };