react-mnemonic 1.3.0 → 1.4.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/Mnemonic/codecs.ts","../src/Mnemonic/json-schema.ts","../src/Mnemonic/schema.ts","../src/Mnemonic/persistence-shared.ts","../src/Mnemonic/runtime.ts","../src/Mnemonic/bootstrap.ts"],"names":["objectHasOwn"],"mappings":";AAoCO,IAAM,UAAA,GAAN,cAAyB,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAelC,WAAA,CAAY,SAAiB,KAAA,EAAiB;AAC1C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,YAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAGb,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EACpD;AACJ;AA+BO,IAAM,SAAA,GAAwB;AAAA,EACjC,MAAA,EAAQ,CAAC,KAAA,KAAU,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EACvC,MAAA,EAAQ,CAAC,OAAA,KAAY,IAAA,CAAK,MAAM,OAAO;AAC3C;AAgDO,SAAS,WAAA,CAAe,QAA8B,MAAA,EAA0C;AACnG,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC5B;;;ACxCA,SAAS,WAAA,CAAY,OAAgB,IAAA,EAA+B;AAChE,EAAA,QAAQ,IAAA;AAAM,IACV,KAAK,QAAA;AACD,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAAA,IAC5B,KAAK,QAAA;AACD,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,IAC7D,KAAK,SAAA;AACD,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,IAC9D,KAAK,SAAA;AACD,MAAA,OAAO,OAAO,KAAA,KAAU,SAAA;AAAA,IAC5B,KAAK,MAAA;AACD,MAAA,OAAO,KAAA,KAAU,IAAA;AAAA,IACrB,KAAK,QAAA;AACD,MAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,IAC9E,KAAK,OAAA;AACD,MAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,IAC9B;AACI,MAAA,OAAO,KAAA;AAAA;AAEnB;AAMA,SAAS,kBAAA,CAAmB,GAAuB,CAAA,EAAgC;AAC/E,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,IAAI,CAAC,cAAc,CAAA,CAAE,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,EAC3C;AACA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,mBAAA,CAAoB,GAA4B,CAAA,EAAqC;AAC1F,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAC1C,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACrB,IAAA,IAAI,CAAC,YAAA,CAAa,CAAA,EAAG,GAAG,GAAG,OAAO,KAAA;AAClC,IAAA,IAAI,CAAC,cAAc,CAAA,CAAE,GAAG,GAAG,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,EAC/C;AACA,EAAA,OAAO,IAAA;AACX;AAEO,SAAS,aAAA,CAAc,GAAY,CAAA,EAAqB;AAC3D,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,IAAA,EAAM,OAAO,KAAA;AACrC,EAAA,IAAI,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG,OAAO,KAAA;AAElC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AAClB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAC,GAAG,OAAO,KAAA;AAC9B,IAAA,OAAO,kBAAA,CAAmB,GAAG,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACvB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,KAAA;AAC7B,IAAA,OAAO,mBAAA,CAAoB,GAA8B,CAA4B,CAAA;AAAA,EACzF;AAEA,EAAA,OAAO,KAAA;AACX;AAeA,IAAM,aAAA,uBAAoB,OAAA,EAAuC;AAkB1D,SAAS,cAAc,MAAA,EAAuC;AACjE,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AACvC,EAAA,IAAI,QAAQ,OAAO,MAAA;AAEnB,EAAA,MAAM,QAAA,GAAW,eAAe,MAAM,CAAA;AACtC,EAAA,aAAA,CAAc,GAAA,CAAI,QAAQ,QAAQ,CAAA;AAClC,EAAA,OAAO,QAAA;AACX;AAGA,SAAS,gBAAgB,KAAA,EAAyB;AAC9C,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA;AAC9C;AAEA,SAAS,mBAAmB,KAAA,EAAkD;AAC1E,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC9E;AAEA,SAAS,YAAA,CAAa,OAAe,QAAA,EAAgC;AACjE,EAAA,MAAM,SAAU,MAAA,CAAsF,MAAA;AACtG,EAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAC9B,IAAA,OAAO,MAAA,CAAO,OAAO,QAAQ,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA,CAAO,wBAAA,CAAyB,KAAA,EAAO,QAAQ,CAAA,KAAM,MAAA;AAChE;AAOA,SAAS,eAAe,MAAA,EAAuC;AAC3D,EAAA,MAAM,QAAA,GAAW,wBAAwB,MAAM,CAAA;AAC/C,EAAA,MAAM,eAAA,GAAkB;AAAA,IACpB,wBAAwB,MAAM,CAAA;AAAA,IAC9B,yBAAyB,MAAM,CAAA;AAAA,IAC/B,0BAA0B,MAAM,CAAA;AAAA,IAChC,0BAA0B,MAAM,CAAA;AAAA,IAChC,0BAA0B,MAAM,CAAA;AAAA,IAChC,yBAAyB,MAAM;AAAA,GACnC,CAAE,MAAA,CAAO,CAAC,IAAA,KAAiC,SAAS,IAAI,CAAA;AAExD,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG;AACnD,IAAA,OAAO,CAAC,MAAA,EAAiB,KAAA,KAAmB,EAAC;AAAA,EACjD;AAEA,EAAA,OAAO,CAAC,KAAA,EAAgB,IAAA,GAAe,EAAA,KAAoC;AACvE,IAAA,MAAM,SAAsC,EAAC;AAC7C,IAAA,IAAI,YAAY,CAAC,QAAA,CAAS,KAAA,EAAO,IAAA,EAAM,MAAM,CAAA,EAAG;AAC5C,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAChC,MAAA,IAAA,CAAK,KAAA,EAAO,MAAM,MAAM,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,MAAA;AAAA,EACX,CAAA;AACJ;AAEA,SAAS,wBAAwB,MAAA,EAA+C;AAC5E,EAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAW;AAC3B,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,IAAI,MAAA,CAAO,IAAA,GAAO,CAAC,MAAA,CAAO,IAAI,CAAA;AAC7E,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AAC5C,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,IAAI,aAAA,CAAc,KAAK,CAAC,IAAA,KAAS,YAAY,KAAA,EAAO,IAAI,CAAC,CAAA,EAAG;AACxD,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACR,IAAA;AAAA,MACA,SAAS,CAAA,cAAA,EAAiB,SAAS,CAAA,MAAA,EAAS,aAAA,CAAc,KAAK,CAAC,CAAA,CAAA;AAAA,MAChE,OAAA,EAAS;AAAA,KACZ,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AACJ;AAEA,SAAS,wBAAwB,MAAA,EAA2C;AACxE,EAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAW;AAC3B,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,gBAAA,GAAmB,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,CAAC,MAAA,KAAW,eAAA,CAAgB,MAAM,CAAC,CAAC,CAAA;AACxF,EAAA,MAAM,kBAAA,GAAqB,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,eAAA,CAAgB,MAAM,CAAC,CAAA;AAElF,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,MAAM,iBAAiB,eAAA,CAAgB,KAAK,CAAA,IAAK,gBAAA,CAAiB,IAAI,KAAK,CAAA;AAC3E,IAAA,MAAM,YAAA,GAAe,CAAC,cAAA,IAAkB,kBAAA,CAAmB,IAAA,CAAK,CAAC,KAAA,KAAU,aAAA,CAAc,KAAA,EAAO,KAAK,CAAC,CAAA;AACtG,IAAA,IAAI,kBAAkB,YAAA,EAAc;AAChC,MAAA;AAAA,IACJ;AACA,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACR,IAAA;AAAA,MACA,OAAA,EAAS,CAAA,oCAAA,CAAA;AAAA,MACT,OAAA,EAAS;AAAA,KACZ,CAAA;AAAA,EACL,CAAA;AACJ;AAEA,SAAS,yBAAyB,MAAA,EAA2C;AACzE,EAAA,IAAI,EAAE,WAAW,MAAA,CAAA,EAAS;AACtB,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,IAAI,aAAA,CAAc,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA,EAAG;AACpC,MAAA;AAAA,IACJ;AACA,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACR,IAAA;AAAA,MACA,OAAA,EAAS,CAAA,0BAAA,CAAA;AAAA,MACT,OAAA,EAAS;AAAA,KACZ,CAAA;AAAA,EACL,CAAA;AACJ;AAEA,SAAS,0BAA0B,MAAA,EAA2C;AAC1E,EAAA,MAAM,UAAA,GAAa,OAAO,OAAA,KAAY,MAAA;AACtC,EAAA,MAAM,UAAA,GAAa,OAAO,OAAA,KAAY,MAAA;AACtC,EAAA,MAAM,QAAA,GAAW,OAAO,gBAAA,KAAqB,MAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,OAAO,gBAAA,KAAqB,MAAA;AAC7C,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,cAAc,CAAC,QAAA,IAAY,CAAC,QAAA,EAAU;AACtD,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,EAAA,MAAM,QAAQ,MAAA,CAAO,gBAAA;AACrB,EAAA,MAAM,QAAQ,MAAA,CAAO,gBAAA;AAErB,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,UAAA,IAAc,QAAQ,OAAA,EAAU;AAChC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS,CAAA,MAAA,EAAS,KAAK,CAAA,sBAAA,EAAyB,OAAQ,CAAA,CAAA;AAAA,QACxD,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AACA,IAAA,IAAI,UAAA,IAAc,QAAQ,OAAA,EAAU;AAChC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS,CAAA,MAAA,EAAS,KAAK,CAAA,yBAAA,EAA4B,OAAQ,CAAA,CAAA;AAAA,QAC3D,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AACA,IAAA,IAAI,QAAA,IAAY,SAAS,KAAA,EAAQ;AAC7B,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS,CAAA,MAAA,EAAS,KAAK,CAAA,sCAAA,EAAyC,KAAM,CAAA,CAAA;AAAA,QACtE,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AACA,IAAA,IAAI,QAAA,IAAY,SAAS,KAAA,EAAQ;AAC7B,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS,CAAA,MAAA,EAAS,KAAK,CAAA,mCAAA,EAAsC,KAAM,CAAA,CAAA;AAAA,QACnE,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,0BAA0B,MAAA,EAA2C;AAC1E,EAAA,MAAM,YAAA,GAAe,OAAO,SAAA,KAAc,MAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,OAAO,SAAA,KAAc,MAAA;AAC1C,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,YAAA,EAAc;AAChC,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AACzB,EAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AACzB,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,YAAA,IAAgB,KAAA,CAAM,MAAA,GAAS,SAAA,EAAY;AAC3C,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS,CAAA,cAAA,EAAiB,KAAA,CAAM,MAAM,2BAA2B,SAAU,CAAA,CAAA;AAAA,QAC3E,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AACA,IAAA,IAAI,YAAA,IAAgB,KAAA,CAAM,MAAA,GAAS,SAAA,EAAY;AAC3C,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS,CAAA,cAAA,EAAiB,KAAA,CAAM,MAAM,8BAA8B,SAAU,CAAA,CAAA;AAAA,QAC9E,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,0BAA0B,MAAA,EAA2C;AAC1E,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,QAAA,IAAY,EAAC;AACzC,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,UAAA,GAC3B,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,cAAc,CAAA,KAAM;AAAA,IAC/D,IAAA;AAAA,IACA,cAAc,cAAc;AAAA,GAC/B,CAAA,GACD,IAAA;AACN,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,oBAAA,KAAyB,MAAA,IAAa,OAAO,oBAAA,KAAyB,IAAA;AACrG,EAAA,MAAM,iBAAA,GAAoB,OAAO,oBAAA,KAAyB,KAAA;AAC1D,EAAA,MAAM,sBACF,eAAA,IAAmB,CAAC,oBAAoB,aAAA,CAAc,MAAA,CAAO,oBAAkC,CAAA,GAAI,IAAA;AACvG,EAAA,MAAM,eAAA,GAAkB,eAAA,GAAkB,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,EAAE,CAAC,CAAA,GAAI,IAAA;AAC1F,EAAA,MAAM,wBAAgD,EAAC;AAEvD,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AACzB,IAAA,qBAAA,CAAsB,IAAA,CAAK,0BAAA,CAA2B,YAAY,CAAC,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,uBAAuB,IAAA,EAAM;AAC7B,IAAA,qBAAA,CAAsB,IAAA,CAAK,0BAAA,CAA2B,kBAAkB,CAAC,CAAA;AAAA,EAC7E;AACA,EAAA,IAAI,eAAA,EAAiB;AACjB,IAAA,qBAAA,CAAsB,IAAA;AAAA,MAClB,4BAAA,CAA6B;AAAA,QACzB,iBAAA;AAAA,QACA,mBAAA;AAAA,QACA,eAAA,EAAiB,eAAA,oBAAmB,IAAI,GAAA;AAAY,OACvD;AAAA,KACL;AAAA,EACJ;AAEA,EAAA,IAAI,qBAAA,CAAsB,WAAW,CAAA,EAAG;AACpC,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,IAAI,CAAC,kBAAA,CAAmB,KAAK,CAAA,EAAG;AAC5B,MAAA;AAAA,IACJ;AAEA,IAAA,KAAA,MAAW,QAAQ,qBAAA,EAAuB;AACtC,MAAA,IAAA,CAAK,KAAA,EAAO,MAAM,MAAM,CAAA;AAAA,IAC5B;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,2BAA2B,YAAA,EAAuD;AACvF,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACpC,MAAA,IAAI,YAAA,CAAa,KAAA,EAAO,WAAW,CAAA,EAAG;AAClC,QAAA;AAAA,MACJ;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS,8BAA8B,WAAW,CAAA,CAAA,CAAA;AAAA,QAClD,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,2BAA2B,kBAAA,EAAyE;AACzG,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,KAAA,MAAW,CAAC,YAAA,EAAc,SAAS,CAAA,IAAK,kBAAA,EAAoB;AACxD,MAAA,IAAI,CAAC,YAAA,CAAa,KAAA,EAAO,YAAY,CAAA,EAAG;AACpC,QAAA;AAAA,MACJ;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,SAAA,CAAU,KAAA,CAAM,YAAY,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC,CAAA;AAAA,IAC5E;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,4BAAA,CAA6B;AAAA,EAClC,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACJ,CAAA,EAIyB;AACrB,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,KAAA,MAAW,SAAA,IAAa,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AACxC,MAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,SAAS,CAAA,EAAG;AAChC,QAAA;AAAA,MACJ;AACA,MAAA,IAAI,iBAAA,EAAmB;AACnB,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACR,IAAA;AAAA,UACA,OAAA,EAAS,wBAAwB,SAAS,CAAA,gBAAA,CAAA;AAAA,UAC1C,OAAA,EAAS;AAAA,SACZ,CAAA;AACD,QAAA;AAAA,MACJ;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,mBAAA,CAAqB,KAAA,CAAM,SAAS,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAA;AAAA,IACjF;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,yBAAyB,MAAA,EAA2C;AACzE,EAAA,MAAM,WAAA,GAAc,OAAO,QAAA,KAAa,MAAA;AACxC,EAAA,MAAM,WAAA,GAAc,OAAO,QAAA,KAAa,MAAA;AACxC,EAAA,MAAM,iBAAiB,MAAA,CAAO,KAAA,GAAQ,aAAA,CAAc,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AACpE,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,WAAA,IAAe,mBAAmB,IAAA,EAAM;AACzD,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,MAAA,KAAW;AAC5B,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvB,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,WAAA,IAAe,KAAA,CAAM,MAAA,GAAS,QAAA,EAAW;AACzC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS,CAAA,aAAA,EAAgB,KAAA,CAAM,MAAM,0BAA0B,QAAS,CAAA,CAAA;AAAA,QACxE,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AACA,IAAA,IAAI,WAAA,IAAe,KAAA,CAAM,MAAA,GAAS,QAAA,EAAW;AACzC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACR,IAAA;AAAA,QACA,OAAA,EAAS,CAAA,aAAA,EAAgB,KAAA,CAAM,MAAM,6BAA6B,QAAS,CAAA,CAAA;AAAA,QAC3E,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AACA,IAAA,IAAI,mBAAmB,IAAA,EAAM;AACzB,MAAA;AAAA,IACJ;AACA,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AACzC,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,cAAA,CAAe,IAAA,EAAM,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC,CAAA;AAAA,IAC3D;AAAA,EACJ,CAAA;AACJ;AAcO,SAAS,kBAAA,CAAmB,KAAA,EAAgB,MAAA,EAAoB,IAAA,GAAe,EAAA,EAAiC;AACnH,EAAA,MAAM,QAAA,GAAW,cAAc,MAAM,CAAA;AACrC,EAAA,OAAO,QAAA,CAAS,OAAO,IAAI,CAAA;AAC/B;AAKA,SAAS,cAAc,KAAA,EAAwB;AAC3C,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,OAAA;AACjC,EAAA,OAAO,OAAO,KAAA;AAClB;AAYO,SAAS,gBAAgB,MAAA,EAA6B;AACzD,EAAA,IAAI,MAAA,KAAW,IAAA,EAAM,OAAO,EAAE,MAAM,MAAA,EAAO;AAC3C,EAAA,IAAI,MAAM,OAAA,CAAQ,MAAM,GAAG,OAAO,EAAE,MAAM,OAAA,EAAQ;AAClD,EAAA,QAAQ,OAAO,MAAA;AAAQ,IACnB,KAAK,QAAA;AACD,MAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA,IAC5B,KAAK,QAAA;AACD,MAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA,IAC5B,KAAK,SAAA;AACD,MAAA,OAAO,EAAE,MAAM,SAAA,EAAU;AAAA,IAC7B,KAAK,QAAA;AACD,MAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA,IAC5B;AACI,MAAA,OAAO,EAAC;AAAA;AAEpB;;;ACrhBO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BnC,WAAA,CAAY,IAAA,EAA2B,OAAA,EAAiB,KAAA,EAAiB;AACrE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EACpD;AACJ;;;AChEA,SAASA,aAAAA,CAAa,OAAe,QAAA,EAAgC;AACjE,EAAA,MAAM,SAAU,MAAA,CAAsF,MAAA;AACtG,EAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAC9B,IAAA,OAAO,MAAA,CAAO,OAAO,QAAQ,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA,CAAO,wBAAA,CAAyB,KAAA,EAAO,QAAQ,CAAA,KAAM,MAAA;AAChE;AAKO,SAAS,iBAAA,CAAkB,SAAiB,OAAA,EAA0B;AACzE,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IAClB,OAAA;AAAA,IACA;AAAA,GACwB,CAAA;AAChC;AAQO,SAAS,aAAA,CAAc,KAAa,OAAA,EAAmC;AAC1E,EAAA,IAAI;AACA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,IAAA,IACI,OAAO,MAAA,KAAW,QAAA,IAClB,UAAU,IAAA,IACV,CAAC,OAAO,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,IAChC,OAAO,OAAA,GAAU,CAAA,IACjB,CAACA,aAAAA,CAAa,MAAA,EAAQ,SAAS,CAAA,EACjC;AACE,MAAA,MAAM,IAAI,WAAA,CAAY,kBAAA,EAAoB,CAAA,0BAAA,EAA6B,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IACjF;AACA,IAAA,OAAO,MAAA;AAAA,EACX,SAAS,KAAA,EAAO;AACZ,IAAA,IAAI,iBAAiB,WAAA,EAAa;AAC9B,MAAA,MAAM,KAAA;AAAA,IACV;AACA,IAAA,MAAM,IAAI,WAAA,CAAY,kBAAA,EAAoB,CAAA,0BAAA,EAA6B,GAAG,KAAK,KAAK,CAAA;AAAA,EACxF;AACJ;AAMO,SAAS,mBAAA,CAAuB,GAAA,EAAa,OAAA,EAAiB,KAAA,EAAoC;AACrG,EAAA,IAAI;AACA,IAAA,OAAO,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,EAC/B,SAAS,KAAA,EAAO;AACZ,IAAA,MAAM,KAAA,YAAiB,aAAa,KAAA,GAAQ,IAAI,WAAW,CAAA,6BAAA,EAAgC,GAAG,KAAK,KAAK,CAAA;AAAA,EAC5G;AACJ;AAMO,SAAS,qBAAA,CAAsB,GAAA,EAAa,KAAA,EAAgB,UAAA,EAA8B;AAC7F,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,KAAA,EAAO,UAAU,CAAA;AACnD,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACrB,IAAA;AAAA,EACJ;AACA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,CAAC,UAAU,CAAA,EAAG,KAAA,CAAM,IAAA,IAAQ,GAAG,KAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACzF,EAAA,MAAM,IAAI,WAAA,CAAY,eAAA,EAAiB,qCAAqC,GAAG,CAAA,GAAA,EAAM,OAAO,CAAA,CAAE,CAAA;AAClG;AAKO,SAAS,eAAA,CAAgB,gBAA4C,GAAA,EAAoC;AAC5G,EAAA,OAAO,cAAA,EAAgB,gBAAgB,GAAG,CAAA;AAC9C;AAKO,SAAS,mBAAA,CACZ,cAAA,EACA,GAAA,EACA,OAAA,EACqB;AACrB,EAAA,OAAO,cAAA,EAAgB,SAAA,CAAU,GAAA,EAAK,OAAO,CAAA;AACjD;AAKO,SAAS,gBAAA,CACZ,cAAA,EACA,GAAA,EACA,WAAA,EACA,SAAA,EACoB;AACpB,EAAA,OAAO,cAAA,EAAgB,gBAAA,CAAiB,GAAA,EAAK,WAAA,EAAa,SAAS,CAAA,IAAK,IAAA;AAC5E;AAQO,SAAS,wBAAA,CAAyB;AAAA,EACrC,GAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ,CAAA,EAK0B;AACtB,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,cAAA,EAAgB,GAAG,CAAA;AACxD,EAAA,IAAI,oBAAoB,MAAA,EAAW;AAC/B,IAAA,OAAO,YAAA;AAAA,EACX;AAEA,EAAA,MAAM,cAAA,GAAiB,mBAAA,CAAoB,cAAA,EAAgB,GAAA,EAAK,eAAe,CAAA;AAC/E,EAAA,IAAI,cAAA,EAAgB;AAChB,IAAA,OAAO,cAAA;AAAA,EACX;AAEA,EAAA,OAAO,UAAA,KAAe,WAAW,MAAA,GAAY,YAAA;AACjD;AAMO,SAAS,4BAAA,CAAgC;AAAA,EAC5C,GAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ,CAAA,EAOW;AACP,EAAA,MAAM,eAAe,wBAAA,CAAyB;AAAA,IAC1C,GAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACH,CAAA;AAED,EAAA,IAAI,CAAC,YAAA,EAAc;AACf,IAAA,IAAI,eAAA,KAAoB,MAAA,IAAa,UAAA,KAAe,QAAA,EAAU;AAC1D,MAAA,MAAM,IAAI,WAAA,CAAY,uBAAA,EAAyB,CAAA,+BAAA,EAAkC,GAAG,CAAA,gBAAA,CAAkB,CAAA;AAAA,IAC1G;AACA,IAAA,OAAO,iBAAA,CAAkB,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,EACvD;AAEA,EAAA,IAAI,YAAA,GAAwB,SAAA;AAC5B,EAAA,MAAM,cAAA,GAAiB,cAAA,EAAgB,iBAAA,GAAoB,GAAA,EAAK,aAAa,OAAO,CAAA;AACpF,EAAA,IAAI,cAAA,EAAgB;AAChB,IAAA,IAAI;AACA,MAAA,YAAA,GAAe,cAAA,CAAe,QAAQ,YAAY,CAAA;AAAA,IACtD,SAAS,KAAA,EAAO;AACZ,MAAA,MAAM,KAAA,YAAiB,cACjB,KAAA,GACA,IAAI,YAAY,kBAAA,EAAoB,CAAA,qCAAA,EAAwC,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,IACnG;AAAA,EACJ;AAEA,EAAA,qBAAA,CAAsB,GAAA,EAAK,YAAA,EAAc,YAAA,CAAa,MAAM,CAAA;AAC5D,EAAA,OAAO,iBAAA,CAAkB,YAAA,CAAa,OAAA,EAAS,YAAY,CAAA;AAC/D;;;AClKO,SAAS,wBAAA,GAAoD;AAChE,EAAA,MAAM,eAAgB,UAAA,CAAmC,MAAA;AACzD,EAAA,IAAI,YAAA,KAAiB,QAAW,OAAO,MAAA;AACvC,EAAA,IAAI;AACA,IAAA,OAAO,YAAA,CAAa,YAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,MAAA;AAAA,EACX;AACJ;;;ACsFA,SAAS,cAAc,KAAA,EAA+C;AAClE,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,KAAA;AAC1B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,YAAY,OAAO,KAAA;AACrE,EAAA,OAAO,OAAQ,MAA6B,IAAA,KAAS,UAAA;AACzD;AAEA,SAAS,sBAAyB,KAAA,EAA+E;AAC7G,EAAA,IAAI,aAAa,KAAA,EAAO;AACpB,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,MAAM,EAAE,GAAA,EAAK,GAAG,OAAA,EAAQ,GAAI,KAAA;AAC5B,EAAA,OAAO;AAAA,IACH,GAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEA,SAAS,eAAA,CACL,cACA,KAAA,EACC;AACD,EAAA,OAAO,OAAO,YAAA,KAAiB,UAAA,GACxB,YAAA,CAAyD,KAAK,CAAA,GAC/D,YAAA;AACV;AAEA,SAAS,cAAA,CACL,GAAA,EACA,SAAA,EACA,OAAA,EACA,YACA,cAAA,EACM;AACN,EAAA,OAAO,4BAAA,CAA6B;AAAA,IAChC,GAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA,EAAO,QAAQ,KAAA,IAAS,SAAA;AAAA,IACxB,eAAA,EAAiB,QAAQ,MAAA,EAAQ,OAAA;AAAA,IACjC,UAAA;AAAA,IACA;AAAA,GACH,CAAA;AACL;AAEA,SAAS,cAAA,CAAkB;AAAA,EACvB,GAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA;AACJ,CAAA,EAU2B;AACvB,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,EAAA,IAAI,CAAC,SAAA,EAAW;AACZ,IAAA,OAAO,EAAE,OAAO,GAAI,UAAA,KAAe,SAAY,EAAC,GAAI,EAAE,UAAA,EAAW,EAAG;AAAA,EACxE;AAEA,EAAA,MAAM,OAAA,GACF,wBAAwB,CAAC,SAAA,KAAiB,eAAe,GAAA,EAAK,SAAA,EAAW,OAAA,EAAS,UAAA,EAAY,cAAc,CAAA,CAAA;AAChH,EAAA,MAAM,sBAAsB,MAAM;AAC9B,IAAA,IAAI;AACA,MAAA,OAAO,QAAQ,KAAK,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AACJ,MAAA,OAAO,UAAA;AAAA,IACX;AAAA,EACJ,CAAA,GAAG;AAEH,EAAA,IAAI;AACA,IAAA,MAAM,UAAA,GAAa,UAAU,KAAA,EAAO;AAAA,MAChC,GAAA;AAAA,MACA,gBAAA;AAAA,MACA,GAAI,aAAA,KAAkB,KAAA,CAAA,GAAY,EAAC,GAAI,EAAE,aAAA;AAAc,KAC1D,CAAA;AACD,IAAA,MAAM,cAAA,GAAiB,QAAQ,UAAU,CAAA;AACzC,IAAA,MAAM,cAAA,GACF,kBAAA,KAAuB,KAAA,CAAA,IAAa,cAAA,KAAmB,qBAAqB,cAAA,GAAiB,UAAA;AAEjG,IAAA,OAAO;AAAA,MACH,KAAA,EAAO,UAAA;AAAA,MACP,GAAI,cAAA,KAAmB,KAAA,CAAA,GAAY,EAAC,GAAI,EAAE,YAAY,cAAA;AAAe,KACzE;AAAA,EACJ,SAAS,KAAA,EAAO;AACZ,IAAA,MAAM,UAAA,GACF,KAAA,YAAiB,WAAA,GACX,KAAA,GACA,IAAI,YAAY,kBAAA,EAAoB,CAAA,+BAAA,EAAkC,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAC7F,IAAA,OAAO;AAAA,MACH,KAAA,EAAO,eAAA,CAAgB,OAAA,CAAQ,YAAA,EAAc,UAAU;AAAA,KAC3D;AAAA,EACJ;AACJ;AAEA,SAAS,mBAAA,CACL,SACA,KAAA,EACsB;AACtB,EAAA,OAAO;AAAA,IACH,KAAA,EAAO,eAAA,CAAgB,OAAA,CAAQ,YAAA,EAAc,KAAK;AAAA,GACtD;AACJ;AAEA,SAAS,0BAAA,CAA8B;AAAA,EACnC,GAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ,CAAA,EAO2B;AACvB,EAAA,IAAI,OAAO,QAAA,CAAS,OAAA,KAAY,QAAA,EAAU;AACtC,IAAA,OAAO,cAAA,CAAe;AAAA,MAClB,GAAA;AAAA,MACA,OAAO,QAAA,CAAS,OAAA;AAAA,MAChB,OAAA;AAAA,MACA,kBAAkB,QAAA,CAAS,OAAA;AAAA,MAC3B,GAAI,YAAA,GAAe,EAAE,eAAe,YAAA,CAAa,OAAA,KAAY,EAAC;AAAA,MAC9D,UAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL;AAEA,EAAA,IAAI;AACA,IAAA,MAAM,UAAU,mBAAA,CAAoB,GAAA,EAAK,SAAS,OAAA,EAAS,OAAA,CAAQ,SAAS,SAAS,CAAA;AACrF,IAAA,OAAO,cAAA,CAAe;AAAA,MAClB,GAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,OAAA;AAAA,MACA,kBAAkB,QAAA,CAAS,OAAA;AAAA,MAC3B,GAAI,YAAA,GAAe,EAAE,eAAe,YAAA,CAAa,OAAA,KAAY,EAAC;AAAA,MAC9D,UAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL,SAAS,KAAA,EAAO;AACZ,IAAA,OAAO,mBAAA,CAAoB,SAAS,KAAiC,CAAA;AAAA,EACzE;AACJ;AAEA,SAAS,wBAAA,CAA4B;AAAA,EACjC,GAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACJ,CAAA,EAO2B;AACvB,EAAA,IAAI,YAAA,EAAc;AACd,IAAA,OAAO,mBAAA;AAAA,MACH,OAAA;AAAA,MACA,IAAI,YAAY,kBAAA,EAAoB,CAAA,mBAAA,EAAsB,GAAG,CAAA,GAAA,EAAM,QAAA,CAAS,OAAO,CAAA,CAAE;AAAA,KACzF;AAAA,EACJ;AACA,EAAA,IAAI,CAAC,gBAAgB,cAAA,EAAgB;AACjC,IAAA,OAAO,mBAAA;AAAA,MACH,OAAA;AAAA,MACA,IAAI,WAAA;AAAA,QACA,4BAAA;AAAA,QACA,kEAAkE,GAAG,CAAA,CAAA;AAAA;AACzE,KACJ;AAAA,EACJ;AAEA,EAAA,IAAI;AACA,IAAA,MAAM,OAAA,GACF,OAAO,QAAA,CAAS,OAAA,KAAY,QAAA,GACtB,mBAAA,CAAoB,GAAA,EAAK,QAAA,CAAS,OAAA,EAAS,OAAA,CAAQ,KAAA,IAAS,SAAS,IACpE,QAAA,CAAS,OAAA;AACpB,IAAA,MAAM,eAAA,GAAkB,CAAA;AACxB,IAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,IAAA,OAAO,cAAA,CAAe;AAAA,MAClB,GAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,OAAA;AAAA,MACA,kBAAkB,QAAA,CAAS,OAAA;AAAA,MAC3B,UAAA,EAAY,iBAAA,CAAkB,eAAA,EAAiB,OAAO,CAAA;AAAA,MACtD,UAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA,EAAqB,CAAC,KAAA,KAAU,iBAAA,CAAkB,iBAAiB,KAAK;AAAA,KAC3E,CAAA;AAAA,EACL,SAAS,KAAA,EAAO;AACZ,IAAA,MAAM,UAAA,GACF,KAAA,YAAiB,WAAA,IAAe,KAAA,YAAiB,UAAA,GAC3C,KAAA,GACA,IAAI,WAAA,CAAY,eAAA,EAAiB,CAAA,qCAAA,EAAwC,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAChG,IAAA,OAAO,mBAAA,CAAoB,SAAS,UAAU,CAAA;AAAA,EAClD;AACJ;AAEA,SAAS,2BAAA,CAA+B;AAAA,EACpC,GAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ,CAAA,EAQ2B;AACvB,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACA,IAAA,OAAA,GAAU,QAAA,CAAS,OAAA;AACnB,IAAA,qBAAA,CAAsB,GAAA,EAAK,OAAA,EAAS,gBAAA,CAAiB,MAAM,CAAA;AAAA,EAC/D,SAAS,KAAA,EAAO;AACZ,IAAA,MAAM,UAAA,GACF,KAAA,YAAiB,WAAA,IAAe,KAAA,YAAiB,UAAA,GAC3C,KAAA,GACA,IAAI,WAAA,CAAY,eAAA,EAAiB,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACzF,IAAA,OAAO,mBAAA,CAAoB,SAAS,UAAU,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,CAAC,YAAA,IAAgB,QAAA,CAAS,OAAA,IAAW,aAAa,OAAA,EAAS;AAC3D,IAAA,OAAO,cAAA,CAAe;AAAA,MAClB,GAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,OAAA;AAAA,MACA,kBAAkB,QAAA,CAAS,OAAA;AAAA,MAC3B,GAAI,YAAA,GAAe,EAAE,eAAe,YAAA,CAAa,OAAA,KAAY,EAAC;AAAA,MAC9D,UAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL;AAEA,EAAA,MAAM,OAAO,gBAAA,CAAiB,cAAA,EAAgB,KAAK,QAAA,CAAS,OAAA,EAAS,aAAa,OAAO,CAAA;AACzF,EAAA,IAAI,CAAC,IAAA,EAAM;AACP,IAAA,OAAO,mBAAA;AAAA,MACH,OAAA;AAAA,MACA,IAAI,WAAA;AAAA,QACA,0BAAA;AAAA,QACA,8BAA8B,GAAG,CAAA,QAAA,EAAW,SAAS,OAAO,CAAA,KAAA,EAAQ,aAAa,OAAO,CAAA;AAAA;AAC5F,KACJ;AAAA,EACJ;AAEA,EAAA,IAAI;AACA,IAAA,IAAI,QAAA,GAAW,OAAA;AACf,IAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACrB,MAAA,QAAA,GAAW,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAAA,IACpC;AACA,IAAA,qBAAA,CAAsB,GAAA,EAAK,QAAA,EAAU,YAAA,CAAa,MAAM,CAAA;AACxD,IAAA,OAAO,cAAA,CAAe;AAAA,MAClB,GAAA;AAAA,MACA,KAAA,EAAO,QAAA;AAAA,MACP,OAAA;AAAA,MACA,kBAAkB,QAAA,CAAS,OAAA;AAAA,MAC3B,eAAe,YAAA,CAAa,OAAA;AAAA,MAC5B,UAAA,EAAY,iBAAA,CAAkB,YAAA,CAAa,OAAA,EAAS,QAAQ,CAAA;AAAA,MAC5D,UAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL,SAAS,KAAA,EAAO;AACZ,IAAA,MAAM,UAAA,GACF,KAAA,YAAiB,WAAA,IAAe,KAAA,YAAiB,UAAA,GAC3C,KAAA,GACA,IAAI,WAAA,CAAY,kBAAA,EAAoB,CAAA,0BAAA,EAA6B,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACxF,IAAA,OAAO,mBAAA,CAAoB,SAAS,UAAU,CAAA;AAAA,EAClD;AACJ;AAEA,SAAS,aAAA,CAAiB;AAAA,EACtB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ,CAAA,EAM2B;AACvB,EAAA,IAAI,OAAO,IAAA,EAAM;AACb,IAAA,OAAO,oBAAoB,OAAO,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI;AACA,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,GAAA,EAAK,GAAG,CAAA;AACvC,IAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,cAAA,EAAgB,GAAG,CAAA;AACxD,IAAA,MAAM,gBAAA,GAAmB,mBAAA,CAAoB,cAAA,EAAgB,GAAA,EAAK,SAAS,OAAO,CAAA;AAElF,IAAA,IAAI,UAAA,KAAe,QAAA,IAAY,CAAC,gBAAA,EAAkB;AAC9C,MAAA,OAAO,mBAAA;AAAA,QACH,OAAA;AAAA,QACA,IAAI,YAAY,kBAAA,EAAoB,CAAA,mBAAA,EAAsB,GAAG,CAAA,GAAA,EAAM,QAAA,CAAS,OAAO,CAAA,CAAE;AAAA,OACzF;AAAA,IACJ;AAEA,IAAA,IAAI,UAAA,KAAe,YAAA,IAAgB,CAAC,gBAAA,EAAkB;AAClD,MAAA,OAAO,wBAAA,CAAyB;AAAA,QAC5B,GAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACH,CAAA;AAAA,IACL;AAEA,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACnB,MAAA,OAAO,0BAAA,CAA2B;AAAA,QAC9B,GAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACH,CAAA;AAAA,IACL;AAEA,IAAA,OAAO,2BAAA,CAA4B;AAAA,MAC/B,GAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL,SAAS,KAAA,EAAO;AACZ,IAAA,OAAO,mBAAA,CAAoB,SAAS,KAAiC,CAAA;AAAA,EACzE;AACJ;AAEA,SAAS,cAAA,CACL,SACA,UAAA,EAIF;AACE,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,GAAA,EAAK;AAAA,KACT;AAAA,EACJ;AAEA,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA;AACtC,IAAA,IAAI,aAAA,CAAc,GAAG,CAAA,EAAG;AACpB,MAAA,KAAK,QAAQ,OAAA,CAAQ,GAAG,CAAA,CAAE,KAAA,CAAM,MAAM,KAAA,CAAS,CAAA;AAC/C,MAAA,OAAO;AAAA,QACH,QAAA,EAAU,KAAA;AAAA,QACV,GAAA,EAAK;AAAA,OACT;AAAA,IACJ;AACA,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,IAAA;AAAA,MACV,GAAA,EAAK,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM;AAAA,KACzC;AAAA,EACJ,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,KAAA;AAAA,MACV,GAAA,EAAK;AAAA,KACT;AAAA,EACJ;AACJ;AAKA,SAAS,+BAAA,CAAgC,YAAwB,cAAA,EAAkD;AAC/G,EAAA,IAAI,UAAA,KAAe,QAAA,IAAY,CAAC,cAAA,EAAgB;AAC5C,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,UAAA,KAAe,YAAA,IAAgB,OAAO,cAAA,EAAgB,mBAAmB,UAAA,EAAY;AACrF,IAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,EAC3F;AACJ;AAwBO,SAAS,eACZ,OAAA,EACyD;AACzD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,wBAAA,EAAyB;AAC5D,EAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,SAAA;AACzC,EAAA,+BAAA,CAAgC,UAAA,EAAY,QAAQ,cAAc,CAAA;AAClE,EAAA,MAAM,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,SAAS,CAAA,CAAA,CAAA;AACnC,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,MAAM,MAAM,EAAC;AAEb,EAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,IAAA,EAAM;AAC9B,IAAA,MAAM,QAAA,GAAW,sBAAsB,KAAK,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,eAAe,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,EAAG,QAAA,CAAS,GAAG,CAAA,CAAE,CAAA;AACnE,IAAA,IAAI,SAAS,QAAA,EAAU;AACnB,MAAA,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,GAAI,QAAA,CAAS,GAAA;AAAA,IACjC;AACA,IAAA,MAAA,CAAO,QAAA,CAAS,GAA2C,CAAA,GAAI,aAAA,CAAc;AAAA,MACzE,KAAK,QAAA,CAAS,GAAA;AAAA,MACd,KAAK,QAAA,CAAS,GAAA;AAAA,MACd,SAAS,QAAA,CAAS,OAAA;AAAA,MAClB,UAAA;AAAA,MACA,gBAAgB,OAAA,CAAQ;AAAA,KAC3B,CAAA,CAAE,KAAA;AAAA,EACP;AAEA,EAAA,OAAO;AAAA,IACH,GAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAUO,SAAS,sBAAA,CAAgE;AAAA,EAC5E,QAAA;AAAA,EACA;AACJ,CAAA,EAGa;AACT,EAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AACrB,EAAA,OAAO,QAAA,CAAS,MAAA;AACpB","file":"bootstrap.js","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview Codec implementations for encoding and decoding values to/from storage.\n *\n * This module provides the built-in JSON codec and a factory for creating custom\n * codecs. Codecs handle the bidirectional transformation between typed JavaScript\n * values and their string representations for storage.\n *\n * Codecs are a low-level mechanism for keys that opt out of the JSON Schema\n * validation system. When a schema is registered for a key, the schema's\n * JSON Schema is used for validation and the payload is stored as a JSON value\n * directly (no codec encoding needed).\n */\n\nimport type { Codec } from \"./types\";\n\n/**\n * Custom error class for codec encoding and decoding failures.\n *\n * Thrown when a codec cannot successfully encode a value to a string or\n * decode a string back to its typed representation. This allows callers\n * to distinguish codec errors from other types of errors.\n *\n * @example\n * ```typescript\n * try {\n * const value = JSONCodec.decode('not-valid-json');\n * } catch (error) {\n * if (error instanceof CodecError) {\n * console.error('Failed to decode:', error.message);\n * }\n * }\n * ```\n */\nexport class CodecError extends Error {\n /**\n * The underlying error that caused the codec failure, if any.\n *\n * Useful for debugging when wrapping errors from JSON.parse or\n * other parsing operations.\n */\n readonly cause?: unknown;\n\n /**\n * Creates a new CodecError.\n *\n * @param message - Human-readable error description\n * @param cause - Optional underlying error that caused this failure\n */\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = \"CodecError\";\n this.cause = cause;\n\n // Required for proper instanceof behavior when targeting ES5\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * JSON codec for encoding and decoding JSON-serializable values.\n *\n * This is the default codec used by `useMnemonicKey` when no codec is specified.\n * It uses `JSON.stringify` for encoding and `JSON.parse` for decoding, making it\n * suitable for objects, arrays, and primitive values.\n *\n * @remarks\n * - Supports any JSON-serializable type: objects, arrays, strings, numbers, booleans, null\n * - Does not preserve JavaScript-specific types like Date, Map, Set, or undefined\n * - Throws standard JSON parsing errors for malformed JSON strings\n *\n * @example\n * ```typescript\n * // Used automatically as the default\n * const { value, set } = useMnemonicKey('userProfile', {\n * defaultValue: { name: 'Guest', preferences: { theme: 'dark' } }\n * // codec: JSONCodec is implicit\n * });\n *\n * // Can be specified explicitly\n * const { value, set } = useMnemonicKey('settings', {\n * defaultValue: { notifications: true },\n * codec: JSONCodec\n * });\n * ```\n *\n * @see {@link createCodec} - For custom encoding schemes\n */\nexport const JSONCodec: Codec<any> = {\n encode: (value) => JSON.stringify(value),\n decode: (encoded) => JSON.parse(encoded),\n};\n\n/**\n * Factory function for creating custom codecs.\n *\n * Creates a `Codec<T>` from separate encode and decode functions. This is\n * useful for implementing custom serialization strategies for types that\n * aren't supported by JSONCodec. Using a custom codec on a key opts out\n * of JSON Schema validation for that key.\n *\n * @template T - The TypeScript type of values to encode/decode\n *\n * @param encode - Function that converts a typed value to a string\n * @param decode - Function that converts a string back to a typed value\n * @returns A `Codec<T>` object compatible with useMnemonicKey\n *\n * @example\n * ```typescript\n * // Codec for Date objects\n * const DateCodec = createCodec<Date>(\n * (date) => date.toISOString(),\n * (str) => new Date(str)\n * );\n *\n * const { value, set } = useMnemonicKey('lastLogin', {\n * defaultValue: new Date(),\n * codec: DateCodec\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Codec for Set<string>\n * const StringSetCodec = createCodec<Set<string>>(\n * (set) => JSON.stringify(Array.from(set)),\n * (str) => new Set(JSON.parse(str))\n * );\n *\n * const { value, set } = useMnemonicKey('tags', {\n * defaultValue: new Set<string>(),\n * codec: StringSetCodec\n * });\n * ```\n *\n * @see {@link Codec} - The codec interface\n * @see {@link CodecError} - Error to throw when encoding/decoding fails\n * @see {@link JSONCodec} - Built-in codec for JSON values\n */\nexport function createCodec<T>(encode: (value: T) => string, decode: (encoded: string) => T): Codec<T> {\n return { encode, decode };\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview JSON Schema subset validator for Mnemonic.\n *\n * This module implements a minimal JSON Schema validator sufficient for\n * validating localStorage state. Only a subset of JSON Schema keywords\n * are supported; see {@link JsonSchema} for the full list.\n *\n * JSON Schema documents are plain JSON objects (inherently serializable),\n * making them suitable for storage alongside the data they describe.\n */\n\n/**\n * Supported JSON Schema type keywords.\n *\n * `\"integer\"` is a JSON Schema keyword meaning \"a number that is a whole number.\"\n */\nexport type JsonSchemaType = \"string\" | \"number\" | \"integer\" | \"boolean\" | \"null\" | \"object\" | \"array\";\n\n/**\n * A subset of JSON Schema sufficient for localStorage state management.\n *\n * Supported keywords:\n * type, enum, const,\n * minimum, maximum, exclusiveMinimum, exclusiveMaximum,\n * minLength, maxLength,\n * properties, required, additionalProperties,\n * items, minItems, maxItems\n *\n * Deliberately omitted: $ref, $id, $schema, $defs, allOf, anyOf,\n * oneOf, not, pattern, format, patternProperties, if/then/else,\n * dependencies, uniqueItems, multipleOf, propertyNames.\n *\n * An empty schema `{}` accepts any value.\n */\nexport interface JsonSchema {\n /** The expected JSON type(s). An array form like `[\"string\", \"null\"]` accepts either type. */\n type?: JsonSchemaType | JsonSchemaType[];\n\n /** The value must be deeply equal to one of these entries. */\n enum?: readonly unknown[];\n\n /** The value must be deeply equal to this exact value. */\n const?: unknown;\n\n /** Inclusive lower bound for numbers. */\n minimum?: number;\n\n /** Inclusive upper bound for numbers. */\n maximum?: number;\n\n /** Exclusive lower bound for numbers. */\n exclusiveMinimum?: number;\n\n /** Exclusive upper bound for numbers. */\n exclusiveMaximum?: number;\n\n /** Minimum string length (inclusive). */\n minLength?: number;\n\n /** Maximum string length (inclusive). */\n maxLength?: number;\n\n /** Property name to sub-schema mapping for objects. */\n properties?: Record<string, JsonSchema>;\n\n /** Properties that must be present on the object. */\n required?: readonly string[];\n\n /**\n * Controls extra properties not listed in `properties`.\n * `false` disallows them. A schema validates their values.\n * `true` (or omitted) allows anything.\n */\n additionalProperties?: boolean | JsonSchema;\n\n /** Schema applied to every element of an array. */\n items?: JsonSchema;\n\n /** Minimum array length (inclusive). */\n minItems?: number;\n\n /** Maximum array length (inclusive). */\n maxItems?: number;\n}\n\n/**\n * A single validation error produced by {@link validateJsonSchema}.\n */\nexport type JsonSchemaValidationError = {\n /** JSON Pointer path to the failing value (e.g., \"/foo/bar/0\"). Empty string for root. */\n path: string;\n /** Human-readable error description. */\n message: string;\n /** The JSON Schema keyword that failed. */\n keyword: string;\n};\n\n/**\n * Tests whether a value matches a single JSON Schema type keyword.\n */\nfunction matchesType(value: unknown, type: JsonSchemaType): boolean {\n switch (type) {\n case \"string\":\n return typeof value === \"string\";\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value);\n case \"integer\":\n return typeof value === \"number\" && Number.isInteger(value);\n case \"boolean\":\n return typeof value === \"boolean\";\n case \"null\":\n return value === null;\n case \"object\":\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n case \"array\":\n return Array.isArray(value);\n default:\n return false;\n }\n}\n\n/**\n * Structural deep equality for JSON values (null, booleans, numbers, strings,\n * arrays, and plain objects). Used by `enum` and `const` keywords.\n */\nfunction jsonDeepEqualArray(a: readonly unknown[], b: readonly unknown[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!jsonDeepEqual(a[i], b[i])) return false;\n }\n return true;\n}\n\nfunction jsonDeepEqualObject(a: Record<string, unknown>, b: Record<string, unknown>): boolean {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!objectHasOwn(b, key)) return false;\n if (!jsonDeepEqual(a[key], b[key])) return false;\n }\n return true;\n}\n\nexport function jsonDeepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== typeof b) return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) return false;\n return jsonDeepEqualArray(a, b);\n }\n\n if (typeof a === \"object\") {\n if (Array.isArray(b)) return false;\n return jsonDeepEqualObject(a as Record<string, unknown>, b as Record<string, unknown>);\n }\n\n return false;\n}\n\n/**\n * A pre-compiled validation function generated by {@link compileSchema}.\n *\n * Accepts a value and an optional JSON Pointer path for error reporting.\n * Returns an array of validation errors (empty = valid).\n */\nexport type CompiledValidator = (value: unknown, path?: string) => JsonSchemaValidationError[];\n\ntype ValidationStep = (value: unknown, path: string, errors: JsonSchemaValidationError[]) => void;\ntype TypeValidationStep = (value: unknown, path: string, errors: JsonSchemaValidationError[]) => boolean;\ntype ObjectValidationStep = (value: Record<string, unknown>, path: string, errors: JsonSchemaValidationError[]) => void;\n\n/** Module-level cache: schema object identity → compiled validator. */\nconst compiledCache = new WeakMap<JsonSchema, CompiledValidator>();\n\n/**\n * Pre-compiles a {@link JsonSchema} into a reusable validation function.\n *\n * Inspects the schema once and builds a specialized closure that\n * eliminates runtime branching for unused keywords, pre-converts\n * `required` arrays to `Set`s, recursively pre-compiles nested property\n * and item schemas, and pre-builds primitive `Set`s for O(1) enum\n * lookups when possible.\n *\n * Results are cached by schema object identity in a `WeakMap`, so\n * calling `compileSchema` with the same schema reference is free\n * after the first call.\n *\n * @param schema - The JSON Schema to compile\n * @returns A compiled validation function\n */\nexport function compileSchema(schema: JsonSchema): CompiledValidator {\n const cached = compiledCache.get(schema);\n if (cached) return cached;\n\n const compiled = buildValidator(schema);\n compiledCache.set(schema, compiled);\n return compiled;\n}\n\n/** Determines whether a value is a JSON primitive (not object/array). */\nfunction isJsonPrimitive(value: unknown): boolean {\n return value === null || typeof value !== \"object\";\n}\n\nfunction isJsonObjectRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction objectHasOwn(value: object, property: PropertyKey): boolean {\n const hasOwn = (Object as typeof Object & { hasOwn?: (target: object, key: PropertyKey) => boolean }).hasOwn;\n if (typeof hasOwn === \"function\") {\n return hasOwn(value, property);\n }\n return Object.getOwnPropertyDescriptor(value, property) !== undefined;\n}\n\n/**\n * Internal: builds a compiled validator closure for a single schema.\n * All keyword-specific logic is resolved at build time so the returned\n * function contains only the checks that are relevant.\n */\nfunction buildValidator(schema: JsonSchema): CompiledValidator {\n const typeStep = buildTypeValidationStep(schema);\n const validationSteps = [\n buildEnumValidationStep(schema),\n buildConstValidationStep(schema),\n buildNumberValidationStep(schema),\n buildStringValidationStep(schema),\n buildObjectValidationStep(schema),\n buildArrayValidationStep(schema),\n ].filter((step): step is ValidationStep => step !== null);\n\n if (typeStep === null && validationSteps.length === 0) {\n return (_value: unknown, _path?: string) => [];\n }\n\n return (value: unknown, path: string = \"\"): JsonSchemaValidationError[] => {\n const errors: JsonSchemaValidationError[] = [];\n if (typeStep && !typeStep(value, path, errors)) {\n return errors;\n }\n for (const step of validationSteps) {\n step(value, path, errors);\n }\n return errors;\n };\n}\n\nfunction buildTypeValidationStep(schema: JsonSchema): TypeValidationStep | null {\n if (schema.type === undefined) {\n return null;\n }\n\n const resolvedTypes = Array.isArray(schema.type) ? schema.type : [schema.type];\n const typeLabel = JSON.stringify(schema.type);\n return (value, path, errors) => {\n if (resolvedTypes.some((type) => matchesType(value, type))) {\n return true;\n }\n errors.push({\n path,\n message: `Expected type ${typeLabel}, got ${jsonTypeLabel(value)}`,\n keyword: \"type\",\n });\n return false;\n };\n}\n\nfunction buildEnumValidationStep(schema: JsonSchema): ValidationStep | null {\n if (schema.enum === undefined) {\n return null;\n }\n\n const enumPrimitiveSet = new Set(schema.enum.filter((member) => isJsonPrimitive(member)));\n const enumComplexMembers = schema.enum.filter((member) => !isJsonPrimitive(member));\n\n return (value, path, errors) => {\n const primitiveMatch = isJsonPrimitive(value) && enumPrimitiveSet.has(value);\n const complexMatch = !primitiveMatch && enumComplexMembers.some((entry) => jsonDeepEqual(value, entry));\n if (primitiveMatch || complexMatch) {\n return;\n }\n errors.push({\n path,\n message: `Value does not match any enum member`,\n keyword: \"enum\",\n });\n };\n}\n\nfunction buildConstValidationStep(schema: JsonSchema): ValidationStep | null {\n if (!(\"const\" in schema)) {\n return null;\n }\n\n return (value, path, errors) => {\n if (jsonDeepEqual(value, schema.const)) {\n return;\n }\n errors.push({\n path,\n message: `Value does not match const`,\n keyword: \"const\",\n });\n };\n}\n\nfunction buildNumberValidationStep(schema: JsonSchema): ValidationStep | null {\n const hasMinimum = schema.minimum !== undefined;\n const hasMaximum = schema.maximum !== undefined;\n const hasExMin = schema.exclusiveMinimum !== undefined;\n const hasExMax = schema.exclusiveMaximum !== undefined;\n if (!hasMinimum && !hasMaximum && !hasExMin && !hasExMax) {\n return null;\n }\n\n const minimum = schema.minimum;\n const maximum = schema.maximum;\n const exMin = schema.exclusiveMinimum;\n const exMax = schema.exclusiveMaximum;\n\n return (value, path, errors) => {\n if (typeof value !== \"number\") {\n return;\n }\n if (hasMinimum && value < minimum!) {\n errors.push({\n path,\n message: `Value ${value} is less than minimum ${minimum!}`,\n keyword: \"minimum\",\n });\n }\n if (hasMaximum && value > maximum!) {\n errors.push({\n path,\n message: `Value ${value} is greater than maximum ${maximum!}`,\n keyword: \"maximum\",\n });\n }\n if (hasExMin && value <= exMin!) {\n errors.push({\n path,\n message: `Value ${value} is not greater than exclusiveMinimum ${exMin!}`,\n keyword: \"exclusiveMinimum\",\n });\n }\n if (hasExMax && value >= exMax!) {\n errors.push({\n path,\n message: `Value ${value} is not less than exclusiveMaximum ${exMax!}`,\n keyword: \"exclusiveMaximum\",\n });\n }\n };\n}\n\nfunction buildStringValidationStep(schema: JsonSchema): ValidationStep | null {\n const hasMinLength = schema.minLength !== undefined;\n const hasMaxLength = schema.maxLength !== undefined;\n if (!hasMinLength && !hasMaxLength) {\n return null;\n }\n\n const minLength = schema.minLength;\n const maxLength = schema.maxLength;\n return (value, path, errors) => {\n if (typeof value !== \"string\") {\n return;\n }\n if (hasMinLength && value.length < minLength!) {\n errors.push({\n path,\n message: `String length ${value.length} is less than minLength ${minLength!}`,\n keyword: \"minLength\",\n });\n }\n if (hasMaxLength && value.length > maxLength!) {\n errors.push({\n path,\n message: `String length ${value.length} is greater than maxLength ${maxLength!}`,\n keyword: \"maxLength\",\n });\n }\n };\n}\n\nfunction buildObjectValidationStep(schema: JsonSchema): ValidationStep | null {\n const requiredKeys = schema.required ?? [];\n const propertyValidators = schema.properties\n ? (Object.entries(schema.properties).map(([name, propertySchema]) => [\n name,\n compileSchema(propertySchema),\n ]) satisfies [string, CompiledValidator][])\n : null;\n const checkAdditional = schema.additionalProperties !== undefined && schema.additionalProperties !== true;\n const additionalIsFalse = schema.additionalProperties === false;\n const additionalValidator =\n checkAdditional && !additionalIsFalse ? compileSchema(schema.additionalProperties as JsonSchema) : null;\n const definedPropKeys = checkAdditional ? new Set(Object.keys(schema.properties ?? {})) : null;\n const objectValidationSteps: ObjectValidationStep[] = [];\n\n if (requiredKeys.length > 0) {\n objectValidationSteps.push(createRequiredPropertyStep(requiredKeys));\n }\n if (propertyValidators !== null) {\n objectValidationSteps.push(createDeclaredPropertyStep(propertyValidators));\n }\n if (checkAdditional) {\n objectValidationSteps.push(\n createAdditionalPropertyStep({\n additionalIsFalse,\n additionalValidator,\n definedPropKeys: definedPropKeys ?? new Set<string>(),\n }),\n );\n }\n\n if (objectValidationSteps.length === 0) {\n return null;\n }\n\n return (value, path, errors) => {\n if (!isJsonObjectRecord(value)) {\n return;\n }\n\n for (const step of objectValidationSteps) {\n step(value, path, errors);\n }\n };\n}\n\nfunction createRequiredPropertyStep(requiredKeys: readonly string[]): ObjectValidationStep {\n return (value, path, errors) => {\n for (const requiredKey of requiredKeys) {\n if (objectHasOwn(value, requiredKey)) {\n continue;\n }\n errors.push({\n path,\n message: `Missing required property \"${requiredKey}\"`,\n keyword: \"required\",\n });\n }\n };\n}\n\nfunction createDeclaredPropertyStep(propertyValidators: [string, CompiledValidator][]): ObjectValidationStep {\n return (value, path, errors) => {\n for (const [propertyName, validator] of propertyValidators) {\n if (!objectHasOwn(value, propertyName)) {\n continue;\n }\n errors.push(...validator(value[propertyName], `${path}/${propertyName}`));\n }\n };\n}\n\nfunction createAdditionalPropertyStep({\n additionalIsFalse,\n additionalValidator,\n definedPropKeys,\n}: {\n additionalIsFalse: boolean;\n additionalValidator: CompiledValidator | null;\n definedPropKeys: Set<string>;\n}): ObjectValidationStep {\n return (value, path, errors) => {\n for (const objectKey of Object.keys(value)) {\n if (definedPropKeys.has(objectKey)) {\n continue;\n }\n if (additionalIsFalse) {\n errors.push({\n path,\n message: `Additional property \"${objectKey}\" is not allowed`,\n keyword: \"additionalProperties\",\n });\n continue;\n }\n errors.push(...additionalValidator!(value[objectKey], `${path}/${objectKey}`));\n }\n };\n}\n\nfunction buildArrayValidationStep(schema: JsonSchema): ValidationStep | null {\n const hasMinItems = schema.minItems !== undefined;\n const hasMaxItems = schema.maxItems !== undefined;\n const itemsValidator = schema.items ? compileSchema(schema.items) : null;\n if (!hasMinItems && !hasMaxItems && itemsValidator === null) {\n return null;\n }\n\n const minItems = schema.minItems;\n const maxItems = schema.maxItems;\n return (value, path, errors) => {\n if (!Array.isArray(value)) {\n return;\n }\n if (hasMinItems && value.length < minItems!) {\n errors.push({\n path,\n message: `Array length ${value.length} is less than minItems ${minItems!}`,\n keyword: \"minItems\",\n });\n }\n if (hasMaxItems && value.length > maxItems!) {\n errors.push({\n path,\n message: `Array length ${value.length} is greater than maxItems ${maxItems!}`,\n keyword: \"maxItems\",\n });\n }\n if (itemsValidator === null) {\n return;\n }\n for (const [index, item] of value.entries()) {\n errors.push(...itemsValidator(item, `${path}/${index}`));\n }\n };\n}\n\n/**\n * Validates a value against a {@link JsonSchema}.\n *\n * Returns an empty array when the value is valid.\n * Returns one or more {@link JsonSchemaValidationError} entries on failure.\n * Short-circuits on type mismatch (does not report downstream keyword errors).\n *\n * @param value - The value to validate\n * @param schema - The JSON Schema to validate against\n * @param path - Internal: JSON Pointer path for error reporting (default: `\"\"`)\n * @returns Array of validation errors (empty = valid)\n */\nexport function validateJsonSchema(value: unknown, schema: JsonSchema, path: string = \"\"): JsonSchemaValidationError[] {\n const compiled = compileSchema(schema);\n return compiled(value, path);\n}\n\n/**\n * Returns a human-readable label for the JSON type of a value.\n */\nfunction jsonTypeLabel(value: unknown): string {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"array\";\n return typeof value;\n}\n\n/**\n * Infers a minimal {@link JsonSchema} from a sample value.\n *\n * Used by autoschema mode to register a schema from the first\n * successfully decoded value. The inferred schema only constrains\n * the top-level type.\n *\n * @param sample - A decoded value to infer a schema from\n * @returns A minimal JsonSchema that accepts values of the same top-level type\n */\nexport function inferJsonSchema(sample: unknown): JsonSchema {\n if (sample === null) return { type: \"null\" };\n if (Array.isArray(sample)) return { type: \"array\" };\n switch (typeof sample) {\n case \"string\":\n return { type: \"string\" };\n case \"number\":\n return { type: \"number\" };\n case \"boolean\":\n return { type: \"boolean\" };\n case \"object\":\n return { type: \"object\" };\n default:\n return {};\n }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * @fileoverview Schema versioning primitives for Mnemonic.\n *\n * This module defines the envelope format used to wrap every persisted value\n * and the error class thrown when schema-related operations fail.\n */\n\n/**\n * Error thrown for schema registry, versioning, and migration failures.\n *\n * Each instance carries a machine-readable {@link code} that categorises\n * the failure. When a `defaultValue` factory is provided to\n * `useMnemonicKey`, the `SchemaError` is passed as the `error` argument\n * so the factory can inspect the failure reason.\n *\n * Error codes:\n *\n * | Code | Meaning |\n * | ------------------------------- | --------------------------------------------------------------- |\n * | `INVALID_ENVELOPE` | The raw stored value is not a valid `MnemonicEnvelope`. |\n * | `SCHEMA_NOT_FOUND` | No schema registered for the stored key + version. |\n * | `WRITE_SCHEMA_REQUIRED` | Strict mode requires a schema to write, but none was found. |\n * | `MIGRATION_PATH_NOT_FOUND` | No contiguous migration path between the stored and latest version. |\n * | `MIGRATION_FAILED` | A migration step threw during execution. |\n * | `MIGRATION_GRAPH_INVALID` | The schema registry helper received an ambiguous or cyclic migration graph. |\n * | `RECONCILE_FAILED` | A read-time reconciliation hook threw or returned an unpersistable value. |\n * | `SCHEMA_REGISTRATION_CONFLICT` | `registerSchema` was called with a conflicting definition. |\n * | `TYPE_MISMATCH` | The decoded value failed JSON Schema validation. |\n * | `MODE_CONFIGURATION_INVALID` | The schema mode requires a capability the registry doesn't provide. |\n *\n * @example\n * ```typescript\n * defaultValue: (error) => {\n * if (error instanceof SchemaError) {\n * console.warn(`Schema issue [${error.code}]:`, error.message);\n * }\n * return { name: \"Guest\" };\n * }\n * ```\n *\n * @see {@link SchemaMode} - How the provider uses schemas\n * @see {@link SchemaRegistry} - Where schemas and migrations are registered\n */\nexport class SchemaError extends Error {\n /**\n * Machine-readable code identifying the category of schema failure.\n */\n readonly code:\n | \"INVALID_ENVELOPE\"\n | \"SCHEMA_NOT_FOUND\"\n | \"WRITE_SCHEMA_REQUIRED\"\n | \"MIGRATION_PATH_NOT_FOUND\"\n | \"MIGRATION_FAILED\"\n | \"MIGRATION_GRAPH_INVALID\"\n | \"RECONCILE_FAILED\"\n | \"SCHEMA_REGISTRATION_CONFLICT\"\n | \"TYPE_MISMATCH\"\n | \"MODE_CONFIGURATION_INVALID\";\n\n /**\n * The underlying error that caused this failure, if any.\n */\n readonly cause?: unknown;\n\n /**\n * Creates a new SchemaError.\n *\n * @param code - Machine-readable failure category\n * @param message - Human-readable error description\n * @param cause - Optional underlying error\n */\n constructor(code: SchemaError[\"code\"], message: string, cause?: unknown) {\n super(message);\n this.name = \"SchemaError\";\n this.code = code;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * The JSON envelope that wraps every value persisted by the library.\n *\n * All values are stored as `JSON.stringify({ version, payload })`. The\n * `version` field tells the read path which schema to use for validating\n * the `payload`.\n *\n * - When no schema is active (codec-only mode), `version` is `0` and\n * `payload` is a codec-encoded string.\n * - When a schema is active, `version` corresponds to the schema version\n * and `payload` is the JSON value directly (not string-encoded).\n *\n * @internal\n */\nexport type MnemonicEnvelope = {\n /**\n * Schema version number.\n *\n * Non-negative integer. Any version (including `0`) may have a\n * registered {@link KeySchema}.\n */\n version: number;\n\n /**\n * The stored value.\n *\n * For schema-managed keys, this is a JSON value (object, array,\n * string, number, boolean, or null). For codec-managed keys, this\n * is a string produced by `Codec.encode`.\n */\n payload: unknown;\n};\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * Shared persistence primitives used by hook reads, optional\n * bridge decoding, and bootstrap recall.\n *\n * Keeping envelope parsing, schema lookup, and write encoding here ensures the\n * different entrypoints stay behaviorally aligned over time.\n */\n\nimport { CodecError } from \"./codecs\";\nimport { validateJsonSchema } from \"./json-schema\";\nimport { SchemaError, type MnemonicEnvelope } from \"./schema\";\nimport type { JsonSchema } from \"./json-schema\";\nimport type { Codec, KeySchema, MigrationPath, SchemaMode, SchemaRegistry } from \"./types\";\n\nfunction objectHasOwn(value: object, property: PropertyKey): boolean {\n const hasOwn = (Object as typeof Object & { hasOwn?: (target: object, key: PropertyKey) => boolean }).hasOwn;\n if (typeof hasOwn === \"function\") {\n return hasOwn(value, property);\n }\n return Object.getOwnPropertyDescriptor(value, property) !== undefined;\n}\n\n/**\n * Wraps a stored payload in the versioned mnemonic envelope format.\n */\nexport function serializeEnvelope(version: number, payload: unknown): string {\n return JSON.stringify({\n version,\n payload,\n } satisfies MnemonicEnvelope);\n}\n\n/**\n * Parses and validates a raw storage string as a mnemonic envelope.\n *\n * @throws {SchemaError} When the stored value is not valid JSON or does not\n * match the `{ version, payload }` envelope contract.\n */\nexport function parseEnvelope(key: string, rawText: string): MnemonicEnvelope {\n try {\n const parsed = JSON.parse(rawText) as MnemonicEnvelope;\n if (\n typeof parsed !== \"object\" ||\n parsed == null ||\n !Number.isInteger(parsed.version) ||\n parsed.version < 0 ||\n !objectHasOwn(parsed, \"payload\")\n ) {\n throw new SchemaError(\"INVALID_ENVELOPE\", `Invalid envelope for key \"${key}\"`);\n }\n return parsed;\n } catch (error) {\n if (error instanceof SchemaError) {\n throw error;\n }\n throw new SchemaError(\"INVALID_ENVELOPE\", `Invalid envelope for key \"${key}\"`, error);\n }\n}\n\n/**\n * Decodes a string payload using the active codec while normalizing thrown\n * errors to `CodecError`.\n */\nexport function decodeStringPayload<T>(key: string, payload: string, codec: Pick<Codec<T>, \"decode\">): T {\n try {\n return codec.decode(payload);\n } catch (error) {\n throw error instanceof CodecError ? error : new CodecError(`Codec decode failed for key \"${key}\"`, error);\n }\n}\n\n/**\n * Validates a decoded value against a JSON Schema and throws a typed\n * `SchemaError` when validation fails.\n */\nexport function validateAgainstSchema(key: string, value: unknown, jsonSchema: JsonSchema): void {\n const errors = validateJsonSchema(value, jsonSchema);\n if (errors.length === 0) {\n return;\n }\n const message = errors.map((entry) => `${entry.path || \"/\"}: ${entry.message}`).join(\"; \");\n throw new SchemaError(\"TYPE_MISMATCH\", `Schema validation failed for key \"${key}\": ${message}`);\n}\n\n/**\n * Looks up the latest registered schema for a key, if one exists.\n */\nexport function getLatestSchema(schemaRegistry: SchemaRegistry | undefined, key: string): KeySchema | undefined {\n return schemaRegistry?.getLatestSchema(key);\n}\n\n/**\n * Looks up the schema registered for a specific persisted version.\n */\nexport function getSchemaForVersion(\n schemaRegistry: SchemaRegistry | undefined,\n key: string,\n version: number,\n): KeySchema | undefined {\n return schemaRegistry?.getSchema(key, version);\n}\n\n/**\n * Resolves the migration path between two schema versions.\n */\nexport function getMigrationPath(\n schemaRegistry: SchemaRegistry | undefined,\n key: string,\n fromVersion: number,\n toVersion: number,\n): MigrationPath | null {\n return schemaRegistry?.getMigrationPath(key, fromVersion, toVersion) ?? null;\n}\n\n/**\n * Chooses the schema version that should govern an outgoing write.\n *\n * Explicit schema versions win when available. In non-strict modes the latest\n * known schema may be used as a fallback when the explicit version is missing.\n */\nexport function resolveTargetWriteSchema({\n key,\n explicitVersion,\n schemaMode,\n schemaRegistry,\n}: {\n key: string;\n explicitVersion: number | undefined;\n schemaMode: SchemaMode;\n schemaRegistry: SchemaRegistry | undefined;\n}): KeySchema | undefined {\n const latestSchema = getLatestSchema(schemaRegistry, key);\n if (explicitVersion === undefined) {\n return latestSchema;\n }\n\n const explicitSchema = getSchemaForVersion(schemaRegistry, key, explicitVersion);\n if (explicitSchema) {\n return explicitSchema;\n }\n\n return schemaMode === \"strict\" ? undefined : latestSchema;\n}\n\n/**\n * Encodes an outgoing value into its persisted envelope, applying optional\n * write-time migrations and schema validation first.\n */\nexport function encodePersistedValueForWrite<T>({\n key,\n nextValue,\n codec,\n explicitVersion,\n schemaMode,\n schemaRegistry,\n}: {\n key: string;\n nextValue: T;\n codec: Codec<T>;\n explicitVersion: number | undefined;\n schemaMode: SchemaMode;\n schemaRegistry: SchemaRegistry | undefined;\n}): string {\n const targetSchema = resolveTargetWriteSchema({\n key,\n explicitVersion,\n schemaMode,\n schemaRegistry,\n });\n\n if (!targetSchema) {\n if (explicitVersion !== undefined && schemaMode === \"strict\") {\n throw new SchemaError(\"WRITE_SCHEMA_REQUIRED\", `Write requires schema for key \"${key}\" in strict mode`);\n }\n return serializeEnvelope(0, codec.encode(nextValue));\n }\n\n let valueToStore: unknown = nextValue;\n const writeMigration = schemaRegistry?.getWriteMigration?.(key, targetSchema.version);\n if (writeMigration) {\n try {\n valueToStore = writeMigration.migrate(valueToStore);\n } catch (error) {\n throw error instanceof SchemaError\n ? error\n : new SchemaError(\"MIGRATION_FAILED\", `Write-time migration failed for key \"${key}\"`, error);\n }\n }\n\n validateAgainstSchema(key, valueToStore, targetSchema.schema);\n return serializeEnvelope(targetSchema.version, valueToStore);\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\nimport type { StorageLike } from \"./types\";\n\ntype RuntimeProcess = { env?: { NODE_ENV?: string } };\n\nfunction getGlobalProcess(): RuntimeProcess | undefined {\n return (globalThis as { process?: RuntimeProcess }).process;\n}\n\n/**\n * Reads `process.env.NODE_ENV` when it is available in the current runtime.\n *\n * This stays tolerant of browser-only and edge runtimes where `process` may\n * be absent entirely.\n */\nexport function getRuntimeNodeEnv(): string | undefined {\n const runtimeProcess = getGlobalProcess();\n if (runtimeProcess?.env?.NODE_ENV !== undefined) {\n return runtimeProcess.env.NODE_ENV;\n }\n return undefined;\n}\n\n/**\n * Returns the browser's default persistent storage backend when it is\n * synchronously accessible.\n *\n * Access can fail in restricted browsing modes or server environments, so the\n * helper returns `undefined` instead of throwing.\n */\nexport function getDefaultBrowserStorage(): StorageLike | undefined {\n const globalWindow = (globalThis as { window?: Window }).window;\n if (globalWindow === undefined) return undefined;\n try {\n return globalWindow.localStorage;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Returns the native browser storage backends that are currently accessible.\n *\n * This is used for cross-tab sync detection and DevTools integration, so\n * blocked storages are ignored rather than surfaced as runtime errors.\n */\nexport function getNativeBrowserStorages(): StorageLike[] {\n const globalWindow = (globalThis as { window?: Window }).window;\n if (!globalWindow) return [];\n\n const storages: StorageLike[] = [];\n const addStorage = (getter: () => StorageLike) => {\n try {\n storages.push(getter());\n } catch {\n // Ignore blocked browser storage access and continue probing others.\n }\n };\n\n addStorage(() => globalWindow.localStorage);\n addStorage(() => globalWindow.sessionStorage);\n return storages;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright Scott Dixon\n\n/**\n * Synchronous bootstrap recall helpers.\n *\n * These helpers let applications read and decode persisted mnemonic state\n * before React renders, apply first-paint side effects such as theme\n * attributes, and then seed `MnemonicProvider` with the same raw snapshot.\n */\n\nimport { CodecError, JSONCodec } from \"./codecs\";\nimport { inferJsonSchema } from \"./json-schema\";\nimport {\n decodeStringPayload,\n encodePersistedValueForWrite,\n getLatestSchema,\n getMigrationPath,\n getSchemaForVersion,\n parseEnvelope,\n serializeEnvelope,\n validateAgainstSchema,\n} from \"./persistence-shared\";\nimport { getDefaultBrowserStorage } from \"./runtime\";\nimport { SchemaError, type MnemonicEnvelope } from \"./schema\";\nimport type {\n KeySchema,\n MnemonicBootstrapSnapshot,\n MnemonicKeyDescriptor,\n SchemaMode,\n SchemaRegistry,\n StorageLike,\n UseMnemonicKeyOptions,\n} from \"./types\";\n\n/**\n * Internal bootstrap read result carrying the decoded value plus an optional\n * normalized raw payload that could be written back later.\n */\ntype BootstrapReadResult<T> = {\n value: T;\n rewriteRaw?: string;\n};\n\n/**\n * Inline key definition accepted by `recallMnemonic(...)`.\n *\n * This mirrors `defineMnemonicKey(...)` but keeps the key and options in a\n * single object for one-off bootstrap reads.\n */\nexport type MnemonicBootstrapKeyDefinition<T, K extends string = string> = Readonly<\n {\n key: K;\n } & UseMnemonicKeyOptions<T>\n>;\n\n/**\n * Bootstrap key input accepted by `recallMnemonic(...)`.\n *\n * Callers may reuse a shared descriptor from `defineMnemonicKey(...)` or pass\n * an inline `{ key, ...options }` definition.\n */\nexport type MnemonicBootstrapKeyInput<T, K extends string = string> =\n | MnemonicKeyDescriptor<T, K>\n | MnemonicBootstrapKeyDefinition<T, K>;\n\ntype InferMnemonicBootstrapKey<TInput> =\n TInput extends MnemonicKeyDescriptor<unknown, infer K extends string>\n ? K\n : TInput extends { key: infer K extends string }\n ? K\n : never;\n\ntype InferMnemonicBootstrapValue<TInput> =\n TInput extends MnemonicKeyDescriptor<infer TValue, string>\n ? TValue\n : TInput extends MnemonicBootstrapKeyDefinition<infer TValue, string>\n ? TValue\n : never;\n\ntype MnemonicBootstrapValues<TKeys extends readonly MnemonicBootstrapKeyInput<any, string>[]> = {\n [TKey in TKeys[number] as InferMnemonicBootstrapKey<TKey>]: InferMnemonicBootstrapValue<TKey>;\n};\n\n/**\n * Options for `recallMnemonic(...)`.\n *\n * @template TKeys - Tuple of key descriptors or inline bootstrap definitions\n */\nexport interface RecallMnemonicOptions<TKeys extends readonly MnemonicBootstrapKeyInput<any, string>[]> {\n /**\n * Namespace prefix used by the target provider.\n */\n namespace: string;\n\n /**\n * Storage backend to read from.\n *\n * Defaults to `window.localStorage` in browser environments.\n */\n storage?: StorageLike;\n\n /**\n * Schema enforcement mode to emulate during bootstrap reads.\n *\n * @default \"default\"\n */\n schemaMode?: SchemaMode;\n\n /**\n * Optional schema registry used for validation and migrations.\n *\n * Required when `schemaMode` is `\"strict\"` or `\"autoschema\"`.\n */\n schemaRegistry?: SchemaRegistry;\n\n /**\n * Keys to recall synchronously before React renders.\n *\n * Each entry may be either a `defineMnemonicKey(...)` descriptor or an\n * inline `{ key, ...options }` object using the same option contract as\n * `useMnemonicKey(...)`.\n */\n keys: TKeys;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n if (value == null) return false;\n if (typeof value !== \"object\" && typeof value !== \"function\") return false;\n return typeof (value as { then?: unknown }).then === \"function\";\n}\n\nfunction resolveBootstrapInput<T>(input: MnemonicBootstrapKeyInput<T, string>): MnemonicKeyDescriptor<T, string> {\n if (\"options\" in input) {\n return input;\n }\n\n const { key, ...options } = input;\n return {\n key,\n options,\n };\n}\n\nfunction resolveFallback<T>(\n defaultValue: UseMnemonicKeyOptions<T>[\"defaultValue\"],\n error?: CodecError | SchemaError,\n): T {\n return typeof defaultValue === \"function\"\n ? (defaultValue as (error?: CodecError | SchemaError) => T)(error)\n : defaultValue;\n}\n\nfunction encodeForWrite<T>(\n key: string,\n nextValue: T,\n options: UseMnemonicKeyOptions<T>,\n schemaMode: SchemaMode,\n schemaRegistry: SchemaRegistry | undefined,\n): string {\n return encodePersistedValueForWrite({\n key,\n nextValue,\n codec: options.codec ?? JSONCodec,\n explicitVersion: options.schema?.version,\n schemaMode,\n schemaRegistry,\n });\n}\n\nfunction applyReconcile<T>({\n key,\n value,\n options,\n persistedVersion,\n latestVersion,\n rewriteRaw,\n schemaMode,\n schemaRegistry,\n serializeForPersist,\n}: {\n key: string;\n value: T;\n options: UseMnemonicKeyOptions<T>;\n persistedVersion: number;\n latestVersion?: number;\n rewriteRaw?: string;\n schemaMode: SchemaMode;\n schemaRegistry: SchemaRegistry | undefined;\n serializeForPersist?: (value: T) => string;\n}): BootstrapReadResult<T> {\n const reconcile = options.reconcile;\n if (!reconcile) {\n return { value, ...(rewriteRaw === undefined ? {} : { rewriteRaw }) };\n }\n\n const persist =\n serializeForPersist ?? ((nextValue: T) => encodeForWrite(key, nextValue, options, schemaMode, schemaRegistry));\n const baselineSerialized = (() => {\n try {\n return persist(value);\n } catch {\n return rewriteRaw;\n }\n })();\n\n try {\n const reconciled = reconcile(value, {\n key,\n persistedVersion,\n ...(latestVersion === undefined ? {} : { latestVersion }),\n });\n const nextSerialized = persist(reconciled);\n const nextRewriteRaw =\n baselineSerialized === undefined || nextSerialized !== baselineSerialized ? nextSerialized : rewriteRaw;\n\n return {\n value: reconciled,\n ...(nextRewriteRaw === undefined ? {} : { rewriteRaw: nextRewriteRaw }),\n };\n } catch (error) {\n const typedError =\n error instanceof SchemaError\n ? error\n : new SchemaError(\"RECONCILE_FAILED\", `Reconciliation failed for key \"${key}\"`, error);\n return {\n value: resolveFallback(options.defaultValue, typedError),\n };\n }\n}\n\nfunction buildFallbackResult<T>(\n options: UseMnemonicKeyOptions<T>,\n error?: CodecError | SchemaError,\n): BootstrapReadResult<T> {\n return {\n value: resolveFallback(options.defaultValue, error),\n };\n}\n\nfunction decodeCodecManagedEnvelope<T>({\n key,\n envelope,\n options,\n latestSchema,\n schemaMode,\n schemaRegistry,\n}: {\n key: string;\n envelope: MnemonicEnvelope;\n options: UseMnemonicKeyOptions<T>;\n latestSchema: KeySchema | undefined;\n schemaMode: SchemaMode;\n schemaRegistry: SchemaRegistry | undefined;\n}): BootstrapReadResult<T> {\n if (typeof envelope.payload !== \"string\") {\n return applyReconcile({\n key,\n value: envelope.payload as T,\n options,\n persistedVersion: envelope.version,\n ...(latestSchema ? { latestVersion: latestSchema.version } : {}),\n schemaMode,\n schemaRegistry,\n });\n }\n\n try {\n const decoded = decodeStringPayload(key, envelope.payload, options.codec ?? JSONCodec);\n return applyReconcile({\n key,\n value: decoded,\n options,\n persistedVersion: envelope.version,\n ...(latestSchema ? { latestVersion: latestSchema.version } : {}),\n schemaMode,\n schemaRegistry,\n });\n } catch (error) {\n return buildFallbackResult(options, error as CodecError | SchemaError);\n }\n}\n\nfunction decodeAutoschemaEnvelope<T>({\n key,\n envelope,\n options,\n latestSchema,\n schemaRegistry,\n schemaMode,\n}: {\n key: string;\n envelope: MnemonicEnvelope;\n options: UseMnemonicKeyOptions<T>;\n latestSchema: KeySchema | undefined;\n schemaRegistry: SchemaRegistry | undefined;\n schemaMode: SchemaMode;\n}): BootstrapReadResult<T> {\n if (latestSchema) {\n return buildFallbackResult(\n options,\n new SchemaError(\"SCHEMA_NOT_FOUND\", `No schema for key \"${key}\" v${envelope.version}`),\n );\n }\n if (!schemaRegistry?.registerSchema) {\n return buildFallbackResult(\n options,\n new SchemaError(\n \"MODE_CONFIGURATION_INVALID\",\n `Autoschema mode requires schema registry registration for key \"${key}\"`,\n ),\n );\n }\n\n try {\n const decoded =\n typeof envelope.payload === \"string\"\n ? decodeStringPayload(key, envelope.payload, options.codec ?? JSONCodec)\n : (envelope.payload as T);\n const inferredVersion = 1;\n inferJsonSchema(decoded);\n return applyReconcile({\n key,\n value: decoded,\n options,\n persistedVersion: envelope.version,\n rewriteRaw: serializeEnvelope(inferredVersion, decoded),\n schemaMode,\n schemaRegistry,\n serializeForPersist: (value) => serializeEnvelope(inferredVersion, value),\n });\n } catch (error) {\n const typedError =\n error instanceof SchemaError || error instanceof CodecError\n ? error\n : new SchemaError(\"TYPE_MISMATCH\", `Autoschema inference failed for key \"${key}\"`, error);\n return buildFallbackResult(options, typedError);\n }\n}\n\nfunction decodeSchemaManagedEnvelope<T>({\n key,\n envelope,\n options,\n schemaForVersion,\n latestSchema,\n schemaMode,\n schemaRegistry,\n}: {\n key: string;\n envelope: MnemonicEnvelope;\n options: UseMnemonicKeyOptions<T>;\n schemaForVersion: KeySchema;\n latestSchema: KeySchema | undefined;\n schemaMode: SchemaMode;\n schemaRegistry: SchemaRegistry | undefined;\n}): BootstrapReadResult<T> {\n let current: unknown;\n try {\n current = envelope.payload;\n validateAgainstSchema(key, current, schemaForVersion.schema);\n } catch (error) {\n const typedError =\n error instanceof SchemaError || error instanceof CodecError\n ? error\n : new SchemaError(\"TYPE_MISMATCH\", `Schema decode failed for key \"${key}\"`, error);\n return buildFallbackResult(options, typedError);\n }\n\n if (!latestSchema || envelope.version >= latestSchema.version) {\n return applyReconcile({\n key,\n value: current as T,\n options,\n persistedVersion: envelope.version,\n ...(latestSchema ? { latestVersion: latestSchema.version } : {}),\n schemaMode,\n schemaRegistry,\n });\n }\n\n const path = getMigrationPath(schemaRegistry, key, envelope.version, latestSchema.version);\n if (!path) {\n return buildFallbackResult(\n options,\n new SchemaError(\n \"MIGRATION_PATH_NOT_FOUND\",\n `No migration path for key \"${key}\" from v${envelope.version} to v${latestSchema.version}`,\n ),\n );\n }\n\n try {\n let migrated = current;\n for (const step of path) {\n migrated = step.migrate(migrated);\n }\n validateAgainstSchema(key, migrated, latestSchema.schema);\n return applyReconcile({\n key,\n value: migrated as T,\n options,\n persistedVersion: envelope.version,\n latestVersion: latestSchema.version,\n rewriteRaw: serializeEnvelope(latestSchema.version, migrated),\n schemaMode,\n schemaRegistry,\n });\n } catch (error) {\n const typedError =\n error instanceof SchemaError || error instanceof CodecError\n ? error\n : new SchemaError(\"MIGRATION_FAILED\", `Migration failed for key \"${key}\"`, error);\n return buildFallbackResult(options, typedError);\n }\n}\n\nfunction decodeForRead<T>({\n key,\n raw,\n options,\n schemaMode,\n schemaRegistry,\n}: {\n key: string;\n raw: string | null;\n options: UseMnemonicKeyOptions<T>;\n schemaMode: SchemaMode;\n schemaRegistry: SchemaRegistry | undefined;\n}): BootstrapReadResult<T> {\n if (raw == null) {\n return buildFallbackResult(options);\n }\n\n try {\n const envelope = parseEnvelope(key, raw);\n const latestSchema = getLatestSchema(schemaRegistry, key);\n const schemaForVersion = getSchemaForVersion(schemaRegistry, key, envelope.version);\n\n if (schemaMode === \"strict\" && !schemaForVersion) {\n return buildFallbackResult(\n options,\n new SchemaError(\"SCHEMA_NOT_FOUND\", `No schema for key \"${key}\" v${envelope.version}`),\n );\n }\n\n if (schemaMode === \"autoschema\" && !schemaForVersion) {\n return decodeAutoschemaEnvelope({\n key,\n envelope,\n options,\n latestSchema,\n schemaRegistry,\n schemaMode,\n });\n }\n\n if (!schemaForVersion) {\n return decodeCodecManagedEnvelope({\n key,\n envelope,\n options,\n latestSchema,\n schemaMode,\n schemaRegistry,\n });\n }\n\n return decodeSchemaManagedEnvelope({\n key,\n envelope,\n options,\n schemaForVersion,\n latestSchema,\n schemaMode,\n schemaRegistry,\n });\n } catch (error) {\n return buildFallbackResult(options, error as CodecError | SchemaError);\n }\n}\n\nfunction readStorageRaw(\n storage: StorageLike | undefined,\n storageKey: string,\n): {\n readable: boolean;\n raw: string | null;\n} {\n if (!storage) {\n return {\n readable: false,\n raw: null,\n };\n }\n\n try {\n const raw = storage.getItem(storageKey);\n if (isPromiseLike(raw)) {\n void Promise.resolve(raw).catch(() => undefined);\n return {\n readable: false,\n raw: null,\n };\n }\n return {\n readable: true,\n raw: typeof raw === \"string\" ? raw : null,\n };\n } catch {\n return {\n readable: false,\n raw: null,\n };\n }\n}\n\n/**\n * Enforces the same schema-mode invariants as `MnemonicProvider`.\n */\nfunction assertRecallSchemaConfiguration(schemaMode: SchemaMode, schemaRegistry: SchemaRegistry | undefined): void {\n if (schemaMode === \"strict\" && !schemaRegistry) {\n throw new Error(\"recallMnemonic strict mode requires schemaRegistry\");\n }\n if (schemaMode === \"autoschema\" && typeof schemaRegistry?.registerSchema !== \"function\") {\n throw new Error(\"recallMnemonic autoschema mode requires schemaRegistry.registerSchema\");\n }\n}\n\n/**\n * Synchronously recalls a set of mnemonic keys before React renders.\n *\n * `recallMnemonic(...)` mirrors provider read behavior as closely as possible:\n * it parses envelopes, decodes codec payloads, applies schema validation,\n * runs migrations, and invokes `reconcile(...)` before returning decoded\n * values. The function is intentionally read-only; it does not write back\n * rewrites or register inferred autoschemas during bootstrap.\n *\n * The returned snapshot serves two purposes:\n * 1. `values` can drive first-paint boot logic such as applying a theme.\n * 2. `raw` can be passed to `MnemonicProvider` via `bootstrap` so the first\n * hook read can reuse the same raw snapshot without an immediate re-read.\n *\n * Keys whose storage reads were blocked, unavailable, or contract-violating\n * are omitted from `snapshot.raw` so the provider can retry later. Their\n * decoded `values` entries still fall back through the normal default-value\n * path.\n *\n * @throws {Error} When `schemaMode` requires a schema registry that was not\n * provided.\n */\nexport function recallMnemonic<TKeys extends readonly MnemonicBootstrapKeyInput<any, string>[]>(\n options: Readonly<RecallMnemonicOptions<TKeys>>,\n): MnemonicBootstrapSnapshot<MnemonicBootstrapValues<TKeys>> {\n const storage = options.storage ?? getDefaultBrowserStorage();\n const schemaMode = options.schemaMode ?? \"default\";\n assertRecallSchemaConfiguration(schemaMode, options.schemaRegistry);\n const prefix = `${options.namespace}.`;\n const values = {} as MnemonicBootstrapValues<TKeys>;\n const raw = {} as Record<string, string | null>;\n\n for (const entry of options.keys) {\n const resolved = resolveBootstrapInput(entry);\n const snapshot = readStorageRaw(storage, `${prefix}${resolved.key}`);\n if (snapshot.readable) {\n raw[resolved.key] = snapshot.raw;\n }\n values[resolved.key as keyof MnemonicBootstrapValues<TKeys>] = decodeForRead({\n key: resolved.key,\n raw: snapshot.raw,\n options: resolved.options,\n schemaMode,\n schemaRegistry: options.schemaRegistry,\n }).value as MnemonicBootstrapValues<TKeys>[keyof MnemonicBootstrapValues<TKeys>];\n }\n\n return {\n raw,\n values,\n };\n}\n\n/**\n * Applies a recalled bootstrap snapshot to app boot code and returns the\n * decoded values unchanged.\n *\n * This is a small convenience helper for patterns like first-paint theme\n * application, where the caller wants to synchronously apply `snapshot.values`\n * and then reuse the same snapshot object for `MnemonicProvider`.\n */\nexport function applyMnemonicBootstrap<TValues extends Record<string, unknown>>({\n snapshot,\n apply,\n}: Readonly<{\n snapshot: MnemonicBootstrapSnapshot<TValues>;\n apply: (values: TValues) => void;\n}>): TValues {\n apply(snapshot.values);\n return snapshot.values;\n}\n"]}