@gqlkit-ts/cli 0.2.0 → 0.3.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/dist/auto-type-generator/auto-type-generator.d.ts +10 -4
- package/dist/auto-type-generator/auto-type-generator.d.ts.map +1 -1
- package/dist/auto-type-generator/auto-type-generator.js +640 -133
- package/dist/auto-type-generator/auto-type-generator.js.map +1 -1
- package/dist/auto-type-generator/index.d.ts +8 -1
- package/dist/auto-type-generator/index.d.ts.map +1 -1
- package/dist/auto-type-generator/index.js +3 -0
- package/dist/auto-type-generator/index.js.map +1 -1
- package/dist/auto-type-generator/inline-enum-collector.d.ts +13 -5
- package/dist/auto-type-generator/inline-enum-collector.d.ts.map +1 -1
- package/dist/auto-type-generator/inline-enum-collector.js +107 -71
- package/dist/auto-type-generator/inline-enum-collector.js.map +1 -1
- package/dist/auto-type-generator/inline-object-traverser.d.ts +20 -0
- package/dist/auto-type-generator/inline-object-traverser.d.ts.map +1 -0
- package/dist/auto-type-generator/inline-object-traverser.js +22 -0
- package/dist/auto-type-generator/inline-object-traverser.js.map +1 -0
- package/dist/auto-type-generator/inline-union-collector.d.ts +29 -0
- package/dist/auto-type-generator/inline-union-collector.d.ts.map +1 -0
- package/dist/auto-type-generator/inline-union-collector.js +216 -0
- package/dist/auto-type-generator/inline-union-collector.js.map +1 -0
- package/dist/auto-type-generator/inline-union-types.d.ts +29 -0
- package/dist/auto-type-generator/inline-union-types.d.ts.map +1 -0
- package/dist/auto-type-generator/inline-union-types.js +2 -0
- package/dist/auto-type-generator/inline-union-types.js.map +1 -0
- package/dist/auto-type-generator/inline-union-validator.d.ts +76 -0
- package/dist/auto-type-generator/inline-union-validator.d.ts.map +1 -0
- package/dist/auto-type-generator/inline-union-validator.js +329 -0
- package/dist/auto-type-generator/inline-union-validator.js.map +1 -0
- package/dist/auto-type-generator/naming-convention.d.ts +18 -1
- package/dist/auto-type-generator/naming-convention.d.ts.map +1 -1
- package/dist/auto-type-generator/naming-convention.js +16 -0
- package/dist/auto-type-generator/naming-convention.js.map +1 -1
- package/dist/auto-type-generator/resolve-type-generator.d.ts +20 -0
- package/dist/auto-type-generator/resolve-type-generator.d.ts.map +1 -0
- package/dist/auto-type-generator/resolve-type-generator.js +2 -0
- package/dist/auto-type-generator/resolve-type-generator.js.map +1 -0
- package/dist/auto-type-generator/resolver-field-iterator.d.ts +13 -0
- package/dist/auto-type-generator/resolver-field-iterator.d.ts.map +1 -0
- package/dist/auto-type-generator/resolver-field-iterator.js +22 -0
- package/dist/auto-type-generator/resolver-field-iterator.js.map +1 -0
- package/dist/auto-type-generator/typename-extractor.d.ts +26 -0
- package/dist/auto-type-generator/typename-extractor.d.ts.map +1 -0
- package/dist/auto-type-generator/typename-extractor.js +142 -0
- package/dist/auto-type-generator/typename-extractor.js.map +1 -0
- package/dist/auto-type-generator/typename-resolve-type-generator.d.ts +35 -0
- package/dist/auto-type-generator/typename-resolve-type-generator.d.ts.map +1 -0
- package/dist/auto-type-generator/typename-resolve-type-generator.js +177 -0
- package/dist/auto-type-generator/typename-resolve-type-generator.js.map +1 -0
- package/dist/auto-type-generator/typename-types.d.ts +43 -0
- package/dist/auto-type-generator/typename-types.d.ts.map +1 -0
- package/dist/auto-type-generator/typename-types.js +37 -0
- package/dist/auto-type-generator/typename-types.js.map +1 -0
- package/dist/auto-type-generator/typename-validator.d.ts +37 -0
- package/dist/auto-type-generator/typename-validator.d.ts.map +1 -0
- package/dist/auto-type-generator/typename-validator.js +206 -0
- package/dist/auto-type-generator/typename-validator.js.map +1 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/docs.d.ts +51 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +154 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/gen-orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/gen-orchestrator/orchestrator.js +13 -6
- package/dist/gen-orchestrator/orchestrator.js.map +1 -1
- package/dist/resolver-extractor/extract-resolvers.d.ts +19 -1
- package/dist/resolver-extractor/extract-resolvers.d.ts.map +1 -1
- package/dist/resolver-extractor/extractor/define-api-extractor.d.ts +5 -0
- package/dist/resolver-extractor/extractor/define-api-extractor.d.ts.map +1 -1
- package/dist/resolver-extractor/extractor/define-api-extractor.js +14 -61
- package/dist/resolver-extractor/extractor/define-api-extractor.js.map +1 -1
- package/dist/resolver-extractor/index.d.ts +0 -1
- package/dist/resolver-extractor/index.d.ts.map +1 -1
- package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts +1 -0
- package/dist/resolver-extractor/validator/abstract-resolver-validator.d.ts.map +1 -1
- package/dist/resolver-extractor/validator/abstract-resolver-validator.js +9 -5
- package/dist/resolver-extractor/validator/abstract-resolver-validator.js.map +1 -1
- package/dist/schema-generator/emitter/code-emitter.d.ts.map +1 -1
- package/dist/schema-generator/emitter/code-emitter.js +20 -0
- package/dist/schema-generator/emitter/code-emitter.js.map +1 -1
- package/dist/schema-generator/generate-schema.d.ts +1 -0
- package/dist/schema-generator/generate-schema.d.ts.map +1 -1
- package/dist/schema-generator/generate-schema.js +72 -3
- package/dist/schema-generator/generate-schema.js.map +1 -1
- package/dist/schema-generator/integrator/result-integrator.d.ts +14 -2
- package/dist/schema-generator/integrator/result-integrator.d.ts.map +1 -1
- package/dist/schema-generator/integrator/result-integrator.js +54 -1
- package/dist/schema-generator/integrator/result-integrator.js.map +1 -1
- package/dist/schema-generator/resolver-collector/resolver-collector.d.ts +2 -0
- package/dist/schema-generator/resolver-collector/resolver-collector.d.ts.map +1 -1
- package/dist/schema-generator/resolver-collector/resolver-collector.js +22 -0
- package/dist/schema-generator/resolver-collector/resolver-collector.js.map +1 -1
- package/dist/shared/enum-prefix-detector.d.ts +63 -0
- package/dist/shared/enum-prefix-detector.d.ts.map +1 -0
- package/dist/shared/enum-prefix-detector.js +80 -0
- package/dist/shared/enum-prefix-detector.js.map +1 -0
- package/dist/shared/ignore-fields-detector.d.ts +26 -0
- package/dist/shared/ignore-fields-detector.d.ts.map +1 -0
- package/dist/shared/ignore-fields-detector.js +83 -0
- package/dist/shared/ignore-fields-detector.js.map +1 -0
- package/dist/shared/ignore-fields-validator.d.ts +29 -0
- package/dist/shared/ignore-fields-validator.d.ts.map +1 -0
- package/dist/shared/ignore-fields-validator.js +43 -0
- package/dist/shared/ignore-fields-validator.js.map +1 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/source-location.d.ts +5 -0
- package/dist/shared/source-location.d.ts.map +1 -1
- package/dist/shared/source-location.js +7 -0
- package/dist/shared/source-location.js.map +1 -1
- package/dist/type-extractor/converter/graphql-converter.d.ts.map +1 -1
- package/dist/type-extractor/converter/graphql-converter.js +21 -7
- package/dist/type-extractor/converter/graphql-converter.js.map +1 -1
- package/dist/type-extractor/extractor/field-type-resolver.js +42 -3
- package/dist/type-extractor/extractor/field-type-resolver.js.map +1 -1
- package/dist/type-extractor/extractor/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor/extractor/type-extractor.js +88 -23
- package/dist/type-extractor/extractor/type-extractor.js.map +1 -1
- package/dist/type-extractor/types/diagnostics.d.ts +1 -1
- package/dist/type-extractor/types/diagnostics.d.ts.map +1 -1
- package/dist/type-extractor/types/ts-type-reference-factory.d.ts +10 -2
- package/dist/type-extractor/types/ts-type-reference-factory.d.ts.map +1 -1
- package/dist/type-extractor/types/ts-type-reference-factory.js +8 -2
- package/dist/type-extractor/types/ts-type-reference-factory.js.map +1 -1
- package/dist/type-extractor/types/typescript.d.ts +4 -0
- package/dist/type-extractor/types/typescript.d.ts.map +1 -1
- package/docs/coding-agents.md +64 -0
- package/docs/configuration.md +6 -20
- package/docs/getting-started.md +15 -12
- package/docs/index.md +36 -22
- package/docs/integration/apollo.md +8 -40
- package/docs/integration/drizzle.md +6 -10
- package/docs/integration/prisma.md +196 -0
- package/docs/integration/yoga.md +8 -40
- package/docs/schema/abstract-resolvers.md +117 -0
- package/docs/schema/directives.md +5 -0
- package/docs/schema/documentation.md +5 -0
- package/docs/schema/enums.md +99 -0
- package/docs/schema/fields.md +64 -0
- package/docs/schema/index.md +21 -0
- package/docs/schema/inputs.md +115 -15
- package/docs/schema/interfaces.md +31 -1
- package/docs/schema/objects.md +40 -0
- package/docs/schema/queries-mutations.md +136 -22
- package/docs/schema/scalars.md +5 -0
- package/docs/schema/unions.md +208 -1
- package/docs/what-is-gqlkit.md +13 -8
- package/package.json +6 -4
- package/src/auto-type-generator/auto-type-generator.ts +946 -201
- package/src/auto-type-generator/index.ts +42 -0
- package/src/auto-type-generator/inline-enum-collector.ts +187 -139
- package/src/auto-type-generator/inline-object-traverser.ts +49 -0
- package/src/auto-type-generator/inline-union-collector.ts +402 -0
- package/src/auto-type-generator/inline-union-types.ts +33 -0
- package/src/auto-type-generator/inline-union-validator.ts +482 -0
- package/src/auto-type-generator/naming-convention.ts +38 -1
- package/src/auto-type-generator/resolve-type-generator.ts +21 -0
- package/src/auto-type-generator/resolver-field-iterator.ts +39 -0
- package/src/auto-type-generator/typename-extractor.ts +230 -0
- package/src/auto-type-generator/typename-resolve-type-generator.ts +281 -0
- package/src/auto-type-generator/typename-types.ts +66 -0
- package/src/auto-type-generator/typename-validator.ts +326 -0
- package/src/cli.ts +2 -0
- package/src/commands/docs.ts +211 -0
- package/src/gen-orchestrator/orchestrator.ts +20 -6
- package/src/resolver-extractor/extract-resolvers.ts +19 -0
- package/src/resolver-extractor/extractor/define-api-extractor.ts +23 -89
- package/src/resolver-extractor/index.ts +0 -6
- package/src/resolver-extractor/validator/abstract-resolver-validator.ts +16 -8
- package/src/schema-generator/emitter/code-emitter.ts +34 -0
- package/src/schema-generator/generate-schema.ts +99 -2
- package/src/schema-generator/integrator/result-integrator.ts +70 -1
- package/src/schema-generator/resolver-collector/resolver-collector.ts +34 -0
- package/src/shared/enum-prefix-detector.ts +99 -0
- package/src/shared/ignore-fields-detector.ts +109 -0
- package/src/shared/ignore-fields-validator.ts +66 -0
- package/src/shared/index.ts +2 -0
- package/src/shared/source-location.ts +11 -0
- package/src/type-extractor/converter/graphql-converter.ts +31 -7
- package/src/type-extractor/extractor/field-type-resolver.ts +48 -3
- package/src/type-extractor/extractor/type-extractor.ts +103 -26
- package/src/type-extractor/types/diagnostics.ts +12 -2
- package/src/type-extractor/types/ts-type-reference-factory.ts +18 -5
- package/src/type-extractor/types/typescript.ts +4 -0
- package/dist/resolver-extractor/validator/only-validator.d.ts +0 -61
- package/dist/resolver-extractor/validator/only-validator.d.ts.map +0 -1
- package/dist/resolver-extractor/validator/only-validator.js +0 -76
- package/dist/resolver-extractor/validator/only-validator.js.map +0 -1
- package/src/resolver-extractor/validator/only-validator.ts +0 -158
|
@@ -7,6 +7,15 @@ export {
|
|
|
7
7
|
type GeneratedFromInfo,
|
|
8
8
|
generateAutoTypes,
|
|
9
9
|
} from "./auto-type-generator.js";
|
|
10
|
+
export type {
|
|
11
|
+
InlineUnionMemberInfo,
|
|
12
|
+
InlineUnionWithContext,
|
|
13
|
+
} from "./inline-union-types.js";
|
|
14
|
+
export type {
|
|
15
|
+
ValidateOneOfMembersParams,
|
|
16
|
+
ValidateUnionMembersParams,
|
|
17
|
+
ValidateUnionResult,
|
|
18
|
+
} from "./inline-union-validator.js";
|
|
10
19
|
export {
|
|
11
20
|
type NameCollisionValidatorInput,
|
|
12
21
|
type NameCollisionValidatorResult,
|
|
@@ -18,4 +27,37 @@ export type {
|
|
|
18
27
|
InputFieldContext,
|
|
19
28
|
ObjectFieldContext,
|
|
20
29
|
ResolverArgContext,
|
|
30
|
+
ResolverPayloadContext,
|
|
21
31
|
} from "./naming-convention.js";
|
|
32
|
+
export type {
|
|
33
|
+
AutoGeneratedResolveType,
|
|
34
|
+
ResolveTypeFieldPattern,
|
|
35
|
+
} from "./resolve-type-generator.js";
|
|
36
|
+
export {
|
|
37
|
+
type CollectTypenameExtractionsParams,
|
|
38
|
+
collectTypenameExtractions,
|
|
39
|
+
type ExtractTypenamesParams,
|
|
40
|
+
type MemberTypenameInfo,
|
|
41
|
+
type TypenameExtractionResult,
|
|
42
|
+
} from "./typename-extractor.js";
|
|
43
|
+
export {
|
|
44
|
+
type CollectTypenameResolveTypesParams,
|
|
45
|
+
type CollectTypenameResolveTypesResult,
|
|
46
|
+
collectTypenameResolveTypes,
|
|
47
|
+
type GeneratedInlineObjectType,
|
|
48
|
+
type ResolveTypePattern,
|
|
49
|
+
type TypenameAutoResolveTypeInfo,
|
|
50
|
+
} from "./typename-resolve-type-generator.js";
|
|
51
|
+
export type {
|
|
52
|
+
TypenameFieldInfo,
|
|
53
|
+
TypenameFieldName,
|
|
54
|
+
TypenameFieldNameSet,
|
|
55
|
+
} from "./typename-types.js";
|
|
56
|
+
export {
|
|
57
|
+
type ValidateSchemaTypenamesParams,
|
|
58
|
+
type ValidateSchemaTypenamesResult,
|
|
59
|
+
type ValidateTypenamesParams,
|
|
60
|
+
type ValidateTypenamesResult,
|
|
61
|
+
validateSchemaTypenames,
|
|
62
|
+
validateTypenames,
|
|
63
|
+
} from "./typename-validator.js";
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type ts from "typescript";
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
GraphQLFieldDefinition,
|
|
5
|
-
} from "../resolver-extractor/index.js";
|
|
2
|
+
import type { ExtractResolversResult } from "../resolver-extractor/index.js";
|
|
3
|
+
import { getSourceLocationOrDefault } from "../shared/source-location.js";
|
|
6
4
|
import type { DeprecationInfo } from "../shared/tsdoc-parser.js";
|
|
7
5
|
import type {
|
|
8
6
|
ExtractedTypeInfo,
|
|
@@ -11,10 +9,17 @@ import type {
|
|
|
11
9
|
InlineObjectPropertyDef,
|
|
12
10
|
SourceLocation,
|
|
13
11
|
} from "../type-extractor/types/index.js";
|
|
12
|
+
import { traverseInlineObjectProperties } from "./inline-object-traverser.js";
|
|
14
13
|
import {
|
|
15
14
|
type AutoTypeNameContext,
|
|
16
15
|
buildFieldContext,
|
|
16
|
+
isInputTypeName,
|
|
17
17
|
} from "./naming-convention.js";
|
|
18
|
+
import {
|
|
19
|
+
forEachResolverField,
|
|
20
|
+
type ResolverFieldInfo,
|
|
21
|
+
type ResolverType,
|
|
22
|
+
} from "./resolver-field-iterator.js";
|
|
18
23
|
|
|
19
24
|
/**
|
|
20
25
|
* Inline enum with context information for naming and generation.
|
|
@@ -32,13 +37,8 @@ export interface InlineEnumWithContext {
|
|
|
32
37
|
readonly externalEnumDeprecated: DeprecationInfo | null;
|
|
33
38
|
}
|
|
34
39
|
|
|
35
|
-
function isInputTypeName(name: string): boolean {
|
|
36
|
-
return name.endsWith("Input");
|
|
37
|
-
}
|
|
38
|
-
|
|
39
40
|
/**
|
|
40
|
-
* Collect inline enums from ExtractedTypeInfo.
|
|
41
|
-
* Task 4.1: Traverse type fields to find inline enums with context.
|
|
41
|
+
* Collect inline enums from ExtractedTypeInfo by traversing type fields.
|
|
42
42
|
*/
|
|
43
43
|
export function collectInlineEnumsFromTypes(
|
|
44
44
|
extractedTypes: ReadonlyArray<ExtractedTypeInfo>,
|
|
@@ -78,11 +78,10 @@ function collectInlineEnumsFromField(
|
|
|
78
78
|
results.push({
|
|
79
79
|
members: tsType.inlineEnumMembers,
|
|
80
80
|
context: buildFieldContext(parentTypeName, fieldPath, isInput),
|
|
81
|
-
sourceLocation:
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
},
|
|
81
|
+
sourceLocation: getSourceLocationOrDefault(
|
|
82
|
+
field.sourceLocation,
|
|
83
|
+
sourceFile,
|
|
84
|
+
),
|
|
86
85
|
nullable: tsType.nullable,
|
|
87
86
|
externalEnumSymbol: tsType.externalEnumSymbol,
|
|
88
87
|
externalEnumDescription: tsType.externalEnumDescription,
|
|
@@ -98,11 +97,10 @@ function collectInlineEnumsFromField(
|
|
|
98
97
|
results.push({
|
|
99
98
|
members: tsType.elementType.inlineEnumMembers,
|
|
100
99
|
context: buildFieldContext(parentTypeName, fieldPath, isInput),
|
|
101
|
-
sourceLocation:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
},
|
|
100
|
+
sourceLocation: getSourceLocationOrDefault(
|
|
101
|
+
field.sourceLocation,
|
|
102
|
+
sourceFile,
|
|
103
|
+
),
|
|
106
104
|
nullable: tsType.elementType.nullable,
|
|
107
105
|
externalEnumSymbol: tsType.elementType.externalEnumSymbol,
|
|
108
106
|
externalEnumDescription: tsType.elementType.externalEnumDescription,
|
|
@@ -111,95 +109,54 @@ function collectInlineEnumsFromField(
|
|
|
111
109
|
}
|
|
112
110
|
|
|
113
111
|
if (tsType.kind === "inlineObject" && tsType.inlineObjectProperties) {
|
|
114
|
-
|
|
115
|
-
tsType.inlineObjectProperties,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
112
|
+
traverseInlineObjectProperties(
|
|
113
|
+
{ properties: tsType.inlineObjectProperties, parentPath: fieldPath },
|
|
114
|
+
(prop, propPath) => {
|
|
115
|
+
const propTsType = prop.tsType;
|
|
116
|
+
if (propTsType.kind === "inlineEnum" && propTsType.inlineEnumMembers) {
|
|
117
|
+
results.push({
|
|
118
|
+
members: propTsType.inlineEnumMembers,
|
|
119
|
+
context: buildFieldContext(parentTypeName, propPath, isInput),
|
|
120
|
+
sourceLocation: getSourceLocationOrDefault(
|
|
121
|
+
prop.sourceLocation,
|
|
122
|
+
sourceFile,
|
|
123
|
+
),
|
|
124
|
+
nullable: propTsType.nullable,
|
|
125
|
+
externalEnumSymbol: propTsType.externalEnumSymbol,
|
|
126
|
+
externalEnumDescription: propTsType.externalEnumDescription,
|
|
127
|
+
externalEnumDeprecated: propTsType.externalEnumDeprecated,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
},
|
|
121
131
|
);
|
|
122
132
|
}
|
|
123
133
|
}
|
|
124
134
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
parentTypeName: string,
|
|
128
|
-
parentPath: ReadonlyArray<string>,
|
|
129
|
-
isInput: boolean,
|
|
130
|
-
sourceFile: string,
|
|
131
|
-
results: InlineEnumWithContext[],
|
|
132
|
-
): void {
|
|
133
|
-
for (const prop of properties) {
|
|
134
|
-
const propPath = [...parentPath, prop.name];
|
|
135
|
-
const tsType = prop.tsType;
|
|
136
|
-
|
|
137
|
-
if (tsType.kind === "inlineEnum" && tsType.inlineEnumMembers) {
|
|
138
|
-
results.push({
|
|
139
|
-
members: tsType.inlineEnumMembers,
|
|
140
|
-
context: buildFieldContext(parentTypeName, propPath, isInput),
|
|
141
|
-
sourceLocation: prop.sourceLocation ?? {
|
|
142
|
-
file: sourceFile,
|
|
143
|
-
line: 1,
|
|
144
|
-
column: 1,
|
|
145
|
-
},
|
|
146
|
-
nullable: tsType.nullable,
|
|
147
|
-
externalEnumSymbol: tsType.externalEnumSymbol,
|
|
148
|
-
externalEnumDescription: tsType.externalEnumDescription,
|
|
149
|
-
externalEnumDeprecated: tsType.externalEnumDeprecated,
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
if (tsType.kind === "inlineObject" && tsType.inlineObjectProperties) {
|
|
154
|
-
collectInlineEnumsFromInlineObjectProperties(
|
|
155
|
-
tsType.inlineObjectProperties,
|
|
156
|
-
parentTypeName,
|
|
157
|
-
propPath,
|
|
158
|
-
isInput,
|
|
159
|
-
sourceFile,
|
|
160
|
-
results,
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
135
|
+
export interface CollectInlineEnumsFromResolversParams {
|
|
136
|
+
readonly resolversResult: ExtractResolversResult;
|
|
164
137
|
}
|
|
165
138
|
|
|
166
139
|
/**
|
|
167
|
-
* Collect inline enums from ExtractResolversResult.
|
|
168
|
-
* Task 4.2: Traverse resolver args to find inline enums with context.
|
|
140
|
+
* Collect inline enums from ExtractResolversResult by traversing resolver args.
|
|
169
141
|
*/
|
|
170
142
|
export function collectInlineEnumsFromResolvers(
|
|
171
|
-
|
|
143
|
+
params: CollectInlineEnumsFromResolversParams,
|
|
172
144
|
): InlineEnumWithContext[] {
|
|
145
|
+
const { resolversResult } = params;
|
|
173
146
|
const results: InlineEnumWithContext[] = [];
|
|
174
147
|
|
|
175
|
-
|
|
176
|
-
collectInlineEnumsFromResolverArgs(
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
for (const field of resolversResult.mutationFields.fields) {
|
|
180
|
-
collectInlineEnumsFromResolverArgs(field, "mutation", null, results);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
for (const ext of resolversResult.typeExtensions) {
|
|
184
|
-
for (const field of ext.fields) {
|
|
185
|
-
collectInlineEnumsFromResolverArgs(
|
|
186
|
-
field,
|
|
187
|
-
"field",
|
|
188
|
-
ext.targetTypeName,
|
|
189
|
-
results,
|
|
190
|
-
);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
148
|
+
forEachResolverField(resolversResult, (info) => {
|
|
149
|
+
collectInlineEnumsFromResolverArgs(info, results);
|
|
150
|
+
});
|
|
193
151
|
|
|
194
152
|
return results;
|
|
195
153
|
}
|
|
196
154
|
|
|
197
155
|
function collectInlineEnumsFromResolverArgs(
|
|
198
|
-
|
|
199
|
-
resolverType: "query" | "mutation" | "field",
|
|
200
|
-
parentTypeName: string | null,
|
|
156
|
+
info: ResolverFieldInfo,
|
|
201
157
|
results: InlineEnumWithContext[],
|
|
202
158
|
): void {
|
|
159
|
+
const { field, resolverType, parentTypeName } = info;
|
|
203
160
|
if (!field.args) return;
|
|
204
161
|
|
|
205
162
|
for (const arg of field.args) {
|
|
@@ -225,66 +182,157 @@ function collectInlineEnumsFromResolverArgs(
|
|
|
225
182
|
}
|
|
226
183
|
|
|
227
184
|
if (arg.inlineObjectProperties) {
|
|
228
|
-
|
|
229
|
-
arg.inlineObjectProperties,
|
|
185
|
+
collectInlineEnumsFromResolverProperties({
|
|
186
|
+
properties: arg.inlineObjectProperties,
|
|
230
187
|
resolverType,
|
|
231
|
-
field.name,
|
|
232
|
-
arg.name,
|
|
188
|
+
fieldName: field.name,
|
|
233
189
|
parentTypeName,
|
|
234
|
-
[],
|
|
235
|
-
field.sourceLocation,
|
|
190
|
+
parentPath: [],
|
|
191
|
+
sourceLocation: field.sourceLocation,
|
|
192
|
+
contextKind: "resolverArg",
|
|
193
|
+
argName: arg.name,
|
|
236
194
|
results,
|
|
237
|
-
);
|
|
195
|
+
});
|
|
238
196
|
}
|
|
239
197
|
}
|
|
240
198
|
}
|
|
241
199
|
|
|
242
|
-
|
|
243
|
-
properties: ReadonlyArray<InlineObjectPropertyDef
|
|
244
|
-
resolverType:
|
|
245
|
-
fieldName: string
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
200
|
+
interface CollectInlineEnumsFromResolverPropertiesBaseParams {
|
|
201
|
+
readonly properties: ReadonlyArray<InlineObjectPropertyDef>;
|
|
202
|
+
readonly resolverType: ResolverType;
|
|
203
|
+
readonly fieldName: string;
|
|
204
|
+
readonly parentTypeName: string | null;
|
|
205
|
+
readonly parentPath: ReadonlyArray<string>;
|
|
206
|
+
readonly sourceLocation: SourceLocation;
|
|
207
|
+
readonly results: InlineEnumWithContext[];
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
interface CollectInlineEnumsFromResolverArgPropertiesParams
|
|
211
|
+
extends CollectInlineEnumsFromResolverPropertiesBaseParams {
|
|
212
|
+
readonly contextKind: "resolverArg";
|
|
213
|
+
readonly argName: string;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
interface CollectInlineEnumsFromResolverPayloadPropertiesParams
|
|
217
|
+
extends CollectInlineEnumsFromResolverPropertiesBaseParams {
|
|
218
|
+
readonly contextKind: "resolverPayload";
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
type CollectInlineEnumsFromResolverPropertiesParams =
|
|
222
|
+
| CollectInlineEnumsFromResolverArgPropertiesParams
|
|
223
|
+
| CollectInlineEnumsFromResolverPayloadPropertiesParams;
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Unified function for collecting inline enums from nested object properties
|
|
227
|
+
* in both resolver args and payload return types.
|
|
228
|
+
*/
|
|
229
|
+
function collectInlineEnumsFromResolverProperties(
|
|
230
|
+
params: CollectInlineEnumsFromResolverPropertiesParams,
|
|
231
|
+
): void {
|
|
232
|
+
const {
|
|
233
|
+
properties,
|
|
234
|
+
resolverType,
|
|
235
|
+
fieldName,
|
|
236
|
+
parentTypeName,
|
|
237
|
+
parentPath,
|
|
238
|
+
sourceLocation,
|
|
239
|
+
results,
|
|
240
|
+
} = params;
|
|
241
|
+
|
|
242
|
+
traverseInlineObjectProperties(
|
|
243
|
+
{ properties, parentPath },
|
|
244
|
+
(prop, propPath) => {
|
|
245
|
+
const tsType = prop.tsType;
|
|
246
|
+
|
|
247
|
+
if (tsType.kind === "inlineEnum" && tsType.inlineEnumMembers) {
|
|
248
|
+
const context: AutoTypeNameContext =
|
|
249
|
+
params.contextKind === "resolverArg"
|
|
250
|
+
? {
|
|
251
|
+
kind: "resolverArg",
|
|
252
|
+
resolverType,
|
|
253
|
+
fieldName,
|
|
254
|
+
argName: params.argName,
|
|
255
|
+
parentTypeName,
|
|
256
|
+
fieldPath: propPath,
|
|
257
|
+
}
|
|
258
|
+
: {
|
|
259
|
+
kind: "resolverPayload",
|
|
260
|
+
resolverType,
|
|
261
|
+
fieldName,
|
|
262
|
+
parentTypeName,
|
|
263
|
+
fieldPath: propPath,
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
results.push({
|
|
267
|
+
members: tsType.inlineEnumMembers,
|
|
268
|
+
context,
|
|
269
|
+
sourceLocation: prop.sourceLocation ?? sourceLocation,
|
|
270
|
+
nullable: tsType.nullable,
|
|
271
|
+
externalEnumSymbol: tsType.externalEnumSymbol,
|
|
272
|
+
externalEnumDescription: tsType.externalEnumDescription,
|
|
273
|
+
externalEnumDeprecated: tsType.externalEnumDeprecated,
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export interface CollectInlineEnumsFromPayloadsParams {
|
|
281
|
+
readonly resolversResult: ExtractResolversResult;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Collect inline enums from resolver return types (Payload types).
|
|
286
|
+
*/
|
|
287
|
+
export function collectInlineEnumsFromPayloads(
|
|
288
|
+
params: CollectInlineEnumsFromPayloadsParams,
|
|
289
|
+
): InlineEnumWithContext[] {
|
|
290
|
+
const { resolversResult } = params;
|
|
291
|
+
const results: InlineEnumWithContext[] = [];
|
|
292
|
+
|
|
293
|
+
forEachResolverField(resolversResult, (info) => {
|
|
294
|
+
collectInlineEnumsFromPayloadReturnType(info, results);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
return results;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
function collectInlineEnumsFromPayloadReturnType(
|
|
301
|
+
info: ResolverFieldInfo,
|
|
250
302
|
results: InlineEnumWithContext[],
|
|
251
303
|
): void {
|
|
252
|
-
|
|
253
|
-
const propPath = [...parentPath, prop.name];
|
|
254
|
-
const tsType = prop.tsType;
|
|
304
|
+
const { field, resolverType, parentTypeName } = info;
|
|
255
305
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
};
|
|
306
|
+
if (field.returnTypeInlineEnumMembers) {
|
|
307
|
+
const context: AutoTypeNameContext = {
|
|
308
|
+
kind: "resolverPayload",
|
|
309
|
+
resolverType,
|
|
310
|
+
fieldName: field.name,
|
|
311
|
+
parentTypeName,
|
|
312
|
+
fieldPath: [],
|
|
313
|
+
};
|
|
265
314
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
315
|
+
results.push({
|
|
316
|
+
members: field.returnTypeInlineEnumMembers,
|
|
317
|
+
context,
|
|
318
|
+
sourceLocation: field.sourceLocation,
|
|
319
|
+
nullable: field.type.nullable,
|
|
320
|
+
externalEnumSymbol: field.returnTypeExternalEnumSymbol,
|
|
321
|
+
externalEnumDescription: field.returnTypeExternalEnumDescription,
|
|
322
|
+
externalEnumDeprecated: field.returnTypeExternalEnumDeprecated,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
276
325
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
}
|
|
326
|
+
if (field.returnTypeInlineObjectProperties) {
|
|
327
|
+
collectInlineEnumsFromResolverProperties({
|
|
328
|
+
properties: field.returnTypeInlineObjectProperties,
|
|
329
|
+
resolverType,
|
|
330
|
+
fieldName: field.name,
|
|
331
|
+
parentTypeName,
|
|
332
|
+
parentPath: [],
|
|
333
|
+
sourceLocation: field.sourceLocation,
|
|
334
|
+
contextKind: "resolverPayload",
|
|
335
|
+
results,
|
|
336
|
+
});
|
|
289
337
|
}
|
|
290
338
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { InlineObjectPropertyDef } from "../type-extractor/types/index.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Visitor callback for each property in an inline object hierarchy.
|
|
5
|
+
* @param prop The property being visited
|
|
6
|
+
* @param propPath Full path from the root to this property (including the property name)
|
|
7
|
+
*/
|
|
8
|
+
export type PropertyVisitor = (
|
|
9
|
+
prop: InlineObjectPropertyDef,
|
|
10
|
+
propPath: ReadonlyArray<string>,
|
|
11
|
+
) => void;
|
|
12
|
+
|
|
13
|
+
export interface TraverseInlineObjectPropertiesParams {
|
|
14
|
+
readonly properties: ReadonlyArray<InlineObjectPropertyDef>;
|
|
15
|
+
readonly parentPath: ReadonlyArray<string>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Traverses inline object properties recursively, calling the visitor for each property.
|
|
20
|
+
* Handles nested inlineObject properties automatically.
|
|
21
|
+
*
|
|
22
|
+
* This utility eliminates the duplicated traversal logic in inline-enum-collector
|
|
23
|
+
* and inline-union-collector.
|
|
24
|
+
*/
|
|
25
|
+
export function traverseInlineObjectProperties(
|
|
26
|
+
params: TraverseInlineObjectPropertiesParams,
|
|
27
|
+
visitor: PropertyVisitor,
|
|
28
|
+
): void {
|
|
29
|
+
const { properties, parentPath } = params;
|
|
30
|
+
|
|
31
|
+
for (const prop of properties) {
|
|
32
|
+
const propPath = [...parentPath, prop.name];
|
|
33
|
+
|
|
34
|
+
visitor(prop, propPath);
|
|
35
|
+
|
|
36
|
+
if (
|
|
37
|
+
prop.tsType.kind === "inlineObject" &&
|
|
38
|
+
prop.tsType.inlineObjectProperties
|
|
39
|
+
) {
|
|
40
|
+
traverseInlineObjectProperties(
|
|
41
|
+
{
|
|
42
|
+
properties: prop.tsType.inlineObjectProperties,
|
|
43
|
+
parentPath: propPath,
|
|
44
|
+
},
|
|
45
|
+
visitor,
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|