From ba0a43215f0c9d6287e5587893461641d826c0ab Mon Sep 17 00:00:00 2001 From: Spencer Dean Stolworthy Date: Mon, 16 Oct 2023 16:08:05 -0700 Subject: [PATCH 1/6] formgen: add type declaration generation --- .../local_codegen_graphql_form_generator.ts | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/packages/form-generator/src/local_codegen_graphql_form_generator.ts b/packages/form-generator/src/local_codegen_graphql_form_generator.ts index 71fa6a1fe26..ff5152d0fb8 100644 --- a/packages/form-generator/src/local_codegen_graphql_form_generator.ts +++ b/packages/form-generator/src/local_codegen_graphql_form_generator.ts @@ -20,6 +20,7 @@ import { GraphqlFormGenerator, GraphqlGenerationResult, } from './graphql_form_generator.js'; +import { getDeclarationFilename } from '@aws-amplify/codegen-ui-react/dist/lib/react-studio-template-renderer-helper.js'; type FormDef = Set<'create' | 'update'>; type ModelRecord = Record; @@ -125,11 +126,20 @@ export class LocalGraphqlFormGenerator implements GraphqlFormGenerator { formFeatureFlags ); const { componentText, declaration } = renderer.renderComponentInternal(); - return { - componentText, - fileName: renderer.fileName, - declaration, - }; + const files = [ + { + componentText, + fileName: renderer.fileName, + }, + ]; + if (declaration) { + files.push({ + componentText: declaration, + fileName: getDeclarationFilename(renderer.fileName), + }); + } + + return files; }; private filterModelsByName = ( filteredModelNames: string[], @@ -262,8 +272,10 @@ export class LocalGraphqlFormGenerator implements GraphqlFormGenerator { ); const forms = baseForms.reduce>( (prev, formSchema) => { - const result = this.codegenForm(dataSchema, formSchema); - prev[result.fileName] = result.componentText; + const results = this.codegenForm(dataSchema, formSchema); + results.forEach((result) => { + prev[result.fileName] = result.componentText; + }); return prev; }, {} From 01e0c41bfa263aa1f95cce310f4d2e7f13f2979d Mon Sep 17 00:00:00 2001 From: Spencer Dean Stolworthy Date: Mon, 16 Oct 2023 16:09:24 -0700 Subject: [PATCH 2/6] changeset: add changeset --- .changeset/famous-rockets-prove.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/famous-rockets-prove.md diff --git a/.changeset/famous-rockets-prove.md b/.changeset/famous-rockets-prove.md new file mode 100644 index 00000000000..3d159b6ba78 --- /dev/null +++ b/.changeset/famous-rockets-prove.md @@ -0,0 +1,5 @@ +--- +'@aws-amplify/form-generator': patch +--- + +Generate type declaration files for rendered components From 23058c28f9ba5d2a305dfb8470671b3c3388f983 Mon Sep 17 00:00:00 2001 From: Spencer Dean Stolworthy Date: Thu, 19 Oct 2023 08:51:01 -0700 Subject: [PATCH 3/6] fix: use new import from codegen-ui-react --- package-lock.json | 32 +++++++++---------- packages/form-generator/package.json | 2 +- .../local_codegen_graphql_form_generator.ts | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index da982c64ead..e8eea03f63b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -461,20 +461,20 @@ "link": true }, "node_modules/@aws-amplify/codegen-ui": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui/-/codegen-ui-2.17.0.tgz", - "integrity": "sha512-7FCn1b5J26u+usGSBjf4Jzg6Fe2NqOsoi/AtYxI+rZD2VuUNGzhbatURxdcOe0CS0NTDDPzY1pN2RYWMCtnnig==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui/-/codegen-ui-2.18.0.tgz", + "integrity": "sha512-5AmK95CU68K+rTnvy6gma4G2yXebwMvw+E5igKVc9esJW/5aukN29VX66kwVQonpQlMdxuhFTW+FqIL3RbJPHQ==", "dependencies": { "change-case": "^4.1.2", "yup": "^0.32.11" } }, "node_modules/@aws-amplify/codegen-ui-react": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui-react/-/codegen-ui-react-2.17.0.tgz", - "integrity": "sha512-6on90yua++CxiFFKccjbzQzbSWWE8a40DdpQmRCSVODplOLqHKSxzX+N36tWyb4p3q7VgF81KIUrpkQVm4PcyA==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui-react/-/codegen-ui-react-2.18.0.tgz", + "integrity": "sha512-rz/gtHqKZmc9HxX9sdwxaqDgbhJZ+XBG0kscfPaTCmew+GbjKBte/g9R08a35ndU1J7rMNrQyVuCRrCOdAQfQA==", "dependencies": { - "@aws-amplify/codegen-ui": "2.17.0", + "@aws-amplify/codegen-ui": "2.18.0", "@typescript/vfs": "~1.3.5", "pluralize": "^8.0.0", "semver": "^7.5.4", @@ -19309,7 +19309,7 @@ "dependencies": { "@aws-amplify/appsync-modelgen-plugin": "^2.6.0", "@aws-amplify/codegen-ui": "^2.15.8", - "@aws-amplify/codegen-ui-react": "^2.15.9", + "@aws-amplify/codegen-ui-react": "^2.18.0", "@aws-amplify/graphql-docs-generator": "^4.1.0", "@aws-sdk/client-amplifyuibuilder": "^3.398.0", "@aws-sdk/client-appsync": "^3.398.0", @@ -19942,20 +19942,20 @@ } }, "@aws-amplify/codegen-ui": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui/-/codegen-ui-2.17.0.tgz", - "integrity": "sha512-7FCn1b5J26u+usGSBjf4Jzg6Fe2NqOsoi/AtYxI+rZD2VuUNGzhbatURxdcOe0CS0NTDDPzY1pN2RYWMCtnnig==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui/-/codegen-ui-2.18.0.tgz", + "integrity": "sha512-5AmK95CU68K+rTnvy6gma4G2yXebwMvw+E5igKVc9esJW/5aukN29VX66kwVQonpQlMdxuhFTW+FqIL3RbJPHQ==", "requires": { "change-case": "^4.1.2", "yup": "^0.32.11" } }, "@aws-amplify/codegen-ui-react": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui-react/-/codegen-ui-react-2.17.0.tgz", - "integrity": "sha512-6on90yua++CxiFFKccjbzQzbSWWE8a40DdpQmRCSVODplOLqHKSxzX+N36tWyb4p3q7VgF81KIUrpkQVm4PcyA==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui-react/-/codegen-ui-react-2.18.0.tgz", + "integrity": "sha512-rz/gtHqKZmc9HxX9sdwxaqDgbhJZ+XBG0kscfPaTCmew+GbjKBte/g9R08a35ndU1J7rMNrQyVuCRrCOdAQfQA==", "requires": { - "@aws-amplify/codegen-ui": "2.17.0", + "@aws-amplify/codegen-ui": "2.18.0", "@typescript/vfs": "~1.3.5", "pluralize": "^8.0.0", "prettier": "2.3.2", @@ -19993,7 +19993,7 @@ "requires": { "@aws-amplify/appsync-modelgen-plugin": "^2.6.0", "@aws-amplify/codegen-ui": "^2.15.8", - "@aws-amplify/codegen-ui-react": "^2.15.9", + "@aws-amplify/codegen-ui-react": "^2.18.0", "@aws-amplify/graphql-docs-generator": "^4.1.0", "@aws-sdk/client-amplifyuibuilder": "^3.398.0", "@aws-sdk/client-appsync": "^3.398.0", diff --git a/packages/form-generator/package.json b/packages/form-generator/package.json index 12c2fb1a537..f971db1837b 100644 --- a/packages/form-generator/package.json +++ b/packages/form-generator/package.json @@ -20,7 +20,7 @@ "dependencies": { "@aws-amplify/appsync-modelgen-plugin": "^2.6.0", "@aws-amplify/codegen-ui": "^2.15.8", - "@aws-amplify/codegen-ui-react": "^2.15.9", + "@aws-amplify/codegen-ui-react": "^2.18.0", "@aws-amplify/graphql-docs-generator": "^4.1.0", "@aws-sdk/client-amplifyuibuilder": "^3.398.0", "@aws-sdk/client-appsync": "^3.398.0", diff --git a/packages/form-generator/src/local_codegen_graphql_form_generator.ts b/packages/form-generator/src/local_codegen_graphql_form_generator.ts index ff5152d0fb8..e5b5ebd6ba6 100644 --- a/packages/form-generator/src/local_codegen_graphql_form_generator.ts +++ b/packages/form-generator/src/local_codegen_graphql_form_generator.ts @@ -14,13 +14,13 @@ import { ScriptKind, ScriptTarget, UtilTemplateType, + getDeclarationFilename, } from '@aws-amplify/codegen-ui-react'; import { FormGenerationOptions, GraphqlFormGenerator, GraphqlGenerationResult, } from './graphql_form_generator.js'; -import { getDeclarationFilename } from '@aws-amplify/codegen-ui-react/dist/lib/react-studio-template-renderer-helper.js'; type FormDef = Set<'create' | 'update'>; type ModelRecord = Record; From 34765de47e24a32472633eb54a56d46da34835df Mon Sep 17 00:00:00 2001 From: Spencer Dean Stolworthy Date: Tue, 24 Oct 2023 12:28:49 -0700 Subject: [PATCH 4/6] formgen: add integ test to assert that types file is generated --- ...cal_codegen_graphql_form_generator.test.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts b/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts index 9c34442df2f..eb864382986 100644 --- a/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts +++ b/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts @@ -104,6 +104,36 @@ void describe('LocalCodegenGraphqlFormGenerator', () => { ); await assert.rejects(() => l.generateForms({ models: ['Author'] })); }); + void it('type declaration files are created for each model', async () => { + const models = ['Post', 'Author', 'Foo']; + const schema = createMockSchema(models); + const l = new LocalGraphqlFormGenerator( + async () => schema as unknown as GenericDataSchema, + { + graphqlDir: '../graphql', + }, + (map) => { + return new CodegenGraphqlFormGeneratorResult(map); + } + ); + const output = await l.generateForms(); + const fsMock = mock.method(fs, 'open'); + fsMock.mock.mockImplementation(async () => ({ + writeFile: async () => undefined, + stat: async () => ({}), + close: async () => undefined, + })); + await output.writeToDirectory('./'); + const writeArgs = fsMock.mock.calls.flatMap((c) => c.arguments[0]); + assert( + models.every((m) => { + return writeArgs.some((arg) => + // eslint-disable-next-line no-useless-escape + new RegExp(`${m}(Update|Create)Form\.d\.ts`).test(arg.toString()) + ); + }) + ); + }); void it('when an undefined filter is passed, all models are generated', async () => { const models = ['Post', 'Author', 'Foo']; const schema = createMockSchema(models); From bd93e060a0b277a7af34d02f4a946c5d22253d4a Mon Sep 17 00:00:00 2001 From: Spencer Dean Stolworthy Date: Tue, 24 Oct 2023 12:32:55 -0700 Subject: [PATCH 5/6] fix: remove useless escape --- .../src/local_codegen_graphql_form_generator.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts b/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts index eb864382986..dbef65acfc6 100644 --- a/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts +++ b/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts @@ -129,7 +129,7 @@ void describe('LocalCodegenGraphqlFormGenerator', () => { models.every((m) => { return writeArgs.some((arg) => // eslint-disable-next-line no-useless-escape - new RegExp(`${m}(Update|Create)Form\.d\.ts`).test(arg.toString()) + new RegExp(`${m}(Update|Create)Form.d.ts`).test(arg.toString()) ); }) ); From 4aff104171e64f2fed39a7e21ac9744ea1cb3e64 Mon Sep 17 00:00:00 2001 From: Spencer Dean Stolworthy Date: Tue, 24 Oct 2023 13:14:02 -0700 Subject: [PATCH 6/6] fix: remove eslint disable --- .../src/local_codegen_graphql_form_generator.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts b/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts index dbef65acfc6..9a22991dc68 100644 --- a/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts +++ b/packages/form-generator/src/local_codegen_graphql_form_generator.test.ts @@ -128,7 +128,6 @@ void describe('LocalCodegenGraphqlFormGenerator', () => { assert( models.every((m) => { return writeArgs.some((arg) => - // eslint-disable-next-line no-useless-escape new RegExp(`${m}(Update|Create)Form.d.ts`).test(arg.toString()) ); })