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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/README.md +73 -11
  2. package/docs/TriggeredCache Flow.drawio +193 -0
  3. package/docs/test.mmd +47 -0
  4. package/docs/test.png +0 -0
  5. package/index.js +0 -5
  6. package/package.json +7 -6
  7. package/src/compile/compileProject.js +26 -0
  8. package/src/compile/loadSchemas.js +50 -0
  9. package/src/emit/crud/dynamicCrudFlowSchemaTemplate.js +11 -0
  10. package/src/emit/crud/emitCrudApplicationArtifacts.js +161 -0
  11. package/src/emit/crud/emitDynamicCrudFlowSchemas.js +84 -0
  12. package/src/emit/crud/generateCrudApplicationArtifacts.js +16 -0
  13. package/src/emit/crud/generateDynamicCrudFlowSchemas.js +21 -0
  14. package/src/emit/crud/loadLocalSchemaArrays.js +8 -0
  15. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/CreateEndpoint_Main.ejs +6 -6
  16. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/DeleteEndpoint_Main.ejs +6 -6
  17. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step → emit/crud/templates}/FlowEndpointBeforeLogical_Main.ejs +2 -2
  18. package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +96 -0
  19. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowEndpoint_HdrWbs.ejs +1 -1
  20. package/src/emit/crud/templates/FlowHandler_HdrApi.ejs +69 -0
  21. package/src/{codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_HdrSqs.ejs → emit/crud/templates/FlowHandler_HdrSqs.ejs} +52 -56
  22. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowMain_Wbs.ejs +1 -3
  23. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/GetEndpoint_Main.ejs +2 -2
  24. package/src/emit/crud/templates/GetRangeEndpoint_Main.ejs +127 -0
  25. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/UpdateEndpoint_Main.ejs +11 -9
  26. package/src/emit/custom/customFlows.js +121 -0
  27. package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +325 -0
  28. package/src/emit/custom/generateCustomFlowApplicationArtifacts.js +22 -0
  29. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/custom/templates}/FlowEndpoint_Main.ejs +5 -5
  30. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step → emit/custom/templates}/FlowStep_Main.ejs +1 -1
  31. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_Main.ejs +5 -5
  32. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_HdrWbs.ejs +1 -1
  33. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_Main.ejs +3 -3
  34. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_Main.ejs +4 -5
  35. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/FlowHandler_HdrS3.ejs +2 -8
  36. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ProcessS3File_Main.ejs +1 -1
  37. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_Main.ejs +5 -6
  38. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +32 -0
  39. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_Main.ejs +63 -0
  40. package/src/emit/custom/templates/triggerCache/TriggerCacheComplete_Main.ejs +35 -0
  41. package/src/emit/custom/templates/triggerCache/TriggerCache_Main.ejs +16 -0
  42. package/src/emit/function/functionYamlArtifact.js +125 -0
  43. package/src/emit/rbac/emitDynamicRbacFlowSchemas.js +117 -0
  44. package/src/emit/rbac/emitRbacApplicationArtifacts.js +270 -0
  45. package/src/emit/rbac/generateCreateTargetRoleHandler.js +19 -0
  46. package/src/emit/rbac/generateDynamicRbacFlowSchemas.js +21 -0
  47. package/src/emit/rbac/rbacFlowTag.js +7 -0
  48. package/src/emit/rbac/templates/CreateTargetRole_HdrSqs.ejs +24 -0
  49. package/src/emit/rbac/templates/CreateTargetRole_Main.ejs +25 -0
  50. package/src/emit/rbac/templates/DynamicRbacFlowSchema.ejs +5 -0
  51. package/src/emit/rbac/templates/ListRbac_HdrApi.ejs +17 -0
  52. package/src/emit/rbac/templates/ListRbac_HdrSqs.ejs +13 -0
  53. package/src/emit/rbac/templates/ListRbac_Main.ejs +29 -0
  54. package/src/emit/rbac/templates/RbacMutation_Main.ejs +22 -0
  55. package/src/emit/rbac/templates/UserRbacFlow_HdrInv.ejs +10 -0
  56. package/src/emit/rbac/templates/UserRbacFlow_Main.ejs +44 -0
  57. package/src/emit/rbac/templates/UserRoleMutation_Main.ejs +33 -0
  58. package/src/emit/relationship/dynamicRelationshipFlowSchemaTemplate.js +11 -0
  59. package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +66 -0
  60. package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +148 -0
  61. package/src/emit/relationship/generateDynamicRelationshipFlowSchemas.js +23 -0
  62. package/src/emit/relationship/generateRelationshipApplicationArtifacts.js +22 -0
  63. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationshipComplete_Main.ejs → emit/relationship/templates/ChangeRelationshipComplete_Main.ejs} +1 -1
  64. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationship_Main.ejs → emit/relationship/templates/ChangeRelationship_Main.ejs} +12 -4
  65. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationshipComplete_Main.ejs → emit/relationship/templates/CreateRelationshipComplete_Main.ejs} +1 -1
  66. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationship_Main.ejs → emit/relationship/templates/CreateRelationship_Main.ejs} +1 -1
  67. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationshipComplete_Main.ejs → emit/relationship/templates/DeleteRelationshipComplete_Main.ejs} +1 -1
  68. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationship_Main.ejs → emit/relationship/templates/DeleteRelationship_Main.ejs} +1 -1
  69. package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrDsq.ejs +1 -1
  70. package/src/emit/relationship/templates/FlowHandler_HdrInv.ejs +45 -0
  71. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationshipComplete_Main.ejs → emit/relationship/templates/GetRelationshipComplete_Main.ejs} +1 -1
  72. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationship_Main.ejs → emit/relationship/templates/GetRelationship_Main.ejs} +1 -1
  73. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationship_Main.ejs → emit/relationship/templates/MoveRelationship_Main.ejs} +9 -1
  74. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationshipComplete_Main.ejs → emit/relationship/templates/UpdateRelationshipComplete_Main.ejs} +1 -1
  75. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationship_Main.ejs → emit/relationship/templates/UpdateRelationship_Main.ejs} +1 -1
  76. package/src/emit/resource/emitResourceArtifacts.js +595 -0
  77. package/src/emit/resource/generateResourceArtifacts.js +20 -0
  78. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceBeforeLogicalYaml.ejs +1 -1
  79. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceSqsYaml.ejs +6 -6
  80. package/src/{codeGenerators/app/sls_yaml → emit/resource}/templates/SharedResource_Yaml.ejs +8 -8
  81. package/src/emit/system/emitSystemWebSocketArtifacts.js +183 -0
  82. package/src/generate.js +60 -126
  83. package/src/output/commitArtifacts.js +213 -0
  84. package/src/output/mergeHooks.js +55 -0
  85. package/src/output/validateArtifacts.js +62 -0
  86. package/src/plan/buildGenerationPlan.js +50 -0
  87. package/test/core.test.js +159 -0
  88. package/test/createTargetRoleHandler.test.js +68 -0
  89. package/test/crudApplicationArtifacts.test.js +107 -0
  90. package/test/customFlowApplicationArtifacts.test.js +297 -0
  91. package/test/dynamicCrudFlowSchemas.test.js +136 -0
  92. package/test/dynamicRbacFlowSchemas.test.js +101 -0
  93. package/test/dynamicRelationshipFlowSchemas.test.js +99 -0
  94. package/test/functionYamlArtifact.test.js +34 -0
  95. package/test/intTestApi.test.js +29 -0
  96. package/test/publicApi.test.js +209 -0
  97. package/test/relationshipApplicationArtifacts.test.js +68 -0
  98. package/test/resourceArtifacts.test.js +121 -0
  99. package/jsconfig.json +0 -9
  100. package/src/__tests__/getIntTestConfig.test.js +0 -51
  101. package/src/__tests__/intTestGeneratorShared.test.cjs +0 -169
  102. package/src/__tests__/pathIntTest.test.js +0 -103
  103. package/src/codeGenerators/app/initial_setup/InitialSetupGenerator.js +0 -199
  104. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_LambdaRole.ejs +0 -50
  105. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_SnsService.ejs +0 -15
  106. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_TableName.ejs +0 -9
  107. package/src/codeGenerators/app/sls_yaml/FindDataYamlGenerator.js +0 -23
  108. package/src/codeGenerators/app/sls_yaml/FunctionYamlGenerator.js +0 -332
  109. package/src/codeGenerators/app/sls_yaml/ProcessLogicalYamlGenerator.js +0 -21
  110. package/src/codeGenerators/app/sls_yaml/RoleNameConfigGenerator.js +0 -48
  111. package/src/codeGenerators/app/sls_yaml/SharedResourceYamlGenerator.js +0 -503
  112. package/src/codeGenerators/app/sls_yaml/__tests__/SharedResourceYamlGenerator.test.js +0 -235
  113. package/src/codeGenerators/app/sls_yaml/_policy/PolicyRegistry.js +0 -56
  114. package/src/codeGenerators/app/sls_yaml/_policy/__tests__/PolicyRegistry.test.js +0 -33
  115. package/src/codeGenerators/app/sls_yaml/renderYamlTemplate.js +0 -13
  116. package/src/codeGenerators/app/sls_yaml/templates/FindData_Yaml.ejs +0 -10
  117. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Api.ejs +0 -21
  118. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_EventBridge.ejs +0 -14
  119. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Inv.ejs +0 -6
  120. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Sqs.ejs +0 -11
  121. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Wbs.ejs +0 -11
  122. package/src/codeGenerators/app/sls_yaml/templates/ProcessLogical_Yaml.ejs +0 -32
  123. package/src/codeGenerators/app/sls_yaml/templates/RoleNameConfig_Yaml.ejs +0 -5
  124. package/src/codeGenerators/app/src/generatedCode/FindData/FindDataGenerator.js +0 -238
  125. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_HdrSqs.ejs +0 -87
  126. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_Main.ejs +0 -108
  127. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByDynamo.ejs +0 -32
  128. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByGraph.ejs +0 -87
  129. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/.gitkeep +0 -0
  130. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/EndpointsGenerator.js +0 -120
  131. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step/FlowEndpointComplete_Main.ejs +0 -313
  132. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/RbacFlowGenerator.js +0 -116
  133. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateRolePermissions.ejs +0 -135
  134. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateTargetRole.ejs +0 -131
  135. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateUserRole.ejs +0 -150
  136. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteRolePermissions.ejs +0 -132
  137. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteTargetRole.ejs +0 -132
  138. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteUserFromRole.ejs +0 -150
  139. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/FlowRbac_Main.ejs +0 -252
  140. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListRolePermissions.ejs +0 -120
  141. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListTargetRole.ejs +0 -122
  142. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListUserInRoles.ejs +0 -117
  143. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRelationships/RelationshipFlowGenerator.js +0 -148
  144. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/.gitkeep +0 -0
  145. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/StatusFieldGenerator.js +0 -109
  146. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/WebSocketGenerator.js +0 -122
  147. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint/FlowEntryPoint_Main.ejs +0 -38
  148. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusFieldSns_Yaml.ejs +0 -52
  149. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_HdrSqs.ejs +0 -84
  150. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_Main.ejs +0 -78
  151. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Awaiting_Main.ejs +0 -123
  152. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Paginated_Main.ejs +0 -59
  153. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_PlugIn_Main.ejs +0 -72
  154. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_RecievePlugIn_Main.ejs +0 -76
  155. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateAwaitingStep.ejs +0 -41
  156. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateSendPlugin.ejs +0 -18
  157. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketFlow_Yaml.ejs +0 -26
  158. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketSub_Yaml.ejs +0 -7
  159. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_HdrSqs.ejs +0 -66
  160. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Main.ejs +0 -115
  161. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Yaml.ejs +0 -36
  162. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Main.ejs +0 -52
  163. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Yaml.ejs +0 -13
  164. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketDynamoDb_Yaml.ejs +0 -28
  165. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseDsqHandler.js +0 -63
  166. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseSqsHandler.js +0 -66
  167. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/__tests__/BaseDsqHandler.test.js +0 -94
  168. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/dsq.js +0 -5
  169. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/eventBridge.js +0 -33
  170. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/extTopic.js +0 -6
  171. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncApi.js +0 -51
  172. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncInv.js +0 -51
  173. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/ownTopic.js +0 -54
  174. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/registry.js +0 -17
  175. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3.js +0 -56
  176. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ConfirmAfterUploadS3Generator.js +0 -46
  177. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreateObjectGenerator.js +0 -50
  178. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreatePreSignUrlGenerator.js +0 -48
  179. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ProcessAfterUploadS3Generator.js +0 -49
  180. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ReservedLimitGenerator.js +0 -47
  181. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/eventTypes.js +0 -23
  182. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowClassifier.js +0 -50
  183. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowEntryPointBase.js +0 -106
  184. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowMainFunctionBase.js +0 -172
  185. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowNaming.js +0 -37
  186. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowSelection.js +0 -19
  187. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepBase.js +0 -235
  188. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepNormalizer.js +0 -75
  189. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowValidator.js +0 -267
  190. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/propertyNormalizer.js +0 -18
  191. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/registry.js +0 -7
  192. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/roleNameDetection.js +0 -49
  193. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/triggerCacheBase.js +0 -177
  194. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_HdrSqs.ejs +0 -89
  195. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_Main.ejs +0 -83
  196. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_HdrSqs.ejs +0 -103
  197. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_Main.ejs +0 -58
  198. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrDsq.ejs +0 -104
  199. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrSqs.ejs +0 -88
  200. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_Main.ejs +0 -80
  201. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheQueue_Yaml.ejs +0 -36
  202. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/yaml/SharedFunctionSqs_Yaml.ejs +0 -13
  203. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/ProcessLogicalGenerator.js +0 -29
  204. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrDsq.ejs +0 -177
  205. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrSqs.ejs +0 -155
  206. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_Main.ejs +0 -268
  207. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_Main.ejs +0 -450
  208. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/RegisterGenerator.js +0 -149
  209. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_HdrSqs.ejs +0 -85
  210. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_Main.ejs +0 -176
  211. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_HdrWbs.ejs +0 -80
  212. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_Main.ejs +0 -164
  213. package/src/codeGenerators/app/src/generatedCode/libs/ConstsGenerator.js +0 -28
  214. package/src/codeGenerators/app/src/generatedCode/libs/GenerateCodeLibsGenerator.js +0 -28
  215. package/src/codeGenerators/app/src/generatedCode/libs/templates/Consts.ejs +0 -448
  216. package/src/codeGenerators/app/src/generatedCode/libs/templates/GenerateCodeLibs.ejs +0 -124
  217. package/src/codeGenerators/resource/sls_yaml/DynamoDBGenerator.js +0 -87
  218. package/src/codeGenerators/resource/sls_yaml/FlowOutGenerator.js +0 -70
  219. package/src/codeGenerators/resource/sls_yaml/FlowResourceYamlGenerator.js +0 -182
  220. package/src/core/renderTemplateFile.js +0 -22
  221. package/src/core/validate.js +0 -165
  222. package/src/generateCode.js +0 -357
  223. package/src/generateSchema.js +0 -123
  224. package/src/parsers/flowSchemaParser.js +0 -112
  225. package/src/parsers/objectSchemaParser.js +0 -39
  226. package/src/parsers/relationshipSchemaParser.js +0 -51
  227. package/src/schemaGenerators/app/src/schemas/FlowSchemas/FlowSchemaGenerator.js +0 -107
  228. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RbacFlowSchemaGenerator.js +0 -98
  229. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RelationshipFlowSchemaGenerator.js +0 -89
  230. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicFlowSchemaTemplate.ejs +0 -41
  231. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicRbacFlowSchemaTemplate.ejs +0 -20
  232. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/RelationshipFlowSchemaTemplate.ejs +0 -33
  233. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/UserRbacFlowSchemaTemplate.ejs +0 -22
  234. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/AttributeTreeSchemaGenerator.js +0 -124
  235. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/PropertyValueSchemaGenerator.js +0 -119
  236. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeManagerSchemaTemplate.ejs +0 -14
  237. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeStandardSchemaTemplate.ejs +0 -13
  238. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicPropertyValueSchemaTemplate.ejs +0 -15
  239. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/AttributeTreeRelationshipSchemaGenerator.js +0 -109
  240. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/PropertyValueRelationshipSchemaGenerator.js +0 -103
  241. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/__tests__/relationshipSchemaHelpers.test.js +0 -38
  242. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/relationshipSchemaHelpers.js +0 -40
  243. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicAttributeTreeRelationshipSchemaTemplate.ejs +0 -7
  244. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicPropertyValueRelationshipSchemaTemplate.ejs +0 -7
  245. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/SystemTextGenerator.js +0 -102
  246. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/templates/SystemText_Template.ejs +0 -10
  247. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrInv.ejs +0 -0
  248. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_HdrSqs.ejs +0 -0
  249. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_HdrSqs.ejs +0 -0
  250. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_HdrSqs.ejs +0 -0
  251. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrApi.ejs +0 -0
  252. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrSqs.ejs +0 -0
  253. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationshipComplete_Main.ejs → emit/relationship/templates/MoveRelationshipComplete_Main.ejs} +0 -0
  254. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/DynamoDBTable_Yaml.ejs +0 -0
  255. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/FlowOut_Yaml.ejs +0 -0
  256. /package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceYaml.ejs +0 -0
  257. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/SystemDynamoDB_Yaml.ejs +0 -0
