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 9ca69d56f05..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 @@ -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,6 @@ export function getTypeInfo(typeNode: TypeNode, schema: GraphQLSchema): TypeInfo return { ...getTypeInfo(typeNode.type, schema), isList: true, - isNullable: 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..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 @@ -62,6 +62,7 @@ type JSONModelField = { type: JSONModelFieldType; isArray: boolean; isRequired?: boolean; + isArrayNullable?: boolean; attributes?: JSONModelFieldAttributes; association?: AssociationType; }; @@ -202,6 +203,11 @@ export class AppSyncJSONVisitor< isRequired: !field.isNullable, attributes: [], }; + + if (field.isListNullable !== undefined) { + fieldMeta.isArrayNullable = field.isListNullable; + } + const association: AssociationType | void = this.getFieldAssociation(field); if (association) { fieldMeta.association = association; 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 = {