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

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 (254) hide show
  1. package/README.md +73 -11
  2. package/index.js +0 -5
  3. package/package.json +7 -6
  4. package/src/compile/compileProject.js +26 -0
  5. package/src/compile/loadSchemas.js +28 -0
  6. package/src/emit/crud/dynamicCrudFlowSchemaTemplate.js +11 -0
  7. package/src/emit/crud/emitCrudApplicationArtifacts.js +157 -0
  8. package/src/emit/crud/emitDynamicCrudFlowSchemas.js +84 -0
  9. package/src/emit/crud/generateCrudApplicationArtifacts.js +16 -0
  10. package/src/emit/crud/generateDynamicCrudFlowSchemas.js +21 -0
  11. package/src/emit/crud/loadLocalSchemaArrays.js +8 -0
  12. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/CreateEndpoint_Main.ejs +1 -1
  13. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/DeleteEndpoint_Main.ejs +1 -1
  14. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step → emit/crud/templates}/FlowEndpointBeforeLogical_Main.ejs +2 -2
  15. package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +75 -0
  16. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowEndpoint_HdrWbs.ejs +1 -1
  17. package/src/{codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_HdrSqs.ejs → emit/crud/templates/FlowHandler_HdrSqs.ejs} +52 -56
  18. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowMain_Wbs.ejs +1 -3
  19. package/src/emit/crud/templates/GetRangeEndpoint_Main.ejs +127 -0
  20. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/UpdateEndpoint_Main.ejs +1 -1
  21. package/src/emit/custom/customFlows.js +70 -0
  22. package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +308 -0
  23. package/src/emit/custom/generateCustomFlowApplicationArtifacts.js +22 -0
  24. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/custom/templates}/FlowEndpoint_Main.ejs +1 -1
  25. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step → emit/custom/templates}/FlowStep_Main.ejs +1 -1
  26. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_Main.ejs +5 -5
  27. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_HdrWbs.ejs +1 -1
  28. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_Main.ejs +3 -3
  29. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_Main.ejs +4 -5
  30. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/FlowHandler_HdrS3.ejs +2 -8
  31. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ProcessS3File_Main.ejs +1 -1
  32. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_Main.ejs +5 -6
  33. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +32 -0
  34. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_Main.ejs +63 -0
  35. package/src/emit/custom/templates/triggerCache/TriggerCacheComplete_Main.ejs +35 -0
  36. package/src/emit/custom/templates/triggerCache/TriggerCache_Main.ejs +16 -0
  37. package/src/emit/function/functionYamlArtifact.js +111 -0
  38. package/src/emit/rbac/emitDynamicRbacFlowSchemas.js +117 -0
  39. package/src/emit/rbac/emitRbacApplicationArtifacts.js +256 -0
  40. package/src/emit/rbac/generateCreateTargetRoleHandler.js +19 -0
  41. package/src/emit/rbac/generateDynamicRbacFlowSchemas.js +21 -0
  42. package/src/emit/rbac/rbacFlowTag.js +7 -0
  43. package/src/emit/rbac/templates/CreateTargetRole_HdrSqs.ejs +24 -0
  44. package/src/emit/rbac/templates/CreateTargetRole_Main.ejs +25 -0
  45. package/src/emit/rbac/templates/DynamicRbacFlowSchema.ejs +5 -0
  46. package/src/emit/rbac/templates/ListRbac_HdrApi.ejs +17 -0
  47. package/src/emit/rbac/templates/ListRbac_HdrSqs.ejs +13 -0
  48. package/src/emit/rbac/templates/ListRbac_Main.ejs +29 -0
  49. package/src/emit/rbac/templates/RbacMutation_Main.ejs +22 -0
  50. package/src/emit/rbac/templates/UserRbacFlow_HdrInv.ejs +10 -0
  51. package/src/emit/rbac/templates/UserRbacFlow_Main.ejs +44 -0
  52. package/src/emit/rbac/templates/UserRoleMutation_Main.ejs +33 -0
  53. package/src/emit/relationship/dynamicRelationshipFlowSchemaTemplate.js +11 -0
  54. package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +66 -0
  55. package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +147 -0
  56. package/src/emit/relationship/generateDynamicRelationshipFlowSchemas.js +23 -0
  57. package/src/emit/relationship/generateRelationshipApplicationArtifacts.js +22 -0
  58. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationshipComplete_Main.ejs → emit/relationship/templates/ChangeRelationshipComplete_Main.ejs} +1 -1
  59. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationship_Main.ejs → emit/relationship/templates/ChangeRelationship_Main.ejs} +10 -2
  60. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationshipComplete_Main.ejs → emit/relationship/templates/CreateRelationshipComplete_Main.ejs} +1 -1
  61. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationship_Main.ejs → emit/relationship/templates/CreateRelationship_Main.ejs} +1 -1
  62. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationshipComplete_Main.ejs → emit/relationship/templates/DeleteRelationshipComplete_Main.ejs} +1 -1
  63. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationship_Main.ejs → emit/relationship/templates/DeleteRelationship_Main.ejs} +1 -1
  64. package/src/emit/relationship/templates/FlowHandler_HdrApi.ejs +51 -0
  65. package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrDsq.ejs +1 -1
  66. package/src/emit/relationship/templates/FlowHandler_HdrInv.ejs +45 -0
  67. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationshipComplete_Main.ejs → emit/relationship/templates/GetRelationshipComplete_Main.ejs} +1 -1
  68. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationship_Main.ejs → emit/relationship/templates/GetRelationship_Main.ejs} +1 -1
  69. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationship_Main.ejs → emit/relationship/templates/MoveRelationship_Main.ejs} +9 -1
  70. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationshipComplete_Main.ejs → emit/relationship/templates/UpdateRelationshipComplete_Main.ejs} +1 -1
  71. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationship_Main.ejs → emit/relationship/templates/UpdateRelationship_Main.ejs} +1 -1
  72. package/src/emit/resource/emitResourceArtifacts.js +300 -0
  73. package/src/emit/resource/generateResourceArtifacts.js +20 -0
  74. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceBeforeLogicalYaml.ejs +1 -1
  75. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceSqsYaml.ejs +6 -6
  76. package/src/{codeGenerators/app/sls_yaml → emit/resource}/templates/SharedResource_Yaml.ejs +8 -8
  77. package/src/emit/system/emitSystemWebSocketArtifacts.js +182 -0
  78. package/src/generate.js +60 -126
  79. package/src/output/commitArtifacts.js +213 -0
  80. package/src/output/mergeHooks.js +55 -0
  81. package/src/output/validateArtifacts.js +62 -0
  82. package/src/plan/buildGenerationPlan.js +50 -0
  83. package/test/core.test.js +159 -0
  84. package/test/createTargetRoleHandler.test.js +68 -0
  85. package/test/crudApplicationArtifacts.test.js +107 -0
  86. package/test/customFlowApplicationArtifacts.test.js +294 -0
  87. package/test/dynamicCrudFlowSchemas.test.js +136 -0
  88. package/test/dynamicRbacFlowSchemas.test.js +101 -0
  89. package/test/dynamicRelationshipFlowSchemas.test.js +99 -0
  90. package/test/functionYamlArtifact.test.js +34 -0
  91. package/test/intTestApi.test.js +29 -0
  92. package/test/publicApi.test.js +209 -0
  93. package/test/relationshipApplicationArtifacts.test.js +68 -0
  94. package/test/resourceArtifacts.test.js +121 -0
  95. package/jsconfig.json +0 -9
  96. package/src/__tests__/getIntTestConfig.test.js +0 -51
  97. package/src/__tests__/intTestGeneratorShared.test.cjs +0 -169
  98. package/src/__tests__/pathIntTest.test.js +0 -103
  99. package/src/codeGenerators/app/initial_setup/InitialSetupGenerator.js +0 -199
  100. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_LambdaRole.ejs +0 -50
  101. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_SnsService.ejs +0 -15
  102. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_TableName.ejs +0 -9
  103. package/src/codeGenerators/app/sls_yaml/FindDataYamlGenerator.js +0 -23
  104. package/src/codeGenerators/app/sls_yaml/FunctionYamlGenerator.js +0 -332
  105. package/src/codeGenerators/app/sls_yaml/ProcessLogicalYamlGenerator.js +0 -21
  106. package/src/codeGenerators/app/sls_yaml/RoleNameConfigGenerator.js +0 -48
  107. package/src/codeGenerators/app/sls_yaml/SharedResourceYamlGenerator.js +0 -503
  108. package/src/codeGenerators/app/sls_yaml/__tests__/SharedResourceYamlGenerator.test.js +0 -235
  109. package/src/codeGenerators/app/sls_yaml/_policy/PolicyRegistry.js +0 -56
  110. package/src/codeGenerators/app/sls_yaml/_policy/__tests__/PolicyRegistry.test.js +0 -33
  111. package/src/codeGenerators/app/sls_yaml/renderYamlTemplate.js +0 -13
  112. package/src/codeGenerators/app/sls_yaml/templates/FindData_Yaml.ejs +0 -10
  113. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Api.ejs +0 -21
  114. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_EventBridge.ejs +0 -14
  115. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Inv.ejs +0 -6
  116. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Sqs.ejs +0 -11
  117. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Wbs.ejs +0 -11
  118. package/src/codeGenerators/app/sls_yaml/templates/ProcessLogical_Yaml.ejs +0 -32
  119. package/src/codeGenerators/app/sls_yaml/templates/RoleNameConfig_Yaml.ejs +0 -5
  120. package/src/codeGenerators/app/src/generatedCode/FindData/FindDataGenerator.js +0 -238
  121. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_HdrSqs.ejs +0 -87
  122. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_Main.ejs +0 -108
  123. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByDynamo.ejs +0 -32
  124. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByGraph.ejs +0 -87
  125. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/.gitkeep +0 -0
  126. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/EndpointsGenerator.js +0 -120
  127. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step/FlowEndpointComplete_Main.ejs +0 -313
  128. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/RbacFlowGenerator.js +0 -116
  129. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateRolePermissions.ejs +0 -135
  130. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateTargetRole.ejs +0 -131
  131. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateUserRole.ejs +0 -150
  132. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteRolePermissions.ejs +0 -132
  133. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteTargetRole.ejs +0 -132
  134. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteUserFromRole.ejs +0 -150
  135. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/FlowRbac_Main.ejs +0 -252
  136. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListRolePermissions.ejs +0 -120
  137. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListTargetRole.ejs +0 -122
  138. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListUserInRoles.ejs +0 -117
  139. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRelationships/RelationshipFlowGenerator.js +0 -148
  140. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/.gitkeep +0 -0
  141. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/StatusFieldGenerator.js +0 -109
  142. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/WebSocketGenerator.js +0 -122
  143. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint/FlowEntryPoint_Main.ejs +0 -38
  144. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusFieldSns_Yaml.ejs +0 -52
  145. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_HdrSqs.ejs +0 -84
  146. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_Main.ejs +0 -78
  147. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Awaiting_Main.ejs +0 -123
  148. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Paginated_Main.ejs +0 -59
  149. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_PlugIn_Main.ejs +0 -72
  150. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_RecievePlugIn_Main.ejs +0 -76
  151. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateAwaitingStep.ejs +0 -41
  152. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateSendPlugin.ejs +0 -18
  153. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketFlow_Yaml.ejs +0 -26
  154. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketSub_Yaml.ejs +0 -7
  155. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_HdrSqs.ejs +0 -66
  156. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Main.ejs +0 -115
  157. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Yaml.ejs +0 -36
  158. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Main.ejs +0 -52
  159. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Yaml.ejs +0 -13
  160. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketDynamoDb_Yaml.ejs +0 -28
  161. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseDsqHandler.js +0 -63
  162. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseSqsHandler.js +0 -66
  163. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/__tests__/BaseDsqHandler.test.js +0 -94
  164. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/dsq.js +0 -5
  165. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/eventBridge.js +0 -33
  166. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/extTopic.js +0 -6
  167. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncApi.js +0 -51
  168. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncInv.js +0 -51
  169. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/ownTopic.js +0 -54
  170. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/registry.js +0 -17
  171. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3.js +0 -56
  172. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ConfirmAfterUploadS3Generator.js +0 -46
  173. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreateObjectGenerator.js +0 -50
  174. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreatePreSignUrlGenerator.js +0 -48
  175. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ProcessAfterUploadS3Generator.js +0 -49
  176. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ReservedLimitGenerator.js +0 -47
  177. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/eventTypes.js +0 -23
  178. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowClassifier.js +0 -50
  179. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowEntryPointBase.js +0 -106
  180. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowMainFunctionBase.js +0 -172
  181. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowNaming.js +0 -37
  182. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowSelection.js +0 -19
  183. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepBase.js +0 -235
  184. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepNormalizer.js +0 -75
  185. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowValidator.js +0 -267
  186. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/propertyNormalizer.js +0 -18
  187. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/registry.js +0 -7
  188. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/roleNameDetection.js +0 -49
  189. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/triggerCacheBase.js +0 -177
  190. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_HdrSqs.ejs +0 -89
  191. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_Main.ejs +0 -83
  192. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_HdrSqs.ejs +0 -103
  193. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_Main.ejs +0 -58
  194. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrDsq.ejs +0 -104
  195. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrSqs.ejs +0 -88
  196. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_Main.ejs +0 -80
  197. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheQueue_Yaml.ejs +0 -36
  198. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/yaml/SharedFunctionSqs_Yaml.ejs +0 -13
  199. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/ProcessLogicalGenerator.js +0 -29
  200. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrDsq.ejs +0 -177
  201. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrSqs.ejs +0 -155
  202. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_Main.ejs +0 -268
  203. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_Main.ejs +0 -450
  204. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/RegisterGenerator.js +0 -149
  205. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_HdrSqs.ejs +0 -85
  206. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_Main.ejs +0 -176
  207. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_HdrWbs.ejs +0 -80
  208. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_Main.ejs +0 -164
  209. package/src/codeGenerators/app/src/generatedCode/libs/ConstsGenerator.js +0 -28
  210. package/src/codeGenerators/app/src/generatedCode/libs/GenerateCodeLibsGenerator.js +0 -28
  211. package/src/codeGenerators/app/src/generatedCode/libs/templates/Consts.ejs +0 -448
  212. package/src/codeGenerators/app/src/generatedCode/libs/templates/GenerateCodeLibs.ejs +0 -124
  213. package/src/codeGenerators/resource/sls_yaml/DynamoDBGenerator.js +0 -87
  214. package/src/codeGenerators/resource/sls_yaml/FlowOutGenerator.js +0 -70
  215. package/src/codeGenerators/resource/sls_yaml/FlowResourceYamlGenerator.js +0 -182
  216. package/src/core/renderTemplateFile.js +0 -22
  217. package/src/core/validate.js +0 -165
  218. package/src/generateCode.js +0 -357
  219. package/src/generateSchema.js +0 -123
  220. package/src/parsers/flowSchemaParser.js +0 -112
  221. package/src/parsers/objectSchemaParser.js +0 -39
  222. package/src/parsers/relationshipSchemaParser.js +0 -51
  223. package/src/schemaGenerators/app/src/schemas/FlowSchemas/FlowSchemaGenerator.js +0 -107
  224. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RbacFlowSchemaGenerator.js +0 -98
  225. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RelationshipFlowSchemaGenerator.js +0 -89
  226. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicFlowSchemaTemplate.ejs +0 -41
  227. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicRbacFlowSchemaTemplate.ejs +0 -20
  228. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/RelationshipFlowSchemaTemplate.ejs +0 -33
  229. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/UserRbacFlowSchemaTemplate.ejs +0 -22
  230. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/AttributeTreeSchemaGenerator.js +0 -124
  231. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/PropertyValueSchemaGenerator.js +0 -119
  232. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeManagerSchemaTemplate.ejs +0 -14
  233. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeStandardSchemaTemplate.ejs +0 -13
  234. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicPropertyValueSchemaTemplate.ejs +0 -15
  235. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/AttributeTreeRelationshipSchemaGenerator.js +0 -109
  236. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/PropertyValueRelationshipSchemaGenerator.js +0 -103
  237. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/__tests__/relationshipSchemaHelpers.test.js +0 -38
  238. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/relationshipSchemaHelpers.js +0 -40
  239. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicAttributeTreeRelationshipSchemaTemplate.ejs +0 -7
  240. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicPropertyValueRelationshipSchemaTemplate.ejs +0 -7
  241. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/SystemTextGenerator.js +0 -102
  242. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/templates/SystemText_Template.ejs +0 -10
  243. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrApi.ejs +0 -0
  244. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrInv.ejs +0 -0
  245. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/GetEndpoint_Main.ejs +0 -0
  246. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_HdrSqs.ejs +0 -0
  247. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_HdrSqs.ejs +0 -0
  248. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_HdrSqs.ejs +0 -0
  249. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrSqs.ejs +0 -0
  250. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationshipComplete_Main.ejs → emit/relationship/templates/MoveRelationshipComplete_Main.ejs} +0 -0
  251. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/DynamoDBTable_Yaml.ejs +0 -0
  252. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/FlowOut_Yaml.ejs +0 -0
  253. /package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceYaml.ejs +0 -0
  254. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/SystemDynamoDB_Yaml.ejs +0 -0
