silgi 0.43.29 → 0.50.1

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 (478) hide show
  1. package/README.md +103 -1
  2. package/dist/_virtual/_rolldown/runtime.mjs +5 -0
  3. package/dist/adapters/_fetch-adapter.d.mts +18 -0
  4. package/dist/adapters/_fetch-adapter.mjs +53 -0
  5. package/dist/adapters/astro.d.mts +15 -0
  6. package/dist/adapters/astro.mjs +31 -0
  7. package/dist/adapters/aws-lambda.d.mts +42 -0
  8. package/dist/adapters/aws-lambda.mjs +92 -0
  9. package/dist/adapters/express.d.mts +16 -0
  10. package/dist/adapters/express.mjs +110 -0
  11. package/dist/adapters/message-port.d.mts +42 -0
  12. package/dist/adapters/message-port.mjs +132 -0
  13. package/dist/adapters/nestjs.d.mts +25 -0
  14. package/dist/adapters/nestjs.mjs +83 -0
  15. package/dist/adapters/nextjs.d.mts +14 -0
  16. package/dist/adapters/nextjs.mjs +29 -0
  17. package/dist/adapters/peer.d.mts +27 -0
  18. package/dist/adapters/peer.mjs +36 -0
  19. package/dist/adapters/remix.d.mts +15 -0
  20. package/dist/adapters/remix.mjs +30 -0
  21. package/dist/adapters/solidstart.d.mts +12 -0
  22. package/dist/adapters/solidstart.mjs +29 -0
  23. package/dist/adapters/sveltekit.d.mts +14 -0
  24. package/dist/adapters/sveltekit.mjs +30 -0
  25. package/dist/broker/index.d.mts +62 -0
  26. package/dist/broker/index.mjs +153 -0
  27. package/dist/broker/nats.d.mts +33 -0
  28. package/dist/broker/nats.mjs +31 -0
  29. package/dist/broker/redis.d.mts +51 -0
  30. package/dist/broker/redis.mjs +92 -0
  31. package/dist/builder.d.mts +55 -0
  32. package/dist/builder.mjs +70 -0
  33. package/dist/callable.d.mts +19 -0
  34. package/dist/callable.mjs +42 -0
  35. package/dist/caller.mjs +90 -0
  36. package/dist/client/adapters/fetch/index.d.mts +15 -0
  37. package/dist/client/adapters/fetch/index.mjs +57 -0
  38. package/dist/client/adapters/ofetch/index.d.mts +55 -0
  39. package/dist/client/adapters/ofetch/index.mjs +91 -0
  40. package/dist/client/adapters/websocket/index.d.mts +20 -0
  41. package/dist/client/adapters/websocket/index.mjs +101 -0
  42. package/dist/client/client.d.mts +37 -0
  43. package/dist/client/client.mjs +80 -0
  44. package/dist/client/consume.d.mts +50 -0
  45. package/dist/client/consume.mjs +66 -0
  46. package/dist/client/dynamic-link.d.mts +16 -0
  47. package/dist/client/dynamic-link.mjs +19 -0
  48. package/dist/client/index.d.mts +6 -0
  49. package/dist/client/index.mjs +5 -0
  50. package/dist/client/interceptor.d.mts +31 -0
  51. package/dist/client/interceptor.mjs +34 -0
  52. package/dist/client/openapi.d.mts +29 -0
  53. package/dist/client/openapi.mjs +89 -0
  54. package/dist/client/plugins/batch.d.mts +26 -0
  55. package/dist/client/plugins/batch.mjs +64 -0
  56. package/dist/client/plugins/circuit-breaker.d.mts +24 -0
  57. package/dist/client/plugins/circuit-breaker.mjs +60 -0
  58. package/dist/client/plugins/csrf.d.mts +13 -0
  59. package/dist/client/plugins/csrf.mjs +20 -0
  60. package/dist/client/plugins/dedupe.d.mts +10 -0
  61. package/dist/client/plugins/dedupe.mjs +28 -0
  62. package/dist/client/plugins/index.d.mts +8 -0
  63. package/dist/client/plugins/index.mjs +8 -0
  64. package/dist/client/plugins/otel.d.mts +12 -0
  65. package/dist/client/plugins/otel.mjs +27 -0
  66. package/dist/client/plugins/retry.d.mts +34 -0
  67. package/dist/client/plugins/retry.mjs +79 -0
  68. package/dist/client/plugins/timeout.d.mts +10 -0
  69. package/dist/client/plugins/timeout.mjs +14 -0
  70. package/dist/client/server.d.mts +16 -0
  71. package/dist/client/server.mjs +59 -0
  72. package/dist/client/types.d.mts +29 -0
  73. package/dist/codec/devalue.d.mts +21 -0
  74. package/dist/codec/devalue.mjs +33 -0
  75. package/dist/codec/msgpack.d.mts +18 -0
  76. package/dist/codec/msgpack.mjs +45 -0
  77. package/dist/codec/sanitize.mjs +38 -0
  78. package/dist/codegen/emitters.d.mts +51 -0
  79. package/dist/codegen/emitters.mjs +143 -0
  80. package/dist/codegen/generate.d.mts +25 -0
  81. package/dist/codegen/generate.mjs +224 -0
  82. package/dist/codegen/index.d.mts +44 -0
  83. package/dist/codegen/index.mjs +103 -0
  84. package/dist/codegen/parse.d.mts +124 -0
  85. package/dist/codegen/parse.mjs +135 -0
  86. package/dist/codegen/preserve.d.mts +21 -0
  87. package/dist/codegen/preserve.mjs +62 -0
  88. package/dist/codegen/schema-to-code.d.mts +57 -0
  89. package/dist/codegen/schema-to-code.mjs +167 -0
  90. package/dist/compile.d.mts +46 -0
  91. package/dist/compile.mjs +332 -0
  92. package/dist/core/codec.mjs +67 -0
  93. package/dist/core/context-bridge.mjs +11 -0
  94. package/dist/core/dispatch.mjs +62 -0
  95. package/dist/core/error.d.mts +99 -60
  96. package/dist/core/error.mjs +125 -92
  97. package/dist/core/handler.d.mts +6 -0
  98. package/dist/core/handler.mjs +153 -0
  99. package/dist/core/input.mjs +49 -0
  100. package/dist/core/iterator.d.mts +17 -0
  101. package/dist/core/iterator.mjs +79 -0
  102. package/dist/core/router-utils.mjs +22 -0
  103. package/dist/core/schema.d.mts +20 -0
  104. package/dist/core/schema.mjs +33 -0
  105. package/dist/core/serve.d.mts +51 -0
  106. package/dist/core/serve.mjs +76 -0
  107. package/dist/core/sse.d.mts +18 -0
  108. package/dist/core/sse.mjs +110 -0
  109. package/dist/core/storage.d.mts +17 -4
  110. package/dist/core/storage.mjs +60 -13
  111. package/dist/core/task.d.mts +62 -0
  112. package/dist/core/task.mjs +165 -0
  113. package/dist/core/trace-map.d.mts +13 -0
  114. package/dist/core/trace-map.mjs +13 -0
  115. package/dist/core/url.mjs +28 -0
  116. package/dist/core/utils.mjs +24 -0
  117. package/dist/index.d.mts +17 -21
  118. package/dist/index.mjs +14 -22
  119. package/dist/integrations/ai/index.d.mts +25 -0
  120. package/dist/integrations/ai/index.mjs +117 -0
  121. package/dist/integrations/better-auth/index.d.mts +41 -0
  122. package/dist/integrations/better-auth/index.mjs +331 -0
  123. package/dist/integrations/drizzle/index.d.mts +27 -0
  124. package/dist/integrations/drizzle/index.mjs +285 -0
  125. package/dist/integrations/hey-api/index.d.mts +2 -0
  126. package/dist/integrations/hey-api/index.mjs +2 -0
  127. package/dist/integrations/hey-api/to-client.d.mts +20 -0
  128. package/dist/integrations/hey-api/to-client.mjs +39 -0
  129. package/dist/integrations/pinia-colada/general-utils.d.mts +13 -0
  130. package/dist/integrations/pinia-colada/general-utils.mjs +9 -0
  131. package/dist/integrations/pinia-colada/index.d.mts +6 -0
  132. package/dist/integrations/pinia-colada/index.mjs +5 -0
  133. package/dist/integrations/pinia-colada/key.d.mts +11 -0
  134. package/dist/integrations/pinia-colada/key.mjs +11 -0
  135. package/dist/integrations/pinia-colada/procedure-utils.d.mts +25 -0
  136. package/dist/integrations/pinia-colada/procedure-utils.mjs +33 -0
  137. package/dist/integrations/pinia-colada/router-utils.d.mts +17 -0
  138. package/dist/integrations/pinia-colada/router-utils.mjs +30 -0
  139. package/dist/integrations/pinia-colada/types.d.mts +25 -0
  140. package/dist/integrations/react/index.d.mts +83 -0
  141. package/dist/integrations/react/index.mjs +196 -0
  142. package/dist/integrations/tanstack-query/index.d.mts +120 -0
  143. package/dist/integrations/tanstack-query/index.mjs +100 -0
  144. package/dist/integrations/tanstack-query/ssr.d.mts +60 -0
  145. package/dist/integrations/tanstack-query/ssr.mjs +102 -0
  146. package/dist/integrations/zod/converter.d.mts +75 -0
  147. package/dist/integrations/zod/converter.mjs +345 -0
  148. package/dist/integrations/zod/index.d.mts +2 -0
  149. package/dist/integrations/zod/index.mjs +2 -0
  150. package/dist/lazy.d.mts +22 -0
  151. package/dist/lazy.mjs +34 -0
  152. package/dist/lifecycle.d.mts +36 -0
  153. package/dist/lifecycle.mjs +46 -0
  154. package/dist/map-input.d.mts +17 -0
  155. package/dist/map-input.mjs +47 -0
  156. package/dist/plugins/analytics/accumulator.d.mts +24 -0
  157. package/dist/plugins/analytics/accumulator.mjs +91 -0
  158. package/dist/plugins/analytics/alerts.d.mts +59 -0
  159. package/dist/plugins/analytics/alerts.mjs +140 -0
  160. package/dist/plugins/analytics/collector.d.mts +38 -0
  161. package/dist/plugins/analytics/collector.mjs +275 -0
  162. package/dist/plugins/analytics/cost.d.mts +61 -0
  163. package/dist/plugins/analytics/cost.mjs +97 -0
  164. package/dist/plugins/analytics/export.d.mts +7 -0
  165. package/dist/plugins/analytics/export.mjs +86 -0
  166. package/dist/plugins/analytics/normalize.mjs +144 -0
  167. package/dist/plugins/analytics/query.mjs +164 -0
  168. package/dist/plugins/analytics/request-id.mjs +34 -0
  169. package/dist/plugins/analytics/routes.d.mts +11 -0
  170. package/dist/plugins/analytics/routes.mjs +211 -0
  171. package/dist/plugins/analytics/sse.d.mts +31 -0
  172. package/dist/plugins/analytics/sse.mjs +74 -0
  173. package/dist/plugins/analytics/store.mjs +103 -0
  174. package/dist/plugins/analytics/timeseries.d.mts +50 -0
  175. package/dist/plugins/analytics/timeseries.mjs +169 -0
  176. package/dist/plugins/analytics/trace.d.mts +48 -0
  177. package/dist/plugins/analytics/trace.mjs +83 -0
  178. package/dist/plugins/analytics/types.d.mts +145 -0
  179. package/dist/plugins/analytics/types.mjs +40 -0
  180. package/dist/plugins/analytics/utils.d.mts +4 -0
  181. package/dist/plugins/analytics/utils.mjs +56 -0
  182. package/dist/plugins/analytics.d.mts +18 -0
  183. package/dist/plugins/analytics.mjs +188 -0
  184. package/dist/plugins/batch-server.d.mts +20 -0
  185. package/dist/plugins/batch-server.mjs +91 -0
  186. package/dist/plugins/body-limit.d.mts +19 -0
  187. package/dist/plugins/body-limit.mjs +49 -0
  188. package/dist/plugins/cache.d.mts +170 -0
  189. package/dist/plugins/cache.mjs +212 -0
  190. package/dist/plugins/coerce.d.mts +24 -0
  191. package/dist/plugins/coerce.mjs +70 -0
  192. package/dist/plugins/cookies.d.mts +14 -0
  193. package/dist/plugins/cookies.mjs +48 -0
  194. package/dist/plugins/cors.d.mts +43 -0
  195. package/dist/plugins/cors.mjs +62 -0
  196. package/dist/plugins/file-upload.d.mts +38 -0
  197. package/dist/plugins/file-upload.mjs +102 -0
  198. package/dist/plugins/index.d.mts +18 -0
  199. package/dist/plugins/index.mjs +17 -0
  200. package/dist/plugins/otel.d.mts +35 -0
  201. package/dist/plugins/otel.mjs +40 -0
  202. package/dist/plugins/pino.d.mts +60 -0
  203. package/dist/plugins/pino.mjs +42 -0
  204. package/dist/plugins/pubsub.d.mts +50 -0
  205. package/dist/plugins/pubsub.mjs +53 -0
  206. package/dist/plugins/ratelimit.d.mts +53 -0
  207. package/dist/plugins/ratelimit.mjs +92 -0
  208. package/dist/plugins/signing.d.mts +41 -0
  209. package/dist/plugins/signing.mjs +118 -0
  210. package/dist/plugins/strict-get.d.mts +10 -0
  211. package/dist/plugins/strict-get.mjs +33 -0
  212. package/dist/scalar.d.mts +49 -0
  213. package/dist/scalar.mjs +311 -0
  214. package/dist/silgi.d.mts +144 -0
  215. package/dist/silgi.mjs +164 -0
  216. package/dist/trpc-interop.d.mts +22 -0
  217. package/dist/trpc-interop.mjs +68 -0
  218. package/dist/types.d.mts +108 -0
  219. package/dist/ws.d.mts +88 -0
  220. package/dist/ws.mjs +205 -0
  221. package/lib/dashboard/index.html +120 -0
  222. package/lib/ocache.d.mts +1 -0
  223. package/lib/ocache.mjs +1 -0
  224. package/lib/ofetch.d.mts +1 -0
  225. package/lib/ofetch.mjs +1 -0
  226. package/lib/srvx.d.mts +1 -0
  227. package/lib/srvx.mjs +1 -0
  228. package/lib/unstorage.d.mts +1 -0
  229. package/lib/unstorage.mjs +1 -0
  230. package/package.json +313 -150
  231. package/dist/build.d.mts +0 -3
  232. package/dist/build.mjs +0 -4
  233. package/dist/cli/build/build.mjs +0 -15
  234. package/dist/cli/build/dev.d.mts +0 -10
  235. package/dist/cli/build/dev.mjs +0 -92
  236. package/dist/cli/build/prepare.d.mts +0 -6
  237. package/dist/cli/build/prepare.mjs +0 -15
  238. package/dist/cli/commands/commands.mjs +0 -90
  239. package/dist/cli/commands/env.mjs +0 -53
  240. package/dist/cli/commands/init.mjs +0 -84
  241. package/dist/cli/commands/install.mjs +0 -52
  242. package/dist/cli/commands/prepare.mjs +0 -65
  243. package/dist/cli/commands/reset.mjs +0 -46
  244. package/dist/cli/commands/run.mjs +0 -31
  245. package/dist/cli/commands/watch.mjs +0 -153
  246. package/dist/cli/config/defaults.mjs +0 -117
  247. package/dist/cli/config/index.d.mts +0 -3
  248. package/dist/cli/config/index.mjs +0 -4
  249. package/dist/cli/config/loader.d.mts +0 -6
  250. package/dist/cli/config/loader.mjs +0 -71
  251. package/dist/cli/config/resolvers/compatibility.mjs +0 -71
  252. package/dist/cli/config/resolvers/imports.mjs +0 -35
  253. package/dist/cli/config/resolvers/paths.mjs +0 -98
  254. package/dist/cli/config/resolvers/storage.mjs +0 -23
  255. package/dist/cli/config/resolvers/url.mjs +0 -9
  256. package/dist/cli/config/types.d.mts +0 -14
  257. package/dist/cli/config/types.mjs +0 -147
  258. package/dist/cli/core/apiful.mjs +0 -36
  259. package/dist/cli/core/devServer.mjs +0 -10
  260. package/dist/cli/core/env.mjs +0 -68
  261. package/dist/cli/core/installPackage.mjs +0 -60
  262. package/dist/cli/core/runtimeConfig.mjs +0 -70
  263. package/dist/cli/core/scan.mjs +0 -35
  264. package/dist/cli/core/silgi.mjs +0 -111
  265. package/dist/cli/framework/emptyFramework.mjs +0 -7
  266. package/dist/cli/framework/h3.mjs +0 -55
  267. package/dist/cli/framework/index.mjs +0 -15
  268. package/dist/cli/framework/nitro.mjs +0 -24
  269. package/dist/cli/framework/nuxt.mjs +0 -10
  270. package/dist/cli/index.d.mts +0 -1
  271. package/dist/cli/index.mjs +0 -29
  272. package/dist/cli/module/exportScan.mjs +0 -180
  273. package/dist/cli/module/install.mjs +0 -49
  274. package/dist/cli/module/scan.mjs +0 -193
  275. package/dist/cli/scan/prepareCommands.mjs +0 -40
  276. package/dist/cli/scan/prepareConfigs.mjs +0 -33
  277. package/dist/cli/scan/prepareCoreFile.mjs +0 -118
  278. package/dist/cli/scan/prepareScanFile.mjs +0 -59
  279. package/dist/cli/scan/prepareSchema.mjs +0 -128
  280. package/dist/cli/scan/scanExportFile.mjs +0 -288
  281. package/dist/cli/scan/writeCoreFile.mjs +0 -22
  282. package/dist/cli/scan/writeTypesAndFiles.mjs +0 -72
  283. package/dist/cli/utils/cancel.mjs +0 -14
  284. package/dist/cli/utils/common.mjs +0 -15
  285. package/dist/cli/utils/compatibility.mjs +0 -33
  286. package/dist/cli/utils/debug.mjs +0 -11
  287. package/dist/cli/utils/ignore.mjs +0 -56
  288. package/dist/cli/utils/processManager.mjs +0 -170
  289. package/dist/cli/utils/readScanFile.mjs +0 -58
  290. package/dist/cli/utils/storage.mjs +0 -23
  291. package/dist/core/context.d.mts +0 -30
  292. package/dist/core/context.mjs +0 -32
  293. package/dist/core/createSilgi.d.mts +0 -6
  294. package/dist/core/createSilgi.mjs +0 -153
  295. package/dist/core/event.d.mts +0 -26
  296. package/dist/core/event.mjs +0 -44
  297. package/dist/core/index.d.mts +0 -25
  298. package/dist/core/index.mjs +0 -30
  299. package/dist/core/orchestrate.mjs +0 -115
  300. package/dist/core/response.d.mts +0 -20
  301. package/dist/core/response.mjs +0 -105
  302. package/dist/core/silgi.d.mts +0 -19
  303. package/dist/core/silgi.mjs +0 -141
  304. package/dist/core/silgiApp.d.mts +0 -9
  305. package/dist/core/silgiApp.mjs +0 -23
  306. package/dist/core/unctx.d.mts +0 -21
  307. package/dist/core/unctx.mjs +0 -35
  308. package/dist/core/utils/event-stream.d.mts +0 -53
  309. package/dist/core/utils/event-stream.mjs +0 -38
  310. package/dist/core/utils/event.d.mts +0 -8
  311. package/dist/core/utils/event.mjs +0 -12
  312. package/dist/core/utils/internal/event-stream.d.mts +0 -45
  313. package/dist/core/utils/internal/event-stream.mjs +0 -137
  314. package/dist/core/utils/internal/obj.mjs +0 -9
  315. package/dist/core/utils/internal/object.mjs +0 -29
  316. package/dist/core/utils/internal/query.mjs +0 -73
  317. package/dist/core/utils/internal/req.mjs +0 -35
  318. package/dist/core/utils/merge.d.mts +0 -14
  319. package/dist/core/utils/merge.mjs +0 -27
  320. package/dist/core/utils/middleware.d.mts +0 -14
  321. package/dist/core/utils/middleware.mjs +0 -12
  322. package/dist/core/utils/request.mjs +0 -35
  323. package/dist/core/utils/resolver.d.mts +0 -7
  324. package/dist/core/utils/resolver.mjs +0 -29
  325. package/dist/core/utils/runtime.d.mts +0 -7
  326. package/dist/core/utils/runtime.mjs +0 -20
  327. package/dist/core/utils/sanitize.mjs +0 -22
  328. package/dist/core/utils/schema.d.mts +0 -34
  329. package/dist/core/utils/schema.mjs +0 -33
  330. package/dist/core/utils/service.d.mts +0 -13
  331. package/dist/core/utils/service.mjs +0 -19
  332. package/dist/core/utils/shared.d.mts +0 -6
  333. package/dist/core/utils/shared.mjs +0 -7
  334. package/dist/core/utils/storage.d.mts +0 -24
  335. package/dist/core/utils/storage.mjs +0 -54
  336. package/dist/kit/add/add-commands.d.mts +0 -6
  337. package/dist/kit/add/add-commands.mjs +0 -12
  338. package/dist/kit/add/add-core-file.d.mts +0 -9
  339. package/dist/kit/add/add-core-file.mjs +0 -11
  340. package/dist/kit/add/add-imports.d.mts +0 -14
  341. package/dist/kit/add/add-imports.mjs +0 -56
  342. package/dist/kit/add/add-npm.d.mts +0 -14
  343. package/dist/kit/add/add-npm.mjs +0 -23
  344. package/dist/kit/define.d.mts +0 -28
  345. package/dist/kit/define.mjs +0 -25
  346. package/dist/kit/errors.d.mts +0 -6
  347. package/dist/kit/errors.mjs +0 -11
  348. package/dist/kit/esm.d.mts +0 -11
  349. package/dist/kit/esm.mjs +0 -21
  350. package/dist/kit/fs.d.mts +0 -4
  351. package/dist/kit/fs.mjs +0 -13
  352. package/dist/kit/function-utils.d.mts +0 -27
  353. package/dist/kit/function-utils.mjs +0 -75
  354. package/dist/kit/gen.d.mts +0 -5
  355. package/dist/kit/gen.mjs +0 -26
  356. package/dist/kit/hash.d.mts +0 -4
  357. package/dist/kit/hash.mjs +0 -10
  358. package/dist/kit/index.d.mts +0 -22
  359. package/dist/kit/index.mjs +0 -23
  360. package/dist/kit/isFramework.d.mts +0 -6
  361. package/dist/kit/isFramework.mjs +0 -21
  362. package/dist/kit/logger.d.mts +0 -6
  363. package/dist/kit/logger.mjs +0 -10
  364. package/dist/kit/migration.d.mts +0 -113
  365. package/dist/kit/migration.mjs +0 -301
  366. package/dist/kit/module.d.mts +0 -14
  367. package/dist/kit/module.mjs +0 -53
  368. package/dist/kit/path.d.mts +0 -7
  369. package/dist/kit/path.mjs +0 -26
  370. package/dist/kit/preset.d.mts +0 -8
  371. package/dist/kit/preset.mjs +0 -11
  372. package/dist/kit/resolve.d.mts +0 -37
  373. package/dist/kit/resolve.mjs +0 -82
  374. package/dist/kit/template.d.mts +0 -19
  375. package/dist/kit/template.mjs +0 -91
  376. package/dist/kit/useRequest.d.mts +0 -19
  377. package/dist/kit/useRequest.mjs +0 -63
  378. package/dist/kit/utils.d.mts +0 -34
  379. package/dist/kit/utils.mjs +0 -91
  380. package/dist/package.mjs +0 -176
  381. package/dist/presets/_all.gen.d.mts +0 -6
  382. package/dist/presets/_all.gen.mjs +0 -18
  383. package/dist/presets/_resolve.d.mts +0 -12
  384. package/dist/presets/_resolve.mjs +0 -57
  385. package/dist/presets/_types.gen.d.mts +0 -8
  386. package/dist/presets/_types.gen.mjs +0 -5
  387. package/dist/presets/h3/preset.d.mts +0 -6
  388. package/dist/presets/h3/preset.mjs +0 -35
  389. package/dist/presets/hono/preset.d.mts +0 -6
  390. package/dist/presets/hono/preset.mjs +0 -30
  391. package/dist/presets/index.d.mts +0 -3
  392. package/dist/presets/index.mjs +0 -3
  393. package/dist/presets/nitro/preset.d.mts +0 -6
  394. package/dist/presets/nitro/preset.mjs +0 -37
  395. package/dist/presets/npmpackage/preset.d.mts +0 -6
  396. package/dist/presets/npmpackage/preset.mjs +0 -29
  397. package/dist/presets/nuxt/preset.d.mts +0 -6
  398. package/dist/presets/nuxt/preset.mjs +0 -41
  399. package/dist/runtime/index.d.mts +0 -4
  400. package/dist/runtime/index.mjs +0 -5
  401. package/dist/runtime/internal/config.d.mts +0 -11
  402. package/dist/runtime/internal/config.mjs +0 -97
  403. package/dist/runtime/internal/debug.d.mts +0 -6
  404. package/dist/runtime/internal/debug.mjs +0 -11
  405. package/dist/runtime/internal/defu.d.mts +0 -4
  406. package/dist/runtime/internal/defu.mjs +0 -9
  407. package/dist/runtime/internal/index.d.mts +0 -7
  408. package/dist/runtime/internal/index.mjs +0 -8
  409. package/dist/runtime/internal/nitro.d.mts +0 -6
  410. package/dist/runtime/internal/nitro.mjs +0 -36
  411. package/dist/runtime/internal/nuxt.d.mts +0 -12
  412. package/dist/runtime/internal/nuxt.mjs +0 -16
  413. package/dist/runtime/internal/ofetch.d.mts +0 -8
  414. package/dist/runtime/internal/ofetch.mjs +0 -39
  415. package/dist/runtime/internal/plugin.d.mts +0 -7
  416. package/dist/runtime/internal/plugin.mjs +0 -8
  417. package/dist/types/cliConfig.d.mts +0 -288
  418. package/dist/types/cliConfig.mjs +0 -0
  419. package/dist/types/cliHooks.d.mts +0 -142
  420. package/dist/types/cliHooks.mjs +0 -0
  421. package/dist/types/compatibility.d.mts +0 -13
  422. package/dist/types/compatibility.mjs +0 -0
  423. package/dist/types/config.d.mts +0 -46
  424. package/dist/types/config.mjs +0 -0
  425. package/dist/types/dotenv.d.mts +0 -29
  426. package/dist/types/dotenv.mjs +0 -0
  427. package/dist/types/event.d.mts +0 -63
  428. package/dist/types/event.mjs +0 -0
  429. package/dist/types/global.d.mts +0 -24
  430. package/dist/types/global.mjs +0 -0
  431. package/dist/types/helper.d.mts +0 -25
  432. package/dist/types/helper.mjs +0 -0
  433. package/dist/types/hooks.d.mts +0 -37
  434. package/dist/types/hooks.mjs +0 -0
  435. package/dist/types/index.d.mts +0 -26
  436. package/dist/types/index.mjs +0 -0
  437. package/dist/types/kits.d.mts +0 -32
  438. package/dist/types/kits.mjs +0 -0
  439. package/dist/types/middleware.d.mts +0 -31
  440. package/dist/types/middleware.mjs +0 -0
  441. package/dist/types/module.d.mts +0 -102
  442. package/dist/types/module.mjs +0 -0
  443. package/dist/types/preset.d.mts +0 -20
  444. package/dist/types/preset.mjs +0 -0
  445. package/dist/types/route.d.mts +0 -59
  446. package/dist/types/route.mjs +0 -0
  447. package/dist/types/runtime/index.d.mts +0 -5
  448. package/dist/types/runtime/index.mjs +0 -0
  449. package/dist/types/runtime/nuxt.d.mts +0 -13
  450. package/dist/types/runtime/nuxt.mjs +0 -0
  451. package/dist/types/runtime/ofetch.d.mts +0 -14
  452. package/dist/types/runtime/ofetch.mjs +0 -0
  453. package/dist/types/runtime/plugin.d.mts +0 -8
  454. package/dist/types/runtime/plugin.mjs +0 -0
  455. package/dist/types/runtime/silgi.d.mts +0 -11
  456. package/dist/types/runtime/silgi.mjs +0 -0
  457. package/dist/types/schema.d.mts +0 -86
  458. package/dist/types/schema.mjs +0 -0
  459. package/dist/types/service.d.mts +0 -102
  460. package/dist/types/service.mjs +0 -0
  461. package/dist/types/shared.d.mts +0 -19
  462. package/dist/types/shared.mjs +0 -0
  463. package/dist/types/silgi.d.mts +0 -71
  464. package/dist/types/silgi.mjs +0 -0
  465. package/dist/types/silgiCLI.d.mts +0 -118
  466. package/dist/types/silgiCLI.mjs +0 -0
  467. package/dist/types/standard-schema.d.mts +0 -61
  468. package/dist/types/standard-schema.mjs +0 -0
  469. package/dist/types/storage.d.mts +0 -30
  470. package/dist/types/storage.mjs +0 -0
  471. package/dist/types/tree-kill.d.mts +0 -18
  472. package/dist/types/tree-kill.mjs +0 -0
  473. package/lib/config.d.mts +0 -7
  474. package/lib/config.mjs +0 -5
  475. package/lib/meta.d.mts +0 -4
  476. package/lib/meta.mjs +0 -6
  477. package/lib/runtime-meta.d.mts +0 -4
  478. package/lib/runtime-meta.mjs +0 -32
