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

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 (257) hide show
  1. package/README.md +73 -11
  2. package/docs/TriggeredCache Flow.drawio +193 -0
  3. package/docs/test.mmd +47 -0
  4. package/docs/test.png +0 -0
  5. package/index.js +0 -5
  6. package/package.json +7 -6
  7. package/src/compile/compileProject.js +26 -0
  8. package/src/compile/loadSchemas.js +50 -0
  9. package/src/emit/crud/dynamicCrudFlowSchemaTemplate.js +11 -0
  10. package/src/emit/crud/emitCrudApplicationArtifacts.js +161 -0
  11. package/src/emit/crud/emitDynamicCrudFlowSchemas.js +84 -0
  12. package/src/emit/crud/generateCrudApplicationArtifacts.js +16 -0
  13. package/src/emit/crud/generateDynamicCrudFlowSchemas.js +21 -0
  14. package/src/emit/crud/loadLocalSchemaArrays.js +8 -0
  15. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/CreateEndpoint_Main.ejs +6 -6
  16. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/DeleteEndpoint_Main.ejs +6 -6
  17. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step → emit/crud/templates}/FlowEndpointBeforeLogical_Main.ejs +2 -2
  18. package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +96 -0
  19. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowEndpoint_HdrWbs.ejs +1 -1
  20. package/src/emit/crud/templates/FlowHandler_HdrApi.ejs +69 -0
  21. package/src/{codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_HdrSqs.ejs → emit/crud/templates/FlowHandler_HdrSqs.ejs} +52 -56
  22. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowMain_Wbs.ejs +1 -3
  23. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/GetEndpoint_Main.ejs +2 -2
  24. package/src/emit/crud/templates/GetRangeEndpoint_Main.ejs +127 -0
  25. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/UpdateEndpoint_Main.ejs +11 -9
  26. package/src/emit/custom/customFlows.js +121 -0
  27. package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +325 -0
  28. package/src/emit/custom/generateCustomFlowApplicationArtifacts.js +22 -0
  29. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/custom/templates}/FlowEndpoint_Main.ejs +5 -5
  30. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step → emit/custom/templates}/FlowStep_Main.ejs +1 -1
  31. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_Main.ejs +5 -5
  32. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_HdrWbs.ejs +1 -1
  33. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_Main.ejs +3 -3
  34. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_Main.ejs +4 -5
  35. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/FlowHandler_HdrS3.ejs +2 -8
  36. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ProcessS3File_Main.ejs +1 -1
  37. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_Main.ejs +5 -6
  38. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +32 -0
  39. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_Main.ejs +63 -0
  40. package/src/emit/custom/templates/triggerCache/TriggerCacheComplete_Main.ejs +35 -0
  41. package/src/emit/custom/templates/triggerCache/TriggerCache_Main.ejs +16 -0
  42. package/src/emit/function/functionYamlArtifact.js +125 -0
  43. package/src/emit/rbac/emitDynamicRbacFlowSchemas.js +117 -0
  44. package/src/emit/rbac/emitRbacApplicationArtifacts.js +270 -0
  45. package/src/emit/rbac/generateCreateTargetRoleHandler.js +19 -0
  46. package/src/emit/rbac/generateDynamicRbacFlowSchemas.js +21 -0
  47. package/src/emit/rbac/rbacFlowTag.js +7 -0
  48. package/src/emit/rbac/templates/CreateTargetRole_HdrSqs.ejs +24 -0
  49. package/src/emit/rbac/templates/CreateTargetRole_Main.ejs +25 -0
  50. package/src/emit/rbac/templates/DynamicRbacFlowSchema.ejs +5 -0
  51. package/src/emit/rbac/templates/ListRbac_HdrApi.ejs +17 -0
  52. package/src/emit/rbac/templates/ListRbac_HdrSqs.ejs +13 -0
  53. package/src/emit/rbac/templates/ListRbac_Main.ejs +29 -0
  54. package/src/emit/rbac/templates/RbacMutation_Main.ejs +22 -0
  55. package/src/emit/rbac/templates/UserRbacFlow_HdrInv.ejs +10 -0
  56. package/src/emit/rbac/templates/UserRbacFlow_Main.ejs +44 -0
  57. package/src/emit/rbac/templates/UserRoleMutation_Main.ejs +33 -0
  58. package/src/emit/relationship/dynamicRelationshipFlowSchemaTemplate.js +11 -0
  59. package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +66 -0
  60. package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +148 -0
  61. package/src/emit/relationship/generateDynamicRelationshipFlowSchemas.js +23 -0
  62. package/src/emit/relationship/generateRelationshipApplicationArtifacts.js +22 -0
  63. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationshipComplete_Main.ejs → emit/relationship/templates/ChangeRelationshipComplete_Main.ejs} +1 -1
  64. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationship_Main.ejs → emit/relationship/templates/ChangeRelationship_Main.ejs} +12 -4
  65. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationshipComplete_Main.ejs → emit/relationship/templates/CreateRelationshipComplete_Main.ejs} +1 -1
  66. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationship_Main.ejs → emit/relationship/templates/CreateRelationship_Main.ejs} +1 -1
  67. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationshipComplete_Main.ejs → emit/relationship/templates/DeleteRelationshipComplete_Main.ejs} +1 -1
  68. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationship_Main.ejs → emit/relationship/templates/DeleteRelationship_Main.ejs} +1 -1
  69. package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrDsq.ejs +1 -1
  70. package/src/emit/relationship/templates/FlowHandler_HdrInv.ejs +45 -0
  71. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationshipComplete_Main.ejs → emit/relationship/templates/GetRelationshipComplete_Main.ejs} +1 -1
  72. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationship_Main.ejs → emit/relationship/templates/GetRelationship_Main.ejs} +1 -1
  73. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationship_Main.ejs → emit/relationship/templates/MoveRelationship_Main.ejs} +9 -1
  74. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationshipComplete_Main.ejs → emit/relationship/templates/UpdateRelationshipComplete_Main.ejs} +1 -1
  75. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationship_Main.ejs → emit/relationship/templates/UpdateRelationship_Main.ejs} +1 -1
  76. package/src/emit/resource/emitResourceArtifacts.js +595 -0
  77. package/src/emit/resource/generateResourceArtifacts.js +20 -0
  78. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceBeforeLogicalYaml.ejs +1 -1
  79. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceSqsYaml.ejs +6 -6
  80. package/src/{codeGenerators/app/sls_yaml → emit/resource}/templates/SharedResource_Yaml.ejs +8 -8
  81. package/src/emit/system/emitSystemWebSocketArtifacts.js +183 -0
  82. package/src/generate.js +60 -126
  83. package/src/output/commitArtifacts.js +213 -0
  84. package/src/output/mergeHooks.js +55 -0
  85. package/src/output/validateArtifacts.js +62 -0
  86. package/src/plan/buildGenerationPlan.js +50 -0
  87. package/test/core.test.js +159 -0
  88. package/test/createTargetRoleHandler.test.js +68 -0
  89. package/test/crudApplicationArtifacts.test.js +107 -0
  90. package/test/customFlowApplicationArtifacts.test.js +297 -0
  91. package/test/dynamicCrudFlowSchemas.test.js +136 -0
  92. package/test/dynamicRbacFlowSchemas.test.js +101 -0
  93. package/test/dynamicRelationshipFlowSchemas.test.js +99 -0
  94. package/test/functionYamlArtifact.test.js +34 -0
  95. package/test/intTestApi.test.js +29 -0
  96. package/test/publicApi.test.js +209 -0
  97. package/test/relationshipApplicationArtifacts.test.js +68 -0
  98. package/test/resourceArtifacts.test.js +121 -0
  99. package/jsconfig.json +0 -9
  100. package/src/__tests__/getIntTestConfig.test.js +0 -51
  101. package/src/__tests__/intTestGeneratorShared.test.cjs +0 -169
  102. package/src/__tests__/pathIntTest.test.js +0 -103
  103. package/src/codeGenerators/app/initial_setup/InitialSetupGenerator.js +0 -199
  104. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_LambdaRole.ejs +0 -50
  105. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_SnsService.ejs +0 -15
  106. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_TableName.ejs +0 -9
  107. package/src/codeGenerators/app/sls_yaml/FindDataYamlGenerator.js +0 -23
  108. package/src/codeGenerators/app/sls_yaml/FunctionYamlGenerator.js +0 -332
  109. package/src/codeGenerators/app/sls_yaml/ProcessLogicalYamlGenerator.js +0 -21
  110. package/src/codeGenerators/app/sls_yaml/RoleNameConfigGenerator.js +0 -48
  111. package/src/codeGenerators/app/sls_yaml/SharedResourceYamlGenerator.js +0 -503
  112. package/src/codeGenerators/app/sls_yaml/__tests__/SharedResourceYamlGenerator.test.js +0 -235
  113. package/src/codeGenerators/app/sls_yaml/_policy/PolicyRegistry.js +0 -56
  114. package/src/codeGenerators/app/sls_yaml/_policy/__tests__/PolicyRegistry.test.js +0 -33
  115. package/src/codeGenerators/app/sls_yaml/renderYamlTemplate.js +0 -13
  116. package/src/codeGenerators/app/sls_yaml/templates/FindData_Yaml.ejs +0 -10
  117. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Api.ejs +0 -21
  118. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_EventBridge.ejs +0 -14
  119. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Inv.ejs +0 -6
  120. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Sqs.ejs +0 -11
  121. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Wbs.ejs +0 -11
  122. package/src/codeGenerators/app/sls_yaml/templates/ProcessLogical_Yaml.ejs +0 -32
  123. package/src/codeGenerators/app/sls_yaml/templates/RoleNameConfig_Yaml.ejs +0 -5
  124. package/src/codeGenerators/app/src/generatedCode/FindData/FindDataGenerator.js +0 -238
  125. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_HdrSqs.ejs +0 -87
  126. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_Main.ejs +0 -108
  127. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByDynamo.ejs +0 -32
  128. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByGraph.ejs +0 -87
  129. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/.gitkeep +0 -0
  130. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/EndpointsGenerator.js +0 -120
  131. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step/FlowEndpointComplete_Main.ejs +0 -313
  132. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/RbacFlowGenerator.js +0 -116
  133. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateRolePermissions.ejs +0 -135
  134. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateTargetRole.ejs +0 -131
  135. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateUserRole.ejs +0 -150
  136. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteRolePermissions.ejs +0 -132
  137. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteTargetRole.ejs +0 -132
  138. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteUserFromRole.ejs +0 -150
  139. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/FlowRbac_Main.ejs +0 -252
  140. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListRolePermissions.ejs +0 -120
  141. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListTargetRole.ejs +0 -122
  142. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListUserInRoles.ejs +0 -117
  143. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRelationships/RelationshipFlowGenerator.js +0 -148
  144. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/.gitkeep +0 -0
  145. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/StatusFieldGenerator.js +0 -109
  146. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/WebSocketGenerator.js +0 -122
  147. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint/FlowEntryPoint_Main.ejs +0 -38
  148. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusFieldSns_Yaml.ejs +0 -52
  149. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_HdrSqs.ejs +0 -84
  150. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_Main.ejs +0 -78
  151. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Awaiting_Main.ejs +0 -123
  152. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Paginated_Main.ejs +0 -59
  153. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_PlugIn_Main.ejs +0 -72
  154. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_RecievePlugIn_Main.ejs +0 -76
  155. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateAwaitingStep.ejs +0 -41
  156. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateSendPlugin.ejs +0 -18
  157. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketFlow_Yaml.ejs +0 -26
  158. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketSub_Yaml.ejs +0 -7
  159. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_HdrSqs.ejs +0 -66
  160. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Main.ejs +0 -115
  161. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Yaml.ejs +0 -36
  162. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Main.ejs +0 -52
  163. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Yaml.ejs +0 -13
  164. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketDynamoDb_Yaml.ejs +0 -28
  165. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseDsqHandler.js +0 -63
  166. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseSqsHandler.js +0 -66
  167. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/__tests__/BaseDsqHandler.test.js +0 -94
  168. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/dsq.js +0 -5
  169. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/eventBridge.js +0 -33
  170. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/extTopic.js +0 -6
  171. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncApi.js +0 -51
  172. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncInv.js +0 -51
  173. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/ownTopic.js +0 -54
  174. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/registry.js +0 -17
  175. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3.js +0 -56
  176. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ConfirmAfterUploadS3Generator.js +0 -46
  177. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreateObjectGenerator.js +0 -50
  178. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreatePreSignUrlGenerator.js +0 -48
  179. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ProcessAfterUploadS3Generator.js +0 -49
  180. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ReservedLimitGenerator.js +0 -47
  181. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/eventTypes.js +0 -23
  182. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowClassifier.js +0 -50
  183. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowEntryPointBase.js +0 -106
  184. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowMainFunctionBase.js +0 -172
  185. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowNaming.js +0 -37
  186. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowSelection.js +0 -19
  187. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepBase.js +0 -235
  188. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepNormalizer.js +0 -75
  189. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowValidator.js +0 -267
  190. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/propertyNormalizer.js +0 -18
  191. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/registry.js +0 -7
  192. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/roleNameDetection.js +0 -49
  193. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/triggerCacheBase.js +0 -177
  194. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_HdrSqs.ejs +0 -89
  195. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_Main.ejs +0 -83
  196. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_HdrSqs.ejs +0 -103
  197. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_Main.ejs +0 -58
  198. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrDsq.ejs +0 -104
  199. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrSqs.ejs +0 -88
  200. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_Main.ejs +0 -80
  201. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheQueue_Yaml.ejs +0 -36
  202. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/yaml/SharedFunctionSqs_Yaml.ejs +0 -13
  203. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/ProcessLogicalGenerator.js +0 -29
  204. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrDsq.ejs +0 -177
  205. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrSqs.ejs +0 -155
  206. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_Main.ejs +0 -268
  207. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_Main.ejs +0 -450
  208. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/RegisterGenerator.js +0 -149
  209. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_HdrSqs.ejs +0 -85
  210. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_Main.ejs +0 -176
  211. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_HdrWbs.ejs +0 -80
  212. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_Main.ejs +0 -164
  213. package/src/codeGenerators/app/src/generatedCode/libs/ConstsGenerator.js +0 -28
  214. package/src/codeGenerators/app/src/generatedCode/libs/GenerateCodeLibsGenerator.js +0 -28
  215. package/src/codeGenerators/app/src/generatedCode/libs/templates/Consts.ejs +0 -448
  216. package/src/codeGenerators/app/src/generatedCode/libs/templates/GenerateCodeLibs.ejs +0 -124
  217. package/src/codeGenerators/resource/sls_yaml/DynamoDBGenerator.js +0 -87
  218. package/src/codeGenerators/resource/sls_yaml/FlowOutGenerator.js +0 -70
  219. package/src/codeGenerators/resource/sls_yaml/FlowResourceYamlGenerator.js +0 -182
  220. package/src/core/renderTemplateFile.js +0 -22
  221. package/src/core/validate.js +0 -165
  222. package/src/generateCode.js +0 -357
  223. package/src/generateSchema.js +0 -123
  224. package/src/parsers/flowSchemaParser.js +0 -112
  225. package/src/parsers/objectSchemaParser.js +0 -39
  226. package/src/parsers/relationshipSchemaParser.js +0 -51
  227. package/src/schemaGenerators/app/src/schemas/FlowSchemas/FlowSchemaGenerator.js +0 -107
  228. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RbacFlowSchemaGenerator.js +0 -98
  229. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RelationshipFlowSchemaGenerator.js +0 -89
  230. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicFlowSchemaTemplate.ejs +0 -41
  231. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicRbacFlowSchemaTemplate.ejs +0 -20
  232. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/RelationshipFlowSchemaTemplate.ejs +0 -33
  233. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/UserRbacFlowSchemaTemplate.ejs +0 -22
  234. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/AttributeTreeSchemaGenerator.js +0 -124
  235. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/PropertyValueSchemaGenerator.js +0 -119
  236. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeManagerSchemaTemplate.ejs +0 -14
  237. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeStandardSchemaTemplate.ejs +0 -13
  238. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicPropertyValueSchemaTemplate.ejs +0 -15
  239. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/AttributeTreeRelationshipSchemaGenerator.js +0 -109
  240. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/PropertyValueRelationshipSchemaGenerator.js +0 -103
  241. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/__tests__/relationshipSchemaHelpers.test.js +0 -38
  242. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/relationshipSchemaHelpers.js +0 -40
  243. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicAttributeTreeRelationshipSchemaTemplate.ejs +0 -7
  244. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicPropertyValueRelationshipSchemaTemplate.ejs +0 -7
  245. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/SystemTextGenerator.js +0 -102
  246. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/templates/SystemText_Template.ejs +0 -10
  247. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrInv.ejs +0 -0
  248. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_HdrSqs.ejs +0 -0
  249. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_HdrSqs.ejs +0 -0
  250. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_HdrSqs.ejs +0 -0
  251. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrApi.ejs +0 -0
  252. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrSqs.ejs +0 -0
  253. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationshipComplete_Main.ejs → emit/relationship/templates/MoveRelationshipComplete_Main.ejs} +0 -0
  254. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/DynamoDBTable_Yaml.ejs +0 -0
  255. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/FlowOut_Yaml.ejs +0 -0
  256. /package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceYaml.ejs +0 -0
  257. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/SystemDynamoDB_Yaml.ejs +0 -0
