@bleedingdev/modern-js-plugin-bff 3.5.0-ultramodern.6 → 3.5.0-ultramodern.75

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 (332) hide show
  1. package/dist/cjs/cli/compress.js +52 -0
  2. package/dist/cjs/cli/generator.js +152 -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 +7 -21
  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/safe-failure.js +2 -1
  70. package/dist/cjs/utils/client-generator/files.js +152 -0
  71. package/dist/cjs/utils/client-generator/generate.js +138 -0
  72. package/dist/cjs/utils/client-generator/index.js +83 -0
  73. package/dist/cjs/utils/client-generator/package-json.js +132 -0
  74. package/dist/cjs/utils/client-generator/write-package.js +125 -0
  75. package/dist/cjs/utils/clientGenerator.js +26 -303
  76. package/dist/cjs/utils/effect-client-generator/generator.js +68 -0
  77. package/dist/cjs/utils/effect-client-generator/index.js +51 -0
  78. package/dist/cjs/utils/effect-client-generator/paths.js +73 -0
  79. package/dist/cjs/utils/effect-client-generator/rendering.js +231 -0
  80. package/dist/cjs/utils/effect-client-generator/runtime.js +85 -0
  81. package/dist/cjs/utils/effect-client-generator/types.js +18 -0
  82. package/dist/cjs/utils/effectClientGenerator.js +5 -262
  83. package/dist/cjs/utils/effectSourceLoader.js +173 -0
  84. package/dist/esm/cli/compress.mjs +14 -0
  85. package/dist/esm/cli/generator.mjs +101 -0
  86. package/dist/esm/cli/prefix.mjs +9 -0
  87. package/dist/esm/cli/serverGlobalVars.mjs +76 -0
  88. package/dist/esm/cli/watch.mjs +13 -0
  89. package/dist/esm/cli.mjs +7 -121
  90. package/dist/esm/loader.mjs +19 -2
  91. package/dist/esm/runtime/data-platform/batch/queue.mjs +246 -0
  92. package/dist/esm/runtime/data-platform/batch/request.mjs +45 -0
  93. package/dist/esm/runtime/data-platform/batch/response.mjs +23 -0
  94. package/dist/esm/runtime/data-platform/batch/telemetry.mjs +23 -0
  95. package/dist/esm/runtime/data-platform/batch/url.mjs +25 -0
  96. package/dist/esm/runtime/data-platform/batch-transport.mjs +12 -0
  97. package/dist/esm/runtime/data-platform/codec.mjs +90 -0
  98. package/dist/esm/runtime/data-platform/index.mjs +6 -610
  99. package/dist/esm/runtime/data-platform/invalidation.mjs +20 -0
  100. package/dist/esm/runtime/data-platform/trace.mjs +29 -0
  101. package/dist/esm/runtime/data-platform/types.mjs +4 -0
  102. package/dist/esm/runtime/data-platform/validation.mjs +128 -0
  103. package/dist/esm/runtime/effect/adapter/constants.mjs +6 -0
  104. package/dist/esm/runtime/effect/adapter/cross-project-policy.mjs +23 -0
  105. package/dist/esm/runtime/effect/adapter/entry.mjs +44 -0
  106. package/dist/esm/runtime/effect/adapter/error-response.mjs +41 -0
  107. package/dist/esm/runtime/effect/adapter/handler.mjs +15 -0
  108. package/dist/esm/runtime/effect/adapter.mjs +27 -147
  109. package/dist/esm/runtime/effect/backend-federation/entry.mjs +61 -0
  110. package/dist/esm/runtime/effect/backend-federation/identity.mjs +41 -0
  111. package/dist/esm/runtime/effect/backend-federation/load.mjs +28 -0
  112. package/dist/esm/runtime/effect/backend-federation/plugin.mjs +15 -0
  113. package/dist/esm/runtime/effect/backend-federation/remotes.mjs +12 -0
  114. package/dist/esm/runtime/effect/backend-federation/runtime.mjs +26 -0
  115. package/dist/esm/runtime/effect/backend-federation/types.mjs +0 -0
  116. package/dist/esm/runtime/effect/backend-federation/utils.mjs +7 -0
  117. package/dist/esm/runtime/effect/backend-federation-manifest/errors.mjs +32 -0
  118. package/dist/esm/runtime/effect/backend-federation-manifest/index.mjs +4 -0
  119. package/dist/esm/runtime/effect/backend-federation-manifest/load.mjs +56 -0
  120. package/dist/esm/runtime/effect/backend-federation-manifest/metadata.mjs +42 -0
  121. package/dist/esm/runtime/effect/backend-federation-manifest/reference.mjs +76 -0
  122. package/dist/esm/runtime/effect/backend-federation-manifest/remote.mjs +30 -0
  123. package/dist/esm/runtime/effect/backend-federation-manifest/types.mjs +0 -0
  124. package/dist/esm/runtime/effect/backend-federation-manifest/validation.mjs +65 -0
  125. package/dist/esm/runtime/effect/backend-federation-manifest.mjs +1 -0
  126. package/dist/esm/runtime/effect/backend-federation.mjs +5 -0
  127. package/dist/esm/runtime/effect/dispatch.mjs +63 -0
  128. package/dist/esm/runtime/effect/edge.mjs +17 -63
  129. package/dist/esm/runtime/effect/endpoint-contracts.mjs +8 -13
  130. package/dist/esm/runtime/effect/entry-shape.mjs +36 -0
  131. package/dist/esm/runtime/effect/handler/batch-handler.mjs +123 -0
  132. package/dist/esm/runtime/effect/handler/batch.mjs +124 -0
  133. package/dist/esm/runtime/effect/handler/definition.mjs +60 -0
  134. package/dist/esm/runtime/effect/handler/envelope.mjs +63 -0
  135. package/dist/esm/runtime/effect/handler/http.mjs +58 -0
  136. package/dist/esm/runtime/effect/handler/openapi.mjs +19 -0
  137. package/dist/esm/runtime/effect/handler/routing.mjs +50 -0
  138. package/dist/esm/runtime/effect/handler/rpc.mjs +22 -0
  139. package/dist/esm/runtime/effect/handler/types.mjs +5 -0
  140. package/dist/esm/runtime/effect/handler.mjs +11 -506
  141. package/dist/esm/runtime/effect/index.mjs +5 -2
  142. package/dist/esm/runtime/effect/module.mjs +25 -82
  143. package/dist/esm/runtime/effect/rpcSerialization.mjs +16 -0
  144. package/dist/esm/runtime/effect-client/batch.mjs +35 -0
  145. package/dist/esm/runtime/effect-client/envelope.mjs +104 -0
  146. package/dist/esm/runtime/effect-client/guards.mjs +3 -0
  147. package/dist/esm/runtime/effect-client/index.mjs +27 -37
  148. package/dist/esm/runtime/effect-client/request-context.mjs +23 -0
  149. package/dist/esm/runtime/effect-client/request.mjs +28 -0
  150. package/dist/esm/runtime/effect-client/runtime.mjs +12 -178
  151. package/dist/esm/runtime/effect-client/types.mjs +0 -0
  152. package/dist/esm/runtime/safe-failure.mjs +2 -1
  153. package/dist/esm/utils/client-generator/files.mjs +68 -0
  154. package/dist/esm/utils/client-generator/generate.mjs +88 -0
  155. package/dist/esm/utils/client-generator/index.mjs +4 -0
  156. package/dist/esm/utils/client-generator/package-json.mjs +78 -0
  157. package/dist/esm/utils/client-generator/write-package.mjs +74 -0
  158. package/dist/esm/utils/clientGenerator.mjs +2 -293
  159. package/dist/esm/utils/effect-client-generator/generator.mjs +27 -0
  160. package/dist/esm/utils/effect-client-generator/index.mjs +3 -0
  161. package/dist/esm/utils/effect-client-generator/paths.mjs +25 -0
  162. package/dist/esm/utils/effect-client-generator/rendering.mjs +180 -0
  163. package/dist/esm/utils/effect-client-generator/runtime.mjs +34 -0
  164. package/dist/esm/utils/effect-client-generator/types.mjs +0 -0
  165. package/dist/esm/utils/effectClientGenerator.mjs +1 -249
  166. package/dist/esm/utils/effectSourceLoader.mjs +123 -0
  167. package/dist/esm-node/cli/compress.mjs +15 -0
  168. package/dist/esm-node/cli/generator.mjs +102 -0
  169. package/dist/esm-node/cli/prefix.mjs +10 -0
  170. package/dist/esm-node/cli/serverGlobalVars.mjs +77 -0
  171. package/dist/esm-node/cli/watch.mjs +14 -0
  172. package/dist/esm-node/cli.mjs +7 -121
  173. package/dist/esm-node/loader.mjs +19 -2
  174. package/dist/esm-node/runtime/data-platform/batch/queue.mjs +247 -0
  175. package/dist/esm-node/runtime/data-platform/batch/request.mjs +46 -0
  176. package/dist/esm-node/runtime/data-platform/batch/response.mjs +24 -0
  177. package/dist/esm-node/runtime/data-platform/batch/telemetry.mjs +24 -0
  178. package/dist/esm-node/runtime/data-platform/batch/url.mjs +26 -0
  179. package/dist/esm-node/runtime/data-platform/batch-transport.mjs +13 -0
  180. package/dist/esm-node/runtime/data-platform/codec.mjs +91 -0
  181. package/dist/esm-node/runtime/data-platform/index.mjs +6 -610
  182. package/dist/esm-node/runtime/data-platform/invalidation.mjs +21 -0
  183. package/dist/esm-node/runtime/data-platform/trace.mjs +30 -0
  184. package/dist/esm-node/runtime/data-platform/types.mjs +5 -0
  185. package/dist/esm-node/runtime/data-platform/validation.mjs +129 -0
  186. package/dist/esm-node/runtime/effect/adapter/constants.mjs +7 -0
  187. package/dist/esm-node/runtime/effect/adapter/cross-project-policy.mjs +24 -0
  188. package/dist/esm-node/runtime/effect/adapter/entry.mjs +45 -0
  189. package/dist/esm-node/runtime/effect/adapter/error-response.mjs +42 -0
  190. package/dist/esm-node/runtime/effect/adapter/handler.mjs +16 -0
  191. package/dist/esm-node/runtime/effect/adapter.mjs +28 -149
  192. package/dist/esm-node/runtime/effect/backend-federation/entry.mjs +62 -0
  193. package/dist/esm-node/runtime/effect/backend-federation/identity.mjs +42 -0
  194. package/dist/esm-node/runtime/effect/backend-federation/load.mjs +29 -0
  195. package/dist/esm-node/runtime/effect/backend-federation/plugin.mjs +16 -0
  196. package/dist/esm-node/runtime/effect/backend-federation/remotes.mjs +13 -0
  197. package/dist/esm-node/runtime/effect/backend-federation/runtime.mjs +27 -0
  198. package/dist/esm-node/runtime/effect/backend-federation/types.mjs +1 -0
  199. package/dist/esm-node/runtime/effect/backend-federation/utils.mjs +8 -0
  200. package/dist/esm-node/runtime/effect/backend-federation-manifest/errors.mjs +33 -0
  201. package/dist/esm-node/runtime/effect/backend-federation-manifest/index.mjs +5 -0
  202. package/dist/esm-node/runtime/effect/backend-federation-manifest/load.mjs +57 -0
  203. package/dist/esm-node/runtime/effect/backend-federation-manifest/metadata.mjs +43 -0
  204. package/dist/esm-node/runtime/effect/backend-federation-manifest/reference.mjs +77 -0
  205. package/dist/esm-node/runtime/effect/backend-federation-manifest/remote.mjs +31 -0
  206. package/dist/esm-node/runtime/effect/backend-federation-manifest/types.mjs +1 -0
  207. package/dist/esm-node/runtime/effect/backend-federation-manifest/validation.mjs +66 -0
  208. package/dist/esm-node/runtime/effect/backend-federation-manifest.mjs +2 -0
  209. package/dist/esm-node/runtime/effect/backend-federation.mjs +6 -0
  210. package/dist/esm-node/runtime/effect/dispatch.mjs +64 -0
  211. package/dist/esm-node/runtime/effect/edge.mjs +17 -63
  212. package/dist/esm-node/runtime/effect/endpoint-contracts.mjs +8 -13
  213. package/dist/esm-node/runtime/effect/entry-shape.mjs +37 -0
  214. package/dist/esm-node/runtime/effect/handler/batch-handler.mjs +124 -0
  215. package/dist/esm-node/runtime/effect/handler/batch.mjs +125 -0
  216. package/dist/esm-node/runtime/effect/handler/definition.mjs +61 -0
  217. package/dist/esm-node/runtime/effect/handler/envelope.mjs +64 -0
  218. package/dist/esm-node/runtime/effect/handler/http.mjs +59 -0
  219. package/dist/esm-node/runtime/effect/handler/openapi.mjs +20 -0
  220. package/dist/esm-node/runtime/effect/handler/routing.mjs +51 -0
  221. package/dist/esm-node/runtime/effect/handler/rpc.mjs +23 -0
  222. package/dist/esm-node/runtime/effect/handler/types.mjs +6 -0
  223. package/dist/esm-node/runtime/effect/handler.mjs +11 -506
  224. package/dist/esm-node/runtime/effect/index.mjs +5 -2
  225. package/dist/esm-node/runtime/effect/module.mjs +25 -82
  226. package/dist/esm-node/runtime/effect/rpcSerialization.mjs +17 -0
  227. package/dist/esm-node/runtime/effect-client/batch.mjs +36 -0
  228. package/dist/esm-node/runtime/effect-client/envelope.mjs +105 -0
  229. package/dist/esm-node/runtime/effect-client/guards.mjs +4 -0
  230. package/dist/esm-node/runtime/effect-client/index.mjs +27 -37
  231. package/dist/esm-node/runtime/effect-client/request-context.mjs +24 -0
  232. package/dist/esm-node/runtime/effect-client/request.mjs +29 -0
  233. package/dist/esm-node/runtime/effect-client/runtime.mjs +12 -178
  234. package/dist/esm-node/runtime/effect-client/types.mjs +1 -0
  235. package/dist/esm-node/runtime/safe-failure.mjs +2 -1
  236. package/dist/esm-node/utils/client-generator/files.mjs +69 -0
  237. package/dist/esm-node/utils/client-generator/generate.mjs +89 -0
  238. package/dist/esm-node/utils/client-generator/index.mjs +5 -0
  239. package/dist/esm-node/utils/client-generator/package-json.mjs +79 -0
  240. package/dist/esm-node/utils/client-generator/write-package.mjs +75 -0
  241. package/dist/esm-node/utils/clientGenerator.mjs +2 -293
  242. package/dist/esm-node/utils/effect-client-generator/generator.mjs +28 -0
  243. package/dist/esm-node/utils/effect-client-generator/index.mjs +4 -0
  244. package/dist/esm-node/utils/effect-client-generator/paths.mjs +26 -0
  245. package/dist/esm-node/utils/effect-client-generator/rendering.mjs +181 -0
  246. package/dist/esm-node/utils/effect-client-generator/runtime.mjs +36 -0
  247. package/dist/esm-node/utils/effect-client-generator/types.mjs +1 -0
  248. package/dist/esm-node/utils/effectClientGenerator.mjs +2 -251
  249. package/dist/esm-node/utils/effectSourceLoader.mjs +124 -0
  250. package/dist/types/cli/compress.d.ts +2 -0
  251. package/dist/types/cli/generator.d.ts +7 -0
  252. package/dist/types/cli/prefix.d.ts +2 -0
  253. package/dist/types/cli/serverGlobalVars.d.ts +4 -0
  254. package/dist/types/cli/watch.d.ts +1 -0
  255. package/dist/types/cli.d.ts +0 -1
  256. package/dist/types/runtime/data-platform/batch/queue.d.ts +8 -0
  257. package/dist/types/runtime/data-platform/batch/request.d.ts +13 -0
  258. package/dist/types/runtime/data-platform/batch/response.d.ts +3 -0
  259. package/dist/types/runtime/data-platform/batch/telemetry.d.ts +4 -0
  260. package/dist/types/runtime/data-platform/batch/url.d.ts +4 -0
  261. package/dist/types/runtime/data-platform/batch-transport.d.ts +3 -0
  262. package/dist/types/runtime/data-platform/codec.d.ts +17 -0
  263. package/dist/types/runtime/data-platform/index.d.ts +7 -191
  264. package/dist/types/runtime/data-platform/invalidation.d.ts +8 -0
  265. package/dist/types/runtime/data-platform/trace.d.ts +4 -0
  266. package/dist/types/runtime/data-platform/types.d.ts +146 -0
  267. package/dist/types/runtime/data-platform/validation.d.ts +29 -0
  268. package/dist/types/runtime/effect/adapter/constants.d.ts +1 -0
  269. package/dist/types/runtime/effect/adapter/cross-project-policy.d.ts +4 -0
  270. package/dist/types/runtime/effect/adapter/entry.d.ts +2 -0
  271. package/dist/types/runtime/effect/adapter/error-response.d.ts +2 -0
  272. package/dist/types/runtime/effect/adapter/handler.d.ts +7 -0
  273. package/dist/types/runtime/effect/adapter.d.ts +4 -13
  274. package/dist/types/runtime/effect/backend-federation/entry.d.ts +2 -0
  275. package/dist/types/runtime/effect/backend-federation/identity.d.ts +30 -0
  276. package/dist/types/runtime/effect/backend-federation/load.d.ts +13 -0
  277. package/dist/types/runtime/effect/backend-federation/plugin.d.ts +3 -0
  278. package/dist/types/runtime/effect/backend-federation/remotes.d.ts +2 -0
  279. package/dist/types/runtime/effect/backend-federation/runtime.d.ts +3 -0
  280. package/dist/types/runtime/effect/backend-federation/types.d.ts +73 -0
  281. package/dist/types/runtime/effect/backend-federation/utils.d.ts +2 -0
  282. package/dist/types/runtime/effect/backend-federation-manifest/errors.d.ts +11 -0
  283. package/dist/types/runtime/effect/backend-federation-manifest/index.d.ts +6 -0
  284. package/dist/types/runtime/effect/backend-federation-manifest/load.d.ts +3 -0
  285. package/dist/types/runtime/effect/backend-federation-manifest/metadata.d.ts +18 -0
  286. package/dist/types/runtime/effect/backend-federation-manifest/reference.d.ts +4 -0
  287. package/dist/types/runtime/effect/backend-federation-manifest/remote.d.ts +3 -0
  288. package/dist/types/runtime/effect/backend-federation-manifest/types.d.ts +51 -0
  289. package/dist/types/runtime/effect/backend-federation-manifest/validation.d.ts +5 -0
  290. package/dist/types/runtime/effect/backend-federation-manifest.d.ts +1 -0
  291. package/dist/types/runtime/effect/backend-federation.d.ts +7 -0
  292. package/dist/types/runtime/effect/dispatch.d.ts +13 -0
  293. package/dist/types/runtime/effect/edge.d.ts +8 -8
  294. package/dist/types/runtime/effect/endpoint-contracts.d.ts +5 -7
  295. package/dist/types/runtime/effect/entry-shape.d.ts +31 -0
  296. package/dist/types/runtime/effect/handler/batch-handler.d.ts +11 -0
  297. package/dist/types/runtime/effect/handler/batch.d.ts +17 -0
  298. package/dist/types/runtime/effect/handler/definition.d.ts +17 -0
  299. package/dist/types/runtime/effect/handler/envelope.d.ts +13 -0
  300. package/dist/types/runtime/effect/handler/http.d.ts +14 -0
  301. package/dist/types/runtime/effect/handler/openapi.d.ts +4 -0
  302. package/dist/types/runtime/effect/handler/routing.d.ts +5 -0
  303. package/dist/types/runtime/effect/handler/rpc.d.ts +7 -0
  304. package/dist/types/runtime/effect/handler/types.d.ts +148 -0
  305. package/dist/types/runtime/effect/handler.d.ts +4 -190
  306. package/dist/types/runtime/effect/index.d.ts +3 -0
  307. package/dist/types/runtime/effect/module.d.ts +3 -2
  308. package/dist/types/runtime/effect/rpcSerialization.d.ts +3 -0
  309. package/dist/types/runtime/effect-client/batch.d.ts +2 -0
  310. package/dist/types/runtime/effect-client/envelope.d.ts +15 -0
  311. package/dist/types/runtime/effect-client/guards.d.ts +2 -0
  312. package/dist/types/runtime/effect-client/index.d.ts +1 -1
  313. package/dist/types/runtime/effect-client/request-context.d.ts +3 -0
  314. package/dist/types/runtime/effect-client/request.d.ts +1 -0
  315. package/dist/types/runtime/effect-client/runtime.d.ts +2 -68
  316. package/dist/types/runtime/effect-client/types.d.ts +68 -0
  317. package/dist/types/utils/client-generator/files.d.ts +28 -0
  318. package/dist/types/utils/client-generator/generate.d.ts +26 -0
  319. package/dist/types/utils/client-generator/index.d.ts +7 -0
  320. package/dist/types/utils/client-generator/package-json.d.ts +16 -0
  321. package/dist/types/utils/client-generator/write-package.d.ts +6 -0
  322. package/dist/types/utils/clientGenerator.d.ts +2 -37
  323. package/dist/types/utils/crossProjectServerPolicy.d.ts +3 -2
  324. package/dist/types/utils/effect-client-generator/generator.d.ts +10 -0
  325. package/dist/types/utils/effect-client-generator/index.d.ts +4 -0
  326. package/dist/types/utils/effect-client-generator/paths.d.ts +5 -0
  327. package/dist/types/utils/effect-client-generator/rendering.d.ts +4 -0
  328. package/dist/types/utils/effect-client-generator/runtime.d.ts +12 -0
  329. package/dist/types/utils/effect-client-generator/types.d.ts +27 -0
  330. package/dist/types/utils/effectClientGenerator.d.ts +2 -41
  331. package/dist/types/utils/effectSourceLoader.d.ts +10 -0
  332. package/package.json +45 -33
