@bleedingdev/modern-js-ultramodern-create 3.9.0-ultramodern.2 → 3.9.0-ultramodern.21

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 (442) hide show
  1. package/README.md +43 -74
  2. package/dist/cjs/cli/package-source.cjs +2 -2
  3. package/dist/cjs/cli/project-setup.cjs +2 -22
  4. package/dist/cjs/index.cjs +9 -1
  5. package/dist/cjs/locale/en.cjs +2 -1
  6. package/dist/cjs/locale/zh.cjs +2 -1
  7. package/dist/cjs/ultramodern-package-source.cjs +13 -9
  8. package/dist/cjs/ultramodern-release-cohort.cjs +6 -21
  9. package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +49 -56
  10. package/dist/cjs/ultramodern-tooling/commands/context.cjs +11 -29
  11. package/dist/cjs/ultramodern-tooling/commands/routes-generate-app.cjs +67 -0
  12. package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +24 -53
  13. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +5 -11
  14. package/dist/cjs/ultramodern-tooling/commands.cjs +15 -8
  15. package/dist/cjs/ultramodern-tooling/config/index.cjs +10 -24
  16. package/dist/cjs/ultramodern-tooling/config/load.cjs +12 -10
  17. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +34 -32
  18. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +165 -164
  19. package/dist/cjs/ultramodern-workspace/add-shell.cjs +118 -118
  20. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +121 -25
  21. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +14 -160
  22. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +16 -48
  23. package/dist/cjs/ultramodern-workspace/add-vertical/preview.cjs +78 -0
  24. package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +87 -24
  25. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +4 -1
  26. package/dist/cjs/ultramodern-workspace/add-vertical/transaction.cjs +378 -45
  27. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +21 -44
  28. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +0 -9
  29. package/dist/cjs/ultramodern-workspace/api/client.cjs +5 -5
  30. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +2 -2
  31. package/dist/cjs/ultramodern-workspace/api/rpc.cjs +20 -18
  32. package/dist/cjs/ultramodern-workspace/api/service.cjs +49 -24
  33. package/dist/cjs/ultramodern-workspace/api/shared.cjs +28 -18
  34. package/dist/cjs/ultramodern-workspace/app-files.cjs +3 -23
  35. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +27 -27
  36. package/dist/cjs/ultramodern-workspace/contracts.cjs +14 -183
  37. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/surfaces.cjs +85 -0
  38. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/types.cjs +8 -85
  39. package/dist/cjs/ultramodern-workspace/delivery-unit-stamp.cjs +16 -4
  40. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +27 -17
  41. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +16 -10
  42. package/dist/cjs/ultramodern-workspace/demo-components.cjs +66 -433
  43. package/dist/cjs/ultramodern-workspace/descriptors.cjs +0 -4
  44. package/dist/cjs/ultramodern-workspace/fs-io.cjs +37 -2
  45. package/dist/cjs/ultramodern-workspace/generation-result.cjs +4 -4
  46. package/dist/cjs/ultramodern-workspace/index.cjs +2 -5
  47. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +0 -6
  48. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +6 -6
  49. package/dist/cjs/{ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs → ultramodern-workspace/mf-validation/exposes.cjs} +13 -17
  50. package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +26 -7
  51. package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +21 -122
  52. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +37 -38
  53. package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +93 -153
  54. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +4 -0
  55. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +24 -29
  56. package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +39 -58
  57. package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +1 -43
  58. package/dist/cjs/ultramodern-workspace/package-json.cjs +63 -37
  59. package/dist/cjs/ultramodern-workspace/patch-inventory.cjs +104 -0
  60. package/dist/cjs/ultramodern-workspace/policy.cjs +3 -577
  61. package/dist/cjs/ultramodern-workspace/public-surface.cjs +3 -3
  62. package/dist/cjs/ultramodern-workspace/routes.cjs +2 -11
  63. package/dist/cjs/ultramodern-workspace/shared-patches.cjs +12 -2
  64. package/dist/cjs/ultramodern-workspace/shells.cjs +0 -70
  65. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +27 -41
  66. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +8 -2
  67. package/dist/cjs/ultramodern-workspace/validation/architecture.cjs +397 -0
  68. package/dist/cjs/ultramodern-workspace/validation/assertions.cjs +140 -0
  69. package/dist/cjs/ultramodern-workspace/validation/types.cjs +18 -0
  70. package/dist/cjs/ultramodern-workspace/validation/workspace.cjs +344 -0
  71. package/dist/cjs/ultramodern-workspace/versions.cjs +81 -45
  72. package/dist/cjs/ultramodern-workspace/workspace-artifact-ownership.cjs +183 -0
  73. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +36 -25
  74. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +11 -200
  75. package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +62 -373
  76. package/dist/cjs/ultramodern-workspace/write-app.cjs +19 -11
  77. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +20 -50
  78. package/dist/cjs/ultramodern-workspace/zerops.cjs +2 -0
  79. package/dist/esm/cli/package-source.js +3 -3
  80. package/dist/esm/cli/project-setup.js +2 -22
  81. package/dist/esm/index.js +10 -2
  82. package/dist/esm/locale/en.js +2 -1
  83. package/dist/esm/locale/zh.js +2 -1
  84. package/dist/esm/ultramodern-package-source.js +14 -4
  85. package/dist/esm/ultramodern-release-cohort.js +5 -14
  86. package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +49 -56
  87. package/dist/esm/ultramodern-tooling/commands/context.js +10 -26
  88. package/dist/esm/ultramodern-tooling/commands/routes-generate-app.js +35 -0
  89. package/dist/esm/ultramodern-tooling/commands/routes-generate.js +25 -54
  90. package/dist/esm/ultramodern-tooling/commands/validate.js +6 -12
  91. package/dist/esm/ultramodern-tooling/commands.js +15 -9
  92. package/dist/esm/ultramodern-tooling/config/index.js +0 -2
  93. package/dist/esm/ultramodern-tooling/config/load.js +9 -9
  94. package/dist/esm/ultramodern-tooling/config/metadata.js +33 -28
  95. package/dist/esm/ultramodern-tooling/config/normalize.js +159 -156
  96. package/dist/esm/ultramodern-workspace/add-shell.js +124 -123
  97. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +119 -27
  98. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +16 -150
  99. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +15 -47
  100. package/dist/esm/ultramodern-workspace/add-vertical/preview.js +40 -0
  101. package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +87 -25
  102. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +4 -1
  103. package/dist/esm/ultramodern-workspace/add-vertical/transaction.js +373 -46
  104. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +17 -34
  105. package/dist/esm/ultramodern-workspace/add-vertical.js +1 -1
  106. package/dist/esm/ultramodern-workspace/api/client.js +5 -5
  107. package/dist/esm/ultramodern-workspace/api/contracts.js +2 -2
  108. package/dist/esm/ultramodern-workspace/api/rpc.js +20 -18
  109. package/dist/esm/ultramodern-workspace/api/service.js +49 -24
  110. package/dist/esm/ultramodern-workspace/api/shared.js +28 -18
  111. package/dist/esm/ultramodern-workspace/app-files.js +3 -23
  112. package/dist/esm/ultramodern-workspace/backend-federation.js +5 -5
  113. package/dist/esm/ultramodern-workspace/contracts.js +14 -180
  114. package/dist/esm/ultramodern-workspace/delivery-unit-schema/surfaces.js +41 -0
  115. package/dist/esm/ultramodern-workspace/delivery-unit-schema/types.js +1 -75
  116. package/dist/esm/ultramodern-workspace/delivery-unit-stamp.js +16 -4
  117. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +28 -18
  118. package/dist/esm/ultramodern-workspace/delivery-unit.js +12 -6
  119. package/dist/esm/ultramodern-workspace/demo-components.js +67 -428
  120. package/dist/esm/ultramodern-workspace/descriptors.js +1 -2
  121. package/dist/esm/ultramodern-workspace/fs-io.js +37 -2
  122. package/dist/esm/ultramodern-workspace/generation-result.js +3 -3
  123. package/dist/esm/ultramodern-workspace/index.js +1 -1
  124. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +1 -4
  125. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +7 -7
  126. package/dist/esm/ultramodern-workspace/mf-validation/exposes.js +14 -0
  127. package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +27 -8
  128. package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +22 -123
  129. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +36 -34
  130. package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +83 -143
  131. package/dist/esm/ultramodern-workspace/mf-validation.js +1 -0
  132. package/dist/esm/ultramodern-workspace/module-federation/config.js +25 -30
  133. package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +39 -58
  134. package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +1 -43
  135. package/dist/esm/ultramodern-workspace/package-json.js +58 -32
  136. package/dist/esm/ultramodern-workspace/patch-inventory.js +66 -0
  137. package/dist/esm/ultramodern-workspace/policy.js +2 -564
  138. package/dist/esm/ultramodern-workspace/public-surface.js +3 -3
  139. package/dist/esm/ultramodern-workspace/routes.js +2 -11
  140. package/dist/esm/ultramodern-workspace/shared-patches.js +2 -2
  141. package/dist/esm/ultramodern-workspace/shells.js +3 -67
  142. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +22 -37
  143. package/dist/esm/ultramodern-workspace/tsconfigs.js +9 -3
  144. package/dist/esm/ultramodern-workspace/validation/architecture.js +348 -0
  145. package/dist/esm/ultramodern-workspace/validation/assertions.js +65 -0
  146. package/dist/esm/ultramodern-workspace/validation/types.js +0 -0
  147. package/dist/esm/ultramodern-workspace/validation/workspace.js +286 -0
  148. package/dist/esm/ultramodern-workspace/versions.js +74 -29
  149. package/dist/esm/ultramodern-workspace/workspace-artifact-ownership.js +128 -0
  150. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +35 -27
  151. package/dist/esm/ultramodern-workspace/workspace-scripts.js +10 -190
  152. package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +65 -376
  153. package/dist/esm/ultramodern-workspace/write-app.js +18 -10
  154. package/dist/esm/ultramodern-workspace/write-workspace.js +25 -52
  155. package/dist/esm/ultramodern-workspace/zerops.js +2 -0
  156. package/dist/esm-node/cli/package-source.js +3 -3
  157. package/dist/esm-node/cli/project-setup.js +2 -22
  158. package/dist/esm-node/index.js +10 -2
  159. package/dist/esm-node/locale/en.js +2 -1
  160. package/dist/esm-node/locale/zh.js +2 -1
  161. package/dist/esm-node/ultramodern-package-source.js +14 -4
  162. package/dist/esm-node/ultramodern-release-cohort.js +5 -14
  163. package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +49 -56
  164. package/dist/esm-node/ultramodern-tooling/commands/context.js +10 -26
  165. package/dist/esm-node/ultramodern-tooling/commands/routes-generate-app.js +36 -0
  166. package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +25 -54
  167. package/dist/esm-node/ultramodern-tooling/commands/validate.js +6 -12
  168. package/dist/esm-node/ultramodern-tooling/commands.js +15 -9
  169. package/dist/esm-node/ultramodern-tooling/config/index.js +0 -2
  170. package/dist/esm-node/ultramodern-tooling/config/load.js +9 -9
  171. package/dist/esm-node/ultramodern-tooling/config/metadata.js +33 -28
  172. package/dist/esm-node/ultramodern-tooling/config/normalize.js +159 -156
  173. package/dist/esm-node/ultramodern-workspace/add-shell.js +124 -123
  174. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +119 -27
  175. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +16 -150
  176. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +15 -47
  177. package/dist/esm-node/ultramodern-workspace/add-vertical/preview.js +41 -0
  178. package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +87 -25
  179. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +4 -1
  180. package/dist/esm-node/ultramodern-workspace/add-vertical/transaction.js +373 -46
  181. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +17 -34
  182. package/dist/esm-node/ultramodern-workspace/add-vertical.js +1 -1
  183. package/dist/esm-node/ultramodern-workspace/api/client.js +5 -5
  184. package/dist/esm-node/ultramodern-workspace/api/contracts.js +2 -2
  185. package/dist/esm-node/ultramodern-workspace/api/rpc.js +20 -18
  186. package/dist/esm-node/ultramodern-workspace/api/service.js +49 -24
  187. package/dist/esm-node/ultramodern-workspace/api/shared.js +28 -18
  188. package/dist/esm-node/ultramodern-workspace/app-files.js +3 -23
  189. package/dist/esm-node/ultramodern-workspace/backend-federation.js +5 -5
  190. package/dist/esm-node/ultramodern-workspace/contracts.js +14 -180
  191. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/surfaces.js +42 -0
  192. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/types.js +1 -75
  193. package/dist/esm-node/ultramodern-workspace/delivery-unit-stamp.js +16 -4
  194. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +28 -18
  195. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +12 -6
  196. package/dist/esm-node/ultramodern-workspace/demo-components.js +67 -428
  197. package/dist/esm-node/ultramodern-workspace/descriptors.js +1 -2
  198. package/dist/esm-node/ultramodern-workspace/fs-io.js +37 -2
  199. package/dist/esm-node/ultramodern-workspace/generation-result.js +3 -3
  200. package/dist/esm-node/ultramodern-workspace/index.js +1 -1
  201. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +1 -4
  202. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +7 -7
  203. package/dist/esm-node/ultramodern-workspace/mf-validation/exposes.js +15 -0
  204. package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +27 -8
  205. package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +22 -123
  206. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +36 -34
  207. package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +83 -143
  208. package/dist/esm-node/ultramodern-workspace/mf-validation.js +1 -0
  209. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +25 -30
  210. package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +39 -58
  211. package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +1 -43
  212. package/dist/esm-node/ultramodern-workspace/package-json.js +58 -32
  213. package/dist/esm-node/ultramodern-workspace/patch-inventory.js +67 -0
  214. package/dist/esm-node/ultramodern-workspace/policy.js +2 -564
  215. package/dist/esm-node/ultramodern-workspace/public-surface.js +3 -3
  216. package/dist/esm-node/ultramodern-workspace/routes.js +2 -11
  217. package/dist/esm-node/ultramodern-workspace/shared-patches.js +2 -2
  218. package/dist/esm-node/ultramodern-workspace/shells.js +3 -67
  219. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +22 -37
  220. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +9 -3
  221. package/dist/esm-node/ultramodern-workspace/validation/architecture.js +349 -0
  222. package/dist/esm-node/ultramodern-workspace/validation/assertions.js +66 -0
  223. package/dist/esm-node/ultramodern-workspace/validation/types.js +1 -0
  224. package/dist/esm-node/ultramodern-workspace/validation/workspace.js +287 -0
  225. package/dist/esm-node/ultramodern-workspace/versions.js +74 -29
  226. package/dist/esm-node/ultramodern-workspace/workspace-artifact-ownership.js +129 -0
  227. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +35 -27
  228. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +10 -190
  229. package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +65 -376
  230. package/dist/esm-node/ultramodern-workspace/write-app.js +18 -10
  231. package/dist/esm-node/ultramodern-workspace/write-workspace.js +25 -52
  232. package/dist/esm-node/ultramodern-workspace/zerops.js +2 -0
  233. package/dist/types/cli/project-setup.d.ts +1 -1
  234. package/dist/types/locale/en.d.ts +1 -0
  235. package/dist/types/locale/index.d.ts +2 -0
  236. package/dist/types/locale/zh.d.ts +1 -0
  237. package/dist/types/ultramodern-package-source.d.ts +2 -4
  238. package/dist/types/ultramodern-release-cohort.d.ts +1 -3
  239. package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -2
  240. package/dist/types/ultramodern-tooling/commands/context.d.ts +4 -1
  241. package/dist/types/ultramodern-tooling/commands/routes-generate-app.d.ts +1 -0
  242. package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +1 -1
  243. package/dist/types/ultramodern-tooling/commands/validate.d.ts +1 -1
  244. package/dist/types/ultramodern-tooling/config/index.d.ts +0 -2
  245. package/dist/types/ultramodern-tooling/config/load.d.ts +10 -2
  246. package/dist/types/ultramodern-tooling/config/metadata.d.ts +2 -2
  247. package/dist/types/ultramodern-tooling/config/normalize.d.ts +19 -19
  248. package/dist/types/ultramodern-tooling/config/types.d.ts +2 -9
  249. package/dist/types/ultramodern-workspace/add-shell.d.ts +1 -1
  250. package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +1 -0
  251. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +4 -3
  252. package/dist/types/ultramodern-workspace/add-vertical/preview.d.ts +4 -0
  253. package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +7 -2
  254. package/dist/types/ultramodern-workspace/add-vertical/transaction.d.ts +32 -6
  255. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +10 -7
  256. package/dist/types/ultramodern-workspace/add-vertical.d.ts +1 -1
  257. package/dist/types/ultramodern-workspace/api/client.d.ts +3 -1
  258. package/dist/types/ultramodern-workspace/api/rpc.d.ts +1 -1
  259. package/dist/types/ultramodern-workspace/api/service.d.ts +3 -1
  260. package/dist/types/ultramodern-workspace/api/shared.d.ts +2 -0
  261. package/dist/types/ultramodern-workspace/backend-federation.d.ts +1 -1
  262. package/dist/types/ultramodern-workspace/contracts.d.ts +1 -3
  263. package/dist/types/ultramodern-workspace/delivery-unit-schema/surfaces.d.ts +17 -0
  264. package/dist/types/ultramodern-workspace/delivery-unit-schema/types.d.ts +3 -68
  265. package/dist/types/ultramodern-workspace/delivery-unit-stamp.d.ts +2 -2
  266. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +3 -3
  267. package/dist/types/ultramodern-workspace/demo-components.d.ts +0 -3
  268. package/dist/types/ultramodern-workspace/descriptors.d.ts +0 -1
  269. package/dist/types/ultramodern-workspace/fs-io.d.ts +1 -1
  270. package/dist/types/ultramodern-workspace/index.d.ts +1 -1
  271. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +0 -1
  272. package/dist/types/ultramodern-workspace/mf-validation/exposes.d.ts +11 -0
  273. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +2 -3
  274. package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +4 -3
  275. package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +1 -0
  276. package/dist/types/ultramodern-workspace/mf-validation.d.ts +1 -0
  277. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +1 -1
  278. package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +2 -2
  279. package/dist/types/ultramodern-workspace/package-json.d.ts +1 -1
  280. package/dist/types/ultramodern-workspace/patch-inventory.d.ts +10 -0
  281. package/dist/types/ultramodern-workspace/policy.d.ts +31 -209
  282. package/dist/types/ultramodern-workspace/routes.d.ts +6 -1
  283. package/dist/types/ultramodern-workspace/shells.d.ts +2 -15
  284. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +8 -7
  285. package/dist/types/ultramodern-workspace/types.d.ts +9 -9
  286. package/dist/types/ultramodern-workspace/validation/architecture.d.ts +2 -0
  287. package/dist/types/ultramodern-workspace/validation/assertions.d.ts +14 -0
  288. package/dist/types/ultramodern-workspace/validation/types.d.ts +9 -0
  289. package/dist/types/ultramodern-workspace/validation/workspace.d.ts +6 -0
  290. package/dist/types/ultramodern-workspace/versions.d.ts +73 -28
  291. package/dist/types/ultramodern-workspace/workspace-artifact-ownership.d.ts +18 -0
  292. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +4 -5
  293. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +8 -13
  294. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +22 -188
  295. package/dist/types/ultramodern-workspace/write-workspace.d.ts +1 -3
  296. package/package.json +18 -11
  297. package/{template-workspace/.modernjs/release-cohort.json → release-cohort.json} +88 -40
  298. package/template-workspace/.codex/skills/rspack-tracing/scripts/analyze_trace.js +1 -1
  299. package/template-workspace/README.md.handlebars +20 -35
  300. package/template-workspace/oxfmt.config.ts +3 -0
  301. package/template-workspace/pnpm-workspace.yaml.handlebars +0 -24
  302. package/template-workspace/scripts/bootstrap-agent-skills.mjs +4 -4
  303. package/templates/packages/shared-contracts-index.ts +4 -332
  304. package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +10 -0
  305. package/templates/workspace/apps/modern.config.ts.handlebars +13 -27
  306. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -11
  307. package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +20 -20
  308. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +4 -6
  309. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +2 -2
  310. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +11 -11
  311. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.helpers.tsx.handlebars +1 -1
  312. package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.imports.tsx.handlebars +1 -1
  313. package/templates/workspace-scripts/generate-node-backend-federation.mjs +68 -77
  314. package/templates/workspace-scripts/generate-public-surface-assets.mjs +107 -207
  315. package/templates/workspace-scripts/materialize-zerops-runtime.mjs +12 -19
  316. package/templates/workspace-scripts/proof-cloudflare-version.mjs +53 -444
  317. package/templates/workspace-scripts/proof-node-backend-federation.mjs +212 -91
  318. package/templates/workspace-scripts/{proof-workerd-ssr.mts → proof-workerd-ssr.mjs} +434 -239
  319. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +25 -7
  320. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +45 -147
  321. package/templates/workspace-scripts/ultramodern-typecheck.mjs +1 -1
  322. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +0 -212
  323. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +0 -47
  324. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +0 -112
  325. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +0 -55
  326. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +0 -102
  327. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +0 -195
  328. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +0 -146
  329. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.cjs +0 -110
  330. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +0 -67
  331. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +0 -307
  332. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +0 -58
  333. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +0 -71
  334. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.cjs +0 -151
  335. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +0 -67
  336. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +0 -52
  337. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +0 -447
  338. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +0 -323
  339. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +0 -87
  340. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +0 -612
  341. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +0 -376
  342. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +0 -73
  343. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.cjs +0 -215
  344. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.cjs +0 -135
  345. package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +0 -454
  346. package/dist/cjs/ultramodern-tooling/config/constants.cjs +0 -48
  347. package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +0 -157
  348. package/dist/cjs/ultramodern-workspace/delivery-unit-schema/up-projection.cjs +0 -188
  349. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +0 -154
  350. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +0 -9
  351. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +0 -63
  352. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +0 -7
  353. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +0 -47
  354. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +0 -146
  355. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +0 -97
  356. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.js +0 -61
  357. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +0 -16
  358. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +0 -258
  359. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +0 -10
  360. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +0 -8
  361. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +0 -15
  362. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +0 -100
  363. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +0 -29
  364. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +0 -14
  365. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +0 -385
  366. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +0 -276
  367. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +0 -49
  368. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +0 -559
  369. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +0 -329
  370. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +0 -19
  371. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.js +0 -148
  372. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +0 -80
  373. package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +0 -405
  374. package/dist/esm/ultramodern-tooling/config/constants.js +0 -4
  375. package/dist/esm/ultramodern-tooling/config/synthesize.js +0 -108
  376. package/dist/esm/ultramodern-workspace/delivery-unit-schema/up-projection.js +0 -129
  377. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +0 -155
  378. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +0 -10
  379. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +0 -64
  380. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +0 -8
  381. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +0 -48
  382. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +0 -147
  383. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +0 -98
  384. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.js +0 -62
  385. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +0 -17
  386. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +0 -259
  387. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +0 -11
  388. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +0 -9
  389. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +0 -16
  390. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +0 -101
  391. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +0 -30
  392. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +0 -15
  393. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +0 -386
  394. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +0 -277
  395. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +0 -50
  396. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +0 -560
  397. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +0 -330
  398. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +0 -20
  399. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.js +0 -149
  400. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +0 -81
  401. package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +0 -406
  402. package/dist/esm-node/ultramodern-tooling/config/constants.js +0 -5
  403. package/dist/esm-node/ultramodern-tooling/config/synthesize.js +0 -109
  404. package/dist/esm-node/ultramodern-workspace/delivery-unit-schema/up-projection.js +0 -130
  405. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +0 -12
  406. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +0 -4
  407. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +0 -1
  408. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +0 -3
  409. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +0 -5
  410. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +0 -3
  411. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +0 -2
  412. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxlint.d.ts +0 -2
  413. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +0 -4
  414. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +0 -3
  415. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +0 -3
  416. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +0 -8
  417. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +0 -3
  418. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.d.ts +0 -3
  419. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +0 -1
  420. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +0 -2
  421. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +0 -26
  422. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +0 -25
  423. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +0 -3
  424. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +0 -26
  425. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +0 -26
  426. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +0 -6
  427. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/react-router-retirement.d.ts +0 -37
  428. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.d.ts +0 -4
  429. package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +0 -2
  430. package/dist/types/ultramodern-tooling/config/constants.d.ts +0 -3
  431. package/dist/types/ultramodern-tooling/config/synthesize.d.ts +0 -5
  432. package/dist/types/ultramodern-workspace/delivery-unit-schema/up-projection.d.ts +0 -189
  433. package/template-workspace/patches/@module-federation__bridge-react@2.9.0.patch +0 -47
  434. package/template-workspace/patches/@module-federation__dts-plugin@2.9.0.patch +0 -26
  435. package/template-workspace/patches/@module-federation__modern-js-v3@2.9.0.patch +0 -268
  436. package/template-workspace/patches/@module-federation__runtime-core@2.9.0.patch +0 -13
  437. package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +0 -471
  438. package/template-workspace/patches/msgpackr@2.1.0.patch +0 -30
  439. package/template-workspace/patches/zod@4.5.4.patch +0 -56
  440. package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +0 -779
  441. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mts +0 -9
  442. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +0 -4109
