@revisium/schema-toolkit 0.20.2 → 0.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +216 -0
- package/dist/FormulaPathBuilder-BUJRR0Am.d.cts +48 -0
- package/dist/FormulaPathBuilder-QR0htn-e.d.ts +48 -0
- package/dist/{chunk-VGADCIBG.cjs → chunk-2PIMJSWJ.cjs} +12 -8
- package/dist/chunk-3MJP73IJ.js +1 -0
- package/dist/{chunk-LLHQWDAR.js → chunk-4U2RZHMX.js} +19 -21
- package/dist/{chunk-Q2UOTIMG.js → chunk-5DUMJHCA.js} +0 -2
- package/dist/{chunk-V6JTSET2.cjs → chunk-7JWCZZPJ.cjs} +49 -51
- package/dist/{chunk-YFWOURZL.js → chunk-7PEC6ZYY.js} +0 -2
- package/dist/chunk-AV5EZUMZ.cjs +2 -0
- package/dist/{chunk-3JZKQWQH.js → chunk-AWFMSOHM.js} +5 -7
- package/dist/{chunk-X2VRR7V7.cjs → chunk-ERW5XVED.cjs} +0 -2
- package/dist/{chunk-XNFSFT7T.cjs → chunk-EVD5ZI55.cjs} +0 -2
- package/dist/{chunk-ZRNFSUOV.cjs → chunk-FL6PWPVJ.cjs} +0 -2
- package/dist/{chunk-55AMH44G.js → chunk-FTBRJODD.js} +28 -30
- package/dist/{chunk-R3MS2N4A.js → chunk-GJM63Q4K.js} +0 -2
- package/dist/{chunk-U5YDA3LA.js → chunk-HFMZITNE.js} +238 -31
- package/dist/{chunk-EGC32GPY.cjs → chunk-ITYABUR5.cjs} +19 -21
- package/dist/{chunk-R4CFU33U.js → chunk-IZMBM36H.js} +10 -9
- package/dist/chunk-J4RVO37K.cjs +2 -0
- package/dist/{chunk-QEV4Q4TR.js → chunk-JLXX3SGF.js} +30 -32
- package/dist/{chunk-MPF6VCB5.js → chunk-NO655UI5.js} +0 -2
- package/dist/chunk-OAUVP6CU.js +1 -0
- package/dist/{chunk-B3T6YB2D.cjs → chunk-ONW2OVNQ.cjs} +28 -30
- package/dist/{chunk-32FZHFIO.cjs → chunk-QKA7DJDN.cjs} +0 -2
- package/dist/{chunk-46ME2TAU.cjs → chunk-RCCBUOGY.cjs} +5 -7
- package/dist/{chunk-IPL2CGVA.cjs → chunk-RQBW7ATZ.cjs} +0 -2
- package/dist/{chunk-FZ2MS4Q5.cjs → chunk-S5SRXND6.cjs} +307 -97
- package/dist/{chunk-WSPFHUHU.cjs → chunk-T3QQSHAC.cjs} +0 -2
- package/dist/{chunk-J6SCHJKG.cjs → chunk-VMELKZXD.cjs} +0 -2
- package/dist/{chunk-5VDDLW7U.js → chunk-WE4OLW5U.js} +0 -2
- package/dist/{chunk-JUOGJFTL.js → chunk-XKWWCXGB.js} +0 -2
- package/dist/{chunk-ZBPUTF3Q.js → chunk-ZPRBA4AQ.js} +0 -2
- package/dist/consts/index.cjs +4 -6
- package/dist/consts/index.js +2 -4
- package/dist/core/index.cjs +65 -69
- package/dist/core/index.d.cts +6 -4
- package/dist/core/index.d.ts +6 -4
- package/dist/core/index.js +4 -8
- package/dist/formula/index.cjs +7 -9
- package/dist/formula/index.d.cts +1 -1
- package/dist/formula/index.d.ts +1 -1
- package/dist/formula/index.js +1 -3
- package/dist/index.cjs +269 -248
- package/dist/index.d.cts +8 -7
- package/dist/index.d.ts +8 -7
- package/dist/index.js +15 -18
- package/dist/{json-patch.types-DY7k9hxy.d.ts → json-patch.types-BpVnp08Z.d.ts} +1 -1
- package/dist/{json-patch.types-Cu0Medki.d.cts → json-patch.types-eM6pYC2P.d.cts} +1 -1
- package/dist/{json-string.store-C58zbl31.d.ts → json-string.store-DfdLcgnM.d.ts} +11 -11
- package/dist/{json-string.store-DuI--IL2.d.cts → json-string.store-cAOADo23.d.cts} +11 -11
- package/dist/lib/index.cjs +51 -54
- package/dist/lib/index.d.cts +3 -3
- package/dist/lib/index.d.ts +3 -3
- package/dist/lib/index.js +7 -10
- package/dist/mocks/index.cjs +30 -21
- package/dist/mocks/index.d.cts +22 -8
- package/dist/mocks/index.d.ts +22 -8
- package/dist/mocks/index.js +2 -5
- package/dist/model/index.cjs +85 -78
- package/dist/model/index.d.cts +171 -346
- package/dist/model/index.d.ts +171 -346
- package/dist/model/index.js +4 -9
- package/dist/plugins/index.cjs +20 -23
- package/dist/plugins/index.d.cts +10 -10
- package/dist/plugins/index.d.ts +10 -10
- package/dist/plugins/index.js +2 -5
- package/dist/{schema.types-B5OgKLpV.d.cts → schema.types-On_VGw2m.d.cts} +7 -6
- package/dist/{schema.types-B5OgKLpV.d.ts → schema.types-On_VGw2m.d.ts} +7 -6
- package/dist/typed-BRZhUqGG.d.ts +502 -0
- package/dist/typed-Cri0IYAn.d.cts +502 -0
- package/dist/types/index.cjs +6 -9
- package/dist/types/index.d.cts +7 -5
- package/dist/types/index.d.ts +7 -5
- package/dist/types/index.js +2 -5
- package/dist/{FormulaPathBuilder-DwlKOvVB.d.ts → types-BIvIURgy.d.cts} +37 -82
- package/dist/{FormulaPathBuilder-D9LkBcSv.d.cts → types-C_pTFtSY.d.ts} +37 -82
- package/dist/validation-schemas/index.cjs +18 -20
- package/dist/validation-schemas/index.js +1 -3
- package/package.json +1 -1
- package/dist/chunk-32FZHFIO.cjs.map +0 -1
- package/dist/chunk-3FJZMVWA.js +0 -3
- package/dist/chunk-3FJZMVWA.js.map +0 -1
- package/dist/chunk-3IKI64T2.js +0 -3
- package/dist/chunk-3IKI64T2.js.map +0 -1
- package/dist/chunk-3JZKQWQH.js.map +0 -1
- package/dist/chunk-46ME2TAU.cjs.map +0 -1
- package/dist/chunk-55AMH44G.js.map +0 -1
- package/dist/chunk-5VDDLW7U.js.map +0 -1
- package/dist/chunk-B3T6YB2D.cjs.map +0 -1
- package/dist/chunk-EGC32GPY.cjs.map +0 -1
- package/dist/chunk-FZ2MS4Q5.cjs.map +0 -1
- package/dist/chunk-G6ZKEVVU.cjs +0 -4
- package/dist/chunk-G6ZKEVVU.cjs.map +0 -1
- package/dist/chunk-IPL2CGVA.cjs.map +0 -1
- package/dist/chunk-J6SCHJKG.cjs.map +0 -1
- package/dist/chunk-JUOGJFTL.js.map +0 -1
- package/dist/chunk-L6HE7QPU.cjs +0 -4
- package/dist/chunk-L6HE7QPU.cjs.map +0 -1
- package/dist/chunk-LLHQWDAR.js.map +0 -1
- package/dist/chunk-MPF6VCB5.js.map +0 -1
- package/dist/chunk-NY3H6C7K.js +0 -3
- package/dist/chunk-NY3H6C7K.js.map +0 -1
- package/dist/chunk-Q2UOTIMG.js.map +0 -1
- package/dist/chunk-QEV4Q4TR.js.map +0 -1
- package/dist/chunk-R3MS2N4A.js.map +0 -1
- package/dist/chunk-R4CFU33U.js.map +0 -1
- package/dist/chunk-TBFTADML.cjs +0 -4
- package/dist/chunk-TBFTADML.cjs.map +0 -1
- package/dist/chunk-U5YDA3LA.js.map +0 -1
- package/dist/chunk-V6JTSET2.cjs.map +0 -1
- package/dist/chunk-VGADCIBG.cjs.map +0 -1
- package/dist/chunk-WSPFHUHU.cjs.map +0 -1
- package/dist/chunk-X2VRR7V7.cjs.map +0 -1
- package/dist/chunk-XNFSFT7T.cjs.map +0 -1
- package/dist/chunk-YFWOURZL.js.map +0 -1
- package/dist/chunk-ZBPUTF3Q.js.map +0 -1
- package/dist/chunk-ZRNFSUOV.cjs.map +0 -1
- package/dist/consts/index.cjs.map +0 -1
- package/dist/consts/index.js.map +0 -1
- package/dist/core/index.cjs.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/formula/index.cjs.map +0 -1
- package/dist/formula/index.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/json-value-patch.types-CgiEpchp.d.ts +0 -24
- package/dist/json-value-patch.types-LEJxcIWR.d.cts +0 -24
- package/dist/lib/index.cjs.map +0 -1
- package/dist/lib/index.js.map +0 -1
- package/dist/mocks/index.cjs.map +0 -1
- package/dist/mocks/index.js.map +0 -1
- package/dist/model/index.cjs.map +0 -1
- package/dist/model/index.js.map +0 -1
- package/dist/plugins/index.cjs.map +0 -1
- package/dist/plugins/index.js.map +0 -1
- package/dist/types/index.cjs.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/validation-schemas/index.cjs.map +0 -1
- package/dist/validation-schemas/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/schema-node/types.ts","../src/core/schema-node/NullNode.ts","../src/core/reactivity/provider.ts","../src/core/reactivity/api.ts","../src/core/reactivity/mobx-provider.ts","../src/core/schema-node/BaseNode.ts","../src/core/schema-node/utils.ts","../src/core/schema-node/ObjectNode.ts","../src/core/schema-node/ArrayNode.ts","../src/core/schema-node/PrimitiveNode.ts","../src/core/schema-node/StringNode.ts","../src/core/schema-node/NumberNode.ts","../src/core/schema-node/BooleanNode.ts","../src/core/schema-node/RefNode.ts","../src/core/path/PathSegment.ts","../src/core/base-path/AbstractBasePath.ts","../src/core/path/Path.ts","../src/core/path/PathParser.ts","../src/core/schema-tree/TreeNodeIndex.ts","../src/core/schema-tree/SchemaTreeImpl.ts","../src/core/schema-diff/NodePathIndex.ts","../src/core/schema-formula/serialization/FormulaPathBuilder.ts","../src/core/schema-formula/core/FormulaError.ts","../src/core/schema-formula/serialization/FormulaSerializer.ts","../src/core/schema-diff/SchemaComparator.ts","../src/core/schema-diff/ChangeCollector.ts","../src/core/schema-diff/ChangeCoalescer.ts","../src/core/schema-diff/SchemaDiff.ts","../src/core/schema-formula/core/FormulaDependency.ts","../src/core/schema-serializer/SchemaSerializer.ts","../src/core/schema-patch/PatchGenerator.ts","../src/core/schema-patch/PatchEnricher.ts","../src/core/schema-patch/PatchBuilder.ts","../src/core/validation/ValidatorRegistry.ts","../src/core/validation/ValidatorResolver.ts","../src/core/validation/ValidationEngine.ts","../src/core/validation/rules/SchemaBasedRule.ts","../src/core/validation/validators/RequiredValidator.ts","../src/core/validation/validators/PatternValidator.ts","../src/core/validation/validators/MinLengthValidator.ts","../src/core/validation/validators/MaxLengthValidator.ts","../src/core/validation/validators/MinimumValidator.ts","../src/core/validation/validators/MaximumValidator.ts","../src/core/validation/validators/EnumValidator.ts","../src/core/validation/validators/ForeignKeyValidator.ts","../src/core/validation/createValidationEngine.ts","../src/core/validation/schema/FieldNameValidator.ts","../src/core/validation/schema/SchemaValidator.ts","../src/core/validation/formula/FormulaValidator.ts"],"names":["replaceDependencies","serializeAst","formula","validateFormulaSyntax"],"mappings":";;;;;AAiBO,IAAM,cAAA,GAA+B,MAAA,CAAO,MAAA,CAAO,EAAE;;;ACd5D,IAAM,eAAN,MAAyC;AAAA,EACvC,EAAA,GAAa;AACX,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEA,IAAA,GAAe;AACb,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAqB;AACnB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAyB;AACvB,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAoB;AAClB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,WAAA,GAAuB;AACrB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAiB;AACf,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAA,GAAkB;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAuB;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAoC;AAClC,IAAA,OAAO,EAAC;AAAA,EACV;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,GAAA,GAA0B;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAA+B;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAsB;AACpB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,YAAA,GAAwB;AACtB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAiC;AAC/B,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAY,MAAA,EAA4B;AACtC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAQ,KAAA,EAAqB;AAAA,EAE7B;AAAA,EAEA,YAAY,SAAA,EAA+B;AAAA,EAE3C;AAAA,EAEA,SAAS,KAAA,EAAyB;AAAA,EAElC;AAAA,EAEA,WAAA,CAAY,QAAgB,KAAA,EAAyB;AAAA,EAErD;AAAA,EAEA,YAAY,KAAA,EAAwB;AAClC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,YAAA,CAAa,OAAe,KAAA,EAA4B;AACtD,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,SAAS,KAAA,EAAyB;AAAA,EAElC;AAAA,EAEA,gBAAgB,MAAA,EAAuB;AAAA,EAEvC;AAAA,EAEA,WAAW,QAAA,EAAqC;AAAA,EAEhD;AAAA,EAEA,cAAc,IAAA,EAAgC;AAAA,EAE9C;AAAA,EAEA,gBAAA,GAAuC;AACrC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,oBAAoB,UAAA,EAAsC;AAAA,EAE1D;AACF,CAAA;AAEO,IAAM,SAAA,GAAwB,IAAI,YAAA;;;ACvGzC,IAAM,YAAA,GAAmC;AAAA,EACvC,cAAA,EAAgB,CAAmB,MAAA,KAAc,MAAA;AAAA,EACjD,kBAAA,EAAoB,CAAmB,MAAA,KAAc,MAAA;AAAA,EACrD,cAAc,MAAM,KAAA;AAAA,EACpB,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,sBAAY,IAAI,GAAA,EAAU;AAAA,IAC/B,KAAA,EAAO,MAAS;AAAC,GACnB;AAAA,EACA,WAAA,EAAa,CAAI,EAAA,KAAgB,EAAA,EAAG;AAAA,EACpC,QAAA,EAAU,MAAM,MAAM;AAAA,EAAC;AACzB,CAAA;AAEA,IAAI,eAAA,GAAsC,YAAA;AAEnC,SAAS,sBAAsB,QAAA,EAAoC;AACxE,EAAA,eAAA,GAAkB,QAAA;AACpB;AAEO,SAAS,qBAAA,GAA4C;AAC1D,EAAA,OAAO,eAAA;AACT;AAEO,SAAS,uBAAA,GAAgC;AAC9C,EAAA,eAAA,GAAkB,YAAA;AACpB;;;AC9CO,SAAS,cAAA,CACd,QACA,WAAA,EACG;AACH,EAAA,OAAO,qBAAA,EAAsB,CAAE,cAAA,CAAe,MAAA,EAAQ,WAAW,CAAA;AACnE;AAEO,SAAS,kBAAA,CACd,QACA,SAAA,EACG;AACH,EAAA,OAAO,uBAAsB,CAAE,kBAAA,CAAmB,MAAA,EAAQ,SAAA,IAAa,EAAE,CAAA;AAC3E;AAMO,IAAM,UAAA,GAAa;AAAA,EACxB,GAAA,GAAuB;AACrB,IAAA,OAAO,qBAAA,EAAsB,CAAE,UAAA,CAAW,GAAA,EAAU;AAAA,EACtD,CAAA;AAAA,EACA,KAAA,GAAgB;AACd,IAAA,OAAO,qBAAA,EAAsB,CAAE,UAAA,CAAW,KAAA,EAAS;AAAA,EACrD;AACF;AAEO,SAAS,YAAe,EAAA,EAAgB;AAC7C,EAAA,OAAO,qBAAA,EAAsB,CAAE,WAAA,CAAY,EAAE,CAAA;AAC/C;AAEO,SAAS,QAAA,CACd,YACA,MAAA,EACY;AACZ,EAAA,OAAO,qBAAA,EAAsB,CAAE,QAAA,CAAS,UAAA,EAAY,MAAM,CAAA;AAC5D;;;ACXA,SAAS,kBAAA,CACP,MACA,WAAA,EACyB;AACzB,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AACtD,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,QAAQ,KAAA;AAAO,QACb,KAAK,YAAA;AACH,UAAA,MAAA,CAAO,GAAG,IAAI,IAAA,CAAK,UAAA;AACnB,UAAA;AAAA,QACF,KAAK,gBAAA;AACH,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,GAAA;AAC9B,UAAA;AAAA,QACF,KAAK,oBAAA;AACH,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,OAAA;AAC9B,UAAA;AAAA,QACF,KAAK,QAAA;AACH,UAAA,MAAA,CAAO,GAAG,IAAI,IAAA,CAAK,MAAA;AACnB,UAAA;AAAA,QACF,KAAK,UAAA;AACH,UAAA,MAAA,CAAO,GAAG,IAAI,IAAA,CAAK,QAAA;AACnB,UAAA;AAAA,QACF;AACE,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA;AAClB,IACF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,mBAAmB,IAAA,EAAsC;AACvE,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,CACd,MAAA,EACA,WAAA,KACG,IAAA,CAAK,eAAe,MAAA,EAAQ,kBAAA,CAAmB,IAAA,EAAM,WAAW,CAAC,CAAA;AAAA,IACtE,kBAAA,EAAoB,CAClB,MAAA,EACA,SAAA,KACG,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,SAAA,GAAY,kBAAA,CAAmB,IAAA,EAAM,SAAS,CAAA,GAAI,EAAE,CAAA;AAAA,IACzF,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,UAAA,EAAY;AAAA,MACV,GAAA,EAAK,MAAY,IAAA,CAAK,UAAA,CAAW,GAAA,EAAU;AAAA,MAC3C,KAAA,EAAO,MAAS,IAAA,CAAK,UAAA,CAAW,KAAA;AAAS,KAC3C;AAAA,IACA,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,UAAU,IAAA,CAAK;AAAA,GACjB;AACF;;;AC3EO,IAAe,WAAf,MAA8C;AAAA,EAKnD,WAAA,CACmB,GAAA,EACjB,IAAA,EACA,QAAA,GAAyB,gBACzB,GAAA,EACA;AAJiB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAKjB,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AACjB,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AAAA,EACd;AAAA,EAbU,KAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EAaA,kBAAA,GAA2B;AACnC,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,KAAA,EAAO,YAAA;AAAA,MACP,SAAA,EAAW,gBAAA;AAAA,MACX,OAAA,EAAS,QAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAEA,EAAA,GAAa;AACX,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACd;AAAA,EAEA,IAAA,GAAe;AACb,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAIA,QAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,QAAA,GAAoB;AAClB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,WAAA,GAAuB;AACrB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAiB;AACf,IAAA,OAAO,KAAK,IAAA,KAAS,MAAA;AAAA,EACvB;AAAA,EAEA,MAAA,GAAkB;AAChB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,SAAS,KAAA,EAA2B;AAClC,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAoC;AAClC,IAAA,OAAO,EAAC;AAAA,EACV;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,GAAA,GAA0B;AACxB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,OAAA,GAA+B;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAsB;AACpB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,YAAA,GAAwB;AACtB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAiC;AAC/B,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,gBAAA,GAAuC;AACrC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAKA,QAAQ,IAAA,EAAoB;AAC1B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,EACf;AAAA,EAEA,YAAY,QAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AAAA,EACnB;AAAA,EAEA,SAAS,KAAA,EAAyB;AAAA,EAElC;AAAA,EAEA,WAAA,CAAY,QAAgB,KAAA,EAAyB;AAAA,EAErD;AAAA,EAEA,YAAY,KAAA,EAAwB;AAClC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,YAAA,CAAa,OAAe,KAAA,EAA4B;AACtD,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,SAAS,KAAA,EAAyB;AAAA,EAElC;AAAA,EAEA,gBAAgB,MAAA,EAAuB;AAAA,EAEvC;AAAA,EAEA,WAAW,QAAA,EAAqC;AAAA,EAEhD;AAAA,EAEA,cAAc,IAAA,EAAgC;AAAA,EAE9C;AAAA,EAEA,oBAAoB,UAAA,EAAsC;AAAA,EAE1D;AACF,CAAA;;;AC3IO,SAAS,eACd,KAAA,EACuB;AACvB,EAAA,IAAI,KAAA,IAAS,KAAA,IAAS,UAAA,IAAc,KAAA,EAAO;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,IAAW,KAAA,IAAS,aAAA,IAAiB,KAAA,IAAS,YAAA,IAAgB,KAAA;AACvE;AAEO,SAAS,qBACd,OAAA,EACG;AACH,EAAA,IAAI,cAAA,CAAe,OAAO,CAAA,EAAG;AAC3B,IAAA,OAAO,EAAE,UAAU,OAAA,EAAQ;AAAA,EAC7B;AACA,EAAA,OAAO,OAAA;AACT;;;ACXO,IAAM,UAAA,GAAN,MAAM,WAAA,SAAmB,QAAA,CAAS;AAAA,EAC/B,SAAA;AAAA,EAER,WAAA,CACE,IACA,IAAA,EACA,QAAA,GAAkC,EAAC,EACnC,iBAAA,GAAsD,EAAC,EACvD;AACA,IAAA,MAAM,OAAA,GAAU,qBAAqB,iBAAiB,CAAA;AACtD,IAAA,KAAA,CAAM,IAAI,IAAA,EAAM,OAAA,CAAQ,QAAA,IAAY,cAAA,EAAgB,QAAQ,GAAG,CAAA;AAC/D,IAAA,IAAA,CAAK,SAAA,GAAY,CAAC,GAAG,QAAQ,CAAA;AAC7B,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,SAAA,EAAW,oBAAA;AAAA,MACX,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,QAAA;AAAA,MACb,WAAA,EAAa,QAAA;AAAA,MACb,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEA,QAAA,GAAqB;AACnB,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAoB;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,SAAS,IAAA,EAA0B;AACjC,IAAA,OAAO,IAAA,CAAK,UAAU,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,CAAA,IAAK,SAAA;AAAA,EAClE;AAAA,EAEA,UAAA,GAAoC;AAClC,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,KAAK,EAAA,EAAG;AAAA,MACR,KAAK,IAAA,EAAK;AAAA,MACV,KAAK,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,CAAA;AAAA,MAC3C,EAAE,QAAA,EAAU,IAAA,CAAK,UAAS,EAAG,GAAA,EAAK,KAAK,IAAA;AAAK,KAC9C;AAAA,EACF;AAAA,EAEA,YAAY,KAAA,EAA2B;AACrC,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,KAAA;AAAA,MACA,KAAK,IAAA,EAAK;AAAA,MACV,KAAK,SAAA,CAAU,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,CAAA;AAAA,MAC3C,EAAE,QAAA,EAAU,IAAA,CAAK,UAAS,EAAG,GAAA,EAAK,KAAK,IAAA;AAAK,KAC9C;AAAA,EACF;AAAA,EAEA,SAAS,IAAA,EAAwB;AAC/B,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EAC1B;AAAA,EAEA,WAAA,CAAY,OAAe,IAAA,EAAwB;AACjD,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,IAAA,CAAK,UAAU,MAAA,EAAQ;AAC9C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,KAAK,CAAA,CAAE,CAAA;AAAA,IACjD;AACA,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA;AAAA,EACtC;AAAA,EAEA,YAAY,IAAA,EAAuB;AACjC,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,CAAU,SAAA,CAAU,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,CAAA;AACvE,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,CAAa,MAAc,IAAA,EAA2B;AACpD,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,CAAU,SAAA,CAAU,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,CAAA;AACvE,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEO,SAAS,gBAAA,CACd,IACA,IAAA,EACA,QAAA,GAAkC,EAAC,EACnC,OAAA,GAA4C,EAAC,EACjC;AACZ,EAAA,OAAO,IAAI,UAAA,CAAW,EAAA,EAAI,IAAA,EAAM,UAAU,OAAO,CAAA;AACnD;;;AC9FO,IAAM,SAAA,GAAN,MAAM,UAAA,SAAkB,QAAA,CAAS;AAAA,EAC9B,MAAA;AAAA,EAER,YACE,EAAA,EACA,IAAA,EACA,KAAA,EACA,iBAAA,GAAqD,EAAC,EACtD;AACA,IAAA,MAAM,OAAA,GAAU,qBAAqB,iBAAiB,CAAA;AACtD,IAAA,KAAA,CAAM,IAAI,IAAA,EAAM,OAAA,CAAQ,QAAA,IAAY,cAAA,EAAgB,QAAQ,GAAG,CAAA;AAC/D,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,MAAA,EAAQ,gBAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAAA,EAEA,QAAA,GAAqB;AACnB,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAoC;AAClC,IAAA,OAAO,CAAC,KAAK,MAAM,CAAA;AAAA,EACrB;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,IAAI,UAAA,CAAU,IAAA,CAAK,EAAA,EAAG,EAAG,IAAA,CAAK,IAAA,EAAK,EAAG,IAAA,CAAK,MAAA,CAAO,KAAA,EAAM,EAAG;AAAA,MAChE,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,MACxB,KAAK,IAAA,CAAK;AAAA,KACX,CAAA;AAAA,EACH;AAAA,EAEA,YAAY,KAAA,EAA2B;AACrC,IAAA,OAAO,IAAI,WAAU,KAAA,EAAO,IAAA,CAAK,MAAK,EAAG,IAAA,CAAK,MAAA,CAAO,KAAA,EAAM,EAAG;AAAA,MAC5D,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,MACxB,KAAK,IAAA,CAAK;AAAA,KACX,CAAA;AAAA,EACH;AAAA,EAEA,SAAS,IAAA,EAAwB;AAC/B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAChB;AACF,CAAA;AAEO,SAAS,gBACd,EAAA,EACA,IAAA,EACA,KAAA,EACA,OAAA,GAA2C,EAAC,EAChC;AACZ,EAAA,OAAO,IAAI,SAAA,CAAU,EAAA,EAAI,IAAA,EAAM,OAAO,OAAO,CAAA;AAC/C;;;AC3DO,IAAe,aAAA,GAAf,cAAqC,QAAA,CAAS;AAAA,EACzC,aAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EAEV,WAAA,CACE,EAAA,EACA,IAAA,EACA,OAAA,GAAgC,EAAC,EACjC;AACA,IAAA,KAAA,CAAM,IAAI,IAAA,EAAM,OAAA,CAAQ,QAAA,IAAY,cAAA,EAAgB,QAAQ,GAAG,CAAA;AAC/D,IAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,YAAA;AAC7B,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,UAAA;AAC3B,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,OAAA;AAAA,EAC1B;AAAA,EAEU,uBAAA,GAAgC;AACxC,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,KAAA,EAAO,YAAA;AAAA,MACP,SAAA,EAAW,gBAAA;AAAA,MACX,QAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAe,YAAA;AAAA,MACf,WAAA,EAAa,YAAA;AAAA,MACb,OAAA,EAAS,QAAA;AAAA,MACT,WAAA,EAAa,QAAA;AAAA,MACb,UAAA,EAAY,QAAA;AAAA,MACZ,eAAA,EAAiB,QAAA;AAAA,MACjB,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH;AAAA,EAIA,WAAA,GAAuB;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAA+B;AAC7B,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,UAAA,GAAsB;AACpB,IAAA,OAAO,KAAK,QAAA,KAAa,MAAA;AAAA,EAC3B;AAAA,EAEA,YAAA,GAAwB;AACtB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA,EAEA,UAAA,GAAiC;AAC/B,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAIA,gBAAgB,KAAA,EAAsB;AACpC,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA,EACvB;AAAA,EAEA,WAAW,OAAA,EAAoC;AAC7C,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAAA,EAClB;AAAA,EAEA,cAAc,GAAA,EAA+B;AAC3C,IAAA,IAAA,CAAK,WAAA,GAAc,GAAA;AAAA,EACrB;AACF,CAAA;;;ACjEO,IAAM,UAAA,GAAN,MAAM,WAAA,SAAmB,aAAA,CAAc;AAAA,EACpC,iBAAA;AAAA,EAER,WAAA,CACE,EAAA,EACA,IAAA,EACA,OAAA,GAA6B,EAAC,EAC9B;AACA,IAAA,KAAA,CAAM,EAAA,EAAI,MAAM,OAAO,CAAA;AACvB,IAAA,IAAA,CAAK,oBAAoB,OAAA,CAAQ,gBAAA;AACjC,IAAA,IAAA,CAAK,uBAAA,EAAwB;AAC7B,IAAA,cAAA,CAAe,IAAA,EAAM;AAAA,MACnB,iBAAA,EAAmB,YAAA;AAAA,MACnB,mBAAA,EAAqB;AAAA,KACtB,CAAA;AAAA,EACH;AAAA,EAEA,QAAA,GAAqB;AACnB,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,gBAAA,GAAiD;AAC/C,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,EACd;AAAA,EAEA,oBAAoB,SAAA,EAA+C;AACjE,IAAA,IAAA,CAAK,iBAAA,GAAoB,SAAA;AAAA,EAC3B;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,IAAI,WAAA,CAAW,IAAA,CAAK,EAAA,EAAG,EAAG,KAAK,IAAA,EAAK,EAAG,IAAA,CAAK,YAAA,EAAc,CAAA;AAAA,EACnE;AAAA,EAEA,YAAY,KAAA,EAA2B;AACrC,IAAA,OAAO,IAAI,YAAW,KAAA,EAAO,IAAA,CAAK,MAAK,EAAG,IAAA,CAAK,cAAc,CAAA;AAAA,EAC/D;AAAA,EAEQ,YAAA,GAAkC;AACxC,IAAA,OAAO;AAAA,MACL,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,YAAY,IAAA,CAAK,WAAA;AAAA,MACjB,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,kBAAkB,IAAA,CAAK,iBAAA;AAAA,MACvB,KAAK,IAAA,CAAK;AAAA,KACZ;AAAA,EACF;AACF,CAAA;AAEO,SAAS,gBAAA,CACd,EAAA,EACA,IAAA,EACA,OAAA,GAA6B,EAAC,EAClB;AACZ,EAAA,OAAO,IAAI,UAAA,CAAW,EAAA,EAAI,IAAA,EAAM,OAAO,CAAA;AACzC;;;AC3DO,IAAM,UAAA,GAAN,MAAM,WAAA,SAAmB,aAAA,CAAc;AAAA,EAC5C,WAAA,CACE,EAAA,EACA,IAAA,EACA,OAAA,GAA6B,EAAC,EAC9B;AACA,IAAA,KAAA,CAAM,EAAA,EAAI,MAAM,OAAO,CAAA;AACvB,IAAA,IAAA,CAAK,uBAAA,EAAwB;AAAA,EAC/B;AAAA,EAEA,QAAA,GAAqB;AACnB,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,IAAI,WAAA,CAAW,IAAA,CAAK,EAAA,EAAG,EAAG,KAAK,IAAA,EAAK,EAAG,IAAA,CAAK,YAAA,EAAc,CAAA;AAAA,EACnE;AAAA,EAEA,YAAY,KAAA,EAA2B;AACrC,IAAA,OAAO,IAAI,YAAW,KAAA,EAAO,IAAA,CAAK,MAAK,EAAG,IAAA,CAAK,cAAc,CAAA;AAAA,EAC/D;AAAA,EAEQ,YAAA,GAAkC;AACxC,IAAA,OAAO;AAAA,MACL,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,KAAK,IAAA,CAAK;AAAA,KACZ;AAAA,EACF;AACF,CAAA;AAEO,SAAS,gBAAA,CACd,EAAA,EACA,IAAA,EACA,OAAA,GAA6B,EAAC,EAClB;AACZ,EAAA,OAAO,IAAI,UAAA,CAAW,EAAA,EAAI,IAAA,EAAM,OAAO,CAAA;AACzC;;;ACtCO,IAAM,WAAA,GAAN,MAAM,YAAA,SAAoB,aAAA,CAAc;AAAA,EAC7C,WAAA,CACE,EAAA,EACA,IAAA,EACA,OAAA,GAA8B,EAAC,EAC/B;AACA,IAAA,KAAA,CAAM,EAAA,EAAI,MAAM,OAAO,CAAA;AACvB,IAAA,IAAA,CAAK,uBAAA,EAAwB;AAAA,EAC/B;AAAA,EAEA,QAAA,GAAqB;AACnB,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,OAAO,IAAI,YAAA,CAAY,IAAA,CAAK,EAAA,EAAG,EAAG,KAAK,IAAA,EAAK,EAAG,IAAA,CAAK,YAAA,EAAc,CAAA;AAAA,EACpE;AAAA,EAEA,YAAY,KAAA,EAA2B;AACrC,IAAA,OAAO,IAAI,aAAY,KAAA,EAAO,IAAA,CAAK,MAAK,EAAG,IAAA,CAAK,cAAc,CAAA;AAAA,EAChE;AAAA,EAEQ,YAAA,GAAmC;AACzC,IAAA,OAAO;AAAA,MACL,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,KAAK,IAAA,CAAK;AAAA,KACZ;AAAA,EACF;AACF,CAAA;AAEO,SAAS,iBAAA,CACd,EAAA,EACA,IAAA,EACA,OAAA,GAA8B,EAAC,EACnB;AACZ,EAAA,OAAO,IAAI,WAAA,CAAY,EAAA,EAAI,IAAA,EAAM,OAAO,CAAA;AAC1C;;;AC5CO,IAAM,OAAA,GAAN,MAAM,QAAA,SAAgB,QAAA,CAAS;AAAA,EACpC,WAAA,CACE,EAAA,EACA,IAAA,EACA,GAAA,EACA,WAAyB,cAAA,EACzB;AACA,IAAA,KAAA,CAAM,EAAA,EAAI,IAAA,EAAM,QAAA,EAAU,GAAG,CAAA;AAC7B,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,IACpD;AACA,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAAA,EAEA,QAAA,GAAqB;AACnB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,IAAI,QAAA,CAAQ,IAAA,CAAK,EAAA,EAAG,EAAG,IAAA,CAAK,IAAA,EAAK,EAAG,GAAA,EAAK,IAAA,CAAK,QAAA,EAAU,CAAA;AAAA,EACjE;AAAA,EAEA,YAAY,KAAA,EAA2B;AACrC,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,IAAI,SAAQ,KAAA,EAAO,IAAA,CAAK,MAAK,EAAG,GAAA,EAAK,IAAA,CAAK,QAAA,EAAU,CAAA;AAAA,EAC7D;AACF,CAAA;AAEO,SAAS,aAAA,CACd,EAAA,EACA,IAAA,EACA,GAAA,EACA,WAAyB,cAAA,EACb;AACZ,EAAA,OAAO,IAAI,OAAA,CAAQ,EAAA,EAAI,IAAA,EAAM,KAAK,QAAQ,CAAA;AAC5C;;;AC5CO,IAAM,kBAAN,MAA6C;AAAA,EAClD,YAA6B,IAAA,EAAc;AAAd,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAe;AAAA,EAE5C,UAAA,GAAsB;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,YAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,OAAO,KAAA,EAA6B;AAClC,IAAA,OAAO,MAAM,UAAA,EAAW,IAAK,KAAA,CAAM,YAAA,OAAmB,IAAA,CAAK,IAAA;AAAA,EAC7D;AACF;AAEO,IAAM,eAAN,MAA0C;AAAA,EAC/C,UAAA,GAAsB;AACpB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,GAAuB;AACrB,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AAAA,EAEA,OAAO,KAAA,EAA6B;AAClC,IAAA,OAAO,MAAM,OAAA,EAAQ;AAAA,EACvB;AACF;;;ACpCO,IAAe,mBAAf,MAIP;AAAA,EACE,YAA+B,IAAA,EAA2B;AAA3B,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAA4B;AAAA,EAE3D,QAAA,GAAgC;AAC9B,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAIA,OAAO,KAAA,EAAuB;AAC5B,IAAA,MAAM,SAAA,GAAY,MAAM,QAAA,EAAS;AACjC,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ;AACzC,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACzC,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACrB,MAAA,MAAM,CAAA,GAAI,UAAU,CAAC,CAAA;AACrB,MAAA,IAAI,CAAC,KAAK,CAAC,CAAA,IAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG;AAC5B,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,KAAK,MAAA,KAAW,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,OAAO,KAAK,IAAA,CAAK,MAAA;AAAA,EACnB;AAAA,EAEA,UAAU,MAAA,EAAwB;AAChC,IAAA,MAAM,UAAA,GAAa,OAAO,QAAA,EAAS;AACnC,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,IAAU,UAAA,CAAW,MAAA,EAAQ;AACzC,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACrB,MAAA,MAAM,CAAA,GAAI,WAAW,CAAC,CAAA;AACtB,MAAA,IAAI,CAAC,KAAK,CAAC,CAAA,IAAK,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG;AAC5B,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AChDA,IAAM,QAAA,GAAN,MAAM,SAAA,SAAiB,gBAAA,CAAoD;AAAA,EACzE,aAAA,GAAwB;AACtB,IAAA,OAAO,KAAK,IAAA,CACT,GAAA;AAAA,MAAI,CAAC,QACJ,GAAA,CAAI,UAAA,KAAe,CAAA,YAAA,EAAe,GAAA,CAAI,YAAA,EAAc,CAAA,CAAA,GAAK;AAAA,KAC3D,CACC,KAAK,EAAE,CAAA;AAAA,EACZ;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,MAAM,QAAkB,EAAC;AAEzB,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,MAAA,IAAI,GAAA,CAAI,YAAW,EAAG;AACpB,QAAA,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,CAAA;AAAA,MAC/B,CAAA,MAAA,IAAW,GAAA,CAAI,OAAA,EAAQ,EAAG;AACxB,QAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,UAAA,MAAM,SAAA,GAAY,MAAM,MAAA,GAAS,CAAA;AACjC,UAAA,MAAM,QAAA,GAAW,MAAM,SAAS,CAAA;AAChC,UAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,YAAA,KAAA,CAAM,SAAS,IAAI,QAAA,GAAW,KAAA;AAAA,UAChC;AAAA,QACF,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EACvB;AAAA,EAEA,MAAA,GAAe;AACb,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,IAAU,CAAA,EAAG;AACzB,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,SAAA,CAAS,IAAA,CAAK,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,IAAA,EAAoB;AACxB,IAAA,OAAO,IAAI,SAAA,CAAS,CAAC,GAAG,IAAA,CAAK,MAAM,IAAI,eAAA,CAAgB,IAAI,CAAC,CAAC,CAAA;AAAA,EAC/D;AAAA,EAEA,UAAA,GAAmB;AACjB,IAAA,OAAO,IAAI,UAAS,CAAC,GAAG,KAAK,IAAA,EAAM,IAAI,YAAA,EAAc,CAAC,CAAA;AAAA,EACxD;AACF,CAAA;AAEO,IAAM,UAAA,GAAmB,IAAI,QAAA,CAAS,EAAE;AAExC,SAAS,WAAW,QAAA,EAAwC;AACjE,EAAA,OAAO,SAAS,MAAA,KAAW,CAAA,GAAI,UAAA,GAAa,IAAI,SAAS,QAAQ,CAAA;AACnE;;;ACnDO,SAAS,sBAAsB,OAAA,EAAgC;AACpE,EAAA,IAAI,OAAA,KAAY,EAAA,IAAM,OAAA,KAAY,GAAA,EAAK;AACrC,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,UAAA,CAAW,GAAG,IAAI,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,GAAI,OAAA,CAAQ,MAAM,GAAG,CAAA;AACvF,EAAA,MAAM,WAA0B,EAAC;AAEjC,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,SAAS,YAAA,EAAc;AACzB,MAAA,MAAM,WAAA,GAAc,CAAA,GAAI,CAAA,GAAI,KAAA,CAAM,MAAA;AAClC,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AAC7B,QAAA,QAAA,CAAS,IAAA,CAAK,IAAI,eAAA,CAAgB,IAAI,CAAC,CAAA;AACvC,QAAA,CAAA,IAAK,CAAA;AAAA,MACP,CAAA,MAAO;AACL,QAAA,CAAA,IAAK,CAAA;AAAA,MACP;AAAA,IACF,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,QAAA,CAAS,IAAA,CAAK,IAAI,YAAA,EAAc,CAAA;AAChC,MAAA,CAAA,IAAK,CAAA;AAAA,IACP,CAAA,MAAA,IAAW,SAAS,EAAA,EAAI;AACtB,MAAA,CAAA,IAAK,CAAA;AAAA,IACP,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,IAAI,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE,CAAA;AAAA,IACpE;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,kBAAkB,OAAA,EAAuB;AACvD,EAAA,OAAO,UAAA,CAAW,qBAAA,CAAsB,OAAO,CAAC,CAAA;AAClD;AAEO,SAAS,wBAAwB,OAAA,EAAyB;AAC/D,EAAA,OAAO,iBAAA,CAAkB,OAAO,CAAA,CAAE,QAAA,EAAS;AAC7C;;;ACrCO,IAAM,gBAAN,MAAoB;AAAA,EACR,SAAA,GAAqC,WAAW,GAAA,EAAI;AAAA,EACpD,SAAA,GAA+B,WAAW,GAAA,EAAI;AAAA,EAE/D,WAAA,GAAc;AACZ,IAAA,kBAAA,CAAmB,IAAA,EAAM;AAAA,MACvB,SAAA,EAAW,KAAA;AAAA,MACX,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAAA,EAEA,QAAQ,QAAA,EAA4B;AAClC,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,YAAA,CAAa,UAAU,UAAU,CAAA;AAAA,EACxC;AAAA,EAEA,QAAQ,EAAA,EAAwB;AAC9B,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA,IAAK,SAAA;AAAA,EACnC;AAAA,EAEA,QAAQ,EAAA,EAAkB;AACxB,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA,IAAK,UAAA;AAAA,EACnC;AAAA,EAEA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,KAAK,SAAA,CAAU,IAAA;AAAA,EACxB;AAAA,EAEA,OAAA,GAAoC;AAClC,IAAA,OAAO,IAAA,CAAK,UAAU,IAAA,EAAK;AAAA,EAC7B;AAAA,EAEQ,YAAA,CAAa,MAAkB,IAAA,EAAkB;AACvD,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAA,IAAM,IAAI,CAAA;AAClC,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAA,IAAM,IAAI,CAAA;AAElC,IAAA,IAAI,IAAA,CAAK,UAAS,EAAG;AACnB,MAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,UAAA,EAAW,EAAG;AACrC,QAAA,IAAA,CAAK,aAAa,KAAA,EAAO,IAAA,CAAK,MAAM,KAAA,CAAM,IAAA,EAAM,CAAC,CAAA;AAAA,MACnD;AAAA,IACF,CAAA,MAAA,IAAW,IAAA,CAAK,OAAA,EAAQ,EAAG;AACzB,MAAA,IAAA,CAAK,aAAa,IAAA,CAAK,KAAA,EAAM,EAAG,IAAA,CAAK,YAAY,CAAA;AAAA,IACnD;AAAA,EACF;AACF,CAAA;;;AC5CO,IAAM,cAAA,GAAN,MAAM,eAAA,CAAqC;AAAA,EAC/B,KAAA,GAAQ,IAAI,aAAA,EAAc;AAAA,EAC1B,aAAA,uBAAoB,GAAA,EAAoB;AAAA,EACjD,SAAA;AAAA,EAER,YAAY,QAAA,EAAsB;AAChC,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AACjB,IAAA,IAAA,CAAK,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAE3B,IAAA,kBAAA,CAAmB,IAAA,EAAM;AAAA,MACvB,KAAA,EAAO,KAAA;AAAA,MACP,aAAA,EAAe,KAAA;AAAA,MACf,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAAA,EAEA,IAAA,GAAmB;AACjB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,SAAS,EAAA,EAAwB;AAC/B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,EAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,IAAA,EAAwB;AAC7B,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA,OAAO,IAAA,CAAK,SAAA;AAAA,IACd;AAEA,IAAA,IAAI,UAAsB,IAAA,CAAK,SAAA;AAE/B,IAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,QAAA,EAAS,EAAG;AACrC,MAAA,IAAI,OAAA,CAAQ,QAAO,EAAG;AACpB,QAAA,OAAO,SAAA;AAAA,MACT;AAEA,MAAA,IAAI,OAAA,CAAQ,SAAQ,EAAG;AACrB,QAAA,OAAA,GAAU,QAAQ,KAAA,EAAM;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,OAAA,CAAQ,QAAA,CAAS,OAAA,CAAQ,YAAA,EAAc,CAAA;AAAA,MACnD;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAoC;AAClC,IAAA,OAAO,IAAA,CAAK,MAAM,OAAA,EAAQ;AAAA,EAC5B;AAAA,EAEA,UAAA,GAAqB;AACnB,IAAA,OAAO,KAAK,KAAA,CAAM,SAAA;AAAA,EACpB;AAAA,EAEA,KAAA,GAAoB;AAClB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAA,EAAM;AACxC,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAe,UAAU,CAAA;AAC5C,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,KAAK,aAAA,EAAe;AAC/C,MAAA,MAAA,CAAO,aAAA,CAAc,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,gBAAA,CAAiB,WAAmB,SAAA,EAAyB;AAC3D,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,SAAA,EAAW,SAAS,CAAA;AAAA,EAC7C;AAAA,EAEA,YAAA,GAAmD;AACjD,IAAA,OAAO,IAAA,CAAK,cAAc,OAAA,EAAQ;AAAA,EACpC;AAAA,EAEA,iBAAA,GAA0B;AACxB,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AAAA,EAC3B;AAAA,EAEA,UAAA,CAAW,UAAkB,IAAA,EAAwB;AACnD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACrC,IAAA,IAAI,MAAA,CAAO,QAAO,EAAG;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,SAAQ,EAAG;AACpB,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IACzE;AAEA,IAAA,MAAA,CAAO,SAAS,IAAI,CAAA;AACpB,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA,EAEA,aAAA,CAAc,QAAA,EAAkB,KAAA,EAAe,IAAA,EAAwB;AACrE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACrC,IAAA,IAAI,MAAA,CAAO,QAAO,EAAG;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,SAAQ,EAAG;AACpB,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IACzE;AAEA,IAAA,MAAA,CAAO,WAAA,CAAY,OAAO,IAAI,CAAA;AAC9B,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA,EAEA,aAAa,IAAA,EAAqB;AAChC,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAA,GAAa,KAAK,MAAA,EAAO;AAC/B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAErC,IAAA,IAAI,MAAA,CAAO,QAAO,EAAG;AACnB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,QAAA,EAAS,CAAE,GAAG,EAAE,CAAA;AAEzC,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,OAAA,EAAQ,EAAG;AACzC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,WAAA,CAAY,cAAc,CAAA;AAC7D,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,YAAA,EAAa;AAAA,IACpB;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,UAAA,CAAW,QAAgB,OAAA,EAAuB;AAChD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AACjC,IAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,QAAQ,OAAO,CAAA;AACpB,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA,EAEA,QAAA,CAAS,QAAgB,WAAA,EAA2B;AAClD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AACjC,IAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AACtC,IAAA,IAAI,WAAA,CAAY,SAAQ,EAAG;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,iBAAA,GAAoB,YAAY,MAAA,EAAO;AAC7C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,iBAAiB,CAAA;AAEnD,IAAA,IAAI,aAAA,CAAc,QAAO,EAAG;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,CAAc,SAAQ,EAAG;AAC3B,MAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,IAC7E;AAEA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AAC3C,IAAA,IAAI,SAAA,CAAU,QAAO,EAAG;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,CAAU,SAAQ,EAAG;AACvB,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA;AAC7C,IAAA,IACE,cAAc,MAAA,CAAO,WAAW,KAChC,aAAA,CAAc,SAAA,CAAU,WAAW,CAAA,EACnC;AACA,MAAA;AAAA,IACF;AAEA,IAAA,aAAA,CAAc,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,CAAA;AACrC,IAAA,SAAA,CAAU,SAAS,IAAI,CAAA;AACvB,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA,EAEA,SAAA,CAAU,MAAY,IAAA,EAAwB;AAC5C,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,KAAK,MAAA,EAAO;AAC/B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAErC,IAAA,IAAI,MAAA,CAAO,QAAO,EAAG;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,QAAA,EAAS,CAAE,GAAG,EAAE,CAAA;AAEzC,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAA,CAAY,SAAQ,EAAG;AACzB,MAAA,MAAA,CAAO,SAAS,IAAI,CAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,MAAM,YAAA,GAAe,YAAY,YAAA,EAAa;AAC9C,MAAA,IAAA,CAAK,QAAQ,YAAY,CAAA;AACzB,MAAA,MAAA,CAAO,YAAA,CAAa,cAAc,IAAI,CAAA;AAAA,IACxC;AAEA,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA,EAEA,YAAY,OAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,SAAA,GAAY,OAAA;AACjB,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA,EAEQ,YAAA,GAAqB;AAC3B,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA;AAAA,EACnC;AACF,CAAA;AAEO,SAAS,iBAAiB,IAAA,EAA8B;AAC7D,EAAA,OAAO,IAAI,eAAe,IAAI,CAAA;AAChC;;;ACvOO,IAAM,gBAAN,MAAoB;AAAA,EACR,UAAA,uBAAiB,GAAA,EAAkB;AAAA,EACnC,aAAA,uBAAoB,GAAA,EAAoB;AAAA,EAEzD,YAAY,QAAA,EAAsB;AAChC,IAAA,KAAA,MAAW,MAAA,IAAU,QAAA,CAAS,OAAA,EAAQ,EAAG;AACvC,MAAA,IAAA,CAAK,WAAW,GAAA,CAAI,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,YAAY,MAAA,EAAyB;AACnC,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AAAA,EACnC;AAAA,EAEA,YAAY,MAAA,EAAkC;AAC5C,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AAAA,EACnC;AAAA,EAEA,gBAAA,CAAiB,WAAmB,SAAA,EAAyB;AAC3D,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,SAAA,EAAW,SAAS,CAAA;AAAA,EAC7C;AAAA,EAEA,qBAAqB,SAAA,EAAuC;AAC1D,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,SAAS,CAAA;AAAA,EACzC;AAAA,EAEA,kBAAkB,SAAA,EAAuC;AACvD,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,KAAK,aAAA,EAAe;AAC/C,MAAA,IAAI,UAAU,SAAA,EAAW;AACvB,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,cAAc,MAAA,EAAyB;AACrC,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,aAAA,CAAc,MAAA,EAAO,EAAG;AAC/C,MAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,IAAI,YAAA,GAA4C;AAC9C,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AACF;;;AChDO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,sBAAA,CAAuB,UAAgB,MAAA,EAAsB;AAC3D,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,EAAO,CAAE,QAAA,EAAS;AAChD,IAAA,MAAM,UAAA,GAAa,OAAO,QAAA,EAAS;AAEnC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,sBAAA,CAAuB,YAAA,EAAc,UAAU,CAAA;AACzE,IAAA,MAAM,OAAA,GAAU,aAAa,MAAA,GAAS,YAAA;AAEtC,IAAA,MAAM,QAAQ,IAAA,CAAK,2BAAA;AAAA,MACjB,OAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,IAAA,CAAK,4BAAA,CAA6B,KAAA,EAAO,UAAU,CAAA;AAAA,EAC5D;AAAA,EAEQ,sBAAA,CACN,cACA,UAAA,EACQ;AACR,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,MAAA,EAAQ,WAAW,MAAM,CAAA;AAC9D,IAAA,IAAI,eAAA,GAAkB,CAAA;AAEtB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,MAAA,MAAM,OAAA,GAAU,aAAa,CAAC,CAAA;AAC9B,MAAA,MAAM,KAAA,GAAQ,WAAW,CAAC,CAAA;AAE1B,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,KAAA,EAAO;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,CAAQ,OAAA,EAAQ,IAAK,KAAA,CAAM,SAAQ,EAAG;AACxC,QAAA,eAAA,EAAA;AAAA,MACF,CAAA,MAAA,IACE,OAAA,CAAQ,UAAA,EAAW,IACnB,KAAA,CAAM,UAAA,EAAW,IACjB,OAAA,CAAQ,YAAA,EAAa,KAAM,KAAA,CAAM,YAAA,EAAa,EAC9C;AACA,QAAA,eAAA,EAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,eAAA;AAAA,EACT;AAAA,EAEQ,2BAAA,CACN,OAAA,EACA,UAAA,EACA,UAAA,EACU;AACV,IAAA,MAAM,QAAkB,EAAC;AAEzB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,EAAS,CAAA,EAAA,EAAK;AAChC,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACjB;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,UAAA,EAAY,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AACnD,MAAA,MAAM,GAAA,GAAM,WAAW,CAAC,CAAA;AACxB,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,IAAI,GAAA,CAAI,YAAW,EAAG;AACpB,UAAA,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,CAAA;AAAA,QAC/B,WAAW,GAAA,CAAI,OAAA,EAAQ,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5C,UAAA,MAAM,QAAA,GAAW,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA;AAC5B,UAAA,IAAI,QAAA,IAAY,aAAa,IAAA,EAAM;AACjC,YAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAAI,QAAA,GAAW,KAAA;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,4BAAA,CACN,OACA,UAAA,EACQ;AACR,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,OAAA,GAAU,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA;AAChC,MAAA,IAAI,OAAA,EAAS,YAAW,EAAG;AACzB,QAAA,OAAO,QAAQ,YAAA,EAAa;AAAA,MAC9B;AACA,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,IAAA,EAAM;AACrB,MAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,IACvB;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EACvB;AACF;;;AChGO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EACtC,WAAA,CACE,OAAA,EACgB,MAAA,EACA,OAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHG,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AAAA,EACd;AACF;;;ACEO,IAAM,iBAAA,GAAN,MAAM,kBAAA,CAAkB;AAAA,EAG7B,WAAA,CACmB,IAAA,EACA,aAAA,EACA,OAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAChB;AAAA,EANc,WAAA,GAAc,IAAI,kBAAA,EAAmB;AAAA,EAQtD,OAAO,UAAA,CACL,IAAA,EACA,aAAA,EACA,OAAA,EACU;AACV,IAAA,MAAM,UAAA,GAAa,IAAI,kBAAA,CAAkB,IAAA,EAAM,eAAe,OAAO,CAAA;AACrE,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,CAAA;AAAA,MACT,UAAA,EAAY,WAAW,SAAA;AAAU,KACnC;AAAA,EACF;AAAA,EAEA,OAAO,mBAAA,CACL,IAAA,EACA,eACA,OAAA,EACA,OAAA,GAA4B,EAAC,EACrB;AACR,IAAA,MAAM,UAAA,GAAa,IAAI,kBAAA,CAAkB,IAAA,EAAM,eAAe,OAAO,CAAA;AACrE,IAAA,OAAO,UAAA,CAAW,UAAU,OAAO,CAAA;AAAA,EACrC;AAAA,EAEA,SAAA,CAAU,OAAA,GAA4B,EAAC,EAAW;AAChD,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,qBAAA,CAAsB,OAAO,CAAA;AACvD,IAAA,MAAM,aAAaA,2BAAA,CAAoB,IAAA,CAAK,OAAA,CAAQ,GAAA,IAAO,YAAY,CAAA;AACvE,IAAA,OAAOC,qBAAa,UAAU,CAAA;AAAA,EAChC;AAAA,EAEQ,sBAAsB,OAAA,EAAmD;AAC/E,IAAA,MAAM,eAAuC,EAAC;AAC9C,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAK,aAAa,CAAA;AACvD,IAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,IAAA;AAEjC,IAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAS,EAAG;AAC7C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,mBAAA,CAAoB,OAAO,CAAA;AACvD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAC5C,MAAA,IAAI,UAAA,CAAW,QAAO,EAAG;AACvB,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAM,IAAI,YAAA;AAAA,YACR,CAAA,+CAAA,CAAA;AAAA,YACA,IAAA,CAAK,aAAA;AAAA,YACL,kBAAkB,MAAM,CAAA;AAAA,WAC1B;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAC1C,MAAA,MAAM,OAAA,GAAU,KAAK,WAAA,CAAY,sBAAA;AAAA,QAC/B,WAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,OAAO,CAAA,EAAG;AAC3C,QAAA,YAAA,CAAa,OAAO,CAAA,GAAI,OAAA;AAAA,MAC1B;AAAA,IACF;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA,EAEQ,gBAAA,CAAiB,SAAiB,OAAA,EAA0B;AAClE,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,sBAAA,CAAuB,OAAO,CAAA;AAC7D,IAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,sBAAA,CAAuB,OAAO,CAAA;AAE7D,IAAA,OAAO,iBAAA,KAAsB,iBAAA;AAAA,EAC/B;AAAA,EAEQ,uBAAuB,IAAA,EAAsB;AACnD,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,UAAA,EAAY,KAAK,CAAA;AAAA,EAC1C;AACF;;;AC1FO,SAAS,aAAA,CACd,OAAA,EACA,IAAA,EACA,OAAA,EACS;AACT,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAM,IAAA,CAAK,UAAS,EAAG;AAC1C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,IAAA,EAAK,KAAM,IAAA,CAAK,MAAK,EAAG;AAClC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA,EAAG;AACpC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,aAAY,EAAG;AACzB,IAAA,OAAO,kBAAA,CAAmB,OAAA,EAAS,IAAA,EAAM,OAAO,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,OAAA,CAAQ,UAAS,EAAG;AACtB,IAAA,OAAO,eAAA,CAAgB,OAAA,EAAS,IAAA,EAAM,OAAO,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAQ,EAAG;AACrB,IAAA,OAAO,cAAA,CAAe,OAAA,EAAS,IAAA,EAAM,OAAO,CAAA;AAAA,EAC9C;AAEA,EAAA,IAAI,OAAA,CAAQ,OAAM,EAAG;AACnB,IAAA,OAAO,OAAA,CAAQ,GAAA,EAAI,KAAM,IAAA,CAAK,GAAA,EAAI;AAAA,EACpC;AAEA,EAAA,OAAO,OAAA,CAAQ,MAAA,EAAO,IAAK,IAAA,CAAK,MAAA,EAAO;AACzC;AAEO,SAAS,oBAAA,CACd,OAAA,EACA,IAAA,EACA,OAAA,EACS;AACT,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAM,IAAA,CAAK,UAAS,EAAG;AAC1C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA,EAAG;AACpC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,aAAY,EAAG;AACzB,IAAA,OAAO,kBAAA,CAAmB,OAAA,EAAS,IAAA,EAAM,OAAO,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,OAAA,CAAQ,UAAS,EAAG;AACtB,IAAA,OAAO,eAAA,CAAgB,OAAA,EAAS,IAAA,EAAM,OAAO,CAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAQ,EAAG;AACrB,IAAA,OAAO,cAAA,CAAe,OAAA,EAAS,IAAA,EAAM,OAAO,CAAA;AAAA,EAC9C;AAEA,EAAA,IAAI,OAAA,CAAQ,OAAM,EAAG;AACnB,IAAA,OAAO,OAAA,CAAQ,GAAA,EAAI,KAAM,IAAA,CAAK,GAAA,EAAI;AAAA,EACpC;AAEA,EAAA,OAAO,OAAA,CAAQ,MAAA,EAAO,IAAK,IAAA,CAAK,MAAA,EAAO;AACzC;AAEA,SAAS,gBAAA,CAAiB,SAAqB,IAAA,EAA2B;AACxE,EAAA,MAAM,WAAA,GAAc,QAAQ,QAAA,EAAS;AACrC,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,EAAS;AAE/B,EAAA,OACE,WAAA,CAAY,KAAA,KAAU,QAAA,CAAS,KAAA,IAC/B,WAAA,CAAY,gBAAgB,QAAA,CAAS,WAAA,IACrC,WAAA,CAAY,UAAA,KAAe,QAAA,CAAS,UAAA;AAExC;AAEA,SAAS,kBAAA,CACP,OAAA,EACA,IAAA,EACA,OAAA,EACS;AACT,EAAA,IAAI,OAAA,CAAQ,YAAA,EAAa,KAAM,IAAA,CAAK,cAAa,EAAG;AAClD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,UAAA,EAAW,KAAM,IAAA,CAAK,YAAW,EAAG;AAC9C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,OAAA,EAAQ;AACvC,EAAA,MAAM,WAAA,GAAc,KAAK,OAAA,EAAQ;AAEjC,EAAA,IAAI,cAAA,KAAmB,MAAA,IAAa,WAAA,KAAgB,MAAA,EAAW;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,cAAA,KAAmB,MAAA,IAAa,WAAA,KAAgB,MAAA,EAAW;AAC7D,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,gBAAA;AAAA,IACL,cAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAQ,EAAA,EAAG;AAAA,IACX,KAAK,EAAA,EAAG;AAAA,IACR;AAAA,GACF;AACF;AAEA,SAAS,gBAAA,CACP,cAAA,EACA,WAAA,EACA,aAAA,EACA,YACA,OAAA,EACS;AACT,EAAA,IAAI,cAAA,CAAe,OAAA,EAAQ,KAAM,WAAA,CAAY,SAAQ,EAAG;AACtD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,uBAAA;AAAA,IAClB,cAAA;AAAA,IACA,OAAA,CAAQ,WAAA;AAAA,IACR;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAW,uBAAA;AAAA,IACf,WAAA;AAAA,IACA,OAAA,CAAQ,QAAA;AAAA,IACR;AAAA,GACF;AAEA,EAAA,IAAI,WAAA,KAAgB,IAAA,IAAQ,QAAA,KAAa,IAAA,EAAM;AAC7C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,WAAA,KAAgB,QAAA;AACzB;AAEA,SAAS,uBAAA,CACP,OAAA,EACA,IAAA,EACA,MAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,OAAO,iBAAA,CAAkB,oBAAoB,IAAA,EAAM,MAAA,EAAQ,SAAS,EAAE,MAAA,EAAQ,OAAO,CAAA;AAAA,EACvF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,eAAA,CACP,OAAA,EACA,IAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,YAAA,GAAe,QAAQ,UAAA,EAAW;AACxC,EAAA,MAAM,SAAA,GAAY,KAAK,UAAA,EAAW;AAElC,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ;AAC5C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACtC,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,KAAM,WAAA,CAAY,IAAA,EAAM,CAAA;AACtE,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,cAAc,WAAA,EAAa,QAAA,EAAU,OAAO,CAAA,EAAG;AAC/D,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAA,CACP,OAAA,EACA,IAAA,EACA,OAAA,EACS;AACT,EAAA,IAAI,OAAA,CAAQ,YAAA,EAAa,KAAM,IAAA,CAAK,cAAa,EAAG;AAClD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,cAAc,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,KAAA,IAAS,OAAO,CAAA;AAC7D;;;ACvLO,IAAM,kBAAN,MAAsB;AAAA,EAG3B,WAAA,CACmB,QAAA,EACA,WAAA,EACA,KAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAEjB,IAAA,IAAA,CAAK,OAAA,GAAU,EAAE,WAAA,EAAa,QAAA,EAAS;AAAA,EACzC;AAAA,EARiB,OAAA;AAAA,EAUjB,OAAA,GAAuB;AACrB,IAAA,MAAM,UAAuB,EAAC;AAE9B,IAAA,IAAA,CAAK,uBAAuB,OAAO,CAAA;AACnC,IAAA,IAAA,CAAK,oBAAoB,OAAO,CAAA;AAEhC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,uBAAuB,OAAA,EAA4B;AACzD,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,WAAA,CAAY,OAAA,EAAQ,EAAG;AAC/C,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA;AACpD,MAAA,IAAA,CAAK,iBAAA,CAAkB,OAAA,EAAS,MAAA,EAAQ,WAAW,CAAA;AAAA,IACrD;AAAA,EACF;AAAA,EAEQ,iBAAA,CACN,OAAA,EACA,MAAA,EACA,WAAA,EACM;AACN,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,MAAM,CAAA,EAAG;AACpC,MAAA,IAAA,CAAK,wBAAA,CAAyB,OAAA,EAAS,MAAA,EAAQ,WAAW,CAAA;AAC1D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,MAAM,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,SAAS,QAAA,EAAU,IAAA,EAAM,aAAa,CAAA;AAC3D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA;AAClD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAE9C,IAAA,IAAI,CAAC,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA,EAAG;AACjC,MAAA,IAAA,CAAK,kBAAA,CAAmB,OAAA,EAAS,QAAA,EAAU,WAAW,CAAA;AAAA,IACxD,WAAW,CAAC,aAAA,CAAc,aAAa,QAAA,EAAU,IAAA,CAAK,OAAO,CAAA,EAAG;AAC9D,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,aAAa,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,wBAAA,CACN,OAAA,EACA,MAAA,EACA,WAAA,EACM;AACN,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,iBAAA,CAAkB,MAAM,CAAA;AACtD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,UAAU,CAAA;AAClD,IAAA,IAAI,QAAA,CAAS,QAAO,EAAG;AACrB,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,SAAS,QAAA,EAAU,IAAA,EAAM,aAAa,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,aAAa,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,kBAAA,CACN,OAAA,EACA,QAAA,EACA,WAAA,EACM;AACN,IAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,aAAa,CAAA;AAErD,IAAA,IAAI,CAAC,oBAAA,CAAqB,WAAA,EAAa,QAAA,EAAU,IAAA,CAAK,OAAO,CAAA,EAAG;AAC9D,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,aAAa,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,oBAAoB,OAAA,EAA4B;AACtD,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,QAAA,CAAS,OAAA,EAAQ,EAAG;AAC5C,MAAA,IAAI,IAAA,CAAK,KAAA,CAAM,oBAAA,CAAqB,MAAM,CAAA,EAAG;AAC3C,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA;AACpD,MAAA,IAAI,WAAA,CAAY,QAAO,EAAG;AACxB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAC9C,QAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,WAAW,QAAA,EAAU,WAAA,EAAa,MAAM,CAAA;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,cAAA,CACd,QAAA,EACA,WAAA,EACA,KAAA,EACa;AACb,EAAA,OAAO,IAAI,eAAA,CAAgB,QAAA,EAAU,WAAA,EAAa,KAAK,EAAE,OAAA,EAAQ;AACnE;;;ACtGO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,WAAA,CACmB,aACA,KAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAChB;AAAA,EAEH,SAAS,OAAA,EAAiD;AACxD,IAAA,MAAM,QAAuB,EAAC;AAC9B,IAAA,MAAM,QAAuB,EAAC;AAC9B,IAAA,MAAM,UAA2B,EAAC;AAClC,IAAA,MAAM,WAA6B,EAAC;AAEpC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAE7C,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,OAAA,EAAS,UAAU,CAAA,EAAG;AACpD,QAAA;AAAA,MACF;AAEA,MAAA,QAAQ,OAAO,IAAA;AAAM,QACnB,KAAK,OAAA;AACH,UAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,UAAA;AAAA,QACF,KAAK,UAAA;AACH,UAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AACpB,UAAA;AAAA;AACJ,IACF;AAEA,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,QAAA,EAAS;AAAA,EAC3C;AAAA,EAEQ,cAAc,OAAA,EAA4C;AAChE,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAE9B,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3B,QAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,YAAY,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAC5D,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,KAAA,CAAM,GAAA,CAAI,QAAA,CAAS,aAAA,EAAe,CAAA;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,cAAA,CACN,MAAA,EACA,UAAA,EACA,UAAA,EACS;AACT,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA;AAEtC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQ,UAAA,EAAY,IAAI,CAAA,EAAG;AAClD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,UAAU,CAAA,EAAG;AAC7C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,cAAc,MAAA,EAAyB;AAC7C,IAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,MAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,YAAY,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAC5D,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,sCAAA,EAAyC,MAAA,CAAO,QAAA,CAAS,EAAA,EAAI,CAAA;AAAA,SAC/D;AAAA,MACF;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAK,WAAA,CAAY,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAAA,EACxD;AAAA,EAEQ,eAAA,CACN,MAAA,EACA,UAAA,EACA,IAAA,EACS;AACT,IAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAC9B,MAAA,IAAI,UAAU,MAAA,EAAQ;AAEtB,MAAA,IAAI,IAAA,CAAK,yBAAA,CAA0B,MAAA,EAAQ,KAAK,CAAA,EAAG;AACjD,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA;AAE1C,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,EAAG;AAC7B,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,yBAAA,CACN,QACA,KAAA,EACS;AACT,IAAA,IAAI,MAAM,IAAA,KAAS,UAAA,IAAc,CAAC,IAAA,CAAK,uBAAA,CAAwB,KAAK,CAAA,EAAG;AACrE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,SAAS,OAAA,EAAS;AACrD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,SAAS,OAAA,EAAS;AACrD,MAAA,OAAO,IAAA,CAAK,qBAAqB,MAAM,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,wBAAwB,MAAA,EAAiC;AAC/D,IAAA,OAAO,OAAO,QAAA,CAAS,QAAA,EAAS,KAAM,MAAA,CAAO,YAAY,QAAA,EAAS;AAAA,EACpE;AAAA,EAEQ,qBAAqB,MAAA,EAA8B;AACzD,IAAA,OAAO,OAAO,QAAA,CAAS,IAAA,EAAK,KAAM,MAAA,CAAO,YAAY,IAAA,EAAK;AAAA,EAC5D;AAAA,EAEQ,gBAAA,CACN,QACA,UAAA,EACS;AACT,IAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAC9B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,YAAY,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAC5D,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,IACE,QAAA,CAAS,aAAA,EAAc,CAAE,UAAA,CAAW,SAAA,GAAY,GAAG,CAAA,IACnD,QAAA,CAAS,aAAA,EAAc,KAAM,SAAA,EAC7B;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,eAAA,CACd,OAAA,EACA,WAAA,EACA,KAAA,EACkB;AAClB,EAAA,OAAO,IAAI,eAAA,CAAgB,WAAA,EAAa,KAAK,CAAA,CAAE,SAAS,OAAO,CAAA;AACjE;;;AC3KO,IAAM,aAAN,MAAiB;AAAA,EACd,SAAA;AAAA,EACS,YAAA;AAAA,EACT,MAAA;AAAA,EAER,YAAY,WAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,YAAA,GAAe,WAAA;AACpB,IAAA,IAAA,CAAK,SAAA,GAAY,YAAY,KAAA,EAAM;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,aAAA,CAAc,IAAA,CAAK,SAAS,CAAA;AAAA,EAChD;AAAA,EAEA,IAAI,QAAA,GAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,IAAI,WAAA,GAA0B;AAC5B,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,IAAI,KAAA,GAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AACpC,IAAA,OAAO,QAAQ,MAAA,GAAS,CAAA;AAAA,EAC1B;AAAA,EAEA,cAAA,GAA8B;AAC5B,IAAA,OAAO,eAAe,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,YAAA,EAAc,KAAK,MAAM,CAAA;AAAA,EACtE;AAAA,EAEA,gBAAgB,OAAA,EAAkD;AAChE,IAAA,MAAM,UAAA,GAAa,OAAA,IAAW,IAAA,CAAK,cAAA,EAAe;AAClD,IAAA,OAAO,eAAA,CAAgB,UAAA,EAAY,IAAA,CAAK,YAAA,EAAc,KAAK,MAAM,CAAA;AAAA,EACnE;AAAA,EAEA,gBAAA,CAAiB,WAAmB,SAAA,EAAyB;AAC3D,IAAA,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,SAAA,EAAW,SAAS,CAAA;AAAA,EACnD;AAAA,EAEA,WAAA,GAAoB;AAClB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM;AACzC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,aAAA,CAAc,IAAA,CAAK,SAAS,CAAA;AAAA,EAChD;AACF;;;AC/CO,IAAM,qBAAN,MAAsD;AAAA,EAC3D,YAA6B,MAAA,EAAgB;AAAhB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAC3B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,YAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AACF;;;ACEO,IAAM,mBAAN,MAAuB;AAAA,EACpB,IAAA,GAA0B,IAAA;AAAA,EAC1B,cAAA,uBAAkC,GAAA,EAAI;AAAA,EAE9C,aAAA,CACE,IAAA,EACA,IAAA,EACA,OAAA,EACY;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAA,EAAS,cAAA,oBAAkB,IAAI,GAAA,EAAI;AACzD,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IAC5B,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,MAAA,IAAA,CAAK,cAAA,uBAAqB,GAAA,EAAI;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,cAAc,IAAA,EAAoC;AAChD,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAA,IAAQ,IAAI,CAAA;AAAA,EAC7C;AAAA,EAEQ,UAAU,IAAA,EAA8B;AAC9C,IAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,GAAG,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI,IAAA,CAAK,UAAS,EAAG;AACnB,MAAA,OAAO,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,IAClC;AAEA,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA,OAAO,IAAA,CAAK,eAAe,IAAI,CAAA;AAAA,IACjC;AAEA,IAAA,OAAO,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAAA,EACrC;AAAA,EAEQ,gBAAgB,IAAA,EAAoC;AAC1D,IAAA,MAAM,aAAyC,EAAC;AAChD,IAAA,MAAM,WAAqB,EAAC;AAE5B,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,UAAA,EAAW,EAAG;AACrC,MAAA,IAAI,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA,EAAG;AAC7B,QAAA;AAAA,MACF;AACA,MAAA,UAAA,CAAW,MAAM,IAAA,EAAM,CAAA,GAAI,IAAA,CAAK,UAAU,KAAK,CAAA;AAC/C,MAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,MAAA,GAA2B;AAAA,MAC/B,IAAA,EAAA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,oBAAA,EAAsB,KAAA;AAAA,MACtB;AAAA,KACF;AAEA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,IAAI,CAAA;AAAA,EACtC;AAAA,EAEQ,eAAe,IAAA,EAAmC;AACxD,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,EAAM;AACzB,IAAA,IAAI,KAAA,CAAM,QAAO,EAAG;AAClB,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,MAAA,GAA0B;AAAA,MAC9B,IAAA,EAAA,OAAA;AAAA,MACA,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,KAAK;AAAA,KAC7B;AAEA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,IAAI,CAAA;AAAA,EACtC;AAAA,EAEQ,YAAA,CAAa,MAAkB,GAAA,EAA4B;AACjE,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,IAAA,EAAM;AAAA,KACR;AAEA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,IAAI,CAAA;AAAA,EACtC;AAAA,EAEQ,mBAAmB,IAAA,EAA8B;AACvD,IAAA,MAAM,QAAA,GAAW,KAAK,QAAA,EAAS;AAE/B,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,QAAA;AACH,QAAA,OAAO,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,MAClC,KAAK,QAAA;AACH,QAAA,OAAO,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,MAClC,KAAK,SAAA;AACH,QAAA,OAAO,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,MACnC;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAE,CAAA;AAAA;AACzD,EACF;AAAA,EAEQ,gBAAgB,IAAA,EAAoC;AAC1D,IAAA,MAAM,MAAA,GAA2B;AAAA,MAC/B,IAAA,EAAA,QAAA;AAAA,MACA,OAAA,EAAU,IAAA,CAAK,YAAA,EAAa,IAAgB;AAAA,KAC9C;AAEA,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,EAAW;AACnC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,UAAA,GAAa,UAAA;AAAA,IACtB;AAEA,IAAA,MAAM,gBAAA,GAAmB,KAAK,gBAAA,EAAiB;AAC/C,IAAA,IAAI,gBAAA,IAAoB,IAAA,CAAK,uBAAA,CAAwB,gBAAgB,CAAA,EAAG;AACtE,MAAA,MAAA,CAAO,gBAAA,GAAmB,gBAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,EAAQ;AAC7B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,MAAA,MAAA,CAAO,WAAW,CAAA,GAAI,IAAA,CAAK,gBAAA,CAAiB,MAAM,OAAO,CAAA;AAAA,IAC3D;AAEA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,IAAI,CAAA;AAAA,EACtC;AAAA,EAEQ,gBAAgB,IAAA,EAAoC;AAC1D,IAAA,MAAM,MAAA,GAA2B;AAAA,MAC/B,IAAA,EAAA,QAAA;AAAA,MACA,OAAA,EAAU,IAAA,CAAK,YAAA,EAAa,IAAgB;AAAA,KAC9C;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,EAAQ;AAC7B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,MAAA,MAAA,CAAO,WAAW,CAAA,GAAI,IAAA,CAAK,gBAAA,CAAiB,MAAM,OAAO,CAAA;AAAA,IAC3D;AAEA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,IAAI,CAAA;AAAA,EACtC;AAAA,EAEQ,iBAAiB,IAAA,EAAqC;AAC5D,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,IAAA,EAAA,SAAA;AAAA,MACA,OAAA,EAAU,IAAA,CAAK,YAAA,EAAa,IAAiB;AAAA,KAC/C;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,EAAQ;AAC7B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,MAAA,MAAA,CAAO,WAAW,CAAA,GAAI,IAAA,CAAK,gBAAA,CAAiB,MAAM,OAAO,CAAA;AAAA,IAC3D;AAEA,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,IAAI,CAAA;AAAA,EACtC;AAAA,EAEQ,gBAAA,CAAiB,MAAkB,OAAA,EAA4B;AACrE,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,OAAO,kBAAkB,UAAA,CAAW,IAAA,CAAK,MAAM,IAAA,CAAK,EAAA,IAAM,OAAO,CAAA;AAAA,IACnE,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAE,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,EAAA,EAAG;AAAA,IACtC;AAAA,EACF;AAAA,EAEQ,WAAA,CAAkC,QAAW,IAAA,EAAqB;AACxE,IAAA,MAAM,IAAA,GAAO,KAAK,QAAA,EAAS;AAE3B,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAC,MAAA,CAA2C,QAAQ,IAAA,CAAK,KAAA;AAAA,IAC3D;AACA,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAC,MAAA,CAAiD,cAChD,IAAA,CAAK,WAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAC,MAAA,CAAiD,aAChD,IAAA,CAAK,UAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,cAAc,IAAA,EAA2B;AAC/C,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,EAC1C;AAAA,EAEQ,wBACN,KAAA,EAC4D;AAC5D,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,YAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,MACA,yBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,UAAA,CAAW,SAAS,KAAK,CAAA;AAAA,EAClC;AACF;;;AC5MO,IAAM,iBAAN,MAAqB;AAAA,EAI1B,WAAA,CACmB,aACA,QAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAEjB,IAAA,IAAA,CAAK,OAAA,GAAU,EAAE,WAAA,EAAa,QAAA,EAAS;AAAA,EACzC;AAAA,EARiB,UAAA,GAAa,IAAI,gBAAA,EAAiB;AAAA,EAClC,OAAA;AAAA,EASjB,SAAS,SAAA,EAA0C;AACjD,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,mBAAA,CAAoB,SAAA,CAAU,KAAK,CAAA;AAC7D,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,mBAAA,CAAoB,SAAA,CAAU,KAAK,CAAA;AAC5D,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,kBAAA,CAAmB,SAAA,CAAU,OAAO,YAAY,CAAA;AACxE,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,qBAAA,CAAsB,SAAA,CAAU,OAAO,CAAA;AAElE,IAAA,MAAM,EAAE,gBAAA,EAAkB,WAAA,EAAY,GAAI,IAAA,CAAK,mBAAA;AAAA,MAC7C,UAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,gBAAA,uBAAuB,GAAA,CAAI;AAAA,MAC/B,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MAC/B,GAAG,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MAClC,GAAG,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAO,CAAA,CAAoB,IAAI,CAAC,CAAA,CAAE,OAAO,OAAO;AAAA,KAClF,CAAA;AAED,IAAA,MAAM,iBAAiB,IAAA,CAAK,sBAAA;AAAA,MAC1B,SAAA,CAAU,QAAA;AAAA,MACV,gBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,gBAAA;AAAA,MACH,GAAG,WAAA;AAAA,MACH,GAAG,cAAA;AAAA,MACH,GAAG,WAAA;AAAA,MACH,GAAG;AAAA,KACL;AAAA,EACF;AAAA,EAEQ,oBAAoB,KAAA,EAA4C;AACtE,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,KAAA,MAAW,UAAU,KAAA,EAAO;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,WAAA,CAAY,EAAA,EAAI,CAAA;AAAA,IACrC;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,mBAAA,CACN,YACA,WAAA,EAC6D;AAC7D,IAAA,MAAM,gBAAA,GAAmB,YAAY,GAAA,CAAI,CAAC,MAAM,iBAAA,CAAkB,CAAA,CAAE,IAAI,CAAC,CAAA;AAEzE,IAAA,MAAM,mBAAgC,EAAC;AACvC,IAAA,MAAM,cAA2B,EAAC;AAElC,IAAA,KAAA,MAAW,YAAY,UAAA,EAAY;AACjC,MAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,QAAA,CAAS,IAAI,CAAA;AAC/C,MAAA,MAAM,iBAAiB,gBAAA,CAAiB,IAAA;AAAA,QAAK,CAAC,QAAA,KAC5C,QAAA,CAAS,SAAA,CAAU,OAAO;AAAA,OAC5B;AAEA,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,gBAAA,CAAiB,KAAK,QAAQ,CAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,KAAK,QAAQ,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,kBAAkB,WAAA,EAAY;AAAA,EACzC;AAAA,EAEQ,oBAAoB,KAAA,EAA4C;AACtE,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,mBAAA,CAAoB,KAAK,CAAA;AACnD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AAC9C,IAAA,MAAM,UAAuB,EAAC;AAC9B,IAAA,MAAM,eAAoD,EAAC;AAE3D,IAAA,KAAA,MAAW,UAAU,MAAA,EAAQ;AAC3B,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA,CAAS,OAAO,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAC1D,MAAA,MAAM,cAAc,IAAA,CAAK,WAAA,CAAY,OAAO,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AACnE,MAAA,MAAM,eAAe,IAAA,CAAK,cAAA;AAAA,QACxB,SAAS,aAAA,EAAc;AAAA,QACvB;AAAA,OACF;AAEA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,MAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM,YAAY,aAAA;AAAc,OACjC,CAAA;AAED,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QAChB,IAAA,EAAM,YAAA;AAAA,QACN,EAAA,EAAI,YAAY,aAAA;AAAc,OAC/B,CAAA;AAED,MAAA,MAAM,cAAc,IAAA,CAAK,uBAAA;AAAA,QACvB,MAAA,CAAO,QAAA;AAAA,QACP,MAAA,CAAO,WAAA;AAAA,QACP,YAAY,aAAA,EAAc;AAAA,QAC1B;AAAA,OACF;AACA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,OAAA,CAAQ,KAAK,WAAW,CAAA;AAAA,MAC1B;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,qBACN,KAAA,EACwB;AACxB,IAAA,OAAO,CAAC,GAAG,KAAK,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC/B,MAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,CAAS,MAAA,CAAO,EAAE,QAAA,CAAS,EAAA,EAAI,CAAA,CAAE,aAAA,EAAc;AAClE,MAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,CAAS,MAAA,CAAO,EAAE,QAAA,CAAS,EAAA,EAAI,CAAA,CAAE,aAAA,EAAc;AAClE,MAAA,OAAO,KAAA,CAAM,SAAS,KAAA,CAAM,MAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,cAAA,CACN,UACA,YAAA,EACQ;AACR,IAAA,IAAI,QAAA,GAAW,QAAA;AACf,IAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,MAAA,IAAI,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,IAAA,GAAO,GAAG,CAAA,EAAG;AACxC,QAAA,QAAA,GAAW,KAAK,EAAA,GAAK,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,MACtD;AAAA,IACF;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,uBAAA,CACN,QAAA,EACA,WAAA,EACA,WAAA,EACA,eAAA,EACkB;AAClB,IAAA,IAAI,oBAAA,CAAqB,WAAA,EAAa,QAAA,EAAU,IAAA,CAAK,OAAO,CAAA,EAAG;AAC7D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,4BAAA,CAA6B,WAAA,EAAa,QAAA,EAAU,eAAe,CAAA,EAAG;AAC7E,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,aAAA,GAAgB,KAAK,UAAA,CAAW,aAAA;AAAA,MACpC,WAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,SAAA;AAAA,MACJ,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAAA,EAEQ,4BAAA,CACN,WAAA,EACA,QAAA,EACA,QAAA,EACS;AACT,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,MAAc,CAAC,QAAA,CAAS,UAAS,EAAG;AACnD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,YAAA,GAAe,YAAY,UAAA,EAAW;AAC5C,IAAA,MAAM,SAAA,GAAY,SAAS,UAAA,EAAW;AAEtC,IAAA,IAAI,YAAA,CAAa,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ;AAC5C,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,MAAA,MAAM,WAAA,GAAc,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,EAAK,KAAM,IAAA,CAAK,IAAA,EAAM,CAAA;AAClE,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IAAI,CAAC,IAAA,CAAK,4BAAA,CAA6B,IAAA,EAAM,WAAA,EAAa,QAAQ,CAAA,EAAG;AACnE,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,CAAA,EAAG;AAC5B,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,MAAM,SAAA,GAAY,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAA,EAAG,KAAM,IAAA,CAAK,EAAA,EAAI,CAAA;AAC5D,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI,CAAC,IAAA,CAAK,4BAAA,CAA6B,IAAA,EAAM,SAAA,EAAW,QAAQ,CAAA,EAAG;AACjE,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,4BAAA,CACN,WAAA,EACA,QAAA,EACA,QAAA,EACS;AACT,IAAA,IAAI,oBAAA,CAAqB,WAAA,EAAa,QAAA,EAAU,IAAA,CAAK,OAAO,CAAA,EAAG;AAC7D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,4BAAA,CAA6B,WAAA,EAAa,QAAA,EAAU,QAAQ,CAAA;AAAA,EAC1E;AAAA,EAEQ,kBAAA,CACN,OACA,YAAA,EACa;AACb,IAAA,MAAM,UAAuB,EAAC;AAE9B,IAAA,KAAA,MAAW,UAAU,KAAA,EAAO;AAC1B,MAAA,MAAM,cAAc,IAAA,CAAK,WAAA,CAAY,OAAO,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AACnE,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,aAAA;AAAA,QAC7B,MAAA,CAAO,WAAA;AAAA,QACP,IAAA,CAAK,WAAA;AAAA,QACL,EAAE,gBAAgB,YAAA;AAAa,OACjC;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,KAAA;AAAA,QACJ,IAAA,EAAM,YAAY,aAAA,EAAc;AAAA,QAChC,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,sBAAsB,OAAA,EAAgD;AAC5E,IAAA,MAAM,UAAuB,EAAC;AAE9B,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA,CAAS,OAAO,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAC1D,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,QAAA;AAAA,QACJ,IAAA,EAAM,SAAS,aAAA;AAAc,OAC9B,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,sBAAA,CACN,QAAA,EACA,gBAAA,EACA,YAAA,EACa;AACb,IAAA,MAAM,UAAuB,EAAC;AAC9B,IAAA,MAAM,gBAAwB,EAAC;AAC/B,IAAA,MAAM,yBAAyB,CAAC,GAAG,gBAAgB,CAAA,CAAE,IAAI,iBAAiB,CAAA;AAE1E,IAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,MAAA,IAAI,aAAa,GAAA,CAAI,MAAA,CAAO,WAAA,CAAY,EAAA,EAAI,CAAA,EAAG;AAC7C,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,cAAc,IAAA,CAAK,WAAA,CAAY,OAAO,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAEnE,MAAA,IAAI,IAAA,CAAK,YAAA,CAAa,WAAA,EAAa,aAAa,CAAA,EAAG;AACjD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,WAAA,EAAa,sBAAsB,CAAA,EAAG;AACxD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAA,EAAG;AACpC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,CAAO,WAAA,CAAY,OAAA,EAAQ,EAAG;AAChC,QAAA,MAAM,eAAe,IAAA,CAAK,2BAAA;AAAA,UACxB,MAAA,CAAO,WAAA;AAAA,UACP,MAAA,CAAO,QAAA;AAAA,UACP;AAAA,SACF;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,YAAY,CAAA;AAC5B,QAAA,aAAA,CAAc,KAAK,WAAW,CAAA;AAC9B,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,aAAA;AAAA,QAC7B,MAAA,CAAO,WAAA;AAAA,QACP,IAAA,CAAK;AAAA,OACP;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAM,YAAY,aAAA,EAAc;AAAA,QAChC,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,aAAA,CAAc,KAAK,WAAW,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,2BAAA,CACN,WAAA,EACA,QAAA,EACA,WAAA,EACa;AACb,IAAA,IAAI,CAAC,QAAA,CAAS,OAAA,EAAQ,EAAG;AACvB,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,aAAA;AAAA,QAC7B,WAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AACA,MAAA,OAAO;AAAA,QACL;AAAA,UACE,EAAA,EAAI,SAAA;AAAA,UACJ,IAAA,EAAM,YAAY,aAAA,EAAc;AAAA,UAChC,KAAA,EAAO;AAAA;AACT,OACF;AAAA,IACF;AAEA,IAAA,MAAM,UAAuB,EAAC;AAC9B,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,kBAAA,CAAmB,WAAA,EAAa,QAAQ,CAAA;AACrE,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,CAAgB,WAAA,EAAa,QAAQ,CAAA;AAE/D,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,aAAA;AAAA,QAC7B,WAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAM,YAAY,aAAA,EAAc;AAAA,QAChC,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,KAAA,GAAQ,YAAY,KAAA,EAAM;AAChC,MAAA,MAAM,SAAA,GAAY,YAAY,UAAA,EAAW;AACzC,MAAA,MAAM,WAAA,GAAc,KAAK,UAAA,CAAW,aAAA;AAAA,QAClC,KAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA,EAAM,UAAU,aAAA,EAAc;AAAA,QAC9B,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,eAAA,CACN,aACA,QAAA,EACS;AACT,IAAA,MAAM,KAAA,GAAQ,YAAY,KAAA,EAAM;AAChC,IAAA,MAAM,SAAA,GAAY,SAAS,KAAA,EAAM;AAEjC,IAAA,MAAM,kBAAA,GAAqB,KAAK,UAAA,CAAW,aAAA;AAAA,MACzC,KAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AACA,IAAA,MAAM,eAAA,GAAkB,KAAK,UAAA,CAAW,aAAA;AAAA,MACtC,SAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,OAAO,KAAK,SAAA,CAAU,kBAAkB,CAAA,KAAM,IAAA,CAAK,UAAU,eAAe,CAAA;AAAA,EAC9E;AAAA,EAEQ,YAAA,CAAa,MAAY,OAAA,EAA0B;AACzD,IAAA,OAAO,QAAQ,IAAA,CAAK,CAAC,WAAW,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,EACxD;AAAA,EAEQ,UAAA,CAAW,MAAY,UAAA,EAA6B;AAC1D,IAAA,OAAO,WAAW,IAAA,CAAK,CAAC,cAAc,SAAA,CAAU,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EACjE;AAAA,EAEQ,mBAAmB,MAAA,EAAiC;AAC1D,IAAA,MAAM,aAAA,GAAgB,KAAK,UAAA,CAAW,aAAA;AAAA,MACpC,MAAA,CAAO,WAAA;AAAA,MACP,IAAA,CAAK;AAAA,KACP;AACA,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,CAAW,aAAA;AAAA,MACjC,MAAA,CAAO,QAAA;AAAA,MACP,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,IAAI,KAAK,SAAA,CAAU,aAAa,MAAM,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,EAAG;AAChE,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IACE,MAAA,CAAO,WAAA,CAAY,QAAA,EAAS,IAC5B,IAAA,CAAK,oBAAoB,MAAA,CAAO,WAAA,EAAa,MAAA,CAAO,QAAQ,CAAA,EAC5D;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IACE,MAAA,CAAO,WAAA,CAAY,OAAA,EAAQ,IAC3B,IAAA,CAAK,oBAAoB,MAAA,CAAO,WAAA,EAAa,MAAA,CAAO,QAAQ,CAAA,EAC5D;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,mBAAA,CACN,aACA,QAAA,EACS;AACT,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,EAAS,EAAG;AACxB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,kBAAA,CAAmB,WAAA,EAAa,QAAQ,CAAA,EAAG;AAClD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,kBAAA,CACN,aACA,QAAA,EACS;AACT,IAAA,MAAM,WAAA,GAAc,YAAY,QAAA,EAAS;AACzC,IAAA,MAAM,QAAA,GAAW,SAAS,QAAA,EAAS;AAEnC,IAAA,OACE,WAAA,CAAY,KAAA,KAAU,QAAA,CAAS,KAAA,IAC/B,WAAA,CAAY,gBAAgB,QAAA,CAAS,WAAA,IACrC,WAAA,CAAY,UAAA,KAAe,QAAA,CAAS,UAAA;AAAA,EAExC;AAAA,EAEQ,mBAAA,CACN,aACA,QAAA,EACS;AACT,IAAA,IAAI,CAAC,QAAA,CAAS,OAAA,EAAQ,EAAG;AACvB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,kBAAA,CAAmB,WAAA,EAAa,QAAQ,CAAA,EAAG;AAClD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,YAAY,KAAA,EAAM;AAChC,IAAA,MAAM,SAAA,GAAY,SAAS,KAAA,EAAM;AAEjC,IAAA,OAAO,KAAA,CAAM,EAAA,EAAG,KAAM,SAAA,CAAU,EAAA,EAAG;AAAA,EACrC;AAEF;;;ACvdA,SAAS,mBAAmB,KAAA,EAAoD;AAC9E,EAAA,MAAM,OAAO,OAAO,KAAA;AACpB,EAAA,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,SAAA;AAC5D;AAEO,IAAM,gBAAN,MAAoB;AAAA,EAGzB,WAAA,CACmB,aACA,QAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAEjB,IAAA,IAAA,CAAK,UAAA,GAAa,KAAK,eAAA,EAAgB;AAAA,EACzC;AAAA,EAPiB,UAAA;AAAA,EASjB,OAAO,KAAA,EAA+B;AACpC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,oBAAA,CAAqB,KAAA,CAAM,IAAI,CAAA;AAEtD,IAAA,IAAI,KAAA,CAAM,OAAO,KAAA,EAAO;AACtB,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,SAAS,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAI,KAAA,CAAM,OAAO,QAAA,EAAU;AACzB,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,SAAS,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,KAAA,CAAM,OAAO,MAAA,EAAQ;AACvB,MAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,KAAA,EAAO,SAAS,CAAA;AAAA,IAC9C;AAEA,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,KAAA,EAAO,SAAS,CAAA;AAAA,EACjD;AAAA,EAEQ,cAAA,CAAe,OAAkB,SAAA,EAAgC;AACvE,IAAA,MAAM,cAAc,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,WAAA,EAAa,MAAM,IAAI,CAAA;AAEnE,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,eAAA,EAAiB,EAAC,EAAE;AAAA,IACjD;AAEA,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,yBAAA,CAA0B,WAAW,CAAA;AAClE,IAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,eAAA,EAAgB;AAAA,EAC7C;AAAA,EAEQ,iBAAA,CAAkB,OAAkB,SAAA,EAAgC;AAC1E,IAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,eAAA,EAAiB,EAAC,EAAE;AAAA,EACjD;AAAA,EAEQ,eAAA,CAAgB,OAAsB,SAAA,EAAgC;AAC5E,IAAA,MAAM,WAAW,KAAA,CAAM,IAAA;AACvB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,QAAA,EAAU,MAAM,IAAI,CAAA;AACvD,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,sBAAA,CAAuB,QAAA,EAAU,MAAM,IAAI,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,UAAU,QAAQ,CAAA;AAC3D,IAAA,MAAM,cAAc,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,WAAA,EAAa,MAAM,IAAI,CAAA;AAEnE,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,sBAAA,CAAuB,QAAA,EAAU,WAAW,CAAA;AAEzE,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAU,QAAA,IAAY,MAAA;AAAA,MACtB,gBAAgB,cAAA,IAAkB;AAAA,KACpC;AAAA,EACF;AAAA,EAEQ,kBAAA,CAAmB,OAAkB,SAAA,EAAgC;AAC3E,IAAA,MAAM,WAAW,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,CAAA;AAC7D,IAAA,MAAM,cAAc,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,WAAA,EAAa,MAAM,IAAI,CAAA;AAEnE,IAAA,MAAM,oBAAA,GAAuB,QAAA,EAAU,OAAA,EAAQ,IAAK,aAAa,OAAA,EAAQ;AAEzE,IAAA,MAAM,cAAA,GAAiC,oBAAA,GAAuB,CAAC,SAAS,IAAI,EAAC;AAE7E,IAAA,MAAM,kBAAkB,IAAA,CAAK,sBAAA;AAAA,MAC3B,QAAA;AAAA,MACA,WAAA;AAAA,MACA,EAAE,cAAA;AAAe,KACnB;AAEA,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA,EAAY,IAAA,CAAK,iBAAA,CAAkB,QAAA,EAAU,aAAa,oBAAoB;AAAA,KAChF;AAAA,EACF;AAAA,EAEQ,eAAA,GAAuC;AAC7C,IAAA,OAAO;AAAA,MACL;AAAA,QACE,QAAA,EAAU,SAAA;AAAA,QACV,OAAA,EAAS,CAAC,IAAA,EAAM,IAAA,KAAS;AACvB,UAAA,MAAM,OAAA,GAAU,MAAM,OAAA,EAAQ;AAC9B,UAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,EAAM;AACrB,YAAA,OAAO,MAAA;AAAA,UACT;AACA,UAAA,IAAI;AACF,YAAA,OAAO,iBAAA,CAAkB,mBAAA,CAAoB,IAAA,EAAM,IAAA,CAAK,EAAA,IAAM,OAAA,EAAS,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,UAC1F,CAAA,CAAA,MAAQ;AACN,YAAA,OAAO,MAAA;AAAA,UACT;AAAA,QACF,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,IAAA,EAAM,EAAA,KAAO,IAAA,KAAS;AAAA,OAClC;AAAA,MACA;AAAA,QACE,QAAA,EAAU,SAAA;AAAA,QACV,OAAA,EAAS,CAAC,IAAA,KAAS;AACjB,UAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,EAAa;AACjC,UAAA,OAAO,kBAAA,CAAmB,KAAK,CAAA,GAAI,KAAA,GAA4B,MAAA;AAAA,QACjE;AAAA,OACF;AAAA,MACA;AAAA,QACE,QAAA,EAAU,aAAA;AAAA,QACV,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,EAAM,UAAS,CAAE;AAAA,OACtC;AAAA,MACA;AAAA,QACE,QAAA,EAAU,YAAA;AAAA,QACV,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,EAAM,UAAS,CAAE;AAAA,OACtC;AAAA,MACA;AAAA,QACE,QAAA,EAAU,YAAA;AAAA,QACV,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,EAAM,UAAA;AAAW,OACtC;AAAA,MACA;AAAA,QACE,QAAA,EAAU,kBAAA;AAAA,QACV,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,EAAM,gBAAA;AAAiB,OAC5C;AAAA,MACA;AAAA,QACE,QAAA,EAAU,KAAA;AAAA,QACV,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,EAAM,GAAA;AAAI,OAC/B;AAAA,MACA;AAAA,QACE,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,EAAM,UAAS,CAAE;AAAA;AACtC,KACF;AAAA,EACF;AAAA,EAEQ,sBAAA,CACN,QAAA,EACA,WAAA,EACA,OAAA,EACkB;AAClB,IAAA,MAAM,UAAU,OAAA,EAAS,cAAA;AACzB,IAAA,MAAM,SAA2B,EAAC;AAElC,IAAA,KAAA,MAAW,SAAA,IAAa,KAAK,UAAA,EAAY;AACvC,MAAA,IAAI,OAAA,EAAS,QAAA,CAAS,SAAA,CAAU,QAAQ,CAAA,EAAG;AACzC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAA,CAAQ,QAAA,EAAU,KAAK,QAAQ,CAAA;AACtD,MAAA,MAAM,EAAA,GAAK,SAAA,CAAU,OAAA,CAAQ,WAAA,EAAa,KAAK,WAAW,CAAA;AAE1D,MAAA,MAAM,QAAA,GAAW,UAAU,OAAA,GACvB,SAAA,CAAU,QAAQ,IAAA,EAAM,EAAE,IAC1B,IAAA,KAAS,EAAA;AAEb,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAA,CAAO,KAAK,EAAE,QAAA,EAAU,UAAU,QAAA,EAAU,IAAA,EAAM,IAAI,CAAA;AAAA,MACxD;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,0BAA0B,IAAA,EAAoC;AACpE,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,sBAAA,CAAuB,IAAA,EAAM,IAAI,CAAA;AACzD,IAAA,OAAO,WAAW,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,OAAO,MAAS,CAAA;AAAA,EAC9D;AAAA,EAEQ,iBAAA,CACN,QAAA,EACA,WAAA,EACA,WAAA,EAC2B;AAC3B,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,WAAA,EAAa;AAC7B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA;AAC1C,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,WAAW,CAAA;AAEhD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,YAAA,GAAe,SAAS,QAAA,EAAS;AACvC,MAAA,MAAM,eAAA,GAAkB,YAAY,QAAA,EAAS;AAC7C,MAAA,IAAI,iBAAiB,eAAA,EAAiB;AACpC,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,MAAA,OAAO,EAAE,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,WAAA,EAAY;AAAA,IACnD;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,YAAY,IAAA,EAA0B;AAC5C,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,EAAM;AACzB,MAAA,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,WAAA,CAAY,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,KAAK,QAAA,EAAS;AAAA,EACvB;AAAA,EAEQ,qBAAqB,WAAA,EAA6B;AACxD,IAAA,IAAI;AACF,MAAA,OAAO,iBAAA,CAAkB,WAAW,CAAA,CAAE,QAAA,EAAS;AAAA,IACjD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,YAAA,CAAa,aAAqB,SAAA,EAA4B;AACpE,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,WAAW,CAAA,CAAE,MAAA,EAAO;AACzD,MAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,SAAS,CAAA,CAAE,MAAA,EAAO;AACrD,MAAA,OAAO,UAAA,CAAW,OAAO,QAAQ,CAAA;AAAA,IACnC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,sBAAA,CACN,aACA,SAAA,EACS;AACT,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,kBAAkB,WAAW,CAAA;AAC9C,MAAA,MAAM,MAAA,GAAS,kBAAkB,SAAS,CAAA;AAC1C,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA;AACpD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAChD,MAAA,OAAO,YAAA,GAAe,cAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,gBAAgB,IAAA,EAAoB;AAC1C,IAAA,OAAO,IAAA,CAAK,UAAS,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,EAAS,CAAA,CAAE,MAAA;AAAA,EACxD;AAAA,EAEQ,aAAA,CACN,MACA,WAAA,EACmB;AACnB,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,kBAAkB,WAAW,CAAA;AAC1C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAC7B,MAAA,OAAO,IAAA,CAAK,MAAA,EAAO,GAAI,IAAA,GAAO,IAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACF;;;ACrQO,IAAM,eAAN,MAAmB;AAAA,EACxB,KAAA,CAAM,aAAyB,QAAA,EAAqC;AAClE,IAAA,MAAM,KAAA,GAAQ,IAAI,aAAA,CAAc,QAAQ,CAAA;AACxC,IAAA,IAAA,CAAK,gBAAA,CAAiB,aAAa,KAAK,CAAA;AAExC,IAAA,MAAM,UAAA,GAAa,cAAA,CAAe,QAAA,EAAU,WAAA,EAAa,KAAK,CAAA;AAC9D,IAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,UAAA,EAAY,WAAA,EAAa,KAAK,CAAA;AAEhE,IAAA,MAAM,SAAA,GAAY,IAAI,cAAA,CAAe,WAAA,EAAa,QAAQ,CAAA;AAC1D,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA;AAE5C,IAAA,MAAM,QAAA,GAAW,IAAI,aAAA,CAAc,WAAA,EAAa,QAAQ,CAAA;AACxD,IAAA,OAAO,QAAQ,GAAA,CAAI,CAAC,UAAU,QAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACtD;AAAA,EAEQ,gBAAA,CAAiB,MAAkB,KAAA,EAA4B;AACrE,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,IAAA,CAAK,cAAa,EAAG;AAChD,MAAA,KAAA,CAAM,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAAA,IACrC;AAAA,EACF;AACF;;;AC5BO,IAAM,oBAAN,MAAwB;AAAA,EACZ,UAAA,uBAAiB,GAAA,EAAgC;AAAA,EACjD,QAAyB,EAAC;AAAA,EAE3C,QAAA,CAAS,MAAc,OAAA,EAAmC;AACxD,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAQ,IAAA,EAA2B;AACjC,IAAA,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAI,IAAA,EAAqC;AACvC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,OAAO,OAAA,GAAU,SAAQ,GAAI,MAAA;AAAA,EAC/B;AAAA,EAEA,IAAI,IAAA,EAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AAAA,EACjC;AAAA,EAEA,QAAA,GAAqC;AACnC,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,iBAAA,GAA8B;AAC5B,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AAAA,EAC1C;AACF;;;AC7BO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,QAAA,EAA6B;AAA7B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAA8B;AAAA,EAE3D,QAAQ,OAAA,EAAyC;AAC/C,IAAA,MAAM,aAA0B,EAAC;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,QAAA,EAAS;AAErC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,OAAO,CAAA,EAAG;AAC7B,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,aAAa,CAAA;AACtD,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AACF;;;AClBO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAA6B,QAAA,EAA6B;AAA7B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAA8B;AAAA,EAE3D,SAAS,OAAA,EAAmD;AAC1D,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA;AAChD,IAAA,MAAM,cAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,MAAM,UAAA,GAAa,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA;AAC7C,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,MAC7B;AAAA,IACF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AACF;;;ACjBO,IAAM,qBAAN,MAAkD;AAAA,EACvD,WAAA,CACW,eACQ,YAAA,EACjB;AAFS,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACQ,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAAA,EAChB;AAAA,EAEH,YAAY,OAAA,EAAqC;AAC/C,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA;AAC9C,IAAA,OAAO,KAAA,KAAU,UAAa,KAAA,KAAU,IAAA;AAAA,EAC1C;AACF;AAEO,IAAM,mBAAN,MAAgD;AAAA,EACrD,WAAA,CACW,eACQ,YAAA,EACjB;AAFS,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACQ,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAAA,EAChB;AAAA,EAEH,YAAY,OAAA,EAAqC;AAC/C,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,KAAM,IAAA;AAAA,EAC/C;AACF;AAEO,IAAM,gBAAN,MAA6C;AAAA,EAClD,WAAA,CACW,eACQ,UAAA,EACjB;AAFS,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACQ,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAChB;AAAA,EAEH,YAAY,OAAA,EAAqC;AAC/C,IAAA,OAAO,KAAK,UAAA,CAAW,KAAA,CAAM,CAAC,SAAA,KAAc,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,EAChE;AACF;;;AChCO,IAAM,oBAAN,MAA6C;AAAA,EACzC,IAAA,GAAO,UAAA;AAAA,EAEhB,SAAS,OAAA,EAA+C;AACtD,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,OAAA;AAE5B,IAAA,IAAI,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AACzD,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAA,EAAS,mBAAA;AAAA,QACT,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;ACjBO,IAAM,mBAAN,MAA4C;AAAA,EACxC,IAAA,GAAO,SAAA;AAAA,EAEhB,SAAS,OAAA,EAA+C;AACtD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AACpC,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAEvB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,IAAI,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,QAAA,OAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,OAAA,EAAS,8BAAA;AAAA,UACT,IAAA,EAAM,QAAA;AAAA,UACN,MAAA,EAAQ,EAAE,OAAA;AAAQ,SACpB;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS,iCAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,EAAE,OAAA;AAAQ,OACpB;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;ACzCO,IAAM,qBAAN,MAA8C;AAAA,EAC1C,IAAA,GAAO,WAAA;AAAA,EAEhB,SAAS,OAAA,EAA+C;AACtD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AACpC,IAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AAEzB,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAA,EAAS,0BAA0B,SAAS,CAAA,WAAA,CAAA;AAAA,QAC5C,IAAA,EAAM,QAAA;AAAA,QACN,QAAQ,EAAE,GAAA,EAAK,SAAA,EAAW,MAAA,EAAQ,MAAM,MAAA;AAAO,OACjD;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AC3BO,IAAM,qBAAN,MAA8C;AAAA,EAC1C,IAAA,GAAO,WAAA;AAAA,EAEhB,SAAS,OAAA,EAA+C;AACtD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AACpC,IAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AAEzB,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAA,EAAS,yBAAyB,SAAS,CAAA,WAAA,CAAA;AAAA,QAC3C,IAAA,EAAM,QAAA;AAAA,QACN,QAAQ,EAAE,GAAA,EAAK,SAAA,EAAW,MAAA,EAAQ,MAAM,MAAA;AAAO,OACjD;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AC3BO,IAAM,mBAAN,MAA4C;AAAA,EACxC,IAAA,GAAO,SAAA;AAAA,EAEhB,SAAS,OAAA,EAA+C;AACtD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AACpC,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAEvB,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAA,EAAS,0BAA0B,OAAO,CAAA,CAAA;AAAA,QAC1C,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,EAAE,GAAA,EAAK,OAAA,EAAS,QAAQ,KAAA;AAAM,OACxC;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AC3BO,IAAM,mBAAN,MAA4C;AAAA,EACxC,IAAA,GAAO,SAAA;AAAA,EAEhB,SAAS,OAAA,EAA+C;AACtD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AACpC,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAEvB,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAA,EAAS,yBAAyB,OAAO,CAAA,CAAA;AAAA,QACzC,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,EAAE,GAAA,EAAK,OAAA,EAAS,QAAQ,KAAA;AAAM,OACxC;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AC3BO,IAAM,gBAAN,MAAyC;AAAA,EACrC,IAAA,GAAO,MAAA;AAAA,EAEhB,SAAS,OAAA,EAA+C;AACtD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AACpC,IAAA,MAAM,aAAa,MAAA,CAAO,IAAA;AAE1B,IAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAE,UAAA,CAAkC,QAAA,CAAS,KAAK,CAAA,EAAG;AACvD,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAA,EAAS,yCAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAC,GAAG,UAAU,CAAA,EAAG,QAAQ,KAAA;AAAM,OACpD;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;ACvBO,IAAM,sBAAN,MAA+C;AAAA,EAC3C,IAAA,GAAO,YAAA;AAAA,EAEhB,SAAS,OAAA,EAA+C;AACtD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AACpC,IAAA,MAAM,aAAa,MAAA,CAAO,UAAA;AAE1B,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AACzD,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAA,EAAS,mCAAA;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,EAAE,KAAA,EAAO,UAAA;AAAW,OAC9B;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;ACVO,SAAS,8BAAA,GAAoD;AAClE,EAAA,MAAM,QAAA,GAAW,IAAI,iBAAA,EAAkB;AAEvC,EAAA,QAAA,CACG,QAAA,CAAS,UAAA,EAAY,MAAM,IAAI,iBAAA,EAAmB,CAAA,CAClD,QAAA,CAAS,SAAA,EAAW,MAAM,IAAI,gBAAA,EAAkB,CAAA,CAChD,QAAA,CAAS,WAAA,EAAa,MAAM,IAAI,kBAAA,EAAoB,CAAA,CACpD,QAAA,CAAS,WAAA,EAAa,MAAM,IAAI,kBAAA,EAAoB,EACpD,QAAA,CAAS,SAAA,EAAW,MAAM,IAAI,gBAAA,EAAkB,EAChD,QAAA,CAAS,SAAA,EAAW,MAAM,IAAI,gBAAA,EAAkB,EAChD,QAAA,CAAS,MAAA,EAAQ,MAAM,IAAI,aAAA,EAAe,CAAA,CAC1C,QAAA,CAAS,YAAA,EAAc,MAAM,IAAI,mBAAA,EAAqB,CAAA;AAEzD,EAAA,QAAA,CACG,OAAA,CAAQ,IAAI,gBAAA,CAAiB,UAAA,EAAY,UAAU,CAAC,CAAA,CACpD,OAAA,CAAQ,IAAI,kBAAA,CAAmB,SAAA,EAAW,SAAS,CAAC,CAAA,CACpD,OAAA,CAAQ,IAAI,kBAAA,CAAmB,WAAA,EAAa,WAAW,CAAC,CAAA,CACxD,OAAA,CAAQ,IAAI,kBAAA,CAAmB,WAAA,EAAa,WAAW,CAAC,EACxD,OAAA,CAAQ,IAAI,kBAAA,CAAmB,SAAA,EAAW,SAAS,CAAC,EACpD,OAAA,CAAQ,IAAI,kBAAA,CAAmB,SAAA,EAAW,SAAS,CAAC,EACpD,OAAA,CAAQ,IAAI,kBAAA,CAAmB,MAAA,EAAQ,MAAM,CAAC,CAAA,CAC9C,OAAA,CAAQ,IAAI,kBAAA,CAAmB,YAAA,EAAc,YAAY,CAAC,CAAA;AAE7D,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,uBACd,QAAA,EACkB;AAClB,EAAA,MAAM,iBAAA,GAAoB,YAAY,8BAAA,EAA+B;AACrE,EAAA,MAAM,QAAA,GAAW,IAAI,iBAAA,CAAkB,iBAAiB,CAAA;AACxD,EAAA,OAAO,IAAI,iBAAiB,QAAQ,CAAA;AACtC;;;AC/CA,IAAM,kBAAA,GAAqB,iCAAA;AAC3B,IAAM,qBAAA,GAAwB,EAAA;AAEvB,IAAM,wBAAA,GACX;AAEK,SAAS,iBAAiB,IAAA,EAAuB;AACtD,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,SAAS,qBAAA,EAAuB;AAC5D,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,kBAAA,CAAmB,KAAK,IAAI,CAAA;AACrC;;;ACPO,SAAS,eAAe,IAAA,EAA2C;AACxE,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,uBAAA,CAAwB,MAAM,MAAM,CAAA;AACpC,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,uBAAA,CACP,MACA,MAAA,EACM;AACN,EAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,EAAW;AACnC,EAAA,IAAI,eAAe,EAAA,EAAI;AACrB,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,WAAA,CAAY,IAAA,CAAK,EAAA,EAAG,EAAG,qBAAqB,6CAA6C;AAAA,KAC3F;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,UAAS,EAAG;AACnB,IAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AACjC,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAEhC,IAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,EAAK;AAE7B,MAAA,IAAI,cAAc,EAAA,EAAI;AACpB,QAAA,MAAA,CAAO,KAAK,WAAA,CAAY,KAAA,CAAM,IAAG,EAAG,YAAA,EAAc,4BAA4B,CAAC,CAAA;AAAA,MACjF,CAAA,MAAA,IAAW,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,EAAG;AACjC,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,YAAY,KAAA,CAAM,EAAA,IAAM,gBAAA,EAAkB,CAAA,sBAAA,EAAyB,SAAS,CAAA,CAAE;AAAA,SAChF;AAAA,MACF,CAAA,MAAA,IAAW,CAAC,gBAAA,CAAiB,SAAS,CAAA,EAAG;AACvC,QAAA,MAAA,CAAO,KAAK,WAAA,CAAY,KAAA,CAAM,IAAG,EAAG,cAAA,EAAgB,wBAAwB,CAAC,CAAA;AAAA,MAC/E;AAEA,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,uBAAA,CAAwB,OAAO,MAAM,CAAA;AAAA,IACvC;AAAA,EACF,CAAA,MAAA,IAAW,IAAA,CAAK,OAAA,EAAQ,EAAG;AACzB,IAAA,uBAAA,CAAwB,IAAA,CAAK,KAAA,EAAM,EAAG,MAAM,CAAA;AAAA,EAC9C;AACF;AAEA,SAAS,WAAA,CACP,MAAA,EACA,IAAA,EACA,OAAA,EACuB;AACvB,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAQ;AACjC;AClDO,SAAS,iBAAiB,IAAA,EAAgD;AAC/E,EAAA,MAAM,SAAuC,EAAC;AAC9C,EAAA,oBAAA,CAAqB,IAAA,CAAK,IAAA,EAAK,EAAG,IAAA,EAAM,QAAQ,EAAE,CAAA;AAClD,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,oBAAA,CACP,IAAA,EACA,IAAA,EACA,MAAA,EACA,SAAA,EACM;AACN,EAAA,mBAAA,CAAoB,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AACjD,EAAA,kBAAA,CAAmB,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAClD;AAEA,SAAS,mBAAA,CACP,IAAA,EACA,IAAA,EACA,MAAA,EACA,SAAA,EACM;AACN,EAAA,IAAI,CAAC,IAAA,CAAK,WAAA,MAAiB,CAAC,IAAA,CAAK,YAAW,EAAG;AAC7C,IAAA;AAAA,EACF;AAEA,EAAA,MAAMC,SAAA,GAAU,KAAK,OAAA,EAAQ;AAC7B,EAAA,IAAI,CAACA,SAAA,EAAS;AACZ,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,GAAA,IAAOA,SAAA,CAAQ,YAAA,EAAa,EAAG;AACxC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,cAAc,CAAA;AACnD,IAAA,IAAI,UAAA,CAAW,QAAO,EAAG;AACvB,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,MAAA,EAAQ,KAAK,EAAA,EAAG;AAAA,QAChB,OAAA,EAAS,0DAAA;AAAA,QACT,SAAA,EAAW,SAAA,IAAa,IAAA,CAAK,IAAA;AAAK,OACnC,CAAA;AACD,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,aAAa,iBAAA,CAAkB,mBAAA;AAAA,MACnC,IAAA;AAAA,MACA,KAAK,EAAA,EAAG;AAAA,MACRA,SAAA;AAAA,MACA,EAAE,QAAQ,KAAA;AAAM,KAClB;AACA,IAAA,MAAM,MAAA,GAASC,8BAAsB,UAAU,CAAA;AAC/C,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,MAAA,EAAQ,KAAK,EAAA,EAAG;AAAA,QAChB,OAAA,EAAS,CAAA,iBAAA,EAAoB,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA,QACzC,SAAA,EAAW,SAAA,IAAa,IAAA,CAAK,IAAA;AAAK,OACnC,CAAA;AAAA,IACH;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,MAAA,EAAQ,KAAK,EAAA,EAAG;AAAA,MAChB,OAAA,EAAS,4BAAA;AAAA,MACT,SAAA,EAAW,SAAA,IAAa,IAAA,CAAK,IAAA;AAAK,KACnC,CAAA;AAAA,EACH;AACF;AAEA,SAAS,kBAAA,CACP,IAAA,EACA,IAAA,EACA,MAAA,EACA,SAAA,EACM;AACN,EAAA,IAAI,IAAA,CAAK,UAAS,EAAG;AACnB,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,UAAA,EAAW,EAAG;AACrC,MAAA,MAAM,SAAA,GAAY,cAAA,CAAe,SAAA,EAAW,KAAA,CAAM,MAAM,CAAA;AACxD,MAAA,oBAAA,CAAqB,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,IACrD;AAAA,EACF,CAAA,MAAA,IAAW,IAAA,CAAK,OAAA,EAAQ,EAAG;AACzB,IAAA,MAAM,SAAA,GAAY,oBAAoB,SAAS,CAAA;AAC/C,IAAA,oBAAA,CAAqB,IAAA,CAAK,KAAA,EAAM,EAAG,IAAA,EAAM,QAAQ,SAAS,CAAA;AAAA,EAC5D;AACF;AAEA,SAAS,cAAA,CAAe,YAAoB,SAAA,EAA2B;AACrE,EAAA,OAAO,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,SAAA;AACrD;AAEA,SAAS,oBAAoB,UAAA,EAA4B;AACvD,EAAA,OAAO,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,GAAA,CAAA,GAAQ,KAAA;AAC3C","file":"chunk-46ME2TAU.cjs","sourcesContent":["import type { Formula as ParsedFormula } from '../schema-formula/core/Formula.js';\n\nexport type NodeType =\n | 'object'\n | 'array'\n | 'string'\n | 'number'\n | 'boolean'\n | 'ref'\n | 'null';\n\nexport interface NodeMetadata {\n readonly title?: string;\n readonly description?: string;\n readonly deprecated?: boolean;\n}\n\nexport const EMPTY_METADATA: NodeMetadata = Object.freeze({});\n\nexport type Formula = ParsedFormula;\n\nexport interface SchemaNode {\n id(): string;\n name(): string;\n nodeType(): NodeType;\n metadata(): NodeMetadata;\n\n isObject(): boolean;\n isArray(): boolean;\n isPrimitive(): boolean;\n isRef(): boolean;\n isNull(): boolean;\n\n property(name: string): SchemaNode;\n properties(): readonly SchemaNode[];\n items(): SchemaNode;\n\n ref(): string | undefined;\n formula(): Formula | undefined;\n hasFormula(): boolean;\n defaultValue(): unknown;\n foreignKey(): string | undefined;\n contentMediaType(): string | undefined;\n\n clone(): SchemaNode;\n cloneWithId(newId: string): SchemaNode;\n\n setName(name: string): void;\n setMetadata(metadata: NodeMetadata): void;\n addChild(node: SchemaNode): void;\n insertChild(index: number, node: SchemaNode): void;\n removeChild(name: string): boolean;\n replaceChild(name: string, node: SchemaNode): boolean;\n setItems(node: SchemaNode): void;\n setDefaultValue(value: unknown): void;\n setFormula(formula: Formula | undefined): void;\n setForeignKey(key: string | undefined): void;\n setContentMediaType(mediaType: string | undefined): void;\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\n\nclass NullNodeImpl implements SchemaNode {\n id(): string {\n return '';\n }\n\n name(): string {\n return '';\n }\n\n nodeType(): NodeType {\n return 'null';\n }\n\n metadata(): NodeMetadata {\n return EMPTY_METADATA;\n }\n\n isObject(): boolean {\n return false;\n }\n\n isArray(): boolean {\n return false;\n }\n\n isPrimitive(): boolean {\n return false;\n }\n\n isRef(): boolean {\n return false;\n }\n\n isNull(): boolean {\n return true;\n }\n\n property(): SchemaNode {\n return this;\n }\n\n properties(): readonly SchemaNode[] {\n return [];\n }\n\n items(): SchemaNode {\n return this;\n }\n\n ref(): string | undefined {\n return undefined;\n }\n\n formula(): Formula | undefined {\n return undefined;\n }\n\n hasFormula(): boolean {\n return false;\n }\n\n defaultValue(): unknown {\n return undefined;\n }\n\n foreignKey(): string | undefined {\n return undefined;\n }\n\n clone(): SchemaNode {\n return this;\n }\n\n cloneWithId(_newId: string): SchemaNode {\n return this;\n }\n\n setName(_name: string): void {\n // No-op for null\n }\n\n setMetadata(_metadata: NodeMetadata): void {\n // No-op for null\n }\n\n addChild(_node: SchemaNode): void {\n // No-op for null\n }\n\n insertChild(_index: number, _node: SchemaNode): void {\n // No-op for null\n }\n\n removeChild(_name: string): boolean {\n return false;\n }\n\n replaceChild(_name: string, _node: SchemaNode): boolean {\n return false;\n }\n\n setItems(_node: SchemaNode): void {\n // No-op for null\n }\n\n setDefaultValue(_value: unknown): void {\n // No-op for null\n }\n\n setFormula(_formula: Formula | undefined): void {\n // No-op for null\n }\n\n setForeignKey(_key: string | undefined): void {\n // No-op for null\n }\n\n contentMediaType(): string | undefined {\n return undefined;\n }\n\n setContentMediaType(_mediaType: string | undefined): void {\n // No-op for null\n }\n}\n\nexport const NULL_NODE: SchemaNode = new NullNodeImpl();\n","// Reactivity provider - allows switching between MobX and noop implementations\n\nexport interface ObservableFactory {\n map<K, V>(): Map<K, V>;\n array<T>(): T[];\n}\n\nexport interface ReactivityProvider {\n makeObservable<T extends object>(\n target: T,\n annotations: Record<string, unknown>,\n ): T;\n makeAutoObservable<T extends object>(\n target: T,\n overrides?: Record<string, unknown>,\n ): T;\n isObservable(target: object): boolean;\n observable: ObservableFactory;\n runInAction<T>(fn: () => T): T;\n reaction<T>(\n expression: () => T,\n effect: (value: T) => void,\n ): () => void;\n}\n\n// Noop implementation - default for backend\nconst noopProvider: ReactivityProvider = {\n makeObservable: <T extends object>(target: T) => target,\n makeAutoObservable: <T extends object>(target: T) => target,\n isObservable: () => false,\n observable: {\n map: <K, V>() => new Map<K, V>(),\n array: <T>() => [] as T[],\n },\n runInAction: <T>(fn: () => T) => fn(),\n reaction: () => () => {},\n};\n\nlet currentProvider: ReactivityProvider = noopProvider;\n\nexport function setReactivityProvider(provider: ReactivityProvider): void {\n currentProvider = provider;\n}\n\nexport function getReactivityProvider(): ReactivityProvider {\n return currentProvider;\n}\n\nexport function resetReactivityProvider(): void {\n currentProvider = noopProvider;\n}\n","// MobX-compatible API that delegates to the current provider\n\nimport { getReactivityProvider } from './provider.js';\n\nexport function makeObservable<T extends object>(\n target: T,\n annotations: Record<string, unknown>,\n): T {\n return getReactivityProvider().makeObservable(target, annotations);\n}\n\nexport function makeAutoObservable<T extends object>(\n target: T,\n overrides?: Record<string, unknown>,\n): T {\n return getReactivityProvider().makeAutoObservable(target, overrides ?? {});\n}\n\nexport function isObservable(target: object): boolean {\n return getReactivityProvider().isObservable(target);\n}\n\nexport const observable = {\n map<K, V>(): Map<K, V> {\n return getReactivityProvider().observable.map<K, V>();\n },\n array<T>(): T[] {\n return getReactivityProvider().observable.array<T>();\n },\n};\n\nexport function runInAction<T>(fn: () => T): T {\n return getReactivityProvider().runInAction(fn);\n}\n\nexport function reaction<T>(\n expression: () => T,\n effect: (value: T) => void,\n): () => void {\n return getReactivityProvider().reaction(expression, effect);\n}\n","// MobX provider factory - creates ReactivityProvider from MobX instance\n// This file is used by consumers to configure real MobX reactivity\n\nimport type { ReactivityProvider } from './provider.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFunction = (...args: any[]) => any;\n\ninterface MobXObservable {\n map<K, V>(): Map<K, V>;\n array<T>(): T[];\n ref: unknown;\n shallow: unknown;\n}\n\ninterface MobXModule {\n makeObservable: AnyFunction;\n makeAutoObservable: AnyFunction;\n isObservable: (target: object) => boolean;\n observable: MobXObservable;\n action: unknown;\n computed: unknown;\n runInAction: <T>(fn: () => T) => T;\n reaction: <T>(\n expression: () => T,\n effect: (value: T) => void,\n ) => () => void;\n}\n\nfunction convertAnnotations(\n mobx: MobXModule,\n annotations: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(annotations)) {\n if (typeof value === 'string') {\n switch (value) {\n case 'observable':\n result[key] = mobx.observable;\n break;\n case 'observable.ref':\n result[key] = mobx.observable.ref;\n break;\n case 'observable.shallow':\n result[key] = mobx.observable.shallow;\n break;\n case 'action':\n result[key] = mobx.action;\n break;\n case 'computed':\n result[key] = mobx.computed;\n break;\n default:\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function createMobxProvider(mobx: MobXModule): ReactivityProvider {\n return {\n makeObservable: <T extends object>(\n target: T,\n annotations: Record<string, unknown>,\n ) => mobx.makeObservable(target, convertAnnotations(mobx, annotations)),\n makeAutoObservable: <T extends object>(\n target: T,\n overrides?: Record<string, unknown>,\n ) => mobx.makeAutoObservable(target, overrides ? convertAnnotations(mobx, overrides) : {}),\n isObservable: mobx.isObservable,\n observable: {\n map: <K, V>() => mobx.observable.map<K, V>(),\n array: <T>() => mobx.observable.array<T>(),\n },\n runInAction: mobx.runInAction,\n reaction: mobx.reaction,\n };\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { NULL_NODE } from './NullNode.js';\nimport { makeObservable } from '../reactivity/index.js';\n\nexport abstract class BaseNode implements SchemaNode {\n protected _name: string;\n protected _metadata: NodeMetadata;\n protected _ref: string | undefined;\n\n constructor(\n private readonly _id: string,\n name: string,\n metadata: NodeMetadata = EMPTY_METADATA,\n ref?: string,\n ) {\n this._name = name;\n this._metadata = metadata;\n this._ref = ref;\n }\n\n protected initBaseObservable(): void {\n makeObservable(this, {\n _name: 'observable',\n _metadata: 'observable.ref',\n setName: 'action',\n setMetadata: 'action',\n });\n }\n\n id(): string {\n return this._id;\n }\n\n name(): string {\n return this._name;\n }\n\n abstract nodeType(): NodeType;\n\n metadata(): NodeMetadata {\n return this._metadata;\n }\n\n isObject(): boolean {\n return false;\n }\n\n isArray(): boolean {\n return false;\n }\n\n isPrimitive(): boolean {\n return false;\n }\n\n isRef(): boolean {\n return this._ref !== undefined;\n }\n\n isNull(): boolean {\n return false;\n }\n\n property(_name: string): SchemaNode {\n return NULL_NODE;\n }\n\n properties(): readonly SchemaNode[] {\n return [];\n }\n\n items(): SchemaNode {\n return NULL_NODE;\n }\n\n ref(): string | undefined {\n return this._ref;\n }\n\n formula(): Formula | undefined {\n return undefined;\n }\n\n hasFormula(): boolean {\n return false;\n }\n\n defaultValue(): unknown {\n return undefined;\n }\n\n foreignKey(): string | undefined {\n return undefined;\n }\n\n contentMediaType(): string | undefined {\n return undefined;\n }\n\n abstract clone(): SchemaNode;\n abstract cloneWithId(newId: string): SchemaNode;\n\n setName(name: string): void {\n this._name = name;\n }\n\n setMetadata(metadata: NodeMetadata): void {\n this._metadata = metadata;\n }\n\n addChild(_node: SchemaNode): void {\n // No-op by default\n }\n\n insertChild(_index: number, _node: SchemaNode): void {\n // No-op by default\n }\n\n removeChild(_name: string): boolean {\n return false;\n }\n\n replaceChild(_name: string, _node: SchemaNode): boolean {\n return false;\n }\n\n setItems(_node: SchemaNode): void {\n // No-op by default\n }\n\n setDefaultValue(_value: unknown): void {\n // No-op by default\n }\n\n setFormula(_formula: Formula | undefined): void {\n // No-op by default\n }\n\n setForeignKey(_key: string | undefined): void {\n // No-op by default\n }\n\n setContentMediaType(_mediaType: string | undefined): void {\n // No-op by default\n }\n}\n","import type { NodeMetadata } from './types.js';\n\nexport interface NodeOptionsWithMetadata {\n metadata?: NodeMetadata;\n ref?: string;\n}\n\nexport function isNodeMetadata(\n value: NodeOptionsWithMetadata | NodeMetadata,\n): value is NodeMetadata {\n if ('ref' in value || 'metadata' in value) {\n return false;\n }\n return 'title' in value || 'description' in value || 'deprecated' in value;\n}\n\nexport function normalizeNodeOptions<T extends NodeOptionsWithMetadata>(\n options: T | NodeMetadata,\n): T {\n if (isNodeMetadata(options)) {\n return { metadata: options } as T;\n }\n return options;\n}\n","import type { SchemaNode, NodeType, NodeMetadata } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { BaseNode } from './BaseNode.js';\nimport { NULL_NODE } from './NullNode.js';\nimport { makeObservable } from '../reactivity/index.js';\nimport { normalizeNodeOptions } from './utils.js';\n\nexport interface ObjectNodeOptions {\n metadata?: NodeMetadata;\n ref?: string;\n}\n\nexport class ObjectNode extends BaseNode {\n private _children: SchemaNode[];\n\n constructor(\n id: string,\n name: string,\n children: readonly SchemaNode[] = [],\n optionsOrMetadata: ObjectNodeOptions | NodeMetadata = {},\n ) {\n const options = normalizeNodeOptions(optionsOrMetadata);\n super(id, name, options.metadata ?? EMPTY_METADATA, options.ref);\n this._children = [...children];\n this.initBaseObservable();\n makeObservable(this, {\n _children: 'observable.shallow',\n addChild: 'action',\n insertChild: 'action',\n removeChild: 'action',\n replaceChild: 'action',\n });\n }\n\n nodeType(): NodeType {\n return 'object';\n }\n\n isObject(): boolean {\n return true;\n }\n\n property(name: string): SchemaNode {\n return this._children.find((child) => child.name() === name) ?? NULL_NODE;\n }\n\n properties(): readonly SchemaNode[] {\n return this._children;\n }\n\n clone(): SchemaNode {\n return new ObjectNode(\n this.id(),\n this.name(),\n this._children.map((child) => child.clone()),\n { metadata: this.metadata(), ref: this._ref },\n );\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new ObjectNode(\n newId,\n this.name(),\n this._children.map((child) => child.clone()),\n { metadata: this.metadata(), ref: this._ref },\n );\n }\n\n addChild(node: SchemaNode): void {\n this._children.push(node);\n }\n\n insertChild(index: number, node: SchemaNode): void {\n if (index < 0 || index > this._children.length) {\n throw new Error(`Index out of bounds: ${index}`);\n }\n this._children.splice(index, 0, node);\n }\n\n removeChild(name: string): boolean {\n const index = this._children.findIndex((child) => child.name() === name);\n if (index === -1) {\n return false;\n }\n this._children.splice(index, 1);\n return true;\n }\n\n replaceChild(name: string, node: SchemaNode): boolean {\n const index = this._children.findIndex((child) => child.name() === name);\n if (index === -1) {\n return false;\n }\n this._children[index] = node;\n return true;\n }\n}\n\nexport function createObjectNode(\n id: string,\n name: string,\n children: readonly SchemaNode[] = [],\n options: ObjectNodeOptions | NodeMetadata = {},\n): SchemaNode {\n return new ObjectNode(id, name, children, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { BaseNode } from './BaseNode.js';\nimport { makeObservable } from '../reactivity/index.js';\nimport { normalizeNodeOptions } from './utils.js';\n\nexport interface ArrayNodeOptions {\n metadata?: NodeMetadata;\n ref?: string;\n}\n\nexport class ArrayNode extends BaseNode {\n private _items: SchemaNode;\n\n constructor(\n id: string,\n name: string,\n items: SchemaNode,\n optionsOrMetadata: ArrayNodeOptions | NodeMetadata = {},\n ) {\n const options = normalizeNodeOptions(optionsOrMetadata);\n super(id, name, options.metadata ?? EMPTY_METADATA, options.ref);\n this._items = items;\n this.initBaseObservable();\n makeObservable(this, {\n _items: 'observable.ref',\n setItems: 'action',\n });\n }\n\n nodeType(): NodeType {\n return 'array';\n }\n\n isArray(): boolean {\n return true;\n }\n\n properties(): readonly SchemaNode[] {\n return [this._items];\n }\n\n items(): SchemaNode {\n return this._items;\n }\n\n clone(): SchemaNode {\n return new ArrayNode(this.id(), this.name(), this._items.clone(), {\n metadata: this.metadata(),\n ref: this._ref,\n });\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new ArrayNode(newId, this.name(), this._items.clone(), {\n metadata: this.metadata(),\n ref: this._ref,\n });\n }\n\n setItems(node: SchemaNode): void {\n this._items = node;\n }\n}\n\nexport function createArrayNode(\n id: string,\n name: string,\n items: SchemaNode,\n options: ArrayNodeOptions | NodeMetadata = {},\n): SchemaNode {\n return new ArrayNode(id, name, items, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { BaseNode } from './BaseNode.js';\nimport { makeObservable } from '../reactivity/index.js';\n\nexport interface PrimitiveNodeOptions {\n readonly defaultValue?: unknown;\n readonly foreignKey?: string;\n readonly formula?: Formula;\n readonly metadata?: NodeMetadata;\n readonly ref?: string;\n}\n\nexport abstract class PrimitiveNode extends BaseNode {\n protected _defaultValue: unknown;\n protected _foreignKey: string | undefined;\n protected _formula: Formula | undefined;\n\n constructor(\n id: string,\n name: string,\n options: PrimitiveNodeOptions = {},\n ) {\n super(id, name, options.metadata ?? EMPTY_METADATA, options.ref);\n this._defaultValue = options.defaultValue;\n this._foreignKey = options.foreignKey;\n this._formula = options.formula;\n }\n\n protected initPrimitiveObservable(): void {\n makeObservable(this, {\n _name: 'observable',\n _metadata: 'observable.ref',\n _formula: 'observable.ref',\n _defaultValue: 'observable',\n _foreignKey: 'observable',\n setName: 'action',\n setMetadata: 'action',\n setFormula: 'action',\n setDefaultValue: 'action',\n setForeignKey: 'action',\n });\n }\n\n abstract nodeType(): NodeType;\n\n isPrimitive(): boolean {\n return true;\n }\n\n formula(): Formula | undefined {\n return this._formula;\n }\n\n hasFormula(): boolean {\n return this._formula !== undefined;\n }\n\n defaultValue(): unknown {\n return this._defaultValue;\n }\n\n foreignKey(): string | undefined {\n return this._foreignKey;\n }\n\n abstract clone(): SchemaNode;\n\n setDefaultValue(value: unknown): void {\n this._defaultValue = value;\n }\n\n setFormula(formula: Formula | undefined): void {\n this._formula = formula;\n }\n\n setForeignKey(key: string | undefined): void {\n this._foreignKey = key;\n }\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport type { ContentMediaType } from '../../types/index.js';\nimport { PrimitiveNode } from './PrimitiveNode.js';\nimport { makeObservable } from '../reactivity/index.js';\n\nexport interface StringNodeOptions {\n readonly defaultValue?: string;\n readonly foreignKey?: string;\n readonly formula?: Formula;\n readonly metadata?: NodeMetadata;\n readonly contentMediaType?: ContentMediaType;\n readonly ref?: string;\n}\n\nexport class StringNode extends PrimitiveNode {\n private _contentMediaType: ContentMediaType | undefined;\n\n constructor(\n id: string,\n name: string,\n options: StringNodeOptions = {},\n ) {\n super(id, name, options);\n this._contentMediaType = options.contentMediaType;\n this.initPrimitiveObservable();\n makeObservable(this, {\n _contentMediaType: 'observable',\n setContentMediaType: 'action',\n });\n }\n\n nodeType(): NodeType {\n return 'string';\n }\n\n contentMediaType(): ContentMediaType | undefined {\n return this._contentMediaType;\n }\n\n setContentMediaType(mediaType: ContentMediaType | undefined): void {\n this._contentMediaType = mediaType;\n }\n\n clone(): SchemaNode {\n return new StringNode(this.id(), this.name(), this.cloneOptions());\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new StringNode(newId, this.name(), this.cloneOptions());\n }\n\n private cloneOptions(): StringNodeOptions {\n return {\n defaultValue: this._defaultValue as string | undefined,\n foreignKey: this._foreignKey,\n formula: this._formula,\n metadata: this._metadata,\n contentMediaType: this._contentMediaType,\n ref: this._ref,\n };\n }\n}\n\nexport function createStringNode(\n id: string,\n name: string,\n options: StringNodeOptions = {},\n): SchemaNode {\n return new StringNode(id, name, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { PrimitiveNode } from './PrimitiveNode.js';\n\nexport interface NumberNodeOptions {\n readonly defaultValue?: number;\n readonly formula?: Formula;\n readonly metadata?: NodeMetadata;\n readonly ref?: string;\n}\n\nexport class NumberNode extends PrimitiveNode {\n constructor(\n id: string,\n name: string,\n options: NumberNodeOptions = {},\n ) {\n super(id, name, options);\n this.initPrimitiveObservable();\n }\n\n nodeType(): NodeType {\n return 'number';\n }\n\n clone(): SchemaNode {\n return new NumberNode(this.id(), this.name(), this.cloneOptions());\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new NumberNode(newId, this.name(), this.cloneOptions());\n }\n\n private cloneOptions(): NumberNodeOptions {\n return {\n defaultValue: this._defaultValue as number | undefined,\n formula: this._formula,\n metadata: this._metadata,\n ref: this._ref,\n };\n }\n}\n\nexport function createNumberNode(\n id: string,\n name: string,\n options: NumberNodeOptions = {},\n): SchemaNode {\n return new NumberNode(id, name, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { PrimitiveNode } from './PrimitiveNode.js';\n\nexport interface BooleanNodeOptions {\n readonly defaultValue?: boolean;\n readonly formula?: Formula;\n readonly metadata?: NodeMetadata;\n readonly ref?: string;\n}\n\nexport class BooleanNode extends PrimitiveNode {\n constructor(\n id: string,\n name: string,\n options: BooleanNodeOptions = {},\n ) {\n super(id, name, options);\n this.initPrimitiveObservable();\n }\n\n nodeType(): NodeType {\n return 'boolean';\n }\n\n clone(): SchemaNode {\n return new BooleanNode(this.id(), this.name(), this.cloneOptions());\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new BooleanNode(newId, this.name(), this.cloneOptions());\n }\n\n private cloneOptions(): BooleanNodeOptions {\n return {\n defaultValue: this._defaultValue as boolean | undefined,\n formula: this._formula,\n metadata: this._metadata,\n ref: this._ref,\n };\n }\n}\n\nexport function createBooleanNode(\n id: string,\n name: string,\n options: BooleanNodeOptions = {},\n): SchemaNode {\n return new BooleanNode(id, name, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { BaseNode } from './BaseNode.js';\n\nexport class RefNode extends BaseNode {\n constructor(\n id: string,\n name: string,\n ref: string,\n metadata: NodeMetadata = EMPTY_METADATA,\n ) {\n super(id, name, metadata, ref);\n if (!ref) {\n throw new Error('RefNode requires a non-empty ref');\n }\n this.initBaseObservable();\n }\n\n nodeType(): NodeType {\n return 'ref';\n }\n\n clone(): SchemaNode {\n const ref = this.ref();\n if (!ref) {\n throw new Error('RefNode must have a ref value');\n }\n return new RefNode(this.id(), this.name(), ref, this.metadata());\n }\n\n cloneWithId(newId: string): SchemaNode {\n const ref = this.ref();\n if (!ref) {\n throw new Error('RefNode must have a ref value');\n }\n return new RefNode(newId, this.name(), ref, this.metadata());\n }\n}\n\nexport function createRefNode(\n id: string,\n name: string,\n ref: string,\n metadata: NodeMetadata = EMPTY_METADATA,\n): SchemaNode {\n return new RefNode(id, name, ref, metadata);\n}\n","import type { PathSegment } from './types.js';\n\nexport class PropertySegment implements PathSegment {\n constructor(private readonly name: string) {}\n\n isProperty(): boolean {\n return true;\n }\n\n isItems(): boolean {\n return false;\n }\n\n propertyName(): string {\n return this.name;\n }\n\n equals(other: PathSegment): boolean {\n return other.isProperty() && other.propertyName() === this.name;\n }\n}\n\nexport class ItemsSegment implements PathSegment {\n isProperty(): boolean {\n return false;\n }\n\n isItems(): boolean {\n return true;\n }\n\n propertyName(): string {\n throw new Error('Items segment has no property name');\n }\n\n equals(other: PathSegment): boolean {\n return other.isItems();\n }\n}\n","import type { BasePath, BasePathSegment } from './types.js';\n\nexport abstract class AbstractBasePath<\n TSegment extends BasePathSegment,\n TSelf extends BasePath<TSegment, TSelf>,\n> implements BasePath<TSegment, TSelf>\n{\n constructor(protected readonly segs: readonly TSegment[]) {}\n\n segments(): readonly TSegment[] {\n return this.segs;\n }\n\n abstract parent(): TSelf;\n\n equals(other: TSelf): boolean {\n const otherSegs = other.segments();\n if (this.segs.length !== otherSegs.length) {\n return false;\n }\n for (let i = 0; i < this.segs.length; i++) {\n const a = this.segs[i];\n const b = otherSegs[i];\n if (!a || !b || !a.equals(b)) {\n return false;\n }\n }\n return true;\n }\n\n isEmpty(): boolean {\n return this.segs.length === 0;\n }\n\n length(): number {\n return this.segs.length;\n }\n\n isChildOf(parent: TSelf): boolean {\n const parentSegs = parent.segments();\n if (this.segs.length <= parentSegs.length) {\n return false;\n }\n for (let i = 0; i < parentSegs.length; i++) {\n const a = this.segs[i];\n const b = parentSegs[i];\n if (!a || !b || !a.equals(b)) {\n return false;\n }\n }\n return true;\n }\n}\n","import { AbstractBasePath } from '../base-path/AbstractBasePath.js';\nimport type { Path, PathSegment } from './types.js';\nimport { PropertySegment, ItemsSegment } from './PathSegment.js';\n\nclass PathImpl extends AbstractBasePath<PathSegment, Path> implements Path {\n asJsonPointer(): string {\n return this.segs\n .map((seg) =>\n seg.isProperty() ? `/properties/${seg.propertyName()}` : '/items',\n )\n .join('');\n }\n\n asSimple(): string {\n const parts: string[] = [];\n\n for (const seg of this.segs) {\n if (seg.isProperty()) {\n parts.push(seg.propertyName());\n } else if (seg.isItems()) {\n if (parts.length > 0) {\n const lastIndex = parts.length - 1;\n const lastPart = parts[lastIndex];\n if (lastPart !== undefined) {\n parts[lastIndex] = lastPart + '[*]';\n }\n } else {\n parts.push('[*]');\n }\n }\n }\n\n return parts.join('.');\n }\n\n parent(): Path {\n if (this.segs.length <= 1) {\n return EMPTY_PATH;\n }\n return new PathImpl(this.segs.slice(0, -1));\n }\n\n child(name: string): Path {\n return new PathImpl([...this.segs, new PropertySegment(name)]);\n }\n\n childItems(): Path {\n return new PathImpl([...this.segs, new ItemsSegment()]);\n }\n}\n\nexport const EMPTY_PATH: Path = new PathImpl([]);\n\nexport function createPath(segments: readonly PathSegment[]): Path {\n return segments.length === 0 ? EMPTY_PATH : new PathImpl(segments);\n}\n","import type { Path, PathSegment } from './types.js';\nimport { createPath } from './Path.js';\nimport { PropertySegment, ItemsSegment } from './PathSegment.js';\n\nexport function jsonPointerToSegments(pointer: string): PathSegment[] {\n if (pointer === '' || pointer === '/') {\n return [];\n }\n\n const parts = pointer.startsWith('/') ? pointer.slice(1).split('/') : pointer.split('/');\n const segments: PathSegment[] = [];\n\n let i = 0;\n while (i < parts.length) {\n const part = parts[i];\n if (part === 'properties') {\n const hasNextPart = i + 1 < parts.length;\n if (hasNextPart) {\n const name = parts[i + 1] ?? '';\n segments.push(new PropertySegment(name));\n i += 2;\n } else {\n i += 1;\n }\n } else if (part === 'items') {\n segments.push(new ItemsSegment());\n i += 1;\n } else if (part === '') {\n i += 1;\n } else {\n throw new Error(`Invalid path segment: ${part} in path ${pointer}`);\n }\n }\n\n return segments;\n}\n\nexport function jsonPointerToPath(pointer: string): Path {\n return createPath(jsonPointerToSegments(pointer));\n}\n\nexport function jsonPointerToSimplePath(pointer: string): string {\n return jsonPointerToPath(pointer).asSimple();\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport { NULL_NODE } from '../schema-node/index.js';\nimport type { Path } from '../path/index.js';\nimport { EMPTY_PATH } from '../path/index.js';\nimport { observable, makeAutoObservable } from '../reactivity/index.js';\n\nexport class TreeNodeIndex {\n private readonly nodeIndex: Map<string, SchemaNode> = observable.map();\n private readonly pathIndex: Map<string, Path> = observable.map();\n\n constructor() {\n makeAutoObservable(this, {\n nodeIndex: false,\n pathIndex: false,\n });\n }\n\n rebuild(rootNode: SchemaNode): void {\n this.nodeIndex.clear();\n this.pathIndex.clear();\n this.collectNodes(rootNode, EMPTY_PATH);\n }\n\n getNode(id: string): SchemaNode {\n return this.nodeIndex.get(id) ?? NULL_NODE;\n }\n\n getPath(id: string): Path {\n return this.pathIndex.get(id) ?? EMPTY_PATH;\n }\n\n get nodeCount(): number {\n return this.nodeIndex.size;\n }\n\n nodeIds(): IterableIterator<string> {\n return this.nodeIndex.keys();\n }\n\n private collectNodes(node: SchemaNode, path: Path): void {\n this.nodeIndex.set(node.id(), node);\n this.pathIndex.set(node.id(), path);\n\n if (node.isObject()) {\n for (const child of node.properties()) {\n this.collectNodes(child, path.child(child.name()));\n }\n } else if (node.isArray()) {\n this.collectNodes(node.items(), path.childItems());\n }\n }\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport { NULL_NODE } from '../schema-node/index.js';\nimport type { Path } from '../path/index.js';\nimport type { SchemaTree } from './types.js';\nimport { TreeNodeIndex } from './TreeNodeIndex.js';\nimport { makeAutoObservable } from '../reactivity/index.js';\n\nexport class SchemaTreeImpl implements SchemaTree {\n private readonly index = new TreeNodeIndex();\n private readonly _replacements = new Map<string, string>();\n private _rootNode: SchemaNode;\n\n constructor(rootNode: SchemaNode) {\n this._rootNode = rootNode;\n this.index.rebuild(rootNode);\n\n makeAutoObservable(this, {\n index: false,\n _replacements: false,\n _rootNode: 'observable.ref',\n });\n }\n\n root(): SchemaNode {\n return this._rootNode;\n }\n\n nodeById(id: string): SchemaNode {\n return this.index.getNode(id);\n }\n\n pathOf(id: string): Path {\n return this.index.getPath(id);\n }\n\n nodeAt(path: Path): SchemaNode {\n if (path.isEmpty()) {\n return this._rootNode;\n }\n\n let current: SchemaNode = this._rootNode;\n\n for (const segment of path.segments()) {\n if (current.isNull()) {\n return NULL_NODE;\n }\n\n if (segment.isItems()) {\n current = current.items();\n } else {\n current = current.property(segment.propertyName());\n }\n }\n\n return current;\n }\n\n nodeIds(): IterableIterator<string> {\n return this.index.nodeIds();\n }\n\n countNodes(): number {\n return this.index.nodeCount;\n }\n\n clone(): SchemaTree {\n const clonedRoot = this._rootNode.clone();\n const cloned = new SchemaTreeImpl(clonedRoot);\n for (const [oldId, newId] of this._replacements) {\n cloned._replacements.set(oldId, newId);\n }\n return cloned;\n }\n\n trackReplacement(oldNodeId: string, newNodeId: string): void {\n this._replacements.set(oldNodeId, newNodeId);\n }\n\n replacements(): IterableIterator<[string, string]> {\n return this._replacements.entries();\n }\n\n clearReplacements(): void {\n this._replacements.clear();\n }\n\n addChildTo(parentId: string, node: SchemaNode): void {\n const parent = this.nodeById(parentId);\n if (parent.isNull()) {\n return;\n }\n\n if (parent.isArray()) {\n throw new Error('Cannot add child to array node. Use setItems instead.');\n }\n\n parent.addChild(node);\n this.rebuildIndex();\n }\n\n insertChildAt(parentId: string, index: number, node: SchemaNode): void {\n const parent = this.nodeById(parentId);\n if (parent.isNull()) {\n return;\n }\n\n if (parent.isArray()) {\n throw new Error('Cannot add child to array node. Use setItems instead.');\n }\n\n parent.insertChild(index, node);\n this.rebuildIndex();\n }\n\n removeNodeAt(path: Path): boolean {\n if (path.isEmpty()) {\n return false;\n }\n\n const parentPath = path.parent();\n const parent = this.nodeAt(parentPath);\n\n if (parent.isNull()) {\n return false;\n }\n\n const lastSegment = path.segments().at(-1);\n\n if (!lastSegment || lastSegment.isItems()) {\n return false;\n }\n\n const removed = parent.removeChild(lastSegment.propertyName());\n if (removed) {\n this.rebuildIndex();\n }\n return removed;\n }\n\n renameNode(nodeId: string, newName: string): void {\n const node = this.nodeById(nodeId);\n if (node.isNull()) {\n return;\n }\n\n node.setName(newName);\n this.rebuildIndex();\n }\n\n moveNode(nodeId: string, newParentId: string): void {\n const node = this.nodeById(nodeId);\n if (node.isNull()) {\n return;\n }\n\n const currentPath = this.pathOf(nodeId);\n if (currentPath.isEmpty()) {\n return;\n }\n\n const currentParentPath = currentPath.parent();\n const currentParent = this.nodeAt(currentParentPath);\n\n if (currentParent.isNull()) {\n return;\n }\n\n if (currentParent.isArray()) {\n throw new Error('Cannot move node from array. Array items cannot be moved.');\n }\n\n const newParent = this.nodeById(newParentId);\n if (newParent.isNull()) {\n return;\n }\n\n if (newParent.isArray()) {\n throw new Error('Cannot move node into array. Use setItems instead.');\n }\n\n const newParentPath = this.pathOf(newParentId);\n if (\n newParentPath.equals(currentPath) ||\n newParentPath.isChildOf(currentPath)\n ) {\n return;\n }\n\n currentParent.removeChild(node.name());\n newParent.addChild(node);\n this.rebuildIndex();\n }\n\n setNodeAt(path: Path, node: SchemaNode): void {\n if (path.isEmpty()) {\n return;\n }\n\n const parentPath = path.parent();\n const parent = this.nodeAt(parentPath);\n\n if (parent.isNull()) {\n return;\n }\n\n const lastSegment = path.segments().at(-1);\n\n if (!lastSegment) {\n return;\n }\n\n if (lastSegment.isItems()) {\n parent.setItems(node);\n } else {\n const propertyName = lastSegment.propertyName();\n node.setName(propertyName);\n parent.replaceChild(propertyName, node);\n }\n\n this.rebuildIndex();\n }\n\n replaceRoot(newRoot: SchemaNode): void {\n this._rootNode = newRoot;\n this.rebuildIndex();\n }\n\n private rebuildIndex(): void {\n this.index.rebuild(this._rootNode);\n }\n}\n\nexport function createSchemaTree(root: SchemaNode): SchemaTree {\n return new SchemaTreeImpl(root);\n}\n","import type { SchemaTree } from '../schema-tree/index.js';\nimport type { Path } from '../path/index.js';\n\nexport class NodePathIndex {\n private readonly _basePaths = new Map<string, Path>();\n private readonly _replacements = new Map<string, string>();\n\n constructor(baseTree: SchemaTree) {\n for (const nodeId of baseTree.nodeIds()) {\n this._basePaths.set(nodeId, baseTree.pathOf(nodeId));\n }\n }\n\n hasBasePath(nodeId: string): boolean {\n return this._basePaths.has(nodeId);\n }\n\n getBasePath(nodeId: string): Path | undefined {\n return this._basePaths.get(nodeId);\n }\n\n trackReplacement(oldNodeId: string, newNodeId: string): void {\n this._replacements.set(oldNodeId, newNodeId);\n }\n\n getReplacementNodeId(oldNodeId: string): string | undefined {\n return this._replacements.get(oldNodeId);\n }\n\n getOriginalNodeId(newNodeId: string): string | undefined {\n for (const [oldId, newId] of this._replacements) {\n if (newId === newNodeId) {\n return oldId;\n }\n }\n return undefined;\n }\n\n isReplacement(nodeId: string): boolean {\n for (const newId of this._replacements.values()) {\n if (newId === nodeId) {\n return true;\n }\n }\n return false;\n }\n\n get replacements(): ReadonlyMap<string, string> {\n return this._replacements;\n }\n}\n","import type { Path, PathSegment } from '../../path/index.js';\n\nexport class FormulaPathBuilder {\n buildWithArrayNotation(fromPath: Path, toPath: Path): string {\n const fromSegments = fromPath.parent().segments();\n const toSegments = toPath.segments();\n\n const commonLength = this.findCommonPrefixLength(fromSegments, toSegments);\n const upCount = fromSegments.length - commonLength;\n\n const parts = this.buildPartsWithArrayNotation(\n upCount,\n toSegments,\n commonLength,\n );\n\n return this.formatPartsWithArrayNotation(parts, toSegments);\n }\n\n private findCommonPrefixLength(\n fromSegments: readonly PathSegment[],\n toSegments: readonly PathSegment[],\n ): number {\n const minLen = Math.min(fromSegments.length, toSegments.length);\n let commonPrefixLen = 0;\n\n for (let i = 0; i < minLen; i++) {\n const fromSeg = fromSegments[i];\n const toSeg = toSegments[i];\n\n if (!fromSeg || !toSeg) {\n break;\n }\n\n if (fromSeg.isItems() && toSeg.isItems()) {\n commonPrefixLen++;\n } else if (\n fromSeg.isProperty() &&\n toSeg.isProperty() &&\n fromSeg.propertyName() === toSeg.propertyName()\n ) {\n commonPrefixLen++;\n } else {\n break;\n }\n }\n\n return commonPrefixLen;\n }\n\n private buildPartsWithArrayNotation(\n upCount: number,\n toSegments: readonly PathSegment[],\n startIndex: number,\n ): string[] {\n const parts: string[] = [];\n\n for (let i = 0; i < upCount; i++) {\n parts.push('..');\n }\n\n for (let i = startIndex; i < toSegments.length; i++) {\n const seg = toSegments[i];\n if (seg) {\n if (seg.isProperty()) {\n parts.push(seg.propertyName());\n } else if (seg.isItems() && parts.length > 0) {\n const lastPart = parts.at(-1);\n if (lastPart && lastPart !== '..') {\n parts[parts.length - 1] = lastPart + '[*]';\n }\n }\n }\n }\n\n return parts;\n }\n\n private formatPartsWithArrayNotation(\n parts: string[],\n toSegments: readonly PathSegment[],\n ): string {\n if (parts.length === 0) {\n const lastSeg = toSegments.at(-1);\n if (lastSeg?.isProperty()) {\n return lastSeg.propertyName();\n }\n return '';\n }\n\n if (parts[0] === '..') {\n return parts.join('/');\n }\n\n return parts.join('.');\n }\n}\n","export class FormulaError extends Error {\n constructor(\n message: string,\n public readonly nodeId: string,\n public readonly details?: string,\n ) {\n super(message);\n this.name = 'FormulaError';\n }\n}\n","import { serializeAst, replaceDependencies } from '@revisium/formula';\nimport type { SchemaTree } from '../../schema-tree/index.js';\nimport type { XFormula } from '../../../types/index.js';\nimport type { Formula } from '../core/Formula.js';\nimport { FormulaError } from '../core/FormulaError.js';\nimport { FormulaPathBuilder } from './FormulaPathBuilder.js';\n\nexport interface SerializeOptions {\n readonly strict?: boolean;\n}\n\nexport class FormulaSerializer {\n private readonly pathBuilder = new FormulaPathBuilder();\n\n constructor(\n private readonly tree: SchemaTree,\n private readonly formulaNodeId: string,\n private readonly formula: Formula,\n ) {}\n\n static toXFormula(\n tree: SchemaTree,\n formulaNodeId: string,\n formula: Formula,\n ): XFormula {\n const serializer = new FormulaSerializer(tree, formulaNodeId, formula);\n return {\n version: 1,\n expression: serializer.serialize(),\n };\n }\n\n static serializeExpression(\n tree: SchemaTree,\n formulaNodeId: string,\n formula: Formula,\n options: SerializeOptions = {},\n ): string {\n const serializer = new FormulaSerializer(tree, formulaNodeId, formula);\n return serializer.serialize(options);\n }\n\n serialize(options: SerializeOptions = {}): string {\n const replacements = this.buildPathReplacements(options);\n const updatedAst = replaceDependencies(this.formula.ast(), replacements);\n return serializeAst(updatedAst);\n }\n\n private buildPathReplacements(options: SerializeOptions): Record<string, string> {\n const replacements: Record<string, string> = {};\n const formulaPath = this.tree.pathOf(this.formulaNodeId);\n const strict = options.strict ?? true;\n\n for (const astPath of this.formula.astPaths()) {\n const nodeId = this.formula.getNodeIdForAstPath(astPath);\n if (!nodeId) {\n continue;\n }\n\n const targetNode = this.tree.nodeById(nodeId);\n if (targetNode.isNull()) {\n if (strict) {\n throw new FormulaError(\n `Cannot serialize formula: target node not found`,\n this.formulaNodeId,\n `Target nodeId: ${nodeId}`,\n );\n }\n continue;\n }\n\n const targetPath = this.tree.pathOf(nodeId);\n const newPath = this.pathBuilder.buildWithArrayNotation(\n formulaPath,\n targetPath,\n );\n\n if (this.needsReplacement(astPath, newPath)) {\n replacements[astPath] = newPath;\n }\n }\n\n return replacements;\n }\n\n private needsReplacement(astPath: string, newPath: string): boolean {\n if (astPath === newPath) {\n return false;\n }\n\n const normalizedAstPath = this.normalizeArrayNotation(astPath);\n const normalizedNewPath = this.normalizeArrayNotation(newPath);\n\n return normalizedAstPath !== normalizedNewPath;\n }\n\n private normalizeArrayNotation(path: string): string {\n return path.replaceAll(/\\[\\d+\\]/g, '[*]');\n }\n}\n","import type { SchemaNode, Formula } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport { FormulaSerializer } from '../schema-formula/serialization/FormulaSerializer.js';\n\nexport interface ComparatorContext {\n currentTree: SchemaTree;\n baseTree: SchemaTree;\n}\n\nexport function areNodesEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n if (current.nodeType() !== base.nodeType()) {\n return false;\n }\n\n if (current.name() !== base.name()) {\n return false;\n }\n\n if (!areMetadataEqual(current, base)) {\n return false;\n }\n\n if (current.isPrimitive()) {\n return arePrimitivesEqual(current, base, context);\n }\n\n if (current.isObject()) {\n return areObjectsEqual(current, base, context);\n }\n\n if (current.isArray()) {\n return areArraysEqual(current, base, context);\n }\n\n if (current.isRef()) {\n return current.ref() === base.ref();\n }\n\n return current.isNull() && base.isNull();\n}\n\nexport function areNodesContentEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n if (current.nodeType() !== base.nodeType()) {\n return false;\n }\n\n if (!areMetadataEqual(current, base)) {\n return false;\n }\n\n if (current.isPrimitive()) {\n return arePrimitivesEqual(current, base, context);\n }\n\n if (current.isObject()) {\n return areObjectsEqual(current, base, context);\n }\n\n if (current.isArray()) {\n return areArraysEqual(current, base, context);\n }\n\n if (current.isRef()) {\n return current.ref() === base.ref();\n }\n\n return current.isNull() && base.isNull();\n}\n\nfunction areMetadataEqual(current: SchemaNode, base: SchemaNode): boolean {\n const metaCurrent = current.metadata();\n const metaBase = base.metadata();\n\n return (\n metaCurrent.title === metaBase.title &&\n metaCurrent.description === metaBase.description &&\n metaCurrent.deprecated === metaBase.deprecated\n );\n}\n\nfunction arePrimitivesEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n if (current.defaultValue() !== base.defaultValue()) {\n return false;\n }\n\n if (current.foreignKey() !== base.foreignKey()) {\n return false;\n }\n\n const currentFormula = current.formula();\n const baseFormula = base.formula();\n\n if (currentFormula === undefined && baseFormula === undefined) {\n return true;\n }\n\n if (currentFormula === undefined || baseFormula === undefined) {\n return false;\n }\n\n return areFormulasEqual(\n currentFormula,\n baseFormula,\n current.id(),\n base.id(),\n context,\n );\n}\n\nfunction areFormulasEqual(\n currentFormula: Formula,\n baseFormula: Formula,\n currentNodeId: string,\n baseNodeId: string,\n context: ComparatorContext,\n): boolean {\n if (currentFormula.version() !== baseFormula.version()) {\n return false;\n }\n\n const currentExpr = getSerializedExpression(\n currentFormula,\n context.currentTree,\n currentNodeId,\n );\n const baseExpr = getSerializedExpression(\n baseFormula,\n context.baseTree,\n baseNodeId,\n );\n\n if (currentExpr === null || baseExpr === null) {\n return false;\n }\n\n return currentExpr === baseExpr;\n}\n\nfunction getSerializedExpression(\n formula: Formula,\n tree: SchemaTree,\n nodeId: string,\n): string | null {\n try {\n return FormulaSerializer.serializeExpression(tree, nodeId, formula, { strict: false });\n } catch {\n return null;\n }\n}\n\nfunction areObjectsEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n const propsCurrent = current.properties();\n const propsBase = base.properties();\n\n if (propsCurrent.length !== propsBase.length) {\n return false;\n }\n\n for (const propCurrent of propsCurrent) {\n const propBase = propsBase.find((p) => p.name() === propCurrent.name());\n if (!propBase || !areNodesEqual(propCurrent, propBase, context)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areArraysEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n if (current.defaultValue() !== base.defaultValue()) {\n return false;\n }\n return areNodesEqual(current.items(), base.items(), context);\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport type { RawChange } from './types.js';\nimport { NodePathIndex } from './NodePathIndex.js';\nimport {\n areNodesEqual,\n areNodesContentEqual,\n type ComparatorContext,\n} from './SchemaComparator.js';\n\nexport class ChangeCollector {\n private readonly context: ComparatorContext;\n\n constructor(\n private readonly baseTree: SchemaTree,\n private readonly currentTree: SchemaTree,\n private readonly index: NodePathIndex,\n ) {\n this.context = { currentTree, baseTree };\n }\n\n collect(): RawChange[] {\n const changes: RawChange[] = [];\n\n this.collectFromCurrentTree(changes);\n this.collectRemovedNodes(changes);\n\n return changes;\n }\n\n private collectFromCurrentTree(changes: RawChange[]): void {\n for (const nodeId of this.currentTree.nodeIds()) {\n const currentNode = this.currentTree.nodeById(nodeId);\n this.collectNodeChange(changes, nodeId, currentNode);\n }\n }\n\n private collectNodeChange(\n changes: RawChange[],\n nodeId: string,\n currentNode: SchemaNode,\n ): void {\n if (this.index.isReplacement(nodeId)) {\n this.collectReplacementChange(changes, nodeId, currentNode);\n return;\n }\n\n const basePath = this.index.getBasePath(nodeId);\n if (!basePath) {\n changes.push({ type: 'added', baseNode: null, currentNode });\n return;\n }\n\n const currentPath = this.currentTree.pathOf(nodeId);\n const baseNode = this.baseTree.nodeById(nodeId);\n\n if (!basePath.equals(currentPath)) {\n this.collectMovedChange(changes, baseNode, currentNode);\n } else if (!areNodesEqual(currentNode, baseNode, this.context)) {\n changes.push({ type: 'modified', baseNode, currentNode });\n }\n }\n\n private collectReplacementChange(\n changes: RawChange[],\n nodeId: string,\n currentNode: SchemaNode,\n ): void {\n const originalId = this.index.getOriginalNodeId(nodeId);\n if (!originalId) {\n return;\n }\n\n const baseNode = this.baseTree.nodeById(originalId);\n if (baseNode.isNull()) {\n changes.push({ type: 'added', baseNode: null, currentNode });\n } else {\n changes.push({ type: 'modified', baseNode, currentNode });\n }\n }\n\n private collectMovedChange(\n changes: RawChange[],\n baseNode: SchemaNode,\n currentNode: SchemaNode,\n ): void {\n changes.push({ type: 'moved', baseNode, currentNode });\n\n if (!areNodesContentEqual(currentNode, baseNode, this.context)) {\n changes.push({ type: 'modified', baseNode, currentNode });\n }\n }\n\n private collectRemovedNodes(changes: RawChange[]): void {\n for (const nodeId of this.baseTree.nodeIds()) {\n if (this.index.getReplacementNodeId(nodeId)) {\n continue;\n }\n\n const currentNode = this.currentTree.nodeById(nodeId);\n if (currentNode.isNull()) {\n const baseNode = this.baseTree.nodeById(nodeId);\n changes.push({ type: 'removed', baseNode, currentNode: null });\n }\n }\n }\n}\n\nexport function collectChanges(\n baseTree: SchemaTree,\n currentTree: SchemaTree,\n index: NodePathIndex,\n): RawChange[] {\n return new ChangeCollector(baseTree, currentTree, index).collect();\n}\n","import type { SchemaTree } from '../schema-tree/index.js';\nimport type { Path } from '../path/index.js';\nimport type {\n RawChange,\n CoalescedChanges,\n MovedChange,\n AddedChange,\n RemovedChange,\n ModifiedChange,\n} from './types.js';\nimport { NodePathIndex } from './NodePathIndex.js';\n\nexport class ChangeCoalescer {\n constructor(\n private readonly currentTree: SchemaTree,\n private readonly index: NodePathIndex,\n ) {}\n\n coalesce(changes: readonly RawChange[]): CoalescedChanges {\n const moved: MovedChange[] = [];\n const added: AddedChange[] = [];\n const removed: RemovedChange[] = [];\n const modified: ModifiedChange[] = [];\n\n const movedPaths = this.getMovedPaths(changes);\n\n for (const change of changes) {\n if (this.isNestedChange(change, changes, movedPaths)) {\n continue;\n }\n\n switch (change.type) {\n case 'moved':\n moved.push(change);\n break;\n case 'added':\n added.push(change);\n break;\n case 'removed':\n removed.push(change);\n break;\n case 'modified':\n modified.push(change);\n break;\n }\n }\n\n return { moved, added, removed, modified };\n }\n\n private getMovedPaths(changes: readonly RawChange[]): Set<string> {\n const paths = new Set<string>();\n\n for (const change of changes) {\n if (change.type === 'moved') {\n const basePath = this.index.getBasePath(change.baseNode.id());\n if (basePath) {\n paths.add(basePath.asJsonPointer());\n }\n }\n }\n\n return paths;\n }\n\n private isNestedChange(\n change: RawChange,\n allChanges: readonly RawChange[],\n movedPaths: Set<string>,\n ): boolean {\n const path = this.getChangePath(change);\n\n if (this.hasParentChange(change, allChanges, path)) {\n return true;\n }\n\n if (this.isAffectedByMove(change, movedPaths)) {\n return true;\n }\n\n return false;\n }\n\n private getChangePath(change: RawChange): Path {\n if (change.type === 'removed') {\n const basePath = this.index.getBasePath(change.baseNode.id());\n if (!basePath) {\n throw new Error(\n `Base path not found for removed node: ${change.baseNode.id()}`,\n );\n }\n return basePath;\n }\n return this.currentTree.pathOf(change.currentNode.id());\n }\n\n private hasParentChange(\n change: RawChange,\n allChanges: readonly RawChange[],\n path: Path,\n ): boolean {\n for (const other of allChanges) {\n if (other === change) continue;\n\n if (this.shouldSkipParentCandidate(change, other)) {\n continue;\n }\n\n const otherPath = this.getChangePath(other);\n\n if (path.isChildOf(otherPath)) {\n return true;\n }\n }\n\n return false;\n }\n\n private shouldSkipParentCandidate(\n change: RawChange,\n other: RawChange,\n ): boolean {\n if (other.type === 'modified' && !this.isTypeChangeReplacement(other)) {\n return true;\n }\n\n if (change.type === 'moved' && other.type === 'added') {\n return true;\n }\n\n if (change.type === 'moved' && other.type === 'moved') {\n return this.hasIndependentRename(change);\n }\n\n return false;\n }\n\n private isTypeChangeReplacement(change: ModifiedChange): boolean {\n return change.baseNode.nodeType() !== change.currentNode.nodeType();\n }\n\n private hasIndependentRename(change: MovedChange): boolean {\n return change.baseNode.name() !== change.currentNode.name();\n }\n\n private isAffectedByMove(\n change: RawChange,\n movedPaths: Set<string>,\n ): boolean {\n if (change.type !== 'modified') {\n return false;\n }\n\n const basePath = this.index.getBasePath(change.baseNode.id());\n if (!basePath) {\n return false;\n }\n\n for (const movedPath of movedPaths) {\n if (\n basePath.asJsonPointer().startsWith(movedPath + '/') &&\n basePath.asJsonPointer() !== movedPath\n ) {\n return true;\n }\n }\n\n return false;\n }\n}\n\nexport function coalesceChanges(\n changes: readonly RawChange[],\n currentTree: SchemaTree,\n index: NodePathIndex,\n): CoalescedChanges {\n return new ChangeCoalescer(currentTree, index).coalesce(changes);\n}\n","import type { SchemaTree } from '../schema-tree/index.js';\nimport type { RawChange, CoalescedChanges } from './types.js';\nimport { NodePathIndex } from './NodePathIndex.js';\nimport { collectChanges } from './ChangeCollector.js';\nimport { coalesceChanges } from './ChangeCoalescer.js';\n\nexport class SchemaDiff {\n private _baseTree: SchemaTree;\n private readonly _currentTree: SchemaTree;\n private _index: NodePathIndex;\n\n constructor(currentTree: SchemaTree) {\n this._currentTree = currentTree;\n this._baseTree = currentTree.clone();\n this._index = new NodePathIndex(this._baseTree);\n }\n\n get baseTree(): SchemaTree {\n return this._baseTree;\n }\n\n get currentTree(): SchemaTree {\n return this._currentTree;\n }\n\n get index(): NodePathIndex {\n return this._index;\n }\n\n isDirty(): boolean {\n const changes = this.collectChanges();\n return changes.length > 0;\n }\n\n collectChanges(): RawChange[] {\n return collectChanges(this._baseTree, this._currentTree, this._index);\n }\n\n coalesceChanges(changes?: readonly RawChange[]): CoalescedChanges {\n const rawChanges = changes ?? this.collectChanges();\n return coalesceChanges(rawChanges, this._currentTree, this._index);\n }\n\n trackReplacement(oldNodeId: string, newNodeId: string): void {\n this._index.trackReplacement(oldNodeId, newNodeId);\n }\n\n markAsSaved(): void {\n this._baseTree = this._currentTree.clone();\n this._index = new NodePathIndex(this._baseTree);\n }\n}\n","export interface FormulaDependency {\n targetNodeId(): string;\n}\n\nexport class ResolvedDependency implements FormulaDependency {\n constructor(private readonly nodeId: string) {\n if (!nodeId) {\n throw new Error('ResolvedDependency requires a non-empty nodeId');\n }\n }\n\n targetNodeId(): string {\n return this.nodeId;\n }\n}\n","import type { SchemaNode, Formula } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport type { SerializeOptions } from './types.js';\nimport type {\n JsonSchema,\n JsonObjectSchema,\n JsonArraySchema,\n JsonStringSchema,\n JsonNumberSchema,\n JsonBooleanSchema,\n JsonRefSchema,\n XFormula,\n} from '../../types/index.js';\nimport { JsonSchemaTypeName } from '../../types/index.js';\nimport { FormulaSerializer } from '../schema-formula/index.js';\n\nexport class SchemaSerializer {\n private tree: SchemaTree | null = null;\n private excludeNodeIds: Set<string> = new Set();\n\n serializeNode(\n node: SchemaNode,\n tree: SchemaTree,\n options?: SerializeOptions,\n ): JsonSchema {\n this.tree = tree;\n this.excludeNodeIds = options?.excludeNodeIds ?? new Set();\n try {\n return this.serialize(node);\n } finally {\n this.tree = null;\n this.excludeNodeIds = new Set();\n }\n }\n\n serializeTree(tree: SchemaTree): JsonObjectSchema {\n return this.serializeNode(tree.root(), tree) as JsonObjectSchema;\n }\n\n private serialize(node: SchemaNode): JsonSchema {\n if (node.isNull()) {\n throw new Error('Cannot serialize null node');\n }\n\n const ref = node.ref();\n if (ref) {\n return this.serializeRef(node, ref);\n }\n\n if (node.isObject()) {\n return this.serializeObject(node);\n }\n\n if (node.isArray()) {\n return this.serializeArray(node);\n }\n\n return this.serializePrimitive(node);\n }\n\n private serializeObject(node: SchemaNode): JsonObjectSchema {\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const child of node.properties()) {\n if (this.shouldExclude(child)) {\n continue;\n }\n properties[child.name()] = this.serialize(child);\n required.push(child.name());\n }\n\n const result: JsonObjectSchema = {\n type: JsonSchemaTypeName.Object,\n properties,\n additionalProperties: false,\n required,\n };\n\n return this.addMetadata(result, node);\n }\n\n private serializeArray(node: SchemaNode): JsonArraySchema {\n const items = node.items();\n if (items.isNull()) {\n throw new Error('Array node must have items');\n }\n\n const result: JsonArraySchema = {\n type: JsonSchemaTypeName.Array,\n items: this.serialize(items),\n };\n\n return this.addMetadata(result, node);\n }\n\n private serializeRef(node: SchemaNode, ref: string): JsonRefSchema {\n const result: JsonRefSchema = {\n $ref: ref,\n };\n\n return this.addMetadata(result, node);\n }\n\n private serializePrimitive(node: SchemaNode): JsonSchema {\n const nodeType = node.nodeType();\n\n switch (nodeType) {\n case 'string':\n return this.serializeString(node);\n case 'number':\n return this.serializeNumber(node);\n case 'boolean':\n return this.serializeBoolean(node);\n default:\n throw new Error(`Unknown primitive type: ${nodeType}`);\n }\n }\n\n private serializeString(node: SchemaNode): JsonStringSchema {\n const result: JsonStringSchema = {\n type: JsonSchemaTypeName.String,\n default: (node.defaultValue() as string) ?? '',\n };\n\n const foreignKey = node.foreignKey();\n if (foreignKey) {\n result.foreignKey = foreignKey;\n }\n\n const contentMediaType = node.contentMediaType();\n if (contentMediaType && this.isValidContentMediaType(contentMediaType)) {\n result.contentMediaType = contentMediaType;\n }\n\n const formula = node.formula();\n if (formula) {\n result.readOnly = true;\n result['x-formula'] = this.serializeFormula(node, formula);\n }\n\n return this.addMetadata(result, node);\n }\n\n private serializeNumber(node: SchemaNode): JsonNumberSchema {\n const result: JsonNumberSchema = {\n type: JsonSchemaTypeName.Number,\n default: (node.defaultValue() as number) ?? 0,\n };\n\n const formula = node.formula();\n if (formula) {\n result.readOnly = true;\n result['x-formula'] = this.serializeFormula(node, formula);\n }\n\n return this.addMetadata(result, node);\n }\n\n private serializeBoolean(node: SchemaNode): JsonBooleanSchema {\n const result: JsonBooleanSchema = {\n type: JsonSchemaTypeName.Boolean,\n default: (node.defaultValue() as boolean) ?? false,\n };\n\n const formula = node.formula();\n if (formula) {\n result.readOnly = true;\n result['x-formula'] = this.serializeFormula(node, formula);\n }\n\n return this.addMetadata(result, node);\n }\n\n private serializeFormula(node: SchemaNode, formula: Formula): XFormula {\n if (!this.tree) {\n throw new Error(\n 'Cannot serialize formula without tree context. Use serializeNode with tree.',\n );\n }\n\n try {\n return FormulaSerializer.toXFormula(this.tree, node.id(), formula);\n } catch {\n return { version: 1, expression: '' };\n }\n }\n\n private addMetadata<T extends JsonSchema>(schema: T, node: SchemaNode): T {\n const meta = node.metadata();\n\n if (meta.title) {\n (schema as JsonSchema & { title?: string }).title = meta.title;\n }\n if (meta.description) {\n (schema as JsonSchema & { description?: string }).description =\n meta.description;\n }\n if (meta.deprecated) {\n (schema as JsonSchema & { deprecated?: boolean }).deprecated =\n meta.deprecated;\n }\n\n return schema;\n }\n\n private shouldExclude(node: SchemaNode): boolean {\n return this.excludeNodeIds.has(node.id());\n }\n\n private isValidContentMediaType(\n value: string,\n ): value is NonNullable<JsonStringSchema['contentMediaType']> {\n const validTypes = [\n 'text/plain',\n 'text/markdown',\n 'text/html',\n 'application/json',\n 'application/schema+json',\n 'application/yaml',\n ];\n return validTypes.includes(value);\n }\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport type { Path } from '../path/index.js';\nimport { jsonPointerToPath } from '../path/index.js';\nimport { SchemaSerializer } from '../schema-serializer/index.js';\nimport {\n areNodesContentEqual,\n type ComparatorContext,\n} from '../schema-diff/index.js';\nimport type {\n CoalescedChanges,\n MovedChange,\n AddedChange,\n RemovedChange,\n ModifiedChange,\n} from '../schema-diff/index.js';\nimport type { JsonPatchMove } from '../../types/index.js';\nimport type { JsonPatch } from './types.js';\n\nexport class PatchGenerator {\n private readonly serializer = new SchemaSerializer();\n private readonly context: ComparatorContext;\n\n constructor(\n private readonly currentTree: SchemaTree,\n private readonly baseTree: SchemaTree,\n ) {\n this.context = { currentTree, baseTree };\n }\n\n generate(coalesced: CoalescedChanges): JsonPatch[] {\n const movedNodeIds = this.collectMovedNodeIds(coalesced.moved);\n const movePatches = this.generateMovePatches(coalesced.moved);\n const addPatches = this.generateAddPatches(coalesced.added, movedNodeIds);\n const removePatches = this.generateRemovePatches(coalesced.removed);\n\n const { prerequisiteAdds, regularAdds } = this.partitionAddPatches(\n addPatches,\n movePatches,\n );\n\n const childChangePaths = new Set([\n ...addPatches.map((p) => p.path),\n ...removePatches.map((p) => p.path),\n ...movePatches.flatMap((p) => [p.path, (p as JsonPatchMove).from]).filter(Boolean),\n ]);\n\n const replacePatches = this.generateReplacePatches(\n coalesced.modified,\n childChangePaths,\n movedNodeIds,\n );\n\n return [\n ...prerequisiteAdds,\n ...movePatches,\n ...replacePatches,\n ...regularAdds,\n ...removePatches,\n ];\n }\n\n private collectMovedNodeIds(moved: readonly MovedChange[]): Set<string> {\n const nodeIds = new Set<string>();\n for (const change of moved) {\n nodeIds.add(change.currentNode.id());\n }\n return nodeIds;\n }\n\n private partitionAddPatches(\n addPatches: JsonPatch[],\n movePatches: JsonPatch[],\n ): { prerequisiteAdds: JsonPatch[]; regularAdds: JsonPatch[] } {\n const moveDestinations = movePatches.map((p) => jsonPointerToPath(p.path));\n\n const prerequisiteAdds: JsonPatch[] = [];\n const regularAdds: JsonPatch[] = [];\n\n for (const addPatch of addPatches) {\n const addPath = jsonPointerToPath(addPatch.path);\n const isPrerequisite = moveDestinations.some((moveDest) =>\n moveDest.isChildOf(addPath),\n );\n\n if (isPrerequisite) {\n prerequisiteAdds.push(addPatch);\n } else {\n regularAdds.push(addPatch);\n }\n }\n\n return { prerequisiteAdds, regularAdds };\n }\n\n private generateMovePatches(moved: readonly MovedChange[]): JsonPatch[] {\n const movedNodeIds = this.collectMovedNodeIds(moved);\n const sorted = this.sortMovesParentFirst(moved);\n const patches: JsonPatch[] = [];\n const appliedMoves: Array<{ from: string; to: string }> = [];\n\n for (const change of sorted) {\n const basePath = this.baseTree.pathOf(change.baseNode.id());\n const currentPath = this.currentTree.pathOf(change.currentNode.id());\n const adjustedFrom = this.adjustFromPath(\n basePath.asJsonPointer(),\n appliedMoves,\n );\n\n patches.push({\n op: 'move',\n from: adjustedFrom,\n path: currentPath.asJsonPointer(),\n });\n\n appliedMoves.push({\n from: adjustedFrom,\n to: currentPath.asJsonPointer(),\n });\n\n const modifyPatch = this.generateModifyAfterMove(\n change.baseNode,\n change.currentNode,\n currentPath.asJsonPointer(),\n movedNodeIds,\n );\n if (modifyPatch) {\n patches.push(modifyPatch);\n }\n }\n\n return patches;\n }\n\n private sortMovesParentFirst(\n moved: readonly MovedChange[],\n ): readonly MovedChange[] {\n return [...moved].sort((a, b) => {\n const pathA = this.baseTree.pathOf(a.baseNode.id()).asJsonPointer();\n const pathB = this.baseTree.pathOf(b.baseNode.id()).asJsonPointer();\n return pathA.length - pathB.length;\n });\n }\n\n private adjustFromPath(\n fromPath: string,\n appliedMoves: ReadonlyArray<{ from: string; to: string }>,\n ): string {\n let adjusted = fromPath;\n for (const move of appliedMoves) {\n if (adjusted.startsWith(move.from + '/')) {\n adjusted = move.to + adjusted.slice(move.from.length);\n }\n }\n return adjusted;\n }\n\n private generateModifyAfterMove(\n baseNode: SchemaNode,\n currentNode: SchemaNode,\n currentPath: string,\n siblingMovedIds: Set<string>,\n ): JsonPatch | null {\n if (areNodesContentEqual(currentNode, baseNode, this.context)) {\n return null;\n }\n\n if (this.isDifferenceExplainedByMoves(currentNode, baseNode, siblingMovedIds)) {\n return null;\n }\n\n const currentSchema = this.serializer.serializeNode(\n currentNode,\n this.currentTree,\n );\n\n return {\n op: 'replace',\n path: currentPath,\n value: currentSchema,\n };\n }\n\n private isDifferenceExplainedByMoves(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n movedIds: Set<string>,\n ): boolean {\n if (!currentNode.isObject() || !baseNode.isObject()) {\n return false;\n }\n\n const currentProps = currentNode.properties();\n const baseProps = baseNode.properties();\n\n if (currentProps.length !== baseProps.length) {\n return false;\n }\n\n for (const prop of currentProps) {\n const matchByName = baseProps.find((b) => b.name() === prop.name());\n if (matchByName) {\n if (!this.areNodesEqualAccountingMoves(prop, matchByName, movedIds)) {\n return false;\n }\n continue;\n }\n\n if (!movedIds.has(prop.id())) {\n return false;\n }\n\n const matchById = baseProps.find((b) => b.id() === prop.id());\n if (!matchById) {\n return false;\n }\n\n if (!this.areNodesEqualAccountingMoves(prop, matchById, movedIds)) {\n return false;\n }\n }\n\n return true;\n }\n\n private areNodesEqualAccountingMoves(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n movedIds: Set<string>,\n ): boolean {\n if (areNodesContentEqual(currentNode, baseNode, this.context)) {\n return true;\n }\n\n return this.isDifferenceExplainedByMoves(currentNode, baseNode, movedIds);\n }\n\n private generateAddPatches(\n added: readonly AddedChange[],\n movedNodeIds: Set<string>,\n ): JsonPatch[] {\n const patches: JsonPatch[] = [];\n\n for (const change of added) {\n const currentPath = this.currentTree.pathOf(change.currentNode.id());\n const schema = this.serializer.serializeNode(\n change.currentNode,\n this.currentTree,\n { excludeNodeIds: movedNodeIds },\n );\n patches.push({\n op: 'add',\n path: currentPath.asJsonPointer(),\n value: schema,\n });\n }\n\n return patches;\n }\n\n private generateRemovePatches(removed: readonly RemovedChange[]): JsonPatch[] {\n const patches: JsonPatch[] = [];\n\n for (const change of removed) {\n const basePath = this.baseTree.pathOf(change.baseNode.id());\n patches.push({\n op: 'remove',\n path: basePath.asJsonPointer(),\n });\n }\n\n return patches;\n }\n\n private generateReplacePatches(\n modified: readonly ModifiedChange[],\n childChangePaths: Set<string>,\n movedNodeIds: Set<string>,\n ): JsonPatch[] {\n const patches: JsonPatch[] = [];\n const replacedPaths: Path[] = [];\n const childChangePathObjects = [...childChangePaths].map(jsonPointerToPath);\n\n for (const change of modified) {\n if (movedNodeIds.has(change.currentNode.id())) {\n continue;\n }\n\n const currentPath = this.currentTree.pathOf(change.currentNode.id());\n\n if (this.isChildOfAny(currentPath, replacedPaths)) {\n continue;\n }\n\n if (this.hasChildIn(currentPath, childChangePathObjects)) {\n continue;\n }\n\n if (!this.isActuallyModified(change)) {\n continue;\n }\n\n if (change.currentNode.isArray()) {\n const arrayPatches = this.generateArrayReplacePatches(\n change.currentNode,\n change.baseNode,\n currentPath,\n );\n patches.push(...arrayPatches);\n replacedPaths.push(currentPath);\n continue;\n }\n\n const schema = this.serializer.serializeNode(\n change.currentNode,\n this.currentTree,\n );\n patches.push({\n op: 'replace',\n path: currentPath.asJsonPointer(),\n value: schema,\n });\n replacedPaths.push(currentPath);\n }\n\n return patches;\n }\n\n private generateArrayReplacePatches(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n currentPath: Path,\n ): JsonPatch[] {\n if (!baseNode.isArray()) {\n const schema = this.serializer.serializeNode(\n currentNode,\n this.currentTree,\n );\n return [\n {\n op: 'replace',\n path: currentPath.asJsonPointer(),\n value: schema,\n },\n ];\n }\n\n const patches: JsonPatch[] = [];\n const metadataChanged = this.hasMetadataChanged(currentNode, baseNode);\n const itemsChanged = this.hasItemsChanged(currentNode, baseNode);\n\n if (metadataChanged) {\n const schema = this.serializer.serializeNode(\n currentNode,\n this.currentTree,\n );\n patches.push({\n op: 'replace',\n path: currentPath.asJsonPointer(),\n value: schema,\n });\n }\n\n if (itemsChanged) {\n const items = currentNode.items();\n const itemsPath = currentPath.childItems();\n const itemsSchema = this.serializer.serializeNode(\n items,\n this.currentTree,\n );\n patches.push({\n op: 'replace',\n path: itemsPath.asJsonPointer(),\n value: itemsSchema,\n });\n }\n\n return patches;\n }\n\n private hasItemsChanged(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n ): boolean {\n const items = currentNode.items();\n const baseItems = baseNode.items();\n\n const currentItemsSchema = this.serializer.serializeNode(\n items,\n this.currentTree,\n );\n const baseItemsSchema = this.serializer.serializeNode(\n baseItems,\n this.baseTree,\n );\n\n return JSON.stringify(currentItemsSchema) !== JSON.stringify(baseItemsSchema);\n }\n\n private isChildOfAny(path: Path, parents: Path[]): boolean {\n return parents.some((parent) => path.isChildOf(parent));\n }\n\n private hasChildIn(path: Path, candidates: Path[]): boolean {\n return candidates.some((candidate) => candidate.isChildOf(path));\n }\n\n private isActuallyModified(change: ModifiedChange): boolean {\n const currentSchema = this.serializer.serializeNode(\n change.currentNode,\n this.currentTree,\n );\n const baseSchema = this.serializer.serializeNode(\n change.baseNode,\n this.baseTree,\n );\n\n if (JSON.stringify(currentSchema) === JSON.stringify(baseSchema)) {\n return false;\n }\n\n if (\n change.currentNode.isObject() &&\n this.hasOnlyChildChanges(change.currentNode, change.baseNode)\n ) {\n return false;\n }\n\n if (\n change.currentNode.isArray() &&\n this.hasOnlyItemsChanges(change.currentNode, change.baseNode)\n ) {\n return false;\n }\n\n return true;\n }\n\n private hasOnlyChildChanges(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n ): boolean {\n if (!baseNode.isObject()) {\n return false;\n }\n\n if (this.hasMetadataChanged(currentNode, baseNode)) {\n return false;\n }\n\n return true;\n }\n\n private hasMetadataChanged(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n ): boolean {\n const currentMeta = currentNode.metadata();\n const baseMeta = baseNode.metadata();\n\n return (\n currentMeta.title !== baseMeta.title ||\n currentMeta.description !== baseMeta.description ||\n currentMeta.deprecated !== baseMeta.deprecated\n );\n }\n\n private hasOnlyItemsChanges(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n ): boolean {\n if (!baseNode.isArray()) {\n return false;\n }\n\n if (this.hasMetadataChanged(currentNode, baseNode)) {\n return false;\n }\n\n const items = currentNode.items();\n const baseItems = baseNode.items();\n\n return items.id() === baseItems.id();\n }\n\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport type { Path } from '../path/index.js';\nimport { jsonPointerToPath } from '../path/index.js';\nimport { FormulaSerializer } from '../schema-formula/serialization/FormulaSerializer.js';\nimport type { JsonPatchMove } from '../../types/index.js';\nimport type { DefaultValueType, JsonPatch, PropertyChange, PropertyName, SchemaPatch } from './types.js';\n\ninterface PropertyExtractor {\n property: PropertyName;\n extract: (node: SchemaNode | null, tree: SchemaTree) => unknown;\n compare?: (from: unknown, to: unknown) => boolean;\n}\n\nfunction isPrimitiveDefault(value: unknown): value is string | number | boolean {\n const type = typeof value;\n return type === 'string' || type === 'number' || type === 'boolean';\n}\n\nexport class PatchEnricher {\n private readonly extractors: PropertyExtractor[];\n\n constructor(\n private readonly currentTree: SchemaTree,\n private readonly baseTree: SchemaTree,\n ) {\n this.extractors = this.buildExtractors();\n }\n\n enrich(patch: JsonPatch): SchemaPatch {\n const fieldName = this.getFieldNameFromPath(patch.path);\n\n if (patch.op === 'add') {\n return this.enrichAddPatch(patch, fieldName);\n }\n\n if (patch.op === 'remove') {\n return this.enrichRemovePatch(patch, fieldName);\n }\n\n if (patch.op === 'move') {\n return this.enrichMovePatch(patch, fieldName);\n }\n\n return this.enrichReplacePatch(patch, fieldName);\n }\n\n private enrichAddPatch(patch: JsonPatch, fieldName: string): SchemaPatch {\n const currentNode = this.getNodeAtPath(this.currentTree, patch.path);\n\n if (!currentNode) {\n return { patch, fieldName, propertyChanges: [] };\n }\n\n const propertyChanges = this.computeAddPropertyChanges(currentNode);\n return { patch, fieldName, propertyChanges };\n }\n\n private enrichRemovePatch(patch: JsonPatch, fieldName: string): SchemaPatch {\n return { patch, fieldName, propertyChanges: [] };\n }\n\n private enrichMovePatch(patch: JsonPatchMove, fieldName: string): SchemaPatch {\n const fromPath = patch.from;\n const isRename = this.isRenameMove(fromPath, patch.path);\n const movesIntoArray = this.movesIntoArrayBoundary(fromPath, patch.path);\n\n const baseNode = this.getNodeAtPath(this.baseTree, fromPath);\n const currentNode = this.getNodeAtPath(this.currentTree, patch.path);\n\n const propertyChanges = this.computePropertyChanges(baseNode, currentNode);\n\n return {\n patch,\n fieldName,\n propertyChanges,\n isRename: isRename || undefined,\n movesIntoArray: movesIntoArray || undefined,\n };\n }\n\n private enrichReplacePatch(patch: JsonPatch, fieldName: string): SchemaPatch {\n const baseNode = this.getNodeAtPath(this.baseTree, patch.path);\n const currentNode = this.getNodeAtPath(this.currentTree, patch.path);\n\n const isArrayMetadataPatch = baseNode?.isArray() && currentNode?.isArray();\n\n const skipProperties: PropertyName[] = isArrayMetadataPatch ? ['default'] : [];\n\n const propertyChanges = this.computePropertyChanges(\n baseNode,\n currentNode,\n { skipProperties },\n );\n\n return {\n patch,\n fieldName,\n propertyChanges,\n typeChange: this.computeTypeChange(baseNode, currentNode, isArrayMetadataPatch),\n };\n }\n\n private buildExtractors(): PropertyExtractor[] {\n return [\n {\n property: 'formula',\n extract: (node, tree) => {\n const formula = node?.formula();\n if (!formula || !node) {\n return undefined;\n }\n try {\n return FormulaSerializer.serializeExpression(tree, node.id(), formula, { strict: false });\n } catch {\n return undefined;\n }\n },\n compare: (from, to) => from === to,\n },\n {\n property: 'default',\n extract: (node) => {\n const value = node?.defaultValue();\n return isPrimitiveDefault(value) ? value as DefaultValueType : undefined;\n },\n },\n {\n property: 'description',\n extract: (node) => node?.metadata().description,\n },\n {\n property: 'deprecated',\n extract: (node) => node?.metadata().deprecated,\n },\n {\n property: 'foreignKey',\n extract: (node) => node?.foreignKey(),\n },\n {\n property: 'contentMediaType',\n extract: (node) => node?.contentMediaType(),\n },\n {\n property: 'ref',\n extract: (node) => node?.ref(),\n },\n {\n property: 'title',\n extract: (node) => node?.metadata().title,\n },\n ];\n }\n\n private computePropertyChanges(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n options?: { skipProperties?: PropertyName[] },\n ): PropertyChange[] {\n const skipSet = options?.skipProperties;\n const result: PropertyChange[] = [];\n\n for (const extractor of this.extractors) {\n if (skipSet?.includes(extractor.property)) {\n continue;\n }\n\n const from = extractor.extract(baseNode, this.baseTree);\n const to = extractor.extract(currentNode, this.currentTree);\n\n const areEqual = extractor.compare\n ? extractor.compare(from, to)\n : from === to;\n\n if (!areEqual) {\n result.push({ property: extractor.property, from, to });\n }\n }\n\n return result;\n }\n\n private computeAddPropertyChanges(node: SchemaNode): PropertyChange[] {\n const allChanges = this.computePropertyChanges(null, node);\n return allChanges.filter((change) => change.to !== undefined);\n }\n\n private computeTypeChange(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n ignoreItems?: boolean,\n ): SchemaPatch['typeChange'] {\n if (!baseNode || !currentNode) {\n return undefined;\n }\n\n const baseType = this.getNodeType(baseNode);\n const currentType = this.getNodeType(currentNode);\n\n if (ignoreItems) {\n const baseBaseType = baseNode.nodeType();\n const currentBaseType = currentNode.nodeType();\n if (baseBaseType === currentBaseType) {\n return undefined;\n }\n }\n\n if (baseType !== currentType) {\n return { fromType: baseType, toType: currentType };\n }\n\n return undefined;\n }\n\n private getNodeType(node: SchemaNode): string {\n if (node.isArray()) {\n const items = node.items();\n return `array<${this.getNodeType(items)}>`;\n }\n return node.nodeType();\n }\n\n private getFieldNameFromPath(jsonPointer: string): string {\n try {\n return jsonPointerToPath(jsonPointer).asSimple();\n } catch {\n return '';\n }\n }\n\n private isRenameMove(fromPointer: string, toPointer: string): boolean {\n try {\n const fromParent = jsonPointerToPath(fromPointer).parent();\n const toParent = jsonPointerToPath(toPointer).parent();\n return fromParent.equals(toParent);\n } catch {\n return false;\n }\n }\n\n private movesIntoArrayBoundary(\n fromPointer: string,\n toPointer: string,\n ): boolean {\n try {\n const fromPath = jsonPointerToPath(fromPointer);\n const toPath = jsonPointerToPath(toPointer);\n const fromArrayDepth = this.countArrayDepth(fromPath);\n const toArrayDepth = this.countArrayDepth(toPath);\n return toArrayDepth > fromArrayDepth;\n } catch {\n return false;\n }\n }\n\n private countArrayDepth(path: Path): number {\n return path.segments().filter((seg) => seg.isItems()).length;\n }\n\n private getNodeAtPath(\n tree: SchemaTree,\n jsonPointer: string,\n ): SchemaNode | null {\n try {\n const path = jsonPointerToPath(jsonPointer);\n const node = tree.nodeAt(path);\n return node.isNull() ? null : node;\n } catch {\n return null;\n }\n }\n}\n","import type { SchemaTree } from '../schema-tree/index.js';\nimport {\n NodePathIndex,\n collectChanges,\n coalesceChanges,\n} from '../schema-diff/index.js';\nimport { PatchGenerator } from './PatchGenerator.js';\nimport { PatchEnricher } from './PatchEnricher.js';\nimport type { SchemaPatch } from './types.js';\n\nexport class PatchBuilder {\n build(currentTree: SchemaTree, baseTree: SchemaTree): SchemaPatch[] {\n const index = new NodePathIndex(baseTree);\n this.syncReplacements(currentTree, index);\n\n const rawChanges = collectChanges(baseTree, currentTree, index);\n const coalesced = coalesceChanges(rawChanges, currentTree, index);\n\n const generator = new PatchGenerator(currentTree, baseTree);\n const patches = generator.generate(coalesced);\n\n const enricher = new PatchEnricher(currentTree, baseTree);\n return patches.map((patch) => enricher.enrich(patch));\n }\n\n private syncReplacements(tree: SchemaTree, index: NodePathIndex): void {\n for (const [oldId, newId] of tree.replacements()) {\n index.trackReplacement(oldId, newId);\n }\n }\n}\n","import type { Validator, ValidatorFactoryFn, ValidatorRule } from './types.js';\n\nexport class ValidatorRegistry {\n private readonly validators = new Map<string, ValidatorFactoryFn>();\n private readonly rules: ValidatorRule[] = [];\n\n register(type: string, factory: ValidatorFactoryFn): this {\n this.validators.set(type, factory);\n return this;\n }\n\n addRule(rule: ValidatorRule): this {\n this.rules.push(rule);\n return this;\n }\n\n get(type: string): Validator | undefined {\n const factory = this.validators.get(type);\n return factory ? factory() : undefined;\n }\n\n has(type: string): boolean {\n return this.validators.has(type);\n }\n\n getRules(): readonly ValidatorRule[] {\n return this.rules;\n }\n\n getValidatorTypes(): string[] {\n return Array.from(this.validators.keys());\n }\n}\n","import type { Validator, ValidationContext } from './types.js';\nimport type { ValidatorRegistry } from './ValidatorRegistry.js';\n\nexport class ValidatorResolver {\n constructor(private readonly registry: ValidatorRegistry) {}\n\n resolve(context: ValidationContext): Validator[] {\n const validators: Validator[] = [];\n const rules = this.registry.getRules();\n\n for (const rule of rules) {\n if (rule.shouldApply(context)) {\n const validator = this.registry.get(rule.validatorType);\n if (validator) {\n validators.push(validator);\n }\n }\n }\n\n return validators;\n }\n}\n","import type { Diagnostic, ValidationContext } from './types.js';\nimport type { ValidatorResolver } from './ValidatorResolver.js';\n\nexport class ValidationEngine {\n constructor(private readonly resolver: ValidatorResolver) {}\n\n validate(context: ValidationContext): readonly Diagnostic[] {\n const validators = this.resolver.resolve(context);\n const diagnostics: Diagnostic[] = [];\n\n for (const validator of validators) {\n const diagnostic = validator.validate(context);\n if (diagnostic) {\n diagnostics.push(diagnostic);\n }\n }\n\n return diagnostics;\n }\n}\n","import type { ValidatorRule, ValidationContext, SchemaLike } from '../types.js';\n\nexport class SchemaPropertyRule implements ValidatorRule {\n constructor(\n readonly validatorType: string,\n private readonly propertyName: keyof SchemaLike,\n ) {}\n\n shouldApply(context: ValidationContext): boolean {\n const value = context.schema[this.propertyName];\n return value !== undefined && value !== null;\n }\n}\n\nexport class SchemaTruthyRule implements ValidatorRule {\n constructor(\n readonly validatorType: string,\n private readonly propertyName: keyof SchemaLike,\n ) {}\n\n shouldApply(context: ValidationContext): boolean {\n return context.schema[this.propertyName] === true;\n }\n}\n\nexport class CompositeRule implements ValidatorRule {\n constructor(\n readonly validatorType: string,\n private readonly conditions: Array<(context: ValidationContext) => boolean>,\n ) {}\n\n shouldApply(context: ValidationContext): boolean {\n return this.conditions.every((condition) => condition(context));\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class RequiredValidator implements Validator {\n readonly type = 'required';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, nodeName } = context;\n\n if (value === '' || value === null || value === undefined) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Field is required',\n path: nodeName,\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class PatternValidator implements Validator {\n readonly type = 'pattern';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const pattern = schema.pattern;\n\n if (!pattern) {\n return null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.length === 0) {\n return null;\n }\n\n try {\n if (!new RegExp(pattern).test(value)) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Value does not match pattern',\n path: nodeName,\n params: { pattern },\n };\n }\n } catch {\n return {\n severity: 'error',\n type: 'invalidPattern',\n message: 'Invalid regex pattern in schema',\n path: nodeName,\n params: { pattern },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MinLengthValidator implements Validator {\n readonly type = 'minLength';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const minLength = schema.minLength;\n\n if (minLength === undefined) {\n return null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.length < minLength) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at least ${minLength} characters`,\n path: nodeName,\n params: { min: minLength, actual: value.length },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MaxLengthValidator implements Validator {\n readonly type = 'maxLength';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const maxLength = schema.maxLength;\n\n if (maxLength === undefined) {\n return null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.length > maxLength) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at most ${maxLength} characters`,\n path: nodeName,\n params: { max: maxLength, actual: value.length },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MinimumValidator implements Validator {\n readonly type = 'minimum';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const minimum = schema.minimum;\n\n if (minimum === undefined) {\n return null;\n }\n\n if (typeof value !== 'number') {\n return null;\n }\n\n if (value < minimum) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at least ${minimum}`,\n path: nodeName,\n params: { min: minimum, actual: value },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MaximumValidator implements Validator {\n readonly type = 'maximum';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const maximum = schema.maximum;\n\n if (maximum === undefined) {\n return null;\n }\n\n if (typeof value !== 'number') {\n return null;\n }\n\n if (value > maximum) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at most ${maximum}`,\n path: nodeName,\n params: { max: maximum, actual: value },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class EnumValidator implements Validator {\n readonly type = 'enum';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const enumValues = schema.enum;\n\n if (!enumValues || enumValues.length === 0) {\n return null;\n }\n\n if (!(enumValues as readonly unknown[]).includes(value)) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Value must be one of the allowed values',\n path: nodeName,\n params: { allowed: [...enumValues], actual: value },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class ForeignKeyValidator implements Validator {\n readonly type = 'foreignKey';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const foreignKey = schema.foreignKey;\n\n if (!foreignKey) {\n return null;\n }\n\n if (value === '' || value === null || value === undefined) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Foreign key reference is required',\n path: nodeName,\n params: { table: foreignKey },\n };\n }\n\n return null;\n }\n}\n","import { ValidatorRegistry } from './ValidatorRegistry.js';\nimport { ValidatorResolver } from './ValidatorResolver.js';\nimport { ValidationEngine } from './ValidationEngine.js';\nimport { SchemaPropertyRule, SchemaTruthyRule } from './rules/index.js';\nimport {\n RequiredValidator,\n PatternValidator,\n MinLengthValidator,\n MaxLengthValidator,\n MinimumValidator,\n MaximumValidator,\n EnumValidator,\n ForeignKeyValidator,\n} from './validators/index.js';\n\nexport function createDefaultValidatorRegistry(): ValidatorRegistry {\n const registry = new ValidatorRegistry();\n\n registry\n .register('required', () => new RequiredValidator())\n .register('pattern', () => new PatternValidator())\n .register('minLength', () => new MinLengthValidator())\n .register('maxLength', () => new MaxLengthValidator())\n .register('minimum', () => new MinimumValidator())\n .register('maximum', () => new MaximumValidator())\n .register('enum', () => new EnumValidator())\n .register('foreignKey', () => new ForeignKeyValidator());\n\n registry\n .addRule(new SchemaTruthyRule('required', 'required'))\n .addRule(new SchemaPropertyRule('pattern', 'pattern'))\n .addRule(new SchemaPropertyRule('minLength', 'minLength'))\n .addRule(new SchemaPropertyRule('maxLength', 'maxLength'))\n .addRule(new SchemaPropertyRule('minimum', 'minimum'))\n .addRule(new SchemaPropertyRule('maximum', 'maximum'))\n .addRule(new SchemaPropertyRule('enum', 'enum'))\n .addRule(new SchemaPropertyRule('foreignKey', 'foreignKey'));\n\n return registry;\n}\n\nexport function createValidationEngine(\n registry?: ValidatorRegistry,\n): ValidationEngine {\n const validatorRegistry = registry ?? createDefaultValidatorRegistry();\n const resolver = new ValidatorResolver(validatorRegistry);\n return new ValidationEngine(resolver);\n}\n","const FIELD_NAME_PATTERN = /^(?!__)[a-zA-Z_][a-zA-Z0-9-_]*$/;\nconst FIELD_NAME_MAX_LENGTH = 64;\n\nexport const FIELD_NAME_ERROR_MESSAGE =\n 'Must start with a letter or underscore, cannot start with __, and can only include letters, numbers, hyphens, and underscores (max 64 chars)';\n\nexport function isValidFieldName(name: string): boolean {\n if (name.length === 0 || name.length > FIELD_NAME_MAX_LENGTH) {\n return false;\n }\n return FIELD_NAME_PATTERN.test(name);\n}\n","import type { SchemaNode } from '../../schema-node/index.js';\nimport type { SchemaValidationError, SchemaValidationErrorType } from './types.js';\nimport { isValidFieldName, FIELD_NAME_ERROR_MESSAGE } from './FieldNameValidator.js';\n\nexport function validateSchema(root: SchemaNode): SchemaValidationError[] {\n const errors: SchemaValidationError[] = [];\n collectValidationErrors(root, errors);\n return errors;\n}\n\nfunction collectValidationErrors(\n node: SchemaNode,\n errors: SchemaValidationError[],\n): void {\n if (node.isNull()) {\n return;\n }\n\n const foreignKey = node.foreignKey();\n if (foreignKey === '') {\n errors.push(\n createError(node.id(), 'empty-foreign-key', 'Foreign key table reference cannot be empty'),\n );\n }\n\n if (node.isObject()) {\n const children = node.properties();\n const nameSet = new Set<string>();\n\n for (const child of children) {\n const childName = child.name();\n\n if (childName === '') {\n errors.push(createError(child.id(), 'empty-name', 'Field name cannot be empty'));\n } else if (nameSet.has(childName)) {\n errors.push(\n createError(child.id(), 'duplicate-name', `Duplicate field name: ${childName}`),\n );\n } else if (!isValidFieldName(childName)) {\n errors.push(createError(child.id(), 'invalid-name', FIELD_NAME_ERROR_MESSAGE));\n }\n\n nameSet.add(childName);\n collectValidationErrors(child, errors);\n }\n } else if (node.isArray()) {\n collectValidationErrors(node.items(), errors);\n }\n}\n\nfunction createError(\n nodeId: string,\n type: SchemaValidationErrorType,\n message: string,\n): SchemaValidationError {\n return { nodeId, type, message };\n}\n","import { validateFormulaSyntax } from '@revisium/formula';\nimport type { SchemaTree } from '../../schema-tree/index.js';\nimport type { SchemaNode } from '../../schema-node/index.js';\nimport type { TreeFormulaValidationError } from './types.js';\nimport { FormulaSerializer } from '../../schema-formula/serialization/FormulaSerializer.js';\n\nexport function validateFormulas(tree: SchemaTree): TreeFormulaValidationError[] {\n const errors: TreeFormulaValidationError[] = [];\n collectFormulaErrors(tree.root(), tree, errors, '');\n return errors;\n}\n\nfunction collectFormulaErrors(\n node: SchemaNode,\n tree: SchemaTree,\n errors: TreeFormulaValidationError[],\n fieldPath: string,\n): void {\n validateNodeFormula(node, tree, errors, fieldPath);\n collectChildErrors(node, tree, errors, fieldPath);\n}\n\nfunction validateNodeFormula(\n node: SchemaNode,\n tree: SchemaTree,\n errors: TreeFormulaValidationError[],\n fieldPath: string,\n): void {\n if (!node.isPrimitive() || !node.hasFormula()) {\n return;\n }\n\n const formula = node.formula();\n if (!formula) {\n return;\n }\n\n for (const dep of formula.dependencies()) {\n const targetNode = tree.nodeById(dep.targetNodeId());\n if (targetNode.isNull()) {\n errors.push({\n nodeId: node.id(),\n message: 'Cannot resolve formula dependency: target node not found',\n fieldPath: fieldPath || node.name(),\n });\n return;\n }\n }\n\n try {\n const expression = FormulaSerializer.serializeExpression(\n tree,\n node.id(),\n formula,\n { strict: false },\n );\n const result = validateFormulaSyntax(expression);\n if (!result.isValid) {\n errors.push({\n nodeId: node.id(),\n message: `Invalid formula: ${result.error}`,\n fieldPath: fieldPath || node.name(),\n });\n }\n } catch {\n errors.push({\n nodeId: node.id(),\n message: 'Invalid formula expression',\n fieldPath: fieldPath || node.name(),\n });\n }\n}\n\nfunction collectChildErrors(\n node: SchemaNode,\n tree: SchemaTree,\n errors: TreeFormulaValidationError[],\n fieldPath: string,\n): void {\n if (node.isObject()) {\n for (const child of node.properties()) {\n const childPath = buildChildPath(fieldPath, child.name());\n collectFormulaErrors(child, tree, errors, childPath);\n }\n } else if (node.isArray()) {\n const itemsPath = buildArrayItemsPath(fieldPath);\n collectFormulaErrors(node.items(), tree, errors, itemsPath);\n }\n}\n\nfunction buildChildPath(parentPath: string, childName: string): string {\n return parentPath ? `${parentPath}.${childName}` : childName;\n}\n\nfunction buildArrayItemsPath(parentPath: string): string {\n return parentPath ? `${parentPath}[*]` : '[*]';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/addSharedFieldsFromStore.ts","../src/model/schema/json-string.store.ts","../src/model/schema/json-number.store.ts","../src/model/schema/json-boolean.store.ts","../src/model/schema/json-object.store.ts","../src/model/schema/json-array.store.ts","../src/model/value/json-string-value.store.ts","../src/model/value/json-number-value.store.ts","../src/model/value/json-boolean-value.store.ts","../src/model/value/value-transformation.ts","../src/model/value/json-object-value.store.ts","../src/lib/createJsonValueStore.ts","../src/model/value/json-array-value.store.ts"],"names":["EventEmitter","nanoid","value"],"mappings":"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","file":"chunk-55AMH44G.js","sourcesContent":["import { JsonSchema } from '../types/schema.types.js';\n\nexport const addSharedFieldsFromState = <T extends JsonSchema = JsonSchema>(\n schema: T,\n state: { title?: string; description?: string; deprecated?: boolean },\n): T => {\n if (state.title) {\n schema.title = state.title;\n }\n\n if (state.description) {\n schema.description = state.description;\n }\n\n if (state.deprecated) {\n schema.deprecated = state.deprecated;\n }\n\n return schema;\n};\n","import { nanoid } from 'nanoid';\nimport { EventEmitter } from 'eventemitter3';\nimport {\n JsonRefSchema,\n JsonSchemaTypeName,\n JsonStringSchema,\n XFormula,\n} from '../../types/schema.types.js';\nimport { JsonSchemaStore } from './json-schema.store.js';\nimport { JsonStringValueStore } from '../value/json-string-value.store.js';\nimport { addSharedFieldsFromState } from '../../lib/addSharedFieldsFromStore.js';\n\nexport class JsonStringStore extends EventEmitter implements JsonStringSchema {\n public readonly type = JsonSchemaTypeName.String;\n\n public $ref: string = '';\n public name: string = '';\n public parent: JsonSchemaStore | null = null;\n\n public default: string = '';\n public readOnly?: boolean;\n public title?: string;\n public description?: string;\n public deprecated?: boolean;\n public foreignKey?: string;\n public pattern?: string;\n public enum?: string[];\n public format?: JsonStringSchema['format'];\n public contentMediaType?: JsonStringSchema['contentMediaType'];\n public 'x-formula'?: XFormula;\n\n private readonly valuesMap: Map<string, JsonStringValueStore[]> = new Map<\n string,\n JsonStringValueStore[]\n >();\n\n constructor(public readonly nodeId: string = nanoid()) {\n super();\n }\n\n public registerValue(value: JsonStringValueStore): number {\n const length = this.getOrCreateValues(value.rowId).push(value);\n return length - 1;\n }\n\n public getValue(\n rowId: string,\n index: number = 0,\n ): JsonStringValueStore | undefined {\n return this.getOrCreateValues(rowId)[index];\n }\n\n public getPlainSchema(options?: {\n skip$Ref?: boolean;\n }): JsonStringSchema | JsonRefSchema {\n if (this.$ref && options?.skip$Ref !== true) {\n return addSharedFieldsFromState({ $ref: this.$ref }, this);\n }\n\n return addSharedFieldsFromState(\n {\n type: this.type,\n default: this.default,\n ...(this.foreignKey ? { foreignKey: this.foreignKey } : {}),\n ...(this.readOnly ? { readOnly: this.readOnly } : {}),\n ...(this.pattern ? { pattern: this.pattern } : {}),\n ...(this.enum ? { enum: this.enum } : {}),\n ...(this.format ? { format: this.format } : {}),\n ...(this.contentMediaType\n ? { contentMediaType: this.contentMediaType }\n : {}),\n ...(this['x-formula'] ? { 'x-formula': this['x-formula'] } : {}),\n },\n this,\n );\n }\n\n private getOrCreateValues(rowId: string): JsonStringValueStore[] {\n let values = this.valuesMap.get(rowId);\n\n if (!values) {\n values = [];\n this.valuesMap.set(rowId, values);\n }\n\n return values;\n }\n}\n","import { nanoid } from 'nanoid';\nimport { EventEmitter } from 'eventemitter3';\nimport {\n JsonNumberSchema,\n JsonRefSchema,\n JsonSchemaTypeName,\n XFormula,\n} from '../../types/schema.types.js';\nimport { JsonSchemaStore } from './json-schema.store.js';\nimport { JsonNumberValueStore } from '../value/json-number-value.store.js';\nimport { addSharedFieldsFromState } from '../../lib/addSharedFieldsFromStore.js';\n\nexport class JsonNumberStore extends EventEmitter implements JsonNumberSchema {\n public readonly type = JsonSchemaTypeName.Number;\n\n public $ref: string = '';\n public name: string = '';\n public parent: JsonSchemaStore | null = null;\n\n public default: number = 0;\n public readOnly?: boolean;\n public title?: string;\n public description?: string;\n public deprecated?: boolean;\n public 'x-formula'?: XFormula;\n\n private readonly valuesMap: Map<string, JsonNumberValueStore[]> = new Map<\n string,\n JsonNumberValueStore[]\n >();\n\n constructor(public readonly nodeId: string = nanoid()) {\n super();\n }\n\n public registerValue(value: JsonNumberValueStore): number {\n const length = this.getOrCreateValues(value.rowId).push(value);\n return length - 1;\n }\n\n public getValue(\n rowId: string,\n index: number = 0,\n ): JsonNumberValueStore | undefined {\n return this.getOrCreateValues(rowId)[index];\n }\n\n public getPlainSchema(options?: {\n skip$Ref?: boolean;\n }): JsonNumberSchema | JsonRefSchema {\n if (this.$ref && options?.skip$Ref !== true) {\n return addSharedFieldsFromState({ $ref: this.$ref }, this);\n }\n\n return addSharedFieldsFromState(\n {\n type: this.type,\n default: this.default,\n ...(this.readOnly ? { readOnly: this.readOnly } : {}),\n ...(this['x-formula'] ? { 'x-formula': this['x-formula'] } : {}),\n },\n this,\n );\n }\n\n private getOrCreateValues(rowId: string): JsonNumberValueStore[] {\n let values = this.valuesMap.get(rowId);\n\n if (!values) {\n values = [];\n this.valuesMap.set(rowId, values);\n }\n\n return values;\n }\n}\n","import { nanoid } from 'nanoid';\nimport { EventEmitter } from 'eventemitter3';\nimport {\n JsonBooleanSchema,\n JsonRefSchema,\n JsonSchemaTypeName,\n XFormula,\n} from '../../types/schema.types.js';\nimport { JsonSchemaStore } from './json-schema.store.js';\nimport { JsonBooleanValueStore } from '../value/json-boolean-value.store.js';\nimport { addSharedFieldsFromState } from '../../lib/addSharedFieldsFromStore.js';\n\nexport class JsonBooleanStore\n extends EventEmitter\n implements JsonBooleanSchema\n{\n public readonly type = JsonSchemaTypeName.Boolean;\n\n public $ref: string = '';\n public name: string = '';\n public parent: JsonSchemaStore | null = null;\n\n public default: boolean = false;\n public readOnly?: boolean;\n public title?: string;\n public description?: string;\n public deprecated?: boolean;\n public 'x-formula'?: XFormula;\n\n private readonly valuesMap: Map<string, JsonBooleanValueStore[]> = new Map<\n string,\n JsonBooleanValueStore[]\n >();\n\n constructor(public readonly nodeId: string = nanoid()) {\n super();\n }\n\n public registerValue(value: JsonBooleanValueStore): number {\n const length = this.getOrCreateValues(value.rowId).push(value);\n return length - 1;\n }\n\n public getValue(\n rowId: string,\n index: number = 0,\n ): JsonBooleanValueStore | undefined {\n return this.getOrCreateValues(rowId)[index];\n }\n\n public getPlainSchema(options?: {\n skip$Ref?: boolean;\n }): JsonBooleanSchema | JsonRefSchema {\n if (this.$ref && options?.skip$Ref !== true) {\n return addSharedFieldsFromState({ $ref: this.$ref }, this);\n }\n\n return addSharedFieldsFromState(\n {\n type: this.type,\n default: this.default,\n ...(this.readOnly ? { readOnly: this.readOnly } : {}),\n ...(this['x-formula'] ? { 'x-formula': this['x-formula'] } : {}),\n },\n this,\n );\n }\n\n private getOrCreateValues(rowId: string): JsonBooleanValueStore[] {\n let values = this.valuesMap.get(rowId);\n\n if (!values) {\n values = [];\n this.valuesMap.set(rowId, values);\n }\n\n return values;\n }\n}\n","import { nanoid } from 'nanoid';\nimport { JsonObject } from '../../types/json.types.js';\nimport {\n JsonObjectSchema,\n JsonRefSchema,\n JsonSchema,\n JsonSchemaTypeName,\n} from '../../types/schema.types.js';\nimport { JsonSchemaStore } from './json-schema.store.js';\nimport { JsonObjectValueStore } from '../value/json-object-value.store.js';\nimport { addSharedFieldsFromState } from '../../lib/addSharedFieldsFromStore.js';\n\nexport type AddedPropertyEvent = { name: string; property: JsonSchemaStore };\nexport type MigratePropertyEvent = {\n name: string;\n property: JsonSchemaStore;\n previousProperty: JsonSchemaStore;\n};\nexport type RemovedPropertyEvent = { name: string; property: JsonSchemaStore };\nexport type ChangeNameEvent = {\n fromName: string;\n toName: string;\n property: JsonSchemaStore;\n};\n\nexport class JsonObjectStore implements JsonObjectSchema {\n public readonly type = JsonSchemaTypeName.Object;\n\n public $ref: string = '';\n public name: string = '';\n public parent: JsonSchemaStore | null = null;\n public default: JsonObject = {};\n\n public title?: string;\n public description?: string;\n public deprecated?: boolean;\n\n public readonly additionalProperties = false;\n public readonly required: string[] = [];\n public readonly properties: Record<string, JsonSchemaStore> = {};\n\n private readonly valuesMap: Map<string, JsonObjectValueStore[]> = new Map<\n string,\n JsonObjectValueStore[]\n >();\n\n constructor(public readonly nodeId: string = nanoid()) {}\n\n public get empty(): boolean {\n return Object.keys(this.properties).length === 0;\n }\n\n public registerValue(value: JsonObjectValueStore): number {\n const length = this.getOrCreateValues(value.rowId).push(value);\n return length - 1;\n }\n\n public getValue(\n rowId: string,\n index: number = 0,\n ): JsonObjectValueStore | undefined {\n return this.getOrCreateValues(rowId)[index];\n }\n\n public addPropertyWithStore(name: string, store: JsonSchemaStore) {\n if (this.properties[name] || this.required.includes(name)) {\n throw new Error('this name already exists');\n }\n\n store.parent = this;\n store.name = name;\n\n this.required.push(name);\n this.required.sort((a, b) => a.localeCompare(b));\n\n this.properties[name] = store;\n this.default[name] = store.default;\n\n const event: AddedPropertyEvent = { name, property: store };\n\n for (const value of this.iterValues()) {\n value.addProperty(event);\n }\n\n return store;\n }\n\n public migratePropertyWithStore(name: string, store: JsonSchemaStore) {\n const item = this.properties[name];\n\n if (!item) {\n throw new Error('this name does not exist');\n }\n\n item.parent = null;\n\n store.parent = this;\n store.name = name;\n\n this.properties[name] = store;\n this.default[name] = store.default;\n\n const event: MigratePropertyEvent = {\n name,\n property: store,\n previousProperty: item,\n };\n\n for (const value of this.iterValues()) {\n value.migrateProperty(event);\n }\n\n return store;\n }\n\n public changeName(fromName: string, toName: string) {\n const item = this.properties[fromName];\n\n if (!item) {\n throw new Error('this fromName does not exist');\n }\n\n // remove\n delete this.properties[fromName];\n delete this.default[fromName];\n\n const foundRequiredIndex = this.required.findIndex(\n (required) => required === fromName,\n );\n\n if (foundRequiredIndex !== -1) {\n this.required.splice(foundRequiredIndex, 1);\n }\n\n // add\n if (!this.required.includes(toName)) {\n this.required.push(toName);\n this.required.sort((a, b) => a.localeCompare(b));\n }\n\n this.properties[toName] = item;\n this.default[toName] = item.default;\n\n const event: ChangeNameEvent = {\n fromName,\n toName,\n property: item,\n };\n\n for (const value of this.iterValues()) {\n value.changeName(event);\n }\n }\n\n public removeProperty(name: string) {\n const item = this.properties[name];\n\n if (!item) {\n throw new Error('this name does not exist');\n }\n\n item.parent = null;\n item.name = '';\n\n delete this.properties[name];\n delete this.default[name];\n\n const foundRequiredIndex = this.required.findIndex(\n (required) => required === name,\n );\n\n if (foundRequiredIndex !== -1) {\n this.required.splice(foundRequiredIndex, 1);\n }\n\n const event: RemovedPropertyEvent = {\n name,\n property: item,\n };\n\n for (const value of this.iterValues()) {\n value.removeProperty(event);\n }\n }\n\n public getProperty(name: string): JsonSchemaStore | undefined {\n return this.properties[name];\n }\n\n public getPlainSchema(options?: {\n skip$Ref?: boolean;\n }): JsonObjectSchema | JsonRefSchema {\n if (this.$ref && options?.skip$Ref !== true) {\n return addSharedFieldsFromState({ $ref: this.$ref }, this);\n }\n\n return addSharedFieldsFromState(\n {\n type: this.type,\n additionalProperties: this.additionalProperties,\n required: this.required,\n properties: Object.entries<JsonSchemaStore>(this.properties).reduce<\n Record<string, JsonSchema>\n >((result, [name, store]) => {\n result[name] = store.getPlainSchema(options);\n return result;\n }, {}),\n },\n this,\n );\n }\n\n private getOrCreateValues(rowId: string): JsonObjectValueStore[] {\n let values = this.valuesMap.get(rowId);\n\n if (!values) {\n values = [];\n this.valuesMap.set(rowId, values);\n }\n\n return values;\n }\n\n private *iterValues(): Generator<JsonObjectValueStore> {\n for (const values of this.valuesMap.values()) {\n for (const value of values) {\n yield value;\n }\n }\n }\n}\n","import { nanoid } from 'nanoid';\nimport { JsonArray } from '../../types/json.types.js';\nimport {\n JsonArraySchema,\n JsonRefSchema,\n JsonSchemaTypeName,\n} from '../../types/schema.types.js';\nimport { JsonSchemaStore } from './json-schema.store.js';\nimport { JsonArrayValueStore } from '../value/json-array-value.store.js';\nimport { addSharedFieldsFromState } from '../../lib/addSharedFieldsFromStore.js';\n\nexport type MigrateItemsEvent = {\n items: JsonSchemaStore;\n previousItems: JsonSchemaStore;\n};\n\nexport type ReplaceItemsEvent = {\n items: JsonSchemaStore;\n previousItems: JsonSchemaStore;\n};\n\nexport class JsonArrayStore implements JsonArraySchema {\n public readonly type = JsonSchemaTypeName.Array;\n\n public $ref: string = '';\n public name: string = '';\n public parent: JsonSchemaStore | null = null;\n public default: JsonArray[] = [];\n\n public title?: string;\n public description?: string;\n public deprecated?: boolean;\n\n private readonly valuesMap: Map<string, JsonArrayValueStore[]> = new Map<\n string,\n JsonArrayValueStore[]\n >();\n\n constructor(\n private _items: JsonSchemaStore,\n public readonly nodeId: string = nanoid(),\n ) {\n this.items.parent = this;\n }\n\n public get items() {\n return this._items;\n }\n\n public registerValue(value: JsonArrayValueStore): number {\n const length = this.getOrCreateValues(value.rowId).push(value);\n return length - 1;\n }\n\n public getValue(\n rowId: string,\n index: number = 0,\n ): JsonArrayValueStore | undefined {\n return this.getOrCreateValues(rowId)[index];\n }\n\n public migrateItems(items: JsonSchemaStore) {\n const previousItems = this._items;\n previousItems.parent = null;\n this._items = items;\n this._items.parent = this;\n\n const event: MigrateItemsEvent = { items, previousItems };\n\n for (const value of this.iterValues()) {\n value.migrateItems(event);\n }\n }\n\n public replaceItems(items: JsonSchemaStore) {\n const previousItems = this._items;\n previousItems.parent = null;\n this._items = items;\n this._items.parent = this;\n\n const event: ReplaceItemsEvent = { items, previousItems };\n\n for (const value of this.iterValues()) {\n value.replaceItems(event);\n }\n }\n\n public getPlainSchema(options?: {\n skip$Ref?: boolean;\n }): JsonArraySchema | JsonRefSchema {\n if (this.$ref && options?.skip$Ref !== true) {\n return addSharedFieldsFromState({ $ref: this.$ref }, this);\n }\n\n return addSharedFieldsFromState(\n {\n type: this.type,\n items: this.items.getPlainSchema(options),\n },\n this,\n );\n }\n\n private getOrCreateValues(rowId: string): JsonArrayValueStore[] {\n let values = this.valuesMap.get(rowId);\n\n if (!values) {\n values = [];\n this.valuesMap.set(rowId, values);\n }\n\n return values;\n }\n\n private *iterValues(): Generator<JsonArrayValueStore> {\n for (const values of this.valuesMap.values()) {\n for (const value of values) {\n yield value;\n }\n }\n }\n}\n","import { JsonSchemaTypeName } from '../../types/schema.types.js';\nimport { JsonStringStore } from '../schema/json-string.store.js';\nimport { JsonValueStoreParent } from './json-value.store.js';\n\nexport class JsonStringValueStore {\n public readonly type = JsonSchemaTypeName.String;\n\n public readonly index: number;\n\n public parent: JsonValueStoreParent | null = null;\n\n constructor(\n public readonly schema: JsonStringStore,\n public readonly rowId: string,\n public value: string | null = null,\n ) {\n this.index = this.schema.registerValue(this);\n }\n\n public get foreignKey() {\n return this.schema.foreignKey;\n }\n\n public getPlainValue() {\n return this.value ?? this.schema.default;\n }\n}\n","import { JsonSchemaTypeName } from '../../types/schema.types.js';\nimport { JsonNumberStore } from '../schema/json-number.store.js';\nimport { JsonValueStoreParent } from './json-value.store.js';\n\nexport class JsonNumberValueStore {\n public readonly type = JsonSchemaTypeName.Number;\n\n public readonly index: number;\n\n public parent: JsonValueStoreParent | null = null;\n\n constructor(\n public readonly schema: JsonNumberStore,\n public readonly rowId: string,\n public value: number | null = null,\n ) {\n this.index = this.schema.registerValue(this);\n }\n\n public getPlainValue() {\n return this.value ?? this.schema.default;\n }\n}\n","import { JsonSchemaTypeName } from '../../types/schema.types.js';\nimport { JsonBooleanStore } from '../schema/json-boolean.store.js';\nimport { JsonValueStoreParent } from './json-value.store.js';\n\nexport class JsonBooleanValueStore {\n public readonly type = JsonSchemaTypeName.Boolean;\n\n public readonly index: number;\n\n public parent: JsonValueStoreParent | null = null;\n\n constructor(\n public readonly schema: JsonBooleanStore,\n public readonly rowId: string,\n public value: boolean | null = null,\n ) {\n this.index = this.schema.registerValue(this);\n }\n\n public getPlainValue() {\n return this.value ?? this.schema.default;\n }\n}\n","import { JsonSchemaTypeName } from '../../types/schema.types.js';\nimport { JsonArrayStore } from '../schema/json-array.store.js';\nimport { JsonSchemaStore } from '../schema/json-schema.store.js';\nimport { JsonObjectStore } from '../schema/json-object.store.js';\n\nexport const equal = (value: unknown): unknown => value;\n\nexport const fromNumberToString = (\n value: number,\n defaultValue: string = '',\n): string => value.toString() || defaultValue;\n\nexport const fromBooleanToString = (\n value: boolean,\n defaultValue: string = '',\n): string => value.toString() || defaultValue;\n\nexport const fromStringToBoolean = (\n value: string,\n defaultValue: boolean = false,\n): boolean => {\n if (!value) {\n return defaultValue;\n }\n\n if (value.toLowerCase() === 'false') {\n return false;\n }\n\n return true;\n};\n\nexport const fromStringToNumber = (\n value: string,\n defaultValue: number = 0,\n): number => {\n const number = Number.parseFloat(value);\n\n if (Number.isNaN(number)) {\n return defaultValue;\n }\n\n return number;\n};\n\nexport const fromBooleanToNumber = (value: boolean): number => {\n return Number(value);\n};\n\nexport const fromNumberToBoolean = (value: number): boolean => {\n return Boolean(value);\n};\n\nexport const toArrayTransformation =\n (transformation: Transformation) => (value: unknown) => {\n const result = transformation(value);\n return [result];\n };\n\nexport const fromArrayTransformation =\n (transformation: Transformation) => (value: unknown) => {\n if (Array.isArray(value) && value.length) {\n return transformation(value[0]);\n }\n return undefined;\n };\n\nexport const fromObjectToPrimitive = (\n _value: unknown,\n defaultValue: unknown,\n): unknown => {\n return defaultValue;\n};\n\nexport const fromPrimitiveToObject = (\n _value: unknown,\n defaultValue: unknown,\n): unknown => {\n return defaultValue;\n};\n\nexport const fromObjectToArray = (\n _value: unknown,\n defaultValue: unknown,\n): unknown => {\n return defaultValue;\n};\n\nexport const fromArrayToObject = (\n _value: unknown,\n defaultValue: unknown,\n): unknown => {\n return defaultValue;\n};\n\nconst replaceTransformationsMapper: ReplaceTransformationsMapper = [\n {\n fromType: JsonSchemaTypeName.Number,\n toType: JsonSchemaTypeName.String,\n transformation: fromNumberToString as Transformation,\n },\n {\n fromType: JsonSchemaTypeName.String,\n toType: JsonSchemaTypeName.Number,\n transformation: fromStringToNumber as Transformation,\n },\n {\n fromType: JsonSchemaTypeName.Boolean,\n toType: JsonSchemaTypeName.String,\n transformation: fromBooleanToString as Transformation,\n },\n {\n fromType: JsonSchemaTypeName.String,\n toType: JsonSchemaTypeName.Boolean,\n transformation: fromStringToBoolean as Transformation,\n },\n {\n fromType: JsonSchemaTypeName.Boolean,\n toType: JsonSchemaTypeName.Number,\n transformation: fromBooleanToNumber as Transformation,\n },\n {\n fromType: JsonSchemaTypeName.Number,\n toType: JsonSchemaTypeName.Boolean,\n transformation: fromNumberToBoolean as Transformation,\n },\n];\nexport const getTransformation = (\n from: JsonSchemaStore,\n to: JsonSchemaStore,\n): Transformation | undefined => {\n if (\n from instanceof JsonObjectStore &&\n !(to instanceof JsonObjectStore) &&\n !(to instanceof JsonArrayStore)\n ) {\n return fromObjectToPrimitive;\n }\n\n if (\n !(from instanceof JsonObjectStore) &&\n !(from instanceof JsonArrayStore) &&\n to instanceof JsonObjectStore\n ) {\n return fromPrimitiveToObject;\n }\n\n if (from instanceof JsonObjectStore && to instanceof JsonArrayStore) {\n return fromObjectToArray;\n }\n\n if (from instanceof JsonArrayStore && to instanceof JsonObjectStore) {\n return fromArrayToObject;\n }\n\n if (from instanceof JsonArrayStore && to instanceof JsonArrayStore) {\n const itemTransformation = findTransformation(\n from.items.type,\n to.items.type,\n );\n\n if (itemTransformation && itemTransformation !== equal) {\n return (value: unknown, defaultValue?: unknown) => {\n if (!Array.isArray(value)) {\n return defaultValue;\n }\n\n return value.map((item) => {\n const result = itemTransformation(item, to.items.default);\n return result !== undefined ? result : to.items.default;\n });\n };\n }\n\n if (from.items.type !== to.items.type) {\n return (_value: unknown, defaultValue?: unknown) => defaultValue;\n }\n\n return equal;\n }\n\n if (to instanceof JsonArrayStore) {\n const transformation = findTransformation(from.type, to.items.type);\n\n if (!transformation) {\n return;\n }\n\n return toArrayTransformation(transformation);\n }\n\n if (from instanceof JsonArrayStore) {\n const transformation = findTransformation(from.items.type, to.type);\n\n if (!transformation) {\n return;\n }\n\n return fromArrayTransformation(transformation);\n }\n\n return findTransformation(from.type, to.type);\n};\n\nconst findTransformation = (\n from: JsonSchemaTypeName,\n to: JsonSchemaTypeName,\n): Transformation | undefined => {\n if (from === to) {\n return equal;\n }\n\n for (const item of replaceTransformationsMapper) {\n if (item.fromType === from && item.toType === to) {\n return item.transformation;\n }\n }\n\n return undefined;\n};\n\ntype Transformation = (value: unknown, defaultValue?: unknown) => unknown;\ntype ReplaceTransformationsMapper = {\n fromType: JsonSchemaTypeName;\n toType: JsonSchemaTypeName;\n transformation: Transformation;\n}[];\n","import { createJsonValueStore } from '../../lib/createJsonValueStore.js';\nimport { JsonSchemaStore } from '../../model/schema';\nimport { JsonObject, JsonValue } from '../../types/json.types.js';\nimport { JsonSchemaTypeName } from '../../types/schema.types.js';\nimport {\n AddedPropertyEvent,\n ChangeNameEvent,\n JsonObjectStore,\n MigratePropertyEvent,\n RemovedPropertyEvent,\n} from '../schema/json-object.store.js';\nimport { JsonValueStore, JsonValueStoreParent } from './json-value.store.js';\nimport { getTransformation } from './value-transformation.js';\n\nexport class JsonObjectValueStore {\n public readonly type = JsonSchemaTypeName.Object;\n\n public index: number;\n\n public parent: JsonValueStoreParent | null = null;\n\n constructor(\n public readonly schema: JsonObjectStore,\n public readonly rowId: string,\n public value: Record<string, JsonValueStore>,\n ) {\n this.index = this.schema.registerValue(this);\n this.init();\n }\n\n public getPlainValue(): JsonObject {\n return Object.entries(this.value).reduce<Record<string, JsonValue>>(\n (result, [name, store]) => {\n result[name] = store.getPlainValue() as JsonValue;\n return result;\n },\n {},\n );\n }\n\n public migrateProperty(event: MigratePropertyEvent) {\n const rawValue = this.getMigratedValue(event);\n\n this.value[event.name] = createJsonValueStore(\n event.property,\n this.rowId,\n rawValue,\n );\n }\n\n public addProperty(event: AddedPropertyEvent) {\n const rawValue = this.getAddedValue(event);\n\n this.value[event.name] = createJsonValueStore(\n event.property,\n this.rowId,\n rawValue,\n );\n }\n\n public removeProperty(event: RemovedPropertyEvent) {\n delete this.value[event.name];\n }\n\n public changeName(event: ChangeNameEvent) {\n const itemValue = this.value[event.fromName];\n\n if (itemValue !== undefined) {\n delete this.value[event.fromName];\n this.value[event.toName] = itemValue;\n }\n }\n\n private getAddedValue(event: AddedPropertyEvent): JsonValue {\n const ancestorValue = this.findValueAtSchemaLevel(event.property);\n if (ancestorValue !== undefined) {\n return ancestorValue;\n }\n\n const previousValue = event.property.getValue(this.rowId, this.index);\n if (previousValue) {\n return previousValue.getPlainValue();\n }\n\n return event.property.default;\n }\n\n private findValueAtSchemaLevel(\n targetSchema: JsonSchemaStore,\n ): JsonValue | undefined {\n let current: JsonValueStore | null = this.parent;\n\n while (current) {\n if (current.type === JsonSchemaTypeName.Object) {\n for (const [, fieldValue] of Object.entries(current.value)) {\n if (fieldValue.schema === targetSchema) {\n return fieldValue.getPlainValue();\n }\n }\n }\n\n current = current.parent;\n }\n\n return undefined;\n }\n\n private getMigratedValue(event: MigratePropertyEvent): JsonValue {\n const transformation = getTransformation(\n event.previousProperty,\n event.property,\n );\n\n const valueStore = this.value[event.name];\n if (transformation && valueStore) {\n return transformation(\n valueStore.getPlainValue(),\n event.property.default,\n ) as JsonValue;\n }\n\n return event.property.default;\n }\n\n private init() {\n for (const value of Object.values(this.value)) {\n value.parent = this;\n }\n }\n}\n","import {\n JsonArray,\n JsonObject,\n JsonPrimitives,\n JsonValue,\n} from '../types/json.types.js';\nimport { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonArrayStore } from '../model/schema/json-array.store.js';\nimport { JsonObjectStore } from '../model/schema/json-object.store.js';\nimport {\n JsonSchemaStore,\n JsonSchemaStorePrimitives,\n} from '../model/schema/json-schema.store.js';\nimport { JsonArrayValueStore } from '../model/value/json-array-value.store.js';\nimport { JsonBooleanValueStore } from '../model/value/json-boolean-value.store.js';\nimport { JsonNumberValueStore } from '../model/value/json-number-value.store.js';\nimport { JsonObjectValueStore } from '../model/value/json-object-value.store.js';\nimport { JsonStringValueStore } from '../model/value/json-string-value.store.js';\nimport {\n JsonValueStore,\n JsonValueStorePrimitives,\n} from '../model/value/json-value.store.js';\n\nexport const createJsonValueStore = (\n schema: JsonSchemaStore,\n rowId: string,\n rawValue: JsonValue,\n): JsonValueStore => {\n if (schema.type === JsonSchemaTypeName.Object) {\n return createJsonObjectValueStore(schema, rowId, rawValue as JsonObject);\n } else if (schema.type === JsonSchemaTypeName.Array) {\n return createJsonArrayValueStore(schema, rowId, rawValue as JsonArray);\n } else {\n return createPrimitiveValueStore(schema, rowId, rawValue as JsonPrimitives);\n }\n};\n\nexport const createJsonObjectValueStore = (\n schema: JsonObjectStore,\n rowId: string,\n rawValue: JsonObject,\n): JsonObjectValueStore => {\n const value = Object.entries(rawValue).reduce<Record<string, JsonValueStore>>(\n (reduceValue, [key, itemValue]) => {\n const itemSchema = schema.getProperty(key);\n\n if (itemSchema === undefined || itemValue === undefined) {\n throw new Error('Invalid item');\n }\n\n reduceValue[key] = createJsonValueStore(itemSchema, rowId, itemValue);\n\n return reduceValue;\n },\n {},\n );\n\n return new JsonObjectValueStore(schema, rowId, value);\n};\n\nexport const createJsonArrayValueStore = (\n schema: JsonArrayStore,\n rowId: string,\n rawValue: JsonArray,\n): JsonArrayValueStore => {\n const value = rawValue.map((value) =>\n createJsonValueStore(schema.items, rowId, value),\n );\n\n return new JsonArrayValueStore(schema, rowId, value);\n};\n\nexport const createPrimitiveValueStore = (\n schema: JsonSchemaStorePrimitives,\n rowId: string,\n rawValue: JsonPrimitives,\n): JsonValueStorePrimitives => {\n if (schema.type === JsonSchemaTypeName.String) {\n return new JsonStringValueStore(schema, rowId, rawValue as string | null);\n } else if (schema.type === JsonSchemaTypeName.Number) {\n return new JsonNumberValueStore(schema, rowId, rawValue as number | null);\n } else if (schema.type === JsonSchemaTypeName.Boolean) {\n return new JsonBooleanValueStore(schema, rowId, rawValue as boolean | null);\n } else {\n throw new Error('this type is not allowed');\n }\n};\n","import { JsonArray, JsonValue } from '../../types/json.types.js';\nimport { JsonSchemaTypeName } from '../../types/schema.types.js';\nimport {\n JsonArrayStore,\n MigrateItemsEvent,\n ReplaceItemsEvent,\n} from '../schema/json-array.store.js';\nimport { createJsonValueStore } from '../../lib/createJsonValueStore.js';\nimport { JsonValueStore, JsonValueStoreParent } from './json-value.store.js';\nimport { getTransformation } from './value-transformation.js';\n\nexport class JsonArrayValueStore {\n public readonly type = JsonSchemaTypeName.Array;\n\n public index: number;\n\n public parent: JsonValueStoreParent | null = null;\n\n constructor(\n public readonly schema: JsonArrayStore,\n public readonly rowId: string,\n public value: JsonValueStore[],\n ) {\n this.index = this.schema.registerValue(this);\n this.init();\n }\n\n public getPlainValue(): JsonArray {\n return this.value.map((item) => item.getPlainValue());\n }\n\n public migrateItems(event: MigrateItemsEvent) {\n const transformation = getTransformation(event.previousItems, event.items);\n\n this.value = this.value.map((valueItem) => {\n const rawValue = transformation\n ? (transformation(\n valueItem.getPlainValue(),\n event.items.default,\n ) as JsonValue)\n : event.items.default;\n\n return createJsonValueStore(event.items, this.rowId, rawValue);\n });\n }\n\n public replaceItems(event: ReplaceItemsEvent) {\n this.value = this.value.map(() => {\n const rawValue = this.getReplacedValue(event);\n\n return createJsonValueStore(event.items, this.rowId, rawValue);\n });\n }\n\n private getReplacedValue(event: ReplaceItemsEvent): JsonValue {\n const previousValue = event.items.getValue(this.rowId);\n\n if (previousValue) {\n return previousValue.getPlainValue();\n }\n\n return event.items.default;\n }\n\n private init() {\n for (const value of this.value) {\n value.parent = this;\n }\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/consts/index.ts"],"names":["CustomSchemeKeywords"],"mappings":";AAAO,IAAK,oBAAA,qBAAAA,qBAAAA,KAAL;AACL,EAAAA,sBAAA,YAAA,CAAA,GAAa,YAAA;AADH,EAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA","file":"chunk-5VDDLW7U.js","sourcesContent":["export enum CustomSchemeKeywords {\n ForeignKey = 'foreignKey',\n}\n\nexport * from './system-schema-ids.js';\n"]}
|