@izara_project/izara-core-generate-service-code 1.0.67 → 1.0.69

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 (128) hide show
  1. package/.prettierrc +11 -0
  2. package/package.json +16 -12
  3. package/scripts/format-ejs.js +104 -0
  4. package/src/compile/compileProject.js +40 -9
  5. package/src/compile/loadSchemas.js +120 -11
  6. package/src/emit/crud/emitCrudApplicationArtifacts.js +188 -41
  7. package/src/emit/crud/emitDynamicCrudFlowSchemas.js +34 -18
  8. package/src/emit/crud/generateCrudApplicationArtifacts.js +14 -6
  9. package/src/emit/crud/generateDynamicCrudFlowSchemas.js +4 -1
  10. package/src/emit/crud/templates/CreateEndpoint_Main.ejs +296 -105
  11. package/src/emit/crud/templates/DeleteEndpoint_Main.ejs +222 -144
  12. package/src/emit/crud/templates/FlowEndpointBeforeLogical_Main.ejs +22 -6
  13. package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +134 -43
  14. package/src/emit/crud/templates/FlowEndpoint_HdrWbs.ejs +51 -31
  15. package/src/emit/crud/templates/FlowHandler_HdrApi.ejs +53 -45
  16. package/src/emit/crud/templates/FlowHandler_HdrInv.ejs +28 -26
  17. package/src/emit/crud/templates/FlowHandler_HdrSqs.ejs +15 -11
  18. package/src/emit/crud/templates/FlowMain_Wbs.ejs +53 -38
  19. package/src/emit/crud/templates/GetEndpoint_Main.ejs +6 -3
  20. package/src/emit/crud/templates/GetRangeEndpoint_Main.ejs +2 -2
  21. package/src/emit/crud/templates/UpdateEndpoint_Main.ejs +402 -249
  22. package/src/emit/custom/customFlows.js +68 -28
  23. package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +520 -123
  24. package/src/emit/custom/generateCustomFlowApplicationArtifacts.js +28 -8
  25. package/src/emit/custom/templates/FlowEndpoint_Main.ejs +48 -36
  26. package/src/emit/custom/templates/FlowStep_Main.ejs +7 -9
  27. package/src/emit/custom/templates/s3/ConfirmReserved_HdrSqs.ejs +59 -54
  28. package/src/emit/custom/templates/s3/ConfirmReserved_Main.ejs +33 -23
  29. package/src/emit/custom/templates/s3/CreateObject_HdrWbs.ejs +30 -23
  30. package/src/emit/custom/templates/s3/CreateObject_Main.ejs +56 -39
  31. package/src/emit/custom/templates/s3/CreatePreSignUrl_HdrSqs.ejs +56 -51
  32. package/src/emit/custom/templates/s3/CreatePreSignUrl_Main.ejs +112 -75
  33. package/src/emit/custom/templates/s3/FlowHandler_HdrS3.ejs +14 -9
  34. package/src/emit/custom/templates/s3/ProcessS3File_Main.ejs +11 -8
  35. package/src/emit/custom/templates/s3/ReservedLimit_HdrSqs.ejs +65 -56
  36. package/src/emit/custom/templates/s3/ReservedLimit_Main.ejs +74 -52
  37. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +58 -14
  38. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_Main.ejs +12 -17
  39. package/src/emit/custom/templates/triggerCache/TriggerCacheComplete_Main.ejs +20 -13
  40. package/src/emit/custom/templates/triggerCache/TriggerCache_Main.ejs +4 -1
  41. package/src/emit/function/functionYamlArtifact.js +272 -79
  42. package/src/emit/function/templates/ApiFunction_Yaml.ejs +7 -0
  43. package/src/emit/function/templates/EventBridgeFunction_Yaml.ejs +6 -0
  44. package/src/emit/function/templates/InvFunction_Yaml.ejs +5 -0
  45. package/src/emit/function/templates/S3Function_Yaml.ejs +16 -0
  46. package/src/emit/function/templates/SqsFunction_Yaml.ejs +10 -0
  47. package/src/emit/function/templates/WbsFunction_Yaml.ejs +10 -0
  48. package/src/emit/rbac/emitDynamicRbacFlowSchemas.js +40 -29
  49. package/src/emit/rbac/emitRbacApplicationArtifacts.js +171 -72
  50. package/src/emit/rbac/generateCreateTargetRoleHandler.js +6 -4
  51. package/src/emit/rbac/generateDynamicRbacFlowSchemas.js +8 -2
  52. package/src/emit/rbac/rbacFlowTag.js +3 -1
  53. package/src/emit/rbac/templates/CreateTargetRole_HdrSqs.ejs +41 -18
  54. package/src/emit/rbac/templates/CreateTargetRole_Main.ejs +23 -3
  55. package/src/emit/rbac/templates/ListRbac_HdrApi.ejs +27 -5
  56. package/src/emit/rbac/templates/ListRbac_HdrSqs.ejs +41 -8
  57. package/src/emit/rbac/templates/ListRbac_Main.ejs +26 -6
  58. package/src/emit/rbac/templates/RbacMutation_Main.ejs +23 -3
  59. package/src/emit/rbac/templates/UserRbacFlow_HdrSqs.ejs +46 -0
  60. package/src/emit/rbac/templates/UserRbacFlow_Main.ejs +152 -33
  61. package/src/emit/rbac/templates/UserRoleMutation_Main.ejs +24 -4
  62. package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +26 -11
  63. package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +179 -37
  64. package/src/emit/relationship/generateDynamicRelationshipFlowSchemas.js +8 -2
  65. package/src/emit/relationship/generateRelationshipApplicationArtifacts.js +15 -6
  66. package/src/emit/relationship/templates/ChangeRelationshipComplete_Main.ejs +64 -37
  67. package/src/emit/relationship/templates/ChangeRelationship_Main.ejs +258 -142
  68. package/src/emit/relationship/templates/CreateRelationshipComplete_Main.ejs +68 -43
  69. package/src/emit/relationship/templates/CreateRelationship_Main.ejs +315 -171
  70. package/src/emit/relationship/templates/DeleteRelationshipComplete_Main.ejs +67 -41
  71. package/src/emit/relationship/templates/DeleteRelationship_Main.ejs +226 -115
  72. package/src/emit/relationship/templates/FlowHandler_HdrApi.ejs +41 -33
  73. package/src/emit/relationship/templates/FlowHandler_HdrDsq.ejs +15 -11
  74. package/src/emit/relationship/templates/FlowHandler_HdrInv.ejs +28 -26
  75. package/src/emit/relationship/templates/FlowHandler_HdrSqs.ejs +15 -11
  76. package/src/emit/relationship/templates/GetRelationshipComplete_Main.ejs +46 -26
  77. package/src/emit/relationship/templates/GetRelationship_Main.ejs +233 -126
  78. package/src/emit/relationship/templates/MoveRelationshipComplete_Main.ejs +72 -44
  79. package/src/emit/relationship/templates/MoveRelationship_Main.ejs +266 -150
  80. package/src/emit/relationship/templates/UpdateRelationshipComplete_Main.ejs +74 -45
  81. package/src/emit/relationship/templates/UpdateRelationship_Main.ejs +285 -152
  82. package/src/emit/resource/emitResourceArtifacts.js +274 -105
  83. package/src/emit/resource/generateResourceArtifacts.js +15 -6
  84. package/src/emit/resource/templates/GeneratedLambdaRoleServiceConfig.ejs +139 -0
  85. package/src/emit/resource/templates/S3Bucket_Yaml.ejs +19 -0
  86. package/src/emit/resource/templates/S3Subscription_Yaml.ejs +7 -0
  87. package/src/emit/resource/templates/WebSocketSubscription_Yaml.ejs +7 -0
  88. package/src/emit/system/emitSystemWebSocketArtifacts.js +61 -165
  89. package/src/emit/system/templates/WebSocketComplete_HdrSqs.ejs +32 -0
  90. package/src/emit/system/templates/WebSocketComplete_Main.ejs +46 -0
  91. package/src/emit/system/templates/WebSocketComplete_Yaml.ejs +19 -0
  92. package/src/emit/system/templates/WebSocketConnect.ejs +25 -0
  93. package/src/emit/system/templates/WebSocketConnect_Yaml.ejs +11 -0
  94. package/src/generate.js +141 -34
  95. package/src/generateIntTest.js +76 -28
  96. package/src/generateResourceIntTest.js +35 -12
  97. package/src/generateResources/IntTest/generateResources/generateResources.js +5 -2
  98. package/src/generateResources/IntTest/generateResources/templateResources.ejs +18 -30
  99. package/src/generateResources/IntTest/generateTests/events/events.js +1 -1
  100. package/src/generateResources/IntTest/generateTests/events/templateEvents.ejs +13 -10
  101. package/src/generateResources/IntTest/generateTests/generateTemplate.js +2 -2
  102. package/src/generateResources/IntTest/generateTests/pathIntTest/pathIntTest.js +2 -1
  103. package/src/generateResources/IntTest/generateTests/pathIntTest/template.ejs +1 -3
  104. package/src/generateResources/IntTest/generateTests/tests/templateTests.ejs +1 -1
  105. package/src/generateResources/IntTest/generateTests/tests/tests.js +7 -3
  106. package/src/generateResources/IntTest/libs/{libs.js → IntTestGenerateLib.js} +34 -23
  107. package/src/generateResources/IntTest/upload/uploadIntTest.js +33 -19
  108. package/src/intTestGeneratorShared.js +15 -10
  109. package/src/output/commitArtifacts.js +99 -39
  110. package/src/output/mergeHooks.js +24 -10
  111. package/src/output/validateArtifacts.js +37 -27
  112. package/src/plan/buildGenerationPlan.js +24 -13
  113. package/test/core.test.js +116 -49
  114. package/test/createTargetRoleHandler.test.js +63 -14
  115. package/test/crudApplicationArtifacts.test.js +128 -23
  116. package/test/customFlowApplicationArtifacts.test.js +391 -84
  117. package/test/dynamicCrudFlowSchemas.test.js +74 -26
  118. package/test/dynamicRbacFlowSchemas.test.js +63 -20
  119. package/test/dynamicRelationshipFlowSchemas.test.js +65 -18
  120. package/test/functionYamlArtifact.test.js +67 -10
  121. package/test/intTestApi.test.js +9 -10
  122. package/test/publicApi.test.js +184 -44
  123. package/test/relationshipApplicationArtifacts.test.js +90 -19
  124. package/test/resourceArtifacts.test.js +183 -33
  125. package/docs/test.png +0 -0
  126. package/src/emit/rbac/templates/UserRbacFlow_HdrInv.ejs +0 -10
  127. package/src/emit/relationship/dynamicRelationshipFlowSchemaTemplate.js +0 -11
  128. /package/docs/{test.mmd → TriggeredCacheFlow.mmd} +0 -0