@@ -0,0 +1,595 @@
1
+ import ejs from 'ejs';
2
+ import { readFile } from 'node:fs/promises';
3
+
4
+ import {
5
+ customFlowRoleName,
6
+ flowDsqSteps,
7
+ flowExtTopicSteps,
8
+ generatedOwnTopicFlows,
9
+ supportedCustomFlows
10
+ } from '../custom/customFlows.js';
11
+ import { hasSystemWebSocket } from '../system/emitSystemWebSocketArtifacts.js';
12
+
13
+ const TEMPLATE_URL = new URL('./templates/', import.meta.url);
14
+ const RESOURCE_ROOT = 'resource/sls_yaml/generatedCode/source';
15
+ const APP_ROOT = 'app/sls_yaml/generatedCode/source';
16
+ const CRUD_ACTIONS = ['Create', 'Update', 'Delete', 'Get'];
17
+ const RELATIONSHIP_ACTIONS = [
18
+ 'CreateRelationship',
19
+ 'UpdateRelationship',
20
+ 'DeleteRelationship',
21
+ 'GetRelationship',
22
+ 'ChangeRelationship',
23
+ 'MoveRelationship'
24
+ ];
25
+ const RBAC_ACTIONS = [
26
+ 'CreateTargetRole',
27
+ 'ListTargetRole',
28
+ 'DeleteTargetRole',
29
+ 'CreateRolePermissions',
30
+ 'ListRolePermissions',
31
+ 'DeleteRolePermissions',
32
+ 'CreateUserRole',
33
+ 'ListUserInRoles',
34
+ 'DeleteUserFromRole'
35
+ ];
36
+ const SYSTEM_TABLES = [
37
+ 'WebSocketTask',
38
+ 'UserUploadRecords',
39
+ 'RegisterRecords',
40
+ 'AwaitingMultipleSteps',
41
+ 'AwaitingMultipleStepByPending',
42
+ 'FindDataMain',
43
+ 'LogicalResultsMain',
44
+ 'LogicalResultsData',
45
+ 'AwaitingStep',
46
+ 'TargetRoles',
47
+ 'RolePermissions',
48
+ 'RoleUsers',
49
+ 'UserRoles'
50
+ ];
51
+ const RBAC_TABLES = [
52
+ 'TargetRoles',
53
+ 'RolePermissions',
54
+ 'RoleUsers',
55
+ 'UserRoles',
56
+ 'WebSocketTask'
57
+ ];
58
+ const LEGACY_PROCESS_QUEUES = [
59
+ 'FindDataHdrSqs',
60
+ 'ProcessLogicalHdrSqs',
61
+ 'PaginateProcessLogicalHdrDsq',
62
+ 'PaginateProcessLogicalHdrSqs'
63
+ ];
64
+ const DYNAMO_ACTIONS = [
65
+ 'dynamodb:DeleteItem',
66
+ 'dynamodb:GetItem',
67
+ 'dynamodb:PutItem',
68
+ 'dynamodb:Query',
69
+ 'dynamodb:UpdateItem'
70
+ ];
71
+ const SQS_CONSUMER_ACTIONS = [
72
+ 'sqs:DeleteMessage',
73
+ 'sqs:GetQueueAttributes',
74
+ 'sqs:ReceiveMessage'
75
+ ];
76
+
77
+ export async function emitResourceArtifacts({
78
+ objects,
79
+ relationships,
80
+ flows = []
81
+ }) {
82
+ if (![objects, relationships, flows].every(Array.isArray)) {
83
+ throw new TypeError('objects, relationships, and flows must be arrays');
84
+ }
85
+ const state = createResourceState({ objects, relationships, flows });
86
+ const [inSqs, out, dynamo, iam] = await Promise.all([
87
+ renderInSqs(state),
88
+ renderOut(state),
89
+ renderDynamo(state),
90
+ renderIam(state)
91
+ ]);
92
+ return [
93
+ {
94
+ path: `${RESOURCE_ROOT}/generated-sns-in-sqs.yml`,
95
+ content: normalizeYaml(inSqs)
96
+ },
97
+ {
98
+ path: `${RESOURCE_ROOT}/generated-sns-out.yml`,
99
+ content: normalizeYaml(out)
100
+ },
101
+ {
102
+ path: `${RESOURCE_ROOT}/generated-dynamoDB-table.yml`,
103
+ content: normalizeYaml(dynamo)
104
+ },
105
+ {
106
+ path: `${APP_ROOT}/generate-shared-resource.yml`,
107
+ content: normalizeYaml(iam)
108
+ }
109
+ ];
110
+ }
111
+
112
+ export const resourceArtifactPaths = [
113
+ `${RESOURCE_ROOT}/generated-sns-in-sqs.yml`,
114
+ `${RESOURCE_ROOT}/generated-sns-out.yml`,
115
+ `${RESOURCE_ROOT}/generated-dynamoDB-table.yml`,
116
+ `${APP_ROOT}/generate-shared-resource.yml`
117
+ ];
118
+
119
+ function createResourceState({ objects, relationships, flows }) {
120
+ const crud = objects.some(isCrudObject);
121
+ const rbac = objects.some(hasRbacAddOn);
122
+ const ownTopics = new Set(
123
+ flows
124
+ .filter(flow => includesEvent(flow, 'ownTopic'))
125
+ .map(flow => upperFirst(flow.flowTag))
126
+ );
127
+ const sqsQueues = new Set([
128
+ ...LEGACY_PROCESS_QUEUES,
129
+ ...flows
130
+ .filter(flow => includesEvent(flow, 'extTopic'))
131
+ .map(flow => `Process${upperFirst(flow.flowTag)}HdrSqs`)
132
+ ]);
133
+ flowExtTopicSteps(flows).forEach(({ flowTag, stepName }) =>
134
+ sqsQueues.add(`${flowTag}${stepName}HdrSqs`)
135
+ );
136
+ flows
137
+ .filter(flow => includesEvent(flow, 's3'))
138
+ .forEach(flow => {
139
+ const tag = upperFirst(flow.flowTag);
140
+ sqsQueues.add(`${tag}CreatePreSignUrlHdrSqs`);
141
+ sqsQueues.add(`${tag}ReservedLimitHdrSqs`);
142
+ sqsQueues.add(`${tag}ConfirmAfterUploadHdrSqs`);
143
+ });
144
+ const dsqQueues = new Set(
145
+ flows
146
+ .filter(flow => includesEvent(flow, 'dsq'))
147
+ .map(flow => `${upperFirst(flow.flowTag)}HdrDsq`)
148
+ );
149
+ flowDsqSteps(flows).forEach(({ flowTag, stepName }) =>
150
+ dsqQueues.add(`${flowTag}${stepName}HdrDsq`)
151
+ );
152
+ if (crud) {
153
+ CRUD_ACTIONS.forEach(action => ownTopics.add(action));
154
+ ['Create', 'Update', 'Delete'].forEach(action =>
155
+ sqsQueues.add(`${action}CompleteHdrSqs`)
156
+ );
157
+ }
158
+ if (relationships.length > 0) {
159
+ RELATIONSHIP_ACTIONS.forEach(action => {
160
+ ownTopics.add(action);
161
+ sqsQueues.add(`${action}CompleteHdrSqs`);
162
+ });
163
+ dsqQueues.add('GetRelationshipHdrDsq');
164
+ }
165
+ if (rbac) {
166
+ RBAC_ACTIONS.forEach(action => {
167
+ ownTopics.add(action);
168
+ sqsQueues.add(`Process${action}HdrSqs`);
169
+ });
170
+ objects
171
+ .filter(hasRbacAddOn)
172
+ .forEach(object =>
173
+ sqsQueues.add(`Process${upperFirst(object.objectType)}RbacFlowHdrInv`)
174
+ );
175
+ }
176
+ const beforeLogicalByAction = new Map();
177
+ for (const flow of flows.filter(
178
+ flow => flow?.generatedCodeConfig?.codeHookTag === 'beforeLogical'
179
+ )) {
180
+ const action = upperFirst(flow.generatedCodeConfig.generatedCodeTag);
181
+ if (!action || !flow.flowTag) continue;
182
+ const flowTags = beforeLogicalByAction.get(action) ?? new Set();
183
+ flowTags.add(flow.flowTag);
184
+ beforeLogicalByAction.set(action, flowTags);
185
+ }
186
+ const beforeLogical = [...beforeLogicalByAction].map(
187
+ ([action, flowTags]) => ({ action, flowTags: [...flowTags].sort() })
188
+ );
189
+ const customRoles = [
190
+ ...new Set([
191
+ ...supportedCustomFlows(flows).map(flow =>
192
+ customFlowRoleName(flow.flowTag)
193
+ ),
194
+ ...generatedOwnTopicFlows(flows).map(flow =>
195
+ customFlowRoleName(flow.flowTag)
196
+ ),
197
+ ...flowExtTopicSteps(flows).map(({ flow }) =>
198
+ customFlowRoleName(flow.flowTag)
199
+ ),
200
+ ...flowDsqSteps(flows).map(({ flow }) =>
201
+ customFlowRoleName(flow.flowTag)
202
+ )
203
+ ])
204
+ ];
205
+ const websocket = hasSystemWebSocket(flows, {
206
+ includeRelationshipOwnTopic: true
207
+ });
208
+ const webSocketRoles = new Set(websocket ? ['WebSocketMainRole'] : []);
209
+ if (crud) webSocketRoles.add('FlowObjectsRole');
210
+ if (relationships.length > 0) webSocketRoles.add('FlowRelationshipRole');
211
+ if (rbac) webSocketRoles.add('FlowRbacRole');
212
+ [...supportedCustomFlows(flows), ...generatedOwnTopicFlows(flows)]
213
+ .filter(
214
+ flow => includesEvent(flow, 'ownTopic') || includesEvent(flow, 's3')
215
+ )
216
+ .forEach(flow => webSocketRoles.add(customFlowRoleName(flow.flowTag)));
217
+ const outTopics = new Set([
218
+ ...ownTopics,
219
+ ...beforeLogical.map(({ action }) => action),
220
+ ...flows
221
+ .filter(flow => flow?.outputTopic && upperFirst(flow.flowTag))
222
+ .map(flow => upperFirst(flow.flowTag))
223
+ ]);
224
+ const objectTableNames = [...collectTables(objects).keys()];
225
+ const relationshipTableNames = [...collectTables(relationships).keys()];
226
+ const tableMap = new Map([
227
+ ...collectTables(objects),
228
+ ...collectTables(relationships)
229
+ ]);
230
+ return {
231
+ crud,
232
+ rbac,
233
+ relationships: relationships.length > 0,
234
+ ownTopics: [...ownTopics].filter(Boolean).sort(),
235
+ sqsQueues: [...sqsQueues].filter(Boolean).sort(),
236
+ dsqQueues: [...dsqQueues].filter(Boolean).sort(),
237
+ beforeLogical,
238
+ customRoles,
239
+ websocket,
240
+ webSocketRoles,
241
+ webSocketSubscriptions: websocket
242
+ ? [...outTopics]
243
+ .filter(
244
+ topic =>
245
+ flows.some(
246
+ flow => (flow?.outputTopic || (includesEvent(flow, 'ownTopic') && flow.initiateBy === 'user')) && upperFirst(flow.flowTag) === topic
247
+ ) ||
248
+ (relationships.length > 0 &&
249
+ topic !== 'GetRelationship' &&
250
+ RELATIONSHIP_ACTIONS.includes(topic))
251
+ )
252
+ .sort()
253
+ : [],
254
+ outTopics: [...outTopics].filter(Boolean).sort(),
255
+ tables: [...tableMap.entries()].map(([tableName, keys]) => ({
256
+ tableName,
257
+ ...keys
258
+ })),
259
+ allTableNames: [...new Set([...SYSTEM_TABLES, ...tableMap.keys()])].sort(),
260
+ objectTableNames,
261
+ relationshipTableNames,
262
+ objectTablesByType: new Map(
263
+ objects
264
+ .map(object => [
265
+ object.objectType,
266
+ Object.values(object.storageResources ?? {}).find(
267
+ resource => resource?.storageType === 'dynamoDB'
268
+ )?.tableName
269
+ ])
270
+ .filter(([, tableName]) => tableName)
271
+ ),
272
+ flows
273
+ };
274
+ }
275
+
276
+ async function renderInSqs(state) {
277
+ const chunks = await Promise.all([
278
+ ...state.ownTopics.map(queueName =>
279
+ render('ResourceYaml.ejs', { queueName })
280
+ ),
281
+ ...state.sqsQueues.map(queueName =>
282
+ render('ResourceSqsYaml.ejs', { queueName })
283
+ ),
284
+ ...state.dsqQueues.map(queueName =>
285
+ render('ResourceSqsYaml.ejs', { queueName })
286
+ ),
287
+ ...state.beforeLogical.map(({ action, flowTags }) =>
288
+ render('ResourceBeforeLogicalYaml.ejs', {
289
+ queueName: `${action}BeforeLogical`,
290
+ flowTags
291
+ })
292
+ ),
293
+ ...(state.websocket
294
+ ? [
295
+ render('ResourceSqsYaml.ejs', {
296
+ queueName: 'WebSocketCompleteHdrSqs'
297
+ })
298
+ ]
299
+ : [])
300
+ ]);
301
+ return `Resources:\n${chunks.join('\n')}\n${state.webSocketSubscriptions.map(renderWebSocketSubscription).join('\n')}`;
302
+ }
303
+
304
+ async function renderOut(state) {
305
+ return `Resources:\n${(await Promise.all(state.outTopics.map(topicName => render('FlowOut_Yaml.ejs', { topicName })))).join('\n')}`;
306
+ }
307
+
308
+ async function renderDynamo(state) {
309
+ const [system, ...tables] = await Promise.all([
310
+ render('SystemDynamoDB_Yaml.ejs', {}),
311
+ ...state.tables.map(table => render('DynamoDBTable_Yaml.ejs', table))
312
+ ]);
313
+ return `${system}\n${tables.join('\n')}`;
314
+ }
315
+
316
+ async function renderIam(state) {
317
+ const roles = ['ProcFindDataRole', 'RegisterRole'];
318
+ if (state.crud) roles.push('FlowObjectsRole');
319
+ if (state.relationships) roles.push('FlowRelationshipRole');
320
+ if (state.rbac) roles.push('FlowRbacRole');
321
+ if (state.websocket) roles.push('WebSocketMainRole');
322
+ roles.push(...state.customRoles);
323
+ return render('SharedResource_Yaml.ejs', {
324
+ roles: roles.sort().map(roleName => ({
325
+ roleName,
326
+ statements: roleStatements(state, roleName)
327
+ }))
328
+ });
329
+ }
330
+
331
+ function roleStatements(state, roleName) {
332
+ const statements = [];
333
+ if (roleNeedsSchemaRead(state, roleName)) {
334
+ statements.push({
335
+ action: ['s3:GetObject'],
336
+ resource: [
337
+ 'arn:aws:s3:::${self:custom.iz_serviceSchemaBucketName}/perServiceSchemas/*'
338
+ ]
339
+ });
340
+ }
341
+ addStatement(
342
+ statements,
343
+ dynamoActionsForRole(roleName),
344
+ dynamoArns(roleTableNames(state, roleName))
345
+ );
346
+ addStatement(
347
+ statements,
348
+ SQS_CONSUMER_ACTIONS,
349
+ queueArns(roleQueueNames(state, roleName))
350
+ );
351
+ addStatement(
352
+ statements,
353
+ ['sns:Publish'],
354
+ topicArns(roleTopicNames(state, roleName))
355
+ );
356
+ if (state.webSocketRoles.has(roleName)) {
357
+ statements.push({
358
+ action: ['execute-api:ManageConnections'],
359
+ resource: [
360
+ 'arn:aws:execute-api:${self:custom.iz_region}:${self:custom.iz_accountId}:*/*'
361
+ ]
362
+ });
363
+ }
364
+ return statements;
365
+ }
366
+
367
+ function addStatement(statements, action, resource) {
368
+ if (resource.length > 0) statements.push({ action, resource });
369
+ }
370
+
371
+ function roleNeedsSchemaRead(state, roleName) {
372
+ if (!roleName.endsWith('Role') || !roleName) return false;
373
+ return roleName !== 'FlowRbacRole' || state.rbac;
374
+ }
375
+
376
+ function roleTableNames(state, roleName) {
377
+ if (roleName === 'RegisterRole') return [];
378
+ if (roleName === 'WebSocketMainRole')
379
+ return ['UserUploadRecords', 'WebSocketTask'];
380
+ if (roleName === 'FlowObjectsRole')
381
+ return [
382
+ ...state.objectTableNames,
383
+ 'AwaitingMultipleSteps',
384
+ 'AwaitingMultipleStepByPending',
385
+ 'WebSocketTask'
386
+ ];
387
+ if (roleName === 'FlowRelationshipRole')
388
+ return [
389
+ ...state.objectTableNames,
390
+ ...state.relationshipTableNames,
391
+ 'AwaitingMultipleSteps',
392
+ 'AwaitingMultipleStepByPending',
393
+ 'WebSocketTask'
394
+ ];
395
+ if (roleName === 'FlowRbacRole') return RBAC_TABLES;
396
+ if (roleName === 'ProcFindDataRole')
397
+ return [
398
+ ...state.objectTableNames,
399
+ ...state.relationshipTableNames,
400
+ 'FindDataMain',
401
+ 'LogicalResultsMain',
402
+ 'LogicalResultsData'
403
+ ];
404
+ const flow = state.flows.find(
405
+ candidate => customFlowRoleName(candidate?.flowTag ?? '') === roleName
406
+ );
407
+ if (!flow) return [];
408
+ const tables = [];
409
+ if (includesEvent(flow, 'ownTopic') || includesEvent(flow, 's3'))
410
+ tables.push('WebSocketTask');
411
+ if (includesEvent(flow, 's3')) tables.push('UserUploadRecords');
412
+ if (flow.statusType === 'storedCache') {
413
+ const object = state.objectTablesByType.get(flow.objType?.objectType);
414
+ if (object) tables.push(object);
415
+ }
416
+ return [...new Set(tables)];
417
+ }
418
+
419
+ function dynamoActionsForRole(roleName) {
420
+ if (roleName === 'ProcFindDataRole')
421
+ return ['dynamodb:GetItem', 'dynamodb:Query'];
422
+ if (roleName === 'WebSocketMainRole')
423
+ return ['dynamodb:DeleteItem', 'dynamodb:PutItem', 'dynamodb:Query'];
424
+ if (roleName === 'FlowRbacRole')
425
+ return [...DYNAMO_ACTIONS, 'dynamodb:TransactWriteItems'];
426
+ return DYNAMO_ACTIONS;
427
+ }
428
+
429
+ function roleQueueNames(state, roleName) {
430
+ if (roleName === 'ProcFindDataRole') return LEGACY_PROCESS_QUEUES;
431
+ if (roleName === 'WebSocketMainRole')
432
+ return state.websocket ? ['WebSocketCompleteHdrSqs'] : [];
433
+ if (roleName === 'FlowObjectsRole')
434
+ return [
435
+ ...CRUD_ACTIONS.map(action => `${action}HdrSqs`),
436
+ ...CRUD_ACTIONS.filter(action => action !== 'Get').map(
437
+ action => `${action}CompleteHdrSqs`
438
+ ),
439
+ ...state.beforeLogical
440
+ .filter(({ action }) => CRUD_ACTIONS.includes(action))
441
+ .map(({ action }) => `${action}BeforeLogicalHdrSqs`)
442
+ ];
443
+ if (roleName === 'FlowRelationshipRole')
444
+ return [
445
+ ...RELATIONSHIP_ACTIONS.flatMap(action => [
446
+ `${action}HdrSqs`,
447
+ `${action}CompleteHdrSqs`
448
+ ]),
449
+ 'GetRelationshipHdrDsq'
450
+ ];
451
+ if (roleName === 'FlowRbacRole')
452
+ return RBAC_ACTIONS.flatMap(action => [
453
+ `${action}HdrSqs`,
454
+ `Process${action}HdrSqs`
455
+ ]);
456
+ const flow = state.flows.find(
457
+ candidate => customFlowRoleName(candidate?.flowTag ?? '') === roleName
458
+ );
459
+ if (!flow) return [];
460
+ const tag = upperFirst(flow.flowTag);
461
+ return [
462
+ ...(includesEvent(flow, 'extTopic') ? [`${tag}HdrSqs`] : []),
463
+ ...(includesEvent(flow, 'ownTopic') ? [`${tag}HdrSqs`] : []),
464
+ ...(includesEvent(flow, 'dsq') ? [`${tag}HdrDsq`] : []),
465
+ ...flowExtTopicSteps([flow]).map(
466
+ ({ flowTag, stepName }) => `${flowTag}${stepName}HdrSqs`
467
+ ),
468
+ ...flowDsqSteps([flow]).map(
469
+ ({ flowTag, stepName }) => `${flowTag}${stepName}HdrDsq`
470
+ ),
471
+ ...state.sqsQueues.filter(
472
+ queueName => includesEvent(flow, 's3') && queueName.startsWith(tag)
473
+ )
474
+ ];
475
+ }
476
+
477
+ function roleTopicNames(state, roleName) {
478
+ if (roleName === 'ProcFindDataRole') return [];
479
+ if (roleName === 'FlowObjectsRole')
480
+ return state.outTopics.filter(topic => CRUD_ACTIONS.includes(topic));
481
+ if (roleName === 'FlowRelationshipRole')
482
+ return state.outTopics.filter(topic =>
483
+ RELATIONSHIP_ACTIONS.includes(topic)
484
+ );
485
+ if (roleName === 'FlowRbacRole')
486
+ return state.outTopics.filter(topic => RBAC_ACTIONS.includes(topic));
487
+ const flow = state.flows.find(
488
+ candidate => customFlowRoleName(candidate?.flowTag ?? '') === roleName
489
+ );
490
+ return flow
491
+ ? state.outTopics.filter(topic => topic === upperFirst(flow.flowTag))
492
+ : [];
493
+ }
494
+
495
+ function dynamoArns(tableNames) {
496
+ return [...new Set(tableNames)]
497
+ .sort()
498
+ .map(
499
+ tableName =>
500
+ `arn:aws:dynamodb:${'${self:custom.iz_region}'}:${'${self:custom.iz_accountId}'}:table/${'${self:custom.iz_resourcePrefix}'}${tableName}`
501
+ );
502
+ }
503
+
504
+ function queueArns(queueNames) {
505
+ return [...new Set(queueNames)]
506
+ .sort()
507
+ .map(
508
+ queueName =>
509
+ `arn:aws:sqs:${'${self:custom.iz_region}'}:${'${self:custom.iz_accountId}'}:${'${self:custom.iz_resourcePrefix}'}${queueName}`
510
+ );
511
+ }
512
+
513
+ function topicArns(topicNames) {
514
+ return [...new Set(topicNames)]
515
+ .sort()
516
+ .map(
517
+ topic =>
518
+ `arn:aws:sns:${'${self:custom.iz_region}'}:${'${self:custom.iz_accountId}'}:${'${self:custom.iz_serviceTag}'}_${'${self:custom.iz_stage}'}_${topic}_Out`
519
+ );
520
+ }
521
+
522
+ function renderWebSocketSubscription(topicName) {
523
+ return `##===== WebSocket completion subscription\n SubscriptionToOut${topicName}WebSocketComplete:\n Type: AWS::SNS::Subscription\n Properties:\n TopicArn: !Ref Out${topicName}\n Endpoint: "arn:aws:sqs:${'${self:custom.iz_region}'}:${'${self:custom.iz_accountId}'}:${'${self:custom.iz_resourcePrefix}'}WebSocketCompleteHdrSqs"\n Protocol: "sqs"`;
524
+ }
525
+
526
+ function collectTables(schemas) {
527
+ const tables = new Map();
528
+ for (const schema of schemas) {
529
+ if (!schema?.storageResources) continue;
530
+ const identifiers = Array.isArray(schema.identifiers)
531
+ ? schema.identifiers
532
+ : [];
533
+ const pk =
534
+ keyName(
535
+ identifiers.find(
536
+ identifier =>
537
+ identifier.type === 'partitionKey' ||
538
+ identifier.type === 'identifier'
539
+ )
540
+ ) ?? 'PK';
541
+ const sk = keyName(
542
+ identifiers.find(identifier => identifier.type === 'sortKey')
543
+ );
544
+ for (const resource of Object.values(schema.storageResources)) {
545
+ if (
546
+ resource?.storageType === 'dynamoDB' &&
547
+ resource.tableName &&
548
+ !tables.has(resource.tableName)
549
+ )
550
+ tables.set(resource.tableName, { pk, sk });
551
+ }
552
+ }
553
+ return tables;
554
+ }
555
+
556
+ function keyName(identifier) {
557
+ if (!identifier) return undefined;
558
+ return (
559
+ identifier.name ??
560
+ identifier.fieldName ??
561
+ (Array.isArray(identifier.fieldNames)
562
+ ? identifier.fieldNames.join(identifier.deliminator ?? '_')
563
+ : undefined)
564
+ );
565
+ }
566
+
567
+ function isCrudObject(object) {
568
+ return (
569
+ object?.generatedBy === 'userGenerated' ||
570
+ object?.generatedBy === 'systemGenerated'
571
+ );
572
+ }
573
+ function hasRbacAddOn(object) {
574
+ return (
575
+ Array.isArray(object?.addOnDataStructure) &&
576
+ object.addOnDataStructure.some(addOn => addOn?.type === 'rbac')
577
+ );
578
+ }
579
+ function includesEvent(flow, event) {
580
+ return Array.isArray(flow?.event) && flow.event.includes(event);
581
+ }
582
+ function upperFirst(value) {
583
+ return typeof value === 'string' && value
584
+ ? value[0].toUpperCase() + value.slice(1)
585
+ : '';
586
+ }
587
+ function normalizeYaml(content) {
588
+ return `${content.trimEnd()}\n`;
589
+ }
590
+ async function render(templateName, data) {
591
+ return ejs.render(
592
+ await readFile(new URL(templateName, TEMPLATE_URL), 'utf8'),
593
+ { resourceQueueName: data.queueName, ...data }
594
+ );
595
+ }
@@ -0,0 +1,20 @@
1
+ import { buildGenerationPlan } from '../../plan/buildGenerationPlan.js';
2
+ import { commitArtifacts } from '../../output/commitArtifacts.js';
3
+ import { compileProject } from '../../compile/compileProject.js';
4
+ import { loadLocalSchemaDirectory } from '../../compile/loadSchemas.js';
5
+ import { emitResourceArtifacts, resourceArtifactPaths } from './emitResourceArtifacts.js';
6
+
7
+ export async function generateResourceArtifacts(rootPath, options = {}) {
8
+ const project = compileProject({ ...options, rootPath });
9
+ const [objects, relationships, flows] = await Promise.all([
10
+ loadLocalSchemaDirectory(project, 'ObjectSchemas'),
11
+ loadLocalSchemaDirectory(project, 'RelationshipSchemas'),
12
+ loadLocalSchemaDirectory(project, 'FlowSchemas')
13
+ ]);
14
+ const artifacts = await emitResourceArtifacts({ objects, relationships, flows });
15
+ const files = await commitArtifacts(buildGenerationPlan(project, artifacts, {
16
+ managedPaths: resourceArtifactPaths,
17
+ managedScope: 'shared-resources'
18
+ }));
19
+ return { project, files };
20
+ }
@@ -44,4 +44,4 @@
44
44
  - Ref: <%- queueName %>HdrSqs
