{"version":3,"sources":["../../../../src/lib/A-ServerController/A-ServerController.component.ts"],"names":[],"mappings":";;;;;;;AAQO,MAAM,2BAA2B,WAAA,CAAY;AAAA,EAQhD,MAAM,gBAAA,CACmB,OAAA,EAIC,QAAA,EACH,KAAA,EACrB;AAEE,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,OAAO,SAAS,CAAA;AACnC,MAAA,MAAM,IAAI,iBAAA,CAAkB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,WAAA,EAAa,CAAA,WAAA,EAAc,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,WAAA;AAAA,OACtD,CAAA;AAEL,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,aAAa,OAAO,OAAA,CAAQ,OAAO,SAAA,KAAc,QAAA;AACjE,MAAA,MAAM,IAAI,iBAAA,CAAkB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,WAAA,EAAa;AAAA,OAChB,CAAA;AAEL,IAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,SAAS,CAAA;AAEhE,IAAA,IACI,CAAC,iBAAA,IAED,CAAC,CAAC,WAAA,EAAa,WAAW,CAAA,CACrB,IAAA,CAAK,CAAA,CAAA,KAAK,iBAAA,YAA6B,CAAC,CAAA;AAE7C,MAAA,MAAM,IAAI,iBAAA,CAAkB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,WAAA,EAAa,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,0BAAA;AAAA,OAC5C,CAAA;AAEL,IAAA,MAAM,SAAA,GAAY,iBAAA;AAElB,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA;AAErC,IAAA,MAAM,gBAAgB,IAAA,CAAK,QAAA,EAAS,CAAE,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,CAAA,EAAG,SAAA,CAAU,YAAY,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAEtH,IAAA,IAAI,CAAC,aAAA;AACD,MAAA,MAAM,IAAI,iBAAA,CAAkB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,WAAA,EAAa,cAAc,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,0BAAA,EAA6B,OAAA,CAAQ,OAAO,SAAS,CAAA,CAAA;AAAA,OAC3G,CAAA;AAEL,IAAA,MAAM,SAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,WAAW,KAAK,CAAA;AAAA,EACxD;AACJ;AAhDU,eAAA,CAAA;AAAA,EALL,eAAe,IAAA,CAAK;AAAA,IACjB,IAAA,EAAM,wBAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,4BAAS,SAAS,CAAA,CAAA;AAAA,EAIlB,4BAAS,UAAU,CAAA,CAAA;AAAA,EACnB,4BAAS,OAAO,CAAA;AAAA,CAAA,EAdZ,kBAAA,CAQH,SAAA,EAAA,kBAAA,EAAA,CAAA,CAAA","file":"A-ServerController.component.mjs","sourcesContent":["import { A_Component, A_Container, A_Context, A_Feature, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_ServerRouter } from \"@adaas/a-server/router/A-ServerRouter.component\";\nimport { A_Response } from \"@adaas/a-server/response/A-Response.entity\";\nimport { A_Request } from \"@adaas/a-server/request/A-Request.entity\";\nimport { A_HttpServerError } from \"../A-Server/A-HttpServer.error\";\n\n\n\nexport class A_ServerController extends A_Component {\n\n\n    @A_ServerRouter.Post({\n        path: '/:component/:operation',\n        version: 'v1',\n        prefix: 'a-component'\n    })\n    async callEntityMethod(\n        @A_Inject(A_Request) request: A_Request<any, any, {\n            component: string,\n            operation: string\n        }>,\n        @A_Inject(A_Response) response: A_Response,\n        @A_Inject(A_Scope) scope: A_Scope\n    ) {\n\n        if (!scope.has(request.params.component))\n            throw new A_HttpServerError({\n                status: 404,\n                description: `Component \"${request.params.component}\" not found`,\n            });\n\n        if (!request.params.operation || typeof request.params.operation !== 'string')\n            throw new A_HttpServerError({\n                status: 400,\n                description: 'Missing or invalid \"operation\" parameter',\n            });\n\n        const possibleComponent = scope.resolve(request.params.component);\n\n        if (\n            !possibleComponent\n            ||\n            ![A_Component, A_Container]\n                .some(c => possibleComponent instanceof c)\n        )\n            throw new A_HttpServerError({\n                status: 404,\n                description: `\"${request.params.component}\" is not a valid component`,\n            });\n\n        const component = possibleComponent as A_Component | A_Container;\n\n        const meta = A_Context.meta(component);\n\n        const targetFeature = meta.features().find(f => f.name === `${component.constructor.name}.${request.params.operation}`);\n\n        if (!targetFeature)\n            throw new A_HttpServerError({\n                status: 404,\n                description: `Operation \"${request.params.operation}\" not found on component \"${request.params.component}\"`,\n            });\n\n        await component.call(request.params.operation, scope);\n    }\n}"]}