@@ -0,0 +1,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
+ }
@@ -0,0 +1,22 @@
1
+ <% const fieldList = fields.join(', '); -%>
2
+ import dynamodbSharedLib from '@izara_project/izara-core-library-dynamodb';
3
+ import snsSharedLib from '@izara_project/izara-core-library-sns';
4
+ import { sns } from '@izara_project/izara-core-library-external-request';
5
+
6
+ export default async function Process<%- flowTag %>(_izContext, requestParams) {
7
+ try {
8
+ const { <%- fieldList %> } = requestParams;
9
+ await dynamodbSharedLib.<%- method %>(
10
+ _izContext,
11
+ dynamodbSharedLib.tableName(_izContext, '<%- tableName %>'),
12
+ { <%- fieldList %> }
13
+ );
14
+ await sns.publishMessage(_izContext, {
15
+ message: { returnResult: { <%- fieldList %> } },
16
+ TopicArn: snsSharedLib.snsTopicArnByFlowSchema(_izContext, '<%- flowTag %>_Out')
17
+ });
18
+ } catch (error) {
19
+ _izContext.logger.error('[Rbac:Process<%- flowTag %>] error:', error);
20
+ throw error;
21
+ }
22
+ }
@@ -0,0 +1,10 @@
1
+ import { middlewareHandler as middleware } from '@izara_project/izara-middleware';
2
+ import callingFlowSharedLib from '@izara_project/izara-core-library-calling-flow';
3
+ import Process<%- flowTag %> from './Process<%- flowTag %>_Main.js';
4
+
5
+ middleware.setValidatorSchema({});
6
+ export const main = middleware.wrap(async event => Process<%- flowTag %>(
7
+ event._izContext,
8
+ event,
9
+ callingFlowSharedLib.addCallingFlowToPassOnProperties(event)
10
+ ));
@@ -0,0 +1,44 @@
1
+ import dynamodbSharedLib from '@izara_project/izara-core-library-dynamodb';
2
+ import { coreConsts } from '@izara_project/izara-core-library-core';
3
+
4
+ export default async function Process<%- flowTag %>(_izContext, requestParams) {
5
+ try {
6
+ const userId = _izContext.correlationIds.get(coreConsts.BASE_USER_ID);
7
+ const targetId = _izContext.correlationIds.get(coreConsts.TARGET_ID);
8
+ if (!userId && !targetId) throw new Error('Missing required request parameters: userId or targetId');
9
+ const { flowTypeConcat, inputParameterGroups } = requestParams;
10
+ if (!flowTypeConcat) throw new Error('Missing flowTypeConcat in requestParams');
11
+ const userRoles = (await dynamodbSharedLib.query(
12
+ _izContext,
13
+ dynamodbSharedLib.tableName(_izContext, 'UserRoles'),
14
+ { userId }
15
+ )).Items || [];
16
+ const targetRoles = userRoles.filter(role => role.roleIdKey?.startsWith(targetId + '_'));
17
+ for (const role of targetRoles) {
18
+ const permission = await dynamodbSharedLib.getItem(
19
+ _izContext,
20
+ dynamodbSharedLib.tableName(_izContext, 'RolePermissions'),
21
+ { roleIdKey: role.roleIdKey, flowTypeConcat }
22
+ );
23
+ if (permission?.permission === true && matchesParameterGroups(permission.parameterGroups, inputParameterGroups)) {
24
+ return { permission: true, roleIdKey: permission.roleIdKey };
25
+ }
26
+ }
27
+ return { permission: false, roleIdKey: '' };
28
+ } catch (error) {
29
+ _izContext.logger.error('error Process<%- flowTag %>:', error);
30
+ throw error;
31
+ }
32
+ }
33
+
34
+ function matchesParameterGroups(groups, input) {
35
+ if (!groups || typeof groups !== 'object' || Array.isArray(groups) || Object.keys(groups).length === 0) return true;
36
+ return Object.values(groups).some(group => Array.isArray(group) && group.every(check => {
37
+ let value = input || {};
38
+ for (const name of check.parameterNames || []) {
39
+ if (!value || typeof value !== 'object' || !(name in value)) return false;
40
+ value = value[name];
41
+ }
42
+ return Array.isArray(check.parameterValues) && check.parameterValues.includes(value);
43
+ }));
44
+ }
@@ -0,0 +1,33 @@
1
+ <%
2
+ const itemType = operation === 'Put' ? 'Item' : 'Key';
3
+ const roleUsersKey = operation === 'Put' ? 'userId, roleIdKey' : 'roleIdKey, userId';
4
+ -%>import dynamodbSharedLib from '@izara_project/izara-core-library-dynamodb';
5
+ import snsSharedLib from '@izara_project/izara-core-library-sns';
6
+ import { sns } from '@izara_project/izara-core-library-external-request';
7
+
8
+ export default async function Process<%- flowTag %>(_izContext, requestParams) {
9
+ try {
10
+ const { roleIdKey, userId } = requestParams;
11
+ await dynamodbSharedLib.transactWriteItems(_izContext, [
12
+ {
13
+ <%- operation %>: {
14
+ TableName: dynamodbSharedLib.tableName(_izContext, 'RoleUsers'),
15
+ <%- itemType %>: { <%- roleUsersKey %> }
16
+ }
17
+ },
18
+ {
19
+ <%- operation %>: {
20
+ TableName: dynamodbSharedLib.tableName(_izContext, 'UserRoles'),
21
+ <%- itemType %>: { userId, roleIdKey }
22
+ }
23
+ }
24
+ ]);
25
+ await sns.publishMessage(_izContext, {
26
+ message: { returnResult: { userId, roleIdKey } },
27
+ TopicArn: snsSharedLib.snsTopicArnByFlowSchema(_izContext, '<%- flowTag %>_Out')
28
+ });
29
+ } catch (error) {
30
+ _izContext.logger.error('[Rbac:Process<%- flowTag %>] error:', error);
31
+ throw error;
32
+ }
33
+ }
@@ -0,0 +1,11 @@
1
+ export function renderDynamicRelationshipFlowSchema(action, flow) {
2
+ return [
3
+ '/**',
4
+ ' * GENERATED DYNAMIC RELATIONSHIP FLOW SCHEMA',
5
+ ` * Action: ${action}`,
6
+ ' * Description: Handles dynamic relationship actions for all allowed RelationshipTypes via SQS/DSQ',
7
+ ' */',
8
+ `export default ${JSON.stringify(flow, null, 2)};`,
9
+ ''
10
+ ].join('\n');
11
+ }
@@ -0,0 +1,66 @@
1
+ import { renderDynamicRelationshipFlowSchema } from './dynamicRelationshipFlowSchemaTemplate.js';
2
+
3
+ const ACTIONS = [
4
+ 'CreateRelationship',
5
+ 'UpdateRelationship',
6
+ 'DeleteRelationship',
7
+ 'GetRelationship',
8
+ 'ChangeRelationship',
9
+ 'MoveRelationship'
10
+ ];
11
+ const MESSAGE_ATTRIBUTES = ['userId', 'correlationId'];
12
+
13
+ export const dynamicRelationshipFlowSchemaPaths = ACTIONS.map(
14
+ action => `app/src/schemas/FlowSchemas/generateCode/${action}.js`
15
+ );
16
+
17
+ export function emitDynamicRelationshipFlowSchemas() {
18
+ // Keep legacy compatibility: relationship flow endpoints exist even before a relationship is declared.
19
+ return ACTIONS.map((action, index) => ({
20
+ path: dynamicRelationshipFlowSchemaPaths[index],
21
+ content: renderDynamicRelationshipFlowSchema(action, createDynamicRelationshipFlow(action))
22
+ }));
23
+ }
24
+
25
+ function createDynamicRelationshipFlow(action) {
26
+ const outputTopic = action !== 'GetRelationship';
27
+ const flowSteps = [
28
+ {
29
+ stepName: 'start',
30
+ properties: [],
31
+ messageAttributes: MESSAGE_ATTRIBUTES,
32
+ ...(outputTopic ? {
33
+ returnValues: {
34
+ properties: [],
35
+ messageAttributes: MESSAGE_ATTRIBUTES
36
+ }
37
+ } : {})
38
+ }
39
+ ];
40
+
41
+ if (outputTopic) {
42
+ flowSteps.push({
43
+ stepName: 'Complete',
44
+ event: ['extTopic'],
45
+ properties: [],
46
+ messageAttributes: MESSAGE_ATTRIBUTES
47
+ });
48
+ }
49
+
50
+ return {
51
+ flowTag: action,
52
+ isDynamicRelationshipType: true,
53
+ initiateBy: 'system',
54
+ handleObj: 'one',
55
+ statusType: 'none',
56
+ event: outputTopic
57
+ ? ['ownTopic']
58
+ : ['lambdaSyncInv', 'lambdaSyncApi', 'dsq', 'ownTopic'],
59
+ outputTopic,
60
+ stepMessageAttributes: {
61
+ userId: { propertyName: 'x-correlation-base-user-id', type: 'string' },
62
+ correlationId: { propertyName: 'x-correlation-id', type: 'string' }
63
+ },
64
+ flowSteps
65
+ };
66
+ }
@@ -0,0 +1,148 @@
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
+
11
+ const ACTIONS = [
12
+ 'CreateRelationship',
13
+ 'UpdateRelationship',
14
+ 'DeleteRelationship',
15
+ 'GetRelationship',
16
+ 'ChangeRelationship',
17
+ 'MoveRelationship'
18
+ ];
19
+ const YAML_PATH = 'app/sls_yaml/generatedCode/source/flow-relationships.yml';
20
+ const TEMPLATE_URL = new URL('./templates/', import.meta.url);
21
+
22
+ export async function emitRelationshipApplicationArtifacts({ relationships, flows = [], serviceTag }) {
23
+ if (!Array.isArray(relationships) || !Array.isArray(flows)) {
24
+ throw new TypeError('relationships and flows must be arrays');
25
+ }
26
+ if (relationships.length === 0) return [];
27
+
28
+ const handlers = await Promise.all(ACTIONS.map(action => emitAction(action, relationships, flows, serviceTag)));
29
+ return [
30
+ ...handlers.flatMap(handler => handler.artifacts),
31
+ { path: YAML_PATH, content: handlers.flatMap(handler => handler.functions).map(renderFunction).join('\n') }
32
+ ];
33
+ }
34
+
35
+ export function relationshipApplicationManagedPaths() {
36
+ return [
37
+ ...ACTIONS.flatMap(action => {
38
+ const source = `app/src/generatedCode/FlowRelationships/${action}/source`;
39
+ return [
40
+ `${source}/${action}_Main.js`,
41
+ `${source}/${action}_HdrSqs.js`,
42
+ `${source}/${action}_HdrDsq.js`,
43
+ `${source}/${action}_HdrApi.js`,
44
+ `${source}/${action}_HdrInv.js`,
45
+ `${source}/${action}_WbsMain.js`,
46
+ `${source}/${action}_HdrWbs.js`,
47
+ `${source}/${action}Complete_Main.js`,
48
+ `${source}/${action}Complete_HdrSqs.js`
49
+ ];
50
+ }),
51
+ YAML_PATH
52
+ ];
53
+ }
54
+
55
+ async function emitAction(action, relationships, flows, serviceTag) {
56
+ const source = `app/src/generatedCode/FlowRelationships/${action}/source`;
57
+ const handlerRoot = `src/generatedCode/FlowRelationships/${action}/source`;
58
+ const flow = flows.find(candidate => candidate?.flowTag === action);
59
+ const events = normalizeEvents(flow?.event, action === 'GetRelationship'
60
+ ? ['lambdaSyncInv', 'lambdaSyncApi', 'dsq', 'ownTopic']
61
+ : ['ownTopic']);
62
+ const shared = { flowTag: action, flowStepName: '', mainFileName: `${action}_Main`, functionName: action, startConfig: null };
63
+ const artifacts = [{ path: `${source}/${action}_Main.js`, content: await render(`${action}_Main.ejs`, { functionName: action, upperFunctionName: action }) }];
64
+ const functions = [];
65
+
66
+ if (events.includes('ownTopic')) {
67
+ artifacts.push(
68
+ { path: `${source}/${action}_WbsMain.js`, content: await renderShared('FlowMain_Wbs.ejs', { flowTag: action, upperCaseFlowTag: action, functionName: action }) },
69
+ { path: `${source}/${action}_HdrWbs.js`, content: await renderShared('FlowEndpoint_HdrWbs.ejs', { flowTag: action, upperCaseFlowTag: action, functionName: action, mainFileName: `${action}_WbsMain`, route: action }) }
70
+ );
71
+ functions.push({ type: 'wbs', functionName: `${action}HdrWbs`, handlerPath: `${handlerRoot}/${action}_HdrWbs.main`, roleName: 'FlowRelationshipRole', routeName: action, flowTag: action, flowStepName: '' });
72
+ }
73
+
74
+ for (const event of events) {
75
+ const handler = eventHandler(event, action, handlerRoot, relationships, serviceTag);
76
+ if (!handler) continue;
77
+ artifacts.push({ path: `${source}/${handler.fileName}.js`, content: await render(handler.template, { ...shared, queueName: handler.queueName }) });
78
+ functions.push(handler.descriptor);
79
+ }
80
+
81
+ const complete = `${action}Complete`;
82
+ artifacts.push(
83
+ { path: `${source}/${complete}_Main.js`, content: await render(`${action}Complete_Main.ejs`, { functionName: complete, upperFunctionName: complete }) },
84
+ { path: `${source}/${complete}_HdrSqs.js`, content: await renderShared('FlowHandler_HdrSqs.ejs', { ...shared, flowStepName: 'Complete', mainFileName: `${complete}_Main`, functionName: complete, queueName: `${complete}HdrSqs` }) }
85
+ );
86
+ functions.push({ type: 'sqs', functionName: `${action}CompleteHdrSqs`, handlerPath: `${handlerRoot}/${complete}_HdrSqs.main`, roleName: 'FlowRelationshipRole', queueName: `${complete}HdrSqs`, flowTag: action, flowStepName: 'Complete' });
87
+ return { artifacts, functions };
88
+ }
89
+
90
+ function eventHandler(event, action, handlerRoot, relationships, serviceTag) {
91
+ if (event === 'ownTopic' || event === 'extTopic') {
92
+ return {
93
+ fileName: `${action}_HdrSqs`, template: 'FlowHandler_HdrSqs.ejs', queueName: `${action}HdrSqs`,
94
+ descriptor: { type: 'sqs', functionName: `${action.replace('Relationship', 'Rel')}HdrSqs`, handlerPath: `${handlerRoot}/${action}_HdrSqs.main`, roleName: 'FlowRelationshipRole', queueName: `${action}HdrSqs`, flowTag: action, flowStepName: '' }
95
+ };
96
+ }
97
+ if (event === 'dsq') {
98
+ return {
99
+ fileName: `${action}_HdrDsq`, template: 'FlowHandler_HdrDsq.ejs', queueName: `${action}HdrDsq`,
100
+ descriptor: { type: 'sqs', functionName: `${action.replace('Relationship', 'Rel')}HdrDsq`, handlerPath: `${handlerRoot}/${action}_HdrDsq.main`, roleName: 'FlowRelationshipRole', queueName: `${action}HdrDsq`, flowTag: action, flowStepName: '' }
101
+ };
102
+ }
103
+ if (event === 'lambdaSyncInv') {
104
+ return {
105
+ fileName: `${action}_HdrInv`, template: 'FlowHandler_HdrInv.ejs',
106
+ descriptor: { type: 'inv', functionName: `${action.replace('Relationship', 'Rel')}HdrInv`, handlerPath: `${handlerRoot}/${action}_HdrInv.main`, roleName: 'FlowRelationshipRole', flowTag: action, flowStepName: '' }
107
+ };
108
+ }
109
+ if (event === 'lambdaSyncApi') {
110
+ return {
111
+ fileName: `${action}_HdrApi`, template: 'FlowHandler_HdrApi.ejs',
112
+ descriptor: {
113
+ type: 'api', functionName: `${action.replace('Relationship', 'Rel')}HdrApi`, handlerPath: `${handlerRoot}/${action}_HdrApi.main`, roleName: 'FlowRelationshipRole',
114
+ flowTag: action, flowStepName: '',
115
+ routes: relationships.map(relationship => {
116
+ const name = relationship.relationshipTag ?? Object.keys(relationship)[0];
117
+ return { path: `/${serviceTag ?? '${self:custom.iz_serviceName}'}/${name}/${action.toLowerCase().replace('relationship', '')}`, upperName: upperFirst(name) };
118
+ })
119
+ }
120
+ };
121
+ }
122
+ return undefined;
123
+ }
124
+
125
+ function normalizeEvents(events, fallback) {
126
+ return events === undefined ? fallback : (Array.isArray(events) ? events : [events]);
127
+ }
128
+
129
+ function upperFirst(value) {
130
+ return value.charAt(0).toUpperCase() + value.slice(1);
131
+ }
132
+
133
+ async function render(templateName, data) {
134
+ const template = await readFile(new URL(templateName, TEMPLATE_URL), 'utf8');
135
+ return ejs.render(template, data);
136
+ }
137
+
138
+ async function renderShared(templateName, data) {
139
+ const template = await readFile(new URL(`../crud/templates/${templateName}`, import.meta.url), 'utf8');
140
+ return ejs.render(template, data);
141
+ }
142
+
143
+ function renderFunction(descriptor) {
144
+ if (descriptor.type === 'api') return renderApiFunctionYaml(descriptor);
145
+ if (descriptor.type === 'inv') return renderInvFunctionYaml(descriptor);
146
+ if (descriptor.type === 'wbs') return renderWbsFunctionYaml(descriptor);
147
+ return renderSqsFunctionYaml(descriptor);
148
+ }
@@ -0,0 +1,23 @@
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
+ dynamicRelationshipFlowSchemaPaths,
7
+ emitDynamicRelationshipFlowSchemas
8
+ } from './emitDynamicRelationshipFlowSchemas.js';
9
+
10
+ export async function generateDynamicRelationshipFlowSchemas(rootPath, options = {}) {
11
+ const project = compileProject({ ...options, rootPath });
12
+ // The legacy generator creates these endpoints even with no relationships. Load now to
13
+ // validate the V2 source-module contract before later slices consume relationship data.
14
+ await loadLocalSchemaDirectory(project, 'RelationshipSchemas');
15
+ const plan = buildGenerationPlan(
16
+ project,
17
+ emitDynamicRelationshipFlowSchemas(),
18
+ { managedPaths: dynamicRelationshipFlowSchemaPaths, managedScope: 'relationship-flow-schemas' }
19
+ );
20
+ const files = await commitArtifacts(plan);
21
+
22
+ return { project, files };
23
+ }
@@ -0,0 +1,22 @@
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
+ emitRelationshipApplicationArtifacts,
7
+ relationshipApplicationManagedPaths
8
+ } from './emitRelationshipApplicationArtifacts.js';
9
+
10
+ export async function generateRelationshipApplicationArtifacts(rootPath, options = {}) {
11
+ const project = compileProject({ ...options, rootPath });
12
+ const [relationships, flows] = await Promise.all([
13
+ loadLocalSchemaDirectory(project, 'RelationshipSchemas'),
14
+ loadLocalSchemaDirectory(project, 'FlowSchemas')
15
+ ]);
16
+ const artifacts = await emitRelationshipApplicationArtifacts({ relationships, flows, serviceTag: project.serviceTag });
17
+ const files = await commitArtifacts(buildGenerationPlan(project, artifacts, {
18
+ managedPaths: relationshipApplicationManagedPaths(),
19
+ managedScope: 'relationship-application'
20
+ }));
21
+ return { project, files };
22
+ }
@@ -140,4 +140,4 @@ export default async function changeRelationshipComplete(
140
140
  _izContext.logger.error('error createRelationshipComplete:', err)
141
141
  throw (err)
142
142
  }
