mappersmith
Version:
It is a lightweight rest client for node.js and the browser
1 lines • 5.68 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/gateway/gateway.ts"],"sourcesContent":["import { performanceNow, toQueryString, isPlainObject } from '../utils/index'\nimport { configs as defaultConfigs } from '../mappersmith'\nimport { Request } from '../request'\nimport { Response } from '../response'\nimport { isTimeoutError } from './timeout-error'\nimport type { GatewayConfiguration } from './types'\nimport type { Primitive } from '../types'\n\nconst REGEXP_EMULATE_HTTP = /^(delete|put|patch)/i\n\nexport class Gateway {\n public request: Request\n public configs: GatewayConfiguration\n public successCallback: (res: Response) => void\n public failCallback: (res: Response) => void\n\n constructor(request: Request, configs: GatewayConfiguration) {\n this.request = request\n this.configs = configs\n this.successCallback = function () {\n return undefined\n }\n this.failCallback = function () {\n return undefined\n }\n }\n\n public get() {\n throw new Error('Not implemented')\n }\n\n public head() {\n throw new Error('Not implemented')\n }\n\n public post() {\n throw new Error('Not implemented')\n }\n\n public put() {\n throw new Error('Not implemented')\n }\n\n public patch() {\n throw new Error('Not implemented')\n }\n\n public delete() {\n throw new Error('Not implemented')\n }\n\n options() {\n return this.configs\n }\n\n shouldEmulateHTTP() {\n return this.options().emulateHTTP && REGEXP_EMULATE_HTTP.test(this.request.method())\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n call(): Promise<any> {\n const timeStart = performanceNow()\n if (!defaultConfigs.Promise) {\n throw new Error('[Mappersmith] Promise not configured (configs.Promise)')\n }\n return new defaultConfigs.Promise((resolve, reject) => {\n this.successCallback = (response) => {\n response.timeElapsed = performanceNow() - timeStart\n resolve(response)\n }\n\n this.failCallback = (response) => {\n response.timeElapsed = performanceNow() - timeStart\n reject(response)\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this[this.request.method()].apply(this, arguments) // eslint-disable-line prefer-spread,prefer-rest-params\n } catch (e: unknown) {\n const err: Error = e as Error\n this.dispatchClientError(err.message, err)\n }\n })\n }\n\n dispatchResponse(response: Response) {\n response.success() ? this.successCallback(response) : this.failCallback(response)\n }\n\n dispatchClientError(message: string, error: Error) {\n if (isTimeoutError(error) && this.options().enableHTTP408OnTimeouts) {\n this.failCallback(new Response(this.request, 408, message, {}, [error]))\n } else {\n this.failCallback(new Response(this.request, 400, message, {}, [error]))\n }\n }\n\n prepareBody(method: string, headers: Record<string, Primitive>) {\n let body = this.request.body()\n\n if (this.shouldEmulateHTTP()) {\n body = body || {}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isPlainObject(body) && ((body as any)['_method'] = method)\n headers['x-http-method-override'] = method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bodyString = toQueryString(body as any)\n\n if (bodyString) {\n // If it's not simple, let the browser (or the user) set it\n if (isPlainObject(body)) {\n headers['content-type'] = 'application/x-www-form-urlencoded;charset=utf-8'\n }\n }\n\n return bodyString\n }\n}\n\nexport default Gateway\n"],"mappings":";AAAA,SAAS,gBAAgB,eAAe,qBAAqB;AAC7D,SAAS,WAAW,sBAAsB;AAE1C,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAI/B,IAAM,sBAAsB;AAErB,IAAM,UAAN,MAAc;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEP,YAAY,SAAkB,SAA+B;AAC3D,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,kBAAkB,WAAY;AACjC,aAAO;AAAA,IACT;AACA,SAAK,eAAe,WAAY;AAC9B,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEO,MAAM;AACX,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA,EAEO,OAAO;AACZ,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA,EAEO,OAAO;AACZ,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA,EAEO,MAAM;AACX,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA,EAEO,QAAQ;AACb,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA,EAEO,SAAS;AACd,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA,EAEA,UAAU;AACR,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,oBAAoB;AAClB,WAAO,KAAK,QAAQ,EAAE,eAAe,oBAAoB,KAAK,KAAK,QAAQ,OAAO,CAAC;AAAA,EACrF;AAAA;AAAA,EAGA,OAAqB;AACnB,UAAM,YAAY,eAAe;AACjC,QAAI,CAAC,eAAe,SAAS;AAC3B,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AACA,WAAO,IAAI,eAAe,QAAQ,CAAC,SAAS,WAAW;AACrD,WAAK,kBAAkB,CAAC,aAAa;AACnC,iBAAS,cAAc,eAAe,IAAI;AAC1C,gBAAQ,QAAQ;AAAA,MAClB;AAEA,WAAK,eAAe,CAAC,aAAa;AAChC,iBAAS,cAAc,eAAe,IAAI;AAC1C,eAAO,QAAQ;AAAA,MACjB;AAEA,UAAI;AAGF,aAAK,KAAK,QAAQ,OAAO,CAAC,EAAE,MAAM,MAAM,SAAS;AAAA,MACnD,SAAS,GAAY;AACnB,cAAM,MAAa;AACnB,aAAK,oBAAoB,IAAI,SAAS,GAAG;AAAA,MAC3C;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,iBAAiB,UAAoB;AACnC,aAAS,QAAQ,IAAI,KAAK,gBAAgB,QAAQ,IAAI,KAAK,aAAa,QAAQ;AAAA,EAClF;AAAA,EAEA,oBAAoB,SAAiB,OAAc;AACjD,QAAI,eAAe,KAAK,KAAK,KAAK,QAAQ,EAAE,yBAAyB;AACnE,WAAK,aAAa,IAAI,SAAS,KAAK,SAAS,KAAK,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAAA,IACzE,OAAO;AACL,WAAK,aAAa,IAAI,SAAS,KAAK,SAAS,KAAK,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,YAAY,QAAgB,SAAoC;AAC9D,QAAI,OAAO,KAAK,QAAQ,KAAK;AAE7B,QAAI,KAAK,kBAAkB,GAAG;AAC5B,aAAO,QAAQ,CAAC;AAEhB,oBAAc,IAAI,MAAO,KAAa,SAAS,IAAI;AACnD,cAAQ,wBAAwB,IAAI;AAAA,IACtC;AAGA,UAAM,aAAa,cAAc,IAAW;AAE5C,QAAI,YAAY;AAEd,UAAI,cAAc,IAAI,GAAG;AACvB,gBAAQ,cAAc,IAAI;AAAA,MAC5B;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAEA,IAAO,kBAAQ;","names":[]}