silgi 0.43.28 → 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 -91
  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,25 @@
1
+ import { RouterDef } from "../types.mjs";
2
+
3
+ //#region src/adapters/nestjs.d.ts
4
+ interface NestAdapterOptions<TCtx extends Record<string, unknown>> {
5
+ /** Context factory — receives the NestJS/Express request */
6
+ context?: (req: any) => TCtx | Promise<TCtx>;
7
+ }
8
+ /**
9
+ * Create a NestJS-compatible handler function.
10
+ *
11
+ * Use inside a `@Controller` with `@All("*")`.
12
+ * Handles routing internally — NestJS only needs to mount the prefix.
13
+ */
14
+ declare function createHandler<TCtx extends Record<string, unknown>>(router: RouterDef, options?: NestAdapterOptions<TCtx>): (req: any, res: any) => Promise<void>;
15
+ /**
16
+ * Create a NestJS module configuration for Silgi.
17
+ *
18
+ * Returns an object that can be used with NestJS's dynamic module pattern.
19
+ */
20
+ declare function createModule(router: RouterDef, options?: NestAdapterOptions<any>): {
21
+ handler: (req: any, res: any) => Promise<void>;
22
+ router: RouterDef;
23
+ };
24
+ //#endregion
25
+ export { NestAdapterOptions, createHandler, createModule };
@@ -0,0 +1,83 @@
1
+ import { compileRouter } from "../compile.mjs";
2
+ import { buildContext, isMethodAllowed, parseQueryData, serializeError } from "../core/dispatch.mjs";
3
+ //#region src/adapters/nestjs.ts
4
+ /**
5
+ * NestJS adapter — register Silgi as a NestJS controller.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * // rpc.controller.ts
10
+ * import { Controller, All, Req, Res } from "@nestjs/common"
11
+ * import { createHandler } from "silgi/nestjs"
12
+ * import { appRouter } from "./rpc"
13
+ *
14
+ * const rpcHandler = createHandler(appRouter, {
15
+ * context: (req) => ({ db: getDB(), user: req.user }),
16
+ * })
17
+ *
18
+ * @Controller("rpc")
19
+ * export class RpcController {
20
+ * @All("*")
21
+ * async handle(@Req() req: Request, @Res() res: Response) {
22
+ * return rpcHandler(req, res)
23
+ * }
24
+ * }
25
+ * ```
26
+ */
27
+ /**
28
+ * Create a NestJS-compatible handler function.
29
+ *
30
+ * Use inside a `@Controller` with `@All("*")`.
31
+ * Handles routing internally — NestJS only needs to mount the prefix.
32
+ */
33
+ function createHandler(router, options = {}) {
34
+ const flatRouter = compileRouter(router);
35
+ return async (req, res) => {
36
+ let pathname = req.params?.[0] ?? req.path ?? req.url ?? "";
37
+ if (pathname.startsWith("/")) pathname = pathname.slice(1);
38
+ const match = flatRouter(req.method, "/" + pathname);
39
+ if (!match) {
40
+ res.status(404).json({
41
+ code: "NOT_FOUND",
42
+ status: 404,
43
+ message: "Procedure not found"
44
+ });
45
+ return;
46
+ }
47
+ const route = match.data;
48
+ if (!isMethodAllowed(req.method, route.method)) {
49
+ res.status(405).set?.("allow", route.method).json({
50
+ code: "METHOD_NOT_ALLOWED",
51
+ status: 405,
52
+ message: `Method ${req.method} not allowed`
53
+ });
54
+ return;
55
+ }
56
+ try {
57
+ const ctx = buildContext(options.context ? await options.context(req) : void 0, match.params);
58
+ let input;
59
+ if (req.method === "POST" || req.method === "PUT" || req.method === "PATCH") input = req.body;
60
+ else if (req.query?.data) input = typeof req.query.data === "string" ? parseQueryData(req.query.data) : req.query.data;
61
+ const ac = new AbortController();
62
+ req.on?.("close", () => ac.abort());
63
+ const output = await route.handler(ctx, input, ac.signal);
64
+ res.json(output);
65
+ } catch (error) {
66
+ const body = serializeError(error);
67
+ res.status(body.status).json(body);
68
+ }
69
+ };
70
+ }
71
+ /**
72
+ * Create a NestJS module configuration for Silgi.
73
+ *
74
+ * Returns an object that can be used with NestJS's dynamic module pattern.
75
+ */
76
+ function createModule(router, options = {}) {
77
+ return {
78
+ handler: createHandler(router, options),
79
+ router
80
+ };
81
+ }
82
+ //#endregion
83
+ export { createHandler, createModule };
@@ -0,0 +1,14 @@
1
+ import { RouterDef } from "../types.mjs";
2
+ import { FetchAdapterConfig } from "./_fetch-adapter.mjs";
3
+
4
+ //#region src/adapters/nextjs.d.ts
5
+ interface NextjsAdapterOptions<TCtx extends Record<string, unknown>> extends FetchAdapterConfig<TCtx> {}
6
+ /**
7
+ * Create a Next.js App Router route handler.
8
+ *
9
+ * Uses Silgi's handler() internally — full Fetch API support
10
+ * including content negotiation (JSON, MessagePack, devalue).
11
+ */
12
+ declare function createHandler<TCtx extends Record<string, unknown>>(router: RouterDef, options?: NextjsAdapterOptions<TCtx>): (req: Request) => Response | Promise<Response>;
13
+ //#endregion
14
+ export { NextjsAdapterOptions, createHandler };
@@ -0,0 +1,29 @@
1
+ import { createFetchAdapter } from "./_fetch-adapter.mjs";
2
+ //#region src/adapters/nextjs.ts
3
+ /**
4
+ * Next.js adapter — use Silgi with App Router API routes.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * // app/api/rpc/[...path]/route.ts
9
+ * import { createHandler } from "silgi/nextjs"
10
+ * import { appRouter } from "~/server/rpc"
11
+ *
12
+ * const handler = createHandler(appRouter, {
13
+ * context: (req) => ({ db: getDB() }),
14
+ * })
15
+ *
16
+ * export { handler as GET, handler as POST }
17
+ * ```
18
+ */
19
+ /**
20
+ * Create a Next.js App Router route handler.
21
+ *
22
+ * Uses Silgi's handler() internally — full Fetch API support
23
+ * including content negotiation (JSON, MessagePack, devalue).
24
+ */
25
+ function createHandler(router, options = {}) {
26
+ return createFetchAdapter(router, options, "/api/rpc");
27
+ }
28
+ //#endregion
29
+ export { createHandler };
@@ -0,0 +1,27 @@
1
+ import { RouterDef } from "../types.mjs";
2
+
3
+ //#region src/adapters/peer.d.ts
4
+ interface PeerOptions<TCtx extends Record<string, unknown>> {
5
+ context?: () => TCtx | Promise<TCtx>;
6
+ }
7
+ interface Peer {
8
+ /** Client proxy to call the remote peer's procedures */
9
+ client: any;
10
+ /** Stop listening for incoming calls */
11
+ dispose: () => void;
12
+ }
13
+ /**
14
+ * Create a bidirectional peer — serves your router AND creates a client
15
+ * for the remote peer's router.
16
+ */
17
+ declare function createPeer(localRouter: RouterDef, port: {
18
+ postMessage(msg: unknown): void;
19
+ addEventListener(type: 'message', handler: (event: {
20
+ data: unknown;
21
+ }) => void): void;
22
+ removeEventListener(type: 'message', handler: (event: {
23
+ data: unknown;
24
+ }) => void): void;
25
+ }, options?: PeerOptions<Record<string, unknown>>): Peer;
26
+ //#endregion
27
+ export { Peer, PeerOptions, createPeer };
@@ -0,0 +1,36 @@
1
+ import { createClient } from "../client/client.mjs";
2
+ import { MessagePortLink, createHandler } from "./message-port.mjs";
3
+ //#region src/adapters/peer.ts
4
+ /**
5
+ * Peer-to-peer adapter — bidirectional RPC between two Silgi instances.
6
+ *
7
+ * Both sides can be client AND server simultaneously. Uses MessagePort
8
+ * or any bidirectional channel (WebSocket, WebRTC DataChannel, etc.).
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { createPeer } from "silgi/peer"
13
+ *
14
+ * const peerA = createPeer(routerA, channel.port1)
15
+ * const peerB = createPeer(routerB, channel.port2)
16
+ *
17
+ * // A calls B's procedures
18
+ * const result = await peerA.client.hello()
19
+ *
20
+ * // B calls A's procedures
21
+ * const result = await peerB.client.ping()
22
+ * ```
23
+ */
24
+ /**
25
+ * Create a bidirectional peer — serves your router AND creates a client
26
+ * for the remote peer's router.
27
+ */
28
+ function createPeer(localRouter, port, options = {}) {
29
+ const dispose = createHandler(localRouter, port, options);
30
+ return {
31
+ client: createClient(new MessagePortLink(port)),
32
+ dispose
33
+ };
34
+ }
35
+ //#endregion
36
+ export { createPeer };
@@ -0,0 +1,15 @@
1
+ import { RouterDef } from "../types.mjs";
2
+ import { FetchAdapterConfig } from "./_fetch-adapter.mjs";
3
+
4
+ //#region src/adapters/remix.d.ts
5
+ interface RemixAdapterOptions<TCtx extends Record<string, unknown>> extends FetchAdapterConfig<TCtx> {}
6
+ /**
7
+ * Create a Remix action/loader handler.
8
+ * Remix passes { request, params } — we extract request and delegate.
9
+ */
10
+ declare function createHandler<TCtx extends Record<string, unknown>>(router: RouterDef, options?: RemixAdapterOptions<TCtx>): (args: {
11
+ request: Request;
12
+ params: Record<string, string>;
13
+ }) => Response | Promise<Response>;
14
+ //#endregion
15
+ export { RemixAdapterOptions, createHandler };
@@ -0,0 +1,30 @@
1
+ import { createFetchAdapter } from "./_fetch-adapter.mjs";
2
+ //#region src/adapters/remix.ts
3
+ /**
4
+ * Remix adapter — use Silgi with Remix action/loader routes.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * // app/routes/rpc.$.tsx
9
+ * import { createHandler } from "silgi/remix"
10
+ * import { appRouter } from "~/server/rpc"
11
+ *
12
+ * const handler = createHandler(appRouter, {
13
+ * prefix: "/rpc",
14
+ * context: (req) => ({ db: getDB() }),
15
+ * })
16
+ *
17
+ * export const action = handler
18
+ * export const loader = handler
19
+ * ```
20
+ */
21
+ /**
22
+ * Create a Remix action/loader handler.
23
+ * Remix passes { request, params } — we extract request and delegate.
24
+ */
25
+ function createHandler(router, options = {}) {
26
+ const handler = createFetchAdapter(router, options, "/rpc");
27
+ return ({ request }) => handler(request);
28
+ }
29
+ //#endregion
30
+ export { createHandler };
@@ -0,0 +1,12 @@
1
+ import { RouterDef } from "../types.mjs";
2
+ import { FetchAdapterConfigWithEvent } from "./_fetch-adapter.mjs";
3
+
4
+ //#region src/adapters/solidstart.d.ts
5
+ interface SolidStartAdapterOptions<TCtx extends Record<string, unknown>> extends FetchAdapterConfigWithEvent<TCtx> {}
6
+ /**
7
+ * Create a SolidStart API route handler.
8
+ * SolidStart uses Fetch API events — uses Silgi's handler().
9
+ */
10
+ declare function createHandler<TCtx extends Record<string, unknown>>(router: RouterDef, options?: SolidStartAdapterOptions<TCtx>): (event: any) => Response | Promise<Response>;
11
+ //#endregion
12
+ export { SolidStartAdapterOptions, createHandler };
@@ -0,0 +1,29 @@
1
+ import { createEventFetchAdapter } from "./_fetch-adapter.mjs";
2
+ //#region src/adapters/solidstart.ts
3
+ /**
4
+ * SolidStart adapter — use Silgi with SolidStart API routes.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * // src/routes/api/rpc/[...path].ts
9
+ * import { createHandler } from "silgi/solidstart"
10
+ * import { appRouter } from "~/server/rpc"
11
+ *
12
+ * const handler = createHandler(appRouter, {
13
+ * prefix: "/api/rpc",
14
+ * context: (event) => ({ db: getDB() }),
15
+ * })
16
+ *
17
+ * export const GET = handler
18
+ * export const POST = handler
19
+ * ```
20
+ */
21
+ /**
22
+ * Create a SolidStart API route handler.
23
+ * SolidStart uses Fetch API events — uses Silgi's handler().
24
+ */
25
+ function createHandler(router, options = {}) {
26
+ return createEventFetchAdapter(router, options, "/api/rpc", (event) => event.request ?? event);
27
+ }
28
+ //#endregion
29
+ export { createHandler };
@@ -0,0 +1,14 @@
1
+ import { RouterDef } from "../types.mjs";
2
+ import { FetchAdapterConfigWithEvent } from "./_fetch-adapter.mjs";
3
+
4
+ //#region src/adapters/sveltekit.d.ts
5
+ interface SvelteKitAdapterOptions<TCtx extends Record<string, unknown>> extends FetchAdapterConfigWithEvent<TCtx> {}
6
+ /**
7
+ * Create a SvelteKit request handler.
8
+ *
9
+ * SvelteKit passes a RequestEvent with `.request` (standard Request).
10
+ * The handler uses Silgi's handler() for full protocol support.
11
+ */
12
+ declare function createHandler<TCtx extends Record<string, unknown>>(router: RouterDef, options?: SvelteKitAdapterOptions<TCtx>): (event: any) => Response | Promise<Response>;
13
+ //#endregion
14
+ export { SvelteKitAdapterOptions, createHandler };
@@ -0,0 +1,30 @@
1
+ import { createEventFetchAdapter } from "./_fetch-adapter.mjs";
2
+ //#region src/adapters/sveltekit.ts
3
+ /**
4
+ * SvelteKit adapter — use Silgi with SvelteKit API routes.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * // src/routes/api/rpc/[...path]/+server.ts
9
+ * import { createHandler } from "silgi/sveltekit"
10
+ * import { appRouter } from "$lib/server/rpc"
11
+ *
12
+ * const handler = createHandler(appRouter, {
13
+ * context: (event) => ({ db: getDB(), user: event.locals.user }),
14
+ * })
15
+ *
16
+ * export const GET = handler
17
+ * export const POST = handler
18
+ * ```
19
+ */
20
+ /**
21
+ * Create a SvelteKit request handler.
22
+ *
23
+ * SvelteKit passes a RequestEvent with `.request` (standard Request).
24
+ * The handler uses Silgi's handler() for full protocol support.
25
+ */
26
+ function createHandler(router, options = {}) {
27
+ return createEventFetchAdapter(router, options, "/api/rpc", (event) => event.request);
28
+ }
29
+ //#endregion
30
+ export { createHandler };
@@ -0,0 +1,62 @@
1
+ import { RouterDef } from "../types.mjs";
2
+ import { ClientContext, ClientLink, ClientOptions } from "../client/types.mjs";
3
+
4
+ //#region src/broker/index.d.ts
5
+ /**
6
+ * Universal broker transport — implement this for any message broker.
7
+ *
8
+ * Two methods: `subscribe` (server listens) and `request` (client calls).
9
+ * The driver handles serialization, correlation, and reply routing internally.
10
+ */
11
+ interface BrokerDriver {
12
+ /**
13
+ * Subscribe to a subject. Handler receives a serialized payload and a
14
+ * `reply` callback to send the response back to the caller.
15
+ *
16
+ * Returns a cleanup function (sync or async) to unsubscribe.
17
+ */
18
+ subscribe(subject: string, handler: (payload: string, reply: (data: string) => void) => void): (() => void) | Promise<() => void>;
19
+ /**
20
+ * Request-reply: publish payload to a subject and wait for the response.
21
+ * The driver handles correlation and reply routing internally.
22
+ */
23
+ request(subject: string, payload: string, opts?: {
24
+ timeout?: number;
25
+ }): Promise<string>;
26
+ }
27
+ interface BrokerOptions<TCtx extends Record<string, unknown>> {
28
+ /** Subject/topic to listen on. Default: `"silgi"` */
29
+ subject?: string;
30
+ /** Context factory — called per request */
31
+ context?: () => TCtx | Promise<TCtx>;
32
+ }
33
+ /**
34
+ * Attach Silgi to a message broker (server side).
35
+ *
36
+ * Listens for RPC messages on the given subject, dispatches to the compiled
37
+ * router, and replies with results or errors.
38
+ *
39
+ * Returns a cleanup function to stop listening.
40
+ */
41
+ declare function createBroker<TCtx extends Record<string, unknown>>(router: RouterDef, driver: BrokerDriver, options?: BrokerOptions<TCtx>): Promise<() => void>;
42
+ interface BrokerLinkOptions {
43
+ /** Subject/topic to send requests to. Default: `"silgi"` */
44
+ subject?: string;
45
+ /** Request timeout in ms. Default: `10_000` */
46
+ timeout?: number;
47
+ }
48
+ /**
49
+ * Client-side broker link — sends RPC calls via a broker driver.
50
+ */
51
+ declare class BrokerLink<TCtx extends ClientContext = ClientContext> implements ClientLink<TCtx> {
52
+ #private;
53
+ constructor(driver: BrokerDriver, options?: BrokerLinkOptions);
54
+ call(path: readonly string[], input: unknown, _options: ClientOptions<TCtx>): Promise<unknown>;
55
+ }
56
+ /**
57
+ * In-memory broker driver — for testing and single-process development.
58
+ * Simulates request-reply without any external broker.
59
+ */
60
+ declare function memoryBroker(): BrokerDriver;
61
+ //#endregion
62
+ export { BrokerDriver, BrokerLink, BrokerLinkOptions, BrokerOptions, createBroker, memoryBroker };
@@ -0,0 +1,153 @@
1
+ import { ValidationError } from "../core/schema.mjs";
2
+ import { SilgiError, toSilgiError } from "../core/error.mjs";
3
+ import { compileRouter } from "../compile.mjs";
4
+ //#region src/broker/index.ts
5
+ /**
6
+ * Message Broker adapter — driver-based RPC over any message broker.
7
+ *
8
+ * Pluggable driver pattern (like unstorage) — bring your own broker client.
9
+ * Built-in memory driver for testing. NATS and Redis drivers available separately.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // Server
14
+ * import { createBroker, memoryBroker } from "silgi/broker"
15
+ *
16
+ * const driver = memoryBroker()
17
+ * const dispose = await createBroker(appRouter, driver, {
18
+ * subject: "myapp.rpc",
19
+ * context: () => ({ db: getDB() }),
20
+ * })
21
+ *
22
+ * // Client
23
+ * import { BrokerLink } from "silgi/broker"
24
+ * import { createClient } from "silgi/client"
25
+ *
26
+ * const client = createClient<AppRouter>(new BrokerLink(driver, { subject: "myapp.rpc" }))
27
+ * const users = await client.users.list({ limit: 10 })
28
+ * ```
29
+ */
30
+ /**
31
+ * Attach Silgi to a message broker (server side).
32
+ *
33
+ * Listens for RPC messages on the given subject, dispatches to the compiled
34
+ * router, and replies with results or errors.
35
+ *
36
+ * Returns a cleanup function to stop listening.
37
+ */
38
+ async function createBroker(router, driver, options = {}) {
39
+ const compiledRouter = compileRouter(router);
40
+ const subject = options.subject ?? "silgi";
41
+ const unsubscribe = await driver.subscribe(subject, (payload, reply) => {
42
+ let msg;
43
+ try {
44
+ msg = JSON.parse(payload);
45
+ } catch {
46
+ reply(JSON.stringify({ e: {
47
+ code: "BAD_REQUEST",
48
+ status: 400,
49
+ message: "Invalid payload"
50
+ } }));
51
+ return;
52
+ }
53
+ const match = compiledRouter("POST", "/" + msg.p);
54
+ if (!match) {
55
+ reply(JSON.stringify({ e: {
56
+ code: "NOT_FOUND",
57
+ status: 404,
58
+ message: "Procedure not found"
59
+ } }));
60
+ return;
61
+ }
62
+ const route = match.data;
63
+ (async () => {
64
+ try {
65
+ const ctx = Object.create(null);
66
+ if (match.params) ctx.params = match.params;
67
+ if (options.context) {
68
+ const baseCtx = await options.context();
69
+ const keys = Object.keys(baseCtx);
70
+ for (let i = 0; i < keys.length; i++) ctx[keys[i]] = baseCtx[keys[i]];
71
+ }
72
+ const signal = new AbortController().signal;
73
+ const res = { r: await route.handler(ctx, msg.i, signal) };
74
+ reply(JSON.stringify(res));
75
+ } catch (error) {
76
+ const res = { e: error instanceof ValidationError ? {
77
+ code: "BAD_REQUEST",
78
+ status: 400,
79
+ message: error.message,
80
+ data: { issues: error.issues }
81
+ } : error instanceof SilgiError ? error.toJSON() : toSilgiError(error).toJSON() };
82
+ reply(JSON.stringify(res));
83
+ }
84
+ })();
85
+ });
86
+ return typeof unsubscribe === "function" ? unsubscribe : () => {};
87
+ }
88
+ /**
89
+ * Client-side broker link — sends RPC calls via a broker driver.
90
+ */
91
+ var BrokerLink = class {
92
+ #driver;
93
+ #subject;
94
+ #timeout;
95
+ constructor(driver, options = {}) {
96
+ this.#driver = driver;
97
+ this.#subject = options.subject ?? "silgi";
98
+ this.#timeout = options.timeout ?? 1e4;
99
+ }
100
+ async call(path, input, _options) {
101
+ const req = {
102
+ p: path.join("/"),
103
+ i: input
104
+ };
105
+ const raw = await this.#driver.request(this.#subject, JSON.stringify(req), { timeout: this.#timeout });
106
+ const res = JSON.parse(raw);
107
+ if (res.e) throw new SilgiError(res.e.code, {
108
+ status: res.e.status,
109
+ message: res.e.message,
110
+ data: res.e.data
111
+ });
112
+ return res.r;
113
+ }
114
+ };
115
+ /**
116
+ * In-memory broker driver — for testing and single-process development.
117
+ * Simulates request-reply without any external broker.
118
+ */
119
+ function memoryBroker() {
120
+ const subscribers = /* @__PURE__ */ new Map();
121
+ return {
122
+ subscribe(subject, handler) {
123
+ let set = subscribers.get(subject);
124
+ if (!set) {
125
+ set = /* @__PURE__ */ new Set();
126
+ subscribers.set(subject, set);
127
+ }
128
+ set.add(handler);
129
+ return () => {
130
+ set.delete(handler);
131
+ if (set.size === 0) subscribers.delete(subject);
132
+ };
133
+ },
134
+ request(subject, payload, opts) {
135
+ return new Promise((resolve, reject) => {
136
+ const handlers = subscribers.get(subject);
137
+ if (!handlers || handlers.size === 0) {
138
+ reject(/* @__PURE__ */ new Error(`No subscriber for subject "${subject}"`));
139
+ return;
140
+ }
141
+ const timeout = opts?.timeout ?? 1e4;
142
+ const timer = setTimeout(() => reject(/* @__PURE__ */ new Error(`Broker request timeout: ${subject}`)), timeout);
143
+ const handler = handlers.values().next().value;
144
+ handler(payload, (response) => {
145
+ clearTimeout(timer);
146
+ resolve(response);
147
+ });
148
+ });
149
+ }
150
+ };
151
+ }
152
+ //#endregion
153
+ export { BrokerLink, createBroker, memoryBroker };
@@ -0,0 +1,33 @@
1
+ import { BrokerDriver } from "./index.mjs";
2
+
3
+ //#region src/broker/nats.d.ts
4
+ interface NatsMsg {
5
+ data: Uint8Array;
6
+ respond(payload: Uint8Array): boolean;
7
+ }
8
+ interface NatsSub {
9
+ unsubscribe(): void;
10
+ }
11
+ interface NatsConnection {
12
+ subscribe(subject: string, opts?: {
13
+ callback?: (err: Error | null, msg: NatsMsg) => void;
14
+ queue?: string;
15
+ }): NatsSub;
16
+ request(subject: string, payload?: Uint8Array, opts?: {
17
+ timeout?: number;
18
+ }): Promise<NatsMsg>;
19
+ }
20
+ interface NatsBrokerOptions {
21
+ /** Queue group name for load-balanced consumption across instances */
22
+ queue?: string;
23
+ }
24
+ /**
25
+ * Create a NATS broker driver from a NatsConnection.
26
+ *
27
+ * Uses NATS native request-reply for zero-overhead correlation.
28
+ * Supports queue groups for horizontal scaling — only one instance
29
+ * in the group handles each request.
30
+ */
31
+ declare function natsBroker(nc: NatsConnection, options?: NatsBrokerOptions): BrokerDriver;
32
+ //#endregion
33
+ export { NatsBrokerOptions, NatsConnection, NatsMsg, NatsSub, natsBroker };
@@ -0,0 +1,31 @@
1
+ //#region src/broker/nats.ts
2
+ const encoder = /* @__PURE__ */ new TextEncoder();
3
+ const decoder = /* @__PURE__ */ new TextDecoder();
4
+ /**
5
+ * Create a NATS broker driver from a NatsConnection.
6
+ *
7
+ * Uses NATS native request-reply for zero-overhead correlation.
8
+ * Supports queue groups for horizontal scaling — only one instance
9
+ * in the group handles each request.
10
+ */
11
+ function natsBroker(nc, options = {}) {
12
+ return {
13
+ subscribe(subject, handler) {
14
+ const sub = nc.subscribe(subject, {
15
+ queue: options.queue,
16
+ callback: (_err, msg) => {
17
+ handler(decoder.decode(msg.data), (response) => {
18
+ msg.respond(encoder.encode(response));
19
+ });
20
+ }
21
+ });
22
+ return () => sub.unsubscribe();
23
+ },
24
+ async request(subject, payload, opts) {
25
+ const msg = await nc.request(subject, encoder.encode(payload), { timeout: opts?.timeout ?? 1e4 });
26
+ return decoder.decode(msg.data);
27
+ }
28
+ };
29
+ }
30
+ //#endregion
31
+ export { natsBroker };