@@ -0,0 +1,101 @@
1
+ import { SilgiError } from "../../../core/error.mjs";
2
+ //#region src/client/adapters/websocket/index.ts
3
+ /**
4
+ * WebSocket client link — bidirectional RPC over WebSocket.
5
+ *
6
+ * Uses the same wire protocol as the server-side ws.ts adapter:
7
+ * Client → Server: { id: string, path: string, input?: unknown }
8
+ * Server → Client: { id: string, result?: unknown, error?: unknown }
9
+ * Server → Client (stream): { id: string, data: unknown, done?: boolean }
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { WSLink } from 'silgi/client/ws'
14
+ *
15
+ * const link = new WSLink({ url: 'ws://localhost:3000/ws' })
16
+ * const client = createClient<AppRouter>(link)
17
+ * ```
18
+ */
19
+ var WSLink = class {
20
+ #url;
21
+ #WebSocket;
22
+ #ws;
23
+ #pending = /* @__PURE__ */ new Map();
24
+ #nextId = 0;
25
+ #connecting;
26
+ constructor(options) {
27
+ this.#url = typeof options.url === "string" ? options.url : options.url.href;
28
+ this.#WebSocket = options.WebSocket ?? globalThis.WebSocket;
29
+ }
30
+ async call(path, input, options) {
31
+ await this.#ensureConnected();
32
+ const id = String(this.#nextId++);
33
+ return new Promise((resolve, reject) => {
34
+ this.#pending.set(id, {
35
+ resolve,
36
+ reject
37
+ });
38
+ options.signal?.addEventListener("abort", () => {
39
+ this.#pending.delete(id);
40
+ reject(new DOMException("Aborted", "AbortError"));
41
+ }, { once: true });
42
+ const msg = {
43
+ id,
44
+ path: path.join("/"),
45
+ input
46
+ };
47
+ this.#ws.send(JSON.stringify(msg));
48
+ });
49
+ }
50
+ #ensureConnected() {
51
+ if (this.#ws?.readyState === WebSocket.OPEN) return Promise.resolve();
52
+ if (this.#connecting) return this.#connecting;
53
+ this.#connecting = new Promise((resolve, reject) => {
54
+ const ws = new this.#WebSocket(this.#url);
55
+ ws.binaryType = "arraybuffer";
56
+ ws.addEventListener("open", () => {
57
+ this.#ws = ws;
58
+ this.#connecting = void 0;
59
+ resolve();
60
+ });
61
+ ws.addEventListener("error", () => {
62
+ this.#connecting = void 0;
63
+ reject(new SilgiError("INTERNAL_SERVER_ERROR", { message: "WebSocket connection failed" }));
64
+ });
65
+ ws.addEventListener("message", (event) => {
66
+ const msg = JSON.parse(typeof event.data === "string" ? event.data : new TextDecoder().decode(event.data));
67
+ const pending = this.#pending.get(msg.id);
68
+ if (!pending) return;
69
+ if (msg.error) {
70
+ this.#pending.delete(msg.id);
71
+ const err = msg.error;
72
+ pending.reject(new SilgiError(err.code ?? "INTERNAL_SERVER_ERROR", {
73
+ status: err.status,
74
+ message: err.message,
75
+ data: err.data
76
+ }));
77
+ } else if (msg.done) {
78
+ this.#pending.delete(msg.id);
79
+ pending.resolve(msg.data);
80
+ } else if ("result" in msg) {
81
+ this.#pending.delete(msg.id);
82
+ pending.resolve(msg.result);
83
+ }
84
+ });
85
+ ws.addEventListener("close", () => {
86
+ this.#ws = void 0;
87
+ for (const [, p] of this.#pending) p.reject(new SilgiError("INTERNAL_SERVER_ERROR", { message: "WebSocket closed" }));
88
+ this.#pending.clear();
89
+ });
90
+ });
91
+ return this.#connecting;
92
+ }
93
+ /** Close the WebSocket connection and reject all pending calls */
94
+ dispose() {
95
+ this.#ws?.close();
96
+ for (const [, p] of this.#pending) p.reject(new DOMException("Link disposed", "AbortError"));
97
+ this.#pending.clear();
98
+ }
99
+ };
100
+ //#endregion
101
+ export { WSLink };
@@ -0,0 +1,37 @@
1
+ import { InferClient } from "../types.mjs";
2
+ import { SilgiError } from "../core/error.mjs";
3
+ import { ClientContext, ClientLink } from "./types.mjs";
4
+
5
+ //#region src/client/client.d.ts
6
+ /**
7
+ * Create a type-safe client from a link.
8
+ *
9
+ * ```ts
10
+ * const client = createClient<typeof appRouter>(link)
11
+ * ```
12
+ */
13
+ declare function createClient<T, TClientContext extends ClientContext = Record<never, never>>(link: ClientLink<TClientContext>): InferClient<T>;
14
+ /**
15
+ * Safe client wrapper — returns [error, data] tuples instead of throwing.
16
+ */
17
+ interface SafeResult<TOutput, TError> {
18
+ error: TError | null;
19
+ data: TOutput | undefined;
20
+ isError: boolean;
21
+ isSuccess: boolean;
22
+ }
23
+ declare function safe<TOutput, TError = unknown>(promise: Promise<TOutput>): Promise<SafeResult<TOutput, TError>>;
24
+ /**
25
+ * Create a safe client — every procedure call returns { error, data } instead of throwing.
26
+ *
27
+ * ```ts
28
+ * const safeClient = createSafeClient<typeof appRouter>(link)
29
+ * const { error, data } = await safeClient.users.list()
30
+ * if (error) console.error(error)
31
+ * ```
32
+ */
33
+ declare function createSafeClient<T, TClientContext extends ClientContext = Record<never, never>>(link: ClientLink<TClientContext>): InferSafeClient<T>;
34
+ /** Infer a safe client type where every procedure returns SafeResult */
35
+ type InferSafeClient<T> = T extends ((...args: infer A) => Promise<infer R>) ? (...args: A) => Promise<SafeResult<R, SilgiError>> : { [K in keyof T]: InferSafeClient<T[K]> };
36
+ //#endregion
37
+ export { InferSafeClient, SafeResult, createClient, createSafeClient, safe };
@@ -0,0 +1,80 @@
1
+ //#region src/client/client.ts
2
+ /**
3
+ * Create a type-safe client from a link.
4
+ *
5
+ * ```ts
6
+ * const client = createClient<typeof appRouter>(link)
7
+ * ```
8
+ */
9
+ function createClient(link) {
10
+ return createClientProxy(link, []);
11
+ }
12
+ function createClientProxy(link, path) {
13
+ const cache = /* @__PURE__ */ new Map();
14
+ const procedureClient = (input, options) => link.call(path, input, options ?? {});
15
+ return new Proxy(procedureClient, {
16
+ get(_target, prop) {
17
+ if (prop === "then") return void 0;
18
+ if (typeof prop !== "string") return void 0;
19
+ let cached = cache.get(prop);
20
+ if (!cached) {
21
+ cached = createClientProxy(link, [...path, prop]);
22
+ cache.set(prop, cached);
23
+ }
24
+ return cached;
25
+ },
26
+ apply(_target, _thisArg, args) {
27
+ return procedureClient(args[0], args[1]);
28
+ }
29
+ });
30
+ }
31
+ async function safe(promise) {
32
+ try {
33
+ return {
34
+ error: null,
35
+ data: await promise,
36
+ isError: false,
37
+ isSuccess: true
38
+ };
39
+ } catch (error) {
40
+ return {
41
+ error,
42
+ data: void 0,
43
+ isError: true,
44
+ isSuccess: false
45
+ };
46
+ }
47
+ }
48
+ /**
49
+ * Create a safe client — every procedure call returns { error, data } instead of throwing.
50
+ *
51
+ * ```ts
52
+ * const safeClient = createSafeClient<typeof appRouter>(link)
53
+ * const { error, data } = await safeClient.users.list()
54
+ * if (error) console.error(error)
55
+ * ```
56
+ */
57
+ function createSafeClient(link) {
58
+ return createSafeProxy(link, []);
59
+ }
60
+ function createSafeProxy(link, path) {
61
+ const cache = /* @__PURE__ */ new Map();
62
+ const procedureClient = (input, options) => safe(link.call(path, input, options ?? {}));
63
+ return new Proxy(procedureClient, {
64
+ get(_target, prop) {
65
+ if (prop === "then") return void 0;
66
+ if (typeof prop !== "string") return void 0;
67
+ let cached = cache.get(prop);
68
+ if (!cached) {
69
+ cached = createSafeProxy(link, [...path, prop]);
70
+ cache.set(prop, cached);
71
+ }
72
+ return cached;
73
+ },
74
+ apply(_target, _thisArg, args) {
75
+ return procedureClient(args[0], args[1]);
76
+ }
77
+ });
78
+ }
79
+ //#endregion
80
+ export { createClient, createSafeClient, safe };
@@ -0,0 +1,50 @@
1
+ //#region src/client/consume.d.ts
2
+ /**
3
+ * Client-side SSE/streaming consumption utilities.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const iterator = await client.events.subscribe()
8
+ * await consumeIterator(iterator, {
9
+ * onEvent: (data) => console.log('Event:', data),
10
+ * onError: (err) => console.error('Error:', err),
11
+ * onFinish: () => console.log('Stream ended'),
12
+ * })
13
+ * ```
14
+ */
15
+ interface ConsumeOptions<T> {
16
+ /** Called for each event value */
17
+ onEvent?: (data: T) => void | Promise<void>;
18
+ /** Called when an error occurs */
19
+ onError?: (error: Error) => void;
20
+ /** Called when the stream ends (success or error) */
21
+ onFinish?: () => void;
22
+ /** AbortSignal to cancel consumption */
23
+ signal?: AbortSignal;
24
+ }
25
+ /**
26
+ * Consume an async iterator with lifecycle callbacks.
27
+ * Returns the final value (if any) when the iterator completes.
28
+ */
29
+ declare function consumeIterator<T>(iterator: AsyncIterableIterator<T>, options?: ConsumeOptions<T>): Promise<void>;
30
+ /**
31
+ * Map values from an async iterator, producing a new iterator.
32
+ */
33
+ declare function mapIterator<T, U>(iterator: AsyncIterableIterator<T>, fn: (value: T) => U | Promise<U>): AsyncIterableIterator<U>;
34
+ interface ReconnectOptions<T> extends ConsumeOptions<T> {
35
+ /** Factory to create a new iterator on reconnection */
36
+ connect: (lastEventId?: string) => AsyncIterableIterator<T> | Promise<AsyncIterableIterator<T>>;
37
+ /** Maximum reconnection attempts (default: Infinity) */
38
+ maxReconnects?: number;
39
+ /** Delay between reconnections in ms (default: 1000) */
40
+ reconnectDelay?: number;
41
+ /** Called on each reconnection attempt */
42
+ onReconnect?: (attempt: number) => void;
43
+ }
44
+ /**
45
+ * Consume an iterator with automatic reconnection on failure.
46
+ * Uses lastEventId for resumption if available.
47
+ */
48
+ declare function consumeWithReconnect<T>(options: ReconnectOptions<T>): Promise<void>;
49
+ //#endregion
50
+ export { ConsumeOptions, ReconnectOptions, consumeIterator, consumeWithReconnect, mapIterator };
@@ -0,0 +1,66 @@
1
+ //#region src/client/consume.ts
2
+ /**
3
+ * Consume an async iterator with lifecycle callbacks.
4
+ * Returns the final value (if any) when the iterator completes.
5
+ */
6
+ async function consumeIterator(iterator, options = {}) {
7
+ const { onEvent, onError, onFinish, signal } = options;
8
+ try {
9
+ while (true) {
10
+ if (signal?.aborted) {
11
+ await iterator.return?.();
12
+ break;
13
+ }
14
+ const result = await iterator.next();
15
+ if (result.done) break;
16
+ if (onEvent) await onEvent(result.value);
17
+ }
18
+ } catch (error) {
19
+ onError?.(error instanceof Error ? error : new Error(String(error)));
20
+ } finally {
21
+ onFinish?.();
22
+ }
23
+ }
24
+ /**
25
+ * Map values from an async iterator, producing a new iterator.
26
+ */
27
+ async function* mapIterator(iterator, fn) {
28
+ try {
29
+ for await (const value of iterator) yield await fn(value);
30
+ } finally {
31
+ await iterator.return?.();
32
+ }
33
+ }
34
+ /**
35
+ * Consume an iterator with automatic reconnection on failure.
36
+ * Uses lastEventId for resumption if available.
37
+ */
38
+ async function consumeWithReconnect(options) {
39
+ const { connect, maxReconnects = Infinity, reconnectDelay = 1e3, onReconnect, signal, ...consumeOpts } = options;
40
+ let lastEventId;
41
+ let attempt = 0;
42
+ while (attempt <= maxReconnects) {
43
+ if (signal?.aborted) break;
44
+ try {
45
+ const iterator = await connect(lastEventId);
46
+ attempt = 0;
47
+ await consumeIterator(iterator, {
48
+ ...consumeOpts,
49
+ signal,
50
+ onEvent: async (data) => {
51
+ if (data && typeof data === "object" && "id" in data) lastEventId = String(data.id);
52
+ if (consumeOpts.onEvent) await consumeOpts.onEvent(data);
53
+ }
54
+ });
55
+ break;
56
+ } catch {
57
+ attempt++;
58
+ if (attempt > maxReconnects || signal?.aborted) break;
59
+ onReconnect?.(attempt);
60
+ await new Promise((resolve) => setTimeout(resolve, reconnectDelay));
61
+ }
62
+ }
63
+ consumeOpts.onFinish?.();
64
+ }
65
+ //#endregion
66
+ export { consumeIterator, consumeWithReconnect, mapIterator };
@@ -0,0 +1,16 @@
1
+ import { ClientContext, ClientLink, ClientOptions } from "./types.mjs";
2
+
3
+ //#region src/client/dynamic-link.d.ts
4
+ type LinkSelector<TClientContext extends ClientContext = ClientContext> = (path: readonly string[], input: unknown, options: ClientOptions<TClientContext>) => ClientLink<TClientContext> | Promise<ClientLink<TClientContext>>;
5
+ /**
6
+ * A link that delegates to other links based on a selector function.
7
+ * The selector runs on every call, so it can use dynamic state.
8
+ * Supports both sync and async selectors (e.g. lazy-importing a link).
9
+ */
10
+ declare class DynamicLink<TClientContext extends ClientContext = ClientContext> implements ClientLink<TClientContext> {
11
+ #private;
12
+ constructor(selector: LinkSelector<TClientContext>);
13
+ call(path: readonly string[], input: unknown, options: ClientOptions<TClientContext>): Promise<unknown>;
14
+ }
15
+ //#endregion
16
+ export { DynamicLink, LinkSelector };
@@ -0,0 +1,19 @@
1
+ //#region src/client/dynamic-link.ts
2
+ /**
3
+ * A link that delegates to other links based on a selector function.
4
+ * The selector runs on every call, so it can use dynamic state.
5
+ * Supports both sync and async selectors (e.g. lazy-importing a link).
6
+ */
7
+ var DynamicLink = class {
8
+ #selector;
9
+ constructor(selector) {
10
+ this.#selector = selector;
11
+ }
12
+ call(path, input, options) {
13
+ const result = this.#selector(path, input, options);
14
+ if (result && typeof result.then === "function") return result.then((link) => link.call(path, input, options));
15
+ return result.call(path, input, options);
16
+ }
17
+ };
18
+ //#endregion
19
+ export { DynamicLink };
@@ -0,0 +1,6 @@
1
+ import { SilgiError, SilgiErrorCode, SilgiErrorJSON, isDefinedError } from "../core/error.mjs";
2
+ import { Client, ClientContext, ClientLink, ClientOptions, ClientRest, InferClientInputs, InferClientOutputs, NestedClient } from "./types.mjs";
3
+ import { InferSafeClient, SafeResult, createClient, createSafeClient, safe } from "./client.mjs";
4
+ import { DynamicLink, LinkSelector } from "./dynamic-link.mjs";
5
+ import { ClientInterceptors, withInterceptors } from "./interceptor.mjs";
6
+ export { type Client, type ClientContext, type ClientInterceptors, type ClientLink, type ClientOptions, type ClientRest, DynamicLink, type InferClientInputs, type InferClientOutputs, type InferSafeClient, type LinkSelector, type NestedClient, type SafeResult, SilgiError, type SilgiErrorCode, type SilgiErrorJSON, createClient, createSafeClient, isDefinedError, safe, withInterceptors };
@@ -0,0 +1,5 @@
1
+ import { SilgiError, isDefinedError } from "../core/error.mjs";
2
+ import { createClient, createSafeClient, safe } from "./client.mjs";
3
+ import { DynamicLink } from "./dynamic-link.mjs";
4
+ import { withInterceptors } from "./interceptor.mjs";
5
+ export { DynamicLink, SilgiError, createClient, createSafeClient, isDefinedError, safe, withInterceptors };
@@ -0,0 +1,31 @@
1
+ import { ClientContext, ClientLink, ClientOptions } from "./types.mjs";
2
+
3
+ //#region src/client/interceptor.d.ts
4
+ interface ClientInterceptors<TClientContext extends ClientContext = ClientContext> {
5
+ /** Called before every request. Can modify input or options. */
6
+ onRequest?: (event: {
7
+ path: readonly string[];
8
+ input: unknown;
9
+ options: ClientOptions<TClientContext>;
10
+ }) => void | Promise<void>;
11
+ /** Called after a successful response. */
12
+ onResponse?: (event: {
13
+ path: readonly string[];
14
+ input: unknown;
15
+ output: unknown;
16
+ durationMs: number;
17
+ }) => void | Promise<void>;
18
+ /** Called when a request fails. */
19
+ onError?: (event: {
20
+ path: readonly string[];
21
+ input: unknown;
22
+ error: unknown;
23
+ }) => void | Promise<void>;
24
+ }
25
+ /**
26
+ * Wrap a ClientLink with interceptor hooks.
27
+ * Returns a new link that calls the interceptors around the original.
28
+ */
29
+ declare function withInterceptors<TClientContext extends ClientContext = ClientContext>(link: ClientLink<TClientContext>, interceptors: ClientInterceptors<TClientContext>): ClientLink<TClientContext>;
30
+ //#endregion
31
+ export { ClientInterceptors, withInterceptors };
@@ -0,0 +1,34 @@
1
+ //#region src/client/interceptor.ts
2
+ /**
3
+ * Wrap a ClientLink with interceptor hooks.
4
+ * Returns a new link that calls the interceptors around the original.
5
+ */
6
+ function withInterceptors(link, interceptors) {
7
+ return { async call(path, input, options) {
8
+ if (interceptors.onRequest) await interceptors.onRequest({
9
+ path,
10
+ input,
11
+ options
12
+ });
13
+ const t0 = performance.now();
14
+ try {
15
+ const output = await link.call(path, input, options);
16
+ if (interceptors.onResponse) await interceptors.onResponse({
17
+ path,
18
+ input,
19
+ output,
20
+ durationMs: performance.now() - t0
21
+ });
22
+ return output;
23
+ } catch (error) {
24
+ if (interceptors.onError) await interceptors.onError({
25
+ path,
26
+ input,
27
+ error
28
+ });
29
+ throw error;
30
+ }
31
+ } };
32
+ }
33
+ //#endregion
34
+ export { withInterceptors };
@@ -0,0 +1,29 @@
1
+ import { ClientContext, ClientLink, ClientOptions } from "./types.mjs";
2
+
3
+ //#region src/client/openapi.d.ts
4
+ interface OpenAPILinkOptions {
5
+ /** Base URL of the API */
6
+ url: string;
7
+ /** OpenAPI 3.x specification object (parsed JSON) */
8
+ spec?: Record<string, unknown>;
9
+ /** Default headers */
10
+ headers?: Record<string, string> | (() => Record<string, string>);
11
+ /** Custom fetch implementation */
12
+ fetch?: typeof globalThis.fetch;
13
+ }
14
+ /**
15
+ * A ClientLink that makes REST requests to an OpenAPI endpoint.
16
+ *
17
+ * Maps procedure paths to REST paths:
18
+ * - `client.users.list({ limit: 10 })` → `GET /users/list?limit=10` or `POST /users/list`
19
+ *
20
+ * Without a spec, it defaults to POST requests with JSON body.
21
+ * With a spec, it uses the correct HTTP method and parameter placement.
22
+ */
23
+ declare class OpenAPILink<TCtx extends ClientContext = ClientContext> implements ClientLink<TCtx> {
24
+ #private;
25
+ constructor(options: OpenAPILinkOptions);
26
+ call(path: readonly string[], input: unknown, options: ClientOptions<TCtx>): Promise<unknown>;
27
+ }
28
+ //#endregion
29
+ export { OpenAPILink, OpenAPILinkOptions };
@@ -0,0 +1,89 @@
1
+ import { SilgiError } from "../core/error.mjs";
2
+ //#region src/client/openapi.ts
3
+ /**
4
+ * OpenAPI Client Link — consume any OpenAPI endpoint as a Silgi client.
5
+ *
6
+ * Unlike RPCLink (which uses Silgi's wire protocol), OpenAPILink sends
7
+ * standard REST requests based on an OpenAPI spec.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { OpenAPILink } from "silgi/client/openapi"
12
+ * import { createClient } from "silgi/client"
13
+ *
14
+ * const link = new OpenAPILink({
15
+ * url: "https://api.example.com",
16
+ * spec: await fetch("/api/openapi.json").then(r => r.json()),
17
+ * })
18
+ *
19
+ * const client = createClient<ExternalAPI>(link)
20
+ * const users = await client.users.list({ limit: 10 })
21
+ * ```
22
+ */
23
+ /**
24
+ * A ClientLink that makes REST requests to an OpenAPI endpoint.
25
+ *
26
+ * Maps procedure paths to REST paths:
27
+ * - `client.users.list({ limit: 10 })` → `GET /users/list?limit=10` or `POST /users/list`
28
+ *
29
+ * Without a spec, it defaults to POST requests with JSON body.
30
+ * With a spec, it uses the correct HTTP method and parameter placement.
31
+ */
32
+ var OpenAPILink = class {
33
+ #url;
34
+ #spec;
35
+ #headers;
36
+ #fetch;
37
+ constructor(options) {
38
+ this.#url = options.url.replace(/\/$/, "");
39
+ this.#spec = options.spec;
40
+ this.#headers = options.headers ?? {};
41
+ this.#fetch = options.fetch ?? globalThis.fetch;
42
+ }
43
+ async call(path, input, options) {
44
+ const endpoint = "/" + path.join("/");
45
+ const url = this.#url + endpoint;
46
+ const headers = {
47
+ "content-type": "application/json",
48
+ ...typeof this.#headers === "function" ? this.#headers() : this.#headers
49
+ };
50
+ let method = "POST";
51
+ if (this.#spec) {
52
+ const paths = this.#spec.paths;
53
+ if (paths?.[endpoint]) {
54
+ if (paths[endpoint].get) method = "GET";
55
+ else if (paths[endpoint].post) method = "POST";
56
+ else if (paths[endpoint].put) method = "PUT";
57
+ else if (paths[endpoint].patch) method = "PATCH";
58
+ else if (paths[endpoint].delete) method = "DELETE";
59
+ }
60
+ }
61
+ let requestUrl = url;
62
+ let body;
63
+ if (method === "GET" || method === "HEAD") {
64
+ if (input && typeof input === "object") {
65
+ const params = new URLSearchParams();
66
+ for (const [k, v] of Object.entries(input)) if (v !== void 0) params.set(k, String(v));
67
+ const qs = params.toString();
68
+ if (qs) requestUrl = `${url}?${qs}`;
69
+ }
70
+ } else body = input !== void 0 ? JSON.stringify(input) : void 0;
71
+ const response = await this.#fetch(requestUrl, {
72
+ method,
73
+ headers,
74
+ body,
75
+ signal: options.signal
76
+ });
77
+ if (!response.ok) {
78
+ const errorBody = await response.json().catch(() => null);
79
+ throw new SilgiError(errorBody?.code ?? `HTTP_${response.status}`, {
80
+ status: response.status,
81
+ message: errorBody?.message ?? response.statusText,
82
+ data: errorBody
83
+ });
84
+ }
85
+ return response.json();
86
+ }
87
+ };
88
+ //#endregion
89
+ export { OpenAPILink };
@@ -0,0 +1,26 @@
1
+ import { ClientContext, ClientLink, ClientOptions } from "../types.mjs";
2
+
3
+ //#region src/client/plugins/batch.d.ts
4
+ interface BatchLinkOptions {
5
+ /** The underlying link to send the batch through */
6
+ link: ClientLink;
7
+ /** Batch endpoint path (default: /__batch__) */
8
+ path?: string;
9
+ /** Maximum batch size (default: 20) */
10
+ maxSize?: number;
11
+ /** URL for the batch endpoint */
12
+ url: string | URL;
13
+ /**
14
+ * Enable streaming mode — server streams individual responses progressively
15
+ * via newline-delimited JSON instead of waiting for all to complete.
16
+ * @default false
17
+ */
18
+ streaming?: boolean;
19
+ }
20
+ declare class BatchLink<TClientContext extends ClientContext = ClientContext> implements ClientLink<TClientContext> {
21
+ #private;
22
+ constructor(options: BatchLinkOptions);
23
+ call(path: readonly string[], input: unknown, options: ClientOptions<TClientContext>): Promise<unknown>;
24
+ }
25
+ //#endregion
26
+ export { BatchLink, BatchLinkOptions };
@@ -0,0 +1,64 @@
1
+ //#region src/client/plugins/batch.ts
2
+ var BatchLink = class {
3
+ #link;
4
+ #batchPath;
5
+ #maxSize;
6
+ #pending = [];
7
+ #scheduled = false;
8
+ constructor(options) {
9
+ this.#link = options.link;
10
+ this.#batchPath = options.path ?? "/__batch__";
11
+ this.#maxSize = options.maxSize ?? 20;
12
+ }
13
+ call(path, input, options) {
14
+ return new Promise((resolve, reject) => {
15
+ this.#pending.push({
16
+ path,
17
+ input,
18
+ options,
19
+ resolve,
20
+ reject
21
+ });
22
+ if (!this.#scheduled) {
23
+ this.#scheduled = true;
24
+ queueMicrotask(() => this.#flush());
25
+ }
26
+ });
27
+ }
28
+ async #flush() {
29
+ this.#scheduled = false;
30
+ const batch = this.#pending.splice(0);
31
+ if (batch.length === 0) return;
32
+ const chunks = [];
33
+ for (let i = 0; i < batch.length; i += this.#maxSize) chunks.push(batch.slice(i, i + this.#maxSize));
34
+ await Promise.all(chunks.map((chunk) => this.#sendChunk(chunk)));
35
+ }
36
+ async #sendChunk(chunk) {
37
+ const batchBody = chunk.map((call) => ({
38
+ path: "/" + call.path.join("/"),
39
+ method: "POST",
40
+ body: call.input
41
+ }));
42
+ try {
43
+ const responses = await this.#link.call([this.#batchPath.slice(1)], batchBody, { signal: chunk.length === 1 ? chunk[0].options.signal : AbortSignal.any(chunk.map((c) => c.options.signal).filter(Boolean)) });
44
+ if (!Array.isArray(responses)) {
45
+ for (const call of chunk) call.reject(/* @__PURE__ */ new Error("Invalid batch response"));
46
+ return;
47
+ }
48
+ for (const response of responses) {
49
+ const call = chunk[response.index];
50
+ if (!call) continue;
51
+ if (response.status >= 400) call.reject(response.body ?? /* @__PURE__ */ new Error(`HTTP ${response.status}`));
52
+ else call.resolve(response.body);
53
+ }
54
+ for (let i = 0; i < chunk.length; i++) {
55
+ const call = chunk[i];
56
+ if (!responses.some((r) => r.index === i)) call.reject(/* @__PURE__ */ new Error("No response in batch"));
57
+ }
58
+ } catch (error) {
59
+ for (const call of chunk) call.reject(error);
60
+ }
61
+ }
62
+ };
63
+ //#endregion
64
+ export { BatchLink };