@izara_project/izara-core-generate-service-code 1.0.66 → 1.0.68

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 (90) hide show
  1. package/.prettierrc +11 -0
  2. package/docs/TriggeredCache Flow.drawio +193 -0
  3. package/docs/TriggeredCacheFlow.mmd +47 -0
  4. package/package.json +16 -12
  5. package/scripts/format-ejs.js +105 -0
  6. package/src/compile/compileProject.js +16 -1
  7. package/src/compile/loadSchemas.js +108 -1
  8. package/src/emit/crud/emitCrudApplicationArtifacts.js +9 -5
  9. package/src/emit/crud/emitDynamicCrudFlowSchemas.js +1 -2
  10. package/src/emit/crud/templates/CreateEndpoint_Main.ejs +300 -109
  11. package/src/emit/crud/templates/DeleteEndpoint_Main.ejs +221 -143
  12. package/src/emit/crud/templates/FlowEndpointBeforeLogical_Main.ejs +22 -6
  13. package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +150 -38
  14. package/src/emit/crud/templates/FlowEndpoint_HdrWbs.ejs +51 -31
  15. package/src/emit/crud/templates/FlowHandler_HdrApi.ejs +57 -31
  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 +407 -252
  22. package/src/emit/custom/customFlows.js +112 -31
  23. package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +89 -77
  24. package/src/emit/custom/templates/FlowEndpoint_Main.ejs +49 -37
  25. package/src/emit/custom/templates/FlowStep_Main.ejs +7 -9
  26. package/src/emit/custom/templates/s3/ConfirmReserved_HdrSqs.ejs +59 -54
  27. package/src/emit/custom/templates/s3/ConfirmReserved_Main.ejs +33 -23
  28. package/src/emit/custom/templates/s3/CreateObject_HdrWbs.ejs +30 -23
  29. package/src/emit/custom/templates/s3/CreateObject_Main.ejs +56 -39
  30. package/src/emit/custom/templates/s3/CreatePreSignUrl_HdrSqs.ejs +56 -51
  31. package/src/emit/custom/templates/s3/CreatePreSignUrl_Main.ejs +112 -75
  32. package/src/emit/custom/templates/s3/FlowHandler_HdrS3.ejs +12 -7
  33. package/src/emit/custom/templates/s3/ProcessS3File_Main.ejs +11 -8
  34. package/src/emit/custom/templates/s3/ReservedLimit_HdrSqs.ejs +64 -55
  35. package/src/emit/custom/templates/s3/ReservedLimit_Main.ejs +74 -52
  36. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +58 -14
  37. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_Main.ejs +12 -17
  38. package/src/emit/custom/templates/triggerCache/TriggerCacheComplete_Main.ejs +20 -13
  39. package/src/emit/custom/templates/triggerCache/TriggerCache_Main.ejs +4 -1
  40. package/src/emit/function/functionYamlArtifact.js +46 -12
  41. package/src/emit/rbac/emitDynamicRbacFlowSchemas.js +28 -15
  42. package/src/emit/rbac/emitRbacApplicationArtifacts.js +179 -66
  43. package/src/emit/rbac/templates/CreateTargetRole_HdrSqs.ejs +41 -18
  44. package/src/emit/rbac/templates/CreateTargetRole_Main.ejs +23 -3
  45. package/src/emit/rbac/templates/ListRbac_HdrApi.ejs +27 -5
  46. package/src/emit/rbac/templates/ListRbac_HdrSqs.ejs +41 -8
  47. package/src/emit/rbac/templates/ListRbac_Main.ejs +26 -6
  48. package/src/emit/rbac/templates/RbacMutation_Main.ejs +23 -3
  49. package/src/emit/rbac/templates/UserRbacFlow_HdrSqs.ejs +46 -0
  50. package/src/emit/rbac/templates/UserRbacFlow_Main.ejs +152 -33
  51. package/src/emit/rbac/templates/UserRoleMutation_Main.ejs +24 -4
  52. package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +1 -2
  53. package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +6 -5
  54. package/src/emit/relationship/templates/ChangeRelationshipComplete_Main.ejs +64 -37
  55. package/src/emit/relationship/templates/ChangeRelationship_Main.ejs +260 -144
  56. package/src/emit/relationship/templates/CreateRelationshipComplete_Main.ejs +68 -43
  57. package/src/emit/relationship/templates/CreateRelationship_Main.ejs +315 -171
  58. package/src/emit/relationship/templates/DeleteRelationshipComplete_Main.ejs +67 -41
  59. package/src/emit/relationship/templates/DeleteRelationship_Main.ejs +226 -115
  60. package/src/emit/relationship/templates/FlowHandler_HdrApi.ejs +41 -33
  61. package/src/emit/relationship/templates/FlowHandler_HdrDsq.ejs +15 -11
  62. package/src/emit/relationship/templates/FlowHandler_HdrInv.ejs +28 -26
  63. package/src/emit/relationship/templates/FlowHandler_HdrSqs.ejs +15 -11
  64. package/src/emit/relationship/templates/GetRelationshipComplete_Main.ejs +46 -26
  65. package/src/emit/relationship/templates/GetRelationship_Main.ejs +233 -126
  66. package/src/emit/relationship/templates/MoveRelationshipComplete_Main.ejs +72 -44
  67. package/src/emit/relationship/templates/MoveRelationship_Main.ejs +266 -150
  68. package/src/emit/relationship/templates/UpdateRelationshipComplete_Main.ejs +74 -45
  69. package/src/emit/relationship/templates/UpdateRelationship_Main.ejs +285 -152
  70. package/src/emit/resource/emitResourceArtifacts.js +499 -108
  71. package/src/emit/resource/templates/DynamoDBTable_Yaml.ejs +18 -18
  72. package/src/emit/resource/templates/FlowOut_Yaml.ejs +5 -5
  73. package/src/emit/resource/templates/GeneratedLambdaRoleServiceConfig.ejs +138 -0
  74. package/src/emit/resource/templates/ResourceBeforeLogicalYaml.ejs +44 -44
  75. package/src/emit/resource/templates/ResourceSqsYaml.ejs +36 -36
  76. package/src/emit/resource/templates/ResourceYaml.ejs +48 -48
  77. package/src/emit/resource/templates/S3Bucket_Yaml.ejs +19 -0
  78. package/src/emit/resource/templates/SharedResource_Yaml.ejs +11 -11
  79. package/src/emit/resource/templates/SystemDynamoDB_Yaml.ejs +105 -105
  80. package/src/emit/system/emitSystemWebSocketArtifacts.js +2 -1
  81. package/src/generate.js +8 -4
  82. package/test/createTargetRoleHandler.test.js +63 -14
  83. package/test/crudApplicationArtifacts.test.js +1 -1
  84. package/test/customFlowApplicationArtifacts.test.js +71 -43
  85. package/test/dynamicCrudFlowSchemas.test.js +6 -6
  86. package/test/dynamicRbacFlowSchemas.test.js +8 -12
  87. package/test/dynamicRelationshipFlowSchemas.test.js +3 -3
  88. package/test/publicApi.test.js +11 -13
  89. package/test/resourceArtifacts.test.js +13 -3
  90. package/src/emit/rbac/templates/UserRbacFlow_HdrInv.ejs +0 -10
