@buenojs/bueno 0.8.5 → 0.8.7
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/.claude/settings.local.json +9 -0
- package/README.md +259 -15
- package/dist/cache/index.d.ts +187 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cli/bin.d.ts +8 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +484 -156
- package/dist/cli/commands/add-frontend.d.ts +7 -0
- package/dist/cli/commands/add-frontend.d.ts.map +1 -0
- package/dist/cli/commands/build.d.ts +7 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/dev.d.ts +7 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/generate.d.ts +7 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/help.d.ts +7 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/index.d.ts +59 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/migration.d.ts +7 -0
- package/dist/cli/commands/migration.d.ts.map +1 -0
- package/dist/cli/commands/new.d.ts +7 -0
- package/dist/cli/commands/new.d.ts.map +1 -0
- package/dist/cli/commands/start.d.ts +7 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/core/args.d.ts +61 -0
- package/dist/cli/core/args.d.ts.map +1 -0
- package/dist/cli/core/console.d.ts +135 -0
- package/dist/cli/core/console.d.ts.map +1 -0
- package/dist/cli/core/index.d.ts +10 -0
- package/dist/cli/core/index.d.ts.map +1 -0
- package/dist/cli/core/prompt.d.ts +63 -0
- package/dist/cli/core/prompt.d.ts.map +1 -0
- package/dist/cli/core/spinner.d.ts +111 -0
- package/dist/cli/core/spinner.d.ts.map +1 -0
- package/dist/cli/index.d.ts +47 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/templates/database/index.d.ts +24 -0
- package/dist/cli/templates/database/index.d.ts.map +1 -0
- package/dist/cli/templates/database/mysql.d.ts +6 -0
- package/dist/cli/templates/database/mysql.d.ts.map +1 -0
- package/dist/cli/templates/database/none.d.ts +8 -0
- package/dist/cli/templates/database/none.d.ts.map +1 -0
- package/dist/cli/templates/database/postgresql.d.ts +6 -0
- package/dist/cli/templates/database/postgresql.d.ts.map +1 -0
- package/dist/cli/templates/database/sqlite.d.ts +6 -0
- package/dist/cli/templates/database/sqlite.d.ts.map +1 -0
- package/dist/cli/templates/deploy.d.ts +41 -0
- package/dist/cli/templates/deploy.d.ts.map +1 -0
- package/dist/cli/templates/docker.d.ts +30 -0
- package/dist/cli/templates/docker.d.ts.map +1 -0
- package/dist/cli/templates/frontend/index.d.ts +25 -0
- package/dist/cli/templates/frontend/index.d.ts.map +1 -0
- package/dist/cli/templates/frontend/none.d.ts +8 -0
- package/dist/cli/templates/frontend/none.d.ts.map +1 -0
- package/dist/cli/templates/frontend/react.d.ts +6 -0
- package/dist/cli/templates/frontend/react.d.ts.map +1 -0
- package/dist/cli/templates/frontend/solid.d.ts +6 -0
- package/dist/cli/templates/frontend/solid.d.ts.map +1 -0
- package/dist/cli/templates/frontend/svelte.d.ts +6 -0
- package/dist/cli/templates/frontend/svelte.d.ts.map +1 -0
- package/dist/cli/templates/frontend/vue.d.ts +6 -0
- package/dist/cli/templates/frontend/vue.d.ts.map +1 -0
- package/dist/cli/templates/generators/index.d.ts +29 -0
- package/dist/cli/templates/generators/index.d.ts.map +1 -0
- package/dist/cli/templates/generators/types.d.ts +32 -0
- package/dist/cli/templates/generators/types.d.ts.map +1 -0
- package/dist/cli/templates/index.d.ts +12 -0
- package/dist/cli/templates/index.d.ts.map +1 -0
- package/dist/cli/templates/project/api.d.ts +6 -0
- package/dist/cli/templates/project/api.d.ts.map +1 -0
- package/dist/cli/templates/project/default.d.ts +6 -0
- package/dist/cli/templates/project/default.d.ts.map +1 -0
- package/dist/cli/templates/project/fullstack.d.ts +14 -0
- package/dist/cli/templates/project/fullstack.d.ts.map +1 -0
- package/dist/cli/templates/project/index.d.ts +26 -0
- package/dist/cli/templates/project/index.d.ts.map +1 -0
- package/dist/cli/templates/project/minimal.d.ts +6 -0
- package/dist/cli/templates/project/minimal.d.ts.map +1 -0
- package/dist/cli/templates/project/types.d.ts +80 -0
- package/dist/cli/templates/project/types.d.ts.map +1 -0
- package/dist/cli/templates/project/website.d.ts +8 -0
- package/dist/cli/templates/project/website.d.ts.map +1 -0
- package/dist/cli/utils/fs.d.ts +137 -0
- package/dist/cli/utils/fs.d.ts.map +1 -0
- package/dist/cli/utils/index.d.ts +9 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/strings.d.ts +86 -0
- package/dist/cli/utils/strings.d.ts.map +1 -0
- package/dist/cli/utils/version.d.ts +15 -0
- package/dist/cli/utils/version.d.ts.map +1 -0
- package/dist/config/env-validation.d.ts +49 -0
- package/dist/config/env-validation.d.ts.map +1 -0
- package/dist/config/env.d.ts +167 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/index.d.ts +168 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/loader.d.ts +81 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/merge.d.ts +66 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/types.d.ts +322 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/validation.d.ts +100 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/container/forward-ref.d.ts +116 -0
- package/dist/container/forward-ref.d.ts.map +1 -0
- package/dist/container/index.d.ts +95 -0
- package/dist/container/index.d.ts.map +1 -0
- package/dist/container/index.js +26 -3
- package/dist/context/index.d.ts +143 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/database/index.d.ts +219 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/migrations/index.d.ts +146 -0
- package/dist/database/migrations/index.d.ts.map +1 -0
- package/dist/database/orm/builder.d.ts +122 -0
- package/dist/database/orm/builder.d.ts.map +1 -0
- package/dist/database/orm/casts/index.d.ts +16 -0
- package/dist/database/orm/casts/index.d.ts.map +1 -0
- package/dist/database/orm/casts/types.d.ts +16 -0
- package/dist/database/orm/casts/types.d.ts.map +1 -0
- package/dist/database/orm/compiler.d.ts +90 -0
- package/dist/database/orm/compiler.d.ts.map +1 -0
- package/dist/database/orm/hooks/index.d.ts +53 -0
- package/dist/database/orm/hooks/index.d.ts.map +1 -0
- package/dist/database/orm/index.d.ts +21 -0
- package/dist/database/orm/index.d.ts.map +1 -0
- package/dist/database/orm/model-registry.d.ts +33 -0
- package/dist/database/orm/model-registry.d.ts.map +1 -0
- package/dist/database/orm/model.d.ts +245 -0
- package/dist/database/orm/model.d.ts.map +1 -0
- package/dist/database/orm/relationships/base.d.ts +69 -0
- package/dist/database/orm/relationships/base.d.ts.map +1 -0
- package/dist/database/orm/relationships/belongs-to-many.d.ts +47 -0
- package/dist/database/orm/relationships/belongs-to-many.d.ts.map +1 -0
- package/dist/database/orm/relationships/belongs-to.d.ts +17 -0
- package/dist/database/orm/relationships/belongs-to.d.ts.map +1 -0
- package/dist/database/orm/relationships/has-many.d.ts +14 -0
- package/dist/database/orm/relationships/has-many.d.ts.map +1 -0
- package/dist/database/orm/relationships/has-one.d.ts +14 -0
- package/dist/database/orm/relationships/has-one.d.ts.map +1 -0
- package/dist/database/orm/relationships/index.d.ts +10 -0
- package/dist/database/orm/relationships/index.d.ts.map +1 -0
- package/dist/database/orm/scopes/index.d.ts +36 -0
- package/dist/database/orm/scopes/index.d.ts.map +1 -0
- package/dist/database/schema/index.d.ts +155 -0
- package/dist/database/schema/index.d.ts.map +1 -0
- package/dist/events/__tests__/event-system.test.d.ts +2 -0
- package/dist/events/__tests__/event-system.test.d.ts.map +1 -0
- package/dist/events/config.d.ts +16 -0
- package/dist/events/config.d.ts.map +1 -0
- package/dist/events/example-usage.d.ts +12 -0
- package/dist/events/example-usage.d.ts.map +1 -0
- package/dist/events/index.d.ts +27 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/manager.d.ts +33 -0
- package/dist/events/manager.d.ts.map +1 -0
- package/dist/events/registry.d.ts +31 -0
- package/dist/events/registry.d.ts.map +1 -0
- package/dist/events/types.d.ts +105 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/frontend/api-routes.d.ts +189 -0
- package/dist/frontend/api-routes.d.ts.map +1 -0
- package/dist/frontend/bundler.d.ts +99 -0
- package/dist/frontend/bundler.d.ts.map +1 -0
- package/dist/frontend/console-client.d.ts +11 -0
- package/dist/frontend/console-client.d.ts.map +1 -0
- package/dist/frontend/console-stream.d.ts +138 -0
- package/dist/frontend/console-stream.d.ts.map +1 -0
- package/dist/frontend/dev-server.d.ts +174 -0
- package/dist/frontend/dev-server.d.ts.map +1 -0
- package/dist/frontend/file-router.d.ts +170 -0
- package/dist/frontend/file-router.d.ts.map +1 -0
- package/dist/frontend/frameworks/index.d.ts +41 -0
- package/dist/frontend/frameworks/index.d.ts.map +1 -0
- package/dist/frontend/frameworks/react.d.ts +32 -0
- package/dist/frontend/frameworks/react.d.ts.map +1 -0
- package/dist/frontend/frameworks/solid.d.ts +42 -0
- package/dist/frontend/frameworks/solid.d.ts.map +1 -0
- package/dist/frontend/frameworks/svelte.d.ts +57 -0
- package/dist/frontend/frameworks/svelte.d.ts.map +1 -0
- package/dist/frontend/frameworks/vue.d.ts +36 -0
- package/dist/frontend/frameworks/vue.d.ts.map +1 -0
- package/dist/frontend/hmr-client.d.ts +22 -0
- package/dist/frontend/hmr-client.d.ts.map +1 -0
- package/dist/frontend/hmr.d.ts +185 -0
- package/dist/frontend/hmr.d.ts.map +1 -0
- package/dist/frontend/index.d.ts +34 -0
- package/dist/frontend/index.d.ts.map +1 -0
- package/dist/frontend/islands.d.ts +135 -0
- package/dist/frontend/islands.d.ts.map +1 -0
- package/dist/frontend/isr.d.ts +143 -0
- package/dist/frontend/isr.d.ts.map +1 -0
- package/dist/frontend/layout.d.ts +140 -0
- package/dist/frontend/layout.d.ts.map +1 -0
- package/dist/frontend/ssr/react.d.ts +118 -0
- package/dist/frontend/ssr/react.d.ts.map +1 -0
- package/dist/frontend/ssr/solid.d.ts +141 -0
- package/dist/frontend/ssr/solid.d.ts.map +1 -0
- package/dist/frontend/ssr/svelte.d.ts +158 -0
- package/dist/frontend/ssr/svelte.d.ts.map +1 -0
- package/dist/frontend/ssr/vue.d.ts +161 -0
- package/dist/frontend/ssr/vue.d.ts.map +1 -0
- package/dist/frontend/ssr.d.ts +147 -0
- package/dist/frontend/ssr.d.ts.map +1 -0
- package/dist/frontend/types.d.ts +1902 -0
- package/dist/frontend/types.d.ts.map +1 -0
- package/dist/graphql/built-in-engine.d.ts +36 -0
- package/dist/graphql/built-in-engine.d.ts.map +1 -0
- package/dist/graphql/context-builder.d.ts +44 -0
- package/dist/graphql/context-builder.d.ts.map +1 -0
- package/dist/graphql/decorators.d.ts +162 -0
- package/dist/graphql/decorators.d.ts.map +1 -0
- package/dist/graphql/execution-pipeline.d.ts +67 -0
- package/dist/graphql/execution-pipeline.d.ts.map +1 -0
- package/dist/graphql/graphql-module.d.ts +70 -0
- package/dist/graphql/graphql-module.d.ts.map +1 -0
- package/dist/graphql/index.d.ts +48 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +2156 -0
- package/dist/graphql/metadata.d.ts +37 -0
- package/dist/graphql/metadata.d.ts.map +1 -0
- package/dist/graphql/schema-builder.d.ts +34 -0
- package/dist/graphql/schema-builder.d.ts.map +1 -0
- package/dist/graphql/subscription-handler.d.ts +47 -0
- package/dist/graphql/subscription-handler.d.ts.map +1 -0
- package/dist/graphql/types.d.ts +252 -0
- package/dist/graphql/types.d.ts.map +1 -0
- package/dist/health/index.d.ts +176 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/i18n/engine.d.ts +105 -0
- package/dist/i18n/engine.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +13 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/loader.d.ts +79 -0
- package/dist/i18n/loader.d.ts.map +1 -0
- package/dist/i18n/middleware.d.ts +96 -0
- package/dist/i18n/middleware.d.ts.map +1 -0
- package/dist/i18n/negotiator.d.ts +84 -0
- package/dist/i18n/negotiator.d.ts.map +1 -0
- package/dist/i18n/types.d.ts +129 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +520 -434
- package/dist/jobs/drivers/memory.d.ts +38 -0
- package/dist/jobs/drivers/memory.d.ts.map +1 -0
- package/dist/jobs/drivers/redis.d.ts +34 -0
- package/dist/jobs/drivers/redis.d.ts.map +1 -0
- package/dist/jobs/index.d.ts +12 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/queue.d.ts +93 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/types.d.ts +193 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/worker.d.ts +91 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/lock/index.d.ts +141 -0
- package/dist/lock/index.d.ts.map +1 -0
- package/dist/logger/index.d.ts +156 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/transports/index.d.ts +371 -0
- package/dist/logger/transports/index.d.ts.map +1 -0
- package/dist/metrics/index.d.ts +163 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/middleware/built-in.d.ts +50 -0
- package/dist/middleware/built-in.d.ts.map +1 -0
- package/dist/middleware/index.d.ts +40 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/migrations/index.d.ts +10 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/modules/filters.d.ts +150 -0
- package/dist/modules/filters.d.ts.map +1 -0
- package/dist/modules/guards.d.ts +188 -0
- package/dist/modules/guards.d.ts.map +1 -0
- package/dist/modules/index.d.ts +266 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +514 -449
- package/dist/modules/interceptors.d.ts +242 -0
- package/dist/modules/interceptors.d.ts.map +1 -0
- package/dist/modules/lazy.d.ts +187 -0
- package/dist/modules/lazy.d.ts.map +1 -0
- package/dist/modules/lifecycle.d.ts +221 -0
- package/dist/modules/lifecycle.d.ts.map +1 -0
- package/dist/modules/metadata.d.ts +32 -0
- package/dist/modules/metadata.d.ts.map +1 -0
- package/dist/modules/pipes.d.ts +287 -0
- package/dist/modules/pipes.d.ts.map +1 -0
- package/dist/notification/channels/base.d.ts +32 -0
- package/dist/notification/channels/base.d.ts.map +1 -0
- package/dist/notification/channels/email.d.ts +37 -0
- package/dist/notification/channels/email.d.ts.map +1 -0
- package/dist/notification/channels/push.d.ts +37 -0
- package/dist/notification/channels/push.d.ts.map +1 -0
- package/dist/notification/channels/sms.d.ts +37 -0
- package/dist/notification/channels/sms.d.ts.map +1 -0
- package/dist/notification/channels/whatsapp.d.ts +37 -0
- package/dist/notification/channels/whatsapp.d.ts.map +1 -0
- package/dist/notification/index.d.ts +15 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/service.d.ts +100 -0
- package/dist/notification/service.d.ts.map +1 -0
- package/dist/notification/types.d.ts +253 -0
- package/dist/notification/types.d.ts.map +1 -0
- package/dist/observability/__tests__/observability.test.d.ts +2 -0
- package/dist/observability/__tests__/observability.test.d.ts.map +1 -0
- package/dist/observability/breadcrumbs.d.ts +48 -0
- package/dist/observability/breadcrumbs.d.ts.map +1 -0
- package/dist/observability/index.d.ts +95 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/interceptor.d.ts +19 -0
- package/dist/observability/interceptor.d.ts.map +1 -0
- package/dist/observability/service.d.ts +101 -0
- package/dist/observability/service.d.ts.map +1 -0
- package/dist/observability/trace.d.ts +21 -0
- package/dist/observability/trace.d.ts.map +1 -0
- package/dist/observability/types.d.ts +172 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/openapi/__tests__/decorators.test.d.ts +2 -0
- package/dist/openapi/__tests__/decorators.test.d.ts.map +1 -0
- package/dist/openapi/__tests__/document-builder.test.d.ts +2 -0
- package/dist/openapi/__tests__/document-builder.test.d.ts.map +1 -0
- package/dist/openapi/__tests__/route-scanner.test.d.ts +2 -0
- package/dist/openapi/__tests__/route-scanner.test.d.ts.map +1 -0
- package/dist/openapi/__tests__/schema-generator.test.d.ts +2 -0
- package/dist/openapi/__tests__/schema-generator.test.d.ts.map +1 -0
- package/dist/openapi/decorators.d.ts +173 -0
- package/dist/openapi/decorators.d.ts.map +1 -0
- package/dist/openapi/document-builder.d.ts +82 -0
- package/dist/openapi/document-builder.d.ts.map +1 -0
- package/dist/openapi/index.d.ts +48 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +59 -40
- package/dist/openapi/metadata.d.ts +36 -0
- package/dist/openapi/metadata.d.ts.map +1 -0
- package/dist/openapi/route-scanner.d.ts +34 -0
- package/dist/openapi/route-scanner.d.ts.map +1 -0
- package/dist/openapi/schema-generator.d.ts +53 -0
- package/dist/openapi/schema-generator.d.ts.map +1 -0
- package/dist/openapi/swagger-module.d.ts +57 -0
- package/dist/openapi/swagger-module.d.ts.map +1 -0
- package/dist/openapi/types.d.ts +344 -0
- package/dist/openapi/types.d.ts.map +1 -0
- package/dist/orm/index.d.ts +10 -0
- package/dist/orm/index.d.ts.map +1 -0
- package/dist/router/index.d.ts +73 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/linear.d.ts +54 -0
- package/dist/router/linear.d.ts.map +1 -0
- package/dist/router/regex.d.ts +49 -0
- package/dist/router/regex.d.ts.map +1 -0
- package/dist/router/tree.d.ts +112 -0
- package/dist/router/tree.d.ts.map +1 -0
- package/dist/rpc/index.d.ts +321 -0
- package/dist/rpc/index.d.ts.map +1 -0
- package/dist/schema/index.d.ts +10 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/security/index.d.ts +126 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/ssg/index.d.ts +73 -0
- package/dist/ssg/index.d.ts.map +1 -0
- package/dist/storage/index.d.ts +99 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/telemetry/index.d.ts +376 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/template/index.d.ts +7 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/templates/engine.d.ts +60 -0
- package/dist/templates/engine.d.ts.map +1 -0
- package/dist/templates/index.d.ts +9 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/loader.d.ts +45 -0
- package/dist/templates/loader.d.ts.map +1 -0
- package/dist/templates/renderers/markdown.d.ts +46 -0
- package/dist/templates/renderers/markdown.d.ts.map +1 -0
- package/dist/templates/renderers/simple.d.ts +35 -0
- package/dist/templates/renderers/simple.d.ts.map +1 -0
- package/dist/templates/types.d.ts +138 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/testing/index.d.ts +539 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +116 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/validation/index.d.ts +89 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/schemas.d.ts +243 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/websocket/index.d.ts +252 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/llms.txt +231 -0
- package/package.json +6 -2
- package/src/cli/ARCHITECTURE.md +3 -3
- package/src/cli/commands/add-frontend.ts +444 -0
- package/src/cli/commands/new.ts +23 -0
- package/src/cli/index.ts +1 -0
- package/src/cli/templates/frontend/react.ts +2 -1
- package/src/cli/templates/frontend/solid.ts +2 -1
- package/src/cli/templates/frontend/svelte.ts +2 -1
- package/src/cli/templates/frontend/vue.ts +2 -1
- package/src/cli/templates/project/api.ts +1 -1
- package/src/cli/templates/project/default.ts +1 -1
- package/src/cli/templates/project/fullstack.ts +14 -104
- package/src/cli/templates/project/website.ts +63 -12
- package/src/config/types.ts +21 -0
- package/src/graphql/built-in-engine.ts +598 -0
- package/src/graphql/context-builder.ts +110 -0
- package/src/graphql/decorators.ts +358 -0
- package/src/graphql/execution-pipeline.ts +227 -0
- package/src/graphql/graphql-module.ts +563 -0
- package/src/graphql/index.ts +101 -0
- package/src/graphql/metadata.ts +237 -0
- package/src/graphql/schema-builder.ts +319 -0
- package/src/graphql/subscription-handler.ts +283 -0
- package/src/graphql/types.ts +324 -0
- package/src/index.ts +3 -0
- package/src/modules/index.ts +48 -1
- package/tests/integration/cli.test.ts +19 -19
- package/tests/unit/cli.test.ts +1 -1
- package/tests/unit/graphql.test.ts +991 -0
- package/tsconfig.declaration.json +14 -0
package/dist/index.js
CHANGED
|
@@ -26,6 +26,237 @@ var __legacyMetadataTS = (k, v) => {
|
|
|
26
26
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
27
27
|
var __require = import.meta.require;
|
|
28
28
|
|
|
29
|
+
// src/container/forward-ref.ts
|
|
30
|
+
function forwardRef(fn) {
|
|
31
|
+
return {
|
|
32
|
+
__forwardRef: FORWARD_REF_SYMBOL,
|
|
33
|
+
forwardRef: fn
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function isForwardRef(value) {
|
|
37
|
+
return typeof value === "object" && value !== null && "__forwardRef" in value && "forwardRef" in value && typeof value.forwardRef === "function";
|
|
38
|
+
}
|
|
39
|
+
function resolveForwardRef(ref) {
|
|
40
|
+
if (isForwardRef(ref)) {
|
|
41
|
+
return ref.forwardRef();
|
|
42
|
+
}
|
|
43
|
+
return ref;
|
|
44
|
+
}
|
|
45
|
+
var FORWARD_REF_SYMBOL;
|
|
46
|
+
var init_forward_ref = __esm(() => {
|
|
47
|
+
FORWARD_REF_SYMBOL = Symbol.for("buno.forwardRef");
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// src/container/index.ts
|
|
51
|
+
var exports_container = {};
|
|
52
|
+
__export(exports_container, {
|
|
53
|
+
setContainerMetadata: () => setContainerMetadata,
|
|
54
|
+
resolveForwardRef: () => resolveForwardRef,
|
|
55
|
+
isForwardRef: () => isForwardRef,
|
|
56
|
+
getInjectTokens: () => getContainerMetadata,
|
|
57
|
+
getContainerMetadata: () => getContainerMetadata,
|
|
58
|
+
forwardRef: () => forwardRef,
|
|
59
|
+
createToken: () => createToken,
|
|
60
|
+
Token: () => Token,
|
|
61
|
+
Injectable: () => Injectable,
|
|
62
|
+
Inject: () => Inject,
|
|
63
|
+
Container: () => Container2
|
|
64
|
+
});
|
|
65
|
+
function createToken(description) {
|
|
66
|
+
return Symbol(description);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
class ResolutionStack {
|
|
70
|
+
stack = new Set;
|
|
71
|
+
lazyResolutions = new Map;
|
|
72
|
+
push(token) {
|
|
73
|
+
if (this.stack.has(token)) {
|
|
74
|
+
throw new Error("Circular dependency detected: Token already in resolution stack");
|
|
75
|
+
}
|
|
76
|
+
this.stack.add(token);
|
|
77
|
+
}
|
|
78
|
+
pop(token) {
|
|
79
|
+
this.stack.delete(token);
|
|
80
|
+
}
|
|
81
|
+
has(token) {
|
|
82
|
+
return this.stack.has(token);
|
|
83
|
+
}
|
|
84
|
+
markLazy(token, placeholder) {
|
|
85
|
+
this.lazyResolutions.set(token, placeholder);
|
|
86
|
+
}
|
|
87
|
+
hasLazy(token) {
|
|
88
|
+
return this.lazyResolutions.has(token);
|
|
89
|
+
}
|
|
90
|
+
getLazy(token) {
|
|
91
|
+
return this.lazyResolutions.get(token);
|
|
92
|
+
}
|
|
93
|
+
clearLazy(token) {
|
|
94
|
+
this.lazyResolutions.delete(token);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
class Container2 {
|
|
99
|
+
providers = new Map;
|
|
100
|
+
resolutionStack = new ResolutionStack;
|
|
101
|
+
register(provider) {
|
|
102
|
+
if (this.providers.has(provider.token)) {
|
|
103
|
+
throw new Error(`Provider already registered for token: ${String(provider.token)}`);
|
|
104
|
+
}
|
|
105
|
+
this.providers.set(provider.token, {
|
|
106
|
+
provider: {
|
|
107
|
+
...provider,
|
|
108
|
+
scope: provider.scope ?? "singleton"
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
registerAll(providers) {
|
|
113
|
+
for (const provider of providers) {
|
|
114
|
+
this.register(provider);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
has(token) {
|
|
118
|
+
return this.providers.has(token);
|
|
119
|
+
}
|
|
120
|
+
resolve(token) {
|
|
121
|
+
const resolved = this.providers.get(token);
|
|
122
|
+
if (!resolved) {
|
|
123
|
+
throw new Error(`No provider registered for token: ${String(token)}`);
|
|
124
|
+
}
|
|
125
|
+
const { provider } = resolved;
|
|
126
|
+
if (this.resolutionStack.has(token)) {
|
|
127
|
+
return this.createLazyProxy(token, resolved);
|
|
128
|
+
}
|
|
129
|
+
if (provider.scope === "singleton" && resolved.instance !== undefined) {
|
|
130
|
+
return resolved.instance;
|
|
131
|
+
}
|
|
132
|
+
this.resolutionStack.push(token);
|
|
133
|
+
try {
|
|
134
|
+
const instance = this.createInstance(provider);
|
|
135
|
+
if (provider.scope === "singleton") {
|
|
136
|
+
resolved.instance = instance;
|
|
137
|
+
}
|
|
138
|
+
return instance;
|
|
139
|
+
} finally {
|
|
140
|
+
this.resolutionStack.pop(token);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
createLazyProxy(token, resolved) {
|
|
144
|
+
const existingLazy = this.resolutionStack.getLazy(token);
|
|
145
|
+
if (existingLazy && existingLazy.instance) {
|
|
146
|
+
return existingLazy.instance;
|
|
147
|
+
}
|
|
148
|
+
const placeholder = {
|
|
149
|
+
resolved: false
|
|
150
|
+
};
|
|
151
|
+
this.resolutionStack.markLazy(token, placeholder);
|
|
152
|
+
const proxy = new Proxy({}, {
|
|
153
|
+
get: (target, prop) => {
|
|
154
|
+
if (placeholder.resolved && placeholder.instance) {
|
|
155
|
+
const value = placeholder.instance[prop];
|
|
156
|
+
return typeof value === "function" ? value.bind(placeholder.instance) : value;
|
|
157
|
+
}
|
|
158
|
+
if (resolved.instance !== undefined) {
|
|
159
|
+
placeholder.instance = resolved.instance;
|
|
160
|
+
placeholder.resolved = true;
|
|
161
|
+
} else {
|
|
162
|
+
if (prop === "then") {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (placeholder.instance) {
|
|
167
|
+
const value = placeholder.instance[prop];
|
|
168
|
+
return typeof value === "function" ? value.bind(placeholder.instance) : value;
|
|
169
|
+
}
|
|
170
|
+
return () => {
|
|
171
|
+
return;
|
|
172
|
+
};
|
|
173
|
+
},
|
|
174
|
+
set: (target, prop, value) => {
|
|
175
|
+
if (placeholder.instance) {
|
|
176
|
+
placeholder.instance[prop] = value;
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
},
|
|
181
|
+
has: (target, prop) => {
|
|
182
|
+
if (placeholder.instance) {
|
|
183
|
+
return prop in placeholder.instance;
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
placeholder.instance = proxy;
|
|
189
|
+
return proxy;
|
|
190
|
+
}
|
|
191
|
+
createInstance(provider) {
|
|
192
|
+
if (provider.useValue !== undefined) {
|
|
193
|
+
return provider.useValue;
|
|
194
|
+
}
|
|
195
|
+
if (provider.useFactory) {
|
|
196
|
+
const deps = this.resolveDeps(provider.inject ?? []);
|
|
197
|
+
return provider.useFactory(...deps);
|
|
198
|
+
}
|
|
199
|
+
if (provider.useClass) {
|
|
200
|
+
const deps = this.resolveDeps(provider.inject ?? []);
|
|
201
|
+
return new provider.useClass(...deps);
|
|
202
|
+
}
|
|
203
|
+
throw new Error(`Invalid provider configuration for token: ${String(provider.token)}`);
|
|
204
|
+
}
|
|
205
|
+
resolveDeps(tokens) {
|
|
206
|
+
return tokens.map((tokenOrRef) => {
|
|
207
|
+
const token = resolveForwardRef(tokenOrRef);
|
|
208
|
+
return this.resolve(token);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
clear() {
|
|
212
|
+
this.providers.clear();
|
|
213
|
+
}
|
|
214
|
+
getTokens() {
|
|
215
|
+
return Array.from(this.providers.keys());
|
|
216
|
+
}
|
|
217
|
+
createChild() {
|
|
218
|
+
const child = new Container2;
|
|
219
|
+
for (const [token, resolved] of this.providers) {
|
|
220
|
+
if (resolved.provider.scope === "singleton") {
|
|
221
|
+
child.providers.set(token, resolved);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return child;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function setContainerMetadata(target, key, value) {
|
|
228
|
+
if (!containerMetadata.has(target)) {
|
|
229
|
+
containerMetadata.set(target, new Map);
|
|
230
|
+
}
|
|
231
|
+
containerMetadata.get(target)?.set(key, value);
|
|
232
|
+
}
|
|
233
|
+
function getContainerMetadata(target, key) {
|
|
234
|
+
return containerMetadata.get(target)?.get(key);
|
|
235
|
+
}
|
|
236
|
+
function Injectable(token) {
|
|
237
|
+
return (target) => {
|
|
238
|
+
setContainerMetadata(target, "injectable", true);
|
|
239
|
+
if (token) {
|
|
240
|
+
setContainerMetadata(target, "token", token);
|
|
241
|
+
}
|
|
242
|
+
return target;
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function Inject(token) {
|
|
246
|
+
return (target, propertyKey, parameterIndex) => {
|
|
247
|
+
const targetObj = target;
|
|
248
|
+
const existingTokens = getContainerMetadata(targetObj, "inject:tokens") ?? [];
|
|
249
|
+
existingTokens[parameterIndex] = token;
|
|
250
|
+
setContainerMetadata(targetObj, "inject:tokens", existingTokens);
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
var Token, containerMetadata;
|
|
254
|
+
var init_container = __esm(() => {
|
|
255
|
+
init_forward_ref();
|
|
256
|
+
Token = createToken;
|
|
257
|
+
containerMetadata = new WeakMap;
|
|
258
|
+
});
|
|
259
|
+
|
|
29
260
|
// src/context/index.ts
|
|
30
261
|
var exports_context = {};
|
|
31
262
|
__export(exports_context, {
|
|
@@ -259,6 +490,150 @@ function createPipeline() {
|
|
|
259
490
|
return new Pipeline;
|
|
260
491
|
}
|
|
261
492
|
|
|
493
|
+
// src/modules/guards.ts
|
|
494
|
+
var exports_guards = {};
|
|
495
|
+
__export(exports_guards, {
|
|
496
|
+
getMethodRoles: () => getMethodRoles,
|
|
497
|
+
getMethodGuards: () => getMethodGuards,
|
|
498
|
+
getClassGuards: () => getClassGuards,
|
|
499
|
+
executeGuards: () => executeGuards,
|
|
500
|
+
createForbiddenResponse: () => createForbiddenResponse,
|
|
501
|
+
UseGuards: () => UseGuards,
|
|
502
|
+
RolesGuard: () => RolesGuard,
|
|
503
|
+
Roles: () => Roles,
|
|
504
|
+
AuthGuard: () => AuthGuard
|
|
505
|
+
});
|
|
506
|
+
function setClassGuards(target, guards) {
|
|
507
|
+
guardsClassMetadata.set(target, guards);
|
|
508
|
+
}
|
|
509
|
+
function getClassGuards(target) {
|
|
510
|
+
return guardsClassMetadata.get(target);
|
|
511
|
+
}
|
|
512
|
+
function setMethodGuards(target, propertyKey, guards) {
|
|
513
|
+
if (!guardsMethodMetadata.has(target)) {
|
|
514
|
+
guardsMethodMetadata.set(target, new Map);
|
|
515
|
+
}
|
|
516
|
+
guardsMethodMetadata.get(target)?.set(propertyKey, guards);
|
|
517
|
+
}
|
|
518
|
+
function getMethodGuards(target, propertyKey) {
|
|
519
|
+
return guardsMethodMetadata.get(target)?.get(propertyKey);
|
|
520
|
+
}
|
|
521
|
+
function UseGuards(...guards) {
|
|
522
|
+
const decorator = (target, propertyKey, descriptor2) => {
|
|
523
|
+
if (propertyKey !== undefined && descriptor2 !== undefined) {
|
|
524
|
+
const targetObj = target;
|
|
525
|
+
const existingGuards = getMethodGuards(targetObj, propertyKey) ?? [];
|
|
526
|
+
setMethodGuards(targetObj, propertyKey, [...existingGuards, ...guards]);
|
|
527
|
+
return descriptor2;
|
|
528
|
+
} else {
|
|
529
|
+
const targetClass = target;
|
|
530
|
+
const existingGuards = getClassGuards(targetClass) ?? [];
|
|
531
|
+
setClassGuards(targetClass, [...existingGuards, ...guards]);
|
|
532
|
+
}
|
|
533
|
+
};
|
|
534
|
+
return decorator;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
class AuthGuard {
|
|
538
|
+
canActivate(context) {
|
|
539
|
+
const authHeader = context.req.headers.get("Authorization");
|
|
540
|
+
return authHeader !== null && authHeader.length > 0;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
function setMethodRoles(target, propertyKey, roles) {
|
|
544
|
+
if (!rolesMethodMetadata.has(target)) {
|
|
545
|
+
rolesMethodMetadata.set(target, new Map);
|
|
546
|
+
}
|
|
547
|
+
rolesMethodMetadata.get(target)?.set(propertyKey, roles);
|
|
548
|
+
}
|
|
549
|
+
function getMethodRoles(target, propertyKey) {
|
|
550
|
+
return rolesMethodMetadata.get(target)?.get(propertyKey);
|
|
551
|
+
}
|
|
552
|
+
function Roles(...roles) {
|
|
553
|
+
return (target, propertyKey, descriptor2) => {
|
|
554
|
+
const targetObj = target;
|
|
555
|
+
setMethodRoles(targetObj, propertyKey, roles);
|
|
556
|
+
return descriptor2;
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
class RolesGuard {
|
|
561
|
+
canActivate(context) {
|
|
562
|
+
const requiredRoles = context.requiredRoles;
|
|
563
|
+
if (!requiredRoles || requiredRoles.length === 0) {
|
|
564
|
+
return true;
|
|
565
|
+
}
|
|
566
|
+
const user = context.user;
|
|
567
|
+
if (!user || !user.roles) {
|
|
568
|
+
return false;
|
|
569
|
+
}
|
|
570
|
+
return requiredRoles.some((role) => user.roles?.includes(role));
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
async function executeGuards(context, options) {
|
|
574
|
+
const {
|
|
575
|
+
globalGuards = [],
|
|
576
|
+
classGuards = [],
|
|
577
|
+
methodGuards = [],
|
|
578
|
+
resolveGuard
|
|
579
|
+
} = options;
|
|
580
|
+
const allGuards = [...globalGuards, ...classGuards, ...methodGuards];
|
|
581
|
+
for (const guard of allGuards) {
|
|
582
|
+
let guardInstance = null;
|
|
583
|
+
if (typeof guard === "function") {
|
|
584
|
+
const funcGuard = guard;
|
|
585
|
+
if (funcGuard.prototype && typeof funcGuard.prototype === "object" && "canActivate" in funcGuard.prototype) {
|
|
586
|
+
guardInstance = resolveGuard ? resolveGuard(guard) : null;
|
|
587
|
+
if (!guardInstance) {
|
|
588
|
+
const GuardClass = guard;
|
|
589
|
+
guardInstance = new GuardClass;
|
|
590
|
+
}
|
|
591
|
+
} else {
|
|
592
|
+
guardInstance = guard;
|
|
593
|
+
}
|
|
594
|
+
} else if (typeof guard === "object" && guard !== null) {
|
|
595
|
+
const objGuard = guard;
|
|
596
|
+
if ("canActivate" in objGuard && typeof objGuard.canActivate === "function") {
|
|
597
|
+
guardInstance = guard;
|
|
598
|
+
} else {
|
|
599
|
+
guardInstance = resolveGuard ? resolveGuard(guard) : null;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
if (!guardInstance) {
|
|
603
|
+
console.warn("Guard could not be resolved:", guard);
|
|
604
|
+
continue;
|
|
605
|
+
}
|
|
606
|
+
let result;
|
|
607
|
+
if (typeof guardInstance === "function") {
|
|
608
|
+
result = await guardInstance(context);
|
|
609
|
+
} else {
|
|
610
|
+
result = await guardInstance.canActivate(context);
|
|
611
|
+
}
|
|
612
|
+
if (!result) {
|
|
613
|
+
return false;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
return true;
|
|
617
|
+
}
|
|
618
|
+
function createForbiddenResponse() {
|
|
619
|
+
return new Response(JSON.stringify({
|
|
620
|
+
statusCode: 403,
|
|
621
|
+
error: "Forbidden",
|
|
622
|
+
message: "Access denied"
|
|
623
|
+
}), {
|
|
624
|
+
status: 403,
|
|
625
|
+
headers: {
|
|
626
|
+
"Content-Type": "application/json"
|
|
627
|
+
}
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
var guardsClassMetadata, guardsMethodMetadata, rolesMethodMetadata;
|
|
631
|
+
var init_guards = __esm(() => {
|
|
632
|
+
guardsClassMetadata = new WeakMap;
|
|
633
|
+
guardsMethodMetadata = new WeakMap;
|
|
634
|
+
rolesMethodMetadata = new WeakMap;
|
|
635
|
+
});
|
|
636
|
+
|
|
262
637
|
// src/validation/index.ts
|
|
263
638
|
async function validate(schema, data) {
|
|
264
639
|
try {
|
|
@@ -413,6 +788,59 @@ function validateEnvSync(schema, envVars) {
|
|
|
413
788
|
}
|
|
414
789
|
}
|
|
415
790
|
|
|
791
|
+
// src/openapi/metadata.ts
|
|
792
|
+
var exports_metadata = {};
|
|
793
|
+
__export(exports_metadata, {
|
|
794
|
+
setApiPropertyMetadata: () => setApiPropertyMetadata,
|
|
795
|
+
setApiMethodMetadata: () => setApiMethodMetadata,
|
|
796
|
+
setApiMetadata: () => setApiMetadata,
|
|
797
|
+
getApiPropertyMetadata: () => getApiPropertyMetadata,
|
|
798
|
+
getApiPropertyKeys: () => getApiPropertyKeys,
|
|
799
|
+
getApiMethodMetadata: () => getApiMethodMetadata,
|
|
800
|
+
getApiMetadata: () => getApiMetadata
|
|
801
|
+
});
|
|
802
|
+
function setApiMetadata(target, key, value) {
|
|
803
|
+
if (!classMetadataStore.has(target)) {
|
|
804
|
+
classMetadataStore.set(target, new Map);
|
|
805
|
+
}
|
|
806
|
+
classMetadataStore.get(target)?.set(key, value);
|
|
807
|
+
}
|
|
808
|
+
function getApiMetadata(target, key) {
|
|
809
|
+
return classMetadataStore.get(target)?.get(key);
|
|
810
|
+
}
|
|
811
|
+
function setApiMethodMetadata(target, key, value) {
|
|
812
|
+
if (!methodMetadataStore.has(target)) {
|
|
813
|
+
methodMetadataStore.set(target, new Map);
|
|
814
|
+
}
|
|
815
|
+
methodMetadataStore.get(target)?.set(key, value);
|
|
816
|
+
}
|
|
817
|
+
function getApiMethodMetadata(target, key) {
|
|
818
|
+
return methodMetadataStore.get(target)?.get(key);
|
|
819
|
+
}
|
|
820
|
+
function setApiPropertyMetadata(target, propertyKey, value) {
|
|
821
|
+
if (!propertyMetadataStore.has(target)) {
|
|
822
|
+
propertyMetadataStore.set(target, new Map);
|
|
823
|
+
}
|
|
824
|
+
const key = typeof propertyKey === "symbol" ? propertyKey.toString() : propertyKey;
|
|
825
|
+
propertyMetadataStore.get(target)?.set(key, value);
|
|
826
|
+
}
|
|
827
|
+
function getApiPropertyMetadata(target, propertyKey) {
|
|
828
|
+
const key = typeof propertyKey === "symbol" ? propertyKey.toString() : propertyKey;
|
|
829
|
+
return propertyMetadataStore.get(target)?.get(key);
|
|
830
|
+
}
|
|
831
|
+
function getApiPropertyKeys(target) {
|
|
832
|
+
const metaMap = propertyMetadataStore.get(target);
|
|
833
|
+
if (!metaMap)
|
|
834
|
+
return [];
|
|
835
|
+
return Array.from(metaMap.keys());
|
|
836
|
+
}
|
|
837
|
+
var classMetadataStore, methodMetadataStore, propertyMetadataStore;
|
|
838
|
+
var init_metadata = __esm(() => {
|
|
839
|
+
classMetadataStore = new WeakMap;
|
|
840
|
+
methodMetadataStore = new WeakMap;
|
|
841
|
+
propertyMetadataStore = new WeakMap;
|
|
842
|
+
});
|
|
843
|
+
|
|
416
844
|
// src/config/merge.ts
|
|
417
845
|
function isPlainObject(value) {
|
|
418
846
|
if (value === null || typeof value !== "object") {
|
|
@@ -1599,278 +2027,69 @@ function watchConfig(filePath, callback, options) {
|
|
|
1599
2027
|
try {
|
|
1600
2028
|
configCache.delete(filePath);
|
|
1601
2029
|
const { config } = await loadConfigFile(filePath, { useCache: false });
|
|
1602
|
-
if (timeout) {
|
|
1603
|
-
clearTimeout(timeout);
|
|
1604
|
-
}
|
|
1605
|
-
timeout = setTimeout(() => {
|
|
1606
|
-
callback(config);
|
|
1607
|
-
}, debounce);
|
|
1608
|
-
} catch {}
|
|
1609
|
-
}, 1000);
|
|
1610
|
-
return () => {
|
|
1611
|
-
clearInterval(interval);
|
|
1612
|
-
if (timeout) {
|
|
1613
|
-
clearTimeout(timeout);
|
|
1614
|
-
}
|
|
1615
|
-
};
|
|
1616
|
-
}
|
|
1617
|
-
function validateConfigStructure(config) {
|
|
1618
|
-
if (config === null || typeof config !== "object") {
|
|
1619
|
-
return false;
|
|
1620
|
-
}
|
|
1621
|
-
const validKeys = new Set([
|
|
1622
|
-
"server",
|
|
1623
|
-
"database",
|
|
1624
|
-
"cache",
|
|
1625
|
-
"logger",
|
|
1626
|
-
"health",
|
|
1627
|
-
"metrics",
|
|
1628
|
-
"telemetry",
|
|
1629
|
-
"frontend"
|
|
1630
|
-
]);
|
|
1631
|
-
const cfg = config;
|
|
1632
|
-
for (const key of Object.keys(cfg)) {
|
|
1633
|
-
if (!validKeys.has(key)) {
|
|
1634
|
-
console.warn(`Unknown config key: ${key}`);
|
|
1635
|
-
}
|
|
1636
|
-
}
|
|
1637
|
-
return true;
|
|
1638
|
-
}
|
|
1639
|
-
function getConfigPathFromArgs(args = process.argv) {
|
|
1640
|
-
const configIndex = args.indexOf("--config");
|
|
1641
|
-
if (configIndex !== -1 && args[configIndex + 1]) {
|
|
1642
|
-
return args[configIndex + 1];
|
|
1643
|
-
}
|
|
1644
|
-
const shortIndex = args.indexOf("-c");
|
|
1645
|
-
if (shortIndex !== -1 && args[shortIndex + 1]) {
|
|
1646
|
-
return args[shortIndex + 1];
|
|
1647
|
-
}
|
|
1648
|
-
return;
|
|
1649
|
-
}
|
|
1650
|
-
function getConfigPathFromEnv() {
|
|
1651
|
-
return Bun.env.BUENO_CONFIG;
|
|
1652
|
-
}
|
|
1653
|
-
var CONFIG_FILES, configCache;
|
|
1654
|
-
var init_loader = __esm(() => {
|
|
1655
|
-
CONFIG_FILES = [
|
|
1656
|
-
"bueno.config.ts",
|
|
1657
|
-
"bueno.config.js",
|
|
1658
|
-
".buenorc.ts",
|
|
1659
|
-
".buenorc.js",
|
|
1660
|
-
"bueno.config.mjs"
|
|
1661
|
-
];
|
|
1662
|
-
configCache = new Map;
|
|
1663
|
-
});
|
|
1664
|
-
|
|
1665
|
-
// src/container/forward-ref.ts
|
|
1666
|
-
var FORWARD_REF_SYMBOL = Symbol.for("buno.forwardRef");
|
|
1667
|
-
function forwardRef(fn) {
|
|
1668
|
-
return {
|
|
1669
|
-
__forwardRef: FORWARD_REF_SYMBOL,
|
|
1670
|
-
forwardRef: fn
|
|
1671
|
-
};
|
|
1672
|
-
}
|
|
1673
|
-
function isForwardRef(value) {
|
|
1674
|
-
return typeof value === "object" && value !== null && "__forwardRef" in value && "forwardRef" in value && typeof value.forwardRef === "function";
|
|
1675
|
-
}
|
|
1676
|
-
function resolveForwardRef(ref) {
|
|
1677
|
-
if (isForwardRef(ref)) {
|
|
1678
|
-
return ref.forwardRef();
|
|
1679
|
-
}
|
|
1680
|
-
return ref;
|
|
1681
|
-
}
|
|
1682
|
-
|
|
1683
|
-
// src/container/index.ts
|
|
1684
|
-
function createToken(description) {
|
|
1685
|
-
return Symbol(description);
|
|
1686
|
-
}
|
|
1687
|
-
var Token = createToken;
|
|
1688
|
-
|
|
1689
|
-
class ResolutionStack {
|
|
1690
|
-
stack = new Set;
|
|
1691
|
-
lazyResolutions = new Map;
|
|
1692
|
-
push(token) {
|
|
1693
|
-
if (this.stack.has(token)) {
|
|
1694
|
-
throw new Error("Circular dependency detected: Token already in resolution stack");
|
|
1695
|
-
}
|
|
1696
|
-
this.stack.add(token);
|
|
1697
|
-
}
|
|
1698
|
-
pop(token) {
|
|
1699
|
-
this.stack.delete(token);
|
|
1700
|
-
}
|
|
1701
|
-
has(token) {
|
|
1702
|
-
return this.stack.has(token);
|
|
1703
|
-
}
|
|
1704
|
-
markLazy(token, placeholder) {
|
|
1705
|
-
this.lazyResolutions.set(token, placeholder);
|
|
1706
|
-
}
|
|
1707
|
-
hasLazy(token) {
|
|
1708
|
-
return this.lazyResolutions.has(token);
|
|
1709
|
-
}
|
|
1710
|
-
getLazy(token) {
|
|
1711
|
-
return this.lazyResolutions.get(token);
|
|
1712
|
-
}
|
|
1713
|
-
clearLazy(token) {
|
|
1714
|
-
this.lazyResolutions.delete(token);
|
|
1715
|
-
}
|
|
1716
|
-
}
|
|
1717
|
-
|
|
1718
|
-
class Container2 {
|
|
1719
|
-
providers = new Map;
|
|
1720
|
-
resolutionStack = new ResolutionStack;
|
|
1721
|
-
register(provider) {
|
|
1722
|
-
if (this.providers.has(provider.token)) {
|
|
1723
|
-
throw new Error(`Provider already registered for token: ${String(provider.token)}`);
|
|
1724
|
-
}
|
|
1725
|
-
this.providers.set(provider.token, {
|
|
1726
|
-
provider: {
|
|
1727
|
-
...provider,
|
|
1728
|
-
scope: provider.scope ?? "singleton"
|
|
1729
|
-
}
|
|
1730
|
-
});
|
|
1731
|
-
}
|
|
1732
|
-
registerAll(providers) {
|
|
1733
|
-
for (const provider of providers) {
|
|
1734
|
-
this.register(provider);
|
|
1735
|
-
}
|
|
1736
|
-
}
|
|
1737
|
-
has(token) {
|
|
1738
|
-
return this.providers.has(token);
|
|
1739
|
-
}
|
|
1740
|
-
resolve(token) {
|
|
1741
|
-
const resolved = this.providers.get(token);
|
|
1742
|
-
if (!resolved) {
|
|
1743
|
-
throw new Error(`No provider registered for token: ${String(token)}`);
|
|
1744
|
-
}
|
|
1745
|
-
const { provider } = resolved;
|
|
1746
|
-
if (this.resolutionStack.has(token)) {
|
|
1747
|
-
return this.createLazyProxy(token, resolved);
|
|
1748
|
-
}
|
|
1749
|
-
if (provider.scope === "singleton" && resolved.instance !== undefined) {
|
|
1750
|
-
return resolved.instance;
|
|
1751
|
-
}
|
|
1752
|
-
this.resolutionStack.push(token);
|
|
1753
|
-
try {
|
|
1754
|
-
const instance = this.createInstance(provider);
|
|
1755
|
-
if (provider.scope === "singleton") {
|
|
1756
|
-
resolved.instance = instance;
|
|
1757
|
-
}
|
|
1758
|
-
return instance;
|
|
1759
|
-
} finally {
|
|
1760
|
-
this.resolutionStack.pop(token);
|
|
1761
|
-
}
|
|
1762
|
-
}
|
|
1763
|
-
createLazyProxy(token, resolved) {
|
|
1764
|
-
const existingLazy = this.resolutionStack.getLazy(token);
|
|
1765
|
-
if (existingLazy && existingLazy.instance) {
|
|
1766
|
-
return existingLazy.instance;
|
|
1767
|
-
}
|
|
1768
|
-
const placeholder = {
|
|
1769
|
-
resolved: false
|
|
1770
|
-
};
|
|
1771
|
-
this.resolutionStack.markLazy(token, placeholder);
|
|
1772
|
-
const proxy = new Proxy({}, {
|
|
1773
|
-
get: (target, prop) => {
|
|
1774
|
-
if (placeholder.resolved && placeholder.instance) {
|
|
1775
|
-
const value = placeholder.instance[prop];
|
|
1776
|
-
return typeof value === "function" ? value.bind(placeholder.instance) : value;
|
|
1777
|
-
}
|
|
1778
|
-
if (resolved.instance !== undefined) {
|
|
1779
|
-
placeholder.instance = resolved.instance;
|
|
1780
|
-
placeholder.resolved = true;
|
|
1781
|
-
} else {
|
|
1782
|
-
if (prop === "then") {
|
|
1783
|
-
return;
|
|
1784
|
-
}
|
|
1785
|
-
}
|
|
1786
|
-
if (placeholder.instance) {
|
|
1787
|
-
const value = placeholder.instance[prop];
|
|
1788
|
-
return typeof value === "function" ? value.bind(placeholder.instance) : value;
|
|
1789
|
-
}
|
|
1790
|
-
return () => {
|
|
1791
|
-
return;
|
|
1792
|
-
};
|
|
1793
|
-
},
|
|
1794
|
-
set: (target, prop, value) => {
|
|
1795
|
-
if (placeholder.instance) {
|
|
1796
|
-
placeholder.instance[prop] = value;
|
|
1797
|
-
return true;
|
|
1798
|
-
}
|
|
1799
|
-
return false;
|
|
1800
|
-
},
|
|
1801
|
-
has: (target, prop) => {
|
|
1802
|
-
if (placeholder.instance) {
|
|
1803
|
-
return prop in placeholder.instance;
|
|
1804
|
-
}
|
|
1805
|
-
return false;
|
|
1806
|
-
}
|
|
1807
|
-
});
|
|
1808
|
-
placeholder.instance = proxy;
|
|
1809
|
-
return proxy;
|
|
1810
|
-
}
|
|
1811
|
-
createInstance(provider) {
|
|
1812
|
-
if (provider.useValue !== undefined) {
|
|
1813
|
-
return provider.useValue;
|
|
1814
|
-
}
|
|
1815
|
-
if (provider.useFactory) {
|
|
1816
|
-
const deps = this.resolveDeps(provider.inject ?? []);
|
|
1817
|
-
return provider.useFactory(...deps);
|
|
1818
|
-
}
|
|
1819
|
-
if (provider.useClass) {
|
|
1820
|
-
const deps = this.resolveDeps(provider.inject ?? []);
|
|
1821
|
-
return new provider.useClass(...deps);
|
|
1822
|
-
}
|
|
1823
|
-
throw new Error(`Invalid provider configuration for token: ${String(provider.token)}`);
|
|
1824
|
-
}
|
|
1825
|
-
resolveDeps(tokens) {
|
|
1826
|
-
return tokens.map((tokenOrRef) => {
|
|
1827
|
-
const token = resolveForwardRef(tokenOrRef);
|
|
1828
|
-
return this.resolve(token);
|
|
1829
|
-
});
|
|
1830
|
-
}
|
|
1831
|
-
clear() {
|
|
1832
|
-
this.providers.clear();
|
|
1833
|
-
}
|
|
1834
|
-
getTokens() {
|
|
1835
|
-
return Array.from(this.providers.keys());
|
|
1836
|
-
}
|
|
1837
|
-
createChild() {
|
|
1838
|
-
const child = new Container2;
|
|
1839
|
-
for (const [token, resolved] of this.providers) {
|
|
1840
|
-
if (resolved.provider.scope === "singleton") {
|
|
1841
|
-
child.providers.set(token, resolved);
|
|
2030
|
+
if (timeout) {
|
|
2031
|
+
clearTimeout(timeout);
|
|
1842
2032
|
}
|
|
2033
|
+
timeout = setTimeout(() => {
|
|
2034
|
+
callback(config);
|
|
2035
|
+
}, debounce);
|
|
2036
|
+
} catch {}
|
|
2037
|
+
}, 1000);
|
|
2038
|
+
return () => {
|
|
2039
|
+
clearInterval(interval);
|
|
2040
|
+
if (timeout) {
|
|
2041
|
+
clearTimeout(timeout);
|
|
1843
2042
|
}
|
|
1844
|
-
|
|
1845
|
-
}
|
|
2043
|
+
};
|
|
1846
2044
|
}
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
containerMetadata.set(target, new Map);
|
|
2045
|
+
function validateConfigStructure(config) {
|
|
2046
|
+
if (config === null || typeof config !== "object") {
|
|
2047
|
+
return false;
|
|
1851
2048
|
}
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
2049
|
+
const validKeys = new Set([
|
|
2050
|
+
"server",
|
|
2051
|
+
"database",
|
|
2052
|
+
"cache",
|
|
2053
|
+
"logger",
|
|
2054
|
+
"health",
|
|
2055
|
+
"metrics",
|
|
2056
|
+
"telemetry",
|
|
2057
|
+
"frontend"
|
|
2058
|
+
]);
|
|
2059
|
+
const cfg = config;
|
|
2060
|
+
for (const key of Object.keys(cfg)) {
|
|
2061
|
+
if (!validKeys.has(key)) {
|
|
2062
|
+
console.warn(`Unknown config key: ${key}`);
|
|
1862
2063
|
}
|
|
1863
|
-
|
|
1864
|
-
|
|
2064
|
+
}
|
|
2065
|
+
return true;
|
|
1865
2066
|
}
|
|
1866
|
-
function
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
2067
|
+
function getConfigPathFromArgs(args = process.argv) {
|
|
2068
|
+
const configIndex = args.indexOf("--config");
|
|
2069
|
+
if (configIndex !== -1 && args[configIndex + 1]) {
|
|
2070
|
+
return args[configIndex + 1];
|
|
2071
|
+
}
|
|
2072
|
+
const shortIndex = args.indexOf("-c");
|
|
2073
|
+
if (shortIndex !== -1 && args[shortIndex + 1]) {
|
|
2074
|
+
return args[shortIndex + 1];
|
|
2075
|
+
}
|
|
2076
|
+
return;
|
|
2077
|
+
}
|
|
2078
|
+
function getConfigPathFromEnv() {
|
|
2079
|
+
return Bun.env.BUENO_CONFIG;
|
|
1873
2080
|
}
|
|
2081
|
+
var CONFIG_FILES, configCache;
|
|
2082
|
+
var init_loader = __esm(() => {
|
|
2083
|
+
CONFIG_FILES = [
|
|
2084
|
+
"bueno.config.ts",
|
|
2085
|
+
"bueno.config.js",
|
|
2086
|
+
".buenorc.ts",
|
|
2087
|
+
".buenorc.js",
|
|
2088
|
+
"bueno.config.mjs"
|
|
2089
|
+
];
|
|
2090
|
+
configCache = new Map;
|
|
2091
|
+
});
|
|
2092
|
+
|
|
1874
2093
|
// src/router/linear.ts
|
|
1875
2094
|
function patternToRegex(pattern) {
|
|
1876
2095
|
const paramNames = [];
|
|
@@ -2747,6 +2966,9 @@ class NotFoundError extends BuenoError {
|
|
|
2747
2966
|
}
|
|
2748
2967
|
}
|
|
2749
2968
|
|
|
2969
|
+
// src/modules/index.ts
|
|
2970
|
+
init_container();
|
|
2971
|
+
|
|
2750
2972
|
// src/modules/filters.ts
|
|
2751
2973
|
var filterMetadataStore = new WeakMap;
|
|
2752
2974
|
var catchMetadataStore = new WeakMap;
|
|
@@ -2947,134 +3169,8 @@ function createInternalErrorResponse(exception) {
|
|
|
2947
3169
|
});
|
|
2948
3170
|
}
|
|
2949
3171
|
|
|
2950
|
-
// src/modules/
|
|
2951
|
-
|
|
2952
|
-
var guardsMethodMetadata = new WeakMap;
|
|
2953
|
-
function setClassGuards(target, guards) {
|
|
2954
|
-
guardsClassMetadata.set(target, guards);
|
|
2955
|
-
}
|
|
2956
|
-
function getClassGuards(target) {
|
|
2957
|
-
return guardsClassMetadata.get(target);
|
|
2958
|
-
}
|
|
2959
|
-
function setMethodGuards(target, propertyKey, guards) {
|
|
2960
|
-
if (!guardsMethodMetadata.has(target)) {
|
|
2961
|
-
guardsMethodMetadata.set(target, new Map);
|
|
2962
|
-
}
|
|
2963
|
-
guardsMethodMetadata.get(target)?.set(propertyKey, guards);
|
|
2964
|
-
}
|
|
2965
|
-
function getMethodGuards(target, propertyKey) {
|
|
2966
|
-
return guardsMethodMetadata.get(target)?.get(propertyKey);
|
|
2967
|
-
}
|
|
2968
|
-
function UseGuards(...guards) {
|
|
2969
|
-
const decorator = (target, propertyKey, descriptor2) => {
|
|
2970
|
-
if (propertyKey !== undefined && descriptor2 !== undefined) {
|
|
2971
|
-
const targetObj = target;
|
|
2972
|
-
const existingGuards = getMethodGuards(targetObj, propertyKey) ?? [];
|
|
2973
|
-
setMethodGuards(targetObj, propertyKey, [...existingGuards, ...guards]);
|
|
2974
|
-
return descriptor2;
|
|
2975
|
-
} else {
|
|
2976
|
-
const targetClass = target;
|
|
2977
|
-
const existingGuards = getClassGuards(targetClass) ?? [];
|
|
2978
|
-
setClassGuards(targetClass, [...existingGuards, ...guards]);
|
|
2979
|
-
}
|
|
2980
|
-
};
|
|
2981
|
-
return decorator;
|
|
2982
|
-
}
|
|
2983
|
-
|
|
2984
|
-
class AuthGuard {
|
|
2985
|
-
canActivate(context) {
|
|
2986
|
-
const authHeader = context.req.headers.get("Authorization");
|
|
2987
|
-
return authHeader !== null && authHeader.length > 0;
|
|
2988
|
-
}
|
|
2989
|
-
}
|
|
2990
|
-
var rolesMethodMetadata = new WeakMap;
|
|
2991
|
-
function setMethodRoles(target, propertyKey, roles) {
|
|
2992
|
-
if (!rolesMethodMetadata.has(target)) {
|
|
2993
|
-
rolesMethodMetadata.set(target, new Map);
|
|
2994
|
-
}
|
|
2995
|
-
rolesMethodMetadata.get(target)?.set(propertyKey, roles);
|
|
2996
|
-
}
|
|
2997
|
-
function getMethodRoles(target, propertyKey) {
|
|
2998
|
-
return rolesMethodMetadata.get(target)?.get(propertyKey);
|
|
2999
|
-
}
|
|
3000
|
-
function Roles(...roles) {
|
|
3001
|
-
return (target, propertyKey, descriptor2) => {
|
|
3002
|
-
const targetObj = target;
|
|
3003
|
-
setMethodRoles(targetObj, propertyKey, roles);
|
|
3004
|
-
return descriptor2;
|
|
3005
|
-
};
|
|
3006
|
-
}
|
|
3007
|
-
|
|
3008
|
-
class RolesGuard {
|
|
3009
|
-
canActivate(context) {
|
|
3010
|
-
const requiredRoles = context.requiredRoles;
|
|
3011
|
-
if (!requiredRoles || requiredRoles.length === 0) {
|
|
3012
|
-
return true;
|
|
3013
|
-
}
|
|
3014
|
-
const user = context.user;
|
|
3015
|
-
if (!user || !user.roles) {
|
|
3016
|
-
return false;
|
|
3017
|
-
}
|
|
3018
|
-
return requiredRoles.some((role) => user.roles?.includes(role));
|
|
3019
|
-
}
|
|
3020
|
-
}
|
|
3021
|
-
async function executeGuards(context, options) {
|
|
3022
|
-
const {
|
|
3023
|
-
globalGuards = [],
|
|
3024
|
-
classGuards = [],
|
|
3025
|
-
methodGuards = [],
|
|
3026
|
-
resolveGuard
|
|
3027
|
-
} = options;
|
|
3028
|
-
const allGuards = [...globalGuards, ...classGuards, ...methodGuards];
|
|
3029
|
-
for (const guard of allGuards) {
|
|
3030
|
-
let guardInstance = null;
|
|
3031
|
-
if (typeof guard === "function") {
|
|
3032
|
-
const funcGuard = guard;
|
|
3033
|
-
if (funcGuard.prototype && typeof funcGuard.prototype === "object" && "canActivate" in funcGuard.prototype) {
|
|
3034
|
-
guardInstance = resolveGuard ? resolveGuard(guard) : null;
|
|
3035
|
-
if (!guardInstance) {
|
|
3036
|
-
const GuardClass = guard;
|
|
3037
|
-
guardInstance = new GuardClass;
|
|
3038
|
-
}
|
|
3039
|
-
} else {
|
|
3040
|
-
guardInstance = guard;
|
|
3041
|
-
}
|
|
3042
|
-
} else if (typeof guard === "object" && guard !== null) {
|
|
3043
|
-
const objGuard = guard;
|
|
3044
|
-
if ("canActivate" in objGuard && typeof objGuard.canActivate === "function") {
|
|
3045
|
-
guardInstance = guard;
|
|
3046
|
-
} else {
|
|
3047
|
-
guardInstance = resolveGuard ? resolveGuard(guard) : null;
|
|
3048
|
-
}
|
|
3049
|
-
}
|
|
3050
|
-
if (!guardInstance) {
|
|
3051
|
-
console.warn("Guard could not be resolved:", guard);
|
|
3052
|
-
continue;
|
|
3053
|
-
}
|
|
3054
|
-
let result;
|
|
3055
|
-
if (typeof guardInstance === "function") {
|
|
3056
|
-
result = await guardInstance(context);
|
|
3057
|
-
} else {
|
|
3058
|
-
result = await guardInstance.canActivate(context);
|
|
3059
|
-
}
|
|
3060
|
-
if (!result) {
|
|
3061
|
-
return false;
|
|
3062
|
-
}
|
|
3063
|
-
}
|
|
3064
|
-
return true;
|
|
3065
|
-
}
|
|
3066
|
-
function createForbiddenResponse() {
|
|
3067
|
-
return new Response(JSON.stringify({
|
|
3068
|
-
statusCode: 403,
|
|
3069
|
-
error: "Forbidden",
|
|
3070
|
-
message: "Access denied"
|
|
3071
|
-
}), {
|
|
3072
|
-
status: 403,
|
|
3073
|
-
headers: {
|
|
3074
|
-
"Content-Type": "application/json"
|
|
3075
|
-
}
|
|
3076
|
-
});
|
|
3077
|
-
}
|
|
3172
|
+
// src/modules/index.ts
|
|
3173
|
+
init_guards();
|
|
3078
3174
|
|
|
3079
3175
|
// src/modules/interceptors.ts
|
|
3080
3176
|
var interceptorsClassMetadata = new WeakMap;
|
|
@@ -3949,7 +4045,10 @@ function isPipeTransform(value) {
|
|
|
3949
4045
|
function isPipeFn(value) {
|
|
3950
4046
|
return typeof value === "function" && !isPipeTransform(value);
|
|
3951
4047
|
}
|
|
4048
|
+
|
|
3952
4049
|
// src/modules/index.ts
|
|
4050
|
+
init_guards();
|
|
4051
|
+
init_container();
|
|
3953
4052
|
function Inject2(token) {
|
|
3954
4053
|
return (target, propertyKey, parameterIndex) => {
|
|
3955
4054
|
const targetObj = target;
|
|
@@ -4053,6 +4152,7 @@ class Application {
|
|
|
4053
4152
|
routeInterceptorMetadata = new Map;
|
|
4054
4153
|
moduleLoader;
|
|
4055
4154
|
loadedLazyModules = new Set;
|
|
4155
|
+
websocketHandler = null;
|
|
4056
4156
|
constructor(moduleClass) {
|
|
4057
4157
|
this.container = new Container2;
|
|
4058
4158
|
this.router = new Router;
|
|
@@ -4065,6 +4165,15 @@ class Application {
|
|
|
4065
4165
|
this.globalGuards.push(...guards);
|
|
4066
4166
|
return this;
|
|
4067
4167
|
}
|
|
4168
|
+
getGlobalGuards() {
|
|
4169
|
+
return this.globalGuards;
|
|
4170
|
+
}
|
|
4171
|
+
getGlobalInterceptors() {
|
|
4172
|
+
return this.globalInterceptors;
|
|
4173
|
+
}
|
|
4174
|
+
setWebSocketHandler(handler) {
|
|
4175
|
+
this.websocketHandler = handler;
|
|
4176
|
+
}
|
|
4068
4177
|
useGlobalPipes(...pipes) {
|
|
4069
4178
|
this.globalPipes.push(...pipes);
|
|
4070
4179
|
return this;
|
|
@@ -4238,7 +4347,16 @@ class Application {
|
|
|
4238
4347
|
this.server = Bun.serve({
|
|
4239
4348
|
port,
|
|
4240
4349
|
hostname,
|
|
4241
|
-
|
|
4350
|
+
...this.websocketHandler ? { websocket: this.websocketHandler } : {},
|
|
4351
|
+
fetch: async (request, server) => {
|
|
4352
|
+
if (this.websocketHandler && request.headers.get("upgrade")?.toLowerCase() === "websocket") {
|
|
4353
|
+
const wsUpgradeHandler = this.websocketHandler.__upgradeHandler;
|
|
4354
|
+
if (wsUpgradeHandler) {
|
|
4355
|
+
const response = wsUpgradeHandler(request, server);
|
|
4356
|
+
if (response)
|
|
4357
|
+
return response;
|
|
4358
|
+
}
|
|
4359
|
+
}
|
|
4242
4360
|
if (this.isShuttingDown) {
|
|
4243
4361
|
return new Response("Service Unavailable", { status: 503 });
|
|
4244
4362
|
}
|
|
@@ -7938,47 +8056,9 @@ class DocumentBuilder {
|
|
|
7938
8056
|
return this.document;
|
|
7939
8057
|
}
|
|
7940
8058
|
}
|
|
7941
|
-
// src/openapi/metadata.ts
|
|
7942
|
-
var classMetadataStore = new WeakMap;
|
|
7943
|
-
function setApiMetadata(target, key, value) {
|
|
7944
|
-
if (!classMetadataStore.has(target)) {
|
|
7945
|
-
classMetadataStore.set(target, new Map);
|
|
7946
|
-
}
|
|
7947
|
-
classMetadataStore.get(target)?.set(key, value);
|
|
7948
|
-
}
|
|
7949
|
-
function getApiMetadata(target, key) {
|
|
7950
|
-
return classMetadataStore.get(target)?.get(key);
|
|
7951
|
-
}
|
|
7952
|
-
var methodMetadataStore = new WeakMap;
|
|
7953
|
-
function setApiMethodMetadata(target, key, value) {
|
|
7954
|
-
if (!methodMetadataStore.has(target)) {
|
|
7955
|
-
methodMetadataStore.set(target, new Map);
|
|
7956
|
-
}
|
|
7957
|
-
methodMetadataStore.get(target)?.set(key, value);
|
|
7958
|
-
}
|
|
7959
|
-
function getApiMethodMetadata(target, key) {
|
|
7960
|
-
return methodMetadataStore.get(target)?.get(key);
|
|
7961
|
-
}
|
|
7962
|
-
var propertyMetadataStore = new WeakMap;
|
|
7963
|
-
function setApiPropertyMetadata(target, propertyKey, value) {
|
|
7964
|
-
if (!propertyMetadataStore.has(target)) {
|
|
7965
|
-
propertyMetadataStore.set(target, new Map);
|
|
7966
|
-
}
|
|
7967
|
-
const key = typeof propertyKey === "symbol" ? propertyKey.toString() : propertyKey;
|
|
7968
|
-
propertyMetadataStore.get(target)?.set(key, value);
|
|
7969
|
-
}
|
|
7970
|
-
function getApiPropertyMetadata(target, propertyKey) {
|
|
7971
|
-
const key = typeof propertyKey === "symbol" ? propertyKey.toString() : propertyKey;
|
|
7972
|
-
return propertyMetadataStore.get(target)?.get(key);
|
|
7973
|
-
}
|
|
7974
|
-
function getApiPropertyKeys(target) {
|
|
7975
|
-
const metaMap = propertyMetadataStore.get(target);
|
|
7976
|
-
if (!metaMap)
|
|
7977
|
-
return [];
|
|
7978
|
-
return Array.from(metaMap.keys());
|
|
7979
|
-
}
|
|
7980
|
-
|
|
7981
8059
|
// src/openapi/schema-generator.ts
|
|
8060
|
+
init_metadata();
|
|
8061
|
+
|
|
7982
8062
|
class SchemaGenerator {
|
|
7983
8063
|
schemas = new Map;
|
|
7984
8064
|
typeNames = new Map;
|
|
@@ -8147,6 +8227,7 @@ class SchemaGenerator {
|
|
|
8147
8227
|
}
|
|
8148
8228
|
}
|
|
8149
8229
|
// src/openapi/route-scanner.ts
|
|
8230
|
+
init_metadata();
|
|
8150
8231
|
class RouteScanner {
|
|
8151
8232
|
schemaGenerator;
|
|
8152
8233
|
constructor(schemaGenerator) {
|
|
@@ -8357,6 +8438,7 @@ class SwaggerModule {
|
|
|
8357
8438
|
}
|
|
8358
8439
|
}
|
|
8359
8440
|
// src/openapi/decorators.ts
|
|
8441
|
+
init_metadata();
|
|
8360
8442
|
function ApiTags(...tags) {
|
|
8361
8443
|
return (target) => {
|
|
8362
8444
|
const existingTags = getApiMetadata(target, "api:tags") ?? [];
|
|
@@ -10446,6 +10528,10 @@ class ObservabilityModule {
|
|
|
10446
10528
|
return service;
|
|
10447
10529
|
}
|
|
10448
10530
|
}
|
|
10531
|
+
|
|
10532
|
+
// src/index.ts
|
|
10533
|
+
init_container();
|
|
10534
|
+
|
|
10449
10535
|
// src/middleware/built-in.ts
|
|
10450
10536
|
function logger(options = {}) {
|
|
10451
10537
|
const { format = "text", level = "info" } = options;
|