143
- }
143
+ }
@@ -126,7 +126,7 @@ export default async function <%- functionName %> (
126
126
  const oldRelationshipSchema = await getRelationshipSchemaWithCache(_izContext, oldRelTypeAndDirection.relType);
127
127
  _izContext.logger.debug("oldRelationshipSchema ", oldRelationshipSchema);
128
128
 
129
- const newRelationshipSchema = await getRelationshipSchemaWithCache(_izContext, newRelType);
129
+ const newRelationshipSchema = await getRelationshipSchemaWithCache(_izContext, newRelType.relType);
130
130
  _izContext.logger.debug("newRelationshipSchema: ", newRelationshipSchema);
131
131
  if (!oldRelationshipSchema.hasOwnProperty('canChangeToRelTypes')) {
132
132
  errorsFound.push(`${oldRelTypeAndDirection.relType} not have property to change to another relType`);
@@ -138,6 +138,8 @@ export default async function <%- functionName %> (
138
138
  if (canChangeToRelType.relType.serviceTag === newRelType.serviceTag &&
139
139
  canChangeToRelType.relType.relationshipTag === newRelType.relationshipTag) {
140
140
  // check changeBy
141
+ // ? Legacy Code:
142
+ /*
141
143
  if (canChangeToRelType.changeBy === "user") {
142
144
  // if changeBy is user will check for importBatch callingFlow
143
145
  if (callingFlowConfig) {
@@ -146,6 +148,12 @@ export default async function <%- functionName %> (
146
148
  }
147
149
  }
148
150
  }
151
+ */
152
+ // ? [Fix]: The legacy logic incorrectly blocked "user" from regular execution and allowed non-user values.
153
+ // ? It has been corrected to require changeBy === "user" for normal execution.
154
+ if (canChangeToRelType.changeBy !== "user") {
155
+ errorsFound.push(`CanChangeToRelType changeBy is not user`);
156
+ }
149
157
  }
150
158
  });
151
159
  };
