Skip to content

Commit f763085

Browse files
authored
fix: stop pascal casing enums for MIS (#931)
1 parent b8df7e6 commit f763085

11 files changed

+81
-22
lines changed

.eslintrc.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ module.exports = {
257257
'__mocks__',
258258
'__e2e__',
259259
'coverage',
260-
260+
261261
// Ignore project/file templates
262262
'function-template-dir',
263263

@@ -271,6 +271,8 @@ module.exports = {
271271
'test-apps',
272272

273273
// Ignore lint for standalone JSON validation function
274-
'/packages/appsync-modelgen-plugin/src/validate-cjs.js'
274+
'/packages/appsync-modelgen-plugin/src/validate-cjs.js',
275+
276+
'.eslintrc.js'
275277
]
276278
};

packages/appsync-modelgen-plugin/src/__tests__/visitors/__snapshots__/appsync-model-introspection-visitor.test.ts.snap

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2971,6 +2971,13 @@ exports[`Model Introspection Visitor Metadata snapshot should generate correct m
29712971
\\"enumVal1\\",
29722972
\\"enumVal2\\"
29732973
]
2974+
},
2975+
\\"camelCase\\": {
2976+
\\"name\\": \\"camelCase\\",
2977+
\\"values\\": [
2978+
\\"bactrian\\",
2979+
\\"dromedary\\"
2980+
]
29742981
}
29752982
},
29762983
\\"nonModels\\": {

packages/appsync-modelgen-plugin/src/__tests__/visitors/appsync-dart-visitor.test.ts

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ describe('AppSync Dart Visitor', () => {
276276
`;
277277
const outputModels: string[] = ['Todo', 'Task'];
278278
outputModels.forEach(model => {
279-
const generatedCode = getVisitor({schema, selectedType: model, directives: [...AppSyncDirectives, ...V1Directives, DeprecatedDirective] }).generate();
279+
const generatedCode = getVisitor({ schema, selectedType: model, directives: [...AppSyncDirectives, ...V1Directives, DeprecatedDirective] }).generate();
280280
expect(generatedCode).toMatchSnapshot();
281281
});
282282
});
@@ -330,6 +330,26 @@ describe('AppSync Dart Visitor', () => {
330330
expect(generatedCode).toMatchSnapshot();
331331
});
332332
});
333+
334+
it('should pascal case enum', () => {
335+
const schema = /* GraphQL */ `
336+
enum status {
337+
yes
338+
no
339+
maybe
340+
}`;
341+
342+
const generatedCode = getVisitor({ schema, selectedType: 'status' }).generate();
343+
const statusEnum = generatedCode.split('\n').slice(-5).join('\n')
344+
expect(statusEnum).toMatchInlineSnapshot(`
345+
"enum Status {
346+
yes,
347+
no,
348+
maybe
349+
}"
350+
`);
351+
352+
})
333353
});
334354

