@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
@@ -1,7 +1,6 @@
1
1
  import { createDeliveryUnitRecord, deliveryUnitContractBlock } from "./delivery-unit.js";
2
- import { createModuleFederationRemoteContracts, createNeutralOwnership, shellApp } from "./descriptors.js";
3
- import { packageName, toEnvSegment, toKebabCase, toPascalCase } from "./naming.js";
4
- import { resolveOwnerAttribution } from "./types.js";
2
+ import { createNeutralOwnership, shellApp } from "./descriptors.js";
3
+ import { toEnvSegment, toKebabCase, toPascalCase } from "./naming.js";
5
4
  const PRIMARY_SHELL_ID = shellApp.id;
6
5
  const FIRST_ADDITIONAL_SHELL_PORT = 3120;
7
6
  function createShellDescriptor(name, port) {
@@ -30,67 +29,4 @@ function assertValidShellName(name) {
30
29
  function shellDeliveryUnitBlock(scope, shell) {
31
30
  return shell.deliveryUnit ?? deliveryUnitContractBlock(createDeliveryUnitRecord(scope, shell));
32
31
  }
33
- function createAdditionalShellConfigEntry(scope, shell, remotes = []) {
34
- const verticalRefs = shell.verticalRefs ?? [];
35
- return {
36
- id: shell.id,
37
- name: shell.id.replace(/^shell-/u, ''),
38
- kind: 'shell',
39
- package: packageName(scope, shell.packageSuffix),
40
- path: shell.directory,
41
- port: shell.port,
42
- portEnv: shell.portEnv,
43
- mfName: shell.mfName,
44
- verticalRefs,
45
- owner: resolveOwnerAttribution(shell.ownership),
46
- deliveryUnit: shellDeliveryUnitBlock(scope, shell),
47
- moduleFederation: {
48
- role: 'host',
49
- name: shell.mfName,
50
- verticalRefs,
51
- remotes: createModuleFederationRemoteContracts(shell, remotes),
52
- ssr: true,
53
- sharedContractVersion: 'mf-ssr-contract-v1'
54
- }
55
- };
56
- }
57
- function resolveConfiguredAdditionalShells(config) {
58
- const shells = config?.shells;
59
- if (!Array.isArray(shells)) return [];
60
- return shells.filter((entry)=>null !== entry && 'object' == typeof entry && !Array.isArray(entry)).map((entry)=>{
61
- const id = String(entry.id ?? '');
62
- const suffix = 'string' == typeof entry.package ? entry.package.split('/').at(-1) ?? id : id;
63
- const name = 'string' == typeof entry.name ? entry.name : id.replace(/^shell-/, '');
64
- const port = 'number' == typeof entry.port ? entry.port : FIRST_ADDITIONAL_SHELL_PORT;
65
- const descriptor = createShellDescriptor(name, port);
66
- const moduleFederation = entry.moduleFederation && 'object' == typeof entry.moduleFederation && !Array.isArray(entry.moduleFederation) ? entry.moduleFederation : void 0;
67
- const owner = entry.owner;
68
- const deliveryUnit = entry.deliveryUnit;
69
- const ownerAttribution = owner && 'object' == typeof owner && !Array.isArray(owner) && 'kind' in owner && ('team' === owner.kind || 'agent' === owner.kind || 'agent-team' === owner.kind) && 'id' in owner && 'string' == typeof owner.id ? {
70
- kind: owner.kind,
71
- id: owner.id,
72
- ...'contact' in owner && 'string' == typeof owner.contact ? {
73
- contact: owner.contact
74
- } : {}
75
- } : void 0;
76
- const ownership = void 0 === ownerAttribution ? descriptor.ownership : {
77
- ...descriptor.ownership,
78
- owner: ownerAttribution
79
- };
80
- return {
81
- ...descriptor,
82
- id,
83
- packageSuffix: suffix,
84
- ownership,
85
- displayName: 'string' == typeof entry.displayName ? entry.displayName : descriptor.displayName,
86
- directory: 'string' == typeof entry.path ? entry.path : descriptor.directory,
87
- portEnv: 'string' == typeof entry.portEnv ? entry.portEnv : descriptor.portEnv,
88
- mfName: 'string' == typeof entry.mfName ? entry.mfName : 'string' == typeof moduleFederation?.name ? moduleFederation.name : descriptor.mfName,
89
- verticalRefs: Array.isArray(entry.verticalRefs) ? entry.verticalRefs.filter((ref)=>'string' == typeof ref) : Array.isArray(moduleFederation?.verticalRefs) ? moduleFederation.verticalRefs.filter((ref)=>'string' == typeof ref) : [],
90
- ...deliveryUnit && 'object' == typeof deliveryUnit && !Array.isArray(deliveryUnit) ? {
91
- deliveryUnit: deliveryUnit
92
- } : {}
93
- };
94
- });
95
- }
96
- export { FIRST_ADDITIONAL_SHELL_PORT, PRIMARY_SHELL_ID, assertValidShellName, createAdditionalShellConfigEntry, createShellDescriptor, resolveConfiguredAdditionalShells, shellDeliveryUnitBlock };
32
+ export { FIRST_ADDITIONAL_SHELL_PORT, PRIMARY_SHELL_ID, assertValidShellName, createShellDescriptor, shellDeliveryUnitBlock };
@@ -1,20 +1,13 @@
1
- const defineToolingCommand = (command)=>({
2
- ...command,
3
- wrapperPath: `scripts/${command.wrapperName}.mts`
4
- });
1
+ const defineToolingCommand = (command)=>command;
5
2
  const generatedToolingCommands = [
6
3
  defineToolingCommand({
7
4
  id: 'validate',
8
5
  command: 'validate',
9
- wrapperName: 'validate-ultramodern-workspace',
10
- contractKey: 'validate',
11
6
  rootScript: 'contract:check'
12
7
  }),
13
8
  defineToolingCommand({
14
9
  id: 'typecheck',
15
10
  command: 'typecheck',
16
- wrapperName: 'ultramodern-typecheck',
17
- contractKey: 'typecheck',
18
11
  rootScript: 'typecheck',
19
12
  templatePath: "templates/workspace-scripts/ultramodern-typecheck.mjs",
20
13
  cwd: 'invocation'
@@ -22,79 +15,71 @@ const generatedToolingCommands = [
22
15
  defineToolingCommand({
23
16
  id: 'mfTypes',
24
17
  command: 'mf-types',
25
- wrapperName: 'assert-mf-types',
26
- contractKey: 'mfTypes',
27
18
  rootScript: 'mf:types'
28
19
  }),
29
20
  defineToolingCommand({
30
21
  id: 'publicSurface',
31
22
  command: 'public-surface',
32
- wrapperName: 'generate-public-surface-assets',
33
- contractKey: 'publicSurface',
34
23
  templatePath: "templates/workspace-scripts/generate-public-surface-assets.mjs"
35
24
  }),
36
25
  defineToolingCommand({
37
26
  id: 'backendFederationGenerate',
27
+ requiresBackendSurface: true,
38
28
  command: 'backend-federation-generate',
39
- wrapperName: 'generate-node-backend-federation',
40
- contractKey: 'backendFederationGenerate',
41
29
  rootScript: 'node:backend-federation:generate',
42
30
  templatePath: "templates/workspace-scripts/generate-node-backend-federation.mjs"
43
31
  }),
44
32
  defineToolingCommand({
45
33
  id: 'backendFederationProof',
34
+ requiresBackendSurface: true,
46
35
  command: 'backend-federation-proof',
47
- wrapperName: 'proof-node-backend-federation',
48
- contractKey: 'backendFederationProof',
49
36
  rootScript: 'node:proof',
50
37
  templatePath: "templates/workspace-scripts/proof-node-backend-federation.mjs"
51
38
  }),
52
39
  defineToolingCommand({
53
40
  id: 'cloudflareProof',
54
41
  command: 'cloudflare-proof',
55
- wrapperName: 'proof-cloudflare-version',
56
- contractKey: 'cloudflareProof',
57
42
  rootScript: 'cloudflare:proof',
58
43
  templatePath: "templates/workspace-scripts/proof-cloudflare-version.mjs"
59
44
  }),
60
45
  defineToolingCommand({
61
46
  id: 'cloudflareOutputVerify',
62
47
  command: 'cloudflare-output-verify',
63
- wrapperName: 'verify-cloudflare-output',
64
- contractKey: 'cloudflareOutputVerify',
65
48
  rootScript: 'cloudflare-output:verify'
66
49
  }),
67
50
  defineToolingCommand({
68
51
  id: 'performanceReadiness',
69
52
  command: 'performance-readiness',
70
- wrapperName: 'ultramodern-performance-readiness',
71
- contractKey: 'performanceReadiness',
72
53
  rootScript: 'performance:readiness',
73
54
  templatePath: "templates/workspace-scripts/ultramodern-performance-readiness.mjs"
74
55
  }),
75
56
  defineToolingCommand({
76
- id: 'migrateStrictEffect',
77
- command: 'migrate-strict-effect',
78
- wrapperName: 'migrate-strict-effect',
79
- contractKey: 'migrateStrictEffect',
80
- rootScript: 'migrate:strict-effect'
57
+ id: 'routesGenerate',
58
+ command: 'routes-generate'
81
59
  }),
82
60
  defineToolingCommand({
83
- id: 'routesGenerate',
84
- command: 'routes-generate',
85
- wrapperName: 'generate-tanstack-routes',
86
- contractKey: 'routesGenerate'
61
+ id: 'zeropsMaterialize',
62
+ command: 'zerops-materialize',
63
+ rootScript: 'zerops:materialize',
64
+ requiresRemotes: true,
65
+ templatePath: "templates/workspace-scripts/materialize-zerops-runtime.mjs"
66
+ }),
67
+ defineToolingCommand({
68
+ id: 'cloudflareSsrProof',
69
+ command: 'cloudflare-ssr-proof',
70
+ rootScript: 'cloudflare:ssr-proof',
71
+ requiresRemotes: true,
72
+ templatePath: "templates/workspace-scripts/proof-workerd-ssr.mjs"
87
73
  })
88
74
  ];
75
+ function selectGeneratedToolingCommands(options = {}) {
76
+ const backendSurface = options.hasBackendSurface ?? !options.shellOnly;
77
+ return generatedToolingCommands.filter((command)=>(!options.shellOnly || !command.requiresRemotes) && (backendSurface || !command.requiresBackendSurface));
78
+ }
89
79
  const toolingCommandById = Object.fromEntries(generatedToolingCommands.map((command)=>[
90
80
  command.id,
91
81
  command
92
82
  ]));
93
83
  const GENERATED_TOOLING_COMMANDS = toolingCommandById;
94
84
  const generatedToolingCommandList = ()=>generatedToolingCommands.map((command)=>command.command);
95
- const createToolingWrapperContract = ()=>Object.fromEntries(generatedToolingCommands.map((command)=>[
96
- command.contractKey,
97
- command.wrapperPath
98
- ]));
99
- const createGeneratedToolingWrapperMap = createToolingWrapperContract;
100
- export { GENERATED_TOOLING_COMMANDS, createGeneratedToolingWrapperMap, generatedToolingCommandList, generatedToolingCommands };
85
+ export { GENERATED_TOOLING_COMMANDS, generatedToolingCommandList, generatedToolingCommands, selectGeneratedToolingCommands };
@@ -1,11 +1,14 @@
1
1
  import node_path from "node:path";
2
- import { appHasApi, resolveRemoteRefs, sharedPackages } from "./descriptors.js";
2
+ import { appHasApi, resolveApiProtocol, resolveRemoteRefs, sharedPackages } from "./descriptors.js";
3
3
  import { effectDiagnostics } from "./effect-diagnostics.js";
4
4
  import { relativeRootFor } from "./naming.js";
5
5
  function createTsConfigBase() {
6
6
  return {
7
7
  compilerOptions: {
8
8
  target: 'ESNext',
9
+ types: [
10
+ 'node'
11
+ ],
9
12
  lib: [
10
13
  'ESNext',
11
14
  'DOM',
@@ -70,7 +73,8 @@ function createPackageTsConfig(packageDir, options = {}) {
70
73
  'src',
71
74
  'locales/**/*.json',
72
75
  'package.json',
73
- 'shared'
76
+ 'shared',
77
+ 'shared/ultramodern-build.json'
74
78
  ];
75
79
  if (resolvedOptions.includeServer) include.push('server');
76
80
  if (resolvedOptions.includeApi) include.push('api');
@@ -112,7 +116,9 @@ function createAppMfTypesTsConfig(app) {
112
116
  const exposedFiles = Object.entries(app.exposes ?? {}).sort(([left], [right])=>'./Route' === left ? -1 : './Route' === right ? 1 : 0).map(([, exposePath])=>exposePath.replace(/^\.\//u, ''));
113
117
  return {
114
118
  extends: `${relativeRootFor(app.directory)}/tsconfig.base.json`,
115
- include: [
119
+ include: 'api-only' === app.surfaceProfile ? [
120
+ 'rpc' === resolveApiProtocol(app) ? 'shared/rpc.ts' : 'shared/api.ts'
121
+ ] : [
116
122
  ...new Set([
117
123
  ...exposedFiles,
118
124
  'src/modern-app-env.d.ts'
@@ -0,0 +1,348 @@
1
+ import node_fs from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import node_path from "node:path";
4
+ import { assert, sameJson, selfCheckFailure } from "./assertions.js";
5
+ function assertCompilerArchitecture(root, workspaceValidationContract) {
6
+ const fullStackVerticals = workspaceValidationContract.apps.filter((app)=>'shell' !== app.kind);
7
+ const tailwindEnabled = workspaceValidationContract.tailwindEnabled;
8
+ const compactConfigPath = 'topology/reference-topology.json';
9
+ const readJson = (relativePath)=>JSON.parse(node_fs.readFileSync(node_path.join(root, relativePath), 'utf-8'));
10
+ const workspaceRequire = createRequire(node_path.join(root, 'package.json'));
11
+ let typescript;
12
+ let typescriptApi;
13
+ try {
14
+ typescript = workspaceRequire("@typescript/native/unstable/ast");
15
+ typescriptApi = workspaceRequire("@typescript/native/unstable/sync");
16
+ } catch (error) {
17
+ if ('MODULE_NOT_FOUND' !== error.code) throw error;
18
+ }
19
+ let compilerSnapshot;
20
+ let compiler;
21
+ try {
22
+ const sourceExtensions = new Set([
23
+ '.cjs',
24
+ '.cts',
25
+ '.js',
26
+ '.jsx',
27
+ '.mjs',
28
+ '.mts',
29
+ '.ts',
30
+ '.tsx'
31
+ ]);
32
+ const collectCompilerInputs = (relativeDirectory)=>{
33
+ const absoluteDirectory = node_path.join(root, relativeDirectory);
34
+ if (!node_fs.existsSync(absoluteDirectory)) return [];
35
+ const files = [];
36
+ const queue = [
37
+ absoluteDirectory
38
+ ];
39
+ while(queue.length > 0){
40
+ const current = queue.shift();
41
+ for (const entry of node_fs.readdirSync(current, {
42
+ withFileTypes: true
43
+ })){
44
+ const absoluteEntry = node_path.join(current, entry.name);
45
+ if (entry.isDirectory()) queue.push(absoluteEntry);
46
+ else if (sourceExtensions.has(node_path.extname(entry.name))) files.push(absoluteEntry);
47
+ }
48
+ }
49
+ return files.toSorted();
50
+ };
51
+ const initializeCompilerSnapshot = (absolutePaths)=>{
52
+ if (void 0 === typescript || void 0 === typescriptApi) return;
53
+ compiler = new typescriptApi.API({
54
+ cwd: root
55
+ });
56
+ compilerSnapshot = compiler.updateSnapshot({
57
+ openFiles: [
58
+ ...absolutePaths
59
+ ]
60
+ });
61
+ };
62
+ const parseCompilerInput = (absolutePath)=>{
63
+ const project = compilerSnapshot?.getDefaultProjectForFile(absolutePath);
64
+ const sourceFile = project?.program.getSourceFile(absolutePath);
65
+ assert(void 0 !== sourceFile, `Native TypeScript compiler could not parse ${node_path.relative(root, absolutePath)}`);
66
+ return sourceFile;
67
+ };
68
+ const nodeName = (node)=>{
69
+ if (!node) return;
70
+ if (typescript.isIdentifier(node) || typescript.isPrivateIdentifier(node) || typescript.isStringLiteralLikeNode(node) || typescript.isNumericLiteral(node)) return node.text;
71
+ };
72
+ const propertyAccessPath = (node)=>{
73
+ if (typescript.isIdentifier(node)) return [
74
+ node.text
75
+ ];
76
+ if (typescript.isPropertyAccessExpression(node)) {
77
+ const left = propertyAccessPath(node.expression);
78
+ return void 0 === left ? void 0 : [
79
+ ...left,
80
+ node.name.text
81
+ ];
82
+ }
83
+ if (typescript.isElementAccessExpression(node) && typescript.isStringLiteralLikeNode(node.argumentExpression)) {
84
+ const left = propertyAccessPath(node.expression);
85
+ return void 0 === left ? void 0 : [
86
+ ...left,
87
+ node.argumentExpression.text
88
+ ];
89
+ }
90
+ };
91
+ function compilerFailure(sourceFile, node, contract, diagnostic, fixArea) {
92
+ const position = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
93
+ const relativePath = node_path.relative(root, sourceFile.fileName).split(node_path.sep).join('/');
94
+ throw new Error(selfCheckFailure(contract, `${diagnostic} Compiler evidence: ${relativePath}:${position.line + 1}:${position.character + 1}`, fixArea));
95
+ }
96
+ const runtimeModuleReferences = (sourceFile)=>{
97
+ const references = [];
98
+ const record = (node, specifier, kind, typeOnly = false)=>{
99
+ if (!typeOnly) references.push({
100
+ kind,
101
+ node,
102
+ specifier
103
+ });
104
+ };
105
+ const visit = (node)=>{
106
+ if (typescript.isImportDeclaration(node) && typescript.isStringLiteralLikeNode(node.moduleSpecifier)) {
107
+ const importClause = node.importClause;
108
+ const namedBindings = importClause?.namedBindings;
109
+ const namedBindingsAreTypeOnly = void 0 !== namedBindings && typescript.isNamedImports(namedBindings) && namedBindings.elements.length > 0 && namedBindings.elements.every((element)=>element.isTypeOnly);
110
+ record(node, node.moduleSpecifier.text, void 0 === importClause ? 'side-effect-import' : 'static-import', importClause?.phaseModifier === typescript.SyntaxKind.TypeKeyword || importClause?.name === void 0 && namedBindingsAreTypeOnly);
111
+ } else if (typescript.isExportDeclaration(node) && void 0 !== node.moduleSpecifier && typescript.isStringLiteralLikeNode(node.moduleSpecifier)) record(node, node.moduleSpecifier.text, 'static-import', node.isTypeOnly);
112
+ else if (typescript.isCallExpression(node) && node.arguments.length > 0 && typescript.isStringLiteralLikeNode(node.arguments[0])) {
113
+ if (node.expression.kind === typescript.SyntaxKind.ImportKeyword) record(node, node.arguments[0].text, 'dynamic-import');
114
+ else if (typescript.isIdentifier(node.expression) && 'require' === node.expression.text) record(node, node.arguments[0].text, 'require');
115
+ }
116
+ node.forEachChild(visit);
117
+ };
118
+ visit(sourceFile);
119
+ return references;
120
+ };
121
+ const importDiagnosticId = (prefix, kind)=>{
122
+ switch(kind){
123
+ case 'side-effect-import':
124
+ return `${prefix}-side-effect-import`;
125
+ case 'dynamic-import':
126
+ return `${prefix}-dynamic-import`;
127
+ case 'require':
128
+ return `${prefix}-require`;
129
+ default:
130
+ return 'vertical-directory' === prefix ? 'vertical-directory-deep-import' : 'workspace-package-source-import';
131
+ }
132
+ };
133
+ const isWorkspaceSourceSpecifier = (specifier)=>{
134
+ const segments = specifier.split('/');
135
+ return segments.length > 3 && segments[0].startsWith('@') && 'src' === segments[2];
136
+ };
137
+ const resolvesInsideVerticalDirectory = (sourceFile, specifier)=>{
138
+ if (!specifier.startsWith('.')) return false;
139
+ const specifierSegments = specifier.replaceAll('\\', '/').split('/');
140
+ if (specifierSegments.some((segment, index)=>'verticals' === segment && void 0 !== specifierSegments[index + 1])) return true;
141
+ const absoluteTarget = node_path.resolve(node_path.dirname(sourceFile.fileName), specifier);
142
+ const verticalRoot = node_path.join(root, 'verticals') + node_path.sep;
143
+ if (!absoluteTarget.startsWith(verticalRoot)) return false;
144
+ const relativeSegments = node_path.relative(verticalRoot, absoluteTarget).split(node_path.sep);
145
+ return relativeSegments.length > 1;
146
+ };
147
+ const jsxTagName = (tagName)=>typescript.isIdentifier(tagName) ? tagName.text : void 0;
148
+ const jsxAttribute = (attributes, name)=>attributes.properties.find((property)=>typescript.isJsxAttribute(property) && nodeName(property.name) === name);
149
+ const isBooleanLiteral = (node, value)=>node?.kind === (value ? typescript.SyntaxKind.TrueKeyword : typescript.SyntaxKind.FalseKeyword);
150
+ const isCallNamed = (node, names)=>{
151
+ if (void 0 === node || !typescript.isCallExpression(node)) return false;
152
+ const accessPath = propertyAccessPath(node.expression);
153
+ return void 0 !== accessPath && names.has(accessPath.at(-1));
154
+ };
155
+ const objectLiteralProperty = (objectLiteral, name)=>objectLiteral.properties.find((property)=>typescript.isPropertyAssignment(property) && nodeName(property.name) === name);
156
+ const moduleFederationConfigArgument = (sourceFile)=>{
157
+ let argument;
158
+ const visit = (node)=>{
159
+ if (void 0 !== argument) return;
160
+ if (typescript.isCallExpression(node) && typescript.isIdentifier(node.expression) && 'createModuleFederationConfig' === node.expression.text && 1 === node.arguments.length && typescript.isObjectLiteralExpression(node.arguments[0])) {
161
+ argument = node.arguments[0];
162
+ return;
163
+ }
164
+ node.forEachChild(visit);
165
+ };
166
+ visit(sourceFile);
167
+ return argument;
168
+ };
169
+ const appDeclaresReactRouter = (appPath)=>{
170
+ const relativePath = `${appPath}/package.json`;
171
+ if (!node_fs.existsSync(node_path.join(root, relativePath))) return false;
172
+ const packageJson = readJson(relativePath);
173
+ return [
174
+ 'react-router',
175
+ 'react-router-dom'
176
+ ].some((dependency)=>[
177
+ 'dependencies',
178
+ 'devDependencies'
179
+ ].some((field)=>Object.hasOwn(packageJson[field] ?? {}, dependency)));
180
+ };
181
+ const bridgeRouterFixArea = 'declare bridge.enableBridgeRouter: false, or true only in an app that declares react-router or react-router-dom';
182
+ const assertBridgeRouterCapability = (sourceFile, appPath)=>{
183
+ const contract = 'module federation bridge capability';
184
+ const configArgument = moduleFederationConfigArgument(sourceFile);
185
+ if (void 0 === configArgument) compilerFailure(sourceFile, sourceFile, contract, 'Generated Module Federation must pass a literal config object to createModuleFederationConfig.', bridgeRouterFixArea);
186
+ const bridge = objectLiteralProperty(configArgument, 'bridge');
187
+ const declaration = void 0 !== bridge && typescript.isObjectLiteralExpression(bridge.initializer) ? objectLiteralProperty(bridge.initializer, 'enableBridgeRouter') : void 0;
188
+ if (void 0 === declaration) compilerFailure(sourceFile, bridge ?? configArgument, contract, 'Generated Module Federation must declare bridge.enableBridgeRouter in its config object.', bridgeRouterFixArea);
189
+ if (isBooleanLiteral(declaration.initializer, false)) return;
190
+ if (!isBooleanLiteral(declaration.initializer, true)) compilerFailure(sourceFile, declaration, contract, 'Generated Module Federation must declare bridge.enableBridgeRouter as a boolean literal.', bridgeRouterFixArea);
191
+ if (!appDeclaresReactRouter(appPath)) compilerFailure(sourceFile, declaration, contract, `Generated Module Federation enables the React bridge router while ${appPath}/package.json declares neither react-router nor react-router-dom.`, bridgeRouterFixArea);
192
+ };
193
+ const checkArchitecture = ()=>{
194
+ const structuralPolicy = workspaceValidationContract.structuralShellPolicy;
195
+ assert(structuralPolicy?.schemaVersion === 1, 'Structural thin-shell compiler policy must use schemaVersion 1');
196
+ const compositionPolicy = workspaceValidationContract.federatedCompositionPolicy;
197
+ assert(compositionPolicy?.schemaVersion === 1, 'Federated composition compiler policy must use schemaVersion 1');
198
+ const compilerInputs = new Set([
199
+ ...(structuralPolicy.shells ?? []).flatMap((shell)=>collectCompilerInputs(shell.srcDir)),
200
+ ...(compositionPolicy.hosts ?? []).flatMap((host)=>collectCompilerInputs(host.srcDir)),
201
+ ...workspaceValidationContract.apps.flatMap((app)=>collectCompilerInputs(app.path))
202
+ ]);
203
+ initializeCompilerSnapshot(compilerInputs);
204
+ for (const shell of structuralPolicy.shells ?? []){
205
+ for (const forbidden of structuralPolicy.forbiddenPathClasses ?? [])if ('shell-super-app' !== shell.id || 'backend-federation.config.ts' === forbidden.path) assert(!node_fs.existsSync(node_path.join(root, shell.packageDir, forbidden.path)), selfCheckFailure(`structural thin-shell ${forbidden.id}`, `${forbidden.diagnostic} Forbidden artifact ${shell.packageDir}/${forbidden.path} exists`, `remove forbidden thin-shell artifact ${shell.packageDir}/${forbidden.path}`));
206
+ if (void 0 !== compilerSnapshot) for (const absolutePath of collectCompilerInputs(shell.srcDir)){
207
+ const sourceFile = parseCompilerInput(absolutePath);
208
+ for (const reference of runtimeModuleReferences(sourceFile)){
209
+ if (resolvesInsideVerticalDirectory(sourceFile, reference.specifier)) {
210
+ const id = importDiagnosticId('vertical-directory', reference.kind);
211
+ compilerFailure(sourceFile, reference.node, `structural thin-shell ${id}`, 'A thin Shell must consume only published vertical surfaces, never a vertical implementation directory.', 'consume only published surfaces from the thin shell');
212
+ }
213
+ if (isWorkspaceSourceSpecifier(reference.specifier)) {
214
+ const id = importDiagnosticId('workspace-package', reference.kind);
215
+ compilerFailure(sourceFile, reference.node, `structural thin-shell ${id}`, 'A thin Shell must consume only package exports, never another package raw src directory.', 'consume only published surfaces from the thin shell');
216
+ }
217
+ }
218
+ }
219
+ }
220
+ if (void 0 === compilerSnapshot) {
221
+ const packageJson = readJson('package.json');
222
+ assert('string' == typeof packageJson.devDependencies?.["@typescript/native"], 'Generated workspaces must declare the native TypeScript compiler used by architecture evidence');
223
+ assert(packageJson.scripts?.check?.split('&&').some((stage)=>'pnpm typecheck' === stage.trim()), 'Generated workspace check must execute compiler evidence before contract validation');
224
+ return;
225
+ }
226
+ for (const host of compositionPolicy.hosts ?? [])for (const absolutePath of collectCompilerInputs(host.srcDir)){
227
+ const sourceFile = parseCompilerInput(absolutePath);
228
+ if (sourceFile.isDeclarationFile) continue;
229
+ const remoteImplementation = (specifier)=>(host.remotes ?? []).find((remote)=>{
230
+ if (specifier === remote.packageName) return true;
231
+ if (specifier.startsWith(`${remote.packageName}/`)) {
232
+ const subpath = specifier.slice(remote.packageName.length + 1);
233
+ return 'api' !== subpath && !subpath.startsWith('api/');
234
+ }
235
+ if (!specifier.startsWith('.')) return false;
236
+ const absoluteTarget = node_path.resolve(node_path.dirname(sourceFile.fileName), specifier);
237
+ const remoteDirectory = node_path.join(root, remote.directory);
238
+ return absoluteTarget === remoteDirectory || absoluteTarget.startsWith(remoteDirectory + node_path.sep);
239
+ });
240
+ for (const reference of runtimeModuleReferences(sourceFile)){
241
+ const remote = remoteImplementation(reference.specifier);
242
+ if (void 0 !== remote) compilerFailure(sourceFile, reference.node, 'federated composition remote-runtime-package-import', `Host ${host.id} imports the ${remote.id} render implementation through ${reference.specifier}.`, 'use import type for contracts or compose the implementation through Module Federation');
243
+ }
244
+ const hydrationStateSetters = new Set();
245
+ const visit = (node)=>{
246
+ if (typescript.isVariableDeclaration(node) && typescript.isArrayBindingPattern(node.name) && node.name.elements.length >= 2 && isCallNamed(node.initializer, new Set([
247
+ 'useState'
248
+ ])) && isBooleanLiteral(node.initializer.arguments[0], false)) {
249
+ const stateName = nodeName(node.name.elements[0].name)?.toLowerCase();
250
+ const setterName = nodeName(node.name.elements[1].name);
251
+ if (('hydrated' === stateName || 'ishydrated' === stateName) && void 0 !== setterName) hydrationStateSetters.add(setterName);
252
+ }
253
+ if ((typescript.isVariableDeclaration(node) || typescript.isFunctionDeclaration(node)) && 'createHydratedRemote' === nodeName(node.name)) compilerFailure(sourceFile, node, 'federated composition hydrated-remote-factory', 'Federated hosts must use the distributed SSR boundary directly; hydration-time remote factories are forbidden.', 'compose remote rendering through framework Module Federation primitives');
254
+ if ((typescript.isPropertyAssignment(node) || typescript.isJsxAttribute(node)) && ('loading' === nodeName(node.name) || 'fallback' === nodeName(node.name))) {
255
+ const value = typescript.isPropertyAssignment(node) ? node.initializer : void 0 !== node.initializer && typescript.isJsxExpression(node.initializer) ? node.initializer.expression : void 0;
256
+ if (void 0 !== value && (typescript.isJsxElement(value) || typescript.isJsxSelfClosingElement(value))) {
257
+ const tagName = typescript.isJsxElement(value) ? jsxTagName(value.openingElement.tagName) : jsxTagName(value.tagName);
258
+ if ('ServerComponent' === tagName || 'LocalComponent' === tagName) compilerFailure(sourceFile, node, 'federated composition local-loading-copy', 'Federated hosts must not render a local component copy while loading a remote implementation.', 'use an explicit unavailable-state component instead of a local implementation copy');
259
+ }
260
+ }
261
+ node.forEachChild(visit);
262
+ };
263
+ visit(sourceFile);
264
+ if (hydrationStateSetters.size > 0) {
265
+ const findHydrationSetter = (node)=>{
266
+ if (typescript.isCallExpression(node) && typescript.isIdentifier(node.expression) && hydrationStateSetters.has(node.expression.text) && isBooleanLiteral(node.arguments[0], true)) compilerFailure(sourceFile, node, 'federated composition hydration-flag', 'Federated hosts must hydrate the server DOM directly; hydrated-state component switching is forbidden.', 'compose remote rendering through framework Module Federation primitives');
267
+ node.forEachChild(findHydrationSetter);
268
+ };
269
+ findHydrationSetter(sourceFile);
270
+ }
271
+ }
272
+ const shellRouteDirectories = (structuralPolicy.shells ?? []).map((shell)=>`${shell.packageDir}/src/routes`);
273
+ const appPaths = workspaceValidationContract.apps.map((app)=>app.path);
274
+ const configFiles = appPaths.flatMap((appPath)=>[
275
+ `${appPath}/modern.config.ts`,
276
+ `${appPath}/module-federation.config.ts`
277
+ ]);
278
+ const moduleFederationConfigAppPaths = new Map(appPaths.map((appPath)=>[
279
+ node_path.join(root, `${appPath}/module-federation.config.ts`),
280
+ appPath
281
+ ]).filter((entry)=>node_fs.existsSync(entry[0])));
282
+ const checkedFiles = new Set([
283
+ ...shellRouteDirectories.flatMap(collectCompilerInputs),
284
+ ...configFiles.map((relativePath)=>node_path.join(root, relativePath)).filter((absolutePath)=>node_fs.existsSync(absolutePath))
285
+ ]);
286
+ for (const absolutePath of checkedFiles){
287
+ const sourceFile = parseCompilerInput(absolutePath);
288
+ const isShellRoute = shellRouteDirectories.some((relativeDirectory)=>{
289
+ const absoluteDirectory = node_path.join(root, relativeDirectory);
290
+ return absolutePath.startsWith(absoluteDirectory + node_path.sep);
291
+ });
292
+ const moduleFederationAppPath = moduleFederationConfigAppPaths.get(absolutePath);
293
+ const tailwindFactories = new Set();
294
+ const presetFactories = new Set();
295
+ for (const statement of sourceFile.statements){
296
+ if (!typescript.isImportDeclaration(statement) || !typescript.isStringLiteralLikeNode(statement.moduleSpecifier) || statement.importClause?.phaseModifier === typescript.SyntaxKind.TypeKeyword) continue;
297
+ const bindings = statement.importClause?.namedBindings;
298
+ if (void 0 !== bindings && typescript.isNamedImports(bindings)) for (const binding of bindings.elements){
299
+ if (binding.isTypeOnly) continue;
300
+ const imported = (binding.propertyName ?? binding.name).text;
301
+ if ('@rsbuild/plugin-tailwindcss' === statement.moduleSpecifier.text && 'pluginTailwindcss' === imported) tailwindFactories.add(binding.name.text);
302
+ if ('@modern-js/ultramodern-app-tools' === statement.moduleSpecifier.text && 'presetUltramodern' === imported) presetFactories.add(binding.name.text);
303
+ }
304
+ }
305
+ const modernConfigApp = workspaceValidationContract.apps.find((app)=>absolutePath === node_path.join(root, app.path, 'modern.config.ts'));
306
+ let insideDefaultExport = false;
307
+ const visit = (node)=>{
308
+ const previousDefaultExport = insideDefaultExport;
309
+ if (typescript.isExportAssignment(node) && !node.isExportEquals) insideDefaultExport = true;
310
+ if (insideDefaultExport && void 0 !== modernConfigApp && isCallNamed(node, presetFactories) && void 0 !== node.arguments[0] && typescript.isObjectLiteralExpression(node.arguments[0])) {
311
+ const builderPlugins = objectLiteralProperty(node.arguments[0], 'builderPlugins');
312
+ const usesTailwind = void 0 !== builderPlugins && typescript.isArrayLiteralExpression(builderPlugins.initializer) && builderPlugins.initializer.elements.some((plugin)=>isCallNamed(plugin, tailwindFactories));
313
+ const emitsUi = 'shell' === modernConfigApp.kind || fullStackVerticals.some((vertical)=>vertical.id === modernConfigApp.id && vertical.emitsUi);
314
+ if (usesTailwind !== (tailwindEnabled && emitsUi)) compilerFailure(sourceFile, builderPlugins ?? node, `${compactConfigPath} policy.features.tailwind`, `Tailwind feature flag is ${tailwindEnabled}, but ${modernConfigApp.id} exported config ${usesTailwind ? 'enables' : 'does not enable'} the Tailwind builder plugin.`, 'keep the Tailwind feature flag and active app builder configuration consistent');
315
+ }
316
+ if (typescript.isImportDeclaration(node) && typescript.isStringLiteralLikeNode(node.moduleSpecifier) && 'node:child_process' === node.moduleSpecifier.text) compilerFailure(sourceFile, node, 'framework config API node-child-process-access', 'Generated config must not invoke node:child_process directly.', 'use the framework config environment API');
317
+ const accessPath = propertyAccessPath(node);
318
+ if (sameJson(accessPath, [
319
+ 'process',
320
+ 'env'
321
+ ])) compilerFailure(sourceFile, node, 'framework config API direct-process-env-access', 'Generated config must use the framework config environment API instead of process.env.', 'use getBuildConfigEnvironment');
322
+ if (typescript.isIdentifier(node) && 'ULTRAMODERN_ZEPHYR' === node.text) compilerFailure(sourceFile, node, 'zephyr gating ultramodern-zephyr-environment-gate', 'Generated Zephyr integration must not be gated through ULTRAMODERN_ZEPHYR.', 'use Zephyr native deploy-token behavior');
323
+ if (typescript.isPropertyAssignment(node)) {
324
+ const property = nodeName(node.name);
325
+ if ('enableBridgeRouter' === property && void 0 === moduleFederationAppPath || 'disableDynamicRemoteTypeHints' === property && isBooleanLiteral(node.initializer, true) || 'treeShakingSharedExcludePlugins' === property) compilerFailure(sourceFile, node, 'module federation bridge capability', `Generated Module Federation carries forbidden option ${property}.`, 'use framework-owned Module Federation defaults');
326
+ }
327
+ if (isShellRoute) {
328
+ if (typescript.isJsxOpeningElement(node) && 'a' === jsxTagName(node.tagName) && void 0 !== jsxAttribute(node.attributes, 'onClick')) compilerFailure(sourceFile, node, 'shell routing synthetic-anchor-click-interception', 'Shell routing must not intercept anchor clicks synthetically.', 'use the router Link primitive');
329
+ if (isCallNamed(node, new Set([
330
+ 'hydrateRoot',
331
+ 'loadRemote',
332
+ 'loadShare'
333
+ ]))) compilerFailure(sourceFile, node, 'module federation native loading', 'Shell routing must use framework Module Federation loading primitives.', 'remove manual hydration or remote-loading wrappers');
334
+ if (typescript.isBinaryExpression(node) && node.operatorToken.kind === typescript.SyntaxKind.EqualsToken && propertyAccessPath(node.left)?.slice(0, 2).join('.') === 'window.location' || typescript.isCallExpression(node) && propertyAccessPath(node.expression)?.slice(0, 2).join('.') === 'window.location') compilerFailure(sourceFile, node, 'shell routing window-location-navigation', 'Shell routing must use router navigation instead of window.location.', 'use the router navigation primitive');
335
+ }
336
+ node.forEachChild(visit);
337
+ insideDefaultExport = previousDefaultExport;
338
+ };
339
+ visit(sourceFile);
340
+ if (void 0 !== moduleFederationAppPath) assertBridgeRouterCapability(sourceFile, moduleFederationAppPath);
341
+ }
342
+ };
343
+ checkArchitecture();
344
+ } finally{
345
+ compiler?.close();
346
+ }
347
+ }
348
+ export { assertCompilerArchitecture };