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,76 @@
1
+ import { createFetchHandler } from "./handler.mjs";
2
+ import { serve } from "srvx";
3
+ //#region src/core/serve.ts
4
+ async function createServeHandler(routerDef, contextFactory, hooks, options) {
5
+ const port = options?.port ?? 3e3;
6
+ const hostname = options?.hostname ?? "127.0.0.1";
7
+ let handler = createFetchHandler(routerDef, contextFactory, hooks);
8
+ if (options?.scalar) {
9
+ const { wrapWithScalar } = await import("../scalar.mjs");
10
+ const scalarOpts = typeof options.scalar === "object" ? options.scalar : {};
11
+ handler = wrapWithScalar(handler, routerDef, scalarOpts);
12
+ }
13
+ if (options?.analytics) {
14
+ const { wrapWithAnalytics } = await import("../plugins/analytics.mjs");
15
+ const analyticsOpts = typeof options.analytics === "object" ? options.analytics : {};
16
+ handler = wrapWithAnalytics(handler, analyticsOpts);
17
+ }
18
+ const shutdownOpt = options?.gracefulShutdown ?? true;
19
+ let gracefulShutdown;
20
+ if (typeof shutdownOpt === "object") gracefulShutdown = {
21
+ gracefulTimeout: shutdownOpt.timeout,
22
+ forceTimeout: shutdownOpt.forceTimeout
23
+ };
24
+ else gracefulShutdown = shutdownOpt;
25
+ const server = await serve({
26
+ port,
27
+ hostname,
28
+ fetch: handler,
29
+ gracefulShutdown,
30
+ silent: true,
31
+ ...options?.http2 && { tls: {
32
+ cert: options.http2.cert,
33
+ key: options.http2.key
34
+ } }
35
+ });
36
+ await server.ready();
37
+ let resolvedPort = port;
38
+ if (server.node?.server) {
39
+ const addr = server.node.server.address();
40
+ if (addr && typeof addr === "object") resolvedPort = addr.port;
41
+ }
42
+ const protocol = options?.http2 ? "https" : "http";
43
+ const rawUrl = server.url || `${protocol}://${hostname}:${resolvedPort}`;
44
+ const url = rawUrl.endsWith("/") ? rawUrl.slice(0, -1) : rawUrl;
45
+ if (options?.ws && server.node?.server) {
46
+ const { attachWebSocket } = await import("../ws.mjs");
47
+ const wsOpts = typeof options.ws === "object" ? options.ws : void 0;
48
+ await attachWebSocket(server.node.server, routerDef, wsOpts);
49
+ }
50
+ console.log(`\nSilgi server running at ${url}`);
51
+ if (options?.http2) console.log(` HTTP/2 enabled (with HTTP/1.1 fallback)`);
52
+ if (options?.ws) console.log(` WebSocket RPC at ws://${hostname}:${resolvedPort}`);
53
+ if (options?.scalar) console.log(` Scalar API Reference at ${url}/api/reference`);
54
+ if (options?.analytics) console.log(` Analytics dashboard at ${url}/api/analytics`);
55
+ console.log();
56
+ await hooks.callHook("serve:start", {
57
+ url,
58
+ port: resolvedPort,
59
+ hostname
60
+ });
61
+ return {
62
+ url,
63
+ port: resolvedPort,
64
+ hostname,
65
+ async close(forceCloseConnections = false) {
66
+ await server.close(forceCloseConnections);
67
+ await hooks.callHook("serve:stop", {
68
+ url,
69
+ port: resolvedPort,
70
+ hostname
71
+ });
72
+ }
73
+ };
74
+ }
75
+ //#endregion
76
+ export { createServeHandler };
@@ -0,0 +1,18 @@
1
+ //#region src/core/sse.d.ts
2
+ interface EventMeta {
3
+ id?: string;
4
+ retry?: number;
5
+ }
6
+ /**
7
+ * Attach SSE metadata (id, retry) to a value.
8
+ *
9
+ * Only works with object values (arrays, plain objects, etc.).
10
+ * Primitives cannot carry metadata — wrap them in an object first.
11
+ */
12
+ declare function withEventMeta<T>(value: T, meta: EventMeta): T;
13
+ /**
14
+ * Read SSE metadata from a value (if attached).
15
+ */
16
+ declare function getEventMeta(value: unknown): EventMeta | undefined;
17
+ //#endregion
18
+ export { EventMeta, getEventMeta, withEventMeta };
@@ -0,0 +1,110 @@
1
+ import { SilgiError } from "./error.mjs";
2
+ //#region src/core/sse.ts
3
+ /**
4
+ * Server-Sent Events (SSE) encoding/decoding.
5
+ *
6
+ * Supports three event types:
7
+ * - message: a yielded value
8
+ * - error: an error event with data
9
+ * - done: the return value (stream complete)
10
+ *
11
+ * Event metadata (id, retry) can be attached to object values
12
+ * via withEventMeta() using a WeakMap side-channel.
13
+ */
14
+ const _eventMeta = /* @__PURE__ */ new WeakMap();
15
+ /**
16
+ * Attach SSE metadata (id, retry) to a value.
17
+ *
18
+ * Only works with object values (arrays, plain objects, etc.).
19
+ * Primitives cannot carry metadata — wrap them in an object first.
20
+ */
21
+ function withEventMeta(value, meta) {
22
+ if (typeof value === "object" && value !== null) _eventMeta.set(value, meta);
23
+ return value;
24
+ }
25
+ /**
26
+ * Read SSE metadata from a value (if attached).
27
+ */
28
+ function getEventMeta(value) {
29
+ if (typeof value !== "object" || value === null) return void 0;
30
+ return _eventMeta.get(value);
31
+ }
32
+ /**
33
+ * Encode an EventMessage into SSE wire format.
34
+ */
35
+ function encodeEventMessage(msg) {
36
+ const lines = [];
37
+ if (msg.comment !== void 0) for (const line of msg.comment.split("\n")) lines.push(`: ${line}`);
38
+ if (msg.event !== void 0) lines.push(`event: ${msg.event}`);
39
+ if (msg.id !== void 0) lines.push(`id: ${msg.id}`);
40
+ if (msg.retry !== void 0) lines.push(`retry: ${msg.retry}`);
41
+ if (msg.data !== void 0) for (const line of msg.data.split("\n")) lines.push(`data: ${line}`);
42
+ return lines.join("\n") + "\n\n";
43
+ }
44
+ /**
45
+ * Convert an async iterator to an SSE ReadableStream.
46
+ * Each yielded value becomes a "message" event.
47
+ * Errors become "error" events. Return value becomes "done".
48
+ */
49
+ function iteratorToEventStream(iterator, options = {}) {
50
+ const serialize = options.serialize ?? JSON.stringify;
51
+ const keepAliveMs = options.keepAliveMs ?? 3e4;
52
+ let keepAliveTimer;
53
+ let cancelled = false;
54
+ return new ReadableStream({
55
+ start(controller) {
56
+ if (options.initialComment !== void 0) controller.enqueue(encodeEventMessage({ comment: options.initialComment }));
57
+ keepAliveTimer = setInterval(() => {
58
+ if (!cancelled) controller.enqueue(encodeEventMessage({ comment: "keepalive" }));
59
+ }, keepAliveMs);
60
+ },
61
+ async pull(controller) {
62
+ try {
63
+ const result = await iterator.next();
64
+ if (cancelled) return;
65
+ if (result.done) {
66
+ clearInterval(keepAliveTimer);
67
+ const data = result.value !== void 0 ? serialize(result.value) : void 0;
68
+ controller.enqueue(encodeEventMessage({
69
+ event: "done",
70
+ data
71
+ }));
72
+ controller.close();
73
+ return;
74
+ }
75
+ const meta = getEventMeta(result.value);
76
+ const msg = {
77
+ event: "message",
78
+ data: serialize(result.value),
79
+ id: meta?.id,
80
+ retry: meta?.retry
81
+ };
82
+ controller.enqueue(encodeEventMessage(msg));
83
+ } catch (error) {
84
+ clearInterval(keepAliveTimer);
85
+ if (cancelled) return;
86
+ let errorData;
87
+ if (error instanceof SilgiError && error.defined) errorData = JSON.stringify({
88
+ message: error.message,
89
+ code: error.code
90
+ });
91
+ else errorData = JSON.stringify({
92
+ message: "Internal server error",
93
+ code: "INTERNAL_SERVER_ERROR"
94
+ });
95
+ controller.enqueue(encodeEventMessage({
96
+ event: "error",
97
+ data: errorData
98
+ }));
99
+ controller.close();
100
+ }
101
+ },
102
+ async cancel() {
103
+ cancelled = true;
104
+ clearInterval(keepAliveTimer);
105
+ await iterator.return?.();
106
+ }
107
+ }).pipeThrough(new TextEncoderStream());
108
+ }
109
+ //#endregion
110
+ export { encodeEventMessage, getEventMeta, iteratorToEventStream, withEventMeta };
@@ -1,7 +1,20 @@
1
- import { Storage } from "unstorage";
2
- import { Silgi, SilgiStorageBase } from "silgi/types";
1
+ import { Driver, Storage, StorageValue } from "unstorage";
3
2
 
