@kyro-cms/core 0.9.7 → 0.9.8
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/dist/{WebhookService-BKszZlG0.d.cts → WebhookService-Dj8pJ3sp.d.cts} +1 -1
- package/dist/{WebhookService-Ccf1j-IN.d.ts → WebhookService-DpRB940h.d.ts} +1 -1
- package/dist/api-handler-graphql.cjs +11 -11
- package/dist/api-handler-graphql.js +7 -7
- package/dist/api-handler-trpc.cjs +9 -9
- package/dist/api-handler-trpc.js +7 -7
- package/dist/api-handler.cjs +10 -10
- package/dist/api-handler.js +7 -7
- package/dist/{base-CIuXkrH4.d.cts → base-BjyoF6da.d.cts} +2 -2
- package/dist/{base-fFo4lqER.d.ts → base-C2YR8lWt.d.ts} +2 -2
- package/dist/{chunk-QVJNSAQL.cjs → chunk-2CBCU5ML.cjs} +47 -41
- package/dist/chunk-2CBCU5ML.cjs.map +1 -0
- package/dist/{chunk-NZEUU7QB.js → chunk-2GXALYKV.js} +2 -2
- package/dist/chunk-2GXALYKV.js.map +1 -0
- package/dist/{chunk-3UK5XBVJ.js → chunk-2Z7YAJBS.js} +10 -9
- package/dist/chunk-2Z7YAJBS.js.map +1 -0
- package/dist/{chunk-QX3WNQ7V.js → chunk-65DSXNQL.js} +4 -4
- package/dist/{chunk-QX3WNQ7V.js.map → chunk-65DSXNQL.js.map} +1 -1
- package/dist/{chunk-PONTBXR5.js → chunk-6DURKQ6W.js} +370 -140
- package/dist/chunk-6DURKQ6W.js.map +1 -0
- package/dist/{chunk-AX2TZRQJ.js → chunk-EQTMBMDR.js} +3 -3
- package/dist/{chunk-AX2TZRQJ.js.map → chunk-EQTMBMDR.js.map} +1 -1
- package/dist/{chunk-E5UJBLQ7.js → chunk-FIAMXNTH.js} +2 -2
- package/dist/chunk-FIAMXNTH.js.map +1 -0
- package/dist/{chunk-VLK5SJRI.js → chunk-HA4MGAZJ.js} +28 -22
- package/dist/chunk-HA4MGAZJ.js.map +1 -0
- package/dist/{chunk-FKKQUMXR.cjs → chunk-KGJRJ7CU.cjs} +2 -2
- package/dist/chunk-KGJRJ7CU.cjs.map +1 -0
- package/dist/{chunk-FSKONGCX.cjs → chunk-OJ2AM75W.cjs} +2 -2
- package/dist/chunk-OJ2AM75W.cjs.map +1 -0
- package/dist/{chunk-DRVOUQMT.cjs → chunk-OVZO4KB6.cjs} +45 -79
- package/dist/chunk-OVZO4KB6.cjs.map +1 -0
- package/dist/{chunk-RRKCIAPU.cjs → chunk-PF642V5O.cjs} +372 -140
- package/dist/chunk-PF642V5O.cjs.map +1 -0
- package/dist/{chunk-OZ3CCTTA.cjs → chunk-PJ7F4TCC.cjs} +5 -5
- package/dist/{chunk-OZ3CCTTA.cjs.map → chunk-PJ7F4TCC.cjs.map} +1 -1
- package/dist/{chunk-HVCUIII2.cjs → chunk-W3GT55TY.cjs} +13 -13
- package/dist/{chunk-HVCUIII2.cjs.map → chunk-W3GT55TY.cjs.map} +1 -1
- package/dist/{chunk-QFLB4EIJ.cjs → chunk-Z7OH3MWT.cjs} +10 -9
- package/dist/chunk-Z7OH3MWT.cjs.map +1 -0
- package/dist/{chunk-CMXVTUYV.js → chunk-ZFHTJ2YX.js} +29 -63
- package/dist/chunk-ZFHTJ2YX.js.map +1 -0
- package/dist/client.cjs +3 -3
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +1 -1
- package/dist/drizzle/index.d.cts +3 -3
- package/dist/drizzle/index.d.ts +3 -3
- package/dist/fields/index.cjs +21 -21
- package/dist/fields/index.d.cts +1 -1
- package/dist/fields/index.d.ts +1 -1
- package/dist/fields/index.js +1 -1
- package/dist/graphql/index.cjs +13 -5
- package/dist/graphql/index.d.cts +34 -12
- package/dist/graphql/index.d.ts +34 -12
- package/dist/graphql/index.js +2 -2
- package/dist/{index-BKta3cBH.d.cts → index-DHbywDs-.d.cts} +2 -2
- package/dist/{index-ClOqnkTO.d.ts → index-jLs0zlft.d.ts} +2 -2
- package/dist/index.cjs +90 -90
- package/dist/index.d.cts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +8 -8
- package/dist/mongodb/index.d.cts +3 -3
- package/dist/mongodb/index.d.ts +3 -3
- package/dist/rest/index.cjs +5 -5
- package/dist/rest/index.d.cts +4 -4
- package/dist/rest/index.d.ts +4 -4
- package/dist/rest/index.js +3 -3
- package/dist/templates/index.d.cts +2 -2
- package/dist/templates/index.d.ts +2 -2
- package/dist/trpc/index.cjs +12 -12
- package/dist/trpc/index.d.cts +3 -3
- package/dist/trpc/index.d.ts +3 -3
- package/dist/trpc/index.js +3 -3
- package/dist/{types-Dgzlftb7.d.ts → types-BzH3_rtP.d.ts} +7 -7
- package/dist/{types-Ds0tCA3L.d.cts → types-CY_iNunL.d.cts} +7 -7
- package/dist/{types-DeSApf9T.d.ts → types-C_rVxU2T.d.cts} +4 -4
- package/dist/{types-DeSApf9T.d.cts → types-C_rVxU2T.d.ts} +4 -4
- package/package.json +2 -1
- package/dist/chunk-3UK5XBVJ.js.map +0 -1
- package/dist/chunk-CMXVTUYV.js.map +0 -1
- package/dist/chunk-DRVOUQMT.cjs.map +0 -1
- package/dist/chunk-E5UJBLQ7.js.map +0 -1
- package/dist/chunk-FKKQUMXR.cjs.map +0 -1
- package/dist/chunk-FSKONGCX.cjs.map +0 -1
- package/dist/chunk-NZEUU7QB.js.map +0 -1
- package/dist/chunk-PONTBXR5.js.map +0 -1
- package/dist/chunk-QFLB4EIJ.cjs.map +0 -1
- package/dist/chunk-QVJNSAQL.cjs.map +0 -1
- package/dist/chunk-RRKCIAPU.cjs.map +0 -1
- package/dist/chunk-VLK5SJRI.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/graphql/schema.ts"],"names":["arrFields","groupFields"],"mappings":";;;;AAoDA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,OAAO,KAAK,KAAA,CAAM,MAAM,EAAE,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AACpF;AAEA,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,MAAM,CAAA,GAAI,aAAa,IAAI,CAAA;AAC3B,EAAA,OAAO,CAAA,CAAE,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AAC9C;AAEA,SAAS,iBAAiB,IAAA,EAAsB;AAC9C,EAAA,MAAM,CAAA,GAAI,aAAa,IAAI,CAAA;AAC3B,EAAA,IAAI,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,IAAK,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACzD,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,gBAAgB,IAAA,EAAsB;AAC7C,EAAA,OAAO,YAAY,IAAI,CAAA,CAAE,QAAA,CAAS,GAAG,KAAK,IAAA,CAAK,MAAA,GAAS,CAAA,GACpD,WAAA,CAAY,IAAI,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA,GAC7B,YAAY,IAAI,CAAA;AACtB;AAYO,IAAM,iBAAN,MAAqB;AAAA,EAClB,EAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA,uBAAa,GAAA,EAA8B;AAAA,EAC3C,OAAA,uBAAc,GAAA,EAAyB;AAAA,EAE/C,YAAY,IAAA,EAAqB;AAC/B,IAAA,IAAA,CAAK,KAAK,IAAA,CAAK,EAAA;AACf,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AACrB,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,EACnB;AAAA,EAEQ,YAAY,UAAA,EAA4B;AAC9C,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,CAAK,UAAA,EAAoB,EAAA,EAAsC;AACnE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,UAAU,CAAA;AACvC,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAC/B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,KAAA,uBAAY,GAAA,EAAI;AAChB,MAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,IAC5B;AACA,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG;AACjB,MAAA,OAAO,KAAA,CAAM,IAAI,EAAE,CAAA;AAAA,IACrB;AAEA,IAAA,IAAI,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACrC,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,UAAA,uBAAiB,GAAA,EAAI;AACrB,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,UAAU,CAAA;AAAA,IAClC;AACA,IAAA,UAAA,CAAW,IAAI,EAAE,CAAA;AAEjB,IAAA,KAAA,CAAM,GAAA,CAAI,IAAI,MAAS,CAAA;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,KAAK,OAAA,EAAS;AACrC,MAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AACjC,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK;AAAA,QAC9B,UAAA,EAAY,GAAA;AAAA,QACZ,KAAA,EAAO,EAAE,EAAA,EAAI,EAAE,IAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,EAAE,EAAE;AAAA,QACrC,OAAO,GAAA,CAAI,IAAA;AAAA,QACX,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,KAAA,EAAO,CAAC,CAAC,IAAA,CAAK;AAAA,OACf,CAAA;AACD,MAAA,KAAA,MAAW,GAAA,IAAQ,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAa;AAC5C,QAAA,IAAI,GAAA,IAAO,IAAI,EAAA,EAAI;AACjB,UAAA,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,GAAG,CAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,EACrB;AAAA,EAEA,UAAA,CAAW,YAAoB,EAAA,EAA6B;AAC1D,IAAA,OAAO,IAAA,CAAK,OAAO,GAAA,CAAI,IAAA,CAAK,YAAY,UAAU,CAAC,CAAA,EAAG,GAAA,CAAI,EAAE,CAAA;AAAA,EAC9D;AAAA,EAEA,aAAa,SAAA,CACX,MAAA,EACA,EAAA,EACY;AACZ,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,EAAG;AACxB,IAAA,MAAM,OAAO,QAAA,EAAS;AACtB,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAMA,SAAS,QAAA,CAAS,SAAiB,IAAA,EAAqB;AACtD,EAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,OAAO,CAAA;AAC7B,EAAC,GAAA,CAAY,UAAA,GAAa,EAAE,IAAA,EAAK;AACjC,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,WAAW,QAAA,EAAkB;AAC3C,EAAA,OAAO,CAAC,iBAAA,KAA2B;AACjC,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,OAAO;AAAA,MACL,KAAA,GAAQ;AACN,QAAA,KAAA,EAAA;AACA,QAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,UAAA,iBAAA,CAAkB,WAAA;AAAA,YAChB,IAAI,YAAA,CAAa,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAE;AAAA,WAC3D;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA,UAAA,GAAa;AAAE,QAAA,KAAA,EAAA;AAAA,MAAS;AAAA,KAC1B;AAAA,EACF,CAAA;AACF;AAMA,eAAe,WAAA,CACb,MAAA,EACA,SAAA,EACA,OAAA,EACkC;AAClC,EAAA,MAAM,MAAA,GAAS,MAAM,qBAAA,CAAsB,MAAA,EAAQ,WAAW,OAAO,CAAA;AACrE,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,QAAA,CAAS,MAAA,CAAO,KAAA,IAAS,eAAA,EAAiB,WAAW,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,MAAA,CAAO,UAAA;AAChB;AAEA,eAAe,oBAAA,CACb,MAAA,EACA,SAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,MAAA,EAAQ,WAAW,OAAO,CAAA;AACjE,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,QAAA,CAAS,MAAA,CAAO,KAAA,IAAS,eAAA,EAAiB,WAAW,CAAA;AAAA,EAC7D;AACF;AAMA,SAAS,kBAAA,CACP,KAAA,EACA,QAAA,EACA,eAAA,EACA,cAAc,KAAA,EACD;AACb,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,KAAA,CAAM,UAAU,UAAA,GAAa,YAAA;AAAA,IACtC,KAAK,UAAA;AACH,MAAA,OAAO,cAAA;AAAA,IACT,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,IAAI,OAAO,KAAA,CAAM,UAAA,KAAe,QAAA,EAAU;AACxC,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,IAAI,MAAM,OAAA,EAAS;AACjB,YAAA,OAAO,IAAI,YAAY,aAAa,CAAA;AAAA,UACtC;AACA,UAAA,OAAO,aAAA;AAAA,QACT;AACA,QAAA,IAAI,eAAA,GAAkB,KAAA,CAAM,UAAU,CAAA,EAAG;AACvC,UAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA;AAChD,UAAA,IAAI,MAAM,OAAA,EAAS;AACjB,YAAA,OAAO,IAAI,YAAY,OAAO,CAAA;AAAA,UAChC;AACA,UAAA,OAAO,OAAA;AAAA,QACT;AACA,QAAA,MAAM,iBAAA,GAAoB,QAAA,CAAS,aAAA,CAAc,KAAA,CAAM,UAAU,CAAA;AACjE,QAAA,IAAI,iBAAA,EAAmB;AACrB,UAAA,MAAM,OAAA,GAAU,IAAI,iBAAA,CAAkB;AAAA,YACpC,IAAA,EAAM,gBAAA,CAAiB,KAAA,CAAM,UAAU,CAAA;AAAA,YACvC,QAAQ,OAAO;AAAA,cACb,EAAA,EAAI,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,cAC1B,GAAG,yBAAA,CAA0B,iBAAA,EAAmB,QAAA,EAAU,eAAe;AAAA,aAC3E;AAAA,WACD,CAAA;AACD,UAAA,IAAI,eAAA,EAAiB;AACnB,YAAA,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA,GAAI,OAAA;AAAA,UACtC;AACA,UAAA,IAAI,MAAM,OAAA,EAAS;AACjB,YAAA,OAAO,IAAI,YAAY,OAAO,CAAA;AAAA,UAChC;AACA,UAAA,OAAO,OAAA;AAAA,QACT;AAAA,MACF;AACA,MAAA,OAAO,KAAA,CAAM,OAAA,GAAU,IAAI,WAAA,CAAY,aAAa,CAAA,GAAI,aAAA;AAAA,IAC1D,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAMA,aAAa,KAAA,CAAc,MAAA;AACjC,QAAA,IAAIA,UAAAA,IAAaA,UAAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACrC,UAAA,MAAM,WAAA,GAAc,GAAG,KAAA,CAAM,IAAA,EAAM,QAAQ,IAAA,EAAM,GAAG,KAAK,OAAO,CAAA,WAAA,CAAA;AAChE,UAAA,OAAO,IAAI,WAAA,CAAY,8BAAA,CAA+B,WAAA,EAAaA,UAAAA,EAAW,QAAQ,CAAC,CAAA;AAAA,QACzF;AACA,QAAA,OAAO,IAAI,YAAY,aAAa,CAAA;AAAA,MACtC;AACA,MAAA,MAAM,YAAa,KAAA,CAAc,MAAA;AACjC,MAAA,IAAI,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACrC,QAAA,MAAM,WAAA,GAAc,GAAG,KAAA,CAAM,IAAA,EAAM,QAAQ,IAAA,EAAM,GAAG,KAAK,OAAO,CAAA,KAAA,CAAA;AAChE,QAAA,MAAM,QAAA,GAAW,yBAAA,CAA0B,WAAA,EAAa,SAAA,EAAW,UAAU,eAAe,CAAA;AAC5F,QAAA,OAAO,IAAI,YAAY,QAAQ,CAAA;AAAA,MACjC;AACA,MAAA,OAAO,IAAI,YAAY,aAAa,CAAA;AAAA,IACtC;AAAA,IACA,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAMC,eAAe,KAAA,CAAc,MAAA;AACnC,QAAA,IAAIA,YAAAA,IAAeA,YAAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACzC,UAAA,MAAM,aAAA,GAAgB,GAAG,KAAA,CAAM,IAAA,EAAM,QAAQ,IAAA,EAAM,GAAG,KAAK,OAAO,CAAA,YAAA,CAAA;AAClE,UAAA,OAAO,8BAAA,CAA+B,aAAA,EAAeA,YAAAA,EAAa,QAAQ,CAAA;AAAA,QAC5E;AACA,QAAA,OAAO,aAAA;AAAA,MACT;AACA,MAAA,MAAM,cAAe,KAAA,CAAc,MAAA;AACnC,MAAA,IAAI,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACzC,QAAA,MAAM,aAAA,GAAgB,GAAG,KAAA,CAAM,IAAA,EAAM,QAAQ,IAAA,EAAM,GAAG,KAAK,OAAO,CAAA,MAAA,CAAA;AAClE,QAAA,OAAO,yBAAA,CAA0B,aAAA,EAAe,WAAA,EAAa,QAAA,EAAU,eAAe,CAAA;AAAA,MACxF;AACA,MAAA,OAAO,aAAA;AAAA,IACT;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,IAAI,aAAa,OAAO,aAAA;AACxB,MAAA,MAAM,SAAU,KAAA,CAAc,MAAA;AAC9B,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC/B,QAAA,MAAM,aAAkC,EAAC;AACzC,QAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,MAAM,aAAA,GAAgB,CAAA,KAAA,EAAQ,YAAA,CAAa,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA;AACtD,UAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAkB;AAAA,YAClC,IAAA,EAAM,aAAA;AAAA,YACN,QAAQ,MAAM;AACZ,cAAA,MAAM,GAAA,GAAoD;AAAA,gBACxD,WAAW,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,aAAa,CAAA,EAAE;AAAA,gBACrD,EAAA,EAAI,EAAE,IAAA,EAAM,aAAA;AAAc,eAC5B;AACA,cAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,gBAAA,KAAA,MAAW,EAAA,IAAM,MAAM,MAAA,EAAQ;AAC7B,kBAAA,IAAI,CAAC,GAAG,IAAA,EAAM;AACd,kBAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,EAAA,EAAI,QAAA,EAAU,eAAe,CAAA;AAC/D,kBAAA,IAAI,QAAA,EAAU,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,GAAI,QAAA;AAAA,gBAC/B;AAAA,cACF;AACA,cAAA,OAAO,GAAA;AAAA,YACT;AAAA,WACD,CAAA;AACD,UAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,QACvB;AACA,QAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,UAAA,MAAM,SAAA,GAAY,GAAG,KAAA,CAAM,IAAA,EAAM,QAAQ,IAAA,EAAM,GAAG,KAAK,QAAQ,CAAA,MAAA,CAAA;AAC/D,UAAA,OAAO,IAAI,gBAAA,CAAiB;AAAA,YAC1B,IAAA,EAAM,SAAA;AAAA,YACN,KAAA,EAAO,UAAA;AAAA,YACP,YAAY,KAAA,EAAY;AACtB,cAAA,MAAM,SAAA,GAAY,QAAQ,KAAA,EAAO,SAAA,GAAY,aAAa,KAAA,CAAM,SAAS,IAAI,EAAE,CAAA,CAAA;AAC/E,cAAA,MAAM,YAAY,UAAA,CAAW,IAAA;AAAA,gBAC3B,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,KAAS;AAAA,eACtB;AACA,cAAA,OAAO,WAAW,IAAA,IAAQ,MAAA;AAAA,YAC5B;AAAA,WACD,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA,OAAO,IAAI,YAAY,aAAa,CAAA;AAAA,IACtC;AAAA,IACA,KAAK,KAAA;AAAA,IACL,KAAK,aAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT;AACE,MAAA,OAAO,aAAA;AAAA;AAEb;AAEA,SAAS,yBAAA,CACP,MAAA,EACA,QAAA,EACA,eAAA,EAC8C;AAC9C,EAAA,MAAM,SAAuD,EAAC;AAE9D,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,IAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,KAAA,EAAO,WAAW,IAAA,EAAM;AAC9C,MAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,KAAA,EAAO,QAAA,EAAU,eAAe,CAAA;AAC5D,MAAA,IAAI,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,EAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,cACP,MAAA,EAC6B;AAC7B,EAAA,MAAM,UAAA,GAAgD;AAAA,IACpD,EAAA,EAAI,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,IAClB,SAAA,EAAW,EAAE,KAAA,EAAO,WAAA,EAAY;AAAA,IAChC,SAAA,EAAW,EAAE,KAAA,EAAO,WAAA;AAAY,GAClC;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,UAAA,CAAW,MAAM,IAAI,CAAA,GAAI,EAAE,KAAA,EAAO,MAAM,IAAA,EAAK;AAC7C,MAAA,UAAA,CAAW,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,IAAA,CAAM,CAAA,GAAI,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAA,EAAG;AAC3D,MAAA,UAAA,CAAW,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,KAAA,CAAO,CAAA,GAAI,EAAE,KAAA,EAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,CAAA,EAAG;AAAA,IAC/D;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,eAAA,CAAgB;AAAA,IACzB,IAAA,EAAM,CAAA,EAAG,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAC,CAAA,IAAA,CAAA;AAAA,IACtC,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;AAMA,SAAS,oBAAA,CACP,OACA,UAAA,EACoC;AACpC,EAAA,MAAM,QAAA,GAAW,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,KAAA,CAAM,MAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,IAAK,OAAO,CAAA,OAAA,CAAA;AAE3E,EAAA,MAAM,SAAA,GAAmD;AAAA,IACvD,MAAA,EAAQ,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IAC9B,UAAA,EAAY,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IAClC,QAAA,EAAU,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IAChC,YAAA,EAAc,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IACpC,IAAI,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,aAAa,CAAA,EAAE;AAAA,IAC3C,QAAQ,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,aAAa,CAAA,EAAE;AAAA,IAC/C,MAAA,EAAQ,EAAE,IAAA,EAAM,cAAA;AAAe,GACjC;AAEA,EAAA,MAAM,SAAA,GAAmD;AAAA,IACvD,MAAA,EAAQ,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,IAC7B,UAAA,EAAY,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,IACjC,YAAA,EAAc,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,IACnC,SAAA,EAAW,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,IAChC,kBAAA,EAAoB,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,IACzC,eAAA,EAAiB,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,IACtC,IAAI,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,YAAY,CAAA,EAAE;AAAA,IAC1C,QAAQ,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,YAAY,CAAA,EAAE;AAAA,IAC9C,MAAA,EAAQ,EAAE,IAAA,EAAM,cAAA;AAAe,GACjC;AAEA,EAAA,MAAM,OAAA,GAAiD;AAAA,IACrD,MAAA,EAAQ,EAAE,IAAA,EAAM,cAAA,EAAe;AAAA,IAC/B,MAAA,EAAQ,EAAE,IAAA,EAAM,cAAA;AAAe,GACjC;AAEA,EAAA,MAAM,OAAA,GAAiD;AAAA,IACrD,MAAA,EAAQ,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IAC9B,UAAA,EAAY,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IAClC,YAAA,EAAc,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IACpC,SAAA,EAAW,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IACjC,MAAA,EAAQ,EAAE,IAAA,EAAM,cAAA;AAAe,GACjC;AAEA,EAAA,MAAM,WAAA,GAAqD;AAAA,IACzD,MAAA,EAAQ,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IAC9B,UAAA,EAAY,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,IAClC,IAAI,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,aAAa,CAAA,EAAE;AAAA,IAC3C,QAAQ,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,aAAa,CAAA,EAAE;AAAA,IAC/C,MAAA,EAAQ,EAAE,IAAA,EAAM,cAAA;AAAe,GACjC;AAEA,EAAA,MAAM,OAAA,GAAiD;AAAA,IACrD,MAAA,EAAQ,EAAE,IAAA,EAAM,cAAA;AAAe,GACjC;AAEA,EAAA,IAAI,GAAA;AAEJ,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,GAAA,GAAM,SAAA;AACN,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,GAAA,GAAM,SAAA;AACN,MAAA;AAAA,IACF,KAAK,UAAA;AACH,MAAA,GAAA,GAAM,OAAA;AACN,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAA,GAAA,GAAM,OAAA;AACN,MAAA;AAAA,IACF,KAAK,cAAA;AACH,MAAA,GAAA,GAAM,WAAA;AACN,MAAA;AAAA,IACF,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,GAAA,GAAM,OAAA;AACN,MAAA;AAAA,IACF;AACE,MAAA,GAAA,GAAM,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAM,gBAAe,EAAE;AAAA;AAG7C,EAAA,OAAO,IAAI,sBAAA,CAAuB;AAAA,IAChC,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;AAEA,SAAS,yBAAA,CACP,QACA,UAAA,EACwB;AACxB,EAAA,MAAM,MAAA,GAAgD;AAAA,IACpD,KAAK,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,aAAa,CAAA,EAAE;AAAA,IAC5C,IAAI,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,aAAa,CAAA;AAAE,GAC7C;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,IAAA,IAAI,CAAC,MAAM,IAAA,EAAM;AACjB,IAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,KAAA,EAAO,UAAU,CAAA;AACzD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,EAAE,MAAM,UAAA,EAAW;AAAA,IAC1C;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,sBAAA,CAAuB;AAAA,IAChC,IAAA,EAAM,GAAG,UAAU,CAAA,MAAA,CAAA;AAAA,IACnB;AAAA,GACD,CAAA;AACH;AAEA,SAAS,gBAAgB,MAAA,EAAkD;AACzE,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,WAAW,QAAA,EAAU,OAAO,UAAU,EAAC;AAE7D,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,GAAA,KAAQ,KAAA,IAAS,GAAA,KAAQ,IAAA,EAAM;AACnC,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,EAChB;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,8BAAA,CACP,IAAA,EACA,MAAA,EACA,QAAA,EACwB;AACxB,EAAA,OAAO,IAAI,sBAAA,CAAuB;AAAA,IAChC,IAAA;AAAA,IACA,QAAQ,MAAM;AACZ,MAAA,MAAM,MAA+C,EAAC;AACtD,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,CAAC,MAAM,IAAA,EAAM;AACjB,QAAA,IAAI,KAAA,CAAM,IAAA,KAAS,KAAA,IAAS,KAAA,CAAM,SAAS,aAAA,EAAe;AACxD,UAAA,MAAM,YAAa,KAAA,CAAc,MAAA;AACjC,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,KAAA,MAAW,MAAM,SAAA,EAAW;AAC1B,cAAA,IAAI,CAAC,GAAG,IAAA,EAAM;AACd,cAAA,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,GAAI,EAAE,IAAA,EAAM,mBAAmB,EAAA,EAAI,QAAA,EAAU,MAAA,EAAW,IAAI,CAAA,EAAsB;AAAA,YAC/F;AAAA,UACF;AAAA,QACF,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ;AAChC,UAAA,MAAM,OAAQ,KAAA,CAAc,IAAA;AAC5B,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,cAAA,IAAI,IAAI,MAAA,EAAQ;AACd,gBAAA,KAAA,MAAW,EAAA,IAAM,IAAI,MAAA,EAAQ;AAC3B,kBAAA,IAAI,CAAC,GAAG,IAAA,EAAM;AACd,kBAAA,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,GAAI,EAAE,IAAA,EAAM,mBAAmB,EAAA,EAAI,QAAA,EAAU,MAAA,EAAW,IAAI,CAAA,EAAsB;AAAA,gBAC/F;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,GAAI,EAAE,IAAA,EAAM,mBAAmB,KAAA,EAAO,QAAA,EAAU,MAAA,EAAW,IAAI,CAAA,EAAsB;AAAA,QACrG;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;AAEA,SAAS,yBAAA,CACP,IAAA,EACA,MAAA,EACA,QAAA,EACA,eAAA,EACmB;AACnB,EAAA,OAAO,IAAI,iBAAA,CAAkB;AAAA,IAC3B,IAAA;AAAA,IACA,QAAQ,MAAM;AACZ,MAAA,MAAM,MAAoD,EAAC;AAC3D,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,CAAC,MAAM,IAAA,EAAM;AACjB,QAAA,IAAI,KAAA,CAAM,IAAA,KAAS,KAAA,IAAS,KAAA,CAAM,SAAS,aAAA,EAAe;AACxD,UAAA,MAAM,YAAa,KAAA,CAAc,MAAA;AACjC,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,KAAA,MAAW,MAAM,SAAA,EAAW;AAC1B,cAAA,IAAI,CAAC,GAAG,IAAA,EAAM;AACd,cAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,EAAA,EAAI,QAAA,EAAU,eAAe,CAAA;AACzD,cAAA,IAAI,EAAA,EAAI,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,GAAI,EAAA;AAAA,YACzB;AAAA,UACF;AAAA,QACF,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ;AAChC,UAAA,MAAM,OAAQ,KAAA,CAAc,IAAA;AAC5B,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,cAAA,IAAI,IAAI,MAAA,EAAQ;AACd,gBAAA,KAAA,MAAW,EAAA,IAAM,IAAI,MAAA,EAAQ;AAC3B,kBAAA,IAAI,CAAC,GAAG,IAAA,EAAM;AACd,kBAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,EAAA,EAAI,QAAA,EAAU,eAAe,CAAA;AACzD,kBAAA,IAAI,EAAA,EAAI,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,GAAI,EAAA;AAAA,gBACzB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACT,UAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,KAAA,EAAO,QAAA,EAAU,eAAe,CAAA;AAC5D,UAAA,IAAI,EAAA,EAAI,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,GAAI,EAAA;AAAA,QAC5B;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,GACG,CAAA;AACH;AAEA,SAAS,gBAAA,CACP,KAAA,EACA,QAAA,EACA,eAAA,EACqC;AACrC,EAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAM,OAAO,IAAA;AACxB,EAAA,MAAM,iBAAA,GAAqB,MAAc,UAAA,IAAc,MAAA;AACvD,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,cAAA,IAAkB,CAAE,MAAc,OAAA,EAAS;AAC5D,IAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,KAAA,EAAO,QAAA,EAAU,iBAAiB,KAAK,CAAA;AAC1E,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,QAAA,GAAW,IAAI,cAAA,CAAe,OAAO,CAAA,GAAI,OAAA;AAAA,MACrD,WAAA,EAAa,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,KAAA,CAAM,KAAA;AAAA,MAC/C,iBAAA;AAAA,MACA,OAAA,EAAS,CAAC,MAAA,EAAa,IAAA,EAAW,GAAA,KAAa;AAC7C,QAAA,MAAM,SAAqC,GAAA,EAAK,cAAA;AAChD,QAAA,MAAM,QAAA,GAAW,KAAA;AACjB,QAAA,MAAM,EAAA,GAAK,MAAA,GAAS,QAAA,CAAS,IAAI,CAAA;AACjC,QAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,QAAA,IAAI,MAAA,IAAU,OAAO,EAAA,KAAO,QAAA,EAAU;AACpC,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,QAAA,CAAS,YAAY,EAAE,CAAA;AACxD,UAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,UAAA,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,EAAE,CAAA;AAAA,QACrC;AACA,QAAA,OAAO,EAAE,EAAA,EAAG;AAAA,MACd;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,cAAA,IAAmB,KAAA,CAAc,OAAA,EAAS;AAC3D,IAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,KAAA,EAAO,QAAA,EAAU,iBAAiB,KAAK,CAAA;AAC1E,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,WAAA,EAAa,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,KAAA,CAAM,KAAA;AAAA,MAC/C,iBAAA;AAAA,MACA,OAAA,EAAS,CAAC,MAAA,EAAa,IAAA,EAAW,GAAA,KAAa;AAC7C,QAAA,MAAM,SAAqC,GAAA,EAAK,cAAA;AAChD,QAAA,MAAM,QAAA,GAAW,KAAA;AACjB,QAAA,MAAM,GAAA,GAAgB,MAAA,GAAS,QAAA,CAAS,IAAI,KAAK,EAAC;AAClD,QAAA,IAAI,CAAC,GAAA,CAAI,MAAA,EAAQ,OAAO,EAAC;AACzB,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAM,UAAiB,EAAC;AACxB,UAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,YAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,QAAA,CAAS,YAAY,EAAE,CAAA;AACxD,YAAA,IAAI,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,iBAC1B;AACH,cAAA,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,EAAE,CAAA;AACnC,cAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,EAAA,EAAI,CAAA;AAAA,YACrB;AAAA,UACF;AACA,UAAA,OAAO,OAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAI,GAAA,CAAI,CAAC,EAAA,MAAgB,EAAE,IAAG,CAAE,CAAA;AAAA,MACzC;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,CAAM,QAAA,GACR,IAAI,cAAA,CAAe,mBAAmB,KAAA,EAAO,QAAA,EAAU,eAAA,EAAiB,KAAK,CAAQ,CAAA,GACpF,kBAAA,CAAmB,KAAA,EAAO,QAAA,EAAU,iBAAiB,KAAK,CAAA;AAAA,IAC/D,WAAA,EAAa,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,KAAA,CAAM,KAAA;AAAA,IAC/C;AAAA,GACF;AACF;AAYO,SAAS,mBACd,OAAA,EACe;AACf,EAAA,MAAM,EAAE,QAAA,EAAU,EAAA,EAAI,QAAA,EAAS,GAAI,OAAA;AAGnC,EAAA,MAAM,SAAA,GAAY,UAAU,MAAA,EAAQ,SAAA;AACpC,EAAA,IAAI,SAAA,EAAW,mBAAmB,KAAA,EAAO;AACvC,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,WAAA,GAAc,SAAS,cAAA,EAAe;AAC5C,EAAA,MAAM,OAAA,GAAU,SAAS,UAAA,EAAW;AAGpC,EAAA,MAAM,kBAAqD,EAAC;AAC5D,EAAA,MAAM,uBAA+D,EAAC;AAEtE,EAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AAEpC,IAAA,eAAA,CAAgB,UAAA,CAAW,IAAI,CAAA,GAAI,IAAI,iBAAA,CAAkB;AAAA,MACvD,IAAA,EAAM,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAA;AAAA,MACtC,QAAQ,OAAO;AAAA,QACb,IAAI,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,aAAa,CAAA,EAAE;AAAA,QAC9C,GAAG,yBAAA,CAA0B,UAAA,EAAY,QAAA,EAAU,eAAe,CAAA;AAAA,QAClE,GAAI,WAAW,UAAA,GACX;AAAA,UACE,SAAA,EAAW,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,UACjC,SAAA,EAAW,EAAE,IAAA,EAAM,aAAA;AAAc,YAEnC,EAAC;AAAA,QACL,GAAI,WAAW,YAAA,GACX;AAAA,UACE,QAAA,EAAU,EAAE,IAAA,EAAM,aAAA;AAAc,YAElC;AAAC,OACP;AAAA,KACD,CAAA;AAGD,IAAA,MAAM,cAAqD,EAAC;AAC5D,IAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,MAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,IAAA,EAAM;AACrC,QAAA,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,GAAI;AAAA,UACxB,IAAA,EAAM,kBAAA,CAAmB,KAAA,EAAO,QAAA,EAAU,iBAAiB,IAAI;AAAA,SACjE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,oBAAA,CAAqB,UAAA,CAAW,IAAI,CAAA,GAAI,IAAI,sBAAA,CAAuB;AAAA,MACjE,IAAA,EAAM,CAAA,EAAG,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,CAAA,KAAA,CAAA;AAAA,MAC1C,QAAQ,MAAM;AAAA,KACf,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,cAAiD,EAAC;AACxD,EAAA,MAAM,mBAA2D,EAAC;AAElE,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,GAAI,IAAI,iBAAA,CAAkB;AAAA,MAC/C,IAAA,EAAM,YAAA,CAAa,MAAA,CAAO,IAAI,CAAA;AAAA,MAC9B,QAAQ,OAAO;AAAA,QACb,EAAA,EAAI,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,QAC1B,GAAG,yBAAA;AAAA,UACD,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,MAAA,EAAQ,OAAO,MAAA,EAAO;AAAA,UAC3C,QAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,KACD,CAAA;AAED,IAAA,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAA,GAAI,IAAI,sBAAA,CAAuB;AAAA,MACzD,IAAA,EAAM,CAAA,EAAG,YAAA,CAAa,MAAA,CAAO,IAAI,CAAC,CAAA,KAAA,CAAA;AAAA,MAClC,QAAQ,MAAM;AACZ,QAAA,MAAM,cAAqD,EAAC;AAC5D,QAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,UAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,IAAA,EAAM;AACrC,YAAA,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,GAAI;AAAA,cACxB,IAAA,EAAM,kBAAA,CAAmB,KAAA,EAAO,QAAA,EAAU,iBAAiB,IAAI;AAAA,aACjE;AAAA,UACF;AAAA,QACF;AACA,QAAA,OAAO,WAAA;AAAA,MACT;AAAA,KACD,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,YAAA,GAAe,IAAI,iBAAA,CAAkB;AAAA,IACzC,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,aAAa,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,cAAc,CAAA,EAAE;AAAA,MACxD,iBAAiB,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,cAAc,CAAA,EAAE;AAAA,MAC5D,WAAA,EAAa,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,MACnC,SAAA,EAAW,EAAE,IAAA,EAAM,aAAA;AAAc;AACnC,GACD,CAAA;AAGD,EAAA,MAAM,cAA4D,EAAC;AAGnE,EAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,UAAA,CAAW,IAAI,CAAA;AAC5C,IAAA,IAAI,CAAC,IAAA,EAAM;AAGX,IAAA,MAAM,aAAa,yBAAA,CAA0B,UAAA,EAAY,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,CAAA;AAC1F,IAAA,MAAM,QAAA,GAAW,cAAc,UAAU,CAAA;AAGzC,IAAA,WAAA,CAAY,WAAA,CAAY,UAAA,CAAW,IAAI,CAAC,CAAA,GAAI;AAAA,MAC1C,IAAA,EAAM,IAAI,iBAAA,CAAkB;AAAA,QAC1B,IAAA,EAAM,CAAA,EAAG,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,CAAA,UAAA,CAAA;AAAA,QAC1C,MAAA,EAAQ;AAAA,UACN,MAAM,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,IAAI,CAAA,EAAE;AAAA,UACpC,SAAA,EAAW,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,UAC9B,IAAA,EAAM,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,UACzB,UAAA,EAAY,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,UAC/B,WAAA,EAAa,EAAE,IAAA,EAAM,cAAA,EAAe;AAAA,UACpC,WAAA,EAAa,EAAE,IAAA,EAAM,cAAA;AAAe;AACtC,OACD,CAAA;AAAA,MACD,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,QAC1B,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,IAAY,aAAA,EAAc;AAAA,QACxC,KAAA,EAAO,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,QAC1B,IAAA,EAAM,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,QACzB,KAAA,EAAO,EAAE,IAAA,EAAM,cAAA;AAAe,OAChC;AAAA,MACA,OAAA,EAAS,OAAO,CAAA,EAAQ,IAAA,EAAW,GAAA,KAAa;AAC9C,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,KAAA,EAAO,cAAA,EAAgB,WAAU,GAAI,GAAA;AACrH,QAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY,UAAA,EAAY,MAAA,EAAQ;AAAA,UACvD,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAU,SAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACT,CAAA;AAED,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,KAAA,CAAM,gBAAA,CAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,OAAA,EAAS,EAAA,IAAM,EAAA,EAAI,IAAA,EAAM,SAAS,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,IAAA,KAAS,eAAe,CAAA;AAAA,QAC/I;AAEA,QAAA,IAAI,QAA6B,EAAC;AAClC,QAAA,IAAI,KAAK,KAAA,EAAO;AACd,UAAA,IAAI,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,EAAU;AAClC,YAAA,IAAI;AAAE,cAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAAA,YAAG,CAAA,CAAA,MAAQ;AAAA,YAAC;AAAA,UACjD,CAAA,MAAO;AACL,YAAA,KAAA,GAAQ,eAAA,CAAgB,KAAK,KAAK,CAAA;AAAA,UACpC;AAAA,QACF;AAEA,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAG,UAAA,EAAW;AAAA,QACpC;AAEA,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,IAAS,CAAC,CAAC,OAAA;AAEhC,QAAA,OAAO,cAAA,CAAe,SAAA,CAAU,SAAA,EAAW,YAAY;AACrD,UAAA,OAAO,MAAM,IAAA,CAAK;AAAA,YAChB,YAAY,UAAA,CAAW,IAAA;AAAA,YACvB,KAAA;AAAA,YACA,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,KAAA,EAAO,KAAK,KAAA,IAAS,EAAA;AAAA,YACrB,IAAA,EAAM,KAAK,IAAA,IAAQ,CAAA;AAAA,YACnB,QAAA,EAAU,SAAA;AAAA,YACV,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH;AAAA,KACF;AAGA,IAAA,WAAA,CAAY,eAAA,CAAgB,UAAA,CAAW,IAAI,CAAC,CAAA,GAAI;AAAA,MAC9C,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,IAAI,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,aAAa,CAAA,EAAE;AAAA,QAC9C,KAAA,EAAO,EAAE,IAAA,EAAM,cAAA;AAAe,OAChC;AAAA,MACA,OAAA,EAAS,OAAO,CAAA,EAAQ,IAAA,EAAW,GAAA,KAAa;AAC9C,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,KAAA,EAAO,cAAA,EAAgB,WAAU,GAAI,GAAA;AACrH,QAAe,MAAM,WAAA,CAAY,UAAA,EAAY,MAAA,EAAQ;AAAA,UACnD,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAU,SAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACT;AAED,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,KAAA,CAAM,gBAAA,CAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,OAAA,EAAS,EAAA,IAAM,EAAA,EAAI,IAAA,EAAM,SAAS,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,IAAA,KAAS,eAAe,CAAA;AAAA,QAC/I;AAEA,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,IAAS,CAAC,CAAC,OAAA;AAChC,QAAA,OAAO,cAAA,CAAe,SAAA,CAAU,SAAA,EAAW,YAAY;AACrD,UAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,QAAA,CAAS;AAAA,YAC/B,YAAY,UAAA,CAAW,IAAA;AAAA,YACvB,IAAI,IAAA,CAAK,EAAA;AAAA,YACT,QAAA,EAAU,SAAA;AAAA,YACV,KAAA,EAAO;AAAA,WACR,CAAA;AACD,UAAA,OAAO,GAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,KACF;AAGA,IAAA,WAAA,CAAY,QAAQ,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,GAAG,CAAA,GAAI;AAAA,MAC1D,IAAA,EAAM,IAAI,iBAAA,CAAkB;AAAA,QAC1B,IAAA,EAAM,CAAA,EAAG,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,CAAA,KAAA,CAAA;AAAA,QAC1C,MAAA,EAAQ;AAAA,UACN,SAAA,EAAW,EAAE,IAAA,EAAM,UAAA;AAAW;AAChC,OACD,CAAA;AAAA,MACD,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,EAAE,IAAA,EAAM,aAAA;AAAc,OAC/B;AAAA,MACA,OAAA,EAAS,OAAO,CAAA,EAAQ,IAAA,EAAW,GAAA,KAAa;AAC9C,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,KAAA,EAAM,GAAI,GAAA;AAC1F,QAAA,MAAM,WAAA,CAAY,YAAY,MAAA,EAAQ;AAAA,UACpC,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAU,SAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACT,CAAA;AACD,QAAA,IAAI,QAAQ,EAAC;AACb,QAAA,IAAI,KAAK,KAAA,EAAO;AACd,UAAA,IAAI,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,EAAU;AAClC,YAAA,IAAI;AAAE,cAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAAA,YAAG,CAAA,CAAA,MAAQ;AAAA,YAAC;AAAA,UACjD,CAAA,MAAO;AACL,YAAA,KAAA,GAAQ,eAAA,CAAgB,KAAK,KAAK,CAAA;AAAA,UACpC;AAAA,QACF;AACA,QAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,KAAA,CAAM;AAAA,UAC9B,YAAY,UAAA,CAAW,IAAA;AAAA,UACvB,KAAA;AAAA,UACA,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,OAAO,EAAE,WAAW,KAAA,EAAM;AAAA,MAC5B;AAAA,KACF;AAGA,IAAA,MAAM,QAAA,GAAW,IAAI,iBAAA,CAAkB;AAAA,MACrC,IAAA,EAAM,CAAA,EAAG,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,CAAA,IAAA,CAAA;AAAA,MAC1C,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,QACb,QAAQ,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,aAAa,CAAA;AAAE;AACpD,KACD,CAAA;AACD,IAAA,MAAM,cAAA,GAAiB,IAAI,iBAAA,CAAkB;AAAA,MAC3C,IAAA,EAAM,CAAA,EAAG,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,CAAA,UAAA,CAAA;AAAA,MAC1C,MAAA,EAAQ;AAAA,QACN,OAAO,EAAE,IAAA,EAAM,IAAI,WAAA,CAAY,QAAQ,CAAA,EAAE;AAAA,QACzC,UAAU,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,YAAY,CAAA,EAAE;AAAA,QACnD,UAAA,EAAY,EAAE,IAAA,EAAM,UAAA;AAAW;AACjC,KACD,CAAA;AACD,IAAA,WAAA,CAAY,GAAG,WAAA,CAAY,UAAA,CAAW,IAAI,CAAC,YAAY,CAAA,GAAI;AAAA,MACzD,IAAA,EAAM,cAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,QAC1B,KAAA,EAAO,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,QACzB,MAAA,EAAQ,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,QAC9B,KAAA,EAAO,EAAE,IAAA,EAAM,UAAA,EAAW;AAAA,QAC1B,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,IAAY,aAAA,EAAc;AAAA,QACxC,KAAA,EAAO,EAAE,IAAA,EAAM,cAAA;AAAe,OAChC;AAAA,MACA,OAAA,EAAS,OAAO,CAAA,EAAQ,IAAA,EAAW,GAAA,KAAa;AAC9C,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,KAAA,EAAO,cAAA,EAAgB,WAAU,GAAI,GAAA;AACrH,QAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY,UAAA,EAAY,MAAA,EAAQ;AAAA,UACvD,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAU,SAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACT,CAAA;AAED,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,KAAA,CAAM,gBAAA,CAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,OAAA,EAAS,EAAA,IAAM,EAAA,EAAI,IAAA,EAAM,SAAS,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,IAAA,KAAS,eAAe,CAAA;AAAA,QAC/I;AAEA,QAAA,IAAI,QAA6B,EAAC;AAClC,QAAA,IAAI,KAAK,KAAA,EAAO;AACd,UAAA,IAAI,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,EAAU;AAClC,YAAA,IAAI;AAAE,cAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAAA,YAAG,CAAA,CAAA,MAAQ;AAAA,YAAC;AAAA,UACjD,CAAA,MAAO;AACL,YAAA,KAAA,GAAQ,eAAA,CAAgB,KAAK,KAAK,CAAA;AAAA,UACpC;AAAA,QACF;AACA,QAAA,IAAI,YAAY,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAG,UAAA,EAAW;AAElD,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,IAAS,CAAC,CAAC,OAAA;AAEhC,QAAA,OAAO,cAAA,CAAe,SAAA,CAAU,SAAA,EAAW,YAAY;AACrD,UAAA,IAAI,IAAA,GAAO,CAAA;AACX,UAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,IAAA,IAAQ,EAAA;AAEvC,UAAA,IAAI,KAAK,KAAA,EAAO;AACd,YAAA,IAAI;AACF,cAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA,CAAE,QAAA,CAAS,OAAO,CAAA,EAAG,EAAE,CAAA;AACjF,cAAA,IAAI,CAAC,MAAM,QAAQ,CAAA,SAAU,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,KAAK,CAAA,GAAI,CAAA;AAAA,YAC9D,CAAA,CAAA,MAAQ;AAAA,YAAC;AAAA,UACX,CAAA,MAAA,IAAW,KAAK,MAAA,EAAQ;AACtB,YAAA,IAAI;AACF,cAAA,MAAM,SAAA,GAAY,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA,CAAE,QAAA,CAAS,OAAO,CAAA,EAAG,EAAE,CAAA;AACnF,cAAA,IAAI,CAAC,KAAA,CAAM,SAAS,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,KAAK,CAAC,CAAA;AAAA,YACzE,CAAA,CAAA,MAAQ;AAAA,YAAC;AAAA,UACX;AAEA,UAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,IAAA,CAAK;AAAA,YAC9B,YAAY,UAAA,CAAW,IAAA;AAAA,YACvB,KAAA;AAAA,YACA,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,KAAA;AAAA,YACA,IAAA;AAAA,YACA,QAAA,EAAU,SAAA;AAAA,YACV,KAAA,EAAO;AAAA,WACR,CAAA;AAED,UAAA,MAAM,KAAA,GAAA,CAAS,OAAO,IAAA,IAAQ,IAAI,GAAA,CAAI,CAAC,KAAU,GAAA,KAAgB;AAC/D,YAAA,MAAM,SAAA,GAAA,CAAa,IAAA,GAAO,CAAA,IAAK,KAAA,GAAQ,GAAA;AACvC,YAAA,OAAO;AAAA,cACL,IAAA,EAAM,GAAA;AAAA,cACN,MAAA,EAAQ,OAAO,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC,CAAA,CAAE,SAAS,QAAQ;AAAA,aAC1D;AAAA,UACF,CAAC,CAAA;AAED,UAAA,OAAO;AAAA,YACL,KAAA;AAAA,YACA,QAAA,EAAU;AAAA,cACR,WAAA,EAAa,OAAO,WAAA,IAAe,KAAA;AAAA,cACnC,eAAA,EAAiB,OAAO,WAAA,IAAe,KAAA;AAAA,cACvC,aAAa,KAAA,CAAM,MAAA,GAAS,IAAI,KAAA,CAAM,CAAC,EAAE,MAAA,GAAS,IAAA;AAAA,cAClD,SAAA,EAAW,MAAM,MAAA,GAAS,CAAA,GAAI,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAE,MAAA,GAAS;AAAA,aACjE;AAAA,YACA,YAAY,MAAA,CAAO;AAAA,WACrB;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,WAAA,CAAY,WAAA,CAAY,MAAA,CAAO,IAAI,CAAC,CAAA,GAAI;AAAA,MACtC,IAAA;AAAA,MACA,OAAA,EAAS,OAAO,CAAA,EAAQ,IAAA,EAAW,GAAA,KAAa;AAC9C,QAAA,MAAM,EAAE,MAAM,OAAA,EAAS,GAAA,EAAK,QAAQ,QAAA,EAAU,SAAA,EAAW,EAAA,EAAI,KAAA,EAAM,GAAI,GAAA;AACvE,QAAA,MAAM,oBAAA,CAAqB,QAAQ,MAAA,EAAQ;AAAA,UACzC,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,KAAA,CAAM,gBAAA,CAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,OAAA,EAAS,EAAA,IAAM,EAAA,EAAI,IAAA,EAAM,SAAS,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,IAAA,KAAS,eAAe,CAAA;AAAA,QAC/I;AACA,QAAA,OAAO,MAAM,OAAA,CAAQ;AAAA,UACnB,UAAA,EAAY,CAAA,SAAA,EAAY,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,UACnC,OAAO,EAAC;AAAA,UACR,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAkB;AAAA,IAClC,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACT,CAAA;AAGD,EAAA,MAAM,iBAA+D,EAAC;AAEtE,EAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,UAAA,CAAW,IAAI,CAAA;AAC5C,IAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,UAAA,CAAW,IAAI,CAAA;AACtD,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,SAAA,EAAW;AAGzB,IAAA,cAAA,CAAe,SAAS,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,EAAE,CAAA,GAAI;AAAA,MAC7D,IAAA,EAAM,IAAI,iBAAA,CAAkB;AAAA,QAC1B,IAAA,EAAM,CAAA,EAAG,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,CAAA,YAAA,CAAA;AAAA,QAC1C,MAAA,EAAQ;AAAA,UACN,GAAA,EAAK,EAAE,IAAA,EAAK;AAAA,UACZ,OAAA,EAAS,EAAE,IAAA,EAAM,aAAA;AAAc;AACjC,OACD,CAAA;AAAA,MACD,IAAA,EAAM;AAAA,QACJ,MAAM,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,SAAS,CAAA,EAAE;AAAA,QAC5C,KAAA,EAAO,EAAE,IAAA,EAAM,cAAA;AAAe,OAChC;AAAA,MACA,OAAA,EAAS,OAAO,CAAA,EAAQ,IAAA,EAAW,GAAA,KAAa;AAC9C,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,KAAA,EAAO,QAAA,EAAU,aAAY,GAAI,GAAA;AACjH,QAAA,MAAM,WAAA,CAAY,YAAY,QAAA,EAAU;AAAA,UACtC,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAU,SAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACT,CAAA;AACD,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,KAAA,CAAM,gBAAA,CAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,OAAA,EAAS,EAAA,IAAM,EAAA,EAAI,IAAA,EAAM,SAAS,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,IAAA,KAAS,eAAe,CAAA;AAAA,QAC/I;AACA,QAAA,MAAM,YAAA,GAAe,WAAA,CAAY,kBAAA,CAAmB,UAAA,CAAW,IAAI,CAAA;AAEnE,QAAA,IAAI,SAAA;AACJ,QAAA,IAAI;AACF,UAAA,SAAA,GAAY,YAAA,CAAa,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,QAC1C,SAAS,GAAA,EAAU;AACjB,UAAA,IAAI,KAAK,MAAA,EAAQ;AACf,YAAA,MAAM,MAAM,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA,KAAW,GAAG,CAAA,CAAE,IAAA,EAAM,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACtF,YAAA,MAAM,QAAA,CAAS,KAAK,gBAAgB,CAAA;AAAA,UACtC;AACA,UAAA,MAAM,GAAA;AAAA,QACR;AAEA,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,MAAA,CAAO;AAAA,UAC7B,YAAY,UAAA,CAAW,IAAA;AAAA,UACvB,IAAA,EAAM,SAAA;AAAA,UACN,QAAA,EAAU;AAAA,SACX,CAAA;AAED,QAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAS,sBAAA,EAAuB;AAAA,MAChD;AAAA,KACF;AAGA,IAAA,cAAA,CAAe,SAAS,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,EAAE,CAAA,GAAI;AAAA,MAC7D,IAAA,EAAM,IAAI,iBAAA,CAAkB;AAAA,QAC1B,IAAA,EAAM,CAAA,EAAG,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,CAAA,YAAA,CAAA;AAAA,QAC1C,MAAA,EAAQ;AAAA,UACN,GAAA,EAAK,EAAE,IAAA,EAAK;AAAA,UACZ,OAAA,EAAS,EAAE,IAAA,EAAM,aAAA;AAAc;AACjC,OACD,CAAA;AAAA,MACD,IAAA,EAAM;AAAA,QACJ,IAAI,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,aAAa,CAAA,EAAE;AAAA,QAC9C,MAAM,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,SAAS,CAAA,EAAE;AAAA,QAC5C,aAAA,EAAe,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,QACrC,KAAA,EAAO,EAAE,IAAA,EAAM,cAAA;AAAe,OAChC;AAAA,MACA,OAAA,EAAS,OAAO,CAAA,EAAQ,IAAA,EAAW,GAAA,KAAa;AAC9C,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,KAAA,EAAO,QAAA,EAAU,aAAY,GAAI,GAAA;AACjH,QAAA,MAAM,WAAA,CAAY,YAAY,QAAA,EAAU;AAAA,UACtC,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAU,SAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACT,CAAA;AACD,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,KAAA,CAAM,gBAAA,CAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,OAAA,EAAS,EAAA,IAAM,EAAA,EAAI,IAAA,EAAM,SAAS,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,IAAA,KAAS,eAAe,CAAA;AAAA,QAC/I;AAGA,QAAA,IAAI,KAAK,aAAA,EAAe;AACtB,UAAA,MAAM,WAAA,GAAc,MAAM,KAAA,CAAM,QAAA,CAA8B;AAAA,YAC5D,YAAY,UAAA,CAAW,IAAA;AAAA,YACvB,IAAI,IAAA,CAAK,EAAA;AAAA,YACT,QAAA,EAAU,SAAA;AAAA,YACV,KAAA,EAAO;AAAA,WACR,CAAA;AACD,UAAA,IAAI,eAAe,WAAA,CAAY,SAAA,IAAa,IAAA,CAAK,aAAA,KAAkB,YAAY,SAAA,EAAW;AACxF,YAAA,MAAM,QAAA;AAAA,cACJ,CAAA,8CAAA,EAAiD,IAAA,CAAK,aAAa,CAAA,qBAAA,EAAwB,YAAY,SAAS,CAAA,CAAA;AAAA,cAChH;AAAA,aACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,MAAM,YAAA,GAAe,WAAA,CAAY,kBAAA,CAAmB,UAAA,CAAW,IAAI,CAAA;AAEnE,QAAA,IAAI,SAAA;AACJ,QAAA,IAAI;AACF,UAAA,SAAA,GAAY,YAAA,CAAa,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,QAC1C,SAAS,GAAA,EAAU;AACjB,UAAA,IAAI,KAAK,MAAA,EAAQ;AACf,YAAA,MAAM,MAAM,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA,KAAW,GAAG,CAAA,CAAE,IAAA,EAAM,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACtF,YAAA,MAAM,QAAA,CAAS,KAAK,gBAAgB,CAAA;AAAA,UACtC;AACA,UAAA,MAAM,GAAA;AAAA,QACR;AAEA,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,MAAA,CAAO;AAAA,UAC7B,YAAY,UAAA,CAAW,IAAA;AAAA,UACvB,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,IAAA,EAAM,SAAA;AAAA,UACN,QAAA,EAAU;AAAA,SACX,CAAA;AAED,QAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAS,sBAAA,EAAuB;AAAA,MAChD;AAAA,KACF;AAGA,IAAA,cAAA,CAAe,SAAS,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,EAAE,CAAA,GAAI;AAAA,MAC7D,IAAA,EAAM,IAAI,iBAAA,CAAkB;AAAA,QAC1B,IAAA,EAAM,CAAA,EAAG,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAC,CAAA,YAAA,CAAA;AAAA,QAC1C,MAAA,EAAQ;AAAA,UACN,GAAA,EAAK,EAAE,IAAA,EAAK;AAAA,UACZ,OAAA,EAAS,EAAE,IAAA,EAAM,aAAA;AAAc;AACjC,OACD,CAAA;AAAA,MACD,IAAA,EAAM;AAAA,QACJ,IAAI,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,aAAa,CAAA;AAAE,OAChD;AAAA,MACA,OAAA,EAAS,OAAO,CAAA,EAAQ,IAAA,EAAW,GAAA,KAAa;AAC9C,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,KAAA,EAAM,GAAI,GAAA;AAC1F,QAAA,MAAM,WAAA,CAAY,YAAY,QAAA,EAAU;AAAA,UACtC,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAU,SAAA;AAAA,UACV,MAAA,EAAQ;AAAA,SACT,CAAA;AACD,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,KAAA,CAAM,gBAAA,CAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,OAAA,EAAS,EAAA,IAAM,EAAA,EAAI,IAAA,EAAM,SAAS,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,IAAA,KAAS,eAAe,CAAA;AAAA,QAC/I;AACA,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,MAAA,CAAO;AAAA,UAC7B,YAAY,UAAA,CAAW,IAAA;AAAA,UACvB,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,QAAA,EAAU;AAAA,SACX,CAAA;AAED,QAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAS,sBAAA,EAAuB;AAAA,MAChD;AAAA,KACF;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAA;AAC9C,IAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,IAAA,cAAA,CAAe,SAAS,YAAA,CAAa,MAAA,CAAO,IAAI,CAAC,EAAE,CAAA,GAAI;AAAA,MACrD,IAAA,EAAM,IAAI,iBAAA,CAAkB;AAAA,QAC1B,IAAA,EAAM,CAAA,EAAG,YAAA,CAAa,MAAA,CAAO,IAAI,CAAC,CAAA,YAAA,CAAA;AAAA,QAClC,MAAA,EAAQ;AAAA,UACN,KAAK,EAAE,IAAA,EAAM,YAAY,MAAA,CAAO,IAAI,KAAK,aAAA,EAAc;AAAA,UACvD,OAAA,EAAS,EAAE,IAAA,EAAM,aAAA;AAAc;AACjC,OACD,CAAA;AAAA,MACD,IAAA,EAAM;AAAA,QACJ,MAAM,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,SAAS,CAAA;AAAE,OAC9C;AAAA,MACA,OAAA,EAAS,OAAO,CAAA,EAAQ,IAAA,EAAW,GAAA,KAAa;AAC9C,QAAA,MAAM,EAAE,MAAM,OAAA,EAAS,GAAA,EAAK,QAAQ,QAAA,EAAU,SAAA,EAAW,EAAA,EAAI,KAAA,EAAM,GAAI,GAAA;AACvE,QAAA,MAAM,oBAAA,CAAqB,QAAQ,QAAA,EAAU;AAAA,UAC3C,IAAA,EAAM,OAAA;AAAA,UACN,GAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,KAAA,CAAM,gBAAA,CAAiB,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,OAAA,EAAS,EAAA,IAAM,EAAA,EAAI,IAAA,EAAM,SAAS,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,IAAA,KAAS,eAAe,CAAA;AAAA,QAC/I;AAEA,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,OAAA,CAAQ;AAAA,UAC9B,UAAA,EAAY,CAAA,SAAA,EAAY,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,UACnC,OAAO,EAAC;AAAA,UACR,QAAA,EAAU;AAAA,SACX,CAAA;AAED,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,MAAA,GAAS,MAAM,MAAM,MAAA,CAAO;AAAA,YAC1B,UAAA,EAAY,CAAA,SAAA,EAAY,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,YACnC,IAAI,GAAA,CAAI,EAAA;AAAA,YACR,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,MAAM,MAAM,MAAA,CAAO;AAAA,YAC1B,UAAA,EAAY,CAAA,SAAA,EAAY,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,YACnC,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,OAAA,EAAS,sBAAA,EAAuB;AAAA,MACxD;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,IAAI,iBAAA,CAAkB;AAAA,IACrC,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACT,CAAA;AAGD,EAAA,MAAM,YAAA,GAAe,IAAI,gBAAA,CAAiB;AAAA,IACxC,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,CAAC,iBAAA,CAAkB,MAAA,EAAQ,kBAAkB,SAAS,CAAA;AAAA,IACjE,IAAA,EAAM;AAAA,MACJ,QAAQ,EAAE,IAAA,EAAM,IAAI,cAAA,CAAe,aAAa,CAAA;AAAE;AACpD,GACD,CAAA;AAGD,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,IAAI,aAAA,CAAc;AAAA,IAC/C,KAAA,EAAO,IAAI,iBAAA,CAAkB,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,EAAE,GAAG,WAAA,EAAY,EAAG,CAAA;AAAA,IAC1E,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,CAAC,YAAY;AAAA,GAC1B,CAAC,CAAA;AACF,EAAA,WAAA,CAAY,QAAA,GAAW;AAAA,IACrB,IAAA,EAAM,IAAI,iBAAA,CAAkB;AAAA,MAC1B,IAAA,EAAM,UAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACN,GAAA,EAAK,EAAE,IAAA,EAAM,aAAA;AAAc;AAC7B,KACD,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,GAAA,EAAK,UAAA,EAAW;AAAA,GACpC;AAEA,EAAA,OAAO,IAAI,aAAA,CAAc;AAAA,IACvB,KAAA,EAAO,KAAA;AAAA,IACP,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAY,CAAC,YAAY;AAAA,GAC1B,CAAA;AACH;AAMO,SAAS,mBAAA,CACd,UACA,EAAA,EACiC;AACjC,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,IAAI,CAAA;AAClD,EAAA,OAAO,MAAA,CAAO,OAAO,MAAA,EAAQ,EAAE,KAAK,WAAA,CAAY,MAAM,GAAG,CAAA;AAC3D","file":"chunk-6DURKQ6W.js","sourcesContent":["import {\n GraphQLSchema,\n GraphQLObjectType,\n GraphQLString,\n GraphQLInt,\n GraphQLBoolean,\n GraphQLFloat,\n GraphQLList,\n GraphQLNonNull,\n GraphQLInputObjectType,\n GraphQLEnumType,\n GraphQLUnionType,\n GraphQLDirective,\n DirectiveLocation,\n GraphQLError,\n type GraphQLFieldConfig,\n type GraphQLType,\n type GraphQLOutputType,\n type GraphQLInputType,\n type GraphQLInputFieldConfig,\n printSchema,\n} from \"graphql\";\nimport type {\n CollectionConfig,\n GlobalConfig,\n BaseAdapter,\n} from \"../../registry/types.js\";\nimport { Registry } from \"../../registry/index.js\";\nimport type { Field, SelectField } from \"../../fields/types.js\";\nimport type { WhereClause } from \"../../access/types.js\";\nimport { checkCollectionAccess, checkGlobalAccess } from \"../../access/checker.js\";\nimport type { AccessContext } from \"../../access/checker.js\";\nimport type { User, Request } from \"../../hooks/types.js\";\n\n// ============================================================================\n// GraphQL Context — passed through Yoga/execute contextValue per request\n// ============================================================================\n\nexport interface GraphQLContext {\n db: BaseAdapter;\n registry: Registry;\n user?: User;\n req?: Request;\n tenantID?: string;\n apiKey?: any;\n relationLoader: RelationLoader;\n}\n\n// ============================================================================\n// Naming Helpers\n// ============================================================================\n\nfunction toPascalCase(slug: string): string {\n return slug.split(/[-_]/).map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(\"\");\n}\n\nfunction toCamelCase(slug: string): string {\n const p = toPascalCase(slug);\n return p.charAt(0).toLowerCase() + p.slice(1);\n}\n\nfunction toPascalSingular(slug: string): string {\n const p = toPascalCase(slug);\n if (p.endsWith(\"s\") && p.length > 1) return p.slice(0, -1);\n return p;\n}\n\nfunction toCamelSingular(slug: string): string {\n return toCamelCase(slug).endsWith(\"s\") && slug.length > 1\n ? toCamelCase(slug).slice(0, -1)\n : toCamelCase(slug);\n}\n\n// ============================================================================\n// Simple DataLoader for Relationship N+1 Prevention\n// ============================================================================\n\ninterface LoaderOptions {\n db: BaseAdapter;\n tenantID?: string;\n user?: User;\n}\n\nexport class RelationLoader {\n private db: BaseAdapter;\n private tenantID?: string;\n private user?: User;\n private caches = new Map<string, Map<string, any>>();\n private pending = new Map<string, Set<string>>();\n\n constructor(opts: LoaderOptions) {\n this.db = opts.db;\n this.tenantID = opts.tenantID;\n this.user = opts.user;\n }\n\n private getCacheKey(collection: string): string {\n return collection;\n }\n\n async load(collection: string, id: string): Promise<any | undefined> {\n const key = this.getCacheKey(collection);\n let cache = this.caches.get(key);\n if (!cache) {\n cache = new Map();\n this.caches.set(key, cache);\n }\n if (cache.has(id)) {\n return cache.get(id);\n }\n // Mark as pending so batch knows\n let pendingSet = this.pending.get(key);\n if (!pendingSet) {\n pendingSet = new Set();\n this.pending.set(key, pendingSet);\n }\n pendingSet.add(id);\n // Placeholder — will be batch-resolved\n cache.set(id, undefined);\n return undefined;\n }\n\n async flushAll(): Promise<void> {\n for (const [key, ids] of this.pending) {\n if (ids.size === 0) continue;\n const cache = this.caches.get(key)!;\n const docs = await this.db.find({\n collection: key,\n where: { id: { in: Array.from(ids) } },\n limit: ids.size,\n tenantID: this.tenantID,\n draft: !!this.user,\n });\n for (const doc of (docs.docs || []) as any[]) {\n if (doc && doc.id) {\n cache.set(doc.id, doc);\n }\n }\n }\n this.pending.clear();\n }\n\n resolveOne(collection: string, id: string): any | undefined {\n return this.caches.get(this.getCacheKey(collection))?.get(id);\n }\n\n static async withBatch<T>(\n loader: RelationLoader,\n fn: () => Promise<T>,\n ): Promise<T> {\n const result = await fn();\n await loader.flushAll();\n return result;\n }\n}\n\n// ============================================================================\n// GraphQL Error Helpers\n// ============================================================================\n\nfunction gqlError(message: string, code: string): Error {\n const err = new Error(message);\n (err as any).extensions = { code };\n return err;\n}\n\n// ============================================================================\n// Depth Limiting — prevents runaway deeply-nested queries\n// ============================================================================\n\nexport function depthLimit(maxDepth: number) {\n return (validationContext: any) => {\n let depth = 0;\n return {\n Field() {\n depth++;\n if (depth > maxDepth) {\n validationContext.reportError(\n new GraphQLError(`Query exceeds max depth of ${maxDepth}`),\n );\n }\n },\n leaveField() { depth--; },\n };\n };\n}\n\n// ============================================================================\n// Access Check — wraps shared checker with GraphQL error throwing\n// ============================================================================\n\nasync function checkAccess(\n config: { access?: any; slug: string },\n operation: \"read\" | \"create\" | \"update\" | \"delete\",\n context: AccessContext,\n): Promise<WhereClause | undefined> {\n const result = await checkCollectionAccess(config, operation, context);\n if (!result.allowed) {\n throw gqlError(result.error || \"Access denied\", \"FORBIDDEN\");\n }\n return result.extraWhere;\n}\n\nasync function checkGqlGlobalAccess(\n config: { access?: any; slug: string },\n operation: \"read\" | \"update\",\n context: AccessContext,\n): Promise<void> {\n const result = await checkGlobalAccess(config, operation, context);\n if (!result.allowed) {\n throw gqlError(result.error || \"Access denied\", \"FORBIDDEN\");\n }\n}\n\n// ============================================================================\n// Field → GraphQL Type Mapping\n// ============================================================================\n\nfunction fieldToGraphQLType(\n field: Field,\n registry: Registry,\n collectionTypes?: Record<string, GraphQLObjectType>,\n isInputType = false,\n): GraphQLType {\n switch (field.type) {\n case \"text\":\n case \"email\":\n case \"password\":\n case \"textarea\":\n case \"color\":\n case \"code\":\n case \"markdown\":\n case \"date\":\n case \"select\":\n case \"radio\":\n case \"upload\":\n return GraphQLString;\n case \"number\":\n return field.integer ? GraphQLInt : GraphQLFloat;\n case \"checkbox\":\n return GraphQLBoolean;\n case \"json\":\n case \"richtext\":\n return GraphQLString;\n case \"relationship\":\n if (typeof field.relationTo === \"string\") {\n if (isInputType) {\n if (field.hasMany) {\n return new GraphQLList(GraphQLString);\n }\n return GraphQLString;\n }\n if (collectionTypes?.[field.relationTo]) {\n const refType = collectionTypes[field.relationTo];\n if (field.hasMany) {\n return new GraphQLList(refType);\n }\n return refType;\n }\n const relatedCollection = registry.getCollection(field.relationTo);\n if (relatedCollection) {\n const refType = new GraphQLObjectType({\n name: toPascalSingular(field.relationTo),\n fields: () => ({\n id: { type: GraphQLString },\n ...buildFieldsFromCollection(relatedCollection, registry, collectionTypes),\n }),\n });\n if (collectionTypes) {\n collectionTypes[field.relationTo] = refType;\n }\n if (field.hasMany) {\n return new GraphQLList(refType);\n }\n return refType;\n }\n }\n return field.hasMany ? new GraphQLList(GraphQLString) : GraphQLString;\n case \"array\": {\n if (isInputType) {\n const arrFields = (field as any).fields as Field[] | undefined;\n if (arrFields && arrFields.length > 0) {\n const arrTypeName = `${field.name?.replace(/-/g, \"_\") || \"array\"}_input_item`;\n return new GraphQLList(fieldsToGraphQLInputObjectType(arrTypeName, arrFields, registry));\n }\n return new GraphQLList(GraphQLString);\n }\n const arrFields = (field as any).fields as Field[] | undefined;\n if (arrFields && arrFields.length > 0) {\n const arrTypeName = `${field.name?.replace(/-/g, \"_\") || \"array\"}_item`;\n const itemType = fieldsToGraphQLObjectType(arrTypeName, arrFields, registry, collectionTypes);\n return new GraphQLList(itemType);\n }\n return new GraphQLList(GraphQLString);\n }\n case \"group\": {\n if (isInputType) {\n const groupFields = (field as any).fields as Field[] | undefined;\n if (groupFields && groupFields.length > 0) {\n const groupTypeName = `${field.name?.replace(/-/g, \"_\") || \"group\"}_input_group`;\n return fieldsToGraphQLInputObjectType(groupTypeName, groupFields, registry);\n }\n return GraphQLString;\n }\n const groupFields = (field as any).fields as Field[] | undefined;\n if (groupFields && groupFields.length > 0) {\n const groupTypeName = `${field.name?.replace(/-/g, \"_\") || \"group\"}_group`;\n return fieldsToGraphQLObjectType(groupTypeName, groupFields, registry, collectionTypes);\n }\n return GraphQLString;\n }\n case \"blocks\": {\n if (isInputType) return GraphQLString; // GraphQL has no input unions — accept JSON\n const blocks = (field as any).blocks as Array<{ slug: string; label: string; fields: Field[] }> | undefined;\n if (blocks && blocks.length > 0) {\n const blockTypes: GraphQLObjectType[] = [];\n for (const block of blocks) {\n const blockTypeName = `Block${toPascalCase(block.slug)}`;\n const bType = new GraphQLObjectType({\n name: blockTypeName,\n fields: () => {\n const out: Record<string, GraphQLFieldConfig<any, any>> = {\n blockType: { type: new GraphQLNonNull(GraphQLString) },\n id: { type: GraphQLString },\n };\n if (block.fields) {\n for (const bf of block.fields) {\n if (!bf.name) continue;\n const bfConfig = buildFieldConfig(bf, registry, collectionTypes);\n if (bfConfig) out[bf.name] = bfConfig;\n }\n }\n return out;\n },\n });\n blockTypes.push(bType);\n }\n if (blockTypes.length > 0) {\n const unionName = `${field.name?.replace(/-/g, \"_\") || \"blocks\"}_union`;\n return new GraphQLUnionType({\n name: unionName,\n types: blockTypes,\n resolveType(value: any) {\n const blockName = `Block${value?.blockType ? toPascalCase(value.blockType) : \"\"}`;\n const blockType = blockTypes.find(\n (bt) => bt.name === blockName,\n );\n return blockType?.name || undefined;\n },\n });\n }\n }\n return new GraphQLList(GraphQLString);\n }\n case \"row\":\n case \"collapsible\":\n case \"tabs\":\n return GraphQLString;\n default:\n return GraphQLString;\n }\n}\n\nfunction buildFieldsFromCollection(\n config: CollectionConfig,\n registry: Registry,\n collectionTypes?: Record<string, GraphQLObjectType>,\n): Record<string, GraphQLFieldConfig<any, any>> {\n const fields: Record<string, GraphQLFieldConfig<any, any>> = {};\n\n for (const field of config.fields) {\n if (field.name && field.admin?.hidden !== true) {\n const fc = buildFieldConfig(field, registry, collectionTypes);\n if (fc) fields[field.name] = fc;\n }\n }\n\n return fields;\n}\n\n// ============================================================================\n// Sort Enum Builder\n// ============================================================================\n\nfunction buildSortEnum(\n config: CollectionConfig,\n): GraphQLEnumType | undefined {\n const sortFields: Record<string, { value: string }> = {\n id: { value: \"id\" },\n createdAt: { value: \"createdAt\" },\n updatedAt: { value: \"updatedAt\" },\n };\n\n for (const field of config.fields) {\n if (field.name) {\n sortFields[field.name] = { value: field.name };\n sortFields[`${field.name}_asc`] = { value: `${field.name}` };\n sortFields[`${field.name}_desc`] = { value: `-${field.name}` };\n }\n }\n\n return new GraphQLEnumType({\n name: `${toPascalSingular(config.slug)}Sort`,\n values: sortFields,\n });\n}\n\n// ============================================================================\n// Typed Filter Input Builders\n// ============================================================================\n\nfunction buildFieldFilterType(\n field: Field,\n namePrefix: string,\n): GraphQLInputObjectType | undefined {\n const safeName = `${namePrefix}_${field.name?.replace(/-/g, \"_\") || \"field\"}_filter`;\n\n const stringOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLString },\n not_equals: { type: GraphQLString },\n contains: { type: GraphQLString },\n not_contains: { type: GraphQLString },\n in: { type: new GraphQLList(GraphQLString) },\n not_in: { type: new GraphQLList(GraphQLString) },\n exists: { type: GraphQLBoolean },\n };\n\n const numberOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLFloat },\n not_equals: { type: GraphQLFloat },\n greater_than: { type: GraphQLFloat },\n less_than: { type: GraphQLFloat },\n greater_than_equal: { type: GraphQLFloat },\n less_than_equal: { type: GraphQLFloat },\n in: { type: new GraphQLList(GraphQLFloat) },\n not_in: { type: new GraphQLList(GraphQLFloat) },\n exists: { type: GraphQLBoolean },\n };\n\n const boolOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLBoolean },\n exists: { type: GraphQLBoolean },\n };\n\n const dateOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLString },\n not_equals: { type: GraphQLString },\n greater_than: { type: GraphQLString },\n less_than: { type: GraphQLString },\n exists: { type: GraphQLBoolean },\n };\n\n const relationOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLString },\n not_equals: { type: GraphQLString },\n in: { type: new GraphQLList(GraphQLString) },\n not_in: { type: new GraphQLList(GraphQLString) },\n exists: { type: GraphQLBoolean },\n };\n\n const jsonOps: Record<string, { type: GraphQLType }> = {\n exists: { type: GraphQLBoolean },\n };\n\n let ops: Record<string, { type: GraphQLType }>;\n\n switch (field.type) {\n case \"text\":\n case \"email\":\n case \"password\":\n case \"textarea\":\n case \"color\":\n case \"code\":\n case \"markdown\":\n case \"select\":\n case \"radio\":\n case \"upload\":\n ops = stringOps;\n break;\n case \"number\":\n ops = numberOps;\n break;\n case \"checkbox\":\n ops = boolOps;\n break;\n case \"date\":\n ops = dateOps;\n break;\n case \"relationship\":\n ops = relationOps;\n break;\n case \"json\":\n case \"richtext\":\n ops = jsonOps;\n break;\n default:\n ops = { exists: { type: GraphQLBoolean } };\n }\n\n return new GraphQLInputObjectType({\n name: safeName,\n fields: ops as any,\n });\n}\n\nfunction buildCollectionFilterType(\n config: CollectionConfig,\n namePrefix: string,\n): GraphQLInputObjectType {\n const fields: Record<string, { type: GraphQLType }> = {\n AND: { type: new GraphQLList(GraphQLString) },\n OR: { type: new GraphQLList(GraphQLString) },\n };\n\n for (const field of config.fields) {\n if (!field.name) continue;\n const filterType = buildFieldFilterType(field, namePrefix);\n if (filterType) {\n fields[field.name] = { type: filterType };\n }\n }\n\n return new GraphQLInputObjectType({\n name: `${namePrefix}Filter`,\n fields: fields as any,\n });\n}\n\nfunction translateFilter(filter: Record<string, any>): Record<string, any> {\n if (!filter || typeof filter !== \"object\") return filter || {};\n \n const result: Record<string, any> = {};\n \n for (const [key, value] of Object.entries(filter)) {\n if (key === \"AND\" || key === \"OR\") continue; // compound operators not yet supported at DB level\n result[key] = value;\n }\n \n return result;\n}\n\n// ============================================================================\n// Complex Field Type Helpers\n// ============================================================================\n\nfunction fieldsToGraphQLInputObjectType(\n name: string,\n fields: Field[],\n registry: Registry,\n): GraphQLInputObjectType {\n return new GraphQLInputObjectType({\n name,\n fields: () => {\n const out: Record<string, GraphQLInputFieldConfig> = {};\n for (const field of fields) {\n if (!field.name) continue;\n if (field.type === \"row\" || field.type === \"collapsible\") {\n const subFields = (field as any).fields as Field[];\n if (subFields) {\n for (const sf of subFields) {\n if (!sf.name) continue;\n out[sf.name] = { type: fieldToGraphQLType(sf, registry, undefined, true) as GraphQLInputType };\n }\n }\n } else if (field.type === \"tabs\") {\n const tabs = (field as any).tabs as Array<{ label: string; fields: Field[] }>;\n if (tabs) {\n for (const tab of tabs) {\n if (tab.fields) {\n for (const sf of tab.fields) {\n if (!sf.name) continue;\n out[sf.name] = { type: fieldToGraphQLType(sf, registry, undefined, true) as GraphQLInputType };\n }\n }\n }\n }\n } else {\n out[field.name] = { type: fieldToGraphQLType(field, registry, undefined, true) as GraphQLInputType };\n }\n }\n return out;\n },\n });\n}\n\nfunction fieldsToGraphQLObjectType(\n name: string,\n fields: Field[],\n registry: Registry,\n collectionTypes?: Record<string, any>,\n): GraphQLObjectType {\n return new GraphQLObjectType({\n name,\n fields: () => {\n const out: Record<string, GraphQLFieldConfig<any, any>> = {};\n for (const field of fields) {\n if (!field.name) continue;\n if (field.type === \"row\" || field.type === \"collapsible\") {\n const subFields = (field as any).fields as Field[];\n if (subFields) {\n for (const sf of subFields) {\n if (!sf.name) continue;\n const fc = buildFieldConfig(sf, registry, collectionTypes);\n if (fc) out[sf.name] = fc;\n }\n }\n } else if (field.type === \"tabs\") {\n const tabs = (field as any).tabs as Array<{ label: string; fields: Field[] }>;\n if (tabs) {\n for (const tab of tabs) {\n if (tab.fields) {\n for (const sf of tab.fields) {\n if (!sf.name) continue;\n const fc = buildFieldConfig(sf, registry, collectionTypes);\n if (fc) out[sf.name] = fc;\n }\n }\n }\n }\n } else {\n const fc = buildFieldConfig(field, registry, collectionTypes);\n if (fc) out[field.name] = fc;\n }\n }\n return out;\n},\n });\n}\n\nfunction buildFieldConfig(\n field: Field,\n registry: Registry,\n collectionTypes?: Record<string, any>,\n): GraphQLFieldConfig<any, any> | null {\n if (!field.name) return null;\n const deprecationReason = (field as any).deprecated || undefined;\n if (field.type === \"relationship\" && !(field as any).hasMany) {\n const gqlType = fieldToGraphQLType(field, registry, collectionTypes, false) as GraphQLOutputType;\n return {\n type: field.required ? new GraphQLNonNull(gqlType) : gqlType,\n description: field.admin?.description || field.label,\n deprecationReason,\n resolve: (source: any, args: any, ctx: any) => {\n const loader: RelationLoader | undefined = ctx?.relationLoader;\n const relField = field as any;\n const id = source?.[relField.name];\n if (!id) return null;\n if (loader && typeof id === \"string\") {\n const cached = loader.resolveOne(relField.relationTo, id);\n if (cached) return cached;\n loader.load(relField.relationTo, id);\n }\n return { id };\n },\n };\n }\n if (field.type === \"relationship\" && (field as any).hasMany) {\n const gqlType = fieldToGraphQLType(field, registry, collectionTypes, false) as GraphQLOutputType;\n return {\n type: gqlType,\n description: field.admin?.description || field.label,\n deprecationReason,\n resolve: (source: any, args: any, ctx: any) => {\n const loader: RelationLoader | undefined = ctx?.relationLoader;\n const relField = field as any;\n const ids: string[] = source?.[relField.name] || [];\n if (!ids.length) return [];\n if (loader) {\n const results: any[] = [];\n for (const id of ids) {\n const cached = loader.resolveOne(relField.relationTo, id);\n if (cached) results.push(cached);\n else {\n loader.load(relField.relationTo, id);\n results.push({ id });\n }\n }\n return results;\n }\n return ids.map((id: string) => ({ id }));\n },\n };\n }\n return {\n type: field.required\n ? new GraphQLNonNull(fieldToGraphQLType(field, registry, collectionTypes, false) as any)\n : (fieldToGraphQLType(field, registry, collectionTypes, false) as any),\n description: field.admin?.description || field.label,\n deprecationReason,\n };\n}\n\n// ============================================================================\n// GraphQL Schema Builder\n// ============================================================================\n\nexport interface GraphQLSchemaOptions {\n registry: Registry;\n db: BaseAdapter;\n settings?: Record<string, any>;\n}\n\nexport function buildGraphQLSchema(\n options: GraphQLSchemaOptions,\n): GraphQLSchema {\n const { registry, db, settings } = options;\n\n // Check if GraphQL is disabled in settings\n const apiAccess = settings?.access?.apiAccess;\n if (apiAccess?.graphqlEnabled === false) {\n throw new Error(\"GraphQL API is disabled\");\n }\n\n const collections = registry.getCollections();\n const globals = registry.getGlobals();\n\n // Build collection types\n const collectionTypes: Record<string, GraphQLObjectType> = {};\n const collectionInputTypes: Record<string, GraphQLInputObjectType> = {};\n\n for (const collection of collections) {\n // Output type\n collectionTypes[collection.slug] = new GraphQLObjectType({\n name: toPascalSingular(collection.slug),\n fields: () => ({\n id: { type: new GraphQLNonNull(GraphQLString) },\n ...buildFieldsFromCollection(collection, registry, collectionTypes),\n ...(collection.timestamps\n ? {\n createdAt: { type: GraphQLString },\n updatedAt: { type: GraphQLString },\n }\n : {}),\n ...(collection.tenantScoped\n ? {\n tenantID: { type: GraphQLString },\n }\n : {}),\n }),\n });\n\n // Input type for create/update\n const inputFields: Record<string, { type: GraphQLType }> = {};\n for (const field of collection.fields) {\n if (field.name && field.name !== \"id\") {\n inputFields[field.name] = {\n type: fieldToGraphQLType(field, registry, collectionTypes, true) as any,\n };\n }\n }\n\n collectionInputTypes[collection.slug] = new GraphQLInputObjectType({\n name: `${toPascalSingular(collection.slug)}Input`,\n fields: () => inputFields as any,\n });\n }\n\n // Build global types and input types\n const globalTypes: Record<string, GraphQLObjectType> = {};\n const globalInputTypes: Record<string, GraphQLInputObjectType> = {};\n\n for (const global of globals) {\n globalTypes[global.slug] = new GraphQLObjectType({\n name: toPascalCase(global.slug),\n fields: () => ({\n id: { type: GraphQLString },\n ...buildFieldsFromCollection(\n { slug: global.slug, fields: global.fields } as CollectionConfig,\n registry,\n collectionTypes,\n ),\n }),\n });\n\n globalInputTypes[global.slug] = new GraphQLInputObjectType({\n name: `${toPascalCase(global.slug)}Input`,\n fields: () => {\n const inputFields: Record<string, { type: GraphQLType }> = {};\n for (const field of global.fields) {\n if (field.name && field.name !== \"id\") {\n inputFields[field.name] = {\n type: fieldToGraphQLType(field, registry, collectionTypes, true) as any,\n };\n }\n }\n return inputFields as any;\n },\n });\n }\n\n // Shared Relay PageInfo type\n const pageInfoType = new GraphQLObjectType({\n name: \"PageInfo\",\n fields: {\n hasNextPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n hasPreviousPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n startCursor: { type: GraphQLString },\n endCursor: { type: GraphQLString },\n },\n });\n\n // Build query type\n const queryFields: Record<string, GraphQLFieldConfig<any, any>> = {};\n\n // List queries for each collection\n for (const collection of collections) {\n const type = collectionTypes[collection.slug];\n if (!type) continue;\n\n // Filter and sort types for this collection\n const filterType = buildCollectionFilterType(collection, toPascalSingular(collection.slug));\n const sortEnum = buildSortEnum(collection);\n\n // FindMany query (page/limit)\n queryFields[toCamelCase(collection.slug)] = {\n type: new GraphQLObjectType({\n name: `${toPascalSingular(collection.slug)}FindResult`,\n fields: {\n docs: { type: new GraphQLList(type) },\n totalDocs: { type: GraphQLInt },\n page: { type: GraphQLInt },\n totalPages: { type: GraphQLInt },\n hasNextPage: { type: GraphQLBoolean },\n hasPrevPage: { type: GraphQLBoolean },\n },\n }),\n args: {\n where: { type: filterType },\n sort: { type: sortEnum || GraphQLString },\n limit: { type: GraphQLInt },\n page: { type: GraphQLInt },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const { user: ctxUser, req: ctxReq, tenantID: ctxTenant, apiKey: ctxApiKey, db: ctxDb, relationLoader: ctxLoader } = ctx as GraphQLContext;\n const extraWhere = await checkAccess(collection, \"read\", {\n user: ctxUser,\n req: ctxReq,\n tenantID: ctxTenant,\n apiKey: ctxApiKey,\n });\n\n if (ctxTenant) {\n ctxDb.setTenantContext({ tenantId: ctxTenant, userId: ctxUser?.id ?? '', role: ctxUser?.role, isSuperAdmin: ctxUser?.role === 'super_admin' });\n }\n\n let where: Record<string, any> = {};\n if (args.where) {\n if (typeof args.where === \"string\") {\n try { where = JSON.parse(args.where); } catch {}\n } else {\n where = translateFilter(args.where);\n }\n }\n\n if (extraWhere) {\n where = { ...where, ...extraWhere };\n }\n\n const isDraft = args.draft ?? !!ctxUser;\n\n return RelationLoader.withBatch(ctxLoader, async () => {\n return ctxDb.find({\n collection: collection.slug,\n where,\n sort: args.sort,\n limit: args.limit || 10,\n page: args.page || 1,\n tenantID: ctxTenant,\n draft: isDraft,\n });\n });\n },\n };\n\n // FindByID query\n queryFields[toCamelSingular(collection.slug)] = {\n type,\n args: {\n id: { type: new GraphQLNonNull(GraphQLString) },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const { user: ctxUser, req: ctxReq, tenantID: ctxTenant, apiKey: ctxApiKey, db: ctxDb, relationLoader: ctxLoader } = ctx as GraphQLContext;\n const access = await checkAccess(collection, \"read\", {\n user: ctxUser,\n req: ctxReq,\n tenantID: ctxTenant,\n apiKey: ctxApiKey,\n });\n\n if (ctxTenant) {\n ctxDb.setTenantContext({ tenantId: ctxTenant, userId: ctxUser?.id ?? '', role: ctxUser?.role, isSuperAdmin: ctxUser?.role === 'super_admin' });\n }\n\n const isDraft = args.draft ?? !!ctxUser;\n return RelationLoader.withBatch(ctxLoader, async () => {\n const doc = await ctxDb.findByID({\n collection: collection.slug,\n id: args.id,\n tenantID: ctxTenant,\n draft: isDraft,\n });\n return doc;\n });\n },\n };\n\n // Count query\n queryFields[`count${toPascalSingular(collection.slug)}s`] = {\n type: new GraphQLObjectType({\n name: `${toPascalSingular(collection.slug)}Count`,\n fields: {\n totalDocs: { type: GraphQLInt },\n },\n }),\n args: {\n where: { type: GraphQLString },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const { user: ctxUser, req: ctxReq, tenantID: ctxTenant, apiKey: ctxApiKey, db: ctxDb } = ctx as GraphQLContext;\n await checkAccess(collection, \"read\", {\n user: ctxUser,\n req: ctxReq,\n tenantID: ctxTenant,\n apiKey: ctxApiKey,\n });\n let where = {};\n if (args.where) {\n if (typeof args.where === \"string\") {\n try { where = JSON.parse(args.where); } catch {}\n } else {\n where = translateFilter(args.where);\n }\n }\n const count = await ctxDb.count({\n collection: collection.slug,\n where,\n tenantID: ctxTenant,\n });\n return { totalDocs: count };\n },\n };\n\n // Relay-style connection query\n const edgeType = new GraphQLObjectType({\n name: `${toPascalSingular(collection.slug)}Edge`,\n fields: {\n node: { type },\n cursor: { type: new GraphQLNonNull(GraphQLString) },\n },\n });\n const connectionType = new GraphQLObjectType({\n name: `${toPascalSingular(collection.slug)}Connection`,\n fields: {\n edges: { type: new GraphQLList(edgeType) },\n pageInfo: { type: new GraphQLNonNull(pageInfoType) },\n totalCount: { type: GraphQLInt },\n },\n });\n queryFields[`${toCamelCase(collection.slug)}Connection`] = {\n type: connectionType,\n args: {\n first: { type: GraphQLInt },\n after: { type: GraphQLString },\n last: { type: GraphQLInt },\n before: { type: GraphQLString },\n where: { type: filterType },\n sort: { type: sortEnum || GraphQLString },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const { user: ctxUser, req: ctxReq, tenantID: ctxTenant, apiKey: ctxApiKey, db: ctxDb, relationLoader: ctxLoader } = ctx as GraphQLContext;\n const extraWhere = await checkAccess(collection, \"read\", {\n user: ctxUser,\n req: ctxReq,\n tenantID: ctxTenant,\n apiKey: ctxApiKey,\n });\n\n if (ctxTenant) {\n ctxDb.setTenantContext({ tenantId: ctxTenant, userId: ctxUser?.id ?? '', role: ctxUser?.role, isSuperAdmin: ctxUser?.role === 'super_admin' });\n }\n\n let where: Record<string, any> = {};\n if (args.where) {\n if (typeof args.where === \"string\") {\n try { where = JSON.parse(args.where); } catch {}\n } else {\n where = translateFilter(args.where);\n }\n }\n if (extraWhere) where = { ...where, ...extraWhere };\n\n const isDraft = args.draft ?? !!ctxUser;\n\n return RelationLoader.withBatch(ctxLoader, async () => {\n let page = 1;\n let limit = args.first || args.last || 10;\n\n if (args.after) {\n try {\n const afterIdx = parseInt(Buffer.from(args.after, \"base64\").toString(\"utf-8\"), 10);\n if (!isNaN(afterIdx)) page = Math.floor(afterIdx / limit) + 1;\n } catch {}\n } else if (args.before) {\n try {\n const beforeIdx = parseInt(Buffer.from(args.before, \"base64\").toString(\"utf-8\"), 10);\n if (!isNaN(beforeIdx)) page = Math.max(1, Math.floor(beforeIdx / limit));\n } catch {}\n }\n\n const result = await ctxDb.find({\n collection: collection.slug,\n where,\n sort: args.sort,\n limit,\n page,\n tenantID: ctxTenant,\n draft: isDraft,\n });\n\n const edges = (result.docs || []).map((doc: any, idx: number) => {\n const cursorIdx = (page - 1) * limit + idx;\n return {\n node: doc,\n cursor: Buffer.from(String(cursorIdx)).toString(\"base64\"),\n };\n });\n\n return {\n edges,\n pageInfo: {\n hasNextPage: result.hasNextPage || false,\n hasPreviousPage: result.hasPrevPage || false,\n startCursor: edges.length > 0 ? edges[0].cursor : null,\n endCursor: edges.length > 0 ? edges[edges.length - 1].cursor : null,\n },\n totalCount: result.totalDocs,\n };\n });\n },\n };\n }\n\n // Global queries\n for (const global of globals) {\n const type = globalTypes[global.slug];\n if (!type) continue;\n\n queryFields[toCamelCase(global.slug)] = {\n type,\n resolve: async (_: any, args: any, ctx: any) => {\n const { user: ctxUser, req: ctxReq, tenantID: ctxTenant, db: ctxDb } = ctx as GraphQLContext;\n await checkGqlGlobalAccess(global, \"read\", {\n user: ctxUser,\n req: ctxReq,\n tenantID: ctxTenant,\n });\n if (ctxTenant) {\n ctxDb.setTenantContext({ tenantId: ctxTenant, userId: ctxUser?.id ?? '', role: ctxUser?.role, isSuperAdmin: ctxUser?.role === 'super_admin' });\n }\n return ctxDb.findOne({\n collection: `_globals_${global.slug}`,\n where: {},\n tenantID: ctxTenant,\n });\n },\n };\n }\n\n const Query = new GraphQLObjectType({\n name: \"Query\",\n fields: queryFields,\n });\n\n // Build mutation type\n const mutationFields: Record<string, GraphQLFieldConfig<any, any>> = {};\n\n for (const collection of collections) {\n const type = collectionTypes[collection.slug];\n const inputType = collectionInputTypes[collection.slug];\n if (!type || !inputType) continue;\n\n // Create mutation\n mutationFields[`create${toPascalSingular(collection.slug)}`] = {\n type: new GraphQLObjectType({\n name: `${toPascalSingular(collection.slug)}CreateResult`,\n fields: {\n doc: { type },\n message: { type: GraphQLString },\n },\n }),\n args: {\n data: { type: new GraphQLNonNull(inputType) },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const { user: ctxUser, req: ctxReq, tenantID: ctxTenant, apiKey: ctxApiKey, db: ctxDb, registry: ctxRegistry } = ctx as GraphQLContext;\n await checkAccess(collection, \"create\", {\n user: ctxUser,\n req: ctxReq,\n tenantID: ctxTenant,\n apiKey: ctxApiKey,\n });\n if (ctxTenant) {\n ctxDb.setTenantContext({ tenantId: ctxTenant, userId: ctxUser?.id ?? '', role: ctxUser?.role, isSuperAdmin: ctxUser?.role === 'super_admin' });\n }\n const createSchema = ctxRegistry.getCreateZodSchema(collection.slug);\n\n let validated: Record<string, any>;\n try {\n validated = createSchema.parse(args.data);\n } catch (err: any) {\n if (err?.issues) {\n const msg = err.issues.map((i: any) => `${i.path?.join(\".\")}: ${i.message}`).join(\"; \");\n throw gqlError(msg, \"BAD_USER_INPUT\");\n }\n throw err;\n }\n\n const doc = await ctxDb.create({\n collection: collection.slug,\n data: validated,\n tenantID: ctxTenant,\n });\n\n return { doc, message: \"Created successfully\" };\n },\n };\n\n // Update mutation\n mutationFields[`update${toPascalSingular(collection.slug)}`] = {\n type: new GraphQLObjectType({\n name: `${toPascalSingular(collection.slug)}UpdateResult`,\n fields: {\n doc: { type },\n message: { type: GraphQLString },\n },\n }),\n args: {\n id: { type: new GraphQLNonNull(GraphQLString) },\n data: { type: new GraphQLNonNull(inputType) },\n baseUpdatedAt: { type: GraphQLString },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const { user: ctxUser, req: ctxReq, tenantID: ctxTenant, apiKey: ctxApiKey, db: ctxDb, registry: ctxRegistry } = ctx as GraphQLContext;\n await checkAccess(collection, \"update\", {\n user: ctxUser,\n req: ctxReq,\n tenantID: ctxTenant,\n apiKey: ctxApiKey,\n });\n if (ctxTenant) {\n ctxDb.setTenantContext({ tenantId: ctxTenant, userId: ctxUser?.id ?? '', role: ctxUser?.role, isSuperAdmin: ctxUser?.role === 'super_admin' });\n }\n\n // Revision conflict detection\n if (args.baseUpdatedAt) {\n const originalDoc = await ctxDb.findByID<Record<string, any>>({\n collection: collection.slug,\n id: args.id,\n tenantID: ctxTenant,\n draft: true,\n });\n if (originalDoc && originalDoc.updatedAt && args.baseUpdatedAt !== originalDoc.updatedAt) {\n throw gqlError(\n `Revision conflict: document has changed since ${args.baseUpdatedAt}. Current updatedAt: ${originalDoc.updatedAt}`,\n \"CONFLICT\",\n );\n }\n }\n\n const updateSchema = ctxRegistry.getUpdateZodSchema(collection.slug);\n\n let validated: Record<string, any>;\n try {\n validated = updateSchema.parse(args.data);\n } catch (err: any) {\n if (err?.issues) {\n const msg = err.issues.map((i: any) => `${i.path?.join(\".\")}: ${i.message}`).join(\"; \");\n throw gqlError(msg, \"BAD_USER_INPUT\");\n }\n throw err;\n }\n\n const doc = await ctxDb.update({\n collection: collection.slug,\n id: args.id,\n data: validated,\n tenantID: ctxTenant,\n });\n\n return { doc, message: \"Updated successfully\" };\n },\n };\n\n // Delete mutation\n mutationFields[`delete${toPascalSingular(collection.slug)}`] = {\n type: new GraphQLObjectType({\n name: `${toPascalSingular(collection.slug)}DeleteResult`,\n fields: {\n doc: { type },\n message: { type: GraphQLString },\n },\n }),\n args: {\n id: { type: new GraphQLNonNull(GraphQLString) },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const { user: ctxUser, req: ctxReq, tenantID: ctxTenant, apiKey: ctxApiKey, db: ctxDb } = ctx as GraphQLContext;\n await checkAccess(collection, \"delete\", {\n user: ctxUser,\n req: ctxReq,\n tenantID: ctxTenant,\n apiKey: ctxApiKey,\n });\n if (ctxTenant) {\n ctxDb.setTenantContext({ tenantId: ctxTenant, userId: ctxUser?.id ?? '', role: ctxUser?.role, isSuperAdmin: ctxUser?.role === 'super_admin' });\n }\n const doc = await ctxDb.delete({\n collection: collection.slug,\n id: args.id,\n tenantID: ctxTenant,\n });\n\n return { doc, message: \"Deleted successfully\" };\n },\n };\n }\n\n // Global mutations\n for (const global of globals) {\n const inputType = globalInputTypes[global.slug];\n if (!inputType) continue;\n\n mutationFields[`update${toPascalCase(global.slug)}`] = {\n type: new GraphQLObjectType({\n name: `${toPascalCase(global.slug)}UpdateResult`,\n fields: {\n doc: { type: globalTypes[global.slug] || GraphQLString },\n message: { type: GraphQLString },\n },\n }),\n args: {\n data: { type: new GraphQLNonNull(inputType) },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const { user: ctxUser, req: ctxReq, tenantID: ctxTenant, db: ctxDb } = ctx as GraphQLContext;\n await checkGqlGlobalAccess(global, \"update\", {\n user: ctxUser,\n req: ctxReq,\n tenantID: ctxTenant,\n });\n if (ctxTenant) {\n ctxDb.setTenantContext({ tenantId: ctxTenant, userId: ctxUser?.id ?? '', role: ctxUser?.role, isSuperAdmin: ctxUser?.role === 'super_admin' });\n }\n\n const doc = await ctxDb.findOne({\n collection: `_globals_${global.slug}`,\n where: {},\n tenantID: ctxTenant,\n });\n\n let result;\n if (doc) {\n result = await ctxDb.update({\n collection: `_globals_${global.slug}`,\n id: doc.id,\n data: args.data,\n tenantID: ctxTenant,\n });\n } else {\n result = await ctxDb.create({\n collection: `_globals_${global.slug}`,\n data: args.data,\n tenantID: ctxTenant,\n });\n }\n\n return { doc: result, message: \"Updated successfully\" };\n },\n };\n }\n\n const Mutation = new GraphQLObjectType({\n name: \"Mutation\",\n fields: mutationFields,\n });\n\n // Federation @key directive\n const keyDirective = new GraphQLDirective({\n name: \"key\",\n locations: [DirectiveLocation.OBJECT, DirectiveLocation.INTERFACE],\n args: {\n fields: { type: new GraphQLNonNull(GraphQLString) },\n },\n });\n\n // Federation _service query — compute SDL before adding _service to avoid circularity\n const serviceSdl = printSchema(new GraphQLSchema({\n query: new GraphQLObjectType({ name: \"Query\", fields: { ...queryFields } }),\n mutation: Mutation,\n directives: [keyDirective],\n }));\n queryFields._service = {\n type: new GraphQLObjectType({\n name: \"_Service\",\n fields: {\n sdl: { type: GraphQLString },\n },\n }),\n resolve: () => ({ sdl: serviceSdl }),\n };\n\n return new GraphQLSchema({\n query: Query,\n mutation: Mutation,\n directives: [keyDirective],\n });\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nexport function createGraphQLSchema(\n registry: Registry,\n db: BaseAdapter,\n): GraphQLSchema & { sdl: string } {\n const schema = buildGraphQLSchema({ registry, db });\n return Object.assign(schema, { sdl: printSchema(schema) });\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createKyro, LocalAdapter } from './chunk-
|
|
1
|
+
import { createKyro, LocalAdapter } from './chunk-ZFHTJ2YX.js';
|
|
2
2
|
import { autoBootstrap } from './chunk-GAAHG2Z4.js';
|
|
3
3
|
import { SQLiteAuthAdapter } from './chunk-Q72BOAPK.js';
|
|
4
4
|
import { DrizzleAdapter } from './chunk-V7KZQIZ6.js';
|
|
@@ -88,5 +88,5 @@ var ALL = async (context) => {
|
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
export { ALL, kyroInstance, warmKyroInstance };
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
91
|
+
//# sourceMappingURL=chunk-EQTMBMDR.js.map
|
|
92
|
+
//# sourceMappingURL=chunk-EQTMBMDR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api-handler.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/api-handler.ts"],"names":[],"mappings":"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","file":"chunk-EQTMBMDR.js","sourcesContent":["import type { APIRoute } from \"astro\";\nimport { createKyro } from \"./createKyro.js\";\nimport { autoBootstrap } from \"./auth/bootstrap.js\";\nimport { DrizzleAdapter } from \"./database/drizzle/adapter.js\";\nimport { PostgresAuthAdapter } from \"./database/drizzle/postgres-auth-adapter.js\";\nimport { LocalAdapter } from \"./database/local/adapter.js\";\nimport { SQLiteAuthAdapter } from \"./auth/sqlite-adapter.js\";\nimport { MongoDBAdapter } from \"./database/mongodb/adapter.js\";\nimport { MongoDBAuthAdapter } from \"./database/mongodb/mongo-auth-adapter.js\";\n// @ts-ignore - handled by vite alias\nimport projectConfig from \"kyro:config\";\n\nexport let kyroInstance: any = null;\nlet initPromise: Promise<void> | null = null;\n\nasync function doInit(): Promise<void> {\n if (kyroInstance) return;\n\n try {\n const config = projectConfig.default || projectConfig;\n kyroInstance = createKyro(config);\n await kyroInstance.init();\n await kyroInstance.loadSettings();\n\n const db = kyroInstance.db;\n let bootstrapAuthAdapter: any = undefined;\n \n if (db instanceof DrizzleAdapter) {\n if (db.dialect === \"postgres\") {\n bootstrapAuthAdapter = new PostgresAuthAdapter({ db: db.client });\n } else if (db.dialect === \"sqlite\") {\n const authDbPath = process.env.KYRO_AUTH_DB_PATH || \"./data/auth.db\";\n bootstrapAuthAdapter = new SQLiteAuthAdapter({ path: authDbPath });\n }\n } else if (db instanceof LocalAdapter) {\n const authDbPath = process.env.KYRO_AUTH_DB_PATH || \"./data/auth.db\";\n bootstrapAuthAdapter = new SQLiteAuthAdapter({ path: authDbPath });\n } else if (db instanceof MongoDBAdapter) {\n bootstrapAuthAdapter = new MongoDBAuthAdapter({ db: db.db });\n }\n\n if (bootstrapAuthAdapter?.connect) {\n await bootstrapAuthAdapter.connect();\n }\n\n const result = await autoBootstrap(bootstrapAuthAdapter);\n if (result?.success) {\n console.log(`[Kyro] Admin user auto-created from env: ${result.user?.email}`);\n }\n\n // Auto-start WebSocket (checks settings.access.apiAccess.wsEnabled internally)\n if (typeof kyroInstance.startWebSocket === \"function\") {\n kyroInstance.startWebSocket().catch((err: any) => {\n console.error(\"[Kyro] WebSocket auto-start failed:\", err);\n });\n }\n\n // Expose instance globally so admin SSR can read DB directly\n (globalThis as any).__KYRO_INSTANCE__ = kyroInstance;\n\n console.log(\"[Kyro API] Backend initialized via Astro Integration\");\n } catch (err) {\n kyroInstance = null;\n initPromise = null;\n console.error(\"[Kyro API] Init failed, will retry:\", err);\n throw err;\n }\n}\n\nexport async function warmKyroInstance(): Promise<void> {\n if (!initPromise) {\n initPromise = doInit();\n }\n await initPromise;\n}\n\nexport const ALL: APIRoute = async (context) => {\n if (!kyroInstance) {\n if (!initPromise) {\n initPromise = doInit();\n }\n\n try {\n await Promise.race([\n initPromise,\n new Promise<void>((_, reject) =>\n setTimeout(() => reject(new Error(\"Initialization timeout\")), 30000)\n ),\n ]);\n } catch {\n return new Response(JSON.stringify({\n error: \"Service Unavailable\",\n message: \"Kyro CMS is still starting up. Please try again in a moment.\",\n }), {\n status: 503,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Retry-After\": \"5\",\n },\n });\n }\n }\n\n const app = kyroInstance.getREST();\n return app.fetch(context.request, context.locals);\n};\n"]}
|
|
@@ -216,5 +216,5 @@ function renderRichText(value) {
|
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
export { ALL_FIELD_TYPES, COMPLEX_FIELD_TYPES, LAYOUT_FIELD_TYPES, PRIMITIVE_FIELD_TYPES, RELATIONAL_FIELD_TYPES, createRelationshipFieldConfig, isArrayField, isBlocksField, isGroupField, isImageField, isLayoutField, isNumberField, isRelationshipField, isRichTextField, isSelectField, isTextField, isUploadField, normalizeRichTextValue, renderRichText, richTextStyles };
|
|
219
|
-
//# sourceMappingURL=chunk-
|
|
220
|
-
//# sourceMappingURL=chunk-
|
|
219
|
+
//# sourceMappingURL=chunk-FIAMXNTH.js.map
|
|
220
|
+
//# sourceMappingURL=chunk-FIAMXNTH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/fields/types.ts","../src/fields/richtext.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAoVO,SAAS,YAAY,KAAA,EAAkC;AAC5D,EAAA,OAAO,MAAM,IAAA,KAAS,MAAA;AACxB;AAEO,SAAS,cAAc,KAAA,EAAoC;AAChE,EAAA,OAAO,MAAM,IAAA,KAAS,QAAA;AACxB;AAEO,SAAS,oBAAoB,KAAA,EAA0C;AAC5E,EAAA,OAAO,MAAM,IAAA,KAAS,cAAA;AACxB;AAEO,SAAS,aAAa,KAAA,EAAmC;AAC9D,EAAA,OAAO,MAAM,IAAA,KAAS,OAAA;AACxB;AAEO,SAAS,aAAa,KAAA,EAAmC;AAC9D,EAAA,OAAO,MAAM,IAAA,KAAS,OAAA;AACxB;AAEO,SAAS,cAAc,KAAA,EAAoC;AAChE,EAAA,OAAO,MAAM,IAAA,KAAS,QAAA;AACxB;AAEO,SAAS,cAAc,KAAA,EAAoC;AAChE,EAAA,OAAO,MAAM,IAAA,KAAS,QAAA;AACxB;AAEO,SAAS,aAAa,KAAA,EAAmC;AAC9D,EAAA,OAAO,MAAM,IAAA,KAAS,OAAA;AACxB;AAEO,SAAS,gBAAgB,KAAA,EAAsC;AACpE,EAAA,OAAO,MAAM,IAAA,KAAS,UAAA;AACxB;AAEO,SAAS,cAAc,KAAA,EAAoC;AAChE,EAAA,OAAO,MAAM,IAAA,KAAS,QAAA;AACxB;AAEO,SAAS,cACd,KAAA,EACkD;AAClD,EAAA,OACE,MAAM,IAAA,KAAS,KAAA,IACf,MAAM,IAAA,KAAS,aAAA,IACf,MAAM,IAAA,KAAS,MAAA;AAEnB;AAMO,IAAM,qBAAA,GAAwB;AAAA,EACnC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAEO,IAAM,mBAAA,GAAsB;AAAA,EACjC,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAEO,IAAM,sBAAA,GAAyB;AAAA,EACpC,cAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAEO,IAAM,kBAAA,GAAqB,CAAC,KAAA,EAAO,aAAA,EAAe,MAAM;AAExD,IAAM,eAAA,GAAkB;AAAA,EAC7B,GAAG,qBAAA;AAAA,EACH,GAAG,mBAAA;AAAA,EACH,GAAG,sBAAA;AAAA,EACH,GAAG;AACL;AAMO,SAAS,6BAAA,CACd,IAAA,EACA,UAAA,EACA,OAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAA,EAAM,cAAA;AAAA,IACN,UAAA;AAAA,IACA,GAAG,OAAA;AAAA,IACH,QAAA,EAAU,SAAS,QAAA,IAAY;AAAA,GACjC;AACF;ACpbO,IAAM,cAAA,GAAiB;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAyF5B,IAAA;AAEF,IAAM,UAAA,GAAa;AAAA,EACjB,UAAA;AAAA,EACA,KAAK,SAAA,CAAU;AAAA,IACb,WAAA,EAAa;AAAA,GACd,CAAA;AAAA,EACD,KAAA;AAAA,EACA,UAAU,SAAA,CAAU;AAAA,IAClB,KAAA,EAAO,CAAC,SAAA,EAAW,WAAW;AAAA,GAC/B,CAAA;AAAA,EACD,SAAA;AAAA,EACA,UAAU,SAAA,CAAU;AAAA,IAClB,UAAA,EAAY;AAAA,GACb,CAAA;AAAA,EACD,QAAA;AAAA,EACA,SAAS,SAAA,CAAU;AAAA,IACjB,MAAA,EAAQ;AAAA,GACT,CAAA;AAAA,EACD,SAAA;AAAA,EACA;AACF,CAAA;AAEO,SAAS,uBAA0B,KAAA,EAAa;AAErD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAC;AACV;AAEO,SAAS,eAAe,KAAA,EAAwB;AACrD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,EAA8B,UAAU,CAAA;AAClE,IAAA,OAAO,8BAA8B,IAAI,CAAA,MAAA,CAAA;AAAA,EAC3C,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,+BAA+B,KAAK,CAAA;AAClD,IAAA,OAAO,EAAA;AAAA,EACT;AACF","file":"chunk-FIAMXNTH.js","sourcesContent":["\n\n// ============================================================================\n// Base Field Interface\n// ============================================================================\n\n/**\n * Serializable condition for conditional field visibility.\n * Unlike function conditions, these survive JSON serialization\n * and can be used in admin configs that are built at compile time.\n */\nexport interface DeclarativeCondition {\n /** The field name to evaluate (resolved from root form data) */\n field: string;\n /** Show the field when the target field equals this value */\n equals?: string | number | boolean;\n /** Show the field when the target field does NOT equal this value */\n notEquals?: string | number | boolean;\n /** Show the field when the target field's value is one of these */\n in?: (string | number | boolean)[];\n}\n\nexport interface FieldAdmin {\n description?: string;\n placeholder?: string;\n readOnly?: boolean | ((\n data: Record<string, unknown>,\n siblingData: Record<string, unknown>,\n ) => boolean);\n hidden?: boolean | ((\n data: Record<string, unknown>,\n siblingData: Record<string, unknown>,\n ) => boolean);\n width?: string;\n position?: \"sidebar\" | \"main\";\n autoGenerate?: string;\n action?: string;\n method?: string;\n inline?: boolean;\n pickerMode?: \"drawer\" | \"dropdown\";\n condition?:\n | ((\n data: Record<string, unknown>,\n siblingData: Record<string, unknown>,\n ) => boolean)\n | DeclarativeCondition;\n}\n\nexport interface BaseField {\n name: string;\n label?: string;\n required?: boolean;\n unique?: boolean;\n indexed?: boolean;\n defaultValue?: any;\n admin?: FieldAdmin;\n validate?: (\n value: any,\n options: ValidateOptions,\n ) => string | true | Promise<string | true>;\n hooks?: {\n beforeValidate?: Hook[];\n beforeChange?: Hook[];\n afterChange?: Hook[];\n afterRead?: Hook[];\n };\n}\n\nexport interface ValidateOptions {\n data?: Record<string, any>;\n siblingData?: Record<string, any>;\n user?: unknown;\n operation?: string;\n required?: boolean;\n}\n\nexport type Hook = (args: any) => Promise<any> | any;\n\n// ============================================================================\n// Primitive Fields\n// ============================================================================\n\nexport type TextFieldVariant = \"text\" | \"email\" | \"password\" | \"url\" | \"id\";\n\nexport interface TextField extends BaseField {\n type: \"text\";\n variant?: TextFieldVariant;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n hasMany?: boolean;\n localized?: boolean;\n}\n\nexport interface NumberField extends BaseField {\n type: \"number\";\n min?: number;\n max?: number;\n step?: number;\n integer?: boolean;\n hasMany?: boolean;\n}\n\nexport interface CheckboxField extends BaseField {\n type: \"checkbox\";\n}\n\nexport interface DateField extends BaseField {\n type: \"date\";\n minDate?: string;\n maxDate?: string;\n time?: boolean;\n}\n\nexport interface EmailField extends BaseField {\n type: \"email\";\n}\n\nexport interface PasswordField extends BaseField {\n type: \"password\";\n}\n\nexport interface TextareaField extends BaseField {\n type: \"textarea\";\n minLength?: number;\n maxLength?: number;\n rows?: number;\n localized?: boolean;\n}\n\nexport interface SelectField extends BaseField {\n type: \"select\";\n options?: Array<{ label: string; value: string }>;\n dynamicOptions?: string;\n hasMany?: boolean;\n defaultValue?: string | string[];\n}\n\nexport interface RadioField extends BaseField {\n type: \"radio\";\n options: Array<{ label: string; value: string }>;\n defaultValue?: string;\n}\n\nexport interface ColorField extends BaseField {\n type: \"color\";\n format?: \"hex\" | \"rgb\" | \"hsl\";\n defaultValue?: string;\n}\n\nexport interface ImageField extends BaseField {\n type: \"image\";\n minCount?: number;\n maxCount?: number;\n allowedTypes?: string[];\n maxSize?: number;\n}\n\n// ============================================================================\n// Complex Fields\n// ============================================================================\n\nexport type RichTextBlock = Record<string, any>; // TipTap JSONContent\n\nexport interface RichTextField extends BaseField {\n type: \"richtext\";\n defaultValue?: Record<string, any>;\n localized?: boolean;\n}\n\nexport interface JSONField extends BaseField {\n type: \"json\";\n defaultValue?: Record<string, any>;\n}\n\nexport interface CodeField extends BaseField {\n type: \"code\";\n language?: string;\n defaultValue?: string;\n}\n\nexport interface UploadField extends BaseField {\n type: \"upload\";\n relationTo: string;\n hasMany?: boolean;\n maxDepth?: number;\n defaultValue?: string;\n}\n\nexport interface MarkdownField extends BaseField {\n type: \"markdown\";\n localized?: boolean;\n defaultValue?: string;\n}\n\n// ============================================================================\n// Relational Fields\n// ============================================================================\n\nexport interface RelationshipField extends BaseField {\n type: \"relationship\";\n relationTo: string | string[];\n hasMany?: boolean;\n maxDepth?: number;\n filterOptions?: (args: { data: any; user: any }) => Record<string, any>;\n defaultValue?: string | string[];\n}\n\nexport interface ArrayField extends BaseField {\n type: \"array\";\n fields: Field[];\n minRows?: number;\n maxRows?: number;\n labels?: { singular?: string; plural?: string };\n defaultValue?: Record<string, any>[];\n}\n\nexport interface ListField extends BaseField {\n type: \"list\";\n defaultValue?: string[];\n}\n\nexport interface GroupField extends BaseField {\n type: \"group\";\n fields: Field[];\n defaultValue?: Record<string, any>;\n}\n\nexport interface BlockImage {\n url: string;\n alt?: string;\n}\n\nexport interface BlockAdmin {\n group?: string;\n description?: string;\n images?: {\n icon?: BlockImage | string;\n thumbnail?: BlockImage | string;\n };\n}\n\nexport interface Block {\n slug: string;\n label: string;\n fields: Field[];\n imageURL?: string;\n admin?: BlockAdmin;\n}\n\nexport interface BlocksField extends BaseField {\n type: \"blocks\";\n blocks?: Block[];\n minRows?: number;\n maxRows?: number;\n defaultValue?: Array<{ blockType: string; [key: string]: any }>;\n}\n\nexport interface RowField extends Omit<BaseField, \"name\"> {\n type: \"row\";\n fields: Field[];\n name?: string;\n}\n\nexport interface CollapsibleField extends Omit<BaseField, \"name\"> {\n type: \"collapsible\";\n fields: Field[];\n label: string;\n name?: string;\n}\n\nexport interface TabsField extends Omit<BaseField, \"name\"> {\n type: \"tabs\";\n tabs: Array<{\n label: string;\n fields: Field[];\n name?: string;\n }>;\n name?: string;\n}\n\nexport interface ButtonField extends BaseField {\n type: \"button\";\n label: string;\n action?: string;\n method?: string;\n inline?: boolean;\n}\n\nexport interface ActionField extends BaseField {\n type: \"action\";\n label: string;\n action?: string;\n method?: string;\n inline?: boolean;\n}\n\nexport interface SecretField extends BaseField {\n type: \"secret\";\n}\n\n// ============================================================================\n// Union Type\n// ============================================================================\n\nexport type Field =\n | TextField\n | NumberField\n | CheckboxField\n | DateField\n | EmailField\n | PasswordField\n | TextareaField\n | SelectField\n | RadioField\n | ColorField\n | ImageField\n | RichTextField\n | JSONField\n | CodeField\n | UploadField\n | MarkdownField\n | RelationshipField\n | ArrayField\n | ListField\n | GroupField\n | BlocksField\n | RowField\n | CollapsibleField\n | TabsField\n | ButtonField\n | ActionField\n | SecretField;\n\nexport type FieldType = Field[\"type\"];\n\n// ============================================================================\n// Field Type Guards\n// ============================================================================\n\nexport function isTextField(field: Field): field is TextField {\n return field.type === \"text\";\n}\n\nexport function isNumberField(field: Field): field is NumberField {\n return field.type === \"number\";\n}\n\nexport function isRelationshipField(field: Field): field is RelationshipField {\n return field.type === \"relationship\";\n}\n\nexport function isArrayField(field: Field): field is ArrayField {\n return field.type === \"array\";\n}\n\nexport function isGroupField(field: Field): field is GroupField {\n return field.type === \"group\";\n}\n\nexport function isBlocksField(field: Field): field is BlocksField {\n return field.type === \"blocks\";\n}\n\nexport function isUploadField(field: Field): field is UploadField {\n return field.type === \"upload\";\n}\n\nexport function isImageField(field: Field): field is ImageField {\n return field.type === \"image\";\n}\n\nexport function isRichTextField(field: Field): field is RichTextField {\n return field.type === \"richtext\";\n}\n\nexport function isSelectField(field: Field): field is SelectField {\n return field.type === \"select\";\n}\n\nexport function isLayoutField(\n field: Field,\n): field is RowField | CollapsibleField | TabsField {\n return (\n field.type === \"row\" ||\n field.type === \"collapsible\" ||\n field.type === \"tabs\"\n );\n}\n\n// ============================================================================\n// Field Type List\n// ============================================================================\n\nexport const PRIMITIVE_FIELD_TYPES = [\n \"text\",\n \"number\",\n \"checkbox\",\n \"date\",\n \"email\",\n \"password\",\n \"textarea\",\n \"select\",\n \"radio\",\n \"color\",\n] as const;\n\nexport const COMPLEX_FIELD_TYPES = [\n \"richtext\",\n \"json\",\n \"code\",\n \"upload\",\n \"image\",\n \"markdown\",\n] as const;\n\nexport const RELATIONAL_FIELD_TYPES = [\n \"relationship\",\n \"array\",\n \"group\",\n \"blocks\",\n] as const;\n\nexport const LAYOUT_FIELD_TYPES = [\"row\", \"collapsible\", \"tabs\"] as const;\n\nexport const ALL_FIELD_TYPES = [\n ...PRIMITIVE_FIELD_TYPES,\n ...COMPLEX_FIELD_TYPES,\n ...RELATIONAL_FIELD_TYPES,\n ...LAYOUT_FIELD_TYPES,\n] as const;\n\n// ============================================================================\n// Field Factory Functions\n// ============================================================================\n\nexport function createRelationshipFieldConfig(\n name: string,\n relationTo: string | string[],\n options?: Partial<Omit<RelationshipField, \"type\" | \"name\" | \"relationTo\">>,\n): RelationshipField {\n return {\n name,\n type: \"relationship\",\n relationTo,\n ...options,\n required: options?.required ?? false,\n };\n}\n","import { generateHTML } from \"@tiptap/html\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Underline from \"@tiptap/extension-underline\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport { TextStyle } from \"@tiptap/extension-text-style\";\nimport Color from \"@tiptap/extension-color\";\n\nexport const richTextStyles = `\n.kyro-richtext {\n color: inherit;\n line-height: 1.7;\n}\n\n.kyro-richtext > *:first-child {\n margin-top: 0;\n}\n\n.kyro-richtext > *:last-child {\n margin-bottom: 0;\n}\n\n.kyro-richtext p,\n.kyro-richtext ul,\n.kyro-richtext ol,\n.kyro-richtext blockquote,\n.kyro-richtext pre {\n margin: 0 0 1rem;\n}\n\n.kyro-richtext h1,\n.kyro-richtext h2,\n.kyro-richtext h3,\n.kyro-richtext h4,\n.kyro-richtext h5,\n.kyro-richtext h6 {\n margin: 0 0 0.75rem;\n line-height: 1.2;\n}\n\n.kyro-richtext ul,\n.kyro-richtext ol {\n padding-left: 1.5rem;\n}\n\n.kyro-richtext blockquote {\n border-left: 4px solid rgba(148, 163, 184, 0.5);\n margin-left: 0;\n padding-left: 1rem;\n font-style: italic;\n}\n\n.kyro-richtext pre {\n overflow-x: auto;\n border-radius: 0.75rem;\n background: rgba(15, 23, 42, 0.92);\n color: #f8fafc;\n padding: 1rem;\n}\n\n.kyro-richtext code {\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n}\n\n.kyro-richtext img {\n display: block;\n max-width: 100%;\n height: auto;\n border-radius: 0.75rem;\n}\n\n.kyro-richtext ul[data-type=\"taskList\"] {\n list-style: none;\n padding: 0;\n}\n\n.kyro-richtext li[data-type=\"taskItem\"] {\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n}\n\n.kyro-richtext li[data-type=\"taskItem\"] > label {\n user-select: none;\n pointer-events: none;\n margin-top: 0.2rem;\n}\n\n.kyro-richtext li[data-type=\"taskItem\"] > div {\n flex: 1;\n}\n\n.kyro-richtext mark {\n background-color: #fef08a;\n border-radius: 0.25rem;\n padding: 0.125rem 0.25rem;\n}\n`.trim();\n\nconst extensions = [\n StarterKit,\n Link.configure({\n openOnClick: false,\n }),\n Image,\n TextAlign.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Underline,\n Highlight.configure({\n multicolor: true,\n }),\n TaskList,\n TaskItem.configure({\n nested: true,\n }),\n TextStyle,\n Color,\n];\n\nexport function normalizeRichTextValue<T>(value: T): T {\n // TipTap JSON is already standard JSON, so we just ensure it's an object.\n if (typeof value === \"object\" && value !== null) {\n return value;\n }\n return {} as T;\n}\n\nexport function renderRichText(value: unknown): string {\n if (typeof value !== \"object\" || value === null) {\n return \"\";\n }\n \n try {\n const html = generateHTML(value as Record<string, any>, extensions);\n return `<div class=\"kyro-richtext\">${html}</div>`;\n } catch (error) {\n console.error(\"Failed to render rich text:\", error);\n return \"\";\n }\n}\n"]}
|
|
@@ -2,15 +2,15 @@ import { PasswordPolicy, ConfigService, EmailTransport } from './chunk-6UNONDW7.
|
|
|
2
2
|
import { usersCollection } from './chunk-XEB7PH2E.js';
|
|
3
3
|
import { SQLiteAuthAdapter } from './chunk-Q72BOAPK.js';
|
|
4
4
|
import { createAuditContext } from './chunk-P2YW545G.js';
|
|
5
|
-
import { WEBHOOK_EVENTS } from './chunk-
|
|
6
|
-
import { API_KEY_COLLECTION, generateApiKey, generateApiKeyPrefix, checkCollectionAccess, checkGlobalAccess, extractApiKeyFromRequest, validateApiKey, createApiKeyContext } from './chunk-
|
|
5
|
+
import { WEBHOOK_EVENTS } from './chunk-2Z7YAJBS.js';
|
|
6
|
+
import { API_KEY_COLLECTION, generateApiKey, generateApiKeyPrefix, checkCollectionAccess, checkGlobalAccess, extractApiKeyFromRequest, validateApiKey, createApiKeyContext } from './chunk-2GXALYKV.js';
|
|
7
7
|
import { genId, DrizzleAdapter } from './chunk-V7KZQIZ6.js';
|
|
8
8
|
import { PostgresAuthAdapter } from './chunk-CJX74IYK.js';
|
|
9
9
|
import { MongoDBAdapter } from './chunk-PQ72Z6WC.js';
|
|
10
10
|
import { MongoDBAuthAdapter } from './chunk-7OGPN7MP.js';
|
|
11
11
|
import { hasPermission } from './chunk-L4EZKIEX.js';
|
|
12
12
|
import { __esm, __export, __toCommonJS } from './chunk-4CV4JOE5.js';
|
|
13
|
-
import crypto, { randomBytes, createHash } from 'crypto';
|
|
13
|
+
import crypto, { randomBytes, createHash, createHmac } from 'crypto';
|
|
14
14
|
import { createStorage } from 'unstorage';
|
|
15
15
|
import fsDriver from 'unstorage/drivers/fs';
|
|
16
16
|
import { Hono } from 'hono';
|
|
@@ -1671,22 +1671,11 @@ function createLocalStorage(config) {
|
|
|
1671
1671
|
}
|
|
1672
1672
|
};
|
|
1673
1673
|
}
|
|
1674
|
-
|
|
1675
|
-
// src/storage/imgix.ts
|
|
1676
1674
|
function createImgixStorage(config) {
|
|
1677
1675
|
const signUrl = (path3, params) => {
|
|
1678
1676
|
if (!config.signKey) return path3;
|
|
1679
|
-
const
|
|
1680
|
-
|
|
1681
|
-
const data = signer.encode(path3 + params.toString());
|
|
1682
|
-
let hash = 0;
|
|
1683
|
-
const combined = new Uint8Array(key.length + data.length);
|
|
1684
|
-
combined.set(key);
|
|
1685
|
-
combined.set(data, key.length);
|
|
1686
|
-
for (let i = 0; i < combined.length; i++) {
|
|
1687
|
-
hash = (hash << 5) - hash + combined[i] | 0;
|
|
1688
|
-
}
|
|
1689
|
-
params.set("s", Math.abs(hash).toString(16));
|
|
1677
|
+
const signature = createHmac("sha256", config.signKey).update(path3 + params.toString()).digest("hex");
|
|
1678
|
+
params.set("s", signature);
|
|
1690
1679
|
return path3;
|
|
1691
1680
|
};
|
|
1692
1681
|
return {
|
|
@@ -5103,10 +5092,20 @@ function createHonoApp(options) {
|
|
|
5103
5092
|
const sort = url.searchParams.get("sort") || void 0;
|
|
5104
5093
|
const depth = parseInt(url.searchParams.get("depth") || "0");
|
|
5105
5094
|
const select = url.searchParams.get("select")?.split(",") || void 0;
|
|
5106
|
-
const
|
|
5095
|
+
const draftParam = url.searchParams.get("draft");
|
|
5096
|
+
const isDraftRequest = draftParam === "true" ? true : draftParam === "false" ? false : !!ctxUser;
|
|
5097
|
+
let where = {};
|
|
5098
|
+
const whereRaw = url.searchParams.get("where");
|
|
5099
|
+
if (whereRaw) {
|
|
5100
|
+
try {
|
|
5101
|
+
where = JSON.parse(whereRaw);
|
|
5102
|
+
} catch {
|
|
5103
|
+
return c.json({ error: "Invalid JSON in where parameter" }, 400);
|
|
5104
|
+
}
|
|
5105
|
+
}
|
|
5107
5106
|
const result = await db.find({
|
|
5108
5107
|
collection: slug,
|
|
5109
|
-
where
|
|
5108
|
+
where,
|
|
5110
5109
|
sort,
|
|
5111
5110
|
limit,
|
|
5112
5111
|
page,
|
|
@@ -5295,7 +5294,8 @@ function createHonoApp(options) {
|
|
|
5295
5294
|
const url = new URL(c.req.url);
|
|
5296
5295
|
const depth = parseInt(url.searchParams.get("depth") || "0");
|
|
5297
5296
|
const select = url.searchParams.get("select")?.split(",") || void 0;
|
|
5298
|
-
const
|
|
5297
|
+
const draftParam = url.searchParams.get("draft");
|
|
5298
|
+
const isDraftRequest = draftParam === "true" ? true : draftParam === "false" ? false : !!ctxUser;
|
|
5299
5299
|
let doc = await db.findByID({
|
|
5300
5300
|
collection: slug,
|
|
5301
5301
|
id,
|
|
@@ -6282,7 +6282,6 @@ function createHonoApp(options) {
|
|
|
6282
6282
|
data: doc,
|
|
6283
6283
|
message: "Version restored successfully"
|
|
6284
6284
|
});
|
|
6285
|
-
return c.json({ data: doc, message: "Restored successfully" });
|
|
6286
6285
|
} catch (error) {
|
|
6287
6286
|
return c.json({ error: error.message }, 500);
|
|
6288
6287
|
}
|
|
@@ -6368,6 +6367,13 @@ Sent at: ${(/* @__PURE__ */ new Date()).toLocaleString()}`
|
|
|
6368
6367
|
});
|
|
6369
6368
|
}
|
|
6370
6369
|
}
|
|
6370
|
+
app.onError((err, c) => {
|
|
6371
|
+
console.error(`[API Error] ${c.req.method} ${c.req.path}:`, err);
|
|
6372
|
+
return c.json(
|
|
6373
|
+
{ error: err.message || "Internal server error", code: "INTERNAL_ERROR" },
|
|
6374
|
+
500
|
|
6375
|
+
);
|
|
6376
|
+
});
|
|
6371
6377
|
return app;
|
|
6372
6378
|
}
|
|
6373
6379
|
function createRESTAPI(registry, db, options) {
|
|
@@ -6384,5 +6390,5 @@ function createRESTAPI(registry, db, options) {
|
|
|
6384
6390
|
}
|
|
6385
6391
|
|
|
6386
6392
|
export { AuditLogger, AuthRoutes, InMemoryAuditLogger, InMemoryRateLimiter, MediaService, createAuditContext2 as createAuditContext, createCloudinaryStorage, createFtpStorage, createHonoApp, createLocalStorage, createRESTAPI, createS3Storage, getAppSecret, getDefaultRegistry, getEncryptionKey, getSessionConfig, init_secret, loadSecrets, resolveProvider, setDbAdapter };
|
|
6387
|
-
//# sourceMappingURL=chunk-
|
|
6388
|
-
//# sourceMappingURL=chunk-
|
|
6393
|
+
//# sourceMappingURL=chunk-HA4MGAZJ.js.map
|
|
6394
|
+
//# sourceMappingURL=chunk-HA4MGAZJ.js.map
|