@@ -4,8 +4,8 @@ import node_fs from "node:fs";
4
4
  import node_path from "node:path";
5
5
  import { rpcPath } from "./api/rpc.js";
6
6
  import { createDeliveryUnitRecord } from "./delivery-unit.js";
7
- import { apiSurface, exposeSurface } from "./delivery-unit-schema/up-projection.js";
8
- import { ULTRAMODERN_CONFIG_PATH, appHasApi, resolveApiProtocol } from "./descriptors.js";
7
+ import { apiSurface, exposeSurface } from "./delivery-unit-schema/surfaces.js";
8
+ import { appHasApi, resolveApiProtocol } from "./descriptors.js";
9
9
  import { normalizePath, packageName } from "./naming.js";
10
10
  import { resolveOwnerAttribution } from "./types.js";
11
11
  import { EFFECT_VERSION, REACT_VERSION, TAILWIND_VERSION, TANSTACK_ROUTER_VERSION } from "./versions.js";
@@ -78,7 +78,7 @@ function createGenerationResult(options) {
78
78
  app.id,
79
79
  app.apiPrefix
80
80
  ])),
81
- generatedContractPath: ULTRAMODERN_CONFIG_PATH,
81
+ generatedContractPath: 'topology/reference-topology.json',
82
82
  warnings: options.warnings ?? [],