@@ -0,0 +1,102 @@
1
+ import "node:module";
2
+ import { ApiRouter } from "@modern-js/bff-core";
3
+ import { compile } from "@modern-js/server-utils";
4
+ import { API_DIR, SHARED_DIR, fs, resolveServerTsconfig } from "@modern-js/utils";
5
+ import path from "path";
6
+ import clientGenerator from "../utils/clientGenerator.mjs";
7
+ import pluginGenerator from "../utils/pluginGenerator.mjs";
8
+ import runtimeGenerator from "../utils/runtimeGenerator.mjs";
9
+ import { getPrimaryPrefix } from "./prefix.mjs";
10
+ import { serializeServerGlobalVars, transformServerGlobalVars } from "./serverGlobalVars.mjs";
11
+ const RUNTIME_CREATE_REQUEST = '@modern-js/plugin-bff/client';
12
+ const createBffGenerator = (api)=>{
13
+ const compileApi = async ()=>{
14
+ const { appDirectory, distDirectory, apiDirectory, sharedDirectory, moduleType } = api.getAppContext();
15
+ const modernConfig = api.getNormalizedConfig();
16
+ const distDir = path.resolve(distDirectory);
17
+ const apiDir = apiDirectory || path.resolve(appDirectory, API_DIR);
18
+ const sharedDir = sharedDirectory || path.resolve(appDirectory, SHARED_DIR);
19
+ const tsconfigPath = resolveServerTsconfig(appDirectory, modernConfig?.server?.tsconfigPath);
20
+ const sourceDirs = [];
21
+ if (await fs.pathExists(apiDir)) sourceDirs.push(apiDir);
22
+ if (await fs.pathExists(sharedDir)) sourceDirs.push(sharedDir);
23
+ const { alias, globalVars } = modernConfig.source;
24
+ const { alias: resolveAlias } = modernConfig.resolve;
25
+ if (sourceDirs.length > 0) {
26
+ const combinedAlias = [].concat(alias ?? []).concat(resolveAlias ?? []);
27
+ const serializedGlobalVars = serializeServerGlobalVars(globalVars);
28
+ await compile(appDirectory, {
29
+ alias: combinedAlias
30
+ }, {
31
+ sourceDirs,
32
+ distDir,
33
+ tsconfigPath,
34
+ moduleType,
35
+ throwErrorInsteadOfExit: true
36
+ });
37
+ await transformServerGlobalVars(sourceDirs.map((sourceDir)=>path.resolve(distDir, path.relative(appDirectory, sourceDir))), serializedGlobalVars);
38
+ }
39
+ };
40
+ const generate = async ()=>{
41
+ const { appDirectory, apiDirectory, lambdaDirectory, port, bffRuntimeFramework } = api.getAppContext();
42
+ const modernConfig = api.getNormalizedConfig();
43
+ const relativeDistPath = modernConfig?.output?.distPath?.root || 'dist';
44
+ const { bff } = modernConfig || {};
45
+ const prefix = getPrimaryPrefix(bff?.prefix);
46
+ const httpMethodDecider = bff?.httpMethodDecider;
47
+ const apiRouter = new ApiRouter({
48
+ apiDir: apiDirectory,
49
+ appDir: appDirectory,
50
+ lambdaDir: lambdaDirectory,
51
+ prefix,
52
+ httpMethodDecider,
53
+ isBuild: true
54
+ });
55
+ const lambdaDir = apiRouter.getLambdaDir();
56
+ const existLambda = apiRouter.isExistLambda();
57
+ const runtime = bff?.runtimeCreateRequest || RUNTIME_CREATE_REQUEST;
58
+ const relativeApiPath = path.relative(appDirectory, apiDirectory);
59
+ const relativeLambdaPath = path.relative(appDirectory, lambdaDir);
60
+ await pluginGenerator({
61
+ prefix,
62
+ appDirectory,
63
+ relativeDistPath,
64
+ relativeApiPath,
65
+ relativeLambdaPath,
66
+ runtimeFramework: 'hono' === bffRuntimeFramework ? 'hono' : 'effect'
67
+ });
68
+ await clientGenerator({
69
+ prefix,
70
+ appDir: appDirectory,
71
+ apiDir: apiDirectory,
72
+ lambdaDir,
73
+ existLambda,
74
+ port,
75
+ requestCreator: bff?.requestCreator,
76
+ httpMethodDecider,
77
+ relativeDistPath,
78
+ relativeApiPath,
79
+ bffRuntimeFramework,
80
+ effectEntry: bff?.effect?.entry,
81
+ effectDataPlatformBatch: bff?.effect?.dataPlatform?.batch
82
+ });
83
+ await runtimeGenerator({
84
+ runtime,
85
+ appDirectory,
86
+ relativeDistPath
87
+ });
88
+ };
89
+ const handleCrossProjectInvocation = async (isBuild = false)=>{
90
+ const { bff } = api.getNormalizedConfig();
91
+ if (bff?.crossProject) {
92
+ if (!isBuild) await compileApi();
93
+ await generate();
94
+ }
95
+ };
96
+ return {
97
+ compileApi,
98
+ generate,
99
+ handleCrossProjectInvocation
100
+ };
101
+ };
102
+ export { createBffGenerator };
@@ -0,0 +1,10 @@
1
+ import "node:module";
2
+ import { DEFAULT_API_PREFIX } from "@modern-js/utils";
3
+ const normalizePrefixList = (prefix)=>{
4
+ if (Array.isArray(prefix)) return prefix.filter(Boolean);
5
+ return [
6
+ prefix || DEFAULT_API_PREFIX
7
+ ];
8
+ };
9
+ const getPrimaryPrefix = (prefix)=>normalizePrefixList(prefix)[0] || DEFAULT_API_PREFIX;
10
+ export { getPrimaryPrefix, normalizePrefixList };
@@ -0,0 +1,77 @@
1
+ import "node:module";
2
+ import { applyOptionsChain, fs } from "@modern-js/utils";
3
+ import { transform } from "@swc/core";
4
+ import path from "path";
5
+ const RELEASE_IDENTITY_GLOBAL_NAMES = [
6
+ 'ULTRAMODERN_BUILD_MARKER',
7
+ 'ULTRAMODERN_SOURCE_REVISION',
8
+ 'ULTRAMODERN_RELEASE_VERSION'
9
+ ];
10
+ const collectJavaScriptFiles = async (directory)=>{
11
+ const entries = await fs.readdir(directory, {
12
+ withFileTypes: true
13
+ });
14
+ const nested = await Promise.all(entries.map(async (entry)=>{
15
+ const absolutePath = path.join(directory, entry.name);
16
+ if (entry.isDirectory()) return collectJavaScriptFiles(absolutePath);
17
+ return /\.(?:c|m)?js$/u.test(entry.name) ? [
18
+ absolutePath
19
+ ] : [];
20
+ }));
21
+ return nested.flat();
22
+ };
23
+ const serializeServerGlobalVars = (options)=>{
24
+ const globalVars = applyOptionsChain({}, options, {
25
+ env: 'server',
26
+ target: 'node'
27
+ });
28
+ return Object.fromEntries(Object.entries(globalVars).map(([key, value])=>{
29
+ let serialized;
30
+ try {
31
+ serialized = JSON.stringify(value);
32
+ } catch (error) {
33
+ throw new Error(`source.globalVars["${key}"] cannot be serialized exactly for BFF compilation.`, {
34
+ cause: error
35
+ });
36
+ }
37
+ if (void 0 === serialized) throw new Error(`source.globalVars["${key}"] cannot be serialized exactly for BFF compilation.`);
38
+ return [
39
+ key,
40
+ serialized
41
+ ];
42
+ }));
43
+ };
44
+ const transformServerGlobalVars = async (outputDirectories, globalVars)=>{
45
+ if (0 === Object.keys(globalVars).length) return;
46
+ const existingDirectories = (await Promise.all(outputDirectories.map(async (directory)=>await fs.pathExists(directory) ? directory : void 0))).filter((directory)=>Boolean(directory));
47
+ const files = (await Promise.all(existingDirectories.map(collectJavaScriptFiles))).flat();
48
+ const releaseIdentityBanner = RELEASE_IDENTITY_GLOBAL_NAMES.every((name)=>Object.hasOwn(globalVars, name)) ? `${RELEASE_IDENTITY_GLOBAL_NAMES.map((name)=>`void ${globalVars[name]};`).join('')}\n` : '';
49
+ await Promise.all(files.map(async (filename)=>{
50
+ const source = await fs.readFile(filename, 'utf8');
51
+ const sourceMapFilename = `${filename}.map`;
52
+ const sourceMapExists = await fs.pathExists(sourceMapFilename);
53
+ const inputSourceMap = sourceMapExists ? await fs.readFile(sourceMapFilename, 'utf8') : void 0;
54
+ const result = await transform(`${releaseIdentityBanner}${source}`, {
55
+ filename,
56
+ inputSourceMap,
57
+ sourceMaps: sourceMapExists,
58
+ jsc: {
59
+ parser: {
60
+ syntax: "ecmascript"
61
+ },
62
+ preserveAllComments: true,
63
+ target: 'es2022',
64
+ transform: {
65
+ optimizer: {
66
+ globals: {
67
+ vars: globalVars
68
+ }
69
+ }
70
+ }
71
+ }
72
+ });
73
+ await fs.writeFile(filename, result.code);
74
+ if (sourceMapExists && result.map) await fs.writeFile(sourceMapFilename, result.map);
75
+ }));
76
+ };
77
+ export { serializeServerGlobalVars, transformServerGlobalVars };
@@ -0,0 +1,14 @@
1
+ import "node:module";
2
+ const WATCHABLE_EXTENSIONS = [
3
+ '.ts',
4
+ '.tsx',
5
+ '.js',
6
+ '.jsx',
7
+ '.mts',
8
+ '.cts',
9
+ '.mjs',
10
+ '.cjs',
11
+ '.json'
12
+ ];
13
+ const isWatchableBffFile = (filename)=>WATCHABLE_EXTENSIONS.some((ext)=>filename.endsWith(ext));
14
+ export { isWatchableBffFile };
@@ -1,34 +1,14 @@
1
1
  import "node:module";
