@buenojs/bueno 0.8.6 → 0.8.8
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 +132 -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 +483 -155
- 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/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/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/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/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/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/package.json +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 +62 -11
- package/tsconfig.declaration.json +14 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration type definitions for Bueno Framework
|
|
3
|
+
*/
|
|
4
|
+
import type { StandardSchema } from "../types";
|
|
5
|
+
export interface ServerConfig {
|
|
6
|
+
/** Server port (default: 3000) */
|
|
7
|
+
port?: number;
|
|
8
|
+
/** Server host (default: 'localhost') */
|
|
9
|
+
host?: string;
|
|
10
|
+
/** Enable development mode */
|
|
11
|
+
development?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface DatabaseConfig {
|
|
14
|
+
/** Database connection URL */
|
|
15
|
+
url?: string;
|
|
16
|
+
/** Connection pool size */
|
|
17
|
+
poolSize?: number;
|
|
18
|
+
/** Enable database metrics */
|
|
19
|
+
enableMetrics?: boolean;
|
|
20
|
+
/** Slow query threshold in milliseconds */
|
|
21
|
+
slowQueryThreshold?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface CacheConfig {
|
|
24
|
+
/** Cache driver type */
|
|
25
|
+
driver?: "redis" | "memory";
|
|
26
|
+
/** Redis connection URL */
|
|
27
|
+
url?: string;
|
|
28
|
+
/** Default TTL in seconds */
|
|
29
|
+
ttl?: number;
|
|
30
|
+
/** Key prefix for namespacing */
|
|
31
|
+
keyPrefix?: string;
|
|
32
|
+
/** Enable cache metrics */
|
|
33
|
+
enableMetrics?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export type LogLevel = "debug" | "info" | "warn" | "error" | "fatal";
|
|
36
|
+
export interface LoggerConfig {
|
|
37
|
+
/** Log level (default: 'info') */
|
|
38
|
+
level?: LogLevel;
|
|
39
|
+
/** Pretty print logs (default: true in development) */
|
|
40
|
+
pretty?: boolean;
|
|
41
|
+
/** Output destination */
|
|
42
|
+
output?: "console" | "stdout";
|
|
43
|
+
}
|
|
44
|
+
export interface HealthConfig {
|
|
45
|
+
/** Enable health check endpoints */
|
|
46
|
+
enabled?: boolean;
|
|
47
|
+
/** Health check endpoint path (default: '/health') */
|
|
48
|
+
healthPath?: string;
|
|
49
|
+
/** Readiness check endpoint path (default: '/ready') */
|
|
50
|
+
readyPath?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface MetricsConfig {
|
|
53
|
+
/** Enable metrics collection */
|
|
54
|
+
enabled?: boolean;
|
|
55
|
+
/** Collection interval in milliseconds */
|
|
56
|
+
collectInterval?: number;
|
|
57
|
+
/** Maximum history size */
|
|
58
|
+
maxHistorySize?: number;
|
|
59
|
+
}
|
|
60
|
+
export interface ObservabilityConfig {
|
|
61
|
+
/** Enable the observability integration layer */
|
|
62
|
+
enabled?: boolean;
|
|
63
|
+
/** Maximum breadcrumb ring buffer size (default: 20) */
|
|
64
|
+
breadcrumbsSize?: number;
|
|
65
|
+
/** HTTP status codes to suppress from error reporting (e.g. [404, 401]) */
|
|
66
|
+
ignoreStatusCodes?: number[];
|
|
67
|
+
}
|
|
68
|
+
export interface TelemetryConfig {
|
|
69
|
+
/** Enable OpenTelemetry tracing */
|
|
70
|
+
enabled?: boolean;
|
|
71
|
+
/** Service name for tracing */
|
|
72
|
+
serviceName?: string;
|
|
73
|
+
/** OTLP endpoint URL */
|
|
74
|
+
endpoint?: string;
|
|
75
|
+
/** Sampling rate (0.0 to 1.0) */
|
|
76
|
+
sampleRate?: number;
|
|
77
|
+
}
|
|
78
|
+
export interface JobsConfig {
|
|
79
|
+
/** Enable background jobs */
|
|
80
|
+
enabled?: boolean;
|
|
81
|
+
/** Job queue driver type */
|
|
82
|
+
driver?: "redis" | "memory";
|
|
83
|
+
/** Redis connection URL */
|
|
84
|
+
url?: string;
|
|
85
|
+
/** Key prefix for jobs (default: 'jobs:') */
|
|
86
|
+
keyPrefix?: string;
|
|
87
|
+
/** Max concurrent jobs (default: 10) */
|
|
88
|
+
concurrency?: number;
|
|
89
|
+
/** Max retry attempts (default: 3) */
|
|
90
|
+
maxRetries?: number;
|
|
91
|
+
/** Retry delay in seconds (default: 1) */
|
|
92
|
+
retryDelay?: number;
|
|
93
|
+
/** Job batch size (default: 10) */
|
|
94
|
+
batchSize?: number;
|
|
95
|
+
/** Poll interval in milliseconds (default: 1000) */
|
|
96
|
+
pollInterval?: number;
|
|
97
|
+
/** Job timeout in milliseconds (default: 300000 / 5 minutes) */
|
|
98
|
+
jobTimeout?: number;
|
|
99
|
+
/** Enable metrics collection */
|
|
100
|
+
enableMetrics?: boolean;
|
|
101
|
+
}
|
|
102
|
+
export interface TemplateConfig {
|
|
103
|
+
/** Enable template system */
|
|
104
|
+
enabled?: boolean;
|
|
105
|
+
/** Base path to templates directory (default: 'resources/templates') */
|
|
106
|
+
basePath?: string;
|
|
107
|
+
/** Cache configuration */
|
|
108
|
+
cache?: {
|
|
109
|
+
/** Enable template caching (default: true) */
|
|
110
|
+
enabled?: boolean;
|
|
111
|
+
/** Cache TTL in seconds (default: 3600) */
|
|
112
|
+
ttl?: number;
|
|
113
|
+
/** Maximum templates in cache (default: 100) */
|
|
114
|
+
maxSize?: number;
|
|
115
|
+
};
|
|
116
|
+
/** Enable file watching for hot reload in development */
|
|
117
|
+
watch?: boolean;
|
|
118
|
+
/** Default output format: 'html' or 'text' */
|
|
119
|
+
defaultFormat?: "html" | "text";
|
|
120
|
+
/** Channel to variant mapping for auto-detection */
|
|
121
|
+
channelVariantMap?: Record<string, string>;
|
|
122
|
+
}
|
|
123
|
+
export interface NotificationConfig {
|
|
124
|
+
/** Enable notification service */
|
|
125
|
+
enabled?: boolean;
|
|
126
|
+
/** Enable metrics collection */
|
|
127
|
+
enableMetrics?: boolean;
|
|
128
|
+
/** Default channel for sending */
|
|
129
|
+
defaultChannel?: string;
|
|
130
|
+
/** Enable job queue integration for async sending */
|
|
131
|
+
queue?: boolean;
|
|
132
|
+
/** Email channel configuration */
|
|
133
|
+
email?: {
|
|
134
|
+
enabled?: boolean;
|
|
135
|
+
driver?: "smtp" | "sendgrid" | "brevo" | "resend";
|
|
136
|
+
from?: string;
|
|
137
|
+
fromName?: string;
|
|
138
|
+
dryRun?: boolean;
|
|
139
|
+
smtp?: {
|
|
140
|
+
host?: string;
|
|
141
|
+
port?: number;
|
|
142
|
+
secure?: boolean;
|
|
143
|
+
username?: string;
|
|
144
|
+
password?: string;
|
|
145
|
+
};
|
|
146
|
+
apiKey?: string;
|
|
147
|
+
};
|
|
148
|
+
/** SMS channel configuration */
|
|
149
|
+
sms?: {
|
|
150
|
+
enabled?: boolean;
|
|
151
|
+
driver?: "twilio" | "aws-sns" | "custom";
|
|
152
|
+
dryRun?: boolean;
|
|
153
|
+
accountSid?: string;
|
|
154
|
+
authToken?: string;
|
|
155
|
+
fromNumber?: string;
|
|
156
|
+
apiKey?: string;
|
|
157
|
+
};
|
|
158
|
+
/** WhatsApp channel configuration */
|
|
159
|
+
whatsapp?: {
|
|
160
|
+
enabled?: boolean;
|
|
161
|
+
driver?: "twilio" | "custom";
|
|
162
|
+
dryRun?: boolean;
|
|
163
|
+
accountSid?: string;
|
|
164
|
+
authToken?: string;
|
|
165
|
+
businessPhoneNumber?: string;
|
|
166
|
+
apiKey?: string;
|
|
167
|
+
};
|
|
168
|
+
/** Push notification channel configuration */
|
|
169
|
+
push?: {
|
|
170
|
+
enabled?: boolean;
|
|
171
|
+
driver?: "firebase" | "apns" | "custom";
|
|
172
|
+
dryRun?: boolean;
|
|
173
|
+
serverKey?: string;
|
|
174
|
+
certificatePath?: string;
|
|
175
|
+
apiKey?: string;
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
export interface I18nConfig {
|
|
179
|
+
/** Enable i18n system */
|
|
180
|
+
enabled?: boolean;
|
|
181
|
+
/** Default locale — used as fallback when requested locale has missing keys (default: "en") */
|
|
182
|
+
defaultLocale?: string;
|
|
183
|
+
/** List of supported locale identifiers (default: ["en"]) */
|
|
184
|
+
supportedLocales?: string[];
|
|
185
|
+
/** Base directory for locale JSON files (default: "resources/i18n") */
|
|
186
|
+
basePath?: string;
|
|
187
|
+
/**
|
|
188
|
+
* Fall back to defaultLocale when a key is missing in the requested locale.
|
|
189
|
+
* (default: true)
|
|
190
|
+
*/
|
|
191
|
+
fallbackToDefault?: boolean;
|
|
192
|
+
/** Cookie name used to persist locale choice (default: "bueno_locale") */
|
|
193
|
+
cookieName?: string;
|
|
194
|
+
/** Cookie max-age in seconds (default: 31536000 — 1 year) */
|
|
195
|
+
cookieMaxAge?: number;
|
|
196
|
+
/** Enable file watching for hot reload in development */
|
|
197
|
+
watch?: boolean;
|
|
198
|
+
}
|
|
199
|
+
export interface FrontendConfig {
|
|
200
|
+
/** Enable development server */
|
|
201
|
+
devServer?: boolean;
|
|
202
|
+
/** Enable Hot Module Replacement */
|
|
203
|
+
hmr?: boolean;
|
|
204
|
+
/** Frontend dev server port */
|
|
205
|
+
port?: number;
|
|
206
|
+
}
|
|
207
|
+
export interface GraphQLConfig {
|
|
208
|
+
/** Enable GraphQL support (default: false) */
|
|
209
|
+
enabled?: boolean;
|
|
210
|
+
/** HTTP path for GraphQL endpoint (default: '/graphql') */
|
|
211
|
+
path?: string;
|
|
212
|
+
/** Enable GraphiQL playground (default: auto — true with adapter, false with built-in) */
|
|
213
|
+
playground?: boolean;
|
|
214
|
+
/** Enable SDL introspection endpoint at GET <path>/schema (default: true) */
|
|
215
|
+
introspection?: boolean;
|
|
216
|
+
/** Maximum query complexity score (default: 1000) */
|
|
217
|
+
complexityLimit?: number;
|
|
218
|
+
/** Maximum query depth (default: 10) */
|
|
219
|
+
maxDepth?: number;
|
|
220
|
+
/** Enable WebSocket subscriptions (default: false) */
|
|
221
|
+
subscriptions?: boolean;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Main configuration interface for Bueno Framework
|
|
225
|
+
*/
|
|
226
|
+
export interface BuenoConfig {
|
|
227
|
+
/** Server configuration */
|
|
228
|
+
server?: ServerConfig;
|
|
229
|
+
/** Database configuration */
|
|
230
|
+
database?: DatabaseConfig;
|
|
231
|
+
/** Cache configuration */
|
|
232
|
+
cache?: CacheConfig;
|
|
233
|
+
/** Jobs configuration */
|
|
234
|
+
jobs?: JobsConfig;
|
|
235
|
+
/** Template configuration */
|
|
236
|
+
template?: TemplateConfig;
|
|
237
|
+
/** Notification configuration */
|
|
238
|
+
notification?: NotificationConfig;
|
|
239
|
+
/** i18n configuration */
|
|
240
|
+
i18n?: I18nConfig;
|
|
241
|
+
/** Logger configuration */
|
|
242
|
+
logger?: LoggerConfig;
|
|
243
|
+
/** Health check configuration */
|
|
244
|
+
health?: HealthConfig;
|
|
245
|
+
/** Metrics configuration */
|
|
246
|
+
metrics?: MetricsConfig;
|
|
247
|
+
/** Telemetry configuration */
|
|
248
|
+
telemetry?: TelemetryConfig;
|
|
249
|
+
/** Observability / error tracking configuration */
|
|
250
|
+
observability?: ObservabilityConfig;
|
|
251
|
+
/** Frontend configuration */
|
|
252
|
+
frontend?: FrontendConfig;
|
|
253
|
+
/** GraphQL configuration */
|
|
254
|
+
graphql?: GraphQLConfig;
|
|
255
|
+
}
|
|
256
|
+
export interface ConfigManagerOptions {
|
|
257
|
+
/** Path to config file (default: auto-detect) */
|
|
258
|
+
configPath?: string;
|
|
259
|
+
/** Whether to load environment variables (default: true) */
|
|
260
|
+
loadEnv?: boolean;
|
|
261
|
+
/** Whether to validate config (default: true) */
|
|
262
|
+
validate?: boolean;
|
|
263
|
+
/** Custom validation schema */
|
|
264
|
+
schema?: StandardSchema<BuenoConfig>;
|
|
265
|
+
/** Environment to load (.env.{NODE_ENV}) */
|
|
266
|
+
env?: string;
|
|
267
|
+
}
|
|
268
|
+
export type ConfigSource = "default" | "file" | "env" | "cli" | "runtime";
|
|
269
|
+
export interface ConfigSourceInfo {
|
|
270
|
+
/** Source of the configuration value */
|
|
271
|
+
source: ConfigSource;
|
|
272
|
+
/** File path if from file */
|
|
273
|
+
filePath?: string;
|
|
274
|
+
/** Environment variable name if from env */
|
|
275
|
+
envVar?: string;
|
|
276
|
+
}
|
|
277
|
+
export interface ConfigChangeEvent {
|
|
278
|
+
/** Key that changed (dot notation) */
|
|
279
|
+
key: string;
|
|
280
|
+
/** Previous value */
|
|
281
|
+
oldValue: unknown;
|
|
282
|
+
/** New value */
|
|
283
|
+
newValue: unknown;
|
|
284
|
+
/** Source of the change */
|
|
285
|
+
source: ConfigSource;
|
|
286
|
+
/** Timestamp of the change */
|
|
287
|
+
timestamp: Date;
|
|
288
|
+
}
|
|
289
|
+
export type ConfigWatchCallback = (event: ConfigChangeEvent) => void;
|
|
290
|
+
/**
|
|
291
|
+
* Infer configuration type from a schema
|
|
292
|
+
*/
|
|
293
|
+
export type InferConfig<T extends StandardSchema<BuenoConfig>> = NonNullable<T["~standard"]["types"]>["output"];
|
|
294
|
+
/**
|
|
295
|
+
* Deep partial type for configuration
|
|
296
|
+
*/
|
|
297
|
+
export type DeepPartial<T> = {
|
|
298
|
+
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* User configuration type (alias for DeepPartial<BuenoConfig>)
|
|
302
|
+
*/
|
|
303
|
+
export type UserConfig<T extends BuenoConfig = BuenoConfig> = DeepPartial<T>;
|
|
304
|
+
/**
|
|
305
|
+
* User configuration function type
|
|
306
|
+
*/
|
|
307
|
+
export type UserConfigFn<T extends BuenoConfig = BuenoConfig> = (env: string) => UserConfig<T> | Promise<UserConfig<T>>;
|
|
308
|
+
/**
|
|
309
|
+
* Configuration value type for a given key path
|
|
310
|
+
*/
|
|
311
|
+
export type ConfigValueForKey<TKey extends string> = TKey extends `${infer T}.${infer Rest}` ? T extends keyof BuenoConfig ? Rest extends string ? ConfigValueForKey<Rest> : BuenoConfig[T] : unknown : TKey extends keyof BuenoConfig ? BuenoConfig[TKey] : unknown;
|
|
312
|
+
export declare const DEFAULT_CONFIG: Required<BuenoConfig>;
|
|
313
|
+
export interface EnvMapping {
|
|
314
|
+
/** Environment variable name */
|
|
315
|
+
envVar: string;
|
|
316
|
+
/** Config key path (dot notation) */
|
|
317
|
+
configKey: string;
|
|
318
|
+
/** Optional transformer function */
|
|
319
|
+
transform?: (value: string) => unknown;
|
|
320
|
+
}
|
|
321
|
+
export declare const ENV_MAPPINGS: EnvMapping[];
|
|
322
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration validation for Bueno Framework
|
|
3
|
+
* Supports Standard Schema validators (Zod, Valibot, ArkType)
|
|
4
|
+
*/
|
|
5
|
+
import type { StandardIssue, StandardSchema } from "../types";
|
|
6
|
+
import type { BuenoConfig, DeepPartial } from "./types";
|
|
7
|
+
/**
|
|
8
|
+
* Validation result
|
|
9
|
+
*/
|
|
10
|
+
export interface ConfigValidationResult {
|
|
11
|
+
/** Whether validation passed */
|
|
12
|
+
valid: boolean;
|
|
13
|
+
/** Validation errors if any */
|
|
14
|
+
errors: ConfigValidationError[];
|
|
15
|
+
/** Warnings (non-critical issues) */
|
|
16
|
+
warnings: ConfigValidationWarning[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validation error
|
|
20
|
+
*/
|
|
21
|
+
export interface ConfigValidationError {
|
|
22
|
+
/** Error message */
|
|
23
|
+
message: string;
|
|
24
|
+
/** Path to the invalid field */
|
|
25
|
+
path?: string;
|
|
26
|
+
/** Expected type or value */
|
|
27
|
+
expected?: string;
|
|
28
|
+
/** Actual value received */
|
|
29
|
+
received?: unknown;
|
|
30
|
+
/** Original issue from schema validator */
|
|
31
|
+
issue?: StandardIssue;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Validation warning
|
|
35
|
+
*/
|
|
36
|
+
export interface ConfigValidationWarning {
|
|
37
|
+
/** Warning message */
|
|
38
|
+
message: string;
|
|
39
|
+
/** Path to the field */
|
|
40
|
+
path?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if a value is a Standard Schema
|
|
44
|
+
*/
|
|
45
|
+
export declare function isStandardSchema(value: unknown): value is StandardSchema;
|
|
46
|
+
/**
|
|
47
|
+
* Validate config against a Standard Schema
|
|
48
|
+
*/
|
|
49
|
+
export declare function validateWithSchema<T>(config: unknown, schema: StandardSchema<T>): Promise<ConfigValidationResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Validation rule
|
|
52
|
+
*/
|
|
53
|
+
interface ValidationRule {
|
|
54
|
+
/** Path to the field to validate */
|
|
55
|
+
path: string;
|
|
56
|
+
/** Validation function */
|
|
57
|
+
validate: (value: unknown, config: DeepPartial<BuenoConfig>) => ValidationResult;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Validation result from a rule
|
|
61
|
+
*/
|
|
62
|
+
interface ValidationResult {
|
|
63
|
+
valid: boolean;
|
|
64
|
+
message?: string;
|
|
65
|
+
expected?: string;
|
|
66
|
+
received?: unknown;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate config using default rules
|
|
70
|
+
*/
|
|
71
|
+
export declare function validateConfigDefaults(config: DeepPartial<BuenoConfig>): ConfigValidationResult;
|
|
72
|
+
/**
|
|
73
|
+
* Validate configuration
|
|
74
|
+
* Supports both Standard Schema and default validation rules
|
|
75
|
+
*/
|
|
76
|
+
export declare function validateConfig<T extends BuenoConfig = BuenoConfig>(config: unknown, schema?: StandardSchema<T>): Promise<ConfigValidationResult>;
|
|
77
|
+
/**
|
|
78
|
+
* Validate configuration synchronously
|
|
79
|
+
* Note: Standard Schema validation may be async, so this only works with default rules
|
|
80
|
+
*/
|
|
81
|
+
export declare function validateConfigSync(config: DeepPartial<BuenoConfig>): ConfigValidationResult;
|
|
82
|
+
/**
|
|
83
|
+
* Create a validation error with helpful message
|
|
84
|
+
*/
|
|
85
|
+
export declare function createConfigError(result: ConfigValidationResult): ConfigValidationError;
|
|
86
|
+
/**
|
|
87
|
+
* Format validation errors for display
|
|
88
|
+
*/
|
|
89
|
+
export declare function formatValidationErrors(errors: ConfigValidationError[]): string;
|
|
90
|
+
/**
|
|
91
|
+
* Assert that configuration is valid
|
|
92
|
+
* Throws an error if validation fails
|
|
93
|
+
*/
|
|
94
|
+
export declare function assertValidConfig<T extends BuenoConfig = BuenoConfig>(config: unknown, schema?: StandardSchema<T>): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Add custom validation rules
|
|
97
|
+
*/
|
|
98
|
+
export declare function createCustomValidator(rules: ValidationRule[]): (config: DeepPartial<BuenoConfig>) => ConfigValidationResult;
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,qCAAqC;IACrC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAQxE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACzC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,sBAAsB,CAAC,CAsBjC;AAmVD;;GAEG;AACH,UAAU,cAAc;IACvB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,QAAQ,EAAE,CACT,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,KAC5B,gBAAgB,CAAC;CACtB;AAED;;GAEG;AACH,UAAU,gBAAgB;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAsBD;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAC9B,sBAAsB,CA0CxB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACvE,MAAM,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,sBAAsB,CAAC,CAQjC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,GAC9B,sBAAsB,CAExB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,sBAAsB,GAC5B,qBAAqB,CAevB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,qBAAqB,EAAE,GAC7B,MAAM,CAoBR;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC1E,MAAM,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,cAAc,EAAE,GACrB,CAAC,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,KAAK,sBAAsB,CAwB9D"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Forward Reference for Circular Dependencies
|
|
3
|
+
*
|
|
4
|
+
* Provides a way to resolve circular dependencies by deferring the resolution
|
|
5
|
+
* of a dependency until it's actually needed. This allows two or more services
|
|
6
|
+
* to depend on each other without causing infinite loops during instantiation.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Forward reference container for lazy resolution of circular dependencies.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of the referenced value
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Creating a forward reference
|
|
16
|
+
* const ref = forwardRef(() => ServiceB);
|
|
17
|
+
*
|
|
18
|
+
* // Using with @Inject decorator
|
|
19
|
+
* @Injectable()
|
|
20
|
+
* class ServiceA {
|
|
21
|
+
* constructor(
|
|
22
|
+
* @Inject(forwardRef(() => ServiceB))
|
|
23
|
+
* private serviceB: ServiceB
|
|
24
|
+
* ) {}
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export interface ForwardRef<T> {
|
|
29
|
+
/**
|
|
30
|
+
* The unique symbol identifying this as a ForwardRef
|
|
31
|
+
*/
|
|
32
|
+
readonly __forwardRef: unique symbol;
|
|
33
|
+
/**
|
|
34
|
+
* Factory function that returns the actual value when called.
|
|
35
|
+
* This is invoked lazily when the dependency is first accessed.
|
|
36
|
+
*/
|
|
37
|
+
forwardRef: () => T;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a forward reference for circular dependency resolution.
|
|
41
|
+
*
|
|
42
|
+
* The provided factory function is called lazily when the dependency
|
|
43
|
+
* is actually resolved, allowing the referenced class to be defined
|
|
44
|
+
* later in the module loading process.
|
|
45
|
+
*
|
|
46
|
+
* @template T - The type of the referenced value
|
|
47
|
+
* @param fn - Factory function that returns the actual token or value
|
|
48
|
+
* @returns A ForwardRef object that can be used with @Inject()
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* // service-a.ts
|
|
53
|
+
* @Injectable()
|
|
54
|
+
* export class ServiceA {
|
|
55
|
+
* constructor(
|
|
56
|
+
* @Inject(forwardRef(() => ServiceB))
|
|
57
|
+
* private serviceB: ServiceB
|
|
58
|
+
* ) {}
|
|
59
|
+
*
|
|
60
|
+
* doSomething() {
|
|
61
|
+
* return this.serviceB.help();
|
|
62
|
+
* }
|
|
63
|
+
* }
|
|
64
|
+
*
|
|
65
|
+
* // service-b.ts
|
|
66
|
+
* @Injectable()
|
|
67
|
+
* export class ServiceB {
|
|
68
|
+
* constructor(
|
|
69
|
+
* @Inject(forwardRef(() => ServiceA))
|
|
70
|
+
* private serviceA: ServiceA
|
|
71
|
+
* ) {}
|
|
72
|
+
*
|
|
73
|
+
* help() {
|
|
74
|
+
* return 'helping';
|
|
75
|
+
* }
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function forwardRef<T>(fn: () => T): ForwardRef<T>;
|
|
80
|
+
/**
|
|
81
|
+
* Type guard to check if a value is a ForwardRef.
|
|
82
|
+
*
|
|
83
|
+
* @param value - The value to check
|
|
84
|
+
* @returns True if the value is a ForwardRef, false otherwise
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const ref = forwardRef(() => MyService);
|
|
89
|
+
* if (isForwardRef(ref)) {
|
|
90
|
+
* const actualToken = resolveForwardRef(ref);
|
|
91
|
+
* }
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare function isForwardRef(value: unknown): value is ForwardRef<unknown>;
|
|
95
|
+
/**
|
|
96
|
+
* Resolve a forward reference to its actual value.
|
|
97
|
+
*
|
|
98
|
+
* If the provided value is a ForwardRef, this function calls its
|
|
99
|
+
* factory function to get the actual value. If it's not a ForwardRef,
|
|
100
|
+
* the value is returned as-is.
|
|
101
|
+
*
|
|
102
|
+
* @template T - The expected type of the resolved value
|
|
103
|
+
* @param ref - Either a ForwardRef or a direct value
|
|
104
|
+
* @returns The resolved value
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* const token = Token<ServiceB>('ServiceB');
|
|
109
|
+
* const ref = forwardRef(() => token);
|
|
110
|
+
*
|
|
111
|
+
* // Resolves to the token
|
|
112
|
+
* const actualToken = resolveForwardRef(ref);
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export declare function resolveForwardRef<T>(ref: ForwardRef<T> | T): T;
|
|
116
|
+
//# sourceMappingURL=forward-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forward-ref.d.ts","sourceRoot":"","sources":["../../src/container/forward-ref.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,MAAM,CAAC;IAErC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC,CAAC;CACpB;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAKxD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,CAQzE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAK9D"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Injection Container
|
|
3
|
+
*
|
|
4
|
+
* Provides inversion of control for managing dependencies
|
|
5
|
+
* with support for constructor injection, factories, and scopes.
|
|
6
|
+
* Supports circular dependency resolution via forward references.
|
|
7
|
+
*/
|
|
8
|
+
import type { Provider } from "../types";
|
|
9
|
+
import { type ForwardRef, forwardRef, isForwardRef, resolveForwardRef } from "./forward-ref";
|
|
10
|
+
export type { Provider } from "../types";
|
|
11
|
+
export { type ForwardRef, forwardRef, isForwardRef, resolveForwardRef };
|
|
12
|
+
/**
|
|
13
|
+
* Token type - represents an injection token
|
|
14
|
+
*/
|
|
15
|
+
export type Token<T = unknown> = symbol & {
|
|
16
|
+
readonly __type?: T;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Creates a typed injection token (symbol-based)
|
|
20
|
+
*/
|
|
21
|
+
export declare function createToken<T>(description: string): Token<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Token function - creates a typed injection token (symbol-based)
|
|
24
|
+
*/
|
|
25
|
+
export declare const Token: typeof createToken;
|
|
26
|
+
export declare class Container {
|
|
27
|
+
private providers;
|
|
28
|
+
private resolutionStack;
|
|
29
|
+
/**
|
|
30
|
+
* Register a single provider
|
|
31
|
+
*/
|
|
32
|
+
register<T>(provider: Provider<T>): void;
|
|
33
|
+
/**
|
|
34
|
+
* Register multiple providers at once
|
|
35
|
+
*/
|
|
36
|
+
registerAll(providers: Provider[]): void;
|
|
37
|
+
/**
|
|
38
|
+
* Check if a token is registered
|
|
39
|
+
*/
|
|
40
|
+
has(token: Token): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Resolve a token to its value
|
|
43
|
+
*/
|
|
44
|
+
resolve<T>(token: Token<T>): T;
|
|
45
|
+
/**
|
|
46
|
+
* Create a lazy proxy for circular dependency resolution.
|
|
47
|
+
* The proxy will resolve the actual instance on first property access.
|
|
48
|
+
*/
|
|
49
|
+
private createLazyProxy;
|
|
50
|
+
/**
|
|
51
|
+
* Create an instance from a provider
|
|
52
|
+
*/
|
|
53
|
+
private createInstance;
|
|
54
|
+
/**
|
|
55
|
+
* Resolve an array of dependency tokens (including ForwardRef support)
|
|
56
|
+
*/
|
|
57
|
+
private resolveDeps;
|
|
58
|
+
/**
|
|
59
|
+
* Clear all registrations
|
|
60
|
+
*/
|
|
61
|
+
clear(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Get all registered tokens
|
|
64
|
+
*/
|
|
65
|
+
getTokens(): Token[];
|
|
66
|
+
/**
|
|
67
|
+
* Create a child container (for request-scoped containers)
|
|
68
|
+
*/
|
|
69
|
+
createChild(): Container;
|
|
70
|
+
}
|
|
71
|
+
declare function setContainerMetadata(target: object, key: string, value: unknown): void;
|
|
72
|
+
declare function getContainerMetadata<T>(target: object, key: string): T | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* Helper to create injectable class decorator
|
|
75
|
+
*/
|
|
76
|
+
export declare function Injectable(token?: Token): ClassDecorator;
|
|
77
|
+
/**
|
|
78
|
+
* Helper to create parameter injection metadata.
|
|
79
|
+
* Supports both Token and ForwardRef<Token> for circular dependency resolution.
|
|
80
|
+
*
|
|
81
|
+
* @param token - The injection token or a forward reference to the token
|
|
82
|
+
* @returns A parameter decorator that registers the injection metadata
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* // Regular injection
|
|
87
|
+
* constructor(@Inject(MY_TOKEN) private service: MyService) {}
|
|
88
|
+
*
|
|
89
|
+
* // Forward reference for circular dependency
|
|
90
|
+
* constructor(@Inject(forwardRef(() => ServiceB)) private serviceB: ServiceB) {}
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare function Inject(token: Token | ForwardRef<Token>): ParameterDecorator;
|
|
94
|
+
export { getContainerMetadata as getInjectTokens, setContainerMetadata, getContainerMetadata, };
|
|
95
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/container/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACN,KAAK,UAAU,EACf,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAIxE;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAElE;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAE5D;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,oBAAc,CAAC;AAyEjC,qBAAa,SAAS;IACrB,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,eAAe,CAAyB;IAEhD;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAexC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAMxC;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAI1B;;OAEG;IACH,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAoC9B;;;OAGG;IACH,OAAO,CAAC,eAAe;IA8EvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwBtB;;OAEG;IAEH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,SAAS,IAAI,KAAK,EAAE;IAIpB;;OAEG;IACH,WAAW,IAAI,SAAS;CAUxB;AAOD,iBAAS,oBAAoB,CAC5B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACZ,IAAI,CAKN;AAED,iBAAS,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAE3E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,cAAc,CAQxD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAe3E;AAGD,OAAO,EACN,oBAAoB,IAAI,eAAe,EACvC,oBAAoB,EACpB,oBAAoB,GACpB,CAAC"}
|