{"version":3,"sources":["../../src/internal/dual.ts","../../src/result.ts","../../src/types.ts","../../src/async.ts","../../src/collections.ts","../../src/compat/neverthrow.ts"],"names":["ok","err"],"mappings":";;;AA0CO,IAAM,IAAA,GAAO,CAAI,KAAA,EAAe,IAAA,KAA2C;AAMhF,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,MAAM,UAAA,GAAa,CAAA,GAAI,IAAA,KACrB,IAAA,CAAK,UAAU,KAAA,GAAQ,GAAA,CAAI,GAAG,IAAI,IAAI,CAAC,IAAA,KAAkB,GAAA,CAAI,IAAA,EAAM,GAAG,IAAI,CAAA;AAG5E,EAAA,OAAO,UAAA;AACT,CAAA;;;ACxCO,IAAM,EAAA,GAAK,CAAe,KAAA,MAA4B;AAAA,EAC3D,IAAA,EAAM,IAAA;AAAA,EACN;AACF,CAAA,CAAA;AAsBO,IAAM,GAAA,GAAM,CAAyB,KAAA,MAA4B;AAAA,EACtE,IAAA,EAAM,KAAA;AAAA,EACN;AACF,CAAA,CAAA;AAYO,IAAM,IAAA,GAAO,CAAO,MAAA,KAA6C,MAAA,CAAO,IAAA,KAAS,IAAA;AAYjF,IAAM,KAAA,GAAQ,CAAO,MAAA,KAA8C,MAAA,CAAO,IAAA,KAAS,KAAA;AAoBnF,IAAM,GAAA,GAGT,IAAA;AAAA,EACF,CAAA;AAAA,EACA,CAAU,MAAA,EAAsB,EAAA,KAC9B,IAAA,CAAK,MAAM,CAAA,GAAI,EAAA,CAAG,EAAA,CAAG,MAAA,CAAO,KAAK,CAAC,CAAA,GAAI,GAAA,CAAI,OAAO,KAAK;AAC1D,CAAA;AAeO,IAAM,MAAA,GAGT,IAAA;AAAA,EACF,CAAA;AAAA,EACA,CAAU,MAAA,EAAsB,EAAA,KAC9B,KAAA,CAAM,MAAM,CAAA,GAAI,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,KAAK,CAAC,CAAA,GAAI,EAAA,CAAG,OAAO,KAAK;AAC3D,CAAA;AAsCO,IAAM,OAAA,GAGT,IAAA;AAAA,EACF,CAAA;AAAA,EACA,CAAa,MAAA,EAAsB,EAAA,KACjC,IAAA,CAAK,MAAM,CAAA,GAAI,EAAA,CAAG,MAAA,CAAO,KAAK,CAAA,GAAI,GAAA,CAAI,MAAA,CAAO,KAAK;AACtD,CAAA;AA+FO,IAAM,QAAA,GAGT,IAAA;AAAA,EACF,CAAA;AAAA,EACA,CAAO,MAAA,EAAsB,YAAA,KAAwB,KAAK,MAAM,CAAA,GAAI,OAAO,KAAA,GAAQ;AACrF,CAAA;AA8EO,SAAS,OAAA,CACd,IACA,OAAA,EAC8C;AAC9C,EAAA,OAAO,IAAI,IAAA,KAAgB;AACzB,IAAA,IAAI;AACF,MAAA,OAAO,EAAA,CAAG,EAAA,CAAG,GAAG,IAAI,CAAC,CAAA;AAAA,IACvB,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA;AACF;;;AClTO,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAA,EACzC,WAAA,CACE,SACkB,KAAA,EAClB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFK,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAGlB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AAAA,EAJoB,KAAA;AAKtB,CAAA;;;ACxCA,IAAM,eAAA,GAAkB,CACtB,OAAA,KAC+B;AAC/B,EAAA,MAAM,SAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,KAAA,CAAM,MAAM,CAAA,EAAG;AACjB,MAAA,OAAO,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,IACzB;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,GAAG,MAAM,CAAA;AAClB,CAAA;AAwBO,IAAM,WAAA,GAAN,MAAM,YAAA,CAAkB;AAAA,EAGnB,YAA+B,GAAA,EAA2B;AAA3B,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAA4B;AAAA,EAA5B,GAAA;AAAA,EAFjC,OAAA,GAAwC,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYhD,OAAO,WAAiB,MAAA,EAAyC;AAC/D,IAAA,OAAO,IAAI,YAAA,CAAY,YAAY,MAAM,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,WAAA,CACL,OAAA,EACA,QAAA,EACmB;AACnB,IAAA,OAAO,IAAI,aAAY,YAAY;AACjC,MAAA,IAAI;AACF,QAAA,OAAO,EAAA,CAAG,MAAM,OAAO,CAAA;AAAA,MACzB,SAAS,KAAA,EAAO;AACd,QAAA,OAAO,GAAA,CAAI,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,MAC5B;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,gBAA8B,OAAA,EAA4C;AAC/E,IAAA,OAAO,IAAI,YAAA,CAAY,YAAY,EAAA,CAAG,MAAM,OAAO,CAAC,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,MAAY,EAAA,EAAoD;AACrE,IAAA,OAAO,IAAI,aAAY,EAAE,CAAA;AAAA,EAC3B;AAAA,EAYA,OAAO,GAAiB,KAAA,EAA6B;AACnD,IAAA,OAAO,IAAI,YAAA,CAAY,YAAY,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,EAC9C;AAAA,EAQA,OAAO,GAAiB,KAAA,EAA6B;AACnD,IAAA,OAAO,YAAA,CAAY,GAAG,KAAK,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,IAA4B,KAAA,EAA6B;AAC9D,IAAA,OAAO,IAAI,YAAA,CAAY,YAAY,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,iBAAA,CACL,OAAA,EACA,QAAA,EACqC;AACrC,IAAA,MAAM,YACJ,QAAA,KAAa,CAAC,UAAmB,IAAI,eAAA,CAAgB,2BAA2B,KAAK,CAAA,CAAA;AACvF,IAAA,OAAO,IAAI,aAAoC,YAAY;AACzD,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,OAAA;AAAA,MACf,SAAS,KAAA,EAAO;AACd,QAAA,OAAO,GAAA,CAAI,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,MAC7B;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,QAAc,OAAA,EAA4D;AAC/E,IAAA,OAAO,IAAI,aAAY,YAAY;AACjC,MAAA,MAAM,SAAc,EAAC;AACrB,MAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,QAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,OAAA,EAAQ;AAChC,QAAA,IAAI,KAAA,CAAM,MAAM,CAAA,EAAG;AACjB,UAAA,OAAO,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,QACzB;AACA,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,MAC1B;AACA,MAAA,OAAO,GAAG,MAAM,CAAA;AAAA,IAClB,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAO,aACL,OAAA,EACsB;AAEtB,IAAA,OAAO,YAAA,CAAY,OAAA;AAAA,MACjB;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,qBACL,OAAA,EACsB;AAEtB,IAAA,OAAO,IAAI,YAAA;AAAA,MAAY,YACrB,eAAA,CAAgB,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,EAAA,KAAO,EAAA,CAAG,OAAA,EAAS,CAAC,CAAC;AAAA,KACtE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAO,EAAA,EAAwC;AAC7C,IAAA,OAAO,IAAI,aAAY,YAAY,GAAA,CAAI,MAAM,IAAA,CAAK,OAAA,EAAQ,EAAG,EAAE,CAAC,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAU,EAAA,EAAwC;AAChD,IAAA,OAAO,IAAI,aAAY,YAAY,MAAA,CAAO,MAAM,IAAA,CAAK,OAAA,EAAQ,EAAG,EAAE,CAAC,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,QAAkB,EAAA,EAA2E;AAC3F,IAAA,OAAO,IAAI,aAAsB,YAAY;AAC3C,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,OAAA,EAAQ;AACjC,MAAA,IAAI,KAAA,CAAM,KAAK,CAAA,EAAG;AAChB,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,IAAA,GAAO,EAAA,CAAG,KAAA,CAAM,KAAK,CAAA;AAC3B,MAAA,OAAO,IAAA,YAAgB,YAAA,GAAc,IAAA,CAAK,OAAA,EAAQ,GAAI,IAAA;AAAA,IACxD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,QAAkB,EAAA,EAA2E;AAC3F,IAAA,OAAO,IAAA,CAAK,QAAQ,EAAE,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,QAAW,EAAA,EAAuE;AAChF,IAAA,OAAO,IAAI,aAAkB,YAAY;AACvC,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,OAAA,EAAQ;AACjC,MAAA,IAAI,CAAC,KAAA,CAAM,KAAK,CAAA,EAAG;AACjB,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,IAAA,GAAO,EAAA,CAAG,KAAA,CAAM,KAAK,CAAA;AAC3B,MAAA,OAAO,IAAA,YAAgB,YAAA,GAAc,IAAA,CAAK,OAAA,EAAQ,GAAI,IAAA;AAAA,IACxD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAU,EAAA,EAAuE;AAC/E,IAAA,OAAO,IAAA,CAAK,QAAQ,EAAE,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAI,EAAA,EAA2C;AAC7C,IAAA,OAAO,IAAI,aAAY,YAAY;AACjC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,EAAQ;AAClC,MAAA,IAAI,CAAC,KAAA,CAAM,MAAM,CAAA,EAAG;AAClB,QAAA,EAAA,CAAG,OAAO,KAAK,CAAA;AAAA,MACjB;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,EAAA,EAA2C;AAChD,IAAA,OAAO,IAAI,aAAY,YAAY;AACjC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,EAAQ;AAClC,MAAA,IAAI,KAAA,CAAM,MAAM,CAAA,EAAG;AACjB,QAAA,EAAA,CAAG,OAAO,KAAK,CAAA;AAAA,MACjB;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAAY,YAAA,EAAiC;AAC3C,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,CAAE,IAAA,CAAK,CAAC,MAAA,KAAY,KAAA,CAAM,MAAM,CAAA,GAAI,YAAA,GAAe,MAAA,CAAO,KAAM,CAAA;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,KAAA,CAAmB,MAAwB,KAAA,EAA2C;AACpF,IAAA,OAAO,IAAA,CAAK,SAAQ,CAAE,IAAA;AAAA,MAAK,CAAC,MAAA,KAC1B,KAAA,CAAM,MAAM,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,KAAK;AAAA,KACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAA,GAAiC;AAC/B,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,IAAA,CAAK,OAAA,GAAU,KAAK,GAAA,EAAI;AAAA,IAC1B;AACA,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAA,CACE,aACA,UAAA,EACkB;AAClB,IAAA,OAAO,IAAA,CAAK,SAAQ,CAAE,IAAA;AAAA;AAAA,MAEpB,CAAC,CAAA,KAAO,WAAA,GAAc,WAAA,CAAY,CAAC,CAAA,GAAK,CAAA;AAAA,MACxC,UAAA,IAAc;AAAA,KAChB;AAAA,EACF;AACF,CAAA;;;AC7aO,IAAM,OAAA,GAAU,CAAO,OAAA,KAAqD;AACjF,EAAA,MAAM,SAAc,EAAC;AACrB,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,MAAM,MAAM,CAAA,EAAG,OAAO,GAAA,CAAI,OAAO,KAAK,CAAA;AAC1C,IAAA,MAAA,CAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,GAAG,MAAM,CAAA;AAClB,CAAA;AAqBO,IAAM,eAAe,CAC1B,OAAA;AAAA;AAAA,EAGA,QAAQ,OAA8C;AAAA,CAAA;;;AC3BjD,IAAM,YAAA,GAAN,MAAM,aAAA,CAAmB;AAAA,EAC9B,YAAqB,KAAA,EAAyB;AAAzB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAA0B;AAAA,EAA1B,KAAA;AAAA,EAErB,OAAO,aAAA,CACL,EAAA,EACA,OAAA,EACoC;AACpC,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAA;AACnC,IAAA,OAAO,IAAI,IAAA,KAAY,IAAI,cAAa,OAAA,CAAQ,GAAG,IAAI,CAAC,CAAA;AAAA,EAC1D;AAAA,EAEA,OAAO,QACL,OAAA,EACuC;AACvC,IAAA,OAAO,IAAI,aAAA;AAAA,MACT,aAAa,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC;AAAA,KAC1C;AAAA,EACF;AAAA,EAEA,IAAI,KAAA,GAAW;AACb,IAAA,OAAO,KAAK,aAAA,EAAc;AAAA,EAC5B;AAAA,EAEA,IAAI,KAAA,GAAW;AACb,IAAA,OAAO,KAAK,gBAAA,EAAiB;AAAA,EAC/B;AAAA,EAEA,IAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACxB;AAAA,EAEA,KAAA,GAAiB;AACf,IAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,EACzB;AAAA,EAEA,IAAO,EAAA,EAAyC;AAC9C,IAAA,OAAO,IAAI,aAAA,CAAa,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,EAC7C;AAAA,EAEA,OAAU,EAAA,EAAyC;AACjD,IAAA,OAAO,IAAI,aAAA,CAAa,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,EAChD;AAAA,EAEA,QAAkB,EAAA,EAA8D;AAC9E,IAAA,OAAO,IAAI,aAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,CAAC,KAAA,KAAU,EAAA,CAAG,KAAK,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,EACzE;AAAA,EAEA,aACE,EAAA,EAC6B;AAC7B,IAAA,OAAO,MAAM,IAAA,CAAK,KAAK,IACnB,iBAAA,CAAkB,GAAA,CAAI,KAAK,KAAA,CAAM,KAAK,CAAA,GACtC,iBAAA,CAAkB,UAAU,iBAAA,CAAkB,EAAA,CAAG,KAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAAA,EACzE;AAAA,EAEA,OAAU,EAAA,EAA0D;AAClE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,GAAI,IAAI,aAAA,CAAmB,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA,CAAG,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,EACpF;AAAA,EAEA,KAAA,CAAmB,MAAwB,KAAA,EAAkC;AAC3E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,EAC3E;AAAA,EAEA,SAAY,YAAA,EAAwB;AAClC,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,KAAA,EAA+B,YAAY,CAAA;AAAA,EAClE;AAAA,EAEA,aAAA,GAAmB;AACjB,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA,EACpB;AAAA,EAEA,gBAAA,GAAsB;AACpB,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,EAAG;AACpB,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA,EACpB;AACF;AAEO,IAAM,MAAA,GAAS;AAGf,IAAMA,MAAK,CAAe,KAAA,KAAiC,IAAI,YAAA,CAAa,EAAA,CAAO,KAAK,CAAC;AACzF,IAAMC,OAAM,CAAyB,KAAA,KAC1C,IAAI,YAAA,CAAa,GAAA,CAAQ,KAAK,CAAC;AAG1B,IAAM,iBAAA,GAAN,MAAM,kBAAA,CAAmE;AAAA,EACtE,YAA6B,KAAA,EAA8B;AAA9B,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAA+B;AAAA,EAA/B,KAAA;AAAA,EAErC,OAAO,UAAgB,KAAA,EAAuD;AAC5E,IAAA,OAAO,IAAI,mBAAkB,KAAK,CAAA;AAAA,EACpC;AAAA,EAEA,MAAA,GAAgC;AAC9B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,OAAO,GAAiB,KAAA,EAAmC;AACzD,IAAA,OAAO,IAAI,kBAAA,CAAkB,WAAA,CAAgB,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,EACxD;AAAA,EAEA,OAAO,IAA4B,KAAA,EAAmC;AACpE,IAAA,OAAO,IAAI,kBAAA,CAAkB,WAAA,CAAgB,GAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EAC/D;AAAA,EAEA,OAAO,WAAA,CACL,OAAA,EACA,QAAA,EACyB;AACzB,IAAA,OAAO,IAAI,kBAAA,CAAkB,WAAA,CAAgB,WAAA,CAAY,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,EAC7E;AAAA,EAEA,OAAO,gBAA8B,OAAA,EAAkD;AACrF,IAAA,OAAO,IAAI,kBAAA,CAAkB,WAAA,CAAgB,eAAA,CAAsB,OAAO,CAAC,CAAA;AAAA,EAC7E;AAAA,EAEA,OAAO,aAAA,CACL,EAAA,EACA,OAAA,EACyC;AACzC,IAAA,OAAO,CAAA,GAAI,SAAY,kBAAA,CAAkB,WAAA,CAAY,GAAG,GAAG,IAAI,GAAG,OAAO,CAAA;AAAA,EAC3E;AAAA,EAEA,OAAO,QACL,OAAA,EACsD;AACtD,IAAA,OAAO,IAAI,kBAAA;AAAA,MACT,WAAA,CAAgB,QAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC;AAAA,KAIrD;AAAA,EACF;AAAA;AAAA,EAGA,IAAA,CACE,aACA,UAAA,EACkB;AAClB,IAAA,OAAO,KAAK,KAAA,CAAM,OAAA,EAAQ,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM;AACtC,MAAA,MAAM,OAAA,GAAU,IAAI,YAAA,CAAa,CAAC,CAAA;AAElC,MAAA,OAAO,WAAA,GAAc,WAAA,CAAY,OAAO,CAAA,GAAK,OAAA;AAAA,IAC/C,CAAA,EAAG,cAAc,MAAS,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAA,GAAqC;AACnC,IAAA,OAAO,IAAA,CAAK,MAAM,OAAA,EAAQ;AAAA,EAC5B;AAAA,EAEA,IAAO,EAAA,EAA8C;AACnD,IAAA,OAAO,IAAI,kBAAA,CAAkB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,EACjD;AAAA,EAEA,OAAU,EAAA,EAA8C;AACtD,IAAA,OAAO,IAAI,kBAAA,CAAkB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,EACpD;AAAA,EAEA,QACE,EAAA,EACkD;AAClD,IAAA,OAAO,IAAI,kBAAA,CAAkB,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,KAAA,KAAU,YAAA,CAAa,EAAA,CAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AAAA,EACrF;AAAA,EAEA,MAAsC,EAAA,EAAqB;AACzD,IAAA,OAAO,IAAA,CAAK,QAAQ,EAAE,CAAA;AAAA,EACxB;AAAA,EAEA,QAAwC,EAAA,EAAqB;AAC3D,IAAA,OAAO,IAAA,CAAK,QAAQ,EAAE,CAAA;AAAA,EACxB;AAAA,EAEA,OACE,EAAA,EACkD;AAClD,IAAA,OAAO,IAAI,kBAAA;AAAA,MACT,KAAK,KAAA,CAAM,MAAA;AAAA,QACT,CAAC,KAAA,KACC,YAAA,CAAa,EAAA,CAAG,KAAK,CAAC;AAAA;AAC1B,KACF;AAAA,EACF;AAAA,EAEA,SAAY,YAAA,EAAiC;AAC3C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA;AAAA,EACzC;AAAA,EAEA,IAAA,GAAyB;AACvB,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA,MAChB,MAAM,IAAA;AAAA,MACN,MAAM;AAAA,KACR;AAAA,EACF;AAAA,EAEA,KAAA,GAA0B;AACxB,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA,MAChB,MAAM,KAAA;AAAA,MACN,MAAM;AAAA,KACR;AAAA,EACF;AAAA,EAEA,KAAA,CAAmB,MAAwB,KAAA,EAA2C;AACpF,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAAA,EACrC;AAAA,EAEA,OAAO,EAAA,EAAiE;AACtE,IAAA,OAAO,IAAI,kBAAA;AAAA,MACT,WAAA,CAAgB,MAAM,YAAY;AAChC,QAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,KAAA,CAAM,OAAA,EAAQ;AACnC,QAAA,IAAI,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG;AACb,UAAA,IAAI;AACF,YAAA,MAAM,EAAA,CAAG,EAAE,KAAK,CAAA;AAAA,UAClB,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AACA,QAAA,OAAO,CAAA;AAAA,MACT,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EAEA,MAAM,EAAA,EAAiE;AACrE,IAAA,OAAO,IAAI,kBAAA;AAAA,MACT,WAAA,CAAgB,MAAM,YAAY;AAChC,QAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,KAAA,CAAM,OAAA,EAAQ;AACnC,QAAA,IAAI,KAAA,CAAM,CAAC,CAAA,EAAG;AACZ,UAAA,IAAI;AACF,YAAA,MAAM,EAAA,CAAG,EAAE,KAAK,CAAA;AAAA,UAClB,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AACA,QAAA,OAAO,CAAA;AAAA,MACT,CAAC;AAAA,KACH;AAAA,EACF;AACF;AA2BA,SAAS,aACP,IAAA,EACkE;AAClE,EAAA,IAAI,IAAA,YAAgB,iBAAA,EAAmB,OAAO,IAAA,CAAK,MAAA,EAAO;AAC1D,EAAA,IAAI,IAAA,YAAgB,aAAiB,OAAO,IAAA;AAC5C,EAAA,IAAI,IAAA,YAAgB,YAAA,EAAc,OAAO,IAAA,CAAK,KAAA;AAC9C,EAAA,OAAO,IAAA;AACT;AAGA,IAAM,oBAAoB,CACxB,IAAA,KAC2B,gBAAgB,iBAAA,GAAoB,IAAA,CAAK,QAAO,GAAI,IAAA;AAI1E,IAAM,UAAU,iBAAA,CAAkB;AAClC,IAAM,WAAW,iBAAA,CAAkB;AACnC,IAAM,cAAc,iBAAA,CAAkB;AACtC,IAAM,kBAAkB,iBAAA,CAAkB","file":"neverthrow.cjs","sourcesContent":["/**\n * @onrails/result internal — owning module for the **dual-form idiom**.\n *\n * Every dual-form transform in this package (`map`, `flatMap`, `match`, …)\n * accepts either shape:\n *\n *   data-first: `map(result, fn)`  — full arity, runs immediately\n *   curried:    `map(fn)(result)`  — arity minus the leading `self`, returns\n *                                    a unary function awaiting the data\n *\n * {@link dual} is the single arity dispatcher those transforms derive from;\n * hand-rolled `args.length` checks are not allowed elsewhere.\n *\n * NOTE: a twin copy of this module lives at `packages/maybe/src/internal/dual.ts`\n * — keep the two in sync when editing.\n *\n * Internal only: not listed in package.json `exports` or tsup entries.\n */\n\n/**\n * Derive a dual-form (data-first / curried) function from a single\n * data-first `body`.\n *\n * When called with `args.length >= arity` the wrapper runs `body(...args)`\n * (data-first). With fewer arguments it returns `(self) => body(self, ...args)`\n * — the curried, data-last-`self` form used with `pipe`/`flow`.\n *\n * The public type is supplied entirely by the caller: annotate the exported\n * const with the exact overload set and let `F` be inferred from it.\n *\n * @example\n * ```ts\n * export const map: {\n *   <T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E>;\n *   <T, U>(fn: (value: T) => U): <E>(result: Result<T, E>) => Result<U, E>;\n * } = dual(\n *   2,\n *   <T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> =>\n *     isOk(result) ? ok(fn(result.value)) : err(result.error),\n * );\n * ```\n */\nexport const dual = <F>(arity: number, body: (...args: never[]) => unknown): F => {\n  // `(...args: never[]) => unknown` is the top function type, so every typed\n  // body is assignable to the parameter — but it cannot be invoked with\n  // `unknown` arguments. Re-view it through the variadic shape the dispatcher\n  // actually forwards; the constraint is that `body` only ever receives the\n  // arguments the caller's overload annotation admitted.\n  const run = body as (...args: readonly unknown[]) => unknown;\n  const dispatcher = (...args: readonly unknown[]): unknown =>\n    args.length >= arity ? run(...args) : (self: unknown) => run(self, ...args);\n  // The caller's overload annotation on the exported const supplies the real\n  // public type; internally the dispatcher stays `unknown`-typed.\n  return dispatcher as F;\n};\n","import { dual } from \"./internal/dual.js\";\nimport type { Err, Ok, Result } from \"./types.js\";\n\nexport type { Err, Ok, Result } from \"./types.js\";\n\n/**\n * Lifts a value into the success track.\n *\n * @example\n * ```ts\n * const r = ok(42);                          // Result<number, never>\n * const typed: Result<number, \"parse\"> = ok(1);\n * ```\n */\nexport const ok = <T, E = never>(value: T): Result<T, E> => ({\n  _tag: \"Ok\",\n  value,\n});\n\n/**\n * Fantasy Land `pure` — alias of {@link ok}. One lift name shared across the\n * trio (`of` / `Maybe.of` / `ResultAsync.of`) for generic and FL-style code.\n *\n * @example\n * ```ts\n * const r = of(42);   // Result<number, never> — identical to ok(42)\n * ```\n */\nexport const of = ok;\n\n/**\n * Lifts a value into the error track.\n *\n * @example\n * ```ts\n * const r = err({ kind: \"parse\", message: \"bad json\" });\n * // Result<never, { kind: \"parse\"; message: string }>\n * ```\n */\nexport const err = <T = never, E = unknown>(error: E): Result<T, E> => ({\n  _tag: \"Err\",\n  error,\n});\n\n/**\n * Type-narrowing predicate: returns `true` when the result is `Ok`.\n *\n * @example\n * ```ts\n * if (isOk(r)) {\n *   console.log(r.value);    // narrowed to Ok branch\n * }\n * ```\n */\nexport const isOk = <T, E>(result: Result<T, E>): result is Ok<T, E> => result._tag === \"Ok\";\n\n/**\n * Type-narrowing predicate: returns `true` when the result is `Err`.\n *\n * @example\n * ```ts\n * if (isErr(r)) {\n *   metrics.inc(\"error\", { kind: r.error.kind });\n * }\n * ```\n */\nexport const isErr = <T, E>(result: Result<T, E>): result is Err<T, E> => result._tag === \"Err\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Dual-form helpers — each export accepts either shape:\n//   data-first: `map(result, fn)`\n//   curried:    `map(fn)(result)`\n// Arity dispatch is derived from the internal `dual` combinator\n// (src/internal/dual.ts); the const annotation carries the public overloads.\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Transform the `Ok` value, passing `Err` through unchanged. Dual-form:\n * call data-first or curried (for use with {@link pipe}).\n *\n * @example\n * ```ts\n * map(ok(2), (n) => n * 3);          // Ok 6 — data-first\n * pipe(ok(\"x\"), map((s) => s.length));// Ok 1 — curried\n * ```\n */\nexport const map: {\n  <T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E>;\n  <T, U>(fn: (value: T) => U): <E>(result: Result<T, E>) => Result<U, E>;\n} = dual(\n  2,\n  <T, U, E>(result: Result<T, E>, fn: (value: T) => U): Result<U, E> =>\n    isOk(result) ? ok(fn(result.value)) : err(result.error),\n);\n\n/**\n * Transform the `Err` value, passing `Ok` through unchanged. Useful for\n * unifying heterogeneous failure types into one app-level union.\n *\n * @example\n * ```ts\n * type AppError = { kind: \"http\"; status: number } | { kind: \"parse\" };\n * pipe(\n *   fetchSync(url),                                     // Result<Body, { status: number }>\n *   mapErr((e): AppError => ({ kind: \"http\", status: e.status })),\n * );\n * ```\n */\nexport const mapErr: {\n  <T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F>;\n  <E, F>(fn: (error: E) => F): <T>(result: Result<T, E>) => Result<T, F>;\n} = dual(\n  2,\n  <T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F> =>\n    isErr(result) ? err(fn(result.error)) : ok(result.value),\n);\n\n/**\n * Transform both tracks at once — `Ok` via `onOk`, `Err` via `onErr`.\n * Equivalent to `mapErr(onErr)(map(onOk)(result))` but in one pass.\n *\n * @example\n * ```ts\n * bimap(parsed, (cfg) => cfg.name, (e) => ({ kind: \"input\", cause: e }));\n * ```\n */\nexport const bimap: {\n  <T, U, E, F>(result: Result<T, E>, onOk: (value: T) => U, onErr: (error: E) => F): Result<U, F>;\n  <T, U, E, F>(\n    onOk: (value: T) => U,\n    onErr: (error: E) => F,\n  ): (result: Result<T, E>) => Result<U, F>;\n} = dual(\n  3,\n  <T, U, E, F>(\n    result: Result<T, E>,\n    onOk: (value: T) => U,\n    onErr: (error: E) => F,\n  ): Result<U, F> => (isOk(result) ? ok(onOk(result.value)) : err(onErr(result.error))),\n);\n\n/**\n * Canonical bind (Fantasy Land `chain`). Chains a Result-returning step,\n * widening the error union to `E | F`. Short-circuits on `Err`.\n *\n * @example\n * ```ts\n * flatMap(parseInput(raw), (data) =>\n *   data.id != null ? ok(data) : err({ kind: \"missing_id\" as const }),\n * );\n * // Result<Data, ParseError | { kind: \"missing_id\" }>\n * ```\n */\nexport const flatMap: {\n  <T, U, E, F>(result: Result<T, E>, fn: (value: T) => Result<U, F>): Result<U, E | F>;\n  <T, U, F>(fn: (value: T) => Result<U, F>): <E>(result: Result<T, E>) => Result<U, E | F>;\n} = dual(\n  2,\n  <T, U, E, F>(result: Result<T, E>, fn: (value: T) => Result<U, F>): Result<U, E | F> =>\n    isOk(result) ? fn(result.value) : err(result.error),\n);\n\n/**\n * Error-track bind — runs `fn` only when the result is `Err`, allowing\n * a failed workflow to recover to `Ok` or remap the failure. Mirror of\n * {@link flatMap} on the error channel.\n *\n * @example\n * ```ts\n * recover(networkResult, (e) =>\n *   e.kind === \"rate_limit\" ? ok(cachedBody) : err(e),\n * );\n * ```\n */\nexport const recover: {\n  <T, E, F>(result: Result<T, E>, fn: (error: E) => Result<T, F>): Result<T, F>;\n  <T, E, F>(fn: (error: E) => Result<T, F>): (result: Result<T, E>) => Result<T, F>;\n} = dual(\n  2,\n  <T, E, F>(result: Result<T, E>, fn: (error: E) => Result<T, F>): Result<T, F> =>\n    isErr(result) ? fn(result.error) : ok(result.value),\n);\n\n/**\n * Observe the `Ok` value for side effects (logging, metrics) without\n * changing the carried value. Passes `Err` through untouched.\n *\n * @example\n * ```ts\n * pipe(\n *   parseConfig(raw),\n *   tap((cfg) => log.info({ msg: \"parsed\", name: cfg.name })),\n *   flatMap(validate),\n * );\n * ```\n */\nexport const tap: {\n  <T, E>(result: Result<T, E>, fn: (value: T) => void): Result<T, E>;\n  <T>(fn: (value: T) => void): <E>(result: Result<T, E>) => Result<T, E>;\n} = dual(2, <T, E>(result: Result<T, E>, fn: (value: T) => void): Result<T, E> => {\n  if (isOk(result)) fn(result.value);\n  return result;\n});\n\n/**\n * Observe the `Err` value for side effects (logging, metrics) without\n * changing the carried error. Passes `Ok` through untouched.\n *\n * @example\n * ```ts\n * pipe(\n *   loadUser(id),\n *   tapErr((e) => metrics.inc(\"user.load.fail\", { kind: e.kind })),\n * );\n * ```\n */\nexport const tapErr: {\n  <T, E>(result: Result<T, E>, fn: (error: E) => void): Result<T, E>;\n  <E>(fn: (error: E) => void): <T>(result: Result<T, E>) => Result<T, E>;\n} = dual(2, <T, E>(result: Result<T, E>, fn: (error: E) => void): Result<T, E> => {\n  if (isErr(result)) fn(result.error);\n  return result;\n});\n\n/**\n * Terminal collapse — fold both tracks into a single value. Dual-form:\n * 3-args data-first, 2-args curried for {@link pipe}. Returns whatever\n * the handlers return.\n *\n * For files that also import `match` from `ts-pattern`, use a namespace\n * import (`import * as R from \"@onrails/result\"` → `R.match`) to dissolve\n * the collision.\n *\n * @example\n * ```ts\n * const html = match(parsed, (cfg) => render(cfg), (e) => renderError(e));\n * ```\n */\nexport const match: {\n  <T, E, U>(result: Result<T, E>, onOk: (value: T) => U, onErr: (error: E) => U): U;\n  <T, E, U>(onOk: (value: T) => U, onErr: (error: E) => U): (result: Result<T, E>) => U;\n} = dual(\n  3,\n  <T, E, U>(result: Result<T, E>, onOk: (value: T) => U, onErr: (error: E) => U): U =>\n    isOk(result) ? onOk(result.value) : onErr(result.error),\n);\n\n/**\n * Returns the `Ok` value, or `defaultValue` when the result is `Err`.\n *\n * @example\n * ```ts\n * unwrapOr(parsedSetting, \"default-value\");\n * ```\n */\nexport const unwrapOr: {\n  <T, E>(result: Result<T, E>, defaultValue: T): T;\n  <T>(defaultValue: T): <E>(result: Result<T, E>) => T;\n} = dual(\n  2,\n  <T, E>(result: Result<T, E>, defaultValue: T): T => (isOk(result) ? result.value : defaultValue),\n);\n\n/**\n * Test/assert helper — returns the `Ok` value, or **throws the original `Err`\n * value** when called on an `Err`. This is the assertion tier (RFC 0001 §4):\n * intended for `*.spec.ts` / `*.test.ts`, where throwing fails the test loudly.\n * In business logic prefer {@link match} or {@link unwrapOr}; the lint plugins\n * flag `unwrapOk` outside test files.\n *\n * @returns the unwrapped `Ok` value\n * @throws the carried `Err` value when the result is `Err`\n *\n * @example\n * ```ts\n * // in a *.spec.ts\n * expect(unwrapOk(ok(5))).toBe(5);\n * expect(() => unwrapOk(err(error))).toThrow(error);\n * ```\n */\nexport function unwrapOk<T, E>(result: Result<T, E>): T {\n  if (isErr(result)) throw result.error;\n  return result.value;\n}\n\n/** Alias of {@link unwrapOk} for syntax cohesion with `@onrails/maybe`. */\nexport const unwrap = unwrapOk;\n\n/**\n * Test/assert helper — returns the `Err` value, or **throws a `TypeError`**\n * when called on an `Ok`. Mirror of {@link unwrapOk} on the error track and\n * part of the same assertion tier (RFC 0001 §4): intended for `*.spec.ts` /\n * `*.test.ts`. Prefer {@link match} / {@link unwrapOr} in business logic; the\n * lint plugins flag `unwrapErr` outside test files.\n *\n * @returns the unwrapped `Err` value\n * @throws `TypeError` when the result is `Ok`\n *\n * @example\n * ```ts\n * // in a *.spec.ts\n * expect(unwrapErr(err(\"x\"))).toBe(\"x\");\n * expect(() => unwrapErr(ok(5))).toThrow(TypeError);\n * ```\n */\nexport function unwrapErr<T, E>(result: Result<T, E>): E {\n  if (isOk(result)) throw new TypeError(\"unwrapErr called on Ok\");\n  return result.error;\n}\n\n/**\n * Wraps a throwing sync function, returning a function that produces a\n * {@link Result} instead of throwing. Thrown errors pass through `onThrow` to\n * become a typed `Err`; a normal return becomes `Ok`. The neverthrow analogue\n * is `Result.fromThrowable`.\n *\n * @param fn - the throwing function to wrap\n * @param onThrow - maps a thrown value to the `Err` channel\n * @returns a function with `fn`'s parameters that returns `Result<ReturnType, E>`\n *\n * @example\n * ```ts\n * type ParseError = { kind: \"parse\"; message: string };\n * const parse = trySync(\n *   JSON.parse,\n *   (e): ParseError => ({ kind: \"parse\", message: String(e) }),\n * );\n * parse(\"{}\");      // Ok({})\n * parse(\"nope\");    // Err({ kind: \"parse\", … })\n * ```\n */\nexport function trySync<A extends readonly unknown[], T, E>(\n  fn: (...args: A) => T,\n  onThrow: (error: unknown) => E,\n): (...args: A) => Result<T, E>;\nexport function trySync<F extends (...args: never) => unknown, E>(\n  fn: F,\n  onThrow: (error: unknown) => E,\n): (...args: Parameters<F>) => Result<ReturnType<F>, E>;\nexport function trySync(\n  fn: (...args: never) => unknown,\n  onThrow: (error: unknown) => unknown,\n): (...args: never) => Result<unknown, unknown> {\n  return (...args: never) => {\n    try {\n      return ok(fn(...args));\n    } catch (error) {\n      return err(onThrow(error));\n    }\n  };\n}\n\n/**\n * Variadic value-first pipe — threads `value` through up to nine unary fns,\n * left-to-right. Use {@link pipe} when you already have a starting value;\n * use {@link flow} to define a reusable composed function with no value yet.\n *\n * @example\n * ```ts\n * pipe(\n *   parseConfig(raw),\n *   map((cfg) => cfg.name),\n *   flatMap((name) => (name ? ok(name) : err({ kind: \"empty\" as const }))),\n *   tap(log),\n * );\n * ```\n */\nexport function pipe<A>(value: A): A;\nexport function pipe<A, B>(value: A, ab: (a: A) => B): B;\nexport function pipe<A, B, C>(value: A, ab: (a: A) => B, bc: (b: B) => C): C;\nexport function pipe<A, B, C, D>(value: A, ab: (a: A) => B, bc: (b: B) => C, cd: (c: C) => D): D;\nexport function pipe<A, B, C, D, E>(\n  value: A,\n  ab: (a: A) => B,\n  bc: (b: B) => C,\n  cd: (c: C) => D,\n  de: (d: D) => E,\n): E;\nexport function pipe<A, B, C, D, E, F>(\n  value: A,\n  ab: (a: A) => B,\n  bc: (b: B) => C,\n  cd: (c: C) => D,\n  de: (d: D) => E,\n  ef: (e: E) => F,\n): F;\nexport function pipe<A, B, C, D, E, F, G>(\n  value: A,\n  ab: (a: A) => B,\n  bc: (b: B) => C,\n  cd: (c: C) => D,\n  de: (d: D) => E,\n  ef: (e: E) => F,\n  fg: (f: F) => G,\n): G;\nexport function pipe<A, B, C, D, E, F, G, H>(\n  value: A,\n  ab: (a: A) => B,\n  bc: (b: B) => C,\n  cd: (c: C) => D,\n  de: (d: D) => E,\n  ef: (e: E) => F,\n  fg: (f: F) => G,\n  gh: (g: G) => H,\n): H;\nexport function pipe<A, B, C, D, E, F, G, H, I>(\n  value: A,\n  ab: (a: A) => B,\n  bc: (b: B) => C,\n  cd: (c: C) => D,\n  de: (d: D) => E,\n  ef: (e: E) => F,\n  fg: (f: F) => G,\n  gh: (g: G) => H,\n  hi: (h: H) => I,\n): I;\nexport function pipe(value: unknown, ...fns: ReadonlyArray<(x: unknown) => unknown>): unknown {\n  let acc = value;\n  for (const fn of fns) {\n    acc = fn(acc);\n  }\n  return acc;\n}\n\nconst printPayload = (payload: unknown): string => {\n  try {\n    return JSON.stringify(payload) ?? String(payload);\n  } catch {\n    // cyclic or non-JSON payload — a debug printer must not throw\n    return String(payload);\n  }\n};\n\n/**\n * Debug printer — renders a result as `Ok(…)` / `Err(…)` for logs. Payloads\n * print as JSON (values are plain data by design); non-JSON payloads fall\n * back to `String(...)`.\n *\n * @example\n * ```ts\n * show(ok(1));               // 'Ok(1)'\n * show(err({ kind: \"e\" })); // 'Err({\"kind\":\"e\"})'\n * ```\n */\nexport const show = <T, E>(result: Result<T, E>): string =>\n  isOk(result) ? `Ok(${printPayload(result.value)})` : `Err(${printPayload(result.error)})`;\n","/**\n * The core railway type: a tagged union carrying either a success value\n * (`Ok<T>`) or a failure value (`Err<E>`). It is a plain discriminated union\n * on `_tag` — no classes — so it is immutable and tree-shake friendly. Narrow\n * with {@link isOk} / {@link isErr} to read `.value` / `.error`.\n *\n * @typeParam T - the `Ok` value type\n * @typeParam E - the `Err` error type\n *\n * @example\n * ```ts\n * function parse(raw: string): Result<number, \"nan\"> {\n *   const n = Number(raw);\n *   return Number.isNaN(n) ? err(\"nan\") : ok(n);\n * }\n * ```\n */\nexport type Result<T, E> =\n  | { readonly _tag: \"Ok\"; readonly value: T }\n  | { readonly _tag: \"Err\"; readonly error: E };\n\n/**\n * The success branch of a {@link Result} — `{ _tag: \"Ok\"; value: T }`.\n * The `E` parameter keeps the type assignable to `Result<T, E>`.\n */\nexport type Ok<T, E = never> = Extract<Result<T, E>, { _tag: \"Ok\" }>;\n\n/**\n * The failure branch of a {@link Result} — `{ _tag: \"Err\"; error: E }`.\n */\nexport type Err<T, E> = Extract<Result<T, E>, { _tag: \"Err\" }>;\n\n/**\n * Error subclass representing an **unexpected** defect — a thrown exception or\n * promise rejection that was not part of the modelled `Err` union. Used as the\n * default mapping when {@link fromAsync} is called without an `onDefect`\n * handler; the original cause is preserved on `.cause`.\n *\n * @example\n * ```ts\n * const defect = new UnexpectedError(\"Unexpected async defect\", caught);\n * defect.cause; // the original thrown value\n * ```\n */\nexport class UnexpectedError extends Error {\n  constructor(\n    message: string,\n    override readonly cause?: unknown,\n  ) {\n    super(message);\n    this.name = \"UnexpectedError\";\n  }\n}\n","import type { InferErr, InferOk } from \"./internal/infer.js\";\nimport { err, isErr, map, mapErr, ok } from \"./result.js\";\nimport type { Result } from \"./types.js\";\nimport { UnexpectedError } from \"./types.js\";\n\ntype PromiseFactory<T, E> = () => Promise<Result<T, E>>;\ntype CombineTupleAsync<R extends readonly ResultAsync<unknown, unknown>[]> = ResultAsync<\n  { [K in keyof R]: InferOk<R[K]> },\n  { [K in keyof R]: InferErr<R[K]> }[number]\n>;\n\n/** Collapses settled results left-to-right, short-circuiting on the first `Err`. */\nconst sequenceSettled = (\n  settled: readonly Result<unknown, unknown>[],\n): Result<unknown[], unknown> => {\n  const values: unknown[] = [];\n  for (const result of settled) {\n    if (isErr(result)) {\n      return err(result.error);\n    }\n    values.push(result.value);\n  }\n  return ok(values);\n};\n\n/**\n * Async railway carrier. Wraps a deferred `Promise<Result<T, E>>` and exposes\n * the same dual-track transforms as the sync {@link Result} — `map`, `flatMap`,\n * `recover`, `tap`, `match`. The public API never surfaces `Promise<Result<…>>`\n * directly: `await` the instance (it is thenable) or call {@link resolve} /\n * {@link match} to settle it.\n *\n * Construct via the static factories ({@link ok}, {@link err}, {@link fromPromise},\n * {@link defer}, …) rather than `new` — the constructor is `protected`.\n *\n * @typeParam T - the `Ok` value type\n * @typeParam E - the `Err` error type\n *\n * @example\n * ```ts\n * const user = ResultAsync.fromPromise(api.getUser(id), toAppError)\n *   .map((u) => u.profile)\n *   .recover(() => ResultAsync.ok(guestProfile));\n *\n * const r = await user;          // Result<Profile, AppError>\n * ```\n */\nexport class ResultAsync<T, E> {\n  private promise: Promise<Result<T, E>> | null = null;\n\n  protected constructor(protected readonly run: PromiseFactory<T, E>) {}\n\n  /**\n   * Lifts an already-settled sync {@link Result} into a {@link ResultAsync}.\n   *\n   * @example\n   * ```ts\n   * const ra = ResultAsync.fromResult(ok(42));   // ResultAsync<number, never>\n   * ```\n   */\n  static fromResult<T, E>(result: Result<T, E>): ResultAsync<T, E> {\n    return new ResultAsync(async () => result);\n  }\n\n  /**\n   * Wraps a `PromiseLike<T>` that may reject. Rejections pass through `onReject`\n   * to become a typed `Err`; resolution becomes `Ok<T>`.\n   *\n   * @param promise - the promise to wrap\n   * @param onReject - maps a rejection reason to the `Err` channel\n   *\n   * @example\n   * ```ts\n   * const body = ResultAsync.fromPromise(\n   *   fetch(url).then((r) => r.text()),\n   *   (e): NetError => ({ kind: \"net\", cause: String(e) }),\n   * );\n   * ```\n   */\n  static fromPromise<T, E>(\n    promise: PromiseLike<T>,\n    onReject: (error: unknown) => E,\n  ): ResultAsync<T, E> {\n    return new ResultAsync(async () => {\n      try {\n        return ok(await promise);\n      } catch (error) {\n        return err(onReject(error));\n      }\n    });\n  }\n\n  /**\n   * Wraps a `PromiseLike<T>` that is **guaranteed not to reject**, skipping the\n   * `onReject` mapper. Use only when rejection is provably impossible.\n   *\n   * @example\n   * ```ts\n   * const now = ResultAsync.fromSafePromise(Promise.resolve(Date.now()));\n   * ```\n   */\n  static fromSafePromise<T, E = never>(promise: PromiseLike<T>): ResultAsync<T, E> {\n    return new ResultAsync(async () => ok(await promise));\n  }\n\n  /**\n   * Defers work until {@link resolve}. Unlike {@link fromPromise}, the factory\n   * does not run until the `ResultAsync` is resolved (e.g. by `combineTuple` /\n   * `combineTupleParallel`). The factory runs at most once — `resolve` memoizes.\n   *\n   * @example\n   * ```ts\n   * const insert = ResultAsync.defer(() => db.orders.insert(row));\n   * // nothing has run yet\n   * const r = await insert;   // factory runs exactly once here\n   * ```\n   */\n  static defer<T, E>(fn: () => Promise<Result<T, E>>): ResultAsync<T, E> {\n    return new ResultAsync(fn);\n  }\n\n  /**\n   * Lifts a value into an `Ok` async result.\n   *\n   * @example\n   * ```ts\n   * const r = ResultAsync.ok(42);   // ResultAsync<number, never>\n   * ```\n   */\n  static ok<T>(value: T): ResultAsync<T, never>;\n  static ok<T, E>(value: T): ResultAsync<T, E>;\n  static ok<T, E = never>(value: T): ResultAsync<T, E> {\n    return new ResultAsync(async () => ok(value));\n  }\n\n  /**\n   * Fantasy Land `pure` — alias of {@link ResultAsync.ok}. One lift name\n   * shared across the trio (`of` / `Maybe.of` / `ResultAsync.of`).\n   */\n  static of<T>(value: T): ResultAsync<T, never>;\n  static of<T, E>(value: T): ResultAsync<T, E>;\n  static of<T, E = never>(value: T): ResultAsync<T, E> {\n    return ResultAsync.ok(value);\n  }\n\n  /**\n   * Lifts an error into an `Err` async result.\n   *\n   * @example\n   * ```ts\n   * const r = ResultAsync.err({ kind: \"not_found\" as const });\n   * ```\n   */\n  static err<T = never, E = unknown>(error: E): ResultAsync<T, E> {\n    return new ResultAsync(async () => err(error));\n  }\n\n  /**\n   * Lifts an existing `Promise<Result<T, E>>` (e.g. from interop code) into a\n   * {@link ResultAsync}. A thrown defect is routed through `onDefect`,\n   * defaulting to {@link UnexpectedError}. The `Ok` value passes through\n   * verbatim — even when it happens to be Result-shaped.\n   *\n   * @param promise - a promise that already yields a `Result`\n   * @param onDefect - maps an unexpected throw to the `Err` channel\n   * @see {@link fromAsync} from `@onrails/result`\n   */\n  static fromResultPromise<T, E>(\n    promise: Promise<Result<T, E>>,\n    onDefect?: (error: unknown) => E | UnexpectedError,\n  ): ResultAsync<T, E | UnexpectedError> {\n    const mapDefect =\n      onDefect ?? ((error: unknown) => new UnexpectedError(\"Unexpected async defect\", error));\n    return new ResultAsync<T, E | UnexpectedError>(async () => {\n      try {\n        return await promise;\n      } catch (error) {\n        return err(mapDefect(error));\n      }\n    });\n  }\n\n  /**\n   * Combines a homogeneous array of async results into one. Resolves\n   * **sequentially** in input order, short-circuiting on the first `Err`.\n   * For heterogeneous tuples that preserve per-index types, use\n   * {@link combineTuple}; for wall-clock overlap, {@link combineTupleParallel}.\n   *\n   * @example\n   * ```ts\n   * const all = ResultAsync.combine([loadA(), loadB(), loadC()]);\n   * // ResultAsync<Item[], LoadError>\n   * ```\n   */\n  static combine<T, E>(results: readonly ResultAsync<T, E>[]): ResultAsync<T[], E> {\n    return new ResultAsync(async () => {\n      const values: T[] = [];\n      for (const ra of results) {\n        const result = await ra.resolve();\n        if (isErr(result)) {\n          return err(result.error);\n        }\n        values.push(result.value);\n      }\n      return ok(values);\n    });\n  }\n\n  /**\n   * Heterogeneous async tuple combine — resolves branches **sequentially**\n   * (left-to-right), returning the first `Err` in input order. Preserves each\n   * branch's `Ok` type by position, so the result destructures type-safely.\n   * This is the canonical sequential async combine (replaces the former\n   * `sequenceTupleAsync`).\n   *\n   * @example\n   * ```ts\n   * const combined = ResultAsync.combineTuple([loadCfg(), loadCatalog()] as const);\n   * // ResultAsync<readonly [Cfg, Catalog], CfgError | CatalogError>\n   * const r = await combined;\n   * if (isOk(r)) {\n   *   const [cfg, catalog] = r.value;  // typed per position\n   * }\n   * ```\n   */\n  static combineTuple<const R extends readonly ResultAsync<unknown, unknown>[]>(\n    results: R,\n  ): CombineTupleAsync<R> {\n    // Runtime identical to combine; the cast restores per-index tuple types.\n    return ResultAsync.combine(\n      results as readonly ResultAsync<unknown, unknown>[],\n    ) as CombineTupleAsync<R>;\n  }\n\n  /**\n   * Like {@link combineTuple}, but starts every branch before awaiting (wall-clock\n   * parallel for independent IO). On failure, returns the first `Err` in input order.\n   *\n   * @example\n   * ```ts\n   * // independent IO — overlap them\n   * const combined = ResultAsync.combineTupleParallel([\n   *   loadProfile(id),\n   *   loadMetrics(id),\n   * ] as const);\n   * ```\n   */\n  static combineTupleParallel<const R extends readonly ResultAsync<unknown, unknown>[]>(\n    results: R,\n  ): CombineTupleAsync<R> {\n    // Cast restores per-index tuple types over the untyped sequence core.\n    return new ResultAsync(async () =>\n      sequenceSettled(await Promise.all(results.map((ra) => ra.resolve()))),\n    ) as CombineTupleAsync<R>;\n  }\n\n  /**\n   * Transforms the `Ok` value, passing `Err` through unchanged.\n   *\n   * @example\n   * ```ts\n   * ResultAsync.ok(2).map((n) => n * 3);   // ResultAsync<number> → Ok 6\n   * ```\n   */\n  map<U>(fn: (value: T) => U): ResultAsync<U, E> {\n    return new ResultAsync(async () => map(await this.resolve(), fn));\n  }\n\n  /**\n   * Transforms the `Err` value, passing `Ok` through unchanged — useful for\n   * unifying heterogeneous failures into one app-level union.\n   *\n   * @example\n   * ```ts\n   * load(id).mapErr((e): AppError => ({ kind: \"load\", cause: e })); // ResultAsync<T, AppError>\n   * ```\n   */\n  mapErr<F>(fn: (error: E) => F): ResultAsync<T, F> {\n    return new ResultAsync(async () => mapErr(await this.resolve(), fn));\n  }\n\n  /**\n   * Canonical bind — chains a step that itself returns a `ResultAsync` or sync\n   * `Result`, short-circuiting on `Err`. Error types accumulate (`E | F`).\n   *\n   * @example\n   * ```ts\n   * authenticate(req)\n   *   .flatMap((user) => loadProfile(user.id))   // ResultAsync\n   *   .flatMap((p) => validate(p));              // sync Result also accepted\n   * ```\n   */\n  flatMap<U, F = E>(fn: (value: T) => ResultAsync<U, F> | Result<U, F>): ResultAsync<U, E | F> {\n    return new ResultAsync<U, E | F>(async () => {\n      const first = await this.resolve();\n      if (isErr(first)) {\n        return first;\n      }\n      const next = fn(first.value);\n      return next instanceof ResultAsync ? next.resolve() : next;\n    });\n  }\n\n  /**\n   * neverthrow-compat alias of {@link flatMap}. Kept as the documented compat\n   * tier; prefer {@link flatMap} in new code.\n   *\n   * @example\n   * ```ts\n   * authenticate(req).andThen((user) => loadProfile(user.id));\n   * ```\n   */\n  andThen<U, F = E>(fn: (value: T) => ResultAsync<U, F> | Result<U, F>): ResultAsync<U, E | F> {\n    return this.flatMap(fn);\n  }\n\n  /**\n   * Error-channel bind — runs `fn` only on `Err`, swapping in a recovery\n   * `ResultAsync` or sync `Result`. `Ok` passes through. The mirror of\n   * {@link flatMap} on the error track.\n   *\n   * @example\n   * ```ts\n   * loadFromCache(id).recover(() => loadFromOrigin(id)); // ResultAsync<T, F>\n   * ```\n   */\n  recover<F>(fn: (error: E) => ResultAsync<T, F> | Result<T, F>): ResultAsync<T, F> {\n    return new ResultAsync<T, F>(async () => {\n      const first = await this.resolve();\n      if (!isErr(first)) {\n        return first;\n      }\n      const next = fn(first.error);\n      return next instanceof ResultAsync ? next.resolve() : next;\n    });\n  }\n\n  /**\n   * neverthrow-compat alias of {@link recover}. Kept as the documented compat\n   * tier; prefer {@link recover} in new code.\n   *\n   * @example\n   * ```ts\n   * loadFromCache(id).orElse(() => loadFromOrigin(id));\n   * ```\n   */\n  orElse<F>(fn: (error: E) => ResultAsync<T, F> | Result<T, F>): ResultAsync<T, F> {\n    return this.recover(fn);\n  }\n\n  /**\n   * Runs a side effect on the `Ok` value and passes the result through\n   * unchanged; a no-op on `Err`. Mirrors {@link tapErr}.\n   *\n   * @example\n   * ```ts\n   * saveUser(u).tap((saved) => analytics.track(\"user_saved\", saved.id));\n   * ```\n   */\n  tap(fn: (value: T) => void): ResultAsync<T, E> {\n    return new ResultAsync(async () => {\n      const result = await this.resolve();\n      if (!isErr(result)) {\n        fn(result.value);\n      }\n      return result;\n    });\n  }\n\n  /**\n   * Runs a side effect on the `Err` value and passes the result through\n   * unchanged; a no-op on `Ok`. The error-track mirror of {@link tap}.\n   *\n   * @example\n   * ```ts\n   * saveUser(u).tapErr((e) => logger.warn(\"save failed\", e));\n   * ```\n   */\n  tapErr(fn: (error: E) => void): ResultAsync<T, E> {\n    return new ResultAsync(async () => {\n      const result = await this.resolve();\n      if (isErr(result)) {\n        fn(result.error);\n      }\n      return result;\n    });\n  }\n\n  /**\n   * Settles to the `Ok` value, or `defaultValue` if `Err`. Terminal — returns a\n   * plain `Promise`, not a `ResultAsync`.\n   *\n   * @example\n   * ```ts\n   * const profile = await loadProfile(id).unwrapOr(guestProfile);\n   * ```\n   */\n  unwrapOr<U>(defaultValue: U): Promise<T | U> {\n    return this.resolve().then((result) => (isErr(result) ? defaultValue : result.value));\n  }\n\n  /**\n   * Terminal collapse — folds both tracks into a single awaited value. Returns\n   * a plain `Promise`, settling the carrier exactly once.\n   *\n   * @param onOk - handles the `Ok` value\n   * @param onErr - handles the `Err` value\n   *\n   * @example\n   * ```ts\n   * const status = await save(row).match(\n   *   () => 200,\n   *   (e) => (e.kind === \"conflict\" ? 409 : 500),\n   * );\n   * ```\n   */\n  match<U1, U2 = U1>(onOk: (value: T) => U1, onErr: (error: E) => U2): Promise<U1 | U2> {\n    return this.resolve().then((result) =>\n      isErr(result) ? onErr(result.error) : onOk(result.value),\n    );\n  }\n\n  /**\n   * Settles the carrier to a bare sync {@link Result}, memoizing so the\n   * underlying factory runs at most once. Prefer `await ra` (the thenable) or\n   * {@link match} in app code; use `resolve` when you need the tagged union back.\n   *\n   * @example\n   * ```ts\n   * const r = await load(id).resolve();   // Result<Data, LoadError>\n   * if (isOk(r)) use(r.value);\n   * ```\n   */\n  resolve(): Promise<Result<T, E>> {\n    if (!this.promise) {\n      this.promise = this.run();\n    }\n    return this.promise;\n  }\n\n  /**\n   * Thenable shim — `await ra` resolves to a bare tagged-union `Result<T, E>`.\n   * Narrow with `isOk(r)` / `isErr(r)` to read `.value` / `.error`.\n   */\n  // biome-ignore lint/suspicious/noThenProperty: makes ResultAsync awaitable\n  then<R1 = Result<T, E>, R2 = never>(\n    onfulfilled?: ((value: Result<T, E>) => R1 | PromiseLike<R1>) | undefined | null,\n    onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | undefined | null,\n  ): Promise<R1 | R2> {\n    return this.resolve().then(\n      // Safe: without onfulfilled, R1 stays at its Result<T, E> default.\n      (r) => (onfulfilled ? onfulfilled(r) : (r as unknown as R1)),\n      onrejected ?? undefined,\n    );\n  }\n}\n\n/**\n * The free-function lift helpers (`okAsync`, `errAsync`, `fromPromise`,\n * `fromSafePromise`, `fromResult`, `fromAsync`, `asyncAfter`, `tryAsync`)\n * live in `./async-lift.ts` and are re-exported from the package index.\n */\n","/**\n * @onrails/result — sync aggregation, one module, two axes:\n *\n *   short-circuit (first `Err` wins)      — {@link combine} / {@link combineTuple}\n *   accumulate expected failures          — {@link validateAll} / {@link validateTuple}\n *\n * The accumulate pair collects every failure into a readonly array by\n * default, or folds them with an explicit `combineErrors` when given one.\n */\n\nimport type { InferErr, InferOk } from \"./internal/infer.js\";\nimport { err, isErr, ok } from \"./result.js\";\nimport type { Result } from \"./types.js\";\n\n/**\n * Combines a homogeneous array of results into a single result holding an\n * array of the `Ok` values, in input order. Short-circuits on the first `Err`\n * (first failure wins). For heterogeneous tuples that preserve per-index\n * types, use {@link combineTuple}.\n *\n * @example\n * ```ts\n * combine([ok(1), ok(2)]);        // Ok([1, 2])\n * combine([ok(1), err(\"e\")]);     // Err(\"e\")\n * ```\n */\nexport const combine = <T, E>(results: readonly Result<T, E>[]): Result<T[], E> => {\n  const values: T[] = [];\n  for (const result of results) {\n    if (isErr(result)) return err(result.error);\n    values.push(result.value);\n  }\n  return ok(values);\n};\n\ntype CombineTuple<R extends readonly Result<unknown, unknown>[]> = Result<\n  { [K in keyof R]: InferOk<R[K]> },\n  { [K in keyof R]: InferErr<R[K]> }[number]\n>;\n\n/**\n * Heterogeneous tuple combine — like {@link combine} but preserves each\n * branch's `Ok` type by position, so the result destructures type-safely.\n * Short-circuits on the first `Err` in input order (neverthrow-style).\n *\n * @example\n * ```ts\n * const r = combineTuple([ok(1), ok(\"x\")] as const);\n * // Result<readonly [number, string], never>\n * if (isOk(r)) {\n *   const [n, s] = r.value;   // typed per position\n * }\n * ```\n */\nexport const combineTuple = <const R extends readonly Result<unknown, unknown>[]>(\n  results: R,\n): CombineTuple<R> =>\n  // Runtime identical to combine; the cast restores per-index tuple types.\n  combine(results as readonly Result<unknown, unknown>[]) as CombineTuple<R>;\n\n/**\n * Accumulate independent validation failures. Returns `Ok<T[]>` only when\n * every input is `Ok`. Without a combiner, failures are collected into a\n * readonly array; with `combineErrors` they are folded into a single `E`.\n *\n * Unlike {@link combine}, this does **not** short-circuit on first failure —\n * use for independent checks where you want to report all problems at once.\n *\n * @example\n * ```ts\n * const checks: Result<string, string[]>[] = [ok(\"Ada\"), err([\"age required\"])];\n *\n * validateAll(checks);\n * // Result<string[], readonly string[][]>\n *\n * validateAll(checks, (left, right) => [...left, ...right]);\n * // Result<string[], string[]>\n * ```\n */\nexport function validateAll<T, E>(results: readonly Result<T, E>[]): Result<T[], readonly E[]>;\nexport function validateAll<T, E>(\n  results: readonly Result<T, E>[],\n  combineErrors: (left: E, right: E) => E,\n): Result<T[], E>;\nexport function validateAll<T, E>(\n  results: readonly Result<T, E>[],\n  combineErrors?: (left: E, right: E) => E,\n): Result<T[], E | readonly E[]> {\n  const values: T[] = [];\n  const errors: E[] = [];\n\n  for (const result of results) {\n    if (isErr(result)) {\n      errors.push(result.error);\n    } else {\n      values.push(result.value);\n    }\n  }\n\n  if (errors.length === 0) return ok(values);\n  return err(combineErrors ? errors.reduce(combineErrors) : errors);\n}\n\n/**\n * Tuple-preserving variant of {@link validateAll}. Heterogeneous input tuple\n * → preserved `Ok` tuple shape. Without a combiner, the error union is\n * collected into a readonly array; with `combineErrors`, all inputs must\n * share the error type `E` and failures fold into a single `E`.\n *\n * @example\n * ```ts\n * const name: Result<string, string[]> = ok(\"Ada\");\n * const age: Result<number, string[]> = ok(36);\n *\n * validateTuple([name, age] as const);\n * // Result<readonly [string, number], readonly string[][]>\n *\n * validateTuple([name, age] as const, (l, r) => [...l, ...r]);\n * // Result<readonly [string, number], string[]>\n * ```\n */\nexport function validateTuple<const R extends readonly Result<unknown, unknown>[]>(\n  results: R,\n): Result<{ [K in keyof R]: InferOk<R[K]> }, readonly InferErr<R[number]>[]>;\nexport function validateTuple<\n  const R extends readonly Result<unknown, unknown>[],\n  E = InferErr<R[number]>,\n>(\n  results: R & readonly Result<unknown, E>[],\n  combineErrors: (left: E, right: E) => E,\n): Result<{ [K in keyof R]: InferOk<R[K]> }, E>;\nexport function validateTuple(\n  results: readonly Result<unknown, unknown>[],\n  combineErrors?: (left: unknown, right: unknown) => unknown,\n): Result<readonly unknown[], unknown> {\n  // Runtime identical to validateAll; the overloads restore per-index tuple types.\n  return combineErrors ? validateAll(results, combineErrors) : validateAll(results);\n}\n","/** @deprecated Migration shim — prefer `@onrails/result` and `@onrails/result/fluent`. */\nimport { ResultAsync as CoreResultAsync } from \"../async.js\";\nimport { combineTuple } from \"../collections.js\";\nimport type { InferErr, InferOk } from \"../internal/infer.js\";\nimport {\n  err as coreErr,\n  ok as coreOk,\n  flatMap,\n  isErr,\n  isOk,\n  map,\n  mapErr,\n  trySync,\n  unwrapOr,\n} from \"../result.js\";\nimport type { Result as ResultType } from \"../types.js\";\n\ntype TupleOk<R extends readonly CompatResult<unknown, unknown>[]> = {\n  [K in keyof R]: R[K] extends CompatResult<infer T, unknown> ? T : never;\n};\ntype TupleErr<R extends readonly CompatResult<unknown, unknown>[]> = {\n  [K in keyof R]: R[K] extends CompatResult<unknown, infer F> ? F : never;\n}[number];\n\ntype AsyncTupleOk<R extends readonly CompatResultAsync<unknown, unknown>[]> = {\n  [K in keyof R]: R[K] extends CompatResultAsync<infer T, unknown> ? T : never;\n};\ntype AsyncTupleErr<R extends readonly CompatResultAsync<unknown, unknown>[]> = {\n  [K in keyof R]: R[K] extends CompatResultAsync<unknown, infer F> ? F : never;\n}[number];\n\nexport class CompatResult<T, E> {\n  constructor(readonly inner: ResultType<T, E>) {}\n\n  static fromThrowable<A extends readonly unknown[], U, F>(\n    fn: (...args: A) => U,\n    onThrow: (error: unknown) => F,\n  ): (...args: A) => CompatResult<U, F> {\n    const wrapped = trySync(fn, onThrow);\n    return (...args: A) => new CompatResult(wrapped(...args));\n  }\n\n  static combine<const R extends readonly CompatResult<unknown, unknown>[]>(\n    results: R,\n  ): CompatResult<TupleOk<R>, TupleErr<R>> {\n    return new CompatResult(\n      combineTuple(results.map((r) => r.inner)) as ResultType<TupleOk<R>, TupleErr<R>>,\n    );\n  }\n\n  get value(): T {\n    return this._unsafeUnwrap();\n  }\n\n  get error(): E {\n    return this._unsafeUnwrapErr();\n  }\n\n  isOk(): boolean {\n    return isOk(this.inner);\n  }\n\n  isErr(): boolean {\n    return isErr(this.inner);\n  }\n\n  map<U>(fn: (value: T) => U): CompatResult<U, E> {\n    return new CompatResult(map(this.inner, fn));\n  }\n\n  mapErr<F>(fn: (error: E) => F): CompatResult<T, F> {\n    return new CompatResult(mapErr(this.inner, fn));\n  }\n\n  andThen<U, F = E>(fn: (value: T) => CompatResult<U, F>): CompatResult<U, E | F> {\n    return new CompatResult(flatMap(this.inner, (value) => fn(value).inner));\n  }\n\n  asyncAndThen<U, F = E>(\n    fn: (value: T) => CompatResultAsync<U, F> | CoreResultAsync<U, F>,\n  ): CompatResultAsync<U, E | F> {\n    return isErr(this.inner)\n      ? CompatResultAsync.err(this.inner.error)\n      : CompatResultAsync.fromInner(coerceToCoreAsync(fn(this.inner.value)));\n  }\n\n  orElse<F>(fn: (error: E) => CompatResult<T, F>): CompatResult<T, F> {\n    return isOk(this.inner) ? new CompatResult<T, F>(this.inner) : fn(this.inner.error);\n  }\n\n  match<U1, U2 = U1>(onOk: (value: T) => U1, onErr: (error: E) => U2): U1 | U2 {\n    return isOk(this.inner) ? onOk(this.inner.value) : onErr(this.inner.error);\n  }\n\n  unwrapOr<U>(defaultValue: U): T | U {\n    return unwrapOr(this.inner as ResultType<T | U, E>, defaultValue);\n  }\n\n  _unsafeUnwrap(): T {\n    if (isErr(this.inner)) {\n      throw new Error(\"Called _unsafeUnwrap on Err\");\n    }\n    return this.inner.value;\n  }\n\n  _unsafeUnwrapErr(): E {\n    if (isOk(this.inner)) {\n      throw new Error(\"Called _unsafeUnwrapErr on Ok\");\n    }\n    return this.inner.error;\n  }\n}\n\nexport const Result = CompatResult;\nexport type Result<T, E> = CompatResult<T, E>;\n\nexport const ok = <T, E = never>(value: T): CompatResult<T, E> => new CompatResult(coreOk(value));\nexport const err = <T = never, E = unknown>(error: E): CompatResult<T, E> =>\n  new CompatResult(coreErr(error));\n\n/** `await` yields `CompatResult` so `.isOk()` / `.value` / `.match()` work without `.resolve()`. */\nexport class CompatResultAsync<T, E> implements PromiseLike<CompatResult<T, E>> {\n  private constructor(private readonly inner: CoreResultAsync<T, E>) {}\n\n  static fromInner<T, E>(inner: CoreResultAsync<T, E>): CompatResultAsync<T, E> {\n    return new CompatResultAsync(inner);\n  }\n\n  toCore(): CoreResultAsync<T, E> {\n    return this.inner;\n  }\n\n  static ok<T, E = never>(value: T): CompatResultAsync<T, E> {\n    return new CompatResultAsync(CoreResultAsync.ok(value));\n  }\n\n  static err<T = never, E = unknown>(error: E): CompatResultAsync<T, E> {\n    return new CompatResultAsync(CoreResultAsync.err<T, E>(error));\n  }\n\n  static fromPromise<T, E>(\n    promise: PromiseLike<T>,\n    onReject: (error: unknown) => E,\n  ): CompatResultAsync<T, E> {\n    return new CompatResultAsync(CoreResultAsync.fromPromise(promise, onReject));\n  }\n\n  static fromSafePromise<T, E = never>(promise: PromiseLike<T>): CompatResultAsync<T, E> {\n    return new CompatResultAsync(CoreResultAsync.fromSafePromise<T, E>(promise));\n  }\n\n  static fromThrowable<A extends readonly unknown[], U, F>(\n    fn: (...args: A) => Promise<U>,\n    onThrow: (error: unknown) => F,\n  ): (...args: A) => CompatResultAsync<U, F> {\n    return (...args: A) => CompatResultAsync.fromPromise(fn(...args), onThrow);\n  }\n\n  static combine<const R extends readonly CompatResultAsync<unknown, unknown>[]>(\n    results: R,\n  ): CompatResultAsync<AsyncTupleOk<R>, AsyncTupleErr<R>> {\n    return new CompatResultAsync(\n      CoreResultAsync.combine(results.map((r) => r.inner)) as CoreResultAsync<\n        AsyncTupleOk<R>,\n        AsyncTupleErr<R>\n      >,\n    );\n  }\n\n  // biome-ignore lint/suspicious/noThenProperty: thenable shim for `await ra` -> CompatResult\n  then<R1 = CompatResult<T, E>, R2 = never>(\n    onfulfilled?: ((value: CompatResult<T, E>) => R1 | PromiseLike<R1>) | undefined | null,\n    onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | undefined | null,\n  ): Promise<R1 | R2> {\n    return this.inner.resolve().then((r) => {\n      const wrapped = new CompatResult(r);\n      // Safe: without onfulfilled, R1 stays at its CompatResult<T, E> default.\n      return onfulfilled ? onfulfilled(wrapped) : (wrapped as unknown as R1);\n    }, onrejected ?? undefined);\n  }\n\n  resolve(): Promise<ResultType<T, E>> {\n    return this.inner.resolve();\n  }\n\n  map<U>(fn: (value: T) => U): CompatResultAsync<U, E> {\n    return new CompatResultAsync(this.inner.map(fn));\n  }\n\n  mapErr<F>(fn: (error: E) => F): CompatResultAsync<T, F> {\n    return new CompatResultAsync(this.inner.mapErr(fn));\n  }\n\n  andThen<R extends AnyAsyncOrSyncResult>(\n    fn: (value: T) => R,\n  ): CompatResultAsync<UnwrapOk<R>, E | UnwrapErr<R>> {\n    return new CompatResultAsync(this.inner.andThen((value) => coerceToCore(fn(value))));\n  }\n\n  chain<R extends AnyAsyncOrSyncResult>(fn: (value: T) => R) {\n    return this.andThen(fn);\n  }\n\n  flatMap<R extends AnyAsyncOrSyncResult>(fn: (value: T) => R) {\n    return this.andThen(fn);\n  }\n\n  orElse<R extends AnyAsyncOrSyncResult>(\n    fn: (error: E) => R,\n  ): CompatResultAsync<T | UnwrapOk<R>, UnwrapErr<R>> {\n    return new CompatResultAsync(\n      this.inner.orElse(\n        (error) =>\n          coerceToCore(fn(error)) as CoreResultAsync<T, UnwrapErr<R>> | ResultType<T, UnwrapErr<R>>,\n      ) as CoreResultAsync<T | UnwrapOk<R>, UnwrapErr<R>>,\n    );\n  }\n\n  unwrapOr<U>(defaultValue: U): Promise<T | U> {\n    return this.inner.unwrapOr(defaultValue);\n  }\n\n  isOk(): Promise<boolean> {\n    return this.inner.match(\n      () => true,\n      () => false,\n    );\n  }\n\n  isErr(): Promise<boolean> {\n    return this.inner.match(\n      () => false,\n      () => true,\n    );\n  }\n\n  match<U1, U2 = U1>(onOk: (value: T) => U1, onErr: (error: E) => U2): Promise<U1 | U2> {\n    return this.inner.match(onOk, onErr);\n  }\n\n  andTee(fn: (value: T) => void | Promise<void>): CompatResultAsync<T, E> {\n    return new CompatResultAsync(\n      CoreResultAsync.defer(async () => {\n        const r = await this.inner.resolve();\n        if (!isErr(r)) {\n          try {\n            await fn(r.value);\n          } catch {\n            // andTee ignores tee failures (neverthrow semantics).\n          }\n        }\n        return r;\n      }),\n    );\n  }\n\n  orTee(fn: (error: E) => void | Promise<void>): CompatResultAsync<T, E> {\n    return new CompatResultAsync(\n      CoreResultAsync.defer(async () => {\n        const r = await this.inner.resolve();\n        if (isErr(r)) {\n          try {\n            await fn(r.error);\n          } catch {\n            // orTee ignores tee failures (neverthrow semantics).\n          }\n        }\n        return r;\n      }),\n    );\n  }\n}\n\ntype AnyAsyncOrSyncResult =\n  | CompatResultAsync<unknown, unknown>\n  | CoreResultAsync<unknown, unknown>\n  | CompatResult<unknown, unknown>\n  | ResultType<unknown, unknown>;\n\n// Compat wrappers first (they hide the payload behind `inner`), then the\n// shared extractor handles core Result / ResultAsync.\ntype UnwrapOk<R> =\n  R extends CompatResultAsync<infer U, unknown>\n    ? U\n    : R extends CompatResult<infer U, unknown>\n      ? U\n      : InferOk<R>;\n\ntype UnwrapErr<R> =\n  R extends CompatResultAsync<unknown, infer F>\n    ? F\n    : R extends CompatResult<unknown, infer F>\n      ? F\n      : InferErr<R>;\n\nfunction coerceToCore<R extends AnyAsyncOrSyncResult>(\n  next: R,\n): CoreResultAsync<UnwrapOk<R>, UnwrapErr<R>> | ResultType<UnwrapOk<R>, UnwrapErr<R>>;\nfunction coerceToCore(\n  next: AnyAsyncOrSyncResult,\n): CoreResultAsync<unknown, unknown> | ResultType<unknown, unknown> {\n  if (next instanceof CompatResultAsync) return next.toCore();\n  if (next instanceof CoreResultAsync) return next;\n  if (next instanceof CompatResult) return next.inner;\n  return next;\n}\n\n/** Async-only coercion — keeps {@link CompatResult.asyncAndThen} cast-free. */\nconst coerceToCoreAsync = <U, F>(\n  next: CompatResultAsync<U, F> | CoreResultAsync<U, F>,\n): CoreResultAsync<U, F> => (next instanceof CompatResultAsync ? next.toCore() : next);\n\nexport { CompatResultAsync as ResultAsync };\n\nexport const okAsync = CompatResultAsync.ok;\nexport const errAsync = CompatResultAsync.err;\nexport const fromPromise = CompatResultAsync.fromPromise;\nexport const fromSafePromise = CompatResultAsync.fromSafePromise;\n"]}