@@ -314,11 +322,11 @@ export default async function <%- functionName %> (
314
322
  // save awaiting
315
323
  await asyncFlowSharedLib.createAwaitingMultipleSteps(
316
324
  _izContext,
317
- awaitingStepIds, // awaitingStepIds
318
325
  asyncFlowSharedLib.createPendingStepId( // pendingStepId
319
326
  _izContext.uniqueRequestId, // hash id
320
327
  PREFIX.changeRel // prefix, use constant further
321
- )
328
+ ),
329
+ awaitingStepIds // awaitingStepIds
322
330
  );
323
331
 
324
332
  // prepare message body
@@ -383,4 +391,4 @@ export default async function <%- functionName %> (
383
391
  _izContext.logger.error('error ChangeRelationship: ', err)
384
392
  throw (err)
385
393
  }
386
- }
394
+ }
@@ -141,4 +141,4 @@ export default async function createRelationshipComplete(
141
141
  _izContext.logger.error('error createRelationshipComplete:', err)
142
142
  throw (err)
143
143
  }
144
- }
144
+ }
@@ -435,4 +435,4 @@ export default async function createRelationship(
435
435
  _izContext.logger.error('error updateRelationship: ', err)
436
436
  throw (err)
437
437
  }
438
- }
438
+ }
@@ -123,4 +123,4 @@ export default async function deleteRelationshipComplete(
123
123
  _izContext.logger.error('error deleteRelationshipComplete:', err)
124
124
  throw (err)
125
125
  }
