@bleedingdev/modern-js-plugin-bff 3.5.0-ultramodern.10 → 3.5.0-ultramodern.100

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 (339) hide show
  1. package/dist/cjs/cli/compress.js +52 -0
  2. package/dist/cjs/cli/generator.js +184 -0
  3. package/dist/cjs/cli/prefix.js +50 -0
  4. package/dist/cjs/cli/serverGlobalVars.js +127 -0
  5. package/dist/cjs/cli/watch.js +51 -0
  6. package/dist/cjs/cli.js +11 -130
  7. package/dist/cjs/loader.js +19 -2
  8. package/dist/cjs/runtime/data-platform/batch/queue.js +284 -0
  9. package/dist/cjs/runtime/data-platform/batch/request.js +98 -0
  10. package/dist/cjs/runtime/data-platform/batch/response.js +64 -0
  11. package/dist/cjs/runtime/data-platform/batch/telemetry.js +67 -0
  12. package/dist/cjs/runtime/data-platform/batch/url.js +69 -0
  13. package/dist/cjs/runtime/data-platform/batch-transport.js +59 -0
  14. package/dist/cjs/runtime/data-platform/codec.js +155 -0
  15. package/dist/cjs/runtime/data-platform/index.js +30 -633
  16. package/dist/cjs/runtime/data-platform/invalidation.js +61 -0
  17. package/dist/cjs/runtime/data-platform/trace.js +73 -0
  18. package/dist/cjs/runtime/data-platform/types.js +48 -0
  19. package/dist/cjs/runtime/data-platform/validation.js +178 -0
  20. package/dist/cjs/runtime/effect/adapter/constants.js +44 -0
  21. package/dist/cjs/runtime/effect/adapter/cross-project-policy.js +61 -0
  22. package/dist/cjs/runtime/effect/adapter/entry.js +92 -0
  23. package/dist/cjs/runtime/effect/adapter/error-response.js +79 -0
  24. package/dist/cjs/runtime/effect/adapter/handler.js +53 -0
  25. package/dist/cjs/runtime/effect/adapter.js +26 -146
  26. package/dist/cjs/runtime/effect/backend-federation/entry.js +99 -0
  27. package/dist/cjs/runtime/effect/backend-federation/identity.js +82 -0
  28. package/dist/cjs/runtime/effect/backend-federation/load.js +66 -0
  29. package/dist/cjs/runtime/effect/backend-federation/plugin.js +53 -0
  30. package/dist/cjs/runtime/effect/backend-federation/remotes.js +50 -0
  31. package/dist/cjs/runtime/effect/backend-federation/runtime.js +64 -0
  32. package/dist/cjs/runtime/effect/backend-federation/types.js +18 -0
  33. package/dist/cjs/runtime/effect/backend-federation/utils.js +48 -0
  34. package/dist/cjs/runtime/effect/backend-federation-manifest/errors.js +83 -0
  35. package/dist/cjs/runtime/effect/backend-federation-manifest/index.js +55 -0
  36. package/dist/cjs/runtime/effect/backend-federation-manifest/load.js +94 -0
  37. package/dist/cjs/runtime/effect/backend-federation-manifest/metadata.js +101 -0
  38. package/dist/cjs/runtime/effect/backend-federation-manifest/reference.js +120 -0
  39. package/dist/cjs/runtime/effect/backend-federation-manifest/remote.js +68 -0
  40. package/dist/cjs/runtime/effect/backend-federation-manifest/types.js +18 -0
  41. package/dist/cjs/runtime/effect/backend-federation-manifest/validation.js +109 -0
  42. package/dist/cjs/runtime/effect/backend-federation-manifest.js +62 -0
  43. package/dist/cjs/runtime/effect/backend-federation.js +65 -0
  44. package/dist/cjs/runtime/effect/dispatch.js +101 -0
  45. package/dist/cjs/runtime/effect/edge.js +64 -71
  46. package/dist/cjs/runtime/effect/endpoint-contracts.js +13 -22
  47. package/dist/cjs/runtime/effect/entry-shape.js +84 -0
  48. package/dist/cjs/runtime/effect/handler/batch-handler.js +161 -0
  49. package/dist/cjs/runtime/effect/handler/batch.js +195 -0
  50. package/dist/cjs/runtime/effect/handler/definition.js +101 -0
  51. package/dist/cjs/runtime/effect/handler/envelope.js +104 -0
  52. package/dist/cjs/runtime/effect/handler/http.js +96 -0
  53. package/dist/cjs/runtime/effect/handler/openapi.js +57 -0
  54. package/dist/cjs/runtime/effect/handler/routing.js +100 -0
  55. package/dist/cjs/runtime/effect/handler/rpc.js +63 -0
  56. package/dist/cjs/runtime/effect/handler/types.js +43 -0
  57. package/dist/cjs/runtime/effect/handler.js +37 -529
  58. package/dist/cjs/runtime/effect/index.js +91 -15
  59. package/dist/cjs/runtime/effect/module.js +23 -80
  60. package/dist/cjs/runtime/effect/rpcSerialization.js +54 -0
  61. package/dist/cjs/runtime/effect-client/batch.js +73 -0
  62. package/dist/cjs/runtime/effect-client/envelope.js +145 -0
  63. package/dist/cjs/runtime/effect-client/guards.js +44 -0
  64. package/dist/cjs/runtime/effect-client/index.js +6 -16
  65. package/dist/cjs/runtime/effect-client/request-context.js +64 -0
  66. package/dist/cjs/runtime/effect-client/request.js +66 -0
  67. package/dist/cjs/runtime/effect-client/runtime.js +12 -178
  68. package/dist/cjs/runtime/effect-client/types.js +18 -0
  69. package/dist/cjs/runtime/hono/adapter.js +32 -79
  70. package/dist/cjs/runtime/safe-failure.js +2 -1
  71. package/dist/cjs/server.js +19 -30
  72. package/dist/cjs/utils/client-generator/files.js +152 -0
  73. package/dist/cjs/utils/client-generator/generate.js +138 -0
  74. package/dist/cjs/utils/client-generator/index.js +83 -0
  75. package/dist/cjs/utils/client-generator/package-json.js +132 -0
  76. package/dist/cjs/utils/client-generator/write-package.js +125 -0
  77. package/dist/cjs/utils/clientGenerator.js +26 -303
  78. package/dist/cjs/utils/effect-client-generator/generator.js +68 -0
  79. package/dist/cjs/utils/effect-client-generator/index.js +51 -0
  80. package/dist/cjs/utils/effect-client-generator/paths.js +73 -0
  81. package/dist/cjs/utils/effect-client-generator/rendering.js +231 -0
  82. package/dist/cjs/utils/effect-client-generator/runtime.js +85 -0
  83. package/dist/cjs/utils/effect-client-generator/types.js +18 -0
  84. package/dist/cjs/utils/effectClientGenerator.js +5 -262
  85. package/dist/cjs/utils/effectSourceLoader.js +252 -0
  86. package/dist/esm/cli/compress.mjs +14 -0
  87. package/dist/esm/cli/generator.mjs +133 -0
  88. package/dist/esm/cli/prefix.mjs +9 -0
  89. package/dist/esm/cli/serverGlobalVars.mjs +76 -0
  90. package/dist/esm/cli/watch.mjs +13 -0
  91. package/dist/esm/cli.mjs +7 -121
  92. package/dist/esm/loader.mjs +19 -2
  93. package/dist/esm/runtime/data-platform/batch/queue.mjs +246 -0
  94. package/dist/esm/runtime/data-platform/batch/request.mjs +45 -0
  95. package/dist/esm/runtime/data-platform/batch/response.mjs +23 -0
  96. package/dist/esm/runtime/data-platform/batch/telemetry.mjs +23 -0
  97. package/dist/esm/runtime/data-platform/batch/url.mjs +25 -0
  98. package/dist/esm/runtime/data-platform/batch-transport.mjs +12 -0
  99. package/dist/esm/runtime/data-platform/codec.mjs +90 -0
  100. package/dist/esm/runtime/data-platform/index.mjs +6 -610
  101. package/dist/esm/runtime/data-platform/invalidation.mjs +20 -0
  102. package/dist/esm/runtime/data-platform/trace.mjs +29 -0
  103. package/dist/esm/runtime/data-platform/types.mjs +4 -0
  104. package/dist/esm/runtime/data-platform/validation.mjs +128 -0
  105. package/dist/esm/runtime/effect/adapter/constants.mjs +6 -0
  106. package/dist/esm/runtime/effect/adapter/cross-project-policy.mjs +23 -0
  107. package/dist/esm/runtime/effect/adapter/entry.mjs +44 -0
  108. package/dist/esm/runtime/effect/adapter/error-response.mjs +41 -0
  109. package/dist/esm/runtime/effect/adapter/handler.mjs +15 -0
  110. package/dist/esm/runtime/effect/adapter.mjs +27 -147
  111. package/dist/esm/runtime/effect/backend-federation/entry.mjs +61 -0
  112. package/dist/esm/runtime/effect/backend-federation/identity.mjs +41 -0
  113. package/dist/esm/runtime/effect/backend-federation/load.mjs +28 -0
  114. package/dist/esm/runtime/effect/backend-federation/plugin.mjs +15 -0
  115. package/dist/esm/runtime/effect/backend-federation/remotes.mjs +12 -0
  116. package/dist/esm/runtime/effect/backend-federation/runtime.mjs +26 -0
  117. package/dist/esm/runtime/effect/backend-federation/types.mjs +0 -0
  118. package/dist/esm/runtime/effect/backend-federation/utils.mjs +7 -0
  119. package/dist/esm/runtime/effect/backend-federation-manifest/errors.mjs +32 -0
  120. package/dist/esm/runtime/effect/backend-federation-manifest/index.mjs +4 -0
  121. package/dist/esm/runtime/effect/backend-federation-manifest/load.mjs +56 -0
  122. package/dist/esm/runtime/effect/backend-federation-manifest/metadata.mjs +42 -0
  123. package/dist/esm/runtime/effect/backend-federation-manifest/reference.mjs +76 -0
  124. package/dist/esm/runtime/effect/backend-federation-manifest/remote.mjs +30 -0
  125. package/dist/esm/runtime/effect/backend-federation-manifest/types.mjs +0 -0
  126. package/dist/esm/runtime/effect/backend-federation-manifest/validation.mjs +65 -0
  127. package/dist/esm/runtime/effect/backend-federation-manifest.mjs +1 -0
  128. package/dist/esm/runtime/effect/backend-federation.mjs +5 -0
  129. package/dist/esm/runtime/effect/dispatch.mjs +63 -0
  130. package/dist/esm/runtime/effect/edge.mjs +17 -63
  131. package/dist/esm/runtime/effect/endpoint-contracts.mjs +14 -14
  132. package/dist/esm/runtime/effect/entry-shape.mjs +36 -0
  133. package/dist/esm/runtime/effect/handler/batch-handler.mjs +123 -0
  134. package/dist/esm/runtime/effect/handler/batch.mjs +124 -0
  135. package/dist/esm/runtime/effect/handler/definition.mjs +60 -0
  136. package/dist/esm/runtime/effect/handler/envelope.mjs +63 -0
  137. package/dist/esm/runtime/effect/handler/http.mjs +58 -0
  138. package/dist/esm/runtime/effect/handler/openapi.mjs +19 -0
  139. package/dist/esm/runtime/effect/handler/routing.mjs +50 -0
  140. package/dist/esm/runtime/effect/handler/rpc.mjs +22 -0
  141. package/dist/esm/runtime/effect/handler/types.mjs +5 -0
  142. package/dist/esm/runtime/effect/handler.mjs +11 -506
  143. package/dist/esm/runtime/effect/index.mjs +5 -2
  144. package/dist/esm/runtime/effect/module.mjs +25 -82
  145. package/dist/esm/runtime/effect/rpcSerialization.mjs +16 -0
  146. package/dist/esm/runtime/effect-client/batch.mjs +35 -0
  147. package/dist/esm/runtime/effect-client/envelope.mjs +104 -0
  148. package/dist/esm/runtime/effect-client/guards.mjs +3 -0
  149. package/dist/esm/runtime/effect-client/index.mjs +27 -37
  150. package/dist/esm/runtime/effect-client/request-context.mjs +23 -0
  151. package/dist/esm/runtime/effect-client/request.mjs +28 -0
  152. package/dist/esm/runtime/effect-client/runtime.mjs +12 -178
  153. package/dist/esm/runtime/effect-client/types.mjs +0 -0
  154. package/dist/esm/runtime/hono/adapter.mjs +33 -80
  155. package/dist/esm/runtime/safe-failure.mjs +2 -1
  156. package/dist/esm/server.mjs +18 -29
  157. package/dist/esm/utils/client-generator/files.mjs +68 -0
  158. package/dist/esm/utils/client-generator/generate.mjs +88 -0
  159. package/dist/esm/utils/client-generator/index.mjs +4 -0
  160. package/dist/esm/utils/client-generator/package-json.mjs +78 -0
  161. package/dist/esm/utils/client-generator/write-package.mjs +74 -0
  162. package/dist/esm/utils/clientGenerator.mjs +2 -293
  163. package/dist/esm/utils/effect-client-generator/generator.mjs +27 -0
  164. package/dist/esm/utils/effect-client-generator/index.mjs +3 -0
  165. package/dist/esm/utils/effect-client-generator/paths.mjs +25 -0
  166. package/dist/esm/utils/effect-client-generator/rendering.mjs +180 -0
  167. package/dist/esm/utils/effect-client-generator/runtime.mjs +34 -0
  168. package/dist/esm/utils/effect-client-generator/types.mjs +0 -0
  169. package/dist/esm/utils/effectClientGenerator.mjs +1 -249
  170. package/dist/esm/utils/effectSourceLoader.mjs +199 -0
  171. package/dist/esm-node/cli/compress.mjs +15 -0
  172. package/dist/esm-node/cli/generator.mjs +134 -0
  173. package/dist/esm-node/cli/prefix.mjs +10 -0
  174. package/dist/esm-node/cli/serverGlobalVars.mjs +77 -0
  175. package/dist/esm-node/cli/watch.mjs +14 -0
  176. package/dist/esm-node/cli.mjs +7 -121
  177. package/dist/esm-node/loader.mjs +19 -2
  178. package/dist/esm-node/runtime/data-platform/batch/queue.mjs +247 -0
  179. package/dist/esm-node/runtime/data-platform/batch/request.mjs +46 -0
  180. package/dist/esm-node/runtime/data-platform/batch/response.mjs +24 -0
  181. package/dist/esm-node/runtime/data-platform/batch/telemetry.mjs +24 -0
  182. package/dist/esm-node/runtime/data-platform/batch/url.mjs +26 -0
  183. package/dist/esm-node/runtime/data-platform/batch-transport.mjs +13 -0
  184. package/dist/esm-node/runtime/data-platform/codec.mjs +91 -0
  185. package/dist/esm-node/runtime/data-platform/index.mjs +6 -610
  186. package/dist/esm-node/runtime/data-platform/invalidation.mjs +21 -0
  187. package/dist/esm-node/runtime/data-platform/trace.mjs +30 -0
  188. package/dist/esm-node/runtime/data-platform/types.mjs +5 -0
  189. package/dist/esm-node/runtime/data-platform/validation.mjs +129 -0
  190. package/dist/esm-node/runtime/effect/adapter/constants.mjs +7 -0
  191. package/dist/esm-node/runtime/effect/adapter/cross-project-policy.mjs +24 -0
  192. package/dist/esm-node/runtime/effect/adapter/entry.mjs +45 -0
  193. package/dist/esm-node/runtime/effect/adapter/error-response.mjs +42 -0
  194. package/dist/esm-node/runtime/effect/adapter/handler.mjs +16 -0
  195. package/dist/esm-node/runtime/effect/adapter.mjs +28 -149
  196. package/dist/esm-node/runtime/effect/backend-federation/entry.mjs +62 -0
  197. package/dist/esm-node/runtime/effect/backend-federation/identity.mjs +42 -0
  198. package/dist/esm-node/runtime/effect/backend-federation/load.mjs +29 -0
  199. package/dist/esm-node/runtime/effect/backend-federation/plugin.mjs +16 -0
  200. package/dist/esm-node/runtime/effect/backend-federation/remotes.mjs +13 -0
  201. package/dist/esm-node/runtime/effect/backend-federation/runtime.mjs +27 -0
  202. package/dist/esm-node/runtime/effect/backend-federation/types.mjs +1 -0
  203. package/dist/esm-node/runtime/effect/backend-federation/utils.mjs +8 -0
  204. package/dist/esm-node/runtime/effect/backend-federation-manifest/errors.mjs +33 -0
  205. package/dist/esm-node/runtime/effect/backend-federation-manifest/index.mjs +5 -0
  206. package/dist/esm-node/runtime/effect/backend-federation-manifest/load.mjs +57 -0
  207. package/dist/esm-node/runtime/effect/backend-federation-manifest/metadata.mjs +43 -0
  208. package/dist/esm-node/runtime/effect/backend-federation-manifest/reference.mjs +77 -0
  209. package/dist/esm-node/runtime/effect/backend-federation-manifest/remote.mjs +31 -0
  210. package/dist/esm-node/runtime/effect/backend-federation-manifest/types.mjs +1 -0
  211. package/dist/esm-node/runtime/effect/backend-federation-manifest/validation.mjs +66 -0
  212. package/dist/esm-node/runtime/effect/backend-federation-manifest.mjs +2 -0
  213. package/dist/esm-node/runtime/effect/backend-federation.mjs +6 -0
  214. package/dist/esm-node/runtime/effect/dispatch.mjs +64 -0
  215. package/dist/esm-node/runtime/effect/edge.mjs +17 -63
  216. package/dist/esm-node/runtime/effect/endpoint-contracts.mjs +14 -14
  217. package/dist/esm-node/runtime/effect/entry-shape.mjs +37 -0
  218. package/dist/esm-node/runtime/effect/handler/batch-handler.mjs +124 -0
  219. package/dist/esm-node/runtime/effect/handler/batch.mjs +125 -0
  220. package/dist/esm-node/runtime/effect/handler/definition.mjs +61 -0
  221. package/dist/esm-node/runtime/effect/handler/envelope.mjs +64 -0
  222. package/dist/esm-node/runtime/effect/handler/http.mjs +59 -0
  223. package/dist/esm-node/runtime/effect/handler/openapi.mjs +20 -0
  224. package/dist/esm-node/runtime/effect/handler/routing.mjs +51 -0
  225. package/dist/esm-node/runtime/effect/handler/rpc.mjs +23 -0
  226. package/dist/esm-node/runtime/effect/handler/types.mjs +6 -0
  227. package/dist/esm-node/runtime/effect/handler.mjs +11 -506
  228. package/dist/esm-node/runtime/effect/index.mjs +5 -2
  229. package/dist/esm-node/runtime/effect/module.mjs +25 -82
  230. package/dist/esm-node/runtime/effect/rpcSerialization.mjs +17 -0
  231. package/dist/esm-node/runtime/effect-client/batch.mjs +36 -0
  232. package/dist/esm-node/runtime/effect-client/envelope.mjs +105 -0
  233. package/dist/esm-node/runtime/effect-client/guards.mjs +4 -0
  234. package/dist/esm-node/runtime/effect-client/index.mjs +27 -37
  235. package/dist/esm-node/runtime/effect-client/request-context.mjs +24 -0
  236. package/dist/esm-node/runtime/effect-client/request.mjs +29 -0
  237. package/dist/esm-node/runtime/effect-client/runtime.mjs +12 -178
  238. package/dist/esm-node/runtime/effect-client/types.mjs +1 -0
  239. package/dist/esm-node/runtime/hono/adapter.mjs +33 -80
  240. package/dist/esm-node/runtime/safe-failure.mjs +2 -1
  241. package/dist/esm-node/server.mjs +18 -29
  242. package/dist/esm-node/utils/client-generator/files.mjs +69 -0
  243. package/dist/esm-node/utils/client-generator/generate.mjs +89 -0
  244. package/dist/esm-node/utils/client-generator/index.mjs +5 -0
  245. package/dist/esm-node/utils/client-generator/package-json.mjs +79 -0
  246. package/dist/esm-node/utils/client-generator/write-package.mjs +75 -0
  247. package/dist/esm-node/utils/clientGenerator.mjs +2 -293
  248. package/dist/esm-node/utils/effect-client-generator/generator.mjs +28 -0
  249. package/dist/esm-node/utils/effect-client-generator/index.mjs +4 -0
  250. package/dist/esm-node/utils/effect-client-generator/paths.mjs +26 -0
  251. package/dist/esm-node/utils/effect-client-generator/rendering.mjs +181 -0
  252. package/dist/esm-node/utils/effect-client-generator/runtime.mjs +36 -0
  253. package/dist/esm-node/utils/effect-client-generator/types.mjs +1 -0
  254. package/dist/esm-node/utils/effectClientGenerator.mjs +2 -251
  255. package/dist/esm-node/utils/effectSourceLoader.mjs +200 -0
  256. package/dist/types/cli/compress.d.ts +2 -0
  257. package/dist/types/cli/generator.d.ts +7 -0
  258. package/dist/types/cli/prefix.d.ts +2 -0
  259. package/dist/types/cli/serverGlobalVars.d.ts +4 -0
  260. package/dist/types/cli/watch.d.ts +1 -0
  261. package/dist/types/cli.d.ts +0 -1
  262. package/dist/types/runtime/data-platform/batch/queue.d.ts +8 -0
  263. package/dist/types/runtime/data-platform/batch/request.d.ts +13 -0
  264. package/dist/types/runtime/data-platform/batch/response.d.ts +3 -0
  265. package/dist/types/runtime/data-platform/batch/telemetry.d.ts +4 -0
  266. package/dist/types/runtime/data-platform/batch/url.d.ts +4 -0
  267. package/dist/types/runtime/data-platform/batch-transport.d.ts +3 -0
  268. package/dist/types/runtime/data-platform/codec.d.ts +17 -0
  269. package/dist/types/runtime/data-platform/index.d.ts +7 -191
  270. package/dist/types/runtime/data-platform/invalidation.d.ts +8 -0
  271. package/dist/types/runtime/data-platform/trace.d.ts +4 -0
  272. package/dist/types/runtime/data-platform/types.d.ts +146 -0
  273. package/dist/types/runtime/data-platform/validation.d.ts +29 -0
  274. package/dist/types/runtime/effect/adapter/constants.d.ts +1 -0
  275. package/dist/types/runtime/effect/adapter/cross-project-policy.d.ts +4 -0
  276. package/dist/types/runtime/effect/adapter/entry.d.ts +2 -0
  277. package/dist/types/runtime/effect/adapter/error-response.d.ts +2 -0
  278. package/dist/types/runtime/effect/adapter/handler.d.ts +7 -0
  279. package/dist/types/runtime/effect/adapter.d.ts +4 -13
  280. package/dist/types/runtime/effect/backend-federation/entry.d.ts +2 -0
  281. package/dist/types/runtime/effect/backend-federation/identity.d.ts +30 -0
  282. package/dist/types/runtime/effect/backend-federation/load.d.ts +13 -0
  283. package/dist/types/runtime/effect/backend-federation/plugin.d.ts +3 -0
  284. package/dist/types/runtime/effect/backend-federation/remotes.d.ts +2 -0
  285. package/dist/types/runtime/effect/backend-federation/runtime.d.ts +3 -0
  286. package/dist/types/runtime/effect/backend-federation/types.d.ts +73 -0
  287. package/dist/types/runtime/effect/backend-federation/utils.d.ts +2 -0
  288. package/dist/types/runtime/effect/backend-federation-manifest/errors.d.ts +11 -0
  289. package/dist/types/runtime/effect/backend-federation-manifest/index.d.ts +6 -0
  290. package/dist/types/runtime/effect/backend-federation-manifest/load.d.ts +3 -0
  291. package/dist/types/runtime/effect/backend-federation-manifest/metadata.d.ts +18 -0
  292. package/dist/types/runtime/effect/backend-federation-manifest/reference.d.ts +4 -0
  293. package/dist/types/runtime/effect/backend-federation-manifest/remote.d.ts +3 -0
  294. package/dist/types/runtime/effect/backend-federation-manifest/types.d.ts +51 -0
  295. package/dist/types/runtime/effect/backend-federation-manifest/validation.d.ts +5 -0
  296. package/dist/types/runtime/effect/backend-federation-manifest.d.ts +1 -0
  297. package/dist/types/runtime/effect/backend-federation.d.ts +7 -0
  298. package/dist/types/runtime/effect/dispatch.d.ts +13 -0
  299. package/dist/types/runtime/effect/edge.d.ts +8 -8
  300. package/dist/types/runtime/effect/endpoint-contracts.d.ts +11 -7
  301. package/dist/types/runtime/effect/entry-shape.d.ts +31 -0
  302. package/dist/types/runtime/effect/handler/batch-handler.d.ts +11 -0
  303. package/dist/types/runtime/effect/handler/batch.d.ts +17 -0
  304. package/dist/types/runtime/effect/handler/definition.d.ts +17 -0
  305. package/dist/types/runtime/effect/handler/envelope.d.ts +13 -0
  306. package/dist/types/runtime/effect/handler/http.d.ts +14 -0
  307. package/dist/types/runtime/effect/handler/openapi.d.ts +4 -0
  308. package/dist/types/runtime/effect/handler/routing.d.ts +5 -0
  309. package/dist/types/runtime/effect/handler/rpc.d.ts +7 -0
  310. package/dist/types/runtime/effect/handler/types.d.ts +148 -0
  311. package/dist/types/runtime/effect/handler.d.ts +4 -190
  312. package/dist/types/runtime/effect/index.d.ts +3 -0
  313. package/dist/types/runtime/effect/module.d.ts +3 -2
  314. package/dist/types/runtime/effect/rpcSerialization.d.ts +3 -0
  315. package/dist/types/runtime/effect-client/batch.d.ts +2 -0
  316. package/dist/types/runtime/effect-client/envelope.d.ts +15 -0
  317. package/dist/types/runtime/effect-client/guards.d.ts +2 -0
  318. package/dist/types/runtime/effect-client/index.d.ts +1 -1
  319. package/dist/types/runtime/effect-client/request-context.d.ts +3 -0
  320. package/dist/types/runtime/effect-client/request.d.ts +1 -0
  321. package/dist/types/runtime/effect-client/runtime.d.ts +2 -68
  322. package/dist/types/runtime/effect-client/types.d.ts +68 -0
  323. package/dist/types/runtime/hono/adapter.d.ts +14 -8
  324. package/dist/types/utils/client-generator/files.d.ts +28 -0
  325. package/dist/types/utils/client-generator/generate.d.ts +26 -0
  326. package/dist/types/utils/client-generator/index.d.ts +7 -0
  327. package/dist/types/utils/client-generator/package-json.d.ts +16 -0
  328. package/dist/types/utils/client-generator/write-package.d.ts +6 -0
  329. package/dist/types/utils/clientGenerator.d.ts +2 -37
  330. package/dist/types/utils/crossProjectServerPolicy.d.ts +3 -2
  331. package/dist/types/utils/effect-client-generator/generator.d.ts +10 -0
  332. package/dist/types/utils/effect-client-generator/index.d.ts +4 -0
  333. package/dist/types/utils/effect-client-generator/paths.d.ts +5 -0
  334. package/dist/types/utils/effect-client-generator/rendering.d.ts +4 -0
  335. package/dist/types/utils/effect-client-generator/runtime.d.ts +12 -0
  336. package/dist/types/utils/effect-client-generator/types.d.ts +27 -0
  337. package/dist/types/utils/effectClientGenerator.d.ts +2 -41
  338. package/dist/types/utils/effectSourceLoader.d.ts +15 -0
  339. package/package.json +57 -33
