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