4
3
  //#region src/core/storage.d.ts
5
- declare function storageMount<T extends Storage = Storage>(silgi?: Silgi): (base: keyof SilgiStorageBase, driver: Parameters<Storage["mount"]>[1]) => T;
4
+ /** Storage config map of mount path driver instance, or a pre-built Storage */
5
+ type StorageConfig = Storage | Record<string, Driver>;
6
+ /**
7
+ * Get the storage instance with optional prefix.
8
+ * Creates default storage with `data` and `cache` mounts on first call.
9
+ */
10
+ declare function useStorage<T extends StorageValue = StorageValue>(base?: string): Storage<T>;
11
+ /**
12
+ * Initialize storage from config — call once at startup.
13
+ */
14
+ declare function initStorage(config?: StorageConfig): Storage;
15
+ /**
16
+ * Reset storage — for testing.
17
+ */
18
+ declare function resetStorage(): void;
6
19
  //#endregion
7
- export { storageMount as storageMount$1 };
20
+ export { type Driver, type Storage, StorageConfig, type StorageValue, initStorage, resetStorage, useStorage };
@@ -1,15 +1,62 @@
1
- import { useSilgi } from "./unctx.mjs";
2
-
1
+ import { createStorage, prefixStorage } from "unstorage";
2
+ import memoryDriver from "unstorage/drivers/memory";
3
3
  //#region src/core/storage.ts
