Skip to content

Commit 5044126

Browse files
committed
Use Scalars input/output in base types and document types
1 parent 436a554 commit 5044126

File tree

13 files changed

+712
-580
lines changed

13 files changed

+712
-580
lines changed

packages/graphql-codegen-cli/tests/codegen.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ describe('Codegen Executor', () => {
218218

219219
expect(output.length).toBe(1);
220220
expect(output[0].filename).toBe('out.ts');
221-
expect(output[0].content).toContain(`hello?: Maybe<Scalars['String']>`);
221+
expect(output[0].content).toContain(`hello?: Maybe<Scalars['String']['output']>`);
222222
});
223223
});
224224

packages/plugins/other/visitor-plugin-common/src/base-types-visitor.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,7 @@ export class BaseTypesVisitor<
689689
if (this.config.onlyOperationTypes || this.config.onlyEnums) return '';
690690
const originalNode = parent[key] as UnionTypeDefinitionNode;
691691
const possibleTypes = originalNode.types
692-
.map(t => (this.scalars[t.name.value] ? this._getScalar(t.name.value) : this.convertName(t)))
692+
.map(t => (this.scalars[t.name.value] ? this._getScalar(t.name.value, 'output') : this.convertName(t)))
693693
.join(' | ');
694694

695695
return new DeclarationBlock(this._declarationBlockConfig)
@@ -957,8 +957,8 @@ export class BaseTypesVisitor<
957957
.join('\n\n');
958958
}
959959

