From 25c795f678fca0add39e9ca20ed0cc89797d4dcb Mon Sep 17 00:00:00 2001 From: Sean Greenawalt Date: Mon, 14 Sep 2020 16:15:54 -0400 Subject: [PATCH 1/4] fix(amplify-codegen-appsync-model-plugin): fix DataStore Array Support fix #5139 --- .../src/utils/get-type-info.ts | 8 +++++++- .../src/visitors/appsync-json-metadata-visitor.ts | 2 ++ .../src/visitors/appsync-visitor.ts | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/utils/get-type-info.ts b/packages/amplify-codegen-appsync-model-plugin/src/utils/get-type-info.ts index 9ca69d56f05..c5de415f3c9 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/utils/get-type-info.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/utils/get-type-info.ts @@ -8,6 +8,12 @@ export function getTypeInfo(typeNode: TypeNode, schema: GraphQLSchema): TypeInfo isList: false, baseType: schema.getType(typeNode.name.value), }; + } else if (typeNode.kind === 'NonNullType' && typeNode.type.kind === 'ListType') { + return { + ...getTypeInfo(typeNode.type.type, schema), + isList: true, + isListNullable: false, + }; } else if (typeNode.kind === 'NonNullType') { return { ...getTypeInfo(typeNode.type, schema), @@ -17,7 +23,7 @@ export function getTypeInfo(typeNode: TypeNode, schema: GraphQLSchema): TypeInfo return { ...getTypeInfo(typeNode.type, schema), isList: true, - isNullable: true, + isListNullable: true, }; } return { diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts index 6b360dec07e..de4fcff55b8 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts @@ -62,6 +62,7 @@ type JSONModelField = { type: JSONModelFieldType; isArray: boolean; isRequired?: boolean; + isArrayRequired?: boolean; attributes?: JSONModelFieldAttributes; association?: AssociationType; }; @@ -200,6 +201,7 @@ export class AppSyncJSONVisitor< isArray: field.isList, type: this.getType(field.type), isRequired: !field.isNullable, + isArrayRequired: field.isListNullable !== undefined ? !field.isListNullable : undefined, attributes: [], }; const association: AssociationType | void = this.getFieldAssociation(field); diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-visitor.ts index afce343cfe4..06103fa01b5 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-visitor.ts @@ -120,6 +120,7 @@ export type TypeInfo = { type: string; isList: boolean; isNullable: boolean; + isListNullable?: boolean; baseType?: GraphQLNamedType | null; }; export type CodeGenModel = { From 650f06dc677010c4dfe2a3325cb9b6dddf14c510 Mon Sep 17 00:00:00 2001 From: Sean Greenawalt Date: Mon, 14 Sep 2020 17:03:57 -0400 Subject: [PATCH 2/4] test(amplify-codegen-appsync-model-plugin): fixed Tests --- .../src/__tests__/visitors/appsync-swift-visitor.test.ts | 2 +- .../src/utils/get-type-info.ts | 1 - .../src/visitors/appsync-json-metadata-visitor.ts | 6 +++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts index eaa3ced26fd..5e161fffd47 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts @@ -932,7 +932,7 @@ describe('AppSyncSwiftVisitor', () => { Class: Class nonNullClass: Class! classes: [Class] - nonNullClasses: [Class]! + nonNullClasses: [Class!]! } `; const visitor = getVisitor(schema, 'Class'); diff --git a/packages/amplify-codegen-appsync-model-plugin/src/utils/get-type-info.ts b/packages/amplify-codegen-appsync-model-plugin/src/utils/get-type-info.ts index c5de415f3c9..05d86a44b41 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/utils/get-type-info.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/utils/get-type-info.ts @@ -23,7 +23,6 @@ export function getTypeInfo(typeNode: TypeNode, schema: GraphQLSchema): TypeInfo return { ...getTypeInfo(typeNode.type, schema), isList: true, - isListNullable: true, }; } return { diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts index de4fcff55b8..3003f36bc1b 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts @@ -201,9 +201,13 @@ export class AppSyncJSONVisitor< isArray: field.isList, type: this.getType(field.type), isRequired: !field.isNullable, - isArrayRequired: field.isListNullable !== undefined ? !field.isListNullable : undefined, attributes: [], }; + + if (field.isListNullable !== undefined) { + fieldMeta.isArrayRequired = !field.isListNullable; + } + const association: AssociationType | void = this.getFieldAssociation(field); if (association) { fieldMeta.association = association; From f4e8e25716e10df3d97c152b9087fcb075ef244b Mon Sep 17 00:00:00 2001 From: Sean Greenawalt Date: Fri, 25 Sep 2020 08:30:17 -0400 Subject: [PATCH 3/4] style(amplify-codegen-appsync-model-plugin): rename attribute Rename isArrayRequired to isArrayNullable --- .../src/visitors/appsync-json-metadata-visitor.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts index 3003f36bc1b..925a8c102e0 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts @@ -62,7 +62,7 @@ type JSONModelField = { type: JSONModelFieldType; isArray: boolean; isRequired?: boolean; - isArrayRequired?: boolean; + isArrayNullable?: boolean; attributes?: JSONModelFieldAttributes; association?: AssociationType; }; @@ -205,7 +205,7 @@ export class AppSyncJSONVisitor< }; if (field.isListNullable !== undefined) { - fieldMeta.isArrayRequired = !field.isListNullable; + fieldMeta.isArrayNullable = !field.isListNullable; } const association: AssociationType | void = this.getFieldAssociation(field); From 45233fc0156c5d051545360fd809ab6c5dd29db3 Mon Sep 17 00:00:00 2001 From: Sean Greenawalt Date: Fri, 25 Sep 2020 14:49:25 -0400 Subject: [PATCH 4/4] fix(amplify-codegen-appsync-model-plugin): fix metadata isArrayNullable value should be flipped due to name change --- .../src/visitors/appsync-json-metadata-visitor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts index 925a8c102e0..dca148fdef0 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-json-metadata-visitor.ts @@ -205,7 +205,7 @@ export class AppSyncJSONVisitor< }; if (field.isListNullable !== undefined) { - fieldMeta.isArrayNullable = !field.isListNullable; + fieldMeta.isArrayNullable = field.isListNullable; } const association: AssociationType | void = this.getFieldAssociation(field);