@aws-amplify/amplify-util-uibuilder 1.8.5-rds.1 → 1.9.0-cdk228withdata3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +3 -8
  2. package/lib/clients/amplify-studio-client.d.ts +4 -1
  3. package/lib/clients/amplify-studio-client.d.ts.map +1 -1
  4. package/lib/clients/amplify-studio-client.js +43 -3
  5. package/lib/clients/amplify-studio-client.js.map +1 -1
  6. package/lib/commands/generateComponents.d.ts.map +1 -1
  7. package/lib/commands/generateComponents.js +32 -33
  8. package/lib/commands/generateComponents.js.map +1 -1
  9. package/lib/commands/utils/codegenResources.d.ts +1 -15
  10. package/lib/commands/utils/codegenResources.d.ts.map +1 -1
  11. package/lib/commands/utils/codegenResources.js +1 -123
  12. package/lib/commands/utils/codegenResources.js.map +1 -1
  13. package/lib/commands/utils/detachedFormCleanup.d.ts +3 -4
  14. package/lib/commands/utils/detachedFormCleanup.d.ts.map +1 -1
  15. package/lib/commands/utils/detachedFormCleanup.js.map +1 -1
  16. package/lib/commands/utils/storageManager.d.ts +3 -4
  17. package/lib/commands/utils/storageManager.d.ts.map +1 -1
  18. package/lib/commands/utils/storageManager.js +1 -5
  19. package/lib/commands/utils/storageManager.js.map +1 -1
  20. package/lib/commands/utils/syncAmplifyUiBuilderComponents.d.ts +8 -16
  21. package/lib/commands/utils/syncAmplifyUiBuilderComponents.d.ts.map +1 -1
  22. package/lib/commands/utils/syncAmplifyUiBuilderComponents.js +186 -74
  23. package/lib/commands/utils/syncAmplifyUiBuilderComponents.js.map +1 -1
  24. package/package.json +7 -6
  25. package/src/__tests__/__snapshots__/syncAmplifyUiComponents.test.ts.snap +46 -0
  26. package/src/__tests__/detachedFormCleanup.test.ts +7 -5
  27. package/src/__tests__/generateComponents.test.ts +101 -28
  28. package/src/__tests__/storageManager.test.ts +7 -4
  29. package/src/__tests__/syncAmplifyUiComponents.test.ts +98 -96
  30. package/src/clients/amplify-studio-client.ts +44 -4
  31. package/src/commands/generateComponents.ts +43 -55
  32. package/src/commands/utils/codegenResources.ts +1 -226
  33. package/src/commands/utils/detachedFormCleanup.ts +3 -4
  34. package/src/commands/utils/storageManager.ts +3 -7
  35. package/src/commands/utils/syncAmplifyUiBuilderComponents.ts +210 -123
  36. package/tsconfig.tsbuildinfo +1 -1
  37. package/src/__tests__/createUiBuilderComponent.test.ts +0 -90
@@ -1,92 +1,204 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateUiBuilderForms = exports.generateUiBuilderThemes = exports.generateUiBuilderComponents = void 0;
6
+ exports.extractUIComponents = exports.fetchWithRetries = exports.waitForSucceededJob = exports.mapGenericDataSchemaToCodegen = void 0;
4
7
  const amplify_prompts_1 = require("@aws-amplify/amplify-prompts");
