@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
@@ -1,503 +0,0 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
3
- import ejs from 'ejs';
4
- import { fileURLToPath } from 'url';
5
- import { policyRegistry } from './_policy/PolicyRegistry.js';
6
- import { getFlowsForGeneration } from '../src/generatedCode/Flow/_shared/shared/flowSelection.js';
7
-
8
- const __filename = fileURLToPath(import.meta.url);
9
- const __dirname = path.dirname(__filename);
10
-
11
- const APP_SOURCE_FILES = [
12
- 'find-data.yml',
13
- 'flow-schema.yml',
14
- 'flow-rbac.yml',
15
- 'flow-objects.yml',
16
- 'process-logical.yml',
17
- 'flow-relationships.yml'
18
- ];
19
-
20
- const FLOW_OBJECTS_ROLE = 'FlowObjectsRole';
21
-
22
- const QUEUE_OWNERSHIP_PREFIXES = {
23
- [FLOW_OBJECTS_ROLE]: ['Create', 'Update', 'Delete', 'Get'],
24
- FlowRbacRole: [
25
- 'CreateTargetRole',
26
- 'ListTargetRole',
27
- 'DeleteTargetRole',
28
- 'CreateRolePermissions',
29
- 'ListRolePermissions',
30
- 'DeleteRolePermissions',
31
- 'CreateUserRole',
32
- 'ListUserInRoles',
33
- 'DeleteUserFromRole',
34
- 'UserRbacFlow'
35
- ],
36
- FlowRelationshipRole: [
37
- 'CreateRelationship',
38
- 'UpdateRelationship',
39
- 'DeleteRelationship',
40
- 'GetRelationship',
41
- 'ChangeRelationship',
42
- 'MoveRelationship'
43
- ],
44
- ProcFindDataRole: ['FindData', 'ProcessLogical', 'PaginateProcessLogical'],
45
- RegisterRole: ['Register'],
46
- WebSocketMainRole: ['WebSocket']
47
- };
48
-
49
- const COMMON_S3_STATEMENTS = [
50
- {
51
- action: 's3:GetObject',
52
- resource:
53
- 'arn:aws:s3:::${self:custom.iz_serviceSchemaBucketName}/perServiceSchemas/*'
54
- },
55
- {
56
- action: 's3:GetObjectVersion',
57
- resource:
58
- 'arn:aws:s3:::${self:custom.iz_serviceSchemaBucketName}/perServiceSchemas/*'
59
- },
60
- {
61
- action: 's3:GetObject',
62
- resource:
63
- 'arn:aws:s3:::${self:custom.iz_serviceSchemaBucketName}/serviceConfig/GraphServerTags.json'
64
- },
65
- {
66
- action: 's3:GetObjectVersion',
67
- resource:
68
- 'arn:aws:s3:::${self:custom.iz_serviceSchemaBucketName}/serviceConfig/GraphServerTags.json'
69
- },
70
- {
71
- action: 's3:ListBucket',
72
- resource: 'arn:aws:s3:::${self:custom.iz_serviceSchemaBucketName}'
73
- }
74
- ];
75
-
76
- const DEFAULT_DYNAMO_ACTIONS = [
77
- 'dynamodb:DeleteItem',
78
- 'dynamodb:GetItem',
79
- 'dynamodb:PutItem',
80
- 'dynamodb:Query',
81
- 'dynamodb:UpdateItem'
82
- ];
83
-
84
- const DYNAMO_ACTIONS_BY_ROLE = {
85
- RegisterRole: [],
86
- WebSocketMainRole: ['dynamodb:DeleteItem', 'dynamodb:PutItem', 'dynamodb:Query']
87
- };
88
-
89
- const SQS_CONSUMER_ACTIONS = [
90
- 'sqs:DeleteMessage',
91
- 'sqs:DeleteMessageBatch',
92
- 'sqs:GetQueueAttributes',
93
- 'sqs:GetQueueUrl',
94
- 'sqs:ReceiveMessage'
95
- ];
96
-
97
- function upperCase(str) {
98
- if (!str) return str;
99
- return str.charAt(0).toUpperCase() + str.slice(1);
100
- }
101
-
102
- async function readTextIfExists(filePath) {
103
- try {
104
- return await fs.readFile(filePath, 'utf8');
105
- } catch {
106
- return '';
107
- }
108
- }
109
-
110
- function collectMatches(text, regex) {
111
- const out = new Set();
112
-
113
- for (const match of text.matchAll(regex)) {
114
- if (match[1]) out.add(match[1]);
115
- }
116
-
117
- return out;
118
- }
119
-
120
- function splitTopLevelBlocks(text) {
121
- const lines = text.split(/\r?\n/);
122
- const blocks = [];
123
- let current = [];
124
-
125
- for (const line of lines) {
126
- if (/^[A-Za-z0-9][A-Za-z0-9]*:/.test(line) && current.length > 0) {
127
- blocks.push(current.join('\n'));
128
- current = [line];
129
- continue;
130
- }
131
-
132
- current.push(line);
133
- }
134
-
135
- if (current.length > 0) blocks.push(current.join('\n'));
136
- return blocks;
137
- }
138
-
139
- function rolePrefixes(roleName) {
140
- if (QUEUE_OWNERSHIP_PREFIXES[roleName]) return QUEUE_OWNERSHIP_PREFIXES[roleName];
141
- if (roleName.endsWith('Role')) return [roleName.replace(/Role$/, '')];
142
- return [roleName];
143
- }
144
-
145
- function topicBelongsToRole(roleName, topicName) {
146
- if (topicName.endsWith('Complete_In')) return false;
147
-
148
- const prefixes = rolePrefixes(roleName);
149
-
150
- if (roleName === FLOW_OBJECTS_ROLE) {
151
- const reservedPrefixes = [
152
- ...QUEUE_OWNERSHIP_PREFIXES.FlowRbacRole,
153
- ...QUEUE_OWNERSHIP_PREFIXES.FlowRelationshipRole
154
- ];
155
-
156
- return (
157
- prefixes.some(prefix => topicName.startsWith(prefix)) &&
158
- !reservedPrefixes.some(prefix => topicName.startsWith(prefix)) &&
159
- !topicName.includes('Relationship')
160
- );
161
- }
162
-
163
- return prefixes.some(prefix => topicName.startsWith(prefix));
164
- }
165
-
166
- function buildDynamoArn(tableName) {
167
- return (
168
- 'arn:aws:dynamodb:${self:custom.iz_region}:${self:custom.iz_accountId}:table/' +
169
- '${self:custom.iz_resourcePrefix}' +
170
- tableName
171
- );
172
- }
173
-
174
- function buildQueueArn(queueName) {
175
- return (
176
- 'arn:aws:sqs:${self:custom.iz_region}:${self:custom.iz_accountId}:' +
177
- '${self:custom.iz_resourcePrefix}' +
178
- queueName
179
- );
180
- }
181
-
182
- function buildTopicArn(topicName) {
183
- return (
184
- 'arn:aws:sns:${self:custom.iz_region}:${self:custom.iz_accountId}:' +
185
- '${self:custom.iz_serviceTag}_${self:custom.iz_stage}_' +
186
- topicName
187
- );
188
- }
189
-
190
- function buildWebSocketArn() {
191
- return (
192
- 'arn:aws:execute-api:${self:custom.iz_region}:${self:custom.iz_accountId}:' +
193
- '${self:custom.iz_webSocketHostId}/*'
194
- );
195
- }
196
-
197
- function detectRoleNamesFromSchemas(allSchemas = {}) {
198
- const roleNames = new Set(['ProcFindDataRole', 'RegisterRole']);
199
- const flows = getFlowsForGeneration(allSchemas);
200
-
201
- if ((allSchemas.objects || []).length > 0) roleNames.add(FLOW_OBJECTS_ROLE);
202
- if ((allSchemas.relationships || []).length > 0) roleNames.add('FlowRelationshipRole');
203
-
204
- for (const flow of flows) {
205
- if (!flow.flowTag) continue;
206
-
207
- const upperFlowTag = upperCase(flow.flowTag);
208
-
209
- if (QUEUE_OWNERSHIP_PREFIXES.FlowRbacRole.includes(upperFlowTag)) {
210
- roleNames.add('FlowRbacRole');
211
- continue;
212
- }
213
-
214
- if (upperFlowTag.endsWith('RbacFlow')) {
215
- roleNames.add('FlowRbacRole');
216
- continue;
217
- }
218
-
219
- if (QUEUE_OWNERSHIP_PREFIXES.FlowRelationshipRole.includes(upperFlowTag)) {
220
- roleNames.add('FlowRelationshipRole');
221
- continue;
222
- }
223
-
224
- if (QUEUE_OWNERSHIP_PREFIXES[FLOW_OBJECTS_ROLE].includes(upperFlowTag)) {
225
- roleNames.add(FLOW_OBJECTS_ROLE);
226
- continue;
227
- }
228
-
229
- if ((flow.event || []).includes('ownTopic')) {
230
- roleNames.add('WebSocketMainRole');
231
- // ponytail: removed continue; so custom flows with ownTopic get their own specific role
232
- }
233
-
234
- roleNames.add(`${upperFlowTag}Role`);
235
- }
236
-
237
- return roleNames;
238
- }
239
-
240
- async function readRoleNames(outputPath, allSchemas) {
241
- const roleConfigPath = path.join(
242
- outputPath,
243
- 'app',
244
- 'sls_yaml',
245
- 'generatedCode',
246
- 'source',
247
- 'role-name-config.yml'
248
- );
249
- const roleConfigText = await readTextIfExists(roleConfigPath);
250
- const fromFile = collectMatches(
251
- roleConfigText,
252
- /\$\{self:custom\.iz_resourcePrefix\}([A-Za-z0-9]+Role)/g
253
- );
254
-
255
- if (fromFile.size > 0) return new Set(fromFile);
256
- return detectRoleNamesFromSchemas(allSchemas);
257
- }
258
-
259
- async function collectExplicitResourceNames(outputPath) {
260
- const resourceSourceDir = path.join(
261
- outputPath,
262
- 'resource',
263
- 'sls_yaml',
264
- 'generatedCode',
265
- 'source'
266
- );
267
- const dynamoText = await readTextIfExists(
268
- path.join(resourceSourceDir, 'generated-dynamoDB-table.yml')
269
- );
270
-
271
- return {
272
- tableNames: Array.from(
273
- collectMatches(
274
- dynamoText,
275
- /TableName:\s+\$\{self:custom\.iz_resourcePrefix\}([A-Za-z0-9]+)/g
276
- )
277
- ).sort()
278
- };
279
- }
280
-
281
- async function collectRoleScopedResourceNames(outputPath, allowedRoles) {
282
- const appSourceDir = path.join(
283
- outputPath,
284
- 'app',
285
- 'sls_yaml',
286
- 'generatedCode',
287
- 'source'
288
- );
289
- const resourceSourceDir = path.join(
290
- outputPath,
291
- 'resource',
292
- 'sls_yaml',
293
- 'generatedCode',
294
- 'source'
295
- );
296
-
297
- const texts = await Promise.all([
298
- ...APP_SOURCE_FILES.map(fileName =>
299
- readTextIfExists(path.join(appSourceDir, fileName))
300
- ),
301
- readTextIfExists(path.join(resourceSourceDir, 'generated-sns-in-sqs.yml')),
302
- readTextIfExists(path.join(resourceSourceDir, 'generated-sns-out.yml'))
303
- ]);
304
-
305
- const appTexts = texts.slice(0, APP_SOURCE_FILES.length);
306
- const snsInSqsText = texts[APP_SOURCE_FILES.length];
307
- const snsOutText = texts[APP_SOURCE_FILES.length + 1];
308
- const allTopics = new Set([
309
- ...collectMatches(
310
- snsInSqsText,
311
- /TopicName:\s+\$\{self:custom\.iz_serviceTag\}_\$\{self:custom\.iz_stage\}_([A-Za-z0-9_]+)/g
312
- ),
313
- ...collectMatches(
314
- snsOutText,
315
- /TopicName:\s+\$\{self:custom\.iz_serviceTag\}_\$\{self:custom\.iz_stage\}_([A-Za-z0-9_]+)/g
316
- )
317
- ]);
318
-
319
- const roleQueues = new Map();
320
-
321
- for (const roleName of allowedRoles) {
322
- roleQueues.set(roleName, new Set());
323
- }
324
-
325
- for (const text of appTexts) {
326
- for (const block of splitTopLevelBlocks(text)) {
327
- const roleMatch = block.match(/role:\s+([A-Za-z0-9]+)/);
328
- if (!roleMatch || !allowedRoles.has(roleMatch[1])) continue;
329
-
330
- const queueNames = collectMatches(
331
- block,
332
- /arn:aws:sqs:\$\{self:custom\.iz_region\}:\$\{self:custom\.iz_accountId\}:\$\{self:custom\.iz_resourcePrefix\}([A-Za-z0-9]+)/g
333
- );
334
-
335
- for (const queueName of queueNames) {
336
- roleQueues.get(roleMatch[1]).add(queueName);
337
- }
338
- }
339
- }
340
-
341
- const scoped = new Map();
342
-
343
- for (const roleName of allowedRoles) {
344
- const queueNames = Array.from(roleQueues.get(roleName) || []).sort();
345
- const topicNames = Array.from(allTopics).filter(topicName => {
346
- return topicBelongsToRole(roleName, topicName);
347
- });
348
-
349
- scoped.set(roleName, {
350
- queueNames,
351
- topicNames: topicNames.sort()
352
- });
353
- }
354
-
355
- return scoped;
356
- }
357
-
358
- function tableNamesForRole(roleName, tableNames) {
359
- if (roleName === 'RegisterRole') return [];
360
-
361
- if (roleName === 'WebSocketMainRole') {
362
- const filtered = tableNames.filter(tableName => /websocket|upload/i.test(tableName));
363
- // ponytail: fall back to all tables if websocket tables are not named consistently yet.
364
- return filtered.length > 0 ? filtered : tableNames;
365
- }
366
-
367
- // ponytail: least privilege for ProcFindDataRole, exclude system internal tables
368
- if (roleName === 'ProcFindDataRole') {
369
- return tableNames.filter(tableName => !/Awaiting|WebSocket|Upload/i.test(tableName));
370
- }
371
-
372
- const isFlowRole = roleName.endsWith('Role');
373
- if (isFlowRole) {
374
- const flowTables = tableNames.filter(tableName => !/FindDataMain|LogicalResults|RegisterRecords|Upload/i.test(tableName));
375
- if (roleName === 'FlowRbacRole') {
376
- return [...new Set([...flowTables, 'TargetRoles', 'RolePermissions', 'RoleUsers', 'UserRoles'])];
377
- }
378
- return flowTables;
379
- }
380
-
381
- return tableNames;
382
- }
383
-
384
- function dynamoActionsForRole(roleName) {
385
- return DYNAMO_ACTIONS_BY_ROLE[roleName] || DEFAULT_DYNAMO_ACTIONS;
386
- }
387
-
388
- function buildRoleStatements(roleName, resources, scopedResources) {
389
- const statements = [...COMMON_S3_STATEMENTS];
390
- const scoped = scopedResources.get(roleName) || { queueNames: [], topicNames: [] };
391
-
392
- for (const tableName of tableNamesForRole(roleName, resources.tableNames)) {
393
- for (const action of dynamoActionsForRole(roleName)) {
394
- statements.push({ action, resource: buildDynamoArn(tableName) });
395
- }
396
- }
397
-
398
- for (const queueName of scoped.queueNames) {
399
- for (const action of SQS_CONSUMER_ACTIONS) {
400
- statements.push({ action, resource: buildQueueArn(queueName) });
401
- }
402
- }
403
-
404
- for (const topicName of scoped.topicNames) {
405
- statements.push({ action: 'sns:Publish', resource: buildTopicArn(topicName) });
406
- }
407
-
408
- if (roleName === 'WebSocketMainRole') {
409
- statements.push({
410
- action: 'execute-api:ManageConnections',
411
- resource: buildWebSocketArn()
412
- });
413
- }
414
-
415
- return statements;
416
- }
417
-
418
- function groupStatementsByResources(statements) {
419
- const grouped = new Map();
420
-
421
- for (const statement of statements) {
422
- const resources = Array.isArray(statement.resource)
423
- ? [...statement.resource].sort()
424
- : [statement.resource];
425
- const key = JSON.stringify(resources);
426
-
427
- if (!grouped.has(key)) {
428
- grouped.set(key, { action: new Set(), resource: resources });
429
- }
430
-
431
- grouped.get(key).action.add(statement.action);
432
- }
433
-
434
- return [...grouped.values()].map(entry => ({
435
- action: [...entry.action].sort(),
436
- resource: entry.resource
437
- }));
438
- }
439
-
440
- export async function generateSharedResourceYaml(allSchemas, options) {
441
- console.log(
442
- ' [SharedResourceYamlGenerator] Generating Shared Resource YAML (IAM Roles)...'
443
- );
444
-
445
- const slsYamlDir = path.join(
446
- options.outputPath,
447
- 'app',
448
- 'sls_yaml',
449
- 'generatedCode',
450
- 'source'
451
- );
452
- await fs.mkdir(slsYamlDir, { recursive: true });
453
-
454
- const allowedRoles = await readRoleNames(options.outputPath, allSchemas);
455
- const resources = await collectExplicitResourceNames(options.outputPath);
456
- const scopedResources = await collectRoleScopedResourceNames(
457
- options.outputPath,
458
- allowedRoles
459
- );
460
-
461
- for (const roleName of allowedRoles) {
462
- for (const statement of buildRoleStatements(roleName, resources, scopedResources)) {
463
- policyRegistry.add(roleName, statement.action, statement.resource);
464
- }
465
- }
466
-
467
- const groupedStatements = policyRegistry.toGroupedByRole();
468
- const unexpectedRoles = Object.keys(groupedStatements).filter(
469
- roleName => !allowedRoles.has(roleName)
470
- );
471
-
472
- if (unexpectedRoles.length > 0) {
473
- console.warn(
474
- ` [SharedResourceYamlGenerator] Ignoring roles not present in role-name-config.yml: ${unexpectedRoles.join(', ')}`
475
- );
476
- }
477
-
478
- const roles = Array.from(allowedRoles)
479
- .sort()
480
- .map(roleName => ({
481
- roleName,
482
- statements: groupStatementsByResources(groupedStatements[roleName]?.statements || [])
483
- }));
484
-
485
- const templatePath = path.join(__dirname, 'templates', 'SharedResource_Yaml.ejs');
486
- const templateString = await fs.readFile(templatePath, 'utf-8');
487
- const fileContent = ejs.render(templateString, { roles });
488
- let normalizedContent = fileContent
489
- .split('\n')
490
- .filter(line => line.trim() !== '')
491
- .join('\n');
492
-
493
- normalizedContent =
494
- normalizedContent
495
- .replace(/^ [A-Za-z0-9]+:/gm, '\n\n$&')
496
- .replace(/^Resources:\n+ /, 'Resources:\n\n ') + '\n';
497
-
498
- const outputPath = path.join(slsYamlDir, 'generate-shared-resource.yml');
499
- await fs.writeFile(outputPath, normalizedContent, 'utf-8');
500
- console.log(
501
- ` [SharedResourceYamlGenerator] Wrote generate-shared-resource.yml to ${outputPath}`
502
- );
503
- }