{"version":3,"sources":["../../../src/middleware/encode-json.ts"],"sourcesContent":["import { REGEXP_CONTENT_TYPE_JSON } from '../response'\nimport type { Middleware } from './index'\n\nexport const CONTENT_TYPE_JSON = 'application/json;charset=utf-8'\n\nconst isJson = (contentType: string) => REGEXP_CONTENT_TYPE_JSON.test(contentType)\nconst alreadyEncoded = (body: unknown) => typeof body === 'string'\n\n/**\n * Automatically encode your objects into JSON\n *\n * Example:\n * client.User.all({ body: { name: 'bob' } })\n * // => body: {\"name\":\"bob\"}\n * // => header: \"Content-Type=application/json;charset=utf-8\"\n */\nexport const EncodeJsonMiddleware: Middleware = () => ({\n  async prepareRequest(next) {\n    const request = await next()\n    try {\n      const body = request.body()\n      const contentType = request.header('content-type')\n\n      if (body) {\n        const shouldEncodeBody =\n          contentType == null ||\n          (typeof contentType === 'string' && isJson(contentType) && !alreadyEncoded(body))\n        const encodedBody = shouldEncodeBody ? JSON.stringify(body) : body\n\n        return request.enhance({\n          headers: { 'content-type': contentType == null ? CONTENT_TYPE_JSON : contentType },\n          body: encodedBody,\n        })\n      }\n    } catch (e) {} // eslint-disable-line no-empty\n    return request\n  },\n})\n\nexport default EncodeJsonMiddleware\n"],"mappings":";AAAA,SAAS,gCAAgC;AAGlC,IAAM,oBAAoB;AAEjC,IAAM,SAAS,CAAC,gBAAwB,yBAAyB,KAAK,WAAW;AACjF,IAAM,iBAAiB,CAAC,SAAkB,OAAO,SAAS;AAUnD,IAAM,uBAAmC,OAAO;AAAA,EACrD,MAAM,eAAe,MAAM;AACzB,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI;AACF,YAAM,OAAO,QAAQ,KAAK;AAC1B,YAAM,cAAc,QAAQ,OAAO,cAAc;AAEjD,UAAI,MAAM;AACR,cAAM,mBACJ,eAAe,QACd,OAAO,gBAAgB,YAAY,OAAO,WAAW,KAAK,CAAC,eAAe,IAAI;AACjF,cAAM,cAAc,mBAAmB,KAAK,UAAU,IAAI,IAAI;AAE9D,eAAO,QAAQ,QAAQ;AAAA,UACrB,SAAS,EAAE,gBAAgB,eAAe,OAAO,oBAAoB,YAAY;AAAA,UACjF,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF,SAAS,GAAG;AAAA,IAAC;AACb,WAAO;AAAA,EACT;AACF;AAEA,IAAO,sBAAQ;","names":[]}