@@ -0,0 +1,111 @@
1
+ export function createSqsFunctionYamlArtifact({ functionName, handlerPath, roleName, queueName, fileName }) {
2
+ if (![functionName, handlerPath, roleName, queueName, fileName].every(value => typeof value === 'string' && value !== '')) {
3
+ throw new TypeError('Function descriptor must include functionName, handlerPath, roleName, queueName, and fileName');
4
+ }
5
+ return {
6
+ path: `app/sls_yaml/generatedCode/source/${fileName}`,
7
+ content: renderSqsFunctionYaml({ functionName, handlerPath, roleName, queueName })
8
+ };
9
+ }
10
+
11
+ export function renderSqsFunctionYaml({ functionName, handlerPath, roleName, queueName }) {
12
+ if (![functionName, handlerPath, roleName, queueName].every(value => typeof value === 'string' && value !== '')) {
13
+ throw new TypeError('SQS function descriptor must include functionName, handlerPath, roleName, and queueName');
14
+ }
15
+ return `${functionName}:
16
+ handler: ${handlerPath}
17
+ name: \${self:custom.iz_resourcePrefix}${functionName}
18
+ role: ${roleName}
19
+ ${functionSetting(functionName)}
20
+ events:
21
+ - sqs:
22
+ arn: arn:aws:sqs:\${self:custom.iz_region}:\${self:custom.iz_accountId}:\${self:custom.iz_resourcePrefix}${queueName}
23
+ batchSize: 10
24
+ ${completionFilter(functionName)}`;
25
+ }
26
+
27
+ export function renderApiFunctionYaml({ functionName, handlerPath, roleName, routes = [] }) {
28
+ if (!Array.isArray(routes)) {
29
+ throw new TypeError('API function routes must be an array');
30
+ }
31
+ const routeEvents = routes.flatMap(({ path, upperName }) => {
32
+ if (typeof path !== 'string' || path === '' || typeof upperName !== 'string' || upperName === '') {
33
+ throw new TypeError('API function routes must include path and upperName');
34
+ }
35
+ return [
36
+ ` - httpApi:\n path: ${path}\n method: post\n #<#${upperName}AppLevelAuthorizer#>\n # authorizer: authorizerServiceSchema\n #<#/${upperName}AppLevelAuthorizer#>`,
37
+ ` - httpApi:\n path: ${path}/{targetUserId}\n method: post\n #<#${upperName}UserLevelAuthorizer#>\n # authorizer: authorizerIdentifiers\n #<#/${upperName}UserLevelAuthorizer#>`
38
+ ];
39
+ }).join('\n');
40
+ return `${functionName}:
41
+ handler: ${handlerPath}
42
+ name: \${self:custom.iz_resourcePrefix}${functionName}
43
+ role: ${roleName}
44
+ ${functionSetting(functionName)}
45
+ events:
46
+ ${routeEvents ? `${routeEvents}\n` : ''}`;
47
+ }
48
+
49
+ export function renderWbsFunctionYaml({ functionName, handlerPath, roleName, routeName }) {
50
+ if (![functionName, handlerPath, roleName, routeName].every(value => typeof value === 'string' && value !== '')) {
51
+ throw new TypeError('WebSocket function descriptor must include functionName, handlerPath, roleName, and routeName');
52
+ }
53
+ return `${functionName}:
54
+ handler: ${handlerPath}
55
+ name: \${self:custom.iz_resourcePrefix}${functionName}
56
+ role: ${roleName}
57
+ ${functionSetting(functionName)}
58
+ events:
59
+ - websocket:
60
+ route: ${routeName}
61
+ # authorizer: \${self:custom.iz_authorizerAppLevel}
62
+ # identifierResource: 'route.request.header.Auth'
63
+ `;
64
+ }
65
+
66
+ export function renderInvFunctionYaml({ functionName, handlerPath, roleName }) {
67
+ return `${functionName}:
68
+ handler: ${handlerPath}
69
+ name: \${self:custom.iz_resourcePrefix}${functionName}
70
+ role: ${roleName}
71
+ ${functionSetting(functionName)}
72
+ `;
73
+ }
74
+
75
+ export function renderEventBridgeFunctionYaml({ functionName, handlerPath, roleName, flowTag, schedules = [] }) {
76
+ if (![functionName, handlerPath, roleName, flowTag].every(value => typeof value === 'string' && value !== '') || !Array.isArray(schedules)) {
77
+ throw new TypeError('EventBridge function descriptor must include functionName, handlerPath, roleName, flowTag, and schedules');
78
+ }
79
+ if (!schedules.every(schedule => (
80
+ typeof schedule?.name === 'string' && schedule.name !== '' &&
81
+ Array.isArray(schedule.rate) && typeof schedule.rate[0] === 'string' && schedule.rate[0] !== ''
82
+ ))) {
83
+ throw new TypeError('Each EventBridge schedule must include a name and first rate value');
84
+ }
85
+ return `\${self:custom.iz_resourcePrefix}${functionName}:
86
+ handler: ${handlerPath}
87
+ role: ${roleName}
88
+ ${functionSetting(functionName)}
89
+ description: ${flowTag} (EventBridge Schedule)
90
+ ${schedules.length === 0 ? '' : ` events:\n${schedules.map(schedule => ` - schedule:\n name: \${self:custom.iz_resourcePrefix}${schedule.name}\n description: '${schedule.description ?? ''}'\n rate: ${schedule.rate?.[0]}\n enabled: true`).join('\n')}\n`}`;
91
+ }
92
+
93
+ function functionSetting(functionName) {
94
+ return ` #<#${functionName}FunctionSetting#>\n #<#/${functionName}FunctionSetting#>`;
95
+ }
96
+
97
+ function completionFilter(functionName) {
98
+ if (!functionName.endsWith('CompleteHdrSqs')) return '';
99
+ return ` filterPatterns:
100
+ - body:
101
+ MessageAttributes:
102
+ callingFlow:
103
+ Value:
104
+ - \${self:custom.iz_resourcePrefix}${functionName}
105
+ - body:
106
+ MessageAttributes:
107
+ callingFlow:
108
+ Value:
109
+ - exists: false
110
+ `;
111
+ }
@@ -0,0 +1,117 @@
1
+ import ejs from 'ejs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { rbacFlowTag } from './rbacFlowTag.js';
4
+
5
+ const RBAC_FLOW_DEFINITIONS = [
6
+ { flowTag: 'CreateTargetRole', event: ['ownTopic'] },
7
+ { flowTag: 'ListTargetRole', event: ['lambdaSyncApi'] },
8
+ { flowTag: 'DeleteTargetRole', event: ['ownTopic'] },
9
+ { flowTag: 'CreateRolePermissions', event: ['ownTopic'] },
10
+ { flowTag: 'ListRolePermissions', event: ['lambdaSyncApi'] },
11
+ { flowTag: 'DeleteRolePermissions', event: ['ownTopic'] },
12
+ { flowTag: 'CreateUserRole', event: ['ownTopic'] },
13
+ { flowTag: 'ListUserInRoles', event: ['lambdaSyncApi'] },
14
+ { flowTag: 'DeleteUserFromRole', event: ['ownTopic'] }
15
+ ];
16
+ const TEMPLATE_URL = new URL('./templates/', import.meta.url);
17
+
18
+ export const dynamicRbacFlowSchemaPaths = RBAC_FLOW_DEFINITIONS.map(
19
+ ({ flowTag }) => `app/src/schemas/FlowSchemas/generateCode/${flowTag}.js`
20
+ );
21
+
22
+ export function rbacFlowSchemaManagedPaths(objects = []) {
23
+ if (!Array.isArray(objects)) {
24
+ throw new TypeError('objects must be an array');
25
+ }
26
+ return [
27
+ ...dynamicRbacFlowSchemaPaths,
28
+ ...objects.filter(hasRbacAddOn).map(object => `app/src/schemas/FlowSchemas/generateCode/${rbacFlowTag(object)}.js`)
29
+ ];
30
+ }
31
+
32
+ export async function emitDynamicRbacFlowSchemas({ objects, serviceTag }) {
33
+ if (!Array.isArray(objects)) {
34
+ throw new TypeError('objects must be an array');
35
+ }
36
+
37
+ const rbacObjects = objects.filter(hasRbacAddOn);
38
+ if (rbacObjects.length === 0) {
39
+ return [];
40
+ }
41
+ if (typeof serviceTag !== 'string' || serviceTag.trim() === '') {
42
+ throw new TypeError('GenerationRequest.serviceTag is required when generating RBAC schemas');
43
+ }
44
+
45
+ return Promise.all([
46
+ ...RBAC_FLOW_DEFINITIONS.map(({ flowTag, event }) => artifact(
47
+ flowTag,
48
+ createSharedRbacFlow(flowTag, event)
49
+ )),
50
+ ...rbacObjects.map(object => {
51
+ const flowTag = rbacFlowTag(object);
52
+ return artifact(flowTag, createUserRbacFlow(flowTag, serviceTag, object.objectType));
53
+ })
54
+ ]);
55
+ }
56
+
57
+ function hasRbacAddOn(object) {
58
+ return Array.isArray(object?.addOnDataStructure)
59
+ && object.addOnDataStructure.some(addOn => addOn?.type === 'rbac');
60
+ }
61
+
62
+ async function artifact(flowTag, flow) {
63
+ return {
64
+ path: `app/src/schemas/FlowSchemas/generateCode/${flowTag}.js`,
65
+ content: ejs.render(
66
+ await readFile(new URL('DynamicRbacFlowSchema.ejs', TEMPLATE_URL), 'utf8'),
67
+ { flowTag, flow }
68
+ )
69
+ };
70
+ }
71
+
72
+ function createSharedRbacFlow(flowTag, event) {
73
+ return {
74
+ flowTag,
75
+ fileName: 'flow-rbac',
76
+ initiateBy: 'system',
77
+ statusType: 'none',
78
+ event,
79
+ outputTopic: true,
80
+ stepProperties: {
81
+ returnResult: { propertyName: 'returnResult', type: 'object' }
82
+ },
83
+ flowSteps: [
84
+ {
85
+ stepName: 'start',
86
+ properties: [],
87
+ messageAttributes: [],
88
+ returnValues: {
89
+ properties: ['returnResult'],
90
+ messageAttributes: []
91
+ }
92
+ }
93
+ ]
94
+ };
95
+ }
96
+
97
+ function createUserRbacFlow(flowTag, serviceTag, objectType) {
98
+ return {
99
+ flowTag,
100
+ fileName: 'flow-rbac',
101
+ objType: { serviceTag, objectType },
102
+ event: ['lambdaSyncInv'],
103
+ initiateBy: 'system',
104
+ handleObj: 'one',
105
+ statusType: 'none',
106
+ stepMessageAttributes: {
107
+ userId: { propertyName: 'x-correlation-base-user-id', type: 'string' },
108
+ correlationId: { propertyName: 'x-correlation-id', type: 'string' }
109
+ },
110
+ flowSteps: [
111
+ {
112
+ stepName: 'start',
113
+ messageAttributes: ['userId', 'correlationId']
114
+ }
115
+ ]
116
+ };
117
+ }
@@ -0,0 +1,256 @@
1
+ import ejs from 'ejs';
2
+ import { readFile } from 'node:fs/promises';
3
+
4
+ import {
5
+ renderApiFunctionYaml,
6
+ renderInvFunctionYaml,
7
+ renderSqsFunctionYaml,
8
+ renderWbsFunctionYaml
9
+ } from '../function/functionYamlArtifact.js';
10
+ import { rbacFlowTag } from './rbacFlowTag.js';
11
+
12
+ const FLOW_RBAC_YAML_PATH = 'app/sls_yaml/generatedCode/source/flow-rbac.yml';
13
+ const CRUD_TEMPLATE_URL = new URL('../crud/templates/', import.meta.url);
14
+ const RBAC_TEMPLATE_URL = new URL('./templates/', import.meta.url);
15
+
16
+ export async function emitRbacApplicationArtifacts(objects) {
17
+ if (!Array.isArray(objects)) {
18
+ throw new TypeError('objects must be an array');
19
+ }
20
+ if (!objects.some(hasRbacAddOn)) {
21
+ return [];
22
+ }
23
+
24
+ const handlers = await Promise.all([
25
+ createTargetRoleHandler(),
26
+ ...LIST_DEFINITIONS.map(createListHandler),
27
+ ...MUTATION_DEFINITIONS.map(createMutationHandler),
28
+ ...USER_ROLE_MUTATIONS.map(createUserRoleMutationHandler),
29
+ ...objects.filter(hasRbacAddOn).map(createUserRbacFlowHandler)
30
+ ]);
31
+ return [
32
+ ...handlers.flatMap(handler => handler.artifacts),
33
+ {
34
+ path: FLOW_RBAC_YAML_PATH,
35
+ content: handlers.flatMap(handler => handler.functions).map(renderFunctionYaml).join('\n')
36
+ }
37
+ ];
38
+ }
39
+
40
+ const LIST_DEFINITIONS = [
41
+ { flowTag: 'ListTargetRole', tableName: 'TargetRoles', requestProperty: 'userId', useContextUserId: true },
42
+ { flowTag: 'ListRolePermissions', tableName: 'RolePermissions', requestProperty: 'roleIdKey' },
43
+ { flowTag: 'ListUserInRoles', tableName: 'RoleUsers', requestProperty: 'roleIdKey' }
44
+ ];
45
+ const MUTATION_DEFINITIONS = [
46
+ { flowTag: 'CreateRolePermissions', tableName: 'RolePermissions', method: 'putItem', fields: ['roleIdKey', 'flowTypeConcat', 'parameterGroups'] },
47
+ { flowTag: 'DeleteRolePermissions', tableName: 'RolePermissions', method: 'deleteItem', fields: ['roleIdKey', 'flowTypeConcat'] },
48
+ { flowTag: 'DeleteTargetRole', tableName: 'TargetRoles', method: 'deleteItem', fields: ['targetId', 'roleIdKey'] }
49
+ ];
50
+ const USER_ROLE_MUTATIONS = [
51
+ { flowTag: 'CreateUserRole', operation: 'Put' },
52
+ { flowTag: 'DeleteUserFromRole', operation: 'Delete' }
53
+ ];
54
+
55
+ export function rbacApplicationManagedPaths(objects = []) {
56
+ if (!Array.isArray(objects)) {
57
+ throw new TypeError('objects must be an array');
58
+ }
59
+ return [
60
+ 'app/src/generatedCode/FlowRbac/CreateTargetRole/source/ProcessCreateTargetRole_Main.js',
61
+ 'app/src/generatedCode/FlowRbac/CreateTargetRole/source/ProcessCreateTargetRole_HdrSqs.js',
62
+ 'app/src/generatedCode/FlowRbac/CreateTargetRole/source/CreateTargetRole_Main.js',
63
+ 'app/src/generatedCode/FlowRbac/CreateTargetRole/source/CreateTargetRole_HdrWbs.js',
64
+ ...LIST_DEFINITIONS.flatMap(({ flowTag }) => [
65
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/Process${flowTag}_Main.js`,
66
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/Process${flowTag}_HdrSqs.js`,
67
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/Process${flowTag}_HdrApi.js`
68
+ ]),
69
+ ...MUTATION_DEFINITIONS.flatMap(({ flowTag }) => [
70
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/Process${flowTag}_Main.js`,
71
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/Process${flowTag}_HdrSqs.js`,
72
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/${flowTag}_Main.js`,
73
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/${flowTag}_HdrWbs.js`
74
+ ]),
75
+ ...USER_ROLE_MUTATIONS.flatMap(({ flowTag }) => [
76
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/Process${flowTag}_Main.js`,
77
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/Process${flowTag}_HdrSqs.js`,
78
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/${flowTag}_Main.js`,
79
+ `app/src/generatedCode/FlowRbac/${flowTag}/source/${flowTag}_HdrWbs.js`
80
+ ]),
81
+ ...objects.filter(hasRbacAddOn).flatMap(object => {
82
+ const flowTag = rbacFlowTag(object);
83
+ const sourcePath = `app/src/generatedCode/FlowRbac/${flowTag}/source`;
84
+ return [
85
+ `${sourcePath}/Process${flowTag}_Main.js`,
86
+ `${sourcePath}/Process${flowTag}_HdrInv.js`
87
+ ];
88
+ }),
89
+ FLOW_RBAC_YAML_PATH
90
+ ];
91
+ }
92
+
93
+ function hasRbacAddOn(object) {
94
+ return Array.isArray(object?.addOnDataStructure)
95
+ && object.addOnDataStructure.some(addOn => addOn?.type === 'rbac');
96
+ }
97
+
98
+ async function createTargetRoleHandler() {
99
+ const sourcePath = 'app/src/generatedCode/FlowRbac/CreateTargetRole/source';
100
+ const webSocket = await createWebSocketEntry('CreateTargetRole', sourcePath, 'src/generatedCode/FlowRbac/CreateTargetRole/source');
101
+ return {
102
+ artifacts: [
103
+ {
104
+ path: 'app/src/generatedCode/FlowRbac/CreateTargetRole/source/ProcessCreateTargetRole_Main.js',
105
+ content: await renderRbacTemplate('CreateTargetRole_Main.ejs')
106
+ },
107
+ {
108
+ path: 'app/src/generatedCode/FlowRbac/CreateTargetRole/source/ProcessCreateTargetRole_HdrSqs.js',
109
+ content: await renderRbacTemplate('CreateTargetRole_HdrSqs.ejs')
110
+ },
111
+ ...webSocket.artifacts
112
+ ],
113
+ functions: [
114
+ {
115
+ functionName: 'ProcessCreateTargetRoleHdrSqs',
116
+ handlerPath: 'src/generatedCode/FlowRbac/CreateTargetRole/source/ProcessCreateTargetRole_HdrSqs.main',
117
+ roleName: 'FlowRbacRole',
118
+ queueName: 'ProcessCreateTargetRoleHdrSqs'
119
+ },
120
+ ...webSocket.functions
121
+ ]
122
+ };
123
+ }
124
+
125
+ async function createListHandler(definition) {
126
+ const sourcePath = `app/src/generatedCode/FlowRbac/${definition.flowTag}/source`;
127
+ const handlerPath = `src/generatedCode/FlowRbac/${definition.flowTag}/source`;
128
+ return {
129
+ artifacts: [
130
+ { path: `${sourcePath}/Process${definition.flowTag}_Main.js`, content: await renderRbacTemplate('ListRbac_Main.ejs', { ...definition, useContextUserId: definition.useContextUserId ?? false }) },
131
+ { path: `${sourcePath}/Process${definition.flowTag}_HdrSqs.js`, content: await renderRbacTemplate('ListRbac_HdrSqs.ejs', definition) },
132
+ { path: `${sourcePath}/Process${definition.flowTag}_HdrApi.js`, content: await renderRbacTemplate('ListRbac_HdrApi.ejs', definition) }
133
+ ],
134
+ functions: [
135
+ {
136
+ type: 'sqs',
137
+ functionName: `Process${definition.flowTag}HdrSqs`,
138
+ handlerPath: `${handlerPath}/Process${definition.flowTag}_HdrSqs.main`,
139
+ roleName: 'FlowRbacRole',
140
+ queueName: `Process${definition.flowTag}HdrSqs`
141
+ },
142
+ {
143
+ type: 'api',
144
+ functionName: `Process${definition.flowTag}HdrApi`,
145
+ handlerPath: `${handlerPath}/Process${definition.flowTag}_HdrApi.main`,
146
+ roleName: 'FlowRbacRole'
147
+ }
148
+ ]
149
+ };
150
+ }
151
+
152
+ async function createMutationHandler(definition) {
153
+ const sourcePath = `app/src/generatedCode/FlowRbac/${definition.flowTag}/source`;
154
+ const handlerPath = `src/generatedCode/FlowRbac/${definition.flowTag}/source`;
155
+ const webSocket = await createWebSocketEntry(definition.flowTag, sourcePath, handlerPath);
156
+ return {
157
+ artifacts: [
158
+ { path: `${sourcePath}/Process${definition.flowTag}_Main.js`, content: await renderRbacTemplate('RbacMutation_Main.ejs', definition) },
159
+ { path: `${sourcePath}/Process${definition.flowTag}_HdrSqs.js`, content: await renderRbacTemplate('ListRbac_HdrSqs.ejs', definition) },
160
+ ...webSocket.artifacts
161
+ ],
162
+ functions: [
163
+ {
164
+ type: 'sqs',
165
+ functionName: `Process${definition.flowTag}HdrSqs`,
166
+ handlerPath: `${handlerPath}/Process${definition.flowTag}_HdrSqs.main`,
167
+ roleName: 'FlowRbacRole',
168
+ queueName: `Process${definition.flowTag}HdrSqs`
169
+ },
170
+ ...webSocket.functions
171
+ ]
172
+ };
173
+ }
174
+
175
+ async function createUserRoleMutationHandler(definition) {
176
+ const sourcePath = `app/src/generatedCode/FlowRbac/${definition.flowTag}/source`;
177
+ const handlerPath = `src/generatedCode/FlowRbac/${definition.flowTag}/source`;
178
+ const webSocket = await createWebSocketEntry(definition.flowTag, sourcePath, handlerPath);
179
+ return {
180
+ artifacts: [
181
+ { path: `${sourcePath}/Process${definition.flowTag}_Main.js`, content: await renderRbacTemplate('UserRoleMutation_Main.ejs', definition) },
182
+ { path: `${sourcePath}/Process${definition.flowTag}_HdrSqs.js`, content: await renderRbacTemplate('ListRbac_HdrSqs.ejs', definition) },
183
+ ...webSocket.artifacts
184
+ ],
185
+ functions: [
186
+ {
187
+ type: 'sqs',
188
+ functionName: `Process${definition.flowTag}HdrSqs`,
189
+ handlerPath: `${handlerPath}/Process${definition.flowTag}_HdrSqs.main`,
190
+ roleName: 'FlowRbacRole',
191
+ queueName: `Process${definition.flowTag}HdrSqs`
192
+ },
193
+ ...webSocket.functions
194
+ ]
195
+ };
196
+ }
197
+
198
+ async function createUserRbacFlowHandler(object) {
199
+ const flowTag = rbacFlowTag(object);
200
+ const sourcePath = `app/src/generatedCode/FlowRbac/${flowTag}/source`;
201
+ const handlerPath = `src/generatedCode/FlowRbac/${flowTag}/source`;
202
+ return {
203
+ artifacts: [
204
+ { path: `${sourcePath}/Process${flowTag}_Main.js`, content: await renderRbacTemplate('UserRbacFlow_Main.ejs', { flowTag }) },
205
+ { path: `${sourcePath}/Process${flowTag}_HdrInv.js`, content: await renderRbacTemplate('UserRbacFlow_HdrInv.ejs', { flowTag }) }
206
+ ],
207
+ functions: [{
208
+ type: 'inv',
209
+ functionName: `Process${flowTag}HdrInv`,
210
+ handlerPath: `${handlerPath}/Process${flowTag}_HdrInv.main`,
211
+ roleName: 'FlowRbacRole'
212
+ }]
213
+ };
214
+ }
215
+
216
+ function renderFunctionYaml(descriptor) {
217
+ if (descriptor.type === 'api') return renderApiFunctionYaml(descriptor);
218
+ if (descriptor.type === 'inv') return renderInvFunctionYaml(descriptor);
219
+ if (descriptor.type === 'wbs') return renderWbsFunctionYaml(descriptor);
220
+ return renderSqsFunctionYaml(descriptor);
221
+ }
222
+
223
+ async function createWebSocketEntry(flowTag, sourcePath, handlerPath) {
224
+ const mainFileName = `${flowTag}_Main`;
225
+ return {
226
+ artifacts: [
227
+ {
228
+ path: `${sourcePath}/${mainFileName}.js`,
229
+ content: await renderCrudTemplate('FlowMain_Wbs.ejs', { flowTag, functionName: flowTag, upperCaseFlowTag: flowTag })
230
+ },
231
+ {
232
+ path: `${sourcePath}/${flowTag}_HdrWbs.js`,
233
+ content: await renderCrudTemplate('FlowEndpoint_HdrWbs.ejs', { flowTag, functionName: flowTag, mainFileName, upperCaseFlowTag: flowTag, route: flowTag })
234
+ }
235
+ ],
236
+ functions: [{
237
+ type: 'wbs',
238
+ functionName: `${flowTag}HdrWbs`,
239
+ handlerPath: `${handlerPath}/${flowTag}_HdrWbs.main`,
240
+ roleName: 'FlowRbacRole',
241
+ routeName: flowTag
242
+ }]
243
+ };
244
+ }
245
+
246
+ function renderCrudTemplate(templateName, data) {
247
+ return renderTemplate(CRUD_TEMPLATE_URL, templateName, data);
248
+ }
249
+
250
+ function renderRbacTemplate(templateName, data = {}) {
251
+ return renderTemplate(RBAC_TEMPLATE_URL, templateName, data);
252
+ }
253
+
254
+ async function renderTemplate(templateUrl, templateName, data) {
255
+ return ejs.render(await readFile(new URL(templateName, templateUrl), 'utf8'), data);
256
+ }
@@ -0,0 +1,19 @@
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 {
6
+ emitRbacApplicationArtifacts,
7
+ rbacApplicationManagedPaths
8
+ } from './emitRbacApplicationArtifacts.js';
9
+
10
+ export async function generateCreateTargetRoleHandler(rootPath, options = {}) {
11
+ const project = compileProject({ ...options, rootPath });
12
+ const objects = await loadLocalSchemaDirectory(project, 'ObjectSchemas');
13
+ const artifacts = await emitRbacApplicationArtifacts(objects);
14
+ const files = await commitArtifacts(buildGenerationPlan(project, artifacts, {
15
+ managedPaths: rbacApplicationManagedPaths(),
16
+ managedScope: 'rbac-application'
17
+ }));
18
+ return { project, files };
19
+ }
@@ -0,0 +1,21 @@
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 {
6
+ emitDynamicRbacFlowSchemas,
7
+ rbacFlowSchemaManagedPaths
8
+ } from './emitDynamicRbacFlowSchemas.js';
9
+
10
+ export async function generateDynamicRbacFlowSchemas(rootPath, options = {}) {
11
+ const project = compileProject({ ...options, rootPath });
12
+ const objects = await loadLocalSchemaDirectory(project, 'ObjectSchemas');
13
+ const plan = buildGenerationPlan(
14
+ project,
15
+ await emitDynamicRbacFlowSchemas({ objects, serviceTag: project.serviceTag }),
16
+ { managedPaths: rbacFlowSchemaManagedPaths(objects), managedScope: 'rbac-flow-schemas' }
17
+ );
18
+ const files = await commitArtifacts(plan);
19
+
20
+ return { project, files };
21
+ }
@@ -0,0 +1,7 @@
1
+ export function rbacFlowTag(object) {
2
+ const objectType = object?.objectType;
3
+ if (typeof objectType !== 'string' || objectType.trim() === '') {
4
+ throw new TypeError('RBAC ObjectSchema.objectType must be a non-empty string');
5
+ }
6
+ return `${objectType[0].toUpperCase()}${objectType.slice(1)}RbacFlow`;
7
+ }
@@ -0,0 +1,24 @@
1
+ import { middlewareHandler as middleware } from '@izara_project/izara-middleware';
2
+ import { recordHandlerSharedLib } from '@izara_project/izara-core-library-record-handler';
3
+ import callingFlowSharedLib from '@izara_project/izara-core-library-calling-flow';
4
+ import ProcessCreateTargetRole from './ProcessCreateTargetRole_Main.js';
5
+
6
+ middleware.setValidatorSchema(recordHandlerSharedLib.baseValidatorSchema());
7
+
8
+ export const main = middleware.wrap(async event => Promise.all(event.Records.map(async record => {
9
+ await recordHandlerSharedLib.validateRecord(
10
+ record,
11
+ 'ProcessCreateTargetRoleHdrSqs',
12
+ {},
13
+ null
14
+ );
15
+ return recordHandlerSharedLib.recordHandler(
16
+ record,
17
+ ProcessCreateTargetRole,
18
+ 'ProcessCreateTargetRoleHdrSqs',
19
+ [
20
+ record.body.Message,
21
+ callingFlowSharedLib.addCallingFlowToPassOnProperties(record.body.Message)
22
+ ]
23
+ );
24
+ })));
@@ -0,0 +1,25 @@
1
+ import dynamodbSharedLib from '@izara_project/izara-core-library-dynamodb';
2
+ import snsSharedLib from '@izara_project/izara-core-library-sns';
3
+ import { sns } from '@izara_project/izara-core-library-external-request';
4
+ import { identifierUuid } from '@izara_project/izara-shared-core';
5
+ import { consts } from '@izara_project/izara-core-library-core';
6
+
7
+ export default async function ProcessCreateTargetRole(_izContext, requestParams) {
8
+ try {
9
+ const userId = _izContext.correlationIds.get(consts.BASE_USER_ID);
10
+ const { roleName } = requestParams;
11
+ const roleId = identifierUuid();
12
+ await dynamodbSharedLib.putItem(
13
+ _izContext,
14
+ dynamodbSharedLib.tableName(_izContext, 'TargetRoles'),
15
+ { targetId: userId, roleIdKey: `${userId}_${roleId}`, roleName }
16
+ );
17
+ await sns.publishMessage(_izContext, {
18
+ message: { returnResult: { roleId } },
19
+ TopicArn: snsSharedLib.snsTopicArnByFlowSchema(_izContext, 'CreateTargetRole_Out')
20
+ });
21
+ } catch (error) {
22
+ _izContext.logger.error('[Rbac:ProcessCreateTargetRole] error:', error);
23
+ throw error;
24
+ }
25
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * GENERATED RBAC FLOW SCHEMA
3
+ * Action: <%- flowTag %>
4
+ */
5
+ export default <%- JSON.stringify(flow, null, 2) %>;
@@ -0,0 +1,17 @@
1
+ import { middlewareHandler as middleware, response } 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({}, { noAuthorizer: true });
6
+ export const main = middleware.wrap(async event => {
7
+ try {
8
+ const result = await Process<%- flowTag %>(
9
+ event._izContext,
10
+ event.body,
11
+ callingFlowSharedLib.addCallingFlowToPassOnProperties(event)
12
+ );
13
+ return result instanceof Error ? response.failure(result) : response.success(result);
14
+ } catch (error) {
15
+ return response.failure(error);
16
+ }
17
+ });
@@ -0,0 +1,13 @@
1
+ import { middlewareHandler as middleware } from '@izara_project/izara-middleware';
2
+ import { recordHandlerSharedLib } from '@izara_project/izara-core-library-record-handler';
3
+ import callingFlowSharedLib from '@izara_project/izara-core-library-calling-flow';
4
+ import Process<%- flowTag %> from './Process<%- flowTag %>_Main.js';
5
+
6
+ middleware.setValidatorSchema(recordHandlerSharedLib.baseValidatorSchema());
7
+ export const main = middleware.wrap(async event => Promise.all(event.Records.map(async record => {
8
+ await recordHandlerSharedLib.validateRecord(record, 'Process<%- flowTag %>HdrSqs', {}, null);
9
+ return recordHandlerSharedLib.recordHandler(record, Process<%- flowTag %>, 'Process<%- flowTag %>HdrSqs', [
10
+ record.body.Message,
11
+ callingFlowSharedLib.addCallingFlowToPassOnProperties(record.body.Message)
12
+ ]);
13
+ })));
@@ -0,0 +1,29 @@
1
+ import dynamodbSharedLib from '@izara_project/izara-core-library-dynamodb';
2
+ import snsSharedLib from '@izara_project/izara-core-library-sns';
3
+ import { sns } from '@izara_project/izara-core-library-external-request';
4
+ import { consts, NoRetryError } from '@izara_project/izara-core-library-core';
5
+
6
+ export default async function Process<%- flowTag %>(_izContext, requestParams) {
7
+ try {
8
+ <% if (useContextUserId) { -%>
9
+ const userId = _izContext.correlationIds.get(consts.BASE_USER_ID);
10
+ if (!userId) throw new NoRetryError('User Id not found.');
11
+ const queryParams = { userId };
12
+ <% } else { -%>
13
+ const { <%- requestProperty %> } = requestParams;
14
+ const queryParams = { <%- requestProperty %> };
15
+ <% } -%>
16
+ const resultQuery = await dynamodbSharedLib.query(
17
+ _izContext,
18
+ dynamodbSharedLib.tableName(_izContext, '<%- tableName %>'),
19
+ queryParams
20
+ );
21
+ await sns.publishMessage(_izContext, {
22
+ message: { returnResult: { records: resultQuery.Items || [] } },
23
+ TopicArn: snsSharedLib.snsTopicArnByFlowSchema(_izContext, '<%- flowTag %>_Out')
24
+ });
25
+ } catch (error) {
26
+ _izContext.logger.error('[Rbac:Process<%- flowTag %>] error:', error);
27
+ throw error;
28
+ }
29
+ }