45
45
 
46
46
  #<#<%- queueName %>QueueSetting#>
47
- #<#/<%- queueName %>QueueSetting#>
47
+ #<#/<%- queueName %>QueueSetting#>
@@ -1,24 +1,24 @@
1
1
  ##===== [Queue]
2
- <%- queueName %>:
2
+ <%- resourceQueueName || queueName %>:
3
3
  Type: "AWS::SQS::Queue"
4
4
  Properties:
5
5
  QueueName: ${self:custom.iz_resourcePrefix}<%- queueName %>
6
6
  RedrivePolicy:
7
7
  deadLetterTargetArn:
8
8
  Fn::GetAtt:
9
- - <%- queueName %>DLQ
9
+ - <%- resourceQueueName || queueName %>DLQ
10
10
  - Arn
11
11
  maxReceiveCount: 3
12
12
  VisibilityTimeout: 120
13
13
 
14
14
  ##===== [Queue DLQ]
15
- <%- queueName %>DLQ:
15
+ <%- resourceQueueName || queueName %>DLQ:
16
16
  Type: AWS::SQS::Queue
17
17
  Properties:
18
18
  QueueName: ${self:custom.iz_resourcePrefix}<%- queueName %>DLQ
19
19
 
20
20
  ##===== [Queue Policy]
