@izara_project/izara-core-generate-service-code 1.0.65 → 1.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -11
- package/index.js +0 -5
- package/package.json +7 -6
- package/src/compile/compileProject.js +26 -0
- package/src/compile/loadSchemas.js +28 -0
- package/src/emit/crud/dynamicCrudFlowSchemaTemplate.js +11 -0
- package/src/emit/crud/emitCrudApplicationArtifacts.js +157 -0
- package/src/emit/crud/emitDynamicCrudFlowSchemas.js +84 -0
- package/src/emit/crud/generateCrudApplicationArtifacts.js +16 -0
- package/src/emit/crud/generateDynamicCrudFlowSchemas.js +21 -0
- package/src/emit/crud/loadLocalSchemaArrays.js +8 -0
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/CreateEndpoint_Main.ejs +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/DeleteEndpoint_Main.ejs +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step → emit/crud/templates}/FlowEndpointBeforeLogical_Main.ejs +2 -2
- package/src/emit/crud/templates/FlowEndpointComplete_Main.ejs +75 -0
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowEndpoint_HdrWbs.ejs +1 -1
- package/src/{codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_HdrSqs.ejs → emit/crud/templates/FlowHandler_HdrSqs.ejs} +52 -56
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/crud/templates}/FlowMain_Wbs.ejs +1 -3
- package/src/emit/crud/templates/GetRangeEndpoint_Main.ejs +127 -0
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/UpdateEndpoint_Main.ejs +1 -1
- package/src/emit/custom/customFlows.js +70 -0
- package/src/emit/custom/emitCustomFlowApplicationArtifacts.js +308 -0
- package/src/emit/custom/generateCustomFlowApplicationArtifacts.js +22 -0
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint → emit/custom/templates}/FlowEndpoint_Main.ejs +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step → emit/custom/templates}/FlowStep_Main.ejs +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_Main.ejs +5 -5
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_HdrWbs.ejs +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreateObject_Main.ejs +3 -3
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_Main.ejs +4 -5
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/FlowHandler_HdrS3.ejs +2 -8
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ProcessS3File_Main.ejs +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_Main.ejs +5 -6
- package/src/emit/custom/templates/triggerCache/CheckTriggerCache_HdrSqs.ejs +32 -0
- package/src/emit/custom/templates/triggerCache/CheckTriggerCache_Main.ejs +63 -0
- package/src/emit/custom/templates/triggerCache/TriggerCacheComplete_Main.ejs +35 -0
- package/src/emit/custom/templates/triggerCache/TriggerCache_Main.ejs +16 -0
- package/src/emit/function/functionYamlArtifact.js +111 -0
- package/src/emit/rbac/emitDynamicRbacFlowSchemas.js +117 -0
- package/src/emit/rbac/emitRbacApplicationArtifacts.js +256 -0
- package/src/emit/rbac/generateCreateTargetRoleHandler.js +19 -0
- package/src/emit/rbac/generateDynamicRbacFlowSchemas.js +21 -0
- package/src/emit/rbac/rbacFlowTag.js +7 -0
- package/src/emit/rbac/templates/CreateTargetRole_HdrSqs.ejs +24 -0
- package/src/emit/rbac/templates/CreateTargetRole_Main.ejs +25 -0
- package/src/emit/rbac/templates/DynamicRbacFlowSchema.ejs +5 -0
- package/src/emit/rbac/templates/ListRbac_HdrApi.ejs +17 -0
- package/src/emit/rbac/templates/ListRbac_HdrSqs.ejs +13 -0
- package/src/emit/rbac/templates/ListRbac_Main.ejs +29 -0
- package/src/emit/rbac/templates/RbacMutation_Main.ejs +22 -0
- package/src/emit/rbac/templates/UserRbacFlow_HdrInv.ejs +10 -0
- package/src/emit/rbac/templates/UserRbacFlow_Main.ejs +44 -0
- package/src/emit/rbac/templates/UserRoleMutation_Main.ejs +33 -0
- package/src/emit/relationship/dynamicRelationshipFlowSchemaTemplate.js +11 -0
- package/src/emit/relationship/emitDynamicRelationshipFlowSchemas.js +66 -0
- package/src/emit/relationship/emitRelationshipApplicationArtifacts.js +147 -0
- package/src/emit/relationship/generateDynamicRelationshipFlowSchemas.js +23 -0
- package/src/emit/relationship/generateRelationshipApplicationArtifacts.js +22 -0
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationshipComplete_Main.ejs → emit/relationship/templates/ChangeRelationshipComplete_Main.ejs} +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessChangeRelationship_Main.ejs → emit/relationship/templates/ChangeRelationship_Main.ejs} +10 -2
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationshipComplete_Main.ejs → emit/relationship/templates/CreateRelationshipComplete_Main.ejs} +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessCreateRelationship_Main.ejs → emit/relationship/templates/CreateRelationship_Main.ejs} +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationshipComplete_Main.ejs → emit/relationship/templates/DeleteRelationshipComplete_Main.ejs} +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessDeleteRelationship_Main.ejs → emit/relationship/templates/DeleteRelationship_Main.ejs} +1 -1
- package/src/emit/relationship/templates/FlowHandler_HdrApi.ejs +51 -0
- package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrDsq.ejs +1 -1
- package/src/emit/relationship/templates/FlowHandler_HdrInv.ejs +45 -0
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationshipComplete_Main.ejs → emit/relationship/templates/GetRelationshipComplete_Main.ejs} +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessGetRelationship_Main.ejs → emit/relationship/templates/GetRelationship_Main.ejs} +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationship_Main.ejs → emit/relationship/templates/MoveRelationship_Main.ejs} +9 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationshipComplete_Main.ejs → emit/relationship/templates/UpdateRelationshipComplete_Main.ejs} +1 -1
- package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessUpdateRelationship_Main.ejs → emit/relationship/templates/UpdateRelationship_Main.ejs} +1 -1
- package/src/emit/resource/emitResourceArtifacts.js +300 -0
- package/src/emit/resource/generateResourceArtifacts.js +20 -0
- package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceBeforeLogicalYaml.ejs +1 -1
- package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceSqsYaml.ejs +6 -6
- package/src/{codeGenerators/app/sls_yaml → emit/resource}/templates/SharedResource_Yaml.ejs +8 -8
- package/src/emit/system/emitSystemWebSocketArtifacts.js +182 -0
- package/src/generate.js +60 -126
- package/src/output/commitArtifacts.js +213 -0
- package/src/output/mergeHooks.js +55 -0
- package/src/output/validateArtifacts.js +62 -0
- package/src/plan/buildGenerationPlan.js +50 -0
- package/test/core.test.js +159 -0
- package/test/createTargetRoleHandler.test.js +68 -0
- package/test/crudApplicationArtifacts.test.js +107 -0
- package/test/customFlowApplicationArtifacts.test.js +294 -0
- package/test/dynamicCrudFlowSchemas.test.js +136 -0
- package/test/dynamicRbacFlowSchemas.test.js +101 -0
- package/test/dynamicRelationshipFlowSchemas.test.js +99 -0
- package/test/functionYamlArtifact.test.js +34 -0
- package/test/intTestApi.test.js +29 -0
- package/test/publicApi.test.js +209 -0
- package/test/relationshipApplicationArtifacts.test.js +68 -0
- package/test/resourceArtifacts.test.js +121 -0
- package/jsconfig.json +0 -9
- package/src/__tests__/getIntTestConfig.test.js +0 -51
- package/src/__tests__/intTestGeneratorShared.test.cjs +0 -169
- package/src/__tests__/pathIntTest.test.js +0 -103
- package/src/codeGenerators/app/initial_setup/InitialSetupGenerator.js +0 -199
- package/src/codeGenerators/app/initial_setup/templates/InitialSetup_LambdaRole.ejs +0 -50
- package/src/codeGenerators/app/initial_setup/templates/InitialSetup_SnsService.ejs +0 -15
- package/src/codeGenerators/app/initial_setup/templates/InitialSetup_TableName.ejs +0 -9
- package/src/codeGenerators/app/sls_yaml/FindDataYamlGenerator.js +0 -23
- package/src/codeGenerators/app/sls_yaml/FunctionYamlGenerator.js +0 -332
- package/src/codeGenerators/app/sls_yaml/ProcessLogicalYamlGenerator.js +0 -21
- package/src/codeGenerators/app/sls_yaml/RoleNameConfigGenerator.js +0 -48
- package/src/codeGenerators/app/sls_yaml/SharedResourceYamlGenerator.js +0 -503
- package/src/codeGenerators/app/sls_yaml/__tests__/SharedResourceYamlGenerator.test.js +0 -235
- package/src/codeGenerators/app/sls_yaml/_policy/PolicyRegistry.js +0 -56
- package/src/codeGenerators/app/sls_yaml/_policy/__tests__/PolicyRegistry.test.js +0 -33
- package/src/codeGenerators/app/sls_yaml/renderYamlTemplate.js +0 -13
- package/src/codeGenerators/app/sls_yaml/templates/FindData_Yaml.ejs +0 -10
- package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Api.ejs +0 -21
- package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_EventBridge.ejs +0 -14
- package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Inv.ejs +0 -6
- package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Sqs.ejs +0 -11
- package/src/codeGenerators/app/sls_yaml/templates/FunctionYaml_Wbs.ejs +0 -11
- package/src/codeGenerators/app/sls_yaml/templates/ProcessLogical_Yaml.ejs +0 -32
- package/src/codeGenerators/app/sls_yaml/templates/RoleNameConfig_Yaml.ejs +0 -5
- package/src/codeGenerators/app/src/generatedCode/FindData/FindDataGenerator.js +0 -238
- package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_HdrSqs.ejs +0 -87
- package/src/codeGenerators/app/src/generatedCode/FindData/templates/FindData_Main.ejs +0 -108
- package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByDynamo.ejs +0 -32
- package/src/codeGenerators/app/src/generatedCode/FindData/templates/GetByStorage/getByGraph.ejs +0 -87
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/.gitkeep +0 -0
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/EndpointsGenerator.js +0 -120
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/step/FlowEndpointComplete_Main.ejs +0 -313
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/RbacFlowGenerator.js +0 -116
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateRolePermissions.ejs +0 -135
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateTargetRole.ejs +0 -131
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/CreateUserRole.ejs +0 -150
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteRolePermissions.ejs +0 -132
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteTargetRole.ejs +0 -132
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/DeleteUserFromRole.ejs +0 -150
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/FlowRbac_Main.ejs +0 -252
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListRolePermissions.ejs +0 -120
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListTargetRole.ejs +0 -122
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRbac/templates/rbac/ListUserInRoles.ejs +0 -117
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowRelationships/RelationshipFlowGenerator.js +0 -148
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/.gitkeep +0 -0
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/StatusFieldGenerator.js +0 -109
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/WebSocketGenerator.js +0 -122
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/endpoint/FlowEntryPoint_Main.ejs +0 -38
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusFieldSns_Yaml.ejs +0 -52
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_HdrSqs.ejs +0 -84
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/statusField/CompleteStatusField_Main.ejs +0 -78
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Awaiting_Main.ejs +0 -123
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_ByConfig_Paginated_Main.ejs +0 -59
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_PlugIn_Main.ejs +0 -72
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/FlowStep_RecievePlugIn_Main.ejs +0 -76
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateAwaitingStep.ejs +0 -41
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/step/plugIns/templateSendPlugin.ejs +0 -18
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketFlow_Yaml.ejs +0 -26
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocketSub_Yaml.ejs +0 -7
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_HdrSqs.ejs +0 -66
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Main.ejs +0 -115
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/ProcessWebSocket_Yaml.ejs +0 -36
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Main.ejs +0 -52
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketConnect_Yaml.ejs +0 -13
- package/src/codeGenerators/app/src/generatedCode/Flow/FlowSchemas/templates/webSocket/WebSocketDynamoDb_Yaml.ejs +0 -28
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseDsqHandler.js +0 -63
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/BaseSqsHandler.js +0 -66
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/__tests__/BaseDsqHandler.test.js +0 -94
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/dsq.js +0 -5
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/eventBridge.js +0 -33
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/extTopic.js +0 -6
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncApi.js +0 -51
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/lambdaSyncInv.js +0 -51
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/ownTopic.js +0 -54
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/registry.js +0 -17
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3.js +0 -56
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ConfirmAfterUploadS3Generator.js +0 -46
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreateObjectGenerator.js +0 -50
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/CreatePreSignUrlGenerator.js +0 -48
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ProcessAfterUploadS3Generator.js +0 -49
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/events/s3Components/ReservedLimitGenerator.js +0 -47
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/eventTypes.js +0 -23
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowClassifier.js +0 -50
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowEntryPointBase.js +0 -106
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowMainFunctionBase.js +0 -172
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowNaming.js +0 -37
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowSelection.js +0 -19
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepBase.js +0 -235
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowStepNormalizer.js +0 -75
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/flowValidator.js +0 -267
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/propertyNormalizer.js +0 -18
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/registry.js +0 -7
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/roleNameDetection.js +0 -49
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/shared/triggerCacheBase.js +0 -177
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_HdrSqs.ejs +0 -89
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/CheckTriggerCache_Main.ejs +0 -83
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_HdrSqs.ejs +0 -103
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/ProcessTriggerCache_Main.ejs +0 -58
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrDsq.ejs +0 -104
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_HdrSqs.ejs +0 -88
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheComplete_Main.ejs +0 -80
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/triggerCache/TriggerCacheQueue_Yaml.ejs +0 -36
- package/src/codeGenerators/app/src/generatedCode/Flow/_shared/yaml/SharedFunctionSqs_Yaml.ejs +0 -13
- package/src/codeGenerators/app/src/generatedCode/ProcessLogical/ProcessLogicalGenerator.js +0 -29
- package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrDsq.ejs +0 -177
- package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_HdrSqs.ejs +0 -155
- package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/PaginateProcessLogical_Main.ejs +0 -268
- package/src/codeGenerators/app/src/generatedCode/ProcessLogical/templates/ProcessLogical_Main.ejs +0 -450
- package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/RegisterGenerator.js +0 -149
- package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_HdrSqs.ejs +0 -85
- package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/RegisterComplete_Main.ejs +0 -176
- package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_HdrWbs.ejs +0 -80
- package/src/codeGenerators/app/src/generatedCode/SystemFlowSchemas/templates/register/Register_Main.ejs +0 -164
- package/src/codeGenerators/app/src/generatedCode/libs/ConstsGenerator.js +0 -28
- package/src/codeGenerators/app/src/generatedCode/libs/GenerateCodeLibsGenerator.js +0 -28
- package/src/codeGenerators/app/src/generatedCode/libs/templates/Consts.ejs +0 -448
- package/src/codeGenerators/app/src/generatedCode/libs/templates/GenerateCodeLibs.ejs +0 -124
- package/src/codeGenerators/resource/sls_yaml/DynamoDBGenerator.js +0 -87
- package/src/codeGenerators/resource/sls_yaml/FlowOutGenerator.js +0 -70
- package/src/codeGenerators/resource/sls_yaml/FlowResourceYamlGenerator.js +0 -182
- package/src/core/renderTemplateFile.js +0 -22
- package/src/core/validate.js +0 -165
- package/src/generateCode.js +0 -357
- package/src/generateSchema.js +0 -123
- package/src/parsers/flowSchemaParser.js +0 -112
- package/src/parsers/objectSchemaParser.js +0 -39
- package/src/parsers/relationshipSchemaParser.js +0 -51
- package/src/schemaGenerators/app/src/schemas/FlowSchemas/FlowSchemaGenerator.js +0 -107
- package/src/schemaGenerators/app/src/schemas/FlowSchemas/RbacFlowSchemaGenerator.js +0 -98
- package/src/schemaGenerators/app/src/schemas/FlowSchemas/RelationshipFlowSchemaGenerator.js +0 -89
- package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicFlowSchemaTemplate.ejs +0 -41
- package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/DynamicRbacFlowSchemaTemplate.ejs +0 -20
- package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/RelationshipFlowSchemaTemplate.ejs +0 -33
- package/src/schemaGenerators/app/src/schemas/FlowSchemas/templates/UserRbacFlowSchemaTemplate.ejs +0 -22
- package/src/schemaGenerators/app/src/schemas/ObjectSchemas/AttributeTreeSchemaGenerator.js +0 -124
- package/src/schemaGenerators/app/src/schemas/ObjectSchemas/PropertyValueSchemaGenerator.js +0 -119
- package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeManagerSchemaTemplate.ejs +0 -14
- package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicAttributeTreeStandardSchemaTemplate.ejs +0 -13
- package/src/schemaGenerators/app/src/schemas/ObjectSchemas/templates/DynamicPropertyValueSchemaTemplate.ejs +0 -15
- package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/AttributeTreeRelationshipSchemaGenerator.js +0 -109
- package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/PropertyValueRelationshipSchemaGenerator.js +0 -103
- package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/__tests__/relationshipSchemaHelpers.test.js +0 -38
- package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/relationshipSchemaHelpers.js +0 -40
- package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicAttributeTreeRelationshipSchemaTemplate.ejs +0 -7
- package/src/schemaGenerators/app/src/schemas/RelationshipSchemas/templates/DynamicPropertyValueRelationshipSchemaTemplate.ejs +0 -7
- package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/SystemTextGenerator.js +0 -102
- package/src/schemaGenerators/app/src/schemas/SystemTextSchemas/templates/SystemText_Template.ejs +0 -10
- /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrApi.ejs +0 -0
- /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/crud/templates}/FlowHandler_HdrInv.ejs +0 -0
- /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowObjects/templates/crud → emit/crud/templates}/GetEndpoint_Main.ejs +0 -0
- /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ConfirmReserved_HdrSqs.ejs +0 -0
- /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/CreatePreSignUrl_HdrSqs.ejs +0 -0
- /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowSchemas → emit/custom}/templates/s3/ReservedLimit_HdrSqs.ejs +0 -0
- /package/src/{codeGenerators/app/src/generatedCode/Flow/_shared/handlers → emit/relationship/templates}/FlowHandler_HdrSqs.ejs +0 -0
- /package/src/{codeGenerators/app/src/generatedCode/Flow/FlowRelationships/templates/relationship/ProcessMoveRelationshipComplete_Main.ejs → emit/relationship/templates/MoveRelationshipComplete_Main.ejs} +0 -0
- /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/DynamoDBTable_Yaml.ejs +0 -0
- /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/FlowOut_Yaml.ejs +0 -0
- /package/src/{codeGenerators/resource/sls_yaml/templates/crud → emit/resource/templates}/ResourceYaml.ejs +0 -0
- /package/src/{codeGenerators/resource/sls_yaml → emit/resource}/templates/SystemDynamoDB_Yaml.ejs +0 -0
package/src/generateCode.js
DELETED
|
@@ -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
|
-
}
|
package/src/generateSchema.js
DELETED
|
@@ -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
|
-
}
|