@izara_project/izara-core-generate-service-code 1.0.64 → 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 (256) 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 -322
  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 -504
  108. package/src/codeGenerators/app/sls_yaml/__tests__/SharedResourceYamlGenerator.test.js +0 -235
  109. package/src/codeGenerators/app/sls_yaml/_policy/PolicyEmitter.js +0 -46
  110. package/src/codeGenerators/app/sls_yaml/_policy/PolicyRegistry.js +0 -94
  111. package/src/codeGenerators/app/sls_yaml/_policy/__tests__/PolicyEmitter.test.js +0 -55
  112. package/src/codeGenerators/app/sls_yaml/_policy/__tests__/PolicyRegistry.test.js +0 -48
  113. package/src/codeGenerators/app/sls_yaml/_policy/templates/ManagedPolicy_Yaml.ejs +0 -22
  114. package/src/codeGenerators/app/sls_yaml/renderYamlTemplate.js +0 -13
  115. package/src/codeGenerators/app/sls_yaml/templates/FindData_Yaml.ejs +0 -10
  116. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Api.ejs +0 -21
  117. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_EventBridge.ejs +0 -14
  118. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Inv.ejs +0 -6
  119. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Sqs.ejs +0 -11
  120. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Wbs.ejs +0 -11
  121. package/src/codeGenerators/app/sls_yaml/templates/ProcessLogical_Yaml.ejs +0 -32
  122. package/src/codeGenerators/app/sls_yaml/templates/RoleNameConfig_Yaml.ejs +0 -5
  123. package/src/codeGenerators/app/src/generatedCode/FindData/FindDataGenerator.js +0 -238
  124. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_HdrSqs.ejs +0 -87
  125. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_Main.ejs +0 -108
  126. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByDynamo.ejs +0 -32
  127. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByGraph.ejs +0 -87
  128. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/.gitkeep +0 -0
  129. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/EndpointsGenerator.js +0 -120
  130. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step/FlowEndpointComplete_Main.ejs +0 -313
  131. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/RbacFlowGenerator.js +0 -116
  132. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateRolePermissions.ejs +0 -135
  133. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateTargetRole.ejs +0 -131
  134. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateUserRole.ejs +0 -150
  135. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteRolePermissions.ejs +0 -132
  136. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteTargetRole.ejs +0 -132
  137. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteUserFromRole.ejs +0 -150
  138. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/FlowRbac_Main.ejs +0 -252
  139. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListRolePermissions.ejs +0 -120
  140. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListTargetRole.ejs +0 -122
  141. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListUserInRoles.ejs +0 -117
  142. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRelationships/RelationshipFlowGenerator.js +0 -148
  143. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/.gitkeep +0 -0
  144. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/StatusFieldGenerator.js +0 -109
  145. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/WebSocketGenerator.js +0 -122
  146. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint/FlowEntryPoint_Main.ejs +0 -38
  147. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusFieldSns_Yaml.ejs +0 -52
  148. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_HdrSqs.ejs +0 -84
  149. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_Main.ejs +0 -78
  150. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Awaiting_Main.ejs +0 -123
  151. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Paginated_Main.ejs +0 -59
  152. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_PlugIn_Main.ejs +0 -72
  153. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_RecievePlugIn_Main.ejs +0 -76
  154. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateAwaitingStep.ejs +0 -41
  155. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateSendPlugin.ejs +0 -18
  156. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketFlow_Yaml.ejs +0 -26
  157. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketSub_Yaml.ejs +0 -7
  158. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_HdrSqs.ejs +0 -66
  159. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Main.ejs +0 -115
  160. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Yaml.ejs +0 -36
  161. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Main.ejs +0 -52
  162. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Yaml.ejs +0 -13
  163. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketDynamoDb_Yaml.ejs +0 -28
  164. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseDsqHandler.js +0 -55
  165. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseSqsHandler.js +0 -66
  166. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/__tests__/BaseDsqHandler.test.js +0 -93
  167. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/dsq.js +0 -5
  168. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/eventBridge.js +0 -25
  169. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/extTopic.js +0 -6
  170. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncApi.js +0 -43
  171. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncInv.js +0 -43
  172. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/ownTopic.js +0 -54
  173. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/registry.js +0 -17
  174. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3.js +0 -56
  175. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ConfirmAfterUploadS3Generator.js +0 -46
  176. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreateObjectGenerator.js +0 -50
  177. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreatePreSignUrlGenerator.js +0 -48
  178. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ProcessAfterUploadS3Generator.js +0 -49
  179. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ReservedLimitGenerator.js +0 -47
  180. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/eventTypes.js +0 -23
  181. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowClassifier.js +0 -50
  182. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowEntryPointBase.js +0 -106
  183. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowMainFunctionBase.js +0 -172
  184. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowNaming.js +0 -37
  185. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowSelection.js +0 -19
  186. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepBase.js +0 -235
  187. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepNormalizer.js +0 -75
  188. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowValidator.js +0 -236
  189. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/propertyNormalizer.js +0 -15
  190. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/registry.js +0 -7
  191. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/roleNameDetection.js +0 -49
  192. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/triggerCacheBase.js +0 -177
  193. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_HdrSqs.ejs +0 -89
  194. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_Main.ejs +0 -83
  195. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_HdrSqs.ejs +0 -103
  196. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_Main.ejs +0 -58
  197. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrDsq.ejs +0 -104
  198. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrSqs.ejs +0 -88
  199. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_Main.ejs +0 -80
  200. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheQueue_Yaml.ejs +0 -36
  201. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/yaml/SharedFunctionSqs_Yaml.ejs +0 -13
  202. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/ProcessLogicalGenerator.js +0 -29
  203. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrDsq.ejs +0 -177
  204. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrSqs.ejs +0 -155
  205. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_Main.ejs +0 -268
  206. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_Main.ejs +0 -450
  207. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/RegisterGenerator.js +0 -149
  208. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_HdrSqs.ejs +0 -85
  209. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_Main.ejs +0 -176
  210. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_HdrWbs.ejs +0 -80
  211. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_Main.ejs +0 -164
  212. package/src/codeGenerators/app/src/generatedCode/libs/ConstsGenerator.js +0 -28
  213. package/src/codeGenerators/app/src/generatedCode/libs/GenerateCodeLibsGenerator.js +0 -28
  214. package/src/codeGenerators/app/src/generatedCode/libs/templates/Consts.ejs +0 -448
  215. package/src/codeGenerators/app/src/generatedCode/libs/templates/GenerateCodeLibs.ejs +0 -124
  216. package/src/codeGenerators/resource/sls_yaml/DynamoDBGenerator.js +0 -87
  217. package/src/codeGenerators/resource/sls_yaml/FlowOutGenerator.js +0 -70
  218. package/src/codeGenerators/resource/sls_yaml/FlowResourceYamlGenerator.js +0 -182
  219. package/src/core/renderTemplateFile.js +0 -22
  220. package/src/core/validate.js +0 -165
  221. package/src/generateCode.js +0 -358
  222. package/src/generateSchema.js +0 -123
  223. package/src/parsers/flowSchemaParser.js +0 -112
  224. package/src/parsers/objectSchemaParser.js +0 -39
  225. package/src/parsers/relationshipSchemaParser.js +0 -51
  226. package/src/schemaGenerators/app/src/schemas/FlowSchemas/FlowSchemaGenerator.js +0 -107
  227. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RbacFlowSchemaGenerator.js +0 -98
  228. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RelationshipFlowSchemaGenerator.js +0 -89
  229. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicFlowSchemaTemplate.ejs +0 -41
  230. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicRbacFlowSchemaTemplate.ejs +0 -20
  231. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/RelationshipFlowSchemaTemplate.ejs +0 -33
  232. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/UserRbacFlowSchemaTemplate.ejs +0 -22
  233. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/AttributeTreeSchemaGenerator.js +0 -124
  234. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/PropertyValueSchemaGenerator.js +0 -119
  235. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeManagerSchemaTemplate.ejs +0 -14
  236. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeStandardSchemaTemplate.ejs +0 -13
  237. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicPropertyValueSchemaTemplate.ejs +0 -15
  238. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/AttributeTreeRelationshipSchemaGenerator.js +0 -149
  239. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/PropertyValueRelationshipSchemaGenerator.js +0 -143
  240. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicAttributeTreeRelationshipSchemaTemplate.ejs +0 -7
  241. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicPropertyValueRelationshipSchemaTemplate.ejs +0 -7
  242. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/SystemTextGenerator.js +0 -102
  243. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/templates/SystemText_Template.ejs +0 -10
  244. package/test_schema.js +0 -2
  245. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrApi.ejs +0 -0
  246. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrInv.ejs +0 -0
  247. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/GetEndpoint_Main.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_HdrSqs.ejs +0 -0
  252. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationshipComplete_Main.ejs → emit/relationship/templates/MoveRelationshipComplete_Main.ejs} +0 -0
  253. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/DynamoDBTable_Yaml.ejs +0 -0
  254. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/FlowOut_Yaml.ejs +0 -0
  255. /package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceYaml.ejs +0 -0
  256. /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
+ }