83
83
  deliveryUnits: options.createdApps.map((app)=>createGeneratedDeliveryUnitDescriptor(options.packageScope, app))
84
84
  };
@@ -4,5 +4,5 @@ export { addUltramodernVertical, planUltramodernVertical } from "./add-vertical.
4
4
  export { normalizeUltramodernBridgeConfig } from "./bridge-config.js";
5
5
  export { BASELINE_DEPENDENCY_PINS, OverlayBaselineRelaxationError } from "./overlay-baseline-guard.js";
6
6
  export { SHARED_ULTRAMODERN_WORKSPACE_PATCH_FILES } from "./shared-patches.js";
7
- export { PRIMARY_SHELL_ID, createShellDescriptor, resolveConfiguredAdditionalShells } from "./shells.js";
7
+ export { PRIMARY_SHELL_ID, createShellDescriptor } from "./shells.js";
8
8
  export { generateUltramodernWorkspace } from "./write-workspace.js";
@@ -4,9 +4,6 @@ const mfTypesArchives = {
4
4
  cloudflare: 'dist-cloudflare/@mf-types.zip',
5
5
  node: 'dist/@mf-types.zip'
6
6
  };
7
- const generatedMetadataPaths = [
8
- '.modernjs/ultramodern.json'
9
- ];
10
7
  const defaultAppRootDirs = [
11
8
  'apps',
12
9
  'verticals'
@@ -20,4 +17,4 @@ const skippedScanDirs = new Set([
20
17
  'dist',
21
18
  'node_modules'
22
19
  ]);
23
- export { defaultAppRootDirs, generatedMetadataPaths, mfTypesArchives, moduleFederationConfigFile, skippedScanDirs };
20
+ export { defaultAppRootDirs, mfTypesArchives, moduleFederationConfigFile, skippedScanDirs };
@@ -2,18 +2,18 @@ import "node:module";
2
2
  import node_fs from "node:fs";
3
3
  import node_path from "node:path";
4
4
  import { defaultAppRootDirs, moduleFederationConfigFile } from "./constants.js";
5
- import { collectBridgeScanRoots, collectMetadataAppDirs, firstSegment, normalizeRelativePath, readGeneratedMetadata, scanForModuleFederationConfigs } from "./path-utils.js";
5
+ import { collectMetadataAppDirs, collectWorkspaceScanRoots, firstSegment, normalizeRelativePath, readJsonIfExists, scanForModuleFederationConfigs } from "./path-utils.js";
6
6
  function discoverModuleFederationConfigs(options) {
7
7
  const workspaceRoot = node_path.resolve(options.workspaceRoot);
8
8
  const appDirs = new Set();
9
+ const metadata = readJsonIfExists(node_path.join(workspaceRoot, 'topology/reference-topology.json'));
10
+ const metadataAppDirs = new Set();
11
+ const apiOnlyDirs = collectMetadataAppDirs(metadata, metadataAppDirs);
9
12
  if (options.appDirs && options.appDirs.length > 0) for (const appDir of options.appDirs)appDirs.add(normalizeRelativePath(appDir));
10
13
  else {
11
- const metadata = readGeneratedMetadata(workspaceRoot);
12
14
  const scanRoots = new Set(defaultAppRootDirs);
13
- for (const metadataEntry of metadata){
14
- collectMetadataAppDirs(metadataEntry, appDirs);
15
- collectBridgeScanRoots(metadataEntry, scanRoots);
16
- }
15
+ for (const appDir of metadataAppDirs)appDirs.add(appDir);
16
+ collectWorkspaceScanRoots(workspaceRoot, scanRoots);
17
17
  for (const appDir of appDirs){
18
18
  const segment = firstSegment(appDir);
19
19
  if (segment) scanRoots.add(segment);
@@ -21,7 +21,7 @@ function discoverModuleFederationConfigs(options) {
21
21
  if (node_fs.existsSync(node_path.join(workspaceRoot, moduleFederationConfigFile))) appDirs.add('.');
22
22
  for (const scanRoot of scanRoots)scanForModuleFederationConfigs(workspaceRoot, scanRoot, appDirs);
23
23
  }
24
- return Array.from(appDirs).sort().map((appDir)=>({
24
+ return Array.from(appDirs).sort().filter((appDir)=>!apiOnlyDirs.has(appDir) || node_fs.existsSync(node_path.join(workspaceRoot, appDir, moduleFederationConfigFile))).map((appDir)=>({
25
25
  appDir,
26
26
  configPath: node_path.join(workspaceRoot, appDir, moduleFederationConfigFile)
27
27
  }));
@@ -0,0 +1,15 @@
1
+ import "node:module";
2
+ import node_fs from "node:fs";
3
+ import node_path from "node:path";
4
+ import { moduleFederationConfigFile } from "./constants.js";
5
+ import { inspectModuleFederationConfigSource } from "./inspect.js";
6
+ function readModuleFederationExposePaths(workspaceRoot, appDirectory) {
7
+ const configPath = node_path.join(workspaceRoot, appDirectory, moduleFederationConfigFile);
8
+ if (!node_fs.existsSync(configPath)) return;
9
+ try {
10
+ return inspectModuleFederationConfigSource(node_fs.readFileSync(configPath, 'utf-8'), appDirectory, node_path.join(appDirectory, moduleFederationConfigFile)).exposePaths;
11
+ } catch {
12
+ return;
13
+ }
14
+ }
15
+ export { readModuleFederationExposePaths };
@@ -1,18 +1,36 @@
1
1
  import "node:module";
2
2
  import { parseArrayLiteral, parseLiteralString, parseObjectLiteral } from "./object-literal.js";
3
- import { findCreateModuleFederationConfigObject, findExportDefaultObject } from "./syntax.js";
3
+ import { findCreateModuleFederationConfigObject, findExportDefaultObject, parseConfigModule } from "./syntax.js";
4
4
  function extractExposes(configPath, value) {
5
- if (void 0 === value) return [];
5
+ if (void 0 === value) return {
6
+ exposePaths: {},
7
+ exposes: []
8
+ };
6
9
  const object = parseObjectLiteral(value);
7
10
  if (object) {
8
11
  if (object.hasSpread) throw new Error(`Cannot statically extract Module Federation exposes from ${configPath}; use a literal exposes object without spreads.`);
9
- return Array.from(object.properties.keys()).sort();
12
+ const exposePaths = {};
13
+ for (const [expose, source] of object.properties){
14
+ const exposePath = parseLiteralString(source);
15
+ if (void 0 !== exposePath) exposePaths[expose] = exposePath;
16
+ }
17
+ return {
18
+ exposePaths,
19
+ exposes: Array.from(object.properties.keys()).sort()
20
+ };
10
21
  }
11
22
  const array = parseArrayLiteral(value);
12
- if (array) return array.sort();
23
+ if (array) return {
24
+ exposePaths: {},
25
+ exposes: array.sort()
26
+ };
13
27
  throw new Error(`Cannot statically extract Module Federation exposes from ${configPath}; use a literal exposes object or string array.`);
14
28
  }
15
- function extractDtsSettings(configPath, value) {
29
+ function extractDtsSettings(configPath, value, exposes) {
30
+ if ('false' === value) {
31
+ if (exposes.length > 0) throw new Error(`Module Federation DTS cannot be disabled for exposed app ${configPath}.`);
32
+ return {};
33
+ }
16
34
  if (void 0 === value) return {};
17
35
  const dts = parseObjectLiteral(value);
18
36
  if (!dts || dts.hasSpread) throw new Error(`Cannot statically extract Module Federation DTS settings from ${configPath}; use a literal dts object.`);
@@ -25,7 +43,7 @@ function extractDtsSettings(configPath, value) {
25
43
  };
26
44
  }
27
45
  function hasHostOnlyNoExposesDeclaration(source) {
28
- return /@?ultramodern-mf\s*:?\s*(?:host-only|no-exposes)\b/iu.test(source);
46
+ return (parseConfigModule(source).comments ?? []).some((comment)=>/@?ultramodern-mf\s*:?\s*(?:host-only|no-exposes)\b/iu.test(comment.value));
29
47
  }
30
48
  function inspectModuleFederationConfigSource(source, appDir, configPath) {
31
49
  const configObject = findCreateModuleFederationConfigObject(source) ?? findExportDefaultObject(source);
@@ -33,13 +51,14 @@ function inspectModuleFederationConfigSource(source, appDir, configPath) {
33
51
  const properties = parseObjectLiteral(configObject);
34
52
  if (!properties) throw new Error(`Cannot statically inspect Module Federation config ${configPath}; expected a literal config object.`);
35
53
  if (properties.hasSpread) throw new Error(`Cannot statically inspect Module Federation config ${configPath}; top-level config spreads are not supported.`);
36
- const exposes = extractExposes(configPath, properties.properties.get('exposes'));
54
+ const { exposePaths, exposes } = extractExposes(configPath, properties.properties.get('exposes'));
37
55
  const hostOnlyNoExposes = hasHostOnlyNoExposesDeclaration(source);
38
56
  if (hostOnlyNoExposes && exposes.length > 0) throw new Error(`Module Federation host-only/no-exposes declaration conflicts with actual exposes in ${configPath}.`);
39
57
  return {
40
58
  appDir,
41
59
  configPath,
42
- dts: extractDtsSettings(configPath, properties.properties.get('dts')),
60
+ dts: extractDtsSettings(configPath, properties.properties.get('dts'), exposes),
61
+ exposePaths,
43
62
  exposes,
44
63
  hostOnlyNoExposes
45
64
  };
@@ -1,128 +1,28 @@
1
1
  import "node:module";
2
- import { getOuterBlock, skipSyntax } from "./syntax.js";
3
- function splitTopLevelEntries(source) {
4
- const entries = [];
5
- let start = 0;
6
- let braceDepth = 0;
7
- let bracketDepth = 0;
8
- let parenDepth = 0;
9
- for(let index = 0; index < source.length; index += 1){
10
- const skipped = skipSyntax(source, index);
11
- if (skipped !== index) {
12
- index = skipped - 1;
13
- continue;
14
- }
15
- const char = source[index];
16
- if ('{' === char) braceDepth += 1;
17
- else if ('}' === char) braceDepth -= 1;
18
- else if ('[' === char) bracketDepth += 1;
19
- else if (']' === char) bracketDepth -= 1;
20
- else if ('(' === char) parenDepth += 1;
21
- else if (')' === char) parenDepth -= 1;
22
- else if (',' === char && 0 === braceDepth && 0 === bracketDepth && 0 === parenDepth) {
23
- const entry = source.slice(start, index).trim();
24
- if (entry) entries.push(entry);
25
- start = index + 1;
26
- }
27
- }
28
- const finalEntry = source.slice(start).trim();
29
- if (finalEntry) entries.push(finalEntry);
30
- return entries;
31
- }
32
- function findTopLevelColon(source) {
33
- let braceDepth = 0;
34
- let bracketDepth = 0;
35
- let parenDepth = 0;
36
- for(let index = 0; index < source.length; index += 1){
37
- const skipped = skipSyntax(source, index);
38
- if (skipped !== index) {
39
- index = skipped - 1;
40
- continue;
41
- }
42
- const char = source[index];
43
- if ('{' === char) braceDepth += 1;
44
- else if ('}' === char) braceDepth -= 1;
45
- else if ('[' === char) bracketDepth += 1;
46
- else if (']' === char) bracketDepth -= 1;
47
- else if ('(' === char) parenDepth += 1;
48
- else if (')' === char) parenDepth -= 1;
49
- else if (':' === char && 0 === braceDepth && 0 === bracketDepth && 0 === parenDepth) return index;
50
- }
51
- return -1;
52
- }
53
- function stripConstAssertion(source) {
54
- return source.trim().replace(/\s+as\s+const\s*$/u, '').trim();
55
- }
56
- function unescapeSingleQuotedString(value) {
57
- return value.replace(/\\(['"\\nrtbfv0])/gu, (_, sequence)=>{
58
- switch(sequence){
59
- case 'n':
60
- return '\n';
61
- case 'r':
62
- return '\r';
63
- case 't':
64
- return '\t';
65
- case 'b':
66
- return '\b';
67
- case 'f':
68
- return '\f';
69
- case 'v':
70
- return '\v';
71
- case '0':
72
- return '\0';
73
- default:
74
- return sequence;
75
- }
76
- });
77
- }
2
+ import { parseStaticExpression } from "./syntax.js";
78
3
  function parseLiteralString(source) {
79
- if (void 0 === source) return;
80
- const trimmed = stripConstAssertion(source);
81
- const quote = trimmed[0];
82
- if ("'" !== quote && '"' !== quote && '`' !== quote) return;
83
- if ('`' === quote) {
84
- if (trimmed.includes('${')) return;
85
- const close = trimmed.lastIndexOf('`');
86
- return close > 0 ? trimmed.slice(1, close).replaceAll('\\`', '`') : void 0;
87
- }
88
- const close = trimmed.lastIndexOf(quote);
89
- if (close <= 0 || '' !== trimmed.slice(close + 1).trim()) return;
90
- const content = trimmed.slice(1, close);
91
- if ('"' === quote) try {
92
- return JSON.parse(trimmed);
93
- } catch {
94
- return;
95
- }
96
- return unescapeSingleQuotedString(content);
97
- }
98
- function parseObjectKey(source) {
99
- const trimmed = source.trim();
100
- const literal = parseLiteralString(trimmed);
101
- if (void 0 !== literal) return literal;
102
- return /^[$A-Z_a-z][$\w]*$/u.test(trimmed) ? trimmed : void 0;
4
+ const node = parseStaticExpression(source);
5
+ if (node?.type === 'StringLiteral') return node.value;
6
+ if (node?.type === 'TemplateLiteral' && 0 === node.expressions.length) return node.quasis[0]?.value.cooked ?? void 0;
103
7
  }
104
8
  function parseObjectLiteral(source) {
105
- if (void 0 === source) return;
106
- const block = getOuterBlock(source, '{', '}');
107
- if (!block) return;
9
+ const node = parseStaticExpression(source);
10
+ if (void 0 === source || node?.type !== 'ObjectExpression') return;
108
11
  const properties = new Map();
109
12
  let hasSpread = false;
110
- for (const entry of splitTopLevelEntries(block.inner)){
111
- if (entry.startsWith('...')) {
112
- hasSpread = true;
113
- continue;
114
- }
115
- const colon = findTopLevelColon(entry);
116
- if (-1 === colon) {
13
+ for (const property of node.properties){
14
+ if ('ObjectProperty' !== property.type || property.computed || property.shorthand) {
117
15
  hasSpread = true;
118
16
  continue;
119
17
  }
120
- const key = parseObjectKey(entry.slice(0, colon));
121
- if (void 0 === key) {
18
+ const key = 'Identifier' === property.key.type ? property.key.name : 'StringLiteral' === property.key.type ? property.key.value : void 0;
19
+ const value = parseStaticExpression(source.slice(property.value.start ?? 0, property.value.end ?? 0));
20
+ if (void 0 === key || properties.has(key) || !value || null == value.start || null == value.end) {
122
21
  hasSpread = true;
123
22
  continue;
124
23
  }
125
- properties.set(key, entry.slice(colon + 1).trim());
24
+ const rawValue = source.slice(property.value.start ?? 0, property.value.end ?? 0);
25
+ properties.set(key, rawValue.slice(value.start, value.end));
126
26
  }
127
27
  return {
128
28
  hasSpread,
@@ -130,16 +30,15 @@ function parseObjectLiteral(source) {
130
30
  };
131
31
  }
132
32
  function parseArrayLiteral(source) {
133
- if (void 0 === source) return;
134
- const block = getOuterBlock(source, '[', ']');
135
- if (!block) return;
136
- const entries = splitTopLevelEntries(block.inner);
137
- const exposes = [];
138
- for (const entry of entries){
139
- const expose = parseLiteralString(entry);
140
- if (void 0 === expose) return;
141
- exposes.push(expose);
33
+ const node = parseStaticExpression(source);
34
+ if (void 0 === source || node?.type !== 'ArrayExpression') return;
35
+ const values = [];
36
+ for (const element of node.elements){
37
+ if (!element || 'SpreadElement' === element.type) return;
38
+ const value = parseLiteralString(source.slice(element.start ?? 0, element.end ?? 0));
39
+ if (void 0 === value) return;
40
+ values.push(value);
142
41
  }
143
- return exposes;
42
+ return values;
144
43
  }
145
44
  export { parseArrayLiteral, parseLiteralString, parseObjectLiteral };
@@ -1,7 +1,8 @@
1
1
  import "node:module";
2
2
  import node_fs from "node:fs";
3
3
  import node_path from "node:path";
4
- import { generatedMetadataPaths, moduleFederationConfigFile, skippedScanDirs } from "./constants.js";
4
+ import { yaml } from "@modern-js/utils";
5
+ import { moduleFederationConfigFile, skippedScanDirs } from "./constants.js";
5
6
  function isRecord(value) {
6
7
  return null !== value && 'object' == typeof value && !Array.isArray(value);
7
8
  }
@@ -20,20 +21,31 @@ function readJsonIfExists(filePath) {
20
21
  if (!node_fs.existsSync(filePath)) return;
21
22
  return JSON.parse(node_fs.readFileSync(filePath, 'utf-8'));
22
23
  }
23
- function addMetadataAppDir(value, appDirs, hint = '') {
24
- if (!isRecord(value)) return;
25
- const pathValue = 'string' == typeof value.path ? value.path : 'string' == typeof value.directory ? value.directory : void 0;
26
- const hasModuleFederationDeclaration = isRecord(value.moduleFederation) || 'string' == typeof value.moduleFederationName || 'apps' === hint || 'verticals' === hint || 'remotes' === hint || 'moduleFederation' === hint;
27
- if (pathValue && hasModuleFederationDeclaration && !node_path.isAbsolute(pathValue)) appDirs.add(normalizeRelativePath(pathValue));
28
- }
29
- function collectMetadataAppDirs(value, appDirs, hint = '') {
30
- if (Array.isArray(value)) {
31
- for (const entry of value)collectMetadataAppDirs(entry, appDirs, hint);
32
- return;
24
+ function collectMetadataAppDirs(value, appDirs) {
25
+ const apiOnlyDirs = new Set();
26
+ if (!isRecord(value)) return apiOnlyDirs;
27
+ const entries = [
28
+ {
29
+ app: value.shell,
30
+ vertical: false
31
+ },
32
+ ...Array.isArray(value.verticals) ? value.verticals.map((app)=>({
33
+ app,
34
+ vertical: true
35
+ })) : [],
36
+ ...Array.isArray(value.shells) ? value.shells.map((app)=>({
37
+ app,
38
+ vertical: false
39
+ })) : []
40
+ ];
41
+ for (const { app: entry, vertical } of entries){
42
+ if (!isRecord(entry) || 'string' != typeof entry.path || node_path.isAbsolute(entry.path)) throw new Error('Reference topology apps require relative paths.');
43
+ const normalized = normalizeRelativePath(entry.path);
44
+ if ('..' === normalized || normalized.startsWith('../')) throw new Error(`Topology app path leaves workspace: ${entry.path}`);
45
+ if (vertical && 'api-only' === entry.surfaceProfile) apiOnlyDirs.add(normalized);
46
+ else appDirs.add(normalized);
33
47
  }
34
- if (!isRecord(value)) return;
35
- addMetadataAppDir(value, appDirs, hint);
36
- for (const [key, entry] of Object.entries(value))collectMetadataAppDirs(entry, appDirs, key);
48
+ return apiOnlyDirs;
37
49
  }
38
50
  function literalRootFromPattern(pattern) {
39
51
  const normalized = normalizeRelativePath(pattern);
@@ -46,26 +58,16 @@ function literalRootFromPattern(pattern) {
46
58
  }
47
59
  return literalSegments.length > 0 ? literalSegments.join('/') : void 0;
48
60
  }
49
- function collectBridgeScanRoots(value, roots) {
50
- if (Array.isArray(value)) {
51
- for (const entry of value)collectBridgeScanRoots(entry, roots);
52
- return;
61
+ function collectWorkspaceScanRoots(workspaceRoot, roots) {
62
+ const file = node_path.join(workspaceRoot, 'pnpm-workspace.yaml');
63
+ if (!node_fs.existsSync(file)) return;
64
+ const workspace = yaml.load(node_fs.readFileSync(file, 'utf8'));
65
+ if (!isRecord(workspace) || !Array.isArray(workspace.packages)) return;
66
+ for (const pattern of workspace.packages){
67
+ if ('string' != typeof pattern || pattern.startsWith('!')) continue;
68
+ const root = literalRootFromPattern(pattern);
69
+ if (root) roots.add(root);
53
70
  }
54
- if (!isRecord(value)) return;
55
- const workspacePackages = value.bridge;
56
- if (isRecord(workspacePackages)) {
57
- const entries = workspacePackages.workspacePackages;
58
- if (Array.isArray(entries)) {
59
- for (const entry of entries)if (isRecord(entry) && 'string' == typeof entry.pattern) {
60
- const root = literalRootFromPattern(entry.pattern);
61
- if (root) roots.add(root);
62
- }
63
- }
64
- }
65
- for (const entry of Object.values(value))collectBridgeScanRoots(entry, roots);
66
- }
67
- function readGeneratedMetadata(workspaceRoot) {
68
- return generatedMetadataPaths.map((metadataPath)=>readJsonIfExists(node_path.join(workspaceRoot, metadataPath))).filter((metadata)=>void 0 !== metadata);
69
71
  }
70
72
  function firstSegment(appDir) {
71
73
  if ('.' === appDir) return;
@@ -87,4 +89,4 @@ function scanForModuleFederationConfigs(workspaceRoot, scanRoot, appDirs) {
87
89
  };
88
90
  visit(absoluteRoot);
89
91
  }
90
- export { collectBridgeScanRoots, collectMetadataAppDirs, firstSegment, isRecord, normalizeRelativePath, readGeneratedMetadata, readJsonIfExists, relativePath, scanForModuleFederationConfigs, toPosixPath };
92
+ export { collectMetadataAppDirs, collectWorkspaceScanRoots, firstSegment, isRecord, normalizeRelativePath, readJsonIfExists, relativePath, scanForModuleFederationConfigs, toPosixPath };