{"version":3,"sources":["../../../../src/lib/A-ServerProxy/A-ServerProxy.context.ts"],"names":[],"mappings":";;;;;AAOO,MAAM,sBAAsB,UAAA,CAAW;AAAA,EAI1C,WAAA,CAII,OAAA,GAAkD,EAAC,EACrD;AACE,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAE5D,MAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,OAAO,WAAW,QAAA,GAAW,MAAA,GAAS,MAAA,CAAO,QAAA,IAAY,EAAE,CAAA;AAErF,MAAA,MAAM,OACF,SAAA,CAAU,IAAA,KACT,SAAA,CAAU,QAAA,KAAa,WAAW,KAAA,GAAQ,IAAA,CAAA;AAG/C,MAAA,MAAM,QAAA,GAAW;AAAA,QACb,GAAG,qBAAA;AAAA,QACH,GAAI,OAAO,MAAA,KAAW,QAAA,GAAW;AAAA,UAC7B,IAAA;AAAA,UACA,IAAA,EAAM,SAAS,IAAI,CAAA;AAAA,UACnB,UAAU,SAAA,CAAU,QAAA;AAAA,UACpB,UAAU,SAAA,CAAU;AAAA,SACxB,GAAI;AAAA,OACR;AAEA,MAAA,OAAO;AAAA,QACH,OAAO,IAAI,aAAA,CAAc,QAAA,CAAS,IAAA,EAAM,SAAS,MAAM,CAAA;AAAA,QACvD,UAAU,QAAA,CAAS,QAAA;AAAA,QACnB,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,SAAS,QAAA,CAAS,OAAA;AAAA,QAClB,UAAU,QAAA,CAAS;AAAA,OACvB;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,OAAA,GAA+C;AAC/C,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,IAAA,EAAuB;AACvB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,MAAM,QAAA,EAAS,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IAAA,EAAwD;AAG3D,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,MAAM,QAAA,EAAS,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EACxE;AACJ","file":"A-ServerProxy.context.mjs","sourcesContent":["import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ProxyConfigConstructor, A_SERVER_TYPES__ProxyConfigConstructorConfig, A_SERVER_TYPES__RoutesConfig } from \"./A-ServerProxy.types\";\nimport { PROXY_CONFIG_DEFAULTS } from \"./A-ServerProxy.constants\";\nimport { A_ServerRoute } from \"@adaas/a-server/route/A-ServerRoute.entity\";\n\n\n\nexport class A_ProxyConfig extends A_Fragment {\n\n    protected readonly _configs: Array<A_SERVER_TYPES__RoutesConfig>\n\n    constructor(\n        /**\n         * Setup proxy configs, where key is the path to match, and value is either a full URL or a partial config object\n         */\n        configs: A_SERVER_TYPES__ProxyConfigConstructor = {}\n    ) {\n        super();\n\n        this._configs = Object.entries(configs).map(([path, config]) => {\n\n            const targetUrl = new URL(typeof config === 'string' ? config : config.hostname || ''); // parse hostname, may include scheme\n\n            const port =\n                targetUrl.port ||\n                (targetUrl.protocol === \"https:\" ? '443' : '80');\n\n\n            const prepared = {\n                ...PROXY_CONFIG_DEFAULTS,\n                ...(typeof config === 'string' ? {\n                    path,\n                    port: parseInt(port),\n                    protocol: targetUrl.protocol,\n                    hostname: targetUrl.hostname\n                } : config)\n            }\n\n            return {\n                route: new A_ServerRoute(prepared.path, prepared.method),\n                hostname: prepared.hostname,\n                port: prepared.port,\n                headers: prepared.headers,\n                protocol: prepared.protocol\n            }\n        });\n    }\n\n    /**\n     * Returns all configured proxy configs\n     * \n     */\n    get configs(): Array<A_SERVER_TYPES__RoutesConfig> {\n        return this._configs;\n    }\n\n\n    /**\n     * Checks if a given path is configured in the proxy\n     * \n     * @param path \n     * @returns \n     */\n    has(path: string): boolean {\n        return this._configs.some(route => route.route.toRegExp().test(path));\n    }\n\n    /**\n     * Returns the proxy configuration for a given path, if exists\n     *\n     * @param path \n     * @returns \n     */\n    config(path: string): A_SERVER_TYPES__RoutesConfig | undefined {\n        \n\n        return this._configs.find(route => route.route.toRegExp().test(path));\n    }\n}"]}