{"version":3,"sources":["jsdelivr-header.js","/npm/@vlcn.io/wa-sqlite@0.22.0/src/sqlite-api.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,UCJY,WAAY,8BACf,KAAK,wBAEd,MAAM,UAAY,oBACZ,WAAa,2BAEZ,MAAM,oBAAoB,MAC/B,WAAA,CAAY,EAAS,GACnB,MAAM,GACN,KAAK,KAAO,CACd,EAGF,MAAM,OAAQ,SASP,SAAS,QAAQ,GACG,MAAM,EAAU,CAAC,EAEpC,EAAoB,EAAO,iBAG3B,EAAM,EAAO,QAAQ,GACrB,EAAS,CAAC,EAAK,EAAM,GAI3B,SAAS,EAAW,GAClB,GAAiB,iBAAN,EAAgB,OAAO,EAClC,MAAM,EAAI,EAAO,gBAAgB,GAC3B,EAAM,EAAO,gBAAgB,EAAI,GAEvC,OADA,EAAO,aAAa,EAAG,EAAK,EAAI,GACzB,CACT,CAQA,SAAS,EAAgB,EAAM,GAC7B,OAAQ,OAAO,IAAS,IAAuB,YAAf,OAAO,EACzC,CASA,MAAM,EAAgB,WACpB,MAAM,EAAQ,OAAO,OAAO,mBAAqB,IAC3C,EAAQ,OAAO,OAAO,mBAAqB,IAEjD,OAAO,SAAS,EAAM,GACpB,OAAI,EAAO,GAAS,EAAO,EAElB,EAAgB,EAAM,GAKd,WAAP,GAA8B,WAAP,IAA6B,WAAP,EAEzD,CACD,CAfqB,GAiBhB,EAAY,IAAI,IACtB,SAAS,EAAe,GACtB,IAAK,EAAU,IAAI,GACjB,MAAM,IAAI,YAAY,iBAAkB,OAAO,cAEnD,CAEA,MAAM,EAAc,IAAI,IACxB,SAAS,EAAgB,GACvB,IAAK,EAAY,IAAI,GACnB,MAAM,IAAI,YAAY,kBAAmB,OAAO,cAEpD,CAEA,EAAQ,gBAAkB,SAAS,EAAM,GACvC,EAAgB,GAChB,MAAM,EAAU,MAAM,QAAQ,GACxB,EAAY,EAAQ,qBAAqB,GAC/C,IAAK,IAAI,EAAI,EAAG,GAAK,IAAa,EAAG,CACnC,MACM,EAAQ,EADF,EAAU,EAAI,EAAI,EAAQ,oBAAoB,EAAM,SAElD,IAAV,GACF,EAAQ,KAAK,EAAM,EAAG,EAE1B,CACA,OAAO,OAAO,SAChB,EAEA,EAAQ,KAAO,SAAS,EAAM,EAAG,GAE/B,OADA,EAAgB,UACD,GACb,IAAK,SACH,OAAI,KAAmB,EAAR,GACN,EAAQ,SAAS,EAAM,EAAG,GAE1B,EAAQ,YAAY,EAAM,EAAG,GAExC,IAAK,SACH,OAAO,EAAQ,UAAU,EAAM,EAAG,GACpC,QACE,GAAI,aAAiB,YAAc,MAAM,QAAQ,GAC/C,OAAO,EAAQ,UAAU,EAAM,EAAG,GAC7B,GAAc,OAAV,EACT,OAAO,EAAQ,UAAU,EAAM,GAC1B,GAAqB,iBAAV,EAChB,OAAO,EAAQ,WAAW,EAAM,EAAG,GAC9B,QAAc,IAAV,EAET,OAAO,OAAO,cAEd,MAAM,IAAI,MAAM,+BAAiC,GAGzD,EAEA,EAAQ,UAAY,WAClB,MAAM,EAAQ,oBACR,EAAI,EAAO,MAAM,KAAU,KAAK,YACtC,OAAO,SAAS,EAAM,EAAG,GACvB,EAAgB,GAEhB,MAAM,EAAa,EAAM,YAAc,EAAM,OACvC,EAAM,EAAO,gBAAgB,GACnC,EAAO,OAAO,SAAS,GAAK,IAAI,GAChC,MAAM,EAAS,EAAE,EAAM,EAAG,EAAK,EAAY,GAE3C,OAAO,EAAM,EAAO,EAAQ,EAAY,IAAI,GAC9C,CACD,CAbmB,GAepB,EAAQ,qBAAuB,WAC7B,MACM,EAAI,EAAO,MADH,kCACmB,KAAK,QACtC,OAAO,SAAS,GACd,EAAgB,GAGhB,OAFe,EAAE,EAGnB,CACD,CAT8B,GAW/B,EAAQ,YAAc,WACpB,MAAM,EAAQ,sBACR,EAAI,EAAO,MAAM,KAAU,KAAK,UACtC,OAAO,SAAS,EAAM,EAAG,GACvB,EAAgB,GAChB,MAAM,EAAS,EAAE,EAAM,EAAG,GAE1B,OAAO,EAAM,EAAO,EAAQ,EAAY,IAAI,GAC9C,CACD,CATqB,GAWtB,EAAQ,SAAW,WACjB,MAAM,EAAQ,mBACR,EAAI,EAAO,MAAM,KAAU,KAAK,UACtC,OAAO,SAAS,EAAM,EAAG,GAEvB,GADA,EAAgB,GACZ,EAAQ,YAAc,GAAS,WAAY,OAAO,OAAO,aAE7D,MAAM,EAAS,EAAE,EAAM,EAAG,GAE1B,OAAO,EAAM,EAAO,EAAQ,EAAY,IAAI,GAC9C,CACD,CAXkB,GAanB,EAAQ,WAAa,WACnB,MAAM,EAAQ,qBACR,EAAI,EAAO,MAAM,KAAU,KAAK,WACtC,OAAO,SAAS,EAAM,EAAG,GAEvB,GADA,EAAgB,GACZ,EAAQ,WAAa,EAAQ,UAAW,OAAO,OAAO,aAE1D,MACM,EAAO,GAAS,IAChB,EAAS,EAAE,EAAM,EAAG,OAFL,YAAR,GAE2B,OAAO,IAE/C,OAAO,EAAM,EAAO,EAAQ,EAAY,IAAI,GAC9C,CACD,CAboB,GAerB,EAAQ,UAAY,WAClB,MAAM,EAAQ,oBACR,EAAI,EAAO,MAAM,KAAU,KAAK,SACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAChB,MAAM,EAAS,EAAE,EAAM,GAEvB,OAAO,EAAM,EAAO,EAAQ,EAAY,IAAI,GAC9C,CACD,CATmB,GAWpB,EAAQ,oBAAsB,WAC5B,MACM,EAAI,EAAO,MADH,iCACmB,KAAK,QACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAGhB,OAFe,EAAE,EAAM,EAGzB,CACD,CAT6B,GAW9B,EAAQ,UAAY,WAClB,MAAM,EAAQ,oBACR,EAAI,EAAO,MAAM,KAAU,KAAK,YACtC,OAAO,SAAS,EAAM,EAAG,GACvB,EAAgB,GAChB,MAAM,EAAM,EAAW,GACjB,EAAS,EAAE,EAAM,EAAG,GAAM,EAAG,GAEnC,OAAO,EAAM,EAAO,EAAQ,EAAY,IAAI,GAC9C,CACD,CAVmB,GAYpB,EAAQ,QAAU,WAChB,MACM,EAAI,EAAO,MADH,qBACmB,KAAK,QACtC,OAAO,SAAS,GACd,EAAe,GAGf,OAFe,EAAE,EAGnB,CACD,CATiB,GAWlB,EAAQ,MAAQ,WACd,MAAM,EAAQ,gBACR,EAAI,EAAO,MAAM,KAAU,KAAK,OAAQ,CAAE,MArOtC,OAsOV,OAAO,eAAe,GACpB,EAAe,GACf,MAAM,QAAe,EAAE,GAEvB,OADA,EAAU,OAAO,GACV,EAAM,EAAO,EAAQ,EAC9B,CACD,CATe,GAWhB,EAAQ,OAAS,SAAS,EAAM,GAC9B,EAAgB,GAChB,MAAM,EAAO,EAAQ,YAAY,EAAM,GACvC,OAAQ,GACN,KAAK,OAAO,YACV,OAAO,EAAQ,YAAY,EAAM,GACnC,KAAK,OAAO,aACV,OAAO,EAAQ,cAAc,EAAM,GACrC,KAAK,OAAO,eACV,MAAM,EAAO,EAAQ,WAAW,EAAM,GAChC,EAAO,EAAO,cACpB,OAAO,EAAc,EAAM,GAC7B,KAAK,OAAO,YACV,OAAO,KACT,KAAK,OAAO,YACV,OAAO,EAAQ,YAAY,EAAM,GACnC,QACE,MAAM,IAAI,YAAY,eAAgB,GAE5C,EAEA,EAAQ,YAAc,WACpB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,SACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAChB,MAAM,EAAS,EAAQ,aAAa,EAAM,GACpC,EAAU,EAAE,EAAM,GAClB,EAAS,EAAO,OAAO,SAAS,EAAS,EAAU,GAEnD,EAAM,IAAI,YAAY,EAAO,YAC7B,EAAM,IAAI,WAAW,GAE3B,OADA,EAAI,IAAI,GACD,CAET,CACD,CAfqB,GAiBtB,EAAQ,aAAe,WACrB,MACM,EAAI,EAAO,MADH,0BACmB,KAAK,SACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAGhB,OAFe,EAAE,EAAM,EAGzB,CACD,CATsB,GAWvB,EAAQ,aAAe,WACrB,MACM,EAAI,EAAO,MADH,0BACmB,KAAK,QACtC,OAAO,SAAS,GACd,EAAgB,GAGhB,OAFe,EAAE,EAGnB,CACD,CATsB,GAWvB,EAAQ,cAAgB,WACtB,MACM,EAAI,EAAO,MADH,2BACmB,KAAK,SACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAGhB,OAFe,EAAE,EAAM,EAGzB,CACD,CATuB,GAWxB,EAAQ,WAAa,WAGnB,MACM,EAAI,EAAO,MADH,0BACmB,KAAK,SACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAGhB,OAFe,EAAE,EAAM,EAGzB,CACD,CAXoB,GAarB,EAAQ,aAAe,WACrB,MACM,EAAI,EAAO,MADH,0BACmB,KAAK,SACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAKhB,OAFe,EAFF,EAAE,EAAM,GACR,EAAO,cAItB,CACD,CAXsB,GAavB,EAAQ,YAAc,WACpB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,SACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAGhB,OAFe,EAAE,EAAM,EAGzB,CACD,CATqB,GAWtB,EAAQ,aAAe,SAAS,GAC9B,MAAM,EAAU,GACV,EAAW,EAAQ,aAAa,GACtC,IAAK,IAAI,EAAI,EAAG,EAAI,IAAY,EAC9B,EAAQ,KAAK,EAAQ,YAAY,EAAM,IAEzC,OAAO,CACT,EAEA,EAAQ,YAAc,WACpB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,SACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAGhB,OAFe,EAAE,EAAM,EAGzB,CACD,CATqB,GAWtB,EAAQ,YAAc,WACpB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,SACtC,OAAO,SAAS,EAAM,GACpB,EAAgB,GAGhB,OAFe,EAAE,EAAM,EAGzB,CACD,CATqB,GAWtB,EAAQ,YAAc,SAAS,EAAI,GAGjC,OAFA,EAAe,GACf,EAAO,WAAW,EAAI,GACf,OAAO,SAChB,EAEA,EAAQ,gBAAkB,SAAS,EAAI,EAAe,EAAM,EAAU,EAAM,EAAO,EAAO,GAExF,GADA,EAAe,GACX,IAAU,IAAU,EAAQ,CAE9B,OAAO,EAAM,0BADE,EAAO,eAAe,EAAI,EAAe,EAAM,EAAU,EAAM,GAC9B,EAClD,CAEA,IAAK,GAAS,GAAS,EAAQ,CAE7B,OAAO,EAAM,0BADE,EAAO,gBAAgB,EAAI,EAAe,EAAM,EAAU,EAAM,EAAO,GACtC,EAClD,CAEA,MAAM,IAAI,YAAY,+BAAgC,OAAO,cAC/D,EAEA,EAAQ,cAAgB,SAAS,EAAI,EAAO,EAAQ,GAClD,EAAe,GAEf,OAAO,EAAM,wBADE,EAAO,aAAa,EAAI,EAAO,EAAQ,GACR,EAChD,EAEA,EAAQ,WAAa,WACnB,MACM,EAAI,EAAO,MADH,wBACmB,KAAK,QACtC,OAAO,SAAS,GACd,EAAgB,GAGhB,OAFe,EAAE,EAGnB,CACD,CAToB,GAWrB,EAAQ,aAAe,WACrB,MACM,EAAI,EAAO,MADH,0BACmB,KAAK,SACtC,OAAO,SAAS,EAAO,GAErB,OAAO,EAAM,uBADE,EAAE,EAAO,GAE1B,CACD,CAPsB,GASvB,EAAQ,KAAO,eAAe,EAAI,EAAK,GACrC,UAAW,MAAM,KAAQ,EAAQ,WAAW,EAAI,GAAM,CACpD,IAAI,EACJ,WAAa,EAAQ,KAAK,KAAU,OAAO,YACzC,GAAI,EAAU,CACZ,EAAU,GAAW,EAAQ,aAAa,GAC1C,MAAM,EAAM,EAAQ,IAAI,SAClB,EAAS,EAAK,EACtB,CAEJ,CACA,OAAO,OAAO,SAChB,EAEA,EAAQ,SAAW,WACjB,MACM,EAAI,EAAO,MADH,sBACmB,KAAK,OAAQ,CAAE,MAxbtC,OAybV,OAAO,eAAe,GACpB,IAAK,EAAY,IAAI,GACnB,OAAO,OAAO,cAEhB,MAAM,QAAe,EAAE,GAEZ,EAAY,IAAI,GAK3B,OAJA,EAAY,OAAO,GAIZ,CACT,CACD,CAhBkB,GAkBnB,EAAQ,eAAiB,WACvB,MACM,EAAI,EAAO,MADH,4BACmB,KAAK,QACtC,OAAO,SAAS,GAEd,OADe,EAAE,EAEnB,CACD,CAPwB,GASzB,EAAQ,WAAa,WACnB,MACM,EAAI,EAAO,MADH,wBACmB,KAAK,OACtC,OAAO,WAEL,OADe,GAEjB,CACD,CAPoB,GASrB,EAAQ,kBAAoB,WAC1B,MACM,EAAI,EAAO,MADH,+BACmB,KAAK,OACtC,OAAO,WAEL,OADe,GAEjB,CACD,CAP2B,GAS5B,EAAQ,MAAQ,WACd,MACM,EAAI,EAAO,MADH,mBACmB,KAAK,UACtC,OAAO,SAAS,EAAI,EAAI,GAEtB,OADe,EAAE,EAAI,EAAI,EAE3B,CACD,CAPe,GAShB,EAAQ,QAAU,WAChB,MAAM,EAAQ,kBACR,EAAI,EAAO,MAAM,KAAU,KAAK,UAAW,CAAE,MA9ezC,OA+eV,OAAO,eAAe,EAAW,EAAO,GACtC,EAAQ,GAAS,OAAO,mBAAqB,OAAO,sBACpD,EAAO,EAAW,GAClB,MAAM,QAAe,EAAE,EAAW,EAAO,GAAI,EAAO,GAE9C,EAAK,EAAO,SAAS,EAAO,GAAI,KAMtC,OALA,EAAU,IAAI,GACd,EAAO,cAAc,GAErB,EAAO,MAAM,6BAA8B,OAAQ,CAAC,UAAW,CAAC,IAChE,EAAM,EAAO,GACN,CACT,CACD,CAhBiB,GAkBlB,EAAQ,WAAa,WACnB,MAAM,EAAQ,qBACR,EAAI,EAAO,MAAM,KAAU,KAAK,WAAY,CAAE,MAhgB1C,OAigBV,OAAO,eAAe,EAAI,GACxB,MAAM,QAAe,EAAE,EAAI,GAAM,EAAG,EAAO,GAAI,EAAO,IACtD,EAAM,EAAO,EAAQ,GAErB,MAAM,EAAO,EAAO,SAAS,EAAO,GAAI,KACxC,OAAI,GACF,EAAY,IAAI,EAAM,GACf,CAAE,OAAM,IAAK,EAAO,SAAS,EAAO,GAAI,OAE1C,IACT,CACD,CAdoB,GAgBrB,EAAQ,iBAAmB,SAAS,EAAI,EAAc,EAAS,GAC7D,EAAe,GACf,EAAO,gBAAgB,EAAI,EAAc,EAAS,EACpD,EAEA,EAAQ,MAAQ,WACd,MAAM,EAAQ,gBACR,EAAI,EAAO,MAAM,KAAU,KAAK,OAAQ,CAAE,MArhBtC,OAshBV,OAAO,eAAe,GACpB,EAAgB,GAChB,MAAM,QAAe,EAAE,GACvB,OAAO,EAAM,EAAO,EAAQ,EAAY,IAAI,GAC9C,CACD,CARe,GAUhB,EAAQ,OAAS,SAAS,EAAS,GACjC,cAAe,GACb,IAAK,SACC,KAAmB,EAAR,GACb,EAAQ,WAAW,EAAS,GAE5B,EAAQ,cAAc,EAAS,GAEjC,MACF,IAAK,SACH,EAAQ,YAAY,EAAS,GAC7B,MACF,QACE,GAAI,aAAiB,YAAc,MAAM,QAAQ,GAC/C,EAAQ,YAAY,EAAS,QACxB,GAAc,OAAV,EACT,EAAQ,YAAY,OACf,IAAqB,iBAAV,EAChB,OAAO,EAAQ,aAAa,EAAS,GAErC,QAAQ,KAAK,mCAAoC,GACjD,EAAQ,YAAY,EACtB,EAIN,EAEA,EAAQ,YAAc,WACpB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,WACtC,OAAO,SAAS,EAAS,GAEvB,MAAM,EAAa,EAAM,YAAc,EAAM,OACvC,EAAM,EAAO,gBAAgB,GACnC,EAAO,OAAO,SAAS,GAAK,IAAI,GAChC,EAAE,EAAS,EAAK,EAAY,EAC9B,CACD,CAVqB,GAYtB,EAAQ,cAAgB,WACtB,MACM,EAAI,EAAO,MADH,2BACmB,KAAK,SACtC,OAAO,SAAS,EAAS,GACvB,EAAE,EAAS,EACb,CACD,CANuB,GAQxB,EAAQ,WAAa,WACnB,MACM,EAAI,EAAO,MADH,wBACmB,KAAK,SACtC,OAAO,SAAS,EAAS,GACvB,EAAE,EAAS,EACb,CACD,CANoB,GAQrB,EAAQ,aAAe,WACrB,MACM,EAAI,EAAO,MADH,0BACmB,KAAK,UACtC,OAAO,SAAS,EAAS,GACvB,GAAI,EAAQ,WAAa,EAAQ,UAAW,OAAO,OAAO,aAE1D,MACM,EAAO,GAAS,IACtB,EAAE,EAAS,OAFU,YAAR,GAEY,OAAO,GAClC,CACD,CAVsB,GAYvB,EAAQ,YAAc,WACpB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,QACtC,OAAO,SAAS,GACd,EAAE,EACJ,CACD,CANqB,GAQtB,EAAQ,YAAc,WACpB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,WACtC,OAAO,SAAS,EAAS,GACvB,MAAM,EAAM,EAAW,GACvB,EAAE,EAAS,GAAM,EAAG,EACtB,CACD,CAPqB,GAStB,EAAQ,IAAM,SAAS,GACrB,MAAM,EAAM,GACN,EAAW,EAAQ,WAAW,GACpC,IAAK,IAAI,EAAI,EAAG,EAAI,IAAY,EAAG,CACjC,MAAM,EAAQ,EAAQ,OAAO,EAAM,GAKnC,EAAI,KAAK,GAAO,SAAW,EAAO,OAAO,OAAS,EAAM,QAAU,EACpE,CACA,OAAO,CACT,EAEA,EAAQ,eAAiB,SAAS,EAAI,EAAc,GAClD,EAAe,GAEf,OAAO,EAAM,yBADE,EAAO,cAAc,EAAI,EAAc,GACP,EACjD,EAEA,EAAQ,IAAM,WACZ,MACM,EAAI,EAAO,MADH,iBACmB,KAAK,QACtC,OAAO,SAAS,GACd,EAAgB,GAGhB,OAFe,EAAE,EAGnB,CACD,CATa,GAWd,EAAQ,WAAa,SAAS,EAAI,GAChC,OAAO,kBACL,MAAM,EAAM,EAAQ,QAAQ,EAAI,GAChC,IAAI,EAAW,CAAE,KAAM,KAAM,IAAK,EAAQ,UAAU,IACpD,IACE,KAAO,QAAiB,EAAQ,WAAW,EAAI,EAAS,YAEhD,EAAS,KACf,EAAQ,SAAS,EAAS,MAC1B,EAAS,KAAO,IAEpB,CAAE,QACI,GAAU,MACZ,EAAQ,SAAS,EAAS,MAE5B,EAAQ,WAAW,EACrB,CACD,CAhBM,EAiBT,EAEA,EAAQ,KAAO,WACb,MAAM,EAAQ,eACR,EAAI,EAAO,MAAM,KAAU,KAAK,OAAQ,CAAE,MAvqBtC,OAwqBV,OAAO,eAAe,GACpB,EAAgB,GAChB,MAAM,QAAe,EAAE,GACvB,OAAO,EAAM,EAAO,EAAQ,EAAY,IAAI,GAAO,CAAC,OAAO,WAAY,OAAO,aAChF,CACD,CARc,GAcf,IAAI,EAAW,EACf,MAAM,EAAU,IAAI,IAwJpB,SAAS,EAAM,EAAO,EAAQ,EAAK,KAAM,EAAU,CAAC,OAAO,YAEzD,GAAI,EAAQ,SAAS,GAAS,OAAO,EACrC,MAAM,EAAU,EACd,EAAO,MAAM,iBAAkB,SAAU,CAAC,UAAW,CAAC,IACtD,EACF,MAAM,IAAI,YAAY,EAAS,EACjC,CAEA,OA/JA,EAAQ,QAAU,SAAS,EAAI,EAAI,IACjC,MAAM,EAAS,EAAO,gBAAgB,GAChC,EAAmB,WAAb,IACN,EAAO,CACX,OAAQ,EAAO,gBAAgB,EAAS,GACxC,MAAO,GAIT,OAFA,EAAQ,IAAI,EAAK,GACjB,EAAO,aAAa,EAAG,EAAK,OAAQ,EAAK,MAAQ,GAC1C,CACT,EAEA,EAAQ,cAAgB,SAAS,EAAK,GACpC,IAAK,EAAQ,IAAI,GACf,MAAM,IAAI,YAAY,eAAgB,OAAO,eAE/C,MAAM,EAAO,EAAQ,IAAI,GAEnB,EAAS,EAAO,gBAAgB,GAChC,EAAW,EAAK,MAAQ,EACxB,EAAY,EAAO,gBAAgB,EAAW,GACnC,EAAO,OAAO,SAAS,EAAW,EAAY,EAAW,GACjE,IAAI,EAAO,OAAO,SAAS,EAAK,OAAQ,EAAK,OAAS,EAAK,QACpE,EAAO,aAAa,EAAG,EAAY,EAAK,MAAO,EAAS,GAExD,EAAO,cAAc,EAAK,QAC1B,EAAK,OAAS,EACd,EAAK,MAAQ,EACb,EAAQ,IAAI,EAAK,EACnB,EAEA,EAAQ,WAAa,SAAS,GAC5B,IAAK,EAAQ,IAAI,GACf,MAAM,IAAI,YAAY,eAAgB,OAAO,eAE/C,MAAM,EAAO,EAAQ,IAAI,GACzB,EAAQ,OAAO,GACf,EAAO,cAAc,EAAK,OAC5B,EAEA,EAAQ,UAAY,SAAS,GAC3B,IAAK,EAAQ,IAAI,GACf,MAAM,IAAI,YAAY,eAAgB,OAAO,eAE/C,OAAO,EAAQ,IAAI,GAAK,MAC1B,EAEA,EAAQ,UAAY,SAAS,GAC3B,OAAO,EAAO,oBAAoB,EACpC,EAEA,EAAQ,MAAQ,SAAS,GACvB,MAAM,EAAO,EAAQ,WAAW,GAChC,OAAQ,GACN,KAAK,OAAO,YACV,OAAO,EAAQ,WAAW,GAC5B,KAAK,OAAO,aACV,OAAO,EAAQ,aAAa,GAC9B,KAAK,OAAO,eACV,MAAM,EAAO,EAAQ,UAAU,GACzB,EAAO,EAAO,cACpB,OAAO,EAAc,EAAM,GAC7B,KAAK,OAAO,YACV,OAAO,KACT,KAAK,OAAO,YACV,OAAO,EAAQ,WAAW,GAC5B,QACE,MAAM,IAAI,YAAY,eAAgB,GAE5C,EAEA,EAAQ,WAAa,WACnB,MACM,EAAI,EAAO,MADH,wBACmB,KAAK,QACtC,OAAO,SAAS,GACd,MAAM,EAAS,EAAQ,YAAY,GAC7B,EAAU,EAAE,GAGlB,OAFe,EAAO,OAAO,SAAS,EAAS,EAAU,EAG3D,CACD,CAVoB,GAYrB,EAAQ,YAAc,WACpB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,QACtC,OAAO,SAAS,GAGd,OAFe,EAAE,EAGnB,CACD,CARqB,GAUtB,EAAQ,aAAe,WACrB,MACM,EAAI,EAAO,MADH,0BACmB,KAAK,QACtC,OAAO,SAAS,GAGd,OAFe,EAAE,EAGnB,CACD,CARsB,GAUvB,EAAQ,UAAY,WAClB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,QACtC,OAAO,SAAS,GAGd,OAFe,EAAE,EAGnB,CACD,CARmB,GAUpB,EAAQ,YAAc,WACpB,MACM,EAAI,EAAO,MADH,yBACmB,KAAK,QACtC,OAAO,SAAS,GAKd,OAFe,EAFF,EAAE,GACF,EAAO,cAItB,CACD,CAVqB,GAYtB,EAAQ,WAAa,WACnB,MACM,EAAI,EAAO,MADH,wBACmB,KAAK,QACtC,OAAO,SAAS,GAGd,OAFe,EAAE,EAGnB,CACD,CARoB,GAUrB,EAAQ,WAAa,WACnB,MACM,EAAI,EAAO,MADH,wBACmB,KAAK,QACtC,OAAO,SAAS,GAGd,OAFe,EAAE,EAGnB,CACD,CARoB,GAUrB,EAAQ,aAAe,SAAS,EAAK,GAEnC,OAAO,EAAM,uBADE,EAAO,YAAY,EAAK,GAEzC,EAWO,CACT,CAEA,SAAS,SAAS,GAOlB,CAGA,SAAS,KAAK,GACZ,MAAM,EAAS,GACT,EAAI,EAAE,MAAM,qBAClB,OAAQ,EAAE,IACR,IAAK,IAAK,EAAO,KAAK,UAAW,MACjC,IAAK,IAAK,EAAO,KAAK,UAAW,MACjC,IAAK,IAAK,EAAO,KAAK,MAGxB,MAAM,EAAO,GACb,IAAK,IAAI,KAAK,EAAE,GACd,OAAQ,GACN,IAAK,IAAK,EAAK,KAAK,UAAW,MAC/B,IAAK,IAAK,EAAK,KAAK,UAIxB,OADA,EAAO,KAAK,GACL,CACT","file":"/npm/@vlcn.io/wa-sqlite@0.22.0/src/sqlite-api.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@vlcn.io/wa-sqlite@0.22.0/src/sqlite-api.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// Copyright 2021 Roy T. Hashimoto. All Rights Reserved.\n\nimport * as SQLite from './sqlite-constants.js';\nexport * from './sqlite-constants.js';\n\nconst MAX_INT64 = 0x7fffffffffffffffn;\nconst MIN_INT64 = -0x8000000000000000n;\n\nexport class SQLiteError extends Error {\n  constructor(message, code) {\n    super(message);\n    this.code = code;\n  }\n}\n\nconst async = true;\n\n/**\n * Builds a Javascript API from the Emscripten module. This API is still\n * low-level and closely corresponds to the C API exported by the module,\n * but differs in some specifics like throwing exceptions on errors.\n * @param {*} Module SQLite Emscripten module\n * @returns {SQLiteAPI}\n */\nexport function Factory(Module) {\n  /** @type {SQLiteAPI} */ const sqlite3 = {};\n\n  const sqliteFreeAddress = Module._getSqliteFree();\n\n  // Allocate some space for 32-bit returned values.\n  const tmp = Module._malloc(8);\n  const tmpPtr = [tmp, tmp + 4];\n\n  // Convert a JS string to a C string. sqlite3_malloc is used to allocate\n  // memory (use sqlite3_free to deallocate).\n  function createUTF8(s) {\n    if (typeof s !== 'string') return 0;\n    const n = Module.lengthBytesUTF8(s);\n    const zts = Module._sqlite3_malloc(n + 1);\n    Module.stringToUTF8(s, zts, n + 1);\n    return zts;\n  }\n\n  /**\n   * Concatenate 32-bit numbers into a 64-bit (signed) BigInt.\n   * @param {number} lo32\n   * @param {number} hi32\n   * @returns {bigint}\n   */\n  function cvt32x2ToBigInt(lo32, hi32) {\n    return (BigInt(hi32) << 32n) | (BigInt(lo32) & 0xffffffffn);\n  }\n\n  /**\n   * Concatenate 32-bit numbers and return as number or BigInt, depending\n   * on the value.\n   * @param {number} lo32 \n   * @param {number} hi32 \n   * @returns {number|bigint}\n   */\n  const cvt32x2AsSafe = (function() {\n    const hiMax = BigInt(Number.MAX_SAFE_INTEGER) >> 32n;\n    const hiMin = BigInt(Number.MIN_SAFE_INTEGER) >> 32n;\n\n    return function(lo32, hi32) {\n      if (hi32 > hiMax || hi32 < hiMin) {\n        // Can't be expressed as a Number so use BigInt.\n        return cvt32x2ToBigInt(lo32, hi32);\n      } else {\n        // Combine the upper and lower 32-bit numbers. The complication is\n        // that lo32 is a signed integer which makes manipulating its bits\n        // a little tricky - the sign bit gets handled separately.\n        return (hi32 * 0x100000000) + (lo32 & 0x7fffffff) - (lo32 & 0x80000000);\n      }\n    }\n  })();\n\n  const databases = new Set();\n  function verifyDatabase(db) {\n    if (!databases.has(db)) {\n      throw new SQLiteError('not a database', SQLite.SQLITE_MISUSE);\n    }\n  }\n\n  const mapStmtToDB = new Map();\n  function verifyStatement(stmt) {\n    if (!mapStmtToDB.has(stmt)) {\n      throw new SQLiteError('not a statement', SQLite.SQLITE_MISUSE);\n    }\n  }\n\n  sqlite3.bind_collection = function(stmt, bindings) {\n    verifyStatement(stmt);\n    const isArray = Array.isArray(bindings);\n    const nBindings = sqlite3.bind_parameter_count(stmt);\n    for (let i = 1; i <= nBindings; ++i) {\n      const key = isArray ? i - 1 : sqlite3.bind_parameter_name(stmt, i);\n      const value = bindings[key];\n      if (value !== undefined) {\n        sqlite3.bind(stmt, i, value);\n      }\n    }\n    return SQLite.SQLITE_OK;\n  };\n\n  sqlite3.bind = function(stmt, i, value) {\n    verifyStatement(stmt);\n    switch (typeof value) {\n      case 'number':\n        if (value === (value | 0)) {\n          return sqlite3.bind_int(stmt, i, value);\n        } else {\n          return sqlite3.bind_double(stmt, i, value);\n        }\n      case 'string':\n        return sqlite3.bind_text(stmt, i, value);\n      default:\n        if (value instanceof Uint8Array || Array.isArray(value)) {\n          return sqlite3.bind_blob(stmt, i, value);\n        } else if (value === null) {\n          return sqlite3.bind_null(stmt, i);\n        } else if (typeof value === 'bigint') {\n          return sqlite3.bind_int64(stmt, i, value);\n        } else if (value === undefined) {\n          // Existing binding (or NULL) will be used.\n          return SQLite.SQLITE_NOTICE;\n        } else {\n          throw new Error('Unknown binding type ' + typeof value);\n        }\n    }\n  };\n\n  sqlite3.bind_blob = (function() {\n    const fname = 'sqlite3_bind_blob';\n    const f = Module.cwrap(fname, ...decl('nnnnn:n'));\n    return function(stmt, i, value) {\n      verifyStatement(stmt);\n      // @ts-ignore\n      const byteLength = value.byteLength ?? value.length;\n      const ptr = Module._sqlite3_malloc(byteLength);\n      Module.HEAPU8.subarray(ptr).set(value);\n      const result = f(stmt, i, ptr, byteLength, sqliteFreeAddress);\n      // trace(fname, result);\n      return check(fname, result, mapStmtToDB.get(stmt));\n    };\n  })();\n\n  sqlite3.bind_parameter_count = (function() {\n    const fname = 'sqlite3_bind_parameter_count';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(stmt) {\n      verifyStatement(stmt);\n      const result = f(stmt);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.bind_double = (function() {\n    const fname = 'sqlite3_bind_double';\n    const f = Module.cwrap(fname, ...decl('nnn:n'));\n    return function(stmt, i, value) {\n      verifyStatement(stmt);\n      const result = f(stmt, i, value);\n      // trace(fname, result);\n      return check(fname, result, mapStmtToDB.get(stmt));\n    };\n  })();\n\n  sqlite3.bind_int = (function() {\n    const fname = 'sqlite3_bind_int';\n    const f = Module.cwrap(fname, ...decl('nnn:n'));\n    return function(stmt, i, value) {\n      verifyStatement(stmt);\n      if (value > 0x7fffffff || value < -0x80000000) return SQLite.SQLITE_RANGE;\n\n      const result = f(stmt, i, value);\n      // trace(fname, result);\n      return check(fname, result, mapStmtToDB.get(stmt));\n    };\n  })();\n\n  sqlite3.bind_int64 = (function() {\n    const fname = 'sqlite3_bind_int64';\n    const f = Module.cwrap(fname, ...decl('nnnn:n'));\n    return function(stmt, i, value) {\n      verifyStatement(stmt);\n      if (value > MAX_INT64 || value < MIN_INT64) return SQLite.SQLITE_RANGE;\n\n      const lo32 = value & 0xffffffffn;\n      const hi32 = value >> 32n;\n      const result = f(stmt, i, Number(lo32), Number(hi32));\n      // trace(fname, result);\n      return check(fname, result, mapStmtToDB.get(stmt));\n    };\n  })();\n\n  sqlite3.bind_null = (function() {\n    const fname = 'sqlite3_bind_null';\n    const f = Module.cwrap(fname, ...decl('nn:n'));\n    return function(stmt, i) {\n      verifyStatement(stmt);\n      const result = f(stmt, i);\n      // trace(fname, result);\n      return check(fname, result, mapStmtToDB.get(stmt));\n    };\n  })();\n\n  sqlite3.bind_parameter_name = (function() {\n    const fname = 'sqlite3_bind_parameter_name';\n    const f = Module.cwrap(fname, ...decl('n:s'));\n    return function(stmt, i) {\n      verifyStatement(stmt);\n      const result = f(stmt, i);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.bind_text = (function() {\n    const fname = 'sqlite3_bind_text';\n    const f = Module.cwrap(fname, ...decl('nnnnn:n'));\n    return function(stmt, i, value) {\n      verifyStatement(stmt);\n      const ptr = createUTF8(value);\n      const result = f(stmt, i, ptr, -1, sqliteFreeAddress);\n      // trace(fname, result);\n      return check(fname, result, mapStmtToDB.get(stmt));\n    };\n  })();\n\n  sqlite3.changes = (function() {\n    const fname = 'sqlite3_changes';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(db) {\n      verifyDatabase(db);\n      const result = f(db);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.close = (function() {\n    const fname = 'sqlite3_close';\n    const f = Module.cwrap(fname, ...decl('n:n'), { async });\n    return async function(db) {\n      verifyDatabase(db);\n      const result = await f(db);\n      databases.delete(db);\n      return check(fname, result, db);\n    };\n  })();\n\n  sqlite3.column = function(stmt, iCol) {\n    verifyStatement(stmt);\n    const type = sqlite3.column_type(stmt, iCol);\n    switch (type) {\n      case SQLite.SQLITE_BLOB:\n        return sqlite3.column_blob(stmt, iCol);\n      case SQLite.SQLITE_FLOAT:\n        return sqlite3.column_double(stmt, iCol);\n      case SQLite.SQLITE_INTEGER:\n        const lo32 = sqlite3.column_int(stmt, iCol);\n        const hi32 = Module.getTempRet0();\n        return cvt32x2AsSafe(lo32, hi32);\n      case SQLite.SQLITE_NULL:\n        return null;\n      case SQLite.SQLITE_TEXT:\n        return sqlite3.column_text(stmt, iCol);\n      default:\n        throw new SQLiteError('unknown type', type);\n    }\n  };\n\n  sqlite3.column_blob = (function() {\n    const fname = 'sqlite3_column_blob';\n    const f = Module.cwrap(fname, ...decl('nn:n'));\n    return function(stmt, iCol) {\n      verifyStatement(stmt);\n      const nBytes = sqlite3.column_bytes(stmt, iCol);\n      const address = f(stmt, iCol);\n      const result = Module.HEAPU8.subarray(address, address + nBytes);\n\n      const dst = new ArrayBuffer(result.byteLength);\n      const ret = new Uint8Array(dst);\n      ret.set(result);\n      return ret;\n      // trace(fname, result);\n    };\n  })();\n\n  sqlite3.column_bytes = (function() {\n    const fname = 'sqlite3_column_bytes';\n    const f = Module.cwrap(fname, ...decl('nn:n'));\n    return function(stmt, iCol) {\n      verifyStatement(stmt);\n      const result = f(stmt, iCol);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.column_count = (function() {\n    const fname = 'sqlite3_column_count';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(stmt) {\n      verifyStatement(stmt);\n      const result = f(stmt);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.column_double = (function() {\n    const fname = 'sqlite3_column_double';\n    const f = Module.cwrap(fname, ...decl('nn:n'));\n    return function(stmt, iCol) {\n      verifyStatement(stmt);\n      const result = f(stmt, iCol);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.column_int = (function() {\n    // Retrieve int64 but use only the lower 32 bits. The upper 32-bits are\n    // accessible with Module.getTempRet0().\n    const fname = 'sqlite3_column_int64';\n    const f = Module.cwrap(fname, ...decl('nn:n'));\n    return function(stmt, iCol) {\n      verifyStatement(stmt);\n      const result = f(stmt, iCol);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.column_int64 = (function() {\n    const fname = 'sqlite3_column_int64';\n    const f = Module.cwrap(fname, ...decl('nn:n'));\n    return function(stmt, iCol) {\n      verifyStatement(stmt);\n      const lo32 = f(stmt, iCol);\n      const hi32 = Module.getTempRet0();\n      const result = cvt32x2ToBigInt(lo32, hi32);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.column_name = (function() {\n    const fname = 'sqlite3_column_name';\n    const f = Module.cwrap(fname, ...decl('nn:s'));\n    return function(stmt, iCol) {\n      verifyStatement(stmt);\n      const result = f(stmt, iCol);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.column_names = function(stmt) {\n    const columns = [];\n    const nColumns = sqlite3.column_count(stmt);\n    for (let i = 0; i < nColumns; ++i) {\n      columns.push(sqlite3.column_name(stmt, i));\n    }\n    return columns;\n  };\n\n  sqlite3.column_text = (function() {\n    const fname = 'sqlite3_column_text';\n    const f = Module.cwrap(fname, ...decl('nn:s'));\n    return function(stmt, iCol) {\n      verifyStatement(stmt);\n      const result = f(stmt, iCol);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.column_type = (function() {\n    const fname = 'sqlite3_column_type';\n    const f = Module.cwrap(fname, ...decl('nn:n'));\n    return function(stmt, iCol) {\n      verifyStatement(stmt);\n      const result = f(stmt, iCol);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.update_hook = function(db, xUpdate) {\n    verifyDatabase(db);\n    Module.updateHook(db, xUpdate);\n    return SQLite.SQLITE_OK;\n  }\n\n  sqlite3.create_function = function(db, zFunctionName, nArg, eTextRep, pApp, xFunc, xStep, xFinal) {\n    verifyDatabase(db);\n    if (xFunc && !xStep && !xFinal) {\n      const result = Module.createFunction(db, zFunctionName, nArg, eTextRep, pApp, xFunc);\n      return check('sqlite3_create_function', result, db);\n    }\n\n    if (!xFunc && xStep && xFinal) {\n      const result = Module.createAggregate(db, zFunctionName, nArg, eTextRep, pApp, xStep, xFinal);\n      return check('sqlite3_create_function', result, db);\n    }\n\n    throw new SQLiteError('invalid function combination', SQLite.SQLITE_MISUSE);\n  };\n\n  sqlite3.create_module = function(db, zName, module, appData) {\n    verifyDatabase(db);\n    const result = Module.createModule(db, zName, module, appData);\n    return check('sqlite3_create_module', result, db);\n  };\n\n  sqlite3.data_count = (function() {\n    const fname = 'sqlite3_data_count';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(stmt) {\n      verifyStatement(stmt);\n      const result = f(stmt);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.declare_vtab = (function() {\n    const fname = 'sqlite3_declare_vtab';\n    const f = Module.cwrap(fname, ...decl('ns:n'));\n    return function(pVTab, zSQL) {\n      const result = f(pVTab, zSQL);\n      return check('sqlite3_declare_vtab', result);\n    }\n  })();\n    \n  sqlite3.exec = async function(db, sql, callback) {\n    for await (const stmt of sqlite3.statements(db, sql)) {\n      let columns;\n      while (await sqlite3.step(stmt) === SQLite.SQLITE_ROW) {\n        if (callback) {\n          columns = columns ?? sqlite3.column_names(stmt);\n          const row = sqlite3.row(stmt);\n          await callback(row, columns);\n        }\n      }\n    }\n    return SQLite.SQLITE_OK;\n  };\n\n  sqlite3.finalize = (function() {\n    const fname = 'sqlite3_finalize';\n    const f = Module.cwrap(fname, ...decl('n:n'), { async });\n    return async function(stmt) {\n      if (!mapStmtToDB.has(stmt)) {\n        return SQLite.SQLITE_MISUSE;\n      }\n      const result = await f(stmt);\n\n      const db = mapStmtToDB.get(stmt);\n      mapStmtToDB.delete(stmt)\n\n      // Don't throw on error here. Typically the error has already been\n      // thrown and finalize() is part of the cleanup.\n      return result;\n    };\n  })();\n\n  sqlite3.get_autocommit = (function() {\n    const fname = 'sqlite3_get_autocommit';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(db) {\n      const result = f(db);\n      return result;\n    };\n  })();\n\n  sqlite3.libversion = (function() {\n    const fname = 'sqlite3_libversion';\n    const f = Module.cwrap(fname, ...decl(':s'));\n    return function() {\n      const result = f();\n      return result;\n    };\n  })();\n\n  sqlite3.libversion_number = (function() {\n    const fname = 'sqlite3_libversion_number';\n    const f = Module.cwrap(fname, ...decl(':n'));\n    return function() {\n      const result = f();\n      return result;\n    };\n  })();\n\n  sqlite3.limit = (function() {\n    const fname = 'sqlite3_limit';\n    const f = Module.cwrap(fname, ...decl('nnn:n'));\n    return function(db, id, newVal) {\n      const result = f(db, id, newVal);\n      return result;\n    };\n  })();\n\n  sqlite3.open_v2 = (function() {\n    const fname = 'sqlite3_open_v2';\n    const f = Module.cwrap(fname, ...decl('snnn:n'), { async });\n    return async function(zFilename, flags, zVfs) {\n      flags = flags || SQLite.SQLITE_OPEN_CREATE | SQLite.SQLITE_OPEN_READWRITE;\n      zVfs = createUTF8(zVfs);\n      const result = await f(zFilename, tmpPtr[0], flags, zVfs);\n\n      const db = Module.getValue(tmpPtr[0], '*');\n      databases.add(db);\n      Module._sqlite3_free(zVfs);\n\n      Module.ccall('RegisterExtensionFunctions', 'void', ['number'], [db]);\n      check(fname, result);\n      return db;\n    };\n  })();\n\n  sqlite3.prepare_v2 = (function() {\n    const fname = 'sqlite3_prepare_v2';\n    const f = Module.cwrap(fname, ...decl('nnnnn:n'), { async });\n    return async function(db, sql) {\n      const result = await f(db, sql, -1, tmpPtr[0], tmpPtr[1]);\n      check(fname, result, db);\n\n      const stmt = Module.getValue(tmpPtr[0], '*');\n      if (stmt) {\n        mapStmtToDB.set(stmt, db);\n        return { stmt, sql: Module.getValue(tmpPtr[1], '*') };\n      }\n      return null;\n    };\n  })();\n\n  sqlite3.progress_handler = function(db, nProgressOps, handler, userData) {\n    verifyDatabase(db);\n    Module.progressHandler(db, nProgressOps, handler, userData);\n  };;\n\n  sqlite3.reset = (function() {\n    const fname = 'sqlite3_reset';\n    const f = Module.cwrap(fname, ...decl('n:n'), { async });\n    return async function(stmt) {\n      verifyStatement(stmt);\n      const result = await f(stmt);\n      return check(fname, result, mapStmtToDB.get(stmt));\n    };\n  })();\n\n  sqlite3.result = function(context, value) {\n    switch (typeof value) {\n      case 'number':\n        if (value === (value | 0)) {\n          sqlite3.result_int(context, value);\n        } else {\n          sqlite3.result_double(context, value);\n        }\n        break;\n      case 'string':\n        sqlite3.result_text(context, value);\n        break;\n      default:\n        if (value instanceof Uint8Array || Array.isArray(value)) {\n          sqlite3.result_blob(context, value);\n        } else if (value === null) {\n          sqlite3.result_null(context);\n        } else if (typeof value === 'bigint') {\n          return sqlite3.result_int64(context, value);\n        } else {\n          console.warn('unknown result converted to null', value);\n          sqlite3.result_null(context);\n        }\n        break;\n    }\n\n  };\n\n  sqlite3.result_blob = (function() {\n    const fname = 'sqlite3_result_blob';\n    const f = Module.cwrap(fname, ...decl('nnnn:n'));\n    return function(context, value) {\n      // @ts-ignore\n      const byteLength = value.byteLength ?? value.length;\n      const ptr = Module._sqlite3_malloc(byteLength);\n      Module.HEAPU8.subarray(ptr).set(value);\n      f(context, ptr, byteLength, sqliteFreeAddress); // void return\n    };\n  })();\n\n  sqlite3.result_double = (function() {\n    const fname = 'sqlite3_result_double';\n    const f = Module.cwrap(fname, ...decl('nn:n'));\n    return function(context, value) {\n      f(context, value); // void return\n    };\n  })();\n\n  sqlite3.result_int = (function() {\n    const fname = 'sqlite3_result_int';\n    const f = Module.cwrap(fname, ...decl('nn:n'));\n    return function(context, value) {\n      f(context, value); // void return\n    };\n  })();\n\n  sqlite3.result_int64 = (function() {\n    const fname = 'sqlite3_result_int64';\n    const f = Module.cwrap(fname, ...decl('nnn:n'));\n    return function(context, value) {\n      if (value > MAX_INT64 || value < MIN_INT64) return SQLite.SQLITE_RANGE;\n\n      const lo32 = value & 0xffffffffn;\n      const hi32 = value >> 32n;\n      f(context, Number(lo32), Number(hi32)); // void return\n    };\n  })();\n\n  sqlite3.result_null = (function() {\n    const fname = 'sqlite3_result_null';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(context) {\n      f(context); // void return\n    };\n  })();\n\n  sqlite3.result_text = (function() {\n    const fname = 'sqlite3_result_text';\n    const f = Module.cwrap(fname, ...decl('nnnn:n'));\n    return function(context, value) {\n      const ptr = createUTF8(value);\n      f(context, ptr, -1, sqliteFreeAddress); // void return\n    };\n  })();\n\n  sqlite3.row = function(stmt) {\n    const row = [];\n    const nColumns = sqlite3.data_count(stmt);\n    for (let i = 0; i < nColumns; ++i) {\n      const value = sqlite3.column(stmt, i);\n\n      // Copy blob if aliasing volatile WebAssembly memory. This avoids an\n      // unnecessary copy if users monkey patch column_blob to copy.\n      // @ts-ignore\n      row.push(value?.buffer === Module.HEAPU8.buffer ? value.slice() : value);\n    }\n    return row;\n  };\n\n  sqlite3.set_authorizer = function(db, authFunction, userData) {\n    verifyDatabase(db);\n    const result = Module.setAuthorizer(db, authFunction, userData);\n    return check('sqlite3_set_authorizer', result, db);\n  };;\n  \n  sqlite3.sql = (function() {\n    const fname = 'sqlite3_sql';\n    const f = Module.cwrap(fname, ...decl('n:s'));\n    return function(stmt) {\n      verifyStatement(stmt);\n      const result = f(stmt);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.statements = function(db, sql) {\n    return (async function*() {\n      const str = sqlite3.str_new(db, sql);\n      let prepared = { stmt: null, sql: sqlite3.str_value(str) };\n      try {\n        while (prepared = await sqlite3.prepare_v2(db, prepared.sql)) {\n          // console.log(sqlite3.sql(prepared.stmt));\n          yield prepared.stmt;\n          sqlite3.finalize(prepared.stmt);\n          prepared.stmt = null;\n        }\n      } finally {\n        if (prepared?.stmt) {\n          sqlite3.finalize(prepared.stmt);\n        }\n        sqlite3.str_finish(str);\n      }\n    })();\n  };\n\n  sqlite3.step = (function() {\n    const fname = 'sqlite3_step';\n    const f = Module.cwrap(fname, ...decl('n:n'), { async });\n    return async function(stmt) {\n      verifyStatement(stmt);\n      const result = await f(stmt);\n      return check(fname, result, mapStmtToDB.get(stmt), [SQLite.SQLITE_ROW, SQLite.SQLITE_DONE]);\n    };\n  })();\n\n  // Duplicate some of the SQLite dynamic string API but without\n  // calling SQLite (except for memory allocation). We need some way\n  // to transfer Javascript strings and might as well use an API\n  // that mimics the SQLite API.\n  let stringId = 0;\n  const strings = new Map();\n\n  sqlite3.str_new = function(db, s = '') {\n    const sBytes = Module.lengthBytesUTF8(s);\n    const str = stringId++ & 0xffffffff;\n    const data = {\n      offset: Module._sqlite3_malloc(sBytes + 1),\n      bytes: sBytes\n    };\n    strings.set(str, data);\n    Module.stringToUTF8(s, data.offset, data.bytes + 1);\n    return str;\n  };\n\n  sqlite3.str_appendall = function(str, s) {\n    if (!strings.has(str)) {\n      throw new SQLiteError('not a string', SQLite.SQLITE_MISUSE);\n    }\n    const data = strings.get(str);\n\n    const sBytes = Module.lengthBytesUTF8(s);\n    const newBytes = data.bytes + sBytes;\n    const newOffset = Module._sqlite3_malloc(newBytes + 1);\n    const newArray = Module.HEAPU8.subarray(newOffset, newOffset + newBytes + 1);\n    newArray.set(Module.HEAPU8.subarray(data.offset, data.offset + data.bytes));\n    Module.stringToUTF8(s, newOffset + data.bytes, sBytes + 1);\n\n    Module._sqlite3_free(data.offset);\n    data.offset = newOffset;\n    data.bytes = newBytes;\n    strings.set(str, data);\n  };\n\n  sqlite3.str_finish = function(str) {\n    if (!strings.has(str)) {\n      throw new SQLiteError('not a string', SQLite.SQLITE_MISUSE);\n    }\n    const data = strings.get(str);\n    strings.delete(str);\n    Module._sqlite3_free(data.offset);\n  };\n\n  sqlite3.str_value = function(str) {\n    if (!strings.has(str)) {\n      throw new SQLiteError('not a string', SQLite.SQLITE_MISUSE);\n    }\n    return strings.get(str).offset;\n  };\n\n  sqlite3.user_data = function(context) {\n    return Module.getFunctionUserData(context);\n  };\n\n  sqlite3.value = function(pValue) {\n    const type = sqlite3.value_type(pValue);\n    switch (type) {\n      case SQLite.SQLITE_BLOB:\n        return sqlite3.value_blob(pValue);\n      case SQLite.SQLITE_FLOAT:\n        return sqlite3.value_double(pValue);\n      case SQLite.SQLITE_INTEGER:\n        const lo32 = sqlite3.value_int(pValue);\n        const hi32 = Module.getTempRet0();\n        return cvt32x2AsSafe(lo32, hi32);\n      case SQLite.SQLITE_NULL:\n        return null;\n      case SQLite.SQLITE_TEXT:\n        return sqlite3.value_text(pValue);\n      default:\n        throw new SQLiteError('unknown type', type);\n    }\n  };\n\n  sqlite3.value_blob = (function() {\n    const fname = 'sqlite3_value_blob';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(pValue) {\n      const nBytes = sqlite3.value_bytes(pValue);\n      const address = f(pValue);\n      const result = Module.HEAPU8.subarray(address, address + nBytes);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.value_bytes = (function() {\n    const fname = 'sqlite3_value_bytes';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(pValue) {\n      const result = f(pValue);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.value_double = (function() {\n    const fname = 'sqlite3_value_double';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(pValue) {\n      const result = f(pValue);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.value_int = (function() {\n    const fname = 'sqlite3_value_int64';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(pValue) {\n      const result = f(pValue);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.value_int64 = (function() {\n    const fname = 'sqlite3_value_int64';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(pValue) {\n      const lo32 = f(pValue);\n      const hi32 = Module.getTempRet0();\n      const result = cvt32x2ToBigInt(lo32, hi32);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.value_text = (function() {\n    const fname = 'sqlite3_value_text';\n    const f = Module.cwrap(fname, ...decl('n:s'));\n    return function(pValue) {\n      const result = f(pValue);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.value_type = (function() {\n    const fname = 'sqlite3_value_type';\n    const f = Module.cwrap(fname, ...decl('n:n'));\n    return function(pValue) {\n      const result = f(pValue);\n      // trace(fname, result);\n      return result;\n    };\n  })();\n\n  sqlite3.vfs_register = function(vfs, makeDefault) {\n    const result = Module.registerVFS(vfs, makeDefault);\n    return check('sqlite3_vfs_register', result);\n  };\n\n  function check(fname, result, db = null, allowed = [SQLite.SQLITE_OK]) {\n    // trace(fname, result);\n    if (allowed.includes(result)) return result;\n    const message = db ?\n      Module.ccall('sqlite3_errmsg', 'string', ['number'], [db]) :\n      fname;\n    throw new SQLiteError(message, result);\n  }\n\n  return sqlite3;\n}\n\nfunction trace(...args) {\n  // const date = new Date();\n  // const t = date.getHours().toString().padStart(2, '0') + ':' +\n  //           date.getMinutes().toString().padStart(2, '0') + ':' +\n  //           date.getSeconds().toString().padStart(2, '0') + '.' +\n  //           date.getMilliseconds().toString().padStart(3, '0');\n  // console.debug(t, ...args);\n}\n\n// Helper function to use a more compact signature specification.\nfunction decl(s) {\n  const result = [];\n  const m = s.match(/([ns@]*):([nsv@])/);\n  switch (m[2]) {\n    case 'n': result.push('number'); break;\n    case 's': result.push('string'); break;\n    case 'v': result.push(null); break;\n  }\n\n  const args = [];\n  for (let c of m[1]) {\n    switch (c) {\n      case 'n': args.push('number'); break;\n      case 's': args.push('string'); break;\n    }\n  }\n  result.push(args);\n  return result;\n}\n"]}