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.
- package/README.md +103 -1
- package/dist/_virtual/_rolldown/runtime.mjs +5 -0
- package/dist/adapters/_fetch-adapter.d.mts +18 -0
- package/dist/adapters/_fetch-adapter.mjs +53 -0
- package/dist/adapters/astro.d.mts +15 -0
- package/dist/adapters/astro.mjs +31 -0
- package/dist/adapters/aws-lambda.d.mts +42 -0
- package/dist/adapters/aws-lambda.mjs +92 -0
- package/dist/adapters/express.d.mts +16 -0
- package/dist/adapters/express.mjs +110 -0
- package/dist/adapters/message-port.d.mts +42 -0
- package/dist/adapters/message-port.mjs +132 -0
- package/dist/adapters/nestjs.d.mts +25 -0
- package/dist/adapters/nestjs.mjs +83 -0
- package/dist/adapters/nextjs.d.mts +14 -0
- package/dist/adapters/nextjs.mjs +29 -0
- package/dist/adapters/peer.d.mts +27 -0
- package/dist/adapters/peer.mjs +36 -0
- package/dist/adapters/remix.d.mts +15 -0
- package/dist/adapters/remix.mjs +30 -0
- package/dist/adapters/solidstart.d.mts +12 -0
- package/dist/adapters/solidstart.mjs +29 -0
- package/dist/adapters/sveltekit.d.mts +14 -0
- package/dist/adapters/sveltekit.mjs +30 -0
- package/dist/broker/index.d.mts +62 -0
- package/dist/broker/index.mjs +153 -0
- package/dist/broker/nats.d.mts +33 -0
- package/dist/broker/nats.mjs +31 -0
- package/dist/broker/redis.d.mts +51 -0
- package/dist/broker/redis.mjs +92 -0
- package/dist/builder.d.mts +55 -0
- package/dist/builder.mjs +70 -0
- package/dist/callable.d.mts +19 -0
- package/dist/callable.mjs +42 -0
- package/dist/caller.mjs +90 -0
- package/dist/client/adapters/fetch/index.d.mts +15 -0
- package/dist/client/adapters/fetch/index.mjs +57 -0
- package/dist/client/adapters/ofetch/index.d.mts +55 -0
- package/dist/client/adapters/ofetch/index.mjs +91 -0
- package/dist/client/adapters/websocket/index.d.mts +20 -0
- package/dist/client/adapters/websocket/index.mjs +101 -0
- package/dist/client/client.d.mts +37 -0
- package/dist/client/client.mjs +80 -0
- package/dist/client/consume.d.mts +50 -0
- package/dist/client/consume.mjs +66 -0
- package/dist/client/dynamic-link.d.mts +16 -0
- package/dist/client/dynamic-link.mjs +19 -0
- package/dist/client/index.d.mts +6 -0
- package/dist/client/index.mjs +5 -0
- package/dist/client/interceptor.d.mts +31 -0
- package/dist/client/interceptor.mjs +34 -0
- package/dist/client/openapi.d.mts +29 -0
- package/dist/client/openapi.mjs +89 -0
- package/dist/client/plugins/batch.d.mts +26 -0
- package/dist/client/plugins/batch.mjs +64 -0
- package/dist/client/plugins/circuit-breaker.d.mts +24 -0
- package/dist/client/plugins/circuit-breaker.mjs +60 -0
- package/dist/client/plugins/csrf.d.mts +13 -0
- package/dist/client/plugins/csrf.mjs +20 -0
- package/dist/client/plugins/dedupe.d.mts +10 -0
- package/dist/client/plugins/dedupe.mjs +28 -0
- package/dist/client/plugins/index.d.mts +8 -0
- package/dist/client/plugins/index.mjs +8 -0
- package/dist/client/plugins/otel.d.mts +12 -0
- package/dist/client/plugins/otel.mjs +27 -0
- package/dist/client/plugins/retry.d.mts +34 -0
- package/dist/client/plugins/retry.mjs +79 -0
- package/dist/client/plugins/timeout.d.mts +10 -0
- package/dist/client/plugins/timeout.mjs +14 -0
- package/dist/client/server.d.mts +16 -0
- package/dist/client/server.mjs +59 -0
- package/dist/client/types.d.mts +29 -0
- package/dist/codec/devalue.d.mts +21 -0
- package/dist/codec/devalue.mjs +33 -0
- package/dist/codec/msgpack.d.mts +18 -0
- package/dist/codec/msgpack.mjs +45 -0
- package/dist/codec/sanitize.mjs +38 -0
- package/dist/codegen/emitters.d.mts +51 -0
- package/dist/codegen/emitters.mjs +143 -0
- package/dist/codegen/generate.d.mts +25 -0
- package/dist/codegen/generate.mjs +224 -0
- package/dist/codegen/index.d.mts +44 -0
- package/dist/codegen/index.mjs +103 -0
- package/dist/codegen/parse.d.mts +124 -0
- package/dist/codegen/parse.mjs +135 -0
- package/dist/codegen/preserve.d.mts +21 -0
- package/dist/codegen/preserve.mjs +62 -0
- package/dist/codegen/schema-to-code.d.mts +57 -0
- package/dist/codegen/schema-to-code.mjs +167 -0
- package/dist/compile.d.mts +46 -0
- package/dist/compile.mjs +332 -0
- package/dist/core/codec.mjs +67 -0
- package/dist/core/context-bridge.mjs +11 -0
- package/dist/core/dispatch.mjs +62 -0
- package/dist/core/error.d.mts +99 -60
- package/dist/core/error.mjs +125 -92
- package/dist/core/handler.d.mts +6 -0
- package/dist/core/handler.mjs +153 -0
- package/dist/core/input.mjs +49 -0
- package/dist/core/iterator.d.mts +17 -0
- package/dist/core/iterator.mjs +79 -0
- package/dist/core/router-utils.mjs +22 -0
- package/dist/core/schema.d.mts +20 -0
- package/dist/core/schema.mjs +33 -0
- package/dist/core/serve.d.mts +51 -0
- package/dist/core/serve.mjs +76 -0
- package/dist/core/sse.d.mts +18 -0
- package/dist/core/sse.mjs +110 -0
- package/dist/core/storage.d.mts +17 -4
- package/dist/core/storage.mjs +60 -13
- package/dist/core/task.d.mts +62 -0
- package/dist/core/task.mjs +165 -0
- package/dist/core/trace-map.d.mts +13 -0
- package/dist/core/trace-map.mjs +13 -0
- package/dist/core/url.mjs +28 -0
- package/dist/core/utils.mjs +24 -0
- package/dist/index.d.mts +17 -21
- package/dist/index.mjs +14 -22
- package/dist/integrations/ai/index.d.mts +25 -0
- package/dist/integrations/ai/index.mjs +117 -0
- package/dist/integrations/better-auth/index.d.mts +41 -0
- package/dist/integrations/better-auth/index.mjs +331 -0
- package/dist/integrations/drizzle/index.d.mts +27 -0
- package/dist/integrations/drizzle/index.mjs +285 -0
- package/dist/integrations/hey-api/index.d.mts +2 -0
- package/dist/integrations/hey-api/index.mjs +2 -0
- package/dist/integrations/hey-api/to-client.d.mts +20 -0
- package/dist/integrations/hey-api/to-client.mjs +39 -0
- package/dist/integrations/pinia-colada/general-utils.d.mts +13 -0
- package/dist/integrations/pinia-colada/general-utils.mjs +9 -0
- package/dist/integrations/pinia-colada/index.d.mts +6 -0
- package/dist/integrations/pinia-colada/index.mjs +5 -0
- package/dist/integrations/pinia-colada/key.d.mts +11 -0
- package/dist/integrations/pinia-colada/key.mjs +11 -0
- package/dist/integrations/pinia-colada/procedure-utils.d.mts +25 -0
- package/dist/integrations/pinia-colada/procedure-utils.mjs +33 -0
- package/dist/integrations/pinia-colada/router-utils.d.mts +17 -0
- package/dist/integrations/pinia-colada/router-utils.mjs +30 -0
- package/dist/integrations/pinia-colada/types.d.mts +25 -0
- package/dist/integrations/react/index.d.mts +83 -0
- package/dist/integrations/react/index.mjs +196 -0
- package/dist/integrations/tanstack-query/index.d.mts +120 -0
- package/dist/integrations/tanstack-query/index.mjs +100 -0
- package/dist/integrations/tanstack-query/ssr.d.mts +60 -0
- package/dist/integrations/tanstack-query/ssr.mjs +102 -0
- package/dist/integrations/zod/converter.d.mts +75 -0
- package/dist/integrations/zod/converter.mjs +345 -0
- package/dist/integrations/zod/index.d.mts +2 -0
- package/dist/integrations/zod/index.mjs +2 -0
- package/dist/lazy.d.mts +22 -0
- package/dist/lazy.mjs +34 -0
- package/dist/lifecycle.d.mts +36 -0
- package/dist/lifecycle.mjs +46 -0
- package/dist/map-input.d.mts +17 -0
- package/dist/map-input.mjs +47 -0
- package/dist/plugins/analytics/accumulator.d.mts +24 -0
- package/dist/plugins/analytics/accumulator.mjs +91 -0
- package/dist/plugins/analytics/alerts.d.mts +59 -0
- package/dist/plugins/analytics/alerts.mjs +140 -0
- package/dist/plugins/analytics/collector.d.mts +38 -0
- package/dist/plugins/analytics/collector.mjs +275 -0
- package/dist/plugins/analytics/cost.d.mts +61 -0
- package/dist/plugins/analytics/cost.mjs +97 -0
- package/dist/plugins/analytics/export.d.mts +7 -0
- package/dist/plugins/analytics/export.mjs +86 -0
- package/dist/plugins/analytics/normalize.mjs +144 -0
- package/dist/plugins/analytics/query.mjs +164 -0
- package/dist/plugins/analytics/request-id.mjs +34 -0
- package/dist/plugins/analytics/routes.d.mts +11 -0
- package/dist/plugins/analytics/routes.mjs +211 -0
- package/dist/plugins/analytics/sse.d.mts +31 -0
- package/dist/plugins/analytics/sse.mjs +74 -0
- package/dist/plugins/analytics/store.mjs +103 -0
- package/dist/plugins/analytics/timeseries.d.mts +50 -0
- package/dist/plugins/analytics/timeseries.mjs +169 -0
- package/dist/plugins/analytics/trace.d.mts +48 -0
- package/dist/plugins/analytics/trace.mjs +83 -0
- package/dist/plugins/analytics/types.d.mts +145 -0
- package/dist/plugins/analytics/types.mjs +40 -0
- package/dist/plugins/analytics/utils.d.mts +4 -0
- package/dist/plugins/analytics/utils.mjs +56 -0
- package/dist/plugins/analytics.d.mts +18 -0
- package/dist/plugins/analytics.mjs +188 -0
- package/dist/plugins/batch-server.d.mts +20 -0
- package/dist/plugins/batch-server.mjs +91 -0
- package/dist/plugins/body-limit.d.mts +19 -0
- package/dist/plugins/body-limit.mjs +49 -0
- package/dist/plugins/cache.d.mts +170 -0
- package/dist/plugins/cache.mjs +212 -0
- package/dist/plugins/coerce.d.mts +24 -0
- package/dist/plugins/coerce.mjs +70 -0
- package/dist/plugins/cookies.d.mts +14 -0
- package/dist/plugins/cookies.mjs +48 -0
- package/dist/plugins/cors.d.mts +43 -0
- package/dist/plugins/cors.mjs +62 -0
- package/dist/plugins/file-upload.d.mts +38 -0
- package/dist/plugins/file-upload.mjs +102 -0
- package/dist/plugins/index.d.mts +18 -0
- package/dist/plugins/index.mjs +17 -0
- package/dist/plugins/otel.d.mts +35 -0
- package/dist/plugins/otel.mjs +40 -0
- package/dist/plugins/pino.d.mts +60 -0
- package/dist/plugins/pino.mjs +42 -0
- package/dist/plugins/pubsub.d.mts +50 -0
- package/dist/plugins/pubsub.mjs +53 -0
- package/dist/plugins/ratelimit.d.mts +53 -0
- package/dist/plugins/ratelimit.mjs +92 -0
- package/dist/plugins/signing.d.mts +41 -0
- package/dist/plugins/signing.mjs +118 -0
- package/dist/plugins/strict-get.d.mts +10 -0
- package/dist/plugins/strict-get.mjs +33 -0
- package/dist/scalar.d.mts +49 -0
- package/dist/scalar.mjs +311 -0
- package/dist/silgi.d.mts +144 -0
- package/dist/silgi.mjs +164 -0
- package/dist/trpc-interop.d.mts +22 -0
- package/dist/trpc-interop.mjs +68 -0
- package/dist/types.d.mts +108 -0
- package/dist/ws.d.mts +88 -0
- package/dist/ws.mjs +205 -0
- package/lib/dashboard/index.html +120 -0
- package/lib/ocache.d.mts +1 -0
- package/lib/ocache.mjs +1 -0
- package/lib/ofetch.d.mts +1 -0
- package/lib/ofetch.mjs +1 -0
- package/lib/srvx.d.mts +1 -0
- package/lib/srvx.mjs +1 -0
- package/lib/unstorage.d.mts +1 -0
- package/lib/unstorage.mjs +1 -0
- package/package.json +314 -150
- package/dist/build.d.mts +0 -3
- package/dist/build.mjs +0 -4
- package/dist/cli/build/build.mjs +0 -15
- package/dist/cli/build/dev.d.mts +0 -10
- package/dist/cli/build/dev.mjs +0 -91
- package/dist/cli/build/prepare.d.mts +0 -6
- package/dist/cli/build/prepare.mjs +0 -15
- package/dist/cli/commands/commands.mjs +0 -90
- package/dist/cli/commands/env.mjs +0 -53
- package/dist/cli/commands/init.mjs +0 -84
- package/dist/cli/commands/install.mjs +0 -52
- package/dist/cli/commands/prepare.mjs +0 -65
- package/dist/cli/commands/reset.mjs +0 -46
- package/dist/cli/commands/run.mjs +0 -31
- package/dist/cli/commands/watch.mjs +0 -153
- package/dist/cli/config/defaults.mjs +0 -117
- package/dist/cli/config/index.d.mts +0 -3
- package/dist/cli/config/index.mjs +0 -4
- package/dist/cli/config/loader.d.mts +0 -6
- package/dist/cli/config/loader.mjs +0 -71
- package/dist/cli/config/resolvers/compatibility.mjs +0 -71
- package/dist/cli/config/resolvers/imports.mjs +0 -35
- package/dist/cli/config/resolvers/paths.mjs +0 -98
- package/dist/cli/config/resolvers/storage.mjs +0 -23
- package/dist/cli/config/resolvers/url.mjs +0 -9
- package/dist/cli/config/types.d.mts +0 -14
- package/dist/cli/config/types.mjs +0 -147
- package/dist/cli/core/apiful.mjs +0 -36
- package/dist/cli/core/devServer.mjs +0 -10
- package/dist/cli/core/env.mjs +0 -68
- package/dist/cli/core/installPackage.mjs +0 -60
- package/dist/cli/core/runtimeConfig.mjs +0 -70
- package/dist/cli/core/scan.mjs +0 -35
- package/dist/cli/core/silgi.mjs +0 -111
- package/dist/cli/framework/emptyFramework.mjs +0 -7
- package/dist/cli/framework/h3.mjs +0 -55
- package/dist/cli/framework/index.mjs +0 -15
- package/dist/cli/framework/nitro.mjs +0 -24
- package/dist/cli/framework/nuxt.mjs +0 -10
- package/dist/cli/index.d.mts +0 -1
- package/dist/cli/index.mjs +0 -29
- package/dist/cli/module/exportScan.mjs +0 -180
- package/dist/cli/module/install.mjs +0 -49
- package/dist/cli/module/scan.mjs +0 -193
- package/dist/cli/scan/prepareCommands.mjs +0 -40
- package/dist/cli/scan/prepareConfigs.mjs +0 -33
- package/dist/cli/scan/prepareCoreFile.mjs +0 -118
- package/dist/cli/scan/prepareScanFile.mjs +0 -59
- package/dist/cli/scan/prepareSchema.mjs +0 -128
- package/dist/cli/scan/scanExportFile.mjs +0 -288
- package/dist/cli/scan/writeCoreFile.mjs +0 -22
- package/dist/cli/scan/writeTypesAndFiles.mjs +0 -72
- package/dist/cli/utils/cancel.mjs +0 -14
- package/dist/cli/utils/common.mjs +0 -15
- package/dist/cli/utils/compatibility.mjs +0 -33
- package/dist/cli/utils/debug.mjs +0 -11
- package/dist/cli/utils/ignore.mjs +0 -56
- package/dist/cli/utils/processManager.mjs +0 -170
- package/dist/cli/utils/readScanFile.mjs +0 -58
- package/dist/cli/utils/storage.mjs +0 -23
- package/dist/core/context.d.mts +0 -30
- package/dist/core/context.mjs +0 -32
- package/dist/core/createSilgi.d.mts +0 -6
- package/dist/core/createSilgi.mjs +0 -153
- package/dist/core/event.d.mts +0 -26
- package/dist/core/event.mjs +0 -44
- package/dist/core/index.d.mts +0 -25
- package/dist/core/index.mjs +0 -30
- package/dist/core/orchestrate.mjs +0 -115
- package/dist/core/response.d.mts +0 -20
- package/dist/core/response.mjs +0 -105
- package/dist/core/silgi.d.mts +0 -19
- package/dist/core/silgi.mjs +0 -141
- package/dist/core/silgiApp.d.mts +0 -9
- package/dist/core/silgiApp.mjs +0 -23
- package/dist/core/unctx.d.mts +0 -21
- package/dist/core/unctx.mjs +0 -35
- package/dist/core/utils/event-stream.d.mts +0 -53
- package/dist/core/utils/event-stream.mjs +0 -38
- package/dist/core/utils/event.d.mts +0 -8
- package/dist/core/utils/event.mjs +0 -12
- package/dist/core/utils/internal/event-stream.d.mts +0 -45
- package/dist/core/utils/internal/event-stream.mjs +0 -137
- package/dist/core/utils/internal/obj.mjs +0 -9
- package/dist/core/utils/internal/object.mjs +0 -29
- package/dist/core/utils/internal/query.mjs +0 -73
- package/dist/core/utils/internal/req.mjs +0 -35
- package/dist/core/utils/merge.d.mts +0 -14
- package/dist/core/utils/merge.mjs +0 -27
- package/dist/core/utils/middleware.d.mts +0 -14
- package/dist/core/utils/middleware.mjs +0 -12
- package/dist/core/utils/request.mjs +0 -35
- package/dist/core/utils/resolver.d.mts +0 -7
- package/dist/core/utils/resolver.mjs +0 -29
- package/dist/core/utils/runtime.d.mts +0 -7
- package/dist/core/utils/runtime.mjs +0 -20
- package/dist/core/utils/sanitize.mjs +0 -22
- package/dist/core/utils/schema.d.mts +0 -34
- package/dist/core/utils/schema.mjs +0 -33
- package/dist/core/utils/service.d.mts +0 -13
- package/dist/core/utils/service.mjs +0 -19
- package/dist/core/utils/shared.d.mts +0 -6
- package/dist/core/utils/shared.mjs +0 -7
- package/dist/core/utils/storage.d.mts +0 -24
- package/dist/core/utils/storage.mjs +0 -54
- package/dist/kit/add/add-commands.d.mts +0 -6
- package/dist/kit/add/add-commands.mjs +0 -12
- package/dist/kit/add/add-core-file.d.mts +0 -9
- package/dist/kit/add/add-core-file.mjs +0 -11
- package/dist/kit/add/add-imports.d.mts +0 -14
- package/dist/kit/add/add-imports.mjs +0 -56
- package/dist/kit/add/add-npm.d.mts +0 -14
- package/dist/kit/add/add-npm.mjs +0 -23
- package/dist/kit/define.d.mts +0 -28
- package/dist/kit/define.mjs +0 -25
- package/dist/kit/errors.d.mts +0 -6
- package/dist/kit/errors.mjs +0 -11
- package/dist/kit/esm.d.mts +0 -11
- package/dist/kit/esm.mjs +0 -21
- package/dist/kit/fs.d.mts +0 -4
- package/dist/kit/fs.mjs +0 -13
- package/dist/kit/function-utils.d.mts +0 -27
- package/dist/kit/function-utils.mjs +0 -75
- package/dist/kit/gen.d.mts +0 -5
- package/dist/kit/gen.mjs +0 -26
- package/dist/kit/hash.d.mts +0 -4
- package/dist/kit/hash.mjs +0 -10
- package/dist/kit/index.d.mts +0 -22
- package/dist/kit/index.mjs +0 -23
- package/dist/kit/isFramework.d.mts +0 -6
- package/dist/kit/isFramework.mjs +0 -21
- package/dist/kit/logger.d.mts +0 -6
- package/dist/kit/logger.mjs +0 -10
- package/dist/kit/migration.d.mts +0 -113
- package/dist/kit/migration.mjs +0 -301
- package/dist/kit/module.d.mts +0 -14
- package/dist/kit/module.mjs +0 -53
- package/dist/kit/path.d.mts +0 -7
- package/dist/kit/path.mjs +0 -26
- package/dist/kit/preset.d.mts +0 -8
- package/dist/kit/preset.mjs +0 -11
- package/dist/kit/resolve.d.mts +0 -37
- package/dist/kit/resolve.mjs +0 -82
- package/dist/kit/template.d.mts +0 -19
- package/dist/kit/template.mjs +0 -91
- package/dist/kit/useRequest.d.mts +0 -19
- package/dist/kit/useRequest.mjs +0 -63
- package/dist/kit/utils.d.mts +0 -34
- package/dist/kit/utils.mjs +0 -91
- package/dist/package.mjs +0 -176
- package/dist/presets/_all.gen.d.mts +0 -6
- package/dist/presets/_all.gen.mjs +0 -18
- package/dist/presets/_resolve.d.mts +0 -12
- package/dist/presets/_resolve.mjs +0 -57
- package/dist/presets/_types.gen.d.mts +0 -8
- package/dist/presets/_types.gen.mjs +0 -5
- package/dist/presets/h3/preset.d.mts +0 -6
- package/dist/presets/h3/preset.mjs +0 -35
- package/dist/presets/hono/preset.d.mts +0 -6
- package/dist/presets/hono/preset.mjs +0 -30
- package/dist/presets/index.d.mts +0 -3
- package/dist/presets/index.mjs +0 -3
- package/dist/presets/nitro/preset.d.mts +0 -6
- package/dist/presets/nitro/preset.mjs +0 -37
- package/dist/presets/npmpackage/preset.d.mts +0 -6
- package/dist/presets/npmpackage/preset.mjs +0 -29
- package/dist/presets/nuxt/preset.d.mts +0 -6
- package/dist/presets/nuxt/preset.mjs +0 -41
- package/dist/runtime/index.d.mts +0 -4
- package/dist/runtime/index.mjs +0 -5
- package/dist/runtime/internal/config.d.mts +0 -11
- package/dist/runtime/internal/config.mjs +0 -97
- package/dist/runtime/internal/debug.d.mts +0 -6
- package/dist/runtime/internal/debug.mjs +0 -11
- package/dist/runtime/internal/defu.d.mts +0 -4
- package/dist/runtime/internal/defu.mjs +0 -9
- package/dist/runtime/internal/index.d.mts +0 -7
- package/dist/runtime/internal/index.mjs +0 -8
- package/dist/runtime/internal/nitro.d.mts +0 -6
- package/dist/runtime/internal/nitro.mjs +0 -36
- package/dist/runtime/internal/nuxt.d.mts +0 -12
- package/dist/runtime/internal/nuxt.mjs +0 -16
- package/dist/runtime/internal/ofetch.d.mts +0 -8
- package/dist/runtime/internal/ofetch.mjs +0 -39
- package/dist/runtime/internal/plugin.d.mts +0 -7
- package/dist/runtime/internal/plugin.mjs +0 -8
- package/dist/types/cliConfig.d.mts +0 -288
- package/dist/types/cliConfig.mjs +0 -0
- package/dist/types/cliHooks.d.mts +0 -142
- package/dist/types/cliHooks.mjs +0 -0
- package/dist/types/compatibility.d.mts +0 -13
- package/dist/types/compatibility.mjs +0 -0
- package/dist/types/config.d.mts +0 -46
- package/dist/types/config.mjs +0 -0
- package/dist/types/dotenv.d.mts +0 -29
- package/dist/types/dotenv.mjs +0 -0
- package/dist/types/event.d.mts +0 -63
- package/dist/types/event.mjs +0 -0
- package/dist/types/global.d.mts +0 -24
- package/dist/types/global.mjs +0 -0
- package/dist/types/helper.d.mts +0 -25
- package/dist/types/helper.mjs +0 -0
- package/dist/types/hooks.d.mts +0 -37
- package/dist/types/hooks.mjs +0 -0
- package/dist/types/index.d.mts +0 -26
- package/dist/types/index.mjs +0 -0
- package/dist/types/kits.d.mts +0 -32
- package/dist/types/kits.mjs +0 -0
- package/dist/types/middleware.d.mts +0 -31
- package/dist/types/middleware.mjs +0 -0
- package/dist/types/module.d.mts +0 -102
- package/dist/types/module.mjs +0 -0
- package/dist/types/preset.d.mts +0 -20
- package/dist/types/preset.mjs +0 -0
- package/dist/types/route.d.mts +0 -59
- package/dist/types/route.mjs +0 -0
- package/dist/types/runtime/index.d.mts +0 -5
- package/dist/types/runtime/index.mjs +0 -0
- package/dist/types/runtime/nuxt.d.mts +0 -13
- package/dist/types/runtime/nuxt.mjs +0 -0
- package/dist/types/runtime/ofetch.d.mts +0 -14
- package/dist/types/runtime/ofetch.mjs +0 -0
- package/dist/types/runtime/plugin.d.mts +0 -8
- package/dist/types/runtime/plugin.mjs +0 -0
- package/dist/types/runtime/silgi.d.mts +0 -11
- package/dist/types/runtime/silgi.mjs +0 -0
- package/dist/types/schema.d.mts +0 -86
- package/dist/types/schema.mjs +0 -0
- package/dist/types/service.d.mts +0 -102
- package/dist/types/service.mjs +0 -0
- package/dist/types/shared.d.mts +0 -19
- package/dist/types/shared.mjs +0 -0
- package/dist/types/silgi.d.mts +0 -71
- package/dist/types/silgi.mjs +0 -0
- package/dist/types/silgiCLI.d.mts +0 -118
- package/dist/types/silgiCLI.mjs +0 -0
- package/dist/types/standard-schema.d.mts +0 -61
- package/dist/types/standard-schema.mjs +0 -0
- package/dist/types/storage.d.mts +0 -30
- package/dist/types/storage.mjs +0 -0
- package/dist/types/tree-kill.d.mts +0 -18
- package/dist/types/tree-kill.mjs +0 -0
- package/lib/config.d.mts +0 -7
- package/lib/config.mjs +0 -5
- package/lib/meta.d.mts +0 -4
- package/lib/meta.mjs +0 -6
- package/lib/runtime-meta.d.mts +0 -4
- 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 };
|
package/dist/core/storage.d.mts
CHANGED
|
@@ -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
|
-
|
|
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 {
|
|
20
|
+
export { type Driver, type Storage, StorageConfig, type StorageValue, initStorage, resetStorage, useStorage };
|
package/dist/core/storage.mjs
CHANGED
|
@@ -1,15 +1,62 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { createStorage, prefixStorage } from "unstorage";
|
|
2
|
+
import memoryDriver from "unstorage/drivers/memory";
|
|
3
3
|
//#region src/core/storage.ts
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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 {
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
|
|
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 };
|