960-
protected _getScalar(name: string): string {
961-
return `Scalars['${name}']`;
960+
protected _getScalar(name: string, type: 'input' | 'output'): string {
961+
return `Scalars['${name}']['${type}']`;
962962
}
963963

964964
protected _getDirectiveArgumentNadInputFieldMapping(name: string): string {
@@ -980,11 +980,11 @@ export class BaseTypesVisitor<
980980
return type || null;
981981
}
982982

983-
protected _getTypeForNode(node: NamedTypeNode): string {
983+
protected _getTypeForNode(node: NamedTypeNode, isVisitingInputType: boolean): string {
984984
const typeAsString = node.name as any as string;
985985

986986
if (this.scalars[typeAsString]) {
987-
return this._getScalar(typeAsString);
987+
return this._getScalar(typeAsString, isVisitingInputType ? 'input' : 'output');
988988
}
989989
if (this.config.enumValues[typeAsString]) {
990990
return this.config.enumValues[typeAsString].typeIdentifier;
@@ -1002,7 +1002,7 @@ export class BaseTypesVisitor<
10021002
NamedType(node: NamedTypeNode, key, parent, path, ancestors): string {
10031003
const currentVisitContext = this.getVisitorKindContextFromAncestors(ancestors);
10041004
const isVisitingInputType = currentVisitContext.includes(Kind.INPUT_OBJECT_TYPE_DEFINITION);
1005-
const typeToUse = this._getTypeForNode(node);
1005+
const typeToUse = this._getTypeForNode(node, isVisitingInputType);
10061006

10071007
if (!isVisitingInputType && this.config.fieldWrapperValue && this.config.wrapFieldDefinitions) {
10081008
return `FieldWrapper<${typeToUse}>`;

packages/plugins/other/visitor-plugin-common/src/selection-set-processor/pre-resolve-types.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ export class PreResolveTypesProcessor extends BaseSelectionSetProcessor<Selectio
5656
(this.config.namespacedImportName ? `${this.config.namespacedImportName}.` : '') +
5757
this.config.convertName(baseType.name, { useTypesPrefix: this.config.enumPrefix });
5858
} else if (this.config.scalars[baseType.name]) {
59-
// TODO: eddeee888 check if this is correct
6059
typeToUse = this.config.scalars[baseType.name].output;
6160
}
6261

@@ -88,7 +87,6 @@ export class PreResolveTypesProcessor extends BaseSelectionSetProcessor<Selectio
8887
}
8988
const fieldObj = schemaType.getFields()[aliasedField.fieldName];
9089
const baseType = getBaseType(fieldObj.type);
91-
// TODO: eddeee888 check if this is correct
9290
let typeToUse = this.config.scalars[baseType.name]?.output || baseType.name;
9391

9492
if (isEnumType(baseType)) {

packages/plugins/other/visitor-plugin-common/src/variables-to-object.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export class OperationVariablesToObject {
6060
protected getScalar(name: string): string {
6161
const prefix = this._namespacedImportName ? `${this._namespacedImportName}.` : '';
6262

63-
return `${prefix}Scalars['${name}']`;
63+
return `${prefix}Scalars['${name}']['input']`;
6464
}
6565

6666
protected getDirectiveMapping(name: string): string {

packages/plugins/typescript/operations/tests/__snapshots__/ts-documents.spec.ts.snap

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ exports[`TypeScript Operations Plugin Config should include fragment variable de
55
66
77
export type TextNotificationFragmentFragmentVariables = Exact<{
8-
skip: Scalars['Boolean'];
8+
skip: Scalars['Boolean']['input'];
99
}>;
1010
"
1111
`;
1212

1313
exports[`TypeScript Operations Plugin Issues #2699 - Issues with multiple interfaces and unions 1`] = `
1414
"export type GetEntityBrandDataQueryVariables = Exact<{
15-
gid: Scalars['ID'];
16-
brand: Scalars['ID'];
15+
gid: Scalars['ID']['input'];
16+
brand: Scalars['ID']['input'];
1717
}>;
1818
1919
@@ -81,32 +81,32 @@ export type Scalars = {
8181
};
8282
8383
export type Venue = {
84-
id: Scalars['String'];
85-
name: Scalars['String'];
84+
id: Scalars['String']['output'];
85+
name: Scalars['String']['output'];
8686
};
8787
8888
export type GpsPosition = {
8989
__typename?: 'GPSPosition';
90-
lat: Scalars['Float'];
91-
lng: Scalars['Float'];
90+
lat: Scalars['Float']['output'];
91+
lng: Scalars['Float']['output'];
9292
};
9393
9494
export type VenueWithPosition = {
95-
id: Scalars['String'];
95+
id: Scalars['String']['output'];
9696
gpsPosition: GpsPosition;
9797
};
9898
9999
export type Hotel = VenueWithPosition & Venue & {
100100
__typename?: 'Hotel';
101-
id: Scalars['String'];
101+
id: Scalars['String']['output'];
102102
gpsPosition: GpsPosition;
103-
name: Scalars['String'];
103+
name: Scalars['String']['output'];
104104
};
105105
106106
export type Transport = Venue & {
107107
__typename?: 'Transport';
108-
id: Scalars['String'];
109-
name: Scalars['String'];
108+
id: Scalars['String']['output'];
109+
name: Scalars['String']['output'];
110110
};
111111
112112
export type Query = {
@@ -377,18 +377,18 @@ export type Query = {
377377
};
378378
379379
export type Concept = {
380-
id?: Maybe<Scalars['String']>;
380+
id?: Maybe<Scalars['String']['output']>;
381381
};
382382
383383
export type Dimension = Concept & {
384384
__typename?: 'Dimension';
385-
id?: Maybe<Scalars['String']>;
385+
id?: Maybe<Scalars['String']['output']>;
386386
};
387387
388388
export type DimValue = {
389389
__typename?: 'DimValue';
390390
dimension?: Maybe<Dimension>;
391-
value: Scalars['String'];
391+
value: Scalars['String']['output'];
392392
};
393393
394394
export type Searchable = Dimension | DimValue;
@@ -490,35 +490,35 @@ export type Scalars = {
490490
};
491491
492492
export type Error = {
493-
message: Scalars['String'];
493+
message: Scalars['String']['output'];
494494
};
495495
496496
export type Error1 = Error & {
497497
__typename?: 'Error1';
498-
message: Scalars['String'];
498+
message: Scalars['String']['output'];
499499
};
500500
501501
export type Error2 = Error & {
502502
__typename?: 'Error2';
503-
message: Scalars['String'];
503+
message: Scalars['String']['output'];
504504
};
505505
506506
export type Error3 = Error & {
507507
__typename?: 'Error3';
508-
message: Scalars['String'];
508+
message: Scalars['String']['output'];
509509
info?: Maybe<AdditionalInfo>;
510510
};
511511
512512
export type AdditionalInfo = {
513513
__typename?: 'AdditionalInfo';
514-
message: Scalars['String'];
515-
message2: Scalars['String'];
514+
message: Scalars['String']['output'];
515+
message2: Scalars['String']['output'];
516516
};
517517
518518
export type User = {
519519
__typename?: 'User';
520-
id: Scalars['ID'];
521-
login: Scalars['String'];
520+
id: Scalars['ID']['output'];
521+
login: Scalars['String']['output'];
522522
};
523523
524524
export type UserResult = User | Error2 | Error3;
@@ -585,37 +585,37 @@ export type Scalars = {
585585
};
586586
587587
export type Error = {
588-
message: Scalars['String'];
588+
message: Scalars['String']['output'];
589589
};
590590
591591
export type Error1 = Error & {
592592
__typename?: 'Error1';
593-
message: Scalars['String'];
593+
message: Scalars['String']['output'];
594594
};
595595
596596
export type Error2 = Error & {
597597
__typename?: 'Error2';
598-
message: Scalars['String'];
598+
message: Scalars['String']['output'];
599599
};
600600
601601
export type Error3 = Error & {
602602
__typename?: 'Error3';
603-
message: Scalars['String'];
603+
message: Scalars['String']['output'];
604604
info?: Maybe<AdditionalInfo>;
605605
};
606606
607607
export type AdditionalInfo = {
608608
__typename?: 'AdditionalInfo';
609-
message: Scalars['String'];
610-
message2: Scalars['String'];
609+
message: Scalars['String']['output'];
610+
message2: Scalars['String']['output'];
611611
};
612612
613613
export type User = {
614614
__typename?: 'User';
615-
id: Scalars['ID'];
616-
login: Scalars['String'];
617-
test?: Maybe<Scalars['String']>;
618-
test2?: Maybe<Scalars['String']>;
615+
id: Scalars['ID']['output'];
616+
login: Scalars['String']['output'];
617+
test?: Maybe<Scalars['String']['output']>;
618+
test2?: Maybe<Scalars['String']['output']>;
619619
};
620620
621621
export type UserResult = User | Error2 | Error3;

packages/plugins/typescript/operations/tests/ts-documents.spec.ts

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2508,7 +2508,7 @@ describe('TypeScript Operations Plugin', () => {
25082508

25092509
expect(content).toBeSimilarStringTo(
25102510
`export type MeQueryVariables = Exact<{
2511-
repoFullName: Scalars['String'];
2511+
repoFullName: Scalars['String']['input'];
25122512
}>;`
25132513
);
25142514
expect(content).toBeSimilarStringTo(`
@@ -2823,14 +2823,14 @@ describe('TypeScript Operations Plugin', () => {
28232823

28242824
expect(content).toBeSimilarStringTo(
28252825
`export type TestQueryQueryVariables = Exact<{
2826-
username?: InputMaybe<Scalars['String']>;
2827-
email?: InputMaybe<Scalars['String']>;
2828-
password: Scalars['String'];
2826+
username?: InputMaybe<Scalars['String']['input']>;
2827+
email?: InputMaybe<Scalars['String']['input']>;
2828+
password: Scalars['String']['input'];
28292829
input?: InputMaybe<InputType>;
28302830
mandatoryInput: InputType;
2831-
testArray?: InputMaybe<Array<InputMaybe<Scalars['String']>> | InputMaybe<Scalars['String']>>;
2832-
requireString: Array<InputMaybe<Scalars['String']>> | InputMaybe<Scalars['String']>;
2833-
innerRequired: Array<Scalars['String']> | Scalars['String'];
2831+
testArray?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>> | InputMaybe<Scalars['String']['input']>>;
2832+
requireString: Array<InputMaybe<Scalars['String']['input']>> | InputMaybe<Scalars['String']['input']>;
2833+
innerRequired: Array<Scalars['String']['input']> | Scalars['String']['input'];
28342834
}>;`
28352835
);
28362836
await validate(content, config, schema);
@@ -2849,7 +2849,7 @@ describe('TypeScript Operations Plugin', () => {
28492849

28502850
expect(content).toBeSimilarStringTo(
28512851
`export type TestQueryQueryVariables = Exact<{
2852-
test?: InputMaybe<Scalars['DateTime']>;
2852+
test?: InputMaybe<Scalars['DateTime']['input']>;
28532853
}>;`
28542854
);
28552855
await validate(content, config);
@@ -3203,7 +3203,7 @@ describe('TypeScript Operations Plugin', () => {
32033203

32043204
expect(content).toBeSimilarStringTo(`
32053205
export type UsersQueryVariables = Exact<{
3206-
reverse?: InputMaybe<Scalars['Boolean']>;
3206+
reverse?: InputMaybe<Scalars['Boolean']['input']>;
32073207
}>;
32083208
`);
32093209
});
@@ -4066,18 +4066,18 @@ describe('TypeScript Operations Plugin', () => {
40664066
};
40674067
40684068
export type Concept = {
4069-
id?: Maybe<Scalars['String']>;
4069+
id?: Maybe<Scalars['String']['output']>;
40704070
};
40714071
40724072
export type Dimension = Concept & {
40734073
__typename?: 'Dimension';
4074-
id?: Maybe<Scalars['String']>;
4074+
id?: Maybe<Scalars['String']['output']>;
40754075
};
40764076
40774077
export type DimValue = {
40784078
__typename?: 'DimValue';
40794079
dimension?: Maybe<Dimension>;
4080-
value: Scalars['String'];
4080+
value: Scalars['String']['output'];
40814081
};
40824082
40834083
export type Searchable = Dimension | DimValue;
@@ -4177,7 +4177,7 @@ describe('TypeScript Operations Plugin', () => {
41774177
41784178
export type Dimension = {
41794179
__typename?: 'Dimension';
4180-
id?: Maybe<Scalars['String']>;
4180+
id?: Maybe<Scalars['String']['output']>;
41814181
};
41824182
export type SearchableFragmentFragment = { __typename?: 'Dimension', id?: string | null };
41834183
@@ -4265,7 +4265,7 @@ describe('TypeScript Operations Plugin', () => {
42654265
42664266
export type Dimension = {
42674267
__typename?: 'Dimension';
4268-
id?: Maybe<Scalars['String']>;
4268+
id?: Maybe<Scalars['String']['output']>;
42694269
};
42704270
42714271
export type SearchPopularQueryVariables = Exact<{ [key: string]: never; }>;
@@ -5465,9 +5465,9 @@ function test(q: GetEntityBrandDataQuery): void {
54655465

54665466
expect(content).toBeSimilarStringTo(`
54675467
export type UserQueryVariables = Exact<{
5468-
testArray?: InputMaybe<Array<InputMaybe<Scalars['String']>> | InputMaybe<Scalars['String']>>;
5469-
requireString: Array<InputMaybe<Scalars['String']>> | InputMaybe<Scalars['String']>;
5470-
innerRequired: Array<Scalars['String']> | Scalars['String'];
5468+
testArray?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>> | InputMaybe<Scalars['String']['input']>>;
5469+
requireString: Array<InputMaybe<Scalars['String']['input']>> | InputMaybe<Scalars['String']['input']>;
5470+
innerRequired: Array<Scalars['String']['input']> | Scalars['String']['input'];
54715471
}>;`);
54725472
await validate(content, config);
54735473
});
@@ -5497,9 +5497,9 @@ function test(q: GetEntityBrandDataQuery): void {
54975497

54985498
expect(content).toBeSimilarStringTo(`
54995499
export type UserQueryVariables = Exact<{
5500-
testArray?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;
5501-
requireString: Array<InputMaybe<Scalars['String']>>;
5502-
innerRequired: Array<Scalars['String']>;
5500+
testArray?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
5501+
requireString: Array<InputMaybe<Scalars['String']['input']>>;
5502+
innerRequired: Array<Scalars['String']['input']>;
55035503
}>;`);
55045504
await validate(content, config);
55055505
});
@@ -6040,7 +6040,7 @@ function test(q: GetEntityBrandDataQuery): void {
60406040

60416041
expect(content).toBeSimilarStringTo(`
60426042
export type UserQueryVariables = Exact<{
6043-
showAddress: Scalars['Boolean'];
6043+
showAddress: Scalars['Boolean']['input'];
60446044
}>;
60456045
60466046
export type UserQuery = { __typename?: 'Query', user: { __typename?: 'User', name: string, address?: string, nicknames?: Array<string> | null, parents?: Array<User> } };`);
@@ -6093,8 +6093,8 @@ function test(q: GetEntityBrandDataQuery): void {
60936093

60946094
expect(content).toBeSimilarStringTo(`
60956095
export type UserQueryVariables = Exact<{
6096-
showAddress: Scalars['Boolean'];
6097-
showName: Scalars['Boolean'];
6096+
showAddress: Scalars['Boolean']['input'];
6097+
showName: Scalars['Boolean']['input'];
60986098
}>;
60996099
export type UserQuery = { __typename?: 'Query', user: { __typename?: 'User', id: string, name?: string, address?: { __typename?: 'Address', city: string }, friends?: Array<{ __typename?: 'User', id: string }> } };`);
61006100
});
@@ -6141,8 +6141,8 @@ function test(q: GetEntityBrandDataQuery): void {
61416141

61426142
expect(content).toBeSimilarStringTo(`
61436143
export type UserQueryVariables = Exact<{
6144-
showAddress: Scalars['Boolean'];
6145-
showName: Scalars['Boolean'];
6144+
showAddress: Scalars['Boolean']['input'];
6145+
showName: Scalars['Boolean']['input'];
61466146
}>;
61476147
61486148
export type UserQuery = (

0 commit comments

Comments
 (0)