@buenojs/bueno 0.8.9 → 0.8.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cache/index.d.ts +187 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +595 -0
- package/dist/cache/index.js.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 +9 -9
- package/dist/cli/bin.js.map +1 -0
- 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/add-frontend.js +376 -0
- package/dist/cli/commands/add-frontend.js.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/build.js +347 -0
- package/dist/cli/commands/build.js.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/dev.js +205 -0
- package/dist/cli/commands/dev.js.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/generate.js +491 -0
- package/dist/cli/commands/generate.js.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/help.js +51 -0
- package/dist/cli/commands/help.js.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/index.js +77 -0
- package/dist/cli/commands/index.js.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/migration.js +295 -0
- package/dist/cli/commands/migration.js.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/new.js +641 -0
- package/dist/cli/commands/new.js.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/commands/start.js +171 -0
- package/dist/cli/commands/start.js.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/args.js +224 -0
- package/dist/cli/core/args.js.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/console.js +268 -0
- package/dist/cli/core/console.js.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/index.js +10 -0
- package/dist/cli/core/index.js.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/prompt.js +338 -0
- package/dist/cli/core/prompt.js.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/core/spinner.js +208 -0
- package/dist/cli/core/spinner.js.map +1 -0
- package/dist/cli/index.d.ts +47 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +127 -0
- package/dist/cli/index.js.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/index.js +49 -0
- package/dist/cli/templates/database/index.js.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/mysql.js +12 -0
- package/dist/cli/templates/database/mysql.js.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/none.js +14 -0
- package/dist/cli/templates/database/none.js.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/postgresql.js +12 -0
- package/dist/cli/templates/database/postgresql.js.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/database/sqlite.js +12 -0
- package/dist/cli/templates/database/sqlite.js.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/deploy.js +278 -0
- package/dist/cli/templates/deploy.js.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/docker.js +298 -0
- package/dist/cli/templates/docker.js.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/index.js +40 -0
- package/dist/cli/templates/frontend/index.js.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/none.js +15 -0
- package/dist/cli/templates/frontend/none.js.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/react.js +139 -0
- package/dist/cli/templates/frontend/react.js.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/solid.js +133 -0
- package/dist/cli/templates/frontend/solid.js.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/svelte.js +130 -0
- package/dist/cli/templates/frontend/svelte.js.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/frontend/vue.js +129 -0
- package/dist/cli/templates/frontend/vue.js.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/index.js +308 -0
- package/dist/cli/templates/generators/index.js.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/generators/types.js +21 -0
- package/dist/cli/templates/generators/types.js.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/index.js +18 -0
- package/dist/cli/templates/index.js.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/api.js +79 -0
- package/dist/cli/templates/project/api.js.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/default.js +136 -0
- package/dist/cli/templates/project/default.js.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/fullstack.js +19 -0
- package/dist/cli/templates/project/fullstack.js.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/index.js +60 -0
- package/dist/cli/templates/project/index.js.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/minimal.js +43 -0
- package/dist/cli/templates/project/minimal.js.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/types.js +7 -0
- package/dist/cli/templates/project/types.js.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/templates/project/website.js +312 -0
- package/dist/cli/templates/project/website.js.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/fs.js +350 -0
- package/dist/cli/utils/fs.js.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/index.js +9 -0
- package/dist/cli/utils/index.js.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/strings.js +190 -0
- package/dist/cli/utils/strings.js.map +1 -0
- package/dist/cli/utils/version.d.ts +15 -0
- package/dist/cli/utils/version.d.ts.map +1 -0
- package/dist/cli/utils/version.js +38 -0
- package/dist/cli/utils/version.js.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-validation.js +77 -0
- package/dist/config/env-validation.js.map +1 -0
- package/dist/config/env.d.ts +167 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +392 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +168 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +329 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +81 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +242 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/merge.d.ts +66 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +226 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/types.d.ts +322 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +443 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +100 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +548 -0
- package/dist/config/validation.js.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/forward-ref.js +105 -0
- package/dist/container/forward-ref.js.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.map +1 -0
- package/dist/context/index.d.ts +143 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js.map +1 -0
- package/dist/database/index.d.ts +219 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/migrations/index.d.ts +151 -0
- package/dist/database/migrations/index.d.ts.map +1 -0
- package/dist/database/migrations/index.js +258 -0
- package/dist/database/migrations/index.js.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/builder.js +355 -0
- package/dist/database/orm/builder.js.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/index.js +131 -0
- package/dist/database/orm/casts/index.js.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/casts/types.js +5 -0
- package/dist/database/orm/casts/types.js.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/compiler.js +218 -0
- package/dist/database/orm/compiler.js.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/hooks/index.js +81 -0
- package/dist/database/orm/hooks/index.js.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/index.js +23 -0
- package/dist/database/orm/index.js.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-registry.js +49 -0
- package/dist/database/orm/model-registry.js.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/model.js +599 -0
- package/dist/database/orm/model.js.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/base.js +84 -0
- package/dist/database/orm/relationships/base.js.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-many.js +136 -0
- package/dist/database/orm/relationships/belongs-to-many.js.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/belongs-to.js +38 -0
- package/dist/database/orm/relationships/belongs-to.js.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-many.js +35 -0
- package/dist/database/orm/relationships/has-many.js.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/has-one.js +32 -0
- package/dist/database/orm/relationships/has-one.js.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/relationships/index.js +9 -0
- package/dist/database/orm/relationships/index.js.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/orm/scopes/index.js +47 -0
- package/dist/database/orm/scopes/index.js.map +1 -0
- package/dist/database/schema/index.d.ts +155 -0
- package/dist/database/schema/index.d.ts.map +1 -0
- package/dist/database/schema/index.js +401 -0
- package/dist/database/schema/index.js.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/api-routes.js +548 -0
- package/dist/frontend/api-routes.js.map +1 -0
- package/dist/frontend/bundler.d.ts +99 -0
- package/dist/frontend/bundler.d.ts.map +1 -0
- package/dist/frontend/bundler.js +555 -0
- package/dist/frontend/bundler.js.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-client.js +414 -0
- package/dist/frontend/console-client.js.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/console-stream.js +535 -0
- package/dist/frontend/console-stream.js.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/dev-server.js +735 -0
- package/dist/frontend/dev-server.js.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/file-router.js +531 -0
- package/dist/frontend/file-router.js.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/index.js +87 -0
- package/dist/frontend/frameworks/index.js.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/react.js +66 -0
- package/dist/frontend/frameworks/react.js.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/solid.js +84 -0
- package/dist/frontend/frameworks/solid.js.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/svelte.js +90 -0
- package/dist/frontend/frameworks/svelte.js.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/frameworks/vue.js +72 -0
- package/dist/frontend/frameworks/vue.js.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-client.js +654 -0
- package/dist/frontend/hmr-client.js.map +1 -0
- package/dist/frontend/hmr.d.ts +185 -0
- package/dist/frontend/hmr.d.ts.map +1 -0
- package/dist/frontend/hmr.js +619 -0
- package/dist/frontend/hmr.js.map +1 -0
- package/dist/frontend/index.d.ts +34 -0
- package/dist/frontend/index.d.ts.map +1 -0
- package/dist/frontend/index.js.map +1 -0
- package/dist/frontend/islands.d.ts +135 -0
- package/dist/frontend/islands.d.ts.map +1 -0
- package/dist/frontend/islands.js +455 -0
- package/dist/frontend/islands.js.map +1 -0
- package/dist/frontend/isr.d.ts +143 -0
- package/dist/frontend/isr.d.ts.map +1 -0
- package/dist/frontend/isr.js +440 -0
- package/dist/frontend/isr.js.map +1 -0
- package/dist/frontend/layout.d.ts +140 -0
- package/dist/frontend/layout.d.ts.map +1 -0
- package/dist/frontend/layout.js +392 -0
- package/dist/frontend/layout.js.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/react.js +373 -0
- package/dist/frontend/ssr/react.js.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/solid.js +440 -0
- package/dist/frontend/ssr/solid.js.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/svelte.js +439 -0
- package/dist/frontend/ssr/svelte.js.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/vue.js +385 -0
- package/dist/frontend/ssr/vue.js.map +1 -0
- package/dist/frontend/ssr.d.ts +147 -0
- package/dist/frontend/ssr.d.ts.map +1 -0
- package/dist/frontend/ssr.js +609 -0
- package/dist/frontend/ssr.js.map +1 -0
- package/dist/frontend/types.d.ts +1902 -0
- package/dist/frontend/types.d.ts.map +1 -0
- package/dist/frontend/types.js +8 -0
- package/dist/frontend/types.js.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/built-in-engine.js +443 -0
- package/dist/graphql/built-in-engine.js.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/context-builder.js +91 -0
- package/dist/graphql/context-builder.js.map +1 -0
- package/dist/graphql/decorators.d.ts +162 -0
- package/dist/graphql/decorators.d.ts.map +1 -0
- package/dist/graphql/decorators.js +291 -0
- package/dist/graphql/decorators.js.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/execution-pipeline.js +127 -0
- package/dist/graphql/execution-pipeline.js.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/graphql-module.js +442 -0
- package/dist/graphql/graphql-module.js.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.map +1 -0
- package/dist/graphql/metadata.d.ts +37 -0
- package/dist/graphql/metadata.d.ts.map +1 -0
- package/dist/graphql/metadata.js +130 -0
- package/dist/graphql/metadata.js.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/schema-builder.js +251 -0
- package/dist/graphql/schema-builder.js.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/subscription-handler.js +201 -0
- package/dist/graphql/subscription-handler.js.map +1 -0
- package/dist/graphql/types.d.ts +252 -0
- package/dist/graphql/types.d.ts.map +1 -0
- package/dist/graphql/types.js +28 -0
- package/dist/graphql/types.js.map +1 -0
- package/dist/health/index.d.ts +176 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js.map +1 -0
- package/dist/i18n/engine.d.ts +105 -0
- package/dist/i18n/engine.d.ts.map +1 -0
- package/dist/i18n/engine.js +248 -0
- package/dist/i18n/engine.js.map +1 -0
- package/dist/i18n/index.d.ts +13 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/loader.d.ts +79 -0
- package/dist/i18n/loader.d.ts.map +1 -0
- package/dist/i18n/loader.js +192 -0
- package/dist/i18n/loader.js.map +1 -0
- package/dist/i18n/middleware.d.ts +96 -0
- package/dist/i18n/middleware.d.ts.map +1 -0
- package/dist/i18n/middleware.js +126 -0
- package/dist/i18n/middleware.js.map +1 -0
- package/dist/i18n/negotiator.d.ts +84 -0
- package/dist/i18n/negotiator.d.ts.map +1 -0
- package/dist/i18n/negotiator.js +139 -0
- package/dist/i18n/negotiator.js.map +1 -0
- package/dist/i18n/types.d.ts +129 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +8 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.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/memory.js +246 -0
- package/dist/jobs/drivers/memory.js.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/drivers/redis.js +355 -0
- package/dist/jobs/drivers/redis.js.map +1 -0
- package/dist/jobs/index.d.ts +12 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/queue.d.ts +93 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +233 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/types.d.ts +193 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +8 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/jobs/worker.d.ts +91 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/jobs/worker.js +300 -0
- package/dist/jobs/worker.js.map +1 -0
- package/dist/lock/index.d.ts +141 -0
- package/dist/lock/index.d.ts.map +1 -0
- package/dist/lock/index.js.map +1 -0
- package/dist/logger/index.d.ts +156 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/transports/index.d.ts +371 -0
- package/dist/logger/transports/index.d.ts.map +1 -0
- package/dist/logger/transports/index.js +740 -0
- package/dist/logger/transports/index.js.map +1 -0
- package/dist/metrics/index.d.ts +163 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js.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/built-in.js +220 -0
- package/dist/middleware/built-in.js.map +1 -0
- package/dist/middleware/index.d.ts +40 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/migrations/index.d.ts +48 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +3 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/modules/filters.d.ts +150 -0
- package/dist/modules/filters.d.ts.map +1 -0
- package/dist/modules/filters.js +338 -0
- package/dist/modules/filters.js.map +1 -0
- package/dist/modules/guards.d.ts +188 -0
- package/dist/modules/guards.d.ts.map +1 -0
- package/dist/modules/guards.js +278 -0
- package/dist/modules/guards.js.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.map +1 -0
- package/dist/modules/interceptors.d.ts +242 -0
- package/dist/modules/interceptors.d.ts.map +1 -0
- package/dist/modules/interceptors.js +407 -0
- package/dist/modules/interceptors.js.map +1 -0
- package/dist/modules/lazy.d.ts +187 -0
- package/dist/modules/lazy.d.ts.map +1 -0
- package/dist/modules/lazy.js +305 -0
- package/dist/modules/lazy.js.map +1 -0
- package/dist/modules/lifecycle.d.ts +221 -0
- package/dist/modules/lifecycle.d.ts.map +1 -0
- package/dist/modules/lifecycle.js +314 -0
- package/dist/modules/lifecycle.js.map +1 -0
- package/dist/modules/metadata.d.ts +32 -0
- package/dist/modules/metadata.d.ts.map +1 -0
- package/dist/modules/metadata.js +59 -0
- package/dist/modules/metadata.js.map +1 -0
- package/dist/modules/pipes.d.ts +287 -0
- package/dist/modules/pipes.d.ts.map +1 -0
- package/dist/modules/pipes.js +443 -0
- package/dist/modules/pipes.js.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/base.js +37 -0
- package/dist/notification/channels/base.js.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/email.js +85 -0
- package/dist/notification/channels/email.js.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/push.js +84 -0
- package/dist/notification/channels/push.js.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/sms.js +83 -0
- package/dist/notification/channels/sms.js.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/channels/whatsapp.js +81 -0
- package/dist/notification/channels/whatsapp.js.map +1 -0
- package/dist/notification/index.d.ts +15 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/notification/service.d.ts +100 -0
- package/dist/notification/service.d.ts.map +1 -0
- package/dist/notification/service.js +279 -0
- package/dist/notification/service.js.map +1 -0
- package/dist/notification/types.d.ts +253 -0
- package/dist/notification/types.d.ts.map +1 -0
- package/dist/notification/types.js +14 -0
- package/dist/notification/types.js.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/__tests__/observability.test.js +404 -0
- package/dist/observability/__tests__/observability.test.js.map +1 -0
- package/dist/observability/breadcrumbs.d.ts +48 -0
- package/dist/observability/breadcrumbs.d.ts.map +1 -0
- package/dist/observability/breadcrumbs.js +97 -0
- package/dist/observability/breadcrumbs.js.map +1 -0
- package/dist/observability/index.d.ts +95 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/interceptor.d.ts +19 -0
- package/dist/observability/interceptor.d.ts.map +1 -0
- package/dist/observability/interceptor.js +67 -0
- package/dist/observability/interceptor.js.map +1 -0
- package/dist/observability/service.d.ts +101 -0
- package/dist/observability/service.d.ts.map +1 -0
- package/dist/observability/service.js +249 -0
- package/dist/observability/service.js.map +1 -0
- package/dist/observability/trace.d.ts +21 -0
- package/dist/observability/trace.d.ts.map +1 -0
- package/dist/observability/trace.js +35 -0
- package/dist/observability/trace.js.map +1 -0
- package/dist/observability/types.d.ts +172 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +8 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/openapi/decorators.d.ts +173 -0
- package/dist/openapi/decorators.d.ts.map +1 -0
- package/dist/openapi/decorators.js +276 -0
- package/dist/openapi/decorators.js.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/document-builder.js +228 -0
- package/dist/openapi/document-builder.js.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.map +1 -0
- package/dist/openapi/metadata.d.ts +36 -0
- package/dist/openapi/metadata.d.ts.map +1 -0
- package/dist/openapi/metadata.js +78 -0
- package/dist/openapi/metadata.js.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/route-scanner.js +174 -0
- package/dist/openapi/route-scanner.js.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/schema-generator.js +236 -0
- package/dist/openapi/schema-generator.js.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/swagger-module.js +143 -0
- package/dist/openapi/swagger-module.js.map +1 -0
- package/dist/openapi/types.d.ts +344 -0
- package/dist/openapi/types.d.ts.map +1 -0
- package/dist/openapi/types.js +7 -0
- package/dist/openapi/types.js.map +1 -0
- package/dist/orm/index.d.ts +10 -0
- package/dist/orm/index.d.ts.map +1 -0
- package/dist/orm/index.js.map +1 -0
- package/dist/router/index.d.ts +73 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/linear.d.ts +54 -0
- package/dist/router/linear.d.ts.map +1 -0
- package/dist/router/linear.js +261 -0
- package/dist/router/linear.js.map +1 -0
- package/dist/router/regex.d.ts +49 -0
- package/dist/router/regex.d.ts.map +1 -0
- package/dist/router/regex.js +201 -0
- package/dist/router/regex.js.map +1 -0
- package/dist/router/tree.d.ts +112 -0
- package/dist/router/tree.d.ts.map +1 -0
- package/dist/router/tree.js +360 -0
- package/dist/router/tree.js.map +1 -0
- package/dist/rpc/index.d.ts +321 -0
- package/dist/rpc/index.d.ts.map +1 -0
- package/dist/rpc/index.js.map +1 -0
- package/dist/schema/index.d.ts +10 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/security/index.d.ts +126 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +309 -0
- package/dist/security/index.js.map +1 -0
- package/dist/ssg/index.d.ts +73 -0
- package/dist/ssg/index.d.ts.map +1 -0
- package/dist/ssg/index.js +464 -0
- package/dist/ssg/index.js.map +1 -0
- package/dist/storage/index.d.ts +99 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +338 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/telemetry/index.d.ts +376 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/template/index.d.ts +7 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/template/index.js.map +1 -0
- package/dist/templates/engine.d.ts +60 -0
- package/dist/templates/engine.d.ts.map +1 -0
- package/dist/templates/engine.js +177 -0
- package/dist/templates/engine.js.map +1 -0
- package/dist/templates/index.d.ts +9 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/loader.d.ts +45 -0
- package/dist/templates/loader.d.ts.map +1 -0
- package/dist/templates/loader.js +274 -0
- package/dist/templates/loader.js.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/markdown.js +181 -0
- package/dist/templates/renderers/markdown.js.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/renderers/simple.js +245 -0
- package/dist/templates/renderers/simple.js.map +1 -0
- package/dist/templates/types.d.ts +138 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/templates/types.js +8 -0
- package/dist/templates/types.js.map +1 -0
- package/dist/testing/index.d.ts +539 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types/index.d.ts +116 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/validation/index.d.ts +89 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +276 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/schemas.d.ts +283 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +407 -0
- package/dist/validation/schemas.js.map +1 -0
- package/dist/websocket/index.d.ts +252 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +749 -0
- package/dist/websocket/index.js.map +1 -0
- package/llms.txt +1 -1
- package/package.json +3 -3
- package/src/cli/commands/new.ts +1 -1
- package/src/cli/templates/frontend/react.ts +1 -1
- package/src/cli/templates/frontend/solid.ts +1 -1
- package/src/cli/templates/frontend/svelte.ts +1 -1
- package/src/cli/templates/frontend/vue.ts +1 -1
- package/src/cli/templates/project/default.ts +1 -1
- package/src/cli/templates/project/website.ts +3 -3
- package/src/database/migrations/index.ts +8 -0
- package/src/migrations/index.ts +40 -1
- package/src/types/index.ts +1 -1
- package/tsconfig.json +2 -6
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQL Context Builder
|
|
3
|
+
*
|
|
4
|
+
* Builds the GraphQL context from an HTTP Context and enriches
|
|
5
|
+
* the HTTP context with GraphQL-specific metadata for guards/interceptors.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Builds a GraphQL context from an HTTP Context.
|
|
9
|
+
* Extracts user, request, and exposes the raw httpContext.
|
|
10
|
+
*/
|
|
11
|
+
export function buildGraphQLContext(httpContext) {
|
|
12
|
+
return {
|
|
13
|
+
request: httpContext.req,
|
|
14
|
+
user: httpContext.get("user"),
|
|
15
|
+
httpContext,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Enriches the HTTP context with GraphQL-specific metadata.
|
|
20
|
+
* This allows guards and interceptors to inspect GraphQL operation details.
|
|
21
|
+
*
|
|
22
|
+
* Guards that read context.get('graphql:operation') can make operation-specific decisions.
|
|
23
|
+
* Guards that read context.get('graphql:type') can differentiate queries vs mutations.
|
|
24
|
+
*
|
|
25
|
+
* @example Guard usage:
|
|
26
|
+
* ```typescript
|
|
27
|
+
* class MyGuard implements CanActivate {
|
|
28
|
+
* canActivate(context: Context): boolean {
|
|
29
|
+
* const op = context.get('graphql:type');
|
|
30
|
+
* if (op === 'mutation') {
|
|
31
|
+
* return !!context.req.headers.get('Authorization');
|
|
32
|
+
* }
|
|
33
|
+
* return true; // Queries are public
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export function enrichContextForGraphQL(httpContext, operationName, operationType, resolverClass) {
|
|
39
|
+
httpContext.set("graphql:operation", operationName);
|
|
40
|
+
httpContext.set("graphql:type", operationType);
|
|
41
|
+
httpContext.set("graphql:resolverClass", resolverClass);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Extracts the parsed request body for GraphQL.
|
|
45
|
+
* Handles both JSON body and GET query string (for playground requests).
|
|
46
|
+
*/
|
|
47
|
+
export async function parseGraphQLRequest(request) {
|
|
48
|
+
if (request.method === "POST") {
|
|
49
|
+
try {
|
|
50
|
+
const body = await request.clone().json();
|
|
51
|
+
if (typeof body.query !== "string") {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
query: body.query,
|
|
56
|
+
variables: typeof body.variables === "object" && body.variables !== null
|
|
57
|
+
? body.variables
|
|
58
|
+
: {},
|
|
59
|
+
operationName: typeof body.operationName === "string"
|
|
60
|
+
? body.operationName
|
|
61
|
+
: undefined,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (request.method === "GET") {
|
|
69
|
+
const url = new URL(request.url);
|
|
70
|
+
const query = url.searchParams.get("query");
|
|
71
|
+
if (!query)
|
|
72
|
+
return null;
|
|
73
|
+
const varsStr = url.searchParams.get("variables");
|
|
74
|
+
let variables = {};
|
|
75
|
+
if (varsStr) {
|
|
76
|
+
try {
|
|
77
|
+
variables = JSON.parse(varsStr);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// ignore parse error
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
query,
|
|
85
|
+
variables,
|
|
86
|
+
operationName: url.searchParams.get("operationName") ?? undefined,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=context-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../../src/graphql/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAoB;IACvD,OAAO;QACN,OAAO,EAAE,WAAW,CAAC,GAAG;QACxB,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;QAC7B,WAAW;KACX,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,uBAAuB,CACtC,WAAoB,EACpB,aAAqB,EACrB,aAAoD,EACpD,aAAkD;IAElD,WAAW,CAAC,GAAG,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;IACpD,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC/C,WAAW,CAAC,GAAG,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAgB;IAKzD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAItC,CAAC;YACF,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YACb,CAAC;YACD,OAAO;gBACN,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EACR,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;oBAC5D,CAAC,CAAE,IAAI,CAAC,SAAqC;oBAC7C,CAAC,CAAC,EAAE;gBACN,aAAa,EACZ,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ;oBACrC,CAAC,CAAC,IAAI,CAAC,aAAa;oBACpB,CAAC,CAAC,SAAS;aACb,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,SAAS,GAA4B,EAAE,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC;gBACJ,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACR,qBAAqB;YACtB,CAAC;QACF,CAAC;QACD,OAAO;YACN,KAAK;YACL,SAAS;YACT,aAAa,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,SAAS;SACjE,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQL Decorators
|
|
3
|
+
*
|
|
4
|
+
* Code-first decorator API for defining GraphQL schemas from TypeScript classes.
|
|
5
|
+
* Follows the same WeakMap metadata pattern as the OpenAPI module.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* @ObjectType()
|
|
10
|
+
* class User {
|
|
11
|
+
* @Field(() => String) id: string;
|
|
12
|
+
* @Field(() => String) name: string;
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* @Resolver()
|
|
16
|
+
* class UserResolver {
|
|
17
|
+
* @Query(() => [User])
|
|
18
|
+
* users(): User[] { return []; }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import type { Constructor, TypeFn, FieldDecoratorOptions, FieldOptions } from "./types";
|
|
23
|
+
/**
|
|
24
|
+
* Marks a class as a GraphQL resolver.
|
|
25
|
+
* Dependencies are resolved from the DI container via @Inject.
|
|
26
|
+
*
|
|
27
|
+
* @param name - Optional GraphQL type name this resolver is for (e.g. 'User').
|
|
28
|
+
* Omit for root-level Query/Mutation/Subscription resolvers.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* @Resolver()
|
|
33
|
+
* class UserResolver { ... }
|
|
34
|
+
*
|
|
35
|
+
* @Resolver('User')
|
|
36
|
+
* class UserFieldResolver { ... }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function Resolver(name?: string): ClassDecorator;
|
|
40
|
+
/**
|
|
41
|
+
* Marks a class as a GraphQL output type.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* @ObjectType()
|
|
46
|
+
* class User {
|
|
47
|
+
* @Field(() => String) id: string;
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function ObjectType(name?: string, options?: {
|
|
52
|
+
description?: string;
|
|
53
|
+
}): ClassDecorator;
|
|
54
|
+
/**
|
|
55
|
+
* Marks a class as a GraphQL input type.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* @InputType()
|
|
60
|
+
* class CreateUserInput {
|
|
61
|
+
* @Field(() => String) name: string;
|
|
62
|
+
* }
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function InputType(name?: string, options?: {
|
|
66
|
+
description?: string;
|
|
67
|
+
}): ClassDecorator;
|
|
68
|
+
/**
|
|
69
|
+
* Marks a method as a GraphQL Query field.
|
|
70
|
+
*
|
|
71
|
+
* @param typeFn - Thunk returning the return type constructor
|
|
72
|
+
* @param options - Field options (nullable, description, name override)
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* @Query(() => [User])
|
|
77
|
+
* async users(): Promise<User[]> { ... }
|
|
78
|
+
*
|
|
79
|
+
* @Query(() => User, { nullable: true })
|
|
80
|
+
* async user(@Args('id') id: string): Promise<User | null> { ... }
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare function Query(typeFn: TypeFn, options?: FieldOptions): MethodDecorator;
|
|
84
|
+
/**
|
|
85
|
+
* Marks a method as a GraphQL Mutation field.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* @Mutation(() => User)
|
|
90
|
+
* async createUser(@Args('input', CreateUserInput) input: CreateUserInput): Promise<User> { ... }
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare function Mutation(typeFn: TypeFn, options?: FieldOptions): MethodDecorator;
|
|
94
|
+
/**
|
|
95
|
+
* Marks a method as a GraphQL Subscription field.
|
|
96
|
+
* The method must return an AsyncGenerator.
|
|
97
|
+
*
|
|
98
|
+
* Requires an engine with supportsSubscriptions = true (e.g. GraphQLJsAdapter).
|
|
99
|
+
* Requires subscriptions: true in GraphQLModule.setup().
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* @Subscription(() => Message)
|
|
104
|
+
* async *messageAdded(): AsyncGenerator<Message> {
|
|
105
|
+
* yield* pubSub.subscribe('message:added');
|
|
106
|
+
* }
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare function Subscription(typeFn: TypeFn, options?: FieldOptions): MethodDecorator;
|
|
110
|
+
/**
|
|
111
|
+
* Marks a property as a GraphQL field.
|
|
112
|
+
* Used on @ObjectType and @InputType classes.
|
|
113
|
+
*
|
|
114
|
+
* @param typeFn - Thunk returning the field type
|
|
115
|
+
* @param options - Field options
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```typescript
|
|
119
|
+
* @ObjectType()
|
|
120
|
+
* class User {
|
|
121
|
+
* @Field(() => String) id: string;
|
|
122
|
+
* @Field(() => String, { nullable: true }) bio?: string;
|
|
123
|
+
* @Field(() => [Post]) posts: Post[];
|
|
124
|
+
* }
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
export declare function Field(typeFn: TypeFn, options?: FieldDecoratorOptions): PropertyDecorator;
|
|
128
|
+
/**
|
|
129
|
+
* Extracts a specific GraphQL argument by name into a method parameter.
|
|
130
|
+
*
|
|
131
|
+
* @param name - The argument name as it appears in the GraphQL query
|
|
132
|
+
* @param inputTypeFn - Optional: type thunk for object input types (validates shape)
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* @Query(() => User)
|
|
137
|
+
* async user(@Args('id') id: string): Promise<User> { ... }
|
|
138
|
+
*
|
|
139
|
+
* @Mutation(() => User)
|
|
140
|
+
* async createUser(@Args('input', CreateUserInput) input: CreateUserInput): Promise<User> { ... }
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export declare function Args(name: string, inputType?: Constructor): ParameterDecorator;
|
|
144
|
+
/**
|
|
145
|
+
* Injects the GraphQL context object into a resolver method parameter.
|
|
146
|
+
*
|
|
147
|
+
* Named @GqlContext to avoid collision with the HTTP Context class.
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* @Mutation(() => Post)
|
|
152
|
+
* async createPost(
|
|
153
|
+
* @Args('title') title: string,
|
|
154
|
+
* @GqlContext() ctx: GraphQLContext,
|
|
155
|
+
* ): Promise<Post> {
|
|
156
|
+
* const userId = (ctx.user as User).id;
|
|
157
|
+
* ...
|
|
158
|
+
* }
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
export declare function GqlContext(): ParameterDecorator;
|
|
162
|
+
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/graphql/decorators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACX,WAAW,EACX,MAAM,EACN,qBAAqB,EACrB,YAAY,EACZ,MAAM,SAAS,CAAC;AAmBjB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,CAOtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACzB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,cAAc,CAUhB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACxB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,cAAc,CAUhB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,eAAe,CAmBjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,eAAe,CAmBpF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,eAAe,CAmBxF;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,KAAK,CACpB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GACjC,iBAAiB,CAanB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,kBAAkB,CAiB9E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,IAAI,kBAAkB,CAc/C"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQL Decorators
|
|
3
|
+
*
|
|
4
|
+
* Code-first decorator API for defining GraphQL schemas from TypeScript classes.
|
|
5
|
+
* Follows the same WeakMap metadata pattern as the OpenAPI module.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* @ObjectType()
|
|
10
|
+
* class User {
|
|
11
|
+
* @Field(() => String) id: string;
|
|
12
|
+
* @Field(() => String) name: string;
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* @Resolver()
|
|
16
|
+
* class UserResolver {
|
|
17
|
+
* @Query(() => [User])
|
|
18
|
+
* users(): User[] { return []; }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { setResolverMetadata, setObjectTypeMetadata, setInputTypeMetadata, addQueryField, addMutationField, addSubscriptionField, getQueryFields, getMutationFields, getSubscriptionFields, setGqlPropertyMetadata, setParamMetadata, getParamMetadata, } from "./metadata";
|
|
23
|
+
import { registerTypeClass } from "./schema-builder";
|
|
24
|
+
// ============= Class Decorators =============
|
|
25
|
+
/**
|
|
26
|
+
* Marks a class as a GraphQL resolver.
|
|
27
|
+
* Dependencies are resolved from the DI container via @Inject.
|
|
28
|
+
*
|
|
29
|
+
* @param name - Optional GraphQL type name this resolver is for (e.g. 'User').
|
|
30
|
+
* Omit for root-level Query/Mutation/Subscription resolvers.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* @Resolver()
|
|
35
|
+
* class UserResolver { ... }
|
|
36
|
+
*
|
|
37
|
+
* @Resolver('User')
|
|
38
|
+
* class UserFieldResolver { ... }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export function Resolver(name) {
|
|
42
|
+
return (target) => {
|
|
43
|
+
const ctor = target;
|
|
44
|
+
setResolverMetadata(ctor, {
|
|
45
|
+
name: name ?? ctor.name,
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Marks a class as a GraphQL output type.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* @ObjectType()
|
|
55
|
+
* class User {
|
|
56
|
+
* @Field(() => String) id: string;
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export function ObjectType(name, options) {
|
|
61
|
+
return (target) => {
|
|
62
|
+
const ctor = target;
|
|
63
|
+
setObjectTypeMetadata(ctor, {
|
|
64
|
+
name: name ?? ctor.name,
|
|
65
|
+
kind: "object",
|
|
66
|
+
description: options?.description,
|
|
67
|
+
});
|
|
68
|
+
registerTypeClass(ctor);
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Marks a class as a GraphQL input type.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* @InputType()
|
|
77
|
+
* class CreateUserInput {
|
|
78
|
+
* @Field(() => String) name: string;
|
|
79
|
+
* }
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export function InputType(name, options) {
|
|
83
|
+
return (target) => {
|
|
84
|
+
const ctor = target;
|
|
85
|
+
setInputTypeMetadata(ctor, {
|
|
86
|
+
name: name ?? ctor.name,
|
|
87
|
+
kind: "input",
|
|
88
|
+
description: options?.description,
|
|
89
|
+
});
|
|
90
|
+
registerTypeClass(ctor);
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// ============= Method Decorators =============
|
|
94
|
+
/**
|
|
95
|
+
* Marks a method as a GraphQL Query field.
|
|
96
|
+
*
|
|
97
|
+
* @param typeFn - Thunk returning the return type constructor
|
|
98
|
+
* @param options - Field options (nullable, description, name override)
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```typescript
|
|
102
|
+
* @Query(() => [User])
|
|
103
|
+
* async users(): Promise<User[]> { ... }
|
|
104
|
+
*
|
|
105
|
+
* @Query(() => User, { nullable: true })
|
|
106
|
+
* async user(@Args('id') id: string): Promise<User | null> { ... }
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export function Query(typeFn, options = {}) {
|
|
110
|
+
return (target, propertyKey, descriptor) => {
|
|
111
|
+
const methodName = String(propertyKey);
|
|
112
|
+
addQueryField(target, {
|
|
113
|
+
methodName,
|
|
114
|
+
fieldName: options.name ?? methodName,
|
|
115
|
+
typeFn,
|
|
116
|
+
kind: "query",
|
|
117
|
+
nullable: options.nullable ?? false,
|
|
118
|
+
description: options.description,
|
|
119
|
+
deprecationReason: options.deprecationReason,
|
|
120
|
+
paramMetadata: getParamMetadata(target, methodName),
|
|
121
|
+
});
|
|
122
|
+
return descriptor;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Marks a method as a GraphQL Mutation field.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```typescript
|
|
130
|
+
* @Mutation(() => User)
|
|
131
|
+
* async createUser(@Args('input', CreateUserInput) input: CreateUserInput): Promise<User> { ... }
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export function Mutation(typeFn, options = {}) {
|
|
135
|
+
return (target, propertyKey, descriptor) => {
|
|
136
|
+
const methodName = String(propertyKey);
|
|
137
|
+
addMutationField(target, {
|
|
138
|
+
methodName,
|
|
139
|
+
fieldName: options.name ?? methodName,
|
|
140
|
+
typeFn,
|
|
141
|
+
kind: "mutation",
|
|
142
|
+
nullable: options.nullable ?? false,
|
|
143
|
+
description: options.description,
|
|
144
|
+
deprecationReason: options.deprecationReason,
|
|
145
|
+
paramMetadata: getParamMetadata(target, methodName),
|
|
146
|
+
});
|
|
147
|
+
return descriptor;
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Marks a method as a GraphQL Subscription field.
|
|
152
|
+
* The method must return an AsyncGenerator.
|
|
153
|
+
*
|
|
154
|
+
* Requires an engine with supportsSubscriptions = true (e.g. GraphQLJsAdapter).
|
|
155
|
+
* Requires subscriptions: true in GraphQLModule.setup().
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* @Subscription(() => Message)
|
|
160
|
+
* async *messageAdded(): AsyncGenerator<Message> {
|
|
161
|
+
* yield* pubSub.subscribe('message:added');
|
|
162
|
+
* }
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export function Subscription(typeFn, options = {}) {
|
|
166
|
+
return (target, propertyKey, descriptor) => {
|
|
167
|
+
const methodName = String(propertyKey);
|
|
168
|
+
addSubscriptionField(target, {
|
|
169
|
+
methodName,
|
|
170
|
+
fieldName: options.name ?? methodName,
|
|
171
|
+
typeFn,
|
|
172
|
+
kind: "subscription",
|
|
173
|
+
nullable: options.nullable ?? false,
|
|
174
|
+
description: options.description,
|
|
175
|
+
deprecationReason: options.deprecationReason,
|
|
176
|
+
paramMetadata: getParamMetadata(target, methodName),
|
|
177
|
+
});
|
|
178
|
+
return descriptor;
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// ============= Property Decorator =============
|
|
182
|
+
/**
|
|
183
|
+
* Marks a property as a GraphQL field.
|
|
184
|
+
* Used on @ObjectType and @InputType classes.
|
|
185
|
+
*
|
|
186
|
+
* @param typeFn - Thunk returning the field type
|
|
187
|
+
* @param options - Field options
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```typescript
|
|
191
|
+
* @ObjectType()
|
|
192
|
+
* class User {
|
|
193
|
+
* @Field(() => String) id: string;
|
|
194
|
+
* @Field(() => String, { nullable: true }) bio?: string;
|
|
195
|
+
* @Field(() => [Post]) posts: Post[];
|
|
196
|
+
* }
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export function Field(typeFn, options = {}) {
|
|
200
|
+
return (target, propertyKey) => {
|
|
201
|
+
const key = typeof propertyKey === "symbol" ? propertyKey.toString() : propertyKey;
|
|
202
|
+
setGqlPropertyMetadata(target, propertyKey, {
|
|
203
|
+
propertyKey: key,
|
|
204
|
+
typeFn,
|
|
205
|
+
nullable: options.nullable ?? false,
|
|
206
|
+
description: options.description,
|
|
207
|
+
deprecationReason: options.deprecationReason,
|
|
208
|
+
defaultValue: options.defaultValue,
|
|
209
|
+
});
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// ============= Parameter Decorators =============
|
|
213
|
+
/**
|
|
214
|
+
* Extracts a specific GraphQL argument by name into a method parameter.
|
|
215
|
+
*
|
|
216
|
+
* @param name - The argument name as it appears in the GraphQL query
|
|
217
|
+
* @param inputTypeFn - Optional: type thunk for object input types (validates shape)
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* @Query(() => User)
|
|
222
|
+
* async user(@Args('id') id: string): Promise<User> { ... }
|
|
223
|
+
*
|
|
224
|
+
* @Mutation(() => User)
|
|
225
|
+
* async createUser(@Args('input', CreateUserInput) input: CreateUserInput): Promise<User> { ... }
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
export function Args(name, inputType) {
|
|
229
|
+
return (target, propertyKey, parameterIndex) => {
|
|
230
|
+
if (!propertyKey)
|
|
231
|
+
return;
|
|
232
|
+
const methodName = String(propertyKey);
|
|
233
|
+
setParamMetadata(target, methodName, parameterIndex, {
|
|
234
|
+
index: parameterIndex,
|
|
235
|
+
kind: inputType ? "argsObject" : "args",
|
|
236
|
+
argName: name,
|
|
237
|
+
inputTypeFn: inputType ? () => inputType : undefined,
|
|
238
|
+
});
|
|
239
|
+
// Re-sync param metadata into existing resolver field metadata
|
|
240
|
+
syncParamMetadata(target, methodName);
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Injects the GraphQL context object into a resolver method parameter.
|
|
245
|
+
*
|
|
246
|
+
* Named @GqlContext to avoid collision with the HTTP Context class.
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
* ```typescript
|
|
250
|
+
* @Mutation(() => Post)
|
|
251
|
+
* async createPost(
|
|
252
|
+
* @Args('title') title: string,
|
|
253
|
+
* @GqlContext() ctx: GraphQLContext,
|
|
254
|
+
* ): Promise<Post> {
|
|
255
|
+
* const userId = (ctx.user as User).id;
|
|
256
|
+
* ...
|
|
257
|
+
* }
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
260
|
+
export function GqlContext() {
|
|
261
|
+
return (target, propertyKey, parameterIndex) => {
|
|
262
|
+
if (!propertyKey)
|
|
263
|
+
return;
|
|
264
|
+
const methodName = String(propertyKey);
|
|
265
|
+
setParamMetadata(target, methodName, parameterIndex, {
|
|
266
|
+
index: parameterIndex,
|
|
267
|
+
kind: "context",
|
|
268
|
+
});
|
|
269
|
+
syncParamMetadata(target, methodName);
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
// ============= Internal Helper =============
|
|
273
|
+
/**
|
|
274
|
+
* Re-syncs param metadata into already-registered resolver field entries.
|
|
275
|
+
* Decorators are applied bottom-up in TypeScript, so @Args/@GqlContext may run
|
|
276
|
+
* before @Query/@Mutation. This helper updates the field entry with the latest
|
|
277
|
+
* param metadata after each parameter decorator runs.
|
|
278
|
+
*/
|
|
279
|
+
function syncParamMetadata(prototype, methodName) {
|
|
280
|
+
const params = getParamMetadata(prototype, methodName);
|
|
281
|
+
const syncFields = (fields, addFn) => {
|
|
282
|
+
const field = fields.find((f) => f.methodName === methodName);
|
|
283
|
+
if (field) {
|
|
284
|
+
addFn(prototype, { ...field, paramMetadata: params });
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
syncFields(getQueryFields(prototype), addQueryField);
|
|
288
|
+
syncFields(getMutationFields(prototype), addMutationField);
|
|
289
|
+
syncFields(getSubscriptionFields(prototype), addSubscriptionField);
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/graphql/decorators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,+CAA+C;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAa;IACrC,OAAO,CAAC,MAAe,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAqB,CAAC;QACnC,mBAAmB,CAAC,IAAI,EAAE;YACzB,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI;SACvB,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CACzB,IAAa,EACb,OAAkC;IAElC,OAAO,CAAC,MAAe,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAqB,CAAC;QACnC,qBAAqB,CAAC,IAAI,EAAE;YAC3B,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI;YACvB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,OAAO,EAAE,WAAW;SACjC,CAAC,CAAC;QACH,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CACxB,IAAa,EACb,OAAkC;IAElC,OAAO,CAAC,MAAe,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAqB,CAAC;QACnC,oBAAoB,CAAC,IAAI,EAAE;YAC1B,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI;YACvB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,OAAO,EAAE,WAAW;SACjC,CAAC,CAAC;QACH,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;AACH,CAAC;AAED,gDAAgD;AAEhD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,KAAK,CAAC,MAAc,EAAE,UAAwB,EAAE;IAC/D,OAAO,CACN,MAAc,EACd,WAA4B,EAC5B,UAA8B,EACT,EAAE;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,aAAa,CAAC,MAAM,EAAE;YACrB,UAAU;YACV,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,UAAU;YACrC,MAAM;YACN,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,aAAa,EAAE,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC;SACnD,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACnB,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,UAAwB,EAAE;IAClE,OAAO,CACN,MAAc,EACd,WAA4B,EAC5B,UAA8B,EACT,EAAE;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,gBAAgB,CAAC,MAAM,EAAE;YACxB,UAAU;YACV,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,UAAU;YACrC,MAAM;YACN,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,aAAa,EAAE,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC;SACnD,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACnB,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,UAAwB,EAAE;IACtE,OAAO,CACN,MAAc,EACd,WAA4B,EAC5B,UAA8B,EACT,EAAE;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,oBAAoB,CAAC,MAAM,EAAE;YAC5B,UAAU;YACV,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,UAAU;YACrC,MAAM;YACN,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,aAAa,EAAE,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC;SACnD,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACnB,CAAC,CAAC;AACH,CAAC;AAED,iDAAiD;AAEjD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,KAAK,CACpB,MAAc,EACd,UAAiC,EAAE;IAEnC,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAQ,EAAE;QAC7D,MAAM,GAAG,GACR,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QACxE,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE;YAC3C,WAAW,EAAE,GAAG;YAChB,MAAM;YACN,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,YAAY,EAAE,OAAO,CAAC,YAAY;SAClC,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AAED,mDAAmD;AAEnD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,SAAuB;IACzD,OAAO,CACN,MAAc,EACd,WAAwC,EACxC,cAAsB,EACf,EAAE;QACT,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE;YACpD,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;YACvC,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACpD,CAAC,CAAC;QACH,+DAA+D;QAC/D,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU;IACzB,OAAO,CACN,MAAc,EACd,WAAwC,EACxC,cAAsB,EACf,EAAE;QACT,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE;YACpD,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,SAAS;SACf,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC;AACH,CAAC;AAED,8CAA8C;AAE9C;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,SAAiB,EAAE,UAAkB;IAC/D,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,CAClB,MAAyC,EACzC,KAA2B,EACpB,EAAE;QACT,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;QAC9D,IAAI,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;IACF,CAAC,CAAC;IAEF,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC;IACrD,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC3D,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQL Execution Pipeline
|
|
3
|
+
*
|
|
4
|
+
* Applies the same guard/interceptor pipeline used for HTTP controllers
|
|
5
|
+
* to GraphQL resolver methods.
|
|
6
|
+
*
|
|
7
|
+
* Guards and interceptors receive the real HTTP Context, enriched with
|
|
8
|
+
* GraphQL-specific metadata:
|
|
9
|
+
* - context.get('graphql:operation') → resolver field name (e.g. 'users')
|
|
10
|
+
* - context.get('graphql:type') → 'query' | 'mutation' | 'subscription'
|
|
11
|
+
* - context.get('graphql:resolver') → resolver class constructor
|
|
12
|
+
*
|
|
13
|
+
* ## Guard Compatibility
|
|
14
|
+
* - ✅ Auth guards reading Authorization/Cookie headers
|
|
15
|
+
* - ✅ API key guards
|
|
16
|
+
* - ✅ Custom guards reading any header/cookie
|
|
17
|
+
* - ⚠️ Route-based guards (reading context.path) — see /graphql for all ops
|
|
18
|
+
* - ⚠️ CSRF guards (may block all POSTs) — need graphql-aware adaptation
|
|
19
|
+
*/
|
|
20
|
+
import type { Context } from "../context";
|
|
21
|
+
import type { Container } from "../container";
|
|
22
|
+
import type { Guard } from "../modules/guards";
|
|
23
|
+
import type { Interceptor } from "../modules/interceptors";
|
|
24
|
+
import type { GraphQLContext, ResolvedField, GraphQLError } from "./types";
|
|
25
|
+
export type { Guard, Interceptor };
|
|
26
|
+
export interface ResolverPipelineOptions {
|
|
27
|
+
/** The resolver class constructor (for reading class-level guard metadata) */
|
|
28
|
+
resolverClass: new (...args: unknown[]) => unknown;
|
|
29
|
+
/** Field name (for reading method-level guard metadata) */
|
|
30
|
+
fieldName: string;
|
|
31
|
+
/** The resolved field descriptor */
|
|
32
|
+
resolvedField: ResolvedField;
|
|
33
|
+
/** GraphQL arguments extracted from the query */
|
|
34
|
+
args: Record<string, unknown>;
|
|
35
|
+
/** Built GraphQL context */
|
|
36
|
+
graphqlContext: GraphQLContext;
|
|
37
|
+
/** HTTP Context from the current request */
|
|
38
|
+
httpContext: Context;
|
|
39
|
+
/** DI container for resolving guard/interceptor instances */
|
|
40
|
+
container: Container;
|
|
41
|
+
/** Global guards from app.getGlobalGuards() */
|
|
42
|
+
globalGuards: Guard[];
|
|
43
|
+
/** Global interceptors from app.getGlobalInterceptors() */
|
|
44
|
+
globalInterceptors: Interceptor[];
|
|
45
|
+
/** Operation type for enriching context */
|
|
46
|
+
operationType: "query" | "mutation" | "subscription";
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Execute a resolver method through the full guard → interceptor pipeline.
|
|
50
|
+
*
|
|
51
|
+
* Returns the resolver method's return value, or throws if a guard blocks.
|
|
52
|
+
* GraphQL errors should be caught by the caller and placed into the errors array.
|
|
53
|
+
*/
|
|
54
|
+
export declare function executeResolverWithPipeline(options: ResolverPipelineOptions): Promise<unknown>;
|
|
55
|
+
/**
|
|
56
|
+
* Calls the actual resolver method with the correct argument list.
|
|
57
|
+
* Resolves @Args and @GqlContext parameters at their declared positions.
|
|
58
|
+
*/
|
|
59
|
+
export declare function callResolver(field: ResolvedField, args: Record<string, unknown>, gqlContext: GraphQLContext): Promise<unknown>;
|
|
60
|
+
export declare class GraphQLForbiddenError extends Error {
|
|
61
|
+
readonly extensions: {
|
|
62
|
+
code: string;
|
|
63
|
+
};
|
|
64
|
+
constructor(message?: string);
|
|
65
|
+
toGraphQLError(): GraphQLError;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=execution-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-pipeline.d.ts","sourceRoot":"","sources":["../../src/graphql/execution-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAS,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAwB,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAe3E,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAInC,MAAM,WAAW,uBAAuB;IACvC,8EAA8E;IAC9E,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IACnD,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,aAAa,EAAE,aAAa,CAAC;IAC7B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,4BAA4B;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,4CAA4C;IAC5C,WAAW,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,SAAS,EAAE,SAAS,CAAC;IACrB,+CAA+C;IAC/C,YAAY,EAAE,KAAK,EAAE,CAAC;IACtB,2DAA2D;IAC3D,kBAAkB,EAAE,WAAW,EAAE,CAAC;IAClC,2CAA2C;IAC3C,aAAa,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;CACrD;AAID;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAChD,OAAO,EAAE,uBAAuB,GAC9B,OAAO,CAAC,OAAO,CAAC,CAwFlB;AAID;;;GAGG;AACH,wBAAsB,YAAY,CACjC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,cAAc,GACxB,OAAO,CAAC,OAAO,CAAC,CAQlB;AA4BD,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,UAAU;;MAAyB;gBAEhC,OAAO,SAAc;IAKjC,cAAc,IAAI,YAAY;CAM9B"}
|