4
- function storageMount(silgi) {
5
- const _silgi = silgi || useSilgi();
6
- return (base, driver) => {
7
- const existingStorage = _silgi.storage.getMount(base);
8
- if (existingStorage) return existingStorage.driver;
9
- const storage = _silgi.storage.mount(base, driver);
10
- return storage;
11
- };
12
- }
13
-
4
+ /**
5
+ * Storage Nitro-style global storage with unstorage.
6
+ *
7
+ * Two default mounts are created automatically:
8
+ * - `data` — persistent data (analytics, sessions, etc.)
9
+ * - `cache` — ephemeral cache (query results, SWR, etc.)
10
+ *
11
+ * Both use in-memory drivers by default. Override with custom drivers:
12
+ *
13
+ * ```ts
14
+ * import redisDriver from 'unstorage/drivers/redis'
15
+ * import fsDriver from 'unstorage/drivers/fs'
16
+ *
17
+ * const s = silgi({
18
+ * context: () => ({}),
19
+ * storage: {
20
+ * data: fsDriver({ base: '.data' }),
21
+ * cache: redisDriver({ url: 'redis://localhost' }),
22
+ * },
23
+ * })
24
+ *
25
+ * // In procedures:
26
+ * const data = useStorage('data')
27
+ * const cache = useStorage('cache')
28
+ * ```
29
+ */
30
+ function _initStorage(config) {
31
+ if (config && "getItem" in config) return config;
32
+ const storage = createStorage({});
33
+ const configKeys = config ? new Set(Object.keys(config)) : null;
34
+ if (!configKeys?.has("data")) storage.mount("data", memoryDriver());
35
+ if (!configKeys?.has("cache")) storage.mount("cache", memoryDriver());
36
+ if (config) for (const [path, driver] of Object.entries(config)) storage.mount(path, driver);
37
+ return storage;
38
+ }
39
+ /**
40
+ * Get the storage instance with optional prefix.
41
+ * Creates default storage with `data` and `cache` mounts on first call.
42
+ */
43
+ function useStorage(base = "") {
44
+ const storage = useStorage._storage ??= _initStorage();
45
+ return base ? prefixStorage(storage, base) : storage;
46
+ }
47
+ /**
48
+ * Initialize storage from config — call once at startup.
49
+ */
50
+ function initStorage(config) {
51
+ const storage = _initStorage(config);
52
+ useStorage._storage = storage;
53
+ return storage;
54
+ }
55
+ /**
56
+ * Reset storage — for testing.
57
+ */
58
+ function resetStorage() {
59
+ useStorage._storage = void 0;
60
+ }
14
61
  //#endregion
