tanstack-fetch 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugins/auth.ts","../src/plugins/status.ts","../src/constants.ts","../src/plugins/retry-idempotent.ts","../src/plugins/sse-resume.ts","../src/plugins/ssr-forward.ts","../src/plugins/trace.ts","../src/plugins/index.ts","../src/fetch-error.ts","../src/utils/result.ts","../src/plugins/config-interceptors.ts","../src/interceptors/run-interceptors.ts","../src/utils/parse-body.ts","../src/request-execute.ts","../src/utils/build-url.ts","../src/utils/headers.ts","../src/utils/signals.ts","../src/request.ts","../src/sse-parse.ts","../src/sse-context.ts","../src/sse-iterator.ts","../src/sse.ts","../src/sse-listen.ts","../src/create-fetch.ts"],"names":["resolveIncoming"],"mappings":";AAEA,IAAM,qBAAA,GAAwB,CAAC,IAAA,MAAuC;AAAA,EACpE,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,SAAA,EAAW,OAAO,OAAA,KAAY;AAC5B,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,EAAS;AAClC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,IACvC;AACA,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,eAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,KAAW,MAAA,GAAY,WAAW,IAAA,CAAK,MAAA;AAC3D,IAAA,MAAM,QAAQ,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,GAAK,KAAA;AAC9C,IAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA;AACzC,IAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,EACvC;AACF,CAAA;;;ACdA,IAAM,oBAAA,GAAuB,CAC3B,MAAA,EACA,QAAA,KAC8B;AAC9B,EAAA,MAAM,KAAA,GAAQ,SAAS,MAAM,CAAA;AAC7B,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAU,GAAA,IAAO,MAAA,GAAS,GAAA,IAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACpD,IAAA,OAAO,SAAS,KAAK,CAAA;AAAA,EACvB;AACA,EAAA,IAAI,UAAU,GAAA,IAAO,MAAA,GAAS,GAAA,IAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACpD,IAAA,OAAO,SAAS,KAAK,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,QAAA,CAAS,OAAA;AAClB,CAAA;AAEA,IAAM,uBAAA,GAA0B,CAAC,QAAA,MAA+C;AAAA,EAC9E,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,eAAA,EAAiB,OAAO,OAAA,KAAY;AAClC,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,EAAO,MAAA,IAAU,QAAQ,QAAA,EAAU,MAAA;AAC1D,IAAA,IAAI,MAAA,KAAW,MAAA,IAAa,CAAC,OAAA,CAAQ,KAAA,EAAO;AAC1C,MAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,IACvC;AACA,IAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,MAAA,EAAQ,QAAQ,CAAA;AACrD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,IACvC;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,EAAE,QAAQ,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,OAAA,EAAS,CAAA;AACxE,IAAA,IAAI,QAAA,EAAU,WAAW,OAAA,EAAS;AAChC,MAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,SAAS,OAAA,EAAQ;AAAA,IACtD;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,EACvC;AACF,CAAA;;;ACrCA,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,mBAAA,GAAsB,CAAA;AAC5B,IAAM,yBAAA,GAA4B,GAAA;AAClC,IAAM,qCAAqB,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,SAAS,CAAC,CAAA;AAC7D,IAAM,iCAAiB,IAAI,GAAA,CAAI,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;;;ACD9C,IAAM,mCAAmC,OAAwB;AAAA,EAC/D,IAAA,EAAM,kBAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,eAAA,EAAiB,CAAC,OAAA,KAAY;AAC5B,IAAA,MAAM,QAAA,GACJ,mBAAmB,GAAA,CAAI,OAAA,CAAQ,QAAQ,MAAM,CAAA,IAC7C,QAAQ,IAAA,CAAK,OAAA,GAAU,QAAQ,IAAA,CAAK,UAAA,IACpC,QAAQ,OAAA,CAAQ,KAAA,IAAS,eAAe,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AACnE,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,IACvC;AACA,IAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,OAAA,EAAS,OAAO,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,CAAA,EAAG;AAAA,EACtE;AACF,CAAA;;;ACdA,IAAM,6BAA6B,OAAwB;AAAA,EACzD,IAAA,EAAM,YAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,UAAA,EAAY,CAAC,OAAA,KAAY;AACvB,IAAA,IAAI,QAAQ,KAAA,CAAM,KAAA,KAAU,UAAU,OAAA,CAAQ,KAAA,CAAM,UAAU,WAAA,EAAa;AACzE,MAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAAA,IAC1B;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,EACvC,CAAA;AAAA,EACA,cAAA,EAAgB,CAAC,OAAA,KAAY;AAC3B,IAAA,IAAI,OAAA,CAAQ,KAAK,WAAA,EAAa;AAC5B,MAAA,OAAA,CAAQ,QAAQ,OAAA,CAAQ,GAAA,CAAI,eAAA,EAAiB,OAAA,CAAQ,KAAK,WAAW,CAAA;AAAA,IACvE;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,EACvC;AACF,CAAA;;;ACfA,IAAM,8BAA8B,OAAwB;AAAA,EAC1D,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,SAAA,EAAW,CAAC,OAAA,KAAY;AACtB,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,MAAA,KAAW,SAAA,EAAW;AACrC,MAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAAA,IAC1B;AACA,IAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAQ;AAC5B,MAAA,OAAA,CAAQ,QAAQ,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,OAAA,CAAQ,SAAS,MAAM,CAAA;AAAA,IAC/D;AACA,IAAA,IAAI,OAAA,CAAQ,UAAU,aAAA,EAAe;AACnC,MAAA,OAAA,CAAQ,QAAQ,OAAA,CAAQ,GAAA,CAAI,eAAA,EAAiB,OAAA,CAAQ,SAAS,aAAa,CAAA;AAAA,IAC7E;AACA,IAAA,IAAI,OAAA,CAAQ,UAAU,SAAA,EAAW;AAC/B,MAAA,OAAA,CAAQ,QAAQ,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,OAAA,CAAQ,SAAS,SAAS,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,EACvC;AACF,CAAA;;;AClBA,IAAM,yBAAyB,OAAwB;AAAA,EACrD,IAAA,EAAM,OAAA;AAAA,EACN,KAAA,EAAO,CAAA;AAAA,EACP,SAAA,EAAW,CAAC,OAAA,KAAY;AACtB,IAAA,MAAM,YAAY,OAAA,CAAQ,QAAA,EAAU,SAAA,IAAa,UAAA,CAAW,OAAO,UAAA,EAAW;AAC9E,IAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,SAAS,CAAA;AACrD,IAAA,OAAA,CAAQ,KAAK,SAAA,GAAY,SAAA;AACzB,IAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAQ;AAAA,EACvC;AACF,CAAA;;;ACFA,IAAM,eAAA,GAA6D;AAAA,EACjE,KAAA,EAAO,sBAAA;AAAA,EACP,aAAA,EAAe,2BAAA;AAAA,EACf,kBAAA,EAAoB,gCAAA;AAAA,EACpB,YAAA,EAAc;AAChB,CAAA;;;ACHA,IAAM,gBAAA,GAAmB,CAAC,MAAA,KAA2D;AACnF,EAAA,MAAM,IAAA,GAAuB,OAAO,EAAA,GAChC;AAAA,IACE,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,gBAAA;AAAA,IACT,MAAM,MAAA,CAAO;AAAA,MAEf,MAAA,CAAO,KAAA;AAEX,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA;AACpC,EAAA,MAAA,CAAO,iBAAiB,KAAA,EAAO;AAAA,IAC7B,IAAA,EAAM,EAAE,KAAA,EAAO,YAAA,EAAa;AAAA,IAC5B,MAAA,EAAQ,EAAE,KAAA,EAAO,IAAA,CAAK,MAAA,EAAO;AAAA,IAC7B,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,CAAK,IAAA,EAAK;AAAA,IACzB,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,CAAK,IAAA,EAAK;AAAA,IACzB,OAAA,EAAS,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,EAAQ;AAAA,IACjC,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,MAAA,CAAO,EAAA,GACV,EAAE,IAAI,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,MAAA,CAAO,SAAQ,GACvE;AAAA;AACN,GACD,CAAA;AACD,EAAA,OAAO,KAAA;AACT;AAEA,IAAM,YAAA,GAAe,CAAC,KAAA,KACpB,OAAA;AAAA,EACE,KAAA,IACA,OAAO,KAAA,KAAU,QAAA,IAChB,MAAgB,IAAA,KAAS,YAAA,IAC1B,QAAA,IAAY,KAAA,IACZ,MAAA,IAAU;AACZ;AAEF,IAAM,YAAA,GAAe,CAAC,KAAA,KACnB,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,YAAA,IAChD,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS;;;AC7C5C,IAAM,gBAAA,GAAmB,CAAC,MAAA,EAAgB,IAAA,KAAkC;AAC1E,EAAA,MAAM,MAAA,GAAS,IAAA,IAAQ,OAAO,IAAA,KAAS,WAAY,IAAA,GAAmC,MAAA;AACtF,EAAA,MAAM,OAAO,OAAO,MAAA,EAAQ,IAAA,KAAS,QAAA,GAAW,OAAO,IAAA,GAAO,YAAA;AAC9D,EAAA,MAAM,OAAA,GACJ,OAAO,MAAA,EAAQ,OAAA,KAAY,WAAW,MAAA,CAAO,OAAA,GAAU,8BAA8B,MAAM,CAAA,CAAA;AAE7F,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AACvC,CAAA;AAEA,IAAM,UAAA,GAAa,CAAI,MAAA,EAAgB,IAAA,EAAS,OAAA,MAA6C;AAAA,EAC3F,EAAA,EAAI,IAAA;AAAA,EACJ,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,CAAA;AAEA,IAAM,WAAA,GAAc,CAAI,MAAA,EAAgB,KAAA,EAAU,OAAA,MAA6C;AAAA,EAC7F,EAAA,EAAI,KAAA;AAAA,EACJ,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,CAAA;AAEA,IAAM,MAAA,GAAS,CAAI,MAAA,KAA8C;AAC/D,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AACA,EAAA,MAAM,iBAAiB,MAAM,CAAA;AAC/B;AAEA,IAAM,WAAA,GAAc,OAAU,OAAA,KAC5B,MAAA,CAAO,MAAM,OAAO;;;ACxBtB,IAAM,mBAAA,GAAsB,CAAC,OAAA,KAA4D;AACvF,EAAA,MAAM,WAA2B,EAAE,GAAI,OAAA,CAAQ,QAAA,IAAY,EAAC,EAAG;AAE/D,EAAA,IAAI,OAAA,CAAQ,cAAA,IAAkB,QAAA,CAAS,GAAG,MAAM,MAAA,EAAW;AACzD,IAAA,QAAA,CAAS,GAAG,IAAI,OAAA,CAAQ,cAAA;AAAA,EAC1B;AACA,EAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,QAAA,CAAS,GAAG,MAAM,MAAA,EAAW;AACtD,IAAA,QAAA,CAAS,GAAG,IAAI,OAAA,CAAQ,WAAA;AAAA,EAC1B;AACA,EAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,QAAA,CAAS,GAAG,MAAM,MAAA,EAAW;AACrD,IAAA,QAAA,CAAS,GAAG,IAAI,OAAA,CAAQ,UAAA;AAAA,EAC1B;AACA,EAAA,IAAI,OAAA,CAAQ,iBAAiB,QAAA,CAAS,KAAK,MAAM,MAAA,IAAa,QAAA,CAAS,GAAG,CAAA,KAAM,MAAA,EAAW;AACzF,IAAA,QAAA,CAAS,KAAK,IAAI,OAAA,CAAQ,aAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,OAAO,CAAA,KAAM,OAAA,CAAQ,OAAO,CAAC,CAAA;AAClF,EAAA,OAAO,aAAa,QAAA,GAAW,MAAA;AACjC,CAAA;AAEA,IAAM,iBAAA,GAAoB,CAAC,OAAA,KAAwD;AACjF,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,OAAO,OAAA,CAAQ,IAAA;AAAA,EACjB;AACA,EAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,IAAA,OAAO,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,EACtC;AACA,EAAA,OAAO,MAAA;AACT,CAAA;AAEA,IAAM,wBAAA,GAA2B,CAAC,OAAA,KAAmD;AACnF,EAAA,MAAM,eAAkC,EAAC;AACzC,EAAA,MAAM,IAAA,GAAO,kBAAkB,OAAO,CAAA;AACtC,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,YAAA,CAAa,IAAA,CAAK,qBAAA,CAAsB,IAAI,CAAC,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,cAAA,GAAiB,oBAAoB,OAAO,CAAA;AAClD,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,YAAA,CAAa,IAAA,CAAK,uBAAA,CAAwB,cAAc,CAAC,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,YAAA;AACT,CAAA;;;AC1CA,IAAM,kBAAA,GAAqB,CAAC,WAAA,EAA8B,OAAA,KAA4B;AACpF,EAAA,MAAM,QAAQ,WAAA,CAAY,KAAA;AAC1B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,SAAA,IAAa,KAAA,CAAM,SAAA,KAAc,OAAA,CAAQ,KAAK,SAAA,EAAW;AACjE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,MAAA,IAAU,KAAA,CAAM,MAAA,KAAW,OAAA,CAAQ,QAAQ,MAAA,EAAQ;AAC3D,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,UAAA,IAAc,CAAC,OAAA,CAAQ,OAAA,CAAQ,IAAI,QAAA,CAAS,UAAA,CAAW,KAAA,CAAM,UAAU,CAAA,EAAG;AAClF,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,MAAA,KAAW,MAAA,IAAa,QAAQ,QAAA,EAAU,MAAA,KAAW,MAAM,MAAA,EAAQ;AAC3E,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,IAAM,mBAAA,GAAsB,CAC1B,kBAAA,EACA,MAAA,KACG;AACH,EAAA,MAAM,UAAU,IAAI,GAAA,CAAI,MAAA,EAAQ,KAAA,IAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,kBAAA,EAAoB,GAAI,MAAA,EAAQ,GAAA,IAAO,EAAG,CAAA,CAAE,MAAA;AAAA,IAC7D,CAAC,IAAA,KAAS,CAAC,OAAA,CAAQ,GAAA,CAAI,KAAK,IAAI;AAAA,GAClC;AACA,EAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IACZ,CAAC,IAAA,EAAM,KAAA,KAAA,CACJ,KAAK,KAAA,IAAS,yBAAA,KAA8B,MAAM,KAAA,IAAS,yBAAA;AAAA,GAChE;AACF,CAAA;AAEA,IAAM,OAAA,GAAU,OACd,YAAA,EACA,UAAA,EACA,OAAA,KAC4B;AAC5B,EAAA,IAAI,OAAA,GAAU,OAAA;AACd,EAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACtC,IAAA,IAAI,CAAC,kBAAA,CAAmB,WAAA,EAAa,OAAO,CAAA,EAAG;AAC7C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,WAAW,WAAW,CAAA;AACtC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAY,MAAM,OAAA,CAAQ,OAAO,KAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAS,OAAA,EAAQ;AACpF,IAAA,IAAI,QAAA,CAAS,WAAW,MAAA,EAAQ;AAC9B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA,CAAS,WAAW,MAAA,EAAQ;AAC9B,MAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,IACxB;AACA,IAAA,IAAI,QAAA,CAAS,WAAW,OAAA,EAAS;AAC/B,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,SAAS,OAAA,EAAQ;AAAA,IACpD;AACA,IAAA,IAAI,QAAA,CAAS,WAAW,eAAA,EAAiB;AACvC,MAAA,OAAO,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,SAAS,MAAA,EAAO;AAAA,IAC1D;AACA,IAAA,OAAA,GAAW,SAAS,OAAA,IAAW,OAAA;AAAA,EACjC;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,OAAA,EAAQ;AAC9C,CAAA;;;ACzEA,IAAM,iBAAA,GAAoB,CAAC,WAAA,KACzB,OAAA,CAAQ,eAAe,WAAA,CAAY,QAAA,CAAS,MAAM,CAAC,CAAA;AAErD,IAAM,SAAA,GAAY,OAAO,QAAA,EAAoB,OAAA,KAAuC;AAClF,EAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AACvD,EAAA,IAAI,OAAA,KAAY,MAAA,IAAU,iBAAA,CAAkB,WAAW,CAAA,EAAG;AACxD,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,SAAS,IAAA,EAAK;AACvB,CAAA;AAEA,IAAM,UAAA,GAAa,CAAC,IAAA,EAAe,OAAA,KAAqB;AACtD,EAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA,EAAM;AACvC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IACE,OAAO,IAAA,KAAS,QAAA,IAChB,IAAA,YAAgB,QAAA,IAChB,gBAAgB,IAAA,IAChB,IAAA,YAAgB,eAAA,IAChB,IAAA,YAAgB,WAAA,EAChB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAG;AAChC,IAAA,OAAA,CAAQ,GAAA,CAAI,gBAAgB,kBAAkB,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAC5B,CAAA;;;AC3BA,IAAM,YAAA,GAAe,OAAa,KAAA,KAAsD;AACtF,EAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAc,SAAA,EAAW,MAAA,EAAQ,gBAAe,GAAI,KAAA;AACrE,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,OAAA,CAAQ,QAAQ,GAAA,EAAK;AAAA,MACpD,MAAA,EAAQ,QAAQ,OAAA,CAAQ,MAAA;AAAA,MACxB,OAAA,EAAS,QAAQ,OAAA,CAAQ,OAAA;AAAA,MACzB,MAAM,UAAA,CAAW,OAAA,CAAQ,QAAQ,IAAA,EAAM,OAAA,CAAQ,QAAQ,OAAO,CAAA;AAAA,MAC9D,MAAA,EAAQ,QAAQ,OAAA,CAAQ,MAAA;AAAA,MACxB,aAAa,MAAA,CAAO;AAAA,KACrB,CAAA;AACD,IAAA,OAAO,eAAqB,EAAE,YAAA,EAAc,OAAA,EAAS,QAAA,EAAU,gBAAgB,CAAA;AAAA,EACjF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;AACvB,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAA,CAAQ,KAAA,GAAQ,iBAAiB,CAAA,EAAG;AAAA,MAClC,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KACnD,CAAA;AACD,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,IAAA,CAAK,gBAAgB,OAAO,CAAA;AACjF,IAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3B,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IAClD;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,eAAA,EAAiB;AACnC,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,OAAO,MAAA,EAA4B;AAAA,IACtE;AACA,IAAA,MAAM,gBAAA;AAAA,MACJ,YAAY,CAAA,EAAG,OAAA,CAAQ,KAAA,EAAO,IAAI,SAAS;AAAA,KAC7C;AAAA,EACF;AACF,CAAA;AAEA,IAAM,cAAA,GAAiB,OAAa,KAAA,KAKC;AACnC,EAAA,MAAM,EAAE,YAAA,EAAc,QAAA,EAAU,cAAA,EAAe,GAAI,KAAA;AACnD,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,GAAG,KAAA,CAAM,OAAA;AAAA,IACT,QAAA;AAAA,IACA,IAAA,EAAM,MAAM,SAAA,CAAU,QAAA,EAAU,gBAAgB,OAAO;AAAA,GACzD;AACA,EAAA,MAAM,IAAA,GAAO,SAAS,EAAA,GAClB,CAAC,SAA0B,IAAA,CAAK,UAAA,GAChC,CAAC,IAAA,KAA0B,IAAA,CAAK,eAAA;AACpC,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,OAAA,CAAQ,KAAA,GAAQ,gBAAA,CAAiB,QAAA,CAAS,MAAA,EAAQ,QAAQ,IAAI,CAAA;AAAA,EAChE;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,YAAA,EAAc,MAAM,OAAO,CAAA;AACvD,EAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,EACjD;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,eAAA,EAAiB;AAClC,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,MAAM,MAAA,EAA4B;AAAA,EACrE;AACA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,KAAS,UAAA,GAAa,MAAM,OAAA,GAAU,OAAA;AAChE,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,EAAA,GACpB,UAAA,CAAW,QAAA,CAAS,QAAQ,WAAA,CAAY,IAAA,EAAW,QAAA,CAAS,OAAO,CAAA,GACnE,WAAA;AAAA,IACE,QAAA,CAAS,MAAA;AAAA,IACR,YAAY,KAAA,IAAS,gBAAA,CAAiB,QAAA,CAAS,MAAA,EAAQ,YAAY,IAAI,CAAA;AAAA,IACxE,QAAA,CAAS;AAAA,GACX;AACJ,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAO;AAClC,CAAA;;;AClFA,IAAM,QAAA,GAAW,CAAC,IAAA,EAAc,MAAA,KAAwB;AACtD,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,mBAAA,EAAqB,CAAC,QAAQ,GAAA,KAAgB;AAChE,IAAA,MAAM,KAAA,GAAQ,SAAS,GAAG,CAAA;AAC1B,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACzC,CAAC,CAAA;AACH,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,GAAA,EAAU,KAAA,KAAwB;AACrD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC9C,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACzC,CAAC,CAAA;AACH,CAAA;AAEA,IAAM,iBAAA,GAAoB,CAAC,OAAA,EAA6B,MAAA,KAA+B;AACrF,EAAA,IAAI,MAAA,KAAW,SAAA,IAAa,CAAC,OAAA,EAAS;AACpC,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,eAAA,CAAgB,IAAA,CAAK,OAAO,CAAA,EAAG;AAClC,IAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,EACrF;AACF,CAAA;AAEA,IAAM,QAAA,GAAW,CACf,OAAA,EACA,IAAA,EACA,QACA,KAAA,KACG;AACH,EAAA,MAAM,aAAa,QAAA,CAAS,IAAA,CAAK,QAAQ,sBAAA,EAAwB,KAAK,GAAG,MAAM,CAAA;AAC/E,EAAA,MAAM,eAAe,eAAA,CAAgB,IAAA,CAAK,UAAU,CAAA,GAChD,UAAA,GACA,IAAI,OAAA,IAAW,EAAA,EAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA,EAAI,WAAW,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA;AAC1E,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,YAAY,CAAA;AAChC,EAAA,WAAA,CAAY,KAAK,KAAK,CAAA;AACtB,EAAA,OAAO,GAAA;AACT,CAAA;;;AC9CA,IAAM,SAAA,GAAY,CAAC,IAAA,KAAuB,IAAI,QAAQ,IAAI,CAAA;AAE1D,IAAM,YAAA,GAAe,IAAI,KAAA,KAA0C;AACjE,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC5B,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,OAAO,GAAA,KAAQ;AACxC,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IACxB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,OAAO,OAAA;AACT,CAAA;AAEA,IAAM,cAAA,GAAiB,OAAO,KAAA,KAA4D;AACxF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,IAAI,OAAA,EAAQ;AAAA,EACrB;AACA,EAAA,MAAM,WAAW,OAAO,KAAA,KAAU,UAAA,GAAa,MAAM,OAAM,GAAI,KAAA;AAC/D,EAAA,OAAO,UAAU,QAAQ,CAAA;AAC3B,CAAA;;;ACvBA,IAAM,IAAA,GAAO,CAAC,OAAA,KAAoB,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY,UAAA,CAAW,OAAA,EAAS,OAAO,CAAC,CAAA;AAE7F,IAAM,cAAA,GAAiB,CAAC,OAAA,KAA4C;AAClE,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAkC,OAAA,CAAQ,MAAM,CAAC,CAAA;AAChF,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,OAAO,CAAC,CAAA;AAAA,EACjB;AACA,EAAA,IAAI,OAAO,WAAA,CAAY,GAAA,KAAQ,UAAA,EAAY;AACzC,IAAA,OAAO,WAAA,CAAY,IAAI,MAAM,CAAA;AAAA,EAC/B;AACA,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,MAAA,KAAW;AACzB,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,UAAA,CAAW,KAAA,CAAM,OAAO,MAAM,CAAA;AAC9B,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,MAAM,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,EACxF,CAAC,CAAA;AACD,EAAA,OAAO,UAAA,CAAW,MAAA;AACpB,CAAA;AAEA,IAAM,mBAAA,GAAsB,CAAC,SAAA,KAAkC;AAC7D,EAAA,IAAI,CAAC,SAAA,IAAa,SAAA,IAAa,CAAA,EAAG;AAChC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,IACZ,MAAM,UAAA,CAAW,KAAA,CAAM,IAAI,KAAA,CAAM,mCAAmC,CAAC,CAAA;AAAA,IACrE;AAAA,GACF;AACA,EAAA,UAAA,CAAW,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AACrF,EAAA,OAAO,UAAA,CAAW,MAAA;AACpB,CAAA;;;AClBA,IAAM,eAAA,GAAkB,OACtB,MAAA,KACyC;AACzC,EAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,MAAA,CAAO,QAAA,KAAa,aAAa,MAAA,CAAO,QAAA,KAAa,MAAA,CAAO,QAAA;AAC5E,CAAA;AAEA,IAAM,aAAA,GAAgB,OAAO,IAAA,EAAuB,OAAA,KAA6C;AAC/F,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,cAAA,EAAgB,QAAO,GAAI,IAAA;AACjD,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,SAAA;AAChC,EAAA,iBAAA,CAAkB,MAAA,CAAO,SAAS,MAAM,CAAA;AACxC,EAAA,MAAM,GAAA,GAAM,SAAS,MAAA,CAAO,OAAA,EAAS,MAAM,cAAA,EAAgB,MAAA,EAAQ,gBAAgB,KAAK,CAAA;AACxF,EAAA,MAAM,OAAA,GAAU,aAAa,MAAM,cAAA,CAAe,OAAO,OAAO,CAAA,EAAG,gBAAgB,OAAO,CAAA;AAC1F,EAAA,MAAM,SAAA,GAAY,cAAA,EAAgB,SAAA,IAAa,MAAA,CAAO,SAAA,IAAa,kBAAA;AACnE,EAAA,MAAM,MAAA,GAAS,eAAe,CAAC,cAAA,EAAgB,QAAQ,mBAAA,CAAoB,SAAS,CAAC,CAAC,CAAA;AAEtF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,EAAE,MAAA,EAAQ,GAAA,EAAK,SAAS,IAAA,EAAM,cAAA,EAAgB,MAAM,MAAA,EAAO;AAAA,IACpE,QAAA,EAAU,MAAM,eAAA,CAAgB,MAAM,CAAA;AAAA,IACtC,IAAA,EAAM;AAAA,MACJ,OAAA;AAAA,MACA,UAAA,EAAY,OAAO,UAAA,IAAc,mBAAA;AAAA,MACjC,MAAA;AAAA,MACA,WAAW,cAAA,EAAgB;AAAA;AAC7B,GACF;AACF,CAAA;AAEA,IAAM,WAAA,GAAc,OAClB,IAAA,KAC+B;AAC/B,EAAA,MAAM,eAAe,mBAAA,CAAoB,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,gBAAgB,YAAY,CAAA;AAC7F,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAClD,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,mBAAA;AAC7C,EAAA,OAAO,WAAW,UAAA,EAAY;AAC5B,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAiB,EAAE,MAAM,YAAA,EAAc,SAAA,EAAW,SAAS,CAAA;AACjF,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC7B,MAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,IACjB;AACA,IAAA,OAAA,IAAW,CAAA;AACX,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACzD,CAAA;AAEA,IAAM,UAAA,GAAa,OAAa,KAAA,KAK1B;AACJ,EAAA,IAAI,UAAU,MAAM,aAAA,CAAc,KAAA,CAAM,IAAA,EAAM,MAAM,OAAO,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,CAAM,cAAc,CAAC,IAAA,KAAS,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA;AAClF,EAAA,IAAI,MAAA,CAAO,SAAS,eAAA,EAAiB;AACnC,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAmB,MAAA,EAAQ,OAAO,MAAA,EAA4B;AAAA,EAC/E;AACA,EAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3B,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAkB,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,EAC3D;AACA,EAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAC9B,IAAA,OAAA,GAAU,MAAA,CAAO,OAAA;AAAA,EACnB;AACA,EAAA,OAAO,YAAA,CAAmB;AAAA,IACxB,cAAA,EAAgB,MAAM,IAAA,CAAK,cAAA;AAAA,IAC3B,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA;AAAA,IACnB,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB;AAAA,GACD,CAAA;AACH,CAAA;;;AC9FA,IAAM,aAAA,GAAgB,CAAC,KAAA,KAAiD;AACtE,EAAA,MAAM,YAAsB,EAAC;AAC7B,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI,KAAA;AAEJ,EAAA,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AAClC,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AAC5B,MAAA,SAAA,CAAU,IAAA,CAAK,KAAK,KAAA,CAAM,CAAC,EAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA;AAC9C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,MAAA,SAAA,GAAY,KAAK,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AAC1C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EAAG;AAC1B,MAAA,EAAA,GAAK,KAAK,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACnC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,MAAA,MAAM,MAAA,GAAS,OAAO,QAAA,CAAS,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,IAAA,EAAK,EAAG,EAAE,CAAA;AACvD,MAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG;AACzB,QAAA,KAAA,GAAQ,MAAA;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,CAAC,SAAA,EAAW;AACxC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAC/B,EAAA,IAAI,IAAA,GAAgB,GAAA;AACpB,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,GAAO,GAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,IAAI,KAAA,EAAM;AAC7C,CAAA;AAEA,IAAM,gBAAA,GAAmB,CAAC,MAAA,KAAmB;AAC3C,EAAA,MAAM,UAAA,GAAa,OAAO,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA,CAAE,OAAA,CAAQ,OAAO,IAAI,CAAA;AACpE,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA;AACtC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,EAAI,IAAK,EAAA;AAC7B,EAAA,MAAM,SAAS,MAAA,CACZ,GAAA,CAAI,CAAC,KAAA,KAAU,cAAc,KAAA,CAAM,IAAA,EAAM,CAAC,EAC1C,MAAA,CAAO,CAAC,KAAA,KAAsC,OAAA,CAAQ,KAAK,CAAC,CAAA;AAC/D,EAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AACxB,CAAA;;;ACtCA,IAAMA,gBAAAA,GAAkB,OACtB,MAAA,KACyC;AACzC,EAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,MAAA,CAAO,QAAA,KAAa,aAAa,MAAA,CAAO,QAAA,KAAa,MAAA,CAAO,QAAA;AAC5E,CAAA;AAEA,IAAM,gBAAA,GAAmB,OACvB,IAAA,EACA,OAAA,EACA,WAAA,KAC4B;AAC5B,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,MAAA,IAAU,SAAA;AACrC,EAAA,iBAAA,CAAkB,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,MAAM,CAAA;AAC7C,EAAA,MAAM,GAAA,GAAM,QAAA;AAAA,IACV,KAAK,MAAA,CAAO,OAAA;AAAA,IACZ,IAAA,CAAK,IAAA;AAAA,IACL,KAAK,cAAA,EAAgB,MAAA;AAAA,IACrB,KAAK,cAAA,EAAgB;AAAA,GACvB;AACA,EAAA,MAAM,OAAA,GAAU,YAAA;AAAA,IACd,MAAM,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,IACxC,KAAK,cAAA,EAAgB;AAAA,GACvB;AACA,EAAA,OAAA,CAAQ,GAAA,CAAI,UAAU,mBAAmB,CAAA;AACzC,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAA,CAAQ,GAAA,CAAI,iBAAiB,WAAW,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,KAAA;AAAA,MACR,GAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAM,KAAK,cAAA,EAAgB,IAAA;AAAA,MAC3B,MAAA,EAAQ,KAAK,cAAA,EAAgB;AAAA,KAC/B;AAAA,IACA,QAAA,EAAU,MAAMA,gBAAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC3C,IAAA,EAAM;AAAA,MACJ,OAAA;AAAA,MACA,UAAA,EAAY,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,mBAAA;AAAA,MACtC,MAAA;AAAA,MACA,SAAA,EAAW,KAAK,cAAA,EAAgB,SAAA;AAAA,MAChC;AAAA;AACF,GACF;AACF,CAAA;;;AC3DA,IAAM,iBAAA,GAAoB,CAAI,IAAA,KAAkD;AAC9E,EAAA,MAAM,eAAe,mBAAA,CAAoB,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,gBAAgB,YAAY,CAAA;AAC7F,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAClD,EAAA,MAAM,QAAuB,EAAC;AAC9B,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,WAAA,GAAc,IAAA,CAAK,cAAA,EAAgB,OAAA,GAClC,IAAI,OAAA,CAAQ,IAAA,CAAK,cAAA,CAAe,OAAO,CAAA,CAAE,GAAA,CAAI,eAAe,KAAK,MAAA,GAClE,MAAA;AACJ,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAI,MAAA,GAAS,KAAA;AAEb,EAAA,MAAM,OAAO,YAAkD;AAC7D,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAM,EAAkB,MAAM,KAAA,EAAM;AAAA,IAC5D;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAW,IAAA,EAAM,IAAA,EAAK;AAAA,IACxC;AACA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,OAAA,GAAU,MAAM,UAAA,EAAW;AACjC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAA,GAAS,IAAA;AACT,QAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAW,IAAA,EAAM,IAAA,EAAK;AAAA,MACxC;AAAA,IACF;AACA,IAAA,OAAO,QAAA,EAAS;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,aAAa,YAA8B;AAC/C,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,OAAA,GAAU,MAAM,gBAAA,CAAiB,IAAA,EAAM,SAAS,WAAW,CAAA;AAC/D,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,IAAA,CAAK,WAAW,OAAO,CAAA;AAC5E,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,eAAA,IAAmB,MAAA,CAAO,SAAS,OAAA,EAAS;AAC9D,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAC9B,MAAA,OAAA,GAAU,MAAA,CAAO,OAAA;AAAA,IACnB;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,OAAA,CAAQ,QAAQ,GAAA,EAAK;AAAA,MACpD,MAAA,EAAQ,KAAA;AAAA,MACR,OAAA,EAAS,QAAQ,OAAA,CAAQ,OAAA;AAAA,MACzB,MAAA,EAAQ,QAAQ,OAAA,CAAQ,MAAA;AAAA,MACxB,WAAA,EAAa,KAAK,MAAA,CAAO;AAAA,KAC1B,CAAA;AACD,IAAA,OAAA,CAAQ,QAAA,GAAW,QAAA;AACnB,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,IAAM,CAAC,SAAS,IAAA,EAAM;AAClC,MAAA,OAAA,CAAQ,QAAQ,gBAAA,CAAiB,QAAA,CAAS,QAAQ,MAAM,QAAA,CAAS,MAAM,CAAA;AACvE,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,IAAA,CAAK,YAAY,OAAO,CAAA;AAC7E,MAAA,IAAI,OAAO,IAAA,KAAS,OAAA,IAAW,OAAA,GAAU,OAAA,CAAQ,KAAK,UAAA,EAAY;AAChE,QAAA,OAAA,IAAW,CAAA;AACX,QAAA,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,IAAW,GAAG,CAAA;AAChC,QAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,IAAA,CAAK,gBAAgB,OAAO,CAAA;AACpF,QAAA,IAAI,SAAA,CAAU,SAAS,UAAA,EAAY;AACjC,UAAA,WAAA,GAAc,SAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,WAAA,IAAe,WAAA;AAAA,QACtD;AACA,QAAA,OAAO,UAAA,EAAW;AAAA,MACpB;AACA,MAAA,MAAM,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,EAAG,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,CAAA;AAAA,IAChF;AACA,IAAA,MAAM,QAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,IAAA,CAAK,WAAW,OAAO,CAAA;AAC7D,IAAA,MAAA,GAAS,SAAS,IAAA,CAAK,WAAA,CAAY,IAAI,iBAAA,EAAmB,EAAE,SAAA,EAAU;AACtE,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,WAAW,YAAkD;AACjE,IAAA,MAAM,aAAA,GAAgB,MAAA;AACtB,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAW,IAAA,EAAM,IAAA,EAAK;AAAA,IACxC;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,aAAA,CAAc,IAAA,EAAK;AACvC,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,MAAA,GAAS,MAAA;AACT,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,OAAO,IAAA,EAAK;AAAA,IACd;AACA,IAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,MAAA,GAAS,KAAA,CAAM,KAAK,CAAA;AACpD,IAAA,MAAA,GAAS,MAAA,CAAO,IAAA;AAChB,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,WAAA,GAAc,MAAM,EAAA,IAAM,WAAA;AAC1B,MAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,IAAA,EAAM,SAAS,WAAW,CAAA;AACjE,MAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,IAAA,CAAK,UAAA,EAAY,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,CAAA;AAC1F,MAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,UAAA,IAAc,KAAA,CAAM,QAAQ,KAAA,EAAO;AACpD,QAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,KAAoB,CAAA;AAAA,MAC/C;AAAA,IACF;AACA,IAAA,OAAO,IAAA,EAAK;AAAA,EACd,CAAA;AAEA,EAAA,OAAO,EAAE,MAAM,IAAA,EAAK;AACtB,CAAA;;;ACnGA,IAAM,OAAA,GAAU,CAAI,IAAA,MAAmD;AAAA,EACrE,CAAC,MAAA,CAAO,aAAa,GAAG,MAAM,kBAAqB,IAAI;AACzD,CAAA,CAAA;;;ACKA,IAAM,eAAe,CAAC,WAAA,EAAa,WAAW,QAAA,EAAU,SAAA,EAAW,WAAW,aAAa,CAAA;AAE3F,IAAM,eAAA,GAAkB,CAAI,OAAA,KAAgC;AAC1D,EAAA,MAAM,WAA2B,EAAC;AAClC,EAAA,MAAM,cAAA,GAAiC,EAAE,GAAI,OAAA,IAAW,EAAC,EAAG;AAC5D,EAAA,MAAM,cAAc,OAAA,EAAS,WAAA;AAE7B,EAAA,KAAA,MAAW,OAAO,YAAA,EAAc;AAC9B,IAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,MAAA,OAAQ,cAAA,CAA2C,WAAA;AACnD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,IAAW,OAAO,OAAA,EAAS;AAC5B,MAAC,QAAA,CAAqC,GAAG,CAAA,GAAI,OAAA,CAAQ,GAAG,CAAA;AACzD,MAAA,OAAQ,eAA2C,GAAG,CAAA;AAAA,IACxD;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,cAAA,CAAe,OAAO,CAAA;AAClD,IAAA,OAAA,CAAQ,GAAA,CAAI,iBAAiB,WAAW,CAAA;AACxC,IAAA,cAAA,CAAe,OAAA,GAAU,OAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,EAAE,QAAA,EAAU,cAAA,EAAgB,WAAA,EAAY;AACjD,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAI,OAAA,KACzB,OAAA;AAAA,EACE,OAAA,KACG,QAAQ,SAAA,IAAa,OAAA,CAAQ,WAAW,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA;AAC1F,CAAA;AAEF,IAAM,SAAA,GAAY,CAAI,IAAA,EAAmB,QAAA,KAA8C;AACrF,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,MAAA,GAAS,eAAe,CAAC,IAAA,CAAK,gBAAgB,MAAA,EAAQ,UAAA,CAAW,MAAM,CAAC,CAAA;AAE9E,EAAA,MAAM,MAAM,YAAY;AACtB,IAAA,IAAI;AACF,MAAA,QAAA,CAAS,MAAA,IAAS;AAClB,MAAA,WAAA,MAAiB,SAAS,OAAA,CAAW;AAAA,QACnC,GAAG,IAAA;AAAA,QACH,cAAA,EAAgB,EAAE,GAAG,IAAA,CAAK,gBAAgB,MAAA;AAAO,OAClD,CAAA,EAAG;AACF,QAAA,QAAA,CAAS,UAAU,KAAK,CAAA;AACxB,QAAA,QAAA,CAAS,SAAA,GAAY,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAAA,MACxC;AACA,MAAA,QAAA,CAAS,OAAA,IAAU;AAAA,IACrB,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,YAAA,CAAa,KAAK,CAAA,IAAK,UAAA,CAAW,OAAO,OAAA,EAAS;AACpD,QAAA,QAAA,CAAS,OAAA,IAAU;AACnB,QAAA;AAAA,MACF;AACA,MAAA,QAAA,CAAS,UAAU,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA;AAEA,EAAA,KAAK,GAAA,EAAI;AAET,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAM,UAAA,CAAW,KAAA;AAAM,GAChC;AACF,CAAA;AAEA,IAAM,YAAA,GAAe,CAAC,IAAA,KAAuD;AAC3E,EAAA,MAAM,GAAA,IAAO,CAAI,IAAA,EAAc,OAAA,KAAgC;AAC7D,IAAA,MAAM,EAAE,QAAA,EAAU,cAAA,EAAe,GAAI,gBAAgB,OAAO,CAAA;AAC5D,IAAA,MAAM,IAAA,GAAoB;AAAA,MACxB,IAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,cAAc,IAAA,CAAK;AAAA,KACrB;AAEA,IAAA,IAAI,cAAA,CAAe,OAAO,CAAA,EAAG;AAC3B,MAAA,OAAO,SAAA,CAAa,MAAM,QAAQ,CAAA;AAAA,IACpC;AAEA,IAAA,OAAO,QAAW,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA;AASA,EAAA,OAAO,GAAA;AACT,CAAA;;;ACrFA,IAAM,WAAA,GAAc,CAAC,OAAA,GAA8B,EAAC,KAAmB;AACrE,EAAA,MAAM,aAAA,GAAoC;AAAA,IACxC,YAAA,EAAc,IAAA;AAAA,IACd,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,YAAA,GAAkC;AAAA,IACtC,GAAG,yBAAyB,aAAa,CAAA;AAAA,IACzC,GAAA,CAAI,aAAA,CAAc,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,KAAS,eAAA,CAAgB,IAAI,CAAA,EAAG,CAAA;AAAA,IACtE,GAAI,aAAA,CAAc,YAAA,IAAgB;AAAC,GACrC;AAEA,EAAA,MAAM,GAAA,GAA0B,CAAC,IAAA,EAAM,WAAA,EAAa,MAAA,KAAW;AAC7D,IAAA,MAAM,IAAA,GAAwB;AAAA,MAC5B,GAAG,WAAA;AAAA,MACH,IAAA;AAAA,MACA,KAAA,EAAO,MAAA,EAAQ,KAAA,IAAS,WAAA,CAAY;AAAA,KACtC;AACA,IAAA,MAAM,WAAW,YAAA,CAAa,SAAA,CAAU,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,IAAI,CAAA;AACpE,IAAA,IAAI,YAAY,CAAA,EAAG;AACjB,MAAA,YAAA,CAAa,MAAA,CAAO,QAAA,EAAU,CAAA,EAAG,IAAI,CAAA;AACrC,MAAA;AAAA,IACF;AACA,IAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,KAAA,GAA8B,CAAC,IAAA,KAAS;AAC5C,IAAA,MAAM,QAAQ,YAAA,CAAa,SAAA,CAAU,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,IAAI,CAAA;AACjE,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,YAAA,CAAa,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,IAAW,OACf,MAAA,EACA,IAAA,EACA,cAAA,KACmC;AACnC,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAkB;AAAA,MACrC,MAAA;AAAA,MACA,IAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAA,EAAQ,aAAA;AAAA,MACR;AAAA,KACD,CAAA;AACD,IAAA,MAAM,WAAA,GAAc,cAAA,EAAgB,YAAA,IAAgB,aAAA,CAAc,YAAA,IAAgB,IAAA;AAClF,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,IAAM,WAAA,EAAa;AAC7B,MAAA,MAAM,iBAAiB,MAA4C,CAAA;AAAA,IACrE;AACA,IAAA,IAAI,WAAA,IAAe,OAAO,EAAA,EAAI;AAC5B,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,UAAA,KAA+C;AACjE,IAAA,MAAM,QAAQ,CAAC,IAAA,EAAc,mBAC3B,OAAA,CAAQ,UAAA,EAAY,MAAM,cAAuB,CAAA;AACnD,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,MAAM,YAAA,CAAa,EAAE,MAAA,EAAQ,aAAA,EAAe,cAAc,CAAA;AAEhE,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAA,EAAK,WAAW,KAAK,CAAA;AAAA,IACrB,IAAA,EAAM,WAAW,MAAM,CAAA;AAAA,IACvB,GAAA,EAAK,WAAW,KAAK,CAAA;AAAA,IACrB,KAAA,EAAO,WAAW,OAAO,CAAA;AAAA,IACzB,MAAA,EAAQ,WAAW,QAAQ,CAAA;AAAA,IAC3B;AAAA,GACF;AACF;AAGA,IAAM,YAAA,GAAe","file":"chunk-T27KPHCL.js","sourcesContent":["import type { AuthConfig, HttpInterceptor } from '../types'\n\nconst createAuthInterceptor = (auth: AuthConfig): HttpInterceptor => ({\n name: 'auth',\n order: 15,\n onRequest: async (context) => {\n const token = await auth.getToken()\n if (!token) {\n return { action: 'continue', context }\n }\n const header = auth.header ?? 'authorization'\n const scheme = auth.scheme === undefined ? 'Bearer' : auth.scheme\n const value = scheme ? `${scheme} ${token}` : token\n context.request.headers.set(header, value)\n return { action: 'continue', context }\n },\n})\n\nexport { createAuthInterceptor }\n","import type { HttpInterceptor, StatusHandler, StatusHandlers } from '../types'\n\nconst resolveStatusHandler = (\n status: number,\n handlers: StatusHandlers,\n): StatusHandler | undefined => {\n const exact = handlers[status]\n if (exact) {\n return exact\n }\n if (status >= 500 && status < 600 && handlers['5xx']) {\n return handlers['5xx']\n }\n if (status >= 400 && status < 500 && handlers['4xx']) {\n return handlers['4xx']\n }\n return handlers.default\n}\n\nconst createStatusInterceptor = (handlers: StatusHandlers): HttpInterceptor => ({\n name: 'on-status',\n order: 95,\n onResponseError: async (context) => {\n const status = context.error?.status ?? context.response?.status\n if (status === undefined || !context.error) {\n return { action: 'continue', context }\n }\n const handler = resolveStatusHandler(status, handlers)\n if (!handler) {\n return { action: 'continue', context }\n }\n const decision = await handler({ status, error: context.error, context })\n if (decision?.action === 'retry') {\n return { action: 'retry', delayMs: decision.delayMs }\n }\n return { action: 'continue', context }\n },\n})\n\nexport { createStatusInterceptor, resolveStatusHandler }\n","const DEFAULT_TIMEOUT_MS = 30_000\nconst DEFAULT_MAX_RETRIES = 2\nconst DEFAULT_INTERCEPTOR_ORDER = 100\nconst IDEMPOTENT_METHODS = new Set(['GET', 'HEAD', 'OPTIONS'])\nconst RETRY_STATUSES = new Set([502, 503, 504])\n\nexport {\n DEFAULT_TIMEOUT_MS,\n DEFAULT_MAX_RETRIES,\n DEFAULT_INTERCEPTOR_ORDER,\n IDEMPOTENT_METHODS,\n RETRY_STATUSES,\n}\n","import { IDEMPOTENT_METHODS, RETRY_STATUSES } from '../constants'\nimport type { HttpInterceptor } from '../types'\n\nconst createRetryIdempotentInterceptor = (): HttpInterceptor => ({\n name: 'retry-idempotent',\n order: 80,\n onResponseError: (context) => {\n const canRetry =\n IDEMPOTENT_METHODS.has(context.request.method) &&\n context.meta.attempt < context.meta.maxRetries &&\n Boolean(context.error && RETRY_STATUSES.has(context.error.status))\n if (!canRetry) {\n return { action: 'continue', context }\n }\n return { action: 'retry', delayMs: 200 * (context.meta.attempt + 1) }\n },\n})\n\nexport { createRetryIdempotentInterceptor }\n","import type { HttpInterceptor } from '../types'\n\nconst createSseResumeInterceptor = (): HttpInterceptor => ({\n name: 'sse-resume',\n order: 20,\n onSseEvent: (context) => {\n if (context.event.event === 'ping' || context.event.event === 'heartbeat') {\n return { action: 'drop' }\n }\n return { action: 'continue', context }\n },\n onSseReconnect: (context) => {\n if (context.meta.lastEventId) {\n context.request.headers.set('last-event-id', context.meta.lastEventId)\n }\n return { action: 'continue', context }\n },\n})\n\nexport { createSseResumeInterceptor }\n","import type { HttpInterceptor } from '../types'\n\nconst createSsrForwardInterceptor = (): HttpInterceptor => ({\n name: 'ssr-forward',\n order: 10,\n onRequest: (context) => {\n if (context.meta.source === 'browser') {\n return { action: 'skip' }\n }\n if (context.incoming?.cookie) {\n context.request.headers.set('cookie', context.incoming.cookie)\n }\n if (context.incoming?.authorization) {\n context.request.headers.set('authorization', context.incoming.authorization)\n }\n if (context.incoming?.requestId) {\n context.request.headers.set('x-request-id', context.incoming.requestId)\n }\n return { action: 'continue', context }\n },\n})\n\nexport { createSsrForwardInterceptor }\n","import type { HttpInterceptor } from '../types'\n\nconst createTraceInterceptor = (): HttpInterceptor => ({\n name: 'trace',\n order: 0,\n onRequest: (context) => {\n const requestId = context.incoming?.requestId ?? globalThis.crypto.randomUUID()\n context.request.headers.set('x-request-id', requestId)\n context.meta.requestId = requestId\n return { action: 'continue', context }\n },\n})\n\nexport { createTraceInterceptor }\n","import type { AuthConfig, HttpInterceptor, StatusHandlers } from '../types'\nimport { createAuthInterceptor } from './auth'\nimport { createRetryIdempotentInterceptor } from './retry-idempotent'\nimport { createSseResumeInterceptor } from './sse-resume'\nimport { createSsrForwardInterceptor } from './ssr-forward'\nimport { createStatusInterceptor } from './status'\nimport { createTraceInterceptor } from './trace'\nimport type { PluginName } from '../types'\n\nconst pluginFactories: Record<PluginName, () => HttpInterceptor> = {\n trace: createTraceInterceptor,\n 'ssr-forward': createSsrForwardInterceptor,\n 'retry-idempotent': createRetryIdempotentInterceptor,\n 'sse-resume': createSseResumeInterceptor,\n}\n\nexport {\n pluginFactories,\n createAuthInterceptor,\n createStatusInterceptor,\n createRetryIdempotentInterceptor,\n createSseResumeInterceptor,\n createSsrForwardInterceptor,\n createTraceInterceptor,\n}\nexport type { AuthConfig, StatusHandlers }\n","import type { FetchErrorInfo, FetchResult } from './types'\n\ntype FetchError = Error & {\n readonly name: 'FetchError'\n readonly status: number\n readonly code: string\n readonly body: unknown\n readonly headers: Headers\n readonly result: FetchResult<never, FetchErrorInfo>\n}\n\nconst createFetchError = (result: FetchResult<never, FetchErrorInfo>): FetchError => {\n const info: FetchErrorInfo = result.ok\n ? {\n status: result.status,\n code: 'UNKNOWN',\n message: 'Request failed',\n body: result.data,\n }\n : result.error\n\n const error = new Error(info.message) as FetchError\n Object.defineProperties(error, {\n name: { value: 'FetchError' },\n status: { value: info.status },\n code: { value: info.code },\n body: { value: info.body },\n headers: { value: result.headers },\n result: {\n value: result.ok\n ? { ok: false, status: info.status, error: info, headers: result.headers }\n : result,\n },\n })\n return error\n}\n\nconst isFetchError = (error: unknown): error is FetchError =>\n Boolean(\n error &&\n typeof error === 'object' &&\n (error as Error).name === 'FetchError' &&\n 'status' in error &&\n 'code' in error,\n )\n\nconst isAbortError = (error: unknown): boolean =>\n (error instanceof DOMException && error.name === 'AbortError') ||\n (error instanceof Error && error.name === 'AbortError')\n\nexport { createFetchError, isFetchError, isAbortError }\nexport type { FetchError }\n","import { createFetchError } from '../fetch-error'\nimport type { FetchErrorInfo, FetchResult } from '../types'\n\nconst toFetchErrorInfo = (status: number, body: unknown): FetchErrorInfo => {\n const record = body && typeof body === 'object' ? (body as Record<string, unknown>) : undefined\n const code = typeof record?.code === 'string' ? record.code : 'HTTP_ERROR'\n const message =\n typeof record?.message === 'string' ? record.message : `Request failed with status ${status}`\n\n return { status, code, message, body }\n}\n\nconst toOkResult = <T>(status: number, data: T, headers: Headers): FetchResult<T, never> => ({\n ok: true,\n status,\n data,\n headers,\n})\n\nconst toErrResult = <E>(status: number, error: E, headers: Headers): FetchResult<never, E> => ({\n ok: false,\n status,\n error,\n headers,\n})\n\nconst unwrap = <T>(result: FetchResult<T, FetchErrorInfo>): T => {\n if (result.ok) {\n return result.data\n }\n throw createFetchError(result)\n}\n\nconst unwrapAsync = async <T>(promise: Promise<FetchResult<T, FetchErrorInfo>>): Promise<T> =>\n unwrap(await promise)\n\n/** @deprecated Use toFetchErrorInfo */\nconst toHttpError = toFetchErrorInfo\n\nexport { toFetchErrorInfo, toHttpError, toOkResult, toErrResult, unwrap, unwrapAsync }\n","import type {\n AuthConfig,\n CreateFetchOptions,\n HttpInterceptor,\n StatusHandler,\n StatusHandlers,\n} from '../types'\nimport { createAuthInterceptor } from './auth'\nimport { createStatusInterceptor } from './status'\n\nconst mergeStatusHandlers = (options: CreateFetchOptions): StatusHandlers | undefined => {\n const handlers: StatusHandlers = { ...(options.onStatus ?? {}) }\n\n if (options.onUnauthorized && handlers[401] === undefined) {\n handlers[401] = options.onUnauthorized\n }\n if (options.onForbidden && handlers[403] === undefined) {\n handlers[403] = options.onForbidden\n }\n if (options.onNotFound && handlers[404] === undefined) {\n handlers[404] = options.onNotFound\n }\n if (options.onServerError && handlers['5xx'] === undefined && handlers[500] === undefined) {\n handlers['5xx'] = options.onServerError\n }\n\n const hasHandler = Object.entries(handlers).some(([, handler]) => Boolean(handler))\n return hasHandler ? handlers : undefined\n}\n\nconst resolveAuthConfig = (options: CreateFetchOptions): AuthConfig | undefined => {\n if (options.auth) {\n return options.auth\n }\n if (options.getToken) {\n return { getToken: options.getToken }\n }\n return undefined\n}\n\nconst createConfigInterceptors = (options: CreateFetchOptions): HttpInterceptor[] => {\n const interceptors: HttpInterceptor[] = []\n const auth = resolveAuthConfig(options)\n if (auth) {\n interceptors.push(createAuthInterceptor(auth))\n }\n const statusHandlers = mergeStatusHandlers(options)\n if (statusHandlers) {\n interceptors.push(createStatusInterceptor(statusHandlers))\n }\n return interceptors\n}\n\nexport { createConfigInterceptors, mergeStatusHandlers, resolveAuthConfig }\nexport type { StatusHandler }\n","import { DEFAULT_INTERCEPTOR_ORDER } from '../constants'\nimport type { HttpInterceptor, FetchResult, InterceptorHandler, RequestContext } from '../types'\n\ntype HookOutcome<T> =\n | { type: 'continue'; context: T }\n | { type: 'drop' }\n | { type: 'retry'; delayMs?: number }\n | { type: 'short-circuit'; result: FetchResult<unknown, unknown> }\n\nconst matchesInterceptor = (interceptor: HttpInterceptor, context: RequestContext) => {\n const match = interceptor.match\n if (!match) {\n return true\n }\n if (match.operation && match.operation !== context.meta.operation) {\n return false\n }\n if (match.method && match.method !== context.request.method) {\n return false\n }\n if (match.pathPrefix && !context.request.url.pathname.startsWith(match.pathPrefix)) {\n return false\n }\n if (match.status !== undefined && context.response?.status !== match.status) {\n return false\n }\n return true\n}\n\nconst resolveInterceptors = (\n clientInterceptors: HttpInterceptor[],\n extras?: { use?: HttpInterceptor[]; eject?: string[] },\n) => {\n const ejected = new Set(extras?.eject ?? [])\n const merged = [...clientInterceptors, ...(extras?.use ?? [])].filter(\n (item) => !ejected.has(item.name),\n )\n return merged.sort(\n (left, right) =>\n (left.order ?? DEFAULT_INTERCEPTOR_ORDER) - (right.order ?? DEFAULT_INTERCEPTOR_ORDER),\n )\n}\n\nconst runHook = async <T extends RequestContext>(\n interceptors: HttpInterceptor[],\n getHandler: (item: HttpInterceptor) => InterceptorHandler<T> | undefined,\n context: T,\n): Promise<HookOutcome<T>> => {\n let current = context\n for (const interceptor of interceptors) {\n if (!matchesInterceptor(interceptor, current)) {\n continue\n }\n const handler = getHandler(interceptor)\n if (!handler) {\n continue\n }\n const decision = (await handler(current)) ?? { action: 'continue', context: current }\n if (decision.action === 'skip') {\n continue\n }\n if (decision.action === 'drop') {\n return { type: 'drop' }\n }\n if (decision.action === 'retry') {\n return { type: 'retry', delayMs: decision.delayMs }\n }\n if (decision.action === 'short-circuit') {\n return { type: 'short-circuit', result: decision.result }\n }\n current = (decision.context ?? current) as T\n }\n return { type: 'continue', context: current }\n}\n\nexport { resolveInterceptors, runHook }\nexport type { HookOutcome }\n","const isJsonContentType = (contentType: string | null) =>\n Boolean(contentType && contentType.includes('json'))\n\nconst parseBody = async (response: Response, parseAs?: 'json' | 'text' | 'blob') => {\n if (response.status === 204) {\n return null\n }\n\n if (parseAs === 'blob') {\n return response.blob()\n }\n\n if (parseAs === 'text') {\n return response.text()\n }\n\n const contentType = response.headers.get('content-type')\n if (parseAs === 'json' || isJsonContentType(contentType)) {\n const text = await response.text()\n if (!text) {\n return null\n }\n return JSON.parse(text) as unknown\n }\n\n return response.text()\n}\n\nconst encodeBody = (body: unknown, headers: Headers) => {\n if (body === undefined || body === null) {\n return undefined\n }\n if (\n typeof body === 'string' ||\n body instanceof FormData ||\n body instanceof Blob ||\n body instanceof URLSearchParams ||\n body instanceof ArrayBuffer\n ) {\n return body\n }\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/json')\n }\n return JSON.stringify(body)\n}\n\nexport { parseBody, encodeBody, isJsonContentType }\n","import type { CreateFetchOptions, HttpInterceptor, RequestContext } from './types'\nimport { encodeBody, parseBody } from './utils/parse-body'\nimport { toErrResult, toFetchErrorInfo, toOkResult } from './utils/result'\nimport { runHook } from './interceptors/run-interceptors'\nimport { createFetchError, isAbortError } from './fetch-error'\nimport type { FetchResult, RequestOptions } from './types'\n\ntype AttemptOutcome<T, E> =\n { kind: 'result'; result: FetchResult<T, E> } | { kind: 'retry'; delayMs?: number }\n\ntype ExecuteArgs = {\n requestOptions?: RequestOptions\n client: CreateFetchOptions\n interceptors: HttpInterceptor[]\n fetchImpl: typeof fetch\n context: RequestContext\n}\n\nconst executeFetch = async <T, E>(input: ExecuteArgs): Promise<AttemptOutcome<T, E>> => {\n const { context, interceptors, fetchImpl, client, requestOptions } = input\n try {\n const response = await fetchImpl(context.request.url, {\n method: context.request.method,\n headers: context.request.headers,\n body: encodeBody(context.request.body, context.request.headers),\n signal: context.request.signal,\n credentials: client.credentials,\n })\n return handleResponse<T, E>({ interceptors, context, response, requestOptions })\n } catch (error) {\n if (isAbortError(error)) {\n throw error\n }\n context.error = toFetchErrorInfo(0, {\n code: 'NETWORK_ERROR',\n message: error instanceof Error ? error.message : 'Network error',\n })\n const failed = await runHook(interceptors, (item) => item.onRequestError, context)\n if (failed.type === 'retry') {\n return { kind: 'retry', delayMs: failed.delayMs }\n }\n if (failed.type === 'short-circuit') {\n return { kind: 'result', result: failed.result as FetchResult<T, E> }\n }\n throw createFetchError(\n toErrResult(0, context.error, new Headers()) as FetchResult<never, typeof context.error>,\n )\n }\n}\n\nconst handleResponse = async <T, E>(input: {\n interceptors: HttpInterceptor[]\n context: RequestContext\n response: Response\n requestOptions?: RequestOptions\n}): Promise<AttemptOutcome<T, E>> => {\n const { interceptors, response, requestOptions } = input\n const context = {\n ...input.context,\n response,\n data: await parseBody(response, requestOptions?.parseAs),\n }\n const hook = response.ok\n ? (item: HttpInterceptor) => item.onResponse\n : (item: HttpInterceptor) => item.onResponseError\n if (!response.ok) {\n context.error = toFetchErrorInfo(response.status, context.data)\n }\n const after = await runHook(interceptors, hook, context)\n if (after.type === 'retry') {\n return { kind: 'retry', delayMs: after.delayMs }\n }\n if (after.type === 'short-circuit') {\n return { kind: 'result', result: after.result as FetchResult<T, E> }\n }\n const nextContext = after.type === 'continue' ? after.context : context\n const result = response.ok\n ? toOkResult(response.status, nextContext.data as T, response.headers)\n : toErrResult(\n response.status,\n (nextContext.error ?? toFetchErrorInfo(response.status, nextContext.data)) as E,\n response.headers,\n )\n return { kind: 'result', result }\n}\n\nexport { executeFetch }\nexport type { AttemptOutcome }\n","import type { PathParams, QueryParams } from '../types'\n\nconst fillPath = (path: string, params?: PathParams) => {\n return path.replace(/:([A-Za-z0-9_]+)/g, (_match, key: string) => {\n const value = params?.[key]\n if (value === undefined) {\n throw new Error(`tanstack-fetch: missing path param \"${key}\"`)\n }\n return encodeURIComponent(String(value))\n })\n}\n\nconst appendQuery = (url: URL, query?: QueryParams) => {\n if (!query) {\n return\n }\n\n Object.entries(query).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return\n }\n url.searchParams.set(key, String(value))\n })\n}\n\nconst assertAbsoluteUrl = (baseUrl: string | undefined, source: string | undefined) => {\n if (source === 'browser' || !baseUrl) {\n return\n }\n\n if (!/^https?:\\/\\//i.test(baseUrl)) {\n throw new Error('tanstack-fetch: set an absolute baseUrl for SSR and Edge runtimes')\n }\n}\n\nconst buildUrl = (\n baseUrl: string | undefined,\n path: string,\n params?: PathParams,\n query?: QueryParams,\n) => {\n const filledPath = fillPath(path.replace(/\\{([A-Za-z0-9_]+)\\}/g, ':$1'), params)\n const absolutePath = /^https?:\\/\\//i.test(filledPath)\n ? filledPath\n : `${(baseUrl ?? '').replace(/\\/$/, '')}/${filledPath.replace(/^\\//, '')}`\n const url = new URL(absolutePath)\n appendQuery(url, query)\n return url\n}\n\nexport { buildUrl, assertAbsoluteUrl }\n","import type { MaybePromise } from '../types'\n\nconst toHeaders = (init?: HeadersInit) => new Headers(init)\n\nconst mergeHeaders = (...inits: Array<HeadersInit | undefined>) => {\n const headers = new Headers()\n inits.forEach((init) => {\n if (!init) {\n return\n }\n new Headers(init).forEach((value, key) => {\n headers.set(key, value)\n })\n })\n return headers\n}\n\nconst resolveHeaders = async (value?: HeadersInit | (() => MaybePromise<HeadersInit>)) => {\n if (!value) {\n return new Headers()\n }\n const resolved = typeof value === 'function' ? await value() : value\n return toHeaders(resolved)\n}\n\nexport { toHeaders, mergeHeaders, resolveHeaders }\n","const wait = (delayMs: number) => new Promise<void>((resolve) => setTimeout(resolve, delayMs))\n\nconst combineSignals = (signals: Array<AbortSignal | undefined>) => {\n const active = signals.filter((signal): signal is AbortSignal => Boolean(signal))\n if (active.length === 0) {\n return undefined\n }\n if (active.length === 1) {\n return active[0]\n }\n if (typeof AbortSignal.any === 'function') {\n return AbortSignal.any(active)\n }\n const controller = new AbortController()\n active.forEach((signal) => {\n if (signal.aborted) {\n controller.abort(signal.reason)\n return\n }\n signal.addEventListener('abort', () => controller.abort(signal.reason), { once: true })\n })\n return controller.signal\n}\n\nconst createTimeoutSignal = (timeoutMs: number | undefined) => {\n if (!timeoutMs || timeoutMs <= 0) {\n return undefined\n }\n const controller = new AbortController()\n const timer = setTimeout(\n () => controller.abort(new Error('tanstack-fetch: request timed out')),\n timeoutMs,\n )\n controller.signal.addEventListener('abort', () => clearTimeout(timer), { once: true })\n return controller.signal\n}\n\nexport { wait, combineSignals, createTimeoutSignal }\n","import type { CreateFetchOptions, HttpInterceptor, HttpMethod, RequestOptions } from './types'\nimport { DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT_MS } from './constants'\nimport { resolveInterceptors, runHook } from './interceptors/run-interceptors'\nimport { executeFetch } from './request-execute'\nimport { assertAbsoluteUrl, buildUrl } from './utils/build-url'\nimport { mergeHeaders, resolveHeaders } from './utils/headers'\nimport { combineSignals, createTimeoutSignal, wait } from './utils/signals'\nimport type { FetchErrorInfo, FetchResult, IncomingHeaders, RequestContext } from './types'\n\ntype SendRequestArgs = {\n method: HttpMethod\n path: string\n requestOptions?: RequestOptions\n client: CreateFetchOptions\n interceptors: HttpInterceptor[]\n}\n\nconst resolveIncoming = async (\n client: CreateFetchOptions,\n): Promise<IncomingHeaders | undefined> => {\n if (!client.incoming) {\n return undefined\n }\n return typeof client.incoming === 'function' ? client.incoming() : client.incoming\n}\n\nconst createContext = async (args: SendRequestArgs, attempt: number): Promise<RequestContext> => {\n const { method, path, requestOptions, client } = args\n const source = client.source ?? 'browser'\n assertAbsoluteUrl(client.baseUrl, source)\n const url = buildUrl(client.baseUrl, path, requestOptions?.params, requestOptions?.query)\n const headers = mergeHeaders(await resolveHeaders(client.headers), requestOptions?.headers)\n const timeoutMs = requestOptions?.timeoutMs ?? client.timeoutMs ?? DEFAULT_TIMEOUT_MS\n const signal = combineSignals([requestOptions?.signal, createTimeoutSignal(timeoutMs)])\n\n return {\n request: { method, url, headers, body: requestOptions?.body, signal },\n incoming: await resolveIncoming(client),\n meta: {\n attempt,\n maxRetries: client.maxRetries ?? DEFAULT_MAX_RETRIES,\n source,\n operation: requestOptions?.operation,\n },\n }\n}\n\nconst sendRequest = async <T, E = FetchErrorInfo>(\n args: SendRequestArgs,\n): Promise<FetchResult<T, E>> => {\n const interceptors = resolveInterceptors(args.interceptors, args.requestOptions?.interceptors)\n const fetchImpl = args.client.fetch ?? globalThis.fetch\n if (!fetchImpl) {\n throw new Error('tanstack-fetch: fetch is not available')\n }\n\n let attempt = 0\n const maxRetries = args.client.maxRetries ?? DEFAULT_MAX_RETRIES\n while (attempt <= maxRetries) {\n const outcome = await runAttempt<T, E>({ args, interceptors, fetchImpl, attempt })\n if (outcome.kind === 'result') {\n return outcome.result\n }\n attempt += 1\n if (outcome.delayMs) {\n await wait(outcome.delayMs)\n }\n }\n\n throw new Error('tanstack-fetch: exceeded retry budget')\n}\n\nconst runAttempt = async <T, E>(input: {\n args: SendRequestArgs\n interceptors: HttpInterceptor[]\n fetchImpl: typeof fetch\n attempt: number\n}) => {\n let context = await createContext(input.args, input.attempt)\n const before = await runHook(input.interceptors, (item) => item.onRequest, context)\n if (before.type === 'short-circuit') {\n return { kind: 'result' as const, result: before.result as FetchResult<T, E> }\n }\n if (before.type === 'retry') {\n return { kind: 'retry' as const, delayMs: before.delayMs }\n }\n if (before.type === 'continue') {\n context = before.context\n }\n return executeFetch<T, E>({\n requestOptions: input.args.requestOptions,\n client: input.args.client,\n interceptors: input.interceptors,\n fetchImpl: input.fetchImpl,\n context,\n })\n}\n\nexport { sendRequest }\nexport type { SendRequestArgs }\n","import type { SseEvent } from './types'\n\nconst parseSseBlock = (block: string): SseEvent<unknown> | undefined => {\n const dataLines: string[] = []\n let eventName: string | undefined\n let id: string | undefined\n let retry: number | undefined\n\n block.split('\\n').forEach((line) => {\n if (line.startsWith(':')) {\n return\n }\n if (line.startsWith('data:')) {\n dataLines.push(line.slice(5).replace(/^ /, ''))\n return\n }\n if (line.startsWith('event:')) {\n eventName = line.slice(6).replace(/^ /, '')\n return\n }\n if (line.startsWith('id:')) {\n id = line.slice(3).replace(/^ /, '')\n return\n }\n if (line.startsWith('retry:')) {\n const parsed = Number.parseInt(line.slice(6).trim(), 10)\n if (!Number.isNaN(parsed)) {\n retry = parsed\n }\n }\n })\n\n if (dataLines.length === 0 && !eventName) {\n return undefined\n }\n\n const raw = dataLines.join('\\n')\n let data: unknown = raw\n if (raw) {\n try {\n data = JSON.parse(raw)\n } catch {\n data = raw\n }\n }\n\n return { event: eventName, data, id, retry }\n}\n\nconst consumeSseBuffer = (buffer: string) => {\n const normalized = buffer.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n')\n const chunks = normalized.split('\\n\\n')\n const rest = chunks.pop() ?? ''\n const events = chunks\n .map((block) => parseSseBlock(block.trim()))\n .filter((event): event is SseEvent<unknown> => Boolean(event))\n return { events, rest }\n}\n\nexport { parseSseBlock, consumeSseBuffer }\n","import type {\n CreateFetchOptions,\n HttpInterceptor,\n HttpMethod,\n IncomingHeaders,\n RequestContext,\n RequestOptions,\n} from './types'\nimport { DEFAULT_MAX_RETRIES } from './constants'\nimport { assertAbsoluteUrl, buildUrl } from './utils/build-url'\nimport { mergeHeaders, resolveHeaders } from './utils/headers'\n\ntype SendSseArgs = {\n path: string\n requestOptions?: RequestOptions\n client: CreateFetchOptions\n interceptors: HttpInterceptor[]\n}\n\nconst resolveIncoming = async (\n client: CreateFetchOptions,\n): Promise<IncomingHeaders | undefined> => {\n if (!client.incoming) {\n return undefined\n }\n return typeof client.incoming === 'function' ? client.incoming() : client.incoming\n}\n\nconst createSseContext = async (\n args: SendSseArgs,\n attempt: number,\n lastEventId?: string,\n): Promise<RequestContext> => {\n const source = args.client.source ?? 'browser'\n assertAbsoluteUrl(args.client.baseUrl, source)\n const url = buildUrl(\n args.client.baseUrl,\n args.path,\n args.requestOptions?.params,\n args.requestOptions?.query,\n )\n const headers = mergeHeaders(\n await resolveHeaders(args.client.headers),\n args.requestOptions?.headers,\n )\n headers.set('accept', 'text/event-stream')\n if (lastEventId) {\n headers.set('last-event-id', lastEventId)\n }\n return {\n request: {\n method: 'GET' as HttpMethod,\n url,\n headers,\n body: args.requestOptions?.body,\n signal: args.requestOptions?.signal,\n },\n incoming: await resolveIncoming(args.client),\n meta: {\n attempt,\n maxRetries: args.client.maxRetries ?? DEFAULT_MAX_RETRIES,\n source,\n operation: args.requestOptions?.operation,\n lastEventId,\n },\n }\n}\n\nexport { createSseContext }\nexport type { SendSseArgs }\n","import type { SseEvent } from './types'\nimport { resolveInterceptors, runHook } from './interceptors/run-interceptors'\nimport { consumeSseBuffer } from './sse-parse'\nimport { wait } from './utils/signals'\nimport { toFetchErrorInfo } from './utils/result'\nimport { createSseContext, type SendSseArgs } from './sse-context'\n\nconst createSseIterator = <T>(args: SendSseArgs): AsyncIterator<SseEvent<T>> => {\n const interceptors = resolveInterceptors(args.interceptors, args.requestOptions?.interceptors)\n const fetchImpl = args.client.fetch ?? globalThis.fetch\n const queue: SseEvent<T>[] = []\n let reader: ReadableStreamDefaultReader<string> | undefined\n let buffer = ''\n let lastEventId = args.requestOptions?.headers\n ? (new Headers(args.requestOptions.headers).get('last-event-id') ?? undefined)\n : undefined\n let attempt = 0\n let closed = false\n\n const pull = async (): Promise<IteratorResult<SseEvent<T>>> => {\n if (queue.length > 0) {\n return { value: queue.shift() as SseEvent<T>, done: false }\n }\n if (closed) {\n return { value: undefined, done: true }\n }\n if (!reader) {\n const started = await openStream()\n if (!started) {\n closed = true\n return { value: undefined, done: true }\n }\n }\n return readNext()\n }\n\n const openStream = async (): Promise<boolean> => {\n if (!fetchImpl) {\n throw new Error('tanstack-fetch: fetch is not available')\n }\n let context = await createSseContext(args, attempt, lastEventId)\n const before = await runHook(interceptors, (item) => item.onRequest, context)\n if (before.type === 'short-circuit' || before.type === 'retry') {\n return false\n }\n if (before.type === 'continue') {\n context = before.context\n }\n const response = await fetchImpl(context.request.url, {\n method: 'GET',\n headers: context.request.headers,\n signal: context.request.signal,\n credentials: args.client.credentials,\n })\n context.response = response\n if (!response.ok || !response.body) {\n context.error = toFetchErrorInfo(response.status, await response.text())\n const failed = await runHook(interceptors, (item) => item.onSseError, context)\n if (failed.type === 'retry' && attempt < context.meta.maxRetries) {\n attempt += 1\n await wait(failed.delayMs ?? 500)\n const reconnect = await runHook(interceptors, (item) => item.onSseReconnect, context)\n if (reconnect.type === 'continue') {\n lastEventId = reconnect.context.meta.lastEventId ?? lastEventId\n }\n return openStream()\n }\n throw Object.assign(new Error(context.error.message), { error: context.error })\n }\n await runHook(interceptors, (item) => item.onSseOpen, context)\n reader = response.body.pipeThrough(new TextDecoderStream()).getReader()\n return true\n }\n\n const readNext = async (): Promise<IteratorResult<SseEvent<T>>> => {\n const currentReader = reader\n if (!currentReader) {\n closed = true\n return { value: undefined, done: true }\n }\n const chunk = await currentReader.read()\n if (chunk.done) {\n reader = undefined\n closed = true\n return pull()\n }\n const parsed = consumeSseBuffer(buffer + chunk.value)\n buffer = parsed.rest\n for (const event of parsed.events) {\n lastEventId = event.id ?? lastEventId\n const context = await createSseContext(args, attempt, lastEventId)\n const after = await runHook(interceptors, (item) => item.onSseEvent, { ...context, event })\n if (after.type === 'drop') {\n continue\n }\n if (after.type === 'continue' && after.context.event) {\n queue.push(after.context.event as SseEvent<T>)\n }\n }\n return pull()\n }\n\n return { next: pull }\n}\n\nexport { createSseIterator }\n","import type { SseEvent } from './types'\nimport { createSseIterator } from './sse-iterator'\nimport type { SendSseArgs } from './sse-context'\n\nconst sendSse = <T>(args: SendSseArgs): AsyncIterable<SseEvent<T>> => ({\n [Symbol.asyncIterator]: () => createSseIterator<T>(args),\n})\n\nexport { sendSse }\nexport type { SendSseArgs }\n","import { isAbortError } from './fetch-error'\nimport { sendSse } from './sse'\nimport { combineSignals } from './utils/signals'\nimport type { SendSseArgs } from './sse-context'\nimport type { RequestOptions, SseEvent, SseHandlers, SseSubscription } from './types'\n\ntype SseCallOptions<T> = RequestOptions &\n SseHandlers<T> & {\n lastEventId?: string\n }\n\nconst HANDLER_KEYS = ['onMessage', 'onEvent', 'onOpen', 'onError', 'onClose', 'lastEventId'] as const\n\nconst splitSseOptions = <T>(options?: SseCallOptions<T>) => {\n const handlers: SseHandlers<T> = {}\n const requestOptions: RequestOptions = { ...(options ?? {}) }\n const lastEventId = options?.lastEventId\n\n for (const key of HANDLER_KEYS) {\n if (key === 'lastEventId') {\n delete (requestOptions as Record<string, unknown>).lastEventId\n continue\n }\n if (options && key in options) {\n ;(handlers as Record<string, unknown>)[key] = options[key]\n delete (requestOptions as Record<string, unknown>)[key]\n }\n }\n\n if (lastEventId) {\n const headers = new Headers(requestOptions.headers)\n headers.set('last-event-id', lastEventId)\n requestOptions.headers = headers\n }\n\n return { handlers, requestOptions, lastEventId }\n}\n\nconst hasSseHandlers = <T>(options?: SseCallOptions<T>) =>\n Boolean(\n options &&\n (options.onMessage || options.onEvent || options.onOpen || options.onError || options.onClose),\n )\n\nconst listenSse = <T>(args: SendSseArgs, handlers: SseHandlers<T>): SseSubscription => {\n const controller = new AbortController()\n const signal = combineSignals([args.requestOptions?.signal, controller.signal])\n\n const run = async () => {\n try {\n handlers.onOpen?.()\n for await (const event of sendSse<T>({\n ...args,\n requestOptions: { ...args.requestOptions, signal },\n })) {\n handlers.onEvent?.(event)\n handlers.onMessage?.(event.data, event)\n }\n handlers.onClose?.()\n } catch (error) {\n if (isAbortError(error) || controller.signal.aborted) {\n handlers.onClose?.()\n return\n }\n handlers.onError?.(error)\n }\n }\n\n void run()\n\n return {\n close: () => controller.abort(),\n }\n}\n\nconst createSseApi = (base: Omit<SendSseArgs, 'path' | 'requestOptions'>) => {\n const sse = (<T>(path: string, options?: SseCallOptions<T>) => {\n const { handlers, requestOptions } = splitSseOptions(options)\n const args: SendSseArgs = {\n path,\n requestOptions,\n client: base.client,\n interceptors: base.interceptors,\n }\n\n if (hasSseHandlers(options)) {\n return listenSse<T>(args, handlers)\n }\n\n return sendSse<T>(args)\n }) as {\n <T>(\n path: string,\n options: SseCallOptions<T> &\n ({ onMessage: SseHandlers<T>['onMessage'] } | { onEvent: SseHandlers<T>['onEvent'] }),\n ): SseSubscription\n <T>(path: string, options?: SseCallOptions<T>): AsyncIterable<SseEvent<T>>\n }\n\n return sse\n}\n\nexport { listenSse, splitSseOptions, hasSseHandlers, createSseApi }\nexport type { SseCallOptions }\n","import { createConfigInterceptors } from './plugins/config-interceptors'\nimport { pluginFactories } from './plugins'\nimport { createFetchError } from './fetch-error'\nimport { sendRequest } from './request'\nimport { createSseApi } from './sse-listen'\nimport type {\n CreateFetchOptions,\n FetchClient,\n FetchErrorInfo,\n FetchResult,\n HttpInterceptor,\n HttpMethod,\n RequestOptions,\n} from './types'\n\nconst createFetch = (options: CreateFetchOptions = {}): FetchClient => {\n const clientOptions: CreateFetchOptions = {\n throwOnError: true,\n ...options,\n }\n\n const interceptors: HttpInterceptor[] = [\n ...createConfigInterceptors(clientOptions),\n ...(clientOptions.plugins ?? []).map((name) => pluginFactories[name]()),\n ...(clientOptions.interceptors ?? []),\n ]\n\n const use: FetchClient['use'] = (name, interceptor, config) => {\n const next: HttpInterceptor = {\n ...interceptor,\n name,\n order: config?.order ?? interceptor.order,\n }\n const existing = interceptors.findIndex((item) => item.name === name)\n if (existing >= 0) {\n interceptors.splice(existing, 1, next)\n return\n }\n interceptors.push(next)\n }\n\n const eject: FetchClient['eject'] = (name) => {\n const index = interceptors.findIndex((item) => item.name === name)\n if (index >= 0) {\n interceptors.splice(index, 1)\n }\n }\n\n const request = (async <T, E = FetchErrorInfo>(\n method: HttpMethod,\n path: string,\n requestOptions?: RequestOptions,\n ): Promise<T | FetchResult<T, E>> => {\n const result = await sendRequest<T, E>({\n method,\n path,\n requestOptions,\n client: clientOptions,\n interceptors,\n })\n const shouldThrow = requestOptions?.throwOnError ?? clientOptions.throwOnError ?? true\n if (!result.ok && shouldThrow) {\n throw createFetchError(result as FetchResult<never, FetchErrorInfo>)\n }\n if (shouldThrow && result.ok) {\n return result.data\n }\n return result\n }) as FetchClient['request']\n\n const bindMethod = (httpMethod: HttpMethod): FetchClient['get'] => {\n const bound = (path: string, requestOptions?: RequestOptions) =>\n request(httpMethod, path, requestOptions as never)\n return bound as FetchClient['get']\n }\n\n const sse = createSseApi({ client: clientOptions, interceptors })\n\n return {\n use,\n eject,\n request,\n get: bindMethod('GET'),\n post: bindMethod('POST'),\n put: bindMethod('PUT'),\n patch: bindMethod('PATCH'),\n delete: bindMethod('DELETE'),\n sse,\n }\n}\n\n/** @deprecated Use createFetch */\nconst createClient = createFetch\n\nexport { createFetch, createClient }\n"]}
package/dist/cli.js ADDED
@@ -0,0 +1,257 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli/generate.ts
4
+ import { mkdir, writeFile } from "fs/promises";
5
+ import { join } from "path";
6
+
7
+ // src/cli/schema-to-ts.ts
8
+ var toPascal = (value) => value.replace(/[^A-Za-z0-9]+/g, " ").trim().split(" ").filter(Boolean).map((part) => part[0].toUpperCase() + part.slice(1)).join("") || "Schema";
9
+ var toCamel = (value) => {
10
+ const pascal = toPascal(value);
11
+ return pascal[0].toLowerCase() + pascal.slice(1);
12
+ };
13
+ var refName = (ref) => {
14
+ const parts = ref.split("/");
15
+ return toPascal(parts[parts.length - 1] ?? "Schema");
16
+ };
17
+ var schemaToTs = (schema) => {
18
+ if (!schema) {
19
+ return "unknown";
20
+ }
21
+ if (schema.$ref) {
22
+ return refName(schema.$ref);
23
+ }
24
+ if (schema.enum && schema.enum.length > 0) {
25
+ return schema.enum.map((value) => JSON.stringify(value)).join(" | ");
26
+ }
27
+ const typeValue = Array.isArray(schema.type) ? schema.type[0] : schema.type;
28
+ if (typeValue === "string") {
29
+ return "string";
30
+ }
31
+ if (typeValue === "integer" || typeValue === "number") {
32
+ return "number";
33
+ }
34
+ if (typeValue === "boolean") {
35
+ return "boolean";
36
+ }
37
+ if (typeValue === "array") {
38
+ return `Array<${schemaToTs(schema.items)}>`;
39
+ }
40
+ if (typeValue === "object" || schema.properties) {
41
+ return objectToTs(schema);
42
+ }
43
+ return "unknown";
44
+ };
45
+ var objectToTs = (schema) => {
46
+ const required = new Set(schema.required ?? []);
47
+ const fields = Object.entries(schema.properties ?? {}).map(([key, value]) => {
48
+ const optional = required.has(key) ? "" : "?";
49
+ return ` ${key}${optional}: ${schemaToTs(value)}`;
50
+ });
51
+ if (fields.length === 0) {
52
+ return "Record<string, unknown>";
53
+ }
54
+ return `{
55
+ ${fields.join("\n")}
56
+ }`;
57
+ };
58
+
59
+ // src/cli/collect-operations.ts
60
+ var HTTP_METHODS = ["get", "post", "put", "patch", "delete"];
61
+ var isSseOperation = (operation) => {
62
+ const contents = Object.values(operation.responses ?? {}).flatMap(
63
+ (response) => Object.keys(response.content ?? {})
64
+ );
65
+ return contents.some((type) => type.includes("event-stream"));
66
+ };
67
+ var collectOperations = (spec) => {
68
+ const operations = [];
69
+ Object.entries(spec.paths ?? {}).forEach(([path, methods]) => {
70
+ HTTP_METHODS.forEach((method) => {
71
+ const operation = methods?.[method];
72
+ if (!operation) {
73
+ return;
74
+ }
75
+ const tag = operation.tags?.[0] ?? "api";
76
+ const fallbackId = `${method}_${path}`;
77
+ operations.push({
78
+ method: method.toUpperCase(),
79
+ path,
80
+ operationId: toCamel(operation.operationId ?? fallbackId),
81
+ tag: toCamel(tag),
82
+ isSse: isSseOperation(operation),
83
+ parameters: operation.parameters ?? [],
84
+ bodySchema: operation.requestBody?.content?.["application/json"]?.schema,
85
+ successSchema: pickSuccessSchema(operation)
86
+ });
87
+ });
88
+ });
89
+ return operations;
90
+ };
91
+ var pickSuccessSchema = (operation) => {
92
+ const success = operation.responses?.["200"] ?? operation.responses?.["201"];
93
+ const content = success?.content ?? {};
94
+ return content["application/json"]?.schema ?? content["text/event-stream"]?.schema;
95
+ };
96
+
97
+ // src/cli/generate.ts
98
+ var generateTypesFile = (spec) => {
99
+ const schemas = Object.entries(spec.components?.schemas ?? {});
100
+ const types = schemas.map(([name, schema]) => `type ${toPascal(name)} = ${schemaToTs(schema)}`);
101
+ const exports = schemas.map(([name]) => toPascal(name));
102
+ if (exports.length === 0) {
103
+ return "export {}\n";
104
+ }
105
+ const body = `${types.join("\n\n")}
106
+
107
+ export type { ${exports.join(", ")} }
108
+ `;
109
+ return body.trimStart();
110
+ };
111
+ var paramsType = (operation, kind) => {
112
+ const params = operation.parameters.filter((item) => item.in === kind);
113
+ if (params.length === 0) {
114
+ return void 0;
115
+ }
116
+ const fields = params.map((item) => {
117
+ const optional = item.required ? "" : "?";
118
+ return `${item.name}${optional}: ${schemaToTs(item.schema)}`;
119
+ });
120
+ return `{ ${fields.join("; ")} }`;
121
+ };
122
+ var optionsType = (operation) => {
123
+ const fields = [];
124
+ const pathType = paramsType(operation, "path");
125
+ const queryType = paramsType(operation, "query");
126
+ if (pathType) {
127
+ fields.push(`params: ${pathType}`);
128
+ }
129
+ if (queryType) {
130
+ fields.push(`query?: ${queryType}`);
131
+ }
132
+ if (operation.bodySchema) {
133
+ fields.push(`body: ${schemaToTs(operation.bodySchema)}`);
134
+ }
135
+ if (fields.length === 0) {
136
+ return "RequestOptions | undefined";
137
+ }
138
+ return `Omit<RequestOptions, 'params' | 'query' | 'body'> & { ${fields.join("; ")} }`;
139
+ };
140
+ var clientPath = (path) => path.replace(/\{([A-Za-z0-9_]+)\}/g, ":$1");
141
+ var methodLine = (operation) => {
142
+ const response = schemaToTs(operation.successSchema);
143
+ const options = optionsType(operation);
144
+ const optional = options.endsWith("| undefined") ? "?" : "";
145
+ if (operation.isSse) {
146
+ return ` ${operation.operationId}: (options${optional}: ${options}) => api.sse<${response}>('${clientPath(operation.path)}', options),`;
147
+ }
148
+ const method = operation.method.toLowerCase();
149
+ const call = method === "delete" ? "delete" : method;
150
+ return ` ${operation.operationId}: (options${optional}: ${options}) => api.${call}<${response}>('${clientPath(operation.path)}', options),`;
151
+ };
152
+ var generateClientFile = (spec, operations) => {
153
+ const tags = [...new Set(operations.map((item) => item.tag))];
154
+ const groups = tags.map((tag) => {
155
+ const lines = operations.filter((item) => item.tag === tag).map(methodLine);
156
+ return ` ${tag}: {
157
+ ${lines.join("\n")}
158
+ },`;
159
+ });
160
+ const schemaNames = Object.keys(spec.components?.schemas ?? {}).map((name) => toPascal(name));
161
+ const typesImport = schemaNames.length > 0 ? `import type { ${schemaNames.join(", ")} } from './types'
162
+ ` : "";
163
+ return `import { createFetch } from 'tanstack-fetch'
164
+ import type { CreateFetchOptions, RequestOptions } from 'tanstack-fetch'
165
+ ${typesImport}
166
+ const createApi = (options: CreateFetchOptions = {}) => {
167
+ const api = createFetch(options)
168
+ return {
169
+ ${groups.join("\n")}
170
+ }
171
+ }
172
+
173
+ export { createApi }
174
+ `;
175
+ };
176
+ var generateIndexFile = () => `import { createApi } from './client'
177
+
178
+ export { createApi }
179
+ export type * from './types'
180
+ `;
181
+ var generateClient = async (spec, outDir) => {
182
+ const operations = collectOperations(spec);
183
+ await mkdir(outDir, { recursive: true });
184
+ await writeFile(join(outDir, "types.ts"), generateTypesFile(spec), "utf8");
185
+ await writeFile(join(outDir, "client.ts"), generateClientFile(spec, operations), "utf8");
186
+ await writeFile(join(outDir, "index.ts"), generateIndexFile(), "utf8");
187
+ };
188
+
189
+ // src/cli/load-spec.ts
190
+ import { readFile } from "fs/promises";
191
+ import { parse as parseYaml } from "yaml";
192
+ var loadSpec = async (specPath) => {
193
+ const raw = await readFile(specPath, "utf8");
194
+ const parsed = specPath.endsWith(".yaml") || specPath.endsWith(".yml") ? parseYaml(raw) : JSON.parse(raw);
195
+ if (!parsed || typeof parsed !== "object") {
196
+ throw new Error("tanstack-fetch: OpenAPI spec must be an object");
197
+ }
198
+ return parsed;
199
+ };
200
+
201
+ // src/cli/parse-args.ts
202
+ var parseArgs = (argv) => {
203
+ const [command, ...rest] = argv;
204
+ if (!command || command === "--help" || command === "help" || command === "-h") {
205
+ return { command: "help" };
206
+ }
207
+ if (command !== "generate") {
208
+ throw new Error(`tanstack-fetch: unknown command "${command}"`);
209
+ }
210
+ const flags = /* @__PURE__ */ new Map();
211
+ for (let index = 0; index < rest.length; index += 1) {
212
+ const token = rest[index];
213
+ if (!token.startsWith("--")) {
214
+ continue;
215
+ }
216
+ const key = token.slice(2);
217
+ const value = rest[index + 1];
218
+ if (!value || value.startsWith("--")) {
219
+ throw new Error(`tanstack-fetch: missing value for --${key}`);
220
+ }
221
+ flags.set(key, value);
222
+ index += 1;
223
+ }
224
+ const spec = flags.get("spec");
225
+ const out = flags.get("out");
226
+ if (!spec || !out) {
227
+ throw new Error("tanstack-fetch: generate requires --spec and --out");
228
+ }
229
+ return { command: "generate", spec, out };
230
+ };
231
+ var helpText = `tanstack-fetch
232
+
233
+ Usage:
234
+ tanstack-fetch generate --spec ./openapi.json --out ./src/api
235
+
236
+ Flags:
237
+ --spec OpenAPI/Swagger JSON or YAML file
238
+ --out Directory for generated client files
239
+ `;
240
+
241
+ // src/cli/index.ts
242
+ var runCli = async (argv = process.argv.slice(2)) => {
243
+ const args = parseArgs(argv);
244
+ if (args.command === "help") {
245
+ console.log(helpText);
246
+ return;
247
+ }
248
+ const spec = await loadSpec(args.spec);
249
+ await generateClient(spec, args.out);
250
+ console.log(`tanstack-fetch: generated client in ${args.out}`);
251
+ };
252
+ runCli().catch((error) => {
253
+ const message = error instanceof Error ? error.message : "Unknown CLI error";
254
+ console.error(message);
255
+ process.exitCode = 1;
256
+ });
257
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/generate.ts","../src/cli/schema-to-ts.ts","../src/cli/collect-operations.ts","../src/cli/load-spec.ts","../src/cli/parse-args.ts","../src/cli/index.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { CollectedOperation, JsonSchema, OpenApiSpec } from './openapi.type'\nimport { collectOperations } from './collect-operations'\nimport { schemaToTs, toPascal } from './schema-to-ts'\n\nconst generateTypesFile = (spec: OpenApiSpec) => {\n const schemas = Object.entries(spec.components?.schemas ?? {})\n const types = schemas.map(([name, schema]) => `type ${toPascal(name)} = ${schemaToTs(schema)}`)\n const exports = schemas.map(([name]) => toPascal(name))\n if (exports.length === 0) {\n return 'export {}\\n'\n }\n const body = `${types.join('\\n\\n')}\\n\\nexport type { ${exports.join(', ')} }\\n`\n return body.trimStart()\n}\n\nconst paramsType = (operation: CollectedOperation, kind: 'path' | 'query') => {\n const params = operation.parameters.filter((item) => item.in === kind)\n if (params.length === 0) {\n return undefined\n }\n const fields = params.map((item) => {\n const optional = item.required ? '' : '?'\n return `${item.name}${optional}: ${schemaToTs(item.schema)}`\n })\n return `{ ${fields.join('; ')} }`\n}\n\nconst optionsType = (operation: CollectedOperation) => {\n const fields: string[] = []\n const pathType = paramsType(operation, 'path')\n const queryType = paramsType(operation, 'query')\n if (pathType) {\n fields.push(`params: ${pathType}`)\n }\n if (queryType) {\n fields.push(`query?: ${queryType}`)\n }\n if (operation.bodySchema) {\n fields.push(`body: ${schemaToTs(operation.bodySchema)}`)\n }\n if (fields.length === 0) {\n return 'RequestOptions | undefined'\n }\n return `Omit<RequestOptions, 'params' | 'query' | 'body'> & { ${fields.join('; ')} }`\n}\n\nconst clientPath = (path: string) => path.replace(/\\{([A-Za-z0-9_]+)\\}/g, ':$1')\n\nconst methodLine = (operation: CollectedOperation) => {\n const response = schemaToTs(operation.successSchema as JsonSchema | undefined)\n const options = optionsType(operation)\n const optional = options.endsWith('| undefined') ? '?' : ''\n if (operation.isSse) {\n return ` ${operation.operationId}: (options${optional}: ${options}) => api.sse<${response}>('${clientPath(operation.path)}', options),`\n }\n const method = operation.method.toLowerCase()\n const call = method === 'delete' ? 'delete' : method\n return ` ${operation.operationId}: (options${optional}: ${options}) => api.${call}<${response}>('${clientPath(operation.path)}', options),`\n}\n\nconst generateClientFile = (spec: OpenApiSpec, operations: CollectedOperation[]) => {\n const tags = [...new Set(operations.map((item) => item.tag))]\n const groups = tags.map((tag) => {\n const lines = operations.filter((item) => item.tag === tag).map(methodLine)\n return ` ${tag}: {\\n${lines.join('\\n')}\\n },`\n })\n const schemaNames = Object.keys(spec.components?.schemas ?? {}).map((name) => toPascal(name))\n const typesImport =\n schemaNames.length > 0 ? `import type { ${schemaNames.join(', ')} } from './types'\\n` : ''\n\n return `import { createFetch } from 'tanstack-fetch'\nimport type { CreateFetchOptions, RequestOptions } from 'tanstack-fetch'\n${typesImport}\nconst createApi = (options: CreateFetchOptions = {}) => {\n const api = createFetch(options)\n return {\n${groups.join('\\n')}\n }\n}\n\nexport { createApi }\n`\n}\n\nconst generateIndexFile = () => `import { createApi } from './client'\n\nexport { createApi }\nexport type * from './types'\n`\n\nconst generateClient = async (spec: OpenApiSpec, outDir: string) => {\n const operations = collectOperations(spec)\n await mkdir(outDir, { recursive: true })\n await writeFile(join(outDir, 'types.ts'), generateTypesFile(spec), 'utf8')\n await writeFile(join(outDir, 'client.ts'), generateClientFile(spec, operations), 'utf8')\n await writeFile(join(outDir, 'index.ts'), generateIndexFile(), 'utf8')\n}\n\nexport { generateClient, generateTypesFile, generateClientFile }\n","import type { JsonSchema } from './openapi.type'\n\nconst toPascal = (value: string) =>\n value\n .replace(/[^A-Za-z0-9]+/g, ' ')\n .trim()\n .split(' ')\n .filter(Boolean)\n .map((part) => part[0].toUpperCase() + part.slice(1))\n .join('') || 'Schema'\n\nconst toCamel = (value: string) => {\n const pascal = toPascal(value)\n return pascal[0].toLowerCase() + pascal.slice(1)\n}\n\nconst refName = (ref: string) => {\n const parts = ref.split('/')\n return toPascal(parts[parts.length - 1] ?? 'Schema')\n}\n\nconst schemaToTs = (schema: JsonSchema | undefined): string => {\n if (!schema) {\n return 'unknown'\n }\n if (schema.$ref) {\n return refName(schema.$ref)\n }\n if (schema.enum && schema.enum.length > 0) {\n return schema.enum.map((value) => JSON.stringify(value)).join(' | ')\n }\n const typeValue = Array.isArray(schema.type) ? schema.type[0] : schema.type\n if (typeValue === 'string') {\n return 'string'\n }\n if (typeValue === 'integer' || typeValue === 'number') {\n return 'number'\n }\n if (typeValue === 'boolean') {\n return 'boolean'\n }\n if (typeValue === 'array') {\n return `Array<${schemaToTs(schema.items)}>`\n }\n if (typeValue === 'object' || schema.properties) {\n return objectToTs(schema)\n }\n return 'unknown'\n}\n\nconst objectToTs = (schema: JsonSchema) => {\n const required = new Set(schema.required ?? [])\n const fields = Object.entries(schema.properties ?? {}).map(([key, value]) => {\n const optional = required.has(key) ? '' : '?'\n return ` ${key}${optional}: ${schemaToTs(value)}`\n })\n if (fields.length === 0) {\n return 'Record<string, unknown>'\n }\n return `{\\n${fields.join('\\n')}\\n}`\n}\n\nexport { toPascal, toCamel, refName, schemaToTs }\n","import type { CollectedOperation, OpenApiOperation, OpenApiSpec } from './openapi.type'\nimport { toCamel } from './schema-to-ts'\n\nconst HTTP_METHODS = ['get', 'post', 'put', 'patch', 'delete'] as const\n\nconst isSseOperation = (operation: OpenApiOperation) => {\n const contents = Object.values(operation.responses ?? {}).flatMap((response) =>\n Object.keys(response.content ?? {}),\n )\n return contents.some((type) => type.includes('event-stream'))\n}\n\nconst collectOperations = (spec: OpenApiSpec): CollectedOperation[] => {\n const operations: CollectedOperation[] = []\n Object.entries(spec.paths ?? {}).forEach(([path, methods]) => {\n HTTP_METHODS.forEach((method) => {\n const operation = methods?.[method]\n if (!operation) {\n return\n }\n const tag = operation.tags?.[0] ?? 'api'\n const fallbackId = `${method}_${path}`\n operations.push({\n method: method.toUpperCase(),\n path,\n operationId: toCamel(operation.operationId ?? fallbackId),\n tag: toCamel(tag),\n isSse: isSseOperation(operation),\n parameters: operation.parameters ?? [],\n bodySchema: operation.requestBody?.content?.['application/json']?.schema,\n successSchema: pickSuccessSchema(operation),\n })\n })\n })\n return operations\n}\n\nconst pickSuccessSchema = (operation: OpenApiOperation) => {\n const success = operation.responses?.['200'] ?? operation.responses?.['201']\n const content = success?.content ?? {}\n return content['application/json']?.schema ?? content['text/event-stream']?.schema\n}\n\nexport { collectOperations }\n","import { readFile } from 'node:fs/promises'\nimport { parse as parseYaml } from 'yaml'\nimport type { OpenApiSpec } from './openapi.type'\n\nconst loadSpec = async (specPath: string): Promise<OpenApiSpec> => {\n const raw = await readFile(specPath, 'utf8')\n const parsed: unknown =\n specPath.endsWith('.yaml') || specPath.endsWith('.yml') ? parseYaml(raw) : JSON.parse(raw)\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('tanstack-fetch: OpenAPI spec must be an object')\n }\n return parsed as OpenApiSpec\n}\n\nexport { loadSpec }\n","type GenerateArgs = {\n command: 'generate'\n spec: string\n out: string\n}\n\ntype CliArgs = GenerateArgs | { command: 'help' }\n\nconst parseArgs = (argv: string[]): CliArgs => {\n const [command, ...rest] = argv\n if (!command || command === '--help' || command === 'help' || command === '-h') {\n return { command: 'help' }\n }\n if (command !== 'generate') {\n throw new Error(`tanstack-fetch: unknown command \"${command}\"`)\n }\n\n const flags = new Map<string, string>()\n for (let index = 0; index < rest.length; index += 1) {\n const token = rest[index]\n if (!token.startsWith('--')) {\n continue\n }\n const key = token.slice(2)\n const value = rest[index + 1]\n if (!value || value.startsWith('--')) {\n throw new Error(`tanstack-fetch: missing value for --${key}`)\n }\n flags.set(key, value)\n index += 1\n }\n\n const spec = flags.get('spec')\n const out = flags.get('out')\n if (!spec || !out) {\n throw new Error('tanstack-fetch: generate requires --spec and --out')\n }\n\n return { command: 'generate', spec, out }\n}\n\nconst helpText = `tanstack-fetch\n\nUsage:\n tanstack-fetch generate --spec ./openapi.json --out ./src/api\n\nFlags:\n --spec OpenAPI/Swagger JSON or YAML file\n --out Directory for generated client files\n`\n\nexport { parseArgs, helpText }\nexport type { CliArgs, GenerateArgs }\n","import { generateClient } from './generate'\nimport { loadSpec } from './load-spec'\nimport { helpText, parseArgs } from './parse-args'\n\nconst runCli = async (argv = process.argv.slice(2)) => {\n const args = parseArgs(argv)\n if (args.command === 'help') {\n console.log(helpText)\n return\n }\n const spec = await loadSpec(args.spec)\n await generateClient(spec, args.out)\n console.log(`tanstack-fetch: generated client in ${args.out}`)\n}\n\nrunCli().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : 'Unknown CLI error'\n console.error(message)\n process.exitCode = 1\n})\n"],"mappings":"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","names":[]}