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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/README.md +73 -11
  2. package/index.js +0 -5
  3. package/package.json +7 -6
  4. package/src/compile/compileProject.js +26 -0
  5. package/src/compile/loadSchemas.js +28 -0
  6. package/src/emit/crud/dynamicCrudFlowSchemaTemplate.js +11 -0
  7. package/src/emit/crud/emitCrudApplicationArtifacts.js +157 -0
  8. package/src/emit/crud/emitDynamicCrudFlowSchemas.js +84 -0
  9. package/src/emit/crud/generateCrudApplicationArtifacts.js +16 -0
  10. package/src/emit/crud/generateDynamicCrudFlowSchemas.js +21 -0
  11. package/src/emit/crud/loadLocalSchemaArrays.js +8 -0
  12. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/CreateEndpoint_Main.ejs +1 -1
  13. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/DeleteEndpoint_Main.ejs +1 -1
  14. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step → emit/crud/templates}/FlowEndpointBeforeLogical_Main.ejs +2 -2
  15. package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +75 -0
  16. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowEndpoint_HdrWbs.ejs +1 -1
  17. package/src/{codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_HdrSqs.ejs → emit/crud/templates/FlowHandler_HdrSqs.ejs} +52 -56
  18. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowMain_Wbs.ejs +1 -3
  19. package/src/emit/crud/templates/GetRangeEndpoint_Main.ejs +127 -0
  20. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/UpdateEndpoint_Main.ejs +1 -1
  21. package/src/emit/custom/customFlows.js +70 -0
  22. package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +308 -0
  23. package/src/emit/custom/generateCustomFlowApplicationArtifacts.js +22 -0
  24. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/custom/templates}/FlowEndpoint_Main.ejs +1 -1
  25. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step → emit/custom/templates}/FlowStep_Main.ejs +1 -1
  26. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_Main.ejs +5 -5
  27. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_HdrWbs.ejs +1 -1
  28. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_Main.ejs +3 -3
  29. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_Main.ejs +4 -5
  30. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/FlowHandler_HdrS3.ejs +2 -8
  31. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ProcessS3File_Main.ejs +1 -1
  32. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_Main.ejs +5 -6
  33. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +32 -0
  34. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_Main.ejs +63 -0
  35. package/src/emit/custom/templates/triggerCache/TriggerCacheComplete_Main.ejs +35 -0
  36. package/src/emit/custom/templates/triggerCache/TriggerCache_Main.ejs +16 -0
  37. package/src/emit/function/functionYamlArtifact.js +111 -0
  38. package/src/emit/rbac/emitDynamicRbacFlowSchemas.js +117 -0
  39. package/src/emit/rbac/emitRbacApplicationArtifacts.js +256 -0
  40. package/src/emit/rbac/generateCreateTargetRoleHandler.js +19 -0
  41. package/src/emit/rbac/generateDynamicRbacFlowSchemas.js +21 -0
  42. package/src/emit/rbac/rbacFlowTag.js +7 -0
  43. package/src/emit/rbac/templates/CreateTargetRole_HdrSqs.ejs +24 -0
  44. package/src/emit/rbac/templates/CreateTargetRole_Main.ejs +25 -0
  45. package/src/emit/rbac/templates/DynamicRbacFlowSchema.ejs +5 -0
  46. package/src/emit/rbac/templates/ListRbac_HdrApi.ejs +17 -0
  47. package/src/emit/rbac/templates/ListRbac_HdrSqs.ejs +13 -0
  48. package/src/emit/rbac/templates/ListRbac_Main.ejs +29 -0
  49. package/src/emit/rbac/templates/RbacMutation_Main.ejs +22 -0
  50. package/src/emit/rbac/templates/UserRbacFlow_HdrInv.ejs +10 -0
  51. package/src/emit/rbac/templates/UserRbacFlow_Main.ejs +44 -0
  52. package/src/emit/rbac/templates/UserRoleMutation_Main.ejs +33 -0
  53. package/src/emit/relationship/dynamicRelationshipFlowSchemaTemplate.js +11 -0
  54. package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +66 -0
  55. package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +147 -0
  56. package/src/emit/relationship/generateDynamicRelationshipFlowSchemas.js +23 -0
  57. package/src/emit/relationship/generateRelationshipApplicationArtifacts.js +22 -0
  58. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationshipComplete_Main.ejs → emit/relationship/templates/ChangeRelationshipComplete_Main.ejs} +1 -1
  59. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationship_Main.ejs → emit/relationship/templates/ChangeRelationship_Main.ejs} +10 -2
  60. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationshipComplete_Main.ejs → emit/relationship/templates/CreateRelationshipComplete_Main.ejs} +1 -1
  61. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationship_Main.ejs → emit/relationship/templates/CreateRelationship_Main.ejs} +1 -1
  62. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationshipComplete_Main.ejs → emit/relationship/templates/DeleteRelationshipComplete_Main.ejs} +1 -1
  63. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationship_Main.ejs → emit/relationship/templates/DeleteRelationship_Main.ejs} +1 -1
  64. package/src/emit/relationship/templates/FlowHandler_HdrApi.ejs +51 -0
  65. package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrDsq.ejs +1 -1
  66. package/src/emit/relationship/templates/FlowHandler_HdrInv.ejs +45 -0
  67. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationshipComplete_Main.ejs → emit/relationship/templates/GetRelationshipComplete_Main.ejs} +1 -1
  68. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationship_Main.ejs → emit/relationship/templates/GetRelationship_Main.ejs} +1 -1
  69. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationship_Main.ejs → emit/relationship/templates/MoveRelationship_Main.ejs} +9 -1
  70. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationshipComplete_Main.ejs → emit/relationship/templates/UpdateRelationshipComplete_Main.ejs} +1 -1
  71. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationship_Main.ejs → emit/relationship/templates/UpdateRelationship_Main.ejs} +1 -1
  72. package/src/emit/resource/emitResourceArtifacts.js +300 -0
  73. package/src/emit/resource/generateResourceArtifacts.js +20 -0
  74. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceBeforeLogicalYaml.ejs +1 -1
  75. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceSqsYaml.ejs +6 -6
  76. package/src/{codeGenerators/app/sls_yaml → emit/resource}/templates/SharedResource_Yaml.ejs +8 -8
  77. package/src/emit/system/emitSystemWebSocketArtifacts.js +182 -0
  78. package/src/generate.js +60 -126
  79. package/src/output/commitArtifacts.js +213 -0
  80. package/src/output/mergeHooks.js +55 -0
  81. package/src/output/validateArtifacts.js +62 -0
  82. package/src/plan/buildGenerationPlan.js +50 -0
  83. package/test/core.test.js +159 -0
  84. package/test/createTargetRoleHandler.test.js +68 -0
  85. package/test/crudApplicationArtifacts.test.js +107 -0
  86. package/test/customFlowApplicationArtifacts.test.js +294 -0
  87. package/test/dynamicCrudFlowSchemas.test.js +136 -0
  88. package/test/dynamicRbacFlowSchemas.test.js +101 -0
  89. package/test/dynamicRelationshipFlowSchemas.test.js +99 -0
  90. package/test/functionYamlArtifact.test.js +34 -0
  91. package/test/intTestApi.test.js +29 -0
  92. package/test/publicApi.test.js +209 -0
  93. package/test/relationshipApplicationArtifacts.test.js +68 -0
  94. package/test/resourceArtifacts.test.js +121 -0
  95. package/jsconfig.json +0 -9
  96. package/src/__tests__/getIntTestConfig.test.js +0 -51
  97. package/src/__tests__/intTestGeneratorShared.test.cjs +0 -169
  98. package/src/__tests__/pathIntTest.test.js +0 -103
  99. package/src/codeGenerators/app/initial_setup/InitialSetupGenerator.js +0 -199
  100. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_LambdaRole.ejs +0 -50
  101. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_SnsService.ejs +0 -15
  102. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_TableName.ejs +0 -9
  103. package/src/codeGenerators/app/sls_yaml/FindDataYamlGenerator.js +0 -23
  104. package/src/codeGenerators/app/sls_yaml/FunctionYamlGenerator.js +0 -332
  105. package/src/codeGenerators/app/sls_yaml/ProcessLogicalYamlGenerator.js +0 -21
  106. package/src/codeGenerators/app/sls_yaml/RoleNameConfigGenerator.js +0 -48
  107. package/src/codeGenerators/app/sls_yaml/SharedResourceYamlGenerator.js +0 -503
  108. package/src/codeGenerators/app/sls_yaml/__tests__/SharedResourceYamlGenerator.test.js +0 -235
  109. package/src/codeGenerators/app/sls_yaml/_policy/PolicyRegistry.js +0 -56
  110. package/src/codeGenerators/app/sls_yaml/_policy/__tests__/PolicyRegistry.test.js +0 -33
  111. package/src/codeGenerators/app/sls_yaml/renderYamlTemplate.js +0 -13
  112. package/src/codeGenerators/app/sls_yaml/templates/FindData_Yaml.ejs +0 -10
  113. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Api.ejs +0 -21
  114. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_EventBridge.ejs +0 -14
  115. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Inv.ejs +0 -6
  116. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Sqs.ejs +0 -11
  117. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Wbs.ejs +0 -11
  118. package/src/codeGenerators/app/sls_yaml/templates/ProcessLogical_Yaml.ejs +0 -32
  119. package/src/codeGenerators/app/sls_yaml/templates/RoleNameConfig_Yaml.ejs +0 -5
  120. package/src/codeGenerators/app/src/generatedCode/FindData/FindDataGenerator.js +0 -238
  121. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_HdrSqs.ejs +0 -87
  122. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_Main.ejs +0 -108
  123. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByDynamo.ejs +0 -32
  124. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByGraph.ejs +0 -87
  125. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/.gitkeep +0 -0
  126. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/EndpointsGenerator.js +0 -120
  127. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step/FlowEndpointComplete_Main.ejs +0 -313
  128. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/RbacFlowGenerator.js +0 -116
  129. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateRolePermissions.ejs +0 -135
  130. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateTargetRole.ejs +0 -131
  131. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateUserRole.ejs +0 -150
  132. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteRolePermissions.ejs +0 -132
  133. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteTargetRole.ejs +0 -132
  134. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteUserFromRole.ejs +0 -150
  135. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/FlowRbac_Main.ejs +0 -252
  136. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListRolePermissions.ejs +0 -120
  137. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListTargetRole.ejs +0 -122
  138. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListUserInRoles.ejs +0 -117
  139. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRelationships/RelationshipFlowGenerator.js +0 -148
  140. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/.gitkeep +0 -0
  141. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/StatusFieldGenerator.js +0 -109
  142. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/WebSocketGenerator.js +0 -122
  143. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint/FlowEntryPoint_Main.ejs +0 -38
  144. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusFieldSns_Yaml.ejs +0 -52
  145. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_HdrSqs.ejs +0 -84
  146. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_Main.ejs +0 -78
  147. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Awaiting_Main.ejs +0 -123
  148. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Paginated_Main.ejs +0 -59
  149. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_PlugIn_Main.ejs +0 -72
  150. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_RecievePlugIn_Main.ejs +0 -76
  151. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateAwaitingStep.ejs +0 -41
  152. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateSendPlugin.ejs +0 -18
  153. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketFlow_Yaml.ejs +0 -26
  154. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketSub_Yaml.ejs +0 -7
  155. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_HdrSqs.ejs +0 -66
  156. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Main.ejs +0 -115
  157. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Yaml.ejs +0 -36
  158. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Main.ejs +0 -52
  159. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Yaml.ejs +0 -13
  160. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketDynamoDb_Yaml.ejs +0 -28
  161. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseDsqHandler.js +0 -63
  162. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseSqsHandler.js +0 -66
  163. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/__tests__/BaseDsqHandler.test.js +0 -94
  164. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/dsq.js +0 -5
  165. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/eventBridge.js +0 -33
  166. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/extTopic.js +0 -6
  167. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncApi.js +0 -51
  168. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncInv.js +0 -51
  169. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/ownTopic.js +0 -54
  170. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/registry.js +0 -17
  171. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3.js +0 -56
  172. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ConfirmAfterUploadS3Generator.js +0 -46
  173. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreateObjectGenerator.js +0 -50
  174. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreatePreSignUrlGenerator.js +0 -48
  175. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ProcessAfterUploadS3Generator.js +0 -49
  176. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ReservedLimitGenerator.js +0 -47
  177. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/eventTypes.js +0 -23
  178. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowClassifier.js +0 -50
  179. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowEntryPointBase.js +0 -106
  180. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowMainFunctionBase.js +0 -172
  181. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowNaming.js +0 -37
  182. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowSelection.js +0 -19
  183. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepBase.js +0 -235
  184. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepNormalizer.js +0 -75
  185. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowValidator.js +0 -267
  186. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/propertyNormalizer.js +0 -18
  187. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/registry.js +0 -7
  188. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/roleNameDetection.js +0 -49
  189. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/triggerCacheBase.js +0 -177
  190. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_HdrSqs.ejs +0 -89
  191. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_Main.ejs +0 -83
  192. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_HdrSqs.ejs +0 -103
  193. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_Main.ejs +0 -58
  194. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrDsq.ejs +0 -104
  195. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrSqs.ejs +0 -88
  196. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_Main.ejs +0 -80
  197. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheQueue_Yaml.ejs +0 -36
  198. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/yaml/SharedFunctionSqs_Yaml.ejs +0 -13
  199. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/ProcessLogicalGenerator.js +0 -29
  200. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrDsq.ejs +0 -177
  201. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrSqs.ejs +0 -155
  202. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_Main.ejs +0 -268
  203. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_Main.ejs +0 -450
  204. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/RegisterGenerator.js +0 -149
  205. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_HdrSqs.ejs +0 -85
  206. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_Main.ejs +0 -176
  207. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_HdrWbs.ejs +0 -80
  208. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_Main.ejs +0 -164
  209. package/src/codeGenerators/app/src/generatedCode/libs/ConstsGenerator.js +0 -28
  210. package/src/codeGenerators/app/src/generatedCode/libs/GenerateCodeLibsGenerator.js +0 -28
  211. package/src/codeGenerators/app/src/generatedCode/libs/templates/Consts.ejs +0 -448
  212. package/src/codeGenerators/app/src/generatedCode/libs/templates/GenerateCodeLibs.ejs +0 -124
  213. package/src/codeGenerators/resource/sls_yaml/DynamoDBGenerator.js +0 -87
  214. package/src/codeGenerators/resource/sls_yaml/FlowOutGenerator.js +0 -70
  215. package/src/codeGenerators/resource/sls_yaml/FlowResourceYamlGenerator.js +0 -182
  216. package/src/core/renderTemplateFile.js +0 -22
  217. package/src/core/validate.js +0 -165
  218. package/src/generateCode.js +0 -357
  219. package/src/generateSchema.js +0 -123
  220. package/src/parsers/flowSchemaParser.js +0 -112
  221. package/src/parsers/objectSchemaParser.js +0 -39
  222. package/src/parsers/relationshipSchemaParser.js +0 -51
  223. package/src/schemaGenerators/app/src/schemas/FlowSchemas/FlowSchemaGenerator.js +0 -107
  224. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RbacFlowSchemaGenerator.js +0 -98
  225. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RelationshipFlowSchemaGenerator.js +0 -89
  226. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicFlowSchemaTemplate.ejs +0 -41
  227. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicRbacFlowSchemaTemplate.ejs +0 -20
  228. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/RelationshipFlowSchemaTemplate.ejs +0 -33
  229. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/UserRbacFlowSchemaTemplate.ejs +0 -22
  230. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/AttributeTreeSchemaGenerator.js +0 -124
  231. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/PropertyValueSchemaGenerator.js +0 -119
  232. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeManagerSchemaTemplate.ejs +0 -14
  233. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeStandardSchemaTemplate.ejs +0 -13
  234. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicPropertyValueSchemaTemplate.ejs +0 -15
  235. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/AttributeTreeRelationshipSchemaGenerator.js +0 -109
  236. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/PropertyValueRelationshipSchemaGenerator.js +0 -103
  237. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/__tests__/relationshipSchemaHelpers.test.js +0 -38
  238. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/relationshipSchemaHelpers.js +0 -40
  239. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicAttributeTreeRelationshipSchemaTemplate.ejs +0 -7
  240. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicPropertyValueRelationshipSchemaTemplate.ejs +0 -7
  241. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/SystemTextGenerator.js +0 -102
  242. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/templates/SystemText_Template.ejs +0 -10
  243. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrApi.ejs +0 -0
  244. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrInv.ejs +0 -0
  245. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/GetEndpoint_Main.ejs +0 -0
  246. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_HdrSqs.ejs +0 -0
  247. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_HdrSqs.ejs +0 -0
  248. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_HdrSqs.ejs +0 -0
  249. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrSqs.ejs +0 -0
  250. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationshipComplete_Main.ejs → emit/relationship/templates/MoveRelationshipComplete_Main.ejs} +0 -0
  251. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/DynamoDBTable_Yaml.ejs +0 -0
  252. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/FlowOut_Yaml.ejs +0 -0
  253. /package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceYaml.ejs +0 -0
  254. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/SystemDynamoDB_Yaml.ejs +0 -0