@@ -24,13 +24,16 @@ import <%= functionName %> from './<%= mainFileName %>.js';
24
24
  // validate event properties in body.Message of sqs event
25
25
  let perRecordsValidatorSchema = {
26
26
  //(<validatorSchema>)
27
- <% if (typeof startConfig !== 'undefined' && startConfig !== null && startConfig.properties && startConfig.properties.length > 0) { -%>
27
+ <% if (typeof startConfig !== 'undefined' && startConfig !== null && startConfig.properties && startConfig.properties.length > 0) { -%>
28
28
  type: 'object',
29
29
  properties: {
30
- <% startConfig.properties.forEach((prop, index) => { %> <%- prop.propertyName %>: { type: '<%- prop.type || 'string' %>' }<%= index < startConfig.properties.length - 1 ? ',' : '' %>
31
- <% }) %> },
30
+ <% startConfig.properties.forEach((prop, index) => { %> <%- prop.propertyName %>: {
31
+ type: '<%- prop.type || 'string' %>'
32
+ } /*__EJS_COMMA_6__*/
33
+ <% }) %>
34
+ },
32
35
  required: [<%- startConfig.properties.filter(p => p.required !== false).map(p => `'${p.propertyName}'`).join(', ') %>]
33
- <% } -%>
36
+ <% } -%>
34
37
  //(</validatorSchema>)