2
2
  import { ApiRouter } from "@modern-js/bff-core";
3
- import { compile } from "@modern-js/server-utils";
4
- import { API_DIR, DEFAULT_API_PREFIX, SHARED_DIR, fs, normalizeOutputPath, resolveServerTsconfig } from "@modern-js/utils";
3
+ import { normalizeOutputPath } from "@modern-js/utils";
5
4
  import path from "path";
6
- import clientGenerator from "./utils/clientGenerator.mjs";
7
- import pluginGenerator from "./utils/pluginGenerator.mjs";
8
- import runtimeGenerator from "./utils/runtimeGenerator.mjs";
5
+ import { createCompressConfig } from "./cli/compress.mjs";
6
+ import { createBffGenerator } from "./cli/generator.mjs";
7
+ import { getPrimaryPrefix } from "./cli/prefix.mjs";
8
+ import { isWatchableBffFile } from "./cli/watch.mjs";
9
9
  import { fileURLToPath as __rspack_fileURLToPath } from "node:url";
10
10
  import { dirname as __rspack_dirname } from "node:path";
11
11
  var __rspack_import_meta_dirname__ = __rspack_dirname(__rspack_fileURLToPath(import.meta.url));
12
- const RUNTIME_CREATE_REQUEST = '@modern-js/plugin-bff/client';
13
- const WATCHABLE_EXTENSIONS = [
14
- '.ts',
15
- '.tsx',
16
- '.js',
17
- '.jsx',
18
- '.mts',
19
- '.cts',
20
- '.mjs',
21
- '.cjs',
22
- '.json'
23
- ];
24
- const isWatchableBffFile = (filename)=>WATCHABLE_EXTENSIONS.some((ext)=>filename.endsWith(ext));
25
- const normalizePrefixList = (prefix)=>{
26
- if (Array.isArray(prefix)) return prefix.filter(Boolean);
27
- return [
28
- prefix || DEFAULT_API_PREFIX
29
- ];
30
- };
31
- const getPrimaryPrefix = (prefix)=>normalizePrefixList(prefix)[0] || DEFAULT_API_PREFIX;
32
12
  const bffPlugin = ()=>({
33
13
  name: '@modern-js/plugin-bff',
34
14
  setup: (api)=>{
@@ -40,106 +20,14 @@ const bffPlugin = ()=>({
40
20
  bffRuntimeFramework: 'hono' === userRuntimeFramework ? 'hono' : 'effect'
41
21
  });
42
22
  }
43
- const compileApi = async ()=>{
44
- const { appDirectory, distDirectory, apiDirectory, sharedDirectory, moduleType } = api.getAppContext();
45
- const modernConfig = api.getNormalizedConfig();
46
- const distDir = path.resolve(distDirectory);
47
- const apiDir = apiDirectory || path.resolve(appDirectory, API_DIR);
48
- const sharedDir = sharedDirectory || path.resolve(appDirectory, SHARED_DIR);
49
- const tsconfigPath = resolveServerTsconfig(appDirectory, modernConfig?.server?.tsconfigPath);
50
- const sourceDirs = [];
51
- if (await fs.pathExists(apiDir)) sourceDirs.push(apiDir);
52
- if (await fs.pathExists(sharedDir)) sourceDirs.push(sharedDir);
53
- const { alias } = modernConfig.source;
54
- const { alias: resolveAlias } = modernConfig.resolve;
55
- if (sourceDirs.length > 0) {
56
- const combinedAlias = [].concat(alias ?? []).concat(resolveAlias ?? []);
57
- await compile(appDirectory, {
58
- alias: combinedAlias
59
- }, {
60
- sourceDirs,
61
- distDir,
62
- tsconfigPath,
63
- moduleType,
64
- throwErrorInsteadOfExit: true
65
- });
66
- }
67
- };
68
- const generator = async ()=>{
69
- const { appDirectory, apiDirectory, lambdaDirectory, port, bffRuntimeFramework } = api.getAppContext();
70
- const modernConfig = api.getNormalizedConfig();
71
- const relativeDistPath = modernConfig?.output?.distPath?.root || 'dist';
72
- const { bff } = modernConfig || {};
73
- const prefix = getPrimaryPrefix(bff?.prefix);
74
- const httpMethodDecider = bff?.httpMethodDecider;
75
- const apiRouter = new ApiRouter({
76
- apiDir: apiDirectory,
77
- appDir: appDirectory,
78
- lambdaDir: lambdaDirectory,
79
- prefix,
80
- httpMethodDecider,
81
- isBuild: true
82
- });
83
- const lambdaDir = apiRouter.getLambdaDir();
84
- const existLambda = apiRouter.isExistLambda();
85
- const runtime = bff?.runtimeCreateRequest || RUNTIME_CREATE_REQUEST;
86
- const relativeApiPath = path.relative(appDirectory, apiDirectory);
87
- const relativeLambdaPath = path.relative(appDirectory, lambdaDir);
88
- await pluginGenerator({
89
- prefix,
90
- appDirectory,
91
- relativeDistPath,
92
- relativeApiPath,
93
- relativeLambdaPath,
94
- runtimeFramework: 'hono' === bffRuntimeFramework ? 'hono' : 'effect'
95
- });
96
- await clientGenerator({
97
- prefix,
98
- appDir: appDirectory,
99
- apiDir: apiDirectory,
100
- lambdaDir,
101
- existLambda,
102
- port,
103
- requestCreator: bff?.requestCreator,
104
- httpMethodDecider,
105
- relativeDistPath,
106
- relativeApiPath,
107
- bffRuntimeFramework,
108
- effectEntry: bff?.effect?.entry,
109
- effectDataPlatformBatch: bff?.effect?.dataPlatform?.batch
110
- });
111
- await runtimeGenerator({
112
- runtime,
113
- appDirectory,
114
- relativeDistPath
115
- });
116
- };
117
- const handleCrossProjectInvocation = async (isBuild = false)=>{
118
- const { bff } = api.getNormalizedConfig();
119
- if (bff?.crossProject) {
120
- if (!isBuild) await compileApi();
121
- await generator();
122
- }
123
- };
23
+ const { compileApi, handleCrossProjectInvocation } = createBffGenerator(api);
124
24
  const isHono = ()=>{
125
25
  const { bffRuntimeFramework } = api.getAppContext();
126
26
  return 'hono' === bffRuntimeFramework;
127
27
  };
128
- const createCompressConfig = (devServer, prefix)=>{
129
- if (!devServer || 'object' != typeof devServer || Array.isArray(devServer)) return;
130
- const { compress } = devServer;
131
- if (void 0 === compress || true === compress) {
132
- const prefixes = normalizePrefixList(prefix);
133
- return {
134
- filter: (req)=>!prefixes.some((item)=>req.url?.includes(item))
135
- };
136
- }
137
- if (false === compress) return false;
138
- return compress;
139
- };
140
28
  api.config(async ()=>{
141
29
  const devServer = api.getConfig()?.tools?.devServer;
142
- const prefix = api.getConfig()?.bff?.prefix || DEFAULT_API_PREFIX;
30
+ const prefix = api.getConfig()?.bff?.prefix;
143
31
  const compress = createCompressConfig(devServer, prefix);
144
32
  return {
145
33
  tools: {
@@ -244,6 +132,4 @@ const bffPlugin = ()=>({
244
132
  });
245
133
  }
246
134
  });
247
- const cli = bffPlugin;
248
- export default cli;
249
135
  export { bffPlugin };
@@ -4,6 +4,8 @@ import { generateClient } from "@modern-js/bff-core";
4
4
  import { logger } from "@modern-js/utils";
5
5
  import path from "path";
6
6
  import { generateEffectClientCode, resolveEffectEntryFile } from "./utils/effectClientGenerator.mjs";
7
+ const EFFECT_BFF_WORKER_RUNTIME_QUERY = 'modern-bff-runtime';
8
+ const EFFECT_BFF_WORKER_RUNTIME_SOURCE_QUERY = 'modern-bff-runtime-source';
7
9
  async function transformEffectRuntimeSource(source, filename) {
8
10
  const swc = await import("@swc/core");
9
11
  const result = await swc.transform(source, {
@@ -22,22 +24,36 @@ async function transformEffectRuntimeSource(source, filename) {
22
24
  });
23
25
  return result.code;
24
26
  }
27
+ function createEffectWorkerRuntimeWrapper(resourcePath) {
28
+ const sourceRequest = `${resourcePath}?${EFFECT_BFF_WORKER_RUNTIME_SOURCE_QUERY}`;
29
+ return `import * as effectBffModule from ${JSON.stringify(sourceRequest)};
30
+ import { createEffectBffEdgeDispatcher } from '@modern-js/plugin-bff/effect-edge';
31
+
32
+ export const __modern_create_effect_bff_dispatcher = options =>
33
+ createEffectBffEdgeDispatcher({
34
+ ...options,
35
+ module: effectBffModule,
36
+ });
37
+ `;
38
+ }
25
39
  async function loader(source) {
26
40
  this.cacheable();
27
41
  const { resourcePath } = this;
28
42
  delete require.cache[resourcePath];
29
43
  const callback = this.async();
30
44
  const draftOptions = this.getOptions();
45
+ const resourceQueries = new URLSearchParams(this.resourceQuery);
31
46
  const effectEntryFile = resolveEffectEntryFile({
32
47
  appDir: draftOptions.appDir,
33
48
  apiDir: draftOptions.apiDir,
34
49
  effectEntry: draftOptions.effectEntry
35
50
  });
36
- if ('effect' === draftOptions.bffRuntimeFramework && effectEntryFile && path.resolve(effectEntryFile) === path.resolve(resourcePath) && this.resourceQuery.includes('modern-bff-runtime')) {
51
+ if ('effect' === draftOptions.bffRuntimeFramework && effectEntryFile && path.resolve(effectEntryFile) === path.resolve(resourcePath) && resourceQueries.has(EFFECT_BFF_WORKER_RUNTIME_SOURCE_QUERY)) {
37
52
  const code = await transformEffectRuntimeSource(source, resourcePath);
38
53
  callback(void 0, code);
39
54
  return;
40
55
  }
56
+ if ('effect' === draftOptions.bffRuntimeFramework && effectEntryFile && path.resolve(effectEntryFile) === path.resolve(resourcePath) && resourceQueries.has(EFFECT_BFF_WORKER_RUNTIME_QUERY)) return void callback(void 0, createEffectWorkerRuntimeWrapper(resourcePath));
41
57
  if ('effect' === draftOptions.bffRuntimeFramework && effectEntryFile && path.resolve(effectEntryFile) === path.resolve(resourcePath)) {
42
58
  const code = await generateEffectClientCode({
43
59
  appDir: draftOptions.appDir,
@@ -48,7 +64,8 @@ async function loader(source) {
48
64
  target: draftOptions.target,
49
65
  requestCreator: draftOptions.requestCreator,
50
66
  httpMethodDecider: draftOptions.httpMethodDecider,
51
- dataPlatformBatch: draftOptions.effectDataPlatformBatch
67
+ dataPlatformBatch: draftOptions.effectDataPlatformBatch,
68
+ onDependency: (dependency)=>this.addDependency(dependency)
52
69
  });
53
70
  if (code) return void callback(void 0, code);
54
71
  callback(void 0, `throw new Error('Failed to generate Effect client for ${resourcePath}')`);
@@ -0,0 +1,247 @@
1
+ import "node:module";
2
+ import { stableStringify } from "../codec.mjs";
3
+ import { DEFAULT_DATA_BATCH_HEADER } from "../types.mjs";
4
+ import { createBatchId, measureTextBytes, normalizeMethod, shouldBatchRequest, toHeaderRecord, toRequestBody } from "./request.mjs";
5
+ import { isBatchResponsePayload, parseResponseLikeCreateRequest } from "./response.mjs";
6
+ import { emitDataBatchTransportEvent } from "./telemetry.mjs";
7
+ import { normalizeBatchEndpoint, toAbsoluteUrl } from "./url.mjs";
8
+ function ensureBucket(buckets, endpoint) {
9
+ const existing = buckets.get(endpoint);
10
+ if (existing) return existing;
11
+ const next = {
12
+ items: [],
13
+ bytes: 0,
14
+ timer: null,
15
+ flushing: false
16
+ };
17
+ buckets.set(endpoint, next);
18
+ return next;
19
+ }
20
+ function createBatchTransportQueue({ options, baseFetch }) {
21
+ const flushIntervalMs = Math.max(0, options.flushIntervalMs ?? 8);
22
+ const maxBatchSize = Math.max(1, options.maxBatchSize ?? 16);
23
+ const maxBatchBytes = Math.max(1024, options.maxBatchBytes ?? 65536);
24
+ const requestTimeoutMs = options.requestTimeoutMs;
25
+ const allowedMethods = new Set((options.allowedMethods && options.allowedMethods.length > 0 ? options.allowedMethods : [
26
+ 'GET'
27
+ ]).map((method)=>method.toUpperCase()));
28
+ const onEvent = options.onEvent;
29
+ const buckets = new Map();
30
+ const pendingByKey = new Map();
31
+ const disabledEndpoints = new Set();
32
+ let nextItemId = 0;
33
+ const runSingle = async (request)=>{
34
+ const response = await baseFetch(request.requestUrl, request.requestInit);
35
+ return parseResponseLikeCreateRequest(response);
36
+ };
37
+ const settleRequests = async (items, runner)=>{
38
+ await Promise.all(items.map(async (item)=>{
39
+ try {
40
+ const value = await runner(item);
41
+ item.resolve(value);
42
+ } catch (error) {
43
+ item.reject(error);
44
+ } finally{
45
+ pendingByKey.delete(item.key);
46
+ }
47
+ }));
48
+ };
49
+ const flushBucket = async (endpoint)=>{
50
+ const bucket = buckets.get(endpoint);
51
+ if (!bucket || bucket.flushing) return;
52
+ if (bucket.timer) {
53
+ clearTimeout(bucket.timer);
54
+ bucket.timer = null;
55
+ }
56
+ if (0 === bucket.items.length) return;
57
+ bucket.flushing = true;
58
+ const items = bucket.items;
59
+ bucket.items = [];
60
+ bucket.bytes = 0;
61
+ if (1 === items.length || disabledEndpoints.has(endpoint)) {
62
+ emitDataBatchTransportEvent(onEvent, {
63
+ type: disabledEndpoints.has(endpoint) ? 'fallback' : 'flush',
64
+ endpoint,
65
+ size: items.length,
66
+ reason: disabledEndpoints.has(endpoint) ? 'batch-disabled' : void 0
67
+ });
68
+ await settleRequests(items, runSingle);
69
+ bucket.flushing = false;
70
+ if (bucket.items.length > 0 && !bucket.timer) flushBucket(endpoint);
71
+ return;
72
+ }
73
+ const batchId = createBatchId();
74
+ const payload = {
75
+ protocolVersion: 1,
76
+ batchId,
77
+ sentAt: Date.now(),
78
+ items: items.map((item)=>item.item)
79
+ };
80
+ emitDataBatchTransportEvent(onEvent, {
81
+ type: 'flush',
82
+ endpoint,
83
+ batchId,
84
+ size: items.length
85
+ });
86
+ const payloadJson = JSON.stringify(payload);
87
+ const traceparent = items.find((item)=>'string' == typeof item.item.headers?.traceparent)?.item.headers?.traceparent || void 0;
88
+ const requestInit = {
89
+ method: 'POST',
90
+ headers: {
91
+ accept: 'application/json, */*;q=0.8',
92
+ 'content-type': 'application/json; charset=utf-8',
93
+ [DEFAULT_DATA_BATCH_HEADER]: '1',
94
+ ...traceparent ? {
95
+ traceparent
96
+ } : {}
97
+ },
98
+ body: payloadJson
99
+ };
100
+ let timeoutHandle = null;
101
+ try {
102
+ const controller = requestTimeoutMs && requestTimeoutMs > 0 ? new AbortController() : void 0;
103
+ if (controller) {
104
+ requestInit.signal = controller.signal;
105
+ timeoutHandle = setTimeout(()=>{
106
+ controller.abort();
107
+ emitDataBatchTransportEvent(onEvent, {
108
+ type: 'fallback',
109
+ endpoint,
110
+ batchId,
111
+ size: items.length,
112
+ reason: 'batch-timeout'
113
+ });
114
+ }, requestTimeoutMs);
115
+ }
116
+ const response = await baseFetch(endpoint, requestInit);
117
+ if (!response.ok) {
118
+ if (404 === response.status || 405 === response.status) {
119
+ disabledEndpoints.add(endpoint);
120
+ emitDataBatchTransportEvent(onEvent, {
121
+ type: 'disable',
122
+ endpoint,
123
+ batchId,
124
+ reason: `batch-endpoint-unavailable-${String(response.status)}`
125
+ });
126
+ } else emitDataBatchTransportEvent(onEvent, {
127
+ type: 'fallback',
128
+ endpoint,
129
+ batchId,
130
+ size: items.length,
131
+ reason: `batch-response-${String(response.status)}`
132
+ });
133
+ await settleRequests(items, runSingle);
134
+ bucket.flushing = false;
135
+ return;
136
+ }
137
+ const result = await response.json();
138
+ if (!isBatchResponsePayload(result)) {
139
+ emitDataBatchTransportEvent(onEvent, {
140
+ type: 'fallback',
141
+ endpoint,
142
+ batchId,
143
+ size: items.length,
144
+ reason: 'invalid-batch-response'
145
+ });
146
+ await settleRequests(items, runSingle);
147
+ bucket.flushing = false;
148
+ return;
149
+ }
150
+ const itemMap = new Map();
151
+ for (const item of result.items)itemMap.set(item.id, item);
152
+ await settleRequests(items, async (request)=>{
153
+ const resultItem = itemMap.get(request.item.id);
154
+ if (!resultItem) return runSingle(request);
155
+ const reconstructedResponse = new Response(resultItem.body ?? '', {
156
+ status: resultItem.status,
157
+ headers: resultItem.headers
158
+ });
159
+ return parseResponseLikeCreateRequest(reconstructedResponse);
160
+ });
161
+ } catch (error) {
162
+ emitDataBatchTransportEvent(onEvent, {
163
+ type: 'fallback',
164
+ endpoint,
165
+ batchId,
166
+ size: items.length,
167
+ reason: 'batch-transport-error'
168
+ });
169
+ await settleRequests(items, runSingle);
170
+ } finally{
171
+ if (timeoutHandle) clearTimeout(timeoutHandle);
172
+ bucket.flushing = false;
173
+ if (bucket.items.length > 0 && !bucket.timer) flushBucket(endpoint);
174
+ }
175
+ };
176
+ return (input, init)=>{
177
+ const requestUrl = toAbsoluteUrl(input);
178
+ const batchEndpointUrl = normalizeBatchEndpoint(requestUrl, options.endpoint);
179
+ const endpoint = batchEndpointUrl.toString();
180
+ const method = normalizeMethod(init?.method);
181
+ const body = toRequestBody(init?.body ?? null);
182
+ const headers = toHeaderRecord(init?.headers);
183
+ const normalizedInit = {
184
+ ...init,
185
+ method,
186
+ headers,
187
+ body
188
+ };
189
+ if (disabledEndpoints.has(endpoint) || !shouldBatchRequest({
190
+ method,
191
+ body,
192
+ headers,
193
+ allowedMethods,
194
+ batchEndpoint: endpoint,
195
+ requestUrl
196
+ })) return baseFetch(requestUrl.toString(), normalizedInit).then(parseResponseLikeCreateRequest);
197
+ const itemId = `${Date.now().toString(36)}_${nextItemId.toString(36)}_${Math.random().toString(16).slice(2, 8)}`;
198
+ nextItemId += 1;
199
+ const item = {
200
+ id: itemId,
201
+ path: `${requestUrl.pathname}${requestUrl.search}`,
202
+ method,
203
+ headers,
204
+ ...body ? {
205
+ body
206
+ } : {}
207
+ };
208
+ const key = stableStringify({
209
+ endpoint,
210
+ path: item.path,
211
+ method: item.method,
212
+ headers: item.headers,
213
+ body: item.body ?? null
214
+ });
215
+ const existing = pendingByKey.get(key);
216
+ if (existing) return existing;
217
+ const size = measureTextBytes(stableStringify(item));
218
+ const promise = new Promise((resolve, reject)=>{
219
+ const bucket = ensureBucket(buckets, endpoint);
220
+ const queued = {
221
+ key,
222
+ endpoint,
223
+ requestUrl: requestUrl.toString(),
224
+ requestInit: normalizedInit,
225
+ item,
226
+ size,
227
+ resolve,
228
+ reject
229
+ };
230
+ bucket.items.push(queued);
231
+ bucket.bytes += size;
232
+ emitDataBatchTransportEvent(onEvent, {
233
+ type: 'enqueue',
234
+ endpoint,
235
+ size: bucket.items.length
236
+ });
237
+ if (bucket.items.length >= maxBatchSize || bucket.bytes >= maxBatchBytes) return void flushBucket(endpoint);
238
+ if (!bucket.timer) bucket.timer = setTimeout(()=>{
239
+ bucket.timer = null;
240
+ flushBucket(endpoint);
241
+ }, flushIntervalMs);
242
+ });
243
+ pendingByKey.set(key, promise);
244
+ return promise;
245
+ };
246
+ }
247
+ export { createBatchTransportQueue };