@@ -4,56 +4,137 @@ import { tmpdir } from 'node:os';
4
4
  import { join } from 'node:path';
5
5
  import test, { after } from 'node:test';
6
6
 
7
+ process.env.NODE_ENV = 'test';
8
+
7
9
  import { generateResourceArtifacts } from '../src/emit/resource/generateResourceArtifacts.js';
8
10
 
9
11
  const roots = new Set();
10
- after(() => Promise.all([...roots].map(root => rm(root, { recursive: true, force: true }))));
12
+ after(() =>
13
+ Promise.all(
14
+ [...roots].map((root) => rm(root, { recursive: true, force: true }))
15
+ )
16
+ );
11
17
 
12
18
  test('emits queues, topics, tables, and IAM roles from schema data', async () => {
13
19
  const rootPath = await createProject();
14
20
  const result = await generateResourceArtifacts(rootPath);
15
21
 
16
- assert.equal(result.files.length, 4);
17
- const resources = await readFile(join(rootPath, 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml'), 'utf8');
22
+ assert.equal(result.files.length, 5);
23
+ const resources = await readFile(
24
+ join(
25
+ rootPath,
26
+ 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml'
27
+ ),
28
+ 'utf8'
29
+ );
30
+ assert.match(
31
+ resources,
32
+ /SubscriptionOutCreateToUploadReservedLimitHdrSqs:/
33
+ );
34
+ assert.match(resources, /TopicArn: !Ref OutCreate/);
35
+ assert.match(
36
+ resources,
37
+ /Endpoint: "arn:aws:sqs:\${self:custom\.iz_region}:\${self:custom\.iz_accountId}:\${self:custom\.iz_resourcePrefix}UploadReservedLimitHdrSqs"/
38
+ );
18
39
  assert.match(resources, /InCreate:/);
19
- for (const queueName of ['FindDataHdrSqs', 'ProcessLogicalHdrSqs', 'PaginateProcessLogicalHdrDsq', 'PaginateProcessLogicalHdrSqs']) {
40
+ for (const queueName of [
41
+ 'FindDataHdrSqs',
42
+ 'ProcessLogicalHdrSqs',
43
+ 'PaginateProcessLogicalHdrDsq',
44
+ 'PaginateProcessLogicalHdrSqs'
45
+ ]) {
20
46
  assert.match(resources, new RegExp(`^ ${queueName}:`, 'm'));
21
47
  }
22
48
  assert.match(
23
- await readFile(join(rootPath, 'resource/sls_yaml/generatedCode/source/generated-dynamoDB-table.yml'), 'utf8'),
49
+ await readFile(
50
+ join(
51
+ rootPath,
52
+ 'resource/sls_yaml/generatedCode/source/generated-dynamoDB-table.yml'
53
+ ),
54
+ 'utf8'
55
+ ),
24
56
  /OrdersTable:/
25
57
  );
26
- const iam = await readFile(join(rootPath, 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'), 'utf8');
58
+ const iam = await readFile(
59
+ join(
60
+ rootPath,
61
+ 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'
62
+ ),
63
+ 'utf8'
64
+ );
27
65
  assert.match(iam, /FlowObjectsRole:/);
28
66
  assert.match(iam, /FlowRelationshipRole:/);
29
67
  assert.match(iam, /FlowRbacRole:/);
30
68
  assert.match(iam, /sqs:ReceiveMessage/);
31
69
  assert.match(iam, /sns:Publish/);
32
- assert.doesNotMatch(roleBlock(iam, 'WebSocketMainRole'), /Orders|RolePermissions|CreateHdrSqs/);
33
- assert.match(roleBlock(iam, 'WebSocketMainRole'), /UserUploadRecords|WebSocketTask|WebSocketCompleteHdrSqs/);
34
- assert.doesNotMatch(roleBlock(iam, 'FlowRbacRole'), /Orders|ProcessCreateRelationshipHdrSqs/);
35
- assert.match(roleBlock(iam, 'FlowRbacRole'), /RolePermissions|ProcessCreateTargetRoleHdrSqs/);
70
+ assert.doesNotMatch(
71
+ roleBlock(iam, 'WebSocketMainRole'),
72
+ /Orders|RolePermissions|CreateHdrSqs/
73
+ );
74
+ assert.match(
75
+ roleBlock(iam, 'WebSocketMainRole'),
76
+ /UserUploadRecords|WebSocketTask|WebSocketCompleteHdrSqs/
77
+ );
78
+ assert.doesNotMatch(
79
+ roleBlock(iam, 'FlowRbacRole'),
80
+ /Orders|ProcessCreateRelationshipHdrSqs/
81
+ );
82
+ assert.match(
83
+ roleBlock(iam, 'FlowRbacRole'),
84
+ /RolePermissions|ProcessCreateTargetRoleHdrSqs/
85
+ );
36
86
  assert.match(resources, /^ CreateRelationshipHdrSqs:/m);
37
- assert.equal((resources.match(/^ CreateRelationshipHdrSqs:/gm) ?? []).length, 1);
87
+ assert.equal(
88
+ (resources.match(/^ CreateRelationshipHdrSqs:/gm) ?? []).length,
89
+ 1
90
+ );
38
91
  assert.match(resources, /^ CreateRelationshipCompleteHdrSqs:/m);
39
92
  assert.match(resources, /^ GetRelationshipHdrDsq:/m);
40
- assert.doesNotMatch(resources, /Process(?:Create|Update|Delete|Get|Change|Move)Relationship/);
93
+ assert.doesNotMatch(
94
+ resources,
95
+ /Process(?:Create|Update|Delete|Get|Change|Move)Relationship/
96
+ );
41
97
  const relationshipRole = roleBlock(iam, 'FlowRelationshipRole');
42
98
  assert.match(relationshipRole, /CreateRelationshipHdrSqs/);
43
99
  assert.match(relationshipRole, /CreateRelationshipCompleteHdrSqs/);
44
100
  assert.match(relationshipRole, /GetRelationshipHdrDsq/);
45
- assert.doesNotMatch(relationshipRole, /Process(?:Create|Update|Delete|Get|Change|Move)Relationship/);
101
+ assert.doesNotMatch(
102
+ relationshipRole,
103
+ /Process(?:Create|Update|Delete|Get|Change|Move)Relationship/
104
+ );
46
105
  assert.match(roleBlock(iam, 'RegisterRole'), /s3:GetObject/);
47
106
  assert.doesNotMatch(roleBlock(iam, 'RegisterRole'), /dynamodb:|sqs:|sns:/);
48
- assert.doesNotMatch(iam, /s3:GetObjectVersion|s3:ListBucket|sqs:DeleteMessageBatch|sqs:GetQueueUrl/);
107
+ assert.doesNotMatch(
108
+ iam,
109
+ /s3:GetObjectVersion|s3:ListBucket|sqs:DeleteMessageBatch|sqs:GetQueueUrl/
110
+ );
49
111
  assert.match(iam, /#<#\/\w+StatementHookCode#>\n\n \w+Role:/);
112
+
113
+ const lambdaRoleConfig = await readFile(
114
+ join(
115
+ rootPath,
116
+ 'app/initial_setup/generatedCode/source/generatedLambdaRoleServiceConfig.js'
117
+ ),
118
+ 'utf8'
119
+ );
120
+ assert.match(lambdaRoleConfig, /roleName: 'FlowObjects'/);
121
+ assert.match(lambdaRoleConfig, /roleName: 'ProcFindData'/);
122
+ assert.match(lambdaRoleConfig, /roleName: 'FlowRelationship'/);
123
+ assert.doesNotMatch(lambdaRoleConfig, /roleName: 'FlowObjectsRole'/);
124
+ assert.doesNotMatch(lambdaRoleConfig, /roleName: 'ProcFindDataRole'/);
125
+ assert.doesNotMatch(lambdaRoleConfig, /roleName: 'FlowRelationshipRole'/);
126
+
50
127
  for (const filePath of [
51
128
  'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml',
52
129
  'resource/sls_yaml/generatedCode/source/generated-sns-out.yml',
53
130
  'resource/sls_yaml/generatedCode/source/generated-dynamoDB-table.yml',
54
- 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'
131
+ 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml',
132
+ 'app/initial_setup/generatedCode/source/generatedLambdaRoleServiceConfig.js'
55
133
  ]) {
56
- assert.doesNotMatch(await readFile(join(rootPath, filePath), 'utf8'), /\n\n$/);
134
+ assert.doesNotMatch(
135
+ await readFile(join(rootPath, filePath), 'utf8'),
136
+ /\n\n$/
137
+ );
57
138
  }
58
139
  });
59
140
 
@@ -67,8 +148,17 @@ test('emits one before-logical queue for flows that share an action', async () =
67
148
 
68
149
  await generateResourceArtifacts(rootPath);
69
150
 
70
- const resources = await readFile(join(rootPath, 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml'), 'utf8');
71
- assert.equal((resources.match(/^ CreateBeforeLogicalHdrSqs:/gm) ?? []).length, 1);
151
+ const resources = await readFile(
152
+ join(
153
+ rootPath,
154
+ 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml'
155
+ ),
156
+ 'utf8'
157
+ );
158
+ assert.equal(
159
+ (resources.match(/^ CreateBeforeLogicalHdrSqs:/gm) ?? []).length,
160
+ 1
161
+ );
72
162
  assert.match(resources, /SubscriptionOutFirstToCreateBeforeLogical:/);
73
163
  assert.match(resources, /SubscriptionOutSecondToCreateBeforeLogical:/);
74
164
  });
@@ -77,45 +167,105 @@ test('emits the shared WebSocket completion queue and output-topic subscriptions
77
167
  const rootPath = await createProject();
78
168
  await generateResourceArtifacts(rootPath);
79
169
 
80
- const resources = await readFile(join(rootPath, 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml'), 'utf8');
170
+ const resources = await readFile(
171
+ join(
172
+ rootPath,
173
+ 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml'
174
+ ),
175
+ 'utf8'
176
+ );
81
177
  assert.match(resources, /^ WebSocketCompleteHdrSqs:/m);
82
178
  assert.match(resources, /SubscriptionToOutCustomWebSocketComplete:/);
83
- const iam = await readFile(join(rootPath, 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'), 'utf8');
84
- for (const roleName of ['WebSocketMainRole', 'FlowObjectsRole', 'FlowRelationshipRole', 'FlowRbacRole', 'CustomRole', 'UploadRole']) {
179
+ const iam = await readFile(
180
+ join(
181
+ rootPath,
182
+ 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'
183
+ ),
184
+ 'utf8'
185
+ );
186
+ for (const roleName of [
187
+ 'WebSocketMainRole',
188
+ 'FlowObjectsRole',
189
+ 'FlowRelationshipRole',
190
+ 'FlowRbacRole',
191
+ 'CustomRole',
192
+ 'UploadRole'
193
+ ]) {
85
194
  const role = roleBlock(iam, roleName);
86
195
  assert.match(role, /execute-api:ManageConnections/);
87
- assert.match(role, /arn:aws:execute-api:\$\{self:custom\.iz_region\}:\$\{self:custom\.iz_accountId\}:\*\/\*/);
196
+ assert.match(
197
+ role,
198
+ /arn:aws:execute-api:\$\{self:custom\.iz_region\}:\$\{self:custom\.iz_accountId\}:\*\/\*/
199
+ );
88
200
  }
89
- assert.match(resources, /SubscriptionToOutCreateRelationshipWebSocketComplete:/);
201
+ assert.match(
202
+ resources,
203
+ /SubscriptionToOutCreateRelationshipWebSocketComplete:/
204
+ );
90
205
  });
91
206
 
92
207
  test('scopes stored-cache permissions to the flow object table', async () => {
93
208
  const rootPath = await createProject();
94
- await writeFile(join(rootPath, 'app/src/schemas/ObjectSchemas/Cache.js'), "export default { objectType: 'cache', storageResources: { main: { storageType: 'dynamoDB', tableName: 'CurrentData' } } };\n");
95
- await writeFile(join(rootPath, 'app/src/schemas/FlowSchemas/Cache.js'), "export default { flowTag: 'cacheFlow', event: ['lambdaSyncApi'], statusType: 'storedCache', objType: { objectType: 'cache' } };\n");
209
+ await writeFile(
210
+ join(rootPath, 'app/src/schemas/ObjectSchemas/Cache.js'),
211
+ "export default { objectType: 'cache', storageResources: { main: { storageType: 'dynamoDB', tableName: 'CurrentData' } } };\n"
212
+ );
213
+ await writeFile(
214
+ join(rootPath, 'app/src/schemas/FlowSchemas/Cache.js'),
215
+ "export default { flowTag: 'cacheFlow', event: ['lambdaSyncApi'], statusType: 'storedCache', objType: { objectType: 'cache' } };\n"
216
+ );
96
217
 
97
218
  await generateResourceArtifacts(rootPath);
98
219
 
99
- const iam = await readFile(join(rootPath, 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'), 'utf8');
220
+ const iam = await readFile(
221
+ join(
222
+ rootPath,
223
+ 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'
224
+ ),
225
+ 'utf8'
226
+ );
100
227
  const role = roleBlock(iam, 'CacheFlowRole');
101
228
  assert.match(role, /CurrentData/);
102
229
  assert.doesNotMatch(role, /Orders|WebSocketTask/);
103
230
  });
104
231
 
105
232
  function roleBlock(iam, roleName) {
106
- const match = iam.match(new RegExp(`^ ${roleName}:\\n(?:(?!^ [A-Za-z][A-Za-z0-9]*Role:\\n)[\\s\\S])*`, 'm'));
233
+ const match = iam.match(
234
+ new RegExp(
235
+ `^ ${roleName}:\\n(?:(?!^ [A-Za-z][A-Za-z0-9]*Role:\\n)[\\s\\S])*`,
236
+ 'm'
237
+ )
238
+ );
107
239
  assert.ok(match, `Missing ${roleName} in generated IAM`);
108
240
  return match[0];
109
241
  }
110
242
 
111
243
  async function createProject() {
112
- const rootPath = await mkdtemp(join(tmpdir(), 'generate-service-code-v2-resource-'));
244
+ const rootPath = await mkdtemp(
245
+ join(tmpdir(), 'generate-service-code-v2-resource-')
246
+ );
113
247
  roots.add(rootPath);
114
248
  const schemas = join(rootPath, 'app/src/schemas');
115
- await Promise.all(['ObjectSchemas', 'RelationshipSchemas', 'FlowSchemas'].map(directory => mkdir(join(schemas, directory), { recursive: true })));
116
- await writeFile(join(schemas, 'ObjectSchemas/Order.js'), "export default { objectType: 'order', generatedBy: 'userGenerated', addOnDataStructure: [{ type: 'rbac' }], identifiers: [{ type: 'partitionKey', fieldName: 'orderId' }], storageResources: { main: { storageType: 'dynamoDB', tableName: 'Orders' } } };\n");
117
- await writeFile(join(schemas, 'RelationshipSchemas/OrderCustomer.js'), "export default { relationshipTag: 'orderCustomer', links: [] };\n");
118
- await writeFile(join(schemas, 'FlowSchemas/Custom.js'), "export default { flowTag: 'custom', event: ['ownTopic'], outputTopic: true };\n");
119
- await writeFile(join(schemas, 'FlowSchemas/Upload.js'), "export default { flowTag: 'upload', event: ['s3'] };\n");
249
+ await Promise.all(
250
+ ['ObjectSchemas', 'RelationshipSchemas', 'FlowSchemas'].map((directory) =>
251
+ mkdir(join(schemas, directory), { recursive: true })
252
+ )
253
+ );
254
+ await writeFile(
255
+ join(schemas, 'ObjectSchemas/Order.js'),
256
+ "export default { objectType: 'order', generatedBy: 'userGenerated', addOnDataStructure: [{ type: 'rbac' }], identifiers: [{ type: 'partitionKey', fieldName: 'orderId' }], storageResources: { main: { storageType: 'dynamoDB', tableName: 'Orders' } } };\n"
257
+ );
258
+ await writeFile(
259
+ join(schemas, 'RelationshipSchemas/OrderCustomer.js'),
260
+ "export default { relationshipTag: 'orderCustomer', links: [] };\n"
261
+ );
262
+ await writeFile(
263
+ join(schemas, 'FlowSchemas/Custom.js'),
264
+ "export default { flowTag: 'custom', event: ['ownTopic'], outputTopic: true };\n"
265
+ );
266
+ await writeFile(
267
+ join(schemas, 'FlowSchemas/Upload.js'),
268
+ "export default { flowTag: 'upload', event: ['s3'], s3Subscription: { topicName: 'OutCreate', queueName: 'UploadReservedLimitHdrSqs' } };\n"
269
+ );
120
270
  return rootPath;
121
271
  }
package/docs/test.png DELETED
Binary file
@@ -1,10 +0,0 @@
1
- import { middlewareHandler as middleware } from '@izara_project/izara-middleware';
2
- import callingFlowSharedLib from '@izara_project/izara-core-library-calling-flow';
3
- import Process<%- flowTag %> from './Process<%- flowTag %>_Main.js';
4
-
5
- middleware.setValidatorSchema({});
6
- export const main = middleware.wrap(async event => Process<%- flowTag %>(
7
- event._izContext,
8
- event,
9
- callingFlowSharedLib.addCallingFlowToPassOnProperties(event)
10
- ));
@@ -1,11 +0,0 @@
1
- export function renderDynamicRelationshipFlowSchema(action, flow) {
2
- return [
3
- '/**',
4
- ' * GENERATED DYNAMIC RELATIONSHIP FLOW SCHEMA',
5
- ` * Action: ${action}`,
6
- ' * Description: Handles dynamic relationship actions for all allowed RelationshipTypes via SQS/DSQ',
7
- ' */',
8
- `export default ${JSON.stringify(flow, null, 2)};`,
9
- ''
10
- ].join('\n');
11
- }
File without changes