5
- const codegen_ui_1 = require("@aws-amplify/codegen-ui");
6
- const codegenResources_1 = require("./codegenResources");
7
- const getUiBuilderComponentsPath_1 = require("./getUiBuilderComponentsPath");
8
- const generateUiBuilderComponents = (context, componentSchemas, dataSchema) => {
9
- const componentResults = componentSchemas.map((schema) => {
10
- try {
11
- const component = (0, codegenResources_1.createUiBuilderComponent)(context, schema, dataSchema);
12
- return { resultType: 'SUCCESS', schema: component };
8
+ const node_fetch_1 = __importDefault(require("node-fetch"));
9
+ const perf_hooks_1 = require("perf_hooks");
10
+ const path_1 = __importDefault(require("path"));
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const tiny_async_pool_1 = __importDefault(require("tiny-async-pool"));
13
+ const mapRelationshipTypeToCodegen = (relationship) => {
14
+ if (!relationship)
15
+ return undefined;
16
+ switch (relationship.type) {
17
+ case 'HAS_MANY':
18
+ return {
19
+ type: 'HAS_MANY',
20
+ relatedModelFields: relationship.relatedModelFields,
21
+ canUnlinkAssociatedModel: !!relationship.canUnlinkAssociatedModel,
22
+ relatedJoinFieldName: relationship.relatedJoinFieldName,
23
+ relatedJoinTableName: relationship.relatedJoinTableName,
24
+ belongsToFieldOnRelatedModel: relationship.belongsToFieldOnRelatedModel,
25
+ relatedModelName: relationship.relatedModelName,
26
+ };
27
+ case 'HAS_ONE':
28
+ return {
29
+ type: 'HAS_ONE',
30
+ associatedFields: relationship.associatedFields,
31
+ isHasManyIndex: !!relationship.isHasManyIndex,
32
+ relatedModelName: relationship.relatedModelName,
33
+ };
34
+ case 'BELONGS_TO':
35
+ return {
36
+ type: 'BELONGS_TO',
37
+ associatedFields: relationship.associatedFields,
38
+ isHasManyIndex: !!relationship.isHasManyIndex,
39
+ relatedModelName: relationship.relatedModelName,
40
+ };
41
+ default:
42
+ throw new Error('Invalid relationship type');
43
+ }
44
+ };
45
+ const mapDataFieldsToCodegen = (fields) => {
46
+ const codegenFields = {};
47
+ Object.entries(fields).forEach(([fieldName, dataField]) => {
48
+ let dataType = '';
49
+ let dataTypeValue = '';
50
+ if (typeof dataField.dataType === 'object' && dataField.dataType !== null) {
51
+ if ('enum' in dataField.dataType) {
52
+ dataType = 'Enum';
53
+ dataTypeValue = dataField.dataType.enum;
54
+ }
55
+ else if ('model' in dataField.dataType) {
56
+ dataType = 'Model';
57
+ dataTypeValue = dataField.dataType.model;
58
+ }
59
+ else if ('nonModel' in dataField.dataType) {
60
+ dataType = 'NonModel';
61
+ dataTypeValue = dataField.dataType.nonModel;
62
+ }
63
+ }
64
+ else {
65
+ dataType = dataField.dataType;
66
+ dataTypeValue = dataField.dataType;
13
67
  }
14
- catch (e) {
15
- amplify_prompts_1.printer.debug(`Failure caught processing ${schema.name}`);
16
- amplify_prompts_1.printer.debug(e);
17
- return { resultType: 'FAILURE', schemaName: schema.name, error: e };
68
+ codegenFields[fieldName] = {
69
+ dataType: dataType,
70
+ dataTypeValue: dataTypeValue,
71
+ required: dataField.required,
72
+ readOnly: dataField.readOnly,
73
+ isArray: dataField.isArray,
74
+ };
75
+ if (dataField.relationship) {
76
+ codegenFields[fieldName].relationship = mapRelationshipTypeToCodegen(dataField.relationship);
18
77
  }
19
78
  });
20
- amplify_prompts_1.printer.debug(`Generated ${componentResults.filter((result) => result.resultType === 'SUCCESS').length} components in ${(0, getUiBuilderComponentsPath_1.getUiBuilderComponentsPath)(context)}`);
21
- return componentResults;
79
+ return codegenFields;
22
80
  };
23
- exports.generateUiBuilderComponents = generateUiBuilderComponents;
24
- const generateUiBuilderThemes = (context, themeSchemas) => {
25
- if (themeSchemas.length === 0) {
26
- return [generateDefaultTheme(context)];
27
- }
28
- const themeResults = themeSchemas.map((schema) => {
29
- try {
30
- const theme = (0, codegenResources_1.createUiBuilderTheme)(context, schema);
31
- return { resultType: 'SUCCESS', schema: theme };
32
- }
33
- catch (e) {
34
- amplify_prompts_1.printer.debug(`Failure caught processing ${schema.name}`);
35
- amplify_prompts_1.printer.debug(e);
36
- return { resultType: 'FAILURE', schemaName: schema.name, error: e };
37
- }
81
+ const mapGenericDataSchemaToCodegen = (genericDataSchema) => {
82
+ const { models, nonModels, enums, dataSourceType } = genericDataSchema;
83
+ const codegenModels = {};
84
+ const codegenNonModels = {};
85
+ const codegenEnums = {};
86
+ Object.entries(models).forEach(([modelName, genericDataModel]) => {
87
+ const modelFields = mapDataFieldsToCodegen(genericDataModel.fields);
88
+ codegenModels[modelName] = {
89
+ isJoinTable: genericDataModel.isJoinTable,
90
+ primaryKeys: genericDataModel.primaryKeys,
91
+ fields: modelFields,
92
+ };
93
+ });
94
+ Object.entries(nonModels).forEach(([nonModelName, genericDataModel]) => {
95
+ const nonModelFields = mapDataFieldsToCodegen(genericDataModel.fields);
96
+ codegenNonModels[nonModelName] = {
97
+ fields: nonModelFields,
98
+ };
38
99
  });
39
- amplify_prompts_1.printer.debug(`Generated ${themeResults.filter((result) => result.resultType === 'SUCCESS').length} themes in ${(0, getUiBuilderComponentsPath_1.getUiBuilderComponentsPath)(context)}`);
40
- return themeResults;
100
+ Object.entries(enums).forEach(([enumName, genericEnum]) => {
101
+ codegenEnums[enumName] = {
102
+ values: genericEnum.values,
103
+ };
104
+ });
105
+ return {
106
+ models: codegenModels,
107
+ nonModels: codegenNonModels,
108
+ enums: codegenEnums,
109
+ dataSourceType,
110
+ };
41
111
  };
42
- exports.generateUiBuilderThemes = generateUiBuilderThemes;
43
- const generateDefaultTheme = (context) => {
44
- try {
45
- const theme = (0, codegenResources_1.createUiBuilderTheme)(context, { name: 'studioTheme', values: [] }, { renderDefaultTheme: true });
46
- amplify_prompts_1.printer.debug(`Generated default theme in ${(0, getUiBuilderComponentsPath_1.getUiBuilderComponentsPath)(context)}`);
47
- return { resultType: 'SUCCESS', schema: theme };
112
+ exports.mapGenericDataSchemaToCodegen = mapGenericDataSchemaToCodegen;
113
+ function delay(durationMs) {
114
+ return new Promise((r) => setTimeout(() => r(), durationMs));
115
+ }
116
+ const waitForSucceededJob = async (getJob, { pollInterval }) => {
117
+ const startTime = perf_hooks_1.performance.now();
118
+ const waitTimeout = process.env.UI_BUILDER_CODEGENJOB_TIMEOUT ? parseInt(process.env.UI_BUILDER_CODEGENJOB_TIMEOUT) : 1000 * 60 * 2;
119
+ const endTime = startTime + waitTimeout;
120
+ while (perf_hooks_1.performance.now() < endTime) {
121
+ const job = await getJob();
122
+ if (!job) {
123
+ amplify_prompts_1.printer.error('Codegen job not found');
124
+ throw new Error('Codegen job not found');
125
+ }
126
+ if (job.status === 'failed') {
127
+ amplify_prompts_1.printer.error('Codegen job status is failed', { message: job.statusMessage });
128
+ throw new Error(job.statusMessage);
129
+ }
130
+ if (job.status === 'succeeded') {
131
+ amplify_prompts_1.printer.debug(`Polling time: ${perf_hooks_1.performance.now() - startTime}`);
132
+ return job;
133
+ }
134
+ await delay(pollInterval);
48
135
  }
49
- catch (e) {
50
- amplify_prompts_1.printer.debug(`Failure caught rendering default theme`);
51
- amplify_prompts_1.printer.debug(e);
52
- return { resultType: 'FAILURE', schemaName: 'studioTheme', error: e };
136
+ if (perf_hooks_1.performance.now() > endTime) {
137
+ amplify_prompts_1.printer.error(`Codegen job never succeeded before timeout`);
53
138
  }
139
+ throw new Error('Failed to return codegen job');
54
140
  };
55
- const generateUiBuilderForms = (context, formSchemas, dataSchema, autoGenerateForms, formFeatureFlags) => {
56
- const modelMap = {};
57
- if ((dataSchema === null || dataSchema === void 0 ? void 0 : dataSchema.dataSourceType) === 'DataStore' && autoGenerateForms) {
58
- Object.entries(dataSchema.models).forEach(([name, model]) => {
59
- if ((0, codegen_ui_1.checkIsSupportedAsForm)(model, formFeatureFlags) && !model.isJoinTable) {
60
- modelMap[name] = new Set(['create', 'update']);
61
- }
62
- });
63
- }
64
- const codegenForm = (schema) => {
141
+ exports.waitForSucceededJob = waitForSucceededJob;
142
+ const fetchWithRetries = async (url, retries = 3, delay = 300) => {
143
+ let retryCount = 0;
144
+ let retryDelay = delay;
145
+ while (retryCount < retries) {
65
146
  try {
66
- const form = (0, codegenResources_1.createUiBuilderForm)(context, schema, dataSchema, formFeatureFlags);
67
- return { resultType: 'SUCCESS', schema: form };
147
+ const response = await (0, node_fetch_1.default)(url);
148
+ return response;
68
149
  }
69
- catch (e) {
70
- amplify_prompts_1.printer.debug(`Failure caught processing ${schema.name}`);
71
- amplify_prompts_1.printer.debug(e);
72
- return {
73
- resultType: 'FAILURE',
74
- schemaName: schema.name,
75
- schema,
76
- error: e,
77
- };
150
+ catch (error) {
151
+ amplify_prompts_1.printer.debug(`Error fetching ${url}: ${error}`);
152
+ retryCount = retryCount + 1;
153
+ await new Promise((res) => setTimeout(res, delay));
154
+ retryDelay = retryDelay * 2;
78
155
  }
79
- };
80
- const formResults = formSchemas.map((schema) => {
81
- var _a, _b;
82
- if ((schema === null || schema === void 0 ? void 0 : schema.dataType) && ((_a = schema.dataType) === null || _a === void 0 ? void 0 : _a.dataSourceType) === 'DataStore') {
83
- (_b = modelMap[schema.dataType.dataTypeName]) === null || _b === void 0 ? void 0 : _b.delete(schema.formActionType);
156
+ }
157
+ throw new Error('Fetch reached max number of retries without succeeding');
158
+ };
159
+ exports.fetchWithRetries = fetchWithRetries;
160
+ const extractUIComponents = async (url, uiBuilderComponentsPath) => {
161
+ try {
162
+ if (!fs_1.default.existsSync(uiBuilderComponentsPath)) {
163
+ fs_1.default.mkdirSync(uiBuilderComponentsPath, { recursive: true });
84
164
  }
85
- return codegenForm(schema);
86
- });
87
- formResults.push(...(0, codegenResources_1.generateBaseForms)(modelMap).map(codegenForm));
88
- amplify_prompts_1.printer.debug(`Generated ${formResults.filter((result) => result.resultType === 'SUCCESS').length} forms in ${(0, getUiBuilderComponentsPath_1.getUiBuilderComponentsPath)(context)}`);
89
- return formResults;
165
+ const response = await (0, exports.fetchWithRetries)(url);
166
+ if (!response.ok) {
167
+ throw new Error('Failed to download component manifest file');
168
+ }
169
+ const manifestFile = await response.json();
170
+ const downloadComponent = async (output) => {
171
+ if (output.downloadUrl && !output.error) {
172
+ try {
173
+ const response = await (0, exports.fetchWithRetries)(output.downloadUrl);
174
+ if (!response.ok) {
175
+ amplify_prompts_1.printer.debug(`Failed to download ${output.fileName}`);
176
+ throw new Error(`Failed to download ${output.fileName}`);
177
+ }
178
+ return { content: await response.text(), error: undefined, fileName: output.fileName };
179
+ }
180
+ catch (error) {
181
+ amplify_prompts_1.printer.debug(`Skipping ${output.fileName} because of an error downloading the component`);
182
+ return { error: `Failed to download ${output.fileName}`, content: undefined, fileName: output.fileName };
183
+ }
184
+ }
185
+ else {
186
+ amplify_prompts_1.printer.debug(`Skipping ${output.fileName} because of an error generating the component`);
187
+ return { error: output.error, content: undefined, fileName: output.fileName };
188
+ }
189
+ };
190
+ for await (const downloaded of (0, tiny_async_pool_1.default)(5, manifestFile.Output, downloadComponent)) {
191
+ if (downloaded.content) {
192
+ fs_1.default.writeFileSync(path_1.default.join(uiBuilderComponentsPath, downloaded.fileName), downloaded.content);
193
+ amplify_prompts_1.printer.debug(`Downloaded ${downloaded.fileName}`);
194
+ }
195
+ }
196
+ amplify_prompts_1.printer.debug('ui-components downloaded successfully');
197
+ }
198
+ catch (error) {
199
+ amplify_prompts_1.printer.error('failed to download ui-components');
200
+ throw error;
201
+ }
90
202
  };
91
- exports.generateUiBuilderForms = generateUiBuilderForms;
203
+ exports.extractUIComponents = extractUIComponents;
92
204
  //# sourceMappingURL=syncAmplifyUiBuilderComponents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"syncAmplifyUiBuilderComponents.js","sourceRoot":"","sources":["../../../src/commands/utils/syncAmplifyUiBuilderComponents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncAmplifyUiBuilderComponents.js","sourceRoot":"","sources":["../../../src/commands/utils/syncAmplifyUiBuilderComponents.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-amplify/amplify-util-uibuilder",
3
- "version": "1.8.5-rds.1",
3
+ "version": "1.9.0-cdk228withdata3.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -14,14 +14,15 @@
14
14
  "access": "public"
15
15
  },
16
16
  "dependencies": {
17
- "@aws-amplify/amplify-category-api": "^5.5.0-rds.3",
18
- "@aws-amplify/amplify-cli-core": "4.1.1-rds.0",
17
+ "@aws-amplify/amplify-category-api": "^5.4.6",
18
+ "@aws-amplify/amplify-cli-core": "4.2.0-cdk228withdata3.0",
19
19
  "@aws-amplify/amplify-prompts": "2.8.0",
20
20
  "@aws-amplify/codegen-ui": "2.14.2",
21
21
  "@aws-amplify/codegen-ui-react": "2.14.2",
22
- "amplify-codegen": "^4.1.3-rds.0",
23
- "aws-sdk": "^2.1354.0",
22
+ "amplify-codegen": "^4.1.3",
23
+ "aws-sdk": "^2.1405.0",
24
24
  "fs-extra": "^8.1.0",
25
+ "node-fetch": "^2.6.7",
25
26
  "ora": "^4.0.3",
26
27
  "tiny-async-pool": "^2.1.0"
27
28
  },
@@ -81,5 +82,5 @@
81
82
  "@yarn/plugin-typescript"
82
83
  ]
83
84
  },
84
- "gitHead": "2176bcf454e80fff0a517bebaed03472bf21765f"
85
+ "gitHead": "360dbf23b8f0b1b7a4c99db6071ffe713fb7cc6a"
85
86
  }
@@ -0,0 +1,46 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`should sync amplify ui builder components can map generic data schema to start codegen job request 1`] = `
4
+ {
5
+ "dataSourceType": "DataStore",
6
+ "enums": {
7
+ "Status": {
8
+ "values": [
9
+ "ENABLED",
10
+ "DISABLED",
11
+ "HIDDEN",
12
+ ],
13
+ },
14
+ },
15
+ "models": {
16
+ "Blog": {
17
+ "fields": {
18
+ "id": {
19
+ "dataType": "ID",
20
+ "dataTypeValue": "ID",
21
+ "isArray": false,
22
+ "readOnly": false,
23
+ "required": true,
24
+ },
25
+ },
26
+ "isJoinTable": undefined,
27
+ "primaryKeys": [
28
+ "id",
29
+ ],
30
+ },
31
+ },
32
+ "nonModels": {
33
+ "Metadata": {
34
+ "fields": {
35
+ "name": {
36
+ "dataType": "String",
37
+ "dataTypeValue": "String",
38
+ "isArray": false,
39
+ "readOnly": false,
40
+ "required": false,
41
+ },
42
+ },
43
+ },
44
+ },
45
+ }
46
+ `;
@@ -1,12 +1,13 @@
1
- // @aws-amplify/codegen-ui is in project dependencies
2
- import { StudioSchema } from '@aws-amplify/codegen-ui'; // eslint-disable-line import/no-extraneous-dependencies
3
1
  import { AmplifyStudioClient } from '../clients'; // eslint-disable-line import/no-extraneous-dependencies
4
2
  import { isFormDetachedFromModel, isFormSchemaCustomized, isStudioForm, deleteDetachedForms } from '../commands/utils';
3
+ import { Form } from 'aws-sdk/clients/amplifyuibuilder';
5
4
 
6
5
  const amplifyStudioClientMock = AmplifyStudioClient as any;
7
6
 
8
- const formWithNoCustomization: StudioSchema = {
7
+ const formWithNoCustomization: Form = {
9
8
  id: 'f-123456',
9
+ appId: 'd1234',
10
+ environmentName: 'staging',
10
11
  name: 'BlogCreateForm',
11
12
  formActionType: 'create',
12
13
  dataType: {
@@ -17,9 +18,10 @@ const formWithNoCustomization: StudioSchema = {
17
18
  sectionalElements: {},
18
19
  style: {},
19
20
  cta: {},
21
+ schemaVersion: '1.0',
20
22
  };
21
23
 
22
- const formWithStyle: StudioSchema = {
24
+ const formWithStyle: Form = {
23
25
  ...formWithNoCustomization,
24
26
  dataType: { dataSourceType: 'Custom', dataTypeName: 'Blog' },
25
27
  style: {
@@ -27,7 +29,7 @@ const formWithStyle: StudioSchema = {
27
29
  },
28
30
  };
29
31
 
30
- const formWithFields: StudioSchema = {
32
+ const formWithFields: Form = {
31
33
  ...formWithNoCustomization,
32
34
  dataType: { dataSourceType: 'Custom', dataTypeName: 'Blog' },
33
35
  fields: {
@@ -22,6 +22,11 @@ const getTransformerVersionMocked = jest.mocked(getTransformerVersion);
22
22
  utilsMock.shouldRenderComponents = jest.fn().mockReturnValue(true);
23
23
  utilsMock.notifyMissingPackages = jest.fn().mockReturnValue(true);
24
24
  utilsMock.getAmplifyDataSchema = jest.fn().mockReturnValue({});
25
+ utilsMock.isFormDetachedFromModel = jest.fn().mockReturnValue(false);
26
+ utilsMock.extractUIComponents = jest.fn().mockReturnValue(undefined);
27
+ utilsMock.waitForSucceededJob = jest
28
+ .fn()
29
+ .mockReturnValue({ asset: { downloadUrl: 'amazon.com' }, statusMessage: `{\"codegenErrors\": [{\"schemaName\": \"BlogUpdateForm\"}]}` });
25
30
 
26
31
  jest.mock('../commands/utils/featureFlags', () => ({
27
32
  getTransformerVersion: jest.fn().mockReturnValue(2),
@@ -41,6 +46,12 @@ describe('can generate components', () => {
41
46
  },
42
47
  },
43
48
  });
49
+ const startCodegenJobPromise = jest.fn().mockReturnValue({
50
+ entity: { id: 'jobId123' },
51
+ });
52
+ const mockStartCodegenJob = jest.fn().mockReturnValue({
53
+ promise: startCodegenJobPromise,
54
+ });
44
55
  beforeEach(() => {
45
56
  isDataStoreEnabledMocked.mockResolvedValue(true);
46
57
  getTransformerVersionMocked.mockResolvedValue(2);
@@ -58,13 +69,11 @@ describe('can generate components', () => {
58
69
  schemas = {
59
70
  entities: [
60
71
  {
61
- resultType: 'SUCCESS',
62
72
  schemaName: 'testSchema',
63
73
  name: 'testSchema',
64
74
  schemaVersion: '1.0',
65
75
  },
66
76
  {
67
- resultType: 'FAILURE',
68
77
  schemaName: 'testSchema',
69
78
  name: 'testSchema',
70
79
  schemaVersion: '1.0',
@@ -91,6 +100,10 @@ describe('can generate components', () => {
91
100
  getMetadata: jest.fn().mockReturnValue({
92
101
  promise: getMetadataPromise,
93
102
  }),
103
+ startCodegenJob: mockStartCodegenJob,
104
+ getCodegenJob: jest.fn().mockReturnValue({
105
+ promise: jest.fn().mockReturnValue({ status: 'succeeded' }),
106
+ }),
94
107
  });
95
108
  utilsMock.generateUiBuilderComponents = jest.fn().mockReturnValue(schemas.entities);
96
109
  utilsMock.generateUiBuilderThemes = jest.fn().mockReturnValue(schemas.entities);
@@ -102,11 +115,13 @@ describe('can generate components', () => {
102
115
  });
103
116
 
104
117
  it('runs generateComponents', async () => {
118
+ utilsMock.isFormDetachedFromModel = jest.fn().mockReturnValueOnce(true);
105
119
  await run(context, 'PostPull');
106
120
  expect(mockedExport).toBeCalledTimes(3);
107
- expect(utilsMock.generateUiBuilderComponents).toBeCalledTimes(1);
108
- expect(utilsMock.generateUiBuilderThemes).toBeCalledTimes(1);
109
- expect(utilsMock.generateUiBuilderForms).toBeCalledTimes(1);
121
+ expect(startCodegenJobPromise).toBeCalledTimes(1);
122
+ expect(utilsMock.waitForSucceededJob).toBeCalledTimes(1);
123
+ expect(utilsMock.getUiBuilderComponentsPath).toBeCalledTimes(1);
124
+ expect(utilsMock.extractUIComponents).toBeCalledTimes(1);
110
125
  expect(utilsMock.deleteDetachedForms).toBeCalledTimes(1);
111
126
  });
112
127
 
@@ -124,7 +139,26 @@ describe('can generate components', () => {
124
139
  },
125
140
  });
126
141
  await run(context, 'PostPull');
127
- expect(utilsMock.generateUiBuilderForms).toHaveBeenCalledWith(expect.anything(), expect.anything(), undefined, true, expect.anything());
142
+ expect(mockStartCodegenJob).toHaveBeenCalledWith({
143
+ appId: 'testAppId',
144
+ environmentName: 'testEnvName',
145
+ codegenJobToCreate: {
146
+ renderConfig: {
147
+ react: {
148
+ module: 'es2020',
149
+ target: 'es2020',
150
+ script: 'jsx',
151
+ renderTypeDeclarations: true,
152
+ },
153
+ },
154
+ genericDataSchema: undefined,
155
+ autoGenerateForms: true,
156
+ features: {
157
+ isNonModelSupported: false,
158
+ isRelationshipSupported: false,
159
+ },
160
+ },
161
+ });
128
162
  });
129
163
 
130
164
  it('should not autogenerate forms if transformer v1', async () => {
@@ -141,13 +175,26 @@ describe('can generate components', () => {
141
175
  },
142
176
  });
143
177
  await run(context, 'PostPull');
144
- expect(utilsMock.generateUiBuilderForms).toHaveBeenCalledWith(
145
- expect.anything(),
146
- expect.anything(),
147
- undefined,
148
- false,
149
- expect.anything(),
150
- );
178
+ expect(mockStartCodegenJob).toHaveBeenCalledWith({
179
+ appId: 'testAppId',
180
+ environmentName: 'testEnvName',
181
+ codegenJobToCreate: {
182
+ renderConfig: {
183
+ react: {
184
+ module: 'es2020',
185
+ target: 'es2020',
186
+ script: 'jsx',
187
+ renderTypeDeclarations: true,
188
+ },
189
+ },
190
+ genericDataSchema: undefined,
191
+ autoGenerateForms: false,
192
+ features: {
193
+ isNonModelSupported: false,
194
+ isRelationshipSupported: false,
195
+ },
196
+ },
197
+ });
151
198
  });
152
199
 
153
200
  it('should not autogenerate forms if datastore is not enabled', async () => {
@@ -163,16 +210,29 @@ describe('can generate components', () => {
163
210
  },
164
211
  });
165
212
  await run(context, 'PostPull');
166
- expect(utilsMock.generateUiBuilderForms).toHaveBeenCalledWith(
167
- expect.anything(),
168
- expect.anything(),
169
- undefined,
170
- false,
171
- expect.anything(),
172
- );
213
+ expect(mockStartCodegenJob).toHaveBeenCalledWith({
214
+ appId: 'testAppId',
215
+ environmentName: 'testEnvName',
216
+ codegenJobToCreate: {
217
+ renderConfig: {
218
+ react: {
219
+ module: 'es2020',
220
+ target: 'es2020',
221
+ script: 'jsx',
222
+ renderTypeDeclarations: true,
223
+ },
224
+ },
225
+ genericDataSchema: undefined,
226
+ autoGenerateForms: false,
227
+ features: {
228
+ isNonModelSupported: false,
229
+ isRelationshipSupported: false,
230
+ },
231
+ },
232
+ });
173
233
  });
174
234
 
175
- it('should not autogenerate forms if feature flag isnot enabled', async () => {
235
+ it('should not autogenerate forms if feature flag is not enabled', async () => {
176
236
  isDataStoreEnabledMocked.mockResolvedValue(true);
177
237
  getMetadataPromise.mockReturnValue({
178
238
  features: {
@@ -185,12 +245,25 @@ describe('can generate components', () => {
185
245
  },
186
246
  });
187
247
  await run(context, 'PostPull');
188
- expect(utilsMock.generateUiBuilderForms).toHaveBeenCalledWith(
189
- expect.anything(),
190
- expect.anything(),
191
- undefined,
192
- false,
193
- expect.anything(),
194
- );
248
+ expect(mockStartCodegenJob).toHaveBeenCalledWith({
249
+ appId: 'testAppId',
250
+ environmentName: 'testEnvName',
251
+ codegenJobToCreate: {
252
+ renderConfig: {
253
+ react: {
254
+ module: 'es2020',
255
+ target: 'es2020',
256
+ script: 'jsx',
257
+ renderTypeDeclarations: true,
258
+ },
259
+ },
260
+ genericDataSchema: undefined,
261
+ autoGenerateForms: false,
262
+ features: {
263
+ isNonModelSupported: false,
264
+ isRelationshipSupported: false,
265
+ },
266
+ },
267
+ });
195
268
  });
196
269
  });