@izara_project/izara-core-generate-service-code 1.0.73 → 1.0.75

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 (60) hide show
  1. package/package.json +1 -1
  2. package/src/emit/coreFunction/emitCoreFunctionArtifacts.js +3 -0
  3. package/src/emit/coreFunction/templates/InitialSetupConfig.ejs +100 -28
  4. package/src/emit/coreFunction/templates/InitialSetupRunner_uploadSchema.ejs +2 -0
  5. package/src/emit/coreFunction/templates/UploadSchema_Main.ejs +2 -0
  6. package/src/emit/crud/emitCrudApplicationArtifacts.js +2 -2
  7. package/src/emit/crud/emitDynamicCrudFlowSchemas.js +43 -2
  8. package/src/emit/crud/templates/CreateComplete_HdrSqs.ejs +99 -0
  9. package/src/emit/crud/templates/CreateComplete_Main.ejs +188 -0
  10. package/src/emit/crud/templates/DeleteComplete_HdrSqs.ejs +99 -0
  11. package/src/emit/crud/templates/DeleteComplete_Main.ejs +188 -0
  12. package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +1 -1
  13. package/src/emit/crud/templates/UpdateComplete_HdrSqs.ejs +99 -0
  14. package/src/emit/crud/templates/UpdateComplete_Main.ejs +188 -0
  15. package/src/emit/custom/customFlows.js +56 -0
  16. package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +24 -9
  17. package/src/emit/custom/templates/FlowEndpoint_Main.ejs +1 -1
  18. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +2 -1
  19. package/src/emit/function/functionYamlArtifact.js +8 -3
  20. package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +21 -1
  21. package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +1 -1
  22. package/src/emit/relationship/templates/ChangeRelationshipComplete_HdrSqs.ejs +99 -0
  23. package/src/emit/relationship/templates/ChangeRelationshipComplete_Main.ejs +99 -100
  24. package/src/emit/relationship/templates/ChangeRelationship_Main.ejs +5 -14
  25. package/src/emit/relationship/templates/CreateRelationshipComplete_HdrSqs.ejs +99 -0
  26. package/src/emit/relationship/templates/CreateRelationshipComplete_Main.ejs +98 -99
  27. package/src/emit/relationship/templates/CreateRelationship_Main.ejs +7 -16
  28. package/src/emit/relationship/templates/DeleteRelationshipComplete_HdrSqs.ejs +99 -0
  29. package/src/emit/relationship/templates/DeleteRelationshipComplete_Main.ejs +93 -85
  30. package/src/emit/relationship/templates/DeleteRelationship_Main.ejs +6 -24
  31. package/src/emit/relationship/templates/GetRelationshipComplete_HdrSqs.ejs +99 -0
  32. package/src/emit/relationship/templates/GetRelationshipComplete_Main.ejs +10 -4
  33. package/src/emit/relationship/templates/GetRelationship_Main.ejs +2 -20
  34. package/src/emit/relationship/templates/MoveRelationshipComplete_HdrSqs.ejs +99 -0
  35. package/src/emit/relationship/templates/MoveRelationshipComplete_Main.ejs +101 -104
  36. package/src/emit/relationship/templates/MoveRelationship_Main.ejs +6 -15
  37. package/src/emit/relationship/templates/UpdateRelationshipComplete_HdrSqs.ejs +99 -0
  38. package/src/emit/relationship/templates/UpdateRelationshipComplete_Main.ejs +92 -110
  39. package/src/emit/relationship/templates/UpdateRelationship_Main.ejs +6 -15
  40. package/src/emit/resource/emitResourceArtifacts.js +25 -1
  41. package/src/emit/resource/templates/DynamoDBTable_Yaml.ejs +3 -0
  42. package/src/emit/shared/templates/FindData_Main.ejs +1 -1
  43. package/src/emit/shared/templates/FlowHandler_HdrApi.ejs +1 -1
  44. package/src/emit/shared/templates/FlowHandler_HdrDsq.ejs +2 -1
  45. package/src/emit/shared/templates/FlowHandler_HdrInv.ejs +1 -1
  46. package/src/emit/shared/templates/FlowHandler_HdrSqs.ejs +2 -1
  47. package/src/emit/system/emitSystemWebSocketArtifacts.js +54 -2
  48. package/src/emit/system/templates/RegisterComplete_HdrSqs.ejs +64 -0
  49. package/src/emit/system/templates/RegisterComplete_Main.ejs +154 -0
  50. package/src/emit/system/templates/RegisterComplete_Yaml.ejs +17 -0
  51. package/src/emit/system/templates/RegisterWbs_Yaml.ejs +7 -0
  52. package/src/emit/system/templates/Register_HdrWbs.ejs +56 -0
  53. package/src/emit/system/templates/Register_Main.ejs +148 -0
  54. package/src/emit/system/templates/WebSocketComplete_Yaml.ejs +2 -0
  55. package/test/crudApplicationArtifacts.test.js +22 -0
  56. package/test/customFlowApplicationArtifacts.test.js +147 -1
  57. package/test/functionYamlArtifact.test.js +5 -2
  58. package/test/publicApi.test.js +50 -0
  59. package/test/relationshipApplicationArtifacts.test.js +42 -8
  60. package/test/resourceArtifacts.test.js +54 -16
