@schema-ts/core 0.1.0 → 0.1.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util.ts","../src/stringformat.ts","../src/i18n.ts","../src/version.ts","../src/normalize.ts","../src/validate.ts","../src/schema-util.ts","../src/render.ts"],"names":["_"],"mappings":";;;AAAO,SAAS,eAAA,CAAgB,OAAgB,IAAA,EAAuB;AACrE,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAAA,IAC1B,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA;AAAA,IACvD,KAAK,SAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,IAC5D,KAAK,SAAA;AACH,MAAA,OAAO,OAAO,KAAA,KAAU,SAAA;AAAA,IAC1B,KAAK,QAAA;AACH,MAAA,OACE,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,IAEvE,KAAK,OAAA;AACH,MAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,IAC5B,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;AAAA,IACrC;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEO,SAAS,iBAAiB,KAAA,EAAwB;AACvD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAO,OAAO,KAAA;AACpB,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,OAAO,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,GAAI,SAAA,GAAY,QAAA;AAAA,EAC/C;AACA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,iBAAiB,WAAA,EAA+B;AAC9D,EAAA,IAAI,WAAA,KAAgB,EAAA,EAAI,OAAO,EAAC;AAChC,EAAA,MAAM,OAAA,GACJ,YAAY,MAAA,CAAO,CAAC,MAAM,GAAA,GAAM,WAAA,CAAY,SAAA,CAAU,CAAC,CAAA,GAAI,WAAA;AAC7D,EAAA,OAAO,OAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,mBAAA,CAAoB,kBAAA,CAAmB,CAAC,CAAC,CAAC,CAAA;AAC1D;AAEO,SAAS,cAAA,CAAe,KAAc,WAAA,EAA8B;AACzE,EAAA,OAAO,GAAA,CAAI,GAAA,EAAK,gBAAA,CAAiB,WAAW,CAAC,CAAA;AAC/C;AAEO,SAAS,iBAAA,CAAkB,KAAc,WAAA,EAA8B;AAC5E,EAAA,MAAM,IAAA,GAAO,iBAAiB,WAAW,CAAA;AACzC,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,EAAW;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,GAAmB,GAAA;AAEvB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AACtB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,MAAM,GAAA,GAAM,OAAO,OAAO,CAAA;AAC1B,MAAA,IAAI,MAAM,GAAG,CAAA,IAAK,MAAM,CAAA,IAAK,GAAA,IAAO,QAAQ,MAAA,EAAQ;AAClD,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,IACvB,CAAA,MAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,YAAY,IAAA,EAAM;AAC1D,MAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA,EAAG;AACpC,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAA,GAAW,QAAoC,OAAO,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,EAAW;AAC7C,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACxC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,GAAA,GAAM,OAAO,WAAW,CAAA;AAC9B,IAAA,IAAI,MAAM,GAAG,CAAA,IAAK,MAAM,CAAA,IAAK,GAAA,IAAO,QAAQ,MAAA,EAAQ;AAClD,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAC,CAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,MAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,YAAY,IAAA,EAAM;AAC1D,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,WAAW,CAAA,EAAG;AACvC,MAAA,OAAQ,QAAoC,WAAW,CAAA;AACvD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,cAAA,CACd,GAAA,EACA,WAAA,EACA,KAAA,EACS;AACT,EAAA,MAAM,IAAA,GAAO,iBAAiB,WAAW,CAAA;AACzC,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,EAAW;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,GAAmB,GAAA;AAEvB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AACtB,IAAA,MAAM,MAAA,GAAS,CAAA,KAAM,IAAA,CAAK,MAAA,GAAS,CAAA;AAEnC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,MAAM,GAAA,GAAM,OAAO,OAAO,CAAA;AAC1B,MAAA,IAAI,KAAA,CAAM,GAAG,CAAA,IAAK,GAAA,GAAM,CAAA,EAAG;AACzB,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI,GAAA,IAAO,QAAQ,MAAA,EAAQ;AACzB,QAAA,KAAA,IAAS,CAAA,GAAI,QAAQ,MAAA,EAAQ,CAAA,IAAK,KAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,KAAK,MAAS,CAAA;AAAA,MACpE;AACA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AACf,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IACE,OAAA,CAAQ,GAAG,CAAA,KAAM,IAAA,IACjB,OAAA,CAAQ,GAAG,CAAA,KAAM,MAAA,IACjB,OAAO,OAAA,CAAQ,GAAG,CAAA,KAAM,QAAA,EACxB;AAEA,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AAC5B,QAAA,MAAM,OAAA,GAAU,OAAO,SAAS,CAAA;AAChC,QAAA,OAAA,CAAQ,GAAG,IAAI,CAAC,KAAA,CAAM,OAAO,CAAA,GAAI,KAAK,EAAC;AAAA,MACzC;AACA,MAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,IACvB,CAAA,MAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,YAAY,IAAA,EAAM;AAC1D,MAAA,IAAI,MAAA,EAAQ;AACV,QAAC,OAAA,CAAoC,OAAO,CAAA,GAAI,KAAA;AAChD,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IACE,CAAC,OAAO,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA,IAC9B,OAAA,CAAoC,OAAO,CAAA,KAAM,MAAA,EAClD;AACA,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AAC5B,QAAA,MAAM,OAAA,GAAU,OAAO,SAAS,CAAA;AAChC,QAAC,OAAA,CAAoC,OAAO,CAAA,GAAI,CAAC,MAAM,OAAO,CAAA,GAC1D,EAAC,GACD,EAAC;AAAA,MACP;AACA,MAAA,OAAA,GAAW,QAAoC,OAAO,CAAA;AAAA,IACxD,CAAA,MAAO;AAEL,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,GAAA,CAAI,KAAc,IAAA,EAAyB;AACzD,EAAA,IAAI,OAAA,GAAU,GAAA;AACd,EAAA,KAAA,MAAW,WAAW,IAAA,EAAM;AAC1B,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,MAAM,YAAA,GAAe,OAAO,OAAO,CAAA;AACnC,MAAA,IACE,MAAM,YAAY,CAAA,IAClB,eAAe,CAAA,IACf,YAAA,IAAgB,QAAQ,MAAA,EACxB;AACA,QAAA,OAAO,MAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,QAAQ,YAAY,CAAA;AAAA,MAChC;AAAA,IACF,CAAA,MAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,YAAY,IAAA,EAAM;AAC1D,MAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA,EAAG;AACpC,QAAA,OAAO,MAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,OAAA,GAAW,QAAoC,OAAO,CAAA;AAAA,MACxD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,SAAA,CAAU,GAAY,CAAA,EAAqB;AAEzD,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AAGpB,EAAA,IACE,OAAO,MAAM,QAAA,IACb,CAAA,KAAM,QACN,OAAO,CAAA,KAAM,QAAA,IACb,CAAA,KAAM,IAAA,EACN;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAA,YAAa,IAAA,IAAQ,CAAA,YAAa,IAAA,EAAM;AAC1C,IAAA,OAAO,CAAA,CAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,EAAQ;AAAA,EACnC;AACA,EAAA,IAAI,CAAA,YAAa,IAAA,IAAQ,CAAA,YAAa,IAAA,EAAM;AAC1C,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAA,YAAa,MAAA,IAAU,CAAA,YAAa,MAAA,EAAQ;AAC9C,IAAA,OAAO,EAAE,MAAA,KAAW,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,UAAU,CAAA,CAAE,KAAA;AAAA,EAChD;AACA,EAAA,IAAI,CAAA,YAAa,MAAA,IAAU,CAAA,YAAa,MAAA,EAAQ;AAC9C,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAA,YAAa,GAAA,IAAO,CAAA,YAAa,GAAA,EAAK;AACxC,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM,OAAO,KAAA;AAC9B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,CAAA,EAAG;AAC5B,MAAA,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,IAAK,CAAC,SAAA,CAAU,KAAA,EAAO,CAAA,CAAE,GAAA,CAAI,GAAG,CAAC,CAAA,EAAG;AAChD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,YAAa,GAAA,IAAO,CAAA,YAAa,GAAA,EAAK;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAA,YAAa,GAAA,IAAO,CAAA,YAAa,GAAA,EAAK;AACxC,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM,OAAO,KAAA;AAC9B,IAAA,KAAA,MAAW,SAAS,CAAA,EAAG;AAErB,MAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,MAAA,KAAA,MAAW,UAAU,CAAA,EAAG;AACtB,QAAA,IAAI,SAAA,CAAU,KAAA,EAAO,MAAM,CAAA,EAAG;AAC5B,UAAA,KAAA,GAAQ,IAAA;AACR,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AAAA,IACrB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,YAAa,GAAA,IAAO,CAAA,YAAa,GAAA,EAAK;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA,KAAM,MAAM,OAAA,CAAQ,CAAC,GAAG,OAAO,KAAA;AAClD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACpB,IAAA,MAAM,IAAA,GAAO,CAAA;AACb,IAAA,MAAM,IAAA,GAAO,CAAA;AACb,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,MAAA,EAAQ,OAAO,KAAA;AACxC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,IAAI,CAAC,UAAU,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IAC3C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,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;AAE1C,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,GAAG,GAAG,OAAO,KAAA;AACnC,IAAA,IACE,CAAC,SAAA;AAAA,MACE,EAA8B,GAAG,CAAA;AAAA,MACjC,EAA8B,GAAG;AAAA,KACpC,EACA;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,kBAAkB,GAAA,EAAqB;AACrD,EAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA,CAAE,OAAA,CAAQ,OAAO,IAAI,CAAA;AACpD;AAEO,SAAS,oBAAoB,GAAA,EAAqB;AACvD,EAAA,OAAO,IAAI,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,GAAG,CAAA;AACnD;AAEO,SAAS,eAAA,CAAgB,MAAc,KAAA,EAAuB;AACnE,EAAA,IAAI,IAAA,KAAS,EAAA,EAAI,OAAO,GAAA,GAAM,kBAAkB,KAAK,CAAA;AAAA,OAChD,OAAO,IAAA,GAAO,GAAA,GAAM,iBAAA,CAAkB,KAAK,CAAA;AAClD;AAOO,SAAS,mBAAA,CACd,UACA,YAAA,EACQ;AACR,EAAA,IAAI,YAAA,CAAa,UAAA,CAAW,GAAG,CAAA,EAAG;AAEhC,IAAA,OAAO,QAAA,KAAa,EAAA,GAAK,YAAA,GAAe,QAAA,GAAW,YAAA;AAAA,EACrD;AACA,EAAA,OAAO,YAAA;AACT;AAKA,IAAM,oBAAA,GAAuB,GAAA;AAM7B,IAAM,UAAA,uBAAiB,GAAA,EAA2B;AAO3C,SAAS,aAAA,CAAc,SAAiB,KAAA,EAAwB;AACrE,EAAA,IAAI,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AAGlC,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,IAAI,OAAO,OAAO,CAAA;AAE1B,MAAA,IAAI,UAAA,CAAW,QAAQ,oBAAA,EAAsB;AAC3C,QAAA,MAAM,QAAA,GAAW,UAAA,CAAW,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AAC1C,QAAA,IAAI,aAAa,KAAA,CAAA,EAAW;AAC1B,UAAA,UAAA,CAAW,OAAO,QAAQ,CAAA;AAAA,QAC5B;AAAA,MACF;AACA,MAAA,UAAA,CAAW,GAAA,CAAI,SAAS,KAAK,CAAA;AAAA,IAC/B,CAAA,CAAA,MAAQ;AAEN,MAAA,UAAA,CAAW,GAAA,CAAI,SAAS,IAAI,CAAA;AAC5B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AACzB;;;AC3XA,IAAM,OAAA,GAAU,uDAAA;AAAhB,IACE,WAAA,GAAc,0DAAA;AADhB,IAEE,QAAA,GAAW,4BAAA;AAFb,IAGE,WAAA,GACE,2GAAA;AAJJ,IAKE,OAAA,GACE,6FAAA;AANJ,IAOE,OAAA,GACE,mpBAAA;AARJ,IASE,UAAA,GACE,sEAAA;AAVJ,IAWE,OAAA,GACE,+EAAA;AAOG,IAAM,wBAAN,MAAsE;AAAA,EAC3E,QAAA,CAAS,QAAgB,KAAA,EAAwB;AAC/C,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,WAAA;AACH,QAAA,OAAO,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,MAC9B,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,MAC1B,KAAK,OAAA;AACH,QAAA,OAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,MAC3B,KAAK,UAAA;AACH,QAAA,OAAO,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,MAC9B,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,MAC1B,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,MAC1B,KAAK,KAAA;AACH,QAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,MACzB,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,MAC1B,KAAK,UAAA;AACH,QAAA,OAAO,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,MAC9B;AACE,QAAA,OAAO,IAAA;AAAA;AACX,EACF;AAAA,EAEQ,WAAW,KAAA,EAAwB;AACzC,IAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,KAAK,GAAG,OAAO,KAAA;AACpC,IAAA,OAAO,CAAC,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EACjC;AAAA,EAEQ,OAAO,KAAA,EAAwB;AACrC,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AAC5B,IAAA,IAAI,CAAC,GAAG,OAAO,KAAA;AACf,IAAA,MAAM,OAAO,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA,EACtB,QAAQ,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,GACnB,GAAA,GAAM,MAAA,CAAO,EAAE,CAAC,CAAC,GACjB,WAAA,GAAc;AAAA,MACZ,EAAA;AAAA,MACA,IAAA,GAAO,MAAM,CAAA,KAAM,IAAA,GAAO,QAAQ,CAAA,IAAK,IAAA,GAAO,GAAA,KAAQ,CAAA,CAAA,GAAK,EAAA,GAAK,EAAA;AAAA,MAChE,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA;AAAA,KACF;AACF,IAAA,OAAO,GAAA,IAAO,WAAA,CAAY,KAAA,GAAQ,CAAC,CAAA;AAAA,EACrC;AAAA,EAEQ,QAAQ,KAAA,EAAwB;AACtC,IAAA,OAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,EAC5B;AAAA,EAEQ,WAAW,KAAA,EAAwB;AACzC,IAAA,OAAO,WAAA,CAAY,KAAK,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEQ,OAAO,KAAA,EAAwB;AACrC,IAAA,OAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEQ,OAAO,KAAA,EAAwB;AACrC,IAAA,OAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEQ,MAAM,KAAA,EAAwB;AACpC,IAAA,IAAI;AACF,MAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,KAAK,CAAA;AACvB,MAAA,OAAO,OAAO,CAAA,CAAE,QAAA,KAAa,QAAA,IAAY,CAAA,CAAE,SAAS,MAAA,GAAS,CAAA;AAAA,IAC/D,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,OAAO,KAAA,EAAwB;AACrC,IAAA,OAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEQ,WAAW,KAAA,EAAwB;AACzC,IAAA,OAAO,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA,IAAK,KAAA,KAAU,GAAA;AAAA,EAC9C;AACF;AAEO,IAAM,qBAAA,GAAwB,IAAI,qBAAA;;;ACxGlC,IAAM,QAAA,GAAmC;AAAA,EAC9C,kBAAA,EAAoB,gCAAA;AAAA,EACpB,kBAAA,EAAoB,gDAAA;AAAA,EACpB,gBAAA,EAAkB,uBAAA;AAAA,EAClB,kBAAA,EAAoB,0BAAA;AAAA,EACpB,iBAAA,EAAmB,4CAAA;AAAA,EACnB,iBAAA,EAAmB,oBAAA;AAAA,EACnB,oBAAA,EAAsB,oBAAA;AAAA,EACtB,6BAAA,EAA+B,mBAAA;AAAA,EAC/B,oBAAA,EAAsB,oBAAA;AAAA,EACtB,6BAAA,EAA+B,mBAAA;AAAA,EAC/B,uBAAA,EAAyB,6BAAA;AAAA,EACzB,sBAAA,EAAwB,qDAAA;AAAA,EACxB,sBAAA,EAAwB,oDAAA;AAAA,EACxB,oBAAA,EAAsB,gCAAA;AAAA,EACtB,mBAAA,EAAqB,8BAAA;AAAA,EACrB,qBAAA,EAAuB,iCAAA;AAAA,EACvB,qBAAA,EAAuB,kCAAA;AAAA,EACvB,wBAAA,EAA0B,kCAAA;AAAA,EAC1B,qBAAA,EAAuB,sCAAA;AAAA,EACvB,wBAAA,EAA0B,2CAAA;AAAA,EAC1B,wBAAA,EAA0B,0CAAA;AAAA,EAC1B,0BAAA,EAA4B,sCAAA;AAAA,EAC5B,0BAAA,EAA4B,uCAAA;AAAA,EAC5B,qBAAA,EAAuB,0CAAA;AAAA,EACvB,8BAAA,EACE,kDAAA;AAAA,EACF,iCAAA,EACE,mDAAA;AAAA,EACF,mBAAA,EAAqB;AACvB;AAWO,IAAM,qBAAA,GAAwC,CAAC,GAAA,KAAQ;AAC5D,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,GAAG,KAAK,GAAA,CAAI,GAAA;AAC1C,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,EAAQ,OAAO,QAAA;AAExB,EAAA,IAAI,MAAA,GAAS,QAAA;AACb,EAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AAC/C,IAAA,MAAM,KAAA,GACJ,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AACpE,IAAA,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,CAAA,CAAA,EAAI,CAAC,KAAK,KAAK,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,MAAA;AACT;;;AC3CO,IAAM,UAAA,GAA4C;AAAA,EACvD,UAAA,EAAY;AAAA,IACV,yCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,yCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,8CAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,8CAAA;AAAA,IACA;AAAA;AAEJ;AAWO,SAAS,kBAAkB,MAAA,EAA8B;AAE9D,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClE,IAAA,OAAO,eAAA;AAAA,EACT;AAEA,EAAA,MAAM,CAAA,GAAI,MAAA;AAGV,EAAA,IAAI,CAAA,CAAE,OAAA,IAAW,OAAO,CAAA,CAAE,YAAY,QAAA,EAAU;AAC9C,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACtD,MAAA,IAAI,KAAK,IAAA,CAAK,CAAC,QAAQ,CAAA,CAAE,OAAA,KAAY,GAAG,CAAA,EAAG;AACzC,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAKA,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,IAAA,OAAO,eAAA;AAAA,EACT;AAGA,EAAA,IACE,mBAAmB,CAAA,IACnB,kBAAA,IAAsB,KACtB,uBAAA,IAA2B,CAAA,IAC3B,sBAAsB,CAAA,EACtB;AACA,IAAA,OAAO,eAAA;AAAA,EACT;AAGA,EAAA,IAAI,IAAA,IAAQ,CAAA,IAAK,EAAE,KAAA,IAAS,CAAA,CAAA,EAAI;AAC9B,IAAA,OAAO,UAAA;AAAA,EACT;AAGA,EAAA,IACE,OAAO,CAAA,CAAE,gBAAA,KAAqB,aAC9B,OAAO,CAAA,CAAE,qBAAqB,SAAA,EAC9B;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAGA,EAAA,IAAI,kBAAkB,CAAA,EAAG;AAEvB,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAGA,EAAA,IAAI,qBAAqB,CAAA,EAAG;AAC1B,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAGA,EAAA,OAAO,eAAA;AACT;;;AC/EO,SAAS,eAAA,CACd,MAAA,EACA,OAAA,GAA6B,EAAC,EACtB;AAER,EAAA,IAAI,OAAO,WAAW,SAAA,EAAW;AAC/B,IAAA,OAAO,SAAS,EAAC,GAAI,EAAE,GAAA,EAAK,EAAC,EAAE;AAAA,EACjC;AAGA,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClE,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,SAAA,GAAY,MAAA;AAClB,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,WAAA,IAAe,iBAAA,CAAkB,SAAS,CAAA;AAGtE,EAAA,MAAM,UAAA,GAAqB,EAAE,GAAG,SAAA,EAAU;AAG1C,EAAA,QAAQ,WAAA;AAAa,IACnB,KAAK,UAAA;AACH,MAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3B,MAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3B,MAAA,oBAAA,CAAqB,UAAU,CAAA;AAC/B,MAAA;AAAA,IACF,KAAK,UAAA;AACH,MAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3B,MAAA,oBAAA,CAAqB,UAAU,CAAA;AAC/B,MAAA;AAAA,IACF,KAAK,eAAA;AACH,MAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3B,MAAA,oBAAA,CAAqB,UAAU,CAAA;AAC/B,MAAA;AAAA;AAIJ,EAAA,gBAAA,CAAiB,UAAU,CAAA;AAG3B,EAAA,sBAAA,CAAuB,YAAY,OAAO,CAAA;AAG1C,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,UAAA,CAAW,OAAA,GAAU,8CAAA;AAAA,EACvB;AAEA,EAAA,OAAO,UAAA;AACT;AAKA,SAAS,iBAAiB,MAAA,EAAsB;AAE9C,EAAA,MAAM,MAAA,GAAS,MAAA;AAGf,EAAA,IAAI,IAAA,IAAQ,MAAA,IAAU,EAAE,KAAA,IAAS,MAAA,CAAA,EAAS;AACxC,IAAA,MAAA,CAAO,MAAM,MAAA,CAAO,EAAA;AACpB,IAAA,OAAO,MAAA,CAAO,EAAA;AAAA,EAChB;AAIA,EAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACrC,MAAA,IACE,GAAA,KAAQ,UACR,GAAA,KAAQ,SAAA,IACR,QAAQ,IAAA,IACR,GAAA,KAAQ,KAAA,IACR,GAAA,KAAQ,UAAA,EACR;AACA,QAAA,OAAO,OAAO,GAAG,CAAA;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAKA,EAAA,IACE,OAAO,MAAA,CAAO,gBAAA,KAAqB,SAAA,IACnC,MAAA,CAAO,qBAAqB,IAAA,EAC5B;AACA,IAAA,IAAI,MAAA,CAAO,YAAY,MAAA,EAAW;AAChC,MAAA,MAAA,CAAO,mBAAmB,MAAA,CAAO,OAAA;AACjC,MAAA,OAAO,MAAA,CAAO,OAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,OAAO,MAAA,CAAO,gBAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,IACE,OAAO,MAAA,CAAO,gBAAA,KAAqB,SAAA,IACnC,MAAA,CAAO,qBAAqB,IAAA,EAC5B;AACA,IAAA,IAAI,MAAA,CAAO,YAAY,MAAA,EAAW;AAChC,MAAA,MAAA,CAAO,mBAAmB,MAAA,CAAO,OAAA;AACjC,MAAA,OAAO,MAAA,CAAO,OAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,OAAO,MAAA,CAAO,gBAAA;AAAA,IAChB;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,qBAAqB,KAAA,EAAO;AACrC,IAAA,OAAO,MAAA,CAAO,gBAAA;AAAA,EAChB;AACA,EAAA,IAAI,MAAA,CAAO,qBAAqB,KAAA,EAAO;AACrC,IAAA,OAAO,MAAA,CAAO,gBAAA;AAAA,EAChB;AAIA,EAAA,IACE,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,IACzB,MAAA,CAAO,IAAA,CAAK,MAAA,KAAW,CAAA,IACvB,MAAA,CAAO,KAAA,KAAU,MAAA,EACjB;AACA,IAAA,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAAA,EAC9B;AACF;AAKA,SAAS,iBAAiB,MAAA,EAAsB;AAE9C,EAAA,MAAM,MAAA,GAAS,MAAA;AAKf,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,cAAc,MAAA,CAAO,KAAA;AAC5B,IAAA,IAAI,qBAAqB,MAAA,EAAQ;AAC/B,MAAA,IACE,OAAO,MAAA,CAAO,eAAA,KAAoB,YAClC,OAAO,MAAA,CAAO,oBAAoB,SAAA,EAClC;AACA,QAAA,MAAA,CAAO,QAAQ,MAAA,CAAO,eAAA;AAAA,MACxB;AACA,MAAA,OAAO,MAAA,CAAO,eAAA;AAAA,IAChB,CAAA,MAAO;AAIL,MAAA,OAAO,MAAA,CAAO,KAAA;AAAA,IAChB;AAAA,EACF,CAAA,MAAA,IAAW,qBAAqB,MAAA,EAAQ;AAEtC,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,EAChB;AAGA,EAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,IAAA,MAAM,OAAO,MAAA,CAAO,YAAA;AAEpB,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAChD,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAExB,QAAA,IAAI,CAAC,OAAO,iBAAA,EAAmB;AAC7B,UAAA,MAAA,CAAO,oBAAoB,EAAC;AAAA,QAC9B;AACA,QAAA,MAAA,CAAO,iBAAA,CAAkB,IAAI,CAAA,GAAI,KAAA;AAAA,MACnC,CAAA,MAAO;AAEL,QAAA,IAAI,CAAC,OAAO,gBAAA,EAAkB;AAC5B,UAAA,MAAA,CAAO,mBAAmB,EAAC;AAAA,QAC7B;AACA,QAAA,MAAA,CAAO,gBAAA,CAAiB,IAAI,CAAA,GAAI,KAAA;AAAA,MAClC;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,YAAA;AAAA,EAChB;AACF;AAKA,SAAS,iBAAiB,MAAA,EAAsB;AAE9C,EAAA,MAAM,MAAA,GAAS,MAAA;AAGf,EAAA,IAAI,MAAA,CAAO,aAAa,IAAA,EAAM;AAC5B,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,MAAA,MAAA,CAAO,IAAA,GAAO,CAAC,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAAA,IACpC,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,EAAG;AACrC,MAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACjC,QAAA,MAAA,CAAO,IAAA,GAAO,CAAC,GAAG,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MACvC;AAAA,IACF;AACA,IAAA,OAAO,MAAA,CAAO,QAAA;AAAA,EAChB;AAGA,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,IAAI,EAAE,cAAc,MAAA,CAAA,EAAS;AAC3B,MAAA,MAAA,CAAO,QAAA,GAAW,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,MAAA,CAAO,OAAA;AAAA,EAChB;AACF;AAKA,SAAS,qBAAqB,MAAA,EAAsB;AAElD,EAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,IAAA,IAAI,MAAM,MAAA,CAAO,aAAA;AAGjB,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,GAAA,GAAM,kBAAA;AAAA,IACR;AACA,IAAA,MAAA,CAAO,WAAA,GAAc,GAAA;AACrB,IAAA,OAAO,MAAA,CAAO,aAAA;AAAA,EAChB;AAGA,EAAA,IAAI,sBAAsB,MAAA,EAAQ;AAEhC,IAAA,IAAI,MAAA,CAAO,qBAAqB,IAAA,EAAM;AAEpC,MAAA,MAAA,CAAO,cAAA,GAAiB,OAAO,cAAA,IAAkB,iBAAA;AAAA,IACnD;AACA,IAAA,OAAO,MAAA,CAAO,gBAAA;AAAA,EAChB;AACF;AAKA,SAAS,sBAAA,CACP,QACA,OAAA,EACM;AAEN,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAA,CAAO,QAAQ,MAAA,CAAO,WAAA;AAAA,MACpB,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM;AAAA,QACrD,GAAA;AAAA,QACA,eAAA,CAAgB,WAAW,OAAO;AAAA,OACnC;AAAA,KACH;AAAA,EACF;AAGA,EAAA,IAAI,iBAAiB,MAAA,EAAQ;AAC3B,IAAA,MAAM,OAAO,MAAA,CAAO,WAAA;AACpB,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,MAAA,MAAA,CAAO,QAAQ,EAAC;AAAA,IAClB;AACA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACnD,MAAA,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,eAAA,CAAgB,WAAW,OAAO,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,MAAA,CAAO,WAAA;AAAA,EAChB;AAGA,EAAA,IAAI,OAAO,UAAA,EAAY;AACrB,IAAA,MAAA,CAAO,aAAa,MAAA,CAAO,WAAA;AAAA,MACzB,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM;AAAA,QAC1D,GAAA;AAAA,QACA,eAAA,CAAgB,WAAW,OAAO;AAAA,OACnC;AAAA,KACH;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,IAAA,MAAA,CAAO,oBAAoB,MAAA,CAAO,WAAA;AAAA,MAChC,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,iBAAiB,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM;AAAA,QACjE,GAAA;AAAA,QACA,eAAA,CAAgB,WAAW,OAAO;AAAA,OACnC;AAAA,KACH;AAAA,EACF;AAGA,EAAA,IACE,MAAA,CAAO,oBAAA,IACP,OAAO,MAAA,CAAO,yBAAyB,QAAA,EACvC;AACA,IAAA,MAAA,CAAO,oBAAA,GAAuB,eAAA;AAAA,MAC5B,MAAA,CAAO,oBAAA;AAAA,MACP;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IACE,MAAA,CAAO,KAAA,IACP,OAAO,MAAA,CAAO,KAAA,KAAU,QAAA,IACxB,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAC3B;AACA,IAAA,MAAA,CAAO,KAAA,GAAQ,eAAA,CAAgB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EACtD;AAGA,EAAA,IAAI,OAAO,WAAA,EAAa;AACtB,IAAA,MAAA,CAAO,WAAA,GAAc,OAAO,WAAA,CAAY,GAAA;AAAA,MAAI,CAAC,CAAA,KAC3C,eAAA,CAAgB,CAAA,EAAG,OAAO;AAAA,KAC5B;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,MAAA,CAAO,QAAA,GAAW,eAAA,CAAgB,MAAA,CAAO,QAAA,EAAU,OAAO,CAAA;AAAA,EAC5D;AAGA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAA,CAAO,KAAA,GAAQ,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAA,CAAO,KAAA,GAAQ,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAA,CAAO,KAAA,GAAQ,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,OAAO,GAAA,EAAK;AACd,IAAA,MAAA,CAAO,GAAA,GAAM,eAAA,CAAgB,MAAA,CAAO,GAAA,EAAK,OAAO,CAAA;AAAA,EAClD;AAGA,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,MAAA,CAAO,EAAA,GAAK,eAAA,CAAgB,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAA,CAAO,IAAA,GAAO,eAAA,CAAgB,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA;AAAA,EACpD;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAA,CAAO,IAAA,GAAO,eAAA,CAAgB,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA;AAAA,EACpD;AAGA,EAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,IAAA,MAAA,CAAO,mBAAmB,MAAA,CAAO,WAAA;AAAA,MAC/B,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM;AAAA,QAChE,GAAA;AAAA,QACA,eAAA,CAAgB,WAAW,OAAO;AAAA,OACnC;AAAA,KACH;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,IAAA,MAAA,CAAO,gBAAA,GAAmB,eAAA,CAAgB,MAAA,CAAO,gBAAA,EAAkB,OAAO,CAAA;AAAA,EAC5E;AACA,EAAA,IAAI,OAAO,qBAAA,EAAuB;AAChC,IAAA,MAAA,CAAO,qBAAA,GAAwB,eAAA;AAAA,MAC7B,MAAA,CAAO,qBAAA;AAAA,MACP;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,aAAA,EAAe;AACxB,IAAA,MAAA,CAAO,aAAA,GAAgB,eAAA,CAAgB,MAAA,CAAO,aAAA,EAAe,OAAO,CAAA;AAAA,EACtE;AAGA,EAAA,IAAI,OAAO,aAAA,EAAe;AACxB,IAAA,MAAA,CAAO,aAAA,GAAgB,eAAA,CAAgB,MAAA,CAAO,aAAA,EAAe,OAAO,CAAA;AAAA,EACtE;AACF;;;AC/XO,IAAM,YAAN,MAAgB;AAAA,EACb,eAAA;AAAA,EACA,cAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAA0B,EAAC,EAAG;AACxC,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAO,eAAA,IAAmB,qBAAA;AACjD,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAO,cAAA,IAAkB,qBAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,GAAA,EAA2B;AACrC,IAAA,OAAO,IAAA,CAAK,eAAe,GAAG,CAAA;AAAA,EAChC;AAAA,EAEA,QAAA,CACE,QACA,KAAA,EACA,eAAA,GAA0B,KAC1B,gBAAA,GAA2B,EAAA,EAC3B,OAAA,GAA4B,EAAC,EACrB;AACR,IAAA,MAAM,EAAE,QAAA,GAAW,KAAA,EAAM,GAAI,OAAA;AAC7B,IAAA,MAAM,MAAA,GAAiB;AAAA,MACrB,KAAA,EAAO,KAAA;AAAA,MACP,eAAA;AAAA,MACA,uBAAA,EAAyB,eAAA;AAAA,MACzB,gBAAA;AAAA,MACA,wBAAA,EAA0B,gBAAA;AAAA,MAC1B,QAAQ;AAAC,KACX;AAGA,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AAAA,QACpB,MAAA,CAAO,EAAA;AAAA,QACP,KAAA;AAAA,QACA,eAAA,GAAkB,CAAA,GAAA,CAAA;AAAA,QAClB,GAAG,gBAAgB,CAAA,CAAA;AAAA,QACnB;AAAA,OACF;AACA,MAAA,IAAI,SAAS,KAAA,EAAO;AAClB,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAA,MAAM,aAAa,IAAA,CAAK,QAAA;AAAA,YACtB,MAAA,CAAO,IAAA;AAAA,YACP,KAAA;AAAA,YACA,eAAA,GAAkB,CAAA,KAAA,CAAA;AAAA,YAClB,gBAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,IAAI,CAAC,WAAW,KAAA,EAAO;AACrB,YAAA,MAAA,CAAO,OAAO,IAAA,CAAK,GAAI,UAAA,CAAW,MAAA,IAAU,EAAG,CAAA;AAC/C,YAAA,IAAI,UAAU,OAAO,MAAA;AAAA,UACvB;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,OAAO,IAAA,EAAM;AACtB,QAAA,MAAM,aAAa,IAAA,CAAK,QAAA;AAAA,UACtB,MAAA,CAAO,IAAA;AAAA,UACP,KAAA;AAAA,UACA,eAAA,GAAkB,CAAA,KAAA,CAAA;AAAA,UAClB,gBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,CAAC,WAAW,KAAA,EAAO;AACrB,UAAA,MAAA,CAAO,OAAO,IAAA,CAAK,GAAI,UAAA,CAAW,MAAA,IAAU,EAAG,CAAA;AAC/C,UAAA,IAAI,UAAU,OAAO,MAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,QAAQ,KAAA,EAAA,EAAS;AACxD,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACpC,QAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,UAClB,SAAA;AAAA,UACA,KAAA;AAAA,UACA,eAAA,GAAkB,UAAU,KAAK,CAAA,CAAA;AAAA,UACjC,gBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,UAAA,MAAA,CAAO,OAAO,IAAA,CAAK,GAAI,MAAA,CAAO,MAAA,IAAU,EAAG,CAAA;AAC3C,UAAA,IAAI,UAAU,OAAO,MAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,IAAI,QAAA,GAAW,KAAA;AACf,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,QAAQ,KAAA,EAAA,EAAS;AACxD,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACpC,QAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,UAClB,SAAA;AAAA,UACA,KAAA;AAAA,UACA,eAAA,GAAkB,UAAU,KAAK,CAAA,CAAA;AAAA,UACjC,gBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,OAAO,KAAA,EAAO;AAChB,UAAA,QAAA,GAAW,IAAA;AACX,UAAA;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,IAAA,CAAK,GAAI,MAAA,CAAO,MAAA,IAAU,EAAG,CAAA;AAAA,QACtC;AAAA,MACF;AACA,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,UACjB,KAAA,EAAO,KAAA;AAAA,UACP,eAAA,EAAiB,GAAG,eAAe,CAAA,MAAA,CAAA;AAAA,UACnC,gBAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAO,IAAA,CAAK,WAAA,CAAY,EAAE,GAAA,EAAK,oBAAoB;AAAA,SACpD,CAAA;AACD,QAAA,IAAI,UAAU,OAAO,MAAA;AAAA,MACvB;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,MAAM,OAAA,GAAU,OAAO,KAAA,CAAM,GAAA;AAAA,QAAI,CAAC,SAAA,EAAW,KAAA,KACzC,IAAA,CAAK,QAAA;AAAA,UACH,SAAA;AAAA,UACA,KAAA;AAAA,UACA,eAAA,GAAkB,UAAU,KAAK,CAAA,CAAA;AAAA,UACjC,gBAAA;AAAA,UACA;AAAA;AACF,OACF,EACA,aAAa,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA,CAAE,MAAA;AAC9C,MAAA,IAAI,eAAe,CAAA,EAAG;AACpB,QAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,UACjB,KAAA,EAAO,KAAA;AAAA,UACP,eAAA,EAAiB,GAAG,eAAe,CAAA,MAAA,CAAA;AAAA,UACnC,gBAAA;AAAA,UACA,QAAQ,EAAC;AAAA,UACT,WAAA,EAAa,OAAA;AAAA,UACb,KAAA,EAAO,KAAK,WAAA,CAAY;AAAA,YACtB,GAAA,EAAK,kBAAA;AAAA,YACL,MAAA,EAAQ,EAAE,KAAA,EAAO,UAAA;AAAW,WAC7B;AAAA,SACF,CAAA;AACD,QAAA,IAAI,UAAU,OAAO,MAAA;AAAA,MACvB;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,QAClB,MAAA,CAAO,GAAA;AAAA,QACP,KAAA;AAAA,QACA,eAAA,GAAkB,CAAA,IAAA,CAAA;AAAA,QAClB,gBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,UACjB,KAAA,EAAO,KAAA;AAAA,UACP,eAAA,EAAiB,GAAG,eAAe,CAAA,IAAA,CAAA;AAAA,UACnC,gBAAA;AAAA,UACA,QAAQ,EAAC;AAAA,UACT,WAAA,EAAa,CAAC,MAAM,CAAA;AAAA,UACpB,OAAO,IAAA,CAAK,WAAA,CAAY,EAAE,GAAA,EAAK,kBAAkB;AAAA,SAClD,CAAA;AACD,QAAA,IAAI,UAAU,OAAO,MAAA;AAAA,MACvB;AAAA,IACF;AAGA,IAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,MAAA,IAAI,CAAC,SAAA,CAAU,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA,EAAG;AACnC,QAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,UACjB,KAAA,EAAO,KAAA;AAAA,UACP,eAAA,EAAiB,GAAG,eAAe,CAAA,MAAA,CAAA;AAAA,UACnC,gBAAA;AAAA,UACA,QAAQ,EAAC;AAAA,UACT,KAAA,EAAO,KAAK,WAAA,CAAY;AAAA,YACtB,GAAA,EAAK,kBAAA;AAAA,YACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA;AAAM,WAC/B;AAAA,SACF,CAAA;AACD,QAAA,IAAI,UAAU,OAAO,MAAA;AAAA,MACvB;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAC,MAAM,SAAA,CAAU,KAAA,EAAO,CAAC,CAAC,CAAA,EAAG;AACjD,QAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,UACjB,KAAA,EAAO,KAAA;AAAA,UACP,eAAA,EAAiB,GAAG,eAAe,CAAA,KAAA,CAAA;AAAA,UACnC,gBAAA;AAAA,UACA,QAAQ,EAAC;AAAA,UACT,OAAO,IAAA,CAAK,WAAA,CAAY,EAAE,GAAA,EAAK,mBAAmB;AAAA,SACnD,CAAA;AACD,QAAA,IAAI,UAAU,OAAO,MAAA;AAAA,MACvB;AAAA,IACF;AAMA,IAAA,IAAI,YAAA,GAAe,EAAA;AACnB,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,IAC1C,MAAA,CAAO,IAAA,GACP,CAAC,MAAA,CAAO,IAAI,CAAA;AAChB,MAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,QAAA,IAAI,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAI,CAAA,EAAG;AAC/B,UAAA,YAAA,GAAe,IAAA;AACf,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,UACjB,KAAA,EAAO,KAAA;AAAA,UACP,eAAA,EAAiB,GAAG,eAAe,CAAA,KAAA,CAAA;AAAA,UACnC,gBAAA;AAAA,UACA,QAAQ,EAAC;AAAA,UACT,KAAA,EAAO,KAAK,WAAA,CAAY;AAAA,YACtB,GAAA,EAAK,iBAAA;AAAA,YACL,QAAQ,EAAE,QAAA,EAAU,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AAAE,WAC/C;AAAA,SACF,CAAA;AACD,QAAA,IAAI,UAAU,OAAO,MAAA;AAAA,MACvB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,YAAA,GAAe,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,IACtC;AAGA,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,MAAA,IAAA,CAAK,cAAA;AAAA,QACH,MAAA;AAAA,QACA,KAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAA,IAAW,iBAAiB,OAAA,EAAS;AACnC,MAAA,IAAA,CAAK,aAAA;AAAA,QACH,MAAA;AAAA,QACA,KAAA;AAAA,QACA,eAAA;AAAA,QACA,gBAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAA,IAAW,iBAAiB,QAAA,EAAU;AACpC,MAAA,IAAA,CAAK,cAAA;AAAA,QACH,MAAA;AAAA,QACA,KAAA;AAAA,QACA,eAAA;AAAA,QACA,gBAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAA,IAAW,iBAAiB,QAAA,EAAU;AACpC,MAAA,IAAA,CAAK,cAAA;AAAA,QACH,MAAA;AAAA,QACA,KAAA;AAAA,QACA,eAAA;AAAA,QACA,gBAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,IAAU,CAAA;AACvC,IAAA,MAAA,CAAO,KAAA,GAAQ,OAAO,KAAA,GAClB,MAAA,GACA,KAAK,WAAA,CAAY,EAAE,GAAA,EAAK,mBAAA,EAAqB,CAAA;AACjD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,eACN,MAAA,EACA,KAAA,EACA,eAAA,EACA,gBAAA,EACA,QACA,OAAA,EACA;AACA,IAAA,MAAM,EAAE,QAAA,GAAW,KAAA,EAAM,GAAI,OAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,CAAC,OAAA,EAAiB,GAAA,KAAsB;AACvD,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,QACjB,KAAA,EAAO,KAAA;AAAA,QACP,eAAA,EAAiB,CAAA,EAAG,eAAe,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAAA,QAC9C,gBAAA;AAAA,QACA,QAAQ,EAAC;AAAA,QACT,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,GAAG;AAAA,OAC5B,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,IAAI,MAAA,CAAO,OAAA,KAAY,MAAA,IAAa,KAAA,GAAQ,OAAO,OAAA,EAAS;AAC1D,MAAA,QAAA,CAAS,SAAA,EAAW;AAAA,QAClB,GAAA,EAAK,oBAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA;AAAQ,OACjC,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AACA,IAAA,IACE,MAAA,CAAO,gBAAA,KAAqB,MAAA,IAC5B,KAAA,IAAS,OAAO,gBAAA,EAChB;AACA,MAAA,QAAA,CAAS,kBAAA,EAAoB;AAAA,QAC3B,GAAA,EAAK,6BAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,gBAAA;AAAiB,OAC1C,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AACA,IAAA,IAAI,MAAA,CAAO,OAAA,KAAY,MAAA,IAAa,KAAA,GAAQ,OAAO,OAAA,EAAS;AAC1D,MAAA,QAAA,CAAS,SAAA,EAAW;AAAA,QAClB,GAAA,EAAK,oBAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA;AAAQ,OACjC,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AACA,IAAA,IACE,MAAA,CAAO,gBAAA,KAAqB,MAAA,IAC5B,KAAA,IAAS,OAAO,gBAAA,EAChB;AACA,MAAA,QAAA,CAAS,kBAAA,EAAoB;AAAA,QAC3B,GAAA,EAAK,6BAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,gBAAA;AAAiB,OAC1C,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AACA,IAAA,IAAI,MAAA,CAAO,eAAe,MAAA,EAAW;AACnC,MAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,CAAO,UAAA;AACjC,MAAA,IACE,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,GAAI,IAAA,IACtB,IAAA,CAAK,GAAA,CAAI,SAAA,GAAY,MAAA,CAAO,UAAU,CAAA,GAAI,IAAA,EAC1C;AACA,QAAA,QAAA,CAAS,YAAA,EAAc;AAAA,UACrB,GAAA,EAAK,uBAAA;AAAA,UACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,UAAA;AAAW,SACpC,CAAA;AACD,QAAA,IAAI,QAAA,EAAU;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eACN,MAAA,EACA,KAAA,EACA,eAAA,EACA,gBAAA,EACA,QACA,OAAA,EACA;AACA,IAAA,MAAM,EAAE,QAAA,GAAW,KAAA,EAAM,GAAI,OAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,CAAC,OAAA,EAAiB,GAAA,KAAsB;AACrD,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,QACjB,KAAA,EAAO,KAAA;AAAA,QACP,eAAA,EAAiB,CAAA,EAAG,eAAe,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAAA,QAC9C,gBAAA;AAAA,QACA,QAAQ,EAAC;AAAA,QACT,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,GAAG;AAAA,OAC5B,CAAA;AAAA,IACH,GACA,EAAE,MAAA,EAAO,GAAI,CAAC,GAAG,KAAK,CAAA;AAExB,IAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,IAAa,MAAA,GAAS,OAAO,SAAA,EAAW;AAC/D,MAAA,QAAA,CAAS,WAAA,EAAa;AAAA,QACpB,GAAA,EAAK,sBAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,SAAA;AAAU,OACnC,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AACA,IAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,IAAa,MAAA,GAAS,OAAO,SAAA,EAAW;AAC/D,MAAA,QAAA,CAAS,WAAA,EAAa;AAAA,QACpB,GAAA,EAAK,sBAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,SAAA;AAAU,OACnC,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AACA,IAAA,IAAI,MAAA,CAAO,YAAY,MAAA,EAAW;AAChC,MAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AACvC,MAAA,IAAI,CAAC,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,EAAG;AACtB,QAAA,QAAA,CAAS,SAAA,EAAW;AAAA,UAClB,GAAA,EAAK,oBAAA;AAAA,UACL,MAAA,EAAQ,EAAE,OAAA,EAAS,MAAA,CAAO,OAAA;AAAQ,SACnC,CAAA;AACD,QAAA,IAAI,QAAA,EAAU;AAAA,MAChB;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAW;AAC/B,MAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC9C,QAAA,QAAA,CAAS,QAAA,EAAU;AAAA,UACjB,GAAA,EAAK,mBAAA;AAAA,UACL,MAAA,EAAQ,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA;AAAO,SACjC,CAAA;AACD,QAAA,IAAI,QAAA,EAAU;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cACN,MAAA,EACA,KAAA,EACA,eAAA,EACA,gBAAA,EACA,QACA,OAAA,EACA;AACA,IAAA,MAAM,EAAE,QAAA,GAAW,KAAA,EAAO,OAAA,GAAU,OAAM,GAAI,OAAA;AAC9C,IAAA,MAAM,QAAA,GAAW,CAAC,OAAA,EAAiB,GAAA,KAAsB;AACvD,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,QACjB,KAAA,EAAO,KAAA;AAAA,QACP,eAAA,EAAiB,CAAA,EAAG,eAAe,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAAA,QAC9C,gBAAA;AAAA,QACA,QAAQ,EAAC;AAAA,QACT,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,GAAG;AAAA,OAC5B,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,IAAI,OAAO,QAAA,KAAa,MAAA,IAAa,KAAA,CAAM,MAAA,GAAS,OAAO,QAAA,EAAU;AACnE,MAAA,QAAA,CAAS,UAAA,EAAY;AAAA,QACnB,GAAA,EAAK,qBAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,QAAA;AAAS,OAClC,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AACA,IAAA,IAAI,OAAO,QAAA,KAAa,MAAA,IAAa,KAAA,CAAM,MAAA,GAAS,OAAO,QAAA,EAAU;AACnE,MAAA,QAAA,CAAS,UAAA,EAAY;AAAA,QACnB,GAAA,EAAK,qBAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,QAAA;AAAS,OAClC,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AACA,IAAA,IAAI,OAAO,WAAA,EAAa;AACtB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,QAAA,KAAA,IAAS,IAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACzC,UAAA,IAAI,UAAU,KAAA,CAAM,CAAC,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACjC,YAAA,QAAA,CAAS,aAAA,EAAe,EAAE,GAAA,EAAK,wBAAA,EAA0B,CAAA;AACzD,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,iBAAA,GAAoB,CAAA;AACxB,IAAA,IAAI,OAAO,WAAA,EAAa;AACtB,MAAA,iBAAA,GAAoB,OAAO,WAAA,CAAY,MAAA;AACvC,MAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,WAAA,CAAY,QAAQ,KAAA,EAAA,EAAS;AAC9D,QAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,CAAY,KAAK,CAAA;AAC3C,QAAA,IAAI,KAAA,GAAQ,MAAM,MAAA,EAAQ;AACxB,UAAA,IAAI,CAAC,OAAA,EAAS;AACZ,YAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,cAClB,UAAA;AAAA,cACA,MAAM,KAAK,CAAA;AAAA,cACX,CAAA,EAAG,eAAe,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAA;AAAA,cACvC,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAAA,cAC5B;AAAA,aACF;AACA,YAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,cAAA,MAAA,CAAO,MAAA,CAAO,KAAK,MAAM,CAAA;AACzB,cAAA,IAAI,QAAA,EAAU;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,iBAAA,EAAmB;AACpD,MAAA,KAAA,IAAS,CAAA,GAAI,iBAAA,EAAmB,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrD,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,YAClB,MAAA,CAAO,KAAA;AAAA,YACP,MAAM,CAAC,CAAA;AAAA,YACP,GAAG,eAAe,CAAA,MAAA,CAAA;AAAA,YAClB,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAAA,YACxB;AAAA,WACF;AACA,UAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,YAAA,MAAA,CAAO,MAAA,CAAO,KAAK,MAAM,CAAA;AACzB,YAAA,IAAI,QAAA,EAAU;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,QAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,UAClB,MAAA,CAAO,QAAA;AAAA,UACP,MAAM,CAAC,CAAA;AAAA,UACP,GAAG,eAAe,CAAA,SAAA,CAAA;AAAA,UAClB,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAAA,UACxB;AAAA,SACF;AACA,QAAA,IAAI,OAAO,KAAA,EAAO;AAChB,UAAA,aAAA,EAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,CAAO,gBAAgB,MAAA,EAAW;AACpC,QAAA,IAAI,aAAA,GAAgB,OAAO,WAAA,EAAa;AACtC,UAAA,QAAA,CAAS,aAAA,EAAe;AAAA,YACtB,GAAA,EAAK,wBAAA;AAAA,YACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,WAAA;AAAY,WACrC,CAAA;AACD,UAAA,IAAI,QAAA,EAAU;AAAA,QAChB;AAAA,MACF,CAAA,MAAA,IAAW,MAAA,CAAO,WAAA,KAAgB,MAAA,IAAa,kBAAkB,CAAA,EAAG;AAClE,QAAA,QAAA,CAAS,UAAA,EAAY,EAAE,GAAA,EAAK,qBAAA,EAAuB,CAAA;AACnD,QAAA,IAAI,QAAA,EAAU;AAAA,MAChB;AAEA,MAAA,IAAI,MAAA,CAAO,gBAAgB,MAAA,EAAW;AACpC,QAAA,IAAI,aAAA,GAAgB,OAAO,WAAA,EAAa;AACtC,UAAA,QAAA,CAAS,aAAA,EAAe;AAAA,YACtB,GAAA,EAAK,wBAAA;AAAA,YACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,WAAA;AAAY,WACrC,CAAA;AACD,UAAA,IAAI,QAAA,EAAU;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eACN,MAAA,EACA,KAAA,EACA,eAAA,EACA,gBAAA,EACA,QACA,OAAA,EACA;AACA,IAAA,MAAM,EAAE,QAAA,GAAW,KAAA,EAAO,OAAA,GAAU,OAAM,GAAI,OAAA;AAC9C,IAAA,MAAM,QAAA,GAAW,CAAC,OAAA,EAAiB,GAAA,KAAsB;AACrD,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,QACjB,KAAA,EAAO,KAAA;AAAA,QACP,eAAA,EAAiB,CAAA,EAAG,eAAe,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAAA,QAC9C,gBAAA;AAAA,QACA,QAAQ,EAAC;AAAA,QACT,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,GAAG;AAAA,OAC5B,CAAA;AAAA,IACH,CAAA,EACA,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAE1B,IAAA,IACE,OAAO,aAAA,KAAkB,MAAA,IACzB,IAAA,CAAK,MAAA,GAAS,OAAO,aAAA,EACrB;AACA,MAAA,QAAA,CAAS,eAAA,EAAiB;AAAA,QACxB,GAAA,EAAK,0BAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,aAAA;AAAc,OACvC,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AACA,IAAA,IACE,OAAO,aAAA,KAAkB,MAAA,IACzB,IAAA,CAAK,MAAA,GAAS,OAAO,aAAA,EACrB;AACA,MAAA,QAAA,CAAS,eAAA,EAAiB;AAAA,QACxB,GAAA,EAAK,0BAAA;AAAA,QACL,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,aAAA;AAAc,OACvC,CAAA;AACD,MAAA,IAAI,QAAA,EAAU;AAAA,IAChB;AAEA,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,QAAA,EAAU;AACjC,QAAA,IAAI,EAAE,OAAO,KAAA,CAAA,EAAQ;AACnB,UAAA,QAAA,CAAS,UAAA,EAAY;AAAA,YACnB,GAAA,EAAK,qBAAA;AAAA,YACL,MAAA,EAAQ,EAAE,QAAA,EAAU,GAAA;AAAI,WACzB,CAAA;AACD,UAAA,IAAI,QAAA,EAAU;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,aAAa,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,QACzC,MAAA,CAAO;AAAA,OACT,EAAG;AACD,QAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,UAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,YAAA,IAAI,EAAE,OAAO,KAAA,CAAA,EAAQ;AACnB,cAAA,QAAA,CAAS,mBAAA,EAAqB;AAAA,gBAC5B,GAAA,EAAK,8BAAA;AAAA,gBACL,MAAA,EAAQ,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAQ,GAAA;AAAI,eACrC,CAAA;AACD,cAAA,IAAI,QAAA,EAAU;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AAEtC,IAAA,IAAI,OAAO,UAAA,EAAY;AACrB,MAAA,KAAA,MAAW,CAAC,MAAM,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,EAAG;AAClE,QAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,UAAA,aAAA,CAAc,IAAI,IAAI,CAAA;AACtB,UAAA,IAAI,CAAC,OAAA,EAAS;AACZ,YAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,cAClB,UAAA;AAAA,cACA,MAAM,IAAI,CAAA;AAAA,cACV,CAAA,EAAG,eAAe,CAAA,YAAA,EAAe,IAAI,CAAA,CAAA;AAAA,cACrC,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,cAC3B;AAAA,aACF;AACA,YAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,cAAA,MAAA,CAAO,MAAA,CAAO,KAAK,MAAM,CAAA;AACzB,cAAA,IAAI,QAAA,EAAU;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,MAAA,KAAA,MAAW,CAAC,OAAA,EAAS,UAAU,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,QACzC,MAAA,CAAO;AAAA,OACT,EAAG;AACD,QAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,OAAO,CAAA;AAChC,QAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,UAAA,IAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,EAAG;AACnB,YAAA,aAAA,CAAc,IAAI,GAAG,CAAA;AACrB,YAAA,IAAI,CAAC,OAAA,EAAS;AACZ,cAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,gBAClB,UAAA;AAAA,gBACA,MAAM,GAAG,CAAA;AAAA,gBACT,CAAA,EAAG,eAAe,CAAA,mBAAA,EAAsB,iBAAA,CAAkB,OAAO,CAAC,CAAA,CAAA;AAAA,gBAClE,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,iBAAA,CAAkB,GAAG,CAAC,CAAA,CAAA;AAAA,gBAC7C;AAAA,eACF;AACA,cAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,gBAAA,MAAA,CAAO,OAAO,IAAA,CAAK,GAAI,MAAA,CAAO,MAAA,IAAU,EAAG,CAAA;AAC3C,gBAAA,IAAI,QAAA,EAAU;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,yBAAyB,MAAA,EAAW;AAC7C,MAAA,MAAM,cAAA,GAAiB,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,aAAA,CAAc,GAAA,CAAI,CAAC,CAAC,CAAA;AAC/D,MAAA,IAAI,OAAO,MAAA,CAAO,oBAAA,KAAyB,SAAA,EAAW;AACpD,QAAA,IAAI,CAAC,MAAA,CAAO,oBAAA,IAAwB,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7D,UAAA,QAAA,CAAS,sBAAA,EAAwB;AAAA,YAC/B,GAAA,EAAK,iCAAA;AAAA,YACL,QAAQ,EAAE,UAAA,EAAY,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAAE,WACjD,CAAA;AACD,UAAA,IAAI,QAAA,EAAU;AAAA,QAChB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,UAAA,IAAI,CAAC,OAAA,EAAS;AACZ,YAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,cAClB,MAAA,CAAO,oBAAA;AAAA,cACP,MAAM,GAAG,CAAA;AAAA,cACT,GAAG,eAAe,CAAA,qBAAA,CAAA;AAAA,cAClB,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,iBAAA,CAAkB,GAAG,CAAC,CAAA,CAAA;AAAA,cAC7C;AAAA,aACF;AACA,YAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,cAAA,MAAA,CAAO,MAAA,CAAO,KAAK,MAAM,CAAA;AACzB,cAAA,IAAI,QAAA,EAAU;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,aAAA,EAAe;AACxB,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,UAClB,MAAA,CAAO,aAAA;AAAA,UACP,GAAA;AAAA,UACA,GAAG,eAAe,CAAA,cAAA,CAAA;AAAA,UAClB,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,iBAAA,CAAkB,GAAG,CAAC,CAAA,CAAA;AAAA,UAC7C;AAAA,SACF;AACA,QAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,UAAA,MAAA,CAAO,MAAA,CAAO,KAAK,MAAM,CAAA;AACzB,UAAA,IAAI,QAAA,EAAU;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,MAAA,KAAA,MAAW,CAAC,MAAM,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACvE,QAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,UAAA,MAAM,SAAS,IAAA,CAAK,QAAA;AAAA,YAClB,SAAA;AAAA,YACA,KAAA;AAAA,YACA,CAAA,EAAG,eAAe,CAAA,kBAAA,EAAqB,iBAAA,CAAkB,IAAI,CAAC,CAAA,CAAA;AAAA,YAC9D,gBAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,YAAA,MAAA,CAAO,MAAA,CAAO,KAAK,MAAM,CAAA;AACzB,YAAA,IAAI,QAAA,EAAU;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,WAAW,KAAA,EAAwB;AACzC,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,MAAA;AAClD,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,OAAA;AACjC,IAAA,IAAI,MAAA,CAAO,SAAA,CAAU,KAAe,CAAA,EAAG,OAAO,SAAA;AAC9C,IAAA,OAAO,OAAO,KAAA;AAAA,EAChB;AAAA,EAEQ,SAAA,CAAU,OAAgB,IAAA,EAAuB;AACvD,IAAA,OAAO,eAAA,CAAgB,OAAO,IAAI,CAAA;AAAA,EACpC;AAAA,EAEQ,cAAA,CAAe,QAAgB,KAAA,EAAwB;AAC7D,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,MAAA,EAAQ,KAAK,CAAA;AAAA,EACpD;AACF;AAOO,SAAS,cAAA,CACd,QACA,KAAA,EACA,YAAA,GAAuB,IACvB,UAAA,GAAqB,GAAA,EACrB,WAAoB,KAAA,EACZ;AACR,EAAA,MAAM,gBAAA,GAAmB,gBAAgB,MAAM,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,IAAI,SAAA,EAAU;AAChC,EAAA,OAAO,SAAA,CAAU,QAAA,CAAS,gBAAA,EAAkB,KAAA,EAAO,YAAY,YAAA,EAAc;AAAA,IAC3E;AAAA,GACD,CAAA;AACH;;;AC/uBO,IAAI,gBAAA,GAEA;AAAA,EACT,IAAA,EAAM,CAAC,OAAA,KAAoB,OAAA,CAAQ,KAAK,OAAO;AACjD,CAAA;AA0BO,SAAS,WACd,GAAA,EACA,UAAA,EACA,OAAA,mBAAuB,IAAI,KAAI,EACX;AAEpB,EAAA,IAAI,CAAC,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,IAAA,gBAAA,EAAkB,IAAA,CAAK,CAAA,6BAAA,EAAgC,GAAG,CAAA,CAAE,CAAA;AAC5D,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AACpB,IAAA,gBAAA,EAAkB,IAAA,CAAK,CAAA,wBAAA,EAA2B,GAAG,CAAA,CAAE,CAAA;AACvD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAA,CAAQ,IAAI,GAAG,CAAA;AAGf,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AAC3B,EAAA,IAAI,OAAA,KAAY,EAAA,IAAM,OAAA,KAAY,GAAA,EAAK;AAErC,IAAA,OAAO,UAAA;AAAA,EACT;AAGA,EAAA,MAAM,QAAA,GAAW,iBAAiB,OAAO,CAAA;AACzC,EAAA,IAAI,OAAA,GAAmB,UAAA;AAEvB,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,EAAW;AAC7C,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAA,GAAW,QAAoC,OAAO,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,EAAW;AAC7C,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,OAAA;AAGjB,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,OAAO,UAAA,CAAW,QAAA,CAAS,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA;AAAA,EACtD;AAEA,EAAA,OAAO,QAAA;AACT;AAUO,SAAS,iBAAA,CAAkB,QAAgB,UAAA,EAA4B;AAC5E,EAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,MAAA,CAAO,IAAA,EAAM,UAAU,CAAA;AACnD,EAAA,IAAI,CAAC,QAAA,EAAU;AAGb,IAAA,MAAM,EAAE,IAAA,EAAMA,EAAAA,EAAG,GAAG,MAAK,GAAI,MAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAIA,EAAA,MAAM,EAAE,IAAA,EAAM,CAAA,EAAG,GAAG,UAAS,GAAI,MAAA;AACjC,EAAA,OAAO,WAAA,CAAY,UAAU,QAAkB,CAAA;AACjD;AAYO,SAAS,qBAAA,CACd,MAAA,EACA,UAAA,EACA,SAAA,mBAAqC,IAAI,SAAQ,EACjD,UAAA,mBAA8B,IAAI,OAAA,EAAQ,EAClC;AAER,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA;AACnC,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AAIA,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA,EAAG;AAG1B,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,UAAA,CAAW,IAAI,MAAM,CAAA;AAGrB,EAAA,IAAI,MAAA,GAAS,iBAAA,CAAkB,MAAA,EAAQ,UAAU,CAAA;AAGjD,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,MAAA,GAAS,EAAE,GAAG,MAAA,EAAO;AAAA,EACvB;AAIA,EAAA,IAAI,OAAO,UAAA,EAAY;AACrB,IAAA,MAAA,CAAO,aAAa,MAAA,CAAO,WAAA;AAAA,MACzB,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM;AAAA,QAC1D,GAAA;AAAA,QACA,qBAAA,CAAsB,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAU;AAAA,OACnE;AAAA,KACH;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,IAAA,MAAA,CAAO,oBAAoB,MAAA,CAAO,WAAA;AAAA,MAChC,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,iBAAiB,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM;AAAA,QACjE,GAAA;AAAA,QACA,qBAAA,CAAsB,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAU;AAAA,OACnE;AAAA,KACH;AAAA,EACF;AAGA,EAAA,IACE,MAAA,CAAO,oBAAA,IACP,OAAO,MAAA,CAAO,yBAAyB,QAAA,EACvC;AACA,IAAA,MAAA,CAAO,oBAAA,GAAuB,qBAAA;AAAA,MAC5B,MAAA,CAAO,oBAAA;AAAA,MACP,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAA,CAAO,KAAA,GAAQ,qBAAA;AAAA,MACb,MAAA,CAAO,KAAA;AAAA,MACP,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,WAAA,EAAa;AACtB,IAAA,MAAA,CAAO,WAAA,GAAc,OAAO,WAAA,CAAY,GAAA;AAAA,MAAI,CAAC,CAAA,KAC3C,qBAAA,CAAsB,CAAA,EAAG,UAAA,EAAY,WAAW,UAAU;AAAA,KAC5D;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,MAAA,CAAO,QAAA,GAAW,qBAAA;AAAA,MAChB,MAAA,CAAO,QAAA;AAAA,MACP,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,OAAA,IAAW,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA,EAAY;AAC1D,IAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,OAAO,IAAI,UAAA,CAAW,GAAA;AAAA,QAAI,CAAC,CAAA,KAChC,qBAAA,CAAsB,CAAA,EAAG,UAAA,EAAY,WAAW,UAAU;AAAA,OAC5D;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,GAAA,EAAK;AACd,IAAA,MAAA,CAAO,GAAA,GAAM,qBAAA;AAAA,MACX,MAAA,CAAO,GAAA;AAAA,MACP,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,MAAA,CAAO,EAAA,GAAK,qBAAA;AAAA,MACV,MAAA,CAAO,EAAA;AAAA,MACP,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAA,CAAO,IAAA,GAAO,qBAAA;AAAA,MACZ,MAAA,CAAO,IAAA;AAAA,MACP,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAA,CAAO,IAAA,GAAO,qBAAA;AAAA,MACZ,MAAA,CAAO,IAAA;AAAA,MACP,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,IAAA,MAAA,CAAO,mBAAmB,MAAA,CAAO,WAAA;AAAA,MAC/B,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM;AAAA,QAChE,GAAA;AAAA,QACA,qBAAA,CAAsB,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAU;AAAA,OACnE;AAAA,KACH;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAA,CAAO,QAAQ,MAAA,CAAO,WAAA;AAAA,MACpB,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM;AAAA,QACrD,GAAA;AAAA,QACA,qBAAA,CAAsB,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAU;AAAA,OACnE;AAAA,KACH;AAAA,EACF;AAGA,EAAA,SAAA,CAAU,GAAA,CAAI,QAAQ,MAAM,CAAA;AAE5B,EAAA,OAAO,MAAA;AACT;AAKA,IAAM,iBAAA,GAAoB,GAAA;AAUnB,SAAS,sBAAA,CACd,eAAA,EACA,QAAA,GAAmB,EAAA,EACnB,QAAgB,CAAA,EACN;AAEV,EAAA,IAAI,QAAQ,iBAAA,EAAmB;AAC7B,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,CAAA,mCAAA,EAAsC,iBAAiB,CAAA,oBAAA,EAAuB,QAAQ,CAAA;AAAA,KACxF;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,MAAM,MAAA,GAAS,eAAA;AAGf,EAAA,IAAI,OAAO,UAAA,EAAY;AACrB,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,EAAG;AAChD,MAAA,MAAM,SAAA,GAAY,WAAW,CAAA,EAAG,QAAQ,IAAI,GAAG,CAAA,CAAA,GAAK,IAAI,GAAG,CAAA,CAAA;AAC3D,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAEpB,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,GAAG,uBAAuB,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA,EAAG,SAAA,EAAW,QAAQ,CAAC;AAAA,OACxE;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,KAAA,IAAS,OAAO,MAAA,CAAO,UAAU,QAAA,EAAU;AAEpD,IAAA,KAAA,CAAM,IAAA,CAAK,YAAY,GAAG,CAAA;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,sBAAA,CAAuB,MAAA,CAAO,OAAO,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EACzE;AAGA,EAAA,IAAI,OAAO,WAAA,EAAa;AACtB,IAAA,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,CAAC,UAAA,EAAoB,KAAA,KAAkB;AAChE,MAAA,MAAM,SAAA,GAAY,WAAW,CAAA,EAAG,QAAQ,IAAI,KAAK,CAAA,CAAA,GAAK,IAAI,KAAK,CAAA,CAAA;AAC/D,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,MAAA,KAAA,CAAM,KAAK,GAAG,sBAAA,CAAuB,YAAY,SAAA,EAAW,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,IACxE,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,IAAa,MAAA,CAAO,IAAA,EAAM;AAC7C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,IACrB;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,EACrB;AAGA,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,SAAA;AAAA,IACA,SAAA;AAAA,IACA,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,KAAA,MAAW,cAAc,gBAAA,EAAkB;AACzC,IAAA,IACG,MAAA,CAAmC,UAAU,CAAA,KAAM,MAAA,IACpD,QAAA,EACA;AACA,MAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,MAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,KAAA,MAAW,GAAA,IAAO,OAAO,QAAA,EAAU;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA,EAAG,QAAQ,IAAI,GAAG,CAAA,CAAA,GAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAAA,IACxD;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,IAAA,KAAA,MAAW,CAAC,MAAM,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,iBAAiB,CAAA,EAAG;AACnE,MAAA,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA,EAAG,QAAQ,IAAI,IAAI,CAAA,CAAA,GAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AACxD,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA,EAAG,QAAQ,IAAI,GAAG,CAAA,CAAA,GAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,IAAA,KAAA,MAAW,CAAC,MAAM,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACvE,MAAA,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA,EAAG,QAAQ,IAAI,IAAI,CAAA,CAAA,GAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AACxD,MAAA,KAAA,CAAM,KAAK,GAAG,sBAAA,CAAuB,WAAW,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,IACtE;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,sBAAA,CAAuB,MAAA,CAAO,IAAI,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EACtE;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,sBAAA,CAAuB,MAAA,CAAO,MAAM,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,sBAAA,CAAuB,MAAA,CAAO,MAAM,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EACxE;AAGA,EAAA,KAAA,MAAW,OAAA,IAAW,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA,EAAY;AAC1D,IAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,QAAA,KAAA,CAAM,KAAK,GAAG,sBAAA,CAAuB,WAAW,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,IAAA,KAAA,MAAW,CAAC,KAAK,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACtE,MAAA,MAAM,OAAA,GAAU,WAAW,CAAA,EAAG,QAAQ,IAAI,GAAG,CAAA,CAAA,GAAK,IAAI,GAAG,CAAA,CAAA;AAEzD,MAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAElB,MAAA,KAAA,CAAM,KAAK,GAAG,sBAAA,CAAuB,WAAW,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,IACtE;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,KAAA,CAAM,IAAA,CAAK,YAAY,GAAG,CAAA;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,sBAAA,CAAuB,MAAA,CAAO,UAAU,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EAC5E;AAGA,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B;AAEO,SAAS,sBAAA,CACd,SAAA,EACA,MAAA,EACA,KAAA,EACA,iBACA,gBAAA,EAKA;AAEA,EAAA,IAAI,SAAA,GAAY,MAAA;AAGhB,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,MAAM,SAAS,SAAA,CAAU,QAAA;AAAA,MACvB,SAAA,CAAU,EAAA;AAAA,MACV,KAAA;AAAA,MACA,GAAG,eAAe,CAAA,GAAA,CAAA;AAAA,MAClB;AAAA,KACF;AACA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,MAAM,GAAA,GAAM,sBAAA;AAAA,UACV,SAAA;AAAA,UACA,SAAA,CAAU,IAAA;AAAA,UACV,KAAA;AAAA,UACA,GAAG,eAAe,CAAA,KAAA,CAAA;AAAA,UAClB;AAAA,SACF;AACA,QAAA,SAAA,GAAY,WAAA,CAAY,SAAA,EAAW,GAAA,CAAI,eAAe,CAAA;AAAA,MACxD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,MAAM,GAAA,GAAM,sBAAA;AAAA,UACV,SAAA;AAAA,UACA,SAAA,CAAU,IAAA;AAAA,UACV,KAAA;AAAA,UACA,GAAG,eAAe,CAAA,KAAA,CAAA;AAAA,UAClB;AAAA,SACF;AACA,QAAA,SAAA,GAAY,WAAA,CAAY,SAAA,EAAW,GAAA,CAAI,eAAe,CAAA;AAAA,MACxD;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,IAAI,CAAA,EAAG,IAAA,EAAM,IAAI,IAAA,EAAM,GAAA,EAAK,GAAG,IAAA,EAAK,GAAI,SAAA;AAChD,IAAA,SAAA,GAAY,IAAA;AAAA,EACd;AAGA,EAAA,IAAI,UAAU,KAAA,EAAO;AACnB,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,SAAS,KAAK,SAAA,CAAU,KAAA,CAAM,SAAQ,EAAG;AAC1D,MAAA,MAAM,GAAA,GAAM,sBAAA;AAAA,QACV,SAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,CAAA,EAAG,eAAe,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA;AAAA,QACjC;AAAA,OACF;AACA,MAAA,SAAA,GAAY,WAAA,CAAY,SAAA,EAAW,GAAA,CAAI,eAAe,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,CAAA,EAAG,GAAG,MAAK,GAAI,SAAA;AAC9B,IAAA,SAAA,GAAY,IAAA;AAAA,EACd;AAGA,EAAA,IAAI,UAAU,KAAA,EAAO;AACnB,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,SAAS,KAAK,SAAA,CAAU,KAAA,CAAM,SAAQ,EAAG;AAC1D,MAAA,MAAM,SAAS,SAAA,CAAU,QAAA;AAAA,QACvB,SAAA;AAAA,QACA,KAAA;AAAA,QACA,kBAAkB,CAAA,OAAA,CAAA,GAAY,KAAA;AAAA,QAC9B;AAAA,OACF;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,MAAM,GAAA,GAAM,sBAAA;AAAA,UACV,SAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAA;AAAA,UACA,kBAAkB,CAAA,OAAA,CAAA,GAAY,KAAA;AAAA,UAC9B;AAAA,SACF;AACA,QAAA,SAAA,GAAY,WAAA,CAAY,SAAA,EAAW,GAAA,CAAI,eAAe,CAAA;AACtD,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,CAAA,EAAG,GAAG,MAAK,GAAI,SAAA;AAC9B,IAAA,SAAA,GAAY,IAAA;AAAA,EACd;AAGA,EAAA,IAAI,UAAU,KAAA,EAAO;AACnB,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,eAAA,GAAiC,IAAA;AACrC,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,SAAS,KAAK,SAAA,CAAU,KAAA,CAAM,SAAQ,EAAG;AAC1D,MAAA,MAAM,SAAS,SAAA,CAAU,QAAA;AAAA,QACvB,SAAA;AAAA,QACA,KAAA;AAAA,QACA,CAAA,EAAG,eAAe,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA;AAAA,QACjC;AAAA,OACF;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,UAAA,EAAA;AACA,QAAA,eAAA,GAAkB,SAAA;AAAA,MACpB;AAAA,IACF;AACA,IAAA,IAAI,UAAA,KAAe,KAAK,eAAA,EAAiB;AACvC,MAAA,SAAA,GAAY,WAAA,CAAY,WAAW,eAAe,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,CAAA,EAAG,GAAG,MAAK,GAAI,SAAA;AAC9B,IAAA,SAAA,GAAY,IAAA;AAAA,EACd;AAGA,EAAA,IAAI,IAAA,GAAmB,SAAA;AACvB,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,IAAI,IAC7C,SAAA,CAAU,IAAA,GACV,CAAC,SAAA,CAAU,IAAI,CAAA;AACnB,IAAA,MAAM,OAAA,GAAU,aAAa,IAAA,CAAK,CAAC,MAAM,eAAA,CAAgB,KAAA,EAAO,CAAC,CAAC,CAAA;AAClE,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,GAAO,OAAA;AAAA,IACT,CAAA,MAAO;AAEL,MAAA,IAAA,GAAO,aAAa,CAAC,CAAA;AAAA,IACvB;AAAA,EACF,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,iBAAiB,KAAK,CAAA;AAAA,EAC/B;AAGA,EAAA,MAAM,mBAAmB,SAAA,CAAU,QAAA;AAAA,IACjC,SAAA;AAAA,IACA,KAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,EAAE,SAAS,IAAA;AAAK,GAClB;AAEA,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,SAAA;AAAA,IACjB,IAAA;AAAA,IACA,KAAA,EAAO,gBAAA,CAAiB,KAAA,GAAQ,MAAA,GAAY;AAAA,GAC9C;AACF;AAEA,SAAS,YAAA,CAAa,GAAc,CAAA,EAAoC;AACtE,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;AAC5B,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,iBAAK,IAAI,GAAA,CAAI,CAAC,GAAG,CAAA,EAAG,GAAG,CAAC,CAAC,CAAC,CAAA;AAC/C,EAAA,OAAO,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,MAAA,GAAY,MAAA;AAC3C;AAEA,SAAS,SAAA,CACP,GACA,CAAA,EAC+B;AAC/B,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;AAC5B,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;AAC5B,EAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AACxC,EAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AACxC,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,CAAC,MAAM,MAAA,CAAO,QAAA,CAAS,CAAC,CAAC,CAAA;AACtD,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAChC,EAAA,OAAO,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA;AAC3C;AAKA,SAAS,iBAAA,CAAkB,GAAc,CAAA,EAAoC;AAC3E,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;AAC5B,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,CAAA;AAE5B,EAAA,OAAO,CAAC,GAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AACpB;AAEO,SAAS,WAAA,CAAY,MAAc,QAAA,EAA2B;AACnE,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,MAAA,GAAiB;AAAA,IACrB,GAAG,IAAA;AAAA,IACH,GAAG;AAAA,GACL;AAGA,EAAA,IAAI,IAAA,CAAK,KAAA,IAAS,QAAA,CAAS,KAAA,EAAO;AAChC,IAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,MACb,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,GAAG,QAAA,CAAS;AAAA,KACd;AAAA,EACF;AAGA,EAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,IAAA,CAAK,QAAA,EAAU,SAAS,QAAQ,CAAA;AACpE,EAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,IAAA,MAAA,CAAO,QAAA,GAAW,cAAA;AAAA,EACpB;AAGA,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,SAAS,IAAI,CAAA;AACrD,EAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,IAAA,MAAA,CAAO,IAAA,GAAO,UAAA;AAAA,EAChB;AAGA,EAAA,IAAI,IAAA,CAAK,iBAAA,IAAqB,QAAA,CAAS,iBAAA,EAAmB;AACxD,IAAA,MAAA,CAAO,iBAAA,GAAoB;AAAA,MACzB,GAAG,IAAA,CAAK,iBAAA;AAAA,MACR,GAAG,QAAA,CAAS;AAAA,KACd;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,UAAA,IAAc,QAAA,CAAS,UAAA,EAAY;AAC1C,IAAA,MAAA,CAAO,UAAA,GAAa;AAAA,MAClB,GAAG,IAAA,CAAK,UAAA;AAAA,MACR,GAAG,QAAA,CAAS;AAAA,KACd;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,iBAAA,IAAqB,QAAA,CAAS,iBAAA,EAAmB;AACxD,IAAA,MAAA,CAAO,iBAAA,GAAoB;AAAA,MACzB,GAAG,IAAA,CAAK,iBAAA;AAAA,MACR,GAAG,QAAA,CAAS;AAAA,KACd;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,KAAA,IAAS,QAAA,CAAS,KAAA,EAAO;AAChC,IAAA,MAAA,CAAO,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,KAAA,EAAO,SAAS,KAAK,CAAA;AAAA,EACvD,CAAA,MAAA,IAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,KAAA;AAAA,EACtB,CAAA,MAAA,IAAW,SAAS,KAAA,EAAO;AACzB,IAAA,MAAA,CAAO,QAAQ,QAAA,CAAS,KAAA;AAAA,EAC1B;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,IAAe,QAAA,CAAS,WAAA,EAAa;AAC5C,IAAA,MAAA,CAAO,cAAc,EAAC;AACtB,IAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AAAA,MACf,IAAA,CAAK,aAAa,MAAA,IAAU,CAAA;AAAA,MAC5B,QAAA,CAAS,aAAa,MAAA,IAAU;AAAA,KAClC;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,GAAc,CAAC,CAAA;AACvC,MAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,WAAA,GAAc,CAAC,CAAA;AAC/C,MAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,QAAA,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY,cAAc,CAAC,CAAA;AAAA,MACjE,CAAA,MAAO;AACL,QAAA,MAAM,SAAS,UAAA,IAAc,cAAA;AAC7B,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAA,CAAO,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,kBAAA,GAAqB,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AACrD,EAAA,KAAA,MAAW,WAAW,kBAAA,EAAoB;AACxC,IAAA,MAAM,cAAc,iBAAA,CAAkB,IAAA,CAAK,OAAO,CAAA,EAAG,QAAA,CAAS,OAAO,CAAC,CAAA;AACtE,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,MAAA,CAAO,OAAO,CAAA,GAAI,WAAA;AAAA,IACpB;AAAA,EACF;AAOA,EAAA,IAAI,IAAA,CAAK,gBAAA,IAAoB,QAAA,CAAS,gBAAA,EAAkB;AACtD,IAAA,MAAA,CAAO,gBAAA,GAAmB;AAAA,MACxB,GAAG,IAAA,CAAK,gBAAA;AAAA,MACR,GAAG,QAAA,CAAS;AAAA,KACd;AAAA,EACF;AAQA,EAAA,OAAO,MAAA;AACT;AAmCO,SAAS,YAAA,CACd,QACA,GAAA,EACkD;AAElD,EAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA,EAAG;AAC/C,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA;AAAA,MAC7B,oBAAA,EAAsB,cAAc,GAAG,CAAA;AAAA,KACzC;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,IAAA,KAAA,MAAW,CAAC,OAAA,EAAS,SAAS,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,MACxC,MAAA,CAAO;AAAA,KACT,EAAG;AACD,MAAA,IAAI,aAAA,CAAc,OAAA,EAAS,GAAG,CAAA,EAAG;AAC/B,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,oBAAA,EAAsB,qBAAqB,OAAO,CAAA;AAAA,SACpD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IACE,MAAA,CAAO,oBAAA,KAAyB,MAAA,IAChC,MAAA,CAAO,yBAAyB,KAAA,EAChC;AACA,IAAA,OAAO;AAAA,MACL,QACE,OAAO,MAAA,CAAO,yBAAyB,QAAA,GACnC,MAAA,CAAO,uBACP,EAAC;AAAA,MACP,oBAAA,EAAsB;AAAA,KACxB;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,WAAA,EAAa;AACtC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC9B,IAAA,IAAI,CAAC,KAAA,CAAM,KAAK,CAAA,EAAG;AACjB,MAAA,IAAI,MAAA,CAAO,WAAA,IAAe,KAAA,GAAQ,MAAA,CAAO,YAAY,MAAA,EAAQ;AAC3D,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,MAAA,CAAO,WAAA,CAAY,KAAK,CAAA;AAAA,UAChC,oBAAA,EAAsB,eAAe,KAAK,CAAA;AAAA,SAC5C;AAAA,MACF;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAO;AAAA,UACL,QAAQ,MAAA,CAAO,KAAA;AAAA,UACf,oBAAA,EAAsB;AAAA,SACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAQ,EAAC;AAAA,IACT,oBAAA,EAAsB;AAAA,GACxB;AACF;AAgCO,SAAS,gBAAgB,MAAA,EAAyB;AACvD,EAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,EAAW,OAAO,MAAA,CAAO,KAAA;AAC9C,EAAA,IAAI,MAAA,CAAO,OAAA,KAAY,MAAA,EAAW,OAAO,MAAA,CAAO,OAAA;AAEhD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,IAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA,CAAO,IAAA;AAElE,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,QAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,MAA+B,EAAC;AACtC,MAAA,IAAI,OAAO,UAAA,EAAY;AACrB,QAAA,KAAA,MAAW,CAAC,KAAK,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,EAAG;AAChE,UAAA,IAAI,MAAA,CAAO,QAAA,EAAU,QAAA,CAAS,GAAG,CAAA,EAAG;AAClC,YAAA,GAAA,CAAI,GAAG,CAAA,GAAI,eAAA,CAAgB,SAAS,CAAA;AAAA,UACtC;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,IACA,KAAK,OAAA;AACH,MAAA,OAAO,EAAC;AAAA,IACV;AAEE,MAAA,IAAI,OAAO,UAAA,EAAY;AACrB,QAAA,OAAO,gBAAgB,EAAE,GAAG,MAAA,EAAQ,IAAA,EAAM,UAAU,CAAA;AAAA,MACtD;AACA,MAAA,OAAO,MAAA;AAAA;AAEb;;;ACx2BA,IAAM,SAAA,GAAY,EAAA;AAMlB,SAAS,kBAAkB,IAAA,EAAsB;AAC/C,EAAA,OAAO,IAAA,KAAS,MAAM,SAAA,GAAY,IAAA;AACpC;AAOO,IAAM,gBAAN,MAAoB;AAAA,EACjB,SAAA;AAAA,EAEA,WAAgE,EAAC;AAAA,EACjE,cAAA,uBAA0D,GAAA,EAAI;AAAA;AAAA,EAG9D,aAAA,uBAAiD,GAAA,EAAI;AAAA;AAAA,EAGrD,aAAA,uBAAiC,GAAA,EAAI;AAAA,EAEtC,IAAA;AAAA,EACC,KAAA;AAAA,EACA,OAAA,GAAkB,CAAA;AAAA,EAClB,aAAqB,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc9B,WAAA,CAAY,SAAA,EAAsB,MAAA,EAA0B,KAAA,EAAgB;AAC1E,IAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AAEzC,IAAA,IAAA,CAAK,UAAA,GAAa,qBAAA,CAAsB,UAAA,EAAY,UAAU,CAAA;AAC9D,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,EAAA,EAAI,GAAG,CAAA;AACxC,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,UAAU,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,mBAAA,CACN,QACA,gBAAA,EACa;AACb,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAG7B,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,QAAA,EAAU;AACjC,QAAA,IAAA,CAAK,IAAI,mBAAA,CAAoB,gBAAA,EAAkB,CAAA,CAAA,EAAI,GAAG,EAAE,CAAC,CAAA;AAAA,MAC3D;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,MAAA,KAAA,MAAW,CAAC,MAAM,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,iBAAiB,CAAA,EAAG;AACnE,QAAA,IAAA,CAAK,IAAI,mBAAA,CAAoB,gBAAA,EAAkB,CAAA,CAAA,EAAI,IAAI,EAAE,CAAC,CAAA;AAC1D,QAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,UAAA,IAAA,CAAK,IAAI,mBAAA,CAAoB,gBAAA,EAAkB,CAAA,CAAA,EAAI,GAAG,EAAE,CAAC,CAAA;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,MAAA,KAAA,MAAW,CAAC,MAAM,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACvE,QAAA,IAAA,CAAK,IAAI,mBAAA,CAAoB,gBAAA,EAAkB,CAAA,CAAA,EAAI,IAAI,EAAE,CAAC,CAAA;AAC1D,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,gBAAgB,CAAA;AACpE,QAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACpC;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,EAAA,EAAI;AAEb,MAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,MAAA,CAAO,EAAA,EAAI,EAAE,CAAA;AAC1D,MAAA,KAAA,MAAW,WAAW,aAAA,EAAe;AACnC,QAAA,IAAA,CAAK,GAAA,CAAI,mBAAA,CAAoB,gBAAA,EAAkB,OAAO,CAAC,CAAA;AAAA,MACzD;AAGA,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,MAAM,WAAW,IAAA,CAAK,mBAAA;AAAA,UACpB,MAAA,CAAO,IAAA;AAAA,UACP;AAAA,SACF;AACA,QAAA,QAAA,CAAS,QAAQ,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACrC;AACA,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,MAAM,WAAW,IAAA,CAAK,mBAAA;AAAA,UACpB,MAAA,CAAO,IAAA;AAAA,UACP;AAAA,SACF;AACA,QAAA,QAAA,CAAS,QAAQ,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACrC;AAAA,IACF;AAIA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,KAAA,MAAW,SAAA,IAAa,OAAO,KAAA,EAAO;AAEpC,QAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,SAAA,EAAW,EAAE,CAAA;AAC1D,QAAA,KAAA,MAAW,WAAW,aAAA,EAAe;AACnC,UAAA,IAAA,CAAK,GAAA,CAAI,mBAAA,CAAoB,gBAAA,EAAkB,OAAO,CAAC,CAAA;AAAA,QACzD;AAEA,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,gBAAgB,CAAA;AACpE,QAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACpC;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,KAAA,MAAW,SAAA,IAAa,OAAO,KAAA,EAAO;AACpC,QAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,SAAA,EAAW,EAAE,CAAA;AAC1D,QAAA,KAAA,MAAW,WAAW,aAAA,EAAe;AACnC,UAAA,IAAA,CAAK,GAAA,CAAI,mBAAA,CAAoB,gBAAA,EAAkB,OAAO,CAAC,CAAA;AAAA,QACzD;AACA,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,gBAAgB,CAAA;AACpE,QAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACpC;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,KAAA,MAAW,SAAA,IAAa,OAAO,KAAA,EAAO;AACpC,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,gBAAgB,CAAA;AACpE,QAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,CAAkB,MAAc,IAAA,EAAuB;AAC7D,IAAA,IAAI,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC5C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,UAAA,uBAAiB,GAAA,EAAI;AACrB,MAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAA,EAAM,UAAU,CAAA;AAAA,IACzC;AACA,IAAA,UAAA,CAAW,IAAI,IAAI,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAA,CAAoB,MAAc,IAAA,EAAuB;AAC/D,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC9C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,UAAA,CAAW,OAAO,IAAI,CAAA;AACtB,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,IAAA,CAAK,aAAA,CAAc,OAAO,IAAI,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,2BAA2B,IAAA,EAAuB;AAExD,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,KAAA,MAAW,OAAA,IAAW,KAAK,YAAA,EAAc;AACvC,QAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,IAAI,CAAA;AAAA,MACxC;AAAA,IACF;AAGA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,EAAU;AACjC,QAAA,IAAA,CAAK,2BAA2B,KAAK,CAAA;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,CACN,kBACA,eAAA,EACW;AACX,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,QAAQ,EAAC;AAAA,MACT,OAAA,EAAS,EAAA;AAAA,MACT,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAgB,EAAC;AAAA,MACjB,SAAA,EAAW,KAAA;AAAA,MACX,MAAA,EAAQ,KAAA;AAAA,MACR,UAAU;AAAC,KACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,UAAU,IAAA,EAAoB;AACpC,IAAA,MAAM,cAAA,GAAiB,kBAAkB,IAAI,CAAA;AAG7C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,uBAAA,CAAwB,cAAc,CAAA;AAC9D,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,UAAA,CAAW,cAAc,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAA,GAAqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,SAAA,CAAU,MAAc,EAAA,EAAgD;AACtE,IAAA,MAAM,cAAA,GAAiB,kBAAkB,IAAI,CAAA;AAC7C,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA,mBAAI,IAAI,GAAA,EAAI;AAAA,IAC1C;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA;AACpC,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA;AAC/C,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,UAAA,CAAW,OAAO,EAAE,CAAA;AAEpB,QAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,UAAA,OAAO,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,QACrC;AAAA,MACF;AAAA,IACF,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,EAAA,EAAgD;AAC3D,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,EAAE,CAAA;AAC1B,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,cAAA,CAAe,OAAO,EAAE,CAAA;AAAA,IAC/B,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KAAA,EAA0B;AAC/B,IAAA,IAAA,CAAK,OAAA,EAAA;AAEL,IAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AACnD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA;AAC7C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,QAAA,IAAI;AACF,UAAA,EAAA,CAAG,KAAK,CAAA;AAAA,QACV,SAAS,GAAA,EAAK;AACZ,UAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,GAAG,CAAA;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,cAAA,EAAgB;AACpC,MAAA,IAAI;AACF,QAAA,EAAA,CAAG,KAAK,CAAA;AAAA,MACV,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,iDAAiD,GAAG,CAAA;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,MAAA,EAAgC;AACxC,IAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AACzC,IAAA,IAAA,CAAK,UAAA,GAAa,qBAAA,CAAsB,UAAA,EAAY,UAAU,CAAA;AAE9D,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,EAAA,EAAI,GAAG,CAAA;AACxC,IAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,UAAU,CAAA;AACzC,IAAA,IAAA,CAAK,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,WAAW,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,SAAS,IAAA,EAAuB;AAC9B,IAAA,MAAM,cAAA,GAAiB,kBAAkB,IAAI,CAAA;AAC7C,IAAA,IAAI,cAAA,KAAmB,SAAA,EAAW,OAAO,IAAA,CAAK,KAAA;AAC9C,IAAA,OAAO,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,cAAc,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,IAAA,EAAuB;AACjC,IAAA,MAAM,cAAA,GAAiB,kBAAkB,IAAI,CAAA;AAC7C,IAAA,IAAI,mBAAmB,SAAA,EAAW;AAEhC,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA;AACzC,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,CAAK,SAAA,EAAW;AAC5B,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,IAAA,CAAK,KAAA,EAAO,cAAc,CAAA;AAC5D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,SAAA,GAAY,cAAA,CAAe,WAAA,CAAY,GAAG,CAAA;AAChD,IAAA,MAAM,aACJ,SAAA,IAAa,CAAA,GAAI,YAAY,cAAA,CAAe,SAAA,CAAU,GAAG,SAAS,CAAA;AAGpE,IAAA,IAAA,CAAK,UAAU,UAAU,CAAA;AACzB,IAAA,IAAA,CAAK,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,YAAY,CAAA;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,QAAA,CAAS,UAAA,EAAoB,GAAA,EAAc,YAAA,EAAiC;AAC1E,IAAA,MAAM,cAAA,GAAiB,kBAAkB,UAAU,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA;AAE/C,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,UAAA,CAAW,MAAA,EAAQ;AACrC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA;AAChD,IAAA,MAAM,eAAe,UAAA,CAAW,MAAA;AAEhC,IAAA,IAAI,WAAW,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAE7D,MAAA,MAAM,WAAW,WAAA,CAAY,MAAA;AAC7B,MAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAU,GAAI,YAAA;AAAA,QAC5B,YAAA;AAAA,QACA,OAAO,QAAQ;AAAA,OACjB;AACA,MAAA,MAAM,YAAA,GACJ,YAAA,KAAiB,MAAA,GAAY,YAAA,GAAe,gBAAgB,SAAS,CAAA;AACvE,MAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,cAAA,EAAgB,MAAA,CAAO,QAAQ,CAAC,CAAA;AACjE,MAAA,OAAO,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,YAAY,CAAA;AAAA,IAC7C,WACE,UAAA,CAAW,IAAA,KAAS,YACpB,WAAA,IACA,OAAO,gBAAgB,QAAA,EACvB;AAEA,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAU,GAAI,YAAA,CAAa,cAAc,GAAG,CAAA;AAG5D,MAAA,IAAI,CAAC,aAAa,oBAAA,EAAsB;AACtC,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,MAAM,YAAA,GACJ,YAAA,KAAiB,MAAA,GAAY,YAAA,GAAe,gBAAgB,SAAS,CAAA;AACvE,MAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,cAAA,EAAgB,GAAG,CAAA;AACxD,MAAA,OAAO,IAAA,CAAK,QAAA,CAAS,YAAA,EAAc,YAAY,CAAA;AAAA,IACjD;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,QAAA,CAAS,MAAc,KAAA,EAAyB;AAC9C,IAAA,MAAM,cAAA,GAAiB,kBAAkB,IAAI,CAAA;AAG7C,IAAA,IAAI,mBAAmB,SAAA,EAAW;AAChC,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,gBAAgB,KAAK,CAAA;AAChE,MAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAAA,IACvB;AAGA,IAAA,IAAA,CAAK,UAAU,cAAc,CAAA;AAC7B,IAAA,IAAA,CAAK,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,gBAAgB,CAAA;AACnD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,SAAS,IAAA,EAAqC;AAC5C,IAAA,MAAM,cAAA,GAAiB,kBAAkB,IAAI,CAAA;AAE7C,IAAA,IAAI,cAAA,KAAmB,SAAA,EAAW,OAAO,IAAA,CAAK,IAAA;AAE9C,IAAA,MAAM,QAAA,GAAW,iBAAiB,cAAc,CAAA;AAEhD,IAAA,IAAI,UAAiC,IAAA,CAAK,IAAA;AAC1C,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI,CAAC,OAAA,EAAS,QAAA,EAAU,OAAO,MAAA;AAG/B,MAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,OAAA,CAAQ,gBAAA,EAAkB,OAAO,CAAA;AACtE,MAAA,MAAM,KAAA,GAA+B,QAAQ,QAAA,EAAU,IAAA;AAAA,QACrD,CAAC,KAAA,KAAU,KAAA,CAAM,gBAAA,KAAqB;AAAA,OACxC;AAEA,MAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,MAAA,OAAA,GAAU,KAAA;AAAA,IACZ;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,wBAAwB,IAAA,EAAqC;AACnE,IAAA,MAAM,cAAA,GAAiB,kBAAkB,IAAI,CAAA;AAC7C,IAAA,IAAI,WAAA,GAAc,cAAA;AAElB,IAAA,OAAO,gBAAgB,SAAA,EAAW;AAChC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AACtC,MAAA,IAAI,MAAM,OAAO,IAAA;AAEjB,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,WAAA,CAAY,GAAG,CAAA;AAC7C,MAAA,WAAA,GACE,aAAa,CAAA,GAAI,SAAA,GAAY,WAAA,CAAY,SAAA,CAAU,GAAG,SAAS,CAAA;AAAA,IACnE;AAEA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAA,CACN,IAAA,EACA,MAAA,EACA,OAAA,GAGI,EAAC,EACC;AACN,IAAA,MAAM,EAAE,eAAA,EAAiB,gBAAA,EAAiB,GAAI,IAAA;AAE9C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,gBAAgB,CAAA;AAC5C,IAAA,IAAI,UAAU,MAAA,EAAW;AAEvB,MAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,MAAA,IAAU,IAAA,CAAK,cAAc,CAAA;AAGlE,MAAA,IAAA,CAAK,QAAA,CAAS,kBAAkB,YAAY,CAAA;AAC5C,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAC5C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,YAAA,oBAAgB,IAAI,GAAA,EAAY;AAC7D,IAAA,IAAI,YAAA,CAAa,GAAA,CAAI,gBAAgB,CAAA,EAAG;AACtC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,gBAAgB,CAAA;AAGvC,IAAA,MAAM,gBACJ,MAAA,KAAW,MAAA,IAAa,CAAC,SAAA,CAAU,MAAA,EAAQ,KAAK,cAAc,CAAA;AAChE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,cAAA,GAAiB,MAAA;AACtB,MAAA,MAAM,eAAe,IAAA,CAAK,mBAAA;AAAA,QACxB,IAAA,CAAK,cAAA;AAAA,QACL;AAAA,OACF;AAEA,MAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,YAAA,IAAgB,EAAC,EAAG;AAC7C,QAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,IAAI,CAAA;AAAA,MACxC;AACA,MAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,MAAA,IAAI,CAAC,QAAQ,0BAAA,EAA4B;AACvC,QAAA,KAAA,MAAW,WAAW,YAAA,EAAc;AAClC,UAAA,IAAA,CAAK,iBAAA,CAAkB,SAAS,IAAI,CAAA;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAM,GAAI,sBAAA;AAAA,MACvC,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,cAAA;AAAA,MACL,KAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAM,sBAAA,GACJ,CAAC,SAAA,CAAU,eAAA,EAAiB,KAAK,MAAM,CAAA,IAAK,SAAS,IAAA,CAAK,IAAA;AAE5D,IAAA,MAAM,YAAA,GAAe,CAAC,SAAA,CAAU,KAAA,EAAO,KAAK,KAAK,CAAA;AAEjD,IAAA,IAAA,CAAK,MAAA,GAAS,eAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,OAAA,EAAA;AAGL,IAAA,MAAM,cAAA,uBAAqB,GAAA,EAAuB;AAClD,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,EAAU;AACjC,QAAA,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,gBAAA,EAAkB,KAAK,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,MAAM,cAA2B,EAAC;AAElC,IAAA,MAAM,eAAe,CACnB,QAAA,EACA,WAAA,EACA,oBAAA,EACA,YAAqB,KAAA,KAClB;AACH,MAAA,MAAM,qBAAA,GAAwB,eAAA,CAAgB,gBAAA,EAAkB,QAAQ,CAAA;AAExE,MAAA,IAAI,SAAA,GAAY,cAAA,CAAe,GAAA,CAAI,qBAAqB,CAAA;AACxD,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,cAAA,CAAe,OAAO,qBAAqB,CAAA;AAC3C,QAAA,SAAA,CAAU,eAAA,GAAkB,oBAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,SAAA,GAAY,IAAA,CAAK,eAAA;AAAA,UACf,qBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAEA,MAAA,SAAA,CAAU,SAAA,GAAY,SAAA;AAEtB,MAAA,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,WAAA,EAAa,OAAO,CAAA;AAC9C,MAAA,WAAA,CAAY,KAAK,SAAS,CAAA;AAAA,IAC5B,CAAA;AAEA,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,SAAA,GACJ,SAAS,OAAO,KAAA,KAAU,WAAW,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,GAAI,EAAC;AAC7D,QAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AAGtC,QAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,eAAA,CAAgB,oBAAA;AAEhC,QAAA,IAAI,gBAAgB,UAAA,EAAY;AAC9B,UAAA,KAAA,MAAW,CAAC,GAAA,EAAK,SAAS,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,YACpC,eAAA,CAAgB;AAAA,WAClB,EAAG;AACD,YAAA,aAAA,CAAc,IAAI,GAAG,CAAA;AAErB,YAAA,YAAA;AAAA,cACE,GAAA;AAAA,cACA,SAAA;AAAA,cACA,CAAA,EAAG,eAAe,CAAA,YAAA,EAAe,GAAG,CAAA,CAAA;AAAA,cACpC;AAAA,aACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,gBAAgB,iBAAA,EAAmB;AACrC,UAAA,KAAA,MAAW,CAAC,OAAA,EAAS,SAAS,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,YACxC,eAAA,CAAgB;AAAA,WAClB,EAAG;AACD,YAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,cAAA,IAAI,aAAA,CAAc,SAAS,GAAG,CAAA,IAAK,CAAC,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG;AAC1D,gBAAA,aAAA,CAAc,IAAI,GAAG,CAAA;AAErB,gBAAA,YAAA;AAAA,kBACE,GAAA;AAAA,kBACA,SAAA;AAAA,kBACA,CAAA,EAAG,eAAe,CAAA,mBAAA,EAAsB,iBAAA,CAAkB,OAAO,CAAC,CAAA,CAAA;AAAA,kBAClE;AAAA,iBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,gBAAgB,oBAAA,EAAsB;AACxC,UAAA,MAAM,YACJ,OAAO,eAAA,CAAgB,yBAAyB,QAAA,GAC5C,eAAA,CAAgB,uBAChB,EAAC;AAEP,UAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,YAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG;AAE3B,cAAA,YAAA;AAAA,gBACE,GAAA;AAAA,gBACA,SAAA;AAAA,gBACA,GAAG,eAAe,CAAA,qBAAA,CAAA;AAAA,gBAClB;AAAA,eACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,OAAA,EAAS;AAEZ,QAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,eAAA,CAAgB,KAAA;AAEhC,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,UAAA,IAAI,iBAAA,GAAoB,CAAA;AACxB,UAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,YAAA,iBAAA,GAAoB,gBAAgB,WAAA,CAAY,MAAA;AAChD,YAAA,KAAA,IACM,CAAA,GAAI,GACR,CAAA,GAAI,IAAA,CAAK,IAAI,KAAA,CAAM,MAAA,EAAQ,iBAAiB,CAAA,EAC5C,CAAA,EAAA,EACA;AAEA,cAAA,YAAA;AAAA,gBACE,OAAO,CAAC,CAAA;AAAA,gBACR,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,gBAC7B,CAAA,EAAG,eAAe,CAAA,aAAA,EAAgB,CAAC,CAAA,CAAA;AAAA,gBACnC;AAAA,eACF;AAAA,YACF;AAAA,UACF;AAEA,UAAA,IAAI,eAAA,CAAgB,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,iBAAA,EAAmB;AAC7D,YAAA,KAAA,IAAS,CAAA,GAAI,iBAAA,EAAmB,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AAErD,cAAA,YAAA;AAAA,gBACE,OAAO,CAAC,CAAA;AAAA,gBACR,eAAA,CAAgB,KAAA;AAAA,gBAChB,GAAG,eAAe,CAAA,MAAA,CAAA;AAAA,gBAClB;AAAA,eACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA;AAIF,IAAA,KAAA,MAAW,QAAA,IAAY,cAAA,CAAe,MAAA,EAAO,EAAG;AAC9C,MAAA,IAAA,CAAK,2BAA2B,QAAQ,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAA,CAAK,QAAA,GAAW,WAAA;AAGhB,IAAA,IAAI,sBAAA,EAAwB;AAC1B,MAAA,IAAA,CAAK,OAAO,EAAE,IAAA,EAAM,UAAU,IAAA,EAAM,IAAA,CAAK,kBAAkB,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAA,CAAK,OAAO,EAAE,IAAA,EAAM,SAAS,IAAA,EAAM,IAAA,CAAK,kBAAkB,CAAA;AAAA,IAC5D;AAGA,IAAA,YAAA,CAAa,IAAI,gBAAgB,CAAA;AACjC,IAAA,IAAA,CAAK,aAAA,CAAc,OAAO,gBAAgB,CAAA;AAI1C,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,gBAAgB,CAAA;AAC9D,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,KAAA,MAAW,iBAAiB,cAAA,EAAgB;AAE1C,QAAA,IAAA,CAAK,SAAA,CAAU,eAAe,MAAA,EAAW;AAAA,UACvC,GAAG,OAAA;AAAA,UACH;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF","file":"index.cjs","sourcesContent":["export function matchSchemaType(value: unknown, type: string): boolean {\n switch (type) {\n case \"string\":\n return typeof value === \"string\";\n case \"number\":\n return typeof value === \"number\" || typeof value === \"bigint\";\n case \"integer\":\n return typeof value === \"number\" && Number.isInteger(value);\n case \"boolean\":\n return typeof value === \"boolean\";\n case \"object\":\n return (\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n );\n case \"array\":\n return Array.isArray(value);\n case \"null\":\n return value === null || value === undefined;\n default:\n return false;\n }\n}\n\nexport function detectSchemaType(value: unknown): string {\n if (value === null || value === undefined) {\n return \"null\";\n }\n if (Array.isArray(value)) {\n return \"array\";\n }\n const type = typeof value;\n if (type === \"string\") {\n return \"string\";\n }\n if (type === \"boolean\") {\n return \"boolean\";\n }\n if (type === \"number\") {\n return Number.isInteger(value) ? \"integer\" : \"number\";\n }\n if (type === \"bigint\") {\n return \"number\";\n }\n if (type === \"object\") {\n return \"object\";\n }\n // For unrecognized types (function, symbol, etc.), return \"unknown\"\n return \"unknown\";\n}\n\nexport function parseJsonPointer(jsonPointer: string): string[] {\n if (jsonPointer === \"\") return [];\n const pointer =\n jsonPointer.charAt(0) === \"/\" ? jsonPointer.substring(1) : jsonPointer;\n return pointer\n .split(\"/\")\n .map((t) => jsonPointerUnescape(decodeURIComponent(t)));\n}\n\nexport function getJsonPointer(obj: unknown, jsonPointer: string): unknown {\n return get(obj, parseJsonPointer(jsonPointer));\n}\n\nexport function removeJsonPointer(obj: unknown, jsonPointer: string): boolean {\n const path = parseJsonPointer(jsonPointer);\n if (path.length === 0) {\n return false;\n }\n if (obj === null || obj === undefined) {\n return false;\n }\n\n let current: unknown = obj;\n\n for (let i = 0; i < path.length - 1; i++) {\n const segment = path[i];\n if (Array.isArray(current)) {\n const idx = Number(segment);\n if (isNaN(idx) || idx < 0 || idx >= current.length) {\n return false;\n }\n current = current[idx];\n } else if (typeof current === \"object\" && current !== null) {\n if (!Object.hasOwn(current, segment)) {\n return false;\n }\n current = (current as Record<string, unknown>)[segment];\n } else {\n return false;\n }\n\n if (current === null || current === undefined) {\n return false;\n }\n }\n\n const lastSegment = path[path.length - 1];\n if (Array.isArray(current)) {\n const idx = Number(lastSegment);\n if (isNaN(idx) || idx < 0 || idx >= current.length) {\n return false;\n }\n current.splice(idx, 1);\n return true;\n } else if (typeof current === \"object\" && current !== null) {\n if (Object.hasOwn(current, lastSegment)) {\n delete (current as Record<string, unknown>)[lastSegment];\n return true;\n }\n }\n\n return false;\n}\n\nexport function setJsonPointer(\n obj: unknown,\n jsonPointer: string,\n value: unknown,\n): boolean {\n const path = parseJsonPointer(jsonPointer);\n if (path.length === 0) {\n return false;\n }\n if (obj === null || obj === undefined) {\n return false;\n }\n let current: unknown = obj;\n\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n const isLast = i === path.length - 1;\n\n if (Array.isArray(current)) {\n const idx = Number(segment);\n if (isNaN(idx) || idx < 0) {\n return false;\n }\n // ensure array has enough length\n if (idx >= current.length) {\n for (let k = current.length; k <= idx; k++) current.push(undefined);\n }\n if (isLast) {\n current[idx] = value;\n return true;\n }\n // initialize next container if absent\n if (\n current[idx] === null ||\n current[idx] === undefined ||\n typeof current[idx] !== \"object\"\n ) {\n // decide next container based on next token: numeric -> array, else object\n const nextToken = path[i + 1];\n const nextIdx = Number(nextToken);\n current[idx] = !isNaN(nextIdx) ? [] : {};\n }\n current = current[idx];\n } else if (typeof current === \"object\" && current !== null) {\n if (isLast) {\n (current as Record<string, unknown>)[segment] = value;\n return true;\n }\n // initialize next container if absent\n if (\n !Object.hasOwn(current, segment) ||\n (current as Record<string, unknown>)[segment] === undefined\n ) {\n const nextToken = path[i + 1];\n const nextIdx = Number(nextToken);\n (current as Record<string, unknown>)[segment] = !isNaN(nextIdx)\n ? []\n : {};\n }\n current = (current as Record<string, unknown>)[segment];\n } else {\n // cannot traverse further\n return false;\n }\n }\n return true;\n}\n\nexport function get(obj: unknown, path: string[]): unknown {\n let current = obj;\n for (const segment of path) {\n if (Array.isArray(current)) {\n const currentIndex = Number(segment);\n if (\n isNaN(currentIndex) ||\n currentIndex < 0 ||\n currentIndex >= current.length\n ) {\n return undefined;\n } else {\n current = current[currentIndex];\n }\n } else if (typeof current === \"object\" && current !== null) {\n if (!Object.hasOwn(current, segment)) {\n return undefined;\n } else {\n current = (current as Record<string, unknown>)[segment];\n }\n } else {\n return undefined;\n }\n }\n return current;\n}\n\n/**\n * Deep equality comparison for two values.\n * Supports primitives, arrays, plain objects, Date, Map, Set, and RegExp.\n */\nexport function deepEqual(a: unknown, b: unknown): boolean {\n // Strict equality (handles primitives and same reference)\n if (a === b) return true;\n\n // Handle null and non-object cases\n if (\n typeof a !== \"object\" ||\n a === null ||\n typeof b !== \"object\" ||\n b === null\n ) {\n return false;\n }\n\n // Handle Date\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n if (a instanceof Date || b instanceof Date) {\n return false;\n }\n\n // Handle RegExp\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n if (a instanceof RegExp || b instanceof RegExp) {\n return false;\n }\n\n // Handle Map\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key))) {\n return false;\n }\n }\n return true;\n }\n if (a instanceof Map || b instanceof Map) {\n return false;\n }\n\n // Handle Set\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a) {\n // For Sets, we need to check if an equal value exists in b\n let found = false;\n for (const bValue of b) {\n if (deepEqual(value, bValue)) {\n found = true;\n break;\n }\n }\n if (!found) return false;\n }\n return true;\n }\n if (a instanceof Set || b instanceof Set) {\n return false;\n }\n\n // Handle Arrays\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n if (Array.isArray(a)) {\n const arrA = a as unknown[];\n const arrB = b as unknown[];\n if (arrA.length !== arrB.length) return false;\n for (let i = 0; i < arrA.length; i++) {\n if (!deepEqual(arrA[i], arrB[i])) return false;\n }\n return true;\n }\n\n // Handle plain objects\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!Object.hasOwn(b, key)) return false;\n if (\n !deepEqual(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n )\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function jsonPointerEscape(str: string): string {\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\n\nexport function jsonPointerUnescape(str: string): string {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\n\nexport function jsonPointerJoin(base: string, token: string): string {\n if (base === \"\") return \"/\" + jsonPointerEscape(token);\n else return base + \"/\" + jsonPointerEscape(token);\n}\n\n/**\n * Convert a relative path to an absolute path\n * @param nodePath The node's jsonPointer, e.g. \"/a/b\"\n * @param relativePath Relative path, e.g. \"/c\" means /a/b/c\n */\nexport function resolveAbsolutePath(\n nodePath: string,\n relativePath: string,\n): string {\n if (relativePath.startsWith(\"/\")) {\n // Relative to current node's child path\n return nodePath === \"\" ? relativePath : nodePath + relativePath;\n }\n return relativePath;\n}\n\n/**\n * Maximum size for the regex cache to prevent memory leaks.\n */\nconst MAX_REGEX_CACHE_SIZE = 1000;\n\n/**\n * Cache for compiled RegExp objects.\n * null value indicates an invalid pattern.\n */\nconst regexCache = new Map<string, RegExp | null>();\n\n/**\n * Safely test a regex pattern against a string.\n * Returns false if the pattern is invalid instead of throwing.\n * Uses caching to avoid creating RegExp objects repeatedly.\n */\nexport function safeRegexTest(pattern: string, value: string): boolean {\n let regex = regexCache.get(pattern);\n\n // Check if we've already processed this pattern\n if (regex === undefined) {\n try {\n regex = new RegExp(pattern);\n // Evict oldest entry if cache is full (Map maintains insertion order)\n if (regexCache.size >= MAX_REGEX_CACHE_SIZE) {\n const firstKey = regexCache.keys().next().value;\n if (firstKey !== undefined) {\n regexCache.delete(firstKey);\n }\n }\n regexCache.set(pattern, regex);\n } catch {\n // Invalid regex pattern - cache as null\n regexCache.set(pattern, null);\n return false;\n }\n }\n\n // null means the pattern was invalid\n if (regex === null) {\n return false;\n }\n\n return regex.test(value);\n}\n","// URL is available as a global in modern environments (Browsers and Node.js 10+)\n\n// Precompiled regular expressions to avoid re-creating RegExp objects on every call\nconst DATE_RE = /^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/,\n DURATION_RE = /^P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$/,\n EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\n HOSTNAME_RE =\n /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/,\n IPV4_RE =\n /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n IPV6_RE =\n /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(([0-9a-fA-F]{1,4}:){1,7}:)|(([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4})|(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|([0-9a-fA-F]{1,4}:)((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9])?[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9])?[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9])?[0-9]))$/,\n RFC3339_RE =\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/,\n UUID_RE =\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\n\n// String format validator - extract format logic outside of Validator\nexport interface StringFormatValidatorInterface {\n validate(format: string, value: string): boolean;\n}\n\nexport class StringFormatValidator implements StringFormatValidatorInterface {\n validate(format: string, value: string): boolean {\n switch (format) {\n case \"date-time\":\n return this.isDateTime(value);\n case \"date\":\n return this.isDate(value);\n case \"email\":\n return this.isEmail(value);\n case \"hostname\":\n return this.isHostname(value);\n case \"ipv4\":\n return this.isIPv4(value);\n case \"ipv6\":\n return this.isIPv6(value);\n case \"uri\":\n return this.isUri(value);\n case \"uuid\":\n return this.isUuid(value);\n case \"duration\":\n return this.isDuration(value);\n default:\n return true;\n }\n }\n\n private isDateTime(value: string): boolean {\n if (!RFC3339_RE.test(value)) return false;\n return !isNaN(Date.parse(value));\n }\n\n private isDate(value: string): boolean {\n const m = DATE_RE.exec(value);\n if (!m) return false;\n const year = Number(m[1]),\n month = Number(m[2]),\n day = Number(m[3]),\n daysInMonth = [\n 31,\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n return day <= daysInMonth[month - 1];\n }\n\n private isEmail(value: string): boolean {\n return EMAIL_RE.test(value);\n }\n\n private isHostname(value: string): boolean {\n return HOSTNAME_RE.test(value);\n }\n\n private isIPv4(value: string): boolean {\n return IPV4_RE.test(value);\n }\n\n private isIPv6(value: string): boolean {\n return IPV6_RE.test(value);\n }\n\n private isUri(value: string): boolean {\n try {\n const u = new URL(value);\n return typeof u.protocol === \"string\" && u.protocol.length > 0;\n } catch {\n return false;\n }\n }\n\n private isUuid(value: string): boolean {\n return UUID_RE.test(value);\n }\n\n private isDuration(value: string): boolean {\n return DURATION_RE.test(value) && value !== \"P\";\n }\n}\n\nexport const stringFormatValidator = new StringFormatValidator();\n","import type { ErrorMessage } from \"./type\";\n\n/**\n * Default error message templates for i18n support.\n * Keys are translation keys, values are English templates with {param} placeholders.\n */\nexport const MESSAGES: Record<string, string> = {\n \"validation.anyOf\": \"must match at least one schema\",\n \"validation.oneOf\": \"must match exactly one schema, matched {count}\",\n \"validation.not\": \"must not match schema\",\n \"validation.const\": \"must be equal to {value}\",\n \"validation.enum\": \"must be equal to one of the allowed values\",\n \"validation.type\": \"must be {expected}\",\n \"validation.maximum\": \"must be <= {value}\",\n \"validation.exclusiveMaximum\": \"must be < {value}\",\n \"validation.minimum\": \"must be >= {value}\",\n \"validation.exclusiveMinimum\": \"must be > {value}\",\n \"validation.multipleOf\": \"must be multiple of {value}\",\n \"validation.maxLength\": \"must be shorter than or equal to {value} characters\",\n \"validation.minLength\": \"must be longer than or equal to {value} characters\",\n \"validation.pattern\": 'must match pattern \"{pattern}\"',\n \"validation.format\": 'must match format \"{format}\"',\n \"validation.maxItems\": \"must have at most {value} items\",\n \"validation.minItems\": \"must have at least {value} items\",\n \"validation.uniqueItems\": \"must not contain duplicate items\",\n \"validation.contains\": \"must contain at least one valid item\",\n \"validation.minContains\": \"must contain at least {value} valid items\",\n \"validation.maxContains\": \"must contain at most {value} valid items\",\n \"validation.maxProperties\": \"must have at most {value} properties\",\n \"validation.minProperties\": \"must have at least {value} properties\",\n \"validation.required\": \"must have required property '{property}'\",\n \"validation.dependentRequired\":\n \"property '{source}' requires property '{target}'\",\n \"validation.additionalProperties\":\n \"must not have additional properties: {properties}\",\n \"validation.failed\": \"validation failed\",\n};\n\n/**\n * Formats ErrorMessage to string for Output.error.\n * Provide a custom implementation for i18n support.\n */\nexport type ErrorFormatter = (msg: ErrorMessage) => string;\n\n/**\n * Default error formatter: looks up template from MESSAGES and interpolates params.\n */\nexport const defaultErrorFormatter: ErrorFormatter = (msg) => {\n const template = MESSAGES[msg.key] ?? msg.key;\n if (!msg.params) return template;\n\n let result = template;\n for (const [k, v] of Object.entries(msg.params)) {\n const value =\n typeof v === \"object\" && v !== null ? JSON.stringify(v) : String(v);\n result = result.replace(`{${k}}`, value);\n }\n return result;\n};\n","/**\n * JSON Schema draft version definitions and detection utilities.\n */\n/**\n * Supported JSON Schema draft versions.\n */\nexport type SchemaDraft =\n | \"draft-04\"\n | \"draft-07\"\n | \"draft-2019-09\"\n | \"draft-2020-12\";\n\n/**\n * Standard $schema URI patterns for each draft version.\n */\nexport const DRAFT_URIS: Record<SchemaDraft, string[]> = {\n \"draft-04\": [\n \"http://json-schema.org/draft-04/schema#\",\n \"http://json-schema.org/draft-04/schema\",\n ],\n \"draft-07\": [\n \"http://json-schema.org/draft-07/schema#\",\n \"http://json-schema.org/draft-07/schema\",\n ],\n \"draft-2019-09\": [\n \"https://json-schema.org/draft/2019-09/schema\",\n \"https://json-schema.org/draft/2019-09/schema#\",\n ],\n \"draft-2020-12\": [\n \"https://json-schema.org/draft/2020-12/schema\",\n \"https://json-schema.org/draft/2020-12/schema#\",\n ],\n};\n\n/**\n * Detect the JSON Schema draft version from a schema.\n * Detection is based on:\n * 1. The $schema URI if present\n * 2. Heuristics based on keywords used\n *\n * @param schema - The schema to detect the version of (can be object, boolean, or unknown)\n * @returns The detected draft version, defaults to \"draft-2020-12\" if unknown\n */\nexport function detectSchemaDraft(schema: unknown): SchemaDraft {\n // If not an object, default to latest\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n return \"draft-2020-12\";\n }\n\n const s = schema as Record<string, unknown>;\n\n // Check $schema URI first\n if (s.$schema && typeof s.$schema === \"string\") {\n for (const [draft, uris] of Object.entries(DRAFT_URIS)) {\n if (uris.some((uri) => s.$schema === uri)) {\n return draft as SchemaDraft;\n }\n }\n }\n\n // Heuristic detection based on keywords\n\n // draft-2020-12: uses prefixItems\n if (\"prefixItems\" in s) {\n return \"draft-2020-12\";\n }\n\n // draft-2019-09: uses $recursiveRef/$recursiveAnchor or unevaluatedProperties/unevaluatedItems\n if (\n \"$recursiveRef\" in s ||\n \"$recursiveAnchor\" in s ||\n \"unevaluatedProperties\" in s ||\n \"unevaluatedItems\" in s\n ) {\n return \"draft-2019-09\";\n }\n\n // draft-04: uses \"id\" instead of \"$id\", or boolean exclusiveMaximum/exclusiveMinimum\n if (\"id\" in s && !(\"$id\" in s)) {\n return \"draft-04\";\n }\n\n // draft-04: boolean exclusiveMaximum/exclusiveMinimum\n if (\n typeof s.exclusiveMaximum === \"boolean\" ||\n typeof s.exclusiveMinimum === \"boolean\"\n ) {\n return \"draft-04\";\n }\n\n // draft-04/07: uses dependencies keyword\n if (\"dependencies\" in s) {\n // Could be draft-04 or draft-07, check for other clues\n if (\"$id\" in s) {\n return \"draft-07\";\n }\n return \"draft-04\";\n }\n\n // draft-04/07: uses additionalItems\n if (\"additionalItems\" in s) {\n if (\"$id\" in s) {\n return \"draft-07\";\n }\n return \"draft-04\";\n }\n\n // Default to latest if no distinguishing features found\n return \"draft-2020-12\";\n}\n","/**\n * Schema normalizer that transforms older JSON Schema drafts to draft-2020-12.\n *\n * This allows the validator to only implement draft-2020-12 semantics\n * while still supporting schemas written for older drafts.\n */\nimport type { Schema } from \"./type\";\nimport { detectSchemaDraft, type SchemaDraft } from \"./version\";\n\nexport interface NormalizerOptions {\n /**\n * Source draft version. If not specified, will be auto-detected.\n */\n sourceDraft?: SchemaDraft;\n}\n\n/**\n * Normalize a JSON Schema from any supported draft to draft-2020-12 format.\n *\n * Transformations performed:\n * - `id` → `$id` (draft-04)\n * - Boolean `exclusiveMaximum`/`exclusiveMinimum` → numeric values (draft-04)\n * - Array `items` + `additionalItems` → `prefixItems` + `items` (draft-04/07/2019-09)\n * - `dependencies` → `dependentRequired`/`dependentSchemas` (draft-04/07)\n * - `$recursiveRef`/`$recursiveAnchor` → `$dynamicRef`/`$dynamicAnchor` (draft-2019-09)\n *\n * @param schema - The schema to normalize (can be object, boolean, or unknown)\n * @param options - Optional configuration\n * @returns A new schema object in draft-2020-12 format (always returns an object)\n */\nexport function normalizeSchema(\n schema: unknown,\n options: NormalizerOptions = {},\n): Schema {\n // Handle boolean schemas (valid in Draft-06+)\n if (typeof schema === \"boolean\") {\n return schema ? {} : { not: {} };\n }\n\n // If not an object, return empty schema\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n return {} as Schema;\n }\n\n const schemaObj = schema as Schema;\n const sourceDraft = options.sourceDraft ?? detectSchemaDraft(schemaObj);\n\n // Create a mutable copy to transform\n const normalized: Schema = { ...schemaObj };\n\n // 1. Process based on source draft\n switch (sourceDraft) {\n case \"draft-04\":\n normalizeDraft04(normalized);\n normalizeDraft07(normalized);\n normalizeDraft201909(normalized);\n break;\n case \"draft-07\":\n normalizeDraft07(normalized);\n normalizeDraft201909(normalized);\n break;\n case \"draft-2019-09\":\n normalizeDraft07(normalized);\n normalizeDraft201909(normalized);\n break;\n }\n\n // 2. Process general/OpenAPI extensions (nullable, example)\n normalizeGeneral(normalized);\n\n // 3. Recursively normalize nested schemas\n normalizeNestedSchemas(normalized, options);\n\n // 4. Update $schema to indicate normalized version\n if (normalized.$schema) {\n normalized.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n\n return normalized;\n}\n\n/**\n * Normalize draft-04 specific keywords to newer format.\n */\nfunction normalizeDraft04(schema: Schema): void {\n // Access schema as Record for legacy keywords not in the type\n const legacy = schema as Record<string, unknown>;\n\n // id → $id\n if (\"id\" in legacy && !(\"$id\" in schema)) {\n schema.$id = legacy.id as string;\n delete legacy.id;\n }\n\n // Sibling of $ref should be removed in Draft-04 to preserve semantics\n // (In Draft-04, $ref overrides all other keywords in the same object)\n if (\"$ref\" in schema) {\n for (const key of Object.keys(schema)) {\n if (\n key !== \"$ref\" &&\n key !== \"$schema\" &&\n key !== \"id\" &&\n key !== \"$id\" &&\n key !== \"$comment\"\n ) {\n delete legacy[key];\n }\n }\n }\n\n // Boolean exclusiveMaximum/exclusiveMinimum → numeric\n // In draft-04: exclusiveMaximum is a boolean, used with maximum\n // In draft-07+: exclusiveMaximum is the numeric limit itself\n if (\n typeof legacy.exclusiveMaximum === \"boolean\" &&\n legacy.exclusiveMaximum === true\n ) {\n if (schema.maximum !== undefined) {\n schema.exclusiveMaximum = schema.maximum;\n delete schema.maximum;\n } else {\n delete legacy.exclusiveMaximum;\n }\n }\n\n if (\n typeof legacy.exclusiveMinimum === \"boolean\" &&\n legacy.exclusiveMinimum === true\n ) {\n if (schema.minimum !== undefined) {\n schema.exclusiveMinimum = schema.minimum;\n delete schema.minimum;\n } else {\n delete legacy.exclusiveMinimum;\n }\n }\n\n // Clean up false boolean exclusive values\n if (legacy.exclusiveMaximum === false) {\n delete legacy.exclusiveMaximum;\n }\n if (legacy.exclusiveMinimum === false) {\n delete legacy.exclusiveMinimum;\n }\n\n // enum: [x] -> const: x\n // While enum is still valid, const is the preferred 2020-12 way for single values\n if (\n Array.isArray(schema.enum) &&\n schema.enum.length === 1 &&\n schema.const === undefined\n ) {\n schema.const = schema.enum[0];\n }\n}\n\n/**\n * Normalize draft-07 specific keywords to newer format.\n */\nfunction normalizeDraft07(schema: Schema): void {\n // Access schema as Record for legacy keywords not in the type\n const legacy = schema as Record<string, unknown>;\n\n // Array items + additionalItems → prefixItems + items\n // In draft-04/07: items can be an array (tuple validation), additionalItems for extra\n // In draft-2020-12: prefixItems is the array, items is for additional\n if (Array.isArray(legacy.items)) {\n schema.prefixItems = legacy.items as Schema[];\n if (\"additionalItems\" in legacy) {\n if (\n typeof legacy.additionalItems === \"object\" ||\n typeof legacy.additionalItems === \"boolean\"\n ) {\n schema.items = legacy.additionalItems as Schema;\n }\n delete legacy.additionalItems;\n } else {\n // In Draft-04/07, items without additionalItems means additional items are allowed\n // In Draft-2020-12, prefixItems without items keyword doesn't restrict additional items either.\n // So this is fine.\n delete legacy.items;\n }\n } else if (\"additionalItems\" in legacy) {\n // additionalItems without array items - just remove it as it has no effect\n delete legacy.additionalItems;\n }\n\n // dependencies → dependentRequired / dependentSchemas\n if (\"dependencies\" in legacy) {\n const deps = legacy.dependencies as Record<string, string[] | Schema>;\n\n for (const [prop, value] of Object.entries(deps)) {\n if (Array.isArray(value)) {\n // String array → dependentRequired\n if (!schema.dependentRequired) {\n schema.dependentRequired = {};\n }\n schema.dependentRequired[prop] = value;\n } else {\n // Schema → dependentSchemas\n if (!schema.dependentSchemas) {\n schema.dependentSchemas = {};\n }\n schema.dependentSchemas[prop] = value;\n }\n }\n\n delete legacy.dependencies;\n }\n}\n\n/**\n * Normalize general keywords and common extensions (OpenAPI) to standard format.\n */\nfunction normalizeGeneral(schema: Schema): void {\n // Access schema as Record for legacy keywords not in the type\n const legacy = schema as Record<string, unknown>;\n\n // Generic/OpenAPI: nullable: true\n if (legacy.nullable === true) {\n if (typeof schema.type === \"string\") {\n schema.type = [schema.type, \"null\"];\n } else if (Array.isArray(schema.type)) {\n if (!schema.type.includes(\"null\")) {\n schema.type = [...schema.type, \"null\"];\n }\n }\n delete legacy.nullable;\n }\n\n // Generic/OpenAPI: example: x -> examples: [x]\n if (\"example\" in legacy) {\n if (!(\"examples\" in schema)) {\n schema.examples = [legacy.example];\n }\n delete legacy.example;\n }\n}\n\n/**\n * Normalize draft-2019-09 specific keywords to draft-2020-12 format.\n */\nfunction normalizeDraft201909(schema: Schema): void {\n // $recursiveRef → $dynamicRef\n if (\"$recursiveRef\" in schema) {\n let ref = schema.$recursiveRef as string;\n // Normalized $recursiveRef: \"#\" to $dynamicRef: \"#recursiveAnchor\"\n // to match the default anchor we use for $recursiveAnchor\n if (ref === \"#\") {\n ref = \"#recursiveAnchor\";\n }\n schema.$dynamicRef = ref;\n delete schema.$recursiveRef;\n }\n\n // $recursiveAnchor → $dynamicAnchor\n if (\"$recursiveAnchor\" in schema) {\n // $recursiveAnchor was always true (boolean)\n if (schema.$recursiveAnchor === true) {\n // Use a standard name for the dynamic anchor\n schema.$dynamicAnchor = schema.$dynamicAnchor ?? \"recursiveAnchor\";\n }\n delete schema.$recursiveAnchor;\n }\n}\n\n/**\n * Recursively normalize all nested schemas within a schema.\n */\nfunction normalizeNestedSchemas(\n schema: Schema,\n options: NormalizerOptions,\n): void {\n // Definitions\n if (schema.$defs) {\n schema.$defs = Object.fromEntries(\n Object.entries(schema.$defs).map(([key, subSchema]) => [\n key,\n normalizeSchema(subSchema, options),\n ]),\n );\n }\n\n // Legacy definitions (draft-04/07 used \"definitions\")\n if (\"definitions\" in schema) {\n const defs = schema.definitions as Record<string, Schema>;\n if (!schema.$defs) {\n schema.$defs = {};\n }\n for (const [key, subSchema] of Object.entries(defs)) {\n schema.$defs[key] = normalizeSchema(subSchema, options);\n }\n delete schema.definitions;\n }\n\n // Properties\n if (schema.properties) {\n schema.properties = Object.fromEntries(\n Object.entries(schema.properties).map(([key, subSchema]) => [\n key,\n normalizeSchema(subSchema, options),\n ]),\n );\n }\n\n // Pattern properties\n if (schema.patternProperties) {\n schema.patternProperties = Object.fromEntries(\n Object.entries(schema.patternProperties).map(([key, subSchema]) => [\n key,\n normalizeSchema(subSchema, options),\n ]),\n );\n }\n\n // Additional properties (if schema)\n if (\n schema.additionalProperties &&\n typeof schema.additionalProperties === \"object\"\n ) {\n schema.additionalProperties = normalizeSchema(\n schema.additionalProperties,\n options,\n );\n }\n\n // Items (after normalization, this is for additional items)\n if (\n schema.items &&\n typeof schema.items === \"object\" &&\n !Array.isArray(schema.items)\n ) {\n schema.items = normalizeSchema(schema.items, options);\n }\n\n // Prefix items\n if (schema.prefixItems) {\n schema.prefixItems = schema.prefixItems.map((s) =>\n normalizeSchema(s, options),\n );\n }\n\n // Contains\n if (schema.contains) {\n schema.contains = normalizeSchema(schema.contains, options);\n }\n\n // Applicators\n if (schema.allOf) {\n schema.allOf = schema.allOf.map((s) => normalizeSchema(s, options));\n }\n if (schema.anyOf) {\n schema.anyOf = schema.anyOf.map((s) => normalizeSchema(s, options));\n }\n if (schema.oneOf) {\n schema.oneOf = schema.oneOf.map((s) => normalizeSchema(s, options));\n }\n if (schema.not) {\n schema.not = normalizeSchema(schema.not, options);\n }\n\n // Conditionals\n if (schema.if) {\n schema.if = normalizeSchema(schema.if, options);\n }\n if (schema.then) {\n schema.then = normalizeSchema(schema.then, options);\n }\n if (schema.else) {\n schema.else = normalizeSchema(schema.else, options);\n }\n\n // Dependent schemas\n if (schema.dependentSchemas) {\n schema.dependentSchemas = Object.fromEntries(\n Object.entries(schema.dependentSchemas).map(([key, subSchema]) => [\n key,\n normalizeSchema(subSchema, options),\n ]),\n );\n }\n\n // Unevaluated\n if (schema.unevaluatedItems) {\n schema.unevaluatedItems = normalizeSchema(schema.unevaluatedItems, options);\n }\n if (schema.unevaluatedProperties) {\n schema.unevaluatedProperties = normalizeSchema(\n schema.unevaluatedProperties,\n options,\n );\n }\n\n // Property names\n if (schema.propertyNames) {\n schema.propertyNames = normalizeSchema(schema.propertyNames, options);\n }\n\n // Content schema\n if (schema.contentSchema) {\n schema.contentSchema = normalizeSchema(schema.contentSchema, options);\n }\n}\n","import {\n stringFormatValidator,\n type StringFormatValidatorInterface,\n} from \"./stringformat\";\nimport type { Schema, Output, ErrorMessage } from \"./type\";\nimport { deepEqual, jsonPointerEscape, matchSchemaType } from \"./util\";\nimport { defaultErrorFormatter, type ErrorFormatter } from \"./i18n\";\nimport { normalizeSchema } from \"./normalize\";\n\nexport interface ValidatorOptions {\n fastFail?: boolean;\n shallow?: boolean;\n}\n\nexport interface ValidatorConfig {\n formatValidator?: StringFormatValidatorInterface;\n errorFormatter?: ErrorFormatter;\n}\n\nexport class Validator {\n private formatValidator: StringFormatValidatorInterface;\n private errorFormatter: ErrorFormatter;\n\n constructor(config: ValidatorConfig = {}) {\n this.formatValidator = config.formatValidator ?? stringFormatValidator;\n this.errorFormatter = config.errorFormatter ?? defaultErrorFormatter;\n }\n\n /**\n * Format an ErrorMessage to a localized string.\n */\n formatError(msg: ErrorMessage): string {\n return this.errorFormatter(msg);\n }\n\n validate(\n schema: Schema,\n value: unknown,\n keywordLocation: string = \"#\",\n instanceLocation: string = \"\",\n options: ValidatorOptions = {},\n ): Output {\n const { fastFail = false } = options;\n const output: Output = {\n valid: false,\n keywordLocation,\n absoluteKeywordLocation: keywordLocation,\n instanceLocation,\n absoluteInstanceLocation: instanceLocation,\n errors: [],\n };\n\n // Applicators: if/then/else\n if (schema.if) {\n const ifResult = this.validate(\n schema.if,\n value,\n keywordLocation + `/if`,\n `${instanceLocation}`,\n options,\n );\n if (ifResult.valid) {\n if (schema.then) {\n const thenResult = this.validate(\n schema.then,\n value,\n keywordLocation + `/then`,\n instanceLocation,\n options,\n );\n if (!thenResult.valid) {\n output.errors.push(...(thenResult.errors || []));\n if (fastFail) return output;\n }\n }\n } else if (schema.else) {\n const elseResult = this.validate(\n schema.else,\n value,\n keywordLocation + `/else`,\n instanceLocation,\n options,\n );\n if (!elseResult.valid) {\n output.errors.push(...(elseResult.errors || []));\n if (fastFail) return output;\n }\n }\n }\n\n // Applicators: allOf\n if (schema.allOf) {\n for (let index = 0; index < schema.allOf.length; index++) {\n const subSchema = schema.allOf[index];\n const result = this.validate(\n subSchema,\n value,\n keywordLocation + `/allOf/${index}`,\n instanceLocation,\n options,\n );\n if (!result.valid) {\n output.errors.push(...(result.errors || []));\n if (fastFail) return output;\n }\n }\n }\n\n // Applicators: anyOf\n if (schema.anyOf) {\n let hasValid = false;\n const errors: Output[] = [];\n for (let index = 0; index < schema.anyOf.length; index++) {\n const subSchema = schema.anyOf[index];\n const result = this.validate(\n subSchema,\n value,\n keywordLocation + `/anyOf/${index}`,\n instanceLocation,\n options,\n );\n if (result.valid) {\n hasValid = true;\n break;\n } else {\n errors.push(...(result.errors || []));\n }\n }\n if (!hasValid) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/anyOf`,\n instanceLocation,\n errors,\n error: this.formatError({ key: \"validation.anyOf\" }),\n });\n if (fastFail) return output;\n }\n }\n\n // Applicators: oneOf\n if (schema.oneOf) {\n const results = schema.oneOf.map((subSchema, index) =>\n this.validate(\n subSchema,\n value,\n keywordLocation + `/oneOf/${index}`,\n instanceLocation,\n options,\n ),\n ),\n validCount = results.filter((r) => r.valid).length;\n if (validCount !== 1) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/oneOf`,\n instanceLocation,\n errors: [],\n annotations: results,\n error: this.formatError({\n key: \"validation.oneOf\",\n params: { count: validCount },\n }),\n });\n if (fastFail) return output;\n }\n }\n\n // Applicators: not\n if (schema.not) {\n const result = this.validate(\n schema.not,\n value,\n keywordLocation + `/not`,\n instanceLocation,\n options,\n );\n if (result.valid) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/not`,\n instanceLocation,\n errors: [],\n annotations: [result],\n error: this.formatError({ key: \"validation.not\" }),\n });\n if (fastFail) return output;\n }\n }\n\n // Validation: const\n if (schema.const !== undefined) {\n if (!deepEqual(value, schema.const)) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/const`,\n instanceLocation,\n errors: [],\n error: this.formatError({\n key: \"validation.const\",\n params: { value: schema.const },\n }),\n });\n if (fastFail) return output;\n }\n }\n\n // Validation: enum\n if (schema.enum) {\n if (!schema.enum.some((v) => deepEqual(value, v))) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/enum`,\n instanceLocation,\n errors: [],\n error: this.formatError({ key: \"validation.enum\" }),\n });\n if (fastFail) return output;\n }\n }\n\n // Type validation. If schema.type is provided, prefer that; otherwise\n // infer instanceType from the runtime value so that keywords like\n // minLength/prefixItems/contains/etc. without an explicit type still\n // apply when appropriate.\n let instanceType = \"\";\n if (schema.type) {\n const allowedTypes = Array.isArray(schema.type)\n ? schema.type\n : [schema.type];\n for (const type of allowedTypes) {\n if (this.checkType(value, type)) {\n instanceType = type;\n break;\n }\n }\n if (!instanceType) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/type`,\n instanceLocation,\n errors: [],\n error: this.formatError({\n key: \"validation.type\",\n params: { expected: allowedTypes.join(\" or \") },\n }),\n });\n if (fastFail) return output;\n }\n } else {\n instanceType = this.detectType(value);\n }\n\n // Type specific validations\n if (instanceType === \"object\") {\n this.validateObject(\n schema,\n value as Record<string, unknown>,\n instanceLocation,\n keywordLocation,\n output,\n options,\n );\n } else if (instanceType === \"array\") {\n this.validateArray(\n schema,\n value as unknown[],\n keywordLocation,\n instanceLocation,\n output,\n options,\n );\n } else if (instanceType === \"string\") {\n this.validateString(\n schema,\n value as string,\n keywordLocation,\n instanceLocation,\n output,\n options,\n );\n } else if (instanceType === \"number\") {\n this.validateNumber(\n schema,\n value as number,\n keywordLocation,\n instanceLocation,\n output,\n options,\n );\n }\n\n output.valid = output.errors.length == 0;\n output.error = output.valid\n ? undefined\n : this.formatError({ key: \"validation.failed\" });\n return output;\n }\n\n private validateNumber(\n schema: Schema,\n value: number,\n keywordLocation: string,\n instanceLocation: string,\n output: Output,\n options: ValidatorOptions,\n ) {\n const { fastFail = false } = options;\n const addError = (keyword: string, msg: ErrorMessage) => {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/${keyword}`,\n instanceLocation,\n errors: [],\n error: this.formatError(msg),\n });\n };\n\n if (schema.maximum !== undefined && value > schema.maximum) {\n addError(\"maximum\", {\n key: \"validation.maximum\",\n params: { value: schema.maximum },\n });\n if (fastFail) return;\n }\n if (\n schema.exclusiveMaximum !== undefined &&\n value >= schema.exclusiveMaximum\n ) {\n addError(\"exclusiveMaximum\", {\n key: \"validation.exclusiveMaximum\",\n params: { value: schema.exclusiveMaximum },\n });\n if (fastFail) return;\n }\n if (schema.minimum !== undefined && value < schema.minimum) {\n addError(\"minimum\", {\n key: \"validation.minimum\",\n params: { value: schema.minimum },\n });\n if (fastFail) return;\n }\n if (\n schema.exclusiveMinimum !== undefined &&\n value <= schema.exclusiveMinimum\n ) {\n addError(\"exclusiveMinimum\", {\n key: \"validation.exclusiveMinimum\",\n params: { value: schema.exclusiveMinimum },\n });\n if (fastFail) return;\n }\n if (schema.multipleOf !== undefined) {\n const remainder = value % schema.multipleOf;\n if (\n Math.abs(remainder) > 0.00001 &&\n Math.abs(remainder - schema.multipleOf) > 0.00001\n ) {\n addError(\"multipleOf\", {\n key: \"validation.multipleOf\",\n params: { value: schema.multipleOf },\n });\n if (fastFail) return;\n }\n }\n }\n\n private validateString(\n schema: Schema,\n value: string,\n keywordLocation: string,\n instanceLocation: string,\n output: Output,\n options: ValidatorOptions,\n ) {\n const { fastFail = false } = options;\n const addError = (keyword: string, msg: ErrorMessage) => {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/${keyword}`,\n instanceLocation,\n errors: [],\n error: this.formatError(msg),\n });\n },\n { length } = [...value];\n\n if (schema.maxLength !== undefined && length > schema.maxLength) {\n addError(\"maxLength\", {\n key: \"validation.maxLength\",\n params: { value: schema.maxLength },\n });\n if (fastFail) return;\n }\n if (schema.minLength !== undefined && length < schema.minLength) {\n addError(\"minLength\", {\n key: \"validation.minLength\",\n params: { value: schema.minLength },\n });\n if (fastFail) return;\n }\n if (schema.pattern !== undefined) {\n const regex = new RegExp(schema.pattern);\n if (!regex.test(value)) {\n addError(\"pattern\", {\n key: \"validation.pattern\",\n params: { pattern: schema.pattern },\n });\n if (fastFail) return;\n }\n }\n if (schema.format !== undefined) {\n if (!this.validateFormat(schema.format, value)) {\n addError(\"format\", {\n key: \"validation.format\",\n params: { format: schema.format },\n });\n if (fastFail) return;\n }\n }\n }\n\n private validateArray(\n schema: Schema,\n value: unknown[],\n keywordLocation: string,\n instanceLocation: string,\n output: Output,\n options: ValidatorOptions,\n ) {\n const { fastFail = false, shallow = false } = options;\n const addError = (keyword: string, msg: ErrorMessage) => {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/${keyword}`,\n instanceLocation,\n errors: [],\n error: this.formatError(msg),\n });\n };\n\n if (schema.maxItems !== undefined && value.length > schema.maxItems) {\n addError(\"maxItems\", {\n key: \"validation.maxItems\",\n params: { value: schema.maxItems },\n });\n if (fastFail) return;\n }\n if (schema.minItems !== undefined && value.length < schema.minItems) {\n addError(\"minItems\", {\n key: \"validation.minItems\",\n params: { value: schema.minItems },\n });\n if (fastFail) return;\n }\n if (schema.uniqueItems) {\n for (let i = 0; i < value.length; i++) {\n for (let j = i + 1; j < value.length; j++) {\n if (deepEqual(value[i], value[j])) {\n addError(\"uniqueItems\", { key: \"validation.uniqueItems\" });\n return;\n }\n }\n }\n }\n\n let prefixItemsLength = 0;\n if (schema.prefixItems) {\n prefixItemsLength = schema.prefixItems.length;\n for (let index = 0; index < schema.prefixItems.length; index++) {\n const itemSchema = schema.prefixItems[index];\n if (index < value.length) {\n if (!shallow) {\n const result = this.validate(\n itemSchema,\n value[index],\n `${keywordLocation}/prefixItems/${index}`,\n `${instanceLocation}/${index}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n if (schema.items && value.length > prefixItemsLength) {\n for (let i = prefixItemsLength; i < value.length; i++) {\n if (!shallow) {\n const result = this.validate(\n schema.items,\n value[i],\n `${keywordLocation}/items`,\n `${instanceLocation}/${i}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n\n if (schema.contains) {\n let containsCount = 0;\n for (let i = 0; i < value.length; i++) {\n const result = this.validate(\n schema.contains,\n value[i],\n `${keywordLocation}/contains`,\n `${instanceLocation}/${i}`,\n options,\n );\n if (result.valid) {\n containsCount++;\n }\n }\n\n if (schema.minContains !== undefined) {\n if (containsCount < schema.minContains) {\n addError(\"minContains\", {\n key: \"validation.minContains\",\n params: { value: schema.minContains },\n });\n if (fastFail) return;\n }\n } else if (schema.minContains === undefined && containsCount === 0) {\n addError(\"contains\", { key: \"validation.contains\" });\n if (fastFail) return;\n }\n\n if (schema.maxContains !== undefined) {\n if (containsCount > schema.maxContains) {\n addError(\"maxContains\", {\n key: \"validation.maxContains\",\n params: { value: schema.maxContains },\n });\n if (fastFail) return;\n }\n }\n }\n }\n\n private validateObject(\n schema: Schema,\n value: Record<string, unknown>,\n keywordLocation: string,\n instanceLocation: string,\n output: Output,\n options: ValidatorOptions,\n ) {\n const { fastFail = false, shallow = false } = options;\n const addError = (keyword: string, msg: ErrorMessage) => {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/${keyword}`,\n instanceLocation,\n errors: [],\n error: this.formatError(msg),\n });\n },\n keys = Object.keys(value);\n\n if (\n schema.maxProperties !== undefined &&\n keys.length > schema.maxProperties\n ) {\n addError(\"maxProperties\", {\n key: \"validation.maxProperties\",\n params: { value: schema.maxProperties },\n });\n if (fastFail) return;\n }\n if (\n schema.minProperties !== undefined &&\n keys.length < schema.minProperties\n ) {\n addError(\"minProperties\", {\n key: \"validation.minProperties\",\n params: { value: schema.minProperties },\n });\n if (fastFail) return;\n }\n\n if (schema.required) {\n for (const req of schema.required) {\n if (!(req in value)) {\n addError(\"required\", {\n key: \"validation.required\",\n params: { property: req },\n });\n if (fastFail) return;\n }\n }\n }\n\n if (schema.dependentRequired) {\n for (const [prop, requiredProps] of Object.entries(\n schema.dependentRequired,\n )) {\n if (prop in value) {\n for (const req of requiredProps) {\n if (!(req in value)) {\n addError(\"dependentRequired\", {\n key: \"validation.dependentRequired\",\n params: { source: prop, target: req },\n });\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n const validatedKeys = new Set<string>();\n\n if (schema.properties) {\n for (const [prop, propSchema] of Object.entries(schema.properties)) {\n if (prop in value) {\n validatedKeys.add(prop);\n if (!shallow) {\n const result = this.validate(\n propSchema,\n value[prop],\n `${keywordLocation}/properties/${prop}`,\n `${instanceLocation}/${prop}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n if (schema.patternProperties) {\n for (const [pattern, propSchema] of Object.entries(\n schema.patternProperties,\n )) {\n const regex = new RegExp(pattern);\n for (const key of keys) {\n if (regex.test(key)) {\n validatedKeys.add(key);\n if (!shallow) {\n const result = this.validate(\n propSchema,\n value[key],\n `${keywordLocation}/patternProperties/${jsonPointerEscape(pattern)}`,\n `${instanceLocation}/${jsonPointerEscape(key)}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(...(result.errors || []));\n if (fastFail) return;\n }\n }\n }\n }\n }\n }\n\n if (schema.additionalProperties !== undefined) {\n const additionalKeys = keys.filter((k) => !validatedKeys.has(k));\n if (typeof schema.additionalProperties === \"boolean\") {\n if (!schema.additionalProperties && additionalKeys.length > 0) {\n addError(\"additionalProperties\", {\n key: \"validation.additionalProperties\",\n params: { properties: additionalKeys.join(\", \") },\n });\n if (fastFail) return;\n }\n } else {\n for (const key of additionalKeys) {\n if (!shallow) {\n const result = this.validate(\n schema.additionalProperties,\n value[key],\n `${keywordLocation}/additionalProperties`,\n `${instanceLocation}/${jsonPointerEscape(key)}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n if (schema.propertyNames) {\n for (const key of keys) {\n const result = this.validate(\n schema.propertyNames,\n key,\n `${keywordLocation}/propertyNames`,\n `${instanceLocation}/${jsonPointerEscape(key)}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n\n if (schema.dependentSchemas) {\n for (const [prop, depSchema] of Object.entries(schema.dependentSchemas)) {\n if (prop in value) {\n const result = this.validate(\n depSchema,\n value,\n `${keywordLocation}/dependentSchemas/${jsonPointerEscape(prop)}`,\n instanceLocation,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n private detectType(value: unknown): string {\n if (value === null || value === undefined) return \"null\";\n if (Array.isArray(value)) return \"array\";\n if (Number.isInteger(value as number)) return \"integer\";\n return typeof value as string;\n }\n\n private checkType(value: unknown, type: string): boolean {\n return matchSchemaType(value, type);\n }\n\n private validateFormat(format: string, value: string): boolean {\n return this.formatValidator.validate(format, value);\n }\n}\n\n/**\n * Validates a value against a JSON Schema.\n * Support multiple JSON Schema drafts (04, 07, 2019-09, 2020-12) by normalizing\n * the schema to draft 2020-12 format before validation.\n */\nexport function validateSchema(\n schema: Schema | unknown,\n value: unknown,\n instancePath: string = \"\",\n schemaPath: string = \"#\",\n fastFail: boolean = false,\n): Output {\n const normalizedSchema = normalizeSchema(schema);\n const validator = new Validator();\n return validator.validate(normalizedSchema, value, schemaPath, instancePath, {\n fastFail,\n });\n}\n","import type { Schema, SchemaType, Output } from \"./type\";\nimport {\n matchSchemaType,\n detectSchemaType,\n parseJsonPointer,\n safeRegexTest,\n} from \"./util\";\nimport type { Validator } from \"./validate\";\n\n/**\n * Configuration for schema utilities logging.\n * Set to null to disable warnings.\n */\nexport let schemaUtilLogger: {\n warn: (message: string) => void;\n} | null = {\n warn: (message: string) => console.warn(message),\n};\n\n/**\n * Set the logger for schema utilities.\n * Pass null to disable logging.\n */\nexport function setSchemaUtilLogger(\n logger: { warn: (message: string) => void } | null,\n): void {\n schemaUtilLogger = logger;\n}\n\n/**\n * Resolve a $ref reference within a root schema.\n * Supports:\n * - Internal references: #/$defs/Address, #/properties/name\n * - Does NOT support external URL references\n *\n * @param ref - The $ref value (e.g., \"#/$defs/Address\")\n * @param rootSchema - The root schema containing $defs\n * @param visited - Set of visited refs to detect circular references\n * @returns The resolved schema, or undefined if:\n * - The reference is external (not starting with #)\n * - The reference is circular\n * - The reference path doesn't exist in the schema\n */\nexport function resolveRef(\n ref: string,\n rootSchema: Schema,\n visited: Set<string> = new Set(),\n): Schema | undefined {\n // Only support internal references starting with #\n if (!ref.startsWith(\"#\")) {\n schemaUtilLogger?.warn(`External $ref not supported: ${ref}`);\n return undefined;\n }\n\n // Detect circular reference\n if (visited.has(ref)) {\n schemaUtilLogger?.warn(`Circular $ref detected: ${ref}`);\n return undefined;\n }\n visited.add(ref);\n\n // Parse the JSON Pointer part (after #)\n const pointer = ref.slice(1); // Remove leading #\n if (pointer === \"\" || pointer === \"/\") {\n // Reference to root schema itself\n return rootSchema;\n }\n\n // Navigate through the schema using JSON Pointer\n const segments = parseJsonPointer(pointer);\n let current: unknown = rootSchema;\n\n for (const segment of segments) {\n if (current === null || current === undefined) {\n return undefined;\n }\n if (typeof current !== \"object\") {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n\n if (current === null || current === undefined) {\n return undefined;\n }\n\n const resolved = current as Schema;\n\n // If the resolved schema also has a $ref, resolve it recursively\n if (resolved.$ref) {\n return resolveRef(resolved.$ref, rootSchema, visited);\n }\n\n return resolved;\n}\n\n/**\n * Dereference a schema by resolving any $ref it may contain.\n * The resolved schema is merged with any sibling keywords (JSON Schema 2019-09+ behavior).\n *\n * @param schema - The schema to dereference\n * @param rootSchema - The root schema for resolving references\n * @returns The dereferenced schema\n */\nexport function dereferenceSchema(schema: Schema, rootSchema: Schema): Schema {\n if (!schema.$ref) {\n return schema;\n }\n\n const resolved = resolveRef(schema.$ref, rootSchema);\n if (!resolved) {\n // If we can't resolve the ref, return the schema without the $ref\n // This allows partial functionality even with unresolved refs\n const { $ref: _, ...rest } = schema;\n return rest as Schema;\n }\n\n // Merge resolved schema with sibling properties (JSON Schema 2019-09+)\n // Sibling properties override the referenced schema\n const { $ref: _, ...siblings } = schema;\n return mergeSchema(resolved, siblings as Schema);\n}\n\n/**\n * Recursively dereference all $ref in a schema tree.\n * This should be called once at initialization to pre-process the entire schema.\n *\n * @param schema - The schema to dereference\n * @param rootSchema - The root schema for resolving references\n * @param processed - Map of already processed schemas to their results (for caching)\n * @param inProgress - Set of schemas currently being processed (for cycle detection)\n * @returns A new schema with all $refs resolved\n */\nexport function dereferenceSchemaDeep(\n schema: Schema,\n rootSchema: Schema,\n processed: WeakMap<object, Schema> = new WeakMap(),\n inProgress: WeakSet<object> = new WeakSet(),\n): Schema {\n // Check if we've already fully processed this schema (cache hit)\n const cached = processed.get(schema);\n if (cached !== undefined) {\n return cached;\n }\n\n // Detect circular reference: if we're currently processing this schema,\n // return the original to avoid infinite recursion\n if (inProgress.has(schema)) {\n // Return original schema to break the cycle\n // This preserves the $ref for later resolution if needed\n return schema;\n }\n\n // Mark as in-progress before processing children\n inProgress.add(schema);\n\n // First resolve any $ref at this level\n let result = dereferenceSchema(schema, rootSchema);\n\n // If dereferencing returned the same object, we need to create a copy to avoid mutation\n if (result === schema) {\n result = { ...schema };\n }\n\n // Recursively process all sub-schemas\n // Properties\n if (result.properties) {\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, subSchema]) => [\n key,\n dereferenceSchemaDeep(subSchema, rootSchema, processed, inProgress),\n ]),\n );\n }\n\n // Pattern Properties\n if (result.patternProperties) {\n result.patternProperties = Object.fromEntries(\n Object.entries(result.patternProperties).map(([key, subSchema]) => [\n key,\n dereferenceSchemaDeep(subSchema, rootSchema, processed, inProgress),\n ]),\n );\n }\n\n // Additional Properties\n if (\n result.additionalProperties &&\n typeof result.additionalProperties === \"object\"\n ) {\n result.additionalProperties = dereferenceSchemaDeep(\n result.additionalProperties,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // Items\n if (result.items) {\n result.items = dereferenceSchemaDeep(\n result.items,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // Prefix Items\n if (result.prefixItems) {\n result.prefixItems = result.prefixItems.map((s) =>\n dereferenceSchemaDeep(s, rootSchema, processed, inProgress),\n );\n }\n\n // Contains\n if (result.contains) {\n result.contains = dereferenceSchemaDeep(\n result.contains,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // allOf, anyOf, oneOf\n for (const keyword of [\"allOf\", \"anyOf\", \"oneOf\"] as const) {\n const subSchemas = result[keyword];\n if (subSchemas) {\n result[keyword] = subSchemas.map((s) =>\n dereferenceSchemaDeep(s, rootSchema, processed, inProgress),\n );\n }\n }\n\n // not\n if (result.not) {\n result.not = dereferenceSchemaDeep(\n result.not,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // if/then/else\n if (result.if) {\n result.if = dereferenceSchemaDeep(\n result.if,\n rootSchema,\n processed,\n inProgress,\n );\n }\n if (result.then) {\n result.then = dereferenceSchemaDeep(\n result.then,\n rootSchema,\n processed,\n inProgress,\n );\n }\n if (result.else) {\n result.else = dereferenceSchemaDeep(\n result.else,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // dependentSchemas\n if (result.dependentSchemas) {\n result.dependentSchemas = Object.fromEntries(\n Object.entries(result.dependentSchemas).map(([key, subSchema]) => [\n key,\n dereferenceSchemaDeep(subSchema, rootSchema, processed, inProgress),\n ]),\n );\n }\n\n // $defs (also dereference definitions themselves)\n if (result.$defs) {\n result.$defs = Object.fromEntries(\n Object.entries(result.$defs).map(([key, subSchema]) => [\n key,\n dereferenceSchemaDeep(subSchema, rootSchema, processed, inProgress),\n ]),\n );\n }\n\n // Cache the fully processed result\n processed.set(schema, result);\n\n return result;\n}\n\n/**\n * Maximum recursion depth for extractReferencedPaths to prevent stack overflow\n */\nconst MAX_EXTRACT_DEPTH = 100;\n\n/**\n * Extract referenced paths from a conditional schema (if, oneOf, anyOf, etc.)\n * Returns paths relative to the current node\n *\n * @param conditionSchema - The schema to extract paths from\n * @param basePath - Base path for relative paths\n * @param depth - Current recursion depth (internal use)\n */\nexport function extractReferencedPaths(\n conditionSchema: Schema,\n basePath: string = \"\",\n depth: number = 0,\n): string[] {\n // Prevent stack overflow on deeply nested schemas\n if (depth > MAX_EXTRACT_DEPTH) {\n console.warn(\n `extractReferencedPaths: max depth (${MAX_EXTRACT_DEPTH}) exceeded at path: ${basePath}`,\n );\n return [];\n }\n\n const paths: string[] = [];\n\n // Schema is expected to be pre-dereferenced\n const schema = conditionSchema;\n\n // 1. properties - checking child properties\n if (schema.properties) {\n for (const key of Object.keys(schema.properties)) {\n const childPath = basePath ? `${basePath}/${key}` : `/${key}`;\n paths.push(childPath);\n // Recursively extract paths from nested conditions\n paths.push(\n ...extractReferencedPaths(schema.properties[key], childPath, depth + 1),\n );\n }\n }\n\n // 2. items - checking array elements\n if (schema.items && typeof schema.items === \"object\") {\n // items condition means dependency on the array itself\n paths.push(basePath || \"/\");\n paths.push(...extractReferencedPaths(schema.items, basePath, depth + 1));\n }\n\n // 3. prefixItems - checking specific indexed elements\n if (schema.prefixItems) {\n schema.prefixItems.forEach((itemSchema: Schema, index: number) => {\n const indexPath = basePath ? `${basePath}/${index}` : `/${index}`;\n paths.push(indexPath);\n paths.push(...extractReferencedPaths(itemSchema, indexPath, depth + 1));\n });\n }\n\n // 4. const/enum - value constraints at current path\n if (schema.const !== undefined || schema.enum) {\n if (basePath) {\n paths.push(basePath);\n }\n }\n\n // 5. type constraint\n if (schema.type && basePath) {\n paths.push(basePath);\n }\n\n // 6. Value constraints (minimum, maximum, minLength, maxLength, pattern, format)\n const valueConstraints = [\n \"minimum\",\n \"maximum\",\n \"exclusiveMinimum\",\n \"exclusiveMaximum\",\n \"minLength\",\n \"maxLength\",\n \"pattern\",\n \"format\",\n \"minItems\",\n \"maxItems\",\n \"uniqueItems\",\n \"minProperties\",\n \"maxProperties\",\n ];\n for (const constraint of valueConstraints) {\n if (\n (schema as Record<string, unknown>)[constraint] !== undefined &&\n basePath\n ) {\n paths.push(basePath);\n break;\n }\n }\n\n // 7. required\n if (schema.required) {\n for (const req of schema.required) {\n paths.push(basePath ? `${basePath}/${req}` : `/${req}`);\n }\n }\n\n // 8. dependentRequired\n if (schema.dependentRequired) {\n for (const [prop, reqs] of Object.entries(schema.dependentRequired)) {\n paths.push(basePath ? `${basePath}/${prop}` : `/${prop}`);\n for (const req of reqs) {\n paths.push(basePath ? `${basePath}/${req}` : `/${req}`);\n }\n }\n }\n\n // 9. dependentSchemas\n if (schema.dependentSchemas) {\n for (const [prop, subSchema] of Object.entries(schema.dependentSchemas)) {\n paths.push(basePath ? `${basePath}/${prop}` : `/${prop}`);\n paths.push(...extractReferencedPaths(subSchema, basePath, depth + 1));\n }\n }\n\n // 10. Nested conditions - recursive handling\n if (schema.if) {\n paths.push(...extractReferencedPaths(schema.if, basePath, depth + 1));\n }\n if (schema.then) {\n paths.push(...extractReferencedPaths(schema.then, basePath, depth + 1));\n }\n if (schema.else) {\n paths.push(...extractReferencedPaths(schema.else, basePath, depth + 1));\n }\n\n // 8. allOf/anyOf/oneOf\n for (const keyword of [\"allOf\", \"anyOf\", \"oneOf\"] as const) {\n const subSchemas = schema[keyword];\n if (subSchemas) {\n for (const subSchema of subSchemas) {\n paths.push(...extractReferencedPaths(subSchema, basePath, depth + 1));\n }\n }\n }\n\n // 9. dependentSchemas - when a property exists, apply additional schema\n if (schema.dependentSchemas) {\n for (const [key, subSchema] of Object.entries(schema.dependentSchemas)) {\n const keyPath = basePath ? `${basePath}/${key}` : `/${key}`;\n // The presence of the key triggers the dependent schema\n paths.push(keyPath);\n // The dependent schema may reference other paths\n paths.push(...extractReferencedPaths(subSchema, basePath, depth + 1));\n }\n }\n\n // 10. contains - dependency on array elements\n if (schema.contains) {\n paths.push(basePath || \"/\");\n paths.push(...extractReferencedPaths(schema.contains, basePath, depth + 1));\n }\n\n // Deduplicate\n return [...new Set(paths)];\n}\n\nexport function resolveEffectiveSchema(\n validator: Validator,\n schema: Schema,\n value: unknown,\n keywordLocation: string,\n instanceLocation: string,\n): {\n effectiveSchema: Schema;\n type: SchemaType;\n error?: Output;\n} {\n // Schema is expected to be pre-dereferenced (all $refs resolved)\n let effective = schema;\n\n // if-then-else\n if (effective.if) {\n const output = validator.validate(\n effective.if,\n value,\n `${keywordLocation}/if`,\n instanceLocation,\n );\n if (output.valid) {\n if (effective.then) {\n const res = resolveEffectiveSchema(\n validator,\n effective.then,\n value,\n `${keywordLocation}/then`,\n instanceLocation,\n );\n effective = mergeSchema(effective, res.effectiveSchema);\n }\n } else {\n if (effective.else) {\n const res = resolveEffectiveSchema(\n validator,\n effective.else,\n value,\n `${keywordLocation}/else`,\n instanceLocation,\n );\n effective = mergeSchema(effective, res.effectiveSchema);\n }\n }\n // Remove if/then/else to prevent re-evaluation during shallow validation\n const { if: _, then: __, else: ___, ...rest } = effective;\n effective = rest;\n }\n\n // allOf\n if (effective.allOf) {\n for (const [index, subschema] of effective.allOf.entries()) {\n const res = resolveEffectiveSchema(\n validator,\n subschema,\n value,\n `${keywordLocation}/allOf/${index}`,\n instanceLocation,\n );\n effective = mergeSchema(effective, res.effectiveSchema);\n }\n // Remove allOf to prevent re-evaluation during shallow validation\n const { allOf: _, ...rest } = effective;\n effective = rest;\n }\n\n // anyOf\n if (effective.anyOf) {\n for (const [index, subschema] of effective.anyOf.entries()) {\n const output = validator.validate(\n subschema,\n value,\n keywordLocation + `/anyOf/` + index,\n instanceLocation,\n );\n if (output.valid) {\n const res = resolveEffectiveSchema(\n validator,\n subschema,\n value,\n keywordLocation + `/anyOf/` + index,\n instanceLocation,\n );\n effective = mergeSchema(effective, res.effectiveSchema);\n break;\n }\n }\n // Remove anyOf to prevent re-evaluation during shallow validation\n const { anyOf: _, ...rest } = effective;\n effective = rest;\n }\n\n // oneOf\n if (effective.oneOf) {\n let validCount = 0;\n let lastValidSchema: Schema | null = null;\n for (const [index, subschema] of effective.oneOf.entries()) {\n const output = validator.validate(\n subschema,\n value,\n `${keywordLocation}/oneOf/${index}`,\n instanceLocation,\n );\n if (output.valid) {\n validCount++;\n lastValidSchema = subschema;\n }\n }\n if (validCount === 1 && lastValidSchema) {\n effective = mergeSchema(effective, lastValidSchema);\n }\n // Remove oneOf to prevent re-evaluation during shallow validation\n const { oneOf: _, ...rest } = effective;\n effective = rest;\n }\n\n // type - determine the effective type for rendering purposes\n let type: SchemaType = \"unknown\";\n if (effective.type) {\n const allowedTypes = Array.isArray(effective.type)\n ? effective.type\n : [effective.type];\n const matched = allowedTypes.find((t) => matchSchemaType(value, t));\n if (matched) {\n type = matched as SchemaType;\n } else {\n // Use first allowed type as the effective type for rendering\n type = allowedTypes[0] as SchemaType;\n }\n } else {\n type = detectSchemaType(value) as SchemaType;\n }\n\n // Perform shallow validation to get all errors\n const validationOutput = validator.validate(\n effective,\n value,\n keywordLocation,\n instanceLocation,\n { shallow: true },\n );\n\n return {\n effectiveSchema: effective,\n type,\n error: validationOutput.valid ? undefined : validationOutput,\n };\n}\n\nfunction mergeStrings(a?: string[], b?: string[]): string[] | undefined {\n if (a === undefined) return b;\n if (b === undefined) return a;\n const merged = Array.from(new Set([...a, ...b]));\n return merged.length === 0 ? undefined : merged;\n}\n\nfunction mergeType(\n a?: string[] | string,\n b?: string[] | string,\n): string[] | string | undefined {\n if (a === undefined) return b;\n if (b === undefined) return a;\n const arrayA = Array.isArray(a) ? a : [a];\n const arrayB = Array.isArray(b) ? b : [b];\n const merged = arrayA.filter((t) => arrayB.includes(t));\n if (merged.length === 0) return undefined;\n return merged.length === 1 ? merged[0] : merged;\n}\n\n/**\n * Merge schema arrays by concatenation (for allOf/anyOf/oneOf)\n */\nfunction mergeSchemaArrays(a?: Schema[], b?: Schema[]): Schema[] | undefined {\n if (a === undefined) return b;\n if (b === undefined) return a;\n // Concatenate both arrays\n return [...a, ...b];\n}\n\nexport function mergeSchema(base: Schema, override?: Schema): Schema {\n if (!override) return base;\n\n const merged: Schema = {\n ...base,\n ...override,\n };\n\n // $defs: merge definitions\n if (base.$defs || override.$defs) {\n merged.$defs = {\n ...base.$defs,\n ...override.$defs,\n };\n }\n\n // required: union of required fields\n const mergedRequired = mergeStrings(base.required, override.required);\n if (mergedRequired !== undefined) {\n merged.required = mergedRequired;\n }\n\n // type: intersection of types\n const mergedType = mergeType(base.type, override.type);\n if (mergedType !== undefined) {\n merged.type = mergedType;\n }\n\n // dependentRequired: merge objects\n if (base.dependentRequired || override.dependentRequired) {\n merged.dependentRequired = {\n ...base.dependentRequired,\n ...override.dependentRequired,\n };\n }\n\n // properties: merge objects (override takes precedence)\n if (base.properties || override.properties) {\n merged.properties = {\n ...base.properties,\n ...override.properties,\n };\n }\n\n // patternProperties: merge objects\n if (base.patternProperties || override.patternProperties) {\n merged.patternProperties = {\n ...base.patternProperties,\n ...override.patternProperties,\n };\n }\n\n // items: merge recursively\n if (base.items && override.items) {\n merged.items = mergeSchema(base.items, override.items);\n } else if (base.items) {\n merged.items = base.items;\n } else if (override.items) {\n merged.items = override.items;\n }\n\n // prefixItems: merge with pairwise merge\n if (base.prefixItems || override.prefixItems) {\n merged.prefixItems = [];\n const len = Math.max(\n base.prefixItems?.length || 0,\n override.prefixItems?.length || 0,\n );\n for (let i = 0; i < len; i++) {\n const baseSchema = base.prefixItems?.[i];\n const overrideSchema = override.prefixItems?.[i];\n if (baseSchema && overrideSchema) {\n merged.prefixItems.push(mergeSchema(baseSchema, overrideSchema));\n } else {\n const schema = baseSchema || overrideSchema;\n if (schema) {\n merged.prefixItems.push(schema);\n }\n }\n }\n }\n\n // allOf/anyOf/oneOf: concatenate arrays\n const combinatorKeywords = [\"allOf\", \"anyOf\", \"oneOf\"] as const;\n for (const keyword of combinatorKeywords) {\n const mergedArray = mergeSchemaArrays(base[keyword], override[keyword]);\n if (mergedArray !== undefined) {\n merged[keyword] = mergedArray;\n }\n }\n\n // if/then/else: override takes precedence (no merge, just override behavior)\n // Note: if both have if/then/else, the override's conditional logic replaces base's\n // This is intentional as conditional schemas are context-dependent\n\n // dependentSchemas: merge objects\n if (base.dependentSchemas || override.dependentSchemas) {\n merged.dependentSchemas = {\n ...base.dependentSchemas,\n ...override.dependentSchemas,\n };\n }\n\n // additionalProperties: override takes precedence\n // (already handled by spread, but be explicit about it)\n\n // not: override takes precedence\n // (already handled by spread)\n\n return merged;\n}\n\n/**\n * Get the subschema for a specific property or array item.\n *\n * This function determines the appropriate schema for a given key within a parent schema.\n * It handles both object and array schemas, checking in the following priority order:\n *\n * For objects:\n * 1. properties - exact property match\n * 2. patternProperties - regex pattern match\n * 3. additionalProperties - fallback for unknown properties\n *\n * For arrays:\n * 1. prefixItems - positional tuple items\n * 2. items - schema for remaining array items\n *\n * @param schema - The parent schema to look up the subschema from\n * @param key - The property name (for objects) or index as string (for arrays)\n * @returns An object containing:\n * - schema: The resolved subschema, or empty object if not found\n * - keywordLocationToken: The JSON Schema keyword path (e.g., \"properties/name\", \"items\")\n *\n * @example\n * // Object property lookup\n * const result = getSubSchema({ properties: { name: { type: \"string\" } } }, \"name\");\n * // result.schema = { type: \"string\" }\n * // result.keywordLocationToken = \"properties/name\"\n *\n * @example\n * // Array item lookup\n * const result = getSubSchema({ items: { type: \"number\" } }, \"0\");\n * // result.schema = { type: \"number\" }\n * // result.keywordLocationToken = \"items\"\n */\nexport function getSubSchema(\n schema: Schema,\n key: string,\n): { schema: Schema; keywordLocationToken: string } {\n // Object properties\n if (schema.properties && schema.properties[key]) {\n return {\n schema: schema.properties[key],\n keywordLocationToken: `properties/${key}`,\n };\n }\n\n // Object pattern properties\n if (schema.patternProperties) {\n for (const [pattern, subschema] of Object.entries(\n schema.patternProperties,\n )) {\n if (safeRegexTest(pattern, key)) {\n return {\n schema: subschema,\n keywordLocationToken: `patternProperties/${pattern}`,\n };\n }\n }\n }\n\n // Object additional properties\n if (\n schema.additionalProperties !== undefined &&\n schema.additionalProperties !== false\n ) {\n return {\n schema:\n typeof schema.additionalProperties === \"object\"\n ? schema.additionalProperties\n : {},\n keywordLocationToken: \"additionalProperties\",\n };\n }\n\n // Array items\n if (schema.items || schema.prefixItems) {\n const index = parseInt(key, 10);\n if (!isNaN(index)) {\n if (schema.prefixItems && index < schema.prefixItems.length) {\n return {\n schema: schema.prefixItems[index],\n keywordLocationToken: `prefixItems/${index}`,\n };\n }\n if (schema.items) {\n return {\n schema: schema.items,\n keywordLocationToken: \"items\",\n };\n }\n }\n }\n\n return {\n schema: {},\n keywordLocationToken: \"\",\n };\n}\n\n/**\n * Generate a default value for a schema based on its type and constraints.\n *\n * Priority order for determining the default value:\n * 1. const - if defined, returns the const value\n * 2. default - if defined, returns the default value\n * 3. Type-based defaults:\n * - string: \"\"\n * - number/integer: 0\n * - boolean: false\n * - null: null\n * - object: {} with required properties recursively initialized\n * - array: []\n *\n * For objects, only required properties are initialized with their default values.\n * If no type is specified but properties exist, the schema is treated as an object.\n *\n * @param schema - The JSON Schema to generate a default value for\n * @returns The generated default value, or undefined if type cannot be determined\n *\n * @example\n * getDefaultValue({ type: \"string\" }) // returns \"\"\n * getDefaultValue({ type: \"number\", default: 42 }) // returns 42\n * getDefaultValue({ const: \"fixed\" }) // returns \"fixed\"\n * getDefaultValue({\n * type: \"object\",\n * properties: { name: { type: \"string\" } },\n * required: [\"name\"]\n * }) // returns { name: \"\" }\n */\nexport function getDefaultValue(schema: Schema): unknown {\n if (schema.const !== undefined) return schema.const;\n if (schema.default !== undefined) return schema.default;\n\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n\n switch (type) {\n case \"string\":\n return \"\";\n case \"number\":\n case \"integer\":\n return 0;\n case \"boolean\":\n return false;\n case \"null\":\n return null;\n case \"object\": {\n const obj: Record<string, unknown> = {};\n if (schema.properties) {\n for (const [key, subschema] of Object.entries(schema.properties)) {\n if (schema.required?.includes(key)) {\n obj[key] = getDefaultValue(subschema);\n }\n }\n }\n return obj;\n }\n case \"array\":\n return [];\n default:\n // If no type but has properties, assume object\n if (schema.properties) {\n return getDefaultValue({ ...schema, type: \"object\" });\n }\n return undefined;\n }\n}\n","import type { Schema, SchemaType, Output } from \"./type\";\nimport {\n getJsonPointer,\n jsonPointerEscape,\n jsonPointerJoin,\n setJsonPointer,\n removeJsonPointer,\n deepEqual,\n resolveAbsolutePath,\n parseJsonPointer,\n safeRegexTest,\n} from \"./util\";\nimport {\n extractReferencedPaths,\n resolveEffectiveSchema,\n dereferenceSchemaDeep,\n getDefaultValue,\n getSubSchema,\n} from \"./schema-util\";\nimport { normalizeSchema } from \"./normalize\";\nimport type { Validator } from \"./validate\";\n\n/**\n * Represents a node in the schema tree.\n * Each node corresponds to a location in both the schema and the instance data.\n */\nexport interface FieldNode {\n type: SchemaType;\n schema: Schema; // effective schema\n originalSchema: Schema;\n error?: Output;\n children?: FieldNode[];\n instanceLocation: string;\n keywordLocation: string;\n version: number;\n // Absolute paths this node's effective schema depends on\n dependencies?: Set<string>;\n\n // Whether this node can be removed (array items, additionalProperties, patternProperties)\n canRemove: boolean;\n // Whether this node can have children added (arrays with items, objects with additionalProperties)\n canAdd: boolean;\n}\n\n/** The canonical representation for root path */\nconst ROOT_PATH = \"\";\n\n/**\n * Normalize path to use consistent root representation.\n * Converts \"#\" to \"\" (empty string) for internal consistency.\n */\nfunction normalizeRootPath(path: string): string {\n return path === \"#\" ? ROOT_PATH : path;\n}\n\nexport type SchemaChangeEvent = {\n type: \"schema\" | \"value\" | \"error\";\n path: string;\n};\n\nexport class SchemaRuntime {\n private validator: Validator;\n\n private watchers: Record<string, Set<(e: SchemaChangeEvent) => void>> = {};\n private globalWatchers: Set<(e: SchemaChangeEvent) => void> = new Set();\n\n // Reverse dependency index: path -> nodes that depend on this path's value\n private dependentsMap: Map<string, Set<FieldNode>> = new Map();\n\n // Track nodes currently being updated to prevent circular updates\n private updatingNodes: Set<string> = new Set();\n\n public root: FieldNode;\n private value: unknown;\n private version: number = 0;\n private rootSchema: Schema = {};\n\n /**\n * Create a new SchemaRuntime instance.\n *\n * @param validator - The validator instance for schema validation\n * @param schema - The JSON Schema definition (will be normalized and dereferenced)\n * @param value - The initial data value to manage\n *\n * @example\n * const validator = new Validator();\n * const schema = { type: \"object\", properties: { name: { type: \"string\" } } };\n * const runtime = new SchemaRuntime(validator, schema, { name: \"Alice\" });\n */\n constructor(validator: Validator, schema: Schema | unknown, value: unknown) {\n const normalized = normalizeSchema(schema);\n\n this.rootSchema = dereferenceSchemaDeep(normalized, normalized);\n this.validator = validator;\n this.value = value;\n this.root = this.createEmptyNode(\"\", \"#\");\n this.buildNode(this.root, this.rootSchema);\n }\n\n /**\n * Collect all dependencies for a node's schema.\n *\n * Key insight: We extract paths from condition keywords (if, oneOf, anyOf)\n * using extractReferencedPaths, but for then/else/allOf keywords, we recursively\n * call collectDependencies to ensure proper dependency isolation between\n * parent and child nodes.\n */\n private collectDependencies(\n schema: Schema,\n instanceLocation: string,\n ): Set<string> {\n const deps = new Set<string>();\n\n // Handle required\n if (schema.required) {\n for (const req of schema.required) {\n deps.add(resolveAbsolutePath(instanceLocation, `/${req}`));\n }\n }\n\n // Handle dependentRequired\n if (schema.dependentRequired) {\n for (const [prop, reqs] of Object.entries(schema.dependentRequired)) {\n deps.add(resolveAbsolutePath(instanceLocation, `/${prop}`));\n for (const req of reqs) {\n deps.add(resolveAbsolutePath(instanceLocation, `/${req}`));\n }\n }\n }\n\n // Handle dependentSchemas\n if (schema.dependentSchemas) {\n for (const [prop, subSchema] of Object.entries(schema.dependentSchemas)) {\n deps.add(resolveAbsolutePath(instanceLocation, `/${prop}`));\n const subDeps = this.collectDependencies(subSchema, instanceLocation);\n subDeps.forEach((d) => deps.add(d));\n }\n }\n\n // Handle if-then-else\n if (schema.if) {\n // Extract paths from the if condition\n const relativePaths = extractReferencedPaths(schema.if, \"\");\n for (const relPath of relativePaths) {\n deps.add(resolveAbsolutePath(instanceLocation, relPath));\n }\n\n // Recursively extract from then/else which may have nested conditions\n if (schema.then) {\n const thenDeps = this.collectDependencies(\n schema.then,\n instanceLocation,\n );\n thenDeps.forEach((d) => deps.add(d));\n }\n if (schema.else) {\n const elseDeps = this.collectDependencies(\n schema.else,\n instanceLocation,\n );\n elseDeps.forEach((d) => deps.add(d));\n }\n }\n\n // Handle oneOf - each option may check different conditions\n // We need both direct paths (from condition checks) and nested dependencies\n if (schema.oneOf) {\n for (const subSchema of schema.oneOf) {\n // Extract direct referenced paths from the condition\n const relativePaths = extractReferencedPaths(subSchema, \"\");\n for (const relPath of relativePaths) {\n deps.add(resolveAbsolutePath(instanceLocation, relPath));\n }\n // Also recursively collect dependencies from nested conditions\n const subDeps = this.collectDependencies(subSchema, instanceLocation);\n subDeps.forEach((d) => deps.add(d));\n }\n }\n\n // Handle anyOf - same treatment as oneOf\n if (schema.anyOf) {\n for (const subSchema of schema.anyOf) {\n const relativePaths = extractReferencedPaths(subSchema, \"\");\n for (const relPath of relativePaths) {\n deps.add(resolveAbsolutePath(instanceLocation, relPath));\n }\n const subDeps = this.collectDependencies(subSchema, instanceLocation);\n subDeps.forEach((d) => deps.add(d));\n }\n }\n\n // Handle allOf (may contain conditions)\n if (schema.allOf) {\n for (const subSchema of schema.allOf) {\n const subDeps = this.collectDependencies(subSchema, instanceLocation);\n subDeps.forEach((d) => deps.add(d));\n }\n }\n\n return deps;\n }\n\n /**\n * Register a node as dependent on a path\n */\n private registerDependent(path: string, node: FieldNode): void {\n let dependents = this.dependentsMap.get(path);\n if (!dependents) {\n dependents = new Set();\n this.dependentsMap.set(path, dependents);\n }\n dependents.add(node);\n }\n\n /**\n * Unregister a node from a dependency path\n */\n private unregisterDependent(path: string, node: FieldNode): void {\n const dependents = this.dependentsMap.get(path);\n if (dependents) {\n dependents.delete(node);\n if (dependents.size === 0) {\n this.dependentsMap.delete(path);\n }\n }\n }\n\n /**\n * Unregister all dependencies for a node and its children.\n * Note: Does NOT clean up external watchers - callers are responsible\n * for calling unsubscribe() when they no longer need updates.\n */\n private unregisterNodeDependencies(node: FieldNode): void {\n // Unregister this node's dependencies\n if (node.dependencies) {\n for (const depPath of node.dependencies) {\n this.unregisterDependent(depPath, node);\n }\n }\n\n // Recursively unregister children's dependencies\n if (node.children) {\n for (const child of node.children) {\n this.unregisterNodeDependencies(child);\n }\n }\n }\n\n /**\n * Create an empty FieldNode with default values.\n */\n private createEmptyNode(\n instanceLocation: string,\n keywordLocation: string,\n ): FieldNode {\n return {\n type: \"null\",\n schema: {},\n version: -1,\n instanceLocation,\n keywordLocation,\n originalSchema: {},\n canRemove: false,\n canAdd: false,\n children: [],\n };\n }\n\n /**\n * Reconcile the tree starting from the specified path.\n * Uses findNearestExistingNode to find the target node (or parent if path doesn't exist).\n * Only rebuilds the affected subtree, not the entire tree.\n */\n private reconcile(path: string): void {\n const normalizedPath = normalizeRootPath(path);\n\n // Find target node (or nearest parent)\n const targetNode = this.findNearestExistingNode(normalizedPath);\n if (!targetNode) {\n return;\n }\n\n // Build node from target path\n this.buildNode(targetNode, targetNode.originalSchema);\n }\n\n /**\n * Get the current version number.\n * The version increments on every notify call (value, schema, or error changes).\n * Useful for detecting if the runtime state has changed.\n *\n * @returns The current version number\n */\n getVersion(): number {\n return this.version;\n }\n\n /**\n * Subscribe to changes at a specific path.\n * The callback is invoked when the value, schema, or error at the path changes.\n *\n * @param path - The JSON Pointer path to watch (e.g., \"/user/name\", \"\" for root)\n * @param cb - Callback function invoked with the change event\n * @returns Unsubscribe function to remove the listener\n *\n * @example\n * const unsubscribe = runtime.subscribe(\"/name\", (event) => {\n * console.log(`${event.type} changed at ${event.path}`);\n * });\n * // Later: unsubscribe();\n */\n subscribe(path: string, cb: (e: SchemaChangeEvent) => void): () => void {\n const normalizedPath = normalizeRootPath(path);\n if (!this.watchers[normalizedPath]) {\n this.watchers[normalizedPath] = new Set();\n }\n this.watchers[normalizedPath].add(cb);\n return () => {\n const watcherSet = this.watchers[normalizedPath];\n if (watcherSet) {\n watcherSet.delete(cb);\n // Clean up empty watcher sets to prevent memory leaks\n if (watcherSet.size === 0) {\n delete this.watchers[normalizedPath];\n }\n }\n };\n }\n\n /**\n * Subscribe to all events in the runtime.\n * The callback is invoked for any change at any path.\n *\n * @param cb - Callback function invoked with every change event\n * @returns Unsubscribe function to remove the listener\n */\n subscribeAll(cb: (e: SchemaChangeEvent) => void): () => void {\n this.globalWatchers.add(cb);\n return () => {\n this.globalWatchers.delete(cb);\n };\n }\n\n /**\n * Emit a change event to all relevant subscribers.\n * Increments the version number and notifies both path-specific and global watchers.\n *\n * @param event - The change event containing type and path\n */\n notify(event: SchemaChangeEvent) {\n this.version++;\n\n const normalizedPath = normalizeRootPath(event.path);\n const watchers = this.watchers[normalizedPath];\n if (watchers) {\n for (const cb of watchers) {\n try {\n cb(event);\n } catch (err) {\n console.error(\"SchemaRuntime: watcher callback error:\", err);\n }\n }\n }\n\n // Call global watchers\n for (const cb of this.globalWatchers) {\n try {\n cb(event);\n } catch (err) {\n console.error(\"SchemaRuntime: global watcher callback error:\", err);\n }\n }\n }\n\n /**\n * Update the entire schema.\n * This triggers a full rebuild of the node tree while preserving the current value.\n */\n setSchema(schema: Schema | unknown): void {\n const normalized = normalizeSchema(schema);\n this.rootSchema = dereferenceSchemaDeep(normalized, normalized);\n // Reinitialize root node with new schema\n this.root = this.createEmptyNode(\"\", \"#\");\n this.buildNode(this.root, this.rootSchema);\n this.notify({ type: \"schema\", path: ROOT_PATH });\n }\n\n /**\n * Get the value at a specific path.\n *\n * @param path - The JSON Pointer path (e.g., \"/user/name\", \"\" for root)\n * @returns The value at the path, or undefined if not found\n *\n * @example\n * runtime.getValue(\"\"); // returns entire root value\n * runtime.getValue(\"/name\"); // returns value at /name\n */\n getValue(path: string): unknown {\n const normalizedPath = normalizeRootPath(path);\n if (normalizedPath === ROOT_PATH) return this.value;\n return getJsonPointer(this.value, normalizedPath);\n }\n\n /**\n * Remove a node at the specified path.\n * This deletes the value from the data structure (array splice or object delete).\n * @param path - The path to remove\n * @returns true if successful, false if the path cannot be removed\n */\n removeValue(path: string): boolean {\n const normalizedPath = normalizeRootPath(path);\n if (normalizedPath === ROOT_PATH) {\n // Cannot remove root\n return false;\n }\n\n // Check if the node exists and can be removed\n const node = this.findNode(normalizedPath);\n if (!node || !node.canRemove) {\n return false;\n }\n\n // Remove the value\n const success = removeJsonPointer(this.value, normalizedPath);\n if (!success) {\n return false;\n }\n\n // Find parent path for reconciliation\n const lastSlash = normalizedPath.lastIndexOf(\"/\");\n const parentPath =\n lastSlash <= 0 ? ROOT_PATH : normalizedPath.substring(0, lastSlash);\n\n // Reconcile from parent to rebuild children\n this.reconcile(parentPath);\n this.notify({ type: \"value\", path: parentPath });\n return true;\n }\n\n /**\n * Add a new child to an array or object at the specified parent path.\n * For arrays, appends a new item with default value based on items schema.\n * For objects, adds a new property with the given key and default value based on additionalProperties schema.\n * @param parentPath - The path to the parent array or object\n * @param key - For objects: the property key. For arrays: optional, ignored (appends to end)\n * @param initialValue - Optional initial value to set. If not provided, uses default from schema.\n * @returns true if successful, false if cannot add\n */\n addValue(parentPath: string, key?: string, initialValue?: unknown): boolean {\n const normalizedPath = normalizeRootPath(parentPath);\n const parentNode = this.findNode(normalizedPath);\n\n if (!parentNode || !parentNode.canAdd) {\n return false;\n }\n\n const parentValue = this.getValue(normalizedPath);\n const parentSchema = parentNode.schema;\n\n if (parentNode.type === \"array\" && Array.isArray(parentValue)) {\n // Add new item to array\n const newIndex = parentValue.length;\n const { schema: subschema } = getSubSchema(\n parentSchema,\n String(newIndex),\n );\n const defaultValue =\n initialValue !== undefined ? initialValue : getDefaultValue(subschema);\n const itemPath = jsonPointerJoin(normalizedPath, String(newIndex));\n return this.setValue(itemPath, defaultValue);\n } else if (\n parentNode.type === \"object\" &&\n parentValue &&\n typeof parentValue === \"object\"\n ) {\n // Add new property to object\n if (!key) {\n return false;\n }\n const { schema: subschema } = getSubSchema(parentSchema, key);\n // For new keys, getSubSchema returns additionalProperties schema or empty\n // If no additionalProperties, cannot add\n if (!parentSchema.additionalProperties) {\n return false;\n }\n const defaultValue =\n initialValue !== undefined ? initialValue : getDefaultValue(subschema);\n const propertyPath = jsonPointerJoin(normalizedPath, key);\n return this.setValue(propertyPath, defaultValue);\n }\n\n return false;\n }\n\n /**\n * Set the value at a specific path.\n * Creates intermediate containers (objects/arrays) as needed.\n * Triggers reconciliation and notifies subscribers.\n *\n * @param path - The JSON Pointer path (e.g., \"/user/name\", \"\" for root)\n * @param value - The new value to set\n * @returns true if successful, false if the path cannot be set\n *\n * @example\n * runtime.setValue(\"/name\", \"Bob\"); // set name to \"Bob\"\n * runtime.setValue(\"\", { name: \"Alice\" }); // replace entire root value\n */\n setValue(path: string, value: unknown): boolean {\n const normalizedPath = normalizeRootPath(path);\n\n // Update value\n if (normalizedPath === ROOT_PATH) {\n this.value = value;\n } else {\n const success = setJsonPointer(this.value, normalizedPath, value);\n if (!success) return false;\n }\n\n // Reconcile and notify\n this.reconcile(normalizedPath);\n this.notify({ type: \"value\", path: normalizedPath });\n return true;\n }\n\n /**\n * Find the FieldNode at a specific path.\n * Returns the node tree representation that includes schema, type, error, and children.\n *\n * @param path - The JSON Pointer path (e.g., \"/user/name\", \"\" for root)\n * @returns The FieldNode at the path, or undefined if not found\n *\n * @example\n * const node = runtime.findNode(\"/name\");\n * console.log(node?.schema, node?.type, node?.error);\n */\n findNode(path: string): FieldNode | undefined {\n const normalizedPath = normalizeRootPath(path);\n // Handle root node queries\n if (normalizedPath === ROOT_PATH) return this.root;\n\n const segments = parseJsonPointer(normalizedPath);\n\n let current: FieldNode | undefined = this.root;\n for (const segment of segments) {\n if (!current?.children) return undefined;\n\n // Build the expected exact path for this child\n const expectedPath = jsonPointerJoin(current.instanceLocation, segment);\n const found: FieldNode | undefined = current.children?.find(\n (child) => child.instanceLocation === expectedPath,\n );\n\n if (!found) return undefined;\n current = found;\n }\n\n return current;\n }\n\n private findNearestExistingNode(path: string): FieldNode | undefined {\n const normalizedPath = normalizeRootPath(path);\n let currentPath = normalizedPath;\n\n while (currentPath !== ROOT_PATH) {\n const node = this.findNode(currentPath);\n if (node) return node;\n\n const lastSlash = currentPath.lastIndexOf(\"/\");\n currentPath =\n lastSlash <= 0 ? ROOT_PATH : currentPath.substring(0, lastSlash);\n }\n\n return this.root;\n }\n\n /**\n * Build/update a FieldNode in place.\n * Updates the node's schema, type, error, and children based on the current value.\n * @param schema - Optional. If provided, updates node.originalSchema. Otherwise uses existing.\n */\n private buildNode(\n node: FieldNode,\n schema?: Schema,\n options: {\n skipDependencyRegistration?: boolean;\n updatedNodes?: Set<string>;\n } = {},\n ): void {\n const { keywordLocation, instanceLocation } = node;\n\n const value = this.getValue(instanceLocation);\n if (value === undefined) {\n // If value is undefined, set to default from schema\n const defaultValue = getDefaultValue(schema || node.originalSchema);\n // Update value variable for further processing\n // Note: setValue will trigger a separate buildNode call, so we return here\n this.setValue(instanceLocation, defaultValue);\n return;\n }\n\n // Circular update protection\n if (this.updatingNodes.has(instanceLocation)) {\n return;\n }\n // Track updated nodes to prevent duplicate updates\n const updatedNodes = options.updatedNodes || new Set<string>();\n if (updatedNodes.has(instanceLocation)) {\n return;\n }\n this.updatingNodes.add(instanceLocation);\n\n // Only recalculate dependencies when originalSchema changes\n const schemaChanged =\n schema !== undefined && !deepEqual(schema, node.originalSchema);\n if (schemaChanged) {\n node.originalSchema = schema;\n const dependencies = this.collectDependencies(\n node.originalSchema,\n instanceLocation,\n );\n // Unregister old dependencies\n for (const depPath of node.dependencies || []) {\n this.unregisterDependent(depPath, node);\n }\n node.dependencies = dependencies;\n if (!options.skipDependencyRegistration) {\n for (const depPath of dependencies) {\n this.registerDependent(depPath, node);\n }\n }\n }\n\n // value change may affect effective schema, type, error\n const { type, effectiveSchema, error } = resolveEffectiveSchema(\n this.validator,\n node.originalSchema,\n value,\n keywordLocation,\n instanceLocation,\n );\n\n // record changes\n const effectiveSchemaChanged =\n !deepEqual(effectiveSchema, node.schema) || type !== node.type;\n\n const errorChanged = !deepEqual(error, node.error);\n\n node.schema = effectiveSchema;\n node.type = type;\n node.error = error;\n node.version++;\n\n // Build children map for reuse\n const oldChildrenMap = new Map<string, FieldNode>();\n if (node.children) {\n for (const child of node.children) {\n oldChildrenMap.set(child.instanceLocation, child);\n }\n }\n\n const newChildren: FieldNode[] = [];\n\n const processChild = (\n childKey: string,\n childSchema: Schema,\n childkeywordLocation: string,\n canRemove: boolean = false,\n ) => {\n const childinstanceLocation = jsonPointerJoin(instanceLocation, childKey);\n // Reuse or create child node\n let childNode = oldChildrenMap.get(childinstanceLocation);\n if (childNode) {\n oldChildrenMap.delete(childinstanceLocation);\n childNode.keywordLocation = childkeywordLocation;\n } else {\n childNode = this.createEmptyNode(\n childinstanceLocation,\n childkeywordLocation,\n );\n }\n // Set canRemove for this child\n childNode.canRemove = canRemove;\n // recursively build child node\n this.buildNode(childNode, childSchema, options);\n newChildren.push(childNode);\n };\n\n switch (type) {\n case \"object\": {\n const valueKeys =\n value && typeof value === \"object\" ? Object.keys(value) : [];\n const processedKeys = new Set<string>();\n\n // Set canAdd based on additionalProperties\n node.canAdd = !!effectiveSchema.additionalProperties;\n\n if (effectiveSchema.properties) {\n for (const [key, subschema] of Object.entries(\n effectiveSchema.properties,\n )) {\n processedKeys.add(key);\n // Regular properties cannot be removed\n processChild(\n key,\n subschema,\n `${keywordLocation}/properties/${key}`,\n false,\n );\n }\n }\n\n if (effectiveSchema.patternProperties) {\n for (const [pattern, subschema] of Object.entries(\n effectiveSchema.patternProperties,\n )) {\n for (const key of valueKeys) {\n if (safeRegexTest(pattern, key) && !processedKeys.has(key)) {\n processedKeys.add(key);\n // patternProperties can be removed\n processChild(\n key,\n subschema,\n `${keywordLocation}/patternProperties/${jsonPointerEscape(pattern)}`,\n true,\n );\n }\n }\n }\n }\n\n if (effectiveSchema.additionalProperties) {\n const subschema =\n typeof effectiveSchema.additionalProperties === \"object\"\n ? effectiveSchema.additionalProperties\n : {};\n\n for (const key of valueKeys) {\n if (!processedKeys.has(key)) {\n // additionalProperties can be removed\n processChild(\n key,\n subschema,\n `${keywordLocation}/additionalProperties`,\n true,\n );\n }\n }\n }\n break;\n }\n case \"array\": {\n // Set canAdd based on items schema\n node.canAdd = !!effectiveSchema.items;\n\n if (Array.isArray(value)) {\n let prefixItemsLength = 0;\n if (effectiveSchema.prefixItems) {\n prefixItemsLength = effectiveSchema.prefixItems.length;\n for (\n let i = 0;\n i < Math.min(value.length, prefixItemsLength);\n i++\n ) {\n // prefixItems cannot be removed (they are fixed positions)\n processChild(\n String(i),\n effectiveSchema.prefixItems[i],\n `${keywordLocation}/prefixItems/${i}`,\n false,\n );\n }\n }\n\n if (effectiveSchema.items && value.length > prefixItemsLength) {\n for (let i = prefixItemsLength; i < value.length; i++) {\n // items can be removed\n processChild(\n String(i),\n effectiveSchema.items,\n `${keywordLocation}/items`,\n true,\n );\n }\n }\n }\n break;\n }\n }\n\n // Cleanup removed children\n for (const oldChild of oldChildrenMap.values()) {\n this.unregisterNodeDependencies(oldChild);\n }\n\n node.children = newChildren;\n\n // Notify if effective schema changed\n if (effectiveSchemaChanged) {\n this.notify({ type: \"schema\", path: node.instanceLocation });\n }\n // Notify if error changed\n if (errorChanged) {\n this.notify({ type: \"error\", path: node.instanceLocation });\n }\n\n // Mark this node as updated and clean up updating state\n updatedNodes.add(instanceLocation);\n this.updatingNodes.delete(instanceLocation);\n\n // Handle dependents - other nodes that depend on this path's value\n // Note: dependents don't need to recalculate dependencies (their originalSchema hasn't changed)\n const dependentNodes = this.dependentsMap.get(instanceLocation);\n if (dependentNodes) {\n for (const dependentNode of dependentNodes) {\n // Don't pass schema - only value changed, not originalSchema\n this.buildNode(dependentNode, undefined, {\n ...options,\n updatedNodes,\n });\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/util.ts","../src/stringformat.ts","../src/i18n.ts","../src/version.ts","../src/normalize.ts","../src/validate.ts","../src/effective.ts","../src/schema-util.ts","../src/default.ts","../src/dependency.ts","../src/render.ts"],"names":["_"],"mappings":"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","file":"index.cjs","sourcesContent":["export function matchSchemaType(value: unknown, type: string): boolean {\n switch (type) {\n case \"string\":\n return typeof value === \"string\";\n case \"number\":\n return typeof value === \"number\" || typeof value === \"bigint\";\n case \"integer\":\n return typeof value === \"number\" && Number.isInteger(value);\n case \"boolean\":\n return typeof value === \"boolean\";\n case \"object\":\n return (\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n );\n case \"array\":\n return Array.isArray(value);\n case \"null\":\n return value === null || value === undefined;\n default:\n return false;\n }\n}\n\nexport function detectSchemaType(value: unknown): string {\n if (value === null || value === undefined) {\n return \"null\";\n }\n if (Array.isArray(value)) {\n return \"array\";\n }\n const type = typeof value;\n if (type === \"string\") {\n return \"string\";\n }\n if (type === \"boolean\") {\n return \"boolean\";\n }\n if (type === \"number\") {\n return Number.isInteger(value) ? \"integer\" : \"number\";\n }\n if (type === \"bigint\") {\n return \"number\";\n }\n if (type === \"object\") {\n return \"object\";\n }\n // For unrecognized types (function, symbol, etc.), return \"unknown\"\n return \"unknown\";\n}\n\nexport function parseJsonPointer(jsonPointer: string): string[] {\n if (jsonPointer === \"\") return [];\n const pointer =\n jsonPointer.charAt(0) === \"/\" ? jsonPointer.substring(1) : jsonPointer;\n return pointer\n .split(\"/\")\n .map((t) => jsonPointerUnescape(decodeURIComponent(t)));\n}\n\nexport function getJsonPointer(obj: unknown, jsonPointer: string): unknown {\n return get(obj, parseJsonPointer(jsonPointer));\n}\n\nexport function removeJsonPointer(obj: unknown, jsonPointer: string): boolean {\n const path = parseJsonPointer(jsonPointer);\n if (path.length === 0) {\n return false;\n }\n if (obj === null || obj === undefined) {\n return false;\n }\n\n let current: unknown = obj;\n\n for (let i = 0; i < path.length - 1; i++) {\n const segment = path[i];\n if (Array.isArray(current)) {\n const idx = Number(segment);\n if (isNaN(idx) || idx < 0 || idx >= current.length) {\n return false;\n }\n current = current[idx];\n } else if (typeof current === \"object\" && current !== null) {\n if (!Object.hasOwn(current, segment)) {\n return false;\n }\n current = (current as Record<string, unknown>)[segment];\n } else {\n return false;\n }\n\n if (current === null || current === undefined) {\n return false;\n }\n }\n\n const lastSegment = path[path.length - 1];\n if (Array.isArray(current)) {\n const idx = Number(lastSegment);\n if (isNaN(idx) || idx < 0 || idx >= current.length) {\n return false;\n }\n current.splice(idx, 1);\n return true;\n } else if (typeof current === \"object\" && current !== null) {\n if (Object.hasOwn(current, lastSegment)) {\n delete (current as Record<string, unknown>)[lastSegment];\n return true;\n }\n }\n\n return false;\n}\n\nexport function setJsonPointer(\n obj: unknown,\n jsonPointer: string,\n value: unknown,\n): boolean {\n const path = parseJsonPointer(jsonPointer);\n if (path.length === 0) {\n return false;\n }\n if (obj === null || obj === undefined) {\n return false;\n }\n let current: unknown = obj;\n\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n const isLast = i === path.length - 1;\n\n if (Array.isArray(current)) {\n const idx = Number(segment);\n if (isNaN(idx) || idx < 0) {\n return false;\n }\n // ensure array has enough length\n if (idx >= current.length) {\n for (let k = current.length; k <= idx; k++) current.push(undefined);\n }\n if (isLast) {\n current[idx] = value;\n return true;\n }\n // initialize next container if absent\n if (\n current[idx] === null ||\n current[idx] === undefined ||\n typeof current[idx] !== \"object\"\n ) {\n // decide next container based on next token: numeric -> array, else object\n const nextToken = path[i + 1];\n const nextIdx = Number(nextToken);\n current[idx] = !isNaN(nextIdx) ? [] : {};\n }\n current = current[idx];\n } else if (typeof current === \"object\" && current !== null) {\n if (isLast) {\n (current as Record<string, unknown>)[segment] = value;\n return true;\n }\n // initialize next container if absent\n if (\n !Object.hasOwn(current, segment) ||\n (current as Record<string, unknown>)[segment] === undefined\n ) {\n const nextToken = path[i + 1];\n const nextIdx = Number(nextToken);\n (current as Record<string, unknown>)[segment] = !isNaN(nextIdx)\n ? []\n : {};\n }\n current = (current as Record<string, unknown>)[segment];\n } else {\n // cannot traverse further\n return false;\n }\n }\n return true;\n}\n\nexport function get(obj: unknown, path: string[]): unknown {\n let current = obj;\n for (const segment of path) {\n if (Array.isArray(current)) {\n const currentIndex = Number(segment);\n if (\n isNaN(currentIndex) ||\n currentIndex < 0 ||\n currentIndex >= current.length\n ) {\n return undefined;\n } else {\n current = current[currentIndex];\n }\n } else if (typeof current === \"object\" && current !== null) {\n if (!Object.hasOwn(current, segment)) {\n return undefined;\n } else {\n current = (current as Record<string, unknown>)[segment];\n }\n } else {\n return undefined;\n }\n }\n return current;\n}\n\n/**\n * Deep equality comparison for two values.\n * Supports primitives, arrays, plain objects, Date, Map, Set, and RegExp.\n */\nexport function deepEqual(a: unknown, b: unknown): boolean {\n // Strict equality (handles primitives and same reference)\n if (a === b) return true;\n\n // Handle null and non-object cases\n if (\n typeof a !== \"object\" ||\n a === null ||\n typeof b !== \"object\" ||\n b === null\n ) {\n return false;\n }\n\n // Handle Date\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n if (a instanceof Date || b instanceof Date) {\n return false;\n }\n\n // Handle RegExp\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n if (a instanceof RegExp || b instanceof RegExp) {\n return false;\n }\n\n // Handle Map\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key))) {\n return false;\n }\n }\n return true;\n }\n if (a instanceof Map || b instanceof Map) {\n return false;\n }\n\n // Handle Set\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a) {\n // For Sets, we need to check if an equal value exists in b\n let found = false;\n for (const bValue of b) {\n if (deepEqual(value, bValue)) {\n found = true;\n break;\n }\n }\n if (!found) return false;\n }\n return true;\n }\n if (a instanceof Set || b instanceof Set) {\n return false;\n }\n\n // Handle Arrays\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n if (Array.isArray(a)) {\n const arrA = a as unknown[];\n const arrB = b as unknown[];\n if (arrA.length !== arrB.length) return false;\n for (let i = 0; i < arrA.length; i++) {\n if (!deepEqual(arrA[i], arrB[i])) return false;\n }\n return true;\n }\n\n // Handle plain objects\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!Object.hasOwn(b, key)) return false;\n if (\n !deepEqual(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n )\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function jsonPointerEscape(str: string): string {\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\n\nexport function jsonPointerUnescape(str: string): string {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\n\nexport function jsonPointerJoin(base: string, token: string): string {\n if (base === \"\") return \"/\" + jsonPointerEscape(token);\n else return base + \"/\" + jsonPointerEscape(token);\n}\n\n/**\n * Convert a relative path to an absolute path\n * @param nodePath The node's jsonPointer, e.g. \"/a/b\"\n * @param relativePath Relative path, e.g. \"/c\" means /a/b/c\n */\nexport function resolveAbsolutePath(\n nodePath: string,\n relativePath: string,\n): string {\n if (relativePath.startsWith(\"/\")) {\n // Relative to current node's child path\n return nodePath === \"\" ? relativePath : nodePath + relativePath;\n }\n return relativePath;\n}\n\n/**\n * Maximum size for the regex cache to prevent memory leaks.\n */\nconst MAX_REGEX_CACHE_SIZE = 1000;\n\n/**\n * Cache for compiled RegExp objects.\n * null value indicates an invalid pattern.\n */\nconst regexCache = new Map<string, RegExp | null>();\n\n/**\n * Safely test a regex pattern against a string.\n * Returns false if the pattern is invalid instead of throwing.\n * Uses caching to avoid creating RegExp objects repeatedly.\n */\nexport function safeRegexTest(pattern: string, value: string): boolean {\n let regex = regexCache.get(pattern);\n\n // Check if we've already processed this pattern\n if (regex === undefined) {\n try {\n regex = new RegExp(pattern);\n // Evict oldest entry if cache is full (Map maintains insertion order)\n if (regexCache.size >= MAX_REGEX_CACHE_SIZE) {\n const firstKey = regexCache.keys().next().value;\n if (firstKey !== undefined) {\n regexCache.delete(firstKey);\n }\n }\n regexCache.set(pattern, regex);\n } catch {\n // Invalid regex pattern - cache as null\n regexCache.set(pattern, null);\n return false;\n }\n }\n\n // null means the pattern was invalid\n if (regex === null) {\n return false;\n }\n\n return regex.test(value);\n}\n","// URL is available as a global in modern environments (Browsers and Node.js 10+)\n\n// Precompiled regular expressions to avoid re-creating RegExp objects on every call\nconst DATE_RE = /^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/,\n DURATION_RE = /^P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$/,\n EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\n HOSTNAME_RE =\n /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/,\n IPV4_RE =\n /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n IPV6_RE =\n /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(([0-9a-fA-F]{1,4}:){1,7}:)|(([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4})|(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|([0-9a-fA-F]{1,4}:)((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9])?[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9])?[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9])?[0-9]))$/,\n RFC3339_RE =\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/,\n UUID_RE =\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;\n\n// String format validator - extract format logic outside of Validator\nexport interface StringFormatValidatorInterface {\n validate(format: string, value: string): boolean;\n}\n\nexport class StringFormatValidator implements StringFormatValidatorInterface {\n validate(format: string, value: string): boolean {\n switch (format) {\n case \"date-time\":\n return this.isDateTime(value);\n case \"date\":\n return this.isDate(value);\n case \"email\":\n return this.isEmail(value);\n case \"hostname\":\n return this.isHostname(value);\n case \"ipv4\":\n return this.isIPv4(value);\n case \"ipv6\":\n return this.isIPv6(value);\n case \"uri\":\n return this.isUri(value);\n case \"uuid\":\n return this.isUuid(value);\n case \"duration\":\n return this.isDuration(value);\n default:\n return true;\n }\n }\n\n private isDateTime(value: string): boolean {\n if (!RFC3339_RE.test(value)) return false;\n return !isNaN(Date.parse(value));\n }\n\n private isDate(value: string): boolean {\n const m = DATE_RE.exec(value);\n if (!m) return false;\n const year = Number(m[1]),\n month = Number(m[2]),\n day = Number(m[3]),\n daysInMonth = [\n 31,\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28,\n 31,\n 30,\n 31,\n 30,\n 31,\n 31,\n 30,\n 31,\n 30,\n 31,\n ];\n return day <= daysInMonth[month - 1];\n }\n\n private isEmail(value: string): boolean {\n return EMAIL_RE.test(value);\n }\n\n private isHostname(value: string): boolean {\n return HOSTNAME_RE.test(value);\n }\n\n private isIPv4(value: string): boolean {\n return IPV4_RE.test(value);\n }\n\n private isIPv6(value: string): boolean {\n return IPV6_RE.test(value);\n }\n\n private isUri(value: string): boolean {\n try {\n const u = new URL(value);\n return typeof u.protocol === \"string\" && u.protocol.length > 0;\n } catch {\n return false;\n }\n }\n\n private isUuid(value: string): boolean {\n return UUID_RE.test(value);\n }\n\n private isDuration(value: string): boolean {\n return DURATION_RE.test(value) && value !== \"P\";\n }\n}\n\nexport const stringFormatValidator = new StringFormatValidator();\n","import type { ErrorMessage } from \"./type\";\n\n/**\n * Default error message templates for i18n support.\n * Keys are translation keys, values are English templates with {param} placeholders.\n */\nexport const MESSAGES: Record<string, string> = {\n \"validation.anyOf\": \"must match at least one schema\",\n \"validation.oneOf\": \"must match exactly one schema, matched {count}\",\n \"validation.not\": \"must not match schema\",\n \"validation.const\": \"must be equal to {value}\",\n \"validation.enum\": \"must be equal to one of the allowed values\",\n \"validation.type\": \"must be {expected}\",\n \"validation.maximum\": \"must be <= {value}\",\n \"validation.exclusiveMaximum\": \"must be < {value}\",\n \"validation.minimum\": \"must be >= {value}\",\n \"validation.exclusiveMinimum\": \"must be > {value}\",\n \"validation.multipleOf\": \"must be multiple of {value}\",\n \"validation.maxLength\": \"must be shorter than or equal to {value} characters\",\n \"validation.minLength\": \"must be longer than or equal to {value} characters\",\n \"validation.pattern\": 'must match pattern \"{pattern}\"',\n \"validation.format\": 'must match format \"{format}\"',\n \"validation.maxItems\": \"must have at most {value} items\",\n \"validation.minItems\": \"must have at least {value} items\",\n \"validation.uniqueItems\": \"must not contain duplicate items\",\n \"validation.contains\": \"must contain at least one valid item\",\n \"validation.minContains\": \"must contain at least {value} valid items\",\n \"validation.maxContains\": \"must contain at most {value} valid items\",\n \"validation.maxProperties\": \"must have at most {value} properties\",\n \"validation.minProperties\": \"must have at least {value} properties\",\n \"validation.required\": \"must have required property '{property}'\",\n \"validation.dependentRequired\":\n \"property '{source}' requires property '{target}'\",\n \"validation.additionalProperties\":\n \"must not have additional properties: {properties}\",\n \"validation.failed\": \"validation failed\",\n};\n\n/**\n * Formats ErrorMessage to string for Output.error.\n * Provide a custom implementation for i18n support.\n */\nexport type ErrorFormatter = (msg: ErrorMessage) => string;\n\n/**\n * Default error formatter: looks up template from MESSAGES and interpolates params.\n */\nexport const defaultErrorFormatter: ErrorFormatter = (msg) => {\n const template = MESSAGES[msg.key] ?? msg.key;\n if (!msg.params) return template;\n\n let result = template;\n for (const [k, v] of Object.entries(msg.params)) {\n const value =\n typeof v === \"object\" && v !== null ? JSON.stringify(v) : String(v);\n result = result.replace(`{${k}}`, value);\n }\n return result;\n};\n","/**\n * JSON Schema draft version definitions and detection utilities.\n */\n/**\n * Supported JSON Schema draft versions.\n */\nexport type SchemaDraft =\n | \"draft-04\"\n | \"draft-07\"\n | \"draft-2019-09\"\n | \"draft-2020-12\";\n\n/**\n * Standard $schema URI patterns for each draft version.\n */\nexport const DRAFT_URIS: Record<SchemaDraft, string[]> = {\n \"draft-04\": [\n \"http://json-schema.org/draft-04/schema#\",\n \"http://json-schema.org/draft-04/schema\",\n ],\n \"draft-07\": [\n \"http://json-schema.org/draft-07/schema#\",\n \"http://json-schema.org/draft-07/schema\",\n ],\n \"draft-2019-09\": [\n \"https://json-schema.org/draft/2019-09/schema\",\n \"https://json-schema.org/draft/2019-09/schema#\",\n ],\n \"draft-2020-12\": [\n \"https://json-schema.org/draft/2020-12/schema\",\n \"https://json-schema.org/draft/2020-12/schema#\",\n ],\n};\n\n/**\n * Detect the JSON Schema draft version from a schema.\n * Detection is based on:\n * 1. The $schema URI if present\n * 2. Heuristics based on keywords used\n *\n * @param schema - The schema to detect the version of (can be object, boolean, or unknown)\n * @returns The detected draft version, defaults to \"draft-2020-12\" if unknown\n */\nexport function detectSchemaDraft(schema: unknown): SchemaDraft {\n // If not an object, default to latest\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n return \"draft-2020-12\";\n }\n\n const s = schema as Record<string, unknown>;\n\n // Check $schema URI first\n if (s.$schema && typeof s.$schema === \"string\") {\n for (const [draft, uris] of Object.entries(DRAFT_URIS)) {\n if (uris.some((uri) => s.$schema === uri)) {\n return draft as SchemaDraft;\n }\n }\n }\n\n // Heuristic detection based on keywords\n\n // draft-2020-12: uses prefixItems\n if (\"prefixItems\" in s) {\n return \"draft-2020-12\";\n }\n\n // draft-2019-09: uses $recursiveRef/$recursiveAnchor or unevaluatedProperties/unevaluatedItems\n if (\n \"$recursiveRef\" in s ||\n \"$recursiveAnchor\" in s ||\n \"unevaluatedProperties\" in s ||\n \"unevaluatedItems\" in s\n ) {\n return \"draft-2019-09\";\n }\n\n // draft-04: uses \"id\" instead of \"$id\", or boolean exclusiveMaximum/exclusiveMinimum\n if (\"id\" in s && !(\"$id\" in s)) {\n return \"draft-04\";\n }\n\n // draft-04: boolean exclusiveMaximum/exclusiveMinimum\n if (\n typeof s.exclusiveMaximum === \"boolean\" ||\n typeof s.exclusiveMinimum === \"boolean\"\n ) {\n return \"draft-04\";\n }\n\n // draft-04/07: uses dependencies keyword\n if (\"dependencies\" in s) {\n // Could be draft-04 or draft-07, check for other clues\n if (\"$id\" in s) {\n return \"draft-07\";\n }\n return \"draft-04\";\n }\n\n // draft-04/07: uses additionalItems\n if (\"additionalItems\" in s) {\n if (\"$id\" in s) {\n return \"draft-07\";\n }\n return \"draft-04\";\n }\n\n // Default to latest if no distinguishing features found\n return \"draft-2020-12\";\n}\n","/**\n * Schema normalizer that transforms older JSON Schema drafts to draft-2020-12.\n *\n * This allows the validator to only implement draft-2020-12 semantics\n * while still supporting schemas written for older drafts.\n */\nimport type { Schema } from \"./type\";\nimport { detectSchemaDraft, type SchemaDraft } from \"./version\";\n\nexport interface NormalizerOptions {\n /**\n * Source draft version. If not specified, will be auto-detected.\n */\n sourceDraft?: SchemaDraft;\n}\n\n/**\n * Normalize a JSON Schema from any supported draft to draft-2020-12 format.\n *\n * Transformations performed:\n * - `id` → `$id` (draft-04)\n * - Boolean `exclusiveMaximum`/`exclusiveMinimum` → numeric values (draft-04)\n * - Array `items` + `additionalItems` → `prefixItems` + `items` (draft-04/07/2019-09)\n * - `dependencies` → `dependentRequired`/`dependentSchemas` (draft-04/07)\n * - `$recursiveRef`/`$recursiveAnchor` → `$dynamicRef`/`$dynamicAnchor` (draft-2019-09)\n *\n * @param schema - The schema to normalize (can be object, boolean, or unknown)\n * @param options - Optional configuration\n * @returns A new schema object in draft-2020-12 format (always returns an object)\n */\nexport function normalizeSchema(\n schema: unknown,\n options: NormalizerOptions = {},\n): Schema {\n // Handle boolean schemas (valid in Draft-06+)\n if (typeof schema === \"boolean\") {\n return schema ? {} : { not: {} };\n }\n\n // If not an object, return empty schema\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n return {} as Schema;\n }\n\n const schemaObj = schema as Schema;\n const sourceDraft = options.sourceDraft ?? detectSchemaDraft(schemaObj);\n\n // Create a mutable copy to transform\n const normalized: Schema = { ...schemaObj };\n\n // 1. Process based on source draft\n switch (sourceDraft) {\n case \"draft-04\":\n normalizeDraft04(normalized);\n normalizeDraft07(normalized);\n normalizeDraft201909(normalized);\n break;\n case \"draft-07\":\n normalizeDraft07(normalized);\n normalizeDraft201909(normalized);\n break;\n case \"draft-2019-09\":\n normalizeDraft07(normalized);\n normalizeDraft201909(normalized);\n break;\n }\n\n // 2. Process general/OpenAPI extensions (nullable, example)\n normalizeGeneral(normalized);\n\n // 3. Recursively normalize nested schemas\n normalizeNestedSchemas(normalized, options);\n\n // 4. Update $schema to indicate normalized version\n if (normalized.$schema) {\n normalized.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n\n return normalized;\n}\n\n/**\n * Normalize draft-04 specific keywords to newer format.\n */\nfunction normalizeDraft04(schema: Schema): void {\n // Access schema as Record for legacy keywords not in the type\n const legacy = schema as Record<string, unknown>;\n\n // id → $id\n if (\"id\" in legacy && !(\"$id\" in schema)) {\n schema.$id = legacy.id as string;\n delete legacy.id;\n }\n\n // Sibling of $ref should be removed in Draft-04 to preserve semantics\n // (In Draft-04, $ref overrides all other keywords in the same object)\n if (\"$ref\" in schema) {\n for (const key of Object.keys(schema)) {\n if (\n key !== \"$ref\" &&\n key !== \"$schema\" &&\n key !== \"id\" &&\n key !== \"$id\" &&\n key !== \"$comment\"\n ) {\n delete legacy[key];\n }\n }\n }\n\n // Boolean exclusiveMaximum/exclusiveMinimum → numeric\n // In draft-04: exclusiveMaximum is a boolean, used with maximum\n // In draft-07+: exclusiveMaximum is the numeric limit itself\n if (\n typeof legacy.exclusiveMaximum === \"boolean\" &&\n legacy.exclusiveMaximum === true\n ) {\n if (schema.maximum !== undefined) {\n schema.exclusiveMaximum = schema.maximum;\n delete schema.maximum;\n } else {\n delete legacy.exclusiveMaximum;\n }\n }\n\n if (\n typeof legacy.exclusiveMinimum === \"boolean\" &&\n legacy.exclusiveMinimum === true\n ) {\n if (schema.minimum !== undefined) {\n schema.exclusiveMinimum = schema.minimum;\n delete schema.minimum;\n } else {\n delete legacy.exclusiveMinimum;\n }\n }\n\n // Clean up false boolean exclusive values\n if (legacy.exclusiveMaximum === false) {\n delete legacy.exclusiveMaximum;\n }\n if (legacy.exclusiveMinimum === false) {\n delete legacy.exclusiveMinimum;\n }\n\n // enum: [x] -> const: x\n // While enum is still valid, const is the preferred 2020-12 way for single values\n if (\n Array.isArray(schema.enum) &&\n schema.enum.length === 1 &&\n schema.const === undefined\n ) {\n schema.const = schema.enum[0];\n }\n}\n\n/**\n * Normalize draft-07 specific keywords to newer format.\n */\nfunction normalizeDraft07(schema: Schema): void {\n // Access schema as Record for legacy keywords not in the type\n const legacy = schema as Record<string, unknown>;\n\n // Array items + additionalItems → prefixItems + items\n // In draft-04/07: items can be an array (tuple validation), additionalItems for extra\n // In draft-2020-12: prefixItems is the array, items is for additional\n if (Array.isArray(legacy.items)) {\n schema.prefixItems = legacy.items as Schema[];\n if (\"additionalItems\" in legacy) {\n if (\n typeof legacy.additionalItems === \"object\" ||\n typeof legacy.additionalItems === \"boolean\"\n ) {\n schema.items = legacy.additionalItems as Schema;\n }\n delete legacy.additionalItems;\n } else {\n // In Draft-04/07, items without additionalItems means additional items are allowed\n // In Draft-2020-12, prefixItems without items keyword doesn't restrict additional items either.\n // So this is fine.\n delete legacy.items;\n }\n } else if (\"additionalItems\" in legacy) {\n // additionalItems without array items - just remove it as it has no effect\n delete legacy.additionalItems;\n }\n\n // dependencies → dependentRequired / dependentSchemas\n if (\"dependencies\" in legacy) {\n const deps = legacy.dependencies as Record<string, string[] | Schema>;\n\n for (const [prop, value] of Object.entries(deps)) {\n if (Array.isArray(value)) {\n // String array → dependentRequired\n if (!schema.dependentRequired) {\n schema.dependentRequired = {};\n }\n schema.dependentRequired[prop] = value;\n } else {\n // Schema → dependentSchemas\n if (!schema.dependentSchemas) {\n schema.dependentSchemas = {};\n }\n schema.dependentSchemas[prop] = value;\n }\n }\n\n delete legacy.dependencies;\n }\n}\n\n/**\n * Normalize general keywords and common extensions (OpenAPI) to standard format.\n */\nfunction normalizeGeneral(schema: Schema): void {\n // Access schema as Record for legacy keywords not in the type\n const legacy = schema as Record<string, unknown>;\n\n // Generic/OpenAPI: nullable: true\n if (legacy.nullable === true) {\n if (typeof schema.type === \"string\") {\n schema.type = [schema.type, \"null\"];\n } else if (Array.isArray(schema.type)) {\n if (!schema.type.includes(\"null\")) {\n schema.type = [...schema.type, \"null\"];\n }\n }\n delete legacy.nullable;\n }\n\n // Generic/OpenAPI: example: x -> examples: [x]\n if (\"example\" in legacy) {\n if (!(\"examples\" in schema)) {\n schema.examples = [legacy.example];\n }\n delete legacy.example;\n }\n}\n\n/**\n * Normalize draft-2019-09 specific keywords to draft-2020-12 format.\n */\nfunction normalizeDraft201909(schema: Schema): void {\n // $recursiveRef → $dynamicRef\n if (\"$recursiveRef\" in schema) {\n let ref = schema.$recursiveRef as string;\n // Normalized $recursiveRef: \"#\" to $dynamicRef: \"#recursiveAnchor\"\n // to match the default anchor we use for $recursiveAnchor\n if (ref === \"#\") {\n ref = \"#recursiveAnchor\";\n }\n schema.$dynamicRef = ref;\n delete schema.$recursiveRef;\n }\n\n // $recursiveAnchor → $dynamicAnchor\n if (\"$recursiveAnchor\" in schema) {\n // $recursiveAnchor was always true (boolean)\n if (schema.$recursiveAnchor === true) {\n // Use a standard name for the dynamic anchor\n schema.$dynamicAnchor = schema.$dynamicAnchor ?? \"recursiveAnchor\";\n }\n delete schema.$recursiveAnchor;\n }\n}\n\n/**\n * Recursively normalize all nested schemas within a schema.\n */\nfunction normalizeNestedSchemas(\n schema: Schema,\n options: NormalizerOptions,\n): void {\n // Definitions\n if (schema.$defs) {\n schema.$defs = Object.fromEntries(\n Object.entries(schema.$defs).map(([key, subSchema]) => [\n key,\n normalizeSchema(subSchema, options),\n ]),\n );\n }\n\n // Legacy definitions (draft-04/07 used \"definitions\")\n if (\"definitions\" in schema) {\n const defs = schema.definitions as Record<string, Schema>;\n if (!schema.$defs) {\n schema.$defs = {};\n }\n for (const [key, subSchema] of Object.entries(defs)) {\n schema.$defs[key] = normalizeSchema(subSchema, options);\n }\n delete schema.definitions;\n }\n\n // Properties\n if (schema.properties) {\n schema.properties = Object.fromEntries(\n Object.entries(schema.properties).map(([key, subSchema]) => [\n key,\n normalizeSchema(subSchema, options),\n ]),\n );\n }\n\n // Pattern properties\n if (schema.patternProperties) {\n schema.patternProperties = Object.fromEntries(\n Object.entries(schema.patternProperties).map(([key, subSchema]) => [\n key,\n normalizeSchema(subSchema, options),\n ]),\n );\n }\n\n // Additional properties (if schema)\n if (\n schema.additionalProperties &&\n typeof schema.additionalProperties === \"object\"\n ) {\n schema.additionalProperties = normalizeSchema(\n schema.additionalProperties,\n options,\n );\n }\n\n // Items (after normalization, this is for additional items)\n if (\n schema.items &&\n typeof schema.items === \"object\" &&\n !Array.isArray(schema.items)\n ) {\n schema.items = normalizeSchema(schema.items, options);\n }\n\n // Prefix items\n if (schema.prefixItems) {\n schema.prefixItems = schema.prefixItems.map((s) =>\n normalizeSchema(s, options),\n );\n }\n\n // Contains\n if (schema.contains) {\n schema.contains = normalizeSchema(schema.contains, options);\n }\n\n // Applicators\n if (schema.allOf) {\n schema.allOf = schema.allOf.map((s) => normalizeSchema(s, options));\n }\n if (schema.anyOf) {\n schema.anyOf = schema.anyOf.map((s) => normalizeSchema(s, options));\n }\n if (schema.oneOf) {\n schema.oneOf = schema.oneOf.map((s) => normalizeSchema(s, options));\n }\n if (schema.not) {\n schema.not = normalizeSchema(schema.not, options);\n }\n\n // Conditionals\n if (schema.if) {\n schema.if = normalizeSchema(schema.if, options);\n }\n if (schema.then) {\n schema.then = normalizeSchema(schema.then, options);\n }\n if (schema.else) {\n schema.else = normalizeSchema(schema.else, options);\n }\n\n // Dependent schemas\n if (schema.dependentSchemas) {\n schema.dependentSchemas = Object.fromEntries(\n Object.entries(schema.dependentSchemas).map(([key, subSchema]) => [\n key,\n normalizeSchema(subSchema, options),\n ]),\n );\n }\n\n // Unevaluated\n if (schema.unevaluatedItems) {\n schema.unevaluatedItems = normalizeSchema(schema.unevaluatedItems, options);\n }\n if (schema.unevaluatedProperties) {\n schema.unevaluatedProperties = normalizeSchema(\n schema.unevaluatedProperties,\n options,\n );\n }\n\n // Property names\n if (schema.propertyNames) {\n schema.propertyNames = normalizeSchema(schema.propertyNames, options);\n }\n\n // Content schema\n if (schema.contentSchema) {\n schema.contentSchema = normalizeSchema(schema.contentSchema, options);\n }\n}\n","import {\n stringFormatValidator,\n type StringFormatValidatorInterface,\n} from \"./stringformat\";\nimport type { Schema, Output, ErrorMessage } from \"./type\";\nimport { deepEqual, jsonPointerEscape, matchSchemaType } from \"./util\";\nimport { defaultErrorFormatter, type ErrorFormatter } from \"./i18n\";\nimport { normalizeSchema } from \"./normalize\";\n\nexport interface ValidatorOptions {\n fastFail?: boolean;\n shallow?: boolean;\n}\n\nexport interface ValidatorConfig {\n formatValidator?: StringFormatValidatorInterface;\n errorFormatter?: ErrorFormatter;\n}\n\nexport class Validator {\n private formatValidator: StringFormatValidatorInterface;\n private errorFormatter: ErrorFormatter;\n\n constructor(config: ValidatorConfig = {}) {\n this.formatValidator = config.formatValidator ?? stringFormatValidator;\n this.errorFormatter = config.errorFormatter ?? defaultErrorFormatter;\n }\n\n /**\n * Format an ErrorMessage to a localized string.\n */\n formatError(msg: ErrorMessage): string {\n return this.errorFormatter(msg);\n }\n\n validate(\n schema: Schema,\n value: unknown,\n keywordLocation: string = \"#\",\n instanceLocation: string = \"\",\n options: ValidatorOptions = {},\n ): Output {\n const { fastFail = false } = options;\n const output: Output = {\n valid: false,\n keywordLocation,\n absoluteKeywordLocation: keywordLocation,\n instanceLocation,\n absoluteInstanceLocation: instanceLocation,\n errors: [],\n };\n\n // Applicators: if/then/else\n if (schema.if) {\n const ifResult = this.validate(\n schema.if,\n value,\n keywordLocation + `/if`,\n `${instanceLocation}`,\n options,\n );\n if (ifResult.valid) {\n if (schema.then) {\n const thenResult = this.validate(\n schema.then,\n value,\n keywordLocation + `/then`,\n instanceLocation,\n options,\n );\n if (!thenResult.valid) {\n output.errors.push(...(thenResult.errors || []));\n if (fastFail) return output;\n }\n }\n } else if (schema.else) {\n const elseResult = this.validate(\n schema.else,\n value,\n keywordLocation + `/else`,\n instanceLocation,\n options,\n );\n if (!elseResult.valid) {\n output.errors.push(...(elseResult.errors || []));\n if (fastFail) return output;\n }\n }\n }\n\n // Applicators: allOf\n if (schema.allOf) {\n for (let index = 0; index < schema.allOf.length; index++) {\n const subSchema = schema.allOf[index];\n const result = this.validate(\n subSchema,\n value,\n keywordLocation + `/allOf/${index}`,\n instanceLocation,\n options,\n );\n if (!result.valid) {\n output.errors.push(...(result.errors || []));\n if (fastFail) return output;\n }\n }\n }\n\n // Applicators: anyOf\n if (schema.anyOf) {\n let hasValid = false;\n const errors: Output[] = [];\n for (let index = 0; index < schema.anyOf.length; index++) {\n const subSchema = schema.anyOf[index];\n const result = this.validate(\n subSchema,\n value,\n keywordLocation + `/anyOf/${index}`,\n instanceLocation,\n options,\n );\n if (result.valid) {\n hasValid = true;\n break;\n } else {\n errors.push(...(result.errors || []));\n }\n }\n if (!hasValid) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/anyOf`,\n instanceLocation,\n errors,\n error: this.formatError({ key: \"validation.anyOf\" }),\n });\n if (fastFail) return output;\n }\n }\n\n // Applicators: oneOf\n if (schema.oneOf) {\n const results = schema.oneOf.map((subSchema, index) =>\n this.validate(\n subSchema,\n value,\n keywordLocation + `/oneOf/${index}`,\n instanceLocation,\n options,\n ),\n ),\n validCount = results.filter((r) => r.valid).length;\n if (validCount !== 1) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/oneOf`,\n instanceLocation,\n errors: [],\n annotations: results,\n error: this.formatError({\n key: \"validation.oneOf\",\n params: { count: validCount },\n }),\n });\n if (fastFail) return output;\n }\n }\n\n // Applicators: not\n if (schema.not) {\n const result = this.validate(\n schema.not,\n value,\n keywordLocation + `/not`,\n instanceLocation,\n options,\n );\n if (result.valid) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/not`,\n instanceLocation,\n errors: [],\n annotations: [result],\n error: this.formatError({ key: \"validation.not\" }),\n });\n if (fastFail) return output;\n }\n }\n\n // Validation: const\n if (schema.const !== undefined) {\n if (!deepEqual(value, schema.const)) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/const`,\n instanceLocation,\n errors: [],\n error: this.formatError({\n key: \"validation.const\",\n params: { value: schema.const },\n }),\n });\n if (fastFail) return output;\n }\n }\n\n // Validation: enum\n if (schema.enum) {\n if (!schema.enum.some((v) => deepEqual(value, v))) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/enum`,\n instanceLocation,\n errors: [],\n error: this.formatError({ key: \"validation.enum\" }),\n });\n if (fastFail) return output;\n }\n }\n\n // Type validation. If schema.type is provided, prefer that; otherwise\n // infer instanceType from the runtime value so that keywords like\n // minLength/prefixItems/contains/etc. without an explicit type still\n // apply when appropriate.\n let instanceType = \"\";\n if (schema.type) {\n const allowedTypes = Array.isArray(schema.type)\n ? schema.type\n : [schema.type];\n for (const type of allowedTypes) {\n if (this.checkType(value, type)) {\n instanceType = type;\n break;\n }\n }\n if (!instanceType) {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/type`,\n instanceLocation,\n errors: [],\n error: this.formatError({\n key: \"validation.type\",\n params: { expected: allowedTypes.join(\" or \") },\n }),\n });\n if (fastFail) return output;\n }\n } else {\n instanceType = this.detectType(value);\n }\n\n // Type specific validations\n if (instanceType === \"object\") {\n this.validateObject(\n schema,\n value as Record<string, unknown>,\n instanceLocation,\n keywordLocation,\n output,\n options,\n );\n } else if (instanceType === \"array\") {\n this.validateArray(\n schema,\n value as unknown[],\n keywordLocation,\n instanceLocation,\n output,\n options,\n );\n } else if (instanceType === \"string\") {\n this.validateString(\n schema,\n value as string,\n keywordLocation,\n instanceLocation,\n output,\n options,\n );\n } else if (instanceType === \"number\") {\n this.validateNumber(\n schema,\n value as number,\n keywordLocation,\n instanceLocation,\n output,\n options,\n );\n }\n\n output.valid = output.errors.length == 0;\n output.error = output.valid\n ? undefined\n : this.formatError({ key: \"validation.failed\" });\n return output;\n }\n\n private validateNumber(\n schema: Schema,\n value: number,\n keywordLocation: string,\n instanceLocation: string,\n output: Output,\n options: ValidatorOptions,\n ) {\n const { fastFail = false } = options;\n const addError = (keyword: string, msg: ErrorMessage) => {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/${keyword}`,\n instanceLocation,\n errors: [],\n error: this.formatError(msg),\n });\n };\n\n if (schema.maximum !== undefined && value > schema.maximum) {\n addError(\"maximum\", {\n key: \"validation.maximum\",\n params: { value: schema.maximum },\n });\n if (fastFail) return;\n }\n if (\n schema.exclusiveMaximum !== undefined &&\n value >= schema.exclusiveMaximum\n ) {\n addError(\"exclusiveMaximum\", {\n key: \"validation.exclusiveMaximum\",\n params: { value: schema.exclusiveMaximum },\n });\n if (fastFail) return;\n }\n if (schema.minimum !== undefined && value < schema.minimum) {\n addError(\"minimum\", {\n key: \"validation.minimum\",\n params: { value: schema.minimum },\n });\n if (fastFail) return;\n }\n if (\n schema.exclusiveMinimum !== undefined &&\n value <= schema.exclusiveMinimum\n ) {\n addError(\"exclusiveMinimum\", {\n key: \"validation.exclusiveMinimum\",\n params: { value: schema.exclusiveMinimum },\n });\n if (fastFail) return;\n }\n if (schema.multipleOf !== undefined) {\n const remainder = value % schema.multipleOf;\n if (\n Math.abs(remainder) > 0.00001 &&\n Math.abs(remainder - schema.multipleOf) > 0.00001\n ) {\n addError(\"multipleOf\", {\n key: \"validation.multipleOf\",\n params: { value: schema.multipleOf },\n });\n if (fastFail) return;\n }\n }\n }\n\n private validateString(\n schema: Schema,\n value: string,\n keywordLocation: string,\n instanceLocation: string,\n output: Output,\n options: ValidatorOptions,\n ) {\n const { fastFail = false } = options;\n const addError = (keyword: string, msg: ErrorMessage) => {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/${keyword}`,\n instanceLocation,\n errors: [],\n error: this.formatError(msg),\n });\n },\n { length } = [...value];\n\n if (schema.maxLength !== undefined && length > schema.maxLength) {\n addError(\"maxLength\", {\n key: \"validation.maxLength\",\n params: { value: schema.maxLength },\n });\n if (fastFail) return;\n }\n if (schema.minLength !== undefined && length < schema.minLength) {\n addError(\"minLength\", {\n key: \"validation.minLength\",\n params: { value: schema.minLength },\n });\n if (fastFail) return;\n }\n if (schema.pattern !== undefined) {\n const regex = new RegExp(schema.pattern);\n if (!regex.test(value)) {\n addError(\"pattern\", {\n key: \"validation.pattern\",\n params: { pattern: schema.pattern },\n });\n if (fastFail) return;\n }\n }\n if (schema.format !== undefined) {\n if (!this.validateFormat(schema.format, value)) {\n addError(\"format\", {\n key: \"validation.format\",\n params: { format: schema.format },\n });\n if (fastFail) return;\n }\n }\n }\n\n private validateArray(\n schema: Schema,\n value: unknown[],\n keywordLocation: string,\n instanceLocation: string,\n output: Output,\n options: ValidatorOptions,\n ) {\n const { fastFail = false, shallow = false } = options;\n const addError = (keyword: string, msg: ErrorMessage) => {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/${keyword}`,\n instanceLocation,\n errors: [],\n error: this.formatError(msg),\n });\n };\n\n if (schema.maxItems !== undefined && value.length > schema.maxItems) {\n addError(\"maxItems\", {\n key: \"validation.maxItems\",\n params: { value: schema.maxItems },\n });\n if (fastFail) return;\n }\n if (schema.minItems !== undefined && value.length < schema.minItems) {\n addError(\"minItems\", {\n key: \"validation.minItems\",\n params: { value: schema.minItems },\n });\n if (fastFail) return;\n }\n if (schema.uniqueItems) {\n for (let i = 0; i < value.length; i++) {\n for (let j = i + 1; j < value.length; j++) {\n if (deepEqual(value[i], value[j])) {\n addError(\"uniqueItems\", { key: \"validation.uniqueItems\" });\n return;\n }\n }\n }\n }\n\n let prefixItemsLength = 0;\n if (schema.prefixItems) {\n prefixItemsLength = schema.prefixItems.length;\n for (let index = 0; index < schema.prefixItems.length; index++) {\n const itemSchema = schema.prefixItems[index];\n if (index < value.length) {\n if (!shallow) {\n const result = this.validate(\n itemSchema,\n value[index],\n `${keywordLocation}/prefixItems/${index}`,\n `${instanceLocation}/${index}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n if (schema.items && value.length > prefixItemsLength) {\n for (let i = prefixItemsLength; i < value.length; i++) {\n if (!shallow) {\n const result = this.validate(\n schema.items,\n value[i],\n `${keywordLocation}/items`,\n `${instanceLocation}/${i}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n\n if (schema.contains) {\n let containsCount = 0;\n for (let i = 0; i < value.length; i++) {\n const result = this.validate(\n schema.contains,\n value[i],\n `${keywordLocation}/contains`,\n `${instanceLocation}/${i}`,\n options,\n );\n if (result.valid) {\n containsCount++;\n }\n }\n\n if (schema.minContains !== undefined) {\n if (containsCount < schema.minContains) {\n addError(\"minContains\", {\n key: \"validation.minContains\",\n params: { value: schema.minContains },\n });\n if (fastFail) return;\n }\n } else if (schema.minContains === undefined && containsCount === 0) {\n addError(\"contains\", { key: \"validation.contains\" });\n if (fastFail) return;\n }\n\n if (schema.maxContains !== undefined) {\n if (containsCount > schema.maxContains) {\n addError(\"maxContains\", {\n key: \"validation.maxContains\",\n params: { value: schema.maxContains },\n });\n if (fastFail) return;\n }\n }\n }\n }\n\n private validateObject(\n schema: Schema,\n value: Record<string, unknown>,\n keywordLocation: string,\n instanceLocation: string,\n output: Output,\n options: ValidatorOptions,\n ) {\n const { fastFail = false, shallow = false } = options;\n const addError = (keyword: string, msg: ErrorMessage) => {\n output.errors.push({\n valid: false,\n keywordLocation: `${keywordLocation}/${keyword}`,\n instanceLocation,\n errors: [],\n error: this.formatError(msg),\n });\n },\n keys = Object.keys(value);\n\n if (\n schema.maxProperties !== undefined &&\n keys.length > schema.maxProperties\n ) {\n addError(\"maxProperties\", {\n key: \"validation.maxProperties\",\n params: { value: schema.maxProperties },\n });\n if (fastFail) return;\n }\n if (\n schema.minProperties !== undefined &&\n keys.length < schema.minProperties\n ) {\n addError(\"minProperties\", {\n key: \"validation.minProperties\",\n params: { value: schema.minProperties },\n });\n if (fastFail) return;\n }\n\n if (schema.required) {\n for (const req of schema.required) {\n if (!(req in value)) {\n addError(\"required\", {\n key: \"validation.required\",\n params: { property: req },\n });\n if (fastFail) return;\n }\n }\n }\n\n if (schema.dependentRequired) {\n for (const [prop, requiredProps] of Object.entries(\n schema.dependentRequired,\n )) {\n if (prop in value) {\n for (const req of requiredProps) {\n if (!(req in value)) {\n addError(\"dependentRequired\", {\n key: \"validation.dependentRequired\",\n params: { source: prop, target: req },\n });\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n const validatedKeys = new Set<string>();\n\n if (schema.properties) {\n for (const [prop, propSchema] of Object.entries(schema.properties)) {\n if (prop in value) {\n validatedKeys.add(prop);\n if (!shallow) {\n const result = this.validate(\n propSchema,\n value[prop],\n `${keywordLocation}/properties/${prop}`,\n `${instanceLocation}/${prop}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n if (schema.patternProperties) {\n for (const [pattern, propSchema] of Object.entries(\n schema.patternProperties,\n )) {\n const regex = new RegExp(pattern);\n for (const key of keys) {\n if (regex.test(key)) {\n validatedKeys.add(key);\n if (!shallow) {\n const result = this.validate(\n propSchema,\n value[key],\n `${keywordLocation}/patternProperties/${jsonPointerEscape(pattern)}`,\n `${instanceLocation}/${jsonPointerEscape(key)}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(...(result.errors || []));\n if (fastFail) return;\n }\n }\n }\n }\n }\n }\n\n if (schema.additionalProperties !== undefined) {\n const additionalKeys = keys.filter((k) => !validatedKeys.has(k));\n if (typeof schema.additionalProperties === \"boolean\") {\n if (!schema.additionalProperties && additionalKeys.length > 0) {\n addError(\"additionalProperties\", {\n key: \"validation.additionalProperties\",\n params: { properties: additionalKeys.join(\", \") },\n });\n if (fastFail) return;\n }\n } else {\n for (const key of additionalKeys) {\n if (!shallow) {\n const result = this.validate(\n schema.additionalProperties,\n value[key],\n `${keywordLocation}/additionalProperties`,\n `${instanceLocation}/${jsonPointerEscape(key)}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n if (schema.propertyNames) {\n for (const key of keys) {\n const result = this.validate(\n schema.propertyNames,\n key,\n `${keywordLocation}/propertyNames`,\n `${instanceLocation}/${jsonPointerEscape(key)}`,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n\n if (schema.dependentSchemas) {\n for (const [prop, depSchema] of Object.entries(schema.dependentSchemas)) {\n if (prop in value) {\n const result = this.validate(\n depSchema,\n value,\n `${keywordLocation}/dependentSchemas/${jsonPointerEscape(prop)}`,\n instanceLocation,\n options,\n );\n if (!result.valid) {\n output.errors.push(result);\n if (fastFail) return;\n }\n }\n }\n }\n }\n\n private detectType(value: unknown): string {\n if (value === null || value === undefined) return \"null\";\n if (Array.isArray(value)) return \"array\";\n if (Number.isInteger(value as number)) return \"integer\";\n return typeof value as string;\n }\n\n private checkType(value: unknown, type: string): boolean {\n return matchSchemaType(value, type);\n }\n\n private validateFormat(format: string, value: string): boolean {\n return this.formatValidator.validate(format, value);\n }\n}\n\n/**\n * Validates a value against a JSON Schema.\n * Support multiple JSON Schema drafts (04, 07, 2019-09, 2020-12) by normalizing\n * the schema to draft 2020-12 format before validation.\n */\nexport function validateSchema(\n schema: Schema | unknown,\n value: unknown,\n instancePath: string = \"\",\n schemaPath: string = \"#\",\n fastFail: boolean = false,\n): Output {\n const normalizedSchema = normalizeSchema(schema);\n const validator = new Validator();\n return validator.validate(normalizedSchema, value, schemaPath, instancePath, {\n fastFail,\n });\n}\n","import type { Schema, SchemaType, Output } from \"./type\";\nimport { matchSchemaType, detectSchemaType } from \"./util\";\nimport type { Validator } from \"./validate\";\n\nexport function resolveEffectiveSchema(\n validator: Validator,\n schema: Schema,\n value: unknown,\n keywordLocation: string,\n instanceLocation: string,\n): {\n effectiveSchema: Schema;\n type: SchemaType;\n error?: Output;\n} {\n // Schema is expected to be pre-dereferenced (all $refs resolved)\n let effective = schema;\n\n // if-then-else\n if (effective.if) {\n const output = validator.validate(\n effective.if,\n value,\n `${keywordLocation}/if`,\n instanceLocation,\n );\n if (output.valid) {\n if (effective.then) {\n const res = resolveEffectiveSchema(\n validator,\n effective.then,\n value,\n `${keywordLocation}/then`,\n instanceLocation,\n );\n effective = mergeSchema(effective, res.effectiveSchema);\n }\n } else {\n if (effective.else) {\n const res = resolveEffectiveSchema(\n validator,\n effective.else,\n value,\n `${keywordLocation}/else`,\n instanceLocation,\n );\n effective = mergeSchema(effective, res.effectiveSchema);\n }\n }\n // Remove if/then/else to prevent re-evaluation during shallow validation\n const { if: _, then: __, else: ___, ...rest } = effective;\n effective = rest;\n }\n\n // allOf\n if (effective.allOf) {\n for (const [index, subschema] of effective.allOf.entries()) {\n const res = resolveEffectiveSchema(\n validator,\n subschema,\n value,\n `${keywordLocation}/allOf/${index}`,\n instanceLocation,\n );\n effective = mergeSchema(effective, res.effectiveSchema);\n }\n // Remove allOf to prevent re-evaluation during shallow validation\n const { allOf: _, ...rest } = effective;\n effective = rest;\n }\n\n // anyOf\n if (effective.anyOf) {\n for (const [index, subschema] of effective.anyOf.entries()) {\n const output = validator.validate(\n subschema,\n value,\n keywordLocation + `/anyOf/` + index,\n instanceLocation,\n );\n if (output.valid) {\n const res = resolveEffectiveSchema(\n validator,\n subschema,\n value,\n keywordLocation + `/anyOf/` + index,\n instanceLocation,\n );\n effective = mergeSchema(effective, res.effectiveSchema);\n break;\n }\n }\n // Remove anyOf to prevent re-evaluation during shallow validation\n const { anyOf: _, ...rest } = effective;\n effective = rest;\n }\n\n // oneOf\n if (effective.oneOf) {\n let validCount = 0;\n let lastValidSchema: Schema | null = null;\n for (const [index, subschema] of effective.oneOf.entries()) {\n const output = validator.validate(\n subschema,\n value,\n `${keywordLocation}/oneOf/${index}`,\n instanceLocation,\n );\n if (output.valid) {\n validCount++;\n lastValidSchema = subschema;\n }\n }\n if (validCount === 1 && lastValidSchema) {\n effective = mergeSchema(effective, lastValidSchema);\n }\n // Remove oneOf to prevent re-evaluation during shallow validation\n const { oneOf: _, ...rest } = effective;\n effective = rest;\n }\n\n // type - determine the effective type for rendering purposes\n let type: SchemaType = \"unknown\";\n if (effective.type) {\n const allowedTypes = Array.isArray(effective.type)\n ? effective.type\n : [effective.type];\n const matched = allowedTypes.find((t) => matchSchemaType(value, t));\n if (matched) {\n type = matched as SchemaType;\n } else {\n // Use first allowed type as the effective type for rendering\n type = allowedTypes[0] as SchemaType;\n }\n } else {\n type = detectSchemaType(value) as SchemaType;\n }\n\n // Perform shallow validation to get all errors\n const validationOutput = validator.validate(\n effective,\n value,\n keywordLocation,\n instanceLocation,\n { shallow: true },\n );\n\n return {\n effectiveSchema: effective,\n type,\n error: validationOutput.valid ? undefined : validationOutput,\n };\n}\n\nfunction mergeStrings(a?: string[], b?: string[]): string[] | undefined {\n if (a === undefined) return b;\n if (b === undefined) return a;\n const merged = Array.from(new Set([...a, ...b]));\n return merged.length === 0 ? undefined : merged;\n}\n\nfunction mergeType(\n a?: string[] | string,\n b?: string[] | string,\n): string[] | string | undefined {\n if (a === undefined) return b;\n if (b === undefined) return a;\n const arrayA = Array.isArray(a) ? a : [a];\n const arrayB = Array.isArray(b) ? b : [b];\n const merged = arrayA.filter((t) => arrayB.includes(t));\n if (merged.length === 0) return undefined;\n return merged.length === 1 ? merged[0] : merged;\n}\n\n/**\n * Merge schema arrays by concatenation (for allOf/anyOf/oneOf)\n */\nfunction mergeSchemaArrays(a?: Schema[], b?: Schema[]): Schema[] | undefined {\n if (a === undefined) return b;\n if (b === undefined) return a;\n // Concatenate both arrays\n return [...a, ...b];\n}\n\nexport function mergeSchema(base: Schema, override?: Schema): Schema {\n if (!override) return base;\n\n const merged: Schema = {\n ...base,\n ...override,\n };\n\n // $defs: merge definitions\n if (base.$defs || override.$defs) {\n merged.$defs = {\n ...base.$defs,\n ...override.$defs,\n };\n }\n\n // required: union of required fields\n const mergedRequired = mergeStrings(base.required, override.required);\n if (mergedRequired !== undefined) {\n merged.required = mergedRequired;\n }\n\n // type: intersection of types\n const mergedType = mergeType(base.type, override.type);\n if (mergedType !== undefined) {\n merged.type = mergedType;\n }\n\n // dependentRequired: merge objects\n if (base.dependentRequired || override.dependentRequired) {\n merged.dependentRequired = {\n ...base.dependentRequired,\n ...override.dependentRequired,\n };\n }\n\n // properties: merge objects (override takes precedence)\n if (base.properties || override.properties) {\n merged.properties = {\n ...base.properties,\n ...override.properties,\n };\n }\n\n // patternProperties: merge objects\n if (base.patternProperties || override.patternProperties) {\n merged.patternProperties = {\n ...base.patternProperties,\n ...override.patternProperties,\n };\n }\n\n // items: merge recursively\n if (base.items && override.items) {\n merged.items = mergeSchema(base.items, override.items);\n } else if (base.items) {\n merged.items = base.items;\n } else if (override.items) {\n merged.items = override.items;\n }\n\n // prefixItems: merge with pairwise merge\n if (base.prefixItems || override.prefixItems) {\n merged.prefixItems = [];\n const len = Math.max(\n base.prefixItems?.length || 0,\n override.prefixItems?.length || 0,\n );\n for (let i = 0; i < len; i++) {\n const baseSchema = base.prefixItems?.[i];\n const overrideSchema = override.prefixItems?.[i];\n if (baseSchema && overrideSchema) {\n merged.prefixItems.push(mergeSchema(baseSchema, overrideSchema));\n } else {\n const schema = baseSchema || overrideSchema;\n if (schema) {\n merged.prefixItems.push(schema);\n }\n }\n }\n }\n\n // allOf/anyOf/oneOf: concatenate arrays\n const combinatorKeywords = [\"allOf\", \"anyOf\", \"oneOf\"] as const;\n for (const keyword of combinatorKeywords) {\n const mergedArray = mergeSchemaArrays(base[keyword], override[keyword]);\n if (mergedArray !== undefined) {\n merged[keyword] = mergedArray;\n }\n }\n\n // if/then/else: override takes precedence (no merge, just override behavior)\n // Note: if both have if/then/else, the override's conditional logic replaces base's\n // This is intentional as conditional schemas are context-dependent\n\n // dependentSchemas: merge objects\n if (base.dependentSchemas || override.dependentSchemas) {\n merged.dependentSchemas = {\n ...base.dependentSchemas,\n ...override.dependentSchemas,\n };\n }\n\n // additionalProperties: override takes precedence\n // (already handled by spread, but be explicit about it)\n\n // not: override takes precedence\n // (already handled by spread)\n\n return merged;\n}\n","import type { Schema } from \"./type\";\nimport { parseJsonPointer, safeRegexTest } from \"./util\";\nimport { mergeSchema } from \"./effective\";\n\n/**\n * Configuration for schema utilities logging.\n * Set to null to disable warnings.\n */\nexport let schemaUtilLogger: {\n warn: (message: string) => void;\n} | null = {\n warn: (message: string) => console.warn(message),\n};\n\n/**\n * Set the logger for schema utilities.\n * Pass null to disable logging.\n */\nexport function setSchemaUtilLogger(\n logger: { warn: (message: string) => void } | null,\n): void {\n schemaUtilLogger = logger;\n}\n\n/**\n * Resolve a $ref reference within a root schema.\n * Supports:\n * - Internal references: #/$defs/Address, #/properties/name\n * - Does NOT support external URL references\n *\n * @param ref - The $ref value (e.g., \"#/$defs/Address\")\n * @param rootSchema - The root schema containing $defs\n * @param visited - Set of visited refs to detect circular references\n * @returns The resolved schema, or undefined if:\n * - The reference is external (not starting with #)\n * - The reference is circular\n * - The reference path doesn't exist in the schema\n */\nexport function resolveRef(\n ref: string,\n rootSchema: Schema,\n visited: Set<string> = new Set(),\n): Schema | undefined {\n // Only support internal references starting with #\n if (!ref.startsWith(\"#\")) {\n schemaUtilLogger?.warn(`External $ref not supported: ${ref}`);\n return undefined;\n }\n\n // Detect circular reference\n if (visited.has(ref)) {\n schemaUtilLogger?.warn(`Circular $ref detected: ${ref}`);\n return undefined;\n }\n visited.add(ref);\n\n // Parse the JSON Pointer part (after #)\n const pointer = ref.slice(1); // Remove leading #\n if (pointer === \"\" || pointer === \"/\") {\n // Reference to root schema itself\n return rootSchema;\n }\n\n // Navigate through the schema using JSON Pointer\n const segments = parseJsonPointer(pointer);\n let current: unknown = rootSchema;\n\n for (const segment of segments) {\n if (current === null || current === undefined) {\n return undefined;\n }\n if (typeof current !== \"object\") {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n\n if (current === null || current === undefined) {\n return undefined;\n }\n\n const resolved = current as Schema;\n\n // If the resolved schema also has a $ref, resolve it recursively\n if (resolved.$ref) {\n return resolveRef(resolved.$ref, rootSchema, visited);\n }\n\n return resolved;\n}\n\n/**\n * Dereference a schema by resolving any $ref it may contain.\n * The resolved schema is merged with any sibling keywords (JSON Schema 2019-09+ behavior).\n *\n * @param schema - The schema to dereference\n * @param rootSchema - The root schema for resolving references\n * @returns The dereferenced schema\n */\nexport function dereferenceSchema(schema: Schema, rootSchema: Schema): Schema {\n if (!schema.$ref) {\n return schema;\n }\n\n const resolved = resolveRef(schema.$ref, rootSchema);\n if (!resolved) {\n // If we can't resolve the ref, return the schema without the $ref\n // This allows partial functionality even with unresolved refs\n const { $ref: _, ...rest } = schema;\n return rest as Schema;\n }\n\n // Merge resolved schema with sibling properties (JSON Schema 2019-09+)\n // Sibling properties override the referenced schema\n const { $ref: _, ...siblings } = schema;\n return mergeSchema(resolved, siblings as Schema);\n}\n\n/**\n * Recursively dereference all $ref in a schema tree.\n * This should be called once at initialization to pre-process the entire schema.\n *\n * @param schema - The schema to dereference\n * @param rootSchema - The root schema for resolving references\n * @param processed - Map of already processed schemas to their results (for caching)\n * @param inProgress - Set of schemas currently being processed (for cycle detection)\n * @returns A new schema with all $refs resolved\n */\nexport function dereferenceSchemaDeep(\n schema: Schema,\n rootSchema: Schema,\n processed: WeakMap<object, Schema> = new WeakMap(),\n inProgress: WeakSet<object> = new WeakSet(),\n): Schema {\n // Check if we've already fully processed this schema (cache hit)\n const cached = processed.get(schema);\n if (cached !== undefined) {\n return cached;\n }\n\n // Detect circular reference: if we're currently processing this schema,\n // return the original to avoid infinite recursion\n if (inProgress.has(schema)) {\n // Return original schema to break the cycle\n // This preserves the $ref for later resolution if needed\n return schema;\n }\n\n // Mark as in-progress before processing children\n inProgress.add(schema);\n\n // First resolve any $ref at this level\n let result = dereferenceSchema(schema, rootSchema);\n\n // If dereferencing returned the same object, we need to create a copy to avoid mutation\n if (result === schema) {\n result = { ...schema };\n }\n\n // Recursively process all sub-schemas\n // Properties\n if (result.properties) {\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, subSchema]) => [\n key,\n dereferenceSchemaDeep(subSchema, rootSchema, processed, inProgress),\n ]),\n );\n }\n\n // Pattern Properties\n if (result.patternProperties) {\n result.patternProperties = Object.fromEntries(\n Object.entries(result.patternProperties).map(([key, subSchema]) => [\n key,\n dereferenceSchemaDeep(subSchema, rootSchema, processed, inProgress),\n ]),\n );\n }\n\n // Additional Properties\n if (\n result.additionalProperties &&\n typeof result.additionalProperties === \"object\"\n ) {\n result.additionalProperties = dereferenceSchemaDeep(\n result.additionalProperties,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // Items\n if (result.items) {\n result.items = dereferenceSchemaDeep(\n result.items,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // Prefix Items\n if (result.prefixItems) {\n result.prefixItems = result.prefixItems.map((s) =>\n dereferenceSchemaDeep(s, rootSchema, processed, inProgress),\n );\n }\n\n // Contains\n if (result.contains) {\n result.contains = dereferenceSchemaDeep(\n result.contains,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // allOf, anyOf, oneOf\n for (const keyword of [\"allOf\", \"anyOf\", \"oneOf\"] as const) {\n const subSchemas = result[keyword];\n if (subSchemas) {\n result[keyword] = subSchemas.map((s) =>\n dereferenceSchemaDeep(s, rootSchema, processed, inProgress),\n );\n }\n }\n\n // not\n if (result.not) {\n result.not = dereferenceSchemaDeep(\n result.not,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // if/then/else\n if (result.if) {\n result.if = dereferenceSchemaDeep(\n result.if,\n rootSchema,\n processed,\n inProgress,\n );\n }\n if (result.then) {\n result.then = dereferenceSchemaDeep(\n result.then,\n rootSchema,\n processed,\n inProgress,\n );\n }\n if (result.else) {\n result.else = dereferenceSchemaDeep(\n result.else,\n rootSchema,\n processed,\n inProgress,\n );\n }\n\n // dependentSchemas\n if (result.dependentSchemas) {\n result.dependentSchemas = Object.fromEntries(\n Object.entries(result.dependentSchemas).map(([key, subSchema]) => [\n key,\n dereferenceSchemaDeep(subSchema, rootSchema, processed, inProgress),\n ]),\n );\n }\n\n // $defs (also dereference definitions themselves)\n if (result.$defs) {\n result.$defs = Object.fromEntries(\n Object.entries(result.$defs).map(([key, subSchema]) => [\n key,\n dereferenceSchemaDeep(subSchema, rootSchema, processed, inProgress),\n ]),\n );\n }\n\n // Cache the fully processed result\n processed.set(schema, result);\n\n return result;\n}\n\n/**\n * Get the subschema for a specific property or array item.\n *\n * This function determines the appropriate schema for a given key within a parent schema.\n * It handles both object and array schemas, checking in the following priority order:\n *\n * For objects:\n * 1. properties - exact property match\n * 2. patternProperties - regex pattern match\n * 3. additionalProperties - fallback for unknown properties\n *\n * For arrays:\n * 1. prefixItems - positional tuple items\n * 2. items - schema for remaining array items\n *\n * @param schema - The parent schema to look up the subschema from\n * @param key - The property name (for objects) or index as string (for arrays)\n * @returns An object containing:\n * - schema: The resolved subschema, or empty object if not found\n * - keywordLocationToken: The JSON Schema keyword path (e.g., \"properties/name\", \"items\")\n *\n * @example\n * // Object property lookup\n * const result = getSubSchema({ properties: { name: { type: \"string\" } } }, \"name\");\n * // result.schema = { type: \"string\" }\n * // result.keywordLocationToken = \"properties/name\"\n *\n * @example\n * // Array item lookup\n * const result = getSubSchema({ items: { type: \"number\" } }, \"0\");\n * // result.schema = { type: \"number\" }\n * // result.keywordLocationToken = \"items\"\n */\nexport function getSubSchema(\n schema: Schema,\n key: string,\n): { schema: Schema; keywordLocationToken: string } {\n // Object properties\n if (schema.properties && schema.properties[key]) {\n return {\n schema: schema.properties[key],\n keywordLocationToken: `properties/${key}`,\n };\n }\n\n // Object pattern properties\n if (schema.patternProperties) {\n for (const [pattern, subschema] of Object.entries(\n schema.patternProperties,\n )) {\n if (safeRegexTest(pattern, key)) {\n return {\n schema: subschema,\n keywordLocationToken: `patternProperties/${pattern}`,\n };\n }\n }\n }\n\n // Object additional properties\n if (\n schema.additionalProperties !== undefined &&\n schema.additionalProperties !== false\n ) {\n return {\n schema:\n typeof schema.additionalProperties === \"object\"\n ? schema.additionalProperties\n : {},\n keywordLocationToken: \"additionalProperties\",\n };\n }\n\n // Array items\n if (schema.items || schema.prefixItems) {\n const index = parseInt(key, 10);\n if (!isNaN(index)) {\n if (schema.prefixItems && index < schema.prefixItems.length) {\n return {\n schema: schema.prefixItems[index],\n keywordLocationToken: `prefixItems/${index}`,\n };\n }\n if (schema.items) {\n return {\n schema: schema.items,\n keywordLocationToken: \"items\",\n };\n }\n }\n }\n\n return {\n schema: {},\n keywordLocationToken: \"\",\n };\n}\n","import type { Schema } from \"./type\";\n\n/**\n * Generate a default value for a schema based on its type and constraints.\n *\n * Priority order for determining the default value:\n * 1. const - if defined, returns the const value\n * 2. default - if defined, returns the default value\n * 3. Type-based defaults:\n * - string: \"\"\n * - number/integer: 0\n * - boolean: false\n * - null: null\n * - object: {} with required properties recursively initialized\n * - array: []\n *\n * For objects, only required properties are initialized with their default values.\n * If no type is specified but properties exist, the schema is treated as an object.\n *\n * If a value is provided, it will be used as the base and missing defaults will be filled in.\n *\n * @param schema - The JSON Schema to generate a default value for\n * @param value - Optional existing value to fill defaults into\n * @returns The generated default value, or undefined if type cannot be determined\n *\n * @example\n * getDefaultValue({ type: \"string\" }) // returns \"\"\n * getDefaultValue({ type: \"number\", default: 42 }) // returns 42\n * getDefaultValue({ const: \"fixed\" }) // returns \"fixed\"\n * getDefaultValue({\n * type: \"object\",\n * properties: { name: { type: \"string\" } },\n * required: [\"name\"]\n * }) // returns { name: \"\" }\n * getDefaultValue({ type: \"object\", properties: { a: { default: 1 } } }, {}) // returns { a: 1 }\n */\nexport function getDefaultValue(schema: Schema, value?: unknown): unknown {\n if (value === undefined) {\n if (schema.const !== undefined) return schema.const;\n if (schema.default !== undefined) return schema.default;\n }\n\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n\n if (type === \"object\" || (!type && schema.properties)) {\n let obj: Record<string, unknown>;\n if (value === undefined) {\n obj = {};\n } else if (typeof value === \"object\" && value !== null) {\n obj = value as Record<string, unknown>;\n } else {\n return value;\n }\n\n if (schema.properties) {\n for (const [key, subschema] of Object.entries(schema.properties)) {\n if (obj[key] !== undefined) {\n obj[key] = getDefaultValue(subschema, obj[key]);\n } else if (schema.required?.includes(key)) {\n obj[key] = getDefaultValue(subschema);\n }\n }\n }\n return obj;\n }\n\n if (type === \"array\") {\n let arr: unknown[];\n if (value === undefined) {\n arr = [];\n } else if (Array.isArray(value)) {\n arr = value;\n } else {\n return value;\n }\n\n if (schema.prefixItems) {\n schema.prefixItems.forEach((subschema, index) => {\n if (index < arr.length) {\n arr[index] = getDefaultValue(subschema, arr[index]);\n } else if (value === undefined) {\n arr.push(getDefaultValue(subschema));\n }\n });\n }\n\n if (value !== undefined && schema.items) {\n const startIndex = schema.prefixItems ? schema.prefixItems.length : 0;\n for (let i = startIndex; i < arr.length; i++) {\n arr[i] = getDefaultValue(schema.items, arr[i]);\n }\n }\n\n return arr;\n }\n\n if (value !== undefined) {\n return value;\n }\n\n switch (type) {\n case \"string\":\n return \"\";\n case \"number\":\n case \"integer\":\n return 0;\n case \"boolean\":\n return false;\n case \"null\":\n return null;\n default:\n return undefined;\n }\n}\n","import type { Schema } from \"./type\";\nimport { resolveAbsolutePath } from \"./util\";\n\n/**\n * Collect all dependencies for a node's schema.\n *\n * Key insight: We extract paths from condition keywords (if, oneOf, anyOf)\n * using extractReferencedPaths, but for then/else/allOf keywords, we recursively\n * call collectDependencies to ensure proper dependency isolation between\n * parent and child nodes.\n */\nexport function collectDependencies(\n schema: Schema,\n instanceLocation: string,\n): Set<string> {\n const deps = new Set<string>();\n\n // Handle required\n if (schema.required) {\n for (const req of schema.required) {\n deps.add(resolveAbsolutePath(instanceLocation, `/${req}`));\n }\n }\n\n // Handle dependentRequired\n if (schema.dependentRequired) {\n for (const [prop, reqs] of Object.entries(schema.dependentRequired)) {\n deps.add(resolveAbsolutePath(instanceLocation, `/${prop}`));\n for (const req of reqs) {\n deps.add(resolveAbsolutePath(instanceLocation, `/${req}`));\n }\n }\n }\n\n // Handle dependentSchemas\n if (schema.dependentSchemas) {\n for (const [prop, subSchema] of Object.entries(schema.dependentSchemas)) {\n deps.add(resolveAbsolutePath(instanceLocation, `/${prop}`));\n const subDeps = collectDependencies(subSchema, instanceLocation);\n subDeps.forEach((d) => deps.add(d));\n }\n }\n\n // Handle if-then-else\n if (schema.if) {\n // Extract paths from the if condition\n const relativePaths = extractReferencedPaths(schema.if, \"\");\n for (const relPath of relativePaths) {\n deps.add(resolveAbsolutePath(instanceLocation, relPath));\n }\n\n // Recursively extract from then/else which may have nested conditions\n if (schema.then) {\n const thenDeps = collectDependencies(schema.then, instanceLocation);\n thenDeps.forEach((d) => deps.add(d));\n }\n if (schema.else) {\n const elseDeps = collectDependencies(schema.else, instanceLocation);\n elseDeps.forEach((d) => deps.add(d));\n }\n }\n\n // Handle oneOf - each option may check different conditions\n // We need both direct paths (from condition checks) and nested dependencies\n if (schema.oneOf) {\n for (const subSchema of schema.oneOf) {\n // Extract direct referenced paths from the condition\n const relativePaths = extractReferencedPaths(subSchema, \"\");\n for (const relPath of relativePaths) {\n deps.add(resolveAbsolutePath(instanceLocation, relPath));\n }\n // Also recursively collect dependencies from nested conditions\n const subDeps = collectDependencies(subSchema, instanceLocation);\n subDeps.forEach((d) => deps.add(d));\n }\n }\n\n // Handle anyOf - same treatment as oneOf\n if (schema.anyOf) {\n for (const subSchema of schema.anyOf) {\n const relativePaths = extractReferencedPaths(subSchema, \"\");\n for (const relPath of relativePaths) {\n deps.add(resolveAbsolutePath(instanceLocation, relPath));\n }\n const subDeps = collectDependencies(subSchema, instanceLocation);\n subDeps.forEach((d) => deps.add(d));\n }\n }\n\n // Handle allOf (may contain conditions)\n if (schema.allOf) {\n for (const subSchema of schema.allOf) {\n const subDeps = collectDependencies(subSchema, instanceLocation);\n subDeps.forEach((d) => deps.add(d));\n }\n }\n\n return deps;\n}\n\n/**\n * Maximum recursion depth for extractReferencedPaths to prevent stack overflow\n */\nconst MAX_EXTRACT_DEPTH = 100;\n\n/**\n * Extract referenced paths from a conditional schema (if, oneOf, anyOf, etc.)\n * Returns paths relative to the current node\n *\n * @param conditionSchema - The schema to extract paths from\n * @param basePath - Base path for relative paths\n * @param depth - Current recursion depth (internal use)\n */\nexport function extractReferencedPaths(\n conditionSchema: Schema,\n basePath: string = \"\",\n depth: number = 0,\n): string[] {\n // Prevent stack overflow on deeply nested schemas\n if (depth > MAX_EXTRACT_DEPTH) {\n console.warn(\n `extractReferencedPaths: max depth (${MAX_EXTRACT_DEPTH}) exceeded at path: ${basePath}`,\n );\n return [];\n }\n\n const paths: string[] = [];\n\n // Schema is expected to be pre-dereferenced\n const schema = conditionSchema;\n\n // 1. properties - checking child properties\n if (schema.properties) {\n for (const key of Object.keys(schema.properties)) {\n const childPath = basePath ? `${basePath}/${key}` : `/${key}`;\n paths.push(childPath);\n // Recursively extract paths from nested conditions\n paths.push(\n ...extractReferencedPaths(schema.properties[key], childPath, depth + 1),\n );\n }\n }\n\n // 2. items - checking array elements\n if (schema.items && typeof schema.items === \"object\") {\n // items condition means dependency on the array itself\n paths.push(basePath || \"/\");\n paths.push(...extractReferencedPaths(schema.items, basePath, depth + 1));\n }\n\n // 3. prefixItems - checking specific indexed elements\n if (schema.prefixItems) {\n schema.prefixItems.forEach((itemSchema: Schema, index: number) => {\n const indexPath = basePath ? `${basePath}/${index}` : `/${index}`;\n paths.push(indexPath);\n paths.push(...extractReferencedPaths(itemSchema, indexPath, depth + 1));\n });\n }\n\n // 4. const/enum - value constraints at current path\n if (schema.const !== undefined || schema.enum) {\n if (basePath) {\n paths.push(basePath);\n }\n }\n\n // 5. type constraint\n if (schema.type && basePath) {\n paths.push(basePath);\n }\n\n // 6. Value constraints (minimum, maximum, minLength, maxLength, pattern, format)\n const valueConstraints = [\n \"minimum\",\n \"maximum\",\n \"exclusiveMinimum\",\n \"exclusiveMaximum\",\n \"minLength\",\n \"maxLength\",\n \"pattern\",\n \"format\",\n \"minItems\",\n \"maxItems\",\n \"uniqueItems\",\n \"minProperties\",\n \"maxProperties\",\n ];\n for (const constraint of valueConstraints) {\n if (\n (schema as Record<string, unknown>)[constraint] !== undefined &&\n basePath\n ) {\n paths.push(basePath);\n break;\n }\n }\n\n // 7. required\n if (schema.required) {\n for (const req of schema.required) {\n paths.push(basePath ? `${basePath}/${req}` : `/${req}`);\n }\n }\n\n // 8. dependentRequired\n if (schema.dependentRequired) {\n for (const [prop, reqs] of Object.entries(schema.dependentRequired)) {\n paths.push(basePath ? `${basePath}/${prop}` : `/${prop}`);\n for (const req of reqs) {\n paths.push(basePath ? `${basePath}/${req}` : `/${req}`);\n }\n }\n }\n\n // 9. dependentSchemas\n if (schema.dependentSchemas) {\n for (const [prop, subSchema] of Object.entries(schema.dependentSchemas)) {\n paths.push(basePath ? `${basePath}/${prop}` : `/${prop}`);\n paths.push(...extractReferencedPaths(subSchema, basePath, depth + 1));\n }\n }\n\n // 10. Nested conditions - recursive handling\n if (schema.if) {\n paths.push(...extractReferencedPaths(schema.if, basePath, depth + 1));\n }\n if (schema.then) {\n paths.push(...extractReferencedPaths(schema.then, basePath, depth + 1));\n }\n if (schema.else) {\n paths.push(...extractReferencedPaths(schema.else, basePath, depth + 1));\n }\n\n // 8. allOf/anyOf/oneOf\n for (const keyword of [\"allOf\", \"anyOf\", \"oneOf\"] as const) {\n const subSchemas = schema[keyword];\n if (subSchemas) {\n for (const subSchema of subSchemas) {\n paths.push(...extractReferencedPaths(subSchema, basePath, depth + 1));\n }\n }\n }\n\n // 9. dependentSchemas - when a property exists, apply additional schema\n if (schema.dependentSchemas) {\n for (const [key, subSchema] of Object.entries(schema.dependentSchemas)) {\n const keyPath = basePath ? `${basePath}/${key}` : `/${key}`;\n // The presence of the key triggers the dependent schema\n paths.push(keyPath);\n // The dependent schema may reference other paths\n paths.push(...extractReferencedPaths(subSchema, basePath, depth + 1));\n }\n }\n\n // 10. contains - dependency on array elements\n if (schema.contains) {\n paths.push(basePath || \"/\");\n paths.push(...extractReferencedPaths(schema.contains, basePath, depth + 1));\n }\n\n // Deduplicate\n return [...new Set(paths)];\n}\n","import type { Schema, SchemaType, Output } from \"./type\";\nimport {\n getJsonPointer,\n jsonPointerEscape,\n jsonPointerJoin,\n setJsonPointer,\n removeJsonPointer,\n deepEqual,\n parseJsonPointer,\n safeRegexTest,\n} from \"./util\";\nimport { resolveEffectiveSchema } from \"./effective\";\nimport { dereferenceSchemaDeep, getSubSchema } from \"./schema-util\";\nimport { getDefaultValue } from \"./default\";\nimport { normalizeSchema } from \"./normalize\";\nimport type { Validator } from \"./validate\";\nimport { collectDependencies } from \"./dependency\";\n\n/**\n * Represents a node in the schema tree.\n * Each node corresponds to a location in both the schema and the instance data.\n */\nexport interface FieldNode {\n type: SchemaType;\n schema: Schema; // effective schema\n originalSchema: Schema;\n error?: Output;\n children?: FieldNode[];\n instanceLocation: string;\n keywordLocation: string;\n version: number;\n // Absolute paths this node's effective schema depends on\n dependencies?: Set<string>;\n\n // Whether this node can be removed (array items, additionalProperties, patternProperties)\n canRemove: boolean;\n // Whether this node can have children added (arrays with items, objects with additionalProperties)\n canAdd: boolean;\n}\n\n/** The canonical representation for root path */\nconst ROOT_PATH = \"\";\n\n/**\n * Normalize path to use consistent root representation.\n * Converts \"#\" to \"\" (empty string) for internal consistency.\n */\nfunction normalizeRootPath(path: string): string {\n return path === \"#\" ? ROOT_PATH : path;\n}\n\nexport type SchemaChangeEvent = {\n type: \"schema\" | \"value\" | \"error\";\n path: string;\n};\n\nexport class SchemaRuntime {\n private validator: Validator;\n\n private watchers: Record<string, Set<(e: SchemaChangeEvent) => void>> = {};\n private globalWatchers: Set<(e: SchemaChangeEvent) => void> = new Set();\n\n // Reverse dependency index: path -> nodes that depend on this path's value\n private dependentsMap: Map<string, Set<FieldNode>> = new Map();\n\n // Track nodes currently being updated to prevent circular updates\n private updatingNodes: Set<string> = new Set();\n\n public root: FieldNode;\n private value: unknown;\n private version: number = 0;\n private rootSchema: Schema = {};\n\n /**\n * Create a new SchemaRuntime instance.\n *\n * @param validator - The validator instance for schema validation\n * @param schema - The JSON Schema definition (will be normalized and dereferenced)\n * @param value - The initial data value to manage\n *\n * @example\n * const validator = new Validator();\n * const schema = { type: \"object\", properties: { name: { type: \"string\" } } };\n * const runtime = new SchemaRuntime(validator, schema, { name: \"Alice\" });\n */\n constructor(validator: Validator, schema: Schema | unknown, value: unknown) {\n this.validator = validator;\n this.value = value;\n\n const normalized = normalizeSchema(schema);\n\n this.rootSchema = dereferenceSchemaDeep(normalized, normalized);\n this.root = this.createEmptyNode(\"\", \"#\");\n this.buildNode(this.root, this.rootSchema);\n this.notify({ type: \"schema\", path: ROOT_PATH });\n }\n\n /**\n * Register a node as dependent on a path\n */\n private registerDependent(path: string, node: FieldNode): void {\n let dependents = this.dependentsMap.get(path);\n if (!dependents) {\n dependents = new Set();\n this.dependentsMap.set(path, dependents);\n }\n dependents.add(node);\n }\n\n /**\n * Unregister a node from a dependency path\n */\n private unregisterDependent(path: string, node: FieldNode): void {\n const dependents = this.dependentsMap.get(path);\n if (dependents) {\n dependents.delete(node);\n if (dependents.size === 0) {\n this.dependentsMap.delete(path);\n }\n }\n }\n\n /**\n * Unregister all dependencies for a node and its children.\n * Note: Does NOT clean up external watchers - callers are responsible\n * for calling unsubscribe() when they no longer need updates.\n */\n private unregisterNodeDependencies(node: FieldNode): void {\n // Unregister this node's dependencies\n if (node.dependencies) {\n for (const depPath of node.dependencies) {\n this.unregisterDependent(depPath, node);\n }\n }\n\n // Recursively unregister children's dependencies\n if (node.children) {\n for (const child of node.children) {\n this.unregisterNodeDependencies(child);\n }\n }\n }\n\n /**\n * Create an empty FieldNode with default values.\n */\n private createEmptyNode(\n instanceLocation: string,\n keywordLocation: string,\n ): FieldNode {\n return {\n type: \"null\",\n schema: {},\n version: -1,\n instanceLocation,\n keywordLocation,\n originalSchema: {},\n canRemove: false,\n canAdd: false,\n children: [],\n };\n }\n\n /**\n * Reconcile the tree starting from the specified path.\n * Uses findNearestExistingNode to find the target node (or parent if path doesn't exist).\n * Only rebuilds the affected subtree, not the entire tree.\n */\n private reconcile(path: string): void {\n const normalizedPath = normalizeRootPath(path);\n\n // Find target node (or nearest parent)\n const targetNode = this.findNearestExistingNode(normalizedPath);\n if (!targetNode) {\n return;\n }\n\n // Build node from target path\n this.buildNode(targetNode, targetNode.originalSchema);\n }\n\n /**\n * Get the current version number.\n * The version increments on every notify call (value, schema, or error changes).\n * Useful for detecting if the runtime state has changed.\n *\n * @returns The current version number\n */\n getVersion(): number {\n return this.version;\n }\n\n /**\n * Subscribe to changes at a specific path.\n * The callback is invoked when the value, schema, or error at the path changes.\n *\n * @param path - The JSON Pointer path to watch (e.g., \"/user/name\", \"\" for root)\n * @param cb - Callback function invoked with the change event\n * @returns Unsubscribe function to remove the listener\n *\n * @example\n * const unsubscribe = runtime.subscribe(\"/name\", (event) => {\n * console.log(`${event.type} changed at ${event.path}`);\n * });\n * // Later: unsubscribe();\n */\n subscribe(path: string, cb: (e: SchemaChangeEvent) => void): () => void {\n const normalizedPath = normalizeRootPath(path);\n if (!this.watchers[normalizedPath]) {\n this.watchers[normalizedPath] = new Set();\n }\n this.watchers[normalizedPath].add(cb);\n return () => {\n const watcherSet = this.watchers[normalizedPath];\n if (watcherSet) {\n watcherSet.delete(cb);\n // Clean up empty watcher sets to prevent memory leaks\n if (watcherSet.size === 0) {\n delete this.watchers[normalizedPath];\n }\n }\n };\n }\n\n /**\n * Subscribe to all events in the runtime.\n * The callback is invoked for any change at any path.\n *\n * @param cb - Callback function invoked with every change event\n * @returns Unsubscribe function to remove the listener\n */\n subscribeAll(cb: (e: SchemaChangeEvent) => void): () => void {\n this.globalWatchers.add(cb);\n return () => {\n this.globalWatchers.delete(cb);\n };\n }\n\n /**\n * Emit a change event to all relevant subscribers.\n * Increments the version number and notifies both path-specific and global watchers.\n *\n * @param event - The change event containing type and path\n */\n notify(event: SchemaChangeEvent) {\n this.version++;\n\n const normalizedPath = normalizeRootPath(event.path);\n const watchers = this.watchers[normalizedPath];\n if (watchers) {\n for (const cb of watchers) {\n try {\n cb(event);\n } catch (err) {\n console.error(\"SchemaRuntime: watcher callback error:\", err);\n }\n }\n }\n\n // Call global watchers\n for (const cb of this.globalWatchers) {\n try {\n cb(event);\n } catch (err) {\n console.error(\"SchemaRuntime: global watcher callback error:\", err);\n }\n }\n }\n\n /**\n * Update the entire schema.\n * This triggers a full rebuild of the node tree while preserving the current value.\n */\n setSchema(schema: Schema | unknown): void {\n const normalized = normalizeSchema(schema);\n this.rootSchema = dereferenceSchemaDeep(normalized, normalized);\n // Reinitialize root node with new schema\n this.root = this.createEmptyNode(\"\", \"#\");\n this.buildNode(this.root, this.rootSchema);\n this.notify({ type: \"schema\", path: ROOT_PATH });\n }\n\n /**\n * Get the value at a specific path.\n *\n * @param path - The JSON Pointer path (e.g., \"/user/name\", \"\" for root)\n * @returns The value at the path, or undefined if not found\n *\n * @example\n * runtime.getValue(\"\"); // returns entire root value\n * runtime.getValue(\"/name\"); // returns value at /name\n */\n getValue(path: string): unknown {\n const normalizedPath = normalizeRootPath(path);\n if (normalizedPath === ROOT_PATH) return this.value;\n return getJsonPointer(this.value, normalizedPath);\n }\n\n /**\n * Remove a node at the specified path.\n * This deletes the value from the data structure (array splice or object delete).\n * @param path - The path to remove\n * @returns true if successful, false if the path cannot be removed\n */\n removeValue(path: string): boolean {\n const normalizedPath = normalizeRootPath(path);\n if (normalizedPath === ROOT_PATH) {\n // Cannot remove root\n return false;\n }\n\n // Check if the node exists and can be removed\n const node = this.findNode(normalizedPath);\n if (!node || !node.canRemove) {\n return false;\n }\n\n // Remove the value\n const success = removeJsonPointer(this.value, normalizedPath);\n if (!success) {\n return false;\n }\n\n // Find parent path for reconciliation\n const lastSlash = normalizedPath.lastIndexOf(\"/\");\n const parentPath =\n lastSlash <= 0 ? ROOT_PATH : normalizedPath.substring(0, lastSlash);\n\n // Reconcile from parent to rebuild children\n this.reconcile(parentPath);\n this.notify({ type: \"value\", path: parentPath });\n return true;\n }\n\n /**\n * Add a new child to an array or object at the specified parent path.\n * For arrays, appends a new item with default value based on items schema.\n * For objects, adds a new property with the given key and default value based on additionalProperties schema.\n * @param parentPath - The path to the parent array or object\n * @param key - For objects: the property key. For arrays: optional, ignored (appends to end)\n * @param initialValue - Optional initial value to set. If not provided, uses default from schema.\n * @returns true if successful, false if cannot add\n */\n addValue(parentPath: string, key?: string, initialValue?: unknown): boolean {\n const normalizedPath = normalizeRootPath(parentPath);\n const parentNode = this.findNode(normalizedPath);\n\n if (!parentNode || !parentNode.canAdd) {\n return false;\n }\n\n const parentValue = this.getValue(normalizedPath);\n const parentSchema = parentNode.schema;\n\n if (parentNode.type === \"array\" && Array.isArray(parentValue)) {\n // Add new item to array\n const newIndex = parentValue.length;\n const { schema: subschema, keywordLocationToken } = getSubSchema(\n parentSchema,\n String(newIndex),\n );\n // cannot add if no schema found\n if (!keywordLocationToken) {\n return false;\n }\n const defaultValue =\n initialValue !== undefined ? initialValue : getDefaultValue(subschema);\n const itemPath = jsonPointerJoin(normalizedPath, String(newIndex));\n return this.setValue(itemPath, defaultValue);\n } else if (\n parentNode.type === \"object\" &&\n parentValue &&\n typeof parentValue === \"object\"\n ) {\n // Add new property to object\n if (!key) {\n return false;\n }\n const { schema: subschema, keywordLocationToken } = getSubSchema(\n parentSchema,\n key,\n );\n // cannot add if no schema found\n if (!keywordLocationToken) {\n return false;\n }\n const defaultValue =\n initialValue !== undefined ? initialValue : getDefaultValue(subschema);\n const propertyPath = jsonPointerJoin(normalizedPath, key);\n return this.setValue(propertyPath, defaultValue);\n }\n\n return false;\n }\n\n /**\n * Set the value at a specific path.\n * Creates intermediate containers (objects/arrays) as needed.\n * Triggers reconciliation and notifies subscribers.\n *\n * @param path - The JSON Pointer path (e.g., \"/user/name\", \"\" for root)\n * @param value - The new value to set\n * @returns true if successful, false if the path cannot be set\n *\n * @example\n * runtime.setValue(\"/name\", \"Bob\"); // set name to \"Bob\"\n * runtime.setValue(\"\", { name: \"Alice\" }); // replace entire root value\n */\n setValue(path: string, value: unknown): boolean {\n const normalizedPath = normalizeRootPath(path);\n\n // Update value\n if (normalizedPath === ROOT_PATH) {\n this.value = value;\n } else {\n const success = setJsonPointer(this.value, normalizedPath, value);\n if (!success) return false;\n }\n\n // Reconcile and notify\n this.reconcile(normalizedPath);\n this.notify({ type: \"value\", path: normalizedPath });\n return true;\n }\n\n /**\n * Find the FieldNode at a specific path.\n * Returns the node tree representation that includes schema, type, error, and children.\n *\n * @param path - The JSON Pointer path (e.g., \"/user/name\", \"\" for root)\n * @returns The FieldNode at the path, or undefined if not found\n *\n * @example\n * const node = runtime.findNode(\"/name\");\n * console.log(node?.schema, node?.type, node?.error);\n */\n findNode(path: string): FieldNode | undefined {\n const normalizedPath = normalizeRootPath(path);\n // Handle root node queries\n if (normalizedPath === ROOT_PATH) return this.root;\n\n const segments = parseJsonPointer(normalizedPath);\n\n let current: FieldNode | undefined = this.root;\n for (const segment of segments) {\n if (!current?.children) return undefined;\n\n // Build the expected exact path for this child\n const expectedPath = jsonPointerJoin(current.instanceLocation, segment);\n const found: FieldNode | undefined = current.children?.find(\n (child) => child.instanceLocation === expectedPath,\n );\n\n if (!found) return undefined;\n current = found;\n }\n\n return current;\n }\n\n private findNearestExistingNode(path: string): FieldNode | undefined {\n const normalizedPath = normalizeRootPath(path);\n let currentPath = normalizedPath;\n\n while (currentPath !== ROOT_PATH) {\n const node = this.findNode(currentPath);\n if (node) return node;\n\n const lastSlash = currentPath.lastIndexOf(\"/\");\n currentPath =\n lastSlash <= 0 ? ROOT_PATH : currentPath.substring(0, lastSlash);\n }\n\n return this.root;\n }\n\n /**\n * Update node dependencies when schema changes.\n * Unregisters old dependencies and registers new ones.\n */\n private updateNodeDependencies(node: FieldNode, schema: Schema): void {\n const { instanceLocation } = node;\n\n node.originalSchema = schema;\n const dependencies = collectDependencies(schema, instanceLocation);\n\n // Unregister old dependencies\n for (const depPath of node.dependencies || []) {\n this.unregisterDependent(depPath, node);\n }\n\n node.dependencies = dependencies;\n\n // Register new dependencies\n for (const depPath of dependencies) {\n this.registerDependent(depPath, node);\n }\n }\n\n /**\n * Apply default values when effective schema changes.\n * This handles cases like if-then-else where new properties with defaults\n * may appear when conditions change.\n *\n * @param instanceLocation - The path to the node\n * @param newSchema - The new effective schema\n * @param type - The schema type\n */\n private applySchemaDefaults(\n instanceLocation: string,\n newSchema: Schema,\n type: SchemaType,\n ): void {\n const value = this.getValue(instanceLocation);\n\n if (type === \"object\" && newSchema.properties) {\n const obj =\n value && typeof value === \"object\"\n ? (value as Record<string, unknown>)\n : null;\n if (!obj) return;\n\n for (const [key, subschema] of Object.entries(newSchema.properties)) {\n // Fill defaults for properties that don't have a value yet\n // This applies when switching branches (if-then-else) where\n // the new branch may have different defaults\n const hasValue = obj[key] !== undefined;\n\n if (!hasValue) {\n const defaultValue = getDefaultValue(subschema);\n if (defaultValue !== undefined) {\n const propertyPath = jsonPointerJoin(instanceLocation, key);\n setJsonPointer(this.value, propertyPath, defaultValue);\n }\n }\n }\n\n return;\n }\n\n if (type === \"array\" && newSchema.prefixItems) {\n const arr = Array.isArray(value) ? value : null;\n if (!arr) return;\n\n // Fill defaults for prefixItems positions that don't have values\n for (let i = 0; i < newSchema.prefixItems.length; i++) {\n if (arr[i] === undefined) {\n const defaultValue = getDefaultValue(newSchema.prefixItems[i]);\n if (defaultValue !== undefined) {\n const itemPath = jsonPointerJoin(instanceLocation, String(i));\n setJsonPointer(this.value, itemPath, defaultValue);\n }\n }\n }\n }\n }\n\n /**\n * Build children for object and array nodes.\n * Reuses existing child nodes where possible.\n */\n private buildNodeChildren(\n node: FieldNode,\n value: unknown,\n options: {\n updatedNodes?: Set<string>;\n },\n ): void {\n const { keywordLocation, instanceLocation } = node;\n const effectiveSchema = node.schema;\n const type = node.type;\n\n // Build children map for reuse\n const oldChildrenMap = new Map<string, FieldNode>();\n if (node.children) {\n for (const child of node.children) {\n oldChildrenMap.set(child.instanceLocation, child);\n }\n }\n\n const newChildren: FieldNode[] = [];\n\n const processChild = (\n childKey: string,\n childSchema: Schema,\n childkeywordLocation: string,\n canRemove: boolean = false,\n ) => {\n const childinstanceLocation = jsonPointerJoin(instanceLocation, childKey);\n\n // Reuse or create child node\n let childNode = oldChildrenMap.get(childinstanceLocation);\n if (childNode) {\n oldChildrenMap.delete(childinstanceLocation);\n childNode.keywordLocation = childkeywordLocation;\n } else {\n childNode = this.createEmptyNode(\n childinstanceLocation,\n childkeywordLocation,\n );\n }\n\n childNode.canRemove = canRemove;\n this.buildNode(childNode, childSchema, options);\n newChildren.push(childNode);\n };\n\n switch (type) {\n case \"object\": {\n const valueKeys =\n value && typeof value === \"object\" ? Object.keys(value) : [];\n const processedKeys = new Set<string>();\n\n // Set canAdd based on additionalProperties\n node.canAdd = !!effectiveSchema.additionalProperties;\n\n // Process properties (cannot be removed)\n if (effectiveSchema.properties) {\n for (const [key, subschema] of Object.entries(\n effectiveSchema.properties,\n )) {\n processedKeys.add(key);\n processChild(\n key,\n subschema,\n `${keywordLocation}/properties/${key}`,\n false,\n );\n }\n }\n\n // Process patternProperties (can be removed)\n if (effectiveSchema.patternProperties) {\n for (const [pattern, subschema] of Object.entries(\n effectiveSchema.patternProperties,\n )) {\n for (const key of valueKeys) {\n if (safeRegexTest(pattern, key) && !processedKeys.has(key)) {\n processedKeys.add(key);\n processChild(\n key,\n subschema,\n `${keywordLocation}/patternProperties/${jsonPointerEscape(pattern)}`,\n true,\n );\n }\n }\n }\n }\n\n // Process additionalProperties (can be removed)\n if (effectiveSchema.additionalProperties) {\n const subschema =\n typeof effectiveSchema.additionalProperties === \"object\"\n ? effectiveSchema.additionalProperties\n : {};\n\n for (const key of valueKeys) {\n if (!processedKeys.has(key)) {\n processChild(\n key,\n subschema,\n `${keywordLocation}/additionalProperties`,\n true,\n );\n }\n }\n }\n break;\n }\n case \"array\": {\n // Set canAdd based on items schema\n node.canAdd = !!effectiveSchema.items;\n\n if (Array.isArray(value)) {\n let prefixItemsLength = 0;\n\n // Process prefixItems (cannot be removed)\n if (effectiveSchema.prefixItems) {\n prefixItemsLength = effectiveSchema.prefixItems.length;\n for (\n let i = 0;\n i < Math.min(value.length, prefixItemsLength);\n i++\n ) {\n processChild(\n String(i),\n effectiveSchema.prefixItems[i],\n `${keywordLocation}/prefixItems/${i}`,\n false,\n );\n }\n }\n\n // Process items (can be removed)\n if (effectiveSchema.items && value.length > prefixItemsLength) {\n for (let i = prefixItemsLength; i < value.length; i++) {\n processChild(\n String(i),\n effectiveSchema.items,\n `${keywordLocation}/items`,\n true,\n );\n }\n }\n }\n break;\n }\n }\n\n // Cleanup removed children\n for (const oldChild of oldChildrenMap.values()) {\n this.unregisterNodeDependencies(oldChild);\n }\n\n node.children = newChildren;\n }\n\n /**\n * Build/update a FieldNode in place.\n * Updates the node's schema, type, error, and children based on the current value.\n * @param schema - Optional. If provided, updates node.originalSchema. Otherwise uses existing.\n */\n private buildNode(\n node: FieldNode,\n schema?: Schema,\n options: {\n updatedNodes?: Set<string>;\n } = {},\n ): void {\n const { keywordLocation, instanceLocation } = node;\n const value = this.getValue(instanceLocation);\n\n // Circular update protection\n if (this.updatingNodes.has(instanceLocation)) {\n return;\n }\n\n // Track updated nodes to prevent duplicate updates\n const updatedNodes = options.updatedNodes || new Set<string>();\n if (updatedNodes.has(instanceLocation)) {\n return;\n }\n\n this.updatingNodes.add(instanceLocation);\n\n try {\n // Update dependencies if schema changed\n const schemaChanged =\n schema !== undefined && !deepEqual(schema, node.originalSchema);\n if (schemaChanged) {\n this.updateNodeDependencies(node, schema);\n }\n\n // Resolve effective schema based on current value\n const { type, effectiveSchema, error } = resolveEffectiveSchema(\n this.validator,\n node.originalSchema,\n value,\n keywordLocation,\n instanceLocation,\n );\n\n // Detect changes for notifications\n const effectiveSchemaChanged =\n !deepEqual(effectiveSchema, node.schema) || type !== node.type;\n const errorChanged = !deepEqual(error, node.error);\n\n // Apply defaults when effective schema changes (e.g., if-then-else branch switch)\n // Child nodes will be built after and will send their own notifications\n if (effectiveSchemaChanged) {\n this.applySchemaDefaults(instanceLocation, effectiveSchema, type);\n }\n\n // Update node state\n node.schema = effectiveSchema;\n node.type = type;\n node.error = error;\n node.version++;\n\n // Build children - pass updatedNodes to ensure proper tracking\n // Re-fetch value in case defaults were applied\n const currentValue = this.getValue(instanceLocation);\n this.buildNodeChildren(node, currentValue, { ...options, updatedNodes });\n\n // Send notifications for this node only\n // Child nodes handle their own notifications in buildNodeChildren -> buildNode\n if (effectiveSchemaChanged) {\n this.notify({ type: \"schema\", path: instanceLocation });\n }\n if (errorChanged) {\n this.notify({ type: \"error\", path: instanceLocation });\n }\n\n // Mark this node as updated\n updatedNodes.add(instanceLocation);\n\n // Propagate updates to dependent nodes\n const dependentNodes = this.dependentsMap.get(instanceLocation);\n if (dependentNodes) {\n for (const dependentNode of dependentNodes) {\n this.buildNode(dependentNode, undefined, {\n ...options,\n updatedNodes,\n });\n }\n }\n } finally {\n this.updatingNodes.delete(instanceLocation);\n }\n }\n}\n"]}