{
  "version": 3,
  "sources": ["../src/createMiddleware.ts", "../src/fetch/createFetch.ts"],
  "sourcesContent": ["import type { AdapterRequest, AdapterResponse, Plugin } from \"./types\";\n\ntype ConvertToAdapterRequest<T> = (request: T) => AdapterRequest;\ntype ExtendClientRequest<T> = (\n  clientRequest: T,\n  adapterRequest: AdapterRequest,\n) => T | Promise<T>;\n\ntype ConvertToAdapterResponse<T> = (response: T) => AdapterResponse;\ntype ExtendClientResponse<T> = (\n  clientResponse: T,\n  adapterResponse: AdapterResponse,\n) => T | Promise<T>;\n\ntype Retryer<T, U> = (clientRequest: T) => Promise<U>;\n\n// client request -> adapter request -> pipe plugins -> client request\nexport function createRequestMiddleware<T>({\n  plugins,\n  convertToAdapterRequest,\n  extendClientRequest,\n}: {\n  plugins: Plugin[];\n  convertToAdapterRequest: ConvertToAdapterRequest<T>;\n  extendClientRequest: ExtendClientRequest<T>;\n}) {\n  return async (clientRequest: T) => {\n    let adapterRequest = convertToAdapterRequest(clientRequest);\n\n    for (const plugin of plugins) {\n      if (plugin.hooks?.beforeRequest) {\n        adapterRequest = await plugin.hooks.beforeRequest(adapterRequest);\n      }\n    }\n\n    return extendClientRequest(clientRequest, adapterRequest);\n  };\n}\n\n// client response -> adapter response -> pipe plugins -> client response\nexport function createResponseMiddleware<T, U>({\n  plugins,\n  convertToAdapterRequest,\n  extendClientRequest,\n  convertToAdapterResponse,\n  extendClientResponse,\n  cloneClientRequest,\n  retry,\n}: {\n  plugins: Plugin[];\n  convertToAdapterRequest: ConvertToAdapterRequest<T>;\n  extendClientRequest: ExtendClientRequest<T>;\n  convertToAdapterResponse: ConvertToAdapterResponse<U>;\n  extendClientResponse: ExtendClientResponse<U>;\n  cloneClientRequest?: (req: T) => T;\n  retry: Retryer<T, U>;\n}) {\n  return async (clientResponse: U, clientRequest: T) => {\n    let adapterResponse: AdapterResponse =\n      convertToAdapterResponse(clientResponse);\n\n    for (const plugin of plugins) {\n      if (plugin.hooks?.afterResponse) {\n        adapterResponse = await plugin.hooks.afterResponse(\n          adapterResponse,\n          convertToAdapterRequest(clientRequest),\n          async (adapterRequest) => {\n            const extendedClientRequest = await extendClientRequest(\n              clientRequest,\n              adapterRequest,\n            );\n            const clonedClientRequest = cloneClientRequest\n              ? cloneClientRequest(extendedClientRequest)\n              : extendedClientRequest;\n\n            clientResponse = await retry(extendedClientRequest);\n\n            clientRequest = clonedClientRequest;\n\n            return convertToAdapterResponse(clientResponse);\n          },\n        );\n      }\n    }\n\n    return extendClientResponse(clientResponse, adapterResponse);\n  };\n}\n\nexport default function createMiddleware<Req, Res>({\n  convertToAdapterRequest,\n  extendClientRequest,\n  convertToAdapterResponse,\n  extendClientResponse,\n  cloneClientRequest,\n  plugins,\n  retry,\n}: {\n  plugins: Plugin[];\n  convertToAdapterRequest: ConvertToAdapterRequest<Req>;\n  extendClientRequest: ExtendClientRequest<Req>;\n  convertToAdapterResponse: ConvertToAdapterResponse<Res>;\n  extendClientResponse: ExtendClientResponse<Res>;\n  cloneClientRequest?: (req: Req) => Req;\n  retry: Retryer<Req, Res>;\n}) {\n  return {\n    requestMiddleware: createRequestMiddleware({\n      plugins,\n      convertToAdapterRequest,\n      extendClientRequest,\n    }),\n    responseMiddleware: createResponseMiddleware({\n      plugins,\n      convertToAdapterRequest,\n      extendClientRequest,\n      convertToAdapterResponse,\n      extendClientResponse,\n      cloneClientRequest,\n      retry,\n    }),\n  };\n}\n", "import createMiddleware from \"../createMiddleware\";\nimport type { Plugin } from \"../types\";\n\nconst createFetch = ({\n  client: baseClient,\n  plugins = [],\n}: {\n  client?: typeof fetch;\n  plugins?: Plugin[];\n}): typeof fetch => {\n  return async (...args) => {\n    const client = baseClient ?? fetch;\n\n    const [input, init] = args;\n\n    const initialRequest = new Request(input, init);\n\n    const { requestMiddleware, responseMiddleware } = createMiddleware<\n      Request,\n      Response\n    >({\n      convertToAdapterRequest: (req) => req,\n      convertToAdapterResponse: (res) => res,\n      extendClientRequest: (_, req) => req as Request,\n      extendClientResponse: (_, res) => res as Response,\n      cloneClientRequest: (req) => req.clone(),\n      plugins,\n      retry: client,\n    });\n\n    const request = await requestMiddleware(initialRequest);\n    const clonedClientRequest = request.clone();\n\n    const initialResponse = await client(request);\n\n    return responseMiddleware(initialResponse, clonedClientRequest);\n  };\n};\n\nexport default createFetch;\n"],
  "mappings": ";;;;AAiBO,SAAS,wBAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO,OAAO,kBAAqB;AACjC,QAAI,iBAAiB,wBAAwB,aAAa;AAE1D,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,OAAO,eAAe;AAC/B,yBAAiB,MAAM,OAAO,MAAM,cAAc,cAAc;AAAA,MAClE;AAAA,IACF;AAEA,WAAO,oBAAoB,eAAe,cAAc;AAAA,EAC1D;AACF;AApBgB;AAuBT,SAAS,yBAA+B;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQG;AACD,SAAO,OAAO,gBAAmB,kBAAqB;AACpD,QAAI,kBACF,yBAAyB,cAAc;AAEzC,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,OAAO,eAAe;AAC/B,0BAAkB,MAAM,OAAO,MAAM;AAAA,UACnC;AAAA,UACA,wBAAwB,aAAa;AAAA,UACrC,OAAO,mBAAmB;AACxB,kBAAM,wBAAwB,MAAM;AAAA,cAClC;AAAA,cACA;AAAA,YACF;AACA,kBAAM,sBAAsB,qBACxB,mBAAmB,qBAAqB,IACxC;AAEJ,6BAAiB,MAAM,MAAM,qBAAqB;AAElD,4BAAgB;AAEhB,mBAAO,yBAAyB,cAAc;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,qBAAqB,gBAAgB,eAAe;AAAA,EAC7D;AACF;AA/CgB;AAiDD,SAAR,iBAA4C;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQG;AACD,SAAO;AAAA,IACL,mBAAmB,wBAAwB;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,oBAAoB,yBAAyB;AAAA,MAC3C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAjCwB;;;ACtFxB,IAAM,cAAc,wBAAC;AAAA,EACnB,QAAQ;AAAA,EACR,UAAU,CAAC;AACb,MAGoB;AAClB,SAAO,UAAU,SAAS;AACxB,UAAM,SAAS,cAAc;AAE7B,UAAM,CAAC,OAAO,IAAI,IAAI;AAEtB,UAAM,iBAAiB,IAAI,QAAQ,OAAO,IAAI;AAE9C,UAAM,EAAE,mBAAmB,mBAAmB,IAAI,iBAGhD;AAAA,MACA,yBAAyB,CAAC,QAAQ;AAAA,MAClC,0BAA0B,CAAC,QAAQ;AAAA,MACnC,qBAAqB,CAAC,GAAG,QAAQ;AAAA,MACjC,sBAAsB,CAAC,GAAG,QAAQ;AAAA,MAClC,oBAAoB,CAAC,QAAQ,IAAI,MAAM;AAAA,MACvC;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,UAAM,UAAU,MAAM,kBAAkB,cAAc;AACtD,UAAM,sBAAsB,QAAQ,MAAM;AAE1C,UAAM,kBAAkB,MAAM,OAAO,OAAO;AAE5C,WAAO,mBAAmB,iBAAiB,mBAAmB;AAAA,EAChE;AACF,GAlCoB;AAoCpB,IAAO,sBAAQ;",
  "names": []
}
