@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Middleware
|
|
3
|
+
*
|
|
4
|
+
* Common middleware utilities for logging, CORS, request ID, etc.
|
|
5
|
+
*/
|
|
6
|
+
import type { Context } from "../context";
|
|
7
|
+
import type { Middleware } from "../index";
|
|
8
|
+
export interface LoggerOptions {
|
|
9
|
+
format?: "json" | "text";
|
|
10
|
+
level?: "debug" | "info" | "warn" | "error";
|
|
11
|
+
}
|
|
12
|
+
export declare function logger(options?: LoggerOptions): Middleware;
|
|
13
|
+
export interface CorsOptions {
|
|
14
|
+
origin?: string | string[] | ((origin: string) => string | undefined);
|
|
15
|
+
methods?: string[];
|
|
16
|
+
allowedHeaders?: string[];
|
|
17
|
+
exposedHeaders?: string[];
|
|
18
|
+
credentials?: boolean;
|
|
19
|
+
maxAge?: number;
|
|
20
|
+
}
|
|
21
|
+
export declare function cors(options?: CorsOptions): Middleware;
|
|
22
|
+
export interface RequestIdOptions {
|
|
23
|
+
header?: string;
|
|
24
|
+
generator?: () => string;
|
|
25
|
+
}
|
|
26
|
+
export declare function requestId(options?: RequestIdOptions): Middleware;
|
|
27
|
+
export declare function timing(): Middleware;
|
|
28
|
+
export interface SecurityHeadersOptions {
|
|
29
|
+
contentSecurityPolicy?: string;
|
|
30
|
+
xssProtection?: boolean;
|
|
31
|
+
frameGuard?: "DENY" | "SAMEORIGIN" | "ALLOW-FROM";
|
|
32
|
+
hsts?: boolean | {
|
|
33
|
+
maxAge?: number;
|
|
34
|
+
includeSubDomains?: boolean;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export declare function securityHeaders(options?: SecurityHeadersOptions): Middleware;
|
|
38
|
+
export interface RateLimitOptions {
|
|
39
|
+
windowMs?: number;
|
|
40
|
+
max?: number;
|
|
41
|
+
keyGenerator?: (context: Context) => string;
|
|
42
|
+
handler?: (context: Context) => Response;
|
|
43
|
+
}
|
|
44
|
+
export declare function rateLimit(options?: RateLimitOptions): Middleware;
|
|
45
|
+
export interface CompressionOptions {
|
|
46
|
+
threshold?: number;
|
|
47
|
+
types?: string[];
|
|
48
|
+
}
|
|
49
|
+
export declare function compression(options?: CompressionOptions): Middleware;
|
|
50
|
+
//# sourceMappingURL=built-in.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"built-in.d.ts","sourceRoot":"","sources":["../../src/middleware/built-in.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC5C;AAED,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,UAAU,CA+D9D;AAID,MAAM,WAAW,WAAW;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,UAAU,CAuD1D;AAID,MAAM,WAAW,gBAAgB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CACzB;AAMD,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,UAAU,CAkBpE;AAID,wBAAgB,MAAM,IAAI,UAAU,CAYnC;AAID,MAAM,WAAW,sBAAsB;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC;IAClD,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAClE;AAED,wBAAgB,eAAe,CAC9B,OAAO,GAAE,sBAA2B,GAClC,UAAU,CAwCZ;AAID,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC;CACzC;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,UAAU,CAgDpE;AAID,MAAM,WAAW,kBAAkB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,UAAU,CA4CxE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware System
|
|
3
|
+
*
|
|
4
|
+
* Provides a composable middleware pipeline with async/await support
|
|
5
|
+
* and context mutation capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import type { Context } from "../context";
|
|
8
|
+
/**
|
|
9
|
+
* Middleware function type
|
|
10
|
+
*/
|
|
11
|
+
export type Middleware = (context: Context, next: () => Promise<Response>) => Promise<Response> | Response;
|
|
12
|
+
/**
|
|
13
|
+
* Route handler type
|
|
14
|
+
*/
|
|
15
|
+
export type Handler = (context: Context) => Promise<Response> | Response;
|
|
16
|
+
/**
|
|
17
|
+
* Compose multiple middleware into a single function
|
|
18
|
+
* Following Koa-style middleware pattern
|
|
19
|
+
*/
|
|
20
|
+
export declare function compose(middleware: Middleware[]): (context: Context, handler: Handler) => Promise<Response>;
|
|
21
|
+
export declare class Pipeline {
|
|
22
|
+
private middleware;
|
|
23
|
+
/**
|
|
24
|
+
* Add middleware to the pipeline
|
|
25
|
+
*/
|
|
26
|
+
use(middleware: Middleware): this;
|
|
27
|
+
/**
|
|
28
|
+
* Execute the pipeline with a handler
|
|
29
|
+
*/
|
|
30
|
+
execute(context: Context, handler: Handler): Promise<Response>;
|
|
31
|
+
/**
|
|
32
|
+
* Get middleware count
|
|
33
|
+
*/
|
|
34
|
+
get length(): number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create a new middleware pipeline
|
|
38
|
+
*/
|
|
39
|
+
export declare function createPipeline(): Pipeline;
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CACxB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,KACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAIzE;;;GAGG;AACH,wBAAgB,OAAO,CACtB,UAAU,EAAE,UAAU,EAAE,GACtB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAyB3D;AAID,qBAAa,QAAQ;IACpB,OAAO,CAAC,UAAU,CAAoB;IAEtC;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAKjC;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKpE;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;CACD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAEzC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bueno Migrations
|
|
3
|
+
*
|
|
4
|
+
* Database migration runner, builder, and helpers.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* import { createMigration, type MigrationRunner } from '@buenojs/bueno/migrations';
|
|
8
|
+
*/
|
|
9
|
+
export * from "../database/migrations";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exception Filters System
|
|
3
|
+
*
|
|
4
|
+
* Filters catch exceptions thrown during request processing and transform
|
|
5
|
+
* them into appropriate responses. They act as error boundaries in the
|
|
6
|
+
* request pipeline.
|
|
7
|
+
*
|
|
8
|
+
* Execution Order:
|
|
9
|
+
* Incoming Request → Guards → Pipes → Handler → Filters (if error) → Error Response
|
|
10
|
+
*/
|
|
11
|
+
import type { Context } from "../context";
|
|
12
|
+
import type { Token } from "../types";
|
|
13
|
+
import { BuenoError, NotFoundError, ValidationError } from "../types";
|
|
14
|
+
/**
|
|
15
|
+
* Exception filter interface
|
|
16
|
+
* Filters implement this interface to handle specific exception types
|
|
17
|
+
*/
|
|
18
|
+
export interface ExceptionFilter<T = Error> {
|
|
19
|
+
catch(exception: T, context: Context): Response | Promise<Response>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Filter function type for functional filters
|
|
23
|
+
*/
|
|
24
|
+
export type FilterFn<T = Error> = (exception: T, context: Context) => Response | Promise<Response>;
|
|
25
|
+
/**
|
|
26
|
+
* Filter type - can be a token, instance, or function
|
|
27
|
+
*/
|
|
28
|
+
export type Filter<T = Error> = Token<ExceptionFilter<T>> | ExceptionFilter<T> | FilterFn<T>;
|
|
29
|
+
type Constructor = new (...args: unknown[]) => unknown;
|
|
30
|
+
/**
|
|
31
|
+
* Decorator to apply filters to a controller class or method
|
|
32
|
+
* Filters are executed in order: global → class → method
|
|
33
|
+
*
|
|
34
|
+
* @param filters - Filters to apply
|
|
35
|
+
* @returns ClassDecorator & MethodDecorator
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* @Controller('users')
|
|
40
|
+
* @UseFilters(CustomExceptionFilter) // Applied to all methods
|
|
41
|
+
* class UsersController {
|
|
42
|
+
* @Get(':id')
|
|
43
|
+
* @UseFilters(NotFoundExceptionFilter) // Additional filter for this method
|
|
44
|
+
* getUser() {}
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function UseFilters(...filters: Filter[]): MethodDecorator & ClassDecorator;
|
|
49
|
+
/**
|
|
50
|
+
* Decorator to mark a filter as catching a specific exception type
|
|
51
|
+
*
|
|
52
|
+
* @param exceptionType - The exception class to catch
|
|
53
|
+
* @returns ClassDecorator
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* @Catch(ValidationError)
|
|
58
|
+
* @Injectable()
|
|
59
|
+
* class CustomValidationFilter implements ExceptionFilter<ValidationError> {
|
|
60
|
+
* catch(exception: ValidationError, context: Context): Response {
|
|
61
|
+
* return context.status(422).json({
|
|
62
|
+
* error: 'Validation Failed',
|
|
63
|
+
* issues: exception.issues
|
|
64
|
+
* });
|
|
65
|
+
* }
|
|
66
|
+
* }
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function Catch<T extends Error>(exceptionType: new (...args: never[]) => T): ClassDecorator;
|
|
70
|
+
/**
|
|
71
|
+
* Get class-level filters from a controller
|
|
72
|
+
*/
|
|
73
|
+
export declare function getClassFilters(target: Constructor): Filter[] | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Get method-level filters from a controller method
|
|
76
|
+
*/
|
|
77
|
+
export declare function getMethodFilters(target: object, propertyKey: string | symbol): Filter[] | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Get the exception type that a filter catches
|
|
80
|
+
*/
|
|
81
|
+
export declare function getCatchType(filter: Filter): (new (...args: unknown[]) => Error) | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Check if a filter can handle a specific exception
|
|
84
|
+
*/
|
|
85
|
+
export declare function canHandleException(filter: Filter, exception: Error): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Type guard to check if a value is an ExceptionFilter instance
|
|
88
|
+
*/
|
|
89
|
+
export declare function isExceptionFilter(value: unknown): value is ExceptionFilter;
|
|
90
|
+
/**
|
|
91
|
+
* Type guard to check if a value is a FilterFn
|
|
92
|
+
*/
|
|
93
|
+
export declare function isFilterFn(value: unknown): value is FilterFn;
|
|
94
|
+
/**
|
|
95
|
+
* Execute a filter and return the response
|
|
96
|
+
*/
|
|
97
|
+
export declare function executeFilter(filter: Filter, exception: Error, context: Context, resolveFilter?: (filter: Filter) => ExceptionFilter | null): Promise<Response>;
|
|
98
|
+
/**
|
|
99
|
+
* Options for executing filters
|
|
100
|
+
*/
|
|
101
|
+
export interface ExecuteFiltersOptions {
|
|
102
|
+
globalFilters: Filter[];
|
|
103
|
+
classFilters: Filter[];
|
|
104
|
+
methodFilters: Filter[];
|
|
105
|
+
resolveFilter?: (filter: Filter) => ExceptionFilter | null;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Find and execute the appropriate filter for an exception
|
|
109
|
+
* Filters are checked in order: method → class → global
|
|
110
|
+
* The first filter that can handle the exception is used
|
|
111
|
+
*/
|
|
112
|
+
export declare function findAndExecuteFilter(exception: Error, context: Context, options: ExecuteFiltersOptions): Promise<Response>;
|
|
113
|
+
/**
|
|
114
|
+
* HttpExceptionFilter - Handles BuenoError exceptions
|
|
115
|
+
* Returns appropriate HTTP status codes and error details
|
|
116
|
+
*/
|
|
117
|
+
export declare class HttpExceptionFilter implements ExceptionFilter<BuenoError> {
|
|
118
|
+
catch(exception: BuenoError, context: Context): Response;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* ValidationFilter - Handles ValidationError exceptions
|
|
122
|
+
* Returns validation error details with issues list
|
|
123
|
+
*/
|
|
124
|
+
export declare class ValidationFilter implements ExceptionFilter<ValidationError> {
|
|
125
|
+
catch(exception: ValidationError, context: Context): Response;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* NotFoundFilter - Handles NotFoundError exceptions
|
|
129
|
+
* Returns 404 response with resource not found message
|
|
130
|
+
*/
|
|
131
|
+
export declare class NotFoundFilter implements ExceptionFilter<NotFoundError> {
|
|
132
|
+
catch(exception: NotFoundError, context: Context): Response;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* AllExceptionsFilter - Catch-all filter for any Error
|
|
136
|
+
* This filter handles all unhandled exceptions
|
|
137
|
+
*/
|
|
138
|
+
export declare class AllExceptionsFilter implements ExceptionFilter<Error> {
|
|
139
|
+
catch(exception: Error, context: Context): Response;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Create a default error response when no filter matches
|
|
143
|
+
*/
|
|
144
|
+
export declare function createDefaultErrorResponse(exception: Error, context: Context): Response;
|
|
145
|
+
/**
|
|
146
|
+
* Create an internal error response
|
|
147
|
+
*/
|
|
148
|
+
export declare function createInternalErrorResponse(exception: Error): Response;
|
|
149
|
+
export {};
|
|
150
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/modules/filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guards System
|
|
3
|
+
*
|
|
4
|
+
* Guards determine whether a request should be allowed to proceed to the handler.
|
|
5
|
+
* They run before interceptors and pipes in the request pipeline.
|
|
6
|
+
*
|
|
7
|
+
* Execution Order:
|
|
8
|
+
* Incoming Request → Guards → Interceptors → Pipes → Handler
|
|
9
|
+
*
|
|
10
|
+
* If any guard returns false, the request is rejected with 403 Forbidden.
|
|
11
|
+
*/
|
|
12
|
+
import type { Token } from "../container";
|
|
13
|
+
import type { Context } from "../context";
|
|
14
|
+
/**
|
|
15
|
+
* Guard interface for authorization checks
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* @Injectable()
|
|
20
|
+
* class AuthGuard implements CanActivate {
|
|
21
|
+
* canActivate(context: Context): boolean {
|
|
22
|
+
* return !!context.request.headers.get('Authorization');
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export interface CanActivate {
|
|
28
|
+
canActivate(context: Context): boolean | Promise<boolean>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Guard function type (for functional guards)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const authGuard: GuardFn = (context) => {
|
|
36
|
+
* return !!context.request.headers.get('Authorization');
|
|
37
|
+
* };
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export type GuardFn = (context: Context) => boolean | Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* Guard type - can be:
|
|
43
|
+
* - A token for a guard class registered in the container
|
|
44
|
+
* - A guard class instance
|
|
45
|
+
* - A guard function
|
|
46
|
+
*/
|
|
47
|
+
export type Guard = Token<CanActivate> | CanActivate | GuardFn;
|
|
48
|
+
type Constructor = new (...args: unknown[]) => unknown;
|
|
49
|
+
/**
|
|
50
|
+
* Get guards from a class constructor
|
|
51
|
+
*/
|
|
52
|
+
export declare function getClassGuards(target: Constructor): Guard[] | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Get guards from a method
|
|
55
|
+
*/
|
|
56
|
+
export declare function getMethodGuards(target: object, propertyKey: string | symbol): Guard[] | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Decorator to apply guards to a controller class or method.
|
|
59
|
+
* Guards are executed in the order they are provided.
|
|
60
|
+
*
|
|
61
|
+
* @param guards - Guards to apply
|
|
62
|
+
* @returns ClassDecorator & MethodDecorator
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* // Apply to all methods in controller
|
|
67
|
+
* @Controller('users')
|
|
68
|
+
* @UseGuards(AuthGuard)
|
|
69
|
+
* class UsersController {
|
|
70
|
+
* @Get()
|
|
71
|
+
* getUsers() {} // Protected by AuthGuard
|
|
72
|
+
*
|
|
73
|
+
* @Get(':id')
|
|
74
|
+
* @UseGuards(RolesGuard) // Additional guard
|
|
75
|
+
* getUser() {} // Protected by AuthGuard AND RolesGuard
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function UseGuards(...guards: Guard[]): MethodDecorator & ClassDecorator;
|
|
80
|
+
/**
|
|
81
|
+
* AuthGuard - Checks for Authorization header
|
|
82
|
+
*
|
|
83
|
+
* This guard verifies that the request has an Authorization header.
|
|
84
|
+
* It does not validate the token - that should be done by a custom guard.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* @Controller('api')
|
|
89
|
+
* @UseGuards(AuthGuard)
|
|
90
|
+
* class ApiController {
|
|
91
|
+
* @Get('protected')
|
|
92
|
+
* protectedRoute() {} // Requires Authorization header
|
|
93
|
+
* }
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export declare class AuthGuard implements CanActivate {
|
|
97
|
+
canActivate(context: Context): boolean;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get required roles from a method
|
|
101
|
+
*/
|
|
102
|
+
export declare function getMethodRoles(target: object, propertyKey: string | symbol): string[] | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* Decorator to specify required roles for a route
|
|
105
|
+
* Must be used in conjunction with RolesGuard
|
|
106
|
+
*
|
|
107
|
+
* @param roles - Required roles
|
|
108
|
+
* @returns MethodDecorator
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* @Controller('admin')
|
|
113
|
+
* @UseGuards(AuthGuard, RolesGuard)
|
|
114
|
+
* class AdminController {
|
|
115
|
+
* @Get('users')
|
|
116
|
+
* @Roles('admin', 'moderator')
|
|
117
|
+
* getUsers() {} // Requires 'admin' or 'moderator' role
|
|
118
|
+
* }
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export declare function Roles(...roles: string[]): MethodDecorator;
|
|
122
|
+
/**
|
|
123
|
+
* User interface for type safety
|
|
124
|
+
* Applications should extend this interface with their user type
|
|
125
|
+
*/
|
|
126
|
+
export interface User {
|
|
127
|
+
id: string | number;
|
|
128
|
+
roles?: string[];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Context extension for user data
|
|
132
|
+
* This extends the Context type to include user information
|
|
133
|
+
*/
|
|
134
|
+
declare module "../context" {
|
|
135
|
+
interface Context {
|
|
136
|
+
user?: User;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* RolesGuard - Checks user roles
|
|
141
|
+
*
|
|
142
|
+
* This guard checks if the authenticated user has the required roles.
|
|
143
|
+
* It should be used after AuthGuard in the guard chain.
|
|
144
|
+
*
|
|
145
|
+
* The user object must be set on the context before this guard runs.
|
|
146
|
+
* This is typically done by an authentication middleware or a previous guard.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* @Controller('admin')
|
|
151
|
+
* @UseGuards(AuthGuard, RolesGuard)
|
|
152
|
+
* class AdminController {
|
|
153
|
+
* @Get('dashboard')
|
|
154
|
+
* @Roles('admin')
|
|
155
|
+
* getDashboard() {} // Requires 'admin' role
|
|
156
|
+
* }
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
export declare class RolesGuard implements CanActivate {
|
|
160
|
+
canActivate(context: Context): boolean;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Guard executor options
|
|
164
|
+
*/
|
|
165
|
+
export interface GuardExecutorOptions {
|
|
166
|
+
/** Global guards applied to all routes */
|
|
167
|
+
globalGuards?: Guard[];
|
|
168
|
+
/** Guards from controller class */
|
|
169
|
+
classGuards?: Guard[];
|
|
170
|
+
/** Guards from method */
|
|
171
|
+
methodGuards?: Guard[];
|
|
172
|
+
/** Container for resolving guard instances */
|
|
173
|
+
resolveGuard?: (guard: Guard) => CanActivate | GuardFn | null;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Execute guards in order and return whether the request should proceed
|
|
177
|
+
*
|
|
178
|
+
* @param context - Request context
|
|
179
|
+
* @param options - Guard executor options
|
|
180
|
+
* @returns true if all guards pass, false otherwise
|
|
181
|
+
*/
|
|
182
|
+
export declare function executeGuards(context: Context, options: GuardExecutorOptions): Promise<boolean>;
|
|
183
|
+
/**
|
|
184
|
+
* Create a 403 Forbidden response
|
|
185
|
+
*/
|
|
186
|
+
export declare function createForbiddenResponse(): Response;
|
|
187
|
+
export {};
|
|
188
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/modules/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC3B,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC;AAU/D,KAAK,WAAW,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAkBvD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,GAAG,SAAS,CAEvE;AAgBD;;GAEG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC1B,KAAK,EAAE,GAAG,SAAS,CAErB;AAID;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CACxB,GAAG,MAAM,EAAE,KAAK,EAAE,GAChB,eAAe,GAAG,cAAc,CAoBlC;AAID;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,SAAU,YAAW,WAAW;IAC5C,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;CAItC;AA2BD;;GAEG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC1B,MAAM,EAAE,GAAG,SAAS,CAEtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,CAUzD;AAED;;;GAGG;AACH,MAAM,WAAW,IAAI;IACpB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,OAAO,QAAQ,YAAY,CAAC;IAC3B,UAAU,OAAO;QAChB,IAAI,CAAC,EAAE,IAAI,CAAC;KACZ;CACD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,UAAW,YAAW,WAAW;IAC7C,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;CAkBtC;AAID;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,0CAA0C;IAC1C,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;IACvB,mCAAmC;IACnC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC;IACtB,yBAAyB;IACzB,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;IACvB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC;CAC9D;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAyElB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,QAAQ,CAclD"}
|