xml-sax-ts 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -46
- package/dist/index.cjs +273 -118
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +67 -28
- package/dist/index.d.ts +67 -28
- package/dist/index.js +263 -119
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["attributes","tag","split","DEFAULT_OPTIONS","indent","inner"],"mappings":";;;AAAA,IAAM,MAAM,OAAO,OAAA,KAAY,cAAc,OAAA,CAAQ,GAAA,CAAI,aAAa,YAAA,GAAe,IAAA;AAE9E,SAAS,MAAA,CAAO,WAAoB,OAAA,EAAuB;AAChE,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAE,CAAA;AAAA,EAChD;AACF;;;ACTO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EAKrC,WAAA,CAAY,OAAA,EAAiB,MAAA,EAAgB,IAAA,EAAc,MAAA,EAAgB;AACzE,IAAA,KAAA,CAAM,GAAG,OAAO,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;;;ACVO,SAAS,cAAA,CAAe,OAAe,OAAA,EAA0C;AACtF,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAClC,EAAA,IAAI,aAAa,EAAA,EAAI;AACnB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,CAAA,GAAI,CAAA;AAER,EAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AAChC,IAAA,IAAI,QAAQ,EAAA,EAAI;AACd,MAAA,IAAI,MAAM,CAAA,EAAG;AACX,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAI,KAAA,CAAM,MAAA,GAAS,SAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA;AAAA,IACtD;AAEA,IAAA,IAAI,MAAM,CAAA,EAAG;AACX,MAAA,MAAA,IAAU,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,MAAM,CAAC,CAAA;AACvC,IAAA,IAAI,SAAS,EAAA,EAAI;AACf,MAAA,MAAM,MAAM,IAAI,WAAA,CAAY,qBAAA,EAAuB,GAAA,EAAK,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,GAAG,CAAA;AACb,MAAA,MAAM,GAAA;AAAA,IACR;AAEA,IAAA,IAAI,OAAA;AACJ,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AAE5B,IAAA,IAAI,WAAW,GAAA,EAAK;AAClB,MAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,KAAA,EAAO,GAAA,GAAM,GAAG,IAAI,CAAA;AACvD,MAAA,OAAA,GAAU,OAAA,KAAY,MAAA,GAAY,MAAA,GAAY,eAAA,CAAgB,OAAO,CAAA;AAAA,IACvE,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,iBAAA,CAAkB,KAAA,EAAO,GAAA,GAAM,CAAA,EAAG,IAAI,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,GAAA,GAAM,GAAG,IAAI,CAAA;AACxC,MAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,CAAA,iBAAA,EAAoB,MAAM,CAAA,CAAA,CAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AACpE,MAAA,OAAA,GAAU,GAAG,CAAA;AACb,MAAA,MAAM,GAAA;AAAA,IACR;AAEA,IAAA,MAAA,IAAU,OAAA;AACV,IAAA,CAAA,GAAI,IAAA,GAAO,CAAA;AAAA,EACb;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,KAAA,EAAe,KAAA,EAAe,GAAA,EAAiC;AACxF,EAAA,MAAM,MAAM,GAAA,GAAM,KAAA;AAClB,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,IAAI,KAAA,CAAM,KAAK,CAAA,KAAM,GAAA,IAAO,MAAM,KAAA,GAAQ,CAAC,MAAM,GAAA,EAAK;AACpD,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,KAAK,CAAA,KAAM,GAAA,IAAO,MAAM,KAAA,GAAQ,CAAC,MAAM,GAAA,EAAK;AACpD,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,IAAI,KAAA,CAAM,KAAK,CAAA,KAAM,GAAA,IAAO,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,KAAM,GAAA,IAAO,KAAA,CAAM,KAAA,GAAQ,CAAC,MAAM,GAAA,EAAK;AAChF,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,MAAM,YACJ,KAAA,CAAM,KAAK,MAAM,GAAA,IAAO,KAAA,CAAM,QAAQ,CAAC,CAAA,KAAM,GAAA,IAAO,KAAA,CAAM,QAAQ,CAAC,CAAA,KAAM,OAAO,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,KAAM,GAAA;AACvG,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,MAAM,YACJ,KAAA,CAAM,KAAK,MAAM,GAAA,IAAO,KAAA,CAAM,QAAQ,CAAC,CAAA,KAAM,GAAA,IAAO,KAAA,CAAM,QAAQ,CAAC,CAAA,KAAM,OAAO,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,KAAM,GAAA;AACvG,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,KAAA,EAAe,KAAA,EAAe,GAAA,EAAiC;AACzF,EAAA,IAAI,SAAS,GAAA,EAAK;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAA,GAAI,KAAA;AACR,EAAA,IAAI,KAAA,GAAQ,EAAA;AAEZ,EAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,EAAK;AACpC,IAAA,KAAA,GAAQ,EAAA;AACR,IAAA,CAAA,IAAK,CAAA;AAAA,EACP;AAEA,EAAA,IAAI,KAAK,GAAA,EAAK;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,OAAO,CAAA,GAAI,GAAA,EAAK,CAAA,IAAK,CAAA,EAAG;AACtB,IAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,IAAA,IAAI,OAAO,MAAA,EAAW;AACpB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAQ,KAAA,KAAU,EAAA,GAAK,SAAS,EAAE,CAAA,GAAI,aAAa,EAAE,CAAA;AAC3D,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,KAAA,GAAQ,QAAQ,KAAA,GAAQ,KAAA;AAAA,EAC1B;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,aAAa,EAAA,EAAoB;AACxC,EAAA,MAAM,IAAA,GAAO,EAAA,CAAG,UAAA,CAAW,CAAC,CAAA,GAAI,EAAA;AAChC,EAAA,IAAI,IAAA,GAAO,CAAA,IAAK,IAAA,GAAO,CAAA,EAAG;AACxB,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,SAAS,EAAA,EAAoB;AACpC,EAAA,MAAM,IAAA,GAAO,EAAA,CAAG,UAAA,CAAW,CAAC,CAAA;AAC5B,EAAA,IAAI,IAAA,IAAQ,EAAA,IAAM,IAAA,IAAQ,EAAA,EAAI;AAC5B,IAAA,OAAO,IAAA,GAAO,EAAA;AAAA,EAChB;AACA,EAAA,IAAI,IAAA,IAAQ,EAAA,IAAM,IAAA,IAAQ,EAAA,EAAI;AAC5B,IAAA,OAAO,IAAA,GAAO,EAAA;AAAA,EAChB;AACA,EAAA,IAAI,IAAA,IAAQ,EAAA,IAAM,IAAA,IAAQ,GAAA,EAAK;AAC7B,IAAA,OAAO,IAAA,GAAO,EAAA;AAAA,EAChB;AACA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,gBAAgB,SAAA,EAAuC;AAC9D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,GAAY,CAAA,IAAK,SAAA,GAAY,OAAA,EAAU;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,IAAa,KAAA,IAAU,SAAA,IAAa,KAAA,EAAQ;AAC9C,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA,CAAO,cAAc,SAAS,CAAA;AACvC;AAEO,SAAS,qBAAqB,IAAA,EAA+C;AAClF,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AACpC,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,EAAA,EAAG;AAAA,EACjC;AAEA,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,OAAA,GAAU,CAAC,CAAA,EAAG;AACpC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA;AAAA,MAC3B,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,OAAO;AAAA,KAC3B;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,EAAA,EAAG;AACjC;;;ACjJA,IAAM,eAAA,GAEF;AAAA,EACF,KAAA,EAAO,IAAA;AAAA,EACP,0BAAA,EAA4B,KAAA;AAAA,EAC5B,YAAA,EAAc,IAAA;AAAA,EACd,YAAA,EAAc,KAAA;AAAA,EACd,aAAA,EAAe;AACjB,CAAA;AAEA,IAAM,iBAAA,GAAoB,sCAAA;AAC1B,IAAM,mBAAA,GAAsB,+BAAA;AAC5B,IAAM,aAAA,GAAgB,IAAA;AACtB,IAAM,OAAA,GAAU,QAAA;AAEhB,IAAM,gBAAA,GAAmB,IAAI,UAAA,CAAW,GAAG,CAAA;AAC3C,IAAM,eAAA,GAAkB,IAAI,UAAA,CAAW,GAAG,CAAA;AAE1C,KAAA,IAAS,IAAA,GAAO,EAAA,EAAI,IAAA,IAAQ,EAAA,EAAI,QAAQ,CAAA,EAAG;AACzC,EAAA,gBAAA,CAAiB,IAAI,CAAA,GAAI,CAAA;AACzB,EAAA,eAAA,CAAgB,IAAI,CAAA,GAAI,CAAA;AAC1B;AACA,KAAA,IAAS,IAAA,GAAO,EAAA,EAAI,IAAA,IAAQ,GAAA,EAAK,QAAQ,CAAA,EAAG;AAC1C,EAAA,gBAAA,CAAiB,IAAI,CAAA,GAAI,CAAA;AACzB,EAAA,eAAA,CAAgB,IAAI,CAAA,GAAI,CAAA;AAC1B;AACA,KAAA,IAAS,IAAA,GAAO,EAAA,EAAI,IAAA,IAAQ,EAAA,EAAI,QAAQ,CAAA,EAAG;AACzC,EAAA,eAAA,CAAgB,IAAI,CAAA,GAAI,CAAA;AAC1B;AACA,gBAAA,CAAiB,EAAE,CAAA,GAAI,CAAA;AACvB,eAAA,CAAgB,EAAE,CAAA,GAAI,CAAA;AACtB,eAAA,CAAgB,EAAE,CAAA,GAAI,CAAA;AACtB,eAAA,CAAgB,EAAE,CAAA,GAAI,CAAA;AACtB,eAAA,CAAgB,EAAE,CAAA,GAAI,CAAA;AAEf,IAAM,eAAN,MAAmB;AAAA,EA8BxB,WAAA,CAAY,OAAA,GAAyB,EAAC,EAAG;AAhBzC,IAAA,IAAA,CAAQ,MAAA,GAAS,EAAA;AACjB,IAAA,IAAA,CAAQ,MAAA,GAAS,CAAA;AACjB,IAAA,IAAA,CAAQ,IAAA,GAAO,CAAA;AACf,IAAA,IAAA,CAAQ,MAAA,GAAS,CAAA;AACjB,IAAA,IAAA,CAAQ,eAA6B,EAAC;AACtC,IAAA,IAAA,CAAQ,OAAA,GAA0B;AAAA,MAChC,MAAA,CAAO,MAAA,iBAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,EAAmB;AAAA,QACjD,GAAA,EAAK,iBAAA;AAAA,QACL,KAAA,EAAO;AAAA,OACR;AAAA,KACH;AACA,IAAA,IAAA,CAAQ,MAAA,GAAS,KAAA;AACjB,IAAA,IAAA,CAAQ,SAAA,GAAY,KAAA;AACpB,IAAA,IAAA,CAAiB,mBAA6B,EAAC;AAC/C,IAAA,IAAA,CAAiB,YAA4B,EAAC;AAG5C,IAAA,MAAM,QAAA,GAAW,EAAE,GAAG,eAAA,EAAiB,GAAG,OAAA,EAAQ;AAClD,IAAA,IAAA,CAAK,QAAQ,QAAA,CAAS,KAAA;AACtB,IAAA,IAAA,CAAK,6BAA6B,QAAA,CAAS,0BAAA;AAC3C,IAAA,IAAA,CAAK,eAAe,QAAA,CAAS,YAAA;AAC7B,IAAA,IAAA,CAAK,eAAe,QAAA,CAAS,YAAA;AAC7B,IAAA,IAAA,CAAK,gBAAgB,QAAA,CAAS,aAAA;AAC9B,IAAA,IAAA,CAAK,YAAY,QAAA,CAAS,SAAA;AAC1B,IAAA,IAAA,CAAK,aAAa,QAAA,CAAS,UAAA;AAC3B,IAAA,IAAA,CAAK,SAAS,QAAA,CAAS,MAAA;AACvB,IAAA,IAAA,CAAK,UAAU,QAAA,CAAS,OAAA;AACxB,IAAA,IAAA,CAAK,YAAY,QAAA,CAAS,SAAA;AAC1B,IAAA,IAAA,CAAK,0BAA0B,QAAA,CAAS,uBAAA;AACxC,IAAA,IAAA,CAAK,YAAY,QAAA,CAAS,SAAA;AAC1B,IAAA,IAAA,CAAK,UAAU,QAAA,CAAS,OAAA;AAAA,EAC1B;AAAA,EAEA,KAAK,KAAA,EAAqB;AACxB,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,IAAA,CAAK,OAAO,kBAAkB,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,IAAU,KAAA;AACf,IAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AAAA,EACzB;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,aAAa,IAAI,CAAA;AACtB,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,OAAO,yBAAyB,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAChC,MAAA,IAAA,CAAK,OAAO,2BAA2B,CAAA;AAAA,IACzC;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAChB;AAAA,EAEQ,aAAa,KAAA,EAAsB;AACzC,IAAA,IAAI,CAAA,GAAI,CAAA;AAER,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ;AAC7B,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA;AACrC,MAAA,IAAI,OAAO,EAAA,EAAI;AACb,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAChC,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,UAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,YAAA,IAAA,CAAK,SAAA,CAAU,MAAM,IAAI,CAAA;AACzB,YAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,UACpB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAM,KAAA,GAAQ,qBAAqB,IAAI,CAAA;AACvC,UAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACzB,YAAA,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAC/B,YAAA,IAAA,CAAK,QAAA,CAAS,MAAM,IAAI,CAAA;AAAA,UAC1B;AACA,UAAA,IAAA,CAAK,SAAS,KAAA,CAAM,KAAA;AACpB,UAAA;AAAA,QACF;AACA,QAAA,IAAA,CAAK,MAAA,GAAS,EAAA;AACd,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAK,CAAA,EAAG;AACV,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAA;AACpC,QAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,UAAA,IAAA,CAAK,SAAA,CAAU,MAAM,KAAK,CAAA;AAC1B,UAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,QACpB;AACA,QAAA,CAAA,GAAI,EAAA;AAAA,MACN;AAEA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,EAAA,EAAI,KAAK,CAAA;AAChD,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,YAAA,CAAa,EAAA,EAAI,EAAA,GAAK,QAAQ,CAAA;AACnC,MAAA,CAAA,GAAI,EAAA,GAAK,QAAA;AAAA,IACX;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAEjC,IAAA,IAAI,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,OAAO,yBAAyB,CAAA;AAAA,IACvC;AAAA,EACF;AAAA,EAEQ,gBAAA,CAAiB,OAAe,KAAA,EAA+B;AACrE,IAAA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,KAAM,KAAK,4BAA4B,CAAA;AAE/D,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,eAAA,EAAgB;AAEzC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,QAAQ,CAAC,CAAA;AAEnD,IAAA,IAAI,eAAe,EAAA,EAAI;AACrB,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAC,CAAA;AAC/C,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,IAAA,CAAK,OAAO,qCAAqC,CAAA;AAAA,QACnD;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,EAAG,GAAG,EAAE,IAAA,EAAK;AACpD,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AACvC,MAAA,MAAM,SAAS,KAAA,KAAU,EAAA,GAAK,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,KAAK,CAAA;AACxD,MAAA,MAAM,IAAA,GAAO,UAAU,EAAA,GAAK,EAAA,GAAK,KAAK,KAAA,CAAM,KAAK,EAAE,IAAA,EAAK;AACxD,MAAA,MAAM,EAAA,GAA4B,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAK;AACvD,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,0BAA0B,EAAE,CAAA;AACjC,MAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,IACnB;AAEA,IAAA,IAAI,eAAe,EAAA,EAAI;AACrB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,QAAQ,CAAC,CAAA;AAElD,MAAA,IAAI,SAAA,KAAc,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,KAAA,GAAQ,CAAC,MAAM,EAAA,EAAI;AAChE,QAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAC,CAAA;AAChD,QAAA,IAAI,QAAQ,EAAA,EAAI;AACd,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,IAAA,CAAK,OAAO,sBAAsB,CAAA;AAAA,UACpC;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAA,GAAQ,GAAG,GAAG,CAAA;AAChD,QAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,QAAA,IAAA,CAAK,YAAY,OAAO,CAAA;AACxB,QAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,MACnB;AAEA,MAAA,IAAI,cAAc,EAAA,IAAM,IAAA,CAAK,OAAO,UAAA,CAAW,WAAA,EAAa,KAAK,CAAA,EAAG;AAClE,QAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAC,CAAA;AAChD,QAAA,IAAI,QAAQ,EAAA,EAAI;AACd,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,IAAA,CAAK,OAAO,4BAA4B,CAAA;AAAA,UAC1C;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,MAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAA,GAAQ,GAAG,GAAG,CAAA;AAC9C,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,KAAK,CAAA;AACnD,QAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,UAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,UAAA,IAAA,CAAK,UAAU,UAAU,CAAA;AAAA,QAC3B;AACA,QAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,MACnB;AAEA,MAAA,IAAI,cAAc,EAAA,IAAM,IAAA,CAAK,OAAO,UAAA,CAAW,WAAA,EAAa,KAAK,CAAA,EAAG;AAClE,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,eAAA,CAAgB,KAAA,GAAQ,CAAC,CAAA;AAC1C,QAAA,IAAI,QAAQ,EAAA,EAAI;AACd,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,IAAA,CAAK,OAAO,kCAAkC,CAAA;AAAA,UAChD;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,UAAA,IAAA,CAAK,OAAO,wBAAwB,CAAA;AAAA,QACtC;AACA,QAAA,MAAM,GAAA,GAAM,KAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,EAAG,GAAG,EAAE,IAAA,EAAK;AACnD,QAAA,MAAM,OAAA,GAAmB,EAAE,GAAA,EAAI;AAC/B,QAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,QAAA,IAAA,CAAK,YAAY,OAAO,CAAA;AACxB,QAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,IAAI,eAAe,EAAA,EAAI;AACrB,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,QAAQ,CAAC,CAAA;AAC9C,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,IAAA,CAAK,OAAO,0BAA0B,CAAA;AAAA,QACxC;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAI,IAAI,IAAA,CAAK,eAAA,CAAgB,KAAK,MAAA,EAAQ,KAAA,GAAQ,GAAG,GAAG,CAAA;AACxD,MAAA,MAAM,SAAS,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,GAAG,GAAG,CAAA;AAClD,MAAA,CAAA,GAAI,KAAK,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,MAAA,CAAO,KAAK,GAAG,CAAA;AACrD,MAAA,IAAI,MAAM,GAAA,EAAK;AACb,QAAA,IAAA,CAAK,OAAO,qBAAqB,CAAA;AAAA,MACnC;AAEA,MAAA,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,GAAG,CAAA;AAC5C,MAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,IACnB;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,KAAA,GAAQ,CAAC,CAAA;AACzC,IAAA,IAAI,WAAW,EAAA,EAAI;AACjB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,OAAO,wBAAwB,CAAA;AAAA,MACtC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,oBAAA,CAAqB,KAAA,GAAQ,CAAA,EAAG,MAAM,CAAA;AAC3C,IAAA,OAAO,SAAS,CAAA,GAAI,KAAA;AAAA,EACtB;AAAA,EAEQ,oBAAA,CAAqB,OAAe,GAAA,EAAmB;AAC7D,IAAA,IAAA,CAAK,gBAAA,EAAiB;AAEtB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,GAAG,CAAA;AAClD,IAAA,MAAM,cAAc,MAAA,CAAO,WAAA;AAE3B,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,MAAM,YAAY,MAAA,CAAO,IAAA;AACzB,MAAA,MAAMA,WAAAA,mBAAoD,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAK5E,MAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,UAAA,EAAY;AACpC,QAAAA,WAAAA,CAAW,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,KAAA;AAAA,MAC/B;AAEA,MAAA,MAAMC,IAAAA,GAAe;AAAA,QACnB,IAAA,EAAM,SAAA;AAAA,QACN,UAAA,EAAAD,WAAAA;AAAA,QACA,aAAA,EAAe;AAAA,OACjB;AAEA,MAAA,IAAA,CAAK,YAAYC,IAAG,CAAA;AAEpB,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IAAA,CAAK,UAAA,GAAa,EAAE,IAAA,EAAM,SAAA,EAAW,CAAA;AACrC,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,aAAa,IAAA,CAAK;AAAA,QACrB,SAAS,MAAA,CAAO,IAAA;AAAA,QAChB,QAAA,EAAU,EAAE,IAAA,EAAM,SAAA;AAAU,OAC7B,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AACjC,IAAA,IAAI,EAAA,GAAK,QAAA;AACT,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,UAAA,EAAY;AACpC,MAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,QAAA,IAAI,OAAO,QAAA,EAAU;AACnB,UAAA,EAAA,GAAK,MAAA,CAAO,OAAO,QAAQ,CAAA;AAAA,QAC7B;AACA,QAAA,EAAA,CAAG,EAAE,IAAI,IAAA,CAAK,KAAA;AAAA,MAChB,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AACzC,QAAA,IAAI,OAAO,QAAA,EAAU;AACnB,UAAA,EAAA,GAAK,MAAA,CAAO,OAAO,QAAQ,CAAA;AAAA,QAC7B;AACA,QAAA,EAAA,CAAG,KAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,IAAI,IAAA,CAAK,KAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAM,EAAE,CAAA;AACtD,IAAA,MAAM,UAAA,mBAA2C,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAEnE,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,UAAA,EAAY;AACpC,MAAA,IAAI,CAAC,KAAK,0BAAA,EAA4B;AACpC,QAAA,IAAI,KAAK,IAAA,KAAS,OAAA,IAAW,KAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3D,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,MAAM,EAAE,CAAA;AAC7D,MAAA,UAAA,CAAW,YAAA,CAAa,IAAI,CAAA,GAAI;AAAA,QAC9B,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,OAAO,YAAA,CAAa,KAAA;AAAA,QACpB,KAAK,YAAA,CAAa;AAAA,OACpB;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAe;AAAA,MACnB,MAAM,YAAA,CAAa,IAAA;AAAA,MACnB,QAAQ,YAAA,CAAa,MAAA;AAAA,MACrB,OAAO,YAAA,CAAa,KAAA;AAAA,MACpB,KAAK,YAAA,CAAa,GAAA;AAAA,MAClB,UAAA;AAAA,MACA,aAAA,EAAe;AAAA,KACjB;AAEA,IAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AAEpB,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,IAAA,CAAK,UAAA,GAAa;AAAA,QAChB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,OAAO,YAAA,CAAa,KAAA;AAAA,QACpB,KAAK,YAAA,CAAa;AAAA,OACnB,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK;AAAA,MACrB,SAAS,MAAA,CAAO,IAAA;AAAA,MAChB,QAAA,EAAU;AAAA,QACR,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,OAAO,YAAA,CAAa,KAAA;AAAA,QACpB,KAAK,YAAA,CAAa;AAAA;AACpB,KACD,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,CAAA;AAAA,EACtB;AAAA,EAEQ,mBAAA,CACN,OACA,GAAA,EACoE;AACpE,IAAA,IAAI,IAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,OAAO,GAAG,CAAA;AACpD,IAAA,MAAM,aAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,GAAG,GAAG,CAAA;AACtD,IAAA,CAAA,GAAI,UAAA,CAAW,GAAA;AAEf,IAAA,MAAM,aAAa,IAAA,CAAK,SAAA;AACxB,IAAA,UAAA,CAAW,MAAA,GAAS,CAAA;AACpB,IAAA,IAAI,WAAA,GAAc,KAAA;AAElB,IAAA,OAAO,IAAI,GAAA,EAAK;AACd,MAAA,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,GAAG,GAAG,CAAA;AAC5C,MAAA,IAAI,KAAK,GAAA,EAAK;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,CAAC,MAAM,EAAA,EAAI;AACpC,QAAA,CAAA,IAAK,CAAA;AACL,QAAA,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,GAAG,GAAG,CAAA;AAC5C,QAAA,IAAI,MAAM,GAAA,EAAK;AACb,UAAA,IAAA,CAAK,OAAO,0BAA0B,CAAA;AAAA,QACxC;AACA,QAAA,WAAA,GAAc,IAAA;AACd,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,WAAW,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,GAAG,GAAG,CAAA;AACpD,MAAA,CAAA,GAAI,QAAA,CAAS,GAAA;AACb,MAAA,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,GAAG,GAAG,CAAA;AAE5C,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,CAAC,MAAM,EAAA,EAAI;AACpC,QAAA,IAAA,CAAK,OAAO,uBAAuB,CAAA;AAAA,MACrC;AAEA,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,GAAG,GAAG,CAAA;AAE5C,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAC1C,MAAA,IAAI,SAAA,KAAc,EAAA,IAAM,SAAA,KAAc,EAAA,EAAI;AACxC,QAAA,IAAA,CAAK,OAAO,gCAAgC,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,YAAA,CAAa,SAAS,CAAA;AAC3C,MAAA,CAAA,IAAK,CAAA;AAEL,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAC,CAAA;AAC7C,MAAA,IAAI,QAAA,KAAa,EAAA,IAAM,QAAA,IAAY,GAAA,EAAK;AACtC,QAAA,IAAA,CAAK,OAAO,8BAA8B,CAAA;AAAA,MAC5C;AAEA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,GAAG,QAAQ,CAAA;AAC9C,MAAA,MAAM,UAAA,GAAa,SAAS,QAAA,CAAS,IAAI,IAAI,QAAA,CAAS,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA,GAAI,QAAA;AAC/E,MAAA,MAAM,KAAA,GAAQ,CAAC,UAAA,CAAW,QAAA,CAAS,GAAG,IAAI,UAAA,GAAa,cAAA,CAAe,UAAA,EAAY,IAAA,CAAK,OAAO,CAAA;AAC9F,MAAA,UAAA,CAAW,KAAK,EAAE,IAAA,EAAM,QAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AAC9C,MAAA,CAAA,GAAI,QAAA,GAAW,CAAA;AAAA,IACjB;AAEA,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,CAAW,IAAA,EAAM,YAAY,WAAA,EAAY;AAAA,EAC1D;AAAA,EAEQ,eAAA,CAAgB,SAAiB,QAAA,EAAyB;AAChE,IAAA,IAAA,CAAK,gBAAA,EAAiB;AAEtB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,EAAI;AACpC,IAAA,MAAM,EAAA,GAAK,KAAK,KAAA,GAAQ,IAAA,CAAK,QAAQ,GAAA,EAAI,GAAI,KAAK,UAAA,EAAW;AAE7D,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,EAAA,EAAI;AACjB,MAAA,IAAA,CAAK,OAAO,wCAAwC,CAAA;AAAA,IACtD;AAEA,IAAA,IAAI,KAAA,CAAM,YAAY,OAAA,EAAS;AAC7B,MAAA,IAAA,CAAK,MAAA,CAAO,CAAA,mCAAA,EAAsC,KAAA,CAAM,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,IACpE;AAEA,IAAA,IAAA,CAAK,UAAA,GAAa,MAAM,QAAQ,CAAA;AAAA,EAClC;AAAA,EAEQ,SAAA,CAAU,MAAc,cAAA,EAA+B;AAC7D,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,cAAc,CAAA;AAC3D,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,EAAG;AAC7B,MAAA,IAAA,CAAK,iBAAiB,UAAU,CAAA;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,UAAA,EAAY,IAAA,CAAK,OAAO,CAAA;AACvD,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,iBAAiB,IAAA,EAAoB;AAC3C,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,MAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,IAAI,CAAA;AAAA,EACjC;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,gBAAA,CAAiB,WAAW,CAAA,EAAG;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,CAAC,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAA,KAAW,CAAA,IAAK,KAAA,KAAU,MAAA,GAAY,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,EAAE,CAAA;AAC9G,IAAA,IAAA,CAAK,iBAAiB,MAAA,GAAS,CAAA;AAC/B,IAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,EACpB;AAAA,EAEQ,YAAA,CAAa,SAAiB,EAAA,EAAgC;AACpE,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,MAAMC,MAAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACjC,MAAA,IAAIA,WAAU,EAAA,EAAI;AAChB,QAAA,OAAO,EAAE,MAAM,OAAA,EAAS,MAAA,EAAQ,IAAI,KAAA,EAAO,OAAA,EAAS,KAAK,EAAA,EAAG;AAAA,MAC9D;AACA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAGA,MAAK,CAAA;AAAA,QAC9B,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAMA,MAAAA,GAAQ,CAAC,CAAA;AAAA,QAC9B,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO,OAAA;AAAA,QACP,GAAA,EAAK,EAAA,CAAG,EAAE,CAAA,IAAK;AAAA,OACjB;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AACrC,IAAA,MAAM,GAAA,GAAM,GAAG,MAAM,CAAA;AACrB,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,IAAA,CAAK,MAAA,CAAO,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAE,CAAA;AAAA,IACtD;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,MAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,qBAAA,CAAsB,SAAiB,EAAA,EAAgC;AAC7E,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,EAAE,CAAA;AAAA,IACtC;AAEA,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO,OAAA;AAAA,QACP,GAAA,EAAK,GAAG,KAAA,IAAS;AAAA,OACnB;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO,OAAA;AAAA,QACP,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AACrC,IAAA,MAAM,GAAA,GAAM,GAAG,MAAM,CAAA;AACrB,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,IAAA,CAAK,MAAA,CAAO,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAE,CAAA;AAAA,IACtD;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,MAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,YAAY,KAAA,EAAuB;AACzC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AAC/C,IAAA,IAAI,aAAa,EAAA,EAAI;AACnB,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAM,KAAK,CAAA;AACxD,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,KAAK,CAAA;AACvD,IAAA,MAAM,UAAA,GACJ,gBAAA,KAAqB,EAAA,GACjB,gBAAA,GACA,gBAAA,KAAqB,KACnB,gBAAA,GACA,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAkB,gBAAgB,CAAA;AAEnD,IAAA,IAAI,UAAA,KAAe,EAAA,IAAM,UAAA,GAAa,QAAA,EAAU;AAC9C,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,KAAA,IAAS,IAAI,KAAA,EAAO,CAAA,GAAI,KAAK,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AAClD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AACrC,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,IAAI,SAAS,SAAA,EAAW;AACtB,UAAA,SAAA,GAAY,CAAA;AAAA,QACd;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAA,KAAS,EAAA,IAAM,IAAA,KAAS,EAAA,EAAI;AAC9B,QAAA,SAAA,GAAY,IAAA;AACZ,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,OAAO,CAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEQ,gBAAgB,KAAA,EAAuB;AAC7C,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,IAAA,KAAA,IAAS,IAAI,KAAA,EAAO,CAAA,GAAI,KAAK,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AAClD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AACrC,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,IAAI,SAAS,SAAA,EAAW;AACtB,UAAA,SAAA,GAAY,CAAA;AAAA,QACd;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAA,KAAS,EAAA,IAAM,IAAA,KAAS,EAAA,EAAI;AAC9B,QAAA,SAAA,GAAY,IAAA;AACZ,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,YAAA,IAAgB,CAAA;AAChB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,CAAC,CAAA;AAC3C,QAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAA,KAAS,EAAA,IAAM,YAAA,KAAiB,CAAA,EAAG;AACrC,QAAA,OAAO,CAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEQ,UAAA,CAAW,KAAA,EAAe,KAAA,EAAe,GAAA,EAA4C;AAC3F,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,IAAA,CAAK,OAAO,eAAe,CAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,CAAW,KAAK,CAAA;AACxC,IAAA,IAAI,cAAc,SAAA,IAAa,SAAA,IAAa,OAAO,gBAAA,CAAiB,SAAS,MAAM,CAAA,EAAG;AACpF,MAAA,IAAA,CAAK,OAAO,CAAA,qBAAA,EAAwB,KAAA,CAAM,KAAK,CAAA,IAAK,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,IAC3D;AAEA,IAAA,IAAI,IAAI,KAAA,GAAQ,CAAA;AAChB,IAAA,OAAO,IAAI,GAAA,EAAK;AACd,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA;AAC/B,MAAA,IAAI,IAAA,IAAQ,GAAA,IAAO,eAAA,CAAgB,IAAI,MAAM,CAAA,EAAG;AAC9C,QAAA;AAAA,MACF;AACA,MAAA,CAAA,IAAK,CAAA;AAAA,IACP;AAEA,IAAA,OAAO,EAAE,MAAM,KAAA,CAAM,KAAA,CAAM,OAAO,CAAC,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EAC/C;AAAA,EAEQ,eAAA,CAAgB,KAAA,EAAe,KAAA,EAAe,GAAA,EAAqB;AACzE,IAAA,IAAI,CAAA,GAAI,KAAA;AACR,IAAA,OAAO,IAAI,GAAA,EAAK;AACd,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA;AAC/B,MAAA,IAAI,SAAS,EAAA,IAAM,IAAA,KAAS,KAAK,IAAA,KAAS,EAAA,IAAM,SAAS,EAAA,EAAI;AAC3D,QAAA;AAAA,MACF;AACA,MAAA,CAAA,IAAK,CAAA;AAAA,IACP;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEQ,UAAA,GAA2B;AACjC,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAC,CAAA,oBAAM,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,EACrE;AAAA,EAEQ,SAAS,IAAA,EAAoB;AACnC,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA;AACpB,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAC3B,IAAA,IAAI,QAAQ,EAAA,EAAI;AACd,MAAA,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,IAAI,WAAA,GAAc,EAAA;AAClB,IAAA,OAAO,QAAQ,EAAA,EAAI;AACjB,MAAA,YAAA,IAAgB,CAAA;AAChB,MAAA,WAAA,GAAc,GAAA;AACd,MAAA,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,GAAA,GAAM,CAAC,CAAA;AAAA,IAClC;AAEA,IAAA,IAAA,CAAK,IAAA,IAAQ,YAAA;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,MAAA,GAAS,WAAA;AAAA,EAC9B;AAAA,EAEQ,cAAA,CAAe,MAAc,cAAA,EAAiC;AACpE,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,IAAa,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,IAAI,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,KAAM,EAAA,EAAI;AAC9B,QAAA,KAAA,GAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MACvB;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,IACnB;AAEA,IAAA,IAAI,kBAAkB,KAAA,CAAM,UAAA,CAAW,MAAM,MAAA,GAAS,CAAC,MAAM,EAAA,EAAI;AAC/D,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,IAC3B;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,KAAA,CAAM,QAAA,CAAS,IAAI,IAAI,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA;AAC9E,IAAA,OAAO,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,EAAG,UAAU,CAAA,CAAA,GAAK,UAAA;AAAA,EAC7C;AAAA,EAEQ,YAAA,CAAa,OAAe,GAAA,EAAmB;AACrD,IAAA,MAAM,SAAS,GAAA,GAAM,KAAA;AACrB,IAAA,IAAA,CAAK,MAAA,IAAU,MAAA;AACf,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,KAAK,CAAA;AACzC,IAAA,IAAI,GAAA,KAAQ,EAAA,IAAM,GAAA,IAAO,GAAA,EAAK;AAC5B,MAAA,IAAA,CAAK,MAAA,IAAU,MAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,IAAI,WAAA,GAAc,EAAA;AAClB,IAAA,OAAO,GAAA,KAAQ,EAAA,IAAM,GAAA,GAAM,GAAA,EAAK;AAC9B,MAAA,YAAA,IAAgB,CAAA;AAChB,MAAA,WAAA,GAAc,GAAA;AACd,MAAA,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,IACzC;AAEA,IAAA,IAAA,CAAK,IAAA,IAAQ,YAAA;AACb,IAAA,IAAA,CAAK,SAAS,GAAA,GAAM,WAAA;AAAA,EACtB;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEQ,OAAO,OAAA,EAAwB;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,IAAA,GAAO,CAAA;AAC9C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,MAAA,GAAS,CAAA;AAClD,IAAA,MAAM,QAAQ,IAAI,WAAA,CAAY,SAAS,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AAChE,IAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,IAAA,MAAM,KAAA;AAAA,EACR;AACF;;;AC5xBO,IAAM,cAAN,MAAkB;AAAA,EAAlB,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,QAAmB,EAAC;AAC5B,IAAA,IAAA,CAAQ,IAAA,GAAuB,IAAA;AAE/B,IAAA,IAAA,CAAA,SAAA,GAAY,CAAC,GAAA,KAAwF;AACnG,MAAA,MAAM,IAAA,GAAgB;AAAA,QACpB,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,YAAY,MAAA,CAAO,WAAA;AAAA,UACjB,OAAO,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,IAAI,CAAA,KAAM,CAAC,KAAK,OAAO,IAAA,KAAS,WAAW,IAAA,GAAO,IAAA,CAAK,KAAK,CAAC;AAAA,SACzG;AAAA,QACA,UAAU;AAAC,OACb;AAEA,MAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAC/C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,QAAA,EAAU,KAAK,IAAI,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,MACd;AAEA,MAAA,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACtB,CAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAS,CAAC,IAAA,KAAuB;AAC/B,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;AACtB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAC7C,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA;AAAA,MACF;AACA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AACnC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACzC,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,GAAI,IAAA,GAAO,IAAA;AAAA,MACzC,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,MACpB;AACA,MAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,IAClB,CAAA;AAEA,IAAA,IAAA,CAAA,OAAA,GAAU,CAAC,IAAA,KAAuB;AAChC,MAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,IAAA,CAAA,UAAA,GAAa,MAAY;AACvB,MAAA,IAAA,CAAK,MAAM,GAAA,EAAI;AAAA,IACjB,CAAA;AAAA,EAAA;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AACF;AAEO,SAAS,cAAA,CAAe,GAAA,EAAa,OAAA,GAAyB,EAAC,EAAY;AAChF,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa;AAAA,IAC9B,GAAG,OAAA;AAAA,IACH,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,YAAY,OAAA,CAAQ;AAAA,GACrB,CAAA;AAED,EAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AACf,EAAA,MAAA,CAAO,KAAA,EAAM;AACb,EAAA,OAAO,QAAQ,OAAA,EAAQ;AACzB;;;ACvEA,IAAMC,gBAAAA,GAAwG;AAAA,EAC5G,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,OAAA,EAAS,IAAA;AAAA,EACT,cAAA,EAAgB;AAClB,CAAA;AAEO,SAAS,YAAA,CAAa,IAAA,EAAe,OAAA,GAA4B,EAAC,EAAW;AAClF,EAAA,MAAM,QAAA,GAAW,EAAE,GAAGA,gBAAAA,EAAiB,GAAG,OAAA,EAAQ;AAClD,EAAA,IAAI,IAAA,GAAO,aAAA,CAAc,IAAA,EAAM,QAAA,EAAU,CAAC,CAAA;AAC1C,EAAA,IAAI,SAAS,MAAA,IAAU,CAAC,KAAK,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAG;AACvD,IAAA,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,EAAG,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,CAAC,SAAS,cAAA,EAAgB;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA,sCAAA,EAAyC,QAAA,CAAS,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA;AACzE;AAEA,SAAS,aAAA,CAAc,IAAA,EAAe,OAAA,EAAqC,KAAA,EAAuB;AAChG,EAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,GAAG,KAAK,CAAA,CAAA,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA;AAE/B,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AACnC,EAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACpB,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AAAA,IAC9B;AACA,IAAA,MAAMC,OAAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,OAAO,GAAGA,OAAM,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,GAAG,KAAK,CAAA,EAAA,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,IAAA,MAAMC,MAAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU,cAAA,CAAe,KAAA,EAAO,OAAA,EAAS,KAAA,GAAQ,CAAC,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AACxF,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAGA,MAAK,GAAG,QAAQ,CAAA,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAC1C,EAAA,MAAM,sBAAsB,QAAA,CAAS,KAAA,CAAM,CAAC,KAAA,KAAU,OAAO,UAAU,QAAQ,CAAA;AAC/E,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU,WAAW,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACrE,IAAA,OAAO,GAAG,MAAM,CAAA,EAAG,OAAO,CAAA,EAAG,UAAU,GAAG,QAAQ,CAAA,CAAA;AAAA,EACpD;AACA,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC,CAAA;AACnD,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,MAAM,CAAA,EAAG,OAAO,CAAA,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,CAAA,EAAG,MAAM,CAAA,EAAG,QAAQ,CAAA,CAAA;AACxC,EAAA,MAAM,QAAQ,QAAA,CACX,GAAA;AAAA,IAAI,CAAC,KAAA,KACJ,OAAO,KAAA,KAAU,QAAA,GACb,GAAG,WAAW,CAAA,EAAG,UAAA,CAAW,KAAK,CAAC,CAAA,CAAA,GAClC,aAAA,CAAc,KAAA,EAAO,OAAA,EAAS,QAAQ,CAAC;AAAA,GAC7C,CACC,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AAEvB,EAAA,OAAO,CAAA,EAAG,UAAU,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,EAAG,KAAK,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA;AAChF;AAEA,SAAS,cAAA,CAAe,KAAA,EAAiB,OAAA,EAAqC,KAAA,EAAuB;AACnG,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,WAAW,KAAK,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,aAAA,CAAc,KAAA,EAAO,OAAA,EAAS,KAAK,CAAA;AAC5C;AAEA,SAAS,oBAAoB,KAAA,EAAwC;AACnE,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,OAAA,CAAQ,KAAK,EACxB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,CAAA,EAAI,GAAG,KAAK,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA,CAC3D,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,WAAW,KAAA,EAAuB;AACzC,EAAA,OAAO,KAAA,CACJ,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AACzB;AAEA,SAAS,gBAAgB,KAAA,EAAuB;AAC9C,EAAA,OAAO,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA,CAAQ,MAAM,QAAQ,CAAA;AACjD;;;AChEA,IAAM,sBAAA,GAAgF;AAAA,EACpF,eAAA,EAAiB,IAAA;AAAA,EACjB,OAAA,EAAS,OAAA;AAAA,EACT,eAAA,EAAiB,KAAA;AAAA,EACjB,YAAA,EAAc;AAChB,CAAA;AAQO,SAAS,eAAe,IAAA,EAAsB;AACnD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAC7B;AAEO,SAAS,YACd,KAAA,EACkE;AAClE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAU,EAAA;AAC/B,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,KAAU,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA,CAAM,IAAA,CAAA;AACnF,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAA,EAAW,KAAA;AAAA,MACX,MAAA;AAAA,MACA,GAAA,EAAK,MAAM,GAAA,IAAO;AAAA,KACpB;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAC/B,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,OAAO,EAAE,MAAM,KAAA,EAAO,SAAA,EAAW,OAAO,MAAA,EAAQ,EAAA,EAAI,KAAK,EAAA,EAAG;AAAA,EAC9D;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAAA,IAChC,MAAA,EAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAAA,IAC5B,GAAA,EAAK;AAAA,GACP;AACF;AAEO,SAAS,WAAA,CAAY,IAAA,EAAe,OAAA,GAAgC,EAAC,EAAmB;AAC7F,EAAA,MAAM,QAAA,GAAW,cAAc,OAAO,CAAA;AACtC,EAAA,OAAO,SAAA,CAAU,IAAA,EAAM,QAAA,EAAU,EAAE,CAAA;AACrC;AAEO,SAAS,YAAA,CAAa,GAAA,EAAoB,OAAA,GAA6B,EAAC,EAAY;AACzF,EAAA,MAAM,QAAA,GAAW,iBAAiB,OAAO,CAAA;AACzC,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,EAAK,QAAQ,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA;AAClD,EAAA,OAAO,aAAa,QAAA,EAAU,IAAA,CAAK,KAAA,EAAO,QAAA,EAAU,EAAE,CAAA;AACxD;AAEO,SAAS,WAAA,CAAY,GAAA,EAAoB,OAAA,GAA8B,EAAC,EAAW;AACxF,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,EAAK,OAAO,CAAA;AACtC,EAAA,OAAO,YAAA,CAAa,MAAM,OAAO,CAAA;AACnC;AAEO,IAAM,gBAAN,MAAoB;AAAA,EAMzB,WAAA,CAAY,OAAA,GAAgC,EAAC,EAAG;AAJhD,IAAA,IAAA,CAAQ,QAAwB,EAAC;AACjC,IAAA,IAAA,CAAQ,IAAA,GAA8B,IAAA;AACtC,IAAA,IAAA,CAAQ,QAAA,GAA0B,IAAA;AAMlC,IAAA,IAAA,CAAA,SAAA,GAAY,CAAC,GAAA,KAAuB;AAClC,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,IAAA,EAAM,KAAK,OAAO,CAAA;AACjD,MAAA,MAAM,UAAA,GAAa,mBAAA,CAAoB,GAAA,CAAI,UAAA,EAAY,KAAK,OAAO,CAAA;AACnE,MAAA,MAAM,KAAA,GAAsB;AAAA,QAC1B,IAAA;AAAA,QACA,UAAA;AAAA,QACA,WAAW,EAAC;AAAA,QACZ,QAAA,kBAAU,MAAA,CAAO,MAAA,CAAO,IAAI;AAAA,OAC9B;AAEA,MAAA,IAAA,CAAK,QAAA,KAAL,KAAK,QAAA,GAAa,IAAA,CAAA;AAElB,MAAA,IAAA,CAAK,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,IACvB,CAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAS,CAAC,IAAA,KAAuB;AAC/B,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA;AAAA,MACF;AACA,MAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAChD,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,IAC7B,CAAA;AAEA,IAAA,IAAA,CAAA,OAAA,GAAU,CAAC,IAAA,KAAuB;AAChC,MAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,IAAA,CAAA,UAAA,GAAa,MAAY;AACvB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,EAAI;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AACjD,MAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAE/C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,IAAA,CAAK,IAAA,GAAO,KAAA;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AACjD,MAAA,QAAA,CAAS,OAAO,QAAA,EAAU,KAAA,CAAM,MAAM,KAAA,EAAO,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,IACjE,CAAA;AAjDE,IAAA,IAAA,CAAK,OAAA,GAAU,cAAc,OAAO,CAAA;AAAA,EACtC;AAAA,EAkDA,SAAA,GAA4B;AAC1B,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACtB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,WAAA,GAAsB;AACpB,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AACF;AAEA,SAAS,cAAc,OAAA,EAAsD;AAC3E,EAAA,OAAO,EAAE,GAAG,sBAAA,EAAwB,GAAG,OAAA,EAAQ;AACjD;AAEA,SAAS,iBAAiB,OAAA,EAAgD;AACxE,EAAA,OAAO,EAAE,GAAG,sBAAA,EAAwB,GAAG,OAAA,EAAQ;AACjD;AAEA,SAAS,SAAA,CAAU,IAAA,EAAe,OAAA,EAAgC,IAAA,EAAgC;AAChG,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAC7C,EAAA,MAAM,aAAa,qBAAA,CAAsB,IAAA,CAAK,UAAA,IAAc,IAAI,OAAO,CAAA;AACvE,EAAA,MAAM,KAAA,GAAsB;AAAA,IAE1B,UAAA;AAAA,IACA,WAAW,EAAC;AAAA,IACZ,QAAA,kBAAU,MAAA,CAAO,MAAA,CAAO,IAAI;AAAA,GAC9B;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AACnC,EAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,MAC5B;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,UAAU,KAAA,EAAO,OAAA,EAAS,CAAC,GAAG,IAAA,EAAM,IAAI,CAAC,CAAA;AACvD,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AACnD,IAAA,QAAA,CAAS,KAAA,CAAM,UAAU,SAAA,EAAW,KAAA,EAAO,SAAS,CAAC,GAAG,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,eAAA,CAAgB,OAAO,OAAO,CAAA;AACvC;AAEA,SAAS,aAAA,CAAc,MAAc,OAAA,EAAwC;AAC3E,EAAA,IAAI,QAAQ,eAAA,EAAiB;AAC3B,IAAA,OAAO,eAAe,IAAI,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,MAAc,OAAA,EAAqC;AAC3E,EAAA,IAAI,QAAQ,eAAA,EAAiB;AAC3B,IAAA,OAAO,eAAe,IAAI,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,mBAAA,CACP,YACA,OAAA,EACwB;AACxB,EAAA,MAAM,MAAA,mBAAiC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACzD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACpD,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,EAAK,OAAO,CAAA;AACvC,IAAA,MAAA,CAAO,IAAI,CAAA,GAAI,OAAO,IAAA,KAAS,QAAA,GAAW,OAAO,IAAA,CAAK,KAAA;AAAA,EACxD;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,qBAAA,CACP,YACA,OAAA,EACwB;AACxB,EAAA,MAAM,MAAA,mBAAiC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACzD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,EAAK,OAAO,CAAA;AACvC,IAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAAA,EACjB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,QAAA,CACP,MAAA,EACA,IAAA,EACA,KAAA,EACA,SACA,IAAA,EACM;AACN,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AACxD,EAAA,MAAM,QAAA,GAAW,OAAO,IAAI,CAAA;AAE5B,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,MAAA,CAAO,IAAI,CAAA,GAAI,WAAA,GAAc,CAAC,KAAK,CAAA,GAAI,KAAA;AACvC,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,IAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,IAAI,CAAA,GAAI,CAAC,QAAA,EAAU,KAAK,CAAA;AACjC;AAEA,SAAS,gBAAA,CAAiB,IAAA,EAAc,IAAA,EAAgB,OAAA,EAAyC;AAC/F,EAAA,MAAM,OAAO,OAAA,CAAQ,aAAA;AACrB,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,gBAAgB,GAAA,EAAK;AACvB,IAAA,OAAO,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AACxB;AAEA,SAAS,WAAA,CAAY,KAAoB,OAAA,EAAqE;AAC5G,EAAA,IAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACjB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAC5B,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAC,CAAA,IAAK,EAAA;AACxB,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,CAAI,IAAI,CAAA,EAAE;AAAA,IAClC;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,QAAQ,QAAA,EAAU;AACrB,IAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,EAC/E;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,CAAQ,QAAA,EAAU,OAAO,GAAA,EAAI;AAC9C;AAEA,SAAS,YAAA,CACP,IAAA,EACA,KAAA,EACA,OAAA,EACA,IAAA,EACS;AACT,EAAA,MAAM,UAAA,mBAAqC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAC7D,EAAA,MAAM,WAAiC,EAAC;AACxC,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAA,EAAM,IAAI,CAAA;AAE/B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,aAAA,CAAc,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,YAAA,CAAa,IAAA,EAAM,UAAA,EAAY,QAAQ,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AACtB,IAAA,MAAM,IAAA,GAAO,WAAW,KAAK,CAAA;AAC7B,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACpB;AACA,IAAA,OAAO,YAAA,CAAa,IAAA,EAAM,UAAA,EAAY,QAAQ,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACrD,MAAA,IAAI,cAAA,CAAe,GAAA,EAAK,OAAO,CAAA,EAAG;AAChC,QAAA,MAAM,QAAA,GAAW,iBAAiB,GAAA,CAAI,KAAA,CAAM,QAAQ,eAAA,CAAgB,MAAM,GAAG,OAAO,CAAA;AACpF,QAAA,MAAM,SAAA,GAAY,WAAW,UAAU,CAAA;AACvC,QAAA,IAAI,cAAc,IAAA,EAAM;AACtB,UAAA,UAAA,CAAW,QAAQ,CAAA,GAAI,SAAA;AAAA,QACzB;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,KAAQ,QAAQ,OAAA,EAAS;AAC3B,QAAA,UAAA,CAAW,QAAA,EAAU,YAAY,OAAO,CAAA;AACxC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,OAAO,CAAA;AAC/C,MAAA,gBAAA,CAAiB,QAAA,EAAU,SAAA,EAAW,UAAA,EAAY,OAAA,EAAS,QAAQ,CAAA;AAAA,IACrE;AAAA,EACF;AAEA,EAAA,OAAO,YAAA,CAAa,IAAA,EAAM,UAAA,EAAY,QAAQ,CAAA;AAChD;AAEA,SAAS,gBAAA,CACP,QAAA,EACA,IAAA,EACA,KAAA,EACA,SACA,IAAA,EACM;AACN,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,WAAA,GAAc,CAAC,KAAK,CAAA,GAAI,CAAC,KAAK,CAAA;AAE3E,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,KAAS,IAAA,EAAM;AACvC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA;AACtB,MAAA;AAAA,IACF;AACA,IAAA,QAAA,CAAS,KAAK,YAAA,CAAa,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,EACvD;AACF;AAEA,SAAS,aAAA,CACP,QAAA,EACA,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,aAAA,CAAc,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,IAAI,CAAA;AAAA,IAC7C;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AACtB,IAAA,MAAM,IAAA,GAAO,WAAW,KAAK,CAAA;AAC7B,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACpB;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACrD,MAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,OAAO,CAAA;AAC/C,MAAA,gBAAA,CAAiB,QAAA,EAAU,SAAA,EAAW,UAAA,EAAY,OAAA,EAAS,IAAI,CAAA;AAAA,IACjE;AAAA,EACF;AACF;AAEA,SAAS,UAAA,CACP,QAAA,EACA,KAAA,EACA,OAAA,EACM;AACN,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,KAAA,GAAQ,KAAA,CACX,GAAA,CAAI,CAAC,IAAA,KAAS,UAAA,CAAW,IAAI,CAAC,CAAA,CAC9B,MAAA,CAAO,CAAC,IAAA,KAAyB,SAAS,IAAI,CAAA;AACjD,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,MAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,EAAE,CAAC,CAAA;AAC5B,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACpB;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,WAAW,KAAK,CAAA;AAC7B,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,EACpB;AACF;AAEA,SAAS,YAAA,CACP,IAAA,EACA,UAAA,EACA,QAAA,EACS;AACT,EAAA,MAAM,IAAA,GAAgB,EAAE,IAAA,EAAK;AAC7B,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,CAAA,EAAG;AACtC,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AACA,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAA,CAAe,KAAa,OAAA,EAAsC;AACzE,EAAA,IAAI,CAAC,QAAQ,eAAA,EAAiB;AAC5B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA,CAAI,WAAW,OAAA,CAAQ,eAAe,KAAK,GAAA,CAAI,MAAA,GAAS,QAAQ,eAAA,CAAgB,MAAA;AACzF;AAEA,SAAS,SAAS,KAAA,EAA+C;AAC/D,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,YAAY,KAAA,EAA0D;AAC7E,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,SAAA;AACpF;AAEA,SAAS,WAAW,KAAA,EAAqC;AACvD,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW;AAC3D,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,OAAO,MAAM,WAAA,EAAY;AAAA,EAC3B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAqB,OAAA,EAAgD;AAC5F,EAAA,MAAM,gBAAgB,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,UAAU,EAAE,MAAA,GAAS,CAAA;AAC7D,EAAA,MAAM,cAAc,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,EAAE,MAAA,GAAS,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAA;AAEzC,EAAA,MAAM,YAAY,OAAA,CAAQ,YAAA,GACtB,MAAM,SAAA,CAAU,IAAA,CAAK,EAAE,CAAA,GACvB,KAAA,CAAM,UAAU,MAAA,IAAU,CAAA,GACxB,MAAM,SAAA,CAAU,CAAC,KAAK,EAAA,GACtB,KAAA,CAAM,UAAU,KAAA,EAAM;AAE5B,EAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,WAAA,EAAa;AAClC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,mBAAuB,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAE/C,EAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA,EAAG;AAC3D,IAAA,MAAA,CAAO,GAAG,OAAA,CAAQ,eAAe,CAAA,EAAG,GAAG,EAAE,CAAA,GAAI,KAAA;AAAA,EAC/C;AAEA,EAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA,EAAG;AACzD,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,EAChB;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,GAAI,SAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,MAAA;AACT","file":"index.cjs","sourcesContent":["const DEV = typeof process !== \"undefined\" ? process.env.NODE_ENV !== \"production\" : true;\n\nexport function assert(condition: boolean, message: string): void {\n if (!DEV) {\n return;\n }\n if (!condition) {\n throw new Error(`Invariant failed: ${message}`);\n }\n}\n","export class XmlSaxError extends Error {\n readonly offset: number;\n readonly line: number;\n readonly column: number;\n\n constructor(message: string, offset: number, line: number, column: number) {\n super(`${message} at ${line}:${column}`);\n this.name = \"XmlSaxError\";\n this.offset = offset;\n this.line = line;\n this.column = column;\n }\n}\n","import { XmlSaxError } from \"./errors\";\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n const firstAmp = input.indexOf(\"&\");\n if (firstAmp === -1) {\n return input;\n }\n\n let result = \"\";\n let i = 0;\n\n while (i < input.length) {\n const amp = input.indexOf(\"&\", i);\n if (amp === -1) {\n if (i === 0) {\n return input;\n }\n return i < input.length ? result + input.slice(i) : result;\n }\n\n if (amp > i) {\n result += input.slice(i, amp);\n }\n\n const semi = input.indexOf(\";\", amp + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n let decoded: string | undefined;\n const marker = input[amp + 1];\n\n if (marker === \"#\") {\n const numeric = parseNumericEntity(input, amp + 2, semi);\n decoded = numeric === undefined ? undefined : decodeCodePoint(numeric);\n } else {\n decoded = decodeNamedEntity(input, amp + 1, semi);\n }\n\n if (decoded === undefined) {\n const entity = input.slice(amp + 1, semi);\n const err = new XmlSaxError(`Unknown entity: &${entity};`, amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n result += decoded;\n i = semi + 1;\n }\n\n return result;\n}\n\nfunction decodeNamedEntity(input: string, start: number, end: number): string | undefined {\n const len = end - start;\n if (len === 2) {\n if (input[start] === \"l\" && input[start + 1] === \"t\") {\n return \"<\";\n }\n if (input[start] === \"g\" && input[start + 1] === \"t\") {\n return \">\";\n }\n return undefined;\n }\n\n if (len === 3) {\n if (input[start] === \"a\" && input[start + 1] === \"m\" && input[start + 2] === \"p\") {\n return \"&\";\n }\n return undefined;\n }\n\n if (len === 4) {\n const maybeQuot =\n input[start] === \"q\" && input[start + 1] === \"u\" && input[start + 2] === \"o\" && input[start + 3] === \"t\";\n if (maybeQuot) {\n return \"\\\"\";\n }\n\n const maybeApos =\n input[start] === \"a\" && input[start + 1] === \"p\" && input[start + 2] === \"o\" && input[start + 3] === \"s\";\n if (maybeApos) {\n return \"'\";\n }\n }\n\n return undefined;\n}\n\nfunction parseNumericEntity(input: string, start: number, end: number): number | undefined {\n if (start >= end) {\n return undefined;\n }\n\n let i = start;\n let radix = 10;\n\n const marker = input[i];\n if (marker === \"x\" || marker === \"X\") {\n radix = 16;\n i += 1;\n }\n\n if (i >= end) {\n return undefined;\n }\n\n let value = 0;\n for (; i < end; i += 1) {\n const ch = input[i];\n if (ch === undefined) {\n return undefined;\n }\n\n const digit = radix === 16 ? hexDigit(ch) : decimalDigit(ch);\n if (digit === -1) {\n return undefined;\n }\n\n value = value * radix + digit;\n }\n\n return value;\n}\n\nfunction decimalDigit(ch: string): number {\n const code = ch.charCodeAt(0) - 48;\n if (code < 0 || code > 9) {\n return -1;\n }\n return code;\n}\n\nfunction hexDigit(ch: string): number {\n const code = ch.charCodeAt(0);\n if (code >= 48 && code <= 57) {\n return code - 48;\n }\n if (code >= 65 && code <= 70) {\n return code - 55;\n }\n if (code >= 97 && code <= 102) {\n return code - 87;\n }\n return -1;\n}\n\nfunction decodeCodePoint(codePoint: number): string | undefined {\n if (!Number.isFinite(codePoint)) {\n return undefined;\n }\n if (codePoint < 0 || codePoint > 0x10ffff) {\n return undefined;\n }\n if (codePoint >= 0xd800 && codePoint <= 0xdfff) {\n return undefined;\n }\n return String.fromCodePoint(codePoint);\n}\n\nexport function splitTextForEntities(text: string): { emit: string; carry: string } {\n const lastAmp = text.lastIndexOf(\"&\");\n if (lastAmp === -1) {\n return { emit: text, carry: \"\" };\n }\n\n if (!text.includes(\";\", lastAmp + 1)) {\n return {\n emit: text.slice(0, lastAmp),\n carry: text.slice(lastAmp)\n };\n }\n\n return { emit: text, carry: \"\" };\n}\n","import { assert } from \"./assert\";\nimport { decodeEntities, splitTextForEntities } from \"./entities\";\nimport { XmlSaxError } from \"./errors\";\nimport type {\n CloseTag,\n Doctype,\n OpenTag,\n ParserOptions,\n ProcessingInstruction,\n XmlAttribute\n} from \"./types\";\n\ntype NamespaceMap = Record<string, string>;\n\ninterface StackEntry {\n rawName: string;\n closeTag: CloseTag;\n}\n\ninterface RawAttribute {\n name: string;\n value: string;\n}\n\ninterface ResolvedName {\n name: string;\n prefix: string;\n local: string;\n uri: string;\n}\n\nconst DEFAULT_OPTIONS: Required<\n Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\" | \"coalesceText\" | \"trackPosition\">\n> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true,\n coalesceText: false,\n trackPosition: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\nconst WHITESPACE_RE = /\\s/;\nconst CRLF_RE = /\\r\\n?/g;\n\nconst NAME_START_TABLE = new Uint8Array(128);\nconst NAME_CHAR_TABLE = new Uint8Array(128);\n\nfor (let code = 65; code <= 90; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 97; code <= 122; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 48; code <= 57; code += 1) {\n NAME_CHAR_TABLE[code] = 1;\n}\nNAME_START_TABLE[95] = 1;\nNAME_CHAR_TABLE[95] = 1;\nNAME_CHAR_TABLE[58] = 1;\nNAME_CHAR_TABLE[45] = 1;\nNAME_CHAR_TABLE[46] = 1;\n\nexport class XmlSaxParser {\n private readonly xmlns: boolean;\n private readonly includeNamespaceAttributes: boolean;\n private readonly allowDoctype: boolean;\n private readonly coalesceText: boolean;\n private readonly trackPosition: boolean;\n private readonly onOpenTag: ((tag: OpenTag) => void) | undefined;\n private readonly onCloseTag: ((tag: CloseTag) => void) | undefined;\n private readonly onText: ((text: string) => void) | undefined;\n private readonly onCdata: ((text: string) => void) | undefined;\n private readonly onComment: ((text: string) => void) | undefined;\n private readonly onProcessingInstruction: ((pi: ProcessingInstruction) => void) | undefined;\n private readonly onDoctype: ((doctype: Doctype) => void) | undefined;\n private readonly onError: ((error: Error) => void) | undefined;\n private buffer = \"\";\n private offset = 0;\n private line = 1;\n private column = 1;\n private elementStack: StackEntry[] = [];\n private nsStack: NamespaceMap[] = [\n Object.assign(Object.create(null) as NamespaceMap, {\n xml: XML_NAMESPACE_URI,\n xmlns: XMLNS_NAMESPACE_URI\n })\n ];\n private closed = false;\n private pendingCR = false;\n private readonly pendingTextParts: string[] = [];\n private readonly _rawAttrs: RawAttribute[] = [];\n\n constructor(options: ParserOptions = {}) {\n const resolved = { ...DEFAULT_OPTIONS, ...options };\n this.xmlns = resolved.xmlns;\n this.includeNamespaceAttributes = resolved.includeNamespaceAttributes;\n this.allowDoctype = resolved.allowDoctype;\n this.coalesceText = resolved.coalesceText;\n this.trackPosition = resolved.trackPosition;\n this.onOpenTag = resolved.onOpenTag;\n this.onCloseTag = resolved.onCloseTag;\n this.onText = resolved.onText;\n this.onCdata = resolved.onCdata;\n this.onComment = resolved.onComment;\n this.onProcessingInstruction = resolved.onProcessingInstruction;\n this.onDoctype = resolved.onDoctype;\n this.onError = resolved.onError;\n }\n\n feed(chunk: string): void {\n if (this.closed) {\n this._error(\"Parser is closed\");\n }\n if (!chunk) {\n return;\n }\n this.buffer += chunk;\n this._parseBuffer(false);\n }\n\n close(): void {\n if (this.closed) {\n return;\n }\n this._parseBuffer(true);\n this._flushPendingCR();\n this._flushTextBuffer();\n if (this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n if (this.elementStack.length > 0) {\n this._error(\"Unclosed tag(s) remaining\");\n }\n this.closed = true;\n }\n\n private _parseBuffer(final: boolean): void {\n let i = 0;\n\n while (i < this.buffer.length) {\n const lt = this.buffer.indexOf(\"<\", i);\n if (lt === -1) {\n const tail = this.buffer.slice(i);\n if (!tail.includes(\"&\")) {\n if (tail.length > 0) {\n this._emitText(tail, true);\n this._advance(tail);\n }\n } else {\n const split = splitTextForEntities(tail);\n if (split.emit.length > 0) {\n this._emitText(split.emit, true);\n this._advance(split.emit);\n }\n this.buffer = split.carry;\n return;\n }\n this.buffer = \"\";\n return;\n }\n\n if (lt > i) {\n const text = this.buffer.slice(i, lt);\n if (text.length > 0) {\n this._emitText(text, false);\n this._advance(text);\n }\n i = lt;\n }\n\n const consumed = this._parseMarkupFrom(lt, final);\n if (consumed === null) {\n break;\n }\n\n this._advanceSpan(lt, lt + consumed);\n i = lt + consumed;\n }\n\n this.buffer = this.buffer.slice(i);\n\n if (final && this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n }\n\n private _parseMarkupFrom(start: number, final: boolean): number | null {\n assert(this.buffer[start] === \"<\", \"Markup must start with '<'\");\n\n if (this.pendingCR) this._flushPendingCR();\n\n const secondCode = this.buffer.charCodeAt(start + 1);\n\n if (secondCode === 63) {\n const end = this.buffer.indexOf(\"?>\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated processing instruction\");\n }\n return null;\n }\n const body = this.buffer.slice(start + 2, end).trim();\n const split = body.search(WHITESPACE_RE);\n const target = split === -1 ? body : body.slice(0, split);\n const data = split === -1 ? \"\" : body.slice(split).trim();\n const pi: ProcessingInstruction = { target, body: data };\n this._flushTextBuffer();\n this.onProcessingInstruction?.(pi);\n return end + 2 - start;\n }\n\n if (secondCode === 33) {\n const thirdCode = this.buffer.charCodeAt(start + 2);\n\n if (thirdCode === 45 && this.buffer.charCodeAt(start + 3) === 45) {\n const end = this.buffer.indexOf(\"-->\", start + 4);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated comment\");\n }\n return null;\n }\n const comment = this.buffer.slice(start + 4, end);\n this._flushTextBuffer();\n this.onComment?.(comment);\n return end + 3 - start;\n }\n\n if (thirdCode === 91 && this.buffer.startsWith(\"<![CDATA[\", start)) {\n const end = this.buffer.indexOf(\"]]>\", start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated CDATA section\");\n }\n return null;\n }\n const cdata = this.buffer.slice(start + 9, end);\n const normalized = this._normalizeText(cdata, false);\n if (normalized.length > 0) {\n this._flushTextBuffer();\n this.onCdata?.(normalized);\n }\n return end + 3 - start;\n }\n\n if (thirdCode === 68 && this.buffer.startsWith(\"<!DOCTYPE\", start)) {\n const end = this._findDoctypeEnd(start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated doctype declaration\");\n }\n return null;\n }\n if (!this.allowDoctype) {\n this._error(\"Doctype is not allowed\");\n }\n const raw = this.buffer.slice(start + 9, end).trim();\n const doctype: Doctype = { raw };\n this._flushTextBuffer();\n this.onDoctype?.(doctype);\n return end + 1 - start;\n }\n }\n\n if (secondCode === 47) {\n const end = this.buffer.indexOf(\">\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated closing tag\");\n }\n return null;\n }\n\n let i = this._skipWhitespace(this.buffer, start + 2, end);\n const parsed = this._parseName(this.buffer, i, end);\n i = this._skipWhitespace(this.buffer, parsed.end, end);\n if (i !== end) {\n this._error(\"Invalid closing tag\");\n }\n\n this._handleCloseTag(parsed.name, parsed.end);\n return end + 1 - start;\n }\n\n const tagEnd = this._findTagEnd(start + 1);\n if (tagEnd === -1) {\n if (final) {\n this._error(\"Unterminated start tag\");\n }\n return null;\n }\n\n this._handleStartTagRange(start + 1, tagEnd);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTagRange(start: number, end: number): void {\n this._flushTextBuffer();\n\n const parsed = this._parseStartTagRange(start, end);\n const selfClosing = parsed.selfClosing;\n\n if (!this.xmlns) {\n const plainName = parsed.name;\n const attributes: Record<string, XmlAttribute | string> = Object.create(null) as Record<\n string,\n XmlAttribute | string\n >;\n\n for (const attr of parsed.attributes) {\n attributes[attr.name] = attr.value;\n }\n\n const tag: OpenTag = {\n name: plainName,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({ name: plainName });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: { name: plainName }\n });\n return;\n }\n\n const parentNs = this._currentNs();\n let ns = parentNs;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = Object.create(null) as Record<string, XmlAttribute>;\n\n for (const attr of parsed.attributes) {\n if (!this.includeNamespaceAttributes) {\n if (attr.name === \"xmlns\" || attr.name.startsWith(\"xmlns:\")) {\n continue;\n }\n }\n const resolvedAttr = this._resolveAttributeName(attr.name, ns);\n attributes[resolvedAttr.name] = {\n name: resolvedAttr.name,\n value: attr.value,\n prefix: resolvedAttr.prefix,\n local: resolvedAttr.local,\n uri: resolvedAttr.uri\n };\n }\n\n const tag: OpenTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n }\n });\n this.nsStack.push(ns);\n }\n\n private _parseStartTagRange(\n start: number,\n end: number\n ): { name: string; attributes: RawAttribute[]; selfClosing: boolean } {\n let i = this._skipWhitespace(this.buffer, start, end);\n const parsedName = this._parseName(this.buffer, i, end);\n i = parsedName.end;\n\n const attributes = this._rawAttrs;\n attributes.length = 0;\n let selfClosing = false;\n\n while (i < end) {\n i = this._skipWhitespace(this.buffer, i, end);\n if (i >= end) {\n break;\n }\n\n if (this.buffer.charCodeAt(i) === 47) {\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n if (i !== end) {\n this._error(\"Invalid self-closing tag\");\n }\n selfClosing = true;\n break;\n }\n\n const attrName = this._parseName(this.buffer, i, end);\n i = attrName.end;\n i = this._skipWhitespace(this.buffer, i, end);\n\n if (this.buffer.charCodeAt(i) !== 61) {\n this._error(\"Attribute without '='\");\n }\n\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n\n const quoteCode = this.buffer.charCodeAt(i);\n if (quoteCode !== 34 && quoteCode !== 39) {\n this._error(\"Attribute value must be quoted\");\n }\n\n const quote = String.fromCharCode(quoteCode);\n i += 1;\n\n const valueEnd = this.buffer.indexOf(quote, i);\n if (valueEnd === -1 || valueEnd >= end) {\n this._error(\"Unterminated attribute value\");\n }\n\n const rawValue = this.buffer.slice(i, valueEnd);\n const normalized = rawValue.includes(\"\\r\") ? rawValue.replace(CRLF_RE, \"\\n\") : rawValue;\n const value = !normalized.includes(\"&\") ? normalized : decodeEntities(normalized, this.onError);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes, selfClosing };\n }\n\n private _handleCloseTag(rawName: string, _nameEnd?: number): void {\n this._flushTextBuffer();\n\n const entry = this.elementStack.pop();\n const ns = this.xmlns ? this.nsStack.pop() : this._currentNs();\n\n if (!entry || !ns) {\n this._error(\"Closing tag without matching start tag\");\n }\n\n if (entry.rawName !== rawName) {\n this._error(`Mismatched closing tag: expected </${entry.rawName}>`);\n }\n\n this.onCloseTag?.(entry.closeTag);\n }\n\n private _emitText(text: string, allowPendingCR: boolean): void {\n const normalized = this._normalizeText(text, allowPendingCR);\n if (normalized.length === 0) {\n return;\n }\n\n if (!normalized.includes(\"&\")) {\n this._emitDecodedText(normalized);\n return;\n }\n\n const decoded = decodeEntities(normalized, this.onError);\n if (decoded.length > 0) {\n this._emitDecodedText(decoded);\n }\n }\n\n private _emitDecodedText(text: string): void {\n if (!this.coalesceText) {\n this.onText?.(text);\n return;\n }\n this.pendingTextParts.push(text);\n }\n\n private _flushTextBuffer(): void {\n if (!this.coalesceText || this.pendingTextParts.length === 0) {\n return;\n }\n const first = this.pendingTextParts[0];\n const text = this.pendingTextParts.length === 1 && first !== undefined ? first : this.pendingTextParts.join(\"\");\n this.pendingTextParts.length = 0;\n this.onText?.(text);\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return { name: rawName, prefix: \"\", local: rawName, uri: \"\" };\n }\n return {\n name: rawName,\n prefix: rawName.slice(0, split),\n local: rawName.slice(split + 1),\n uri: \"\"\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns[\"\"] ?? \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _resolveAttributeName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n return this._resolveName(rawName, ns);\n }\n\n if (rawName === \"xmlns\") {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns.xmlns ?? XMLNS_NAMESPACE_URI\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _findTagEnd(start: number): number {\n const quickEnd = this.buffer.indexOf(\">\", start);\n if (quickEnd === -1) {\n return -1;\n }\n\n const firstDoubleQuote = this.buffer.indexOf(\"\\\"\", start);\n const firstSingleQuote = this.buffer.indexOf(\"'\", start);\n const firstQuote =\n firstDoubleQuote === -1\n ? firstSingleQuote\n : firstSingleQuote === -1\n ? firstDoubleQuote\n : Math.min(firstDoubleQuote, firstSingleQuote);\n\n if (firstQuote === -1 || firstQuote > quickEnd) {\n return quickEnd;\n }\n\n let quoteCode = 0;\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 62) {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quoteCode = 0;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 91) {\n bracketDepth += 1;\n continue;\n }\n if (code === 93) {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (code === 62 && bracketDepth === 0) {\n return i;\n }\n }\n\n return -1;\n }\n\n private _parseName(input: string, start: number, end: number): { name: string; end: number } {\n if (start >= end) {\n this._error(\"Expected name\");\n }\n\n const firstCode = input.charCodeAt(start);\n if (firstCode !== firstCode || firstCode >= 128 || NAME_START_TABLE[firstCode] === 0) {\n this._error(`Invalid name start: '${input[start] ?? \"\"}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code >= 128 || NAME_CHAR_TABLE[code] === 0) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code !== 32 && code !== 9 && code !== 10 && code !== 13) {\n break;\n }\n i += 1;\n }\n return i;\n }\n\n private _currentNs(): NamespaceMap {\n return this.nsStack[this.nsStack.length - 1] ?? (Object.create(null) as NamespaceMap);\n }\n\n private _advance(text: string): void {\n this.offset += text.length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = text.indexOf(\"\\n\");\n if (pos === -1) {\n this.column += text.length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1) {\n newlineCount += 1;\n lastNewline = pos;\n pos = text.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = text.length - lastNewline;\n }\n\n private _normalizeText(text: string, allowPendingCR: boolean): string {\n if (!text) {\n return \"\";\n }\n\n // Fast path for common chunks: no CR handling and no pending state.\n if (!this.pendingCR && !text.includes(\"\\r\")) {\n return text;\n }\n\n let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.charCodeAt(0) === 10) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.charCodeAt(value.length - 1) === 13) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = !value.includes(\"\\r\") ? value : value.replace(CRLF_RE, \"\\n\");\n return prefix ? `${prefix}${normalized}` : normalized;\n }\n\n private _advanceSpan(start: number, end: number): void {\n const length = end - start;\n this.offset += length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = this.buffer.indexOf(\"\\n\", start);\n if (pos === -1 || pos >= end) {\n this.column += length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1 && pos < end) {\n newlineCount += 1;\n lastNewline = pos;\n pos = this.buffer.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = end - lastNewline;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this._emitDecodedText(\"\\n\");\n }\n\n private _error(message: string): never {\n const line = this.trackPosition ? this.line : 0;\n const column = this.trackPosition ? this.column : 0;\n const error = new XmlSaxError(message, this.offset, line, column);\n this.onError?.(error);\n throw error;\n }\n}\n","import { XmlSaxParser } from \"./parser\";\nimport type { ParserOptions, XmlNode } from \"./types\";\n\nexport class TreeBuilder {\n private stack: XmlNode[] = [];\n private root: XmlNode | null = null;\n\n onOpenTag = (tag: { name: string; attributes: Record<string, { value: string } | string> }): void => {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, typeof attr === \"string\" ? attr : attr.value])\n ),\n children: []\n };\n\n const parent = this.stack[this.stack.length - 1];\n if (parent) {\n parent.children?.push(node);\n } else {\n this.root = node;\n }\n\n this.stack.push(node);\n };\n\n onText = (text: string): void => {\n if (!this.stack.length) {\n return;\n }\n const node = this.stack[this.stack.length - 1];\n if (!node) {\n return;\n }\n const children = node.children ?? [];\n const last = children[children.length - 1];\n if (typeof last === \"string\") {\n children[children.length - 1] = last + text;\n } else {\n children.push(text);\n }\n node.children = children;\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n this.stack.pop();\n };\n\n getRoot(): XmlNode {\n if (!this.root) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n}\n\nexport function parseXmlString(xml: string, options: ParserOptions = {}): XmlNode {\n const builder = new TreeBuilder();\n const parser = new XmlSaxParser({\n ...options,\n onOpenTag: builder.onOpenTag,\n onText: builder.onText,\n onCdata: builder.onCdata,\n onCloseTag: builder.onCloseTag\n });\n\n parser.feed(xml);\n parser.close();\n return builder.getRoot();\n}\n","import type { SerializeOptions, XmlChild, XmlNode } from \"./types\";\n\nconst DEFAULT_OPTIONS: Required<Pick<SerializeOptions, \"pretty\" | \"indent\" | \"newline\" | \"xmlDeclaration\">> = {\n pretty: false,\n indent: \" \",\n newline: \"\\n\",\n xmlDeclaration: false\n};\n\nexport function serializeXml(node: XmlNode, options: SerializeOptions = {}): string {\n const settings = { ...DEFAULT_OPTIONS, ...options };\n let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \""\");\n}\n","import { serializeXml } from \"./serializer\";\nimport type {\n ObjectBuilderOptions,\n ObjectToXmlOptions,\n OpenTag,\n XmlAttribute,\n XmlBuilderOptions,\n XmlInputObject,\n XmlInputValue,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\ntype XmlBuilderSettings = Required<Omit<XmlBuilderOptions, \"arrayElements\" | \"rootName\">> &\n Pick<XmlBuilderOptions, \"arrayElements\" | \"rootName\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n const prefix = value.prefix ?? \"\";\n const local = value.local ?? (prefix ? value.name.slice(prefix.length + 1) : value.name);\n return {\n name: value.name,\n localName: local,\n prefix,\n uri: value.uri ?? \"\"\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport function buildXmlNode(obj: XmlInputValue, options: XmlBuilderOptions = {}): XmlNode {\n const settings = buildXmlSettings(options);\n const root = resolveRoot(obj, settings);\n const rootName = normalizeName(root.name, settings);\n return buildElement(rootName, root.value, settings, []);\n}\n\nexport function objectToXml(obj: XmlInputValue, options: ObjectToXmlOptions = {}): string {\n const node = buildXmlNode(obj, options);\n return serializeXml(node, options);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag = (tag: OpenTag): void => {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n };\n\n onText = (text: string): void => {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n };\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildXmlSettings(options: XmlBuilderOptions): XmlBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeXmlName(name: string, options: XmlBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute | string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = typeof attr === \"string\" ? attr : attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction resolveRoot(obj: XmlInputValue, options: XmlBuilderSettings): { name: string; value: XmlInputValue } {\n if (isRecord(obj)) {\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const name = keys[0] ?? \"\";\n return { name, value: obj[name] };\n }\n }\n\n if (!options.rootName) {\n throw new Error(\"Root element name is required when object has multiple keys\");\n }\n\n return { name: options.rootName, value: obj };\n}\n\nfunction buildElement(\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): XmlNode {\n const attributes: Record<string, string> = Object.create(null) as Record<string, string>;\n const children: (XmlNode | string)[] = [];\n const nextPath = [...path, name];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, nextPath);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n if (isAttributeKey(key, options)) {\n const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);\n const attrValue = coerceText(entryValue);\n if (attrValue !== null) {\n attributes[attrName] = attrValue;\n }\n continue;\n }\n\n if (key === options.textKey) {\n appendText(children, entryValue, options);\n continue;\n }\n\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, nextPath);\n }\n }\n\n return finalizeNode(name, attributes, children);\n}\n\nfunction addChildElements(\n children: (XmlNode | string)[],\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];\n\n for (const item of items) {\n if (item === undefined || item === null) {\n children.push({ name });\n continue;\n }\n children.push(buildElement(name, item, options, path));\n }\n}\n\nfunction appendContent(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, path);\n }\n return;\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, path);\n }\n }\n}\n\nfunction appendText(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n const parts = value\n .map((item) => coerceText(item))\n .filter((item): item is string => item !== null);\n if (parts.length === 0) {\n return;\n }\n if (options.coalesceText) {\n children.push(parts.join(\"\"));\n return;\n }\n for (const part of parts) {\n children.push(part);\n }\n return;\n }\n\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n}\n\nfunction finalizeNode(\n name: string,\n attributes: Record<string, string>,\n children: (XmlNode | string)[]\n): XmlNode {\n const node: XmlNode = { name };\n if (Object.keys(attributes).length > 0) {\n node.attributes = attributes;\n }\n if (children.length > 0) {\n node.children = children;\n }\n return node;\n}\n\nfunction isAttributeKey(key: string, options: XmlBuilderSettings): boolean {\n if (!options.attributePrefix) {\n return false;\n }\n return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;\n}\n\nfunction isRecord(value: XmlInputValue): value is XmlInputObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: XmlInputValue): value is string | number | boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction coerceText(value: XmlInputValue): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n return null;\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/tokens.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["attributes","tag","openPath","depth","split","DEFAULT_OPTIONS","indent","inner"],"mappings":"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","file":"index.cjs","sourcesContent":["const DEV = typeof process !== \"undefined\" ? process.env.NODE_ENV !== \"production\" : true;\n\nexport function assert(condition: boolean, message: string): void {\n if (!DEV) {\n return;\n }\n if (!condition) {\n throw new Error(`Invariant failed: ${message}`);\n }\n}\n","export class XmlSaxError extends Error {\n readonly offset: number;\n readonly line: number;\n readonly column: number;\n\n constructor(message: string, offset: number, line: number, column: number) {\n super(`${message} at ${line}:${column}`);\n this.name = \"XmlSaxError\";\n this.offset = offset;\n this.line = line;\n this.column = column;\n }\n}\n","import { XmlSaxError } from \"./errors\";\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n const firstAmp = input.indexOf(\"&\");\n if (firstAmp === -1) {\n return input;\n }\n\n let result = \"\";\n let i = 0;\n\n while (i < input.length) {\n const amp = input.indexOf(\"&\", i);\n if (amp === -1) {\n if (i === 0) {\n return input;\n }\n return i < input.length ? result + input.slice(i) : result;\n }\n\n if (amp > i) {\n result += input.slice(i, amp);\n }\n\n const semi = input.indexOf(\";\", amp + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n let decoded: string | undefined;\n const marker = input[amp + 1];\n\n if (marker === \"#\") {\n const numeric = parseNumericEntity(input, amp + 2, semi);\n decoded = numeric === undefined ? undefined : decodeCodePoint(numeric);\n } else {\n decoded = decodeNamedEntity(input, amp + 1, semi);\n }\n\n if (decoded === undefined) {\n const entity = input.slice(amp + 1, semi);\n const err = new XmlSaxError(`Unknown entity: &${entity};`, amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n result += decoded;\n i = semi + 1;\n }\n\n return result;\n}\n\nfunction decodeNamedEntity(input: string, start: number, end: number): string | undefined {\n const len = end - start;\n if (len === 2) {\n if (input[start] === \"l\" && input[start + 1] === \"t\") {\n return \"<\";\n }\n if (input[start] === \"g\" && input[start + 1] === \"t\") {\n return \">\";\n }\n return undefined;\n }\n\n if (len === 3) {\n if (input[start] === \"a\" && input[start + 1] === \"m\" && input[start + 2] === \"p\") {\n return \"&\";\n }\n return undefined;\n }\n\n if (len === 4) {\n const maybeQuot =\n input[start] === \"q\" && input[start + 1] === \"u\" && input[start + 2] === \"o\" && input[start + 3] === \"t\";\n if (maybeQuot) {\n return \"\\\"\";\n }\n\n const maybeApos =\n input[start] === \"a\" && input[start + 1] === \"p\" && input[start + 2] === \"o\" && input[start + 3] === \"s\";\n if (maybeApos) {\n return \"'\";\n }\n }\n\n return undefined;\n}\n\nfunction parseNumericEntity(input: string, start: number, end: number): number | undefined {\n if (start >= end) {\n return undefined;\n }\n\n let i = start;\n let radix = 10;\n\n const marker = input[i];\n if (marker === \"x\" || marker === \"X\") {\n radix = 16;\n i += 1;\n }\n\n if (i >= end) {\n return undefined;\n }\n\n let value = 0;\n for (; i < end; i += 1) {\n const ch = input[i];\n if (ch === undefined) {\n return undefined;\n }\n\n const digit = radix === 16 ? hexDigit(ch) : decimalDigit(ch);\n if (digit === -1) {\n return undefined;\n }\n\n value = value * radix + digit;\n }\n\n return value;\n}\n\nfunction decimalDigit(ch: string): number {\n const code = ch.charCodeAt(0) - 48;\n if (code < 0 || code > 9) {\n return -1;\n }\n return code;\n}\n\nfunction hexDigit(ch: string): number {\n const code = ch.charCodeAt(0);\n if (code >= 48 && code <= 57) {\n return code - 48;\n }\n if (code >= 65 && code <= 70) {\n return code - 55;\n }\n if (code >= 97 && code <= 102) {\n return code - 87;\n }\n return -1;\n}\n\nfunction decodeCodePoint(codePoint: number): string | undefined {\n if (!Number.isFinite(codePoint)) {\n return undefined;\n }\n if (codePoint < 0 || codePoint > 0x10ffff) {\n return undefined;\n }\n if (codePoint >= 0xd800 && codePoint <= 0xdfff) {\n return undefined;\n }\n return String.fromCodePoint(codePoint);\n}\n\nexport function splitTextForEntities(text: string): { emit: string; carry: string } {\n const lastAmp = text.lastIndexOf(\"&\");\n if (lastAmp === -1) {\n return { emit: text, carry: \"\" };\n }\n\n if (!text.includes(\";\", lastAmp + 1)) {\n return {\n emit: text.slice(0, lastAmp),\n carry: text.slice(lastAmp)\n };\n }\n\n return { emit: text, carry: \"\" };\n}\n","import type { CloseTag, Doctype, OpenTag, ProcessingInstruction, XmlPosition } from \"./types\";\n\nexport type XmlTokenKind =\n | \"open-tag\"\n | \"close-tag\"\n | \"text\"\n | \"cdata\"\n | \"comment\"\n | \"processing-instruction\"\n | \"doctype\"\n | \"end\";\n\nexport abstract class XmlToken {\n readonly kind: XmlTokenKind;\n readonly position: XmlPosition | undefined;\n\n protected constructor(kind: XmlTokenKind, position?: XmlPosition) {\n this.kind = kind;\n this.position = position;\n }\n}\n\nexport class OpenTagToken extends XmlToken {\n readonly tag: OpenTag;\n readonly depth: number;\n readonly path: readonly string[];\n\n constructor(tag: OpenTag, depth: number, path: readonly string[], position?: XmlPosition) {\n super(\"open-tag\", position);\n this.tag = tag;\n this.depth = depth;\n this.path = path;\n }\n}\n\nexport class CloseTagToken extends XmlToken {\n readonly tag: CloseTag;\n readonly depth: number;\n readonly path: readonly string[];\n\n constructor(tag: CloseTag, depth: number, path: readonly string[], position?: XmlPosition) {\n super(\"close-tag\", position);\n this.tag = tag;\n this.depth = depth;\n this.path = path;\n }\n}\n\nexport class TextToken extends XmlToken {\n readonly text: string;\n\n constructor(text: string, position?: XmlPosition) {\n super(\"text\", position);\n this.text = text;\n }\n}\n\nexport class CdataToken extends XmlToken {\n readonly text: string;\n\n constructor(text: string, position?: XmlPosition) {\n super(\"cdata\", position);\n this.text = text;\n }\n}\n\nexport class CommentToken extends XmlToken {\n readonly text: string;\n\n constructor(text: string, position?: XmlPosition) {\n super(\"comment\", position);\n this.text = text;\n }\n}\n\nexport class ProcessingInstructionToken extends XmlToken {\n readonly processingInstruction: ProcessingInstruction;\n\n constructor(processingInstruction: ProcessingInstruction, position?: XmlPosition) {\n super(\"processing-instruction\", position);\n this.processingInstruction = processingInstruction;\n }\n}\n\nexport class DoctypeToken extends XmlToken {\n readonly doctype: Doctype;\n\n constructor(doctype: Doctype, position?: XmlPosition) {\n super(\"doctype\", position);\n this.doctype = doctype;\n }\n}\n\nexport class EndToken extends XmlToken {\n constructor(position?: XmlPosition) {\n super(\"end\", position);\n }\n}\n\nexport type XmlAnyToken =\n | OpenTagToken\n | CloseTagToken\n | TextToken\n | CdataToken\n | CommentToken\n | ProcessingInstructionToken\n | DoctypeToken\n | EndToken;\n","import { assert } from \"./assert\";\nimport { decodeEntities, splitTextForEntities } from \"./entities\";\nimport { XmlSaxError } from \"./errors\";\nimport {\n CdataToken,\n CloseTagToken,\n CommentToken,\n DoctypeToken,\n EndToken,\n OpenTagToken,\n ProcessingInstructionToken,\n TextToken,\n type XmlAnyToken\n} from \"./tokens\";\nimport type {\n CloseTag,\n Doctype,\n OpenTag,\n ParserOptions,\n ProcessingInstruction,\n XmlAttribute,\n XmlPosition\n} from \"./types\";\n\ntype NamespaceMap = Record<string, string>;\n\ninterface StackEntry {\n rawName: string;\n closeTag: CloseTag;\n}\n\ninterface RawAttribute {\n name: string;\n value: string;\n}\n\ninterface ResolvedName {\n name: string;\n prefix: string;\n local: string;\n uri: string;\n}\n\nconst DEFAULT_OPTIONS: Required<\n Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\" | \"coalesceText\" | \"trackPosition\">\n> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true,\n coalesceText: true,\n trackPosition: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\nconst WHITESPACE_RE = /\\s/;\nconst CRLF_RE = /\\r\\n?/g;\n\nconst NAME_START_TABLE = new Uint8Array(128);\nconst NAME_CHAR_TABLE = new Uint8Array(128);\n\nfor (let code = 65; code <= 90; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 97; code <= 122; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 48; code <= 57; code += 1) {\n NAME_CHAR_TABLE[code] = 1;\n}\nNAME_START_TABLE[95] = 1;\nNAME_CHAR_TABLE[95] = 1;\nNAME_CHAR_TABLE[58] = 1;\nNAME_CHAR_TABLE[45] = 1;\nNAME_CHAR_TABLE[46] = 1;\n\nexport class XmlSaxParser {\n private readonly xmlns: boolean;\n private readonly includeNamespaceAttributes: boolean;\n private readonly allowDoctype: boolean;\n private readonly coalesceText: boolean;\n private readonly trackPosition: boolean;\n private buffer = \"\";\n private offset = 0;\n private line = 1;\n private column = 1;\n private readonly pathStack: string[] = [];\n private readonly tokenQueue: XmlAnyToken[] = [];\n private elementStack: StackEntry[] = [];\n private nsStack: NamespaceMap[] = [\n Object.assign(Object.create(null) as NamespaceMap, {\n xml: XML_NAMESPACE_URI,\n xmlns: XMLNS_NAMESPACE_URI\n })\n ];\n private closed = false;\n private pendingCR = false;\n private readonly pendingTextParts: string[] = [];\n private readonly _rawAttrs: RawAttribute[] = [];\n\n constructor(options: ParserOptions = {}) {\n const resolved = { ...DEFAULT_OPTIONS, ...options };\n this.xmlns = resolved.xmlns;\n this.includeNamespaceAttributes = resolved.includeNamespaceAttributes;\n this.allowDoctype = resolved.allowDoctype;\n this.coalesceText = resolved.coalesceText;\n this.trackPosition = resolved.trackPosition;\n }\n\n feed(chunk: string): XmlAnyToken[] {\n if (this.closed) {\n this._error(\"Parser is closed\");\n }\n if (!chunk) {\n return this.drainTokens();\n }\n this.buffer += chunk;\n this._parseBuffer(false);\n return this.drainTokens();\n }\n\n close(): XmlAnyToken[] {\n if (this.closed) {\n return this.drainTokens();\n }\n this._parseBuffer(true);\n this._flushPendingCR();\n this._flushTextBuffer();\n if (this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n if (this.elementStack.length > 0) {\n this._error(\"Unclosed tag(s) remaining\");\n }\n this.closed = true;\n this._pushToken(new EndToken(this._position()));\n return this.drainTokens();\n }\n\n drainTokens(): XmlAnyToken[] {\n if (this.tokenQueue.length === 0) {\n return [];\n }\n return this.tokenQueue.splice(0, this.tokenQueue.length);\n }\n\n *[Symbol.iterator](): IterableIterator<XmlAnyToken> {\n while (this.tokenQueue.length > 0) {\n const token = this.tokenQueue.shift();\n if (token) {\n yield token;\n }\n }\n }\n\n async *iterateChunks(chunks: Iterable<string> | AsyncIterable<string>): AsyncGenerator<XmlAnyToken> {\n for await (const chunk of chunks) {\n this.feed(chunk);\n yield* this;\n }\n this.close();\n yield* this;\n }\n\n private _parseBuffer(final: boolean): void {\n let i = 0;\n\n while (i < this.buffer.length) {\n const lt = this.buffer.indexOf(\"<\", i);\n if (lt === -1) {\n const tail = this.buffer.slice(i);\n if (!tail.includes(\"&\")) {\n if (tail.length > 0) {\n this._emitText(tail, true);\n this._advance(tail);\n }\n } else {\n const split = splitTextForEntities(tail);\n if (split.emit.length > 0) {\n this._emitText(split.emit, true);\n this._advance(split.emit);\n }\n this.buffer = split.carry;\n return;\n }\n this.buffer = \"\";\n return;\n }\n\n if (lt > i) {\n const text = this.buffer.slice(i, lt);\n if (text.length > 0) {\n this._emitText(text, false);\n this._advance(text);\n }\n i = lt;\n }\n\n const consumed = this._parseMarkupFrom(lt, final);\n if (consumed === null) {\n break;\n }\n\n this._advanceSpan(lt, lt + consumed);\n i = lt + consumed;\n }\n\n this.buffer = this.buffer.slice(i);\n\n if (final && this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n }\n\n private _parseMarkupFrom(start: number, final: boolean): number | null {\n assert(this.buffer[start] === \"<\", \"Markup must start with '<'\");\n\n if (this.pendingCR) this._flushPendingCR();\n\n const secondCode = this.buffer.charCodeAt(start + 1);\n\n if (secondCode === 63) {\n const end = this.buffer.indexOf(\"?>\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated processing instruction\");\n }\n return null;\n }\n const body = this.buffer.slice(start + 2, end).trim();\n const split = body.search(WHITESPACE_RE);\n const target = split === -1 ? body : body.slice(0, split);\n const data = split === -1 ? \"\" : body.slice(split).trim();\n const pi: ProcessingInstruction = { target, body: data };\n this._flushTextBuffer();\n this._pushToken(new ProcessingInstructionToken(pi, this._position()));\n return end + 2 - start;\n }\n\n if (secondCode === 33) {\n const thirdCode = this.buffer.charCodeAt(start + 2);\n\n if (thirdCode === 45 && this.buffer.charCodeAt(start + 3) === 45) {\n const end = this.buffer.indexOf(\"-->\", start + 4);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated comment\");\n }\n return null;\n }\n const comment = this.buffer.slice(start + 4, end);\n this._flushTextBuffer();\n this._pushToken(new CommentToken(comment, this._position()));\n return end + 3 - start;\n }\n\n if (thirdCode === 91 && this.buffer.startsWith(\"<![CDATA[\", start)) {\n const end = this.buffer.indexOf(\"]]>\", start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated CDATA section\");\n }\n return null;\n }\n const cdata = this.buffer.slice(start + 9, end);\n const normalized = this._normalizeText(cdata, false);\n if (normalized.length > 0) {\n this._flushTextBuffer();\n this._pushToken(new CdataToken(normalized, this._position()));\n }\n return end + 3 - start;\n }\n\n if (thirdCode === 68 && this.buffer.startsWith(\"<!DOCTYPE\", start)) {\n const end = this._findDoctypeEnd(start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated doctype declaration\");\n }\n return null;\n }\n if (!this.allowDoctype) {\n this._error(\"Doctype is not allowed\");\n }\n const raw = this.buffer.slice(start + 9, end).trim();\n const doctype: Doctype = { raw };\n this._flushTextBuffer();\n this._pushToken(new DoctypeToken(doctype, this._position()));\n return end + 1 - start;\n }\n }\n\n if (secondCode === 47) {\n const end = this.buffer.indexOf(\">\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated closing tag\");\n }\n return null;\n }\n\n let i = this._skipWhitespace(this.buffer, start + 2, end);\n const parsed = this._parseName(this.buffer, i, end);\n i = this._skipWhitespace(this.buffer, parsed.end, end);\n if (i !== end) {\n this._error(\"Invalid closing tag\");\n }\n\n this._handleCloseTag(parsed.name, parsed.end);\n return end + 1 - start;\n }\n\n const tagEnd = this._findTagEnd(start + 1);\n if (tagEnd === -1) {\n if (final) {\n this._error(\"Unterminated start tag\");\n }\n return null;\n }\n\n this._handleStartTagRange(start + 1, tagEnd);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTagRange(start: number, end: number): void {\n this._flushTextBuffer();\n\n const parsed = this._parseStartTagRange(start, end);\n const selfClosing = parsed.selfClosing;\n\n if (!this.xmlns) {\n const plainName = parsed.name;\n const attributes: Record<string, XmlAttribute | string> = Object.create(null) as Record<\n string,\n XmlAttribute | string\n >;\n\n for (const attr of parsed.attributes) {\n attributes[attr.name] = attr.value;\n }\n\n const tag: OpenTag = {\n name: plainName,\n attributes,\n isSelfClosing: selfClosing\n };\n\n const openPath = Object.freeze([...this.pathStack, plainName]);\n const depth = openPath.length;\n this._pushToken(new OpenTagToken(tag, depth, openPath, this._position()));\n\n if (selfClosing) {\n this._pushToken(new CloseTagToken({ name: plainName }, depth, openPath, this._position()));\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: { name: plainName }\n });\n this.pathStack.push(plainName);\n return;\n }\n\n const parentNs = this._currentNs();\n let ns = parentNs;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = Object.create(null) as Record<string, XmlAttribute>;\n\n for (const attr of parsed.attributes) {\n if (!this.includeNamespaceAttributes) {\n if (attr.name === \"xmlns\" || attr.name.startsWith(\"xmlns:\")) {\n continue;\n }\n }\n const resolvedAttr = this._resolveAttributeName(attr.name, ns);\n attributes[resolvedAttr.name] = {\n name: resolvedAttr.name,\n value: attr.value,\n prefix: resolvedAttr.prefix,\n local: resolvedAttr.local,\n uri: resolvedAttr.uri\n };\n }\n\n const tag: OpenTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri,\n attributes,\n isSelfClosing: selfClosing\n };\n\n const openPath = Object.freeze([...this.pathStack, resolvedName.name]);\n const depth = openPath.length;\n this._pushToken(new OpenTagToken(tag, depth, openPath, this._position()));\n\n if (selfClosing) {\n this._pushToken(\n new CloseTagToken(\n {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n },\n depth,\n openPath,\n this._position()\n )\n );\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n }\n });\n this.pathStack.push(resolvedName.name);\n this.nsStack.push(ns);\n }\n\n private _parseStartTagRange(\n start: number,\n end: number\n ): { name: string; attributes: RawAttribute[]; selfClosing: boolean } {\n let i = this._skipWhitespace(this.buffer, start, end);\n const parsedName = this._parseName(this.buffer, i, end);\n i = parsedName.end;\n\n const attributes = this._rawAttrs;\n attributes.length = 0;\n let selfClosing = false;\n\n while (i < end) {\n i = this._skipWhitespace(this.buffer, i, end);\n if (i >= end) {\n break;\n }\n\n if (this.buffer.charCodeAt(i) === 47) {\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n if (i !== end) {\n this._error(\"Invalid self-closing tag\");\n }\n selfClosing = true;\n break;\n }\n\n const attrName = this._parseName(this.buffer, i, end);\n i = attrName.end;\n i = this._skipWhitespace(this.buffer, i, end);\n\n if (this.buffer.charCodeAt(i) !== 61) {\n this._error(\"Attribute without '='\");\n }\n\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n\n const quoteCode = this.buffer.charCodeAt(i);\n if (quoteCode !== 34 && quoteCode !== 39) {\n this._error(\"Attribute value must be quoted\");\n }\n\n const quote = String.fromCharCode(quoteCode);\n i += 1;\n\n const valueEnd = this.buffer.indexOf(quote, i);\n if (valueEnd === -1 || valueEnd >= end) {\n this._error(\"Unterminated attribute value\");\n }\n\n const rawValue = this.buffer.slice(i, valueEnd);\n const normalized = rawValue.includes(\"\\r\") ? rawValue.replace(CRLF_RE, \"\\n\") : rawValue;\n const value = !normalized.includes(\"&\") ? normalized : decodeEntities(normalized);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes, selfClosing };\n }\n\n private _handleCloseTag(rawName: string, _nameEnd?: number): void {\n this._flushTextBuffer();\n\n const entry = this.elementStack.pop();\n const ns = this.xmlns ? this.nsStack.pop() : this._currentNs();\n\n if (!entry || !ns) {\n this._error(\"Closing tag without matching start tag\");\n }\n\n if (entry.rawName !== rawName) {\n this._error(`Mismatched closing tag: expected </${entry.rawName}>`);\n }\n\n const closePath = Object.freeze([...this.pathStack]);\n const depth = closePath.length;\n if (depth > 0) {\n this.pathStack.pop();\n }\n this._pushToken(new CloseTagToken(entry.closeTag, depth, closePath, this._position()));\n }\n\n private _emitText(text: string, allowPendingCR: boolean): void {\n const normalized = this._normalizeText(text, allowPendingCR);\n if (normalized.length === 0) {\n return;\n }\n\n if (!normalized.includes(\"&\")) {\n this._emitDecodedText(normalized);\n return;\n }\n\n const decoded = decodeEntities(normalized);\n if (decoded.length > 0) {\n this._emitDecodedText(decoded);\n }\n }\n\n private _emitDecodedText(text: string): void {\n if (!this.coalesceText) {\n this._pushToken(new TextToken(text, this._position()));\n return;\n }\n this.pendingTextParts.push(text);\n }\n\n private _flushTextBuffer(): void {\n if (!this.coalesceText || this.pendingTextParts.length === 0) {\n return;\n }\n const first = this.pendingTextParts[0];\n const text = this.pendingTextParts.length === 1 && first !== undefined ? first : this.pendingTextParts.join(\"\");\n this.pendingTextParts.length = 0;\n this._pushToken(new TextToken(text, this._position()));\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return { name: rawName, prefix: \"\", local: rawName, uri: \"\" };\n }\n return {\n name: rawName,\n prefix: rawName.slice(0, split),\n local: rawName.slice(split + 1),\n uri: \"\"\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns[\"\"] ?? \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _resolveAttributeName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n return this._resolveName(rawName, ns);\n }\n\n if (rawName === \"xmlns\") {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns.xmlns ?? XMLNS_NAMESPACE_URI\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _findTagEnd(start: number): number {\n const quickEnd = this.buffer.indexOf(\">\", start);\n if (quickEnd === -1) {\n return -1;\n }\n\n const firstDoubleQuote = this.buffer.indexOf(\"\\\"\", start);\n const firstSingleQuote = this.buffer.indexOf(\"'\", start);\n const firstQuote =\n firstDoubleQuote === -1\n ? firstSingleQuote\n : firstSingleQuote === -1\n ? firstDoubleQuote\n : Math.min(firstDoubleQuote, firstSingleQuote);\n\n if (firstQuote === -1 || firstQuote > quickEnd) {\n return quickEnd;\n }\n\n let quoteCode = 0;\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 62) {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quoteCode = 0;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 91) {\n bracketDepth += 1;\n continue;\n }\n if (code === 93) {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (code === 62 && bracketDepth === 0) {\n return i;\n }\n }\n\n return -1;\n }\n\n private _parseName(input: string, start: number, end: number): { name: string; end: number } {\n if (start >= end) {\n this._error(\"Expected name\");\n }\n\n const firstCode = input.charCodeAt(start);\n if (firstCode !== firstCode || firstCode >= 128 || NAME_START_TABLE[firstCode] === 0) {\n this._error(`Invalid name start: '${input[start] ?? \"\"}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code >= 128 || NAME_CHAR_TABLE[code] === 0) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code !== 32 && code !== 9 && code !== 10 && code !== 13) {\n break;\n }\n i += 1;\n }\n return i;\n }\n\n private _currentNs(): NamespaceMap {\n return this.nsStack[this.nsStack.length - 1] ?? (Object.create(null) as NamespaceMap);\n }\n\n private _advance(text: string): void {\n this.offset += text.length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = text.indexOf(\"\\n\");\n if (pos === -1) {\n this.column += text.length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1) {\n newlineCount += 1;\n lastNewline = pos;\n pos = text.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = text.length - lastNewline;\n }\n\n private _normalizeText(text: string, allowPendingCR: boolean): string {\n if (!text) {\n return \"\";\n }\n\n // Fast path for common chunks: no CR handling and no pending state.\n if (!this.pendingCR && !text.includes(\"\\r\")) {\n return text;\n }\n\n let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.charCodeAt(0) === 10) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.charCodeAt(value.length - 1) === 13) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = !value.includes(\"\\r\") ? value : value.replace(CRLF_RE, \"\\n\");\n return prefix ? `${prefix}${normalized}` : normalized;\n }\n\n private _advanceSpan(start: number, end: number): void {\n const length = end - start;\n this.offset += length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = this.buffer.indexOf(\"\\n\", start);\n if (pos === -1 || pos >= end) {\n this.column += length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1 && pos < end) {\n newlineCount += 1;\n lastNewline = pos;\n pos = this.buffer.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = end - lastNewline;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this._emitDecodedText(\"\\n\");\n }\n\n private _error(message: string): never {\n const line = this.trackPosition ? this.line : 0;\n const column = this.trackPosition ? this.column : 0;\n const error = new XmlSaxError(message, this.offset, line, column);\n throw error;\n }\n\n private _position(): XmlPosition {\n return {\n offset: this.offset,\n line: this.trackPosition ? this.line : 0,\n column: this.trackPosition ? this.column : 0\n };\n }\n\n private _pushToken(token: XmlAnyToken): void {\n this.tokenQueue.push(token);\n }\n}\n\nexport function tokenizeXml(xml: string, options: ParserOptions = {}): XmlAnyToken[] {\n const parser = new XmlSaxParser(options);\n parser.feed(xml);\n return parser.close();\n}\n\nexport async function* tokenizeXmlAsync(\n chunks: Iterable<string> | AsyncIterable<string>,\n options: ParserOptions = {}\n): AsyncGenerator<XmlAnyToken> {\n const parser = new XmlSaxParser(options);\n yield* parser.iterateChunks(chunks);\n}\n","import { XmlSaxParser } from \"./parser\";\nimport { CdataToken, CloseTagToken, OpenTagToken, TextToken } from \"./tokens\";\nimport type { ParserOptions, XmlNode } from \"./types\";\n\nexport class TreeBuilder {\n private stack: XmlNode[] = [];\n private root: XmlNode | null = null;\n\n onOpenTag(tag: { name: string; attributes: Record<string, { value: string } | string> }): void {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, typeof attr === \"string\" ? attr : attr.value])\n ),\n children: []\n };\n\n const parent = this.stack[this.stack.length - 1];\n if (parent) {\n parent.children?.push(node);\n } else {\n this.root = node;\n }\n\n this.stack.push(node);\n }\n\n onText(text: string): void {\n if (!this.stack.length) {\n return;\n }\n const node = this.stack[this.stack.length - 1];\n if (!node) {\n return;\n }\n const children = node.children ?? [];\n const last = children[children.length - 1];\n if (typeof last === \"string\") {\n children[children.length - 1] = last + text;\n } else {\n children.push(text);\n }\n node.children = children;\n }\n\n onCdata(text: string): void {\n this.onText(text);\n }\n\n onCloseTag(): void {\n this.stack.pop();\n }\n\n consume(token: OpenTagToken | TextToken | CdataToken | CloseTagToken): void {\n if (token instanceof OpenTagToken) {\n this.onOpenTag(token.tag);\n return;\n }\n if (token instanceof TextToken) {\n this.onText(token.text);\n return;\n }\n if (token instanceof CdataToken) {\n this.onCdata(token.text);\n return;\n }\n this.onCloseTag();\n }\n\n getRoot(): XmlNode {\n if (!this.root) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n}\n\nexport function parseXmlString(xml: string, options: ParserOptions = {}): XmlNode {\n const builder = new TreeBuilder();\n const parser = new XmlSaxParser(options);\n for (const token of parser.feed(xml)) {\n if (\n token instanceof OpenTagToken ||\n token instanceof TextToken ||\n token instanceof CdataToken ||\n token instanceof CloseTagToken\n ) {\n builder.consume(token);\n }\n }\n for (const token of parser.close()) {\n if (\n token instanceof OpenTagToken ||\n token instanceof TextToken ||\n token instanceof CdataToken ||\n token instanceof CloseTagToken\n ) {\n builder.consume(token);\n }\n }\n return builder.getRoot();\n}\n","import type { SerializeOptions, XmlChild, XmlNode } from \"./types\";\n\nconst DEFAULT_OPTIONS: Required<Pick<SerializeOptions, \"pretty\" | \"indent\" | \"newline\" | \"xmlDeclaration\">> = {\n pretty: false,\n indent: \" \",\n newline: \"\\n\",\n xmlDeclaration: false\n};\n\nexport function serializeXml(node: XmlNode, options: SerializeOptions = {}): string {\n const settings = { ...DEFAULT_OPTIONS, ...options };\n let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \""\");\n}\n","import { serializeXml } from \"./serializer\";\nimport { CdataToken, OpenTagToken, TextToken } from \"./tokens\";\nimport type { CloseTagToken } from \"./tokens\";\nimport type {\n ObjectBuilderOptions,\n ObjectToXmlOptions,\n OpenTag,\n XmlAttribute,\n XmlBuilderOptions,\n XmlInputObject,\n XmlInputValue,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\ntype XmlBuilderSettings = Required<Omit<XmlBuilderOptions, \"arrayElements\" | \"rootName\">> &\n Pick<XmlBuilderOptions, \"arrayElements\" | \"rootName\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n const prefix = value.prefix ?? \"\";\n const local = value.local ?? (prefix ? value.name.slice(prefix.length + 1) : value.name);\n return {\n name: value.name,\n localName: local,\n prefix,\n uri: value.uri ?? \"\"\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport function buildXmlNode(obj: XmlInputValue, options: XmlBuilderOptions = {}): XmlNode {\n const settings = buildXmlSettings(options);\n const root = resolveRoot(obj, settings);\n const rootName = normalizeName(root.name, settings);\n return buildElement(rootName, root.value, settings, []);\n}\n\nexport function objectToXml(obj: XmlInputValue, options: ObjectToXmlOptions = {}): string {\n const node = buildXmlNode(obj, options);\n return serializeXml(node, options);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag(tag: OpenTag): void {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n }\n\n onText(text: string): void {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n }\n\n onCdata(text: string): void {\n this.onText(text);\n }\n\n onCloseTag(): void {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n }\n\n consume(token: OpenTagToken | TextToken | CdataToken | CloseTagToken): void {\n if (token instanceof OpenTagToken) {\n this.onOpenTag(token.tag);\n return;\n }\n if (token instanceof TextToken) {\n this.onText(token.text);\n return;\n }\n if (token instanceof CdataToken) {\n this.onCdata(token.text);\n return;\n }\n this.onCloseTag();\n }\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildXmlSettings(options: XmlBuilderOptions): XmlBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeXmlName(name: string, options: XmlBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute | string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = typeof attr === \"string\" ? attr : attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction resolveRoot(obj: XmlInputValue, options: XmlBuilderSettings): { name: string; value: XmlInputValue } {\n if (isRecord(obj)) {\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const name = keys[0] ?? \"\";\n return { name, value: obj[name] };\n }\n }\n\n if (!options.rootName) {\n throw new Error(\"Root element name is required when object has multiple keys\");\n }\n\n return { name: options.rootName, value: obj };\n}\n\nfunction buildElement(\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): XmlNode {\n const attributes: Record<string, string> = Object.create(null) as Record<string, string>;\n const children: (XmlNode | string)[] = [];\n const nextPath = [...path, name];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, nextPath);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n if (isAttributeKey(key, options)) {\n const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);\n const attrValue = coerceText(entryValue);\n if (attrValue !== null) {\n attributes[attrName] = attrValue;\n }\n continue;\n }\n\n if (key === options.textKey) {\n appendText(children, entryValue, options);\n continue;\n }\n\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, nextPath);\n }\n }\n\n return finalizeNode(name, attributes, children);\n}\n\nfunction addChildElements(\n children: (XmlNode | string)[],\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];\n\n for (const item of items) {\n if (item === undefined || item === null) {\n children.push({ name });\n continue;\n }\n children.push(buildElement(name, item, options, path));\n }\n}\n\nfunction appendContent(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, path);\n }\n return;\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, path);\n }\n }\n}\n\nfunction appendText(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n const parts = value\n .map((item) => coerceText(item))\n .filter((item): item is string => item !== null);\n if (parts.length === 0) {\n return;\n }\n if (options.coalesceText) {\n children.push(parts.join(\"\"));\n return;\n }\n for (const part of parts) {\n children.push(part);\n }\n return;\n }\n\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n}\n\nfunction finalizeNode(\n name: string,\n attributes: Record<string, string>,\n children: (XmlNode | string)[]\n): XmlNode {\n const node: XmlNode = { name };\n if (Object.keys(attributes).length > 0) {\n node.attributes = attributes;\n }\n if (children.length > 0) {\n node.children = children;\n }\n return node;\n}\n\nfunction isAttributeKey(key: string, options: XmlBuilderSettings): boolean {\n if (!options.attributePrefix) {\n return false;\n }\n return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;\n}\n\nfunction isRecord(value: XmlInputValue): value is XmlInputObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: XmlInputValue): value is string | number | boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction coerceText(value: XmlInputValue): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n return null;\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -37,15 +37,8 @@ interface ParserOptions {
|
|
|
37
37
|
allowDoctype?: boolean;
|
|
38
38
|
coalesceText?: boolean;
|
|
39
39
|
trackPosition?: boolean;
|
|
40
|
-
onOpenTag?: (tag: OpenTag) => void;
|
|
41
|
-
onCloseTag?: (tag: CloseTag) => void;
|
|
42
|
-
onText?: (text: string) => void;
|
|
43
|
-
onCdata?: (text: string) => void;
|
|
44
|
-
onComment?: (text: string) => void;
|
|
45
|
-
onProcessingInstruction?: (pi: ProcessingInstruction) => void;
|
|
46
|
-
onDoctype?: (doctype: Doctype) => void;
|
|
47
|
-
onError?: (error: Error) => void;
|
|
48
40
|
}
|
|
41
|
+
type XmlChunkIterable = Iterable<string> | AsyncIterable<string>;
|
|
49
42
|
type XmlChild = XmlNode | string;
|
|
50
43
|
interface XmlNode {
|
|
51
44
|
name: string;
|
|
@@ -80,24 +73,61 @@ interface XmlInputObject {
|
|
|
80
73
|
interface ObjectToXmlOptions extends XmlBuilderOptions, SerializeOptions {
|
|
81
74
|
}
|
|
82
75
|
|
|
76
|
+
type XmlTokenKind = "open-tag" | "close-tag" | "text" | "cdata" | "comment" | "processing-instruction" | "doctype" | "end";
|
|
77
|
+
declare abstract class XmlToken {
|
|
78
|
+
readonly kind: XmlTokenKind;
|
|
79
|
+
readonly position: XmlPosition | undefined;
|
|
80
|
+
protected constructor(kind: XmlTokenKind, position?: XmlPosition);
|
|
81
|
+
}
|
|
82
|
+
declare class OpenTagToken extends XmlToken {
|
|
83
|
+
readonly tag: OpenTag;
|
|
84
|
+
readonly depth: number;
|
|
85
|
+
readonly path: readonly string[];
|
|
86
|
+
constructor(tag: OpenTag, depth: number, path: readonly string[], position?: XmlPosition);
|
|
87
|
+
}
|
|
88
|
+
declare class CloseTagToken extends XmlToken {
|
|
89
|
+
readonly tag: CloseTag;
|
|
90
|
+
readonly depth: number;
|
|
91
|
+
readonly path: readonly string[];
|
|
92
|
+
constructor(tag: CloseTag, depth: number, path: readonly string[], position?: XmlPosition);
|
|
93
|
+
}
|
|
94
|
+
declare class TextToken extends XmlToken {
|
|
95
|
+
readonly text: string;
|
|
96
|
+
constructor(text: string, position?: XmlPosition);
|
|
97
|
+
}
|
|
98
|
+
declare class CdataToken extends XmlToken {
|
|
99
|
+
readonly text: string;
|
|
100
|
+
constructor(text: string, position?: XmlPosition);
|
|
101
|
+
}
|
|
102
|
+
declare class CommentToken extends XmlToken {
|
|
103
|
+
readonly text: string;
|
|
104
|
+
constructor(text: string, position?: XmlPosition);
|
|
105
|
+
}
|
|
106
|
+
declare class ProcessingInstructionToken extends XmlToken {
|
|
107
|
+
readonly processingInstruction: ProcessingInstruction;
|
|
108
|
+
constructor(processingInstruction: ProcessingInstruction, position?: XmlPosition);
|
|
109
|
+
}
|
|
110
|
+
declare class DoctypeToken extends XmlToken {
|
|
111
|
+
readonly doctype: Doctype;
|
|
112
|
+
constructor(doctype: Doctype, position?: XmlPosition);
|
|
113
|
+
}
|
|
114
|
+
declare class EndToken extends XmlToken {
|
|
115
|
+
constructor(position?: XmlPosition);
|
|
116
|
+
}
|
|
117
|
+
type XmlAnyToken = OpenTagToken | CloseTagToken | TextToken | CdataToken | CommentToken | ProcessingInstructionToken | DoctypeToken | EndToken;
|
|
118
|
+
|
|
83
119
|
declare class XmlSaxParser {
|
|
84
120
|
private readonly xmlns;
|
|
85
121
|
private readonly includeNamespaceAttributes;
|
|
86
122
|
private readonly allowDoctype;
|
|
87
123
|
private readonly coalesceText;
|
|
88
124
|
private readonly trackPosition;
|
|
89
|
-
private readonly onOpenTag;
|
|
90
|
-
private readonly onCloseTag;
|
|
91
|
-
private readonly onText;
|
|
92
|
-
private readonly onCdata;
|
|
93
|
-
private readonly onComment;
|
|
94
|
-
private readonly onProcessingInstruction;
|
|
95
|
-
private readonly onDoctype;
|
|
96
|
-
private readonly onError;
|
|
97
125
|
private buffer;
|
|
98
126
|
private offset;
|
|
99
127
|
private line;
|
|
100
128
|
private column;
|
|
129
|
+
private readonly pathStack;
|
|
130
|
+
private readonly tokenQueue;
|
|
101
131
|
private elementStack;
|
|
102
132
|
private nsStack;
|
|
103
133
|
private closed;
|
|
@@ -105,8 +135,11 @@ declare class XmlSaxParser {
|
|
|
105
135
|
private readonly pendingTextParts;
|
|
106
136
|
private readonly _rawAttrs;
|
|
107
137
|
constructor(options?: ParserOptions);
|
|
108
|
-
feed(chunk: string):
|
|
109
|
-
close():
|
|
138
|
+
feed(chunk: string): XmlAnyToken[];
|
|
139
|
+
close(): XmlAnyToken[];
|
|
140
|
+
drainTokens(): XmlAnyToken[];
|
|
141
|
+
[Symbol.iterator](): IterableIterator<XmlAnyToken>;
|
|
142
|
+
iterateChunks(chunks: Iterable<string> | AsyncIterable<string>): AsyncGenerator<XmlAnyToken>;
|
|
110
143
|
private _parseBuffer;
|
|
111
144
|
private _parseMarkupFrom;
|
|
112
145
|
private _handleStartTagRange;
|
|
@@ -127,7 +160,11 @@ declare class XmlSaxParser {
|
|
|
127
160
|
private _advanceSpan;
|
|
128
161
|
private _flushPendingCR;
|
|
129
162
|
private _error;
|
|
163
|
+
private _position;
|
|
164
|
+
private _pushToken;
|
|
130
165
|
}
|
|
166
|
+
declare function tokenizeXml(xml: string, options?: ParserOptions): XmlAnyToken[];
|
|
167
|
+
declare function tokenizeXmlAsync(chunks: Iterable<string> | AsyncIterable<string>, options?: ParserOptions): AsyncGenerator<XmlAnyToken>;
|
|
131
168
|
|
|
132
169
|
declare class XmlSaxError extends Error {
|
|
133
170
|
readonly offset: number;
|
|
@@ -139,15 +176,16 @@ declare class XmlSaxError extends Error {
|
|
|
139
176
|
declare class TreeBuilder {
|
|
140
177
|
private stack;
|
|
141
178
|
private root;
|
|
142
|
-
onOpenTag
|
|
179
|
+
onOpenTag(tag: {
|
|
143
180
|
name: string;
|
|
144
181
|
attributes: Record<string, {
|
|
145
182
|
value: string;
|
|
146
183
|
} | string>;
|
|
147
|
-
})
|
|
148
|
-
onText
|
|
149
|
-
onCdata
|
|
150
|
-
onCloseTag
|
|
184
|
+
}): void;
|
|
185
|
+
onText(text: string): void;
|
|
186
|
+
onCdata(text: string): void;
|
|
187
|
+
onCloseTag(): void;
|
|
188
|
+
consume(token: OpenTagToken | TextToken | CdataToken | CloseTagToken): void;
|
|
151
189
|
getRoot(): XmlNode;
|
|
152
190
|
}
|
|
153
191
|
declare function parseXmlString(xml: string, options?: ParserOptions): XmlNode;
|
|
@@ -170,12 +208,13 @@ declare class ObjectBuilder {
|
|
|
170
208
|
private root;
|
|
171
209
|
private rootName;
|
|
172
210
|
constructor(options?: ObjectBuilderOptions);
|
|
173
|
-
onOpenTag
|
|
174
|
-
onText
|
|
175
|
-
onCdata
|
|
176
|
-
onCloseTag
|
|
211
|
+
onOpenTag(tag: OpenTag): void;
|
|
212
|
+
onText(text: string): void;
|
|
213
|
+
onCdata(text: string): void;
|
|
214
|
+
onCloseTag(): void;
|
|
215
|
+
consume(token: OpenTagToken | TextToken | CdataToken | CloseTagToken): void;
|
|
177
216
|
getResult(): XmlObjectValue;
|
|
178
217
|
getRootName(): string;
|
|
179
218
|
}
|
|
180
219
|
|
|
181
|
-
export { type ArrayElementSelector, type CloseTag, type Doctype, ObjectBuilder, type ObjectBuilderOptions, type ObjectToXmlOptions, type OpenTag, type ParserOptions, type ProcessingInstruction, type SerializeOptions, TreeBuilder, type XmlAttribute, type XmlBuilderOptions, type XmlChild, type XmlInputObject, type XmlInputValue, type XmlNode, type XmlObjectMap, type XmlObjectValue, type XmlPosition, XmlSaxError, XmlSaxParser, buildObject, buildXmlNode, objectToXml, parseXmlString, resolveName, serializeXml, stripNamespace };
|
|
220
|
+
export { type ArrayElementSelector, CdataToken, type CloseTag, CloseTagToken, CommentToken, type Doctype, DoctypeToken, EndToken, ObjectBuilder, type ObjectBuilderOptions, type ObjectToXmlOptions, type OpenTag, OpenTagToken, type ParserOptions, type ProcessingInstruction, ProcessingInstructionToken, type SerializeOptions, TextToken, TreeBuilder, type XmlAnyToken, type XmlAttribute, type XmlBuilderOptions, type XmlChild, type XmlChunkIterable, type XmlInputObject, type XmlInputValue, type XmlNode, type XmlObjectMap, type XmlObjectValue, type XmlPosition, XmlSaxError, XmlSaxParser, XmlToken, type XmlTokenKind, buildObject, buildXmlNode, objectToXml, parseXmlString, resolveName, serializeXml, stripNamespace, tokenizeXml, tokenizeXmlAsync };
|