{
  "version": 3,
  "sources": ["../../src/createMiddleware.ts", "../../src/ky/createKyHooks.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 type ky from \"ky\";\n\nimport createMiddleware from \"../createMiddleware\";\nimport type { Plugin } from \"../types\";\n\ntype KyHooks = NonNullable<Parameters<(typeof ky)[\"extend\"]>[0][\"hooks\"]>;\n\nconst createKyHooks = ({\n  client,\n  plugins,\n}: {\n  client: typeof ky;\n  plugins?: Plugin[];\n}): KyHooks => {\n  if (!plugins) {\n    return {};\n  }\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  return {\n    beforeRequest: [requestMiddleware],\n    afterResponse: [\n      async (req, _, res) => {\n        return responseMiddleware(res, req);\n      },\n    ],\n  };\n};\n\nexport default createKyHooks;\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;;;AClFxB,IAAM,gBAAgB,wBAAC;AAAA,EACrB;AAAA,EACA;AACF,MAGe;AACb,MAAI,CAAC,SAAS;AACZ,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,EAAE,mBAAmB,mBAAmB,IAAI,iBAGhD;AAAA,IACA,yBAAyB,CAAC,QAAQ;AAAA,IAClC,0BAA0B,CAAC,QAAQ;AAAA,IACnC,qBAAqB,CAAC,GAAG,QAAQ;AAAA,IACjC,sBAAsB,CAAC,GAAG,QAAQ;AAAA,IAClC,oBAAoB,CAAC,QAAQ,IAAI,MAAM;AAAA,IACvC;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AAED,SAAO;AAAA,IACL,eAAe,CAAC,iBAAiB;AAAA,IACjC,eAAe;AAAA,MACb,OAAO,KAAK,GAAG,QAAQ;AACrB,eAAO,mBAAmB,KAAK,GAAG;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AACF,GAhCsB;AAkCtB,IAAO,wBAAQ;",
  "names": []
}
