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,311 @@
1
+ //#region src/scalar.ts
2
+ /**
3
+ * Generate OpenAPI 3.1.0 document from a v2 RouterDef.
4
+ */
5
+ /**
6
+ * Convert `:param` and `:param(regex)` to OpenAPI `{param}` syntax.
7
+ * Returns the converted path and an array of extracted param names.
8
+ */
9
+ function toOpenAPIPath(raw) {
10
+ const pathParams = [];
11
+ const httpPath = raw.replace(/:(\w+)\([^)]*\)/g, (_m, name) => {
12
+ pathParams.push(name);
13
+ return `{${name}}`;
14
+ }).replace(/:(\w+)\?/g, (_m, name) => {
15
+ pathParams.push(name);
16
+ return `{${name}}`;
17
+ }).replace(/:(\w+)/g, (_m, name) => {
18
+ pathParams.push(name);
19
+ return `{${name}}`;
20
+ }).replace(/\/\*\*$/g, "/{path}").replace(/\/\*\*/g, "/{path}");
21
+ if (httpPath.includes("{path}") && !pathParams.includes("path")) pathParams.push("path");
22
+ return {
23
+ httpPath,
24
+ pathParams
25
+ };
26
+ }
27
+ function generateOpenAPI(router, options = {}) {
28
+ const paths = {};
29
+ const tags = /* @__PURE__ */ new Map();
30
+ collectProcedures(router, [], (path, proc) => {
31
+ const route = proc.route;
32
+ const { httpPath, pathParams } = toOpenAPIPath(route?.path ?? "/" + path.join("/"));
33
+ const rawMethod = route?.method?.toLowerCase() ?? "post";
34
+ const methods = rawMethod === "*" ? [
35
+ "get",
36
+ "put",
37
+ "post",
38
+ "delete",
39
+ "options",
40
+ "head",
41
+ "patch",
42
+ "trace"
43
+ ] : [rawMethod];
44
+ const baseOperationId = route?.operationId ?? path.join("_");
45
+ const opTags = route?.tags ?? (path.length > 1 ? [path[0]] : void 0);
46
+ if (opTags) {
47
+ for (const t of opTags) if (!tags.has(t)) tags.set(t, {});
48
+ }
49
+ let description = route?.description;
50
+ if (route?.ws) {
51
+ const wsNote = "Also available over WebSocket (`ws://`). Send `{ id, path: \"" + path.join("/") + "\", input }` as JSON.";
52
+ description = description ? `${description}\n\n${wsNote}` : wsNote;
53
+ }
54
+ const operation = {
55
+ operationId: baseOperationId,
56
+ tags: opTags,
57
+ summary: route?.summary,
58
+ description,
59
+ deprecated: route?.deprecated || void 0,
60
+ responses: {}
61
+ };
62
+ if (!operation.summary) delete operation.summary;
63
+ if (!operation.description) delete operation.description;
64
+ if (!operation.deprecated) delete operation.deprecated;
65
+ if (!operation.tags) delete operation.tags;
66
+ if (route?.security === false) operation.security = [];
67
+ else if (route?.security) operation.security = route.security.map((s) => ({ [s]: [] }));
68
+ else if (options.security) operation.security = [{ auth: [] }];
69
+ const inputSchema = proc.input ? schemaToJsonSchema(proc.input) : null;
70
+ const successStatus = route?.successStatus ?? 200;
71
+ const successDesc = route?.successDescription ?? "Successful response";
72
+ const guards = (proc.use ?? []).filter((m) => m.kind === "guard" && m.errors);
73
+ let allErrors = proc.errors ? { ...proc.errors } : null;
74
+ for (const guard of guards) {
75
+ const ge = guard.errors;
76
+ if (ge) allErrors = allErrors ? {
77
+ ...allErrors,
78
+ ...ge
79
+ } : { ...ge };
80
+ }
81
+ paths[httpPath] ??= {};
82
+ for (const method of methods) {
83
+ const op = {
84
+ ...operation,
85
+ responses: {}
86
+ };
87
+ if (methods.length > 1) op.operationId = `${baseOperationId}_${method}`;
88
+ const params = [];
89
+ for (const p of pathParams) params.push({
90
+ name: p,
91
+ in: "path",
92
+ required: true,
93
+ schema: { type: "string" }
94
+ });
95
+ if (inputSchema) if (method === "get") params.push(...objectSchemaToParams(inputSchema));
96
+ else op.requestBody = {
97
+ required: true,
98
+ content: { "application/json": { schema: inputSchema } }
99
+ };
100
+ if (params.length > 0) op.parameters = params;
101
+ if (proc.type === "subscription") {
102
+ const outputSchema = proc.output ? schemaToJsonSchema(proc.output) : { type: "string" };
103
+ op.responses[String(successStatus)] = {
104
+ description: "SSE event stream",
105
+ content: { "text/event-stream": { schema: {
106
+ type: "string",
107
+ description: `Each line: data: ${JSON.stringify(outputSchema)}`
108
+ } } }
109
+ };
110
+ } else if (proc.output) op.responses[String(successStatus)] = {
111
+ description: successDesc,
112
+ content: { "application/json": { schema: schemaToJsonSchema(proc.output) } }
113
+ };
114
+ else op.responses[String(successStatus)] = { description: successDesc };
115
+ if (proc.input) op.responses["400"] = {
116
+ description: "BAD_REQUEST — input validation failed",
117
+ content: { "application/json": { schema: {
118
+ type: "object",
119
+ properties: {
120
+ code: {
121
+ const: "BAD_REQUEST",
122
+ type: "string"
123
+ },
124
+ status: {
125
+ const: 400,
126
+ type: "integer"
127
+ },
128
+ message: { type: "string" },
129
+ data: {
130
+ type: "object",
131
+ properties: { issues: { type: "array" } }
132
+ }
133
+ },
134
+ required: [
135
+ "code",
136
+ "status",
137
+ "message"
138
+ ]
139
+ } } }
140
+ };
141
+ if (allErrors) {
142
+ const byStatus = /* @__PURE__ */ new Map();
143
+ for (const [code, def] of Object.entries(allErrors)) {
144
+ const status = typeof def === "number" ? def : def.status;
145
+ if (!byStatus.has(status)) byStatus.set(status, []);
146
+ const entry = { code };
147
+ if (typeof def === "object") {
148
+ if (def.message) entry.message = def.message;
149
+ if (def.data) entry.schema = schemaToJsonSchema(def.data);
150
+ }
151
+ byStatus.get(status).push(entry);
152
+ }
153
+ for (const [status, errors] of byStatus) {
154
+ const errorSchemas = errors.map((e) => {
155
+ const s = {
156
+ type: "object",
157
+ properties: {
158
+ code: {
159
+ const: e.code,
160
+ type: "string"
161
+ },
162
+ status: {
163
+ const: status,
164
+ type: "integer"
165
+ },
166
+ message: {
167
+ type: "string",
168
+ ...e.message ? { default: e.message } : {}
169
+ }
170
+ },
171
+ required: [
172
+ "code",
173
+ "status",
174
+ "message"
175
+ ]
176
+ };
177
+ if (e.schema) {
178
+ s.properties.data = e.schema;
179
+ s.required.push("data");
180
+ }
181
+ return s;
182
+ });
183
+ op.responses[String(status)] = {
184
+ description: errors.map((e) => e.code).join(" | "),
185
+ content: { "application/json": { schema: errorSchemas.length === 1 ? errorSchemas[0] : { oneOf: errorSchemas } } }
186
+ };
187
+ }
188
+ }
189
+ let finalOp = op;
190
+ if (route?.spec) if (typeof route.spec === "function") finalOp = route.spec(finalOp);
191
+ else finalOp = {
192
+ ...finalOp,
193
+ ...route.spec
194
+ };
195
+ paths[httpPath][method] = finalOp;
196
+ }
197
+ });
198
+ const doc = {
199
+ openapi: "3.1.0",
200
+ info: {
201
+ title: options.title ?? "Silgi API",
202
+ version: options.version ?? "1.0.0",
203
+ ...options.description ? { description: options.description } : {},
204
+ ...options.contact ? { contact: options.contact } : {},
205
+ ...options.license ? { license: options.license } : {}
206
+ },
207
+ paths
208
+ };
209
+ if (options.servers?.length) doc.servers = options.servers;
210
+ if (options.externalDocs) doc.externalDocs = options.externalDocs;
211
+ if (tags.size > 0) doc.tags = [...tags.entries()].map(([name, meta]) => ({
212
+ name,
213
+ ...meta.description ? { description: meta.description } : {}
214
+ }));
215
+ if (options.security) {
216
+ const scheme = { type: options.security.type };
217
+ if (options.security.type === "http") {
218
+ scheme.scheme = options.security.scheme ?? "bearer";
219
+ if (options.security.bearerFormat) scheme.bearerFormat = options.security.bearerFormat;
220
+ } else if (options.security.type === "apiKey") {
221
+ scheme.in = options.security.in ?? "header";
222
+ scheme.name = options.security.name ?? "x-api-key";
223
+ }
224
+ if (options.security.description) scheme.description = options.security.description;
225
+ doc.components = { securitySchemes: { auth: scheme } };
226
+ }
227
+ return doc;
228
+ }
229
+ const SCALAR_CDN_SOURCES = {
230
+ cdn: "https://cdn.jsdelivr.net/npm/@scalar/api-reference",
231
+ unpkg: "https://unpkg.com/@scalar/api-reference",
232
+ local: "/__silgi/scalar.js"
233
+ };
234
+ function scalarHTML(specUrl, options = {}) {
235
+ const title = escapeHtml(options.title ?? "Silgi API");
236
+ const safeUrl = escapeHtml(specUrl);
237
+ const cdnOption = options.cdn ?? "cdn";
238
+ return `<!DOCTYPE html>
239
+ <html>
240
+ <head>
241
+ <title>${title} — Scalar</title>
242
+ <meta charset="utf-8" />
243
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
244
+ </head>
245
+ <body>
246
+ <script id="api-reference" data-url="${safeUrl}"><\/script>
247
+ <script src="${escapeHtml(SCALAR_CDN_SOURCES[cdnOption] ?? cdnOption)}"><\/script>
248
+ </body>
249
+ </html>`;
250
+ }
251
+ function escapeHtml(s) {
252
+ return s.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
253
+ }
254
+ function isProcedureDef(value) {
255
+ return typeof value === "object" && value !== null && "type" in value && "resolve" in value && typeof value.resolve === "function";
256
+ }
257
+ function collectProcedures(node, path, cb) {
258
+ if (isProcedureDef(node)) {
259
+ cb(path, node);
260
+ return;
261
+ }
262
+ if (typeof node === "object" && node !== null) for (const [key, child] of Object.entries(node)) collectProcedures(child, [...path, key], cb);
263
+ }
264
+ /**
265
+ * Convert a Standard Schema to JSON Schema via `~standard.jsonSchema.input()`.
266
+ *
267
+ * Works with Zod v4, Valibot, ArkType — any validator implementing Standard Schema v1.
268
+ */
269
+ function schemaToJsonSchema(schema) {
270
+ const std = schema["~standard"];
271
+ if (!std?.jsonSchema?.input) return {};
272
+ try {
273
+ const result = std.jsonSchema.input({ target: "draft-2020-12" });
274
+ if (result && typeof result === "object") {
275
+ const { $schema: _, ...rest } = result;
276
+ return rest;
277
+ }
278
+ } catch {}
279
+ return {};
280
+ }
281
+ function objectSchemaToParams(schema) {
282
+ if (schema.type !== "object" || !schema.properties) return [];
283
+ const required = new Set(schema.required ?? []);
284
+ return Object.entries(schema.properties).map(([name, propSchema]) => ({
285
+ name,
286
+ in: "query",
287
+ required: required.has(name),
288
+ schema: propSchema,
289
+ ...propSchema.description ? { description: propSchema.description } : {}
290
+ }));
291
+ }
292
+ /**
293
+ * Wrap a fetch handler to serve Scalar API Reference at /api/reference and /api/openapi.json.
294
+ * Scalar routes are intercepted before the handler — zero overhead for normal requests.
295
+ */
296
+ function wrapWithScalar(handler, routerDef, options = {}) {
297
+ const specJson = JSON.stringify(generateOpenAPI(routerDef, options));
298
+ const specHtml = scalarHTML("/api/openapi.json", options);
299
+ return (request) => {
300
+ const url = request.url;
301
+ const pathStart = url.indexOf("/", url.indexOf("//") + 2);
302
+ const qMark = url.indexOf("?", pathStart);
303
+ const fullPath = qMark === -1 ? url.slice(pathStart) : url.slice(pathStart, qMark);
304
+ const pathname = fullPath.length > 1 ? fullPath.slice(1) : "";
305
+ if (pathname === "api/openapi.json") return new Response(specJson, { headers: { "content-type": "application/json" } });
306
+ if (pathname === "api/reference") return new Response(specHtml, { headers: { "content-type": "text/html" } });
307
+ return handler(request);
308
+ };
309
+ }
310
+ //#endregion
311
+ export { generateOpenAPI, scalarHTML, wrapWithScalar };
@@ -0,0 +1,144 @@
1
+ import { AnySchema, InferSchemaInput, InferSchemaOutput } from "./core/schema.mjs";
2
+ import { ErrorDef, GuardDef, GuardFn, InferClient, ProcedureDef, ResolveContext, RouterDef, WrapDef, WrapFn } from "./types.mjs";
3
+ import { ProcedureBuilder } from "./builder.mjs";
4
+ import { AnalyticsOptions } from "./plugins/analytics/types.mjs";
5
+ import { ScalarOptions } from "./scalar.mjs";
6
+ import { ServeOptions, SilgiServer } from "./core/serve.mjs";
7
+ import { StorageConfig, useStorage } from "./core/storage.mjs";
8
+ import { Hookable } from "hookable";
9
+
10
+ //#region src/silgi.d.ts
11
+ interface SilgiHooks {
12
+ /** Called before a request is processed */
13
+ request: (event: {
14
+ path: string;
15
+ input: unknown;
16
+ }) => void;
17
+ /** Called after a successful response */
18
+ response: (event: {
19
+ path: string;
20
+ output: unknown;
21
+ durationMs: number;
22
+ }) => void;
23
+ /** Called when an error occurs */
24
+ error: (event: {
25
+ path: string;
26
+ error: unknown;
27
+ }) => void;
28
+ /** Called when the server starts */
29
+ 'serve:start': (event: {
30
+ url: string;
31
+ port: number;
32
+ hostname: string;
33
+ }) => void;
34
+ /** Called when the server is shutting down */
35
+ 'serve:stop': (event: {
36
+ url: string;
37
+ port: number;
38
+ hostname: string;
39
+ }) => void;
40
+ }
41
+ interface SilgiConfig<TCtx extends Record<string, unknown>> {
42
+ context: (req: Request) => TCtx | Promise<TCtx>;
43
+ /** Register lifecycle hooks */
44
+ hooks?: Partial<{ [K in keyof SilgiHooks]: SilgiHooks[K] | SilgiHooks[K][] }>;
45
+ /**
46
+ * Storage configuration — mount drivers by path prefix.
47
+ *
48
+ * ```ts
49
+ * import redisDriver from 'unstorage/drivers/redis'
50
+ * import memoryDriver from 'unstorage/drivers/memory'
51
+ *
52
+ * storage: {
53
+ * cache: redisDriver({ url: 'redis://localhost' }),
54
+ * sessions: memoryDriver(),
55
+ * }
56
+ * ```
57
+ *
58
+ * Or pass a pre-built unstorage instance:
59
+ * ```ts
60
+ * storage: myStorageInstance
61
+ * ```
62
+ */
63
+ storage?: StorageConfig;
64
+ }
65
+ interface SilgiInstance<TBaseCtx extends Record<string, unknown>> {
66
+ /** Register a lifecycle hook */
67
+ hook: Hookable<SilgiHooks>['hook'];
68
+ /** Remove a lifecycle hook */
69
+ removeHook: Hookable<SilgiHooks>['removeHook'];
70
+ /** Access storage with optional prefix — uses configured mounts */
71
+ useStorage: typeof useStorage;
72
+ /** Create a guard middleware (flat, zero-closure) */
73
+ guard: GuardFactory<TBaseCtx>;
74
+ /** Create a wrap middleware (onion, before+after) */
75
+ wrap: (fn: WrapFn<TBaseCtx>) => WrapDef<TBaseCtx>;
76
+ /** Start a builder — resolve only */
77
+ $resolve: ProcedureBuilder<'query', TBaseCtx>['$resolve'];
78
+ /** Start a builder — set input schema */
79
+ $input: ProcedureBuilder<'query', TBaseCtx>['$input'];
80
+ /** Start a builder — add middleware */
81
+ $use: ProcedureBuilder<'query', TBaseCtx>['$use'];
82
+ /** Start a builder — set output schema */
83
+ $output: ProcedureBuilder<'query', TBaseCtx>['$output'];
84
+ /** Start a builder — set errors */
85
+ $errors: ProcedureBuilder<'query', TBaseCtx>['$errors'];
86
+ /** Start a builder — set route metadata */
87
+ $route: ProcedureBuilder<'query', TBaseCtx>['$route'];
88
+ /** Start a builder — set custom metadata */
89
+ $meta: ProcedureBuilder<'query', TBaseCtx>['$meta'];
90
+ /** Define a subscription (SSE stream) */
91
+ subscription: SubscriptionFactory<TBaseCtx>;
92
+ /** Start a builder — create a background task */
93
+ $task: ProcedureBuilder<'query', TBaseCtx>['$task'];
94
+ /** Assemble router and compile pipelines */
95
+ router: <T extends RouterDef>(def: T) => T;
96
+ /** Create a Fetch API handler: (Request) => Response */
97
+ handler: (router: RouterDef, options?: {
98
+ /** Enable Scalar API Reference UI at /api/reference and /api/openapi.json */scalar?: boolean | ScalarOptions; /** Enable analytics dashboard at /api/analytics */
99
+ analytics?: boolean | AnalyticsOptions;
100
+ }) => (request: Request) => Response | Promise<Response>;
101
+ /** Create a direct caller — call procedures without HTTP. For testing and server-side usage. */
102
+ createCaller: <T extends RouterDef>(router: T, options?: {
103
+ /** Override or extend the base context */contextOverride?: Record<string, unknown>; /** Mock request headers */
104
+ headers?: Record<string, string>; /** Default timeout in ms (default: 30000, null = no timeout) */
105
+ timeout?: number | null;
106
+ }) => InferClient<T>;
107
+ /** Create & start a Node.js HTTP server. Returns a handle to gracefully shut down. */
108
+ serve: (router: RouterDef, options?: ServeOptions) => Promise<SilgiServer>;
109
+ }
110
+ interface GuardConfig<TBaseCtx, TReturn extends Record<string, unknown> | void, TErrors extends ErrorDef> {
111
+ errors?: TErrors;
112
+ fn: GuardFn<TBaseCtx, TReturn>;
113
+ }
114
+ interface GuardFactory<TBaseCtx> {
115
+ /** Simple guard: guard(fn) */
116
+ <TReturn extends Record<string, unknown> | void>(fn: GuardFn<TBaseCtx, TReturn>): GuardDef<TBaseCtx, TReturn, {}>;
117
+ /** Guard with typed errors: guard({ errors, fn }) */
118
+ <TReturn extends Record<string, unknown> | void, TErrors extends ErrorDef>(config: GuardConfig<TBaseCtx, TReturn, TErrors>): GuardDef<TBaseCtx, TReturn, TErrors>;
119
+ }
120
+ interface SubscriptionFactory<TBaseCtx extends Record<string, unknown>> {
121
+ /** Builder: `subscription()` — returns chainable builder */
122
+ (): ProcedureBuilder<'subscription', TBaseCtx>;
123
+ /** Short: `subscription(resolve)` */
124
+ <TOutput>(resolve: (opts: ResolveContext<TBaseCtx, undefined, {}>) => AsyncIterableIterator<TOutput>): ProcedureDef<'subscription', undefined, TOutput, {}>;
125
+ /** Short: `subscription(input, resolve)` */
126
+ <TSchema extends AnySchema, TOutput>(input: TSchema, resolve: (opts: ResolveContext<TBaseCtx, InferSchemaOutput<TSchema>, {}>) => AsyncIterableIterator<TOutput>): ProcedureDef<'subscription', InferSchemaInput<TSchema>, TOutput, {}>;
127
+ }
128
+ /**
129
+ * Create a Silgi RPC instance with typed context.
130
+ *
131
+ * @example
132
+ * ```ts
133
+ * const k = silgi({
134
+ * context: (req) => ({ db: getDB(), user: getUser(req) }),
135
+ * hooks: {
136
+ * request: ({ path }) => console.log(`-> ${path}`),
137
+ * },
138
+ * })
139
+ * // k.$input(), k.$resolve(), k.guard(), k.router(), k.serve()
140
+ * ```
141
+ */
142
+ declare function silgi<TBaseCtx extends Record<string, unknown>>(config: SilgiConfig<TBaseCtx>): SilgiInstance<TBaseCtx>;
143
+ //#endregion
144
+ export { SilgiConfig, SilgiInstance, silgi };
package/dist/silgi.mjs ADDED
@@ -0,0 +1,164 @@
1
+ import { createTaskFromProcedure } from "./core/task.mjs";
2
+ import { createProcedureBuilder } from "./builder.mjs";
3
+ import { assignPaths, routerCache } from "./core/router-utils.mjs";
4
+ import { compileRouter } from "./compile.mjs";
5
+ import { createCaller } from "./caller.mjs";
6
+ import { createFetchHandler } from "./core/handler.mjs";
7
+ import { createHooks } from "hookable";
8
+ //#region src/silgi.ts
9
+ /**
10
+ * silgi() — the main entry point.
11
+ *
12
+ * Creates a Silgi instance with typed context.
13
+ * All procedure/middleware factories are methods on this instance,
14
+ * so context type flows automatically.
15
+ *
16
+ * Usage:
17
+ * const k = silgi({ context: (req) => ({ db, headers }) })
18
+ * // k.$input(), k.$resolve(), k.$use(), k.guard(), k.router(), k.handler()
19
+ */
20
+ function createProcedure(type, ...args) {
21
+ if (args.length === 0) return createProcedureBuilder(type);
22
+ if (args.length === 1 && typeof args[0] === "function") return {
23
+ type,
24
+ input: null,
25
+ output: null,
26
+ errors: null,
27
+ use: null,
28
+ resolve: args[0],
29
+ route: null,
30
+ meta: null
31
+ };
32
+ if (args.length === 2 && typeof args[1] === "function") return {
33
+ type,
34
+ input: args[0],
35
+ output: null,
36
+ errors: null,
37
+ use: null,
38
+ resolve: args[1],
39
+ route: null,
40
+ meta: null
41
+ };
42
+ throw new TypeError(`Invalid arguments for ${type}()`);
43
+ }
44
+ /**
45
+ * Create a Silgi RPC instance with typed context.
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * const k = silgi({
50
+ * context: (req) => ({ db: getDB(), user: getUser(req) }),
51
+ * hooks: {
52
+ * request: ({ path }) => console.log(`-> ${path}`),
53
+ * },
54
+ * })
55
+ * // k.$input(), k.$resolve(), k.guard(), k.router(), k.serve()
56
+ * ```
57
+ */
58
+ function silgi(config) {
59
+ const contextFactory = config.context;
60
+ const hooks = createHooks();
61
+ if (config.hooks) {
62
+ for (const [name, fn] of Object.entries(config.hooks)) if (Array.isArray(fn)) for (const f of fn) hooks.hook(name, f);
63
+ else if (fn) hooks.hook(name, fn);
64
+ }
65
+ if (config.storage) import("./core/storage.mjs").then((m) => m.initStorage(config.storage)).catch((e) => {
66
+ console.error(`[silgi] Failed to initialize storage: ${e instanceof Error ? e.message : e}`);
67
+ });
68
+ const ctxFactory = () => contextFactory(new Request("http://localhost"));
69
+ return {
70
+ hook: hooks.hook.bind(hooks),
71
+ removeHook: hooks.removeHook.bind(hooks),
72
+ useStorage: (...args) => {
73
+ return import("./core/storage.mjs").then((m) => m.useStorage(...args));
74
+ },
75
+ guard: (fnOrConfig) => {
76
+ if (typeof fnOrConfig === "function") return {
77
+ kind: "guard",
78
+ fn: fnOrConfig
79
+ };
80
+ return {
81
+ kind: "guard",
82
+ fn: fnOrConfig.fn,
83
+ errors: fnOrConfig.errors
84
+ };
85
+ },
86
+ wrap: (fn) => ({
87
+ kind: "wrap",
88
+ fn
89
+ }),
90
+ $resolve: ((fn) => createProcedure("query", fn)),
91
+ $input: ((schema) => createProcedureBuilder("query", ctxFactory).$input(schema)),
92
+ $use: ((...middleware) => {
93
+ const b = createProcedureBuilder("query", ctxFactory);
94
+ for (const m of middleware) b.$use(m);
95
+ return b;
96
+ }),
97
+ $output: ((schema) => createProcedureBuilder("query", ctxFactory).$output(schema)),
98
+ $errors: ((errors) => createProcedureBuilder("query", ctxFactory).$errors(errors)),
99
+ $route: ((route) => createProcedureBuilder("query", ctxFactory).$route(route)),
100
+ $meta: ((meta) => createProcedureBuilder("query", ctxFactory).$meta(meta)),
101
+ subscription: ((...args) => createProcedure("subscription", ...args)),
102
+ $task: ((config) => {
103
+ return createTaskFromProcedure(config, config.resolve, null, null, ctxFactory);
104
+ }),
105
+ router: (def) => {
106
+ const assigned = assignPaths(def);
107
+ const flat = compileRouter(assigned);
108
+ routerCache.set(def, flat);
109
+ routerCache.set(assigned, flat);
110
+ return def;
111
+ },
112
+ createCaller: (routerDef, options) => {
113
+ return createCaller(routerDef, contextFactory, options);
114
+ },
115
+ handler: (routerDef, options) => {
116
+ let fetchHandler;
117
+ let initPromise;
118
+ async function init() {
119
+ let h = createFetchHandler(routerDef, contextFactory, hooks);
120
+ if (options?.scalar) {
121
+ const { wrapWithScalar } = await import("./scalar.mjs");
122
+ const scalarOpts = typeof options.scalar === "object" ? options.scalar : {};
123
+ h = wrapWithScalar(h, routerDef, scalarOpts);
124
+ }
125
+ if (options?.analytics) {
126
+ const { wrapWithAnalytics } = await import("./plugins/analytics.mjs");
127
+ const analyticsOpts = typeof options.analytics === "object" ? options.analytics : {};
128
+ h = wrapWithAnalytics(h, analyticsOpts);
129
+ }
130
+ fetchHandler = h;
131
+ }
132
+ return (request) => {
133
+ if (fetchHandler) return fetchHandler(request);
134
+ if (!options?.scalar && !options?.analytics) {
135
+ fetchHandler = createFetchHandler(routerDef, contextFactory, hooks);
136
+ return fetchHandler(request);
137
+ }
138
+ initPromise ??= init();
139
+ return initPromise.then(() => fetchHandler(request));
140
+ };
141
+ },
142
+ serve: async (routerDef, options) => {
143
+ const { createServeHandler } = await import("./core/serve.mjs");
144
+ const server = await createServeHandler(routerDef, contextFactory, hooks, options);
145
+ const { collectCronTasks, startCronJobs, stopCronJobs } = await import("./core/task.mjs");
146
+ const cronTasks = collectCronTasks(routerDef);
147
+ if (cronTasks.length > 0) {
148
+ await startCronJobs(cronTasks);
149
+ console.log(` ${cronTasks.length} cron task(s) scheduled`);
150
+ }
151
+ const originalClose = server.close.bind(server);
152
+ server.close = async (force) => {
153
+ stopCronJobs();
154
+ return originalClose(force);
155
+ };
156
+ const onSignal = () => stopCronJobs();
157
+ process.once("SIGINT", onSignal);
158
+ process.once("SIGTERM", onSignal);
159
+ return server;
160
+ }
161
+ };
162
+ }
163
+ //#endregion
164
+ export { silgi };
@@ -0,0 +1,22 @@
1
+ import { RouterDef } from "./types.mjs";
2
+
3
+ //#region src/trpc-interop.d.ts
4
+ /**
5
+ * Convert a tRPC router to a Silgi RouterDef.
6
+ *
7
+ * Walks the tRPC router's `_def.procedures` and wraps each one as
8
+ * a Silgi ProcedureDef that calls the tRPC procedure's resolver.
9
+ *
10
+ * Supports:
11
+ * - tRPC v10 and v11 routers
12
+ * - Queries, mutations, and subscriptions
13
+ * - Input schemas (passed through as-is)
14
+ * - Middleware (runs inside tRPC, not Silgi's pipeline)
15
+ *
16
+ * Does NOT support:
17
+ * - Converting tRPC middleware to Silgi guards/wraps
18
+ * - tRPC context factories (use Silgi's context instead)
19
+ */
20
+ declare function fromTRPC(trpcRouter: unknown): RouterDef;
21
+ //#endregion
22
+ export { fromTRPC };