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

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