@@ -1,6 +1,5 @@
1
1
  import "node:module";
2
- import { Hono, run } from "@modern-js/server-core";
3
- import { isProd, logger } from "@modern-js/utils";
2
+ import { logger } from "@modern-js/utils";
4
3
  import createHonoRoutes from "../../utils/createHonoRoutes.mjs";
5
4
  import { checkCrossProjectPolicyResponse, resolveAdapterCrossProjectPolicy } from "../../utils/crossProjectServerPolicy.mjs";
6
5
  import { createSafeFailureResponse } from "../safe-failure.mjs";
@@ -9,17 +8,9 @@ const before = [
9
8
  'custom-server-middleware',
10
9
  'render'
11
10
  ];
12
- const kParentHonoVars = Symbol.for('modernjs.hono.parentVars');
13
11
  class HonoAdapter {
14
- wrapInArray(handler) {
15
- if (Array.isArray(handler)) return handler;
16
- return [
17
- handler
18
- ];
19
- }
20
12
  constructor(api){
21
13
  this.apiMiddleware = [];
22
- this.apiServer = null;
23
14
  this.isHono = true;
24
15
  this.prefix = '/api';
25
16
  this.setHandlers = async ()=>{
@@ -30,7 +21,7 @@ class HonoAdapter {
30
21
  name: 'hono-bff-api',
31
22
  path,
32
23
  method,
33
- handler,
24
+ handler: this.withErrorBoundary(handler),
34
25
  order: 'post',
35
26
  before: before
36
27
  }));
@@ -51,85 +42,47 @@ class HonoAdapter {
51
42
  });
