@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
@@ -0,0 +1,68 @@
1
+ import assert from 'node:assert/strict';
2
+ import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import test, { after } from 'node:test';
6
+
7
+ import { generateRelationshipApplicationArtifacts } from '../src/emit/relationship/generateRelationshipApplicationArtifacts.js';
8
+
9
+ const roots = new Set();
10
+ after(() => Promise.all([...roots].map(root => rm(root, { recursive: true, force: true }))));
11
+
12
+ test('emits relationship action and complete handlers with data-first function YAML', async () => {
13
+ const rootPath = await createProject(true);
14
+ const result = await generateRelationshipApplicationArtifacts(rootPath, { serviceTag: 'orders' });
15
+
16
+ assert.equal(result.files.length, 40);
17
+ assert.ok(result.files.every(file => !file.path.includes('/Process')));
18
+ assert.match(
19
+ await readFile(join(rootPath, 'app/src/generatedCode/FlowRelationships/GetRelationship/source/GetRelationship_HdrDsq.js'), 'utf8'),
20
+ /import GetRelationship/
21
+ );
22
+ assert.match(
23
+ await readFile(join(rootPath, 'app/src/generatedCode/FlowRelationships/CreateRelationship/source/CreateRelationshipComplete_HdrSqs.js'), 'utf8'),
24
+ /import CreateRelationshipComplete/
25
+ );
26
+ const yaml = await readFile(join(rootPath, 'app/sls_yaml/generatedCode/source/flow-relationships.yml'), 'utf8');
27
+ assert.match(yaml, /GetRelHdrApi:/);
28
+ assert.doesNotMatch(yaml, /handler: .*\/Process/);
29
+ assert.match(yaml, /CreateRelHdrSqs:[\s\S]*?iz_resourcePrefix}CreateRelationshipHdrSqs\n/);
30
+ assert.doesNotMatch(yaml, /Process(?:Create|Update|Delete|Get|Change|Move)Relationship/);
31
+ assert.match(yaml, /path: \/orders\/orderCustomer\/get/);
32
+ assert.match(yaml, /CreateRelationshipHdrWbs:[\s\S]*websocket:/);
33
+ assert.ok(yaml.indexOf('CreateRelationshipHdrWbs:') < yaml.indexOf('CreateRelHdrSqs:'));
34
+ assert.match(
35
+ await readFile(join(rootPath, 'app/src/generatedCode/FlowRelationships/CreateRelationship/source/CreateRelationship_HdrWbs.js'), 'utf8'),
36
+ /import CreateRelationship from '\.\/CreateRelationship_WbsMain\.js'/
37
+ );
38
+ await assert.rejects(readFile(join(rootPath, 'app/src/generatedCode/FlowRelationships/CreateRelationship/source/ProcessCreateRelationship_Main.js')));
39
+ assert.match(
40
+ await readFile(join(rootPath, 'app/src/generatedCode/FlowRelationships/CreateRelationship/source/CreateRelationship_Main.js'), 'utf8'),
41
+ /export default async function createRelationship/
42
+ );
43
+ assert.match(yaml, /CreateRelationshipCompleteHdrSqs:/);
44
+ });
45
+
46
+ test('removes managed relationship artifacts after relationships are removed', async () => {
47
+ const rootPath = await createProject(true);
48
+ await generateRelationshipApplicationArtifacts(rootPath, { serviceTag: 'orders' });
49
+ await rm(join(rootPath, 'app/src/schemas/RelationshipSchemas/OrderCustomer.js'));
50
+
51
+ assert.deepEqual((await generateRelationshipApplicationArtifacts(rootPath)).files, []);
52
+ await assert.rejects(readFile(join(rootPath, 'app/src/generatedCode/FlowRelationships/CreateRelationship/source/CreateRelationship_Main.js')));
53
+ await assert.rejects(readFile(join(rootPath, 'app/sls_yaml/generatedCode/source/flow-relationships.yml')));
54
+ });
55
+
56
+ async function createProject(withRelationship) {
57
+ const rootPath = await mkdtemp(join(tmpdir(), 'generate-service-code-v2-relationship-application-'));
58
+ roots.add(rootPath);
59
+ const relationshipDirectory = join(rootPath, 'app/src/schemas/RelationshipSchemas');
60
+ await mkdir(relationshipDirectory, { recursive: true });
61
+ if (withRelationship) {
62
+ await writeFile(
63
+ join(relationshipDirectory, 'OrderCustomer.js'),
64
+ "export default { relationshipTag: 'orderCustomer', links: [] };\n"
65
+ );
66
+ }
67
+ return rootPath;
68
+ }
@@ -0,0 +1,121 @@
1
+ import assert from 'node:assert/strict';
2
+ import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import test, { after } from 'node:test';
6
+
7
+ import { generateResourceArtifacts } from '../src/emit/resource/generateResourceArtifacts.js';
8
+
9
+ const roots = new Set();
10
+ after(() => Promise.all([...roots].map(root => rm(root, { recursive: true, force: true }))));
11
+
12
+ test('emits queues, topics, tables, and IAM roles from schema data', async () => {
13
+ const rootPath = await createProject();
14
+ const result = await generateResourceArtifacts(rootPath);
15
+
16
+ assert.equal(result.files.length, 4);
17
+ const resources = await readFile(join(rootPath, 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml'), 'utf8');
18
+ assert.match(resources, /InCreate:/);
19
+ for (const queueName of ['FindDataHdrSqs', 'ProcessLogicalHdrSqs', 'PaginateProcessLogicalHdrDsq', 'PaginateProcessLogicalHdrSqs']) {
20
+ assert.match(resources, new RegExp(`^ ${queueName}:`, 'm'));
21
+ }
22
+ assert.match(
23
+ await readFile(join(rootPath, 'resource/sls_yaml/generatedCode/source/generated-dynamoDB-table.yml'), 'utf8'),
24
+ /OrdersTable:/
25
+ );
26
+ const iam = await readFile(join(rootPath, 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'), 'utf8');
27
+ assert.match(iam, /FlowObjectsRole:/);
28
+ assert.match(iam, /FlowRelationshipRole:/);
29
+ assert.match(iam, /FlowRbacRole:/);
30
+ assert.match(iam, /sqs:ReceiveMessage/);
31
+ assert.match(iam, /sns:Publish/);
32
+ assert.doesNotMatch(roleBlock(iam, 'WebSocketMainRole'), /Orders|RolePermissions|CreateHdrSqs/);
33
+ assert.match(roleBlock(iam, 'WebSocketMainRole'), /UserUploadRecords|WebSocketTask|WebSocketCompleteHdrSqs/);
34
+ assert.doesNotMatch(roleBlock(iam, 'FlowRbacRole'), /Orders|ProcessCreateRelationshipHdrSqs/);
35
+ assert.match(roleBlock(iam, 'FlowRbacRole'), /RolePermissions|ProcessCreateTargetRoleHdrSqs/);
36
+ assert.match(resources, /^ CreateRelationshipHdrSqs:/m);
37
+ assert.equal((resources.match(/^ CreateRelationshipHdrSqs:/gm) ?? []).length, 1);
38
+ assert.match(resources, /^ CreateRelationshipCompleteHdrSqs:/m);
39
+ assert.match(resources, /^ GetRelationshipHdrDsq:/m);
40
+ assert.doesNotMatch(resources, /Process(?:Create|Update|Delete|Get|Change|Move)Relationship/);
41
+ const relationshipRole = roleBlock(iam, 'FlowRelationshipRole');
42
+ assert.match(relationshipRole, /CreateRelationshipHdrSqs/);
43
+ assert.match(relationshipRole, /CreateRelationshipCompleteHdrSqs/);
44
+ assert.match(relationshipRole, /GetRelationshipHdrDsq/);
45
+ assert.doesNotMatch(relationshipRole, /Process(?:Create|Update|Delete|Get|Change|Move)Relationship/);
46
+ assert.match(roleBlock(iam, 'RegisterRole'), /s3:GetObject/);
47
+ assert.doesNotMatch(roleBlock(iam, 'RegisterRole'), /dynamodb:|sqs:|sns:/);
48
+ assert.doesNotMatch(iam, /s3:GetObjectVersion|s3:ListBucket|sqs:DeleteMessageBatch|sqs:GetQueueUrl/);
49
+ assert.match(iam, /#<#\/\w+StatementHookCode#>\n\n \w+Role:/);
50
+ for (const filePath of [
51
+ 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml',
52
+ 'resource/sls_yaml/generatedCode/source/generated-sns-out.yml',
53
+ 'resource/sls_yaml/generatedCode/source/generated-dynamoDB-table.yml',
54
+ 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'
55
+ ]) {
56
+ assert.doesNotMatch(await readFile(join(rootPath, filePath), 'utf8'), /\n\n$/);
57
+ }
58
+ });
59
+
60
+ test('emits one before-logical queue for flows that share an action', async () => {
61
+ const rootPath = await createProject();
62
+ const flowDirectory = join(rootPath, 'app/src/schemas/FlowSchemas');
63
+ await writeFile(
64
+ join(flowDirectory, 'BeforeLogical.js'),
65
+ "export default [{ flowTag: 'first', event: ['ownTopic'], generatedCodeConfig: { generatedCodeTag: 'create', codeHookTag: 'beforeLogical' } }, { flowTag: 'second', event: ['extTopic'], generatedCodeConfig: { generatedCodeTag: 'create', codeHookTag: 'beforeLogical' } }];\n"
66
+ );
67
+
68
+ await generateResourceArtifacts(rootPath);
69
+
70
+ const resources = await readFile(join(rootPath, 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml'), 'utf8');
71
+ assert.equal((resources.match(/^ CreateBeforeLogicalHdrSqs:/gm) ?? []).length, 1);
72
+ assert.match(resources, /SubscriptionOutFirstToCreateBeforeLogical:/);
73
+ assert.match(resources, /SubscriptionOutSecondToCreateBeforeLogical:/);
74
+ });
75
+
76
+ test('emits the shared WebSocket completion queue and output-topic subscriptions', async () => {
77
+ const rootPath = await createProject();
78
+ await generateResourceArtifacts(rootPath);
79
+
80
+ const resources = await readFile(join(rootPath, 'resource/sls_yaml/generatedCode/source/generated-sns-in-sqs.yml'), 'utf8');
81
+ assert.match(resources, /^ WebSocketCompleteHdrSqs:/m);
82
+ assert.match(resources, /SubscriptionToOutCustomWebSocketComplete:/);
83
+ const iam = await readFile(join(rootPath, 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'), 'utf8');
84
+ for (const roleName of ['WebSocketMainRole', 'FlowObjectsRole', 'FlowRelationshipRole', 'FlowRbacRole', 'CustomRole', 'UploadRole']) {
85
+ const role = roleBlock(iam, roleName);
86
+ assert.match(role, /execute-api:ManageConnections/);
87
+ assert.match(role, /arn:aws:execute-api:\$\{self:custom\.iz_region\}:\$\{self:custom\.iz_accountId\}:\$\{self:custom\.iz_webSocketHostId\}\/\*/);
88
+ }
89
+ assert.match(resources, /SubscriptionToOutCreateRelationshipWebSocketComplete:/);
90
+ });
91
+
92
+ test('scopes stored-cache permissions to the flow object table', async () => {
93
+ const rootPath = await createProject();
94
+ await writeFile(join(rootPath, 'app/src/schemas/ObjectSchemas/Cache.js'), "export default { objectType: 'cache', storageResources: { main: { storageType: 'dynamoDB', tableName: 'CurrentData' } } };\n");
95
+ await writeFile(join(rootPath, 'app/src/schemas/FlowSchemas/Cache.js'), "export default { flowTag: 'cacheFlow', event: ['lambdaSyncApi'], statusType: 'storedCache', objType: { objectType: 'cache' } };\n");
96
+
97
+ await generateResourceArtifacts(rootPath);
98
+
99
+ const iam = await readFile(join(rootPath, 'app/sls_yaml/generatedCode/source/generate-shared-resource.yml'), 'utf8');
100
+ const role = roleBlock(iam, 'CacheFlowRole');
101
+ assert.match(role, /CurrentData/);
102
+ assert.doesNotMatch(role, /Orders|WebSocketTask/);
103
+ });
104
+
105
+ function roleBlock(iam, roleName) {
106
+ const match = iam.match(new RegExp(`^ ${roleName}:\\n(?:(?!^ [A-Za-z][A-Za-z0-9]*Role:\\n)[\\s\\S])*`, 'm'));
107
+ assert.ok(match, `Missing ${roleName} in generated IAM`);
108
+ return match[0];
109
+ }
110
+
111
+ async function createProject() {
112
+ const rootPath = await mkdtemp(join(tmpdir(), 'generate-service-code-v2-resource-'));
113
+ roots.add(rootPath);
114
+ const schemas = join(rootPath, 'app/src/schemas');
115
+ await Promise.all(['ObjectSchemas', 'RelationshipSchemas', 'FlowSchemas'].map(directory => mkdir(join(schemas, directory), { recursive: true })));
116
+ await writeFile(join(schemas, 'ObjectSchemas/Order.js'), "export default { objectType: 'order', generatedBy: 'userGenerated', addOnDataStructure: [{ type: 'rbac' }], identifiers: [{ type: 'partitionKey', fieldName: 'orderId' }], storageResources: { main: { storageType: 'dynamoDB', tableName: 'Orders' } } };\n");
117
+ await writeFile(join(schemas, 'RelationshipSchemas/OrderCustomer.js'), "export default { relationshipTag: 'orderCustomer', links: [] };\n");
118
+ await writeFile(join(schemas, 'FlowSchemas/Custom.js'), "export default { flowTag: 'custom', event: ['ownTopic'], outputTopic: true };\n");
119
+ await writeFile(join(schemas, 'FlowSchemas/Upload.js'), "export default { flowTag: 'upload', event: ['s3'] };\n");
120
+ return rootPath;
121
+ }
package/jsconfig.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "baseUrl": "src",
4
- "paths": {
5
- "#libs/*": ["libs/*"]
6
- }
7
- },
8
- "include": ["src"]
9
- }
@@ -1,51 +0,0 @@
1
- import { describe, it, expect, jest, beforeEach, afterEach } from '@jest/globals';
2
- import path from 'path';
3
- import fs from 'fs';
4
- import os from 'os';
5
- import libs from '../generateResources/IntTest/libs/libs.js';
6
- import { getObjectSchema } from '@izara_project/izara-core-library-service-schemas';
7
-
8
- const { getIntTestConfig } = libs;
9
-
10
- describe('getIntTestConfig path resolution', () => {
11
- let originalGetDataFromPath;
12
- let passedArgs;
13
-
14
- beforeEach(() => {
15
- originalGetDataFromPath = getObjectSchema.getDataFromPath;
16
- passedArgs = null;
17
- getObjectSchema.getDataFromPath = async (_izContext, folderName, rootFolderPath, options) => {
18
- passedArgs = { folderName, rootFolderPath, options };
19
- return [];
20
- };
21
- });
22
-
23
- afterEach(() => {
24
- getObjectSchema.getDataFromPath = originalGetDataFromPath;
25
- });
26
-
27
- it('Case 1: should resolve correctly when rootPath includes generateIntegrationTest', async () => {
28
- const rootPath = '/home/ironfist/Pong/Izara Project/Izara-Market-Product/izara-market-products-sell-offer-price-pong/app/src/generateIntegrationTest/';
29
- await getIntTestConfig({ logger: console }, 'generateIntegrationTest/libs/', rootPath);
30
-
31
- expect(passedArgs).not.toBeNull();
32
- expect(passedArgs.folderName).toBe('libs');
33
- expect(passedArgs.rootFolderPath).toBe('/home/ironfist/Pong/Izara Project/Izara-Market-Product/izara-market-products-sell-offer-price-pong/app/src/generateIntegrationTest');
34
- });
35
-
36
- it('Case 2: should resolve correctly when rootPath is repo root with app/src/... structure', async () => {
37
- const tmpDir = path.join(os.tmpdir(), 'get-int-test-config-scratch');
38
- fs.mkdirSync(tmpDir, { recursive: true });
39
- fs.mkdirSync(path.join(tmpDir, 'app', 'src', 'generateIntegrationTest', 'libs'), { recursive: true });
40
-
41
- try {
42
- await getIntTestConfig({ logger: console }, 'generateIntegrationTest/libs/', tmpDir);
43
-
44
- expect(passedArgs).not.toBeNull();
45
- expect(passedArgs.folderName).toBe('libs');
46
- expect(passedArgs.rootFolderPath).toBe(path.join(tmpDir, 'app', 'src', 'generateIntegrationTest'));
47
- } finally {
48
- fs.rmSync(tmpDir, { recursive: true, force: true });
49
- }
50
- });
51
- });
@@ -1,169 +0,0 @@
1
- const fs = require('fs');
2
- const os = require('os');
3
- const path = require('path');
4
-
5
- let getIntTestOutputPath;
6
- let runTemplateItems;
7
-
8
- const tempDirs = [];
9
-
10
- beforeAll(async () => {
11
- ({ getIntTestOutputPath, runTemplateItems } =
12
- await import('../intTestGeneratorShared.js'));
13
- });
14
-
15
- afterEach(() => {
16
- for (const dir of tempDirs.splice(0)) {
17
- fs.rmSync(dir, { recursive: true, force: true });
18
- }
19
- });
20
-
21
- describe('getIntTestOutputPath', () => {
22
- it('uses app/src when app directory exists', () => {
23
- const rootPath = fs.mkdtempSync(
24
- path.join(os.tmpdir(), 'int-test-output-app-')
25
- );
26
- tempDirs.push(rootPath);
27
- fs.mkdirSync(path.join(rootPath, 'app'));
28
-
29
- expect(getIntTestOutputPath(rootPath)).toBe(
30
- path.join(rootPath, 'app', 'src', 'generateIntegrationTest')
31
- );
32
- });
33
-
34
- it('falls back to src when app directory is missing', () => {
35
- const rootPath = fs.mkdtempSync(
36
- path.join(os.tmpdir(), 'int-test-output-src-')
37
- );
38
- tempDirs.push(rootPath);
39
-
40
- expect(getIntTestOutputPath(rootPath)).toBe(
41
- path.join(rootPath, 'src', 'generateIntegrationTest')
42
- );
43
- });
44
-
45
- it('detects app from project root even when output path is different', () => {
46
- const projectRootPath = fs.mkdtempSync(
47
- path.join(os.tmpdir(), 'int-test-output-project-root-')
48
- );
49
- const outputPath = fs.mkdtempSync(
50
- path.join(os.tmpdir(), 'int-test-output-custom-')
51
- );
52
- tempDirs.push(projectRootPath, outputPath);
53
- fs.mkdirSync(path.join(projectRootPath, 'app'));
54
-
55
- expect(getIntTestOutputPath(outputPath, projectRootPath)).toBe(
56
- path.join(outputPath, 'app', 'src', 'generateIntegrationTest')
57
- );
58
- });
59
- });
60
-
61
- describe('runTemplateItems', () => {
62
- it('skips empty array items', async () => {
63
- const writeSource = jest.fn();
64
-
65
- await runTemplateItems([[]], {
66
- writeSource,
67
- errorPrefix: 'IntTest resource'
68
- });
69
-
70
- expect(writeSource).not.toHaveBeenCalled();
71
- });
72
-
73
- it('validates items before writing', async () => {
74
- const writeSource = jest.fn()
75
- .mockResolvedValueOnce([true, {}])
76
- .mockResolvedValueOnce([true, {}]);
77
-
78
- await runTemplateItems([
79
- {
80
- templatePath: '/tmp/template.ejs',
81
- templateData: { ok: true },
82
- setting: { savePath: '/tmp/out' }
83
- }
84
- ], {
85
- writeSource,
86
- errorPrefix: 'IntTest resource'
87
- });
88
-
89
- expect(writeSource).toHaveBeenNthCalledWith(1, expect.any(Object), {
90
- checkCreateSourcePass: true
91
- });
92
- expect(writeSource).toHaveBeenNthCalledWith(2, expect.any(Object), {
93
- checkCreateSourcePass: false
94
- });
95
- });
96
-
97
- it('preserves configured files when clearing a save path', async () => {
98
- const savePath = fs.mkdtempSync(
99
- path.join(os.tmpdir(), 'int-test-preserve-save-path-')
100
- );
101
- tempDirs.push(savePath);
102
- fs.writeFileSync(path.join(savePath, 'saveConfig.js'), 'keep');
103
- fs.writeFileSync(path.join(savePath, 'old.js'), 'remove');
104
- fs.mkdirSync(path.join(savePath, 'nested'));
105
- fs.writeFileSync(path.join(savePath, 'nested', 'stale.json'), '{}');
106
-
107
- const writeSource = jest.fn()
108
- .mockResolvedValueOnce([true, {}])
109
- .mockImplementationOnce(async ({ setting }) => {
110
- fs.writeFileSync(path.join(setting.savePath, 'IntTestPath.js'), 'new');
111
- return [true, {}];
112
- });
113
-
114
- await runTemplateItems([
115
- {
116
- templatePath: '/tmp/template.ejs',
117
- templateData: { ok: true },
118
- setting: {
119
- savePath,
120
- preserveFileNames: ['saveConfig.js']
121
- }
122
- }
123
- ], {
124
- writeSource,
125
- errorPrefix: 'IntTest resource'
126
- });
127
-
128
- expect(fs.existsSync(path.join(savePath, 'saveConfig.js'))).toBe(true);
129
- expect(fs.readFileSync(path.join(savePath, 'saveConfig.js'), 'utf8')).toBe('keep');
130
- expect(fs.existsSync(path.join(savePath, 'old.js'))).toBe(false);
131
- expect(fs.existsSync(path.join(savePath, 'nested'))).toBe(false);
132
- expect(fs.existsSync(path.join(savePath, 'IntTestPath.js'))).toBe(true);
133
- });
134
-
135
- it('does not clear save path when cleanSavePath is false', async () => {
136
- const savePath = fs.mkdtempSync(
137
- path.join(os.tmpdir(), 'int-test-no-clean-save-path-')
138
- );
139
- tempDirs.push(savePath);
140
- fs.writeFileSync(path.join(savePath, 'config.json'), 'keep');
141
- fs.mkdirSync(path.join(savePath, 'nested-dir'));
142
- fs.writeFileSync(path.join(savePath, 'nested-dir', 'file.json'), '{}');
143
-
144
- const writeSource = jest.fn()
145
- .mockResolvedValueOnce([true, {}])
146
- .mockImplementationOnce(async ({ setting }) => {
147
- fs.writeFileSync(path.join(setting.savePath, 'IntTestPath.js'), 'new');
148
- return [true, {}];
149
- });
150
-
151
- await runTemplateItems([
152
- {
153
- templatePath: '/tmp/template.ejs',
154
- templateData: { ok: true },
155
- setting: {
156
- savePath,
157
- cleanSavePath: false
158
- }
159
- }
160
- ], {
161
- writeSource,
162
- errorPrefix: 'IntTest resource'
163
- });
164
-
165
- expect(fs.existsSync(path.join(savePath, 'config.json'))).toBe(true);
166
- expect(fs.existsSync(path.join(savePath, 'nested-dir'))).toBe(true);
167
- expect(fs.existsSync(path.join(savePath, 'IntTestPath.js'))).toBe(true);
168
- });
169
- });
@@ -1,103 +0,0 @@
1
- import { describe, it, expect } from '@jest/globals';
2
- import fs from 'fs';
3
- import os from 'os';
4
- import path from 'path';
5
-
6
- import generatePathIntTest from '../generateResources/IntTest/generateTests/pathIntTest/pathIntTest.js';
7
-
8
- describe('generatePathIntTest', () => {
9
- it('creates IntTestPath data from generated files in the new folder structure', async () => {
10
- const rootPath = fs.mkdtempSync(path.join(os.tmpdir(), 'int-test-path-'));
11
- const srcPath = path.join(rootPath, 'app', 'src', 'generateIntegrationTest');
12
- const serviceTag = 'svc-demo';
13
-
14
- fs.mkdirSync(path.join(srcPath, serviceTag, 'orderCreate', 'caseA'), { recursive: true });
15
- fs.mkdirSync(path.join(srcPath, serviceTag, 'orderCreate', 'orderCreate'), { recursive: true });
16
- fs.mkdirSync(path.join(srcPath, serviceTag, 'shared'), { recursive: true });
17
-
18
- fs.writeFileSync(path.join(srcPath, serviceTag, 'orderCreate', 'caseA', 'events.json'), '{}');
19
- fs.writeFileSync(path.join(srcPath, serviceTag, 'orderCreate', 'orderCreate', 'tests.json'), '{}');
20
- fs.writeFileSync(path.join(srcPath, serviceTag, 'shared', 'resources.json'), '{}');
21
- fs.writeFileSync(path.join(srcPath, serviceTag, 'ignore.txt'), 'ignore');
22
-
23
- try {
24
- const result = await generatePathIntTest({}, srcPath, {
25
- serviceTag,
26
- s3Prefix: 'demo-prefix'
27
- });
28
-
29
- expect(result).toEqual({
30
- templateData: {
31
- intTestPaths: [
32
- 'test_config/demo-prefix/svc-demo/orderCreate/caseA/',
33
- 'test_config/demo-prefix/svc-demo/orderCreate/orderCreate/',
34
- 'test_config/demo-prefix/svc-demo/shared/'
35
- ]
36
- },
37
- templatePath: expect.stringContaining('template.ejs'),
38
- setting: {
39
- generateHookFile: false,
40
- savePath: path.join(srcPath, './libs/'),
41
- saveFileName: 'IntTestPath',
42
- fileExtension: '.js',
43
- isAppend: false,
44
- cleanSavePath: false
45
- }
46
- });
47
- } finally {
48
- fs.rmSync(rootPath, { recursive: true, force: true });
49
- }
50
- });
51
-
52
- it('preserves test case folder name prefix even if it contains the serviceTag', async () => {
53
- const rootPath = fs.mkdtempSync(path.join(os.tmpdir(), 'int-test-path-nested-'));
54
- const srcPath = path.join(rootPath, 'app', 'src', 'generateIntegrationTest');
55
- const serviceTag = 'SellOfferManager';
56
-
57
- // Mock folder structure similar to the issue reported
58
- const nestedTestFolder = path.join(srcPath, serviceTag, 'IntegrationTest_SellOfferManager_ProcessCalCombinedPricingHdrSqs__case_BasicCase');
59
- fs.mkdirSync(nestedTestFolder, { recursive: true });
60
- fs.writeFileSync(path.join(nestedTestFolder, 'events.json'), '{}');
61
-
62
- try {
63
- const result = await generatePathIntTest({}, srcPath, {
64
- serviceTag,
65
- s3Prefix: 'PongDev'
66
- });
67
-
68
- expect(result).toEqual({
69
- templateData: {
70
- intTestPaths: [
71
- 'test_config/PongDev/SellOfferManager/IntegrationTest_SellOfferManager_ProcessCalCombinedPricingHdrSqs__case_BasicCase/'
72
- ]
73
- },
74
- templatePath: expect.stringContaining('template.ejs'),
75
- setting: {
76
- generateHookFile: false,
77
- savePath: path.join(srcPath, './libs/'),
78
- saveFileName: 'IntTestPath',
79
- fileExtension: '.js',
80
- isAppend: false,
81
- cleanSavePath: false
82
- }
83
- });
84
- } finally {
85
- fs.rmSync(rootPath, { recursive: true, force: true });
86
- }
87
- });
88
-
89
- it('returns empty when no generated files exist for the service tag', async () => {
90
- const rootPath = fs.mkdtempSync(path.join(os.tmpdir(), 'int-test-path-empty-'));
91
- const srcPath = path.join(rootPath, 'src', 'generateIntegrationTest');
92
- fs.mkdirSync(srcPath, { recursive: true });
93
-
94
- try {
95
- await expect(generatePathIntTest({}, srcPath, {
96
- serviceTag: 'missing-service',
97
- s3Prefix: 'demo-prefix'
98
- })).resolves.toEqual([]);
99
- } finally {
100
- fs.rmSync(rootPath, { recursive: true, force: true });
101
- }
102
- });
103
- });