From 56a19703d3694f870183de1e1f5bd3a7f002dc40 Mon Sep 17 00:00:00 2001 From: JulissaDantes Date: Fri, 26 Jul 2024 08:28:53 -0400 Subject: [PATCH 1/2] feat: update _parseListType --- packages/devtools/src/schema/parser.ts | 4 ++++ packages/devtools/test/schema.test.ts | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/devtools/src/schema/parser.ts b/packages/devtools/src/schema/parser.ts index c4ad8afd..996a9b66 100644 --- a/packages/devtools/src/schema/parser.ts +++ b/packages/devtools/src/schema/parser.ts @@ -326,6 +326,7 @@ export class SchemaParser { for (const [key, value] of Object.entries(objectFields)) { const directives = getDirectives(this.#schema, value) + const immutable = directives.some((item) => item.name === 'immutable') const [innerType, required] = isNonNullType(value.type) ? [value.type.ofType, true] : [value.type, false] @@ -344,6 +345,7 @@ export class SchemaParser { key, innerType, required, + immutable, directives, hasCreateModel, ) @@ -517,6 +519,7 @@ export class SchemaParser { fieldName: string, type: GraphQLList, required: boolean, + immutable: boolean, directives: Array, hasCreateModel: boolean, ): DefinitionWithReferences { @@ -534,6 +537,7 @@ export class SchemaParser { const definition: ListFieldDefinition = { type: 'list', required, + immutable, item: item.definition, maxLength: list.args.maxLength as number, } diff --git a/packages/devtools/test/schema.test.ts b/packages/devtools/test/schema.test.ts index 20e17e3c..15312da9 100644 --- a/packages/devtools/test/schema.test.ts +++ b/packages/devtools/test/schema.test.ts @@ -795,6 +795,7 @@ describe('schema parsing and compilation', () => { ) { uniqueValue: Int @immutable tag: String! @string(minLength: 1, maxLength: 100) + uniqueListValue: [Int] @list(maxLength: 5) @immutable } `), ).toMatchObject({ @@ -803,7 +804,7 @@ describe('schema parsing and compilation', () => { action: 'create', model: { name: 'ModelWithImmutableProp', - immutableFields: ['uniqueValue'], + immutableFields: ['uniqueValue', 'uniqueListValue'], accountRelation: { type: 'single' }, description: 'Test model with an immutable int property', schema: { From 9e4c2d7e89fd0f80c80c5c1deeb13bbfa861f0cc Mon Sep 17 00:00:00 2001 From: JulissaDantes Date: Fri, 26 Jul 2024 12:08:57 -0400 Subject: [PATCH 2/2] refactor: move directive check to parse method --- .vscode/settings.json | 5 +++++ packages/devtools/src/schema/parser.ts | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..7ca18de0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "undeployed" + ] +} \ No newline at end of file diff --git a/packages/devtools/src/schema/parser.ts b/packages/devtools/src/schema/parser.ts index 996a9b66..4f9412ff 100644 --- a/packages/devtools/src/schema/parser.ts +++ b/packages/devtools/src/schema/parser.ts @@ -326,7 +326,6 @@ export class SchemaParser { for (const [key, value] of Object.entries(objectFields)) { const directives = getDirectives(this.#schema, value) - const immutable = directives.some((item) => item.name === 'immutable') const [innerType, required] = isNonNullType(value.type) ? [value.type.ofType, true] : [value.type, false] @@ -345,7 +344,6 @@ export class SchemaParser { key, innerType, required, - immutable, directives, hasCreateModel, ) @@ -519,11 +517,11 @@ export class SchemaParser { fieldName: string, type: GraphQLList, required: boolean, - immutable: boolean, directives: Array, hasCreateModel: boolean, ): DefinitionWithReferences { const list = directives.find((d) => d.name === 'list') + const immutable = directives.some((item) => item.name === 'immutable') if (list == null) { throw new Error(`Missing @list directive on list field ${fieldName} of object ${objectName}`) }