35
38
  };
36
39
 
@@ -38,15 +41,16 @@ let perRecordsValidatorSchema = {
38
41
  let messageAttributeValidatorSchema = {
39
42
  type: 'object',
40
43
  properties: {
41
- <% startConfig.messageAttributes.forEach((prop, index) => { %> '<%- prop.propertyName %>': {
44
+ <% startConfig.messageAttributes.forEach((prop, index) => { %> <%- prop.propertyName %>: {
42
45
  type: 'object',
43
46
  properties: {
44
47
  Type: { type: 'string' },
45
48
  Value: { type: '<%- prop.type || 'string' %>' }
46
49
  },
47
50
  required: ['Type', 'Value']
48
- }<%= index < startConfig.messageAttributes.length - 1 ? ',' : '' %>
49
- <% }) %> },
51
+ } /*__EJS_COMMA_14__*/
52
+ <% }) %>
53
+ },
50
54
  required: [<%- startConfig.messageAttributes.filter(p => p.required !== false).map(p => `'${p.propertyName}'`).join(', ') %>]
51
55
  };
52
56
  <% } else { -%>
@@ -74,7 +78,7 @@ export const main = middleware.wrap(async (event, context) => {
74
78
 
75
79
  // loop each record and send to mainFunction
76
80
  await Promise.all(
77
- event.Records.map(async record => {
81
+ event.Records.map(async (record) => {
78
82
  // promise.all for map() function
79
83
 
80
84
  let passOnProperties = [];
@@ -94,19 +98,19 @@ export const main = middleware.wrap(async (event, context) => {
94
98
 
95
99
  // add argument (to invoke lambda) to passOnProperties[]
96
100
  passOnProperties.push(record.body.Message);
97
- <% if (typeof usePassBack === 'undefined' ? functionName.endsWith('Complete') : usePassBack) { %>
101
+ <% if (typeof usePassBack === 'undefined' ? functionName.endsWith('Complete') : usePassBack) { %>
98
102
  passOnProperties.push(
99
103
  callingFlowSharedLib.addPassBackPropertiesToPassOnProperties(
100
104
  record.body.Message
101
105
  )
102
106
  );
103
- <% } else { %>
107
+ <% } else { %>
104
108
  passOnProperties.push(
105
109
  callingFlowSharedLib.addCallingFlowToPassOnProperties(
106
110
  record.body.Message
107
111
  )
108
112
  );
109
- <% } %>
113
+ <% } %>
110
114
  //(<additionalParams>)
111
115
  //(</additionalParams>)
112
116
  record._izContext.logger.debug(
@@ -1,20 +1,20 @@
1
- import { middlewareHandler as middleware } from "@izara_project/izara-middleware";
1
+ import { middlewareHandler as middleware } from '@izara_project/izara-middleware';
2
2
  import callingFlowSharedLib from '@izara_project/izara-core-library-calling-flow';
3
3
 
4
4
  import <%= functionName %> from './<%= mainFileName %>.js';
5
5
 
6
6
  const validatorSchema = {
7
- //(<validatorSchema>)
8
- <% if (typeof startConfig !== 'undefined' && startConfig !== null && startConfig.properties && startConfig.properties.length > 0) { -%>
9
- type: 'object',
10
- properties: {
7
+ //(<validatorSchema>)
8
+ <% if (typeof startConfig !== 'undefined' && startConfig !== null && startConfig.properties && startConfig.properties.length > 0) { -%>
9
+ type: 'object',
10
+ properties: {
11
11
  <% startConfig.properties.forEach(prop => { -%>
12
- <%- prop.propertyName %>: { type: '<%- prop.type || 'string' %>' },
12
+ <%- prop.propertyName %>: { type: '<%- prop.type || 'string' %>' }
13
13
  <% }) -%>
14
- },
15
- required: [ <%- startConfig.properties.filter(p => p.required !== false).map(p => `'${p.propertyName}'`).join(', ') %> ]
16
- <% } -%>
17
- //(</validatorSchema>)
14
+ },
15
+ required: [<%- startConfig.properties.filter(p => p.required !== false).map(p => `'${p.propertyName}'`).join(', ') %>]
16
+ <% } -%>
17
+ //(</validatorSchema>)
18
18
  };
19
19
 
20
20
  middleware.setValidatorSchema(validatorSchema);
@@ -24,22 +24,24 @@ middleware.setValidatorSchema(validatorSchema);
24
24
  * Triggered by: Lambda Invocation
25
25
  */
26
26
  export const main = middleware.wrap(async (event, context) => {
27
- event._izContext?.logger?.debug(`[${context.awsRequestId}] Received Invocation in <%= flowStepName %>`);
27
+ event._izContext?.logger?.debug(
28
+ `[${context.awsRequestId}] Received Invocation in <%= flowStepName %>`
29
+ );
28
30
 
29
- try {
30
- const passOnProperties = [
31
- event,
32
- //(<additionalParams>)
33
- //(</additionalParams>)
34
- callingFlowSharedLib.addCallingFlowToPassOnProperties(event)
35
- ];
31
+ try {
32
+ const passOnProperties = [
33
+ event,
34
+ //(<additionalParams>)
35
+ //(</additionalParams>)
36
+ callingFlowSharedLib.addCallingFlowToPassOnProperties(event)
37
+ ];
36
38
 
37
- return await <%= functionName %>(
38
- event._izContext,
39
- ...passOnProperties
40
- );
41
- } catch (err) {
42
- event._izContext?.logger?.error('Unhandled Error in <%= flowStepName %> Invocation:', err);
43
- throw err;
44
- }
39
+ return await <%= functionName %>(event._izContext, ...passOnProperties);
40
+ } catch (err) {
41
+ event._izContext?.logger?.error(
42
+ 'Unhandled Error in <%= flowStepName %> Invocation:',
43
+ err
44
+ );
45
+ throw err;
46
+ }
45
47
  });
@@ -24,13 +24,16 @@ import <%= functionName %> from './<%= mainFileName %>.js';
24
24
  // validate event properties in body.Message of sqs event
25
25
  let perRecordsValidatorSchema = {
26
26
  //(<validatorSchema>)
27
- <% if (typeof startConfig !== 'undefined' && startConfig !== null && startConfig.properties && startConfig.properties.length > 0) { -%>
27
+ <% if (typeof startConfig !== 'undefined' && startConfig !== null && startConfig.properties && startConfig.properties.length > 0) { -%>
28
28
  type: 'object',
29
29
  properties: {
30
- <% startConfig.properties.forEach((prop, index) => { %> <%- prop.propertyName %>: { type: '<%- prop.type || 'string' %>' }<%= index < startConfig.properties.length - 1 ? ',' : '' %>
31
- <% }) %> },
30
+ <% startConfig.properties.forEach((prop, index) => { %> <%- prop.propertyName %>: {
31
+ type: '<%- prop.type || 'string' %>'
32
+ } /*__EJS_COMMA_6__*/
33
+ <% }) %>
34
+ },
32
35
  required: [<%- startConfig.properties.filter(p => p.required !== false).map(p => `'${p.propertyName}'`).join(', ') %>]
33
- <% } -%>
36
+ <% } -%>
34
37
  //(</validatorSchema>)
35
38
  };
36
39
 
@@ -38,15 +41,16 @@ let perRecordsValidatorSchema = {
38
41
  let messageAttributeValidatorSchema = {
39
42
  type: 'object',
40
43
  properties: {
41
- <% startConfig.messageAttributes.forEach((prop, index) => { %> '<%- prop.propertyName %>': {
44
+ <% startConfig.messageAttributes.forEach((prop, index) => { %> <%- prop.propertyName %>: {
42
45
  type: 'object',
43
46
  properties: {
44
47
  Type: { type: 'string' },
45
48
  Value: { type: '<%- prop.type || 'string' %>' }
46
49
  },
47
50
  required: ['Type', 'Value']
48
- }<%= index < startConfig.messageAttributes.length - 1 ? ',' : '' %>
49
- <% }) %> },
51
+ } /*__EJS_COMMA_14__*/
52
+ <% }) %>
53
+ },
50
54
  required: [<%- startConfig.messageAttributes.filter(p => p.required !== false).map(p => `'${p.propertyName}'`).join(', ') %>]
51
55
  };
52
56
  <% } else { -%>
@@ -60,7 +64,7 @@ export const main = middleware.wrap(async (event, context) => {
60
64
 
61
65
  // loop each record and send to mainFunction
62
66
  await Promise.all(
63
- event.Records.map(async record => {
67
+ event.Records.map(async (record) => {
64
68
  // promise.all for map() function
65
69
 
66
70
  let passOnProperties = [];
@@ -76,19 +80,19 @@ export const main = middleware.wrap(async (event, context) => {
76
80
 
77
81
  // add argument (to invoke lambda) to passOnProperties[]
78
82
  passOnProperties.push(record.body.Message);
79
- <% if (functionName.endsWith('Complete')) { %>
83
+ <% if (functionName.endsWith('Complete')) { %>
80
84
  passOnProperties.push(
81
85
  callingFlowSharedLib.addPassBackPropertiesToPassOnProperties(
82
86
  record.body.Message
83
87
  )
84
88
  );
85
- <% } else { %>
89
+ <% } else { %>
86
90
  passOnProperties.push(
87
91
  callingFlowSharedLib.addCallingFlowToPassOnProperties(
88
92
  record.body.Message
89
93
  )
90
94
  );
91
- <% } %>
95
+ <% } %>
92
96
  //(<additionalParams>)
93
97
  //(</additionalParams>)
94
98
  record._izContext.logger.debug(
@@ -15,22 +15,21 @@ You should have received a copy of the GNU Affero General Public License
15
15
  along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
  */
17
17
 
18
-
19
18
  import { objectHash as hash } from '@izara_project/izara-shared-core';
20
19
 
21
20
  import callingFlowSharedLib from '@izara_project/izara-core-library-calling-flow';
22
- import snsSharedLib from "@izara_project/izara-core-library-sns";
23
- import dynamodbSharedLib from "@izara_project/izara-core-library-dynamodb";
24
- import asyncFlowSharedLib from "@izara_project/izara-core-library-asynchronous-flow";
25
-
26
- import { sns } from "@izara_project/izara-core-library-external-request";
27
- import { utils, consts } from '@izara_project/izara-core-library-service-schemas';
21
+ import snsSharedLib from '@izara_project/izara-core-library-sns';
22
+ import dynamodbSharedLib from '@izara_project/izara-core-library-dynamodb';
23
+ import asyncFlowSharedLib from '@izara_project/izara-core-library-asynchronous-flow';
24
+
25
+ import { sns } from '@izara_project/izara-core-library-external-request';
26
+ import {
27
+ utils,
28
+ consts
29
+ } from '@izara_project/izara-core-library-service-schemas';
28
30
  const { createLinkTypeId } = utils;
29
31
 
30
- const {
31
- TOPIC_NAME_GENERATE_CODE,
32
- PREFIX
33
- } = consts;
32
+ const { TOPIC_NAME_GENERATE_CODE, PREFIX } = consts;
34
33
 
35
34
  //(<optionalRequire>)
36
35
  //(</optionalRequire>)
@@ -41,16 +40,15 @@ export default async function getRelationshipComplete(
41
40
  status,
42
41
  errorsFound,
43
42
  graphServiceTag,
44
- passBackProperties = {},
45
-
43
+ passBackProperties = {}
46
44
  ) {
47
45
  try {
48
- _izContext.logger.debug("Function:getRelationshipComplete", {
46
+ _izContext.logger.debug('Function:getRelationshipComplete', {
49
47
  returnValue: returnValue,
50
48
  status: status,
51
49
  errorsFound: errorsFound,
52
50
  graphServiceTag: graphServiceTag,
53
- passBackProperties: passBackProperties,
51
+ passBackProperties: passBackProperties
54
52
  });
55
53
 
56
54
  let createCompleteMsg = {
@@ -62,18 +60,41 @@ export default async function getRelationshipComplete(
62
60
  errorsFound: errorsFound
63
61
  };
64
62
 
65
- createCompleteMsg = callingFlowSharedLib.addParentPassBackPropertiesToSnsResponseMessageObject(passBackProperties, createCompleteMsg);
66
- _izContext.logger.debug("After addCallingFlowToSnsResponseMessageObject", createCompleteMsg);
63
+ createCompleteMsg =
64
+ callingFlowSharedLib.addParentPassBackPropertiesToSnsResponseMessageObject(
65
+ passBackProperties,
66
+ createCompleteMsg
67
+ );
68
+ _izContext.logger.debug(
69
+ 'After addCallingFlowToSnsResponseMessageObject',
70
+ createCompleteMsg
71
+ );
67
72
 
68
- let messageAttributes = callingFlowSharedLib.addParentPassBackCallingFlowToSnsResponseMessageAttributes(passBackProperties, {});
69
- _izContext.logger.debug("After addCallingFlowToSnsResponseMessageAttributes", createCompleteMsg);
73
+ let messageAttributes =
74
+ callingFlowSharedLib.addParentPassBackCallingFlowToSnsResponseMessageAttributes(
75
+ passBackProperties,
76
+ {}
77
+ );
78
+ _izContext.logger.debug(
79
+ 'After addCallingFlowToSnsResponseMessageAttributes',
80
+ createCompleteMsg
81
+ );
70
82
 
71
83
  let sendMessageToOutGetRelComplete = {
72
84
  Message: JSON.stringify(createCompleteMsg),
73
- MessageAttributes: sns.createStringMessageAttributes(_izContext, messageAttributes),
74
- TopicArn: await snsSharedLib.snsTopicArnByFlowSchema(_izContext, TOPIC_NAME_GENERATE_CODE.outGetRelComplete)
85
+ MessageAttributes: sns.createStringMessageAttributes(
86
+ _izContext,
87
+ messageAttributes
88
+ ),
89
+ TopicArn: snsSharedLib.snsTopicArnByFlowSchema(
90
+ _izContext,
91
+ TOPIC_NAME_GENERATE_CODE.outGetRelComplete
92
+ )
75
93
  };
76
- _izContext.logger.debug("Send message to outGetRelComplete :::>", sendMessageToOutGetRelComplete);
94
+ _izContext.logger.debug(
95
+ 'Send message to outGetRelComplete :::>',
96
+ sendMessageToOutGetRelComplete
97
+ );
77
98
  await sns.publishAsync(_izContext, sendMessageToOutGetRelComplete);
78
99
 
79
100
  // check pendingStepId finished
@@ -90,10 +111,9 @@ export default async function getRelationshipComplete(
90
111
  returnValue,
91
112
  status,
92
113
  errorsFound
93
- }
94
-
114
+ };
95
115
  } catch (err) {
96
- _izContext.logger.error('error GetRelationshipComplete:', err)
97
- throw (err)
116
+ _izContext.logger.error('error GetRelationshipComplete:', err);
117
+ throw err;
98
118
  }
99
119
  }