@@ -74,20 +74,54 @@ test('emits relationship action and complete handlers with data-first function Y
74
74
  readFile(
75
75
  join(
76
76
  rootPath,
77
- 'app/src/generatedCode/FlowRelationships/CreateRelationship/source/ProcessCreateRelationship_Main.js'
77
+ 'app/src/generatedCode/FlowRelationships/CreateRelationship/' +
78
+ 'source/ProcessCreateRelationship_Main.js'
78
79
  )
79
80
  )
80
81
  );
81
- assert.match(
82
- await readFile(
83
- join(
84
- rootPath,
85
- 'app/src/generatedCode/FlowRelationships/CreateRelationship/source/CreateRelationship_Main.js'
86
- ),
87
- 'utf8'
82
+ const createMainContent = await readFile(
83
+ join(
84
+ rootPath,
85
+ 'app/src/generatedCode/FlowRelationships/CreateRelationship/' +
86
+ 'source/CreateRelationship_Main.js'
88
87
  ),
88
+ 'utf8'
89
+ );
90
+ assert.match(
91
+ createMainContent,
89
92
  /export default async function createRelationship/
90
93
  );
94
+ assert.match(
95
+ createMainContent,
96
+ /awaitingStepIds\.push\(\{[\s\S]*awaitingStepId:/
97
+ );
98
+ assert.match(
99
+ createMainContent,
100
+ /createAwaitingMultipleSteps\(\s*_izContext,\s*asyncFlowSharedLib\.createPendingStepId/
101
+ );
102
+ assert.doesNotMatch(createMainContent, /const linkTypeId = createLinkTypeId/);
103
+
104
+ const createCompleteContent = await readFile(
105
+ join(
106
+ rootPath,
107
+ 'app/src/generatedCode/FlowRelationships/CreateRelationship/' +
108
+ 'source/CreateRelationshipComplete_Main.js'
109
+ ),
110
+ 'utf8'
111
+ );
112
+ assert.match(
113
+ createCompleteContent,
114
+ /export default async function createRelationshipComplete\(\s*_izContext,\s*requestParams,/
115
+ );
116
+ assert.match(
117
+ createCompleteContent,
118
+ /const {\s*returnValue,\s*parentFlowId,\s*status,\s*errorsFound,\s*graphServiceTag\s*} = requestParams;/
119
+ );
120
+ assert.doesNotMatch(
121
+ createCompleteContent,
122
+ /const linkTypeId = createLinkTypeId/
123
+ );
124
+
91
125
  assert.match(yaml, /CreateRelationshipCompleteHdrSqs:/);
92
126
  });
93
127
 
@@ -27,10 +27,7 @@ test('emits queues, topics, tables, and IAM roles from schema data', async () =>
27
27
  ),
28
28
  'utf8'
29
29
  );
30
- assert.match(
31
- resources,
32
- /SubscriptionOutCreateToUploadReservedLimitHdrSqs:/
33
- );
30
+ assert.match(resources, /SubscriptionOutCreateToUploadReservedLimitHdrSqs:/);
34
31
  assert.match(resources, /TopicArn: !Ref OutCreate/);
35
32
  assert.match(
36
33
  resources,
@@ -45,16 +42,16 @@ test('emits queues, topics, tables, and IAM roles from schema data', async () =>
45
42
  ]) {
46
43
  assert.match(resources, new RegExp(`^ ${queueName}:`, 'm'));
47
44
  }
48
- assert.match(
49
- await readFile(
50
- join(
51
- rootPath,
52
- 'resource/sls_yaml/generatedCode/source/generated-dynamoDB-table.yml'
53
- ),
54
- 'utf8'
45
+ const dynamoYaml = await readFile(
46
+ join(
47
+ rootPath,
48
+ 'resource/sls_yaml/generatedCode/source/generated-dynamoDB-table.yml'
55
49
  ),
56
- /OrdersTable:/
50
+ 'utf8'
57
51
  );
52
+ assert.match(dynamoYaml, /OrdersTable:/);
53
+ assert.match(dynamoYaml, /#<#OrdersTableSetting#>/);
54
+ assert.match(dynamoYaml, /#<#\/OrdersTableSetting#>/);
58
55
  const iam = await readFile(
59
56
  join(
60
57
  rootPath,
@@ -84,10 +81,7 @@ test('emits queues, topics, tables, and IAM roles from schema data', async () =>
84
81
  /RolePermissions|ProcessCreateTargetRoleHdrSqs/
85
82
  );
86
83
  // Per-object RBAC flow queue (e.g. OrderRbacFlowHdrSqs from Order with rbac add-on)
87
- assert.match(
88
- roleBlock(iam, 'FlowRbacRole'),
89
- /OrderRbacFlowHdrSqs/
90
- );
84
+ assert.match(roleBlock(iam, 'FlowRbacRole'), /OrderRbacFlowHdrSqs/);
91
85
  assert.match(resources, /^ CreateRelationshipHdrSqs:/m);
92
86
  assert.equal(
93
87
  (resources.match(/^ CreateRelationshipHdrSqs:/gm) ?? []).length,
@@ -219,6 +213,50 @@ test('scopes stored-cache permissions to the flow object table', async () => {
219
213
  assert.doesNotMatch(role, /Orders|WebSocketTask/);
220
214
  });
221
215
 
216
+ test('emits DynamoDB tables and hooks defined in flowSchemas storageResources', async () => {
217
+ const rootPath = await createProject();
218
+ await writeFile(
219
+ join(rootPath, 'app/src/schemas/FlowSchemas/FlowWithTable.js'),
220
+ "export default { flowTag: 'tableFlow', event: ['ownTopic'], " +
221
+ "storageResources: { main: { storageType: 'dynamoDB', " +
222
+ "tableName: 'FlowCustomTable' } }, identifiers: " +
223
+ "[{ type: 'partitionKey', fieldName: 'flowKey' }] };\n"
224
+ );
225
+
226
+ await generateResourceArtifacts(rootPath);
227
+
228
+ const dynamoYaml = await readFile(
229
+ join(
230
+ rootPath,
231
+ 'resource/sls_yaml/generatedCode/source/generated-dynamoDB-table.yml'
232
+ ),
233
+ 'utf8'
234
+ );
235
+ assert.match(dynamoYaml, /FlowCustomTableTable:/);
236
+ assert.match(dynamoYaml, /#<#FlowCustomTableTableSetting#>/);
237
+ assert.match(dynamoYaml, /#<#\/FlowCustomTableTableSetting#>/);
238
+ });
239
+
240
+ test('emits IAM role for generated DSQ flows in generate-shared-resource.yml', async () => {
241
+ const rootPath = await createProject();
242
+ const schemas = join(rootPath, 'app/src/schemas');
243
+ await writeFile(
244
+ join(schemas, 'FlowSchemas/GeneratedDsq.js'),
245
+ "export default { flowTag: 'generatedDsq', generatedCodeConfig: {}, event: ['dsq'] };\n"
246
+ );
247
+ await generateResourceArtifacts(rootPath);
248
+
249
+ const iam = await readFile(
250
+ join(
251
+ rootPath,
252
+ 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'
253
+ ),
254
+ 'utf8'
255
+ );
256
+ const role = roleBlock(iam, 'GeneratedDsqRole');
257
+ assert.match(role, /GeneratedDsqHdrDsq/);
258
+ });
259
+
222
260
  function roleBlock(iam, roleName) {
223
261
  const match = iam.match(
224
262
  new RegExp(