@@ -1,357 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import yaml from 'yaml';
4
-
5
- import { parseObjectSchemas } from './parsers/objectSchemaParser.js';
6
- import { parseRelationshipSchemas } from './parsers/relationshipSchemaParser.js';
7
- import { parseFlowSchemas } from './parsers/flowSchemaParser.js';
8
-
9
- import { generateFlowEntryPoint } from './codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowEntryPointBase.js';
10
- import { generateFlowMainFunction } from './codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowMainFunctionBase.js';
11
- import { generateFlowSteps } from './codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepBase.js';
12
- import { normalizeUnifiedFlows } from './codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepNormalizer.js';
13
-
14
- import { generateEndpointsFlow } from './codeGenerators/app/src/generatedCode/Flow/FlowObjects/EndpointsGenerator.js';
15
- import { generateFlowOut } from './codeGenerators/resource/sls_yaml/FlowOutGenerator.js';
16
- import { generateFlowResourceYaml } from './codeGenerators/resource/sls_yaml/FlowResourceYamlGenerator.js';
17
- import { generateRbacFlows } from './codeGenerators/app/src/generatedCode/Flow/FlowRbac/RbacFlowGenerator.js';
18
- import { generateRelationshipFlows } from './codeGenerators/app/src/generatedCode/Flow/FlowRelationships/RelationshipFlowGenerator.js';
19
- import { generateWebSocket } from './codeGenerators/app/src/generatedCode/Flow/FlowSchemas/WebSocketGenerator.js';
20
- import { validateFlowsForGeneration } from './codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowValidator.js';
21
- import { generateRegisterFlow } from './codeGenerators/app/src/generatedCode/SystemFlowSchemas/RegisterGenerator.js';
22
- import { generateDynamoDBTables } from './codeGenerators/resource/sls_yaml/DynamoDBGenerator.js';
23
- import { generateFindData } from './codeGenerators/app/src/generatedCode/FindData/FindDataGenerator.js';
24
- import { generateRoleNameConfig } from './codeGenerators/app/sls_yaml/RoleNameConfigGenerator.js';
25
- import { generateFunctionYaml } from './codeGenerators/app/sls_yaml/FunctionYamlGenerator.js';
26
- import { generateInitialSetup } from './codeGenerators/app/initial_setup/InitialSetupGenerator.js';
27
- import { generateCodeLibs } from './codeGenerators/app/src/generatedCode/libs/GenerateCodeLibsGenerator.js';
28
- import { generateConsts } from './codeGenerators/app/src/generatedCode/libs/ConstsGenerator.js';
29
- import { generateProcessLogical } from './codeGenerators/app/src/generatedCode/ProcessLogical/ProcessLogicalGenerator.js';
30
- import { generateProcessLogicalYaml } from './codeGenerators/app/sls_yaml/ProcessLogicalYamlGenerator.js';
31
- import { generateSharedResourceYaml } from './codeGenerators/app/sls_yaml/SharedResourceYamlGenerator.js';
32
- import { generateFindDataYaml } from './codeGenerators/app/sls_yaml/FindDataYamlGenerator.js';
33
- import { policyRegistry } from './codeGenerators/app/sls_yaml/_policy/PolicyRegistry.js';
34
-
35
- function createGeneratorOptions(rootPath, options = {}) {
36
- return {
37
- outputPath: options.outputPath || rootPath
38
- };
39
- }
40
-
41
- /**
42
- * Low-level generator to generate application code files from all schemas.
43
- *
44
- * @param {string} rootPath - The root path of the project.
45
- * @param {object} [options={}] - Configuration options.
46
- * @param {string} [options.outputPath] - Output directory path.
47
- * @returns {Promise<void>}
48
- */
49
- export async function generateCode(rootPath, options = {}) {
50
- console.log(
51
- '[INFO] [generateCode] STATUS=STARTING | Generating code files from all schemas...'
52
- );
53
-
54
- const generatorOptions = createGeneratorOptions(rootPath, options);
55
- const { outputPath } = generatorOptions;
56
-
57
- let serviceName;
58
- try {
59
- const configPath = options.configPath || path.join(rootPath, 'config', 'serverless.config.yml');
60
- if (!fs.existsSync(configPath)) {
61
- throw new Error(`serverless.config.yml not found at path: ${configPath}`);
62
- }
63
- const configStr = fs.readFileSync(configPath, 'utf8');
64
- const config = yaml.parse(configStr);
65
- serviceName = config?.main_config?.iz_serviceName || config?.main_config?.iz_serviceTag;
66
-
67
- if (!serviceName) {
68
- throw new Error('main_config.iz_serviceName or main_config.iz_serviceTag is missing in serverless.config.yml');
69
- }
70
-
71
- console.log(`[INFO] [generateCode] Loaded config - serviceName: '${serviceName}' from ${configPath}`);
72
- } catch (e) {
73
- throw new Error(`[Developer Error] Failed to read service name from config: ${e.message}`);
74
- }
75
- generatorOptions.serviceName = serviceName;
76
-
77
- // Clean workspace
78
- const generatedCodePath = path.join(
79
- outputPath,
80
- 'app',
81
- 'src',
82
- 'generatedCode'
83
- );
84
-
85
- // Backup existing hook files to prevent them from being wiped out
86
- const hookBackups = [];
87
- const hookDirs = new Set();
88
-
89
- function getHookTagMatchers(filePath) {
90
- if (filePath.endsWith('.js')) {
91
- return {
92
- anyTag: /\/\/\(<(\w+)>\)([\s\S]*?)\/\/\(<\/\1>\)/gm,
93
- tagPattern: name =>
94
- new RegExp(
95
- `\\/\\/\\(<${name}>\\)([\\s\\S]*?)\\/\\/\\(<\\/${name}>\\)`,
96
- 'gm'
97
- )
98
- };
99
- }
100
-
101
- if (filePath.endsWith('.yml') || filePath.endsWith('.yaml')) {
102
- return {
103
- anyTag: /#<#(\w+)#>([\s\S]*?)#<#\/\1#>/gm,
104
- tagPattern: name =>
105
- new RegExp(`#<#${name}#>([\\s\\S]*?)#<#\\/${name}#>`, 'gm')
106
- };
107
- }
108
-
109
- return null;
110
- }
111
-
112
- function mergeHookIntoSource(sourceContent, hookContent, filePath) {
113
- const matchers = getHookTagMatchers(filePath);
114
- if (!matchers) return hookContent;
115
-
116
- return sourceContent.replace(
117
- matchers.anyTag,
118
- (match, tagName) =>
119
- hookContent.match(matchers.tagPattern(tagName))?.[0] ?? match
120
- );
121
- }
122
-
123
- function collectHookBackups(currentDir) {
124
- if (!fs.existsSync(currentDir)) return;
125
-
126
- const items = fs.readdirSync(currentDir, { withFileTypes: true });
127
- const hasSource = items.some(
128
- item => item.isDirectory() && item.name === 'source'
129
- );
130
- const hasHook = items.some(
131
- item => item.isDirectory() && item.name === 'hook'
132
- );
133
-
134
- if (hasSource && hasHook) {
135
- const hookPath = path.join(currentDir, 'hook');
136
- hookDirs.add(path.relative(outputPath, hookPath));
137
- const hookItems = fs.readdirSync(hookPath, { withFileTypes: true });
138
-
139
- for (const hookItem of hookItems) {
140
- if (!hookItem.isFile()) continue;
141
- const hookFilePath = path.join(hookPath, hookItem.name);
142
- hookBackups.push({
143
- relativePath: path.relative(outputPath, hookPath),
144
- name: hookItem.name,
145
- content: fs.readFileSync(hookFilePath)
146
- });
147
- }
148
- }
149
-
150
- for (const item of items) {
151
- if (!item.isDirectory() || item.name === 'source' || item.name === 'hook')
152
- continue;
153
- collectHookBackups(path.join(currentDir, item.name));
154
- }
155
- }
156
-
157
- console.log(
158
- '[INFO] [generateCode] STATUS=BACKUP | Backing up existing hook files...'
159
- );
160
- collectHookBackups(outputPath);
161
-
162
- function processSourceHooks(currentDir) {
163
- if (!fs.existsSync(currentDir)) return;
164
-
165
- const items = fs.readdirSync(currentDir, { withFileTypes: true });
166
- const hasSource = items.some(
167
- item => item.isDirectory() && item.name === 'source'
168
- );
169
- const hasHook = items.some(
170
- item => item.isDirectory() && item.name === 'hook'
171
- );
172
-
173
- if (hasSource && hasHook) {
174
- const sourcePath = path.join(currentDir, 'source');
175
- const hookPath = path.join(currentDir, 'hook');
176
- const hookItems = fs.readdirSync(hookPath, { withFileTypes: true });
177
-
178
- for (const hookItem of hookItems) {
179
- if (!hookItem.isFile()) continue;
180
-
181
- const hookFile = path.join(hookPath, hookItem.name);
182
- const sourceFile = path.join(sourcePath, hookItem.name);
183
-
184
- if (!fs.existsSync(sourceFile)) {
185
- fs.copyFileSync(hookFile, sourceFile);
186
- console.log(
187
- `[INFO] [generateCode] HOOK APPLIED: Created ${hookItem.name} from hook.`
188
- );
189
- continue;
190
- }
191
-
192
- const mergedContent = mergeHookIntoSource(
193
- fs.readFileSync(sourceFile, 'utf8'),
194
- fs.readFileSync(hookFile, 'utf8'),
195
- sourceFile
196
- );
197
- fs.writeFileSync(sourceFile, mergedContent);
198
- console.log(
199
- `[INFO] [generateCode] HOOK APPLIED: Merged ${hookItem.name} into source.`
200
- );
201
- }
202
- } else if (hasSource) {
203
- fs.mkdirSync(path.join(currentDir, 'hook'), { recursive: true });
204
- }
205
-
206
- for (const item of items) {
207
- if (!item.isDirectory() || item.name === 'source' || item.name === 'hook')
208
- continue;
209
- processSourceHooks(path.join(currentDir, item.name));
210
- }
211
- }
212
-
213
- let cleanupStarted = false;
214
- let generationSucceeded = false;
215
- const backedUpDirs = new Set();
216
- const dirsToBackup = [
217
- generatedCodePath,
218
- path.join(outputPath, 'app', 'sls_yaml', 'generatedCode'),
219
- path.join(outputPath, 'resource', 'sls_yaml', 'generatedCode')
220
- ];
221
-
222
- // ponytail: ensure hooks are restored even if generation fails
223
- try {
224
- policyRegistry.clear();
225
-
226
-
227
- // 1. Parsing & Hydration Pipeline
228
- console.log('[INFO] [generateCode] STATUS=PARSING | ObjectSchemas...');
229
- const objectData = await parseObjectSchemas(rootPath);
230
-
231
- console.log('[INFO] [generateCode] STATUS=PARSING | RelationshipSchemas...');
232
- const relationshipData = await parseRelationshipSchemas(rootPath, objectData);
233
-
234
- console.log('[INFO] [generateCode] STATUS=PARSING | FlowSchemas...');
235
- const flowData = await parseFlowSchemas(rootPath, objectData, options);
236
-
237
- // The 'allSchemas' object contains the fully hydrated Memory Objects
238
- const allSchemas = {
239
- objects: objectData.objects,
240
- relationships: relationshipData.relationships,
241
- flows: flowData.flows,
242
- flowsForGeneration: flowData.flows || []
243
- };
244
-
245
- console.log('[INFO] [generateCode] STATUS=NORMALIZING | Adapting Unified Flows...');
246
- normalizeUnifiedFlows(allSchemas.flowsForGeneration);
247
-
248
- console.log('[INFO] [generateCode] STATUS=VALIDATING | Validating Flows...');
249
- validateFlowsForGeneration(allSchemas.flowsForGeneration);
250
-
251
- console.log(
252
- '[INFO] [generateCode] STATUS=BACKUP_DIRS | Backing up old generatedCode directories...'
253
- );
254
- for (const dir of dirsToBackup) {
255
- if (fs.existsSync(dir)) {
256
- if (fs.existsSync(`${dir}.bak`)) {
257
- await fs.promises.rm(`${dir}.bak`, { recursive: true, force: true });
258
- }
259
- await fs.promises.rename(dir, `${dir}.bak`);
260
- backedUpDirs.add(dir);
261
- }
262
- }
263
-
264
- cleanupStarted = true;
265
-
266
- console.log(
267
- '[INFO] [generateCode] STATUS=CLEANUP | Removing old generatedCode directories before generating new files...'
268
- );
269
- for (const dir of dirsToBackup) {
270
- await fs.promises.rm(dir, { recursive: true, force: true });
271
- }
272
-
273
- // 2. Generation Pipeline
274
- await generateEndpointsFlow(allSchemas, generatorOptions);
275
- await generateFlowMainFunction(allSchemas, generatorOptions);
276
- await generateFlowEntryPoint(allSchemas, generatorOptions);
277
- await generateFlowSteps(allSchemas, generatorOptions);
278
- await generateFlowOut(allSchemas, generatorOptions);
279
- await generateFlowResourceYaml(allSchemas, generatorOptions);
280
- await generateRbacFlows(allSchemas, generatorOptions);
281
- await generateRelationshipFlows(allSchemas, generatorOptions);
282
- await generateWebSocket(
283
- allSchemas.flowsForGeneration,
284
- '',
285
- generatorOptions.outputPath
286
- );
287
- await generateRegisterFlow(
288
- allSchemas.flowsForGeneration,
289
- '',
290
- generatorOptions.outputPath
291
- );
292
-
293
- // Call FunctionYamlGenerator after all Handlers have been generated
294
- await generateFunctionYaml(allSchemas, generatorOptions);
295
- await generateDynamoDBTables(allSchemas, generatorOptions);
296
- await generateFindData(allSchemas, generatorOptions);
297
- await generateCodeLibs(generatorOptions);
298
- await generateConsts(generatorOptions);
299
- await generateProcessLogical(generatorOptions);
300
- await generateRoleNameConfig(allSchemas, generatorOptions);
301
- await generateProcessLogicalYaml(allSchemas, generatorOptions);
302
- await generateFindDataYaml(generatorOptions);
303
- await generateSharedResourceYaml(allSchemas, generatorOptions);
304
- await generateInitialSetup(allSchemas, generatorOptions);
305
-
306
- generationSucceeded = true;
307
-
308
- } finally {
309
- if (generationSucceeded) {
310
- console.log('[INFO] [generateCode] STATUS=CLEANUP_BAK | Generation successful, removing .bak directories...');
311
- for (const dir of dirsToBackup) {
312
- if (fs.existsSync(`${dir}.bak`)) {
313
- await fs.promises.rm(`${dir}.bak`, { recursive: true, force: true });
314
- }
315
- }
316
- } else if (cleanupStarted) {
317
- console.log('[INFO] [generateCode] STATUS=FAILED | Generation failed, rolling back directories...');
318
- for (const dir of dirsToBackup) {
319
- if (fs.existsSync(dir)) {
320
- await fs.promises.rm(dir, { recursive: true, force: true });
321
- }
322
- if (backedUpDirs.has(dir) && fs.existsSync(`${dir}.bak`)) {
323
- await fs.promises.rename(`${dir}.bak`, dir);
324
- }
325
- }
326
- }
327
-
328
- // Restore backed-up hooks
329
- if (hookDirs.size > 0 || hookBackups.length > 0) {
330
- console.log(
331
- `[INFO] [generateCode] STATUS=RESTORE | Restoring ${hookBackups.length} hook files...`
332
- );
333
- for (const relativeHookDir of hookDirs) {
334
- fs.mkdirSync(path.join(outputPath, relativeHookDir), { recursive: true });
335
- }
336
- for (const backup of hookBackups) {
337
- const hookDir = path.join(outputPath, backup.relativePath);
338
- fs.writeFileSync(path.join(hookDir, backup.name), backup.content);
339
- }
340
- }
341
-
342
- if (generationSucceeded) {
343
- console.log(
344
- '[INFO] [generateCode] STATUS=HOOKS | Processing hook folders beside source folders...'
345
- );
346
- processSourceHooks(generatorOptions.outputPath);
347
-
348
- console.log(
349
- '[INFO] [generateCode] STATUS=FINISHED | Code generation complete.'
350
- );
351
- } else {
352
- console.log(
353
- '[INFO] [generateCode] STATUS=FAILED | Code generation failed. Hook files were restored, but processSourceHooks was skipped.'
354
- );
355
- }
356
- }
357
- }
@@ -1,123 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import yaml from 'yaml';
4
-
5
- import { parseObjectSchemas } from './parsers/objectSchemaParser.js';
6
- import { parseFlowSchemas } from './parsers/flowSchemaParser.js';
7
- import { parseRelationshipSchemas } from './parsers/relationshipSchemaParser.js';
8
-
9
- import { generateRelationshipFlowSchemas } from './schemaGenerators/app/src/schemas/FlowSchemas/RelationshipFlowSchemaGenerator.js';
10
- import { generateDynamicFlowSchemas } from './schemaGenerators/app/src/schemas/FlowSchemas/FlowSchemaGenerator.js';
11
- import { generateRbacFlowSchemas } from './schemaGenerators/app/src/schemas/FlowSchemas/RbacFlowSchemaGenerator.js';
12
- import { generateSystemTextSchemas } from './schemaGenerators/app/src/schemas/SystemTextSchemas/SystemTextGenerator.js';
13
- import { generatePropertyValueObjectSchemas } from './schemaGenerators/app/src/schemas/ObjectSchemas/PropertyValueSchemaGenerator.js';
14
- import { generatePropertyValueRelationshipSchemas } from './schemaGenerators/app/src/schemas/RelationshipSchemas/PropertyValueRelationshipSchemaGenerator.js';
15
- import { generateAttributeTreeObjectSchemas } from './schemaGenerators/app/src/schemas/ObjectSchemas/AttributeTreeSchemaGenerator.js';
16
- import { generateAttributeTreeRelationshipSchemas } from './schemaGenerators/app/src/schemas/RelationshipSchemas/AttributeTreeRelationshipSchemaGenerator.js';
17
-
18
- /**
19
- * Low-level generator to generate dynamic schemas (FlowSchema, etc.).
20
- *
21
- * @param {string} rootPath - The root path of the project.
22
- * @param {object} [options={}] - Configuration options.
23
- * @param {string} [options.configPath] - Path to the serverless configuration file.
24
- * @param {string} [options.outputPath] - Output directory path.
25
- * @param {Array} [options.schemaTemplateConfig] - Schema template configuration.
26
- * @returns {Promise<void>}
27
- */
28
- export async function generateSchema(rootPath, options = {}) {
29
- console.log(
30
- '[INFO] [generateSchema] STATUS=STARTING | Generating dynamic schemas (FlowSchema, etc.)...'
31
- );
32
-
33
- const configPath =
34
- options.configPath || path.join(rootPath, 'config', 'serverless.config.yml');
35
- const serviceTag = readServiceTag(configPath);
36
-
37
- const objectData = await parseObjectSchemas(rootPath);
38
- applySchemaTemplateConfig(objectData, options.schemaTemplateConfig, serviceTag);
39
-
40
- const flowData = await parseFlowSchemas(rootPath, objectData);
41
- const relationshipData = await parseRelationshipSchemas(rootPath, objectData);
42
-
43
- const generatorOptions = {
44
- outputPath: options.outputPath || rootPath,
45
- serviceTag
46
- };
47
-
48
- await generateSystemTextSchemas(
49
- objectData,
50
- relationshipData,
51
- flowData,
52
- generatorOptions
53
- );
54
- await generateRelationshipFlowSchemas(relationshipData, generatorOptions);
55
- await generateDynamicFlowSchemas(objectData, flowData, generatorOptions);
56
- await generateRbacFlowSchemas(objectData, generatorOptions);
57
- await generatePropertyValueObjectSchemas(objectData, generatorOptions);
58
- await generatePropertyValueRelationshipSchemas(objectData, generatorOptions);
59
- await generateAttributeTreeObjectSchemas(objectData, generatorOptions);
60
- await generateAttributeTreeRelationshipSchemas(objectData, generatorOptions);
61
- }
62
-
63
- function readServiceTag(configPath) {
64
- try {
65
- const serviceConfigStr = fs.readFileSync(configPath, 'utf8');
66
- const serviceConfig = yaml.parse(serviceConfigStr);
67
- return serviceConfig?.main_config?.iz_serviceTag || 'unknownService';
68
- } catch {
69
- console.warn(
70
- `[WARNING] Could not read service config at ${configPath}. Using default serviceTag.`
71
- );
72
- return 'unknownService';
73
- }
74
- }
75
-
76
- function applySchemaTemplateConfig(objectData, schemaTemplateConfig, defaultServiceTag) {
77
- const templates = Array.isArray(schemaTemplateConfig)
78
- ? schemaTemplateConfig
79
- : [];
80
-
81
- for (const template of templates) {
82
- if (template?.generateName !== 'mainAttributeTree') {
83
- continue;
84
- }
85
-
86
- const objectType = template?.objType?.objectType;
87
- const serviceTag = template?.objType?.serviceTag || defaultServiceTag;
88
- const attributeTag = template?.attributeTag;
89
-
90
- if (!objectType || !attributeTag) {
91
- continue;
92
- }
93
-
94
- const objectSchema = objectData.objects.find(
95
- obj =>
96
- obj.objectType === objectType &&
97
- (obj.serviceTag || defaultServiceTag) === serviceTag
98
- );
99
-
100
- if (!objectSchema) {
101
- console.warn(
102
- `[WARNING] [generateSchema] Template target not found for ${serviceTag}.${objectType}`
103
- );
104
- continue;
105
- }
106
-
107
- objectSchema.addOnDataStructure ||= [];
108
-
109
- const hasAttributeTree = objectSchema.addOnDataStructure.some(
110
- addOn =>
111
- addOn?.type === 'attributeTree' &&
112
- addOn?.attributeTreeTag === attributeTag
113
- );
114
-
115
- if (!hasAttributeTree) {
116
- // ponytail: inject the same addon shape the existing generators already understand
117
- objectSchema.addOnDataStructure.push({
118
- type: 'attributeTree',
119
- attributeTreeTag: attributeTag
120
- });
121
- }
122
- }
123
- }
@@ -1,112 +0,0 @@
1
- import { consts, getObjectSchema } from '@izara_project/izara-core-library-service-schemas';
2
- import path from 'path';
3
-
4
- function buildObjectSchemaAllS3DebugParam(objType) {
5
- return {
6
- Bucket: process.env.iz_serviceSchemaBucketName || consts.OBJECT_SCHEMA_BUCKET_NAME,
7
- Key: consts.UPLOAD_PATH_S3.objectSchemaAll({}, objType)
8
- };
9
- }
10
-
11
- /**
12
- * Parses FlowSchemas into a memory-resident data structure.
13
- * Implements Hydration Strategy 3: Binding related flows directly to their owning ObjectSchema.
14
- */
15
- export async function parseFlowSchemas(rootPath, hydratedObjectData, options = {}) {
16
- const schemasPath = path.join(rootPath, 'app', 'src', 'schemas');
17
- const _izContext = { reqId: 'generate-sandbox', logger: console };
18
-
19
- // 1. Read FlowSchemas using existing library
20
- const flowsResponse = await getObjectSchema.getAllLocalFlowSchemas(_izContext, schemasPath);
21
- let flows = flowsResponse.records || [];
22
-
23
- const seenFlowTags = new Set(flows.map(f => f.flowTag));
24
-
25
- // Also read dynamic flows from generateCode directory in the output path
26
- const targetSchemasDir = options.outputPath ? path.join(options.outputPath, 'app', 'src', 'schemas') : schemasPath;
27
- const dynamicSchemasPath = path.join(targetSchemasDir, 'FlowSchemas', 'generateCode');
28
- try {
29
- const fs = await import('fs/promises');
30
- const { pathToFileURL } = await import('url');
31
- const files = await fs.readdir(dynamicSchemasPath);
32
- for (const file of files) {
33
- if (file.endsWith('.js')) {
34
- const filePath = path.join(dynamicSchemasPath, file);
35
- const mod = await import(pathToFileURL(filePath).href);
36
- if (mod.default) {
37
- if (seenFlowTags.has(mod.default.flowTag)) {
38
- continue;
39
- }
40
- console.log(`[flowSchemaParser] Loaded dynamic flow: ${mod.default.flowTag}`);
41
- flows.push(mod.default);
42
- seenFlowTags.add(mod.default.flowTag);
43
- } else {
44
- console.log(`[flowSchemaParser] No default export in ${file}`);
45
- }
46
- }
47
- }
48
- } catch (err) {
49
- if (err.code !== 'ENOENT') {
50
- console.error(`[flowSchemaParser] Failed to load dynamic schemas from ${dynamicSchemasPath}:`, err);
51
- }
52
- }
53
-
54
- // 2. Hydration: Link flows to their parent ObjectSchema
55
- for (const flow of flows) {
56
- // If the flow explicitly defines an objType it handles (e.g. Validation, Search)
57
- if (flow.objType && flow.objType.objectType) {
58
- const targetObj = flow.objType.objectType;
59
- if (hydratedObjectData.objectMap.has(targetObj)) {
60
- hydratedObjectData.objectMap.get(targetObj).relatedFlows.push({
61
- flowTag: flow.flowTag,
62
- initiateBy: flow.initiateBy,
63
- type: 'explicit'
64
- });
65
- }
66
-
67
- // --- RBAC Check ---
68
- try {
69
- let objSchema = hydratedObjectData.objectMap.get(targetObj);
70
- if (!objSchema && flow.objType.serviceTag) {
71
- console.log(`[flowSchemaParser] Fetching objSchema from S3 for targetObj: ${targetObj}`);
72
- console.log(`[flowSchemaParser] getObjSchemaS3WithHierarchy param:`, {
73
- objType: flow.objType,
74
- s3: buildObjectSchemaAllS3DebugParam(flow.objType)
75
- });
76
- objSchema = await getObjectSchema.getObjSchemaS3WithHierarchy(_izContext, flow.objType);
77
- }
78
-
79
- console.log(`[flowSchemaParser] targetObj: ${targetObj}, objSchema.belongTo:`, objSchema?.belongTo);
80
-
81
- if (objSchema && objSchema.belongTo) {
82
- console.log(`[flowSchemaParser] Fetching belongToSchema from S3:`, objSchema.belongTo);
83
- console.log(`[flowSchemaParser] getObjSchemaS3WithHierarchy param:`, {
84
- objType: objSchema.belongTo,
85
- s3: buildObjectSchemaAllS3DebugParam(objSchema.belongTo)
86
- });
87
- const belongToSchema = await getObjectSchema.getObjSchemaS3WithHierarchy(_izContext, objSchema.belongTo);
88
- console.log(`[flowSchemaParser] belongToSchema.addOnDataStructure:`, belongToSchema?.addOnDataStructure);
89
- if (belongToSchema && belongToSchema.addOnDataStructure) {
90
- const hasRbac = belongToSchema.addOnDataStructure.some(addOn => addOn.type === 'rbac');
91
- console.log(`[flowSchemaParser] flowTag: ${flow.flowTag}, hasRbac: ${hasRbac}`);
92
- if (hasRbac) {
93
- flow.isRbac = true;
94
- }
95
- }
96
- }
97
- } catch (err) {
98
- console.error(`[flowSchemaParser] Failed to check RBAC for flow ${flow.flowTag}:`, err.message);
99
- }
100
- }
101
-
102
- // Also check triggerFlowTypes if this flow triggers others
103
- if (flow.triggerFlowTypes && Array.isArray(flow.triggerFlowTypes)) {
104
- // Further hydration logic if needed...
105
- }
106
- }
107
-
108
- return {
109
- flows: flows,
110
- flowMap: new Map(flows.map(f => [f.flowTag, f]))
111
- };
112
- }
@@ -1,39 +0,0 @@
1
- import { getObjectSchema } from '@izara_project/izara-core-library-service-schemas';
2
- import path from 'path';
3
-
4
- /**
5
- * Parses ObjectSchemas into a memory-resident data structure.
6
- * Implements Hydration Strategy 1: Merging fieldNames and identifiers from extendObjType
7
- */
8
- export async function parseObjectSchemas(rootPath) {
9
- const schemasPath = path.join(rootPath, 'app', 'src', 'schemas');
10
- // Dummy izContext for local parsing
11
- const _izContext = { reqId: 'generate-sandbox', logger: console };
12
-
13
- // 1. Fetch raw schemas using the existing library
14
- const schemasResponse = await getObjectSchema.getAllLocalObjectSchemasWithoutHierarchy(_izContext, schemasPath);
15
- const schemas = schemasResponse.records || [];
16
-
17
- // 2. Hydration: Merge extended objects
18
- const schemaMap = new Map();
19
- schemas.forEach(s => schemaMap.set(s.objectType, s));
20
-
21
- const hydratedObjects = schemas.map(obj => {
22
- const hydrated = { ...obj, relationships: {}, relatedFlows: [] };
23
-
24
- // If it extends another object, merge its fields
25
- if (obj.extendObjType && obj.extendObjType.objectType) {
26
- const parent = schemaMap.get(obj.extendObjType.objectType);
27
- if (parent) {
28
- hydrated.fieldNames = { ...parent.fieldNames, ...hydrated.fieldNames };
29
- hydrated.identifiers = [ ...(parent.identifiers || []), ...(hydrated.identifiers || []) ];
30
- }
31
- }
32
- return hydrated;
33
- });
34
-
35
- return {
36
- objects: hydratedObjects,
37
- objectMap: new Map(hydratedObjects.map(s => [s.objectType, s]))
38
- };
39
- }
@@ -1,51 +0,0 @@
1
- import { getObjectSchema } from '@izara_project/izara-core-library-service-schemas';
2
- import path from 'path';
3
-
4
- /**
5
- * Parses RelationshipSchemas into a memory-resident data structure.
6
- * Implements Hydration Strategy 2: Two-way binding for links array.
7
- */
8
- export async function parseRelationshipSchemas(rootPath, hydratedObjectData) {
9
- const schemasPath = path.join(rootPath, 'app', 'src', 'schemas');
10
- const _izContext = { reqId: 'generate-sandbox', logger: console };
11
-
12
- // 1. Read from schemas/RelationshipSchemas
13
- const relationships = await getObjectSchema.getAllLocalRelationshipSchema(_izContext, schemasPath);
14
-
15
- // 2. Hydrate ObjectSchemas with two-way bindings
16
- relationships.forEach(rel => {
17
- if (rel.links && Array.isArray(rel.links)) {
18
- rel.links.forEach(link => {
19
- const fromObj = link.from?.objType?.objectType;
20
- const toObj = link.to?.objType?.objectType;
21
-
22
- // Bind to "from" object
23
- if (fromObj && hydratedObjectData.objectMap.has(fromObj)) {
24
- const obj = hydratedObjectData.objectMap.get(fromObj);
25
- obj.relationships[rel.relationshipTag] = {
26
- relationshipTag: rel.relationshipTag,
27
- direction: 'from',
28
- linkType: link.from.linkType,
29
- target: toObj
30
- };
31
- }
32
-
33
- // Bind to "to" object
34
- if (toObj && hydratedObjectData.objectMap.has(toObj)) {
35
- const obj = hydratedObjectData.objectMap.get(toObj);
36
- obj.relationships[rel.relationshipTag] = {
37
- relationshipTag: rel.relationshipTag,
38
- direction: 'to',
39
- linkType: link.to.linkType,
40
- target: fromObj
41
- };
42
- }
43
- });
44
- }
45
- });
46
-
47
- return {
48
- relationships: relationships,
49
- relationshipMap: new Map(relationships.map(r => [r.relationshipTag, r]))
50
- };
51
- }