15
- export { storageMount };
62
+ export { initStorage, resetStorage, useStorage };
@@ -0,0 +1,62 @@
1
+ import { AnySchema } from "./schema.mjs";
2
+ import { MiddlewareDef } from "../types.mjs";
3
+
4
+ //#region src/core/task.d.ts
5
+ interface TaskEvent<TInput = unknown, TCtx = unknown> {
6
+ input: TInput;
7
+ ctx: TCtx;
8
+ name: string;
9
+ scheduledTime?: number;
10
+ }
11
+ interface TaskDef<TInput = unknown, TOutput = unknown> {
12
+ readonly _tag: 'task';
13
+ readonly type: 'mutation';
14
+ readonly cron: string | null;
15
+ readonly input: AnySchema | null;
16
+ readonly output: null;
17
+ readonly errors: null;
18
+ readonly use: readonly MiddlewareDef[] | null;
19
+ readonly resolve: Function;
20
+ readonly route: {
21
+ summary?: string;
22
+ tags?: string[];
23
+ } | null;
24
+ readonly meta: null;
25
+ readonly _contextFactory: (() => unknown | Promise<unknown>) | null;
26
+ /** Dispatch the task. Pass ctx from a procedure to auto-record a trace span. */
27
+ dispatch: undefined extends TInput ? (input?: TInput, ctx?: Record<string, unknown>) => Promise<TOutput> : (input: TInput, ctx?: Record<string, unknown>) => Promise<TOutput>;
28
+ }
29
+ type TaskCompleteCallback = (entry: {
30
+ taskName: string;
31
+ trigger: 'dispatch' | 'cron' | 'http';
32
+ timestamp: number;
33
+ durationMs: number;
34
+ status: 'success' | 'error';
35
+ error?: string;
36
+ input?: unknown;
37
+ output?: unknown;
38
+ spans?: unknown[];
39
+ }) => void;
40
+ declare function setTaskAnalytics(cb: TaskCompleteCallback | null): void;
41
+ declare function runTask<TInput, TOutput>(task: TaskDef<TInput, TOutput>, ...args: undefined extends TInput ? [input?: TInput] : [input: TInput]): Promise<TOutput>;
42
+ declare function collectCronTasks(def: Record<string, unknown>): Array<{
43
+ cron: string;
44
+ task: TaskDef<any, any>;
45
+ }>;
46
+ declare function startCronJobs(cronTasks: Array<{
47
+ cron: string;
48
+ task: TaskDef<any, any>;
49
+ }>): Promise<void>;
50
+ interface ScheduledTaskInfo {
51
+ name: string;
52
+ cron: string;
53
+ description?: string;
54
+ nextRun: number | null;
55
+ lastRun: number | null;
56
+ runs: number;
57
+ errors: number;
58
+ }
59
+ declare function getScheduledTasks(): ScheduledTaskInfo[];
60
+ declare function stopCronJobs(): void;
61
+ //#endregion
62
+ export { ScheduledTaskInfo, TaskDef, TaskEvent, collectCronTasks, getScheduledTasks, runTask, setTaskAnalytics, startCronJobs, stopCronJobs };
@@ -0,0 +1,165 @@
1
+ import { validateSchema } from "./schema.mjs";
2
+ //#region src/core/task.ts
3
+ /**
4
+ * Task API — type-safe background tasks built on the procedure builder.
5
+ *
6
+ * Tasks are procedures with dispatch + cron capabilities:
7
+ * s.$use(auth).$input(schema).$task({ name: 'send-email', resolve })
8
+ */
9
+ let _onTaskComplete = null;
10
+ function setTaskAnalytics(cb) {
11
+ _onTaskComplete = cb;
12
+ }
13
+ function createTaskFromProcedure(config, resolveFn, inputSchema, use, contextFactory) {
14
+ const { name, cron = null, description } = config;
15
+ if (!name) throw new TypeError("Task name is required");
16
+ const taskResolve = async (opts) => {
17
+ return resolveFn({
18
+ input: opts.input,
19
+ ctx: opts.ctx,
20
+ name,
21
+ scheduledTime: void 0
22
+ });
23
+ };
24
+ const dispatch = async (rawInput, parentCtx) => {
25
+ const input = inputSchema ? await validateSchema(inputSchema, rawInput) : rawInput;
26
+ const ctx = contextFactory ? await contextFactory() : {};
27
+ const parentTrace = parentCtx?.__analyticsTrace;
28
+ const spanStart = parentTrace ? performance.now() : 0;
29
+ let reqTrace = null;
30
+ try {
31
+ const { RequestTrace } = await import("../plugins/analytics.mjs");
32
+ reqTrace = new RequestTrace();
33
+ ctx.__analyticsTrace = reqTrace;
34
+ } catch {}
35
+ const t0 = performance.now();
36
+ try {
37
+ const output = await resolveFn({
38
+ input,
39
+ ctx,
40
+ name,
41
+ scheduledTime: void 0
42
+ });
43
+ if (parentTrace) parentTrace.spans.push({
44
+ name: `task:${name}`,
45
+ kind: "queue",
46
+ durationMs: Math.round((performance.now() - spanStart) * 100) / 100,
47
+ startOffsetMs: Math.round((spanStart - parentTrace.t0) * 100) / 100,
48
+ detail: `dispatch ${name}`
49
+ });
50
+ if (_onTaskComplete) _onTaskComplete({
51
+ taskName: name,
52
+ trigger: "dispatch",
53
+ timestamp: Date.now(),
54
+ durationMs: Math.round((performance.now() - t0) * 100) / 100,
55
+ status: "success",
56
+ input,
57
+ output,
58
+ spans: reqTrace?.spans
59
+ });
60
+ return output;
61
+ } catch (err) {
62
+ if (parentTrace) parentTrace.spans.push({
63
+ name: `task:${name}`,
64
+ kind: "queue",
65
+ durationMs: Math.round((performance.now() - spanStart) * 100) / 100,
66
+ startOffsetMs: Math.round((spanStart - parentTrace.t0) * 100) / 100,
67
+ detail: `dispatch ${name}`,
68
+ error: err instanceof Error ? err.message : String(err)
69
+ });
70
+ if (_onTaskComplete) _onTaskComplete({
71
+ taskName: name,
72
+ trigger: "dispatch",
73
+ timestamp: Date.now(),
74
+ durationMs: Math.round((performance.now() - t0) * 100) / 100,
75
+ status: "error",
76
+ error: err instanceof Error ? err.message : String(err),
77
+ input,
78
+ spans: reqTrace?.spans
79
+ });
80
+ throw err;
81
+ }
82
+ };
83
+ return {
84
+ _tag: "task",
85
+ type: "mutation",
86
+ cron,
87
+ input: inputSchema,
88
+ output: null,
89
+ errors: null,
90
+ use,
91
+ resolve: taskResolve,
92
+ route: description ? {
93
+ summary: description,
94
+ tags: ["Tasks"]
95
+ } : null,
96
+ meta: null,
97
+ _contextFactory: contextFactory,
98
+ dispatch
99
+ };
100
+ }
101
+ const _running = /* @__PURE__ */ new Map();
102
+ async function runTask(task, ...args) {
103
+ const existing = _running.get(task);
104
+ if (existing) return existing;
105
+ const promise = task.dispatch(args[0]);
106
+ _running.set(task, promise);
107
+ try {
108
+ return await promise;
109
+ } finally {
110
+ _running.delete(task);
111
+ }
112
+ }
113
+ function collectCronTasks(def) {
114
+ const result = [];
115
+ for (const value of Object.values(def)) if (value && typeof value === "object") {
116
+ if ("_tag" in value && value._tag === "task" && value.cron) result.push({
117
+ cron: value.cron,
118
+ task: value
119
+ });
120
+ else if (!("_tag" in value)) result.push(...collectCronTasks(value));
121
+ }
122
+ return result;
123
+ }
124
+ let _cronEntries = [];
125
+ async function startCronJobs(cronTasks) {
126
+ if (cronTasks.length === 0) return;
127
+ const { Cron } = await import("croner");
128
+ for (const { cron, task } of cronTasks) {
129
+ const entry = {
130
+ name: task.route?.summary || cron,
131
+ cron,
132
+ description: task.route?.summary,
133
+ job: null,
134
+ lastRun: null,
135
+ runs: 0,
136
+ errors: 0
137
+ };
138
+ entry.job = new Cron(cron, async () => {
139
+ entry.lastRun = Date.now();
140
+ entry.runs++;
141
+ task.dispatch(void 0).catch((err) => {
142
+ entry.errors++;
143
+ console.error(`[silgi] Cron task failed:`, err instanceof Error ? err.message : err);
144
+ });
145
+ });
146
+ _cronEntries.push(entry);
147
+ }
148
+ }
149
+ function getScheduledTasks() {
150
+ return _cronEntries.map((e) => ({
151
+ name: e.name,
152
+ cron: e.cron,
153
+ description: e.description,
154
+ nextRun: e.job.nextRun()?.getTime() ?? null,
155
+ lastRun: e.lastRun,
156
+ runs: e.runs,
157
+ errors: e.errors
158
+ }));
159
+ }
160
+ function stopCronJobs() {
161
+ for (const e of _cronEntries) e.job.stop();
162
+ _cronEntries = [];
163
+ }
164
+ //#endregion
165
+ export { collectCronTasks, createTaskFromProcedure, getScheduledTasks, runTask, setTaskAnalytics, startCronJobs, stopCronJobs };
@@ -0,0 +1,13 @@
1
+ //#region src/core/trace-map.d.ts
2
+ /**
3
+ * Shared WeakMap for passing analytics traces between handler and analytics plugin.
4
+ *
5
+ * Lives in core/ so the dependency direction is correct:
6
+ * core/handler.ts → core/trace-map.ts ← plugins/analytics.ts
7
+ *
8
+ * The WeakMap maps Request → RequestTrace, allowing the handler to inject
9
+ * trace data into context without importing the analytics plugin.
10
+ */
11
+ declare const analyticsTraceMap: WeakMap<Request, unknown>;
12
+ //#endregion
13
+ export { analyticsTraceMap };
@@ -0,0 +1,13 @@
1
+ //#region src/core/trace-map.ts
2
+ /**
3
+ * Shared WeakMap for passing analytics traces between handler and analytics plugin.
4
+ *
5
+ * Lives in core/ so the dependency direction is correct:
6
+ * core/handler.ts → core/trace-map.ts ← plugins/analytics.ts
7
+ *
8
+ * The WeakMap maps Request → RequestTrace, allowing the handler to inject
9
+ * trace data into context without importing the analytics plugin.
10
+ */
11
+ const analyticsTraceMap = /* @__PURE__ */ new WeakMap();
12
+ //#endregion
13
+ export { analyticsTraceMap };
@@ -0,0 +1,28 @@
1
+ //#region src/core/url.ts
2
+ /**
3
+ * URL path extraction — fast, no URL constructor.
4
+ *
5
+ * Shared by handler.ts and analytics to avoid duplicating
6
+ * the manual indexOf-based path parsing logic.
7
+ */
8
+ /**
9
+ * Extract the full path (with leading slash) from a URL string.
10
+ * Returns the path portion without query string.
11
+ *
12
+ * Uses manual indexOf — no `new URL()` overhead.
13
+ */
14
+ function parseUrlPath(url) {
15
+ const pathStart = url.indexOf("/", url.indexOf("//") + 2);
16
+ const qMark = url.indexOf("?", pathStart);
17
+ return qMark === -1 ? url.slice(pathStart) : url.slice(pathStart, qMark);
18
+ }
19
+ /**
20
+ * Extract pathname without leading slash from a URL string.
21
+ * Used for route matching where paths are slash-stripped.
22
+ */
23
+ function parseUrlPathname(url) {
24
+ const fullPath = parseUrlPath(url);
25
+ return fullPath.length > 1 ? fullPath.slice(1) : "";
26
+ }
27
+ //#endregion
28
+ export { parseUrlPath, parseUrlPathname };
@@ -0,0 +1,24 @@
1
+ //#region src/core/utils.ts
2
+ /**
3
+ * Core utilities — minimal, zero-allocation where possible.
4
+ */
5
+ function sequential(fn) {
6
+ let pending = Promise.resolve();
7
+ return (...args) => {
8
+ const result = pending.then(() => fn(...args), () => fn(...args));
9
+ pending = result;
10
+ return result;
11
+ };
12
+ }
13
+ function parseEmptyableJSON(text) {
14
+ if (text === "") return void 0;
15
+ return JSON.parse(text);
16
+ }
17
+ function stringifyJSON(value) {
18
+ return JSON.stringify(value, (_key, val) => {
19
+ if (typeof val === "bigint") return val.toString();
20
+ return val;
21
+ });
22
+ }
23
+ //#endregion
24
+ export { parseEmptyableJSON, sequential, stringifyJSON };
package/dist/index.d.mts CHANGED
@@ -1,21 +1,17 @@
1
- import { updateRuntimeStorage$1 as updateRuntimeStorage, useRuntime$1 as useRuntime } from "./core/context.mjs";
2
- import { createSilgi$1 as createSilgi } from "./core/createSilgi.mjs";
3
- import { SilgiError$1 as SilgiError, createError$1 as createError, isError$1 as isError } from "./core/error.mjs";
4
- import { SilgiHttpEvent$1 as SilgiHttpEvent } from "./core/event.mjs";
5
- import { handleResponse$1 as handleResponse, kHandled$1 as kHandled, kNotFound$1 as kNotFound } from "./core/response.mjs";
6
- import { getWebsocket$1 as getWebsocket, handler$1 as handler, middleware$1 as middleware, silgiFetch$1 as silgiFetch } from "./core/silgi.mjs";
7
- import { silgiCLICtx$1 as silgiCLICtx, tryUseSilgiCLI$1 as tryUseSilgiCLI, useSilgiCLI$1 as useSilgiCLI } from "./core/silgiApp.mjs";
8
- import { storageMount$1 as storageMount } from "./core/storage.mjs";
9
- import { silgiCtx$1 as silgiCtx, tryUseSilgi$1 as tryUseSilgi, useSilgi$1 as useSilgi } from "./core/unctx.mjs";
10
- import { createEventStream$1 as createEventStream } from "./core/utils/event-stream.mjs";
11
- import { getEvent$1 as getEvent, getEventContext$1 as getEventContext } from "./core/utils/event.mjs";
12
- import { deepMergeObjects$1 as deepMergeObjects } from "./core/utils/merge.mjs";
13
- import { createMiddleware$1 as createMiddleware } from "./core/utils/middleware.mjs";
14
- import { createResolver$3 as createResolver, getUrlPrefix$1 as getUrlPrefix } from "./core/utils/resolver.mjs";
15
- import { replaceRuntimeValues$1 as replaceRuntimeValues } from "./core/utils/runtime.mjs";
16
- import { createSchema$1 as createSchema } from "./core/utils/schema.mjs";
17
- import { createService$1 as createService, createWebSocket$1 as createWebSocket, defineServiceSetup$1 as defineServiceSetup } from "./core/utils/service.mjs";
18
- import { createShared$1 as createShared } from "./core/utils/shared.mjs";
19
- import { createStorage$1 as createStorage, useSilgiStorage$1 as useSilgiStorage } from "./core/utils/storage.mjs";
20
- import { autoImportTypes } from "./core/index.mjs";
21
- export { SilgiError, SilgiHttpEvent, autoImportTypes, createError, createEventStream, createMiddleware, createResolver, createSchema, createService, createShared, createSilgi, createStorage, createWebSocket, deepMergeObjects, defineServiceSetup, getEvent, getEventContext, getUrlPrefix, getWebsocket, handleResponse, handler, isError, kHandled, kNotFound, middleware, replaceRuntimeValues, silgiCLICtx, silgiCtx, silgiFetch, storageMount, tryUseSilgi, tryUseSilgiCLI, updateRuntimeStorage, useRuntime, useSilgi, useSilgiCLI, useSilgiStorage };
1
+ import { AnySchema, InferSchemaInput, InferSchemaOutput, Schema, ValidationError, type, validateSchema } from "./core/schema.mjs";
2
+ import { ScheduledTaskInfo, TaskDef, TaskEvent, collectCronTasks, getScheduledTasks, runTask, setTaskAnalytics, startCronJobs, stopCronJobs } from "./core/task.mjs";
3
+ import { ErrorDef, ErrorDefItem, FailFn, GuardDef, GuardFn, InferClient, InferContextFromUse, InferGuardOutput, Meta, MiddlewareDef, ProcedureDef, ProcedureType, ResolveContext, RouterDef, WrapDef, WrapFn } from "./types.mjs";
4
+ import { ProcedureBuilder, ProcedureBuilderWithOutput } from "./builder.mjs";
5
+ import { ScalarOptions, generateOpenAPI, scalarHTML } from "./scalar.mjs";
6
+ import { ServeOptions, SilgiServer } from "./core/serve.mjs";
7
+ import { Driver, Storage, StorageConfig, StorageValue, initStorage, resetStorage, useStorage } from "./core/storage.mjs";
8
+ import { SilgiConfig, SilgiInstance, silgi } from "./silgi.mjs";
9
+ import { SilgiError, SilgiErrorCode, SilgiErrorJSON, SilgiErrorOptions, isDefinedError, toSilgiError } from "./core/error.mjs";
10
+ import { AsyncIteratorClass, mapAsyncIterator } from "./core/iterator.mjs";
11
+ import { EventMeta, getEventMeta, withEventMeta } from "./core/sse.mjs";
12
+ import { CallableOptions, callable } from "./callable.mjs";
13
+ import { LifecycleHooks, lifecycleWrap } from "./lifecycle.mjs";
14
+ import { mapInput } from "./map-input.mjs";
15
+ import { compileProcedure, compileRouter, createContext } from "./compile.mjs";
16
+ import { LazyRouter, isLazy, lazy, resolveLazy } from "./lazy.mjs";
17
+ export { type AnySchema, AsyncIteratorClass, type CallableOptions, type Driver, type ErrorDef, type ErrorDefItem, type EventMeta, type FailFn, type GuardDef, type GuardFn, type InferClient, type InferContextFromUse, type InferGuardOutput, type InferSchemaInput, type InferSchemaOutput, type LazyRouter, type LifecycleHooks, type Meta, type MiddlewareDef, type ProcedureBuilder, type ProcedureBuilderWithOutput, type ProcedureDef, type ProcedureType, type ResolveContext, type RouterDef, type ScalarOptions, type ScheduledTaskInfo, type Schema, type ServeOptions, type SilgiConfig, SilgiError, type SilgiErrorCode, type SilgiErrorJSON, type SilgiErrorOptions, type SilgiInstance, type SilgiServer, type Storage, type StorageConfig, type StorageValue, type TaskDef, type TaskEvent, ValidationError, type WrapDef, type WrapFn, callable, collectCronTasks, compileProcedure, compileRouter, createContext, generateOpenAPI, getEventMeta, getScheduledTasks, initStorage, isDefinedError, isLazy, lazy, lifecycleWrap, mapAsyncIterator, mapInput, resetStorage, resolveLazy, runTask, scalarHTML, setTaskAnalytics, silgi, startCronJobs, stopCronJobs, toSilgiError, type, useStorage, validateSchema, withEventMeta };