126
- }
126
+ }
@@ -353,4 +353,4 @@ export default async function deleteRelationship(
353
353
  _izContext.logger.error('error deleteRelationship: ', err)
354
354
  throw (err)
355
355
  }
356
- }
356
+ }
@@ -94,7 +94,7 @@ export const main = middleware.wrap(async (event, context) => {
94
94
 
95
95
  // add argument (to invoke lambda) to passOnProperties[]
96
96
  passOnProperties.push(record.body.Message);
97
- <% if (functionName.endsWith('Complete')) { %>
97
+ <% if (typeof usePassBack === 'undefined' ? functionName.endsWith('Complete') : usePassBack) { %>
98
98
  passOnProperties.push(
99
99
  callingFlowSharedLib.addPassBackPropertiesToPassOnProperties(
100
100
  record.body.Message
@@ -0,0 +1,45 @@
1
+ import { middlewareHandler as middleware } from "@izara_project/izara-middleware";
2
+ import callingFlowSharedLib from '@izara_project/izara-core-library-calling-flow';
3
+
4
+ import <%= functionName %> from './<%= mainFileName %>.js';
5
+
6
+ const validatorSchema = {
7
+ //(<validatorSchema>)
8
+ <% if (typeof startConfig !== 'undefined' && startConfig !== null && startConfig.properties && startConfig.properties.length > 0) { -%>
9
+ type: 'object',
10
+ properties: {
11
+ <% startConfig.properties.forEach(prop => { -%>
12
+ <%- prop.propertyName %>: { type: '<%- prop.type || 'string' %>' },
13
+ <% }) -%>
14
+ },
15
+ required: [ <%- startConfig.properties.filter(p => p.required !== false).map(p => `'${p.propertyName}'`).join(', ') %> ]
16
+ <% } -%>
17
+ //(</validatorSchema>)
18
+ };
19
+
20
+ middleware.setValidatorSchema(validatorSchema);
21
+
22
+ /**
23
+ * GENERATED HANDLER: <%= flowStepName %> (Flow: <%= flowTag %>)
24
+ * Triggered by: Lambda Invocation
25
+ */
26
+ export const main = middleware.wrap(async (event, context) => {
27
+ event._izContext?.logger?.debug(`[${context.awsRequestId}] Received Invocation in <%= flowStepName %>`);
28
+
29
+ try {
30
+ const passOnProperties = [
31
+ event,
32
+ //(<additionalParams>)
33
+ //(</additionalParams>)
34
+ callingFlowSharedLib.addCallingFlowToPassOnProperties(event)
35
+ ];
36
+
37
+ return await <%= functionName %>(
38
+ event._izContext,
39
+ ...passOnProperties
40
+ );
41
+ } catch (err) {
42
+ event._izContext?.logger?.error('Unhandled Error in <%= flowStepName %> Invocation:', err);
43
+ throw err;
44
+ }
45
+ });
@@ -96,4 +96,4 @@ export default async function getRelationshipComplete(
96
96
  _izContext.logger.error('error GetRelationshipComplete:', err)
97
97
  throw (err)
98
98
  }
99
- }
99
+ }
@@ -329,4 +329,4 @@ export default async function getRelationship(
329
329
  _izContext.logger.error('error getRelationship: ', err)
330
330
  throw (err)
331
331
  }
332
- }
332
+ }
@@ -131,6 +131,8 @@ export default async function moveRelationship(
131
131
 
132
132
  if (!relationshipSchema.hasOwnProperty("moveBy") || relationshipSchema.moveBy === "none") {
133
133
  errorsFound.push(`relationship: ${relType.relationshipTag} can't move`);
134
+ // ? Legacy Code:
135
+ /*
134
136
  } else if (relationshipSchema.moveBy === "user") {
135
137
  if (callingFlowConfig) {
136
138
  if (callingFlowConfig.callingFlow !== "ImportDataTestExternalUpdateRelationshipHdrSqs") {
@@ -138,6 +140,12 @@ export default async function moveRelationship(
138
140
  }
139
141
  }
140
142
  }
143
+ */
144
+ // ? [Fix]: The legacy logic incorrectly blocked "user" from regular execution and allowed non-user values.
145
+ // ? It has been corrected to require moveBy === "user" for normal execution.
146
+ } else if (relationshipSchema.moveBy !== "user") {
147
+ errorsFound.push(`relationship: ${relType.relationshipTag} moveBy is not user`);
148
+ }
141
149
 
142
150
  const links = await findLinksByObjTypes(_izContext, [firstObject.objType, secondObject.objType], relationshipSchema.links)
143
151
  _izContext.logger.debug("links", links)
@@ -375,4 +383,4 @@ export default async function moveRelationship(
375
383
  _izContext.logger.error('error ChangeRelationship: ', err)
376
384
  throw (err)
377
385
  }
378
- }
386
+ }
@@ -148,4 +148,4 @@ export default async function updateRelationshipComplete(
148
148
  _izContext.logger.error('error updateRelationshipComplete:', err)
149
149
  throw (err)
150
150
  }
151
- }
151
+ }
@@ -403,4 +403,4 @@ export default async function updateRelationship(
403
403
  _izContext.logger.error('error updateRelationship: ', err)
404
404
  throw (err)
405
405
  }
406
- }
406
+ }