silgi 0.43.29 → 0.50.0

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 +314 -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,24 @@
1
+ import { ClientContext, ClientLink } from "../types.mjs";
2
+
3
+ //#region src/client/plugins/circuit-breaker.d.ts
4
+ type CircuitState = 'closed' | 'open' | 'half-open';
5
+ declare class CircuitBreakerOpenError extends Error {
6
+ readonly state: CircuitState;
7
+ constructor();
8
+ }
9
+ interface CircuitBreakerOptions {
10
+ /** Number of consecutive failures before opening (default: 5) */
11
+ failureThreshold?: number;
12
+ /** Time in ms to wait before moving to half-open (default: 30000) */
13
+ resetTimeout?: number;
14
+ /** Called when circuit state changes */
15
+ onStateChange?: (state: CircuitState, info: {
16
+ failures: number;
17
+ }) => void;
18
+ }
19
+ declare function withCircuitBreaker<TClientContext extends ClientContext>(link: ClientLink<TClientContext>, options?: CircuitBreakerOptions): ClientLink<TClientContext> & {
20
+ getState: () => CircuitState;
21
+ reset: () => void;
22
+ };
23
+ //#endregion
24
+ export { CircuitBreakerOpenError, CircuitBreakerOptions, CircuitState, withCircuitBreaker };
@@ -0,0 +1,60 @@
1
+ //#region src/client/plugins/circuit-breaker.ts
2
+ var CircuitBreakerOpenError = class extends Error {
3
+ state = "open";
4
+ constructor() {
5
+ super("Circuit breaker is open — requests are blocked. Try again later.");
6
+ this.name = "CircuitBreakerOpenError";
7
+ }
8
+ };
9
+ function withCircuitBreaker(link, options = {}) {
10
+ const threshold = options.failureThreshold ?? 5;
11
+ const resetTimeout = options.resetTimeout ?? 3e4;
12
+ let state = "closed";
13
+ let failures = 0;
14
+ let openedAt = 0;
15
+ let probeSent = false;
16
+ function setState(newState) {
17
+ if (state !== newState) {
18
+ state = newState;
19
+ if (newState !== "half-open") probeSent = false;
20
+ options.onStateChange?.(state, { failures });
21
+ }
22
+ }
23
+ function recordSuccess() {
24
+ failures = 0;
25
+ setState("closed");
26
+ }
27
+ function recordFailure() {
28
+ failures++;
29
+ if (failures >= threshold) {
30
+ openedAt = Date.now();
31
+ setState("open");
32
+ }
33
+ }
34
+ return {
35
+ async call(path, input, callOptions) {
36
+ if (state === "open") if (Date.now() - openedAt >= resetTimeout) setState("half-open");
37
+ else throw new CircuitBreakerOpenError();
38
+ if (state === "half-open") {
39
+ if (probeSent) throw new CircuitBreakerOpenError();
40
+ probeSent = true;
41
+ }
42
+ try {
43
+ const result = await link.call(path, input, callOptions);
44
+ recordSuccess();
45
+ return result;
46
+ } catch (error) {
47
+ recordFailure();
48
+ throw error;
49
+ }
50
+ },
51
+ getState: () => state,
52
+ reset: () => {
53
+ failures = 0;
54
+ probeSent = false;
55
+ setState("closed");
56
+ }
57
+ };
58
+ }
59
+ //#endregion
60
+ export { CircuitBreakerOpenError, withCircuitBreaker };
@@ -0,0 +1,13 @@
1
+ import { ClientContext, ClientLink } from "../types.mjs";
2
+
3
+ //#region src/client/plugins/csrf.d.ts
4
+ interface CSRFLinkOptions {
5
+ headerName?: string;
6
+ headerValue?: string;
7
+ }
8
+ /**
9
+ * Wrap a link to automatically inject the CSRF header on every request.
10
+ */
11
+ declare function withCSRF<TClientContext extends ClientContext>(link: ClientLink<TClientContext>, options?: CSRFLinkOptions): ClientLink<TClientContext>;
12
+ //#endregion
13
+ export { CSRFLinkOptions, withCSRF };
@@ -0,0 +1,20 @@
1
+ //#region src/client/plugins/csrf.ts
2
+ /**
3
+ * Wrap a link to automatically inject the CSRF header on every request.
4
+ */
5
+ function withCSRF(link, options = {}) {
6
+ const headerName = options.headerName ?? "x-csrf-token";
7
+ const headerValue = options.headerValue ?? "silgi";
8
+ return { call(path, input, callOptions) {
9
+ const enhancedOptions = {
10
+ ...callOptions,
11
+ headers: {
12
+ ...callOptions.headers,
13
+ [headerName]: headerValue
14
+ }
15
+ };
16
+ return link.call(path, input, enhancedOptions);
17
+ } };
18
+ }
19
+ //#endregion
20
+ export { withCSRF };
@@ -0,0 +1,10 @@
1
+ import { ClientContext, ClientLink } from "../types.mjs";
2
+
3
+ //#region src/client/plugins/dedupe.d.ts
4
+ interface DedupeOptions {
5
+ /** Custom key function. Default: JSON.stringify(path + input) */
6
+ keyFn?: (path: readonly string[], input: unknown) => string;
7
+ }
8
+ declare function withDedupe<TClientContext extends ClientContext>(link: ClientLink<TClientContext>, options?: DedupeOptions): ClientLink<TClientContext>;
9
+ //#endregion
10
+ export { DedupeOptions, withDedupe };
@@ -0,0 +1,28 @@
1
+ import { stringifyJSON } from "../../core/utils.mjs";
2
+ //#region src/client/plugins/dedupe.ts
3
+ /**
4
+ * Dedupe Plugin — collapses identical concurrent requests into one.
5
+ *
6
+ * If two calls have the same path and serialized input within
7
+ * the same microtask, only one actual request is sent.
8
+ * All callers receive the same response.
9
+ */
10
+ function withDedupe(link, options = {}) {
11
+ const inflight = /* @__PURE__ */ new Map();
12
+ const keyFn = options.keyFn ?? ((path, input) => stringifyJSON({
13
+ path,
14
+ input
15
+ }));
16
+ return { call(path, input, callOptions) {
17
+ const key = keyFn(path, input);
18
+ const existing = inflight.get(key);
19
+ if (existing) return existing;
20
+ const promise = link.call(path, input, callOptions).finally(() => {
21
+ inflight.delete(key);
22
+ });
23
+ inflight.set(key, promise);
24
+ return promise;
25
+ } };
26
+ }
27
+ //#endregion
28
+ export { withDedupe };
@@ -0,0 +1,8 @@
1
+ import { RetryOptions, withRetry } from "./retry.mjs";
2
+ import { CircuitBreakerOpenError, CircuitBreakerOptions, CircuitState, withCircuitBreaker } from "./circuit-breaker.mjs";
3
+ import { TimeoutOptions, withTimeout } from "./timeout.mjs";
4
+ import { BatchLink, BatchLinkOptions } from "./batch.mjs";
5
+ import { DedupeOptions, withDedupe } from "./dedupe.mjs";
6
+ import { CSRFLinkOptions, withCSRF } from "./csrf.mjs";
7
+ import { ClientOtelOptions, withOtel } from "./otel.mjs";
8
+ export { BatchLink, type BatchLinkOptions, type CSRFLinkOptions, CircuitBreakerOpenError, type CircuitBreakerOptions, type CircuitState, type ClientOtelOptions, type DedupeOptions, type RetryOptions, type TimeoutOptions, withCSRF, withCircuitBreaker, withDedupe, withOtel, withRetry, withTimeout };
@@ -0,0 +1,8 @@
1
+ import { withRetry } from "./retry.mjs";
2
+ import { CircuitBreakerOpenError, withCircuitBreaker } from "./circuit-breaker.mjs";
3
+ import { withTimeout } from "./timeout.mjs";
4
+ import { BatchLink } from "./batch.mjs";
5
+ import { withDedupe } from "./dedupe.mjs";
6
+ import { withCSRF } from "./csrf.mjs";
7
+ import { withOtel } from "./otel.mjs";
8
+ export { BatchLink, CircuitBreakerOpenError, withCSRF, withCircuitBreaker, withDedupe, withOtel, withRetry, withTimeout };
@@ -0,0 +1,12 @@
1
+ import { ClientContext, ClientLink } from "../types.mjs";
2
+ import { Tracer } from "../../plugins/otel.mjs";
3
+
4
+ //#region src/client/plugins/otel.d.ts
5
+ interface ClientOtelOptions {
6
+ tracer: Tracer;
7
+ /** Span name prefix (default: 'rpc.client') */
8
+ spanName?: string;
9
+ }
10
+ declare function withOtel<TClientContext extends ClientContext>(link: ClientLink<TClientContext>, options: ClientOtelOptions): ClientLink<TClientContext>;
11
+ //#endregion
12
+ export { ClientOtelOptions, withOtel };
@@ -0,0 +1,27 @@
1
+ //#region src/client/plugins/otel.ts
2
+ function withOtel(link, options) {
3
+ const { tracer, spanName = "rpc.client" } = options;
4
+ return { async call(path, input, callOptions) {
5
+ const rpcMethod = path.join(".");
6
+ const span = tracer.startSpan(`${spanName}/${rpcMethod}`, { attributes: {
7
+ "rpc.system": "silgi",
8
+ "rpc.method": rpcMethod
9
+ } });
10
+ try {
11
+ const result = await link.call(path, input, callOptions);
12
+ span.setStatus({ code: 0 });
13
+ return result;
14
+ } catch (error) {
15
+ span.setStatus({
16
+ code: 2,
17
+ message: String(error)
18
+ });
19
+ span.addEvent("exception", { "exception.message": error instanceof Error ? error.message : String(error) });
20
+ throw error;
21
+ } finally {
22
+ span.end();
23
+ }
24
+ } };
25
+ }
26
+ //#endregion
27
+ export { withOtel };
@@ -0,0 +1,34 @@
1
+ import { ClientContext, ClientLink } from "../types.mjs";
2
+
3
+ //#region src/client/plugins/retry.d.ts
4
+ interface RetryOptions {
5
+ /** Maximum number of retry attempts (default: 3) */
6
+ maxRetries?: number;
7
+ /**
8
+ * Base delay in ms for exponential backoff (default: 1000).
9
+ * Actual delay: `baseDelay * 2^attempt + jitter`
10
+ * Or pass a function: `(attempt: number) => delayMs`
11
+ */
12
+ baseDelay?: number | ((attempt: number) => number);
13
+ /** Add random jitter 0-25% to prevent thundering herd (default: true) */
14
+ jitter?: boolean;
15
+ /**
16
+ * HTTP status codes to retry on (default: [408, 429, 500, 502, 503, 504]).
17
+ * Network errors (no status) are always retried unless shouldRetry returns false.
18
+ */
19
+ retryOn?: number[];
20
+ /** Custom retry predicate — return false to stop retrying */
21
+ shouldRetry?: (error: unknown, attempt: number) => boolean;
22
+ /** Called before each retry attempt */
23
+ onRetry?: (info: {
24
+ attempt: number;
25
+ delay: number;
26
+ error: unknown;
27
+ path: readonly string[];
28
+ }) => void;
29
+ /** Respect Retry-After header from 429/503 responses (default: true) */
30
+ respectRetryAfter?: boolean;
31
+ }
32
+ declare function withRetry<TClientContext extends ClientContext>(link: ClientLink<TClientContext>, options?: RetryOptions): ClientLink<TClientContext>;
33
+ //#endregion
34
+ export { RetryOptions, withRetry };
@@ -0,0 +1,79 @@
1
+ //#region src/client/plugins/retry.ts
2
+ const DEFAULT_RETRY_CODES = [
3
+ 408,
4
+ 429,
5
+ 500,
6
+ 502,
7
+ 503,
8
+ 504
9
+ ];
10
+ function getStatusFromError(error) {
11
+ if (error && typeof error === "object") {
12
+ const e = error;
13
+ if (typeof e.status === "number") return e.status;
14
+ if (typeof e.statusCode === "number") return e.statusCode;
15
+ if (e.response && typeof e.response === "object") {
16
+ const r = e.response;
17
+ if (typeof r.status === "number") return r.status;
18
+ }
19
+ }
20
+ }
21
+ /** Parse Retry-After header value — returns delay in ms, or undefined */
22
+ function parseRetryAfter(error) {
23
+ if (!error || typeof error !== "object") return void 0;
24
+ const e = error;
25
+ const headers = e.response?.headers ?? e.headers;
26
+ if (!headers) return void 0;
27
+ const value = typeof headers.get === "function" ? headers.get("retry-after") : headers["retry-after"];
28
+ if (!value) return void 0;
29
+ const seconds = Number(value);
30
+ if (!Number.isNaN(seconds)) return seconds * 1e3;
31
+ const date = Date.parse(value);
32
+ if (!Number.isNaN(date)) return Math.max(0, date - Date.now());
33
+ }
34
+ function withRetry(link, options = {}) {
35
+ const maxRetries = options.maxRetries ?? 3;
36
+ const baseDelay = options.baseDelay ?? 1e3;
37
+ const useJitter = options.jitter ?? true;
38
+ const retryCodes = new Set(options.retryOn ?? DEFAULT_RETRY_CODES);
39
+ const shouldRetry = options.shouldRetry;
40
+ const onRetry = options.onRetry;
41
+ const respectRetryAfter = options.respectRetryAfter ?? true;
42
+ function getDelay(attempt) {
43
+ const base = typeof baseDelay === "function" ? baseDelay(attempt) : baseDelay * 2 ** attempt;
44
+ const jitter = useJitter ? base * Math.random() * .25 : 0;
45
+ return Math.round(base + jitter);
46
+ }
47
+ function isRetryable(error, attempt) {
48
+ if (shouldRetry && !shouldRetry(error, attempt)) return false;
49
+ const status = getStatusFromError(error);
50
+ if (status === void 0) return true;
51
+ return retryCodes.has(status);
52
+ }
53
+ return { async call(path, input, callOptions) {
54
+ for (let attempt = 0; attempt <= maxRetries; attempt++) try {
55
+ return await link.call(path, input, callOptions);
56
+ } catch (error) {
57
+ if (attempt === maxRetries) throw error;
58
+ if (callOptions.signal?.aborted) throw error;
59
+ if (!isRetryable(error, attempt)) throw error;
60
+ const delay = (respectRetryAfter ? parseRetryAfter(error) : void 0) ?? getDelay(attempt);
61
+ onRetry?.({
62
+ attempt: attempt + 1,
63
+ delay,
64
+ error,
65
+ path
66
+ });
67
+ await new Promise((resolve, reject) => {
68
+ const timer = setTimeout(resolve, delay);
69
+ callOptions.signal?.addEventListener("abort", () => {
70
+ clearTimeout(timer);
71
+ reject(callOptions.signal.reason);
72
+ }, { once: true });
73
+ });
74
+ }
75
+ throw new Error("Retry exhausted");
76
+ } };
77
+ }
78
+ //#endregion
79
+ export { withRetry };
@@ -0,0 +1,10 @@
1
+ import { ClientContext, ClientLink } from "../types.mjs";
2
+
3
+ //#region src/client/plugins/timeout.d.ts
4
+ interface TimeoutOptions {
5
+ /** Timeout in ms (default: 30000) */
6
+ timeout?: number;
7
+ }
8
+ declare function withTimeout<TClientContext extends ClientContext>(link: ClientLink<TClientContext>, options?: TimeoutOptions): ClientLink<TClientContext>;
9
+ //#endregion
10
+ export { TimeoutOptions, withTimeout };
@@ -0,0 +1,14 @@
1
+ //#region src/client/plugins/timeout.ts
2
+ function withTimeout(link, options = {}) {
3
+ const timeout = options.timeout ?? 3e4;
4
+ return { async call(path, input, callOptions) {
5
+ const timeoutSignal = AbortSignal.timeout(timeout);
6
+ const signal = callOptions.signal ? AbortSignal.any([callOptions.signal, timeoutSignal]) : timeoutSignal;
7
+ return link.call(path, input, {
8
+ ...callOptions,
9
+ signal
10
+ });
11
+ } };
12
+ }
13
+ //#endregion
14
+ export { withTimeout };
@@ -0,0 +1,16 @@
1
+ import { InferClient, RouterDef } from "../types.mjs";
2
+
3
+ //#region src/client/server.d.ts
4
+ interface ServerClientOptions<TCtx extends Record<string, unknown>> {
5
+ /** Context factory — called for every procedure call */
6
+ context: () => TCtx | Promise<TCtx>;
7
+ }
8
+ /**
9
+ * Create a type-safe client that calls procedures directly in-process.
10
+ *
11
+ * No HTTP, no serialization, no network — just compiled pipeline execution.
12
+ * Uses the same compiled handlers as serve() and handler().
13
+ */
14
+ declare function createServerClient<TRouter extends RouterDef, TCtx extends Record<string, unknown>>(router: TRouter, options: ServerClientOptions<TCtx>): InferClient<TRouter>;
15
+ //#endregion
16
+ export { ServerClientOptions, createServerClient };
@@ -0,0 +1,59 @@
1
+ import { compileRouter } from "../compile.mjs";
2
+ //#region src/client/server.ts
3
+ /**
4
+ * Server-side client — call procedures directly without HTTP.
5
+ *
6
+ * Useful for SSR, server components, and testing where you want the
7
+ * same typed client interface but without network overhead.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { createServerClient } from "silgi/client/server"
12
+ *
13
+ * const client = createServerClient(appRouter, {
14
+ * context: () => ({ db: getDB() }),
15
+ * })
16
+ *
17
+ * // Same typed API as the HTTP client — but runs in-process
18
+ * const users = await client.users.list({ limit: 10 })
19
+ * ```
20
+ */
21
+ /**
22
+ * Create a type-safe client that calls procedures directly in-process.
23
+ *
24
+ * No HTTP, no serialization, no network — just compiled pipeline execution.
25
+ * Uses the same compiled handlers as serve() and handler().
26
+ */
27
+ function createServerClient(router, options) {
28
+ return createServerProxy(compileRouter(router), options.context, []);
29
+ }
30
+ function createServerProxy(flatRouter, contextFactory, path) {
31
+ const cache = /* @__PURE__ */ new Map();
32
+ const callProcedure = async (input) => {
33
+ const route = flatRouter("POST", "/" + path.join("/"))?.data;
34
+ if (!route) throw new Error(`Procedure not found: ${path.join("/")}`);
35
+ const ctx = Object.create(null);
36
+ const baseCtx = await contextFactory();
37
+ const keys = Object.keys(baseCtx);
38
+ for (let i = 0; i < keys.length; i++) ctx[keys[i]] = baseCtx[keys[i]];
39
+ const signal = new AbortController().signal;
40
+ return route.handler(ctx, input, signal);
41
+ };
42
+ return new Proxy(callProcedure, {
43
+ get(_target, prop) {
44
+ if (prop === "then") return void 0;
45
+ if (typeof prop !== "string") return void 0;
46
+ let cached = cache.get(prop);
47
+ if (!cached) {
48
+ cached = createServerProxy(flatRouter, contextFactory, [...path, prop]);
49
+ cache.set(prop, cached);
50
+ }
51
+ return cached;
52
+ },
53
+ apply(_target, _thisArg, args) {
54
+ return callProcedure(args[0]);
55
+ }
56
+ });
57
+ }
58
+ //#endregion
59
+ export { createServerClient };
@@ -0,0 +1,29 @@
1
+ import { SilgiError } from "../core/error.mjs";
2
+
3
+ //#region src/client/types.d.ts
4
+ type ClientContext = Record<PropertyKey, unknown>;
5
+ interface ClientOptions<TContext extends ClientContext = ClientContext> {
6
+ signal?: AbortSignal;
7
+ lastEventId?: string;
8
+ context?: TContext;
9
+ }
10
+ /** A single procedure client — callable function */
11
+ type Client<TClientContext extends ClientContext, TInput, TOutput, _TError = SilgiError> = (...args: ClientRest<TClientContext, TInput>) => Promise<TOutput>;
12
+ /** A subscription client — returns async iterator */
13
+ type SubscriptionClient<TClientContext extends ClientContext, TInput, TOutput> = (...args: ClientRest<TClientContext, TInput>) => AsyncIterableIterator<TOutput>;
14
+ /** Determine argument shape based on input and context optionality */
15
+ type ClientRest<TClientContext extends ClientContext, TInput> = undefined extends TInput ? Record<never, never> extends TClientContext ? [input?: TInput, options?: ClientOptions<TClientContext>] : [input: TInput | undefined, options: ClientOptions<TClientContext>] : Record<never, never> extends TClientContext ? [input: TInput, options?: ClientOptions<TClientContext>] : [input: TInput, options: ClientOptions<TClientContext>];
16
+ /** Recursive nested client — mirrors the router structure */
17
+ type NestedClient<TClientContext extends ClientContext = ClientContext> = Client<TClientContext, any, any, any> | SubscriptionClient<TClientContext, any, any> | {
18
+ [key: string]: NestedClient<TClientContext>;
19
+ };
20
+ /** Transport interface — how requests are sent */
21
+ interface ClientLink<TClientContext extends ClientContext = ClientContext> {
22
+ call(path: readonly string[], input: unknown, options: ClientOptions<TClientContext>): Promise<unknown>;
23
+ }
24
+ /** Infer input types from a nested client */
25
+ type InferClientInputs<T extends NestedClient> = T extends Client<any, infer TInput, any, any> ? TInput : T extends Record<string, NestedClient> ? { [K in keyof T]: InferClientInputs<T[K]> } : never;
26
+ /** Infer output types from a nested client */
27
+ type InferClientOutputs<T extends NestedClient> = T extends Client<any, any, infer TOutput, any> ? TOutput : T extends Record<string, NestedClient> ? { [K in keyof T]: InferClientOutputs<T[K]> } : never;
28
+ //#endregion
29
+ export { Client, ClientContext, ClientLink, ClientOptions, ClientRest, InferClientInputs, InferClientOutputs, NestedClient };
@@ -0,0 +1,21 @@
1
+ //#region src/codec/devalue.d.ts
2
+ /**
3
+ * devalue codec — rich type serialization.
4
+ *
5
+ * Supports Date, Map, Set, BigInt, undefined, circular refs.
6
+ * 2.7x faster than superjson, 37% smaller output.
7
+ *
8
+ * Use when your RPC procedures return rich JS types
9
+ * that JSON.stringify can't handle.
10
+ */
11
+ declare const DEVALUE_CONTENT_TYPE = "application/x-devalue+json";
12
+ /** Serialize a value with devalue (handles Date, Map, Set, BigInt, etc.) */
13
+ declare function encode(value: unknown): string;
14
+ /** Deserialize a devalue string back to the original value, sanitized for safety */
15
+ declare function decode(text: string): unknown;
16
+ /** Check if request body uses devalue encoding */
17
+ declare function isDevalue(contentType: string | null | undefined): boolean;
18
+ /** Check if client accepts devalue responses */
19
+ declare function acceptsDevalue(acceptHeader: string | null | undefined): boolean;
20
+ //#endregion
21
+ export { DEVALUE_CONTENT_TYPE, acceptsDevalue, decode, encode, isDevalue };
@@ -0,0 +1,33 @@
1
+ import { sanitizeDecoded } from "./sanitize.mjs";
2
+ import { parse, stringify } from "devalue";
3
+ //#region src/codec/devalue.ts
4
+ /**
5
+ * devalue codec — rich type serialization.
6
+ *
7
+ * Supports Date, Map, Set, BigInt, undefined, circular refs.
8
+ * 2.7x faster than superjson, 37% smaller output.
9
+ *
10
+ * Use when your RPC procedures return rich JS types
11
+ * that JSON.stringify can't handle.
12
+ */
13
+ const DEVALUE_CONTENT_TYPE = "application/x-devalue+json";
14
+ /** Serialize a value with devalue (handles Date, Map, Set, BigInt, etc.) */
15
+ function encode(value) {
16
+ return stringify(value);
17
+ }
18
+ /** Deserialize a devalue string back to the original value, sanitized for safety */
19
+ function decode(text) {
20
+ return sanitizeDecoded(parse(text));
21
+ }
22
+ /** Check if request body uses devalue encoding */
23
+ function isDevalue(contentType) {
24
+ if (!contentType) return false;
25
+ return contentType.includes(DEVALUE_CONTENT_TYPE);
26
+ }
27
+ /** Check if client accepts devalue responses */
28
+ function acceptsDevalue(acceptHeader) {
29
+ if (!acceptHeader) return false;
30
+ return acceptHeader.includes(DEVALUE_CONTENT_TYPE);
31
+ }
32
+ //#endregion
33
+ export { DEVALUE_CONTENT_TYPE, acceptsDevalue, decode, encode, isDevalue };
@@ -0,0 +1,18 @@
1
+ //#region src/codec/msgpack.d.ts
2
+ /**
3
+ * MessagePack codec — binary transport for Silgi.
4
+ *
5
+ * ~50% smaller payloads vs JSON. Uses msgpackr with record extension
6
+ * for fast encoding of repeated object shapes.
7
+ */
8
+ declare const MSGPACK_CONTENT_TYPE = "application/x-msgpack";
9
+ /** Encode a value to MessagePack binary (usable as Response body) */
10
+ declare function encode(value: unknown): BodyInit;
11
+ /** Decode a MessagePack Buffer to a value (safe for untrusted input) */
12
+ declare function decode(buf: Buffer | Uint8Array): unknown;
13
+ /** Check if a request accepts msgpack */
14
+ declare function acceptsMsgpack(acceptHeader: string | null | undefined): boolean;
15
+ /** Check if request body is msgpack */
16
+ declare function isMsgpack(contentType: string | null | undefined): boolean;
17
+ //#endregion
18
+ export { MSGPACK_CONTENT_TYPE, acceptsMsgpack, decode, encode, isMsgpack };
@@ -0,0 +1,45 @@
1
+ import { sanitizeDecoded } from "./sanitize.mjs";
2
+ import { Packr } from "msgpackr";
3
+ //#region src/codec/msgpack.ts
4
+ /**
5
+ * MessagePack codec — binary transport for Silgi.
6
+ *
7
+ * ~50% smaller payloads vs JSON. Uses msgpackr with record extension
8
+ * for fast encoding of repeated object shapes.
9
+ */
10
+ const MSGPACK_CONTENT_TYPE = "application/x-msgpack";
11
+ /**
12
+ * Stateless msgpack codec — for request/response (no connection persistence).
13
+ * Records disabled for cross-request compatibility.
14
+ */
15
+ const encoder = new Packr({
16
+ useRecords: false,
17
+ moreTypes: true,
18
+ int64AsType: "number"
19
+ });
20
+ const decoder = new Packr({
21
+ useRecords: false,
22
+ moreTypes: false,
23
+ int64AsType: "number"
24
+ });
25
+ /** Encode a value to MessagePack binary (usable as Response body) */
26
+ function encode(value) {
27
+ const buf = encoder.pack(value);
28
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
29
+ }
30
+ /** Decode a MessagePack Buffer to a value (safe for untrusted input) */
31
+ function decode(buf) {
32
+ return sanitizeDecoded(decoder.unpack(buf));
33
+ }
34
+ /** Check if a request accepts msgpack */
35
+ function acceptsMsgpack(acceptHeader) {
36
+ if (!acceptHeader) return false;
37
+ return acceptHeader.includes("application/x-msgpack") || acceptHeader.includes("application/msgpack");
38
+ }
39
+ /** Check if request body is msgpack */
40
+ function isMsgpack(contentType) {
41
+ if (!contentType) return false;
42
+ return contentType.includes("application/x-msgpack") || contentType.includes("application/msgpack");
43
+ }
44
+ //#endregion
45
+ export { MSGPACK_CONTENT_TYPE, acceptsMsgpack, decode, encode, isMsgpack };
@@ -0,0 +1,38 @@
1
+ //#region src/codec/sanitize.ts
2
+ /**
3
+ * Shared sanitizer for decoded codec values.
4
+ *
5
+ * Strips dangerous types (RegExp → ReDoS, Error → info disclosure)
6
+ * and removes __proto__ keys (prototype pollution) from decoded payloads.
7
+ * Used by both devalue and msgpack codecs.
8
+ */
9
+ function sanitizeDecoded(value) {
10
+ if (value === null || value === void 0) return value;
11
+ if (typeof value !== "object") return value;
12
+ if (value instanceof RegExp) return String(value);
13
+ if (value instanceof Error) return { message: value.message };
14
+ if (value instanceof Date) return value;
15
+ if (Array.isArray(value)) {
16
+ for (let i = 0; i < value.length; i++) value[i] = sanitizeDecoded(value[i]);
17
+ return value;
18
+ }
19
+ if (value instanceof Map) {
20
+ const clean = /* @__PURE__ */ new Map();
21
+ for (const [k, v] of value) clean.set(sanitizeDecoded(k), sanitizeDecoded(v));
22
+ return clean;
23
+ }
24
+ if (value instanceof Set) {
25
+ const clean = /* @__PURE__ */ new Set();
26
+ for (const v of value) clean.add(sanitizeDecoded(v));
27
+ return clean;
28
+ }
29
+ const proto = Object.getPrototypeOf(value);
30
+ if (proto === Object.prototype || proto === null) {
31
+ const obj = value;
32
+ for (const key of Object.keys(obj)) if (key === "__proto__") delete obj[key];
33
+ else obj[key] = sanitizeDecoded(obj[key]);
34
+ }
35
+ return value;
36
+ }
37
+ //#endregion
38
+ export { sanitizeDecoded };