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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/README.md +73 -11
  2. package/docs/TriggeredCache Flow.drawio +193 -0
  3. package/docs/test.mmd +47 -0
  4. package/docs/test.png +0 -0
  5. package/index.js +0 -5
  6. package/package.json +7 -6
  7. package/src/compile/compileProject.js +26 -0
  8. package/src/compile/loadSchemas.js +50 -0
  9. package/src/emit/crud/dynamicCrudFlowSchemaTemplate.js +11 -0
  10. package/src/emit/crud/emitCrudApplicationArtifacts.js +161 -0
  11. package/src/emit/crud/emitDynamicCrudFlowSchemas.js +84 -0
  12. package/src/emit/crud/generateCrudApplicationArtifacts.js +16 -0
  13. package/src/emit/crud/generateDynamicCrudFlowSchemas.js +21 -0
  14. package/src/emit/crud/loadLocalSchemaArrays.js +8 -0
  15. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/CreateEndpoint_Main.ejs +6 -6
  16. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/DeleteEndpoint_Main.ejs +6 -6
  17. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step → emit/crud/templates}/FlowEndpointBeforeLogical_Main.ejs +2 -2
  18. package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +96 -0
  19. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowEndpoint_HdrWbs.ejs +1 -1
  20. package/src/emit/crud/templates/FlowHandler_HdrApi.ejs +69 -0
  21. package/src/{codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_HdrSqs.ejs → emit/crud/templates/FlowHandler_HdrSqs.ejs} +52 -56
  22. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowMain_Wbs.ejs +1 -3
  23. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/GetEndpoint_Main.ejs +2 -2
  24. package/src/emit/crud/templates/GetRangeEndpoint_Main.ejs +127 -0
  25. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/UpdateEndpoint_Main.ejs +11 -9
  26. package/src/emit/custom/customFlows.js +121 -0
  27. package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +325 -0
  28. package/src/emit/custom/generateCustomFlowApplicationArtifacts.js +22 -0
  29. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/custom/templates}/FlowEndpoint_Main.ejs +5 -5
  30. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step → emit/custom/templates}/FlowStep_Main.ejs +1 -1
  31. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_Main.ejs +5 -5
  32. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_HdrWbs.ejs +1 -1
  33. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_Main.ejs +3 -3
  34. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_Main.ejs +4 -5
  35. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/FlowHandler_HdrS3.ejs +2 -8
  36. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ProcessS3File_Main.ejs +1 -1
  37. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_Main.ejs +5 -6
  38. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +32 -0
  39. package/src/emit/custom/templates/triggerCache/CheckTriggerCache_Main.ejs +63 -0
  40. package/src/emit/custom/templates/triggerCache/TriggerCacheComplete_Main.ejs +35 -0
  41. package/src/emit/custom/templates/triggerCache/TriggerCache_Main.ejs +16 -0
  42. package/src/emit/function/functionYamlArtifact.js +125 -0
  43. package/src/emit/rbac/emitDynamicRbacFlowSchemas.js +117 -0
  44. package/src/emit/rbac/emitRbacApplicationArtifacts.js +270 -0
  45. package/src/emit/rbac/generateCreateTargetRoleHandler.js +19 -0
  46. package/src/emit/rbac/generateDynamicRbacFlowSchemas.js +21 -0
  47. package/src/emit/rbac/rbacFlowTag.js +7 -0
  48. package/src/emit/rbac/templates/CreateTargetRole_HdrSqs.ejs +24 -0
  49. package/src/emit/rbac/templates/CreateTargetRole_Main.ejs +25 -0
  50. package/src/emit/rbac/templates/DynamicRbacFlowSchema.ejs +5 -0
  51. package/src/emit/rbac/templates/ListRbac_HdrApi.ejs +17 -0
  52. package/src/emit/rbac/templates/ListRbac_HdrSqs.ejs +13 -0
  53. package/src/emit/rbac/templates/ListRbac_Main.ejs +29 -0
  54. package/src/emit/rbac/templates/RbacMutation_Main.ejs +22 -0
  55. package/src/emit/rbac/templates/UserRbacFlow_HdrInv.ejs +10 -0
  56. package/src/emit/rbac/templates/UserRbacFlow_Main.ejs +44 -0
  57. package/src/emit/rbac/templates/UserRoleMutation_Main.ejs +33 -0
  58. package/src/emit/relationship/dynamicRelationshipFlowSchemaTemplate.js +11 -0
  59. package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +66 -0
  60. package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +148 -0
  61. package/src/emit/relationship/generateDynamicRelationshipFlowSchemas.js +23 -0
  62. package/src/emit/relationship/generateRelationshipApplicationArtifacts.js +22 -0
  63. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationshipComplete_Main.ejs → emit/relationship/templates/ChangeRelationshipComplete_Main.ejs} +1 -1
  64. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationship_Main.ejs → emit/relationship/templates/ChangeRelationship_Main.ejs} +12 -4
  65. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationshipComplete_Main.ejs → emit/relationship/templates/CreateRelationshipComplete_Main.ejs} +1 -1
  66. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationship_Main.ejs → emit/relationship/templates/CreateRelationship_Main.ejs} +1 -1
  67. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationshipComplete_Main.ejs → emit/relationship/templates/DeleteRelationshipComplete_Main.ejs} +1 -1
  68. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationship_Main.ejs → emit/relationship/templates/DeleteRelationship_Main.ejs} +1 -1
  69. package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrDsq.ejs +1 -1
  70. package/src/emit/relationship/templates/FlowHandler_HdrInv.ejs +45 -0
  71. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationshipComplete_Main.ejs → emit/relationship/templates/GetRelationshipComplete_Main.ejs} +1 -1
  72. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationship_Main.ejs → emit/relationship/templates/GetRelationship_Main.ejs} +1 -1
  73. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationship_Main.ejs → emit/relationship/templates/MoveRelationship_Main.ejs} +9 -1
  74. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationshipComplete_Main.ejs → emit/relationship/templates/UpdateRelationshipComplete_Main.ejs} +1 -1
  75. package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationship_Main.ejs → emit/relationship/templates/UpdateRelationship_Main.ejs} +1 -1
  76. package/src/emit/resource/emitResourceArtifacts.js +595 -0
  77. package/src/emit/resource/generateResourceArtifacts.js +20 -0
  78. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceBeforeLogicalYaml.ejs +1 -1
  79. package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceSqsYaml.ejs +6 -6
  80. package/src/{codeGenerators/app/sls_yaml → emit/resource}/templates/SharedResource_Yaml.ejs +8 -8
  81. package/src/emit/system/emitSystemWebSocketArtifacts.js +183 -0
  82. package/src/generate.js +60 -126
  83. package/src/output/commitArtifacts.js +213 -0
  84. package/src/output/mergeHooks.js +55 -0
  85. package/src/output/validateArtifacts.js +62 -0
  86. package/src/plan/buildGenerationPlan.js +50 -0
  87. package/test/core.test.js +159 -0
  88. package/test/createTargetRoleHandler.test.js +68 -0
  89. package/test/crudApplicationArtifacts.test.js +107 -0
  90. package/test/customFlowApplicationArtifacts.test.js +297 -0
  91. package/test/dynamicCrudFlowSchemas.test.js +136 -0
  92. package/test/dynamicRbacFlowSchemas.test.js +101 -0
  93. package/test/dynamicRelationshipFlowSchemas.test.js +99 -0
  94. package/test/functionYamlArtifact.test.js +34 -0
  95. package/test/intTestApi.test.js +29 -0
  96. package/test/publicApi.test.js +209 -0
  97. package/test/relationshipApplicationArtifacts.test.js +68 -0
  98. package/test/resourceArtifacts.test.js +121 -0
  99. package/jsconfig.json +0 -9
  100. package/src/__tests__/getIntTestConfig.test.js +0 -51
  101. package/src/__tests__/intTestGeneratorShared.test.cjs +0 -169
  102. package/src/__tests__/pathIntTest.test.js +0 -103
  103. package/src/codeGenerators/app/initial_setup/InitialSetupGenerator.js +0 -199
  104. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_LambdaRole.ejs +0 -50
  105. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_SnsService.ejs +0 -15
  106. package/src/codeGenerators/app/initial_setup/templates/InitialSetup_TableName.ejs +0 -9
  107. package/src/codeGenerators/app/sls_yaml/FindDataYamlGenerator.js +0 -23
  108. package/src/codeGenerators/app/sls_yaml/FunctionYamlGenerator.js +0 -332
  109. package/src/codeGenerators/app/sls_yaml/ProcessLogicalYamlGenerator.js +0 -21
  110. package/src/codeGenerators/app/sls_yaml/RoleNameConfigGenerator.js +0 -48
  111. package/src/codeGenerators/app/sls_yaml/SharedResourceYamlGenerator.js +0 -503
  112. package/src/codeGenerators/app/sls_yaml/__tests__/SharedResourceYamlGenerator.test.js +0 -235
  113. package/src/codeGenerators/app/sls_yaml/_policy/PolicyRegistry.js +0 -56
  114. package/src/codeGenerators/app/sls_yaml/_policy/__tests__/PolicyRegistry.test.js +0 -33
  115. package/src/codeGenerators/app/sls_yaml/renderYamlTemplate.js +0 -13
  116. package/src/codeGenerators/app/sls_yaml/templates/FindData_Yaml.ejs +0 -10
  117. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Api.ejs +0 -21
  118. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_EventBridge.ejs +0 -14
  119. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Inv.ejs +0 -6
  120. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Sqs.ejs +0 -11
  121. package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Wbs.ejs +0 -11
  122. package/src/codeGenerators/app/sls_yaml/templates/ProcessLogical_Yaml.ejs +0 -32
  123. package/src/codeGenerators/app/sls_yaml/templates/RoleNameConfig_Yaml.ejs +0 -5
  124. package/src/codeGenerators/app/src/generatedCode/FindData/FindDataGenerator.js +0 -238
  125. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_HdrSqs.ejs +0 -87
  126. package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_Main.ejs +0 -108
  127. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByDynamo.ejs +0 -32
  128. package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByGraph.ejs +0 -87
  129. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/.gitkeep +0 -0
  130. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/EndpointsGenerator.js +0 -120
  131. package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step/FlowEndpointComplete_Main.ejs +0 -313
  132. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/RbacFlowGenerator.js +0 -116
  133. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateRolePermissions.ejs +0 -135
  134. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateTargetRole.ejs +0 -131
  135. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateUserRole.ejs +0 -150
  136. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteRolePermissions.ejs +0 -132
  137. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteTargetRole.ejs +0 -132
  138. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteUserFromRole.ejs +0 -150
  139. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/FlowRbac_Main.ejs +0 -252
  140. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListRolePermissions.ejs +0 -120
  141. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListTargetRole.ejs +0 -122
  142. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListUserInRoles.ejs +0 -117
  143. package/src/codeGenerators/app/src/generatedCode/Flow/FlowRelationships/RelationshipFlowGenerator.js +0 -148
  144. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/.gitkeep +0 -0
  145. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/StatusFieldGenerator.js +0 -109
  146. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/WebSocketGenerator.js +0 -122
  147. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint/FlowEntryPoint_Main.ejs +0 -38
  148. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusFieldSns_Yaml.ejs +0 -52
  149. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_HdrSqs.ejs +0 -84
  150. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_Main.ejs +0 -78
  151. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Awaiting_Main.ejs +0 -123
  152. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Paginated_Main.ejs +0 -59
  153. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_PlugIn_Main.ejs +0 -72
  154. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_RecievePlugIn_Main.ejs +0 -76
  155. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateAwaitingStep.ejs +0 -41
  156. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateSendPlugin.ejs +0 -18
  157. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketFlow_Yaml.ejs +0 -26
  158. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketSub_Yaml.ejs +0 -7
  159. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_HdrSqs.ejs +0 -66
  160. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Main.ejs +0 -115
  161. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Yaml.ejs +0 -36
  162. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Main.ejs +0 -52
  163. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Yaml.ejs +0 -13
  164. package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketDynamoDb_Yaml.ejs +0 -28
  165. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseDsqHandler.js +0 -63
  166. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseSqsHandler.js +0 -66
  167. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/__tests__/BaseDsqHandler.test.js +0 -94
  168. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/dsq.js +0 -5
  169. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/eventBridge.js +0 -33
  170. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/extTopic.js +0 -6
  171. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncApi.js +0 -51
  172. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncInv.js +0 -51
  173. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/ownTopic.js +0 -54
  174. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/registry.js +0 -17
  175. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3.js +0 -56
  176. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ConfirmAfterUploadS3Generator.js +0 -46
  177. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreateObjectGenerator.js +0 -50
  178. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreatePreSignUrlGenerator.js +0 -48
  179. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ProcessAfterUploadS3Generator.js +0 -49
  180. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ReservedLimitGenerator.js +0 -47
  181. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/eventTypes.js +0 -23
  182. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowClassifier.js +0 -50
  183. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowEntryPointBase.js +0 -106
  184. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowMainFunctionBase.js +0 -172
  185. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowNaming.js +0 -37
  186. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowSelection.js +0 -19
  187. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepBase.js +0 -235
  188. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepNormalizer.js +0 -75
  189. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowValidator.js +0 -267
  190. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/propertyNormalizer.js +0 -18
  191. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/registry.js +0 -7
  192. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/roleNameDetection.js +0 -49
  193. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/triggerCacheBase.js +0 -177
  194. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_HdrSqs.ejs +0 -89
  195. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_Main.ejs +0 -83
  196. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_HdrSqs.ejs +0 -103
  197. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_Main.ejs +0 -58
  198. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrDsq.ejs +0 -104
  199. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrSqs.ejs +0 -88
  200. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_Main.ejs +0 -80
  201. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheQueue_Yaml.ejs +0 -36
  202. package/src/codeGenerators/app/src/generatedCode/Flow/_shared/yaml/SharedFunctionSqs_Yaml.ejs +0 -13
  203. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/ProcessLogicalGenerator.js +0 -29
  204. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrDsq.ejs +0 -177
  205. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrSqs.ejs +0 -155
  206. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_Main.ejs +0 -268
  207. package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_Main.ejs +0 -450
  208. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/RegisterGenerator.js +0 -149
  209. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_HdrSqs.ejs +0 -85
  210. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_Main.ejs +0 -176
  211. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_HdrWbs.ejs +0 -80
  212. package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_Main.ejs +0 -164
  213. package/src/codeGenerators/app/src/generatedCode/libs/ConstsGenerator.js +0 -28
  214. package/src/codeGenerators/app/src/generatedCode/libs/GenerateCodeLibsGenerator.js +0 -28
  215. package/src/codeGenerators/app/src/generatedCode/libs/templates/Consts.ejs +0 -448
  216. package/src/codeGenerators/app/src/generatedCode/libs/templates/GenerateCodeLibs.ejs +0 -124
  217. package/src/codeGenerators/resource/sls_yaml/DynamoDBGenerator.js +0 -87
  218. package/src/codeGenerators/resource/sls_yaml/FlowOutGenerator.js +0 -70
  219. package/src/codeGenerators/resource/sls_yaml/FlowResourceYamlGenerator.js +0 -182
  220. package/src/core/renderTemplateFile.js +0 -22
  221. package/src/core/validate.js +0 -165
  222. package/src/generateCode.js +0 -357
  223. package/src/generateSchema.js +0 -123
  224. package/src/parsers/flowSchemaParser.js +0 -112
  225. package/src/parsers/objectSchemaParser.js +0 -39
  226. package/src/parsers/relationshipSchemaParser.js +0 -51
  227. package/src/schemaGenerators/app/src/schemas/FlowSchemas/FlowSchemaGenerator.js +0 -107
  228. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RbacFlowSchemaGenerator.js +0 -98
  229. package/src/schemaGenerators/app/src/schemas/FlowSchemas/RelationshipFlowSchemaGenerator.js +0 -89
  230. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicFlowSchemaTemplate.ejs +0 -41
  231. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicRbacFlowSchemaTemplate.ejs +0 -20
  232. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/RelationshipFlowSchemaTemplate.ejs +0 -33
  233. package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/UserRbacFlowSchemaTemplate.ejs +0 -22
  234. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/AttributeTreeSchemaGenerator.js +0 -124
  235. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/PropertyValueSchemaGenerator.js +0 -119
  236. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeManagerSchemaTemplate.ejs +0 -14
  237. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeStandardSchemaTemplate.ejs +0 -13
  238. package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicPropertyValueSchemaTemplate.ejs +0 -15
  239. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/AttributeTreeRelationshipSchemaGenerator.js +0 -109
  240. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/PropertyValueRelationshipSchemaGenerator.js +0 -103
  241. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/__tests__/relationshipSchemaHelpers.test.js +0 -38
  242. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/relationshipSchemaHelpers.js +0 -40
  243. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicAttributeTreeRelationshipSchemaTemplate.ejs +0 -7
  244. package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicPropertyValueRelationshipSchemaTemplate.ejs +0 -7
  245. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/SystemTextGenerator.js +0 -102
  246. package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/templates/SystemText_Template.ejs +0 -10
  247. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrInv.ejs +0 -0
  248. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_HdrSqs.ejs +0 -0
  249. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_HdrSqs.ejs +0 -0
  250. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_HdrSqs.ejs +0 -0
  251. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrApi.ejs +0 -0
  252. /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrSqs.ejs +0 -0
  253. /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationshipComplete_Main.ejs → emit/relationship/templates/MoveRelationshipComplete_Main.ejs} +0 -0
  254. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/DynamoDBTable_Yaml.ejs +0 -0
  255. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/FlowOut_Yaml.ejs +0 -0
  256. /package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceYaml.ejs +0 -0
  257. /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/SystemDynamoDB_Yaml.ejs +0 -0
@@ -1,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
- }