52
43
  }
53
44
  };
54
- this.registerApiRoutes = async ()=>{
55
- if (!this.isHono) return;
56
- this.apiServer = new Hono();
57
- this.apiServer.use('*', run);
58
- this.apiServer.use('*', async (c, next)=>{
59
- const nodeReq = c.env?.node?.req;
60
- const parentVars = nodeReq?.[kParentHonoVars];
61
- if (parentVars && 'object' == typeof parentVars) {
62
- delete nodeReq[kParentHonoVars];
63
- for (const [key, value] of Object.entries(parentVars))if (void 0 === c.get(key)) c.set(key, value);
64
- }
65
- await next();
66
- });
67
- this.apiMiddleware.forEach(({ path = '*', method = 'all', handler })=>{
68
- const handlers = this.wrapInArray(handler);
69
- if (0 === handlers.length) return;
70
- const firstHandler = handlers[0];
71
- const restHandlers = handlers.slice(1);
72
- const m = method;
73
- const server = this.apiServer;
74
- if (!server) return;
75
- const register = server[m];
76
- register.call(server, path, firstHandler, ...restHandlers);
77
- });
78
- this.apiServer.onError(async (err, c)=>{
79
- try {
80
- const serverConfig = this.api.getServerConfig();
81
- const onErrorHandler = serverConfig?.onError;
82
- if (onErrorHandler) {
83
- const result = await onErrorHandler(err, c);
84
- if (result instanceof Response) return result;
85
- } else logger.error(err);
86
- } catch (configError) {
87
- logger.error(`Error in serverConfig.onError handler: ${configError}`);
88
- }
89
- return createSafeFailureResponse(err);
90
- });
91
- };
92
- this.registerMiddleware = async (options)=>{
93
- const { prefix } = options;
45
+ this.registerMiddleware = async (options = {})=>{
94
46
  const { bffRuntimeFramework } = this.api.getServerContext();
95
47
  if ('hono' !== bffRuntimeFramework) {
96
48
  this.isHono = false;
97
49
  return;
98
50
  }
51
+ const { prefix } = options;
99
52
  this.prefix = prefix || this.prefix;
100
53
  const { middlewares: globalMiddlewares } = this.api.getServerContext();
101
54
  await this.setHandlers();
102
- if (isProd()) globalMiddlewares.push(...this.apiMiddleware);
103
- else {
104
- await this.registerApiRoutes();
105
- const dynamicApiMiddleware = {
106
- name: 'dynamic-bff-handler',
107
- path: `${prefix}/*`,
108
- method: 'all',
109
- order: 'post',
110
- before: before,
111
- handler: async (c, next)=>{
112
- if (this.apiServer) {
113
- const nodeReq = c.env?.node?.req;
114
- if (nodeReq) {
115
- const parentVars = c?.var;
116
- nodeReq[kParentHonoVars] = parentVars && 'object' == typeof parentVars ? {
117
- ...parentVars
118
- } : parentVars;
119
- }
120
- const response = await this.apiServer.fetch(c.req.raw, c.env);
121
- if (404 !== response.status) return new Response(response.body, response);
122
- }
123
- await next();
124
- }
125
- };
126
- globalMiddlewares.push(dynamicApiMiddleware);
55
+ globalMiddlewares.push(...this.apiMiddleware);
56
+ };
57
+ this.handleRouteError = async (error, c)=>{
58
+ try {
59
+ const onErrorHandler = this.api.getServerConfig()?.onError;
60
+ if (onErrorHandler) {
61
+ const result = await onErrorHandler(error, c);
62
+ if (result instanceof Response) return result;
63
+ } else logger.error(error);
64
+ } catch (configError) {
65
+ logger.error(`Error in serverConfig.onError handler: ${configError}`);
127
66
  }
67
+ return createSafeFailureResponse(error);
128
68
  };
129
- this.onApiHandlersUpdated = async ()=>{
130
- if (!this.isHono) return;
131
- await this.setHandlers();
132
- await this.registerApiRoutes();
69
+ this.withErrorBoundary = (handler)=>{
70
+ const handlers = Array.isArray(handler) ? handler : [
71
+ handler
72
+ ];
73
+ const [firstHandler, ...restHandlers] = handlers;
74
+ if (!firstHandler) return handler;
75
+ const boundary = async (c, next)=>{
76
+ try {
77
+ return await firstHandler(c, next);
78
+ } catch (error) {
79
+ return this.handleRouteError(error, c);
80
+ }
81
+ };
82
+ return Array.isArray(handler) ? [
83
+ boundary,
84
+ ...restHandlers
85
+ ] : boundary;
133
86
  };
134
87
  this.api = api;
135
88
  }
@@ -7,6 +7,7 @@ const SAFE_FAILURE_CODES = {
7
7
  500: 'INTERNAL_SERVER_ERROR',
8
8
  503: 'SERVICE_UNAVAILABLE'
9
9
  };
10
+ const INVALID_HTTP_HEADER_VALUE = /[\0-\x08\x0a-\x1f\x7f]/u;
10
11
  const readErrorProperty = (error, key)=>{
11
12
  if ('object' != typeof error || null === error || !(key in error)) return;
12
13
  return error[key];
@@ -19,7 +20,7 @@ const normalizeRetryAfter = (value)=>{
19
20
  if ('number' == typeof value && Number.isFinite(value) && value >= 0) return String(Math.ceil(value));
20
21
  if ('string' == typeof value) {
21
22
  const trimmed = value.trim();
22
- return trimmed.length > 0 ? trimmed : void 0;
23
+ return trimmed.length > 0 && !INVALID_HTTP_HEADER_VALUE.test(trimmed) ? trimmed : void 0;
23
24
  }
24
25
  if (value instanceof Date) return value.toUTCString();
25
26
  };
@@ -2,15 +2,17 @@ import "node:module";
2
2
  import { ApiRouter } from "@modern-js/bff-core";
3
3
  import { API_DIR, isFunction, isWebOnly } from "@modern-js/utils";
4
4
  import path from "path";
5
- import { EffectAdapter } from "./runtime/effect/adapter.mjs";
6
5
  import { HonoAdapter } from "./runtime/hono/adapter.mjs";
7
- const RUNTIME_ADAPTER_FACTORIES = {
8
- hono: [
9
- (api)=>new HonoAdapter(api)
10
- ],
11
- effect: [
12
- (api)=>new EffectAdapter(api)
13
- ]
6
+ const RUNTIME_ADAPTER_LOADERS = {
7
+ hono: async (api)=>[
8
+ new HonoAdapter(api)
9
+ ],
10
+ effect: async (api)=>{
11
+ const { EffectAdapter } = await import("./runtime/effect/adapter.mjs");
12
+ return [
13
+ new EffectAdapter(api)
14
+ ];
15
+ }
14
16
  };
15
17
  const normalizePrefixList = (prefix)=>{
16
18
  if (Array.isArray(prefix)) return prefix.filter(Boolean);
@@ -23,9 +25,6 @@ function resolveRuntimeFramework(runtimeFramework) {
23
25
  return 'hono' === runtimeFramework ? 'hono' : 'effect';
24
26
  }
25
27
  class Storage {
26
- reset() {
27
- this.middlewares = [];
28
- }
29
28
  constructor(){
30
29
  this.middlewares = [];
31
30
  }
@@ -37,7 +36,6 @@ const server = ()=>({
37
36
  let apiRouter = null;
38
37
  const appContext = api.getServerContext();
39
38
  const runtimeFramework = resolveRuntimeFramework(appContext.bffRuntimeFramework);
40
- const runtimeAdapters = RUNTIME_ADAPTER_FACTORIES[runtimeFramework].map((createAdapter)=>createAdapter(api));
41
39
  api.onPrepare(async ()=>{
42
40
  const appContext = api.getServerContext();
43
41
  const { render } = appContext;
@@ -83,29 +81,20 @@ const server = ()=>({
83
81
  ]
84
82
  });
85
83
  }
84
+ const runtimeAdapters = await RUNTIME_ADAPTER_LOADERS[runtimeFramework](api);
86
85
  await Promise.all(runtimeAdapters.map((adapter)=>adapter.registerMiddleware({
87
86
  prefix,
88
87
  enableHandleWeb
89
88
  })));
90
89
  });
91
90
  api.onReset(async ({ event })=>{
92
- storage.reset();
93
- const appContext = api.getServerContext();
94
- const { middlewares } = storage;
95
- api.updateServerContext({
96
- ...appContext,
97
- apiMiddlewares: middlewares
98
- });
99
- if ('file-change' === event.type) {
100
- if ('hono' === runtimeFramework && apiRouter) {
101
- const apiHandlerInfos = await apiRouter.getApiHandlers();
102
- const appContext = api.getServerContext();
103
- api.updateServerContext({
104
- ...appContext,
105
- apiHandlerInfos
106
- });
107
- }
108
- await Promise.all(runtimeAdapters.map((adapter)=>adapter.onApiHandlersUpdated?.()));
91
+ if ('file-change' === event.type && apiRouter) {
92
+ const appContext = api.getServerContext();
93
+ const apiHandlerInfos = await apiRouter.getApiHandlers();
94
+ api.updateServerContext({
95
+ ...appContext,
96
+ apiHandlerInfos
97
+ });
109
98
  }
110
99
  });
111
100
  const prepareApiServer = async (input, next)=>{
@@ -0,0 +1,69 @@
1
+ import "node:module";
2
+ import { fs } from "@modern-js/utils";
3
+ import path from "path";
4
+ const API_DIR = 'api';
5
+ const PLUGIN_DIR = 'plugin';
6
+ const RUNTIME_DIR = 'runtime';
7
+ const CLIENT_DIR = 'client';
8
+ const EXPORT_PREFIX = `./${API_DIR}/`;
9
+ const TYPE_PREFIX = `${API_DIR}/`;
10
+ const GENERATED_RUNTIME_DIRS = [
11
+ CLIENT_DIR,
12
+ PLUGIN_DIR,
13
+ RUNTIME_DIR
14
+ ];
15
+ const toPosixPath = (p)=>p.replace(/\\/g, '/');
16
+ const posixJoin = (...args)=>toPosixPath(path.join(...args));
17
+ function createFileDetails(options) {
18
+ const { appDirectory, baseDirectory, resourcePath, source, relativeDistPath } = options;
19
+ const relativePath = path.relative(baseDirectory, resourcePath);
20
+ const parsedPath = path.parse(relativePath);
21
+ const targetDir = posixJoin(`./${relativeDistPath}/${CLIENT_DIR}`, parsedPath.dir, `${parsedPath.name}.js`);
22
+ const absTargetDir = path.resolve(targetDir);
23
+ const relativePathFromAppDirectory = path.relative(appDirectory, path.dirname(resourcePath));
24
+ const typesFilePath = posixJoin(`./${relativeDistPath}`, relativePathFromAppDirectory, `${parsedPath.name}.d.ts`);
25
+ return {
26
+ resourcePath,
27
+ source,
28
+ targetDir,
29
+ name: parsedPath.name,
30
+ absTargetDir,
31
+ relativeTargetDistDir: `./${typesFilePath}`,
32
+ exportKey: toPosixPath(path.join(parsedPath.dir, parsedPath.name))
33
+ };
34
+ }
35
+ async function readDirectoryFiles(appDirectory, directory, relativeDistPath) {
36
+ const filesList = [];
37
+ async function readFiles(currentPath) {
38
+ const entries = await fs.readdir(currentPath, {
39
+ withFileTypes: true
40
+ });
41
+ for (const entry of entries){
42
+ if ('_app.ts' === entry.name) continue;
43
+ const resourcePath = path.join(currentPath, entry.name);
44
+ if (entry.isDirectory()) await readFiles(resourcePath);
45
+ else {
46
+ const source = await fs.readFile(resourcePath, 'utf8');
47
+ filesList.push(createFileDetails({
48
+ appDirectory,
49
+ baseDirectory: directory,
50
+ resourcePath,
51
+ source,
52
+ relativeDistPath
53
+ }));
54
+ }
55
+ }
56
+ }
57
+ await readFiles(directory);
58
+ return filesList;
59
+ }
60
+ async function writeTargetFile(absTargetDir, content) {
61
+ await fs.mkdir(path.dirname(absTargetDir), {
62
+ recursive: true
63
+ });
64
+ await fs.writeFile(absTargetDir, content);
65
+ }
66
+ async function copyFiles(from, to) {
67
+ if (await fs.pathExists(from)) await fs.copy(toPosixPath(from), toPosixPath(to));
68
+ }
69
+ export { API_DIR, CLIENT_DIR, EXPORT_PREFIX, GENERATED_RUNTIME_DIRS, PLUGIN_DIR, RUNTIME_DIR, TYPE_PREFIX, copyFiles, createFileDetails, posixJoin, readDirectoryFiles, toPosixPath, writeTargetFile };
@@ -0,0 +1,89 @@
1
+ import "node:module";
2
+ import { generateClient } from "@modern-js/bff-core";
3
+ import { fs, logger } from "@modern-js/utils";
4
+ import path from "path";
5
+ import { generateEffectClient, resolveEffectEntryFile } from "../effectClientGenerator.mjs";
6
+ import { CLIENT_DIR, copyFiles, createFileDetails, readDirectoryFiles, writeTargetFile } from "./files.mjs";
7
+ import { getPackageName } from "./package-json.mjs";
8
+ import { setPackage, writeClientModuleBoundary } from "./write-package.mjs";
9
+ async function clientGenerator(draftOptions) {
10
+ const generatedClientDir = path.resolve(draftOptions.appDir, draftOptions.relativeDistPath, CLIENT_DIR);
11
+ await fs.remove(generatedClientDir);
12
+ const requestId = getPackageName(draftOptions.appDir) || process.env.npm_package_name;
13
+ const lambdaSourceList = draftOptions.existLambda ? await readDirectoryFiles(draftOptions.appDir, draftOptions.lambdaDir, draftOptions.relativeDistPath) : [];
14
+ const generatedSourceList = [
15
+ ...lambdaSourceList
16
+ ];
17
+ const getClitentCode = async (resourcePath, source)=>{
18
+ const warning = `The file ${resourcePath} is not allowed to be imported in src directory, only API definition files are allowed.`;
19
+ if (!draftOptions.existLambda) return void logger.warn(warning);
20
+ const options = {
21
+ prefix: Array.isArray(draftOptions.prefix) ? draftOptions.prefix[0] : draftOptions.prefix,
22
+ appDir: draftOptions.appDir,
23
+ apiDir: draftOptions.apiDir,
24
+ lambdaDir: draftOptions.lambdaDir,
25
+ port: Number(draftOptions.port),
26
+ source,
27
+ resourcePath,
28
+ target: 'bundle',
29
+ httpMethodDecider: draftOptions.httpMethodDecider,
30
+ requestCreator: draftOptions.requestCreator,
31
+ requestId
32
+ };
33
+ const { lambdaDir } = draftOptions;
34
+ if (!resourcePath.startsWith(lambdaDir)) return void logger.warn(warning);
35
+ const result = await generateClient(options);
36
+ return result;
37
+ };
38
+ try {
39
+ for (const source of lambdaSourceList){
40
+ const code = await getClitentCode(source.resourcePath, source.source);
41
+ if (code?.value) {
42
+ await writeTargetFile(source.absTargetDir, code.value);
43
+ await copyFiles(source.relativeTargetDistDir, source.targetDir.replace("js", 'd.ts'));
44
+ }
45
+ }
46
+ if ('effect' === draftOptions.bffRuntimeFramework) {
47
+ const effectEntryFile = resolveEffectEntryFile({
48
+ appDir: draftOptions.appDir,
49
+ apiDir: draftOptions.apiDir,
50
+ effectEntry: draftOptions.effectEntry
51
+ });
52
+ if (effectEntryFile) {
53
+ const effectSource = await fs.readFile(effectEntryFile, 'utf8');
54
+ const effectFileDetails = createFileDetails({
55
+ appDirectory: draftOptions.appDir,
56
+ baseDirectory: draftOptions.apiDir,
57
+ resourcePath: effectEntryFile,
58
+ source: effectSource,
59
+ relativeDistPath: draftOptions.relativeDistPath
60
+ });
61
+ const effectClientArtifacts = await generateEffectClient({
62
+ appDir: draftOptions.appDir,
63
+ apiDir: draftOptions.apiDir,
64
+ resourcePath: effectEntryFile,
65
+ prefix: Array.isArray(draftOptions.prefix) ? draftOptions.prefix[0] : draftOptions.prefix,
66
+ port: Number(draftOptions.port),
67
+ target: 'bundle',
68
+ requestCreator: draftOptions.requestCreator,
69
+ httpMethodDecider: draftOptions.httpMethodDecider,
70
+ dataPlatformBatch: draftOptions.effectDataPlatformBatch
71
+ });
72
+ if (effectClientArtifacts) {
73
+ const targetTypeFile = effectFileDetails.targetDir.replace(/\.js$/, '.d.ts');
74
+ await writeTargetFile(effectFileDetails.absTargetDir, effectClientArtifacts.code);
75
+ await writeTargetFile(path.resolve(targetTypeFile), effectClientArtifacts.declaration);
76
+ generatedSourceList.push(effectFileDetails);
77
+ }
78
+ }
79
+ }
80
+ logger.info("Client bundle generate succeed");
81
+ } catch (error) {
82
+ logger.error(`Client bundle generate failed: ${error}`);
83
+ }
84
+ if (generatedSourceList.length > 0) await writeClientModuleBoundary(draftOptions.appDir, draftOptions.relativeDistPath);
85
+ await setPackage(generatedSourceList, draftOptions.appDir, draftOptions.relativeDistPath);
86
+ }
87
+ const generate = clientGenerator;
88
+ export default generate;
89
+ export { clientGenerator };
@@ -0,0 +1,5 @@
1
+ import "node:module";
2
+ export { copyFiles, createFileDetails, readDirectoryFiles, writeTargetFile } from "./files.mjs";
3
+ export { clientGenerator, default } from "./generate.mjs";
4
+ export { getClientPackageName, getPackageName, mergePackageJson } from "./package-json.mjs";
5
+ export { setPackage, writeClientModuleBoundary } from "./write-package.mjs";
@@ -0,0 +1,79 @@
1
+ import "node:module";
2
+ import { fs } from "@modern-js/utils";
3
+ import path from "path";
4
+ import { EXPORT_PREFIX, GENERATED_RUNTIME_DIRS, TYPE_PREFIX, toPosixPath } from "./files.mjs";
5
+ function getPackageName(appDirectory) {
6
+ try {
7
+ const packageJsonPath = path.resolve(appDirectory, './package.json');
8
+ const packageJson = fs.readJSONSync(packageJsonPath);
9
+ return packageJson.name;
10
+ } catch {
11
+ return;
12
+ }
13
+ }
14
+ function mergePackageJson(packageJson, files, typesVersion, exports, relativeDistPath) {
15
+ const distPrefix = toPosixPath(`./${relativeDistPath}/`);
16
+ const generatedPrefixes = GENERATED_RUNTIME_DIRS.map((dir)=>toPosixPath(`${distPrefix}${dir}/`));
17
+ const isManagedExportEntry = (value)=>{
18
+ if (!value) return false;
19
+ const values = [
20
+ value.import,
21
+ value.require,
22
+ value.types
23
+ ].filter(Boolean);
24
+ return values.every((entry)=>generatedPrefixes.some((prefix)=>entry.startsWith(prefix)));
25
+ };
26
+ const isManagedTypeEntry = (value)=>Array.isArray(value) && value.length > 0 && value.every((entry)=>generatedPrefixes.some((prefix)=>entry.startsWith(prefix)));
27
+ const normalizedFiles = [
28
+ ...new Set(files.map((file)=>toPosixPath(file)))
29
+ ];
30
+ const currentFiles = packageJson.files || [];
31
+ packageJson.files = [
32
+ ...new Set([
33
+ ...currentFiles.map((file)=>toPosixPath(file)),
34
+ ...normalizedFiles
35
+ ])
36
+ ];
37
+ packageJson.typesVersions ??= {};
38
+ const typesVersions = packageJson.typesVersions;
39
+ const starTypes = typesVersions['*'] || {};
40
+ const generatedTypeEntries = typesVersion['*'] || {};
41
+ const generatedTypeKeys = new Set(Object.keys(generatedTypeEntries));
42
+ const typeConflicts = Object.entries(starTypes).filter(([key, value])=>{
43
+ if (!generatedTypeKeys.has(key) && !key.startsWith(TYPE_PREFIX)) return false;
44
+ const generatedValue = generatedTypeEntries[key];
45
+ if (generatedValue) return JSON.stringify(value) !== JSON.stringify(generatedValue) && !isManagedTypeEntry(value);
46
+ return !isManagedTypeEntry(value);
47
+ }).map(([key])=>key);
48
+ if (typeConflicts.length > 0) throw new Error(`[plugin-bff] package.json typesVersions conflict on keys: ${typeConflicts.sort().join(', ')}. Rename these keys or move them outside "${TYPE_PREFIX}" namespace.`);
49
+ Object.keys(starTypes).forEach((key)=>{
50
+ if (generatedTypeKeys.has(key) || key.startsWith(TYPE_PREFIX)) delete starTypes[key];
51
+ });
52
+ typesVersions['*'] = {
53
+ ...starTypes,
54
+ ...generatedTypeEntries
55
+ };
56
+ packageJson.exports ??= {};
57
+ const packageExports = packageJson.exports;
58
+ const generatedExportKeys = new Set(Object.keys(exports));
59
+ const exportConflicts = Object.entries(packageExports).filter(([key, value])=>{
60
+ if (!generatedExportKeys.has(key) && !key.startsWith(EXPORT_PREFIX)) return false;
61
+ const generatedValue = exports[key];
62
+ if (generatedValue) return JSON.stringify(value) !== JSON.stringify(generatedValue) && !isManagedExportEntry(value);
63
+ return !isManagedExportEntry(value);
64
+ }).map(([key])=>key);
65
+ if (exportConflicts.length > 0) throw new Error(`[plugin-bff] package.json exports conflict on keys: ${exportConflicts.sort().join(', ')}. Rename these exports or move them outside "${EXPORT_PREFIX}" namespace.`);
66
+ Object.keys(packageExports).forEach((key)=>{
67
+ if (generatedExportKeys.has(key) || key.startsWith(EXPORT_PREFIX)) delete packageExports[key];
68
+ });
69
+ Object.assign(packageExports, exports);
70
+ }
71
+ function getClientPackageName(appDirectory) {
72
+ const packageName = getPackageName(appDirectory) || path.basename(appDirectory);
73
+ if (packageName.startsWith('@') && packageName.includes('/')) {
74
+ const [scope, name] = packageName.split('/');
75
+ return `${scope}/${name}-bff-client`;
76
+ }
77
+ return `${packageName}-bff-client`;
78
+ }
79
+ export { getClientPackageName, getPackageName, mergePackageJson };
@@ -0,0 +1,75 @@
1
+ import "node:module";
2
+ import { fs } from "@modern-js/utils";
3
+ import path from "path";
4
+ import { API_DIR, CLIENT_DIR, EXPORT_PREFIX, PLUGIN_DIR, RUNTIME_DIR, TYPE_PREFIX, posixJoin, toPosixPath, writeTargetFile } from "./files.mjs";
5
+ import { getClientPackageName, mergePackageJson } from "./package-json.mjs";
6
+ async function writeClientModuleBoundary(appDirectory, relativeDistPath) {
7
+ await writeTargetFile(path.resolve(appDirectory, relativeDistPath, CLIENT_DIR, 'package.json'), `${JSON.stringify({
8
+ private: true,
9
+ name: getClientPackageName(appDirectory),
10
+ type: 'module'
11
+ }, null, 2)}\n`);
12
+ }
13
+ async function setPackage(files, appDirectory, relativeDistPath) {
14
+ const packagePath = path.resolve(appDirectory, './package.json');
15
+ const packageContent = await fs.readFile(packagePath, 'utf8');
16
+ const packageJson = JSON.parse(packageContent);
17
+ const sortedFiles = [
18
+ ...files
19
+ ].sort((a, b)=>a.exportKey.localeCompare(b.exportKey));
20
+ const addFiles = [
21
+ posixJoin(relativeDistPath, CLIENT_DIR, '**', '*'),
22
+ posixJoin(relativeDistPath, RUNTIME_DIR, '**', '*'),
23
+ posixJoin(relativeDistPath, PLUGIN_DIR, '**', '*')
24
+ ];
25
+ const typesVersions = {
26
+ '*': sortedFiles.reduce((acc, file)=>{
27
+ const typeFilePath = toPosixPath(`./${file.targetDir}`).replace(/\.js$/, '.d.ts');
28
+ return {
29
+ ...acc,
30
+ [toPosixPath(`${TYPE_PREFIX}${file.exportKey}`)]: [
31
+ typeFilePath
32
+ ]
33
+ };
34
+ }, {
35
+ [`${API_DIR}/*`]: [
36
+ toPosixPath(`./${relativeDistPath}/${CLIENT_DIR}/*.d.ts`)
37
+ ],
38
+ [RUNTIME_DIR]: [
39
+ toPosixPath(`./${relativeDistPath}/${RUNTIME_DIR}/index.d.ts`)
40
+ ],
41
+ [PLUGIN_DIR]: [
42
+ toPosixPath(`./${relativeDistPath}/${PLUGIN_DIR}/index.d.ts`)
43
+ ]
44
+ })
45
+ };
46
+ const exports = sortedFiles.reduce((acc, file)=>{
47
+ const exportKey = `${EXPORT_PREFIX}${file.exportKey}`;
48
+ const jsFilePath = toPosixPath(`./${file.targetDir}`);
49
+ return {
50
+ ...acc,
51
+ [toPosixPath(exportKey)]: {
52
+ import: jsFilePath,
53
+ types: toPosixPath(jsFilePath.replace(/\.js$/, '.d.ts'))
54
+ }
55
+ };
56
+ }, {
57
+ [toPosixPath(`./${API_DIR}/*`)]: {
58
+ import: toPosixPath(`./${relativeDistPath}/${CLIENT_DIR}/*.js`),
59
+ types: toPosixPath(`./${relativeDistPath}/${CLIENT_DIR}/*.d.ts`)
60
+ },
61
+ [toPosixPath(`./${PLUGIN_DIR}`)]: {
62
+ import: toPosixPath(`./${relativeDistPath}/${PLUGIN_DIR}/index.js`),
63
+ require: toPosixPath(`./${relativeDistPath}/${PLUGIN_DIR}/index.js`),
64
+ types: toPosixPath(`./${relativeDistPath}/${PLUGIN_DIR}/index.d.ts`)
65
+ },
66
+ [toPosixPath(`./${RUNTIME_DIR}`)]: {
67
+ import: toPosixPath(`./${relativeDistPath}/${RUNTIME_DIR}/index.js`),
68
+ require: toPosixPath(`./${relativeDistPath}/${RUNTIME_DIR}/index.js`),
69
+ types: toPosixPath(`./${relativeDistPath}/${RUNTIME_DIR}/index.d.ts`)
70
+ }
71
+ });
72
+ mergePackageJson(packageJson, addFiles, typesVersions, exports, relativeDistPath);
73
+ await fs.promises.writeFile(packagePath, `${JSON.stringify(packageJson, null, 2)}\n`);
74
+ }
75
+ export { setPackage, writeClientModuleBoundary };