@gqlkit-ts/cli 0.0.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/auto-type-generator/auto-type-generator.d.ts +62 -0
- package/dist/auto-type-generator/auto-type-generator.d.ts.map +1 -0
- package/dist/auto-type-generator/auto-type-generator.js +540 -0
- package/dist/auto-type-generator/auto-type-generator.js.map +1 -0
- package/dist/auto-type-generator/index.d.ts +4 -0
- package/dist/auto-type-generator/index.d.ts.map +1 -0
- package/dist/auto-type-generator/index.js +3 -0
- package/dist/auto-type-generator/index.js.map +1 -0
- package/dist/auto-type-generator/inline-enum-collector.d.ts +31 -0
- package/dist/auto-type-generator/inline-enum-collector.d.ts.map +1 -0
- package/dist/auto-type-generator/inline-enum-collector.js +157 -0
- package/dist/auto-type-generator/inline-enum-collector.js.map +1 -0
- package/dist/auto-type-generator/name-collision-validator.d.ts +17 -0
- package/dist/auto-type-generator/name-collision-validator.d.ts.map +1 -0
- package/dist/auto-type-generator/name-collision-validator.js +68 -0
- package/dist/auto-type-generator/name-collision-validator.js.map +1 -0
- package/dist/auto-type-generator/naming-convention.d.ts +44 -0
- package/dist/auto-type-generator/naming-convention.d.ts.map +1 -0
- package/dist/auto-type-generator/naming-convention.js +67 -0
- package/dist/auto-type-generator/naming-convention.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/gen.d.ts +32 -0
- package/dist/commands/gen.d.ts.map +1 -0
- package/dist/commands/gen.js +101 -0
- package/dist/commands/gen.js.map +1 -0
- package/dist/commands/main.d.ts +12 -0
- package/dist/commands/main.d.ts.map +1 -0
- package/dist/commands/main.js +5 -0
- package/dist/commands/main.js.map +1 -0
- package/dist/config/define-config.d.ts +26 -0
- package/dist/config/define-config.d.ts.map +1 -0
- package/dist/config/define-config.js +27 -0
- package/dist/config/define-config.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +131 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config-loader/index.d.ts +3 -0
- package/dist/config-loader/index.d.ts.map +1 -0
- package/dist/config-loader/index.js +2 -0
- package/dist/config-loader/index.js.map +1 -0
- package/dist/config-loader/loader.d.ts +50 -0
- package/dist/config-loader/loader.d.ts.map +1 -0
- package/dist/config-loader/loader.js +78 -0
- package/dist/config-loader/loader.js.map +1 -0
- package/dist/config-loader/validator.d.ts +13 -0
- package/dist/config-loader/validator.d.ts.map +1 -0
- package/dist/config-loader/validator.js +497 -0
- package/dist/config-loader/validator.js.map +1 -0
- package/dist/gen-orchestrator/hook-executor/hook-executor.d.ts +25 -0
- package/dist/gen-orchestrator/hook-executor/hook-executor.d.ts.map +1 -0
- package/dist/gen-orchestrator/hook-executor/hook-executor.js +68 -0
- package/dist/gen-orchestrator/hook-executor/hook-executor.js.map +1 -0
- package/dist/gen-orchestrator/orchestrator.d.ts +30 -0
- package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/gen-orchestrator/orchestrator.js +505 -0
- package/dist/gen-orchestrator/orchestrator.js.map +1 -0
- package/dist/gen-orchestrator/reporter/diagnostic-reporter.d.ts +9 -0
- package/dist/gen-orchestrator/reporter/diagnostic-reporter.d.ts.map +1 -0
- package/dist/gen-orchestrator/reporter/diagnostic-reporter.js +32 -0
- package/dist/gen-orchestrator/reporter/diagnostic-reporter.js.map +1 -0
- package/dist/gen-orchestrator/reporter/progress-reporter.d.ts +19 -0
- package/dist/gen-orchestrator/reporter/progress-reporter.d.ts.map +1 -0
- package/dist/gen-orchestrator/reporter/progress-reporter.js +38 -0
- package/dist/gen-orchestrator/reporter/progress-reporter.js.map +1 -0
- package/dist/gen-orchestrator/writer/file-writer.d.ts +13 -0
- package/dist/gen-orchestrator/writer/file-writer.d.ts.map +1 -0
- package/dist/gen-orchestrator/writer/file-writer.js +22 -0
- package/dist/gen-orchestrator/writer/file-writer.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/resolver-extractor/extract-resolvers.d.ts +49 -0
- package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -0
- package/dist/resolver-extractor/extract-resolvers.js +2 -0
- package/dist/resolver-extractor/extract-resolvers.js.map +1 -0
- package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +60 -0
- package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -0
- package/dist/resolver-extractor/extractor/define-api-extractor.js +509 -0
- package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -0
- package/dist/resolver-extractor/index.d.ts +5 -0
- package/dist/resolver-extractor/index.d.ts.map +1 -0
- package/dist/resolver-extractor/index.js +2 -0
- package/dist/resolver-extractor/index.js.map +1 -0
- package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts +25 -0
- package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts.map +1 -0
- package/dist/resolver-extractor/validator/abstract-resolver-validator.js +172 -0
- package/dist/resolver-extractor/validator/abstract-resolver-validator.js.map +1 -0
- package/dist/resolver-extractor/validator/only-validator.d.ts +61 -0
- package/dist/resolver-extractor/validator/only-validator.d.ts.map +1 -0
- package/dist/resolver-extractor/validator/only-validator.js +76 -0
- package/dist/resolver-extractor/validator/only-validator.js.map +1 -0
- package/dist/schema-generator/builder/ast-builder.d.ts +7 -0
- package/dist/schema-generator/builder/ast-builder.d.ts.map +1 -0
- package/dist/schema-generator/builder/ast-builder.js +417 -0
- package/dist/schema-generator/builder/ast-builder.js.map +1 -0
- package/dist/schema-generator/emitter/code-emitter.d.ts +15 -0
- package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -0
- package/dist/schema-generator/emitter/code-emitter.js +216 -0
- package/dist/schema-generator/emitter/code-emitter.js.map +1 -0
- package/dist/schema-generator/emitter/sdl-emitter.d.ts +7 -0
- package/dist/schema-generator/emitter/sdl-emitter.d.ts.map +1 -0
- package/dist/schema-generator/emitter/sdl-emitter.js +11 -0
- package/dist/schema-generator/emitter/sdl-emitter.js.map +1 -0
- package/dist/schema-generator/generate-schema.d.ts +26 -0
- package/dist/schema-generator/generate-schema.d.ts.map +1 -0
- package/dist/schema-generator/generate-schema.js +93 -0
- package/dist/schema-generator/generate-schema.js.map +1 -0
- package/dist/schema-generator/index.d.ts +4 -0
- package/dist/schema-generator/index.d.ts.map +1 -0
- package/dist/schema-generator/index.js +2 -0
- package/dist/schema-generator/index.js.map +1 -0
- package/dist/schema-generator/integrator/result-integrator.d.ts +113 -0
- package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -0
- package/dist/schema-generator/integrator/result-integrator.js +438 -0
- package/dist/schema-generator/integrator/result-integrator.js.map +1 -0
- package/dist/schema-generator/pruner/schema-pruner.d.ts +16 -0
- package/dist/schema-generator/pruner/schema-pruner.d.ts.map +1 -0
- package/dist/schema-generator/pruner/schema-pruner.js +66 -0
- package/dist/schema-generator/pruner/schema-pruner.js.map +1 -0
- package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +24 -0
- package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -0
- package/dist/schema-generator/resolver-collector/resolver-collector.js +61 -0
- package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -0
- package/dist/shared/constants.d.ts +54 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +109 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/default-value-detector.d.ts +40 -0
- package/dist/shared/default-value-detector.d.ts.map +1 -0
- package/dist/shared/default-value-detector.js +124 -0
- package/dist/shared/default-value-detector.js.map +1 -0
- package/dist/shared/diagnostics.d.ts +4 -0
- package/dist/shared/diagnostics.d.ts.map +1 -0
- package/dist/shared/diagnostics.js +25 -0
- package/dist/shared/diagnostics.js.map +1 -0
- package/dist/shared/directive-definition-extractor.d.ts +64 -0
- package/dist/shared/directive-definition-extractor.d.ts.map +1 -0
- package/dist/shared/directive-definition-extractor.js +399 -0
- package/dist/shared/directive-definition-extractor.js.map +1 -0
- package/dist/shared/directive-detector.d.ts +102 -0
- package/dist/shared/directive-detector.d.ts.map +1 -0
- package/dist/shared/directive-detector.js +415 -0
- package/dist/shared/directive-detector.js.map +1 -0
- package/dist/shared/file-scanner.d.ts +25 -0
- package/dist/shared/file-scanner.d.ts.map +1 -0
- package/dist/shared/file-scanner.js +101 -0
- package/dist/shared/file-scanner.js.map +1 -0
- package/dist/shared/index.d.ts +10 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +6 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/inline-object-extractor.d.ts +13 -0
- package/dist/shared/inline-object-extractor.d.ts.map +1 -0
- package/dist/shared/inline-object-extractor.js +65 -0
- package/dist/shared/inline-object-extractor.js.map +1 -0
- package/dist/shared/inline-object-utils.d.ts +7 -0
- package/dist/shared/inline-object-utils.d.ts.map +1 -0
- package/dist/shared/inline-object-utils.js +23 -0
- package/dist/shared/inline-object-utils.js.map +1 -0
- package/dist/shared/interface-detector.d.ts +23 -0
- package/dist/shared/interface-detector.d.ts.map +1 -0
- package/dist/shared/interface-detector.js +133 -0
- package/dist/shared/interface-detector.js.map +1 -0
- package/dist/shared/interface-validator.d.ts +9 -0
- package/dist/shared/interface-validator.d.ts.map +1 -0
- package/dist/shared/interface-validator.js +152 -0
- package/dist/shared/interface-validator.js.map +1 -0
- package/dist/shared/metadata-detector.d.ts +65 -0
- package/dist/shared/metadata-detector.d.ts.map +1 -0
- package/dist/shared/metadata-detector.js +333 -0
- package/dist/shared/metadata-detector.js.map +1 -0
- package/dist/shared/path-utils.d.ts +2 -0
- package/dist/shared/path-utils.d.ts.map +1 -0
- package/dist/shared/path-utils.js +4 -0
- package/dist/shared/path-utils.js.map +1 -0
- package/dist/shared/program-factory.d.ts +14 -0
- package/dist/shared/program-factory.d.ts.map +1 -0
- package/dist/shared/program-factory.js +29 -0
- package/dist/shared/program-factory.js.map +1 -0
- package/dist/shared/source-location.d.ts +11 -0
- package/dist/shared/source-location.d.ts.map +1 -0
- package/dist/shared/source-location.js +15 -0
- package/dist/shared/source-location.js.map +1 -0
- package/dist/shared/tsconfig-loader.d.ts +13 -0
- package/dist/shared/tsconfig-loader.d.ts.map +1 -0
- package/dist/shared/tsconfig-loader.js +90 -0
- package/dist/shared/tsconfig-loader.js.map +1 -0
- package/dist/shared/tsdoc-parser.d.ts +12 -0
- package/dist/shared/tsdoc-parser.d.ts.map +1 -0
- package/dist/shared/tsdoc-parser.js +101 -0
- package/dist/shared/tsdoc-parser.js.map +1 -0
- package/dist/shared/type-converter.d.ts +3 -0
- package/dist/shared/type-converter.d.ts.map +1 -0
- package/dist/shared/type-converter.js +83 -0
- package/dist/shared/type-converter.js.map +1 -0
- package/dist/shared/typescript-utils.d.ts +82 -0
- package/dist/shared/typescript-utils.d.ts.map +1 -0
- package/dist/shared/typescript-utils.js +197 -0
- package/dist/shared/typescript-utils.js.map +1 -0
- package/dist/type-extractor/collector/result-collector.d.ts +7 -0
- package/dist/type-extractor/collector/result-collector.d.ts.map +1 -0
- package/dist/type-extractor/collector/result-collector.js +35 -0
- package/dist/type-extractor/collector/result-collector.js.map +1 -0
- package/dist/type-extractor/collector/scalar-collector.d.ts +108 -0
- package/dist/type-extractor/collector/scalar-collector.d.ts.map +1 -0
- package/dist/type-extractor/collector/scalar-collector.js +123 -0
- package/dist/type-extractor/collector/scalar-collector.js.map +1 -0
- package/dist/type-extractor/converter/field-eligibility.d.ts +34 -0
- package/dist/type-extractor/converter/field-eligibility.d.ts.map +1 -0
- package/dist/type-extractor/converter/field-eligibility.js +89 -0
- package/dist/type-extractor/converter/field-eligibility.js.map +1 -0
- package/dist/type-extractor/converter/graphql-converter.d.ts +7 -0
- package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -0
- package/dist/type-extractor/converter/graphql-converter.js +338 -0
- package/dist/type-extractor/converter/graphql-converter.js.map +1 -0
- package/dist/type-extractor/extract-types.d.ts +2 -0
- package/dist/type-extractor/extract-types.d.ts.map +1 -0
- package/dist/type-extractor/extract-types.js +2 -0
- package/dist/type-extractor/extract-types.js.map +1 -0
- package/dist/type-extractor/extractor/field-type-resolver.d.ts +28 -0
- package/dist/type-extractor/extractor/field-type-resolver.d.ts.map +1 -0
- package/dist/type-extractor/extractor/field-type-resolver.js +394 -0
- package/dist/type-extractor/extractor/field-type-resolver.js.map +1 -0
- package/dist/type-extractor/extractor/type-extractor.d.ts +36 -0
- package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -0
- package/dist/type-extractor/extractor/type-extractor.js +1082 -0
- package/dist/type-extractor/extractor/type-extractor.js.map +1 -0
- package/dist/type-extractor/extractor/type-name-collector.d.ts +24 -0
- package/dist/type-extractor/extractor/type-name-collector.d.ts.map +1 -0
- package/dist/type-extractor/extractor/type-name-collector.js +102 -0
- package/dist/type-extractor/extractor/type-name-collector.js.map +1 -0
- package/dist/type-extractor/index.d.ts +4 -0
- package/dist/type-extractor/index.d.ts.map +1 -0
- package/dist/type-extractor/index.js +2 -0
- package/dist/type-extractor/index.js.map +1 -0
- package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts +89 -0
- package/dist/type-extractor/mapper/scalar-base-type-mapper.d.ts.map +1 -0
- package/dist/type-extractor/mapper/scalar-base-type-mapper.js +158 -0
- package/dist/type-extractor/mapper/scalar-base-type-mapper.js.map +1 -0
- package/dist/type-extractor/types/diagnostics.d.ts +17 -0
- package/dist/type-extractor/types/diagnostics.d.ts.map +1 -0
- package/dist/type-extractor/types/diagnostics.js +2 -0
- package/dist/type-extractor/types/diagnostics.js.map +1 -0
- package/dist/type-extractor/types/graphql.d.ts +42 -0
- package/dist/type-extractor/types/graphql.d.ts.map +1 -0
- package/dist/type-extractor/types/graphql.js +2 -0
- package/dist/type-extractor/types/graphql.js.map +1 -0
- package/dist/type-extractor/types/index.d.ts +6 -0
- package/dist/type-extractor/types/index.d.ts.map +1 -0
- package/dist/type-extractor/types/index.js +2 -0
- package/dist/type-extractor/types/index.js.map +1 -0
- package/dist/type-extractor/types/ts-type-reference-factory.d.ts +39 -0
- package/dist/type-extractor/types/ts-type-reference-factory.d.ts.map +1 -0
- package/dist/type-extractor/types/ts-type-reference-factory.js +69 -0
- package/dist/type-extractor/types/ts-type-reference-factory.js.map +1 -0
- package/dist/type-extractor/types/typescript.d.ts +106 -0
- package/dist/type-extractor/types/typescript.d.ts.map +1 -0
- package/dist/type-extractor/types/typescript.js +2 -0
- package/dist/type-extractor/types/typescript.js.map +1 -0
- package/dist/type-extractor/validator/type-validator.d.ts +11 -0
- package/dist/type-extractor/validator/type-validator.d.ts.map +1 -0
- package/dist/type-extractor/validator/type-validator.js +53 -0
- package/dist/type-extractor/validator/type-validator.js.map +1 -0
- package/docs/configuration.md +163 -0
- package/docs/getting-started.md +117 -0
- package/docs/index.md +33 -0
- package/docs/integration/apollo.md +109 -0
- package/docs/integration/drizzle.md +191 -0
- package/docs/integration/yoga.md +108 -0
- package/docs/schema/abstract-resolvers.md +146 -0
- package/docs/schema/directives.md +196 -0
- package/docs/schema/documentation.md +176 -0
- package/docs/schema/enums.md +370 -0
- package/docs/schema/fields.md +186 -0
- package/docs/schema/index.md +38 -0
- package/docs/schema/inputs.md +279 -0
- package/docs/schema/interfaces.md +178 -0
- package/docs/schema/objects.md +188 -0
- package/docs/schema/queries-mutations.md +207 -0
- package/docs/schema/scalars.md +194 -0
- package/docs/schema/unions.md +90 -0
- package/docs/what-is-gqlkit.md +22 -0
- package/package.json +66 -7
- package/src/auto-type-generator/auto-type-generator.ts +925 -0
- package/src/auto-type-generator/index.ts +21 -0
- package/src/auto-type-generator/inline-enum-collector.ts +290 -0
- package/src/auto-type-generator/name-collision-validator.ts +119 -0
- package/src/auto-type-generator/naming-convention.ts +126 -0
- package/src/cli.ts +11 -0
- package/src/commands/gen.ts +141 -0
- package/src/commands/main.ts +5 -0
- package/src/config/define-config.ts +28 -0
- package/src/config/index.ts +7 -0
- package/src/config/types.ts +144 -0
- package/src/config-loader/index.ts +14 -0
- package/src/config-loader/loader.ts +143 -0
- package/src/config-loader/validator.ts +672 -0
- package/src/gen-orchestrator/hook-executor/hook-executor.ts +117 -0
- package/src/gen-orchestrator/orchestrator.ts +784 -0
- package/src/gen-orchestrator/reporter/diagnostic-reporter.ts +44 -0
- package/src/gen-orchestrator/reporter/progress-reporter.ts +61 -0
- package/src/gen-orchestrator/writer/file-writer.ts +38 -0
- package/src/index.ts +2 -0
- package/src/resolver-extractor/extract-resolvers.ts +63 -0
- package/src/resolver-extractor/extractor/define-api-extractor.ts +806 -0
- package/src/resolver-extractor/index.ts +19 -0
- package/src/resolver-extractor/validator/abstract-resolver-validator.ts +251 -0
- package/src/resolver-extractor/validator/only-validator.ts +158 -0
- package/src/schema-generator/builder/ast-builder.ts +706 -0
- package/src/schema-generator/emitter/code-emitter.ts +351 -0
- package/src/schema-generator/emitter/sdl-emitter.ts +13 -0
- package/src/schema-generator/generate-schema.ts +170 -0
- package/src/schema-generator/index.ts +19 -0
- package/src/schema-generator/integrator/result-integrator.ts +690 -0
- package/src/schema-generator/pruner/schema-pruner.ts +112 -0
- package/src/schema-generator/resolver-collector/resolver-collector.ts +123 -0
- package/src/shared/constants.ts +122 -0
- package/src/shared/default-value-detector.ts +172 -0
- package/src/shared/diagnostics.ts +35 -0
- package/src/shared/directive-definition-extractor.ts +564 -0
- package/src/shared/directive-detector.ts +556 -0
- package/src/shared/file-scanner.ts +170 -0
- package/src/shared/index.ts +32 -0
- package/src/shared/inline-object-extractor.ts +102 -0
- package/src/shared/inline-object-utils.ts +23 -0
- package/src/shared/interface-detector.ts +176 -0
- package/src/shared/interface-validator.ts +211 -0
- package/src/shared/metadata-detector.ts +443 -0
- package/src/shared/path-utils.ts +3 -0
- package/src/shared/program-factory.ts +51 -0
- package/src/shared/source-location.ts +27 -0
- package/src/shared/tsconfig-loader.ts +126 -0
- package/src/shared/tsdoc-parser.ts +155 -0
- package/src/shared/type-converter.ts +99 -0
- package/src/shared/typescript-utils.ts +246 -0
- package/src/type-extractor/collector/result-collector.ts +57 -0
- package/src/type-extractor/collector/scalar-collector.ts +254 -0
- package/src/type-extractor/converter/field-eligibility.ts +112 -0
- package/src/type-extractor/converter/graphql-converter.ts +459 -0
- package/src/type-extractor/extract-types.ts +1 -0
- package/src/type-extractor/extractor/field-type-resolver.ts +569 -0
- package/src/type-extractor/extractor/type-extractor.ts +1567 -0
- package/src/type-extractor/extractor/type-name-collector.ts +130 -0
- package/src/type-extractor/index.ts +20 -0
- package/src/type-extractor/mapper/scalar-base-type-mapper.ts +265 -0
- package/src/type-extractor/types/diagnostics.ts +99 -0
- package/src/type-extractor/types/graphql.ts +55 -0
- package/src/type-extractor/types/index.ts +37 -0
- package/src/type-extractor/types/ts-type-reference-factory.ts +137 -0
- package/src/type-extractor/types/typescript.ts +133 -0
- package/src/type-extractor/validator/type-validator.ts +77 -0
- package/README.md +0 -45
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# Enum Types
|
|
2
|
+
|
|
3
|
+
gqlkit converts TypeScript string literal unions and enums to GraphQL enum types.
|
|
4
|
+
|
|
5
|
+
## String Literal Unions
|
|
6
|
+
|
|
7
|
+
String literal unions are automatically converted to GraphQL enum types:
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
/**
|
|
11
|
+
* User account status
|
|
12
|
+
*/
|
|
13
|
+
export type UserStatus = "ACTIVE" | "INACTIVE" | "PENDING";
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Generates:
|
|
17
|
+
|
|
18
|
+
```graphql
|
|
19
|
+
"""User account status"""
|
|
20
|
+
enum UserStatus {
|
|
21
|
+
ACTIVE
|
|
22
|
+
INACTIVE
|
|
23
|
+
PENDING
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## TypeScript Enums
|
|
28
|
+
|
|
29
|
+
TypeScript string enums are also supported:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
export enum UserStatus {
|
|
33
|
+
Active = "ACTIVE",
|
|
34
|
+
Inactive = "INACTIVE",
|
|
35
|
+
Pending = "PENDING",
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Generates:
|
|
40
|
+
|
|
41
|
+
```graphql
|
|
42
|
+
enum UserStatus {
|
|
43
|
+
ACTIVE
|
|
44
|
+
INACTIVE
|
|
45
|
+
PENDING
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Deprecating Enum Values
|
|
50
|
+
|
|
51
|
+
Use the `@deprecated` JSDoc tag to mark enum values as deprecated:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
export enum UserStatus {
|
|
55
|
+
Active = "ACTIVE",
|
|
56
|
+
/**
|
|
57
|
+
* @deprecated Use `Inactive` instead
|
|
58
|
+
*/
|
|
59
|
+
Pending = "PENDING",
|
|
60
|
+
Inactive = "INACTIVE",
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
For string literal unions, use a separate type with JSDoc:
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
/**
|
|
68
|
+
* User account status
|
|
69
|
+
*/
|
|
70
|
+
export type UserStatus =
|
|
71
|
+
| "ACTIVE"
|
|
72
|
+
| /** @deprecated Use INACTIVE instead */ "PENDING"
|
|
73
|
+
| "INACTIVE";
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Generates:
|
|
77
|
+
|
|
78
|
+
```graphql
|
|
79
|
+
enum UserStatus {
|
|
80
|
+
ACTIVE
|
|
81
|
+
PENDING @deprecated(reason: "Use INACTIVE instead")
|
|
82
|
+
INACTIVE
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Using Enums in Types
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
export type User = {
|
|
90
|
+
id: string;
|
|
91
|
+
name: string;
|
|
92
|
+
status: UserStatus;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export type UpdateUserInput = {
|
|
96
|
+
status: UserStatus | null;
|
|
97
|
+
};
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Generates:
|
|
101
|
+
|
|
102
|
+
```graphql
|
|
103
|
+
type User {
|
|
104
|
+
id: String!
|
|
105
|
+
name: String!
|
|
106
|
+
status: UserStatus!
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
input UpdateUserInput {
|
|
110
|
+
status: UserStatus
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Inline Enums
|
|
115
|
+
|
|
116
|
+
When you define a string literal union or reference a TypeScript enum **inline** (without exporting it from the schema directory), gqlkit automatically generates a GraphQL enum type. This follows the same pattern as [inline objects](./objects.md#inline-objects).
|
|
117
|
+
|
|
118
|
+
### Inline String Literal Unions
|
|
119
|
+
|
|
120
|
+
String literal unions used directly in field or argument types generate enum types automatically:
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
export type User = {
|
|
124
|
+
id: string;
|
|
125
|
+
name: string;
|
|
126
|
+
/** Current account status */
|
|
127
|
+
status: "active" | "inactive" | "pendingReview";
|
|
128
|
+
};
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Generates:
|
|
132
|
+
|
|
133
|
+
```graphql
|
|
134
|
+
type User {
|
|
135
|
+
id: String!
|
|
136
|
+
name: String!
|
|
137
|
+
"""Current account status"""
|
|
138
|
+
status: UserStatus!
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
enum UserStatus {
|
|
142
|
+
ACTIVE
|
|
143
|
+
INACTIVE
|
|
144
|
+
PENDING_REVIEW
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The generated enum type name follows the convention `{ParentTypeName}{PascalCaseFieldName}`.
|
|
149
|
+
|
|
150
|
+
### External TypeScript Enums
|
|
151
|
+
|
|
152
|
+
TypeScript enums defined outside the schema directory are also automatically converted:
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
// src/types/order.ts (outside schema directory)
|
|
156
|
+
/**
|
|
157
|
+
* Order status in the system
|
|
158
|
+
*/
|
|
159
|
+
export enum OrderStatus {
|
|
160
|
+
/** Order is pending payment */
|
|
161
|
+
Pending = "pending",
|
|
162
|
+
/** Order is being processed */
|
|
163
|
+
Processing = "processing",
|
|
164
|
+
/** Order has been shipped */
|
|
165
|
+
Shipped = "shipped",
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// src/gqlkit/schema/order.ts
|
|
169
|
+
import { OrderStatus } from "../../types/order.js";
|
|
170
|
+
|
|
171
|
+
export type Order = {
|
|
172
|
+
id: string;
|
|
173
|
+
status: OrderStatus;
|
|
174
|
+
};
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Generates:
|
|
178
|
+
|
|
179
|
+
```graphql
|
|
180
|
+
type Order {
|
|
181
|
+
id: String!
|
|
182
|
+
status: OrderStatus!
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
"""Order status in the system"""
|
|
186
|
+
enum OrderStatus {
|
|
187
|
+
"""Order is pending payment"""
|
|
188
|
+
PENDING
|
|
189
|
+
"""Order is being processed"""
|
|
190
|
+
PROCESSING
|
|
191
|
+
"""Order has been shipped"""
|
|
192
|
+
SHIPPED
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
TSDoc comments on the enum and its values are preserved as GraphQL descriptions. The `@deprecated` tag is also supported.
|
|
197
|
+
|
|
198
|
+
When the same external TypeScript enum is referenced in multiple places, gqlkit generates a single GraphQL enum type and reuses it across all references.
|
|
199
|
+
|
|
200
|
+
### Inline Enum Naming Convention
|
|
201
|
+
|
|
202
|
+
The naming convention for auto-generated enum types matches [inline objects](./objects.md#inline-objects):
|
|
203
|
+
|
|
204
|
+
| Context | Naming Pattern | Example |
|
|
205
|
+
|---------|----------------|---------|
|
|
206
|
+
| Object field | `{ParentTypeName}{PascalCaseFieldName}` | `User.status` → `UserStatus` |
|
|
207
|
+
| Input field | `{ParentTypeNameWithoutInputSuffix}{PascalCaseFieldName}Input` | `CreateUserInput.role` → `CreateUserRoleInput` |
|
|
208
|
+
| Query/Mutation argument | `{PascalCaseFieldName}{PascalCaseArgName}Input` | `searchUsers(status: ...)` → `SearchUsersStatusInput` |
|
|
209
|
+
| Field resolver argument | `{ParentTypeName}{PascalCaseFieldName}{PascalCaseArgName}Input` | `User.posts(filter: ...)` → `UserPostsFilterInput` |
|
|
210
|
+
|
|
211
|
+
### Nullable Inline Enums
|
|
212
|
+
|
|
213
|
+
Nullable inline enums are supported:
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
export type User = {
|
|
217
|
+
id: string;
|
|
218
|
+
status: "active" | "inactive" | null;
|
|
219
|
+
};
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Generates:
|
|
223
|
+
|
|
224
|
+
```graphql
|
|
225
|
+
type User {
|
|
226
|
+
id: String!
|
|
227
|
+
status: UserStatus
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
enum UserStatus {
|
|
231
|
+
ACTIVE
|
|
232
|
+
INACTIVE
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Arrays of Inline Enums
|
|
237
|
+
|
|
238
|
+
Inline enums in array types are also supported:
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
export type User = {
|
|
242
|
+
id: string;
|
|
243
|
+
roles: ("admin" | "editor" | "viewer")[];
|
|
244
|
+
};
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Generates:
|
|
248
|
+
|
|
249
|
+
```graphql
|
|
250
|
+
type User {
|
|
251
|
+
id: String!
|
|
252
|
+
roles: [UserRoles!]!
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
enum UserRoles {
|
|
256
|
+
ADMIN
|
|
257
|
+
EDITOR
|
|
258
|
+
VIEWER
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### When Enums Are NOT Auto-Generated
|
|
263
|
+
|
|
264
|
+
If you export a type from the schema directory, it is treated as an explicit type declaration and not auto-generated:
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
// Exported from schema - used as-is, not auto-generated
|
|
268
|
+
export type UserStatus = "active" | "inactive" | "pending";
|
|
269
|
+
|
|
270
|
+
export type User = {
|
|
271
|
+
id: string;
|
|
272
|
+
status: UserStatus; // References the exported type
|
|
273
|
+
};
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
## Automatic Case Conversion
|
|
277
|
+
|
|
278
|
+
gqlkit automatically converts enum values to `SCREAMING_SNAKE_CASE` format, which is the GraphQL convention:
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
export type UserStatus = "active" | "inProgress" | "pending_review" | "on-hold";
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Generates:
|
|
285
|
+
|
|
286
|
+
```graphql
|
|
287
|
+
enum UserStatus {
|
|
288
|
+
ACTIVE
|
|
289
|
+
IN_PROGRESS
|
|
290
|
+
PENDING_REVIEW
|
|
291
|
+
ON_HOLD
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
When conversion changes the original value, gqlkit generates resolver mappings to translate between GraphQL and TypeScript values:
|
|
296
|
+
|
|
297
|
+
```typescript
|
|
298
|
+
// Generated resolvers.ts
|
|
299
|
+
export function createResolvers() {
|
|
300
|
+
return {
|
|
301
|
+
UserStatus: {
|
|
302
|
+
ACTIVE: "active",
|
|
303
|
+
IN_PROGRESS: "inProgress",
|
|
304
|
+
PENDING_REVIEW: "pending_review",
|
|
305
|
+
ON_HOLD: "on-hold",
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
If values are already in `SCREAMING_SNAKE_CASE`, no resolver mapping is generated.
|
|
312
|
+
|
|
313
|
+
### Duplicate Value Detection
|
|
314
|
+
|
|
315
|
+
If multiple TypeScript values convert to the same GraphQL enum value, gqlkit reports a `DUPLICATE_ENUM_VALUE_AFTER_CONVERSION` error:
|
|
316
|
+
|
|
317
|
+
```typescript
|
|
318
|
+
// Error: 'activeUser' and 'active_user' both convert to ACTIVE_USER
|
|
319
|
+
export type Status = "activeUser" | "active_user" | "pending";
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## Invalid Enum Values
|
|
323
|
+
|
|
324
|
+
Enum values that are not valid GraphQL identifiers are automatically skipped with a warning. gqlkit converts enum values to `SCREAMING_SNAKE_CASE`, and the converted name must:
|
|
325
|
+
|
|
326
|
+
- Match the pattern `/^[_A-Za-z][_0-9A-Za-z]*$/`
|
|
327
|
+
- Not start with `__` (reserved for GraphQL introspection)
|
|
328
|
+
|
|
329
|
+
### String Literal Unions
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
export type Status =
|
|
333
|
+
| "active" // ✅ Converts to ACTIVE
|
|
334
|
+
| "inProgress" // ✅ Converts to IN_PROGRESS
|
|
335
|
+
| "0pending" // ⚠️ Skipped: converts to 0PENDING (starts with number)
|
|
336
|
+
| "__internal"; // ⚠️ Skipped: converts to __INTERNAL (starts with __)
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
Generates:
|
|
340
|
+
|
|
341
|
+
```graphql
|
|
342
|
+
enum Status {
|
|
343
|
+
ACTIVE
|
|
344
|
+
IN_PROGRESS
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### TypeScript Enums
|
|
349
|
+
|
|
350
|
+
```typescript
|
|
351
|
+
export enum Priority {
|
|
352
|
+
HIGH = "HIGH", // ✅ Valid
|
|
353
|
+
MEDIUM = "MEDIUM", // ✅ Valid
|
|
354
|
+
LOW = "LOW", // ✅ Valid
|
|
355
|
+
"0INVALID" = "0INVALID", // ⚠️ Skipped: starts with number
|
|
356
|
+
__RESERVED = "__RESERVED", // ⚠️ Skipped: starts with __
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
Generates:
|
|
361
|
+
|
|
362
|
+
```graphql
|
|
363
|
+
enum Priority {
|
|
364
|
+
HIGH
|
|
365
|
+
MEDIUM
|
|
366
|
+
LOW
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
When enum values are skipped, gqlkit outputs a warning with the original name, converted name, and location.
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Field Resolvers
|
|
2
|
+
|
|
3
|
+
Add computed fields to object types using `defineField`. Define them alongside the type.
|
|
4
|
+
|
|
5
|
+
## Basic Usage
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
// src/gqlkit/schema/user.ts
|
|
9
|
+
import { defineField } from "../gqlkit";
|
|
10
|
+
import type { IDString, NoArgs } from "@gqlkit-ts/runtime";
|
|
11
|
+
import type { Post } from "./post.js";
|
|
12
|
+
|
|
13
|
+
export type User = {
|
|
14
|
+
id: IDString;
|
|
15
|
+
name: string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/** Get posts authored by this user */
|
|
19
|
+
export const posts = defineField<User, NoArgs, Post[]>(
|
|
20
|
+
(parent) => findPostsByAuthor(parent.id)
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
/** Get user's post count */
|
|
24
|
+
export const postCount = defineField<User, NoArgs, number>(
|
|
25
|
+
(parent) => countPostsByAuthor(parent.id)
|
|
26
|
+
);
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Generates:
|
|
30
|
+
|
|
31
|
+
```graphql
|
|
32
|
+
type User {
|
|
33
|
+
id: ID!
|
|
34
|
+
name: String!
|
|
35
|
+
"""Get posts authored by this user"""
|
|
36
|
+
posts: [Post!]!
|
|
37
|
+
"""Get user's post count"""
|
|
38
|
+
postCount: Float!
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Resolver Function Signature
|
|
43
|
+
|
|
44
|
+
Field resolvers receive four arguments:
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
(parent, args, ctx, info) => ReturnType
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
| Argument | Description |
|
|
51
|
+
|----------|-------------|
|
|
52
|
+
| `parent` | The parent object (typed via the first type parameter) |
|
|
53
|
+
| `args` | The arguments passed to the field |
|
|
54
|
+
| `ctx` | The context object (typed via `gqlkit.ts`) |
|
|
55
|
+
| `info` | GraphQL resolve info |
|
|
56
|
+
|
|
57
|
+
## Type Parameters
|
|
58
|
+
|
|
59
|
+
`defineField<TParent, TArgs, TResult>`:
|
|
60
|
+
|
|
61
|
+
| Parameter | Description |
|
|
62
|
+
|-----------|-------------|
|
|
63
|
+
| `TParent` | The parent object type this field is defined on |
|
|
64
|
+
| `TArgs` | The arguments type (use `NoArgs` if no arguments) |
|
|
65
|
+
| `TResult` | The return type of the field |
|
|
66
|
+
|
|
67
|
+
## Fields with Arguments
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
export const posts = defineField<
|
|
71
|
+
User,
|
|
72
|
+
{ limit: number; offset: number },
|
|
73
|
+
Post[]
|
|
74
|
+
>((parent, args) => {
|
|
75
|
+
return findPostsByAuthor(parent.id, args.limit, args.offset);
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Generates:
|
|
80
|
+
|
|
81
|
+
```graphql
|
|
82
|
+
type User {
|
|
83
|
+
posts(limit: Float!, offset: Float!): [Post!]!
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Inline Object Arguments
|
|
88
|
+
|
|
89
|
+
Field resolver arguments can use inline object literals. gqlkit automatically generates Input Object types with the naming convention `{ParentTypeName}{PascalCaseFieldName}{PascalCaseArgName}Input`:
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import { defineField } from "../gqlkit";
|
|
93
|
+
|
|
94
|
+
export const posts = defineField<
|
|
95
|
+
User,
|
|
96
|
+
{
|
|
97
|
+
/** Filter options */
|
|
98
|
+
filter: {
|
|
99
|
+
titlePattern: string | null;
|
|
100
|
+
status: PostStatus | null;
|
|
101
|
+
} | null;
|
|
102
|
+
},
|
|
103
|
+
Post[]
|
|
104
|
+
>((parent, args) => []);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Generates:
|
|
108
|
+
|
|
109
|
+
```graphql
|
|
110
|
+
type User {
|
|
111
|
+
posts(
|
|
112
|
+
"""Filter options"""
|
|
113
|
+
filter: UserPostsFilterInput
|
|
114
|
+
): [Post!]!
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
input UserPostsFilterInput {
|
|
118
|
+
titlePattern: String
|
|
119
|
+
status: PostStatus
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Inline string literal unions and external TypeScript enums in arguments are also automatically converted to GraphQL enum types. See [Inline Enums](./enums.md#inline-enums) for details.
|
|
124
|
+
|
|
125
|
+
## Default Values in Arguments
|
|
126
|
+
|
|
127
|
+
Default values in Input Objects are applied to resolver arguments:
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
import { defineQuery } from "../gqlkit";
|
|
131
|
+
import type { GqlField, Int } from "@gqlkit-ts/runtime";
|
|
132
|
+
|
|
133
|
+
export type PaginationInput = {
|
|
134
|
+
limit: GqlField<Int, { defaultValue: 10 }>;
|
|
135
|
+
offset: GqlField<Int, { defaultValue: 0 }>;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export type User = {
|
|
139
|
+
id: string;
|
|
140
|
+
name: string;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
export const users = defineQuery<PaginationInput, User[]>(() => []);
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Generates:
|
|
147
|
+
|
|
148
|
+
```graphql
|
|
149
|
+
type Query {
|
|
150
|
+
users(limit: Int! = 10, offset: Int! = 0): [User!]!
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Interface Field Resolvers
|
|
155
|
+
|
|
156
|
+
Add computed fields to interface types using `defineField`:
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
import { defineField } from "../gqlkit";
|
|
160
|
+
import type { NoArgs } from "@gqlkit-ts/runtime";
|
|
161
|
+
import type { Node } from "./node.js";
|
|
162
|
+
|
|
163
|
+
/** Get the typename of a Node */
|
|
164
|
+
export const __typename = defineField<Node, NoArgs, string>(
|
|
165
|
+
(parent) => parent.constructor.name
|
|
166
|
+
);
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Attaching Directives
|
|
170
|
+
|
|
171
|
+
Add a fourth type parameter to attach directives to field resolvers:
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
import { defineField } from "../gqlkit";
|
|
175
|
+
import type { NoArgs } from "@gqlkit-ts/runtime";
|
|
176
|
+
import { type AuthDirective } from "./directives.js";
|
|
177
|
+
|
|
178
|
+
export const email = defineField<
|
|
179
|
+
User,
|
|
180
|
+
NoArgs,
|
|
181
|
+
string,
|
|
182
|
+
[AuthDirective<{ role: ["ADMIN"] }>]
|
|
183
|
+
>((parent) => parent.email);
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
See [Directives](./directives.md) for more details on defining and using custom directives.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Schema Definition
|
|
2
|
+
|
|
3
|
+
gqlkit generates GraphQL schema from your TypeScript types. All exported types from `src/gqlkit/schema/` are automatically scanned and converted to GraphQL types.
|
|
4
|
+
|
|
5
|
+
## Type Mapping
|
|
6
|
+
|
|
7
|
+
gqlkit maps TypeScript types to GraphQL types as follows:
|
|
8
|
+
|
|
9
|
+
| TypeScript | GraphQL |
|
|
10
|
+
|------------|---------|
|
|
11
|
+
| `string` | `String!` |
|
|
12
|
+
| `number` | `Float!` |
|
|
13
|
+
| `boolean` | `Boolean!` |
|
|
14
|
+
| `IDString`, `IDNumber` | `ID!` |
|
|
15
|
+
| `Int` (branded) | `Int!` |
|
|
16
|
+
| `Float` (branded) | `Float!` |
|
|
17
|
+
| `T \| null` | `T` (nullable) |
|
|
18
|
+
| `T[]` | `[T!]!` |
|
|
19
|
+
| String literal union | Enum type |
|
|
20
|
+
| TypeScript `enum` | Enum type |
|
|
21
|
+
| Union of object types | Union type |
|
|
22
|
+
| `*Input` suffix types | Input Object type |
|
|
23
|
+
| Union with `*Input` suffix | `@oneOf` input object |
|
|
24
|
+
| `GqlInterface<T>` | Interface type |
|
|
25
|
+
| `GqlScalar<Name, Base>` | Custom scalar |
|
|
26
|
+
|
|
27
|
+
## Project Layout
|
|
28
|
+
|
|
29
|
+
Default project layout:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
src/
|
|
33
|
+
gqlkit/
|
|
34
|
+
schema/ # Types and resolvers co-located
|
|
35
|
+
__generated__/ # Generated files (auto-created)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
All TypeScript files (`.ts`, `.cts`, `.mts`) under `src/gqlkit/schema/` are scanned for types and resolvers.
|