335355
describe('Field tests', () => {
@@ -405,7 +425,7 @@ describe('AppSync Dart Visitor', () => {
405425
name: String
406426
}
407427
`;
408-
const visitor = getVisitor({schema, generate: CodeGenGenerateEnum.loader });
428+
const visitor = getVisitor({ schema, generate: CodeGenGenerateEnum.loader });
409429
const generatedCode = visitor.generate();
410430
expect(generatedCode).toMatchSnapshot();
411431
});
@@ -565,7 +585,7 @@ describe('AppSync Dart Visitor', () => {
565585

566586
models.forEach(type => {
567587
it(`should generate correct dart class for ${!type ? 'ModelProvider' : type} with nullsafety`, () => {
568-
const generatedCode = getVisitor({schema, selectedType: type, generate: !type ? CodeGenGenerateEnum.loader : CodeGenGenerateEnum.code }).generate();
588+
const generatedCode = getVisitor({ schema, selectedType: type, generate: !type ? CodeGenGenerateEnum.loader : CodeGenGenerateEnum.code }).generate();
569589

570590
expect(generatedCode).toMatchSnapshot();
571591
})
@@ -594,7 +614,7 @@ describe('AppSync Dart Visitor', () => {
594614
name: String
595615
}
596616
`;
597-
const visitor = getVisitor({ schema, isTimestampFieldsAdded: true });
617+
const visitor = getVisitor({ schema, isTimestampFieldsAdded: true });
598618

599619

600620
const generatedCode = visitor.generate();
@@ -871,7 +891,7 @@ describe('AppSync Dart Visitor', () => {
871891
content: String
872892
related: [SqlRelated!] @hasMany(references: ["primaryId"])
873893
}
874-
894+
875895
type SqlRelated @refersTo(name: "sql_related") @model {
876896
id: Int! @primaryKey
877897
content: String
@@ -899,7 +919,7 @@ describe('AppSync Dart Visitor', () => {
899919
content: String
900920
related: SqlRelated @hasOne(references: ["primaryId"])
901921
}
902-
922+
903923
type SqlRelated @refersTo(name: "sql_related") @model {
904924
id: Int! @primaryKey
905925
content: String
@@ -927,13 +947,13 @@ describe('AppSync Dart Visitor', () => {
927947
relatedMany: [RelatedMany] @hasMany(references: ["primaryId"])
928948
relatedOne: RelatedOne @hasOne(references: ["primaryId"])
929949
}
930-
950+
931951
type RelatedMany @model {
932952
id: ID! @primaryKey
933953
primaryId: ID!
934954
primary: Primary @belongsTo(references: ["primaryId"])
935955
}
936-
956+
937957
type RelatedOne @model {
938958
id: ID! @primaryKey
939959
primaryId: ID!
@@ -959,7 +979,7 @@ describe('AppSync Dart Visitor', () => {
959979
bar1: Bar @hasOne(references: ["bar1Id"])
960980
bar2: Bar @hasOne(references: ["bar2Id"])
961981
}
962-
982+
963983
type Bar @model {
964984
id: ID!
965985
bar1Id: ID
@@ -990,7 +1010,7 @@ describe('AppSync Dart Visitor', () => {
9901010
content: String
9911011
related: [Related!] @hasMany(references: ["primaryTenantId", "primaryInstanceId", "primaryRecordId"])
9921012
}
993-
1013+
9941014
type Related @model {
9951015
content: String
9961016
primaryTenantId: ID!
@@ -1021,7 +1041,7 @@ describe('AppSync Dart Visitor', () => {
10211041
content: String
10221042
related: Related @hasOne(references: ["primaryTenantId", "primaryInstanceId", "primaryRecordId"])
10231043
}
1024-
1044+
10251045
type Related @model {
10261046
content: String
10271047
primaryTenantId: ID!

packages/appsync-modelgen-plugin/src/__tests__/visitors/appsync-javascript-visitor.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,25 @@ describe('Javascript visitor', () => {
8787
`);
8888
});
8989

90+
it('should pascal case enum', () => {
91+
const schema = /* GraphQL */ `
92+
enum status {
93+
pending
94+
done
95+
}`;
96+
97+
const visitor = getVisitor(schema)
98+
const enumObj = (visitor as any).enumMap['status'];
99+
const statusEnum = (visitor as any).generateEnumObject(enumObj, true);
100+
validateTs(statusEnum);
101+
expect(statusEnum).toMatchInlineSnapshot(`
102+
"export const Status = {
103+
\\"PENDING\\": \\"pending\\",
104+
\\"DONE\\": \\"done\\"
105+
};"
106+
`);
107+
});
108+
90109
it('should generate import statements', () => {
91110
const imports = (visitor as any).generateImportsJavaScriptImplementation();
92111
validateTs(imports);

packages/appsync-modelgen-plugin/src/__tests__/visitors/appsync-model-introspection-visitor.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ describe('Model Introspection Visitor', () => {
115115
interface SimpleInterface {
116116
firstName: String!
117117
}
118+
enum camelCase {
119+
bactrian
120+
dromedary
121+
}
118122
union SimpleUnion = SimpleModel | SimpleEnum | SimpleNonModelType | SimpleInput | SimpleInterface
119123
`;
120124
const visitor: AppSyncModelIntrospectionVisitor = getVisitor(schema);
@@ -143,6 +147,10 @@ describe('Model Introspection Visitor', () => {
143147
expect((visitor as any).getType('SimpleInterface')).toEqual({ interface: 'SimpleInterface' });
144148
});
145149

150+
it('should not pascal case enum', () => {
151+
expect((visitor as any).getType('camelCase')).toEqual({ enum: 'camelCase' })
152+
})
153+
146154
it('should throw error for unknown type', () => {
147155
expect(() => (visitor as any).getType('unknown')).toThrowError('Unknown type');
148156
});

packages/appsync-modelgen-plugin/src/visitors/appsync-dart-visitor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
import { generateLicense } from '../utils/generateLicense';
2727
import { GraphQLSchema } from 'graphql';
2828
import { DART_SCALAR_MAP } from '../scalars';
29+
import { pascalCase } from 'change-case';
2930

3031
export interface RawAppSyncModelDartConfig extends RawAppSyncModelConfig {}
3132

@@ -166,7 +167,7 @@ export class AppSyncModelDartVisitor<
166167
//Enum
167168
Object.entries(this.getSelectedEnums()).forEach(([name, enumVal]) => {
168169
const body = Object.values(enumVal.values).join(',\n');
169-
result.push([`enum ${name} {`, indentMultiline(body), '}'].join('\n'));
170+
result.push([`enum ${pascalCase(name)} {`, indentMultiline(body), '}'].join('\n'));
170171
});
171172
return result.join('\n\n');
172173
}

packages/appsync-modelgen-plugin/src/visitors/appsync-java-visitor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ export class AppSyncModelJavaVisitor<
158158
const enumDeclaration = new JavaDeclarationBlock()
159159
.asKind('enum')
160160
.access('public')
161-
.withName(this.getEnumName(enumValue))
161+
.withName(pascalCase(this.getEnumName(enumValue)))
162162
.annotate(['SuppressWarnings("all")'])
163163
.withComment('Auto generated enum from GraphQL schema.');
164164
const body = Object.values(enumValue.values);

packages/appsync-modelgen-plugin/src/visitors/appsync-javascript-visitor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { DEFAULT_SCALARS, NormalizedScalarsMap } from '@graphql-codegen/visitor-
22
import { GraphQLSchema } from 'graphql';
33
import { AppSyncModelTypeScriptVisitor } from './appsync-typescript-visitor';
44
import { CodeGenEnum, CodeGenModel, ParsedAppSyncModelConfig, RawAppSyncModelConfig } from './appsync-visitor';
5+
import { pascalCase } from 'change-case';
56

67
export interface RawAppSyncModelJavaScriptConfig extends RawAppSyncModelConfig {
78
/**
@@ -112,7 +113,7 @@ export class AppSyncModelJavascriptVisitor<
112113
* @param exportEnum: boolean export the enum object
113114
*/
114115
protected generateEnumObject(enumObj: CodeGenEnum, exportEnum: boolean = false): string {
115-
const enumName = this.getEnumName(enumObj);
116+
const enumName = pascalCase(this.getEnumName(enumObj));
116117
const header = [exportEnum ? 'export' : null, 'const', enumName].filter(h => h).join(' ');
117118

118119
return `${header} = ${JSON.stringify(enumObj.values, null, 2)};`;

packages/appsync-modelgen-plugin/src/visitors/appsync-swift-visitor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { indent, indentMultiline, NormalizedScalarsMap } from '@graphql-codegen/visitor-plugin-common';
2-
import { camelCase } from 'change-case';
2+
import { camelCase, pascalCase } from 'change-case';
33
import { GraphQLSchema } from 'graphql';
44
import { lowerCaseFirst } from 'lower-case-first';
55
import { plurality } from 'graphql-transformer-common';
@@ -305,7 +305,7 @@ export class AppSyncSwiftVisitor<
305305
.asKind('enum')
306306
.access('public')
307307
.withProtocols(['String', 'EnumPersistable'])
308-
.withName(this.getEnumName(enumValue));
308+
.withName(pascalCase(this.getEnumName(enumValue)));
309309

310310
Object.entries(enumValue.values).forEach(([name, value]) => {
311311
enumDeclaration.addEnumValue(name, value);

packages/appsync-modelgen-plugin/src/visitors/appsync-typescript-visitor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
ParsedAppSyncModelConfig,
1010
RawAppSyncModelConfig,
1111
} from './appsync-visitor';
12+
import { pascalCase } from 'change-case';
1213

1314
export interface RawAppSyncModelTypeScriptConfig extends RawAppSyncModelConfig {}
1415
export interface ParsedAppSyncModelTypeScriptConfig extends ParsedAppSyncModelConfig {
@@ -77,7 +78,7 @@ export class AppSyncModelTypeScriptVisitor<
7778
protected generateEnumDeclarations(enumObj: CodeGenEnum, exportEnum: boolean = false): string {
7879
const enumDeclarations = new TypeScriptDeclarationBlock()
7980
.asKind('enum')
80-
.withName(this.getEnumName(enumObj))
81+
.withName(pascalCase(this.getEnumName(enumObj)))
8182
.withEnumValues(enumObj.values)
8283
.export(exportEnum);
8384

0 commit comments

Comments
 (0)