@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.
- package/.prettierrc +11 -0
- package/package.json +16 -12
- package/scripts/format-ejs.js +104 -0
- package/src/compile/compileProject.js +40 -9
- package/src/compile/loadSchemas.js +120 -11
- package/src/emit/crud/emitCrudApplicationArtifacts.js +188 -41
- package/src/emit/crud/emitDynamicCrudFlowSchemas.js +34 -18
- package/src/emit/crud/generateCrudApplicationArtifacts.js +14 -6
- package/src/emit/crud/generateDynamicCrudFlowSchemas.js +4 -1
- package/src/emit/crud/templates/CreateEndpoint_Main.ejs +296 -105
- package/src/emit/crud/templates/DeleteEndpoint_Main.ejs +222 -144
- package/src/emit/crud/templates/FlowEndpointBeforeLogical_Main.ejs +22 -6
- package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +134 -43
- package/src/emit/crud/templates/FlowEndpoint_HdrWbs.ejs +51 -31
- package/src/emit/crud/templates/FlowHandler_HdrApi.ejs +53 -45
- package/src/emit/crud/templates/FlowHandler_HdrInv.ejs +28 -26
- package/src/emit/crud/templates/FlowHandler_HdrSqs.ejs +15 -11
- package/src/emit/crud/templates/FlowMain_Wbs.ejs +53 -38
- package/src/emit/crud/templates/GetEndpoint_Main.ejs +6 -3
- package/src/emit/crud/templates/GetRangeEndpoint_Main.ejs +2 -2
- package/src/emit/crud/templates/UpdateEndpoint_Main.ejs +402 -249
- package/src/emit/custom/customFlows.js +68 -28
- package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +520 -123
- package/src/emit/custom/generateCustomFlowApplicationArtifacts.js +28 -8
- package/src/emit/custom/templates/FlowEndpoint_Main.ejs +48 -36
- package/src/emit/custom/templates/FlowStep_Main.ejs +7 -9
- package/src/emit/custom/templates/s3/ConfirmReserved_HdrSqs.ejs +59 -54
- package/src/emit/custom/templates/s3/ConfirmReserved_Main.ejs +33 -23
- package/src/emit/custom/templates/s3/CreateObject_HdrWbs.ejs +30 -23
- package/src/emit/custom/templates/s3/CreateObject_Main.ejs +56 -39
- package/src/emit/custom/templates/s3/CreatePreSignUrl_HdrSqs.ejs +56 -51
- package/src/emit/custom/templates/s3/CreatePreSignUrl_Main.ejs +112 -75
- package/src/emit/custom/templates/s3/FlowHandler_HdrS3.ejs +14 -9
- package/src/emit/custom/templates/s3/ProcessS3File_Main.ejs +11 -8
- package/src/emit/custom/templates/s3/ReservedLimit_HdrSqs.ejs +65 -56
- package/src/emit/custom/templates/s3/ReservedLimit_Main.ejs +74 -52
- package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +58 -14
- package/src/emit/custom/templates/triggerCache/CheckTriggerCache_Main.ejs +12 -17
- package/src/emit/custom/templates/triggerCache/TriggerCacheComplete_Main.ejs +20 -13
- package/src/emit/custom/templates/triggerCache/TriggerCache_Main.ejs +4 -1
- package/src/emit/function/functionYamlArtifact.js +272 -79
- package/src/emit/function/templates/ApiFunction_Yaml.ejs +7 -0
- package/src/emit/function/templates/EventBridgeFunction_Yaml.ejs +6 -0
- package/src/emit/function/templates/InvFunction_Yaml.ejs +5 -0
- package/src/emit/function/templates/S3Function_Yaml.ejs +16 -0
- package/src/emit/function/templates/SqsFunction_Yaml.ejs +10 -0
- package/src/emit/function/templates/WbsFunction_Yaml.ejs +10 -0
- package/src/emit/rbac/emitDynamicRbacFlowSchemas.js +40 -29
- package/src/emit/rbac/emitRbacApplicationArtifacts.js +171 -72
- package/src/emit/rbac/generateCreateTargetRoleHandler.js +6 -4
- package/src/emit/rbac/generateDynamicRbacFlowSchemas.js +8 -2
- package/src/emit/rbac/rbacFlowTag.js +3 -1
- package/src/emit/rbac/templates/CreateTargetRole_HdrSqs.ejs +41 -18
- package/src/emit/rbac/templates/CreateTargetRole_Main.ejs +23 -3
- package/src/emit/rbac/templates/ListRbac_HdrApi.ejs +27 -5
- package/src/emit/rbac/templates/ListRbac_HdrSqs.ejs +41 -8
- package/src/emit/rbac/templates/ListRbac_Main.ejs +26 -6
- package/src/emit/rbac/templates/RbacMutation_Main.ejs +23 -3
- package/src/emit/rbac/templates/UserRbacFlow_HdrSqs.ejs +46 -0
- package/src/emit/rbac/templates/UserRbacFlow_Main.ejs +152 -33
- package/src/emit/rbac/templates/UserRoleMutation_Main.ejs +24 -4
- package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +26 -11
- package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +179 -37
- package/src/emit/relationship/generateDynamicRelationshipFlowSchemas.js +8 -2
- package/src/emit/relationship/generateRelationshipApplicationArtifacts.js +15 -6
- package/src/emit/relationship/templates/ChangeRelationshipComplete_Main.ejs +64 -37
- package/src/emit/relationship/templates/ChangeRelationship_Main.ejs +258 -142
- package/src/emit/relationship/templates/CreateRelationshipComplete_Main.ejs +68 -43
- package/src/emit/relationship/templates/CreateRelationship_Main.ejs +315 -171
- package/src/emit/relationship/templates/DeleteRelationshipComplete_Main.ejs +67 -41
- package/src/emit/relationship/templates/DeleteRelationship_Main.ejs +226 -115
- package/src/emit/relationship/templates/FlowHandler_HdrApi.ejs +41 -33
- package/src/emit/relationship/templates/FlowHandler_HdrDsq.ejs +15 -11
- package/src/emit/relationship/templates/FlowHandler_HdrInv.ejs +28 -26
- package/src/emit/relationship/templates/FlowHandler_HdrSqs.ejs +15 -11
- package/src/emit/relationship/templates/GetRelationshipComplete_Main.ejs +46 -26
- package/src/emit/relationship/templates/GetRelationship_Main.ejs +233 -126
- package/src/emit/relationship/templates/MoveRelationshipComplete_Main.ejs +72 -44
- package/src/emit/relationship/templates/MoveRelationship_Main.ejs +266 -150
- package/src/emit/relationship/templates/UpdateRelationshipComplete_Main.ejs +74 -45
- package/src/emit/relationship/templates/UpdateRelationship_Main.ejs +285 -152
- package/src/emit/resource/emitResourceArtifacts.js +274 -105
- package/src/emit/resource/generateResourceArtifacts.js +15 -6
- package/src/emit/resource/templates/GeneratedLambdaRoleServiceConfig.ejs +139 -0
- package/src/emit/resource/templates/S3Bucket_Yaml.ejs +19 -0
- package/src/emit/resource/templates/S3Subscription_Yaml.ejs +7 -0
- package/src/emit/resource/templates/WebSocketSubscription_Yaml.ejs +7 -0
- package/src/emit/system/emitSystemWebSocketArtifacts.js +61 -165
- package/src/emit/system/templates/WebSocketComplete_HdrSqs.ejs +32 -0
- package/src/emit/system/templates/WebSocketComplete_Main.ejs +46 -0
- package/src/emit/system/templates/WebSocketComplete_Yaml.ejs +19 -0
- package/src/emit/system/templates/WebSocketConnect.ejs +25 -0
- package/src/emit/system/templates/WebSocketConnect_Yaml.ejs +11 -0
- package/src/generate.js +141 -34
- package/src/generateIntTest.js +76 -28
- package/src/generateResourceIntTest.js +35 -12
- package/src/generateResources/IntTest/generateResources/generateResources.js +5 -2
- package/src/generateResources/IntTest/generateResources/templateResources.ejs +18 -30
- package/src/generateResources/IntTest/generateTests/events/events.js +1 -1
- package/src/generateResources/IntTest/generateTests/events/templateEvents.ejs +13 -10
- package/src/generateResources/IntTest/generateTests/generateTemplate.js +2 -2
- package/src/generateResources/IntTest/generateTests/pathIntTest/pathIntTest.js +2 -1
- package/src/generateResources/IntTest/generateTests/pathIntTest/template.ejs +1 -3
- package/src/generateResources/IntTest/generateTests/tests/templateTests.ejs +1 -1
- package/src/generateResources/IntTest/generateTests/tests/tests.js +7 -3
- package/src/generateResources/IntTest/libs/{libs.js → IntTestGenerateLib.js} +34 -23
- package/src/generateResources/IntTest/upload/uploadIntTest.js +33 -19
- package/src/intTestGeneratorShared.js +15 -10
- package/src/output/commitArtifacts.js +99 -39
- package/src/output/mergeHooks.js +24 -10
- package/src/output/validateArtifacts.js +37 -27
- package/src/plan/buildGenerationPlan.js +24 -13
- package/test/core.test.js +116 -49
- package/test/createTargetRoleHandler.test.js +63 -14
- package/test/crudApplicationArtifacts.test.js +128 -23
- package/test/customFlowApplicationArtifacts.test.js +391 -84
- package/test/dynamicCrudFlowSchemas.test.js +74 -26
- package/test/dynamicRbacFlowSchemas.test.js +63 -20
- package/test/dynamicRelationshipFlowSchemas.test.js +65 -18
- package/test/functionYamlArtifact.test.js +67 -10
- package/test/intTestApi.test.js +9 -10
- package/test/publicApi.test.js +184 -44
- package/test/relationshipApplicationArtifacts.test.js +90 -19
- package/test/resourceArtifacts.test.js +183 -33
- package/docs/test.png +0 -0
- package/src/emit/rbac/templates/UserRbacFlow_HdrInv.ejs +0 -10
- package/src/emit/relationship/dynamicRelationshipFlowSchemaTemplate.js +0 -11
- /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(() =>
|
|
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,
|
|
17
|
-
const resources = await readFile(
|
|
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 [
|
|
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(
|
|
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(
|
|
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(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
71
|
-
|
|
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(
|
|
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(
|
|
84
|
-
|
|
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(
|
|
196
|
+
assert.match(
|
|
197
|
+
role,
|
|
198
|
+
/arn:aws:execute-api:\$\{self:custom\.iz_region\}:\$\{self:custom\.iz_accountId\}:\*\/\*/
|
|
199
|
+
);
|
|
88
200
|
}
|
|
89
|
-
assert.match(
|
|
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(
|
|
95
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|