@prisma/orm-family-sql 8.0.0-rc.2-dev.3 → 8.0.0-rc.20-dev.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 +2 -6
- package/dist/{aggregate-descriptor-registry-C7hel5O7.mjs → aggregate-descriptor-registry-ZrKjxwQe.mjs} +5 -5
- package/dist/aggregate-descriptor-registry-ZrKjxwQe.mjs.map +1 -0
- package/dist/ast-D0miQ1B6.mjs +372 -0
- package/dist/ast-D0miQ1B6.mjs.map +1 -0
- package/dist/ast-YEMe_B8z.d.mts +292 -0
- package/dist/ast-YEMe_B8z.d.mts.map +1 -0
- package/dist/attribute-specs-DA_RwQFB.d.mts +114 -0
- package/dist/attribute-specs-DA_RwQFB.d.mts.map +1 -0
- package/dist/{authored-check-naming-Hf9990DV.mjs → authored-check-naming-BHGJhjqn.mjs} +5 -5
- package/dist/authored-check-naming-BHGJhjqn.mjs.map +1 -0
- package/dist/{authored-check-naming-BWBe-PVE.d.mts → authored-check-naming-D-o196ry.d.mts} +3 -3
- package/dist/authored-check-naming-D-o196ry.d.mts.map +1 -0
- package/dist/authoring-entity-types-CgKIgWq5-pEdfjam5.d.mts +9 -0
- package/dist/authoring-entity-types-CgKIgWq5-pEdfjam5.d.mts.map +1 -0
- package/dist/builder.d.mts +4 -3
- package/dist/builder__runtime.d.mts +29 -31
- package/dist/builder__runtime.d.mts.map +1 -1
- package/dist/builder__runtime.mjs +261 -191
- package/dist/builder__runtime.mjs.map +1 -1
- package/dist/builder__types.d.mts +6 -3
- package/dist/{canonicalization-hooks-dmXkOR4a.mjs → canonicalization-hooks-Ce1v_TDl.mjs} +2 -2
- package/dist/canonicalization-hooks-Ce1v_TDl.mjs.map +1 -0
- package/dist/{canonicalization-hooks-CYnW_sGn.d.mts → canonicalization-hooks-DyapQ0my.d.mts} +2 -2
- package/dist/canonicalization-hooks-DyapQ0my.d.mts.map +1 -0
- package/dist/{check-constraint-B7qGu6rc-HvQjjX82.d.mts → check-constraint-B7qGu6rc-Bk2ezWXu.d.mts} +4 -4
- package/dist/check-constraint-B7qGu6rc-Bk2ezWXu.d.mts.map +1 -0
- package/dist/{codec-descriptor-registry-N0dhtKaH.mjs → codec-descriptor-registry-CiiFzMtb.mjs} +13 -40
- package/dist/codec-descriptor-registry-CiiFzMtb.mjs.map +1 -0
- package/dist/collection-methods-BB8YH69u.d.mts +1 -0
- package/dist/collection-methods-D2UnCS0S-DOy2qHYS.d.mts +77 -0
- package/dist/collection-methods-D2UnCS0S-DOy2qHYS.d.mts.map +1 -0
- package/dist/{config-types-D9fdKG3g.d.mts → config-types-C-1mIiJO.d.mts} +5 -5
- package/dist/config-types-C-1mIiJO.d.mts.map +1 -0
- package/dist/{config-types-gAm54C_v.mjs → config-types-DkEeq_qq.mjs} +10 -6
- package/dist/config-types-DkEeq_qq.mjs.map +1 -0
- package/dist/{contract-builder-D4a5dT7j.mjs → contract-builder-50lF0kz1.mjs} +431 -226
- package/dist/contract-builder-50lF0kz1.mjs.map +1 -0
- package/dist/contract-builder-C_Zi57iD.d.mts +1967 -0
- package/dist/contract-builder-C_Zi57iD.d.mts.map +1 -0
- package/dist/contract-emitter.d.mts +4 -7
- package/dist/contract-emitter.d.mts.map +1 -1
- package/dist/contract-emitter.mjs +1 -1
- package/dist/{contract-errors-BCN6RVI5-5IHBF_lg.mjs → contract-errors-BCN6RVI5-DoH6b_KZ.mjs} +2 -2
- package/dist/contract-errors-BCN6RVI5-DoH6b_KZ.mjs.map +1 -0
- package/dist/contract-prisma7__provider.d.mts +97 -0
- package/dist/contract-prisma7__provider.d.mts.map +1 -0
- package/dist/contract-prisma7__provider.mjs +2011 -0
- package/dist/contract-prisma7__provider.mjs.map +1 -0
- package/dist/contract-psl.d.mts +18 -29
- package/dist/contract-psl.d.mts.map +1 -1
- package/dist/contract-psl.mjs +1 -1
- package/dist/contract-psl__attribute-specs.d.mts +2 -0
- package/dist/contract-psl__attribute-specs.mjs +2 -0
- package/dist/contract-psl__default-table-name.d.mts +7 -0
- package/dist/contract-psl__default-table-name.d.mts.map +1 -0
- package/dist/contract-psl__default-table-name.mjs +2 -0
- package/dist/contract-psl__diagnostics.d.mts +12 -0
- package/dist/contract-psl__diagnostics.d.mts.map +1 -0
- package/dist/contract-psl__diagnostics.mjs +2 -0
- package/dist/contract-psl__map-names.d.mts +16 -0
- package/dist/contract-psl__map-names.d.mts.map +1 -0
- package/dist/contract-psl__map-names.mjs +21 -0
- package/dist/contract-psl__map-names.mjs.map +1 -0
- package/dist/contract-psl__provider.d.mts +3 -3
- package/dist/contract-psl__provider.d.mts.map +1 -1
- package/dist/contract-psl__provider.mjs +95 -46
- package/dist/contract-psl__provider.mjs.map +1 -1
- package/dist/contract-ts.d.mts +5 -5
- package/dist/contract-ts.mjs +5 -4
- package/dist/contract-ts__config-types.d.mts +1 -1
- package/dist/contract-ts__config-types.mjs +1 -1
- package/dist/contract-ts__contract-builder.d.mts +4 -4
- package/dist/contract-ts__contract-builder.mjs +4 -3
- package/dist/{contract-view-BMR5IWk4.mjs → contract-view-DqpzeYeE.mjs} +2 -2
- package/dist/contract-view-DqpzeYeE.mjs.map +1 -0
- package/dist/{contract-view-CPHxoAEX.d.mts → contract-view-DuB35or0.d.mts} +3 -3
- package/dist/contract-view-DuB35or0.d.mts.map +1 -0
- package/dist/contract.d.mts +30 -28
- package/dist/contract.mjs +23 -18
- package/dist/contract__authored-check-naming.d.mts +1 -1
- package/dist/contract__authored-check-naming.mjs +1 -1
- package/dist/contract__canonicalization-hooks.d.mts +1 -1
- package/dist/contract__canonicalization-hooks.mjs +1 -1
- package/dist/contract__contract-view.d.mts +1 -1
- package/dist/contract__contract-view.mjs +1 -1
- package/dist/contract__data-type-support.d.mts +2 -0
- package/dist/contract__data-type-support.mjs +2 -0
- package/dist/contract__data-type.d.mts +2 -0
- package/dist/contract__data-type.mjs +3 -0
- package/dist/contract__entity-handle-lowering-hook.d.mts +2 -2
- package/dist/contract__entity-handle-lowering-hook.mjs +2 -2
- package/dist/contract__entity-kinds.d.mts +1 -1
- package/dist/contract__entity-kinds.mjs +1 -1
- package/dist/contract__factories.d.mts +1 -1
- package/dist/contract__factories.mjs +1 -1
- package/dist/contract__foreign-key-materialization.d.mts +2 -2
- package/dist/contract__foreign-key-materialization.mjs +3 -2
- package/dist/contract__index-naming.d.mts +2 -2
- package/dist/contract__index-naming.mjs +2 -2
- package/dist/contract__index-type-validation.d.mts +2 -2
- package/dist/contract__index-type-validation.mjs +1 -1
- package/dist/contract__index-types.d.mts +3 -3
- package/dist/contract__index-types.mjs +2 -2
- package/dist/contract__referential-action-sql.d.mts +1 -1
- package/dist/contract__referential-action-sql.mjs +1 -1
- package/dist/contract__resolve-storage-table.d.mts +1 -1
- package/dist/contract__resolve-storage-table.mjs +1 -1
- package/dist/contract__sql-expression.d.mts +2 -0
- package/dist/contract__sql-expression.mjs +2 -0
- package/dist/contract__types.d.mts +12 -12
- package/dist/contract__types.mjs +4 -4
- package/dist/contract__validators.d.mts +2 -2
- package/dist/contract__validators.mjs +3 -3
- package/dist/contract__value-set-derivation-hook.d.mts +1 -1
- package/dist/contract__value-set-derivation-hook.mjs +1 -1
- package/dist/control-BK50zF6c.mjs +2721 -0
- package/dist/control-BK50zF6c.mjs.map +1 -0
- package/dist/control-ChAUdOOu.d.mts +1416 -0
- package/dist/control-ChAUdOOu.d.mts.map +1 -0
- package/dist/{control-adapter-C99J7aEF-B7eQd7vD.d.mts → control-adapter-Bn0uhplA-BzP2uPqJ.d.mts} +27 -44
- package/dist/control-adapter-Bn0uhplA-BzP2uPqJ.d.mts.map +1 -0
- package/dist/control-adapter-NZ2kKc4x.d.mts +13 -0
- package/dist/control-adapter-NZ2kKc4x.d.mts.map +1 -0
- package/dist/control-adapter-SlQkTEwT.mjs +16 -0
- package/dist/control-adapter-SlQkTEwT.mjs.map +1 -0
- package/dist/data-type-BFSpaotu.mjs +52 -0
- package/dist/data-type-BFSpaotu.mjs.map +1 -0
- package/dist/data-type-DJIvKQHf.d.mts +158 -0
- package/dist/data-type-DJIvKQHf.d.mts.map +1 -0
- package/dist/data-type-support-BhSoPUFj.mjs +9 -0
- package/dist/data-type-support-BhSoPUFj.mjs.map +1 -0
- package/dist/data-type-support-CXpA0ex-.d.mts +7 -0
- package/dist/data-type-support-CXpA0ex-.d.mts.map +1 -0
- package/dist/{db-D18PrXKW-DvTv4JFn.d.mts → db-D1d75IvM-D4mRDC6w.d.mts} +123 -128
- package/dist/db-D1d75IvM-D4mRDC6w.d.mts.map +1 -0
- package/dist/{ddl-types-CXx4vPz6-BsgrnSUY.d.mts → ddl-types-By5mT2_S-CdaaFvsX.d.mts} +24 -29
- package/dist/ddl-types-By5mT2_S-CdaaFvsX.d.mts.map +1 -0
- package/dist/default-mapping-CAOONlKQ-4m07nb-O.d.mts +39 -0
- package/dist/default-mapping-CAOONlKQ-4m07nb-O.d.mts.map +1 -0
- package/dist/default-table-name-BfFY8qYR-CWZFDX6v.mjs +9 -0
- package/dist/default-table-name-BfFY8qYR-CWZFDX6v.mjs.map +1 -0
- package/dist/derived-checks-D5HVRvqN-BJx1gwPA.mjs +1508 -0
- package/dist/derived-checks-D5HVRvqN-BJx1gwPA.mjs.map +1 -0
- package/dist/{derived-checks-DPdD01O0-DGqOFjs6.d.mts → derived-checks-DpPkO6Dt-9U9UJZOo.d.mts} +4 -4
- package/dist/derived-checks-DpPkO6Dt-9U9UJZOo.d.mts.map +1 -0
- package/dist/diagnostics-RHJxoiIk.mjs +23 -0
- package/dist/diagnostics-RHJxoiIk.mjs.map +1 -0
- package/dist/{diff-DbTNVm2f.d.mts → diff-1qHOLoUB.d.mts} +23 -10
- package/dist/diff-1qHOLoUB.d.mts.map +1 -0
- package/dist/diff-C1rFOhek.mjs +21 -0
- package/dist/diff-C1rFOhek.mjs.map +1 -0
- package/dist/{dist-ZK6oeI5e.mjs → dist-C8Y-PPuE.mjs} +36 -212
- package/dist/dist-C8Y-PPuE.mjs.map +1 -0
- package/dist/{dist-C_q1_QR9.mjs → dist-CHz1hF8M.mjs} +2 -2
- package/dist/dist-CHz1hF8M.mjs.map +1 -0
- package/dist/{dist-x6jvtkKM.mjs → dist-CMDXybwm.mjs} +2 -2
- package/dist/dist-CMDXybwm.mjs.map +1 -0
- package/dist/{driver-types-BQtRkOJ0-Bv2RPSfr.d.mts → driver-types-DRsYeq3j-BimeCnUk.d.mts} +11 -2
- package/dist/driver-types-DRsYeq3j-BimeCnUk.d.mts.map +1 -0
- package/dist/entity-handle-lowering-hook-BJZSlVVF.mjs +16 -0
- package/dist/entity-handle-lowering-hook-BJZSlVVF.mjs.map +1 -0
- package/dist/{entity-handle-lowering-hook-CIvRKBfa.d.mts → entity-handle-lowering-hook-BuvLtgFi.d.mts} +8 -11
- package/dist/entity-handle-lowering-hook-BuvLtgFi.d.mts.map +1 -0
- package/dist/{entity-kinds-B5cUFU22.d.mts → entity-kinds-BPG2xCZV.d.mts} +7 -7
- package/dist/entity-kinds-BPG2xCZV.d.mts.map +1 -0
- package/dist/{entity-kinds-D7vwoN_T-CCBwFJy0.mjs → entity-kinds-JR5SAm5h-DOH6VUtL.mjs} +31 -28
- package/dist/entity-kinds-JR5SAm5h-DOH6VUtL.mjs.map +1 -0
- package/dist/{errors-B5g0xWro-mWH2C07F.mjs → errors-B5g0xWro-C8plbqga.mjs} +2 -2
- package/dist/errors-B5g0xWro-C8plbqga.mjs.map +1 -0
- package/dist/errors.d.mts +1 -1
- package/dist/errors.d.mts.map +1 -1
- package/dist/errors.mjs +1 -1
- package/dist/exports-C3wGYtID-D65DEUTC.mjs +2389 -0
- package/dist/exports-C3wGYtID-D65DEUTC.mjs.map +1 -0
- package/dist/{expression-FJK6Ar-d.d.mts → expression-6ld_ZQL6-fOuazzzm.d.mts} +37 -16
- package/dist/expression-6ld_ZQL6-fOuazzzm.d.mts.map +1 -0
- package/dist/expression-CieaNuRM-B1uVqxwd.d.mts +22 -0
- package/dist/expression-CieaNuRM-B1uVqxwd.d.mts.map +1 -0
- package/dist/expression-D8HstQiB.d.mts +2 -0
- package/dist/{expression-CX5mTA-z.mjs → expression-impl-B-XNINxr-BhN2sysZ.mjs} +41 -18
- package/dist/expression-impl-B-XNINxr-BhN2sysZ.mjs.map +1 -0
- package/dist/{factories-SVor5xIT.mjs → factories-Crobuxwn.mjs} +27 -20
- package/dist/factories-Crobuxwn.mjs.map +1 -0
- package/dist/{factories-P3qBQhO-.d.mts → factories-DbNP9qfs.d.mts} +16 -10
- package/dist/factories-DbNP9qfs.d.mts.map +1 -0
- package/dist/family.d.mts +17 -13
- package/dist/family.mjs +17 -12
- package/dist/family__control-adapter.d.mts +3 -3
- package/dist/family__control-adapter.mjs +2 -1
- package/dist/family__control.d.mts +5 -4
- package/dist/family__control.mjs +4 -4
- package/dist/family__diff.d.mts +2 -3
- package/dist/family__diff.mjs +2 -2
- package/dist/family__ir.d.mts +1 -1
- package/dist/family__ir.mjs +2 -2
- package/dist/family__migration.d.mts +1 -1
- package/dist/family__migration.mjs +1 -1
- package/dist/family__pack.d.mts +2 -249
- package/dist/family__pack.mjs +3 -18
- package/dist/family__psl-build.d.mts +3 -0
- package/dist/family__psl-build.mjs +3 -0
- package/dist/family__psl-infer.d.mts +2 -2
- package/dist/family__psl-infer.mjs +2 -2
- package/dist/family__runtime.d.mts +2 -2
- package/dist/family__runtime.mjs +2 -2
- package/dist/family__verify.d.mts +1 -1
- package/dist/family__verify.mjs +1 -1
- package/dist/foreign-key-materialization-48P2V8on.d.mts +98 -0
- package/dist/foreign-key-materialization-48P2V8on.d.mts.map +1 -0
- package/dist/foreign-key-materialization-BM59w_Xg.mjs +287 -0
- package/dist/foreign-key-materialization-BM59w_Xg.mjs.map +1 -0
- package/dist/{foreign-key-C-iTPuRT-C9ip8zFx.d.mts → foreign-key-qkDFfG8t-TaK_GYWR.d.mts} +21 -5
- package/dist/foreign-key-qkDFfG8t-TaK_GYWR.d.mts.map +1 -0
- package/dist/functions-CsOoN7I3.mjs +88 -0
- package/dist/functions-CsOoN7I3.mjs.map +1 -0
- package/dist/functions-EW-RrRn3.d.mts +73 -0
- package/dist/functions-EW-RrRn3.d.mts.map +1 -0
- package/dist/generator-functions-D_qdqBV--Bq296cED.mjs +544 -0
- package/dist/generator-functions-D_qdqBV--Bq296cED.mjs.map +1 -0
- package/dist/index-7nHHQsAj.d.mts +606 -0
- package/dist/index-7nHHQsAj.d.mts.map +1 -0
- package/dist/{index-C5I8D-MB.d.mts → index-Nqc3OHR_.d.mts} +4 -5
- package/dist/index-Nqc3OHR_.d.mts.map +1 -0
- package/dist/index-equivalence-DswCiq5l-CGsyPP9B.mjs +109 -0
- package/dist/index-equivalence-DswCiq5l-CGsyPP9B.mjs.map +1 -0
- package/dist/{index-naming-DREt6js7-CRH27yUv.mjs → index-naming-BOcJT1B3-mG8Fd6KN.mjs} +35 -9
- package/dist/index-naming-BOcJT1B3-mG8Fd6KN.mjs.map +1 -0
- package/dist/{index-naming-Ct65z5Xk.d.mts → index-naming-Cs6wwia3.d.mts} +15 -5
- package/dist/index-naming-Cs6wwia3.d.mts.map +1 -0
- package/dist/index-reference-4wsdeB7v-DCwswK-q.d.mts +67 -0
- package/dist/index-reference-4wsdeB7v-DCwswK-q.d.mts.map +1 -0
- package/dist/index-reference-BQSrkRfT.mjs +55 -0
- package/dist/index-reference-BQSrkRfT.mjs.map +1 -0
- package/dist/index-reference-D8ewQRJr.d.mts +1 -0
- package/dist/index-type-validation-DJEMmmw0.mjs +42 -0
- package/dist/index-type-validation-DJEMmmw0.mjs.map +1 -0
- package/dist/index-type-validation-fGGwAHWc.d.mts +16 -0
- package/dist/index-type-validation-fGGwAHWc.d.mts.map +1 -0
- package/dist/index-types-H1O43iYT-BD0VwPqV.d.mts +66 -0
- package/dist/index-types-H1O43iYT-BD0VwPqV.d.mts.map +1 -0
- package/dist/index-types-pC_5vADQ-BOOBi14R.mjs +95 -0
- package/dist/index-types-pC_5vADQ-BOOBi14R.mjs.map +1 -0
- package/dist/index-types-snhtt_Fo.d.mts +1 -0
- package/dist/interpreter-D5qk4B---CG0C7kdx.mjs +2280 -0
- package/dist/interpreter-D5qk4B---CG0C7kdx.mjs.map +1 -0
- package/dist/{ir-Bghjt-FG.d.mts → ir-BvptQsFW.d.mts} +11 -5
- package/dist/ir-BvptQsFW.d.mts.map +1 -0
- package/dist/{ir-I-xciGUH.mjs → ir-DzsUDO8e.mjs} +2 -2
- package/dist/ir-DzsUDO8e.mjs.map +1 -0
- package/dist/{middleware-AhTz1BOW-th-Suxuf.d.mts → middleware-DHkW6pRr-DM6hd9iZ.d.mts} +5 -5
- package/dist/middleware-DHkW6pRr-DM6hd9iZ.d.mts.map +1 -0
- package/dist/middleware-gqy3l13N.d.mts +1 -0
- package/dist/{middleware-CMr4CHNz-DHIUdxlm.mjs → middleware-yBAfiVWn-DZO0vCRQ.mjs} +3 -3
- package/dist/middleware-yBAfiVWn-DZO0vCRQ.mjs.map +1 -0
- package/dist/{migration-CK4oePIo.mjs → migration-BJQjkqFz.mjs} +4 -4
- package/dist/migration-BJQjkqFz.mjs.map +1 -0
- package/dist/{migration-CjDRZNep.d.mts → migration-Cxmpzaz0.d.mts} +6 -6
- package/dist/migration-Cxmpzaz0.d.mts.map +1 -0
- package/dist/{naming-CV9j2pXl-KARaDReS.d.mts → naming-BcD36g9T-Mfe_xGGL.d.mts} +9 -14
- package/dist/naming-BcD36g9T-Mfe_xGGL.d.mts.map +1 -0
- package/dist/{naming-DKr4TJd7-Cszhq9RV.mjs → naming-bM5qm5PY-jOg3JFMb.mjs} +20 -31
- package/dist/naming-bM5qm5PY-jOg3JFMb.mjs.map +1 -0
- package/dist/{ddl-types-BGdnAbXo-DKPHPUGx.mjs → opaque-sql-Dset3kln-CtsPDTXn.mjs} +24 -11
- package/dist/opaque-sql-Dset3kln-CtsPDTXn.mjs.map +1 -0
- package/dist/operations.d.mts +1 -1
- package/dist/operations.mjs +1 -1
- package/dist/orm-client.d.mts +817 -267
- package/dist/orm-client.d.mts.map +1 -1
- package/dist/orm-client.mjs +4719 -2942
- package/dist/orm-client.mjs.map +1 -1
- package/dist/pack-DA8HZ2mo.d.mts +535 -0
- package/dist/pack-DA8HZ2mo.d.mts.map +1 -0
- package/dist/pack-gSvGQWqs.mjs +80 -0
- package/dist/pack-gSvGQWqs.mjs.map +1 -0
- package/dist/{plan-CDxduYaN-pLIyyJaB.d.mts → plan-Cr4azjnG-CuL8FqXC.d.mts} +12 -8
- package/dist/plan-Cr4azjnG-CuL8FqXC.d.mts.map +1 -0
- package/dist/{plan-Dh0LbYIv-Crx5-ThG.mjs → plan-Dh0LbYIv-ubBSdUgl.mjs} +2 -2
- package/dist/plan-Dh0LbYIv-ubBSdUgl.mjs.map +1 -0
- package/dist/plan-Di6Gs2JD.d.mts +2 -0
- package/dist/psl-attribute-parsing-BCsFWsSp-BJ-wGlY6.mjs +42 -0
- package/dist/psl-attribute-parsing-BCsFWsSp-BJ-wGlY6.mjs.map +1 -0
- package/dist/psl-build-DFBG6vhz.mjs +426 -0
- package/dist/psl-build-DFBG6vhz.mjs.map +1 -0
- package/dist/psl-build-RelubU2E.d.mts +112 -0
- package/dist/psl-build-RelubU2E.d.mts.map +1 -0
- package/dist/psl-column-resolution-ChZqioOc-BREg4J7d.d.mts +24 -0
- package/dist/psl-column-resolution-ChZqioOc-BREg4J7d.d.mts.map +1 -0
- package/dist/psl-field-resolution-C5KQ7kzP-B0NwuRWV.mjs +1960 -0
- package/dist/psl-field-resolution-C5KQ7kzP-B0NwuRWV.mjs.map +1 -0
- package/dist/psl-infer--g4i84Go.mjs +201 -0
- package/dist/psl-infer--g4i84Go.mjs.map +1 -0
- package/dist/psl-infer-DzoxPZGd.d.mts +80 -0
- package/dist/psl-infer-DzoxPZGd.d.mts.map +1 -0
- package/dist/psl-names-C3cwe0rg-D1CTmC3a.mjs +66 -0
- package/dist/psl-names-C3cwe0rg-D1CTmC3a.mjs.map +1 -0
- package/dist/{query-lane-context-Qa-eddrE-kuZ8Z86-.d.mts → query-lane-context-BCEoKy0_-CzmyavC9.d.mts} +20 -49
- package/dist/query-lane-context-BCEoKy0_-CzmyavC9.d.mts.map +1 -0
- package/dist/query-lane-context-VqH0mS9B.d.mts +1 -0
- package/dist/{referential-action-sql-DJ9ps6-S.d.mts → referential-action-sql-B2vKoUK6.d.mts} +3 -3
- package/dist/referential-action-sql-B2vKoUK6.d.mts.map +1 -0
- package/dist/{referential-action-sql-DSqkrySN.mjs → referential-action-sql-BLzCtTi8.mjs} +2 -2
- package/dist/referential-action-sql-BLzCtTi8.mjs.map +1 -0
- package/dist/relational-core.d.mts +14 -13
- package/dist/relational-core.mjs +8 -8
- package/dist/relational-core__aggregate-descriptor-registry.d.mts +2 -2
- package/dist/relational-core__aggregate-descriptor-registry.d.mts.map +1 -1
- package/dist/relational-core__aggregate-descriptor-registry.mjs +1 -1
- package/dist/relational-core__ast.d.mts +5 -5
- package/dist/relational-core__ast.mjs +5 -5
- package/dist/relational-core__codec-descriptor-registry.d.mts +7 -8
- package/dist/relational-core__codec-descriptor-registry.d.mts.map +1 -1
- package/dist/relational-core__codec-descriptor-registry.mjs +1 -1
- package/dist/relational-core__collection-methods.d.mts +3 -0
- package/dist/relational-core__contract-free.d.mts +18 -8
- package/dist/relational-core__contract-free.d.mts.map +1 -1
- package/dist/relational-core__contract-free.mjs +26 -10
- package/dist/relational-core__contract-free.mjs.map +1 -1
- package/dist/relational-core__expression.d.mts +4 -2
- package/dist/relational-core__expression.mjs +2 -2
- package/dist/relational-core__functions.d.mts +2 -0
- package/dist/relational-core__functions.mjs +2 -0
- package/dist/relational-core__index-reference.d.mts +3 -0
- package/dist/relational-core__index-reference.mjs +2 -0
- package/dist/relational-core__middleware.d.mts +2 -2
- package/dist/relational-core__middleware.mjs +1 -1
- package/dist/relational-core__plan.d.mts +4 -4
- package/dist/relational-core__plan.mjs +1 -1
- package/dist/relational-core__query-lane-context.d.mts +3 -3
- package/dist/relational-core__types.d.mts +2 -2
- package/dist/{resolve-storage-table-DZsfnzeW.mjs → resolve-storage-table-BHLQsOza.mjs} +3 -3
- package/dist/resolve-storage-table-BHLQsOza.mjs.map +1 -0
- package/dist/{resolve-storage-table-Nyrgk4h8.d.mts → resolve-storage-table-DCqtmnSU.d.mts} +4 -4
- package/dist/resolve-storage-table-DCqtmnSU.d.mts.map +1 -0
- package/dist/{runtime-tIHpGCcG.mjs → runtime-6tH1yOxK.mjs} +6 -6
- package/dist/runtime-6tH1yOxK.mjs.map +1 -0
- package/dist/{runtime-DpKF2Yu2.d.mts → runtime-CF6rAlE5.d.mts} +7 -8
- package/dist/runtime-CF6rAlE5.d.mts.map +1 -0
- package/dist/runtime.d.mts +5 -5
- package/dist/runtime.mjs +2 -1799
- package/dist/runtime__internal__prepared-query.d.mts +2 -2
- package/dist/runtime__internal__prepared-query.mjs +2 -2
- package/dist/{schema-differ-DpG_gnur-DFAtGezx.d.mts → schema-differ-DmP74bB8-tqHKiJ88.d.mts} +6 -6
- package/dist/schema-differ-DmP74bB8-tqHKiJ88.d.mts.map +1 -0
- package/dist/schema-ir.d.mts +2 -2
- package/dist/schema-ir.mjs +2 -2
- package/dist/schema-ir__naming.d.mts +1 -1
- package/dist/schema-ir__naming.mjs +1 -1
- package/dist/schema-ir__types.d.mts +3 -3
- package/dist/schema-ir__types.mjs +2 -2
- package/dist/{schema-verify-C_PEdlAr-Dxxjm6EM.mjs → schema-verify-C3wbdviw-DMjIubOr.mjs} +50 -8
- package/dist/schema-verify-C3wbdviw-DMjIubOr.mjs.map +1 -0
- package/dist/{serialized-index-CrgG8ct1-DG3JpHc7.d.mts → serialized-index-CrgG8ct1-DKVJ7TDX.d.mts} +4 -4
- package/dist/serialized-index-CrgG8ct1-DKVJ7TDX.d.mts.map +1 -0
- package/dist/{serialized-index-nBTwanKy-_ddEK4tk.mjs → serialized-index-DjCCnXB1-DMA7BtO2.mjs} +4 -4
- package/dist/serialized-index-DjCCnXB1-DMA7BtO2.mjs.map +1 -0
- package/dist/{sql-contract-serializer-2oBWuxTe-DKZTf2n8.mjs → sql-contract-serializer-sMY3prTx-D2BfrNxs.mjs} +41 -16
- package/dist/sql-contract-serializer-sMY3prTx-D2BfrNxs.mjs.map +1 -0
- package/dist/sql-data-type-D7M-YTTY-D2vRqDxn.mjs +400 -0
- package/dist/sql-data-type-D7M-YTTY-D2vRqDxn.mjs.map +1 -0
- package/dist/{sql-execution-plan--jKyLpe5-CMGhgO0M.d.mts → sql-execution-plan-3uxYjHyu-DLknM-Pj.d.mts} +3 -3
- package/dist/sql-execution-plan-3uxYjHyu-DLknM-Pj.d.mts.map +1 -0
- package/dist/sql-expression-B4BrhGPi.d.mts +62 -0
- package/dist/sql-expression-B4BrhGPi.d.mts.map +1 -0
- package/dist/sql-expression-CKgKznXS.mjs +137 -0
- package/dist/sql-expression-CKgKznXS.mjs.map +1 -0
- package/dist/{sql-index-ByAAE7K8-DKj2V86p.d.mts → sql-index-ByAAE7K8-Dqtn_vUL.d.mts} +4 -4
- package/dist/sql-index-ByAAE7K8-Dqtn_vUL.d.mts.map +1 -0
- package/dist/{sql-node-kEz6YFZo-v2F7delx.d.mts → sql-node-kEz6YFZo-1ogT6Cxt.d.mts} +2 -2
- package/dist/sql-node-kEz6YFZo-1ogT6Cxt.d.mts.map +1 -0
- package/dist/{sql-storage-8LqxeLAY-DH4DdUXx.d.mts → sql-storage-DeCAh5Hi-CEM-m8cs.d.mts} +19 -22
- package/dist/sql-storage-DeCAh5Hi-CEM-m8cs.d.mts.map +1 -0
- package/dist/{storage-table-DSeWszOL-CI-cItEK.d.mts → storage-table-Bf1ZjnxO-pUj6pyP0.d.mts} +17 -24
- package/dist/storage-table-Bf1ZjnxO-pUj6pyP0.d.mts.map +1 -0
- package/dist/{storage-table-ZzbR-xzQ-BRoTQE_2.mjs → storage-table-DDvN83mw-DkbBFmK9.mjs} +12 -9
- package/dist/storage-table-DDvN83mw-DkbBFmK9.mjs.map +1 -0
- package/dist/{storage-value-set-BGlj5Uus-CvZD--GG.d.mts → storage-value-set-BGlj5Uus-ny2k-0PA.d.mts} +3 -3
- package/dist/storage-value-set-BGlj5Uus-ny2k-0PA.d.mts.map +1 -0
- package/dist/transaction-state-BfXhs7D7-DhmbySW9.mjs +45 -0
- package/dist/transaction-state-BfXhs7D7-DhmbySW9.mjs.map +1 -0
- package/dist/transaction-state-DR3nKTmH-D29jmVE-.d.mts +115 -0
- package/dist/transaction-state-DR3nKTmH-D29jmVE-.d.mts.map +1 -0
- package/dist/types-B9wSEUsV.d.mts +1 -0
- package/dist/{types-CUsJrvEl.mjs → types-CTdSkl0s.mjs} +13 -6
- package/dist/types-CTdSkl0s.mjs.map +1 -0
- package/dist/types-CkAd8SWm.d.mts +57 -0
- package/dist/types-CkAd8SWm.d.mts.map +1 -0
- package/dist/{types-IqZMLrFC-DcH8v_u3.d.mts → types-Cq6ImLAB-RlU4jJAX.d.mts} +27 -41
- package/dist/types-Cq6ImLAB-RlU4jJAX.d.mts.map +1 -0
- package/dist/{types-YStFFkKs-D9UAmnON.d.mts → types-CuCxAQat-Dz8P4xyt.d.mts} +141 -86
- package/dist/types-CuCxAQat-Dz8P4xyt.d.mts.map +1 -0
- package/dist/types-DfKvtJwS-CrpWTGBJ.d.mts +273 -0
- package/dist/types-DfKvtJwS-CrpWTGBJ.d.mts.map +1 -0
- package/dist/{types-4YenawkP-CwaaZSid.mjs → types-DoyiTsjg-2YMhMJDA.mjs} +181 -80
- package/dist/types-DoyiTsjg-2YMhMJDA.mjs.map +1 -0
- package/dist/{types-v3qxLLxo-DCeKv7yY.d.mts → types-DriMIMNQ-BkbsW7w3.d.mts} +68 -34
- package/dist/types-DriMIMNQ-BkbsW7w3.d.mts.map +1 -0
- package/dist/{types-Dt4e_jC--COeP8xzN.mjs → types-NTQsD2MS-xcLtvKO9.mjs} +83 -17
- package/dist/types-NTQsD2MS-xcLtvKO9.mjs.map +1 -0
- package/dist/{types-CyxGtOOh-BggSa6Fe.d.mts → types-TXO7x1BA-CYYIY8NI.d.mts} +14 -14
- package/dist/types-TXO7x1BA-CYYIY8NI.d.mts.map +1 -0
- package/dist/types-ljUNyiWe.d.mts +1 -0
- package/dist/{unique-constraint-M5TlQnJQ-BiIHJ85k.d.mts → unique-constraint-M5TlQnJQ-qX-maNUV.d.mts} +3 -3
- package/dist/unique-constraint-M5TlQnJQ-qX-maNUV.d.mts.map +1 -0
- package/dist/{util-DQQgv2j1-D6INZaRG.mjs → util-BBgcP3gI-CpL-0VuC.mjs} +12 -3
- package/dist/util-BBgcP3gI-CpL-0VuC.mjs.map +1 -0
- package/dist/{validators-CrWD6bSP.mjs → validators-BwA7ttZM.mjs} +0 -0
- package/dist/validators-BwA7ttZM.mjs.map +1 -0
- package/dist/{validators-Belo8QqM.d.mts → validators-FJs8HvFr.d.mts} +54 -16
- package/dist/validators-FJs8HvFr.d.mts.map +1 -0
- package/dist/{value-set-derivation-hook-BhgGVtw0.d.mts → value-set-derivation-hook-3E437jPU.d.mts} +3 -3
- package/dist/value-set-derivation-hook-3E437jPU.d.mts.map +1 -0
- package/dist/{value-set-derivation-hook-Di9JZ0X7.mjs → value-set-derivation-hook-HVaxhALD.mjs} +2 -2
- package/dist/value-set-derivation-hook-HVaxhALD.mjs.map +1 -0
- package/dist/{verify-u0UTdZgD-DSAaz9rW.mjs → verify-BVk5bjdH-DhKm6hB3.mjs} +8 -7
- package/dist/verify-BVk5bjdH-DhKm6hB3.mjs.map +1 -0
- package/dist/{verify-zDRnw0Rn.d.mts → verify-DHXbuZPB.d.mts} +2 -2
- package/dist/verify-DHXbuZPB.d.mts.map +1 -0
- package/package.json +33 -22
- package/dist/aggregate-descriptor-registry-C7hel5O7.mjs.map +0 -1
- package/dist/ast-HFcfQZr-.d.mts +0 -206
- package/dist/ast-HFcfQZr-.d.mts.map +0 -1
- package/dist/ast-Lbl4VwqP.mjs +0 -325
- package/dist/ast-Lbl4VwqP.mjs.map +0 -1
- package/dist/authored-check-naming-BWBe-PVE.d.mts.map +0 -1
- package/dist/authored-check-naming-Hf9990DV.mjs.map +0 -1
- package/dist/authoring-type-constructors-Blqoa2Ua-DqvNCOb2.mjs +0 -316
- package/dist/authoring-type-constructors-Blqoa2Ua-DqvNCOb2.mjs.map +0 -1
- package/dist/canonicalization-hooks-CYnW_sGn.d.mts.map +0 -1
- package/dist/canonicalization-hooks-dmXkOR4a.mjs.map +0 -1
- package/dist/check-constraint-B7qGu6rc-HvQjjX82.d.mts.map +0 -1
- package/dist/codec-descriptor-registry-N0dhtKaH.mjs.map +0 -1
- package/dist/config-types-D9fdKG3g.d.mts.map +0 -1
- package/dist/config-types-gAm54C_v.mjs.map +0 -1
- package/dist/contract-builder-CG_tGDbB.d.mts +0 -1360
- package/dist/contract-builder-CG_tGDbB.d.mts.map +0 -1
- package/dist/contract-builder-D4a5dT7j.mjs.map +0 -1
- package/dist/contract-errors-BCN6RVI5-5IHBF_lg.mjs.map +0 -1
- package/dist/contract-view-BMR5IWk4.mjs.map +0 -1
- package/dist/contract-view-CPHxoAEX.d.mts.map +0 -1
- package/dist/contract__pack-types.d.mts +0 -2
- package/dist/control-D3cB5YQp.mjs +0 -1267
- package/dist/control-D3cB5YQp.mjs.map +0 -1
- package/dist/control-DTLJ1WtZ.d.mts +0 -945
- package/dist/control-DTLJ1WtZ.d.mts.map +0 -1
- package/dist/control-adapter-C99J7aEF-B7eQd7vD.d.mts.map +0 -1
- package/dist/control-adapter-MZJQiwcE.d.mts +0 -1
- package/dist/db-D18PrXKW-DvTv4JFn.d.mts.map +0 -1
- package/dist/ddl-types-BGdnAbXo-DKPHPUGx.mjs.map +0 -1
- package/dist/ddl-types-CXx4vPz6-BsgrnSUY.d.mts.map +0 -1
- package/dist/derived-checks-DFMRmiAu-DGfB8aS4.mjs +0 -1057
- package/dist/derived-checks-DFMRmiAu-DGfB8aS4.mjs.map +0 -1
- package/dist/derived-checks-DPdD01O0-DGqOFjs6.d.mts.map +0 -1
- package/dist/diff-B16bL_IR.mjs +0 -13
- package/dist/diff-B16bL_IR.mjs.map +0 -1
- package/dist/diff-DbTNVm2f.d.mts.map +0 -1
- package/dist/dist-C_q1_QR9.mjs.map +0 -1
- package/dist/dist-ZK6oeI5e.mjs.map +0 -1
- package/dist/dist-x6jvtkKM.mjs.map +0 -1
- package/dist/driver-types-BQtRkOJ0-Bv2RPSfr.d.mts.map +0 -1
- package/dist/entity-handle-lowering-hook-CIvRKBfa.d.mts.map +0 -1
- package/dist/entity-handle-lowering-hook-DwLIKNiS.mjs +0 -11
- package/dist/entity-handle-lowering-hook-DwLIKNiS.mjs.map +0 -1
- package/dist/entity-kinds-B5cUFU22.d.mts.map +0 -1
- package/dist/entity-kinds-D7vwoN_T-CCBwFJy0.mjs.map +0 -1
- package/dist/errors-B5g0xWro-mWH2C07F.mjs.map +0 -1
- package/dist/expression-CX5mTA-z.mjs.map +0 -1
- package/dist/expression-FJK6Ar-d.d.mts.map +0 -1
- package/dist/factories-P3qBQhO-.d.mts.map +0 -1
- package/dist/factories-SVor5xIT.mjs.map +0 -1
- package/dist/family__pack.d.mts.map +0 -1
- package/dist/family__pack.mjs.map +0 -1
- package/dist/foreign-key-C-iTPuRT-C9ip8zFx.d.mts.map +0 -1
- package/dist/foreign-key-materialization-CkvOzJWy.d.mts +0 -65
- package/dist/foreign-key-materialization-CkvOzJWy.d.mts.map +0 -1
- package/dist/foreign-key-materialization-Cu7-7LHl.mjs +0 -73
- package/dist/foreign-key-materialization-Cu7-7LHl.mjs.map +0 -1
- package/dist/index-C-vQOMY_.d.mts +0 -84
- package/dist/index-C-vQOMY_.d.mts.map +0 -1
- package/dist/index-C5I8D-MB.d.mts.map +0 -1
- package/dist/index-naming-Ct65z5Xk.d.mts.map +0 -1
- package/dist/index-naming-DREt6js7-CRH27yUv.mjs.map +0 -1
- package/dist/index-type-validation-COH4d78M.mjs +0 -17
- package/dist/index-type-validation-COH4d78M.mjs.map +0 -1
- package/dist/index-type-validation-CZ5L2lli.d.mts +0 -10
- package/dist/index-type-validation-CZ5L2lli.d.mts.map +0 -1
- package/dist/index-types-CNhHgKHi.d.mts +0 -1
- package/dist/index-types-DJQ_xwaE.mjs +0 -40
- package/dist/index-types-DJQ_xwaE.mjs.map +0 -1
- package/dist/index-types-DPVhsW0v-D-BikM4h.d.mts +0 -31
- package/dist/index-types-DPVhsW0v-D-BikM4h.d.mts.map +0 -1
- package/dist/interpreter-DyiUUAWh-DYdjIpiE.mjs +0 -3680
- package/dist/interpreter-DyiUUAWh-DYdjIpiE.mjs.map +0 -1
- package/dist/ir-Bghjt-FG.d.mts.map +0 -1
- package/dist/ir-I-xciGUH.mjs.map +0 -1
- package/dist/lane-query-builder.d.mts +0 -236
- package/dist/lane-query-builder.d.mts.map +0 -1
- package/dist/lane-query-builder.mjs +0 -67
- package/dist/lane-query-builder.mjs.map +0 -1
- package/dist/middleware--TtoxUiW.d.mts +0 -1
- package/dist/middleware-AhTz1BOW-th-Suxuf.d.mts.map +0 -1
- package/dist/middleware-CMr4CHNz-DHIUdxlm.mjs.map +0 -1
- package/dist/migration-CK4oePIo.mjs.map +0 -1
- package/dist/migration-CjDRZNep.d.mts.map +0 -1
- package/dist/naming-CV9j2pXl-KARaDReS.d.mts.map +0 -1
- package/dist/naming-DKr4TJd7-Cszhq9RV.mjs.map +0 -1
- package/dist/pack-types-BcLTpwbv.d.mts +0 -14
- package/dist/pack-types-BcLTpwbv.d.mts.map +0 -1
- package/dist/plan-BHLdb0Z7.d.mts +0 -2
- package/dist/plan-CDxduYaN-pLIyyJaB.d.mts.map +0 -1
- package/dist/plan-Dh0LbYIv-Crx5-ThG.mjs.map +0 -1
- package/dist/prepared-query-BJr50wPm-ChoqfJbX.mjs +0 -22
- package/dist/prepared-query-BJr50wPm-ChoqfJbX.mjs.map +0 -1
- package/dist/prepared-statement-9QpkE6JG-C430V3MO.d.mts +0 -529
- package/dist/prepared-statement-9QpkE6JG-C430V3MO.d.mts.map +0 -1
- package/dist/psl-infer-CCAD6FWA.d.mts +0 -119
- package/dist/psl-infer-CCAD6FWA.d.mts.map +0 -1
- package/dist/psl-infer-Dk5kgKre.mjs +0 -362
- package/dist/psl-infer-Dk5kgKre.mjs.map +0 -1
- package/dist/query-lane-context-Qa-eddrE-kuZ8Z86-.d.mts.map +0 -1
- package/dist/query-lane-context-XMvk7fmY.d.mts +0 -1
- package/dist/referential-action-sql-DJ9ps6-S.d.mts.map +0 -1
- package/dist/referential-action-sql-DSqkrySN.mjs.map +0 -1
- package/dist/resolve-storage-table-DZsfnzeW.mjs.map +0 -1
- package/dist/resolve-storage-table-Nyrgk4h8.d.mts.map +0 -1
- package/dist/runtime-DpKF2Yu2.d.mts.map +0 -1
- package/dist/runtime-tIHpGCcG.mjs.map +0 -1
- package/dist/runtime.mjs.map +0 -1
- package/dist/schema-differ-DpG_gnur-DFAtGezx.d.mts.map +0 -1
- package/dist/schema-verify-C_PEdlAr-Dxxjm6EM.mjs.map +0 -1
- package/dist/serialized-index-CrgG8ct1-DG3JpHc7.d.mts.map +0 -1
- package/dist/serialized-index-nBTwanKy-_ddEK4tk.mjs.map +0 -1
- package/dist/sql-contract-serializer-2oBWuxTe-DKZTf2n8.mjs.map +0 -1
- package/dist/sql-execution-plan--jKyLpe5-CMGhgO0M.d.mts.map +0 -1
- package/dist/sql-index-ByAAE7K8-DKj2V86p.d.mts.map +0 -1
- package/dist/sql-node-kEz6YFZo-v2F7delx.d.mts.map +0 -1
- package/dist/sql-storage-8LqxeLAY-DH4DdUXx.d.mts.map +0 -1
- package/dist/storage-table-DSeWszOL-CI-cItEK.d.mts.map +0 -1
- package/dist/storage-table-ZzbR-xzQ-BRoTQE_2.mjs.map +0 -1
- package/dist/storage-value-set-BGlj5Uus-CvZD--GG.d.mts.map +0 -1
- package/dist/timestamp-now-generator-DRXygu32-DN9Qb1uI.mjs +0 -173
- package/dist/timestamp-now-generator-DRXygu32-DN9Qb1uI.mjs.map +0 -1
- package/dist/types-4YenawkP-CwaaZSid.mjs.map +0 -1
- package/dist/types-B0msOnBM.d.mts +0 -1
- package/dist/types-BDUG29Df-LE85dIXP.d.mts +0 -161
- package/dist/types-BDUG29Df-LE85dIXP.d.mts.map +0 -1
- package/dist/types-CUsJrvEl.mjs.map +0 -1
- package/dist/types-CyxGtOOh-BggSa6Fe.d.mts.map +0 -1
- package/dist/types-Dt4e_jC--COeP8xzN.mjs.map +0 -1
- package/dist/types-Dwcw0F8X.d.mts +0 -1
- package/dist/types-IqZMLrFC-DcH8v_u3.d.mts.map +0 -1
- package/dist/types-UcHa2cTe.d.mts +0 -17
- package/dist/types-UcHa2cTe.d.mts.map +0 -1
- package/dist/types-YStFFkKs-D9UAmnON.d.mts.map +0 -1
- package/dist/types-v3qxLLxo-DCeKv7yY.d.mts.map +0 -1
- package/dist/unique-constraint-M5TlQnJQ-BiIHJ85k.d.mts.map +0 -1
- package/dist/util-DQQgv2j1-D6INZaRG.mjs.map +0 -1
- package/dist/validators-Belo8QqM.d.mts.map +0 -1
- package/dist/validators-CrWD6bSP.mjs.map +0 -1
- package/dist/value-set-derivation-hook-BhgGVtw0.d.mts.map +0 -1
- package/dist/value-set-derivation-hook-Di9JZ0X7.mjs.map +0 -1
- package/dist/verify-u0UTdZgD-DSAaz9rW.mjs.map +0 -1
- package/dist/verify-zDRnw0Rn.d.mts.map +0 -1
- /package/dist/{contract__pack-types.mjs → relational-core__collection-methods.mjs} +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { f as normalizeIndexOptionValue, l as nameOf } from "./naming-
|
|
2
|
-
import { IRNodeBase, freezeNode } from "@prisma/orm-framework/components/ir";
|
|
3
|
-
import { InternalError } from "@prisma/orm-framework/utils/internal-error";
|
|
1
|
+
import { f as normalizeIndexOptionValue, l as nameOf } from "./naming-bM5qm5PY-jOg3JFMb.mjs";
|
|
4
2
|
import { ifDefined } from "@prisma/orm-framework/utils/defined";
|
|
3
|
+
import { IRNodeBase, freezeNode } from "@prisma/orm-framework/components/ir";
|
|
4
|
+
import { dataTypeValuesEqual } from "@prisma/orm-framework/components/codec";
|
|
5
|
+
import { canonicalizeJson } from "@prisma/orm-framework/components/utils";
|
|
5
6
|
import { blindCast } from "@prisma/orm-framework/utils/casts";
|
|
7
|
+
import { InternalError } from "@prisma/orm-framework/utils/internal-error";
|
|
6
8
|
import { canonicalStringify } from "@prisma/orm-framework/utils/canonical-stringify";
|
|
7
9
|
import { isArrayEqual } from "@prisma/orm-framework/utils/array-equal";
|
|
8
|
-
//#region ../../../2-sql/1-core/schema-ir/dist/types-
|
|
10
|
+
//#region ../../../2-sql-family/1-core/schema-ir/dist/types-DoyiTsjg.mjs
|
|
9
11
|
/**
|
|
10
12
|
* The `nodeKind` discriminant for each relational schema-diff leaf node.
|
|
11
13
|
* Each node carries a unique value; the differ pairs siblings by `id`, and
|
|
@@ -220,53 +222,17 @@ var SqlCheckConstraintIR = class SqlCheckConstraintIR extends SqlSchemaIRNode {
|
|
|
220
222
|
return this.expression === node.expression;
|
|
221
223
|
}
|
|
222
224
|
};
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
* relational walk's `columnDefaultsEqual` normalized branch: kinds must
|
|
226
|
-
* match; literal values are normalized (Date and temporal-typed strings to
|
|
227
|
-
* ISO instants) then compared canonically (JSON objects match their
|
|
228
|
-
* canonical string form); function expressions compare case- and
|
|
229
|
-
* whitespace-insensitively.
|
|
230
|
-
*
|
|
231
|
-
* `nativeType` provides the temporal-normalization context (the actual
|
|
232
|
-
* side's resolved native type in a diff comparison).
|
|
233
|
-
*/
|
|
234
|
-
function resolvedDefaultsEqual(expected, actual, nativeType) {
|
|
235
|
-
if (expected.kind !== actual.kind) return false;
|
|
236
|
-
if (expected.kind === "literal" && actual.kind === "literal") return literalValuesEqual(normalizeLiteralValue(expected.value, nativeType), normalizeLiteralValue(actual.value, nativeType));
|
|
237
|
-
if (expected.kind === "function" && actual.kind === "function") return normalizeFunctionExpression(expected.expression) === normalizeFunctionExpression(actual.expression);
|
|
238
|
-
return false;
|
|
239
|
-
}
|
|
240
|
-
function normalizeFunctionExpression(expression) {
|
|
241
|
-
return expression.toLowerCase().replace(/\s+/g, "");
|
|
242
|
-
}
|
|
243
|
-
function isTemporalNativeType(nativeType) {
|
|
244
|
-
if (!nativeType) return false;
|
|
245
|
-
const normalized = nativeType.toLowerCase();
|
|
246
|
-
return normalized.includes("timestamp") || normalized === "date";
|
|
225
|
+
function isList(value) {
|
|
226
|
+
return Array.isArray(value);
|
|
247
227
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
if (
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
function literalValuesEqual(a, b) {
|
|
257
|
-
if (a === b) return true;
|
|
258
|
-
if (typeof a === "object" && a !== null && typeof b === "object" && b !== null) return canonicalStringify(a) === canonicalStringify(b);
|
|
259
|
-
if (typeof a === "object" && a !== null && typeof b === "string") try {
|
|
260
|
-
return canonicalStringify(a) === canonicalStringify(JSON.parse(b));
|
|
261
|
-
} catch {
|
|
262
|
-
return false;
|
|
263
|
-
}
|
|
264
|
-
if (typeof a === "string" && typeof b === "object" && b !== null) try {
|
|
265
|
-
return canonicalStringify(JSON.parse(a)) === canonicalStringify(b);
|
|
266
|
-
} catch {
|
|
267
|
-
return false;
|
|
268
|
-
}
|
|
269
|
-
return false;
|
|
228
|
+
/** Whether two defaults are one value: the same type, parameters and value, element by element for a list. */
|
|
229
|
+
function sqlDefaultValuesEqual(a, b) {
|
|
230
|
+
if (!isList(a) || !isList(b)) return !isList(a) && !isList(b) && dataTypeValuesEqual(a, b);
|
|
231
|
+
return a.length === b.length && a.every((element, index) => {
|
|
232
|
+
const other = b[index];
|
|
233
|
+
if (element === null || other === null || other === void 0) return element === other;
|
|
234
|
+
return dataTypeValuesEqual(element, other);
|
|
235
|
+
});
|
|
270
236
|
}
|
|
271
237
|
/**
|
|
272
238
|
* Schema-diff node for a column's default value. The default is the one
|
|
@@ -287,8 +253,13 @@ var SqlColumnDefaultIR = class SqlColumnDefaultIR extends SqlSchemaIRNode {
|
|
|
287
253
|
super();
|
|
288
254
|
if (input.resolved !== void 0) this.resolved = input.resolved;
|
|
289
255
|
if (input.raw !== void 0) this.raw = input.raw;
|
|
290
|
-
|
|
256
|
+
defineNonEnumerable(this, "authored", input.authored);
|
|
257
|
+
defineNonEnumerable(this, "value", input.value);
|
|
258
|
+
defineNonEnumerable(this, "unreadable", input.unreadable);
|
|
259
|
+
defineNonEnumerable(this, "expressionValue", input.expressionValue);
|
|
291
260
|
defineNonEnumerable(this, "many", input.many);
|
|
261
|
+
defineNonEnumerable(this, "codecRef", input.codecRef);
|
|
262
|
+
defineNonEnumerable(this, "sqlExpressionLiteralFor", input.sqlExpressionLiteralFor);
|
|
292
263
|
freezeNode(this);
|
|
293
264
|
}
|
|
294
265
|
get id() {
|
|
@@ -301,20 +272,90 @@ var SqlColumnDefaultIR = class SqlColumnDefaultIR extends SqlSchemaIRNode {
|
|
|
301
272
|
return node.nodeKind === RelationalSchemaNodeKind.columnDefault;
|
|
302
273
|
}
|
|
303
274
|
/**
|
|
304
|
-
*
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
275
|
+
* Compares with `this` as the expected side. Two literals compare as values of the column's type
|
|
276
|
+
* when both sides hold one, and as canonical JSON otherwise; a `Date` the column's codec could not
|
|
277
|
+
* read into a value equals nothing. Two expressions compare as text, with
|
|
278
|
+
* case and whitespace ignored outside quotes. An expected expression that writes a literal, read by
|
|
279
|
+
* the column's codec during introspection, matches a reported literal when the two values are
|
|
280
|
+
* equal; when the codec could not read one of them, it compares with the reported text. A resolved
|
|
281
|
+
* side against a raw-only side is a mismatch; two raw-only nodes compare their text.
|
|
309
282
|
*/
|
|
310
283
|
isEqualTo(other) {
|
|
311
284
|
const node = blindCast(other);
|
|
312
285
|
assertNode(node, "SqlColumnDefaultIR", SqlColumnDefaultIR.is);
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
return
|
|
286
|
+
const expected = this.resolved;
|
|
287
|
+
const actual = node.resolved;
|
|
288
|
+
if (expected?.kind === "function" && actual === void 0) return node.raw !== void 0 && sameExpression(expected.expression, node.raw);
|
|
289
|
+
if (expected === void 0 || actual === void 0) return expected === actual && this.raw === node.raw;
|
|
290
|
+
if (expected.kind === "function") {
|
|
291
|
+
if (actual.kind === "function") return sameExpression(expected.expression, actual.expression);
|
|
292
|
+
if (node.value !== void 0 && node.expressionValue !== void 0) return sqlDefaultValuesEqual(node.expressionValue, node.value);
|
|
293
|
+
return node.raw !== void 0 && sameExpression(expected.expression, node.raw);
|
|
294
|
+
}
|
|
295
|
+
if (actual.kind !== "literal") return false;
|
|
296
|
+
if (this.value !== void 0 && node.value !== void 0) return sqlDefaultValuesEqual(this.value, node.value);
|
|
297
|
+
if (expected.value instanceof Date || actual.value instanceof Date) return false;
|
|
298
|
+
return canonicalStringify(expected.value) === canonicalStringify(actual.value);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* For two default expressions, the text the database reads back, since it may store an expression
|
|
302
|
+
* in a form of its own. Otherwise why the column's codec could not read the database's default, or
|
|
303
|
+
* the value each side holds.
|
|
304
|
+
*/
|
|
305
|
+
explainMismatch(actual) {
|
|
306
|
+
if (!(actual instanceof SqlColumnDefaultIR)) return void 0;
|
|
307
|
+
if (actual.unreadable !== void 0) return {
|
|
308
|
+
text: actual.unreadable,
|
|
309
|
+
cause: "differs"
|
|
310
|
+
};
|
|
311
|
+
return this.storedExpressionForm(actual) ?? {
|
|
312
|
+
text: `The contract holds ${describeDefault(this)}, and the database holds ${describeDefault(actual)}.`,
|
|
313
|
+
cause: "differs"
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
storedExpressionForm(actual) {
|
|
317
|
+
if (this.resolved?.kind !== "function" || actual.resolved?.kind !== "function") return void 0;
|
|
318
|
+
const literalFor = this.sqlExpressionLiteralFor;
|
|
319
|
+
const shown = (text) => literalFor?.(text) ?? JSON.stringify(text);
|
|
320
|
+
const stored = actual.raw ?? actual.resolved.expression;
|
|
321
|
+
const written = literalFor === void 0 ? stored : [stored, actual.resolved.expression].find((text) => literalFor(text) !== void 0);
|
|
322
|
+
const advice = written === void 0 ? "No `sql` literal writes that text unchanged, so change the default's SQL in the contract until the database stores it as written." : `If they do, write the default as ${shown(written)}.`;
|
|
323
|
+
return {
|
|
324
|
+
text: `The database reads this default back as ${shown(written ?? stored)}; the contract declares ${shown(this.resolved.expression)}. The database may store a default expression in its own form, so the two can mean the same. ${advice}`,
|
|
325
|
+
cause: "possibly-equivalent"
|
|
326
|
+
};
|
|
316
327
|
}
|
|
317
328
|
};
|
|
329
|
+
/** A default as a person reads it: a literal as JSON, the value its type read when there is one, an expression as its text, and the text the database reports beside a value read from it. */
|
|
330
|
+
function describeDefault(node) {
|
|
331
|
+
const resolved = node.resolved;
|
|
332
|
+
if (resolved === void 0) return node.raw ?? "no default";
|
|
333
|
+
if (resolved.kind === "function") return resolved.expression;
|
|
334
|
+
const shown = JSON.stringify(node.value === void 0 ? resolved.value : jsonOfDefaultValue(node.value));
|
|
335
|
+
return node.raw === void 0 || node.raw === shown ? shown : `${shown} (${node.raw})`;
|
|
336
|
+
}
|
|
337
|
+
function isDefaultList(value) {
|
|
338
|
+
return Array.isArray(value);
|
|
339
|
+
}
|
|
340
|
+
function jsonOfDefaultValue(value) {
|
|
341
|
+
return isDefaultList(value) ? value.map((element) => element === null ? null : element.value) : value.value;
|
|
342
|
+
}
|
|
343
|
+
function sameExpression(a, b) {
|
|
344
|
+
return comparableExpression(a) === comparableExpression(b);
|
|
345
|
+
}
|
|
346
|
+
/** The expression with case and whitespace dropped outside quotes; a quoted literal or identifier keeps both, since they change what it means. */
|
|
347
|
+
function comparableExpression(expression) {
|
|
348
|
+
let result = "";
|
|
349
|
+
let quote;
|
|
350
|
+
for (const char of expression) if (quote !== void 0) {
|
|
351
|
+
result += char;
|
|
352
|
+
if (char === quote) quote = void 0;
|
|
353
|
+
} else if (char === "'" || char === "\"") {
|
|
354
|
+
quote = char;
|
|
355
|
+
result += char;
|
|
356
|
+
} else if (!/\s/.test(char)) result += char.toLowerCase();
|
|
357
|
+
return result;
|
|
358
|
+
}
|
|
318
359
|
/**
|
|
319
360
|
* Schema IR node for a single column on a table, as observed by
|
|
320
361
|
* introspection. Unlike the Contract IR `StorageColumn`, this carries
|
|
@@ -324,31 +365,34 @@ var SqlColumnDefaultIR = class SqlColumnDefaultIR extends SqlSchemaIRNode {
|
|
|
324
365
|
*
|
|
325
366
|
* Implements `DiffableNode` so a column is directly a table's diff-tree
|
|
326
367
|
* child: `id` is the column name (unique among a table's columns); `isEqualTo`
|
|
327
|
-
* compares this column's own attributes only
|
|
328
|
-
*
|
|
329
|
-
* derivation/introspection), the comparison uses the resolved values —
|
|
330
|
-
* resolved native type, nullability, and structured default equality per
|
|
331
|
-
* the relational walk's `columnDefaultsEqual` semantics, with `this` as the
|
|
332
|
-
* expected side. Otherwise it falls back to comparing raw fields.
|
|
368
|
+
* compares this column's own attributes only, never its default, which is a
|
|
369
|
+
* child node: the type by {@link sqlColumnTypesEqual}, and nullability.
|
|
333
370
|
*/
|
|
334
371
|
var SqlColumnIR = class SqlColumnIR extends SqlSchemaIRNode {
|
|
335
372
|
nodeKind = RelationalSchemaNodeKind.column;
|
|
336
373
|
name;
|
|
337
|
-
|
|
374
|
+
/** See {@link SqlColumnIRInput.typeText}. */
|
|
375
|
+
typeText;
|
|
338
376
|
nullable;
|
|
339
377
|
constructor(input) {
|
|
340
378
|
super();
|
|
341
379
|
this.name = input.name;
|
|
342
|
-
this.
|
|
380
|
+
this.typeText = input.typeText;
|
|
343
381
|
this.nullable = input.nullable;
|
|
344
382
|
if (input.default !== void 0) this.default = input.default;
|
|
345
383
|
if (input.annotations !== void 0) this.annotations = input.annotations;
|
|
346
384
|
if (input.many !== void 0) this.many = input.many;
|
|
347
|
-
if (input.resolvedNativeType !== void 0) this.resolvedNativeType = input.resolvedNativeType;
|
|
348
385
|
if (input.resolvedDefault !== void 0) this.resolvedDefault = input.resolvedDefault;
|
|
386
|
+
defineNonEnumerable(this, "authoredDefault", input.authoredDefault);
|
|
349
387
|
defineNonEnumerable(this, "codecRef", input.codecRef);
|
|
350
|
-
defineNonEnumerable(this, "
|
|
351
|
-
defineNonEnumerable(this, "
|
|
388
|
+
defineNonEnumerable(this, "storedType", input.storedType);
|
|
389
|
+
defineNonEnumerable(this, "storedTypeParams", input.storedTypeParams);
|
|
390
|
+
defineNonEnumerable(this, "defaultValue", input.defaultValue);
|
|
391
|
+
defineNonEnumerable(this, "defaultUnreadable", input.defaultUnreadable);
|
|
392
|
+
defineNonEnumerable(this, "defaultExpressionValue", input.defaultExpressionValue);
|
|
393
|
+
defineNonEnumerable(this, "sqlExpressionLiteralFor", input.sqlExpressionLiteralFor);
|
|
394
|
+
defineNonEnumerable(this, "reportedType", input.reportedType);
|
|
395
|
+
defineNonEnumerable(this, "catalogText", input.catalogText);
|
|
352
396
|
freezeNode(this);
|
|
353
397
|
}
|
|
354
398
|
get id() {
|
|
@@ -365,27 +409,84 @@ var SqlColumnIR = class SqlColumnIR extends SqlSchemaIRNode {
|
|
|
365
409
|
return [new SqlColumnDefaultIR({
|
|
366
410
|
...ifDefined("resolved", this.resolvedDefault),
|
|
367
411
|
...ifDefined("raw", this.default),
|
|
368
|
-
...ifDefined("
|
|
369
|
-
...ifDefined("
|
|
412
|
+
...ifDefined("authored", this.authoredDefault),
|
|
413
|
+
...ifDefined("value", this.defaultValue),
|
|
414
|
+
...ifDefined("unreadable", this.defaultUnreadable),
|
|
415
|
+
...ifDefined("expressionValue", this.defaultExpressionValue),
|
|
416
|
+
...ifDefined("many", this.many ?? this.codecRef?.many),
|
|
417
|
+
...ifDefined("codecRef", this.codecRef),
|
|
418
|
+
...ifDefined("sqlExpressionLiteralFor", this.sqlExpressionLiteralFor)
|
|
370
419
|
})];
|
|
371
420
|
}
|
|
421
|
+
/** This column under another name, with every other field as it is. */
|
|
422
|
+
withName(name) {
|
|
423
|
+
const fields = Object.fromEntries(Object.getOwnPropertyNames(this).map((key) => [key, Reflect.get(this, key)]));
|
|
424
|
+
return new SqlColumnIR({
|
|
425
|
+
...blindCast(fields),
|
|
426
|
+
name
|
|
427
|
+
});
|
|
428
|
+
}
|
|
372
429
|
static is(node) {
|
|
373
430
|
return node.nodeKind === RelationalSchemaNodeKind.column;
|
|
374
431
|
}
|
|
375
432
|
/**
|
|
376
|
-
* Compares the column's own attributes only — the default lives on the
|
|
377
|
-
* child node. When both sides carry `resolvedNativeType`, the resolved
|
|
378
|
-
* value governs (array-ness rides on its `[]` suffix); otherwise raw
|
|
379
|
-
* fields compare.
|
|
433
|
+
* Compares the column's own attributes only — the default lives on the child node: the type, by {@link sqlColumnTypesEqual}, and nullability.
|
|
380
434
|
*/
|
|
381
435
|
isEqualTo(other) {
|
|
382
436
|
const node = blindCast(other);
|
|
383
437
|
assertNode(node, "SqlColumnIR", SqlColumnIR.is);
|
|
384
|
-
|
|
385
|
-
|
|
438
|
+
return sqlColumnTypesEqual(this, node) && this.nullable === node.nullable;
|
|
439
|
+
}
|
|
440
|
+
/** Why `actual` is not this column: the two types as written and reported, or the nullability of each. The two sides always hold different values. */
|
|
441
|
+
explainMismatch(actual) {
|
|
442
|
+
if (actual === void 0) return void 0;
|
|
443
|
+
const node = blindCast(actual);
|
|
444
|
+
assertNode(node, "SqlColumnIR", SqlColumnIR.is);
|
|
445
|
+
const texts = catalogTexts(this, node);
|
|
446
|
+
if (texts !== void 0 && texts.expected !== texts.actual) return differs(`The column type is "${texts.expected}", but the database reports "${texts.actual}". A type named by its catalog text is compared with the text the database reports, exactly.`);
|
|
447
|
+
if (node.storedType === void 0 && node.reportedType !== void 0) return differs(node.typeText === "" ? "The database column has no declared type." : `The database column is ${shownTypeOf(node)}, which no data type in the configured stack declares.`);
|
|
448
|
+
if (!sqlColumnTypesEqual(this, node)) return differs(`The contract column is ${shownTypeOf(this)} and the database column is ${shownTypeOf(node)}.`);
|
|
449
|
+
if (this.nullable !== node.nullable) return differs(`The contract column is ${nullability(this)} and the database column is ${nullability(node)}.`);
|
|
386
450
|
}
|
|
387
451
|
};
|
|
388
452
|
/**
|
|
453
|
+
* Whether two columns have the same type: both have a stored type, the two are one data type, their parameters are equal as canonical JSON, and both or neither are lists. A column no data type claims has no stored type and never has the same type as another. ADR 254.
|
|
454
|
+
*
|
|
455
|
+
* When either column carries a {@link SqlColumnIR.catalogText}, the two compare by text instead, exactly, with `[]` for a list: that text against the other column's catalog text or reported text. ADR 273.
|
|
456
|
+
*/
|
|
457
|
+
function sqlColumnTypesEqual(a, b) {
|
|
458
|
+
const texts = catalogTexts(a, b);
|
|
459
|
+
if (texts !== void 0) return texts.expected === texts.actual;
|
|
460
|
+
return a.storedType !== void 0 && b.storedType !== void 0 && a.storedType.id === b.storedType.id && canonicalizeJson(a.storedTypeParams ?? {}) === canonicalizeJson(b.storedTypeParams ?? {}) && Boolean(a.many) === Boolean(b.many);
|
|
461
|
+
}
|
|
462
|
+
/** The text a column's type compares by, with `[]` for a list, when it has one: its catalog text, or the text the database reports. */
|
|
463
|
+
function comparedText(column) {
|
|
464
|
+
const text = column.catalogText ?? column.reportedType?.text;
|
|
465
|
+
return text === void 0 ? void 0 : `${text}${column.many === true ? "[]" : ""}`;
|
|
466
|
+
}
|
|
467
|
+
/** The two texts a pair of columns compares by, when either carries a catalog text. A side with no text to compare gives the empty text, which no catalog text equals. */
|
|
468
|
+
function catalogTexts(expected, actual) {
|
|
469
|
+
if (expected.catalogText === void 0 && actual.catalogText === void 0) return void 0;
|
|
470
|
+
return {
|
|
471
|
+
expected: comparedText(expected) ?? "",
|
|
472
|
+
actual: comparedText(actual) ?? ""
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
/** The column's type as the contract writes it, or as introspection gives it, with `[]` for a list, in double quotes unless the text has double quotes of its own, as `"char"` does. */
|
|
476
|
+
function shownTypeOf(column) {
|
|
477
|
+
const text = `${column.typeText}${column.many === true ? "[]" : ""}`;
|
|
478
|
+
return text.includes("\"") ? text : `"${text}"`;
|
|
479
|
+
}
|
|
480
|
+
function differs(text) {
|
|
481
|
+
return {
|
|
482
|
+
text,
|
|
483
|
+
cause: "differs"
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
function nullability(column) {
|
|
487
|
+
return column.nullable ? "nullable" : "not nullable";
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
389
490
|
* Schema IR node for a foreign-key constraint as observed by
|
|
390
491
|
* introspection. The `referencedTable` / `referencedColumns` field
|
|
391
492
|
* names match the introspection vocabulary (`pg_constraint.confkey`,
|
|
@@ -715,6 +816,6 @@ var SqlSchemaIR = class extends SqlSchemaIRNode {
|
|
|
715
816
|
}
|
|
716
817
|
};
|
|
717
818
|
//#endregion
|
|
718
|
-
export { SqlColumnIR as a, SqlSchemaIR as c, SqlUniqueIR as d, assertNode as f, relationalNodeGranularity as h, SqlColumnDefaultIR as i, SqlSchemaIRNode as l, relationalNodeEntityKind as m, RelationalSchemaNodeKind as n, SqlForeignKeyIR as o, defineNonEnumerable as p, SqlCheckConstraintIR as r, SqlIndexIR as s, PrimaryKey as t, SqlTableIR as u };
|
|
819
|
+
export { sqlDefaultValuesEqual as _, SqlColumnIR as a, SqlSchemaIR as c, SqlUniqueIR as d, assertNode as f, sqlColumnTypesEqual as g, relationalNodeGranularity as h, SqlColumnDefaultIR as i, SqlSchemaIRNode as l, relationalNodeEntityKind as m, RelationalSchemaNodeKind as n, SqlForeignKeyIR as o, defineNonEnumerable as p, SqlCheckConstraintIR as r, SqlIndexIR as s, PrimaryKey as t, SqlTableIR as u };
|
|
719
820
|
|
|
720
|
-
//# sourceMappingURL=types-
|
|
821
|
+
//# sourceMappingURL=types-DoyiTsjg-2YMhMJDA.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-DoyiTsjg-2YMhMJDA.mjs","names":[],"sources":["../../../../2-sql-family/1-core/schema-ir/dist/types-DoyiTsjg.mjs"],"sourcesContent":["import { f as normalizeIndexOptionValue, l as nameOf } from \"./naming-bM5qm5PY.mjs\";\nimport { IRNodeBase, freezeNode } from \"@internal/framework-components/ir\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { canonicalStringify } from \"@internal/utils/canonical-stringify\";\nimport { dataTypeValuesEqual } from \"@internal/framework-components/codec\";\nimport { canonicalizeJson } from \"@internal/framework-components/utils\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { isArrayEqual } from \"@internal/utils/array-equal\";\n//#region src/ir/schema-node-kinds.ts\n/**\n* The `nodeKind` discriminant for each relational schema-diff leaf node.\n* Each node carries a unique value; the differ pairs siblings by `id`, and\n* these kinds distinguish the node types that appear as `PostgresTableSchemaNode`\n* children (columns, primary key, foreign keys, uniques, indexes, checks) from\n* each other and from the RLS policy/role kinds a target defines separately.\n*/\nconst RelationalSchemaNodeKind = {\n\tschema: \"sql-schema\",\n\ttable: \"sql-table\",\n\tcolumn: \"sql-column\",\n\tcolumnDefault: \"sql-column-default\",\n\tprimaryKey: \"sql-primary-key\",\n\tforeignKey: \"sql-foreign-key\",\n\tunique: \"sql-unique\",\n\tindex: \"sql-index\",\n\tcheck: \"sql-check-constraint\"\n};\n/**\n* The one real map from a relational `nodeKind` to the framework-neutral\n* {@link DiffSubjectGranularity} its diff issues carry — the SQL family's\n* post-diff filters (issue category, strict-mode gating) and the framework\n* aggregate's unclaimed-elements sweep key on the granularity, never on the\n* `nodeKind` spelling and never on anything stamped on the node. Resolution\n* is by `nodeKind` equality against this map, not a suffix string match.\n* Target-specific node kinds (Postgres namespace/table/policy/role) are\n* outside this family layer's vocabulary and map their own kinds directly.\n*/\nconst RELATIONAL_NODE_GRANULARITY = {\n\t[RelationalSchemaNodeKind.schema]: \"structural\",\n\t[RelationalSchemaNodeKind.table]: \"entity\",\n\t[RelationalSchemaNodeKind.column]: \"field\",\n\t[RelationalSchemaNodeKind.columnDefault]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.primaryKey]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.foreignKey]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.unique]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.index]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.check]: \"auxiliary\"\n};\nfunction isRelationalSchemaNodeKind(nodeKind) {\n\treturn Object.hasOwn(RELATIONAL_NODE_GRANULARITY, nodeKind);\n}\n/**\n* Looks up the subject granularity for a relational `nodeKind`. Throws for a\n* `nodeKind` outside this map (a target-specific kind, e.g. Postgres's\n* namespace/table/policy/role) — those map their own kinds directly rather\n* than through this family-level map.\n*/\nfunction relationalNodeGranularity(nodeKind) {\n\tif (!isRelationalSchemaNodeKind(nodeKind)) throw new InternalError(`relationalNodeGranularity: unrecognized relational node kind \"${nodeKind}\"`);\n\treturn RELATIONAL_NODE_GRANULARITY[nodeKind];\n}\n/**\n* The one real map from a relational `nodeKind` to its storage `entityKind`\n* — the same vocabulary the contract storage's `entries` dictionary keys use\n* (`elementCoordinates` walks it). Only the whole-table kind has an entity of\n* its own; every other relational node (a column, an index, …) is nested\n* under one and maps to nothing here.\n*/\nconst RELATIONAL_NODE_ENTITY_KIND = { [RelationalSchemaNodeKind.table]: \"table\" };\n/**\n* Looks up the storage `entityKind` for a relational `nodeKind` — sibling of\n* {@link relationalNodeGranularity}, resolved by `nodeKind` equality against\n* {@link RELATIONAL_NODE_ENTITY_KIND}. `undefined` for a target-specific kind\n* (targets map their own kinds directly) or a relational kind with no entity\n* of its own.\n*/\nfunction relationalNodeEntityKind(nodeKind) {\n\treturn isRelationalSchemaNodeKind(nodeKind) ? RELATIONAL_NODE_ENTITY_KIND[nodeKind] : void 0;\n}\n//#endregion\n//#region src/ir/sql-schema-ir-node.ts\n/**\n* SQL Schema IR node base. Carries the family-level\n* `kind = 'sql-schema-ir'` discriminator and inherits the framework's\n* `freezeNode` affordance.\n*\n* SQL Schema IR represents the actual database state as discovered by\n* introspection (the parallel to SQL Contract IR, which represents the\n* desired state).\n*\n* The discriminator is installed as a non-enumerable own property,\n* matching the SqlNode pattern. This keeps `JSON.stringify(node)`\n* canonical (no `kind` field), keeps `toEqual({...})` test assertions\n* against pre-lift flat shapes passing, and keeps `node.kind` readable\n* for dispatch.\n*\n* Both `kind` and `nodeKind` are required: every concrete leaf is a node\n* the generic differ can pair and compare, so every leaf must declare which\n* node it is. `nodeKind` has no default here — every direct subclass sets its\n* own literal value (the relational leaves via `RelationalSchemaNodeKind`,\n* target concretions via their own vocabulary, e.g. `PostgresSchemaNodeKind`).\n*/\nvar SqlSchemaIRNode = class extends IRNodeBase {\n\tconstructor() {\n\t\tsuper();\n\t\tObject.defineProperty(this, \"kind\", {\n\t\t\tvalue: \"sql-schema-ir\",\n\t\t\twritable: false,\n\t\t\tenumerable: false,\n\t\t\tconfigurable: false\n\t\t});\n\t}\n};\n/**\n* Asserts `node` matches `predicate`, narrowing its type to `T`. The one\n* shared implementation every node class's `static assert` and `isEqualTo`\n* reach for, instead of each hand-writing its own throw: the message names\n* the class the caller expected.\n*/\nfunction assertNode(node, className, predicate) {\n\tif (node === void 0 || !predicate(node)) throw new InternalError(`Expected a ${className} but got nodeKind=${node?.nodeKind ?? \"undefined\"}`);\n}\n/**\n* Defines a non-enumerable own property, the same treatment `kind` gets\n* above: a derivation-time render-support field stays out of\n* `JSON.stringify`, `toEqual({...})` structural assertions, and spreads,\n* while remaining directly readable (`node.field`) for the one consumer\n* that resolves it at plan time. A no-op when `value` is `undefined` — the\n* property is simply absent, matching every other optional field on these\n* nodes.\n*/\nfunction defineNonEnumerable(target, key, value) {\n\tif (value === void 0) return;\n\tObject.defineProperty(target, key, {\n\t\tvalue,\n\t\tenumerable: false,\n\t\twritable: false,\n\t\tconfigurable: false\n\t});\n}\n//#endregion\n//#region src/ir/primary-key.ts\n/**\n* Primary-key Schema IR node. Mirrors the Contract IR `PrimaryKey`\n* shape (same `columns` + optional `name`) so verification can compare\n* intent and actual structurally. Defined here independently to avoid\n* a sql-schema-ir -> sql-contract dependency.\n*\n* Implements `DiffableNode` so a primary key is directly a table's diff-tree\n* child. `id` is a fixed sentinel — a table has at most one primary key, so\n* there is never a sibling to disambiguate against. `isEqualTo` compares the\n* column tuple; the PK's own `name` is a database-assigned label with no\n* semantic weight, so it is not compared (mirrors the policy node's\n* name-insensitivity to non-identifying detail).\n*/\nvar PrimaryKey = class PrimaryKey extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.primaryKey;\n\tcolumns;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.columns = input.columns;\n\t\tif (input.name !== void 0) this.name = input.name;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn \"primary-key\";\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic from(value) {\n\t\treturn value instanceof PrimaryKey ? value : new PrimaryKey(value);\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.primaryKey;\n\t}\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"PrimaryKey\", PrimaryKey.is);\n\t\treturn this.columns.length === node.columns.length && this.columns.every((c, i) => c === node.columns[i]);\n\t}\n};\n//#endregion\n//#region src/ir/sql-check-constraint-ir.ts\n/**\n* Schema IR node for a table-level check constraint, carried as an opaque\n* predicate. The expression is never parsed — a database reprints predicates\n* in its own normalized form, so any structured reading of it would drift.\n*\n* Implements `DiffableNode` so a check is directly a table's diff-tree child;\n* `id` is `check:<name>`. `isEqualTo` is mode-selected by the receiver's\n* `prefix` (the differ always calls `expected.isEqualTo(actual)`): a\n* wire-named receiver compares ids only — the wire name's hash already\n* commits to the predicate — while an exact-named receiver byte-compares the\n* expression, which is reliable precisely when both sides came from the same\n* reprint.\n*/\nvar SqlCheckConstraintIR = class SqlCheckConstraintIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.check;\n\tname;\n\texpression;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.name = nameOf(input.naming);\n\t\tif (input.naming.kind === \"wire\") this.prefix = input.naming.prefix;\n\t\tthis.expression = input.expression;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn `check:${this.name}`;\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic from(value) {\n\t\treturn value instanceof SqlCheckConstraintIR ? value : new SqlCheckConstraintIR(value);\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.check;\n\t}\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlCheckConstraintIR\", SqlCheckConstraintIR.is);\n\t\tif (this.prefix !== void 0) return this.id === node.id;\n\t\treturn this.expression === node.expression;\n\t}\n};\n//#endregion\n//#region src/ir/sql-default-value.ts\nfunction isList(value) {\n\treturn Array.isArray(value);\n}\n/** Whether two defaults are one value: the same type, parameters and value, element by element for a list. */\nfunction sqlDefaultValuesEqual(a, b) {\n\tif (!isList(a) || !isList(b)) return !isList(a) && !isList(b) && dataTypeValuesEqual(a, b);\n\treturn a.length === b.length && a.every((element, index) => {\n\t\tconst other = b[index];\n\t\tif (element === null || other === null || other === void 0) return element === other;\n\t\treturn dataTypeValuesEqual(element, other);\n\t});\n}\n//#endregion\n//#region src/ir/sql-column-default-ir.ts\n/**\n* Schema-diff node for a column's default value. The default is the one\n* column attribute with an extra/missing/drift lifecycle of its own, so it\n* is a child node of the column rather than a compared attribute: an\n* undeclared live default surfaces as `not-expected`, a declared default the\n* database lacks as `not-found`, and a divergent value as `not-equal` — the\n* three reasons cover the legacy `extra_default` / `default_missing` /\n* `default_mismatch` vocabulary with no attribute inspection.\n*\n* `id` is a fixed sentinel — a column has at most one default. Built\n* transiently by `SqlColumnIR.children()` from the column's own fields;\n* never constructed by derivation or introspection directly.\n*/\nvar SqlColumnDefaultIR = class SqlColumnDefaultIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.columnDefault;\n\tconstructor(input) {\n\t\tsuper();\n\t\tif (input.resolved !== void 0) this.resolved = input.resolved;\n\t\tif (input.raw !== void 0) this.raw = input.raw;\n\t\tdefineNonEnumerable(this, \"authored\", input.authored);\n\t\tdefineNonEnumerable(this, \"value\", input.value);\n\t\tdefineNonEnumerable(this, \"unreadable\", input.unreadable);\n\t\tdefineNonEnumerable(this, \"expressionValue\", input.expressionValue);\n\t\tdefineNonEnumerable(this, \"many\", input.many);\n\t\tdefineNonEnumerable(this, \"codecRef\", input.codecRef);\n\t\tdefineNonEnumerable(this, \"sqlExpressionLiteralFor\", input.sqlExpressionLiteralFor);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn \"default\";\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.columnDefault;\n\t}\n\t/**\n\t* Compares with `this` as the expected side. Two literals compare as values of the column's type\n\t* when both sides hold one, and as canonical JSON otherwise; a `Date` the column's codec could not\n\t* read into a value equals nothing. Two expressions compare as text, with\n\t* case and whitespace ignored outside quotes. An expected expression that writes a literal, read by\n\t* the column's codec during introspection, matches a reported literal when the two values are\n\t* equal; when the codec could not read one of them, it compares with the reported text. A resolved\n\t* side against a raw-only side is a mismatch; two raw-only nodes compare their text.\n\t*/\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlColumnDefaultIR\", SqlColumnDefaultIR.is);\n\t\tconst expected = this.resolved;\n\t\tconst actual = node.resolved;\n\t\tif (expected?.kind === \"function\" && actual === void 0) return node.raw !== void 0 && sameExpression(expected.expression, node.raw);\n\t\tif (expected === void 0 || actual === void 0) return expected === actual && this.raw === node.raw;\n\t\tif (expected.kind === \"function\") {\n\t\t\tif (actual.kind === \"function\") return sameExpression(expected.expression, actual.expression);\n\t\t\tif (node.value !== void 0 && node.expressionValue !== void 0) return sqlDefaultValuesEqual(node.expressionValue, node.value);\n\t\t\treturn node.raw !== void 0 && sameExpression(expected.expression, node.raw);\n\t\t}\n\t\tif (actual.kind !== \"literal\") return false;\n\t\tif (this.value !== void 0 && node.value !== void 0) return sqlDefaultValuesEqual(this.value, node.value);\n\t\tif (expected.value instanceof Date || actual.value instanceof Date) return false;\n\t\treturn canonicalStringify(expected.value) === canonicalStringify(actual.value);\n\t}\n\t/**\n\t* For two default expressions, the text the database reads back, since it may store an expression\n\t* in a form of its own. Otherwise why the column's codec could not read the database's default, or\n\t* the value each side holds.\n\t*/\n\texplainMismatch(actual) {\n\t\tif (!(actual instanceof SqlColumnDefaultIR)) return void 0;\n\t\tif (actual.unreadable !== void 0) return {\n\t\t\ttext: actual.unreadable,\n\t\t\tcause: \"differs\"\n\t\t};\n\t\treturn this.storedExpressionForm(actual) ?? {\n\t\t\ttext: `The contract holds ${describeDefault(this)}, and the database holds ${describeDefault(actual)}.`,\n\t\t\tcause: \"differs\"\n\t\t};\n\t}\n\tstoredExpressionForm(actual) {\n\t\tif (this.resolved?.kind !== \"function\" || actual.resolved?.kind !== \"function\") return void 0;\n\t\tconst literalFor = this.sqlExpressionLiteralFor;\n\t\tconst shown = (text) => literalFor?.(text) ?? JSON.stringify(text);\n\t\tconst stored = actual.raw ?? actual.resolved.expression;\n\t\tconst written = literalFor === void 0 ? stored : [stored, actual.resolved.expression].find((text) => literalFor(text) !== void 0);\n\t\tconst advice = written === void 0 ? \"No `sql` literal writes that text unchanged, so change the default's SQL in the contract until the database stores it as written.\" : `If they do, write the default as ${shown(written)}.`;\n\t\treturn {\n\t\t\ttext: `The database reads this default back as ${shown(written ?? stored)}; the contract declares ${shown(this.resolved.expression)}. The database may store a default expression in its own form, so the two can mean the same. ${advice}`,\n\t\t\tcause: \"possibly-equivalent\"\n\t\t};\n\t}\n};\n/** A default as a person reads it: a literal as JSON, the value its type read when there is one, an expression as its text, and the text the database reports beside a value read from it. */\nfunction describeDefault(node) {\n\tconst resolved = node.resolved;\n\tif (resolved === void 0) return node.raw ?? \"no default\";\n\tif (resolved.kind === \"function\") return resolved.expression;\n\tconst shown = JSON.stringify(node.value === void 0 ? resolved.value : jsonOfDefaultValue(node.value));\n\treturn node.raw === void 0 || node.raw === shown ? shown : `${shown} (${node.raw})`;\n}\nfunction isDefaultList(value) {\n\treturn Array.isArray(value);\n}\nfunction jsonOfDefaultValue(value) {\n\treturn isDefaultList(value) ? value.map((element) => element === null ? null : element.value) : value.value;\n}\nfunction sameExpression(a, b) {\n\treturn comparableExpression(a) === comparableExpression(b);\n}\n/** The expression with case and whitespace dropped outside quotes; a quoted literal or identifier keeps both, since they change what it means. */\nfunction comparableExpression(expression) {\n\tlet result = \"\";\n\tlet quote;\n\tfor (const char of expression) if (quote !== void 0) {\n\t\tresult += char;\n\t\tif (char === quote) quote = void 0;\n\t} else if (char === \"'\" || char === \"\\\"\") {\n\t\tquote = char;\n\t\tresult += char;\n\t} else if (!/\\s/.test(char)) result += char.toLowerCase();\n\treturn result;\n}\n//#endregion\n//#region src/ir/sql-column-ir.ts\n/**\n* Schema IR node for a single column on a table, as observed by\n* introspection. Unlike the Contract IR `StorageColumn`, this carries\n* the column's `name` (Schema IR columns are returned as arrays from\n* introspection queries; the parent table re-keys them into a record\n* for downstream consumers).\n*\n* Implements `DiffableNode` so a column is directly a table's diff-tree\n* child: `id` is the column name (unique among a table's columns); `isEqualTo`\n* compares this column's own attributes only, never its default, which is a\n* child node: the type by {@link sqlColumnTypesEqual}, and nullability.\n*/\nvar SqlColumnIR = class SqlColumnIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.column;\n\tname;\n\t/** See {@link SqlColumnIRInput.typeText}. */\n\ttypeText;\n\tnullable;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.name = input.name;\n\t\tthis.typeText = input.typeText;\n\t\tthis.nullable = input.nullable;\n\t\tif (input.default !== void 0) this.default = input.default;\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tif (input.many !== void 0) this.many = input.many;\n\t\tif (input.resolvedDefault !== void 0) this.resolvedDefault = input.resolvedDefault;\n\t\tdefineNonEnumerable(this, \"authoredDefault\", input.authoredDefault);\n\t\tdefineNonEnumerable(this, \"codecRef\", input.codecRef);\n\t\tdefineNonEnumerable(this, \"storedType\", input.storedType);\n\t\tdefineNonEnumerable(this, \"storedTypeParams\", input.storedTypeParams);\n\t\tdefineNonEnumerable(this, \"defaultValue\", input.defaultValue);\n\t\tdefineNonEnumerable(this, \"defaultUnreadable\", input.defaultUnreadable);\n\t\tdefineNonEnumerable(this, \"defaultExpressionValue\", input.defaultExpressionValue);\n\t\tdefineNonEnumerable(this, \"sqlExpressionLiteralFor\", input.sqlExpressionLiteralFor);\n\t\tdefineNonEnumerable(this, \"reportedType\", input.reportedType);\n\t\tdefineNonEnumerable(this, \"catalogText\", input.catalogText);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn `column:${this.name}`;\n\t}\n\t/**\n\t* The column's default, when declared/present, is the column's one child\n\t* node — it has an extra/missing/drift lifecycle of its own, so the differ\n\t* recurses to it rather than `isEqualTo` comparing it. Built transiently\n\t* from this column's own fields.\n\t*/\n\tchildren() {\n\t\tif (this.resolvedDefault === void 0 && this.default === void 0) return [];\n\t\treturn [new SqlColumnDefaultIR({\n\t\t\t...ifDefined(\"resolved\", this.resolvedDefault),\n\t\t\t...ifDefined(\"raw\", this.default),\n\t\t\t...ifDefined(\"authored\", this.authoredDefault),\n\t\t\t...ifDefined(\"value\", this.defaultValue),\n\t\t\t...ifDefined(\"unreadable\", this.defaultUnreadable),\n\t\t\t...ifDefined(\"expressionValue\", this.defaultExpressionValue),\n\t\t\t...ifDefined(\"many\", this.many ?? this.codecRef?.many),\n\t\t\t...ifDefined(\"codecRef\", this.codecRef),\n\t\t\t...ifDefined(\"sqlExpressionLiteralFor\", this.sqlExpressionLiteralFor)\n\t\t})];\n\t}\n\t/** This column under another name, with every other field as it is. */\n\twithName(name) {\n\t\tconst fields = Object.fromEntries(Object.getOwnPropertyNames(this).map((key) => [key, Reflect.get(this, key)]));\n\t\treturn new SqlColumnIR({\n\t\t\t...blindCast(fields),\n\t\t\tname\n\t\t});\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.column;\n\t}\n\t/**\n\t* Compares the column's own attributes only — the default lives on the child node: the type, by {@link sqlColumnTypesEqual}, and nullability.\n\t*/\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlColumnIR\", SqlColumnIR.is);\n\t\treturn sqlColumnTypesEqual(this, node) && this.nullable === node.nullable;\n\t}\n\t/** Why `actual` is not this column: the two types as written and reported, or the nullability of each. The two sides always hold different values. */\n\texplainMismatch(actual) {\n\t\tif (actual === void 0) return void 0;\n\t\tconst node = blindCast(actual);\n\t\tassertNode(node, \"SqlColumnIR\", SqlColumnIR.is);\n\t\tconst texts = catalogTexts(this, node);\n\t\tif (texts !== void 0 && texts.expected !== texts.actual) return differs(`The column type is \"${texts.expected}\", but the database reports \"${texts.actual}\". A type named by its catalog text is compared with the text the database reports, exactly.`);\n\t\tif (node.storedType === void 0 && node.reportedType !== void 0) return differs(node.typeText === \"\" ? \"The database column has no declared type.\" : `The database column is ${shownTypeOf(node)}, which no data type in the configured stack declares.`);\n\t\tif (!sqlColumnTypesEqual(this, node)) return differs(`The contract column is ${shownTypeOf(this)} and the database column is ${shownTypeOf(node)}.`);\n\t\tif (this.nullable !== node.nullable) return differs(`The contract column is ${nullability(this)} and the database column is ${nullability(node)}.`);\n\t}\n};\n/**\n* Whether two columns have the same type: both have a stored type, the two are one data type, their parameters are equal as canonical JSON, and both or neither are lists. A column no data type claims has no stored type and never has the same type as another. ADR 254.\n*\n* When either column carries a {@link SqlColumnIR.catalogText}, the two compare by text instead, exactly, with `[]` for a list: that text against the other column's catalog text or reported text. ADR 273.\n*/\nfunction sqlColumnTypesEqual(a, b) {\n\tconst texts = catalogTexts(a, b);\n\tif (texts !== void 0) return texts.expected === texts.actual;\n\treturn a.storedType !== void 0 && b.storedType !== void 0 && a.storedType.id === b.storedType.id && canonicalizeJson(a.storedTypeParams ?? {}) === canonicalizeJson(b.storedTypeParams ?? {}) && Boolean(a.many) === Boolean(b.many);\n}\n/** The text a column's type compares by, with `[]` for a list, when it has one: its catalog text, or the text the database reports. */\nfunction comparedText(column) {\n\tconst text = column.catalogText ?? column.reportedType?.text;\n\treturn text === void 0 ? void 0 : `${text}${column.many === true ? \"[]\" : \"\"}`;\n}\n/** The two texts a pair of columns compares by, when either carries a catalog text. A side with no text to compare gives the empty text, which no catalog text equals. */\nfunction catalogTexts(expected, actual) {\n\tif (expected.catalogText === void 0 && actual.catalogText === void 0) return void 0;\n\treturn {\n\t\texpected: comparedText(expected) ?? \"\",\n\t\tactual: comparedText(actual) ?? \"\"\n\t};\n}\n/** The column's type as the contract writes it, or as introspection gives it, with `[]` for a list, in double quotes unless the text has double quotes of its own, as `\"char\"` does. */\nfunction shownTypeOf(column) {\n\tconst text = `${column.typeText}${column.many === true ? \"[]\" : \"\"}`;\n\treturn text.includes(\"\\\"\") ? text : `\"${text}\"`;\n}\nfunction differs(text) {\n\treturn {\n\t\ttext,\n\t\tcause: \"differs\"\n\t};\n}\nfunction nullability(column) {\n\treturn column.nullable ? \"nullable\" : \"not nullable\";\n}\n//#endregion\n//#region src/ir/sql-foreign-key-ir.ts\n/**\n* Schema IR node for a foreign-key constraint as observed by\n* introspection. The `referencedTable` / `referencedColumns` field\n* names match the introspection vocabulary (`pg_constraint.confkey`,\n* etc.) and intentionally differ from the Contract IR's nested\n* `references: { table, columns }` shape so that the verifier's\n* structural comparison stays explicit about which side it's reading.\n*\n* Implements `DiffableNode` so a foreign key is directly a table's diff-tree\n* child. Foreign keys are frequently unnamed (introspection may not carry a\n* constraint name, and the contract side never invents one), so `id` is\n* derived from the referencing/referenced coordinates rather than `name` —\n* the same tuple that makes two FK constraints the same constraint. This\n* also serves as the comparison key: two FKs with the same coordinates are\n* paired by the differ, and `isEqualTo` then compares the remaining\n* attribute — the referential actions.\n*/\nvar SqlForeignKeyIR = class SqlForeignKeyIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.foreignKey;\n\tcolumns;\n\treferencedTable;\n\treferencedColumns;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.columns = input.columns;\n\t\tthis.referencedTable = input.referencedTable;\n\t\tthis.referencedColumns = input.referencedColumns;\n\t\tif (input.referencedSchema !== void 0) this.referencedSchema = input.referencedSchema;\n\t\tif (input.name !== void 0) this.name = input.name;\n\t\tif (input.onDelete !== void 0) this.onDelete = input.onDelete;\n\t\tif (input.onUpdate !== void 0) this.onUpdate = input.onUpdate;\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tconst resolvedReferencedNamespace = input.resolvedReferencedNamespace ?? input.referencedSchema;\n\t\tif (resolvedReferencedNamespace !== void 0) this.resolvedReferencedNamespace = resolvedReferencedNamespace;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\tconst referencedNamespace = this.resolvedReferencedNamespace ?? \"\";\n\t\treturn `foreign-key:${this.columns.join(\",\")}->${referencedNamespace}.${this.referencedTable}(${this.referencedColumns.join(\",\")})`;\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.foreignKey;\n\t}\n\t/**\n\t* Referential-action comparison with `this` as the expected side, matching\n\t* the relational walk's `getReferentialActionMismatches`: `noAction` is the\n\t* database default and equivalent to an undeclared action, and drift is\n\t* flagged only when the expected side declares a (normalized) action.\n\t*/\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlForeignKeyIR\", SqlForeignKeyIR.is);\n\t\treturn referentialActionMatches(this.onDelete, node.onDelete) && referentialActionMatches(this.onUpdate, node.onUpdate);\n\t}\n};\nfunction referentialActionMatches(expected, actual) {\n\tconst normalizedExpected = expected === \"noAction\" ? void 0 : expected;\n\tif (normalizedExpected === void 0) return true;\n\treturn normalizedExpected === (actual === \"noAction\" ? void 0 : actual);\n}\n//#endregion\n//#region src/ir/sql-index-ir.ts\n/**\n* Schema IR node for a secondary index as observed by introspection.\n* Unlike the Contract IR `Index`, the Schema IR carries an explicit\n* `unique` field — introspection sees the underlying index regardless\n* of whether the user expressed it as `@@index` or `@@unique`, and the\n* verifier needs to distinguish them when comparing to the Contract.\n*\n* Implements `DiffableNode` so an index is directly a table's diff-tree\n* child. Indexes are name-identified: every index — contract-derived or\n* introspected — carries its full physical name, and `id` is that name.\n* Names are catalog-unique per schema, so two indexes legitimately sharing\n* one column tuple (a unique index beside a redundant plain index) are two\n* distinct siblings, and expression indexes need no column tuple at all.\n*\n* `isEqualTo` is selected by the receiver (the differ always calls\n* `expected.isEqualTo(actual)`) and delegates to {@link contentEquals} —\n* the single node-owned content relation: both modes compare `unique`\n* strict, `type` and option values through the named normalization seams,\n* and `columns` ordered-strict when both sides carry them; an exact-named\n* receiver (`prefix === undefined`) additionally byte-compares\n* `expression`/`where` (both sides are reprints in the supported flow —\n* normalizing would only mask real drift); a wire-named receiver never\n* compares bodies (the wire-name hash already commits to them).\n*\n* `expression`, `where`, and `unique` are genuine SQL-family attributes —\n* functional and partial indexes are standard SQL that any SQL target may\n* introspect, so the family node must represent them; a target declining\n* to author them is a capability decision, not target-specificity.\n*/\nvar SqlIndexIR = class SqlIndexIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.index;\n\tname;\n\tunique;\n\tconstructor(input) {\n\t\tsuper();\n\t\tconst name = nameOf(input.naming);\n\t\tif (input.columns === void 0 === (input.expression === void 0)) throw new InternalError(`SqlIndexIR \"${name}\": exactly one of columns or expression must be set.`);\n\t\tthis.name = name;\n\t\tthis.unique = input.unique;\n\t\tif (input.naming.kind === \"wire\") this.prefix = input.naming.prefix;\n\t\tif (input.columns !== void 0) this.columns = input.columns;\n\t\tif (input.expression !== void 0) this.expression = input.expression;\n\t\tif (input.where !== void 0) this.where = input.where;\n\t\tconst normalizedType = normalizeIndexType(input.type);\n\t\tif (normalizedType !== void 0) this.type = normalizedType;\n\t\tif (input.options !== void 0) this.options = input.options;\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tdefineNonEnumerable(this, \"partial\", input.partial);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn `index:${this.name}`;\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic from(value) {\n\t\treturn value instanceof SqlIndexIR ? value : new SqlIndexIR(value);\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.index;\n\t}\n\t/**\n\t* Mode-selected structural equality — see the class doc. Delegates to the\n\t* single node-owned relation: `columns` compare ordered-strict when both\n\t* sides carry them; an exact receiver (`prefix === undefined`)\n\t* byte-compares `expression ?? ''` and `where ?? ''`; a wire-named receiver\n\t* never compares bodies (the wire-name hash already commits to them).\n\t*/\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlIndexIR\", SqlIndexIR.is);\n\t\treturn this.contentEquals(node, {\n\t\t\tcolumnPresence: \"when-both-defined\",\n\t\t\tbodies: this.prefix !== void 0 ? \"ignored\" : \"verbatim\"\n\t\t});\n\t}\n\t/**\n\t* The single index content-equality relation — every comparer (the differ\n\t* via {@link isEqualTo}, the planner's rename content-pairing) calls this\n\t* with its mode-appropriate strictness rather than growing a parallel\n\t* relation:\n\t*\n\t* - `columnPresence: 'when-both-defined'` (the differ's rule) compares\n\t* the tuples ordered-strict only when both sides carry them — a paired\n\t* node's identity already agreed, so a column node meeting an\n\t* expression node skips the tuple.\n\t* - `columnPresence: 'matching'` (the rename-pairing rule) additionally\n\t* requires presence to agree: a column index never pairs an expression\n\t* index.\n\t* - `bodies: 'verbatim'` byte-compares `expression ?? ''` / `where ?? ''`\n\t* (absent ≡ empty, no normalization — both sides are reprints in the\n\t* supported flow); `bodies: 'ignored'` skips them (wire identity —\n\t* the wire-name hash commits to the content).\n\t*\n\t* `unique` compares strictly; `type` and option VALUES compare through\n\t* the named normalization seams below.\n\t*/\n\tcontentEquals(other, strictness) {\n\t\tconst columnsEqual = strictness.columnPresence === \"matching\" ? this.columns === void 0 === (other.columns === void 0) && (this.columns === void 0 || isArrayEqual(this.columns, other.columns ?? [])) : this.columns === void 0 || other.columns === void 0 || isArrayEqual(this.columns, other.columns);\n\t\tif (!(this.unique === other.unique && normalizeIndexType(this.type) === normalizeIndexType(other.type) && indexOptionsEqual(this.options, other.options) && columnsEqual)) return false;\n\t\tif (strictness.bodies === \"ignored\") return true;\n\t\treturn (this.expression ?? \"\") === (other.expression ?? \"\") && (this.where ?? \"\") === (other.where ?? \"\");\n\t}\n};\n/**\n* The btree-default normalization seam: the default access method (`btree`\n* in every supported SQL target) normalizes to absent. Applied at\n* construction — every derivation path (contract tree, introspection, flat\n* family tree) builds through the class, so both compare sides are\n* symmetric by definition — and again inside\n* {@link SqlIndexIR.contentEquals} so the relation holds for any input.\n* The contract JSON and the wire-name content hash keep the authored\n* spelling: `@@index([a], type: \"btree\")` and `@@index([a])` are distinct\n* wire names — but content-equal after normalization, so a spelling change\n* between them converges as a rename via the planner's content\n* pairing (the hashes differ, so hash pairing never pairs them).\n*/\nfunction normalizeIndexType(type) {\n\treturn type === \"btree\" ? void 0 : type;\n}\n/**\n* Option-bag equality: same key set, values compared through\n* {@link normalizeIndexOptionValue} — Postgres introspection returns\n* reloptions values as catalog-reprint strings (`'70'`, `'on'`) while\n* contract option leaves are typed (number, boolean, string).\n*/\nfunction indexOptionsEqual(a, b) {\n\tconst aKeys = a ? Object.keys(a).sort() : [];\n\tconst bKeys = b ? Object.keys(b).sort() : [];\n\tif (aKeys.length !== bKeys.length) return false;\n\tfor (let i = 0; i < aKeys.length; i += 1) if (aKeys[i] !== bKeys[i]) return false;\n\tif (aKeys.length === 0) return true;\n\tfor (const key of aKeys) if (normalizeIndexOptionValue(a?.[key]) !== normalizeIndexOptionValue(b?.[key])) return false;\n\treturn true;\n}\n//#endregion\n//#region src/ir/sql-unique-ir.ts\n/**\n* Schema IR node for a table-level unique constraint as observed by\n* introspection.\n*\n* Implements `DiffableNode` so a unique constraint is directly a table's\n* diff-tree child. Unique constraints are frequently unnamed, so `id` is\n* derived from the column tuple rather than `name` — the column tuple is\n* also what makes two unique constraints the same constraint, so it doubles\n* as the pairing key. There are no further attributes to compare once\n* columns are equal (the differ pairs on `id`), so `isEqualTo` is identity.\n*/\nvar SqlUniqueIR = class SqlUniqueIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.unique;\n\tcolumns;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.columns = [...input.columns];\n\t\tif (input.name !== void 0) this.name = input.name;\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn `unique:${this.columns.join(\",\")}`;\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.unique;\n\t}\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlUniqueIR\", SqlUniqueIR.is);\n\t\treturn this.id === node.id;\n\t}\n};\n//#endregion\n//#region src/ir/sql-table-ir.ts\n/**\n* Schema IR node for a single table as observed by introspection.\n*\n* Unlike the Contract IR `StorageTable`, this carries the table's\n* `name` — introspection queries return tables as arrays and the\n* verifier keys them into `SqlSchemaIR.tables` afterwards, so the name\n* stays on the table object for downstream call sites that walk\n* `Object.values(schema.tables)`.\n*\n* The constructor normalises nested IR-class fields so downstream\n* walks see a uniform AST regardless of whether the input was a\n* plain-data literal (from introspection) or already-constructed\n* class instances.\n*\n* Implements `DiffableNode` so a flat (single-schema) tree is directly\n* diffable: `id` is the table name; `isEqualTo` is identity (the table's\n* structural drift is entirely expressed by its children); `children()`\n* yields every column, the primary key (when present), every foreign key,\n* unique, index, and check constraint — the same composition and order as\n* the Postgres table node, minus policies.\n*/\nvar SqlTableIR = class extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.table;\n\tname;\n\tcolumns;\n\tforeignKeys;\n\tuniques;\n\tindexes;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.name = input.name;\n\t\tthis.columns = Object.freeze(Object.fromEntries(Object.entries(input.columns).map(([key, col]) => [key, col instanceof SqlColumnIR ? col : new SqlColumnIR(col)])));\n\t\tthis.foreignKeys = Object.freeze(input.foreignKeys.map((fk) => fk instanceof SqlForeignKeyIR ? fk : new SqlForeignKeyIR(fk)));\n\t\tthis.uniques = Object.freeze(input.uniques.map((u) => u instanceof SqlUniqueIR ? u : new SqlUniqueIR(u)));\n\t\tthis.indexes = Object.freeze(input.indexes.map(SqlIndexIR.from));\n\t\tif (input.primaryKey !== void 0) this.primaryKey = PrimaryKey.from(input.primaryKey);\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tif (input.checks !== void 0 && input.checks.length > 0) this.checks = Object.freeze(input.checks.map(SqlCheckConstraintIR.from));\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn this.name;\n\t}\n\tisEqualTo(other) {\n\t\treturn this.id === other.id;\n\t}\n\tchildren() {\n\t\treturn [\n\t\t\t...Object.values(this.columns),\n\t\t\t...this.primaryKey ? [this.primaryKey] : [],\n\t\t\t...this.foreignKeys,\n\t\t\t...this.uniques,\n\t\t\t...this.indexes,\n\t\t\t...this.checks ?? []\n\t\t];\n\t}\n};\n//#endregion\n//#region src/ir/sql-schema-ir.ts\n/**\n* Root Schema IR node representing the complete database schema as\n* observed by introspection. Target-agnostic; used by both verifiers\n* (compare against intended Contract storage) and migration planners\n* (derive operations needed to reconcile).\n*\n* The constructor normalises nested `SqlTableIR` instances so\n* downstream walks see a uniform AST regardless of whether the input\n* was a plain-data literal or already-constructed class instances.\n*\n* Implements `DiffableNode` as the root of a flat (single-schema) diff\n* tree: `id` is the fixed sentinel `'database'` (roots have no siblings),\n* `isEqualTo` is identity (a container has no own attributes), and\n* `children()` yields the table nodes.\n*/\nvar SqlSchemaIR = class extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.schema;\n\ttables;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.tables = Object.freeze(Object.fromEntries(Object.entries(input.tables).map(([key, t]) => [key, t instanceof SqlTableIR ? t : new SqlTableIR(t)])));\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn \"database\";\n\t}\n\tisEqualTo(other) {\n\t\treturn this.id === other.id;\n\t}\n\tchildren() {\n\t\treturn Object.values(this.tables);\n\t}\n};\n//#endregion\nexport { relationalNodeGranularity as _, SqlForeignKeyIR as a, SqlColumnDefaultIR as c, PrimaryKey as d, SqlSchemaIRNode as f, relationalNodeEntityKind as g, RelationalSchemaNodeKind as h, SqlIndexIR as i, sqlDefaultValuesEqual as l, defineNonEnumerable as m, SqlTableIR as n, SqlColumnIR as o, assertNode as p, SqlUniqueIR as r, sqlColumnTypesEqual as s, SqlSchemaIR as t, SqlCheckConstraintIR as u };\n\n//# sourceMappingURL=types-DoyiTsjg.mjs.map"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,MAAM,2BAA2B;CAChC,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,eAAe;CACf,YAAY;CACZ,YAAY;CACZ,QAAQ;CACR,OAAO;CACP,OAAO;AACR;;;;;;;;;;;AAWA,MAAM,8BAA8B;EAClC,yBAAyB,SAAS;EAClC,yBAAyB,QAAQ;EACjC,yBAAyB,SAAS;EAClC,yBAAyB,gBAAgB;EACzC,yBAAyB,aAAa;EACtC,yBAAyB,aAAa;EACtC,yBAAyB,SAAS;EAClC,yBAAyB,QAAQ;EACjC,yBAAyB,QAAQ;AACnC;AACA,SAAS,2BAA2B,UAAU;CAC7C,OAAO,OAAO,OAAO,6BAA6B,QAAQ;AAC3D;;;;;;;AAOA,SAAS,0BAA0B,UAAU;CAC5C,IAAI,CAAC,2BAA2B,QAAQ,GAAG,MAAM,IAAI,cAAc,iEAAiE,SAAS,EAAE;CAC/I,OAAO,4BAA4B;AACpC;;;;;;;;AAQA,MAAM,8BAA8B,GAAG,yBAAyB,QAAQ,QAAQ;;;;;;;;AAQhF,SAAS,yBAAyB,UAAU;CAC3C,OAAO,2BAA2B,QAAQ,IAAI,4BAA4B,YAAY,KAAK;AAC5F;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAI,kBAAkB,cAAc,WAAW;CAC9C,cAAc;EACb,MAAM;EACN,OAAO,eAAe,MAAM,QAAQ;GACnC,OAAO;GACP,UAAU;GACV,YAAY;GACZ,cAAc;EACf,CAAC;CACF;AACD;;;;;;;AAOA,SAAS,WAAW,MAAM,WAAW,WAAW;CAC/C,IAAI,SAAS,KAAK,KAAK,CAAC,UAAU,IAAI,GAAG,MAAM,IAAI,cAAc,cAAc,UAAU,oBAAoB,MAAM,YAAY,aAAa;AAC7I;;;;;;;;;;AAUA,SAAS,oBAAoB,QAAQ,KAAK,OAAO;CAChD,IAAI,UAAU,KAAK,GAAG;CACtB,OAAO,eAAe,QAAQ,KAAK;EAClC;EACA,YAAY;EACZ,UAAU;EACV,cAAc;CACf,CAAC;AACF;;;;;;;;;;;;;;AAgBA,IAAI,aAAa,MAAM,mBAAmB,gBAAgB;CACzD,WAAW,yBAAyB;CACpC;CACA,YAAY,OAAO;EAClB,MAAM;EACN,KAAK,UAAU,MAAM;EACrB,IAAI,MAAM,SAAS,KAAK,GAAG,KAAK,OAAO,MAAM;EAC7C,oBAAoB,MAAM,aAAa,MAAM,SAAS;EACtD,WAAW,IAAI;CAChB;CACA,IAAI,KAAK;EACR,OAAO;CACR;CACA,WAAW;EACV,OAAO,CAAC;CACT;CACA,OAAO,KAAK,OAAO;EAClB,OAAO,iBAAiB,aAAa,QAAQ,IAAI,WAAW,KAAK;CAClE;CACA,OAAO,GAAG,MAAM;EACf,OAAO,KAAK,aAAa,yBAAyB;CACnD;CACA,UAAU,OAAO;EAChB,MAAM,OAAO,UAAU,KAAK;EAC5B,WAAW,MAAM,cAAc,WAAW,EAAE;EAC5C,OAAO,KAAK,QAAQ,WAAW,KAAK,QAAQ,UAAU,KAAK,QAAQ,OAAO,GAAG,MAAM,MAAM,KAAK,QAAQ,EAAE;CACzG;AACD;;;;;;;;;;;;;;AAgBA,IAAI,uBAAuB,MAAM,6BAA6B,gBAAgB;CAC7E,WAAW,yBAAyB;CACpC;CACA;CACA,YAAY,OAAO;EAClB,MAAM;EACN,KAAK,OAAO,OAAO,MAAM,MAAM;EAC/B,IAAI,MAAM,OAAO,SAAS,QAAQ,KAAK,SAAS,MAAM,OAAO;EAC7D,KAAK,aAAa,MAAM;EACxB,oBAAoB,MAAM,aAAa,MAAM,SAAS;EACtD,WAAW,IAAI;CAChB;CACA,IAAI,KAAK;EACR,OAAO,SAAS,KAAK;CACtB;CACA,WAAW;EACV,OAAO,CAAC;CACT;CACA,OAAO,KAAK,OAAO;EAClB,OAAO,iBAAiB,uBAAuB,QAAQ,IAAI,qBAAqB,KAAK;CACtF;CACA,OAAO,GAAG,MAAM;EACf,OAAO,KAAK,aAAa,yBAAyB;CACnD;CACA,UAAU,OAAO;EAChB,MAAM,OAAO,UAAU,KAAK;EAC5B,WAAW,MAAM,wBAAwB,qBAAqB,EAAE;EAChE,IAAI,KAAK,WAAW,KAAK,GAAG,OAAO,KAAK,OAAO,KAAK;EACpD,OAAO,KAAK,eAAe,KAAK;CACjC;AACD;AAGA,SAAS,OAAO,OAAO;CACtB,OAAO,MAAM,QAAQ,KAAK;AAC3B;;AAEA,SAAS,sBAAsB,GAAG,GAAG;CACpC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,oBAAoB,GAAG,CAAC;CACzF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,SAAS,UAAU;EAC3D,MAAM,QAAQ,EAAE;EAChB,IAAI,YAAY,QAAQ,UAAU,QAAQ,UAAU,KAAK,GAAG,OAAO,YAAY;EAC/E,OAAO,oBAAoB,SAAS,KAAK;CAC1C,CAAC;AACF;;;;;;;;;;;;;;AAgBA,IAAI,qBAAqB,MAAM,2BAA2B,gBAAgB;CACzE,WAAW,yBAAyB;CACpC,YAAY,OAAO;EAClB,MAAM;EACN,IAAI,MAAM,aAAa,KAAK,GAAG,KAAK,WAAW,MAAM;EACrD,IAAI,MAAM,QAAQ,KAAK,GAAG,KAAK,MAAM,MAAM;EAC3C,oBAAoB,MAAM,YAAY,MAAM,QAAQ;EACpD,oBAAoB,MAAM,SAAS,MAAM,KAAK;EAC9C,oBAAoB,MAAM,cAAc,MAAM,UAAU;EACxD,oBAAoB,MAAM,mBAAmB,MAAM,eAAe;EAClE,oBAAoB,MAAM,QAAQ,MAAM,IAAI;EAC5C,oBAAoB,MAAM,YAAY,MAAM,QAAQ;EACpD,oBAAoB,MAAM,2BAA2B,MAAM,uBAAuB;EAClF,WAAW,IAAI;CAChB;CACA,IAAI,KAAK;EACR,OAAO;CACR;CACA,WAAW;EACV,OAAO,CAAC;CACT;CACA,OAAO,GAAG,MAAM;EACf,OAAO,KAAK,aAAa,yBAAyB;CACnD;;;;;;;;;;CAUA,UAAU,OAAO;EAChB,MAAM,OAAO,UAAU,KAAK;EAC5B,WAAW,MAAM,sBAAsB,mBAAmB,EAAE;EAC5D,MAAM,WAAW,KAAK;EACtB,MAAM,SAAS,KAAK;EACpB,IAAI,UAAU,SAAS,cAAc,WAAW,KAAK,GAAG,OAAO,KAAK,QAAQ,KAAK,KAAK,eAAe,SAAS,YAAY,KAAK,GAAG;EAClI,IAAI,aAAa,KAAK,KAAK,WAAW,KAAK,GAAG,OAAO,aAAa,UAAU,KAAK,QAAQ,KAAK;EAC9F,IAAI,SAAS,SAAS,YAAY;GACjC,IAAI,OAAO,SAAS,YAAY,OAAO,eAAe,SAAS,YAAY,OAAO,UAAU;GAC5F,IAAI,KAAK,UAAU,KAAK,KAAK,KAAK,oBAAoB,KAAK,GAAG,OAAO,sBAAsB,KAAK,iBAAiB,KAAK,KAAK;GAC3H,OAAO,KAAK,QAAQ,KAAK,KAAK,eAAe,SAAS,YAAY,KAAK,GAAG;EAC3E;EACA,IAAI,OAAO,SAAS,WAAW,OAAO;EACtC,IAAI,KAAK,UAAU,KAAK,KAAK,KAAK,UAAU,KAAK,GAAG,OAAO,sBAAsB,KAAK,OAAO,KAAK,KAAK;EACvG,IAAI,SAAS,iBAAiB,QAAQ,OAAO,iBAAiB,MAAM,OAAO;EAC3E,OAAO,mBAAmB,SAAS,KAAK,MAAM,mBAAmB,OAAO,KAAK;CAC9E;;;;;;CAMA,gBAAgB,QAAQ;EACvB,IAAI,EAAE,kBAAkB,qBAAqB,OAAO,KAAK;EACzD,IAAI,OAAO,eAAe,KAAK,GAAG,OAAO;GACxC,MAAM,OAAO;GACb,OAAO;EACR;EACA,OAAO,KAAK,qBAAqB,MAAM,KAAK;GAC3C,MAAM,sBAAsB,gBAAgB,IAAI,EAAE,2BAA2B,gBAAgB,MAAM,EAAE;GACrG,OAAO;EACR;CACD;CACA,qBAAqB,QAAQ;EAC5B,IAAI,KAAK,UAAU,SAAS,cAAc,OAAO,UAAU,SAAS,YAAY,OAAO,KAAK;EAC5F,MAAM,aAAa,KAAK;EACxB,MAAM,SAAS,SAAS,aAAa,IAAI,KAAK,KAAK,UAAU,IAAI;EACjE,MAAM,SAAS,OAAO,OAAO,OAAO,SAAS;EAC7C,MAAM,UAAU,eAAe,KAAK,IAAI,SAAS,CAAC,QAAQ,OAAO,SAAS,UAAU,CAAC,CAAC,MAAM,SAAS,WAAW,IAAI,MAAM,KAAK,CAAC;EAChI,MAAM,SAAS,YAAY,KAAK,IAAI,sIAAsI,oCAAoC,MAAM,OAAO,EAAE;EAC7N,OAAO;GACN,MAAM,2CAA2C,MAAM,WAAW,MAAM,EAAE,0BAA0B,MAAM,KAAK,SAAS,UAAU,EAAE,+FAA+F;GACnO,OAAO;EACR;CACD;AACD;;AAEA,SAAS,gBAAgB,MAAM;CAC9B,MAAM,WAAW,KAAK;CACtB,IAAI,aAAa,KAAK,GAAG,OAAO,KAAK,OAAO;CAC5C,IAAI,SAAS,SAAS,YAAY,OAAO,SAAS;CAClD,MAAM,QAAQ,KAAK,UAAU,KAAK,UAAU,KAAK,IAAI,SAAS,QAAQ,mBAAmB,KAAK,KAAK,CAAC;CACpG,OAAO,KAAK,QAAQ,KAAK,KAAK,KAAK,QAAQ,QAAQ,QAAQ,GAAG,MAAM,IAAI,KAAK,IAAI;AAClF;AACA,SAAS,cAAc,OAAO;CAC7B,OAAO,MAAM,QAAQ,KAAK;AAC3B;AACA,SAAS,mBAAmB,OAAO;CAClC,OAAO,cAAc,KAAK,IAAI,MAAM,KAAK,YAAY,YAAY,OAAO,OAAO,QAAQ,KAAK,IAAI,MAAM;AACvG;AACA,SAAS,eAAe,GAAG,GAAG;CAC7B,OAAO,qBAAqB,CAAC,MAAM,qBAAqB,CAAC;AAC1D;;AAEA,SAAS,qBAAqB,YAAY;CACzC,IAAI,SAAS;CACb,IAAI;CACJ,KAAK,MAAM,QAAQ,YAAY,IAAI,UAAU,KAAK,GAAG;EACpD,UAAU;EACV,IAAI,SAAS,OAAO,QAAQ,KAAK;CAClC,OAAO,IAAI,SAAS,OAAO,SAAS,MAAM;EACzC,QAAQ;EACR,UAAU;CACX,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,UAAU,KAAK,YAAY;CACxD,OAAO;AACR;;;;;;;;;;;;;AAeA,IAAI,cAAc,MAAM,oBAAoB,gBAAgB;CAC3D,WAAW,yBAAyB;CACpC;;CAEA;CACA;CACA,YAAY,OAAO;EAClB,MAAM;EACN,KAAK,OAAO,MAAM;EAClB,KAAK,WAAW,MAAM;EACtB,KAAK,WAAW,MAAM;EACtB,IAAI,MAAM,YAAY,KAAK,GAAG,KAAK,UAAU,MAAM;EACnD,IAAI,MAAM,gBAAgB,KAAK,GAAG,KAAK,cAAc,MAAM;EAC3D,IAAI,MAAM,SAAS,KAAK,GAAG,KAAK,OAAO,MAAM;EAC7C,IAAI,MAAM,oBAAoB,KAAK,GAAG,KAAK,kBAAkB,MAAM;EACnE,oBAAoB,MAAM,mBAAmB,MAAM,eAAe;EAClE,oBAAoB,MAAM,YAAY,MAAM,QAAQ;EACpD,oBAAoB,MAAM,cAAc,MAAM,UAAU;EACxD,oBAAoB,MAAM,oBAAoB,MAAM,gBAAgB;EACpE,oBAAoB,MAAM,gBAAgB,MAAM,YAAY;EAC5D,oBAAoB,MAAM,qBAAqB,MAAM,iBAAiB;EACtE,oBAAoB,MAAM,0BAA0B,MAAM,sBAAsB;EAChF,oBAAoB,MAAM,2BAA2B,MAAM,uBAAuB;EAClF,oBAAoB,MAAM,gBAAgB,MAAM,YAAY;EAC5D,oBAAoB,MAAM,eAAe,MAAM,WAAW;EAC1D,WAAW,IAAI;CAChB;CACA,IAAI,KAAK;EACR,OAAO,UAAU,KAAK;CACvB;;;;;;;CAOA,WAAW;EACV,IAAI,KAAK,oBAAoB,KAAK,KAAK,KAAK,YAAY,KAAK,GAAG,OAAO,CAAC;EACxE,OAAO,CAAC,IAAI,mBAAmB;GAC9B,GAAG,UAAU,YAAY,KAAK,eAAe;GAC7C,GAAG,UAAU,OAAO,KAAK,OAAO;GAChC,GAAG,UAAU,YAAY,KAAK,eAAe;GAC7C,GAAG,UAAU,SAAS,KAAK,YAAY;GACvC,GAAG,UAAU,cAAc,KAAK,iBAAiB;GACjD,GAAG,UAAU,mBAAmB,KAAK,sBAAsB;GAC3D,GAAG,UAAU,QAAQ,KAAK,QAAQ,KAAK,UAAU,IAAI;GACrD,GAAG,UAAU,YAAY,KAAK,QAAQ;GACtC,GAAG,UAAU,2BAA2B,KAAK,uBAAuB;EACrE,CAAC,CAAC;CACH;;CAEA,SAAS,MAAM;EACd,MAAM,SAAS,OAAO,YAAY,OAAO,oBAAoB,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;EAC9G,OAAO,IAAI,YAAY;GACtB,GAAG,UAAU,MAAM;GACnB;EACD,CAAC;CACF;CACA,OAAO,GAAG,MAAM;EACf,OAAO,KAAK,aAAa,yBAAyB;CACnD;;;;CAIA,UAAU,OAAO;EAChB,MAAM,OAAO,UAAU,KAAK;EAC5B,WAAW,MAAM,eAAe,YAAY,EAAE;EAC9C,OAAO,oBAAoB,MAAM,IAAI,KAAK,KAAK,aAAa,KAAK;CAClE;;CAEA,gBAAgB,QAAQ;EACvB,IAAI,WAAW,KAAK,GAAG,OAAO,KAAK;EACnC,MAAM,OAAO,UAAU,MAAM;EAC7B,WAAW,MAAM,eAAe,YAAY,EAAE;EAC9C,MAAM,QAAQ,aAAa,MAAM,IAAI;EACrC,IAAI,UAAU,KAAK,KAAK,MAAM,aAAa,MAAM,QAAQ,OAAO,QAAQ,uBAAuB,MAAM,SAAS,+BAA+B,MAAM,OAAO,6FAA6F;EACvP,IAAI,KAAK,eAAe,KAAK,KAAK,KAAK,iBAAiB,KAAK,GAAG,OAAO,QAAQ,KAAK,aAAa,KAAK,8CAA8C,0BAA0B,YAAY,IAAI,EAAE,uDAAuD;EACvP,IAAI,CAAC,oBAAoB,MAAM,IAAI,GAAG,OAAO,QAAQ,0BAA0B,YAAY,IAAI,EAAE,8BAA8B,YAAY,IAAI,EAAE,EAAE;EACnJ,IAAI,KAAK,aAAa,KAAK,UAAU,OAAO,QAAQ,0BAA0B,YAAY,IAAI,EAAE,8BAA8B,YAAY,IAAI,EAAE,EAAE;CACnJ;AACD;;;;;;AAMA,SAAS,oBAAoB,GAAG,GAAG;CAClC,MAAM,QAAQ,aAAa,GAAG,CAAC;CAC/B,IAAI,UAAU,KAAK,GAAG,OAAO,MAAM,aAAa,MAAM;CACtD,OAAO,EAAE,eAAe,KAAK,KAAK,EAAE,eAAe,KAAK,KAAK,EAAE,WAAW,OAAO,EAAE,WAAW,MAAM,iBAAiB,EAAE,oBAAoB,CAAC,CAAC,MAAM,iBAAiB,EAAE,oBAAoB,CAAC,CAAC,KAAK,QAAQ,EAAE,IAAI,MAAM,QAAQ,EAAE,IAAI;AACpO;;AAEA,SAAS,aAAa,QAAQ;CAC7B,MAAM,OAAO,OAAO,eAAe,OAAO,cAAc;CACxD,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,OAAO,SAAS,OAAO,OAAO;AAC3E;;AAEA,SAAS,aAAa,UAAU,QAAQ;CACvC,IAAI,SAAS,gBAAgB,KAAK,KAAK,OAAO,gBAAgB,KAAK,GAAG,OAAO,KAAK;CAClF,OAAO;EACN,UAAU,aAAa,QAAQ,KAAK;EACpC,QAAQ,aAAa,MAAM,KAAK;CACjC;AACD;;AAEA,SAAS,YAAY,QAAQ;CAC5B,MAAM,OAAO,GAAG,OAAO,WAAW,OAAO,SAAS,OAAO,OAAO;CAChE,OAAO,KAAK,SAAS,IAAI,IAAI,OAAO,IAAI,KAAK;AAC9C;AACA,SAAS,QAAQ,MAAM;CACtB,OAAO;EACN;EACA,OAAO;CACR;AACD;AACA,SAAS,YAAY,QAAQ;CAC5B,OAAO,OAAO,WAAW,aAAa;AACvC;;;;;;;;;;;;;;;;;;AAoBA,IAAI,kBAAkB,MAAM,wBAAwB,gBAAgB;CACnE,WAAW,yBAAyB;CACpC;CACA;CACA;CACA,YAAY,OAAO;EAClB,MAAM;EACN,KAAK,UAAU,MAAM;EACrB,KAAK,kBAAkB,MAAM;EAC7B,KAAK,oBAAoB,MAAM;EAC/B,IAAI,MAAM,qBAAqB,KAAK,GAAG,KAAK,mBAAmB,MAAM;EACrE,IAAI,MAAM,SAAS,KAAK,GAAG,KAAK,OAAO,MAAM;EAC7C,IAAI,MAAM,aAAa,KAAK,GAAG,KAAK,WAAW,MAAM;EACrD,IAAI,MAAM,aAAa,KAAK,GAAG,KAAK,WAAW,MAAM;EACrD,IAAI,MAAM,gBAAgB,KAAK,GAAG,KAAK,cAAc,MAAM;EAC3D,MAAM,8BAA8B,MAAM,+BAA+B,MAAM;EAC/E,IAAI,gCAAgC,KAAK,GAAG,KAAK,8BAA8B;EAC/E,oBAAoB,MAAM,aAAa,MAAM,SAAS;EACtD,WAAW,IAAI;CAChB;CACA,IAAI,KAAK;EACR,MAAM,sBAAsB,KAAK,+BAA+B;EAChE,OAAO,eAAe,KAAK,QAAQ,KAAK,GAAG,EAAE,IAAI,oBAAoB,GAAG,KAAK,gBAAgB,GAAG,KAAK,kBAAkB,KAAK,GAAG,EAAE;CAClI;CACA,WAAW;EACV,OAAO,CAAC;CACT;CACA,OAAO,GAAG,MAAM;EACf,OAAO,KAAK,aAAa,yBAAyB;CACnD;;;;;;;CAOA,UAAU,OAAO;EAChB,MAAM,OAAO,UAAU,KAAK;EAC5B,WAAW,MAAM,mBAAmB,gBAAgB,EAAE;EACtD,OAAO,yBAAyB,KAAK,UAAU,KAAK,QAAQ,KAAK,yBAAyB,KAAK,UAAU,KAAK,QAAQ;CACvH;AACD;AACA,SAAS,yBAAyB,UAAU,QAAQ;CACnD,MAAM,qBAAqB,aAAa,aAAa,KAAK,IAAI;CAC9D,IAAI,uBAAuB,KAAK,GAAG,OAAO;CAC1C,OAAO,wBAAwB,WAAW,aAAa,KAAK,IAAI;AACjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,IAAI,aAAa,MAAM,mBAAmB,gBAAgB;CACzD,WAAW,yBAAyB;CACpC;CACA;CACA,YAAY,OAAO;EAClB,MAAM;EACN,MAAM,OAAO,OAAO,MAAM,MAAM;EAChC,IAAI,MAAM,YAAY,KAAK,OAAO,MAAM,eAAe,KAAK,IAAI,MAAM,IAAI,cAAc,eAAe,KAAK,qDAAqD;EACjK,KAAK,OAAO;EACZ,KAAK,SAAS,MAAM;EACpB,IAAI,MAAM,OAAO,SAAS,QAAQ,KAAK,SAAS,MAAM,OAAO;EAC7D,IAAI,MAAM,YAAY,KAAK,GAAG,KAAK,UAAU,MAAM;EACnD,IAAI,MAAM,eAAe,KAAK,GAAG,KAAK,aAAa,MAAM;EACzD,IAAI,MAAM,UAAU,KAAK,GAAG,KAAK,QAAQ,MAAM;EAC/C,MAAM,iBAAiB,mBAAmB,MAAM,IAAI;EACpD,IAAI,mBAAmB,KAAK,GAAG,KAAK,OAAO;EAC3C,IAAI,MAAM,YAAY,KAAK,GAAG,KAAK,UAAU,MAAM;EACnD,IAAI,MAAM,gBAAgB,KAAK,GAAG,KAAK,cAAc,MAAM;EAC3D,oBAAoB,MAAM,aAAa,MAAM,SAAS;EACtD,oBAAoB,MAAM,WAAW,MAAM,OAAO;EAClD,WAAW,IAAI;CAChB;CACA,IAAI,KAAK;EACR,OAAO,SAAS,KAAK;CACtB;CACA,WAAW;EACV,OAAO,CAAC;CACT;CACA,OAAO,KAAK,OAAO;EAClB,OAAO,iBAAiB,aAAa,QAAQ,IAAI,WAAW,KAAK;CAClE;CACA,OAAO,GAAG,MAAM;EACf,OAAO,KAAK,aAAa,yBAAyB;CACnD;;;;;;;;CAQA,UAAU,OAAO;EAChB,MAAM,OAAO,UAAU,KAAK;EAC5B,WAAW,MAAM,cAAc,WAAW,EAAE;EAC5C,OAAO,KAAK,cAAc,MAAM;GAC/B,gBAAgB;GAChB,QAAQ,KAAK,WAAW,KAAK,IAAI,YAAY;EAC9C,CAAC;CACF;;;;;;;;;;;;;;;;;;;;;;CAsBA,cAAc,OAAO,YAAY;EAChC,MAAM,eAAe,WAAW,mBAAmB,aAAa,KAAK,YAAY,KAAK,OAAO,MAAM,YAAY,KAAK,OAAO,KAAK,YAAY,KAAK,KAAK,aAAa,KAAK,SAAS,MAAM,WAAW,CAAC,CAAC,KAAK,KAAK,YAAY,KAAK,KAAK,MAAM,YAAY,KAAK,KAAK,aAAa,KAAK,SAAS,MAAM,OAAO;EACxS,IAAI,EAAE,KAAK,WAAW,MAAM,UAAU,mBAAmB,KAAK,IAAI,MAAM,mBAAmB,MAAM,IAAI,KAAK,kBAAkB,KAAK,SAAS,MAAM,OAAO,KAAK,eAAe,OAAO;EAClL,IAAI,WAAW,WAAW,WAAW,OAAO;EAC5C,QAAQ,KAAK,cAAc,SAAS,MAAM,cAAc,QAAQ,KAAK,SAAS,SAAS,MAAM,SAAS;CACvG;AACD;;;;;;;;;;;;;;AAcA,SAAS,mBAAmB,MAAM;CACjC,OAAO,SAAS,UAAU,KAAK,IAAI;AACpC;;;;;;;AAOA,SAAS,kBAAkB,GAAG,GAAG;CAChC,MAAM,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CAC3C,MAAM,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CAC3C,IAAI,MAAM,WAAW,MAAM,QAAQ,OAAO;CAC1C,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG,IAAI,MAAM,OAAO,MAAM,IAAI,OAAO;CAC5E,IAAI,MAAM,WAAW,GAAG,OAAO;CAC/B,KAAK,MAAM,OAAO,OAAO,IAAI,0BAA0B,IAAI,IAAI,MAAM,0BAA0B,IAAI,IAAI,GAAG,OAAO;CACjH,OAAO;AACR;;;;;;;;;;;;AAcA,IAAI,cAAc,MAAM,oBAAoB,gBAAgB;CAC3D,WAAW,yBAAyB;CACpC;CACA,YAAY,OAAO;EAClB,MAAM;EACN,KAAK,UAAU,CAAC,GAAG,MAAM,OAAO;EAChC,IAAI,MAAM,SAAS,KAAK,GAAG,KAAK,OAAO,MAAM;EAC7C,IAAI,MAAM,gBAAgB,KAAK,GAAG,KAAK,cAAc,MAAM;EAC3D,oBAAoB,MAAM,aAAa,MAAM,SAAS;EACtD,WAAW,IAAI;CAChB;CACA,IAAI,KAAK;EACR,OAAO,UAAU,KAAK,QAAQ,KAAK,GAAG;CACvC;CACA,WAAW;EACV,OAAO,CAAC;CACT;CACA,OAAO,GAAG,MAAM;EACf,OAAO,KAAK,aAAa,yBAAyB;CACnD;CACA,UAAU,OAAO;EAChB,MAAM,OAAO,UAAU,KAAK;EAC5B,WAAW,MAAM,eAAe,YAAY,EAAE;EAC9C,OAAO,KAAK,OAAO,KAAK;CACzB;AACD;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAI,aAAa,cAAc,gBAAgB;CAC9C,WAAW,yBAAyB;CACpC;CACA;CACA;CACA;CACA;CACA,YAAY,OAAO;EAClB,MAAM;EACN,KAAK,OAAO,MAAM;EAClB,KAAK,UAAU,OAAO,OAAO,OAAO,YAAY,OAAO,QAAQ,MAAM,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,KAAK,eAAe,cAAc,MAAM,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;EAClK,KAAK,cAAc,OAAO,OAAO,MAAM,YAAY,KAAK,OAAO,cAAc,kBAAkB,KAAK,IAAI,gBAAgB,EAAE,CAAC,CAAC;EAC5H,KAAK,UAAU,OAAO,OAAO,MAAM,QAAQ,KAAK,MAAM,aAAa,cAAc,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC;EACxG,KAAK,UAAU,OAAO,OAAO,MAAM,QAAQ,IAAI,WAAW,IAAI,CAAC;EAC/D,IAAI,MAAM,eAAe,KAAK,GAAG,KAAK,aAAa,WAAW,KAAK,MAAM,UAAU;EACnF,IAAI,MAAM,gBAAgB,KAAK,GAAG,KAAK,cAAc,MAAM;EAC3D,IAAI,MAAM,WAAW,KAAK,KAAK,MAAM,OAAO,SAAS,GAAG,KAAK,SAAS,OAAO,OAAO,MAAM,OAAO,IAAI,qBAAqB,IAAI,CAAC;EAC/H,WAAW,IAAI;CAChB;CACA,IAAI,KAAK;EACR,OAAO,KAAK;CACb;CACA,UAAU,OAAO;EAChB,OAAO,KAAK,OAAO,MAAM;CAC1B;CACA,WAAW;EACV,OAAO;GACN,GAAG,OAAO,OAAO,KAAK,OAAO;GAC7B,GAAG,KAAK,aAAa,CAAC,KAAK,UAAU,IAAI,CAAC;GAC1C,GAAG,KAAK;GACR,GAAG,KAAK;GACR,GAAG,KAAK;GACR,GAAG,KAAK,UAAU,CAAC;EACpB;CACD;AACD;;;;;;;;;;;;;;;;AAkBA,IAAI,cAAc,cAAc,gBAAgB;CAC/C,WAAW,yBAAyB;CACpC;CACA,YAAY,OAAO;EAClB,MAAM;EACN,KAAK,SAAS,OAAO,OAAO,OAAO,YAAY,OAAO,QAAQ,MAAM,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,aAAa,aAAa,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;EACtJ,IAAI,MAAM,gBAAgB,KAAK,GAAG,KAAK,cAAc,MAAM;EAC3D,WAAW,IAAI;CAChB;CACA,IAAI,KAAK;EACR,OAAO;CACR;CACA,UAAU,OAAO;EAChB,OAAO,KAAK,OAAO,MAAM;CAC1B;CACA,WAAW;EACV,OAAO,OAAO,OAAO,KAAK,MAAM;CACjC;AACD"}
|