21
- <%- queueName %>Policy:
21
+ <%- resourceQueueName || queueName %>Policy:
22
22
  Type: AWS::SQS::QueuePolicy
23
23
  Properties:
24
24
  PolicyDocument:
@@ -29,11 +29,11 @@
29
29
  Principal: "*"
30
30
  Resource:
31
31
  Fn::GetAtt:
32
- - <%- queueName %>
32
+ - <%- resourceQueueName || queueName %>
33
33
  - Arn
34
34
  Action: "SQS:SendMessage"
35
35
  Queues:
36
- - Ref: <%- queueName %>
36
+ - Ref: <%- resourceQueueName || queueName %>
37
37
 
38
38
  #<#<%- queueName %>QueueSetting#>
39
39
  #<#/<%- queueName %>QueueSetting#>
@@ -1,5 +1,5 @@
1
1
  Resources:
2
- <% roles.forEach(({ roleName, statements }) => { %>
2
+ <% roles.forEach(({ roleName, statements }) => { -%>
3
3
  <%- roleName %>:
4
4
  Type: AWS::IAM::Role
5
5
  Properties:
@@ -22,18 +22,18 @@ Resources:
22
22
  PolicyDocument:
23
23
  Version: "2012-10-17"
24
24
  Statement:
25
- <% statements.forEach((stmt) => { %>
25
+ <% statements.forEach((stmt) => { -%>
26
26
  - Effect: Allow
27
27
  Action:
28
- <% stmt.action.forEach((a) => { %>
28
+ <% stmt.action.forEach((a) => { -%>
29
29
  - <%- a %>
30
- <% }) %>
30
+ <% }) -%>
31
31
  Resource:
32
- <% stmt.resource.forEach((r) => { %>
32
+ <% stmt.resource.forEach((r) => { -%>
33
33
  - "<%- r %>"
34
- <% }) %>
35
- <% }) %>
34
+ <% }) -%>
35
+ <% }) -%>
36
36
  #<#<%- roleName %>StatementHookCode#>
37
37
  #<#/<%- roleName %>StatementHookCode#>
38
38
 
39
- <% }) %>
39
+ <% }) -%>