arcanajs 4.0.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/529.js +2 -0
  2. package/dist/529.js.map +1 -0
  3. package/dist/630.js +3 -0
  4. package/dist/630.js.LICENSE.txt +14 -0
  5. package/dist/630.js.map +1 -0
  6. package/dist/arcanajs.auth.js +3 -0
  7. package/dist/arcanajs.auth.js.LICENSE.txt +14 -0
  8. package/dist/arcanajs.auth.js.map +1 -0
  9. package/dist/arcanajs.js +1 -1
  10. package/dist/arcanajs.js.map +1 -1
  11. package/dist/arcanajs.mail.js +2 -0
  12. package/dist/arcanajs.mail.js.map +1 -0
  13. package/dist/arcanajs.validator.js +2 -0
  14. package/dist/arcanajs.validator.js.map +1 -0
  15. package/dist/arcanox.js +1 -1
  16. package/dist/arcanox.js.map +1 -1
  17. package/dist/cli/commands/dependency.d.ts +1 -0
  18. package/dist/cli/commands/make/Controller.d.ts +3 -0
  19. package/dist/cli/commands/make/Factory.d.ts +2 -0
  20. package/dist/cli/commands/make/Middleware.d.ts +1 -0
  21. package/dist/cli/commands/make/Migration.d.ts +2 -0
  22. package/dist/cli/commands/make/Model.d.ts +2 -0
  23. package/dist/cli/commands/make/Provider.d.ts +1 -0
  24. package/dist/cli/commands/make/Request.d.ts +1 -0
  25. package/dist/cli/commands/make/Seeder.d.ts +2 -0
  26. package/dist/cli/index.js +1 -1
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/cli/utils/toPascalCase.d.ts +1 -0
  29. package/dist/cli/utils/writeFile.d.ts +1 -0
  30. package/dist/lib/arcanox/providers/DatabaseProvider.d.ts +9 -4
  31. package/dist/lib/auth/AuthProvider.d.ts +10 -0
  32. package/dist/lib/auth/JWTService.d.ts +11 -0
  33. package/dist/lib/auth/SessionManager.d.ts +4 -0
  34. package/dist/lib/auth/middleware/AuthMiddleware.d.ts +5 -0
  35. package/dist/lib/auth/middleware/AuthenticatedMiddleware.d.ts +5 -0
  36. package/dist/lib/auth/middleware/GuestMiddleware.d.ts +5 -0
  37. package/dist/lib/auth/middleware/RoleMiddleware.d.ts +7 -0
  38. package/dist/lib/auth/types/AuthConfig.d.ts +24 -0
  39. package/dist/lib/auth/types/JWTPayload.d.ts +10 -0
  40. package/dist/lib/auth/types/index.d.ts +2 -0
  41. package/dist/lib/auth/utils/PasswordHasher.d.ts +16 -0
  42. package/dist/lib/auth/utils/TokenBlacklist.d.ts +9 -0
  43. package/dist/lib/index.arcanox.d.ts +16 -2
  44. package/dist/lib/index.auth.d.ts +11 -0
  45. package/dist/lib/index.client.d.ts +2 -0
  46. package/dist/lib/index.mail.d.ts +8 -0
  47. package/dist/lib/index.server.d.ts +4 -6
  48. package/dist/lib/index.validator.d.ts +6 -0
  49. package/dist/lib/mail/MailProvider.d.ts +10 -0
  50. package/dist/lib/mail/MailService.d.ts +57 -0
  51. package/dist/lib/mail/Mailable.d.ts +106 -0
  52. package/dist/lib/mail/index.d.ts +6 -0
  53. package/dist/lib/mail/queue/MailQueue.d.ts +51 -0
  54. package/dist/lib/mail/queue/index.d.ts +1 -0
  55. package/dist/lib/mail/types/MailConfig.d.ts +146 -0
  56. package/dist/lib/mail/types/index.d.ts +1 -0
  57. package/dist/lib/mail/utils/TemplateRenderer.d.ts +34 -0
  58. package/dist/lib/mail/utils/index.d.ts +1 -0
  59. package/dist/lib/server/ArcanaJSServer.d.ts +15 -8
  60. package/dist/lib/server/Container.d.ts +8 -0
  61. package/dist/lib/server/Router.d.ts +23 -33
  62. package/dist/lib/server/support/ServiceProvider.d.ts +4 -0
  63. package/dist/lib/validation/Validator.d.ts +55 -0
  64. package/dist/types/global.d.ts +102 -0
  65. package/package.json +68 -15
  66. package/dist/lib/arcanox/index.d.ts +0 -13
  67. package/dist/lib/server/validation/Validator.d.ts +0 -12
  68. /package/dist/lib/{server/validation → validation}/ValidationException.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"cli/index.js","mappings":"6OAKO,MAAMA,eAAkBC,IACU,oBAA5BC,QACFA,QAAwBD,IAI1BE,KAAK,UAALA,CAAgBF,G,UCXzBG,EAAOC,QAAUC,QAAQ,K,UCAzBF,EAAOC,QAAUC,QAAQ,U,UCAzBF,EAAOC,QAAUC,QAAQ,O,GCCrBC,yBAA2B,CAAC,ECA5BC,eADAC,SDIJ,SAASC,oBAAoBC,GAE5B,IAAIC,EAAeL,yBAAyBI,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaP,QAGrB,IAAID,EAASG,yBAAyBI,GAAY,CAGjDN,QAAS,CAAC,GAOX,OAHAS,oBAAoBH,GAAUP,EAAQA,EAAOC,QAASK,qBAG/CN,EAAOC,OACf,CErBAK,oBAAoBK,EAAKX,IACxB,IAAIY,EAASZ,GAAUA,EAAOa,WAC7B,IAAOb,EAAiB,QACxB,IAAM,EAEP,OADAM,oBAAoBQ,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,GDNJP,SAAWW,OAAOC,eAAkBC,GAASF,OAAOC,eAAeC,GAASA,GAASA,EAAa,UAQtGZ,oBAAoBa,EAAI,SAASC,EAAOC,GAEvC,GADU,EAAPA,IAAUD,EAAQE,KAAKF,IAChB,EAAPC,EAAU,OAAOD,EACpB,GAAoB,iBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAPC,GAAaD,EAAMP,WAAY,OAAOO,EAC1C,GAAW,GAAPC,GAAoC,mBAAfD,EAAMG,KAAqB,OAAOH,CAC5D,CACA,IAAII,EAAKR,OAAOS,OAAO,MACvBnB,oBAAoBoB,EAAEF,GACtB,IAAIG,EAAM,CAAC,EACXvB,eAAiBA,gBAAkB,CAAC,KAAMC,SAAS,CAAC,GAAIA,SAAS,IAAKA,SAASA,WAC/E,IAAI,IAAIuB,EAAiB,EAAPP,GAAYD,GAA0B,iBAAXQ,GAAyC,mBAAXA,MAA4BxB,eAAeyB,QAAQD,GAAUA,EAAUvB,SAASuB,GAC1JZ,OAAOc,oBAAoBF,GAASG,QAASC,GAASL,EAAIK,GAAO,IAAOZ,EAAMY,IAI/E,OAFAL,EAAa,QAAI,IAAM,EACvBrB,oBAAoBQ,EAAEU,EAAIG,GACnBH,CACR,EExBAlB,oBAAoBQ,EAAI,CAACb,EAASgC,KACjC,IAAI,IAAID,KAAOC,EACX3B,oBAAoB4B,EAAED,EAAYD,KAAS1B,oBAAoB4B,EAAEjC,EAAS+B,IAC5EhB,OAAOmB,eAAelC,EAAS+B,EAAK,CAAEI,YAAY,EAAMC,IAAKJ,EAAWD,MCJ3E1B,oBAAoB4B,EAAI,CAAChB,EAAKoB,IAAUtB,OAAOuB,UAAUC,eAAeC,KAAKvB,EAAKoB,GCClFhC,oBAAoBoB,EAAKzB,IACH,oBAAXyC,QAA0BA,OAAOC,aAC1C3B,OAAOmB,eAAelC,EAASyC,OAAOC,YAAa,CAAEvB,MAAO,WAE7DJ,OAAOmB,eAAelC,EAAS,aAAc,CAAEmB,OAAO,K,2BCLvD,MAAM,uCAA+BlB,QAAQ,iB,wGCA7C,MAAM,iCAA+BA,QAAQ,W,qFCA7C,MAAM,8CAA+BA,QAAQ,wBCAvC,6CAA+BA,QAAQ,uB,6GCA7C,MAAM,iDAA+BA,QAAQ,2B,qHCA7C,MAAM,gDAA+BA,QAAQ,0B,iNCO7C,MAAM0C,IAAMC,QAAQD,MAGdE,cAAiBC,GACrBjD,QAAwBkD,QAAQD,GAK5BE,UAAaC,IACjB,MAAMC,EAAa,CAAC,MAAO,OAAQ,MAAO,QAE1C,IAAK,MAAMC,KAAYF,EACrB,IAAK,MAAMG,KAAOF,EAAY,CAC5B,MAAMG,EAAWC,wBAAAA,QAAaX,IAAKQ,EAAWC,GAC9C,GAAIG,sBAAAA,WAAcF,GAChB,OAAOA,EAGT,MAAMG,EAAYF,wBAAAA,QAAaX,IAAKQ,EAAU,QAAUC,GACxD,GAAIG,sBAAAA,WAAcC,GAChB,OAAOA,CAEX,CAKF,MAAMC,EAAgBH,wBAAAA,QAAaX,IAAK,gCAClCe,EAAgBJ,wBAAAA,QAAaX,IAAK,+BAExC,GACEM,EAAYU,KAAMC,GAAMA,EAAEC,SAAS,YACnCN,sBAAAA,WAAcE,GAEd,OAAOA,EACT,GACER,EAAYU,KAAMC,GAAMA,EAAEC,SAAS,YACnCN,sBAAAA,WAAcG,GAEd,OAAOA,EAET,MAAM,IAAII,MACR,4CAA4Cb,EAAYc,KAAK,UAI3DC,mBAAqBA,KACzB,MAAMC,EAAWX,wBAAAA,QAAaX,IAAK,aAC7BuB,EAAWX,sBAAAA,WAAcU,GACzBE,EAAkBb,wBAAAA,QACtBc,UACA,sDAIIC,EAAWf,wBAAAA,QAAaa,GACzBZ,sBAAAA,WAAcc,IACjBd,sBAAAA,UAAac,EAAU,CAAEC,WAAW,IAItC,MAAMC,EAAgBL,EAClB,qCAAqCD,8BACrC,yBAGJ,OADAV,sBAAAA,cAAiBY,EAAiBI,GAC3BJ,GAGIK,mBAAqBA,KAChC,MAAMC,EAAwC,eAAzB7B,QAAQ8B,IAAIC,SAC3BR,EAAkBH,qBAQxB,MAAO,CACL5C,KAAMqD,EAAe,aAAe,cACpCG,OAAQ,MACRC,MAAO,CACLC,OAXgB9B,UAAU,CAC5B,aACA,mBACA,YACA,cASA+B,OAAQ,CACNzB,KAAMA,wBAAAA,QAAaX,IAAK,eACxBqC,SAAUP,EACN,iCACA,mBACJQ,WAAY,IACZC,oBAAqB,6BAEvBnC,QAAS,CACPG,WAAY,CAAC,MAAO,OAAQ,MAAO,QACnCiC,MAAO,CACL,eAAgBhB,IAGpBtB,cAAe,CACbuC,QAAS,CAAC,eAAgB9B,wBAAAA,QAAac,UAAW,wBAEpDrE,OAAQ,CACNsF,MAAO,CACL,CACEC,KAAM,qBACNC,QAAS,eACTC,IAAK,CACH1C,OAAQD,cAAc,gBACtB4C,QAAS,CACPC,QAAS,CACP7C,cAAc,qBACd,CACEA,cAAc,uBACd,CAAE8C,QAAS,cAEb9C,cAAc,gCAMtB,CACEyC,KAAM,iBACNE,IAAK,CACHf,EACImB,2CAAAA,OACA/C,cAAc,gBAClB,CACEC,OAAQD,cAAc,cACtB4C,QAAS,CACPI,cAAe,EACfT,QAAS,CACPU,eAAgBrB,EACZ,kBACA,yCACJsB,uBAAwB,mBAI9B,CACEjD,OAAQD,cAAc,kBACtB4C,QAAS,CACPO,eAAgB,CACdC,OAAQ3C,wBAAAA,QAAaX,IAAK,0BAOpC,CACE2C,KAAM,SACNC,QAAS,iBACTC,IAAK,CACHf,EACImB,2CAAAA,OACA/C,cAAc,gBAClB,CACEC,OAAQD,cAAc,cACtB4C,QAAS,CACPI,cAAe,IAGnB,CACE/C,OAAQD,cAAc,kBACtB4C,QAAS,CACPO,eAAgB,CACdC,OAAQ3C,wBAAAA,QAAaX,IAAK,0BAMpC,CACE2C,KAAM,oDACNY,KAAM,oBAIZC,QAAS,CACP,IAAIC,8CAAAA,mBACJ,IAAIC,uCAAJ,CAAsB,CACpBC,gBAAiB,4TAYjBtB,SAAU,aACVuB,OAAQ,OACRC,SAAQ/B,GACJ,CACEgC,gBAAgB,EAChBC,oBAAoB,EACpBC,2BAA2B,EAC3BC,iBAAiB,EACjBC,uBAAuB,EACvBC,+BAA+B,EAC/BC,kBAAkB,EAClBC,UAAU,EACVC,WAAW,EACXC,YAAY,KAIpB,IAAItB,2CAAJ,CAAyB,CACvBZ,SAAUP,EAAe,2BAA6B,gBAG1D0C,aAAc,CACZC,YAAa,CACXC,OAAQ,MACRC,YAAa,CACXC,eAAgB,CACdjC,KAAM,yBACNkC,UAAW,GACXC,oBAAoB,GAEtBC,QAAS,CACPC,UAAW,EACXH,UAAW,GACXC,oBAAoB,GAEtBG,MAAO,CACLtC,KAAM,yDACNuC,KAAM,eACNR,OAAQ,MACRG,SAAU,OAKlBM,YAAa,CACXC,kBAAmB,MACnBC,aAAc,MACdC,QAAOxD,GAAe,WAExByD,QAASzD,EAAe,aAAe,oBAI9B0D,mBAAqBA,KAChC,MAAM1D,EAAwC,eAAzB7B,QAAQ8B,IAAIC,SAC3ByD,EAAcpF,UAAU,CAC5B,aACA,mBACA,oBAGImB,EAAkBH,qBAExB,MAAO,CACL5C,KAAMqD,EAAe,aAAe,cACpCG,OAAQ,OACRC,MAAOuD,EACPrD,OAAQ,CACNzB,KAAMA,wBAAAA,QAAaX,IAAK,QACxBqC,SAAU,aAEZqD,UAAW,CACTC,0CAAc,CACZC,UAAW,CAAC,gBAGhBxF,QAAS,CACPG,WAAY,CAAC,MAAO,OAAQ,MAAO,QACnCiC,MAAO,CACL,eAAgBhB,IAGpBtB,cAAe,CACbuC,QAAS,CAAC,eAAgB9B,wBAAAA,QAAac,UAAW,wBAEpDrE,OAAQ,CACNsF,MAAO,CACL,CACEC,KAAM,qBACNC,QAAS,eACTC,IAAK,CACH1C,OAAQD,cAAc,gBACtB4C,QAAS,CACPC,QAAS,CACP7C,cAAc,qBACd,CACEA,cAAc,uBACd,CAAE8C,QAAS,cAEb9C,cAAc,gCAMtB,CACEyC,KAAM,iBACNE,IAAK,CACH1C,OAAQD,cAAc,cACtB4C,QAAS,CACPL,QAAS,CACPU,eAAgBrB,EACZ,kBACA,yCACJsB,uBAAwB,gBACxByC,kBAAkB,MAM1B,CACElD,KAAM,SACNC,QAAS,iBACTC,IAAK3C,cAAc,gBAErB,CACEyC,KAAM,oDACNY,KAAM,iBACNuC,UAAW,CACTC,MAAM,MAKdR,QAASzD,EAAe,aAAe,oBClVrC,4BAA+BxE,QAAQ,M,2CCmBtC,MAAM0I,aACHC,KAAoB,KACpBC,WAAoC,KAE5C,aAAMC,CAAQ7C,GAA6C,IAAA8C,EACzD,MAAMC,GAAQrJ,EAAAA,eAAAA,gBAAe,kBAa7B,OAXA0B,KAAKuH,KAAOI,EAAMC,WAAW,CAC3BC,KAAMjD,EAAOiD,KACbC,KAAMlD,EAAOkD,KACbC,SAAUnD,EAAOmD,SACjBC,KAAMpD,EAAOqD,SACbC,SAAUtD,EAAOsD,SACjBC,oBAAoB,EACpBC,iBAA4B,QAAXV,EAAA9C,EAAO2C,YAAI,IAAAG,OAAA,EAAXA,EAAaW,MAAO,GACrCC,WAAY,IAGP,CACLC,MAAOvI,KAAKuI,MAAMC,KAAKxI,MACvByI,QAASzI,KAAKyI,QAAQD,KAAKxI,MAC3B0I,MAAO1I,KAAK2I,WAAWH,KAAKxI,MAEhC,CAEA,gBAAM2I,GACA3I,KAAKuH,aACDvH,KAAKuH,KAAKqB,MAChB5I,KAAKuH,KAAO,KAEhB,CAEA,WAAMgB,CAAMM,EAAaC,GACvB,IAAK9I,KAAKuH,KAAM,MAAM,IAAI9E,MAAM,0BAChC,MAAOsG,SAAc/I,KAAKuH,KAAKgB,MAAuBM,EAAKC,GAC3D,OAAOC,CACT,CAEA,aAAMN,CAAQI,EAAaC,GACzB,IAAK9I,KAAKuH,KAAM,MAAM,IAAI9E,MAAM,0BAChC,MAAOuG,SAAgBhJ,KAAKuH,KAAKkB,QAAyBI,EAAKC,GAC/D,OAAOE,CACT,CAEA,iBAAMC,CACJC,EACAC,GAEA,MAiBMN,EAAM,gCAAgCK,QAjBzBC,EAChBC,IAAKC,IACJ,IAAIhJ,EAAM,KAAKgJ,EAAI7C,UAAUxG,KAAKsJ,QAAQD,EAAIxE,KAAMwE,EAAIE,UAWxD,OATIF,EAAIG,WAAUnJ,GAAO,aACrBgJ,EAAII,gBAAepJ,GAAO,mBACzBgJ,EAAIK,WAAUrJ,GAAO,kBACNlB,IAAhBkK,EAAIhD,UACNhG,GAAO,YAAYL,KAAK2J,YAAYN,EAAIhD,YAEtCgD,EAAIO,UAASvJ,GAAO,gBACpBgJ,EAAIQ,SAAQxJ,GAAO,WAEhBA,IAERqC,KAAK,gFAGF1C,KAAKyI,QAAQI,EACrB,CAEA,eAAMiB,CAAUZ,SACRlJ,KAAKyI,QAAQ,0BAA0BS,MAC/C,CAEA,cAAMa,CAASb,GAAqC,IAAAc,EAMlD,OAAgB,QAATA,SALchK,KAAKuI,MACxB,sHAEA,CAACW,KAEW,UAAE,IAAAc,OAAA,EAATA,EAAWC,OAAQ,CAC5B,CAEA,eAAMC,CAAUhB,EAAmBiB,GAAsC,IAAAC,EAMvE,OAAgB,QAATA,SALcpK,KAAKuI,MACxB,2IAEA,CAACW,EAAWiB,KAEA,UAAE,IAAAC,OAAA,EAATA,EAAWH,OAAQ,CAC5B,CAEA,YAAMI,CAAOC,EAAelG,GAAwC,IAAAmG,EAElE,IAAI1B,EAAM,WADqB,QAAf0B,EAAAnG,EAAQ+E,eAAO,IAAAoB,OAAA,EAAfA,EAAiB7H,KAAK,QAAS,cACT4H,MACtC,MAAMxB,EAAgB,GAGtB,GAAI1E,EAAQoG,OAASpG,EAAQoG,MAAMjB,OAAS,EAC1C,IAAK,MAAM7G,KAAQ0B,EAAQoG,MACzB3B,GAAO,IAAInG,EAAKmC,eAAenC,EAAK4H,cAAc5H,EAAK+H,SAAS/H,EAAKgI,YAAYhI,EAAKiI,SAgC1F,OA3BIvG,EAAQwG,OAASxG,EAAQwG,MAAMrB,OAAS,IAM1CV,GAAO,IALYzE,EAAQwG,MAAMxB,IAAI,CAACyB,EAAQC,IAGrC,GAFmB,IAAVA,EAAc,QAAUD,EAAOE,WAC7B/K,KAAKgL,oBAAoBH,EAAQ/B,MAG7BpG,KAAK,MAI3B0B,EAAQ6G,SAAW7G,EAAQ6G,QAAQ1B,OAAS,IAI9CV,GAAO,aAHYzE,EAAQ6G,QAAQ7B,IAChCxI,GAAM,KAAKA,EAAEsK,YAAYtK,EAAEuK,aAECzI,KAAK,SAIlC0B,EAAQgH,QACVvC,GAAO,WACPC,EAAOuC,KAAKjH,EAAQgH,QAElBhH,EAAQkH,SACVzC,GAAO,YACPC,EAAOuC,KAAKjH,EAAQkH,eAGTtL,KAAKuI,MAAMM,EAAKC,EAC/B,CAEA,YAAMyC,CAAOjB,EAAekB,GAC1B,MAAMC,EAAO/L,OAAO+L,KAAKD,GACnBE,EAAShM,OAAOgM,OAAOF,GACvBG,EAAeD,EAAOtC,IAAI,IAAM,KAAK1G,KAAK,MAE1CmG,EAAM,iBAAiByB,QAAYmB,EACtCrC,IAAKwC,GAAM,KAAKA,OAChBlJ,KAAK,kBAAkBiJ,KAG1B,MAAO,CAAEpN,UAFYyB,KAAKyI,QAAQI,EAAK6C,IAEnBG,YAAaL,EACnC,CAEA,YAAMM,CACJxB,EACA/L,EACAiN,GAEA,MAAMC,EAAO/L,OAAO+L,KAAKD,GACnBE,EAAShM,OAAOgM,OAAOF,GAGvB3C,EAAM,YAAYyB,WAFPmB,EAAKrC,IAAKwC,GAAM,KAAKA,WAAWlJ,KAAK,qBAKtD,aAFM1C,KAAKyI,QAAQI,EAAK,IAAI6C,EAAQnN,IAE7B,CAAEA,QAAOiN,EAClB,CAEA,YAAMO,CAAOzB,EAAe/L,GAC1B,MAAMsK,EAAM,iBAAiByB,mBAE7B,aADqBtK,KAAKyI,QAAQI,EAAK,CAACtK,KAC1ByN,aAAe,CAC/B,CAEA,sBAAMC,GACJ,IAAKjM,KAAKuH,KAAM,MAAM,IAAI9E,MAAM,0BAChCzC,KAAKwH,iBAAmBxH,KAAKuH,KAAK2E,sBAC5BlM,KAAKwH,WAAWyE,kBACxB,CAEA,YAAME,GACJ,IAAKnM,KAAKwH,WAAY,MAAM,IAAI/E,MAAM,+BAChCzC,KAAKwH,WAAW2E,SACtBnM,KAAKwH,WAAW4E,UAChBpM,KAAKwH,WAAa,IACpB,CAEA,cAAM6E,GACJ,IAAKrM,KAAKwH,WAAY,MAAM,IAAI/E,MAAM,+BAChCzC,KAAKwH,WAAW6E,WACtBrM,KAAKwH,WAAW4E,UAChBpM,KAAKwH,WAAa,IACpB,CAEA,SAAM8E,CAAI/D,EAAeO,EAAgB,IACvC,IAAK9I,KAAKuH,KAAM,MAAM,IAAI9E,MAAM,0BAChC,MAAOuG,SAAgBhJ,KAAKuH,KAAKkB,QAAQF,EAAOO,GAChD,OAAOE,CACT,CAEQgC,mBAAAA,CAAoBH,EAAqB/B,GAC/C,MAAMoC,EAAS,KAAKL,EAAOK,WAE3B,OAAQL,EAAOH,UACb,IAAK,KACH,MAAM6B,EAAkB1B,EAAO/K,MAC5BsJ,IAAI,IAAM,KACV1G,KAAK,MAER,OADAoG,EAAOuC,QAAQR,EAAO/K,OACf,GAAGoL,SAAcqB,KAE1B,IAAK,SACH,MAAMC,EAAqB3B,EAAO/K,MAC/BsJ,IAAI,IAAM,KACV1G,KAAK,MAER,OADAoG,EAAOuC,QAAQR,EAAO/K,OACf,GAAGoL,aAAkBsB,KAE9B,IAAK,UAEH,OADA1D,EAAOuC,KAAKR,EAAO/K,MAAM,GAAI+K,EAAO/K,MAAM,IACnC,GAAGoL,oBAEZ,IAAK,UACH,MAAO,GAAGA,YAEZ,IAAK,cACH,MAAO,GAAGA,gBAEZ,QAEE,OADApC,EAAOuC,KAAKR,EAAO/K,OACZ,GAAGoL,KAAUL,EAAOH,aAEjC,CAEQpB,OAAAA,CAAQzE,EAAc0E,GAgB5B,MAfwC,CACtCkD,OAAQlD,EAAS,WAAWA,KAAY,eACxCmD,KAAM,OACNC,QAAS,MACTC,WAAY,SACZC,MAAO,QACPC,OAAQ,SACRC,QAAS,gBACThC,QAAS,aACTiC,KAAM,OACNC,SAAU,WACVC,UAAW,YACXC,KAAM,OACNC,KAAM,YAEOvI,IAASA,EAAKwI,aAC/B,CAEQ1D,WAAAA,CAAY7J,GAClB,OAAc,OAAVA,EAAuB,OACN,iBAAVA,EAA2B,IAAIA,EAAMwN,QAAQ,KAAM,SACzC,kBAAVxN,EAA4BA,EAAQ,IAAM,IACjDA,aAAiByN,KACZ,IAAIzN,EAAM0N,cAAcC,MAAM,EAAG,IAAIH,QAAQ,IAAK,QACpDI,OAAO5N,EAChB,ECnQK,MAAM6N,gBACHpG,KAAoB,KACpB9D,OAA4B,KAEpC,aAAMgE,CAAQ7C,GAA6C,IAAA8C,EAAAkG,EACzD,MAAM,KAAEC,IAASvP,EAAAA,eAAAA,gBAAe,MAahC,OAXA0B,KAAKuH,KAAO,IAAIsG,EAAK,CACnBhG,KAAMjD,EAAOiD,KACbC,KAAMlD,EAAOkD,KACbC,SAAUnD,EAAOmD,SACjBC,KAAMpD,EAAOqD,SACbC,SAAUtD,EAAOsD,SACjB4F,IAAKlJ,EAAOkJ,IACZC,KAAgB,QAAXrG,EAAA9C,EAAO2C,YAAI,IAAAG,OAAA,EAAXA,EAAaqG,MAAO,EACzB1F,KAAgB,QAAXuF,EAAAhJ,EAAO2C,YAAI,IAAAqG,OAAA,EAAXA,EAAavF,MAAO,KAGpB,CACLE,MAAOvI,KAAKuI,MAAMC,KAAKxI,MACvByI,QAASzI,KAAKyI,QAAQD,KAAKxI,MAC3B0I,MAAO1I,KAAK2I,WAAWH,KAAKxI,MAEhC,CAEA,gBAAM2I,GACA3I,KAAKuH,aACDvH,KAAKuH,KAAKqB,MAChB5I,KAAKuH,KAAO,KAEhB,CAEA,WAAMgB,CAAMM,EAAaC,GACvB,IAAK9I,KAAKuH,KAAM,MAAM,IAAI9E,MAAM,0BAEhC,aADkCzC,KAAKuH,KAAKgB,MAAMM,EAAKC,IACzCC,IAChB,CAEA,aAAMN,CAAQI,EAAaC,GACzB,IAAK9I,KAAKuH,KAAM,MAAM,IAAI9E,MAAM,0BAEhC,aADkCzC,KAAKuH,KAAKgB,MAAMM,EAAKC,EAEzD,CAEA,iBAAMG,CACJC,EACAC,GAEA,MAgBMN,EAAM,+BAA+BK,OAhBxBC,EAChBC,IAAKC,IACJ,IAAIhJ,EAAM,IAAIgJ,EAAI7C,SAASxG,KAAKsJ,QAAQD,EAAIxE,KAAMwE,EAAIE,UAUtD,OARIF,EAAIO,UAASvJ,GAAO,gBACpBgJ,EAAII,gBAAepJ,GAAO,iCACzBgJ,EAAIK,WAAUrJ,GAAO,aACtBgJ,EAAIQ,SAAQxJ,GAAO,gBACHlB,IAAhBkK,EAAIhD,UACNhG,GAAO,YAAYL,KAAK2J,YAAYN,EAAIhD,YAGnChG,IAERqC,KAAK,eAGF1C,KAAKyI,QAAQI,EACrB,CAEA,eAAMiB,CAAUZ,SACRlJ,KAAKyI,QAAQ,yBAAyBS,KAC9C,CAEA,cAAMa,CAASb,GAAqC,IAAAc,EASlD,OAAgB,QAATA,SARchK,KAAKuI,MACxB,gJAKA,CAACW,KAEW,UAAE,IAAAc,OAAA,EAATA,EAAWgE,UAAU,CAC9B,CAEA,eAAM9D,CAAUhB,EAAmBiB,GAAsC,IAAAC,EAUvE,OAAgB,QAATA,SATcpK,KAAKuI,MACxB,gLAMA,CAACW,EAAWiB,KAEA,UAAE,IAAAC,OAAA,EAATA,EAAW4D,UAAU,CAC9B,CAEA,YAAM3D,CAAOC,EAAelG,GAAwC,IAAAmG,EAElE,IAAI1B,EAAM,WADqB,QAAf0B,EAAAnG,EAAQ+E,eAAO,IAAAoB,OAAA,EAAfA,EAAiB7H,KAAK,QAAS,aACV4H,KACrC,MAAMxB,EAAgB,GACtB,IAAImF,EAAa,EAGjB,GAAI7J,EAAQoG,OAASpG,EAAQoG,MAAMjB,OAAS,EAC1C,IAAK,MAAM7G,KAAQ0B,EAAQoG,MACzB3B,GAAO,IAAInG,EAAKmC,cAAcnC,EAAK4H,aAAa5H,EAAK+H,SAAS/H,EAAKgI,YAAYhI,EAAKiI,SAiCxF,OA5BIvG,EAAQwG,OAASxG,EAAQwG,MAAMrB,OAAS,IAO1CV,GAAO,IANYzE,EAAQwG,MAAMxB,IAAI,CAACyB,EAAQC,KAC5C,MAAMC,EAAoB,IAAVD,EAAc,QAAUD,EAAOE,QACzCmD,EAAYlO,KAAKgL,oBAAoBH,EAAQ/B,EAAQmF,GAE3D,OADAA,EAAanF,EAAOS,OAAS,EACtB,GAAGwB,KAAWmD,MAECxL,KAAK,MAI3B0B,EAAQ6G,SAAW7G,EAAQ6G,QAAQ1B,OAAS,IAI9CV,GAAO,aAHYzE,EAAQ6G,QAAQ7B,IAChCxI,GAAM,IAAIA,EAAEsK,WAAWtK,EAAEuK,aAEGzI,KAAK,SAIlC0B,EAAQgH,QACVvC,GAAO,WAAWoF,IAClBnF,EAAOuC,KAAKjH,EAAQgH,QAElBhH,EAAQkH,SACVzC,GAAO,YAAYoF,IACnBnF,EAAOuC,KAAKjH,EAAQkH,eAGTtL,KAAKuI,MAAMM,EAAKC,EAC/B,CAEA,YAAMyC,CAAOjB,EAAekB,GAC1B,MAAMC,EAAO/L,OAAO+L,KAAKD,GACnBE,EAAShM,OAAOgM,OAAOF,GACvBG,EAAeD,EAAOtC,IAAI,CAAC+E,EAAGC,IAAM,IAAIA,EAAI,KAAK1L,KAAK,MAEtDmG,EAAM,gBAAgByB,OAAWmB,EACpCrC,IAAKwC,GAAM,IAAIA,MACflJ,KAAK,qCACeiJ,oCAIvB,aADqB3L,KAAKuI,MAAMM,EAAK6C,IACvB,EAChB,CAEA,YAAMI,CACJxB,EACA/L,EACAiN,GAEA,MAAMC,EAAO/L,OAAO+L,KAAKD,GACnBE,EAAShM,OAAOgM,OAAOF,GAGvB3C,EAAM,WAAWyB,UAFNmB,EAAKrC,IAAI,CAACwC,EAAGwC,IAAM,IAAIxC,SAASwC,EAAI,KAAK1L,KAAK,qBAG7D+I,EAAKlC,OAAS,gBAGhB,aADqBvJ,KAAKuI,MAAMM,EAAK,IAAI6C,EAAQnN,KACnC,EAChB,CAEA,YAAMwN,CAAOzB,EAAe/L,GAC1B,MAAMsK,EAAM,gBAAgByB,mBAE5B,aADqBtK,KAAKyI,QAAQI,EAAK,CAACtK,KAC1B8P,SAAW,CAC3B,CAEA,sBAAMpC,GACJ,IAAKjM,KAAKuH,KAAM,MAAM,IAAI9E,MAAM,0BAChCzC,KAAKyD,aAAezD,KAAKuH,KAAKE,gBACxBzH,KAAKyD,OAAO8E,MAAM,QAC1B,CAEA,YAAM4D,GACJ,IAAKnM,KAAKyD,OAAQ,MAAM,IAAIhB,MAAM,+BAC5BzC,KAAKyD,OAAO8E,MAAM,UACxBvI,KAAKyD,OAAO2I,UACZpM,KAAKyD,OAAS,IAChB,CAEA,cAAM4I,GACJ,IAAKrM,KAAKyD,OAAQ,MAAM,IAAIhB,MAAM,+BAC5BzC,KAAKyD,OAAO8E,MAAM,YACxBvI,KAAKyD,OAAO2I,UACZpM,KAAKyD,OAAS,IAChB,CAEA,SAAM6I,CAAI/D,EAAeO,EAAgB,IACvC,IAAK9I,KAAKuH,KAAM,MAAM,IAAI9E,MAAM,0BAEhC,aADqBzC,KAAKuH,KAAKgB,MAAMA,EAAOO,IAC9BC,IAChB,CAEQiC,mBAAAA,CACNH,EACA/B,EACAwF,GAEA,MAAMpD,EAAS,IAAIL,EAAOK,UAE1B,OAAQL,EAAOH,UACb,IAAK,KACH,MAAM6B,EAAkB1B,EAAO/K,MAC5BsJ,IAAI,CAAC+E,EAAGC,IAAM,IAAIE,EAAaF,KAC/B1L,KAAK,MAER,OADAoG,EAAOuC,QAAQR,EAAO/K,OACf,GAAGoL,SAAcqB,KAE1B,IAAK,SACH,MAAMC,EAAqB3B,EAAO/K,MAC/BsJ,IAAI,CAAC+E,EAAGC,IAAM,IAAIE,EAAaF,KAC/B1L,KAAK,MAER,OADAoG,EAAOuC,QAAQR,EAAO/K,OACf,GAAGoL,aAAkBsB,KAE9B,IAAK,UAEH,OADA1D,EAAOuC,KAAKR,EAAO/K,MAAM,GAAI+K,EAAO/K,MAAM,IACnC,GAAGoL,cAAmBoD,UAAmBA,EAAa,IAE/D,IAAK,UACH,MAAO,GAAGpD,YAEZ,IAAK,cACH,MAAO,GAAGA,gBAEZ,QAEE,OADApC,EAAOuC,KAAKR,EAAO/K,OACZ,GAAGoL,KAAUL,EAAOH,aAAa4D,IAE9C,CAEQhF,OAAAA,CAAQzE,EAAc0E,GAgB5B,MAfwC,CACtCkD,OAAQlD,EAAS,WAAWA,KAAY,eACxCmD,KAAM,OACNC,QAAS,UACTC,WAAY,SACZC,MAAO,OACPC,OAAQ,mBACRC,QAAS,UACThC,QAAS,UACTiC,KAAM,OACNC,SAAU,YACVC,UAAW,YACXC,KAAM,QACNC,KAAM,QAEOvI,IAASA,EAAKwI,aAC/B,CAEQ1D,WAAAA,CAAY7J,GAClB,OAAc,OAAVA,EAAuB,OACN,iBAAVA,EAA2B,IAAIA,EAAMwN,QAAQ,KAAM,SACzC,kBAAVxN,EAA4BA,EAAQ,OAAS,QACpDA,aAAiByN,KAAa,IAAIzN,EAAM0N,iBACrCE,OAAO5N,EAChB,ECtRK,MAAMyO,UACX,cAAoD,CAAC,EAKrD,YAAOC,CAAMhI,EAAcgI,GACzBxO,KAAKyO,OAAOjI,GAAQgI,EACnBxO,KAAKiB,UAAkBuF,GAAQgI,CAClC,CAKA,YAAOE,CAAMA,GACXhP,OAAO+L,KAAKiD,GAAOjO,QAASC,IAC1BV,KAAKwO,MAAM9N,EAAKgO,EAAMhO,KAE1B,CAKA,eAAOiO,CAASnI,GACd,QAASxG,KAAKyO,OAAOjI,EACvB,EChBK,MAAMoI,qBAA8BL,UAE/BM,cAA0B,CAAC,KAC3BC,aAA8B,GAC9BC,eAAkC,GAClCC,YAA4B,GAKtCC,WAAAA,CAAY3E,EAAe4E,GACzBC,QACAnP,KAAKkJ,UAAYoB,EACjBtK,KAAKkP,QAAUA,CACjB,CAKA7E,MAAAA,IAAUlB,GAER,OADAnJ,KAAK6O,cAAgB1F,EACdnJ,IACT,CAKA4K,KAAAA,CAAMM,EAAgBR,EAAe5K,GAanC,YAXcX,IAAVW,IACFA,EAAQ4K,EACRA,EAAW,KAGb1K,KAAK8O,aAAazD,KAAK,CACrBH,SACAR,WACA5K,QACAiL,QAAS,QAEJ/K,IACT,CAKAoP,OAAAA,CAAQlE,EAAgBR,EAAe5K,GAYrC,YAXcX,IAAVW,IACFA,EAAQ4K,EACRA,EAAW,KAGb1K,KAAK8O,aAAazD,KAAK,CACrBH,SACAR,WACA5K,QACAiL,QAAS,OAEJ/K,IACT,CAKAqP,OAAAA,CAAQnE,EAAgBQ,GAOtB,OANA1L,KAAK8O,aAAazD,KAAK,CACrBH,SACAR,SAAU,KACV5K,MAAO4L,EACPX,QAAS,QAEJ/K,IACT,CAKAsP,UAAAA,CAAWpE,EAAgBQ,GAOzB,OANA1L,KAAK8O,aAAazD,KAAK,CACrBH,SACAR,SAAU,SACV5K,MAAO4L,EACPX,QAAS,QAEJ/K,IACT,CAKAuP,YAAAA,CAAarE,EAAgBsE,GAO3B,OANAxP,KAAK8O,aAAazD,KAAK,CACrBH,SACAR,SAAU,UACV5K,MAAO0P,EACPzE,QAAS,QAEJ/K,IACT,CAKAyP,SAAAA,CAAUvE,GAOR,OANAlL,KAAK8O,aAAazD,KAAK,CACrBH,SACAR,SAAU,UACV5K,MAAO,KACPiL,QAAS,QAEJ/K,IACT,CAKA0P,YAAAA,CAAaxE,GAOX,OANAlL,KAAK8O,aAAazD,KAAK,CACrBH,SACAR,SAAU,cACV5K,MAAO,KACPiL,QAAS,QAEJ/K,IACT,CAKAiL,OAAAA,CACEC,EACAC,EAA6C,OAM7C,OAJAnL,KAAK+O,eAAe1D,KAAK,CACvBH,SACAC,UAAWA,EAAUkC,gBAEhBrN,IACT,CAKAoL,KAAAA,CAAMnB,GAEJ,OADAjK,KAAK2P,WAAa1F,EACXjK,IACT,CAKAsL,MAAAA,CAAOrB,GAEL,OADAjK,KAAK4P,YAAc3F,EACZjK,IACT,CAKA0C,IAAAA,CACE4H,EACAG,EACAC,EACAC,EACA9F,EAAmC,SASnC,OAPA7E,KAAKgP,YAAY3D,KAAK,CACpBxG,OACAyF,QACAG,QACAC,WACAC,WAEK3K,IACT,CAKA6P,QAAAA,CACEvF,EACAG,EACAC,EACAC,GAEA,OAAO3K,KAAK0C,KAAK4H,EAAOG,EAAOC,EAAUC,EAAQ,OACnD,CAKAmF,SAAAA,CACExF,EACAG,EACAC,EACAC,GAEA,OAAO3K,KAAK0C,KAAK4H,EAAOG,EAAOC,EAAUC,EAAQ,QACnD,CAEUoF,WAAuB,GAMjCC,QAAAA,CAASC,GAEP,OADAjQ,KAAKiQ,MAAQA,EACNjQ,IACT,CAKAkQ,KAAKC,GAMH,OALIC,MAAMC,QAAQF,GAChBnQ,KAAK+P,WAAW1E,QAAQ8E,GAExBnQ,KAAK+P,WAAW1E,KAAK8E,GAEhBnQ,IACT,CAKA,SAAMe,GACJ,MAAMqD,EAAyB,CAC7B+E,QAASnJ,KAAK6O,cACdjE,MAAO5K,KAAK8O,aACZ7D,QAASjL,KAAK+O,eACd3D,MAAOpL,KAAK2P,WACZrE,OAAQtL,KAAK4P,YACbpF,MAAOxK,KAAKgP,aAGRsB,QAAgBtQ,KAAKkP,QAAQ7E,OAAOrK,KAAKkJ,UAAW9E,GAE1D,OAAIpE,KAAK+P,WAAWxG,OAAS,GAAKvJ,KAAKiQ,YACxBjQ,KAAKuQ,mBAAmBD,GAGhCA,CACT,CAKA,wBAAgBC,CAAmBD,GACjC,GAAuB,IAAnBA,EAAQ/G,OAAc,OAAO+G,EAGjC,MAAME,EAASF,EAAQlH,IAAKJ,GAAWhJ,KAAKiQ,MAAMQ,QAAQzH,IAE1D,IAAK,MAAM0H,KAAgB1Q,KAAK+P,WAAY,CAE1C,MAAMY,EAAW,IAAI3Q,KAAKiQ,MAC1B,GAAsC,mBAA3BU,EAASD,GAClB,MAAM,IAAIjO,MACR,YAAYiO,uBAAkC1Q,KAAKiQ,MAAMzJ,QAK7D,MAAMoK,EAAWD,EAASD,KAG1BE,EAASC,oBAAoBL,GAG7B,MAAMM,QAAuBF,EAAS7P,MAGtC6P,EAASG,MAAMP,EAAQM,EAAgBJ,EACzC,CAEA,OAAOF,CACT,CAKA,WAAM/F,GAGJ,OAFAzK,KAAKoL,MAAM,UACWpL,KAAKe,OACZ,IAAM,IACvB,CAKA,UAAMiQ,CAAKzS,GACT,OAAOyB,KAAK4K,MAAM,KAAMrM,GAAIkM,OAC9B,CAKA,WAAMR,GACJjK,KAAK6O,cAAgB,CAAC,qBACtB,MAAM7F,QAAehJ,KAAKyK,QAC1B,OAAOzB,EAAUA,EAAeiB,MAAQ,CAC1C,CAKA,WAAMgH,CAAM/F,GAGV,OAFAlL,KAAKqK,OAAOa,UACUlL,KAAKe,OACZqI,IAAK8H,GAASA,EAAYhG,GAC3C,CAKA,SAAMiG,CAAIjG,GACRlL,KAAK6O,cAAgB,CAAC,OAAO3D,aAC7B,MAAMlC,QAAehJ,KAAKyK,QAC1B,OAAOzB,GAAUA,EAAemI,KAAW,CAC7C,CAKA,SAAMC,CAAIlG,GACRlL,KAAK6O,cAAgB,CAAC,OAAO3D,aAC7B,MAAMlC,QAAehJ,KAAKyK,QAC1B,OAAOzB,GAAUA,EAAeoI,KAAW,CAC7C,CAKA,SAAMrD,CAAI7C,GACRlL,KAAK6O,cAAgB,CAAC,OAAO3D,aAC7B,MAAMlC,QAAehJ,KAAKyK,QAC1B,OAAOzB,EAAUA,EAAe+E,IAAM,IACxC,CAKA,SAAM1F,CAAI6C,GACRlL,KAAK6O,cAAgB,CAAC,OAAO3D,aAC7B,MAAMlC,QAAehJ,KAAKyK,QAC1B,OAAOzB,EAAUA,EAAeX,IAAM,IACxC,CAKA,YAAM2F,GAEJ,aADoBhO,KAAKiK,QACV,CACjB,CAKA,cAAMoH,CACJC,EAAe,EACfC,EAAkB,IAQlB,MAAMC,QAAcxR,KAAKiK,QACnBqB,GAAUgG,EAAO,GAAKC,EAK5B,OAHAvR,KAAKoL,MAAMmG,GAASjG,OAAOA,GAGpB,CACLE,WAHiBxL,KAAKe,MAItByQ,QACAD,UACAE,YAAaH,EACbI,SAAUC,KAAKC,KAAKJ,EAAQD,GAEhC,CAKAM,KAAAA,GACE,MAAMC,EAAS,IAAIlD,aAAgB5O,KAAKkJ,UAAWlJ,KAAKkP,SAOxD,OANA4C,EAAOjD,cAAgB,IAAI7O,KAAK6O,eAChCiD,EAAOhD,aAAe,IAAI9O,KAAK8O,cAC/BgD,EAAO/C,eAAiB,IAAI/O,KAAK+O,gBACjC+C,EAAO9C,YAAc,IAAIhP,KAAKgP,aAC9B8C,EAAOnC,WAAa3P,KAAK2P,WACzBmC,EAAOlC,YAAc5P,KAAK4P,YACnBkC,CACT,ECvZK,MAAeC,SAKpB9C,WAAAA,CAAY1G,EAAwByJ,GAClChS,KAAKuI,MAAQA,EACbvI,KAAKgS,OAASA,EACdhS,KAAKiS,QAAW1J,EAAc0H,MAC9BjQ,KAAKkS,gBACP,CAQAC,QAAAA,GACE,OAAOnS,KAAKuI,KACd,CAEA,SAAMxH,GACJ,OAAOf,KAAKuI,MAAMxH,KACpB,CAEA,WAAM0J,GACJ,OAAOzK,KAAKuI,MAAMkC,OACpB,EC3BK,MAAM2H,kBAAyCL,SAIpD9C,WAAAA,CACE1G,EACAyJ,EACAK,EACAC,GAEAnD,MAAM5G,EAAOyJ,GACbhS,KAAKqS,WAAaA,EAClBrS,KAAKsS,SAAWA,CAClB,CAEAJ,cAAAA,GACE,MAAMK,EAAevS,KAAKgS,OAAOQ,aAAaxS,KAAKqS,YACnDrS,KAAKuI,MAAMqC,MAAM5K,KAAKsS,SAAU,IAAKC,EACvC,CAEA1B,mBAAAA,CAAoBL,GAClB,MAAM/E,EAAO+E,EACVpH,IAAK6G,GAAUA,EAAMuC,aAAaxS,KAAKqS,aACvCI,OAAQ7G,GAAY,OAANA,GACjB5L,KAAKuI,MAAM8G,QAAQrP,KAAKsS,SAAU7G,EACpC,CAEAsF,KAAAA,CAAMP,EAAiBF,EAAcM,GACnC,MAAM8B,EAAgC,CAAC,EAcvC,OAZApC,EAAQ7P,QAASuI,IACf,MAAMtI,EAAMsI,EAAOwJ,aAAaxS,KAAKsS,UACrCI,EAAWhS,GAAOsI,IAGpBwH,EAAO/P,QAASwP,IACd,MAAMvP,EAAMuP,EAAMuC,aAAaxS,KAAKqS,YAChCK,EAAWhS,IACbuP,EAAM0C,YAAY/B,EAAU8B,EAAWhS,MAIpC8P,CACT,EC3CK,MAAMoC,sBAA6Cb,SAOxD9C,WAAAA,CACE1G,EACAyJ,EACA1H,EACAuI,EACAC,EACAC,EACAC,GAEA7D,MAAM5G,EAAOyJ,GACbhS,KAAKsK,MAAQA,EACbtK,KAAK6S,gBAAkBA,EACvB7S,KAAK8S,gBAAkBA,EACvB9S,KAAK+S,UAAYA,EACjB/S,KAAKgT,WAAaA,CACpB,CAEAd,cAAAA,GACElS,KAAKiT,cACLjT,KAAKuI,MAAMqC,MACT,GAAG5K,KAAKsK,SAAStK,KAAK6S,kBACtB,IACA7S,KAAKgS,OAAOQ,aAAaxS,KAAK+S,WAElC,CAEUE,WAAAA,CAAY1K,GACpB,MAAM2K,EAAI3K,GAASvI,KAAKuI,MAClB4K,EAAenT,KAAKiS,QAAQhR,UAAUmS,WAS5C,OAPAF,EAAExQ,KACA1C,KAAKsK,MACL,GAAG6I,KAAgBnT,KAAKgT,aACxB,IACA,GAAGhT,KAAKsK,SAAStK,KAAK8S,mBAGjB9S,IACT,CAEA6Q,mBAAAA,CAAoBL,GAClBxQ,KAAKiT,cACL,MAAMxH,EAAO+E,EACVpH,IAAK6G,GAAUA,EAAMuC,aAAaxS,KAAK+S,YACvCN,OAAQ7G,GAAY,OAANA,GACjB5L,KAAKuI,MAAM8G,QAAQ,GAAGrP,KAAKsK,SAAStK,KAAK6S,kBAAmBpH,EAC9D,CAEAsF,KAAAA,CAAMP,EAAiBF,EAAcM,GAUnC,OAAOJ,CACT,EClEK,MAAM6C,gBAAuCtB,SAIlD9C,WAAAA,CACE1G,EACAyJ,EACAK,EACAiB,GAEAnE,MAAM5G,EAAOyJ,GACbhS,KAAKqS,WAAaA,EAClBrS,KAAKsT,SAAWA,CAClB,CAEApB,cAAAA,GACE,MAAMqB,EAAavT,KAAKgS,OAAOQ,aAAaxS,KAAKsT,UACjDtT,KAAKuI,MAAMqC,MAAM5K,KAAKqS,WAAY,IAAKkB,EACzC,CAEA1C,mBAAAA,CAAoBL,GAClB,MAAM/E,EAAO+E,EACVpH,IAAK6G,GAAUA,EAAMuC,aAAaxS,KAAKsT,WACvCb,OAAQ7G,GAAY,OAANA,GACjB5L,KAAKuI,MAAM8G,QAAQrP,KAAKqS,WAAY5G,EACtC,CAEAsF,KAAAA,CAAMP,EAAiBF,EAAcM,GACnC,MAAM8B,EAAkC,CAAC,EAmBzC,OAjBApC,EAAQ7P,QAASuI,IACf,MAAMtI,EAAMsI,EAAOwJ,aAAaxS,KAAKqS,YAChCK,EAAWhS,KACdgS,EAAWhS,GAAO,IAEpBgS,EAAWhS,GAAK2K,KAAKrC,KAGvBwH,EAAO/P,QAASwP,IACd,MAAMvP,EAAMuP,EAAMuC,aAAaxS,KAAKsT,UAChCZ,EAAWhS,GACbuP,EAAM0C,YAAY/B,EAAU8B,EAAWhS,IAEvCuP,EAAM0C,YAAY/B,EAAU,MAIzBJ,CACT,EChDK,MAAMgD,eAAsCzB,SAIjD9C,WAAAA,CACE1G,EACAyJ,EACAK,EACAiB,GAEAnE,MAAM5G,EAAOyJ,GACbhS,KAAKqS,WAAaA,EAClBrS,KAAKsT,SAAWA,CAClB,CAEApB,cAAAA,GACE,MAAMqB,EAAavT,KAAKgS,OAAOQ,aAAaxS,KAAKsT,UACjDtT,KAAKuI,MAAMqC,MAAM5K,KAAKqS,WAAY,IAAKkB,EACzC,CAEA1C,mBAAAA,CAAoBL,GAClB,MAAM/E,EAAO+E,EACVpH,IAAK6G,GAAUA,EAAMuC,aAAaxS,KAAKsT,WACvCb,OAAQ7G,GAAY,OAANA,GACjB5L,KAAKuI,MAAM8G,QAAQrP,KAAKqS,WAAY5G,EACtC,CAEAsF,KAAAA,CAAMP,EAAiBF,EAAcM,GACnC,MAAM8B,EAAgC,CAAC,EAcvC,OAZApC,EAAQ7P,QAASuI,IACf,MAAMtI,EAAMsI,EAAOwJ,aAAaxS,KAAKqS,YACrCK,EAAWhS,GAAOsI,IAGpBwH,EAAO/P,QAASwP,IACd,MAAMvP,EAAMuP,EAAMuC,aAAaxS,KAAKsT,UAChCZ,EAAWhS,IACbuP,EAAM0C,YAAY/B,EAAU8B,EAAWhS,MAIpC8P,CACT,ECtBK,MAAMiD,cAAuBlF,UAIlC,kBAAsC,KACtC,kBAAsC,UAG5BmF,WAAkC,CAAC,EACnCC,SAAgC,CAAC,EACjCxD,UAAiC,CAAC,EAClCnC,QAAkB,EAGlB4F,SAAqB,GACrBC,QAAoB,CAAC,MACrBC,OAAmB,GACnBC,QAAoB,GACpBC,MAAgC,CAAC,EACjCC,MAAkB,GAClBC,YAAsB,EACtBC,UAAoB,aACpBC,UAAoB,aACpBC,aAAuB,EACvBC,UAAoB,aAK9B,iBAAOC,CAAWrF,GAChBlP,KAAKkP,QAAUA,CACjB,CAKA,eAAOkE,GACL,GAAIpT,KAAKkJ,UACP,OAAOlJ,KAAKkJ,UAGd,MAAMsL,EAAYxU,KAAKwG,KACvB,OAAOxG,KAAKyU,UAAUzU,KAAK0U,UAAUF,GACvC,CAKA,YAAOjM,GACL,OAAO,IAAIqG,aAAgB5O,KAAKoT,WAAYpT,KAAKkP,QACnD,CAKA,gBAAayF,GAEX,aADsB3U,KAAKuI,QAAWxH,OACvBqI,IAAKoC,GAASxL,KAAKyQ,QAAWjF,GAC/C,CAKA,iBAAawF,CAAQzS,GACnB,MAAMiN,QAAaxL,KAAKuI,QAAWqC,MAAM5K,KAAK4U,WAAYrW,GAAIkM,QAC9D,OAAOe,EAAOxL,KAAKyQ,QAAWjF,GAAQ,IACxC,CAKA,uBAAaqJ,CAActW,GACzB,MAAM0R,QAAcjQ,KAAKgR,KAAQzS,GACjC,IAAK0R,EACH,MAAM,IAAIxN,MAAM,wBAAwBzC,KAAK4U,eAAerW,KAE9D,OAAO0R,CACT,CAKA,YAAOrF,CAASM,EAAgBR,EAAe5K,GAC7C,OAAOE,KAAKuI,QAAWqC,MAAMM,EAAQR,EAAU5K,EACjD,CAKA,mBAAaK,CAAUqL,GACrB,MAAMmF,EAAW,IAAI3Q,KAGrB,GAFA2Q,EAASmE,KAAKtJ,GAEVmF,EAASuD,WAAY,CACvB,MAAMa,EAAM,IAAIxH,KAChBoD,EAAS+C,WAAW/C,EAASwD,WAAaY,EAC1CpE,EAAS+C,WAAW/C,EAASyD,WAAaW,CAC5C,CAEA,MAAM/L,QAAehJ,KAAKkP,QAAQ3D,OAChCvL,KAAKoT,WACLzC,EAAS+C,YAGLnV,EAAKyK,EAAOhJ,KAAK4U,aAAe5L,EAAOzK,IAAMyK,EAAO6C,SAS1D,OARA8E,EAAS+C,WAAW1T,KAAK4U,YAAcrW,EACf,OAApByB,KAAK4U,aACPjE,EAAS+C,WAAWnV,GAAKA,GAG3BoS,EAAS3C,QAAS,EAClB2C,EAASqE,eAEFrE,CACT,CAKA,mBAAa7E,CAAUvN,EAASiN,GAC9B,MAAMmF,QAAiB3Q,KAAK6U,WAActW,GAE1C,aADOoS,EAAiB7E,OAAON,GACxBmF,CACT,CAKA,oBAAasE,CAAQ1W,GACnB,MAAMoS,QAAiB3Q,KAAKgR,KAAKzS,GACjC,QAAKoS,SACSA,EAAiB5E,QACjC,CAKA,0BAAamJ,CACXxB,EACAhI,EAAqB,CAAC,GAEtB,MAAMnD,EAAQvI,KAAKuI,QAEnB,IAAK,MAAO7H,EAAKZ,KAAUJ,OAAOyV,QAAQzB,GACxCnL,EAAMqC,MAAMlK,EAAKZ,GAGnB,MAAMsV,QAAiB7M,EAAMkC,QAC7B,OAAI2K,EACKpV,KAAKyQ,QAAW2E,SAGZpV,KAAKG,OAAU,IAAKuT,KAAehI,GAClD,CAKA,2BAAa2J,CACX3B,EACAhI,EAAqB,CAAC,GAEtB,MAAMnD,EAAQvI,KAAKuI,QAEnB,IAAK,MAAO7H,EAAKZ,KAAUJ,OAAOyV,QAAQzB,GACxCnL,EAAMqC,MAAMlK,EAAKZ,GAGnB,MAAMsV,QAAiB7M,EAAMkC,QAC7B,GAAI2K,EAAU,CACZ,MAAMzE,EAAW3Q,KAAKyQ,QAAW2E,GAEjC,aADMzE,EAAS7E,OAAOJ,GACfiF,CACT,CAEA,aAAa3Q,KAAKG,OAAU,IAAKuT,KAAehI,GAClD,CAKA,cAAiB+E,CAAWjF,GAC1B,MAAMmF,EAAW,IAAI3Q,KAIrB,OAHA2Q,EAAS+C,WAAa,IAAKlI,GAC3BmF,EAASgD,SAAW,IAAKnI,GACzBmF,EAAS3C,QAAS,EACX2C,CACT,CAKAmE,IAAAA,CAAKpB,GACH,IAAK,MAAOhT,EAAKZ,KAAUJ,OAAOyV,QAAQzB,GACpC1T,KAAKsV,WAAW5U,IAClBV,KAAKuV,aAAa7U,EAAKZ,GAG3B,OAAOE,IACT,CAKUsV,UAAAA,CAAW5U,GACnB,OAAIV,KAAK4T,SAASrK,OAAS,EAClBvJ,KAAK4T,SAASpR,SAAS9B,IAExBV,KAAK6T,QAAQrR,SAAS9B,EAChC,CAKA6U,YAAAA,CAAa7U,EAAaZ,GAExB,MAAM0V,EAAU,MAAMxV,KAAKyV,OAAO/U,cACI,mBAA1BV,KAAawV,KACvB1V,EAASE,KAAawV,GAAS1V,IAGjCE,KAAK0T,WAAWhT,GAAOV,KAAK0V,cAAchV,EAAKZ,EACjD,CAKA0S,YAAAA,CAAa9R,GAEX,MAAMiV,EAAW,MAAM3V,KAAKyV,OAAO/U,cACnC,GAAuC,mBAA3BV,KAAa2V,GACvB,OAAQ3V,KAAa2V,KAGvB,MAAM7V,EAAQE,KAAK0T,WAAWhT,GAC9B,OAAOV,KAAK0V,cAAchV,EAAKZ,GAAO,EACxC,CAKU4V,aAAAA,CACRhV,EACAZ,EACA8V,GAAqB,GAErB,GAAI9V,QAAuC,OAAOA,EAElD,MAAM+V,EAAO7V,KAAKgU,MAAMtT,GACxB,IAAKmV,EAAM,OAAO/V,EAElB,GAAI8V,EACF,OAAQC,GACN,IAAK,MACL,IAAK,UACH,OAAOC,SAAShW,GAClB,IAAK,QACL,IAAK,SACH,OAAOiW,WAAWjW,GACpB,IAAK,SACH,OAAO4N,OAAO5N,GAChB,IAAK,OACL,IAAK,UACH,OAAOkW,QAAQlW,GACjB,IAAK,QACL,IAAK,OACH,MAAwB,iBAAVA,EAAqBmW,KAAKC,MAAMpW,GAASA,EACzD,IAAK,OACL,IAAK,WACH,OAAOA,aAAiByN,KAAOzN,EAAQ,IAAIyN,KAAKzN,GAClD,QACE,OAAOA,OAGX,OAAQ+V,GACN,IAAK,QACL,IAAK,OACH,MAAwB,iBAAV/V,EAAqBmW,KAAKE,UAAUrW,GAASA,EAC7D,IAAK,OACL,IAAK,WACH,OAAOA,aAAiByN,KAAOzN,EAAQ,IAAIyN,KAAKzN,GAClD,QACE,OAAOA,EAGf,CAKA,UAAMsW,GACJ,MAAMnH,EAAcjP,KAAKiP,YAEzB,GAAIjP,KAAKkU,WAAY,CACnB,MAAMa,EAAM,IAAIxH,KACXvN,KAAKgO,SACRhO,KAAK0T,WAAW1T,KAAKmU,WAAaY,GAEpC/U,KAAK0T,WAAW1T,KAAKoU,WAAaW,CACpC,CAEA,GAAI/U,KAAKgO,OAAQ,CAEf,MAAMzP,EAAKyB,KAAK0T,WAAWzE,EAAY2F,kBACjC3F,EAAYC,QAAQpD,OACxBmD,EAAYmE,WACZ7U,EACAyB,KAAK0T,WAET,KAAO,CAEL,MAAM1K,QAAeiG,EAAYC,QAAQ3D,OACvC0D,EAAYmE,WACZpT,KAAK0T,YAGDnV,EAAKyK,EAAOiG,EAAY2F,aAAe5L,EAAOzK,IAAMyK,EAAO6C,SACjE7L,KAAK0T,WAAWzE,EAAY2F,YAAcrW,EACX,OAA3B0Q,EAAY2F,aACd5U,KAAK0T,WAAWnV,GAAKA,GAGvByB,KAAKgO,QAAS,CAChB,CAGA,OADAhO,KAAKgV,eACEhV,IACT,CAKA,YAAM8L,CAAO4H,GAEX,OADA1T,KAAK8U,KAAKpB,SACG1T,KAAKoW,MACpB,CAKA,YAAMrK,GACJ,MAAMkD,EAAcjP,KAAKiP,YAEzB,GAAIjP,KAAKqU,YAGP,OAFArU,KAAK0T,WAAW1T,KAAKsU,WAAa,IAAI/G,WAChCvN,KAAKoW,QACJ,EAGT,MAAM7X,EAAKyB,KAAK0T,WAAWzE,EAAY2F,YACvC,aAAa3F,EAAYC,QAAQnD,OAAOkD,EAAYmE,WAAY7U,EAClE,CAKA,iBAAM8X,GACJ,MAAMpH,EAAcjP,KAAKiP,YACnB1Q,EAAKyB,KAAK0T,WAAWzE,EAAY2F,YACvC,aAAa3F,EAAYC,QAAQnD,OAAOkD,EAAYmE,WAAY7U,EAClE,CAKA,aAAM+X,GAKJ,OAJItW,KAAKqU,cACPrU,KAAK0T,WAAW1T,KAAKsU,WAAa,WAC5BtU,KAAKoW,QAENpW,IACT,CAKUgV,YAAAA,GACRhV,KAAK2T,SAAW,IAAK3T,KAAK0T,WAC5B,CAKA6C,QAAAA,GACE,MAAMC,EAA6B,CAAC,EACpC,IAAK,MAAO9V,EAAKZ,KAAUJ,OAAOyV,QAAQnV,KAAK0T,YACzC1T,KAAK2T,SAASjT,KAASZ,IACzB0W,EAAM9V,GAAOZ,GAGjB,OAAO0W,CACT,CAKAC,OAAAA,GACE,OAAO/W,OAAO+L,KAAKzL,KAAKuW,YAAYhN,OAAS,CAC/C,CAEA0F,WAAAA,CAAYyE,EAAyB,CAAC,GACpCvE,QACAnP,KAAK8U,KAAKpB,EACZ,CAKAgD,MAAAA,GACE,MAAMvJ,EAA4B,CAAC,EAGnC,IAAK,MAAOzM,EAAKZ,KAAUJ,OAAOyV,QAAQnV,KAAK0T,YACzC1T,KAAK8T,OAAOtR,SAAS9B,IACrBV,KAAK+T,QAAQxK,OAAS,IAAMvJ,KAAK+T,QAAQvR,SAAS9B,KACtDyM,EAAKzM,GAAOV,KAAKwS,aAAa9R,IAIhC,IAAK,MAAOA,EAAKZ,KAAUJ,OAAOyV,QAAQnV,KAAKmQ,WAC7ChD,EAAKzM,GAAOZ,EAGd,OAAOqN,CACT,CAKAwJ,MAAAA,CACE1E,EACAI,EACAiB,GAEA,MAAM3C,EAAW,IAAIsB,EACf2E,EAAUvE,GAAc,GAAGrS,KAAKiP,YAAYzI,KAAKqQ,mBACjDC,EAAQxD,GAAY,KAE1B,OAAO,IAAIE,OAAU7C,EAASoG,WAAY/W,KAAM4W,EAASE,EAC3D,CAKAE,OAAAA,CACE/E,EACAI,EACAiB,GAEA,MAAM3C,EAAW,IAAIsB,EACf2E,EAAUvE,GAAc,GAAGrS,KAAKiP,YAAYzI,KAAKqQ,mBACjDC,EAAQxD,GAAY,KAE1B,OAAO,IAAID,QAAW1C,EAASoG,WAAY/W,KAAM4W,EAASE,EAC5D,CAKAG,SAAAA,CACEhF,EACAI,EACAC,GAEA,MAAM3B,EAAW,IAAIsB,EACf2E,EACJvE,GAAc,GAAG1B,EAAS1B,YAAYzI,KAAKqQ,mBACvCK,EAAQ5E,GAAY,KAE1B,OAAO,IAAIF,UAAazB,EAASoG,WAAY/W,KAAM4W,EAASM,EAC9D,CAKAC,aAAAA,CACElF,EACA3H,EACAuI,EACAC,EACAC,EACAC,GAEA,MAAMrC,EAAW,IAAIsB,EACfmF,EAAa9M,GAAStK,KAAKqX,gBAAgB1G,GAC3C2G,EACJzE,GAAmB,GAAG7S,KAAKiP,YAAYzI,KAAKqQ,mBACxCU,EACJzE,GAAmB,GAAGnC,EAAS1B,YAAYzI,KAAKqQ,mBAC5C7E,EAASe,GAAa,KACtByE,EAAWxE,GAAc,KAE/B,OAAO,IAAIJ,cACTjC,EAASoG,WACT/W,KACAoX,EACAE,EACAC,EACAvF,EACAwF,EAEJ,CAKUH,eAAAA,CAAgBpF,GACxB,MAAMwF,EAAW,CACfzX,KAAKiP,YAAYzI,KAAKqQ,cACtB5E,EAAQhD,YAAYzI,KAAKqQ,eAG3B,OADAY,EAASC,OACFD,EAAS/U,KAAK,IACvB,CAKA,WAAOwN,CAAQC,GACb,OAAOnQ,KAAKuI,QAAW2H,KAAKC,EAC9B,CAKAwC,WAAAA,CAAY/B,EAAkB9Q,GAE5B,OADAE,KAAKmQ,UAAUS,GAAY9Q,EACpBE,IACT,CAKA2X,WAAAA,CAAY/G,GACV,OAAO5Q,KAAKmQ,UAAUS,EACxB,CAKAgH,cAAAA,CAAehH,GACb,YAAoCzR,IAA7Ba,KAAKmQ,UAAUS,EACxB,CAKAmG,QAAAA,GACE,OAAQ/W,KAAKiP,YAA6B1G,OAC5C,CAKA,gBAAiBmM,CAAUmD,GACzB,OAAOA,EACJvK,QAAQ,WAAY,OACpBuJ,cACAvJ,QAAQ,KAAM,GACnB,CAKA,gBAAiBmH,CAAUoD,GACzB,OAAIA,EAAIC,SAAS,KACRD,EAAIpK,MAAM,GAAI,GAAK,MAExBoK,EAAIC,SAAS,KACRD,EAAM,KAERA,EAAM,GACf,CAKUpC,MAAAA,CAAOoC,GACf,OAAOA,EAAIvK,QAAQ,aAAc,CAACa,EAAG4J,EAAIC,IAAMA,EAAE3K,cACnD,ECvlBK,MAAM4K,SAAWC,UACtB,MAAMC,EAAUC,EAAK,GAEL,YAAZD,IACFE,QAAQC,MAAM,uBAAuBH,KACrC5W,QAAQgX,KAAK,IAIf,MAAMC,EAAavW,wBAAAA,QAAaV,QAAQD,MAAO,sBAE/C,IACE1C,oBAAAA,KAAAA,SAA4B,CAC1B6Z,eAAe,EACfC,gBAAiB,CACfha,OAAQ,aAGd,CAAE,MAAOia,GAAI,CAGb,MAAM,eAAEra,GAAmBM,oBAAQ,IAEnC,IAAIgG,EAUAsK,EATJ,IACE,MAAMxQ,EAASJ,EAAeka,GAC9B5T,EAASlG,EAAO2H,SAAW3H,EAAOka,gBAAkBla,CACtD,CAAE,MAAO4Z,GACPD,QAAQC,MAAM,kCAAmCA,GACjD/W,QAAQgX,KAAK,EACf,CAIoB,aAAhB3T,EAAOC,KACTqK,EAAU,IAAIvB,gBACW,UAAhB/I,EAAOC,KAChBqK,EAAU,IAAI5H,cAEd+Q,QAAQC,MAAM,8BAA8B1T,EAAOC,QACnDtD,QAAQgX,KAAK,IAGf,UACQrJ,EAAQzH,QAAQ7C,GACtB6O,MAAMc,WAAWrF,GAGjB,MAIM2J,EAAeva,EAJF2D,wBAAAA,QACjBV,QAAQD,MACR,uCAGIwX,EAAiBD,EAAaxS,SAAWwS,EAAaC,eAE5D,IAAKA,EACH,MAAM,IAAIrW,MAAM,4BAGlB4V,QAAQU,IAAI,uBACZ,MAAMC,EAAS,IAAIF,QACbE,EAAOC,MACbZ,QAAQU,IAAI,+BACd,CAAE,MAAOT,GACPD,QAAQC,MAAM,kBAAmBA,GACjC/W,QAAQgX,KAAK,EACf,CAAE,cACMrJ,EAAQvG,YAChB,GCtEWuQ,WAAahB,UACxB,MAAMrT,EAAOuT,EAAK,GAAGe,MAAM,KAAK,GAC1B3S,EAAO4R,EAAK,GAOlB,OALK5R,IACH6R,QAAQC,MAAM,iCAAiCzT,KAC/CtD,QAAQgX,KAAK,IAGP1T,GACN,IAAK,cACGuU,UAAU5S,GAChB,MACF,IAAK,mBACG6S,eAAe7S,GACrB,MACF,IAAK,kBACG8S,cAAc9S,GACpB,MACF,IAAK,eACG+S,WAAW/S,GACjB,MACF,IAAK,gBACGgT,YAAYhT,GAClB,MACF,QACE6R,QAAQC,MAAM,8BAA8BzT,KAC5CtD,QAAQgX,KAAK,KAIba,UAAYlB,UAChB,MAAMuB,EAAU,4DAEHjT,8CACWA,EAAKqQ,mEAIdrQ,YAETkT,UAAU,aAAc,GAAGlT,OAAWiT,IAGxCJ,eAAiBnB,UACrB,MAAMuB,EAAU,oEAEHjT,6UAsBEA,YAETkT,UAAU,kBAAmB,GAAGlT,OAAWiT,IAG7CH,cAAgBpB,UACpB,MAIMyB,EAAW,IAJC,IAAIpM,MACnBC,cACAF,QAAQ,WAAY,IACpBG,MAAM,EAAG,OACqBjH,OAE3BiT,EAAU,wEAEHG,aAAapT,iQAaXoT,aAAapT,aAEtBkT,UAAU,sBAAuBC,EAAUF,IAG7CF,WAAarB,UACjB,MAAMuB,EAAU,6DAEHjT,yEAMEA,YAETkT,UAAU,mBAAoB,GAAGlT,OAAWiT,IAG9CD,YAActB,UAClB,MAAM2B,EAAYrT,EAAK8G,QAAQ,UAAW,IACpCmM,EAAU,wDACPI,8BAAsCA,sBAElCrT,qBAAwBqT,6BACjBA,kFASLrT,YAETkT,UAAU,qBAAsB,GAAGlT,OAAWiT,IAGhDC,UAAYxB,MAAO4B,EAAaH,EAAkBF,KACtD,MAAMM,EAAY9X,wBAAAA,QAAaV,QAAQD,MAAOwY,GACxCE,EAAa/X,wBAAAA,KAAU8X,EAAWJ,GAEnCzX,sBAAAA,WAAc6X,IACjB7X,sBAAAA,UAAa6X,EAAW,CAAE9W,WAAW,IAGnCf,sBAAAA,WAAc8X,KAChB3B,QAAQC,MAAM,wBAAwB0B,KACtCzY,QAAQgX,KAAK,IAGfrW,sBAAAA,cAAiB8X,EAAYP,GAC7BpB,QAAQU,IAAI,YAAY9W,wBAAAA,KAAU6X,EAAKH,OAGnCC,aAAgB/B,GACbA,EAAIvK,QAAQ,aAAc,CAACa,EAAG4J,EAAIC,IAAMA,EAAE3K,eCvJ5C,MAAM4M,cAGXhL,WAAAA,CAAYzI,EAAc3B,EAAc0E,GACtCvJ,KAAKW,WAAa,CAChB6F,OACA3B,OACA0E,SACAG,UAAU,EAEd,CAKAA,QAAAA,GAEE,OADA1J,KAAKW,WAAW+I,UAAW,EACpB1J,IACT,CAKAqG,QAAQvG,GAEN,OADAE,KAAKW,WAAW0F,QAAUvG,EACnBE,IACT,CAKA6J,MAAAA,GAEE,OADA7J,KAAKW,WAAWkJ,QAAS,EAClB7J,IACT,CAKA4J,OAAAA,GAEE,OADA5J,KAAKW,WAAWiJ,SAAU,EACnB5J,IACT,CAKAyJ,aAAAA,GAEE,OADAzJ,KAAKW,WAAW8I,eAAgB,EACzBzJ,IACT,CAKAwJ,QAAAA,GAEE,OADAxJ,KAAKW,WAAW6I,UAAW,EACpBxJ,IACT,CAKAka,aAAAA,GACE,OAAOla,KAAKW,UACd,EAMK,MAAMwZ,kBAOXlL,WAAAA,CAAY/D,GACVlL,KAAKkL,OAASA,CAChB,CAKAkP,UAAAA,CAAWlP,GAET,OADAlL,KAAKqa,iBAAmBnP,EACjBlL,IACT,CAKAsa,EAAAA,CAAGhQ,GAED,OADAtK,KAAKua,gBAAkBjQ,EAChBtK,IACT,CAKAwa,QAAAA,CAASC,GAEP,OADAza,KAAK0a,eAAiBD,EACfza,IACT,CAKA2a,QAAAA,CAASF,GAEP,OADAza,KAAK4a,eAAiBH,EACfza,IACT,CAKA6a,KAAAA,GACE,IAAK7a,KAAKua,kBAAoBva,KAAKqa,iBACjC,MAAM,IAAI5X,MAAM,iDAGlB,IAAIoG,EAAM,gBAAgB7I,KAAKkL,sBAAsBlL,KAAKua,mBAAmBva,KAAKqa,oBASlF,OAPIra,KAAK0a,iBACP7R,GAAO,cAAc7I,KAAK0a,kBAExB1a,KAAK4a,iBACP/R,GAAO,cAAc7I,KAAK4a,kBAGrB/R,CACT,EAOK,MAAMiS,UAEH3R,QAA8B,GAC9B4R,QAIH,GACGC,YAAmC,GACnCC,YAAwB,GAEhChM,WAAAA,CAAY/F,GACVlJ,KAAKkJ,UAAYA,CACnB,CAKA3K,EAAAA,CAAGiI,EAAe,MAChB,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,cAGpC,OAFA6C,EAAIO,UAAUH,gBAAgBD,WAC9BxJ,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKA+D,IAAAA,CAAK5G,EAAe,MAClB,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,QAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKAoD,MAAAA,CAAOjG,EAAc+C,EAAiB,KACpC,MAAMF,EAAM,IAAI4Q,cAAczT,EAAM,SAAU+C,GAE9C,OADAvJ,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKAqD,IAAAA,CAAKlG,GACH,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,QAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKAsD,OAAAA,CAAQnG,GACN,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,WAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKAuD,UAAAA,CAAWpG,GACT,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,cAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKA0D,OAAAA,CACEvG,EACA0U,EAAoB,GACpBC,EAAgB,GAEhB,MAAM9R,EAAM,IAAI4Q,cAAczT,EAAM,WAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKAwD,KAAAA,CAAMrG,GACJ,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,SAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKAyD,MAAAA,CAAOtG,GACL,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,UAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKA0B,OAAAA,CAAQvE,GACN,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,WAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKA2D,IAAAA,CAAKxG,GACH,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,QAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKA4D,QAAAA,CAASzG,GACP,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,YAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKA6D,SAAAA,CAAU1G,GACR,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,aAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKA6K,UAAAA,GACElU,KAAKkN,UAAU,cAAcxD,WAC7B1J,KAAKkN,UAAU,cAAcxD,UAC/B,CAKA2K,WAAAA,CAAY7N,EAAe,cACzB,OAAOxG,KAAKkN,UAAU1G,GAAMkD,UAC9B,CAKAyD,IAAAA,CAAK3G,GACH,MAAM6C,EAAM,IAAI4Q,cAAczT,EAAM,QAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKA+R,IAAAA,CAAK5U,EAAckF,GACjB,MAAMrC,EAAM,IAAI4Q,cAAczT,EAAM,QAEpC,OADAxG,KAAKmJ,QAAQkC,KAAKhC,EAAI6Q,iBACf7Q,CACT,CAKAuN,OAAAA,CAAQ1L,GACN,MAAMmQ,EAAK,IAAIlB,kBAAkBjP,GAEjC,OADAlL,KAAKgb,YAAY3P,KAAKgQ,GACfA,CACT,CAKAvQ,KAAAA,CAAM3B,EAA4B3C,GAChC,MAAM8U,EAAOlL,MAAMC,QAAQlH,GAAWA,EAAU,CAACA,GACjDnJ,KAAK+a,QAAQ1P,KAAK,CAAElC,QAASmS,EAAMzR,QAAQ,EAAOrD,QACpD,CAKAqD,MAAAA,CAAOV,EAA4B3C,GACjC,MAAM8U,EAAOlL,MAAMC,QAAQlH,GAAWA,EAAU,CAACA,GACjDnJ,KAAK+a,QAAQ1P,KAAK,CAAElC,QAASmS,EAAMzR,QAAQ,EAAMrD,QACnD,CAKAoD,OAAAA,CAAQT,GACNnJ,KAAKib,YAAc7K,MAAMC,QAAQlH,GAAWA,EAAU,CAACA,EACzD,CAKAoS,UAAAA,GACE,OAAOvb,KAAKmJ,OACd,CAKAqS,YAAAA,GACE,OAAOxb,KAAKkJ,SACd,CAKAuS,UAAAA,GACE,OAAOzb,KAAK+a,OACd,CAKAW,cAAAA,GACE,OAAO1b,KAAKgb,WACd,EC7WK,MAAMW,OAMX,iBAAOpH,CAAWrF,GAChBlP,KAAKkP,QAAUA,CACjB,CAKA,mBAAa/O,CACX+I,EACA0S,GAEA,MAAMC,EAAY,IAAIf,UAAU5R,GAChC0S,EAASC,SAEH7b,KAAKkP,QAAQjG,YAAYC,EAAW2S,EAAUN,aACtD,CAKA,kBAAajR,CACXpB,EACA0S,GAGAA,EADkB,IAAId,UAAU5R,IAKhCmP,QAAQyD,KACN,uFAEJ,CAKA,iBAAaC,CAAK7S,SACVlJ,KAAKkP,QAAQpF,UAAUZ,EAC/B,CAKA,yBAAa8S,CAAa9S,SACHlJ,KAAK+J,SAASb,UAE3BlJ,KAAK+b,KAAK7S,EAEpB,CAKA,mBAAa+S,CAAOC,EAAcC,GAEhC,MAAM,IAAI1Z,MAAM,sCAClB,CAKA,qBAAasH,CAASb,GACpB,aAAalJ,KAAKkP,QAAQnF,SAASb,EACrC,CAKA,sBAAagB,CACXhB,EACAiB,GAEA,aAAanK,KAAKkP,QAAQhF,UAAUhB,EAAWiB,EACjD,CAKA,sBAAaiS,GAEX,MAAM,IAAI3Z,MAAM,yCAClB,CAKA,uBAAa8Y,CAAWrS,GAEtB,MAAM,IAAIzG,MAAM,0CAClB,EChGK,MAAe4Z,WAkCf,MAAMC,gBAEHC,gBAA0B,aAGlCtN,WAAAA,CAAYC,EAAcsN,GACxBxc,KAAKkP,QAAUA,EACflP,KAAKwc,eAAiBA,CACxB,CAKA,2BAAcC,SACSd,OAAO5R,SAAS/J,KAAKuc,wBAElCZ,OAAOxb,OAAOH,KAAKuc,gBAAkBjS,IACzCA,EAAM/L,KACN+L,EAAMmC,OAAO,aACbnC,EAAMqC,QAAQ,SACdrC,EAAM4C,UAAU,cAAcxD,YAGpC,CAKA,sBAAcgT,GAEZ,aADM1c,KAAKyc,8BACEzc,KAAKkP,QAAQ7E,OAAOrK,KAAKuc,gBAAiB,CACrDtR,QAAS,CAAC,CAAEC,OAAQ,QAASC,UAAW,SAE5C,CAKA,0BAAcwR,GACZ,MAAMza,QAAW,+EAIX0a,SAHa,sFAES5c,KAAK0c,oBACFtT,IAAKyT,GAAMA,EAAEC,YAQ5C,OANc5a,EAAG6a,YAAY/c,KAAKwc,gBAE/B/J,OAAQuK,GAAMA,EAAElF,SAAS,QAAUkF,EAAElF,SAAS,QAC9CrF,OAAQuK,IAAOJ,EAASpa,SAASwa,EAAE1P,QAAQ,aAAc,MACzDoK,MAGL,CAKA,SAAMuB,GACJ,MAAMhX,QAAa,+EACbgb,QAA0Bjd,KAAK2c,uBAErC,GAAiC,IAA7BM,EAAkB1T,OAEpB,YADA8O,QAAQU,IAAI,yBAId,MAAMmE,QAAsBld,KAAK0c,mBAC3BS,EACJD,EAAc3T,OAAS,EACnBoI,KAAKtJ,OAAO6U,EAAc9T,IAAKyT,GAAMA,EAAEO,QAAU,EACjD,EAEN/E,QAAQU,IAAI,WAAWkE,EAAkB1T,0BAEzC,IAAK,MAAM8T,KAAQJ,EAAmB,CACpC,MAAMK,EAAgBrb,EAAKP,QAAQ1B,KAAKwc,eAAgBa,GAClDE,EAAgBF,EAAK/P,QAAQ,aAAc,IAEjD,IAEE,MACMwP,EAAY,UADW9c,KAAKwd,cAAcF,IAGhDjF,QAAQU,IAAI,cAAcwE,WACpBT,EAAUW,WAGVzd,KAAKkP,QAAQ3D,OAAOvL,KAAKuc,gBAAiB,CAC9CO,UAAWS,EACXH,MAAOD,EACPO,WAAY,IAAInQ,OAGlB8K,QAAQU,IAAI,aAAawE,IAC3B,CAAE,MAAOjF,GAEP,MADAD,QAAQC,MAAM,qBAAqBiF,KAAkBjF,GAC/CA,CACR,CACF,CAEAD,QAAQU,IAAI,oCACd,CAKA,cAAM1M,CAASsR,EAAgB,GAC7B,MAAMT,QAAsBld,KAAK0c,mBAEjC,GAA6B,IAAzBQ,EAAc3T,OAEhB,YADA8O,QAAQU,IAAI,6BAId,MAAM6E,EAAWjM,KAAKtJ,OAAO6U,EAAc9T,IAAKyT,GAAMA,EAAEO,QAClDS,EAAWD,EAAWD,EAAQ,EAE9BG,EAAuBZ,EAC1BzK,OAAQoK,GAAMA,EAAEO,OAASS,GAAYhB,EAAEO,OAASQ,GAChDG,UAEH1F,QAAQU,IAAI,gBAAgB+E,EAAqBvU,0BAEjD,MAAMtH,QAAa,+EAEnB,IAAK,MAAM+b,KAAUF,EAAsB,CACzC,MAAMR,EAAgBrb,EAAKP,QACzB1B,KAAKwc,eACL,GAAGwB,EAAOlB,gBAGZ,IACE,MACMA,EAAY,UADW9c,KAAKwd,cAAcF,IAGhDjF,QAAQU,IAAI,iBAAiBiF,EAAOlB,mBAC9BA,EAAUmB,aAGVje,KAAKkP,QAAQnD,OAAO/L,KAAKuc,gBAAiByB,EAAOzf,IAEvD8Z,QAAQU,IAAI,gBAAgBiF,EAAOlB,YACrC,CAAE,MAAOxE,GAEP,MADAD,QAAQC,MAAM,sBAAsB0F,EAAOlB,aAAcxE,GACnDA,CACR,CACF,CAEAD,QAAQU,IAAI,kCACd,CAKA,WAAMmF,GACJ,MAAMhB,QAAsBld,KAAK0c,mBAC3ByB,EAAUxM,KAAKtJ,OAAO6U,EAAc9T,IAAKyT,GAAMA,EAAEO,cACjDpd,KAAKqM,SAAS8R,EACtB,CAKA,WAAMC,SACEpe,KAAKke,cACLle,KAAKiZ,KACb,CAKA,YAAMoF,GAEJ,aAD4Bre,KAAK0c,oBACZtT,IAAKyT,IAAC,CACzBrW,KAAMqW,EAAEC,UACRM,MAAOP,EAAEO,MACTkB,MAAOzB,EAAEa,YAAc,IAAInQ,OAE/B,CAKA,mBAAciQ,CAAce,GAE1B,MAAMC,GAAkBlgB,EAAAA,eAAAA,gBAAeigB,GACjCE,EAAiBD,EAAgBnY,SAAWmY,EAElD,IAAKC,GAA4C,mBAAnBA,EAC5B,MAAM,IAAIhc,MACR,kBAAkB8b,6CAMtB,MAAM5N,EAAW,IAAI8N,EACrB,GACyB,mBAAhB9N,EAAS8M,IACS,mBAAlB9M,EAASsN,KAEhB,MAAM,IAAIxb,MACR,sBAAsB8b,4CAI1B,OAAOE,CACT,ECnPK,MAAMC,cAAgBxG,UAC3B,MAAMC,EAAUC,EAAK,GAGfI,EAAavW,wBAAAA,QAAaV,QAAQD,MAAO,uBAGzC,eAAEhD,GAAmBM,oBAAQ,IAGnC,IACEN,EAAe,WAAWqgB,SAAS,CACjClG,eAAe,EACfC,gBAAiB,CACfha,OAAQ,aAGd,CAAE,MAAOia,GACP,CAGF,IAAI/T,EAUAsK,EATJ,IACE,MAAMxQ,EAASJ,EAAeka,GAC9B5T,EAASlG,EAAO2H,SAAW3H,EAAOka,gBAAkBla,CACtD,CAAE,MAAO4Z,GACPD,QAAQC,MAAM,kCAAmCA,GACjD/W,QAAQgX,KAAK,EACf,CAIoB,aAAhB3T,EAAOC,KACTqK,EAAU,IAAIvB,gBACW,UAAhB/I,EAAOC,KAChBqK,EAAU,IAAI5H,cAEd+Q,QAAQC,MAAM,8BAA8B1T,EAAOC,QACnDtD,QAAQgX,KAAK,IAGf,UACQrJ,EAAQzH,QAAQ7C,GAEtB,MAAM4X,EAAiBva,wBAAAA,QAAaV,QAAQD,MAAO,uBAC7Csd,EAAS,IAAItC,gBAAgBpN,EAASsN,GAE5C,OAAQrE,GACN,IAAK,gBACGyG,EAAO3F,MACb,MACF,IAAK,yBACG2F,EAAOvS,WACb,MACF,IAAK,sBACGuS,EAAOV,QACb,MACF,IAAK,sBACGU,EAAOR,QACb,MACF,IAAK,iBACH,MAAMC,QAAeO,EAAOP,SAC5BhG,QAAQ/N,MAAM+T,GACd,MACF,QACEhG,QAAQC,MAAM,4BAA4BH,KAC1C5W,QAAQgX,KAAK,GAEnB,CAAE,MAAOD,GACPD,QAAQC,MAAM,oBAAqBA,GACnC/W,QAAQgX,KAAK,EACf,CAAE,cACMrJ,EAAQvG,YAChB,GCvEIyP,KAAO7W,QAAQsd,KAAKpR,MAAM,GAC1B0K,QAAUC,KAAK,GAEhBD,UACHE,QAAQC,MAAM,qDACd/W,QAAQgX,KAAK,IAGf,MAAMuG,YAAeC,GACZ,IAAIC,QAAc,CAACtd,EAASud,KACjCF,EAAS9F,IAAI,CAACiG,EAAKC,IACbD,GACF7G,QAAQC,MAAM4G,GACPD,EAAOC,IAEZC,GAASA,EAAMC,aACjB/G,QAAQC,MAAM6G,EAAME,SAAS,CAAEC,QAAQ,KAChCL,EAAO,IAAIxc,MAAM,2BAE1B4V,QAAQU,IAAIoG,aAAK,EAALA,EAAOE,SAAS,CAAEC,QAAQ,UACtC5d,QAKN,IAAI6d,cAAiD,KAIrD,MAAMC,eAAkBC,GACf,IAAIT,QAAStd,IAAY,IAAAge,EAC1BH,eACFA,cAAcI,OAGhB,MAAMC,EAAa3d,wBAAAA,QAAaV,QAAQD,MAAO,kBAC/Cie,eAAgBM,EAAAA,uCAAAA,OAAM,OAAQ,CAACD,GAAa,CAC1CE,MAAO,CAAC,UAAW,OAAQ,WAC3Bzc,IAAK,IAAK9B,QAAQ8B,IAAK0c,gBAAiBN,EAAQJ,cAG9B,QAApBK,EAAAH,cAAcS,cAAM,IAAAN,GAApBA,EAAsBpF,GAAG,OAAS9O,IAChCjK,QAAQye,OAAOC,MAAMzU,GACjBA,EAAK6T,WAAW7c,SAAS,sBAC3Bd,MAIJ6d,cAAcjF,GAAG,QAAU4F,IACZ,IAATA,GAAuB,OAATA,GAChB7H,QAAQC,MAAM,+BAA+B4H,SAM/CC,cAAgBA,CACpBpB,EACAqB,KAEArB,EAASsB,MAAM,CAAC,EAAG,CAACnB,EAAKC,KACnBD,EACF7G,QAAQC,MAAM4G,IAGhB7G,QAAQU,IAAIoG,aAAK,EAALA,EAAOE,SAAS,CAAEC,QAAQ,KAElCH,IAAUA,EAAMC,aAAegB,GACjCA,QAKAE,MAAQpI,UACZ3W,QAAQ8B,IAAIC,SAAW,aACvB+U,QAAQU,IAAI,8BAEZ,MAAMwH,EAAepd,qBACfqd,EAAe1Z,qBAErB,UACQgY,YAAY2B,2BAAQF,UACpBzB,YAAY2B,2BAAQD,IAC1BnI,QAAQU,IAAI,kBACd,CAAE,MAAOT,GACPD,QAAQC,MAAM,gBAAiBA,GAC/B/W,QAAQgX,KAAK,EACf,GAGImI,IAAMxI,UACV3W,QAAQ8B,IAAIC,SAAW,cACvB+U,QAAQU,IAAI,kCAGZ,MACM4H,EAAM,IAAIC,4BAAAA,gBAAgB,CAAE9Y,KADjB,OAEjBuQ,QAAQU,IAAI,mCAEZ,MAAM8H,EAAkBA,KACtBF,EAAIG,QAAQrgB,QAASgD,IACO,IAAtBA,EAAOsd,YACTtd,EAAOud,KAAK/K,KAAKE,UAAU,CAAEtR,KAAM,eAKnC0b,EAAepd,qBACfqd,EAAe1Z,qBAErB,IAAIma,GAAmB,EACnBC,GAAgB,EAEpB,MAAMC,EAAiBV,2BAAQD,GAC/BW,EAAeC,MAAMC,QAAQC,IAAI,WAAY,KAC3CL,GAAmB,IAIrBd,cAAcM,2BAAQF,GAAe,KACnClI,QAAQU,IAAI,0BACRkI,GACF5I,QAAQU,IAAI,4CACZmI,GAAgB,IAEhB7I,QAAQU,IAAI,yBACZ8H,OAKJV,cAAcgB,EAAgBjJ,UAC5BG,QAAQU,IAAI,qDACNyG,eAtCS,MAuCfyB,GAAmB,EACfC,IACF7I,QAAQU,IAAI,+CACZ8H,IACAK,GAAgB,MAKhBK,MAAQA,KACZhgB,QAAQ8B,IAAIC,SAAW,aACvB,MAAMsc,EAAa3d,wBAAAA,QAAaV,QAAQD,MAAO,kBAC/C+W,QAAQU,IAAI,sBAAsB6G,SAEpBC,EAAAA,uCAAAA,OAAM,OAAQ,CAACD,GAAa,CAAEE,MAAO,YAE7CxF,GAAG,QAAU4F,IACjB3e,QAAQgX,KAAK2H,GAAQ,MAQzB,OAAQ/H,SACN,IAAK,QACHmI,QACA,MACF,IAAK,MACHI,MACA,MACF,IAAK,QACHa,QACA,MACF,QACMpJ,QAAQqJ,WAAW,SACrBtI,WAAWd,MACFD,QAAQqJ,WAAW,WAC5B9C,cAActG,MACLD,QAAQqJ,WAAW,OAC5BvJ,SAASG,OAETC,QAAQC,MAAM,oBAAoBH,WAClC5W,QAAQgX,KAAK,I","sources":["webpack://arcanajs/./src/lib/server/utils/dynamicRequire.ts","webpack://arcanajs/external node-commonjs \"fs\"","webpack://arcanajs/external commonjs \"ts-node\"","webpack://arcanajs/external node-commonjs \"path\"","webpack://arcanajs/webpack/bootstrap","webpack://arcanajs/webpack/runtime/create fake namespace object","webpack://arcanajs/webpack/runtime/compat get default export","webpack://arcanajs/webpack/runtime/define property getters","webpack://arcanajs/webpack/runtime/hasOwnProperty shorthand","webpack://arcanajs/webpack/runtime/make namespace object","webpack://arcanajs/external node-commonjs \"child_process\"","webpack://arcanajs/external commonjs \"webpack\"","webpack://arcanajs/external commonjs \"clean-webpack-plugin\"","webpack://arcanajs/external commonjs \"html-webpack-plugin\"","webpack://arcanajs/external commonjs \"mini-css-extract-plugin\"","webpack://arcanajs/external commonjs \"webpack-node-externals\"","webpack://arcanajs/./src/cli/webpack.config.ts","webpack://arcanajs/external commonjs \"ws\"","webpack://arcanajs/./src/lib/arcanox/adapters/MySQLAdapter.ts","webpack://arcanajs/./src/lib/arcanox/adapters/PostgresAdapter.ts","webpack://arcanajs/./src/lib/arcanox/support/Macroable.ts","webpack://arcanajs/./src/lib/arcanox/QueryBuilder.ts","webpack://arcanajs/./src/lib/arcanox/relations/Relation.ts","webpack://arcanajs/./src/lib/arcanox/relations/BelongsTo.ts","webpack://arcanajs/./src/lib/arcanox/relations/BelongsToMany.ts","webpack://arcanajs/./src/lib/arcanox/relations/HasMany.ts","webpack://arcanajs/./src/lib/arcanox/relations/HasOne.ts","webpack://arcanajs/./src/lib/arcanox/Model.ts","webpack://arcanajs/./src/cli/commands/db.ts","webpack://arcanajs/./src/cli/commands/make.ts","webpack://arcanajs/./src/lib/arcanox/schema/Blueprint.ts","webpack://arcanajs/./src/lib/arcanox/schema/Schema.ts","webpack://arcanajs/./src/lib/arcanox/schema/Migration.ts","webpack://arcanajs/./src/cli/commands/migrate.ts","webpack://arcanajs/./src/cli/index.ts"],"sourcesContent":["/**\n * Helper to dynamically require modules at runtime, bypassing Webpack bundling.\n * This is necessary for loading user configuration files, migrations, and views\n * that are not part of the framework bundle but exist in the user's project.\n */\nexport const dynamicRequire = (id: string) => {\n if (typeof __non_webpack_require__ !== \"undefined\") {\n return __non_webpack_require__(id);\n }\n // Fallback for non-webpack environments (e.g. direct node execution)\n // We use eval to prevent Webpack from seeing this as a dependency\n return eval(\"require\")(id);\n};\n","module.exports = require(\"fs\");","module.exports = require(\"ts-node\");","module.exports = require(\"path\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"child_process\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"webpack\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"clean-webpack-plugin\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"html-webpack-plugin\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"mini-css-extract-plugin\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"webpack-node-externals\");","import { CleanWebpackPlugin } from \"clean-webpack-plugin\";\nimport HtmlWebpackPlugin from \"html-webpack-plugin\";\nimport MiniCssExtractPlugin from \"mini-css-extract-plugin\";\nimport path from \"path\";\nimport webpack from \"webpack\";\nimport nodeExternals from \"webpack-node-externals\";\n\nconst cwd = process.cwd();\n\n// Helper to resolve loaders from the framework's node_modules\nconst resolveLoader = (loader: string) =>\n __non_webpack_require__.resolve(loader);\n\nimport fs from \"fs\";\n\n// Helper to find entry file with supported extensions\nconst findEntry = (searchPaths: string[]): string => {\n const extensions = [\".ts\", \".tsx\", \".js\", \".jsx\"];\n\n for (const basePath of searchPaths) {\n for (const ext of extensions) {\n const fullPath = path.resolve(cwd, basePath + ext);\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n // Also check for index files in directories\n const indexPath = path.resolve(cwd, basePath, \"index\" + ext);\n if (fs.existsSync(indexPath)) {\n return indexPath;\n }\n }\n }\n\n // Fallback to example if not found (for internal framework dev) or throw error\n // For now, we'll try the example paths as a last resort before failing\n const exampleClient = path.resolve(cwd, \"src/example/client/index.tsx\");\n const exampleServer = path.resolve(cwd, \"src/example/server/index.ts\");\n\n if (\n searchPaths.some((p) => p.includes(\"client\")) &&\n fs.existsSync(exampleClient)\n )\n return exampleClient;\n if (\n searchPaths.some((p) => p.includes(\"server\")) &&\n fs.existsSync(exampleServer)\n )\n return exampleServer;\n\n throw new Error(\n `Could not find entry point. Searched in: ${searchPaths.join(\", \")}`\n );\n};\n\nconst getViewsLoaderPath = () => {\n const viewsDir = path.resolve(cwd, \"src/views\");\n const hasViews = fs.existsSync(viewsDir);\n const viewsLoaderPath = path.resolve(\n __dirname,\n \"../../node_modules/.cache/arcanajs/views-loader.js\"\n );\n\n // Ensure cache directory exists\n const cacheDir = path.dirname(viewsLoaderPath);\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n\n // Generate the loader file\n const loaderContent = hasViews\n ? `module.exports = require.context('${viewsDir}', true, /\\\\.(tsx|jsx)$/);`\n : `module.exports = null;`;\n\n fs.writeFileSync(viewsLoaderPath, loaderContent);\n return viewsLoaderPath;\n};\n\nexport const createClientConfig = (): webpack.Configuration => {\n const isProduction = process.env.NODE_ENV === \"production\";\n const viewsLoaderPath = getViewsLoaderPath();\n const clientEntry = findEntry([\n \"src/client\",\n \"src/client/index\",\n \"src/index\",\n \"src/main\",\n ]);\n\n return {\n mode: isProduction ? \"production\" : \"development\",\n target: \"web\",\n entry: {\n client: clientEntry,\n },\n output: {\n path: path.resolve(cwd, \"dist/public\"),\n filename: isProduction\n ? \"[name].[contenthash].bundle.js\"\n : \"[name].bundle.js\",\n publicPath: \"/\",\n assetModuleFilename: \"assets/[hash][ext][query]\",\n },\n resolve: {\n extensions: [\".ts\", \".tsx\", \".js\", \".jsx\"],\n alias: {\n \"arcana-views\": viewsLoaderPath,\n },\n },\n resolveLoader: {\n modules: [\"node_modules\", path.resolve(__dirname, \"../../node_modules\")],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx|js|jsx)$/,\n exclude: /node_modules/,\n use: {\n loader: resolveLoader(\"babel-loader\"),\n options: {\n presets: [\n resolveLoader(\"@babel/preset-env\"),\n [\n resolveLoader(\"@babel/preset-react\"),\n { runtime: \"automatic\" },\n ],\n resolveLoader(\"@babel/preset-typescript\"),\n ],\n },\n },\n },\n // CSS Modules rule for .module.css files\n {\n test: /\\.module\\.css$/,\n use: [\n isProduction\n ? MiniCssExtractPlugin.loader\n : resolveLoader(\"style-loader\"),\n {\n loader: resolveLoader(\"css-loader\"),\n options: {\n importLoaders: 1,\n modules: {\n localIdentName: isProduction\n ? \"[hash:base64:8]\"\n : \"[path][name]__[local]--[hash:base64:5]\",\n exportLocalsConvention: \"camelCaseOnly\",\n },\n },\n },\n {\n loader: resolveLoader(\"postcss-loader\"),\n options: {\n postcssOptions: {\n config: path.resolve(cwd, \"postcss.config.js\"),\n },\n },\n },\n ],\n },\n // Global CSS rule for regular .css files\n {\n test: /\\.css$/,\n exclude: /\\.module\\.css$/,\n use: [\n isProduction\n ? MiniCssExtractPlugin.loader\n : resolveLoader(\"style-loader\"),\n {\n loader: resolveLoader(\"css-loader\"),\n options: {\n importLoaders: 1,\n },\n },\n {\n loader: resolveLoader(\"postcss-loader\"),\n options: {\n postcssOptions: {\n config: path.resolve(cwd, \"postcss.config.js\"),\n },\n },\n },\n ],\n },\n {\n test: /\\.(png|jpg|jpeg|gif|svg|woff|woff2|eot|ttf|otf)$/i,\n type: \"asset/resource\",\n },\n ],\n },\n plugins: [\n new CleanWebpackPlugin(),\n new HtmlWebpackPlugin({\n templateContent: `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <!--HEAD_CONTENT-->\n </head>\n <body>\n <div id=\"root\"><!--APP_CONTENT--></div>\n <!--ARCANAJS_DATA_SCRIPT-->\n </body>\n</html>`,\n filename: \"index.html\",\n inject: \"body\",\n minify: isProduction\n ? {\n removeComments: false,\n collapseWhitespace: true,\n removeRedundantAttributes: true,\n useShortDoctype: true,\n removeEmptyAttributes: true,\n removeStyleLinkTypeAttributes: true,\n keepClosingSlash: true,\n minifyJS: true,\n minifyCSS: true,\n minifyURLs: true,\n }\n : false,\n }),\n new MiniCssExtractPlugin({\n filename: isProduction ? \"[name].[contenthash].css\" : \"[name].css\",\n }),\n ],\n optimization: {\n splitChunks: {\n chunks: \"all\",\n cacheGroups: {\n defaultVendors: {\n test: /[\\\\/]node_modules[\\\\/]/,\n priority: -10,\n reuseExistingChunk: true,\n },\n default: {\n minChunks: 2,\n priority: -20,\n reuseExistingChunk: true,\n },\n react: {\n test: /[\\\\/]node_modules[\\\\/](react|react-dom|scheduler)[\\\\/]/,\n name: \"react-vendor\",\n chunks: \"all\",\n priority: 10,\n },\n },\n },\n },\n performance: {\n maxEntrypointSize: 512000,\n maxAssetSize: 512000,\n hints: isProduction ? \"warning\" : false,\n },\n devtool: isProduction ? \"source-map\" : \"eval-source-map\",\n };\n};\n\nexport const createServerConfig = (): webpack.Configuration => {\n const isProduction = process.env.NODE_ENV === \"production\";\n const serverEntry = findEntry([\n \"src/server\",\n \"src/server/index\",\n \"src/server/main\",\n ]);\n\n const viewsLoaderPath = getViewsLoaderPath();\n\n return {\n mode: isProduction ? \"production\" : \"development\",\n target: \"node\",\n entry: serverEntry,\n output: {\n path: path.resolve(cwd, \"dist\"),\n filename: \"server.js\",\n },\n externals: [\n nodeExternals({\n allowlist: [/^arcanajs/],\n }),\n ],\n resolve: {\n extensions: [\".ts\", \".tsx\", \".js\", \".jsx\"],\n alias: {\n \"arcana-views\": viewsLoaderPath,\n },\n },\n resolveLoader: {\n modules: [\"node_modules\", path.resolve(__dirname, \"../../node_modules\")],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx|js|jsx)$/,\n exclude: /node_modules/,\n use: {\n loader: resolveLoader(\"babel-loader\"),\n options: {\n presets: [\n resolveLoader(\"@babel/preset-env\"),\n [\n resolveLoader(\"@babel/preset-react\"),\n { runtime: \"automatic\" },\n ],\n resolveLoader(\"@babel/preset-typescript\"),\n ],\n },\n },\n },\n // CSS Modules rule for .module.css files on server (for SSR)\n {\n test: /\\.module\\.css$/,\n use: {\n loader: resolveLoader(\"css-loader\"),\n options: {\n modules: {\n localIdentName: isProduction\n ? \"[hash:base64:8]\"\n : \"[path][name]__[local]--[hash:base64:5]\",\n exportLocalsConvention: \"camelCaseOnly\",\n exportOnlyLocals: true, // Only export class names, not CSS\n },\n },\n },\n },\n // Regular CSS files - ignore on server side\n {\n test: /\\.css$/,\n exclude: /\\.module\\.css$/,\n use: resolveLoader(\"null-loader\"),\n },\n {\n test: /\\.(png|jpg|jpeg|gif|svg|woff|woff2|eot|ttf|otf)$/i,\n type: \"asset/resource\",\n generator: {\n emit: false,\n },\n },\n ],\n },\n devtool: isProduction ? \"source-map\" : \"eval-source-map\",\n };\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"ws\");","import type {\n Pool,\n PoolConnection,\n ResultSetHeader,\n RowDataPacket,\n} from \"mysql2/promise\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport type {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\n/**\n * MySQL Database Adapter\n */\nexport class MySQLAdapter implements DatabaseAdapter {\n private pool: Pool | null = null;\n private connection: PoolConnection | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const mysql = dynamicRequire(\"mysql2/promise\");\n\n this.pool = mysql.createPool({\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.username,\n password: config.password,\n waitForConnections: true,\n connectionLimit: config.pool?.max || 10,\n queueLimit: 0,\n });\n\n return {\n query: this.query.bind(this),\n execute: this.execute.bind(this),\n close: this.disconnect.bind(this),\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.pool) {\n await this.pool.end();\n this.pool = null;\n }\n }\n\n async query(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [rows] = await this.pool.query<RowDataPacket[]>(sql, params);\n return rows;\n }\n\n async execute(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [result] = await this.pool.execute<ResultSetHeader>(sql, params);\n return result;\n }\n\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n const columnDefs = columns\n .map((col) => {\n let def = `\\`${col.name}\\` ${this.mapType(col.type, col.length)}`;\n\n if (col.unsigned) def += \" UNSIGNED\";\n if (col.autoIncrement) def += \" AUTO_INCREMENT\";\n if (!col.nullable) def += \" NOT NULL\";\n if (col.default !== undefined) {\n def += ` DEFAULT ${this.formatValue(col.default)}`;\n }\n if (col.primary) def += \" PRIMARY KEY\";\n if (col.unique) def += \" UNIQUE\";\n\n return def;\n })\n .join(\", \");\n\n const sql = `CREATE TABLE IF NOT EXISTS \\`${tableName}\\` (${columnDefs}) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`;\n await this.execute(sql);\n }\n\n async dropTable(tableName: string): Promise<void> {\n await this.execute(`DROP TABLE IF EXISTS \\`${tableName}\\``);\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT COUNT(*) as count FROM information_schema.tables \n WHERE table_schema = DATABASE() AND table_name = ?`,\n [tableName]\n );\n return result[0]?.count > 0;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT COUNT(*) as count FROM information_schema.columns \n WHERE table_schema = DATABASE() AND table_name = ? AND column_name = ?`,\n [tableName, columnName]\n );\n return result[0]?.count > 0;\n }\n\n async select(table: string, options: SelectOptions): Promise<any[]> {\n const columns = options.columns?.join(\", \") || \"*\";\n let sql = `SELECT ${columns} FROM \\`${table}\\``;\n const params: any[] = [];\n\n // Joins\n if (options.joins && options.joins.length > 0) {\n for (const join of options.joins) {\n sql += ` ${join.type} JOIN \\`${join.table}\\` ON ${join.first} ${join.operator} ${join.second}`;\n }\n }\n\n // Where clauses\n if (options.where && options.where.length > 0) {\n const whereParts = options.where.map((clause, index) => {\n const boolean = index === 0 ? \"WHERE\" : clause.boolean;\n const condition = this.buildWhereCondition(clause, params);\n return `${boolean} ${condition}`;\n });\n sql += \" \" + whereParts.join(\" \");\n }\n\n // Order by\n if (options.orderBy && options.orderBy.length > 0) {\n const orderParts = options.orderBy.map(\n (o) => `\\`${o.column}\\` ${o.direction}`\n );\n sql += ` ORDER BY ${orderParts.join(\", \")}`;\n }\n\n // Limit and offset\n if (options.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return await this.query(sql, params);\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const placeholders = values.map(() => \"?\").join(\", \");\n\n const sql = `INSERT INTO \\`${table}\\` (${keys\n .map((k) => `\\`${k}\\``)\n .join(\", \")}) VALUES (${placeholders})`;\n const result = await this.execute(sql, values);\n\n return { id: result.insertId, ...data };\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const setParts = keys.map((k) => `\\`${k}\\` = ?`).join(\", \");\n\n const sql = `UPDATE \\`${table}\\` SET ${setParts} WHERE id = ?`;\n await this.execute(sql, [...values, id]);\n\n return { id, ...data };\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n const sql = `DELETE FROM \\`${table}\\` WHERE id = ?`;\n const result = await this.execute(sql, [id]);\n return result.affectedRows > 0;\n }\n\n async beginTransaction(): Promise<void> {\n if (!this.pool) throw new Error(\"Database not connected\");\n this.connection = await this.pool.getConnection();\n await this.connection.beginTransaction();\n }\n\n async commit(): Promise<void> {\n if (!this.connection) throw new Error(\"No active transaction\");\n await this.connection.commit();\n this.connection.release();\n this.connection = null;\n }\n\n async rollback(): Promise<void> {\n if (!this.connection) throw new Error(\"No active transaction\");\n await this.connection.rollback();\n this.connection.release();\n this.connection = null;\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [result] = await this.pool.execute(query, params);\n return result;\n }\n\n private buildWhereCondition(clause: WhereClause, params: any[]): string {\n const column = `\\`${clause.column}\\``;\n\n switch (clause.operator) {\n case \"IN\":\n const inPlaceholders = (clause.value as any[])\n .map(() => \"?\")\n .join(\", \");\n params.push(...clause.value);\n return `${column} IN (${inPlaceholders})`;\n\n case \"NOT IN\":\n const notInPlaceholders = (clause.value as any[])\n .map(() => \"?\")\n .join(\", \");\n params.push(...clause.value);\n return `${column} NOT IN (${notInPlaceholders})`;\n\n case \"BETWEEN\":\n params.push(clause.value[0], clause.value[1]);\n return `${column} BETWEEN ? AND ?`;\n\n case \"IS NULL\":\n return `${column} IS NULL`;\n\n case \"IS NOT NULL\":\n return `${column} IS NOT NULL`;\n\n default:\n params.push(clause.value);\n return `${column} ${clause.operator} ?`;\n }\n }\n\n private mapType(type: string, length?: number): string {\n const typeMap: Record<string, string> = {\n string: length ? `VARCHAR(${length})` : \"VARCHAR(255)\",\n text: \"TEXT\",\n integer: \"INT\",\n bigInteger: \"BIGINT\",\n float: \"FLOAT\",\n double: \"DOUBLE\",\n decimal: \"DECIMAL(10,2)\",\n boolean: \"TINYINT(1)\",\n date: \"DATE\",\n datetime: \"DATETIME\",\n timestamp: \"TIMESTAMP\",\n json: \"JSON\",\n uuid: \"CHAR(36)\",\n };\n return typeMap[type] || type.toUpperCase();\n }\n\n private formatValue(value: any): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value.replace(/'/g, \"''\")}'`;\n if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n if (value instanceof Date)\n return `'${value.toISOString().slice(0, 19).replace(\"T\", \" \")}'`;\n return String(value);\n }\n}\n","import type { Pool, PoolClient, QueryResult } from \"pg\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport type {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\n/**\n * PostgreSQL Database Adapter\n */\nexport class PostgresAdapter implements DatabaseAdapter {\n private pool: Pool | null = null;\n private client: PoolClient | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const { Pool } = dynamicRequire(\"pg\");\n\n this.pool = new Pool({\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.username,\n password: config.password,\n ssl: config.ssl,\n min: config.pool?.min || 2,\n max: config.pool?.max || 10,\n });\n\n return {\n query: this.query.bind(this),\n execute: this.execute.bind(this),\n close: this.disconnect.bind(this),\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.pool) {\n await this.pool.end();\n this.pool = null;\n }\n }\n\n async query(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result: QueryResult = await this.pool.query(sql, params);\n return result.rows;\n }\n\n async execute(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result: QueryResult = await this.pool.query(sql, params);\n return result;\n }\n\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n const columnDefs = columns\n .map((col) => {\n let def = `\"${col.name}\" ${this.mapType(col.type, col.length)}`;\n\n if (col.primary) def += \" PRIMARY KEY\";\n if (col.autoIncrement) def += \" GENERATED ALWAYS AS IDENTITY\";\n if (!col.nullable) def += \" NOT NULL\";\n if (col.unique) def += \" UNIQUE\";\n if (col.default !== undefined) {\n def += ` DEFAULT ${this.formatValue(col.default)}`;\n }\n\n return def;\n })\n .join(\", \");\n\n const sql = `CREATE TABLE IF NOT EXISTS \"${tableName}\" (${columnDefs})`;\n await this.execute(sql);\n }\n\n async dropTable(tableName: string): Promise<void> {\n await this.execute(`DROP TABLE IF EXISTS \"${tableName}\"`);\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT EXISTS (\n SELECT FROM information_schema.tables \n WHERE table_schema = 'public' \n AND table_name = $1\n )`,\n [tableName]\n );\n return result[0]?.exists || false;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT EXISTS (\n SELECT FROM information_schema.columns \n WHERE table_schema = 'public' \n AND table_name = $1 \n AND column_name = $2\n )`,\n [tableName, columnName]\n );\n return result[0]?.exists || false;\n }\n\n async select(table: string, options: SelectOptions): Promise<any[]> {\n const columns = options.columns?.join(\", \") || \"*\";\n let sql = `SELECT ${columns} FROM \"${table}\"`;\n const params: any[] = [];\n let paramIndex = 1;\n\n // Joins\n if (options.joins && options.joins.length > 0) {\n for (const join of options.joins) {\n sql += ` ${join.type} JOIN \"${join.table}\" ON ${join.first} ${join.operator} ${join.second}`;\n }\n }\n\n // Where clauses\n if (options.where && options.where.length > 0) {\n const whereParts = options.where.map((clause, index) => {\n const boolean = index === 0 ? \"WHERE\" : clause.boolean;\n const condition = this.buildWhereCondition(clause, params, paramIndex);\n paramIndex = params.length + 1;\n return `${boolean} ${condition}`;\n });\n sql += \" \" + whereParts.join(\" \");\n }\n\n // Order by\n if (options.orderBy && options.orderBy.length > 0) {\n const orderParts = options.orderBy.map(\n (o) => `\"${o.column}\" ${o.direction}`\n );\n sql += ` ORDER BY ${orderParts.join(\", \")}`;\n }\n\n // Limit and offset\n if (options.limit) {\n sql += ` LIMIT $${paramIndex++}`;\n params.push(options.limit);\n }\n if (options.offset) {\n sql += ` OFFSET $${paramIndex++}`;\n params.push(options.offset);\n }\n\n return await this.query(sql, params);\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const placeholders = values.map((_, i) => `$${i + 1}`).join(\", \");\n\n const sql = `INSERT INTO \"${table}\" (${keys\n .map((k) => `\"${k}\"`)\n .join(\", \")}) \n VALUES (${placeholders}) \n RETURNING *`;\n\n const result = await this.query(sql, values);\n return result[0];\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const setParts = keys.map((k, i) => `\"${k}\" = $${i + 1}`).join(\", \");\n\n const sql = `UPDATE \"${table}\" SET ${setParts} WHERE id = $${\n keys.length + 1\n } RETURNING *`;\n const result = await this.query(sql, [...values, id]);\n return result[0];\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n const sql = `DELETE FROM \"${table}\" WHERE id = $1`;\n const result = await this.execute(sql, [id]);\n return result.rowCount > 0;\n }\n\n async beginTransaction(): Promise<void> {\n if (!this.pool) throw new Error(\"Database not connected\");\n this.client = await this.pool.connect();\n await this.client.query(\"BEGIN\");\n }\n\n async commit(): Promise<void> {\n if (!this.client) throw new Error(\"No active transaction\");\n await this.client.query(\"COMMIT\");\n this.client.release();\n this.client = null;\n }\n\n async rollback(): Promise<void> {\n if (!this.client) throw new Error(\"No active transaction\");\n await this.client.query(\"ROLLBACK\");\n this.client.release();\n this.client = null;\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result = await this.pool.query(query, params);\n return result.rows;\n }\n\n private buildWhereCondition(\n clause: WhereClause,\n params: any[],\n startIndex: number\n ): string {\n const column = `\"${clause.column}\"`;\n\n switch (clause.operator) {\n case \"IN\":\n const inPlaceholders = (clause.value as any[])\n .map((_, i) => `$${startIndex + i}`)\n .join(\", \");\n params.push(...clause.value);\n return `${column} IN (${inPlaceholders})`;\n\n case \"NOT IN\":\n const notInPlaceholders = (clause.value as any[])\n .map((_, i) => `$${startIndex + i}`)\n .join(\", \");\n params.push(...clause.value);\n return `${column} NOT IN (${notInPlaceholders})`;\n\n case \"BETWEEN\":\n params.push(clause.value[0], clause.value[1]);\n return `${column} BETWEEN $${startIndex} AND $${startIndex + 1}`;\n\n case \"IS NULL\":\n return `${column} IS NULL`;\n\n case \"IS NOT NULL\":\n return `${column} IS NOT NULL`;\n\n default:\n params.push(clause.value);\n return `${column} ${clause.operator} $${startIndex}`;\n }\n }\n\n private mapType(type: string, length?: number): string {\n const typeMap: Record<string, string> = {\n string: length ? `VARCHAR(${length})` : \"VARCHAR(255)\",\n text: \"TEXT\",\n integer: \"INTEGER\",\n bigInteger: \"BIGINT\",\n float: \"REAL\",\n double: \"DOUBLE PRECISION\",\n decimal: \"DECIMAL\",\n boolean: \"BOOLEAN\",\n date: \"DATE\",\n datetime: \"TIMESTAMP\",\n timestamp: \"TIMESTAMP\",\n json: \"JSONB\",\n uuid: \"UUID\",\n };\n return typeMap[type] || type.toUpperCase();\n }\n\n private formatValue(value: any): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value.replace(/'/g, \"''\")}'`;\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n if (value instanceof Date) return `'${value.toISOString()}'`;\n return String(value);\n }\n}\n","/**\n * Macroable trait\n * Allows adding custom methods to a class at runtime\n */\nexport class Macroable {\n protected static macros: Record<string, Function> = {};\n\n /**\n * Register a custom macro\n */\n static macro(name: string, macro: Function): void {\n this.macros[name] = macro;\n (this.prototype as any)[name] = macro;\n }\n\n /**\n * Mix another object into the class\n */\n static mixin(mixin: Record<string, Function>): void {\n Object.keys(mixin).forEach((key) => {\n this.macro(key, mixin[key]);\n });\n }\n\n /**\n * Check if macro exists\n */\n static hasMacro(name: string): boolean {\n return !!this.macros[name];\n }\n}\n","import type {\n JoinClause,\n OrderByClause,\n SelectOptions,\n WhereClause,\n} from \"./types\";\n\nimport { Macroable } from \"./support/Macroable\";\n\n/**\n * Query Builder - Fluent interface for building database queries\n * Arcanox Query Builder\n */\nexport class QueryBuilder<T = any> extends Macroable {\n protected tableName: string;\n protected selectColumns: string[] = [\"*\"];\n protected whereClauses: WhereClause[] = [];\n protected orderByClauses: OrderByClause[] = [];\n protected joinClauses: JoinClause[] = [];\n protected limitValue?: number;\n protected offsetValue?: number;\n protected adapter: any; // DatabaseAdapter\n\n constructor(table: string, adapter: any) {\n super();\n this.tableName = table;\n this.adapter = adapter;\n }\n\n /**\n * Select specific columns\n */\n select(...columns: string[]): this {\n this.selectColumns = columns;\n return this;\n }\n\n /**\n * Add a WHERE clause\n */\n where(column: string, operator: any, value?: any): this {\n // Support where(column, value) syntax\n if (value === undefined) {\n value = operator;\n operator = \"=\";\n }\n\n this.whereClauses.push({\n column,\n operator,\n value,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * Add an OR WHERE clause\n */\n orWhere(column: string, operator: any, value?: any): this {\n if (value === undefined) {\n value = operator;\n operator = \"=\";\n }\n\n this.whereClauses.push({\n column,\n operator,\n value,\n boolean: \"OR\",\n });\n return this;\n }\n\n /**\n * WHERE IN clause\n */\n whereIn(column: string, values: any[]): this {\n this.whereClauses.push({\n column,\n operator: \"IN\",\n value: values,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NOT IN clause\n */\n whereNotIn(column: string, values: any[]): this {\n this.whereClauses.push({\n column,\n operator: \"NOT IN\",\n value: values,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE BETWEEN clause\n */\n whereBetween(column: string, range: [any, any]): this {\n this.whereClauses.push({\n column,\n operator: \"BETWEEN\",\n value: range,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NULL clause\n */\n whereNull(column: string): this {\n this.whereClauses.push({\n column,\n operator: \"IS NULL\",\n value: null,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NOT NULL clause\n */\n whereNotNull(column: string): this {\n this.whereClauses.push({\n column,\n operator: \"IS NOT NULL\",\n value: null,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * Add ORDER BY clause\n */\n orderBy(\n column: string,\n direction: \"ASC\" | \"DESC\" | \"asc\" | \"desc\" = \"ASC\"\n ): this {\n this.orderByClauses.push({\n column,\n direction: direction.toUpperCase() as \"ASC\" | \"DESC\",\n });\n return this;\n }\n\n /**\n * Add LIMIT clause\n */\n limit(count: number): this {\n this.limitValue = count;\n return this;\n }\n\n /**\n * Add OFFSET clause\n */\n offset(count: number): this {\n this.offsetValue = count;\n return this;\n }\n\n /**\n * Add JOIN clause\n */\n join(\n table: string,\n first: string,\n operator: string,\n second: string,\n type: \"INNER\" | \"LEFT\" | \"RIGHT\" = \"INNER\"\n ): this {\n this.joinClauses.push({\n type,\n table,\n first,\n operator,\n second,\n });\n return this;\n }\n\n /**\n * Add LEFT JOIN clause\n */\n leftJoin(\n table: string,\n first: string,\n operator: string,\n second: string\n ): this {\n return this.join(table, first, operator, second, \"LEFT\");\n }\n\n /**\n * Add RIGHT JOIN clause\n */\n rightJoin(\n table: string,\n first: string,\n operator: string,\n second: string\n ): this {\n return this.join(table, first, operator, second, \"RIGHT\");\n }\n\n protected eagerLoads: string[] = [];\n protected model: any; // Model class\n\n /**\n * Set the model class\n */\n setModel(model: any): this {\n this.model = model;\n return this;\n }\n\n /**\n * Eager load relationships\n */\n with(relations: string | string[]): this {\n if (Array.isArray(relations)) {\n this.eagerLoads.push(...relations);\n } else {\n this.eagerLoads.push(relations);\n }\n return this;\n }\n\n /**\n * Execute query and get all results\n */\n async get(): Promise<T[]> {\n const options: SelectOptions = {\n columns: this.selectColumns,\n where: this.whereClauses,\n orderBy: this.orderByClauses,\n limit: this.limitValue,\n offset: this.offsetValue,\n joins: this.joinClauses,\n };\n\n const results = await this.adapter.select(this.tableName, options);\n\n if (this.eagerLoads.length > 0 && this.model) {\n return await this.eagerLoadRelations(results);\n }\n\n return results;\n }\n\n /**\n * Eager load relations\n */\n protected async eagerLoadRelations(results: any[]): Promise<any[]> {\n if (results.length === 0) return results;\n\n // Hydrate models first\n const models = results.map((result) => this.model.hydrate(result));\n\n for (const relationName of this.eagerLoads) {\n // Check if relation exists on model\n const instance = new this.model();\n if (typeof instance[relationName] !== \"function\") {\n throw new Error(\n `Relation ${relationName} does not exist on ${this.model.name}`\n );\n }\n\n // Get relation instance\n const relation = instance[relationName]();\n\n // Add constraints for eager loading\n relation.addEagerConstraints(models);\n\n // Get related results\n const relatedResults = await relation.get();\n\n // Match results to models\n relation.match(models, relatedResults, relationName);\n }\n\n return models;\n }\n\n /**\n * Get first result\n */\n async first(): Promise<T | null> {\n this.limit(1);\n const results = await this.get();\n return results[0] || null;\n }\n\n /**\n * Find by ID\n */\n async find(id: any): Promise<T | null> {\n return this.where(\"id\", id).first();\n }\n\n /**\n * Count results\n */\n async count(): Promise<number> {\n this.selectColumns = [\"COUNT(*) as count\"];\n const result = await this.first();\n return result ? (result as any).count : 0;\n }\n\n /**\n * Get specific column values\n */\n async pluck(column: string): Promise<any[]> {\n this.select(column);\n const results = await this.get();\n return results.map((row) => (row as any)[column]);\n }\n\n /**\n * Sum of column\n */\n async sum(column: string): Promise<number> {\n this.selectColumns = [`SUM(${column}) as sum`];\n const result = await this.first();\n return result ? (result as any).sum || 0 : 0;\n }\n\n /**\n * Average of column\n */\n async avg(column: string): Promise<number> {\n this.selectColumns = [`AVG(${column}) as avg`];\n const result = await this.first();\n return result ? (result as any).avg || 0 : 0;\n }\n\n /**\n * Minimum value of column\n */\n async min(column: string): Promise<any> {\n this.selectColumns = [`MIN(${column}) as min`];\n const result = await this.first();\n return result ? (result as any).min : null;\n }\n\n /**\n * Maximum value of column\n */\n async max(column: string): Promise<any> {\n this.selectColumns = [`MAX(${column}) as max`];\n const result = await this.first();\n return result ? (result as any).max : null;\n }\n\n /**\n * Check if any records exist\n */\n async exists(): Promise<boolean> {\n const count = await this.count();\n return count > 0;\n }\n\n /**\n * Paginate results\n */\n async paginate(\n page: number = 1,\n perPage: number = 15\n ): Promise<{\n data: T[];\n total: number;\n perPage: number;\n currentPage: number;\n lastPage: number;\n }> {\n const total = await this.count();\n const offset = (page - 1) * perPage;\n\n this.limit(perPage).offset(offset);\n const data = await this.get();\n\n return {\n data,\n total,\n perPage,\n currentPage: page,\n lastPage: Math.ceil(total / perPage),\n };\n }\n\n /**\n * Clone the query builder\n */\n clone(): QueryBuilder<T> {\n const cloned = new QueryBuilder<T>(this.tableName, this.adapter);\n cloned.selectColumns = [...this.selectColumns];\n cloned.whereClauses = [...this.whereClauses];\n cloned.orderByClauses = [...this.orderByClauses];\n cloned.joinClauses = [...this.joinClauses];\n cloned.limitValue = this.limitValue;\n cloned.offsetValue = this.offsetValue;\n return cloned;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\n\nexport abstract class Relation<R extends Model = any> {\n protected query: QueryBuilder<R>;\n protected parent: Model;\n protected related: new () => R;\n\n constructor(query: QueryBuilder<R>, parent: Model) {\n this.query = query;\n this.parent = parent;\n this.related = (query as any).model;\n this.addConstraints();\n }\n\n abstract addConstraints(): void;\n\n abstract addEagerConstraints(models: Model[]): void;\n\n abstract match(models: Model[], results: R[], relation: string): Model[];\n\n getQuery(): QueryBuilder<R> {\n return this.query;\n }\n\n async get(): Promise<R[]> {\n return this.query.get();\n }\n\n async first(): Promise<R | null> {\n return this.query.first();\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class BelongsTo<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected ownerKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n ownerKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.ownerKey = ownerKey;\n }\n\n addConstraints(): void {\n const foreignValue = this.parent.getAttribute(this.foreignKey);\n this.query.where(this.ownerKey, \"=\", foreignValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.foreignKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.ownerKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.ownerKey);\n dictionary[key] = result;\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.foreignKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n }\n });\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class BelongsToMany<R extends Model = any> extends Relation<R> {\n protected table: string;\n protected foreignPivotKey: string;\n protected relatedPivotKey: string;\n protected parentKey: string;\n protected relatedKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n table: string,\n foreignPivotKey: string,\n relatedPivotKey: string,\n parentKey: string,\n relatedKey: string\n ) {\n super(query, parent);\n this.table = table;\n this.foreignPivotKey = foreignPivotKey;\n this.relatedPivotKey = relatedPivotKey;\n this.parentKey = parentKey;\n this.relatedKey = relatedKey;\n }\n\n addConstraints(): void {\n this.performJoin();\n this.query.where(\n `${this.table}.${this.foreignPivotKey}`,\n \"=\",\n this.parent.getAttribute(this.parentKey)\n );\n }\n\n protected performJoin(query?: QueryBuilder<R>): this {\n const q = query || this.query;\n const relatedTable = this.related.prototype.getTable();\n\n q.join(\n this.table,\n `${relatedTable}.${this.relatedKey}`,\n \"=\",\n `${this.table}.${this.relatedPivotKey}`\n );\n\n return this;\n }\n\n addEagerConstraints(models: Model[]): void {\n this.performJoin();\n const keys = models\n .map((model) => model.getAttribute(this.parentKey))\n .filter((k) => k !== null);\n this.query.whereIn(`${this.table}.${this.foreignPivotKey}`, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R[]> = {};\n\n // In a real implementation, we'd select the pivot fields to map correctly\n // For now, we'll assume the results contain the pivot data or we re-query\n // This is a simplified implementation\n\n // TODO: Implement proper pivot mapping\n // For now, we'll just map based on the assumption that results are correct\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class HasMany<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected localKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n localKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.localKey = localKey;\n }\n\n addConstraints(): void {\n const localValue = this.parent.getAttribute(this.localKey);\n this.query.where(this.foreignKey, \"=\", localValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.localKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.foreignKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R[]> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.foreignKey);\n if (!dictionary[key]) {\n dictionary[key] = [];\n }\n dictionary[key].push(result);\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.localKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n } else {\n model.setRelation(relation, []);\n }\n });\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class HasOne<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected localKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n localKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.localKey = localKey;\n }\n\n addConstraints(): void {\n const localValue = this.parent.getAttribute(this.localKey);\n this.query.where(this.foreignKey, \"=\", localValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.localKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.foreignKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.foreignKey);\n dictionary[key] = result;\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.localKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n }\n });\n\n return models;\n }\n}\n","import { QueryBuilder } from \"./QueryBuilder\";\nimport { BelongsTo } from \"./relations/BelongsTo\";\nimport { BelongsToMany } from \"./relations/BelongsToMany\";\nimport { HasMany } from \"./relations/HasMany\";\nimport { HasOne } from \"./relations/HasOne\";\nimport type { DatabaseAdapter } from \"./types\";\n\n/**\n * Relation types for arcanox relationships\n */\nexport type RelationType = \"hasOne\" | \"hasMany\" | \"belongsTo\" | \"belongsToMany\";\n\nexport interface RelationConfig {\n type: RelationType;\n related: typeof Model;\n foreignKey?: string;\n localKey?: string;\n pivotTable?: string;\n}\n\nimport { Macroable } from \"./support/Macroable\";\n\n/**\n * Base Model class - Arcanox ORM\n */\nexport class Model<T = any> extends Macroable {\n // Static properties\n protected static adapter: DatabaseAdapter;\n protected static tableName: string;\n protected static primaryKey: string = \"id\";\n protected static connection: string = \"default\";\n\n // Instance properties\n protected attributes: Record<string, any> = {};\n protected original: Record<string, any> = {};\n protected relations: Record<string, any> = {};\n protected exists: boolean = false;\n\n // Configuration\n protected fillable: string[] = [];\n protected guarded: string[] = [\"id\"];\n protected hidden: string[] = [];\n protected visible: string[] = [];\n protected casts: Record<string, string> = {};\n protected dates: string[] = [];\n protected timestamps: boolean = true;\n protected createdAt: string = \"created_at\";\n protected updatedAt: string = \"updated_at\";\n protected softDeletes: boolean = false;\n protected deletedAt: string = \"deleted_at\";\n\n /**\n * Set the database adapter\n */\n static setAdapter(adapter: DatabaseAdapter): void {\n this.adapter = adapter;\n }\n\n /**\n * Get the table name\n */\n static getTable(): string {\n if (this.tableName) {\n return this.tableName;\n }\n // Auto-generate table name from class name (pluralize and snake_case)\n const className = this.name;\n return this.pluralize(this.snakeCase(className));\n }\n\n /**\n * Create a new query builder instance\n */\n static query<T>(): QueryBuilder<T> {\n return new QueryBuilder<T>(this.getTable(), this.adapter);\n }\n\n /**\n * Get all records\n */\n static async all<T>(): Promise<T[]> {\n const results = await this.query<T>().get();\n return results.map((data) => this.hydrate<T>(data));\n }\n\n /**\n * Find a record by ID\n */\n static async find<T>(id: any): Promise<T | null> {\n const data = await this.query<T>().where(this.primaryKey, id).first();\n return data ? this.hydrate<T>(data) : null;\n }\n\n /**\n * Find a record by ID or throw exception\n */\n static async findOrFail<T>(id: any): Promise<T> {\n const model = await this.find<T>(id);\n if (!model) {\n throw new Error(`Model not found with ${this.primaryKey}: ${id}`);\n }\n return model;\n }\n\n /**\n * Create a WHERE query\n */\n static where<T>(column: string, operator: any, value?: any): QueryBuilder<T> {\n return this.query<T>().where(column, operator, value);\n }\n\n /**\n * Create a new record\n */\n static async create<T>(data: Partial<T>): Promise<T> {\n const instance = new this() as any;\n instance.fill(data);\n\n if (instance.timestamps) {\n const now = new Date();\n instance.attributes[instance.createdAt] = now;\n instance.attributes[instance.updatedAt] = now;\n }\n\n const result = await this.adapter.insert(\n this.getTable(),\n instance.attributes\n );\n\n const id = result[this.primaryKey] || result.id || result.insertId;\n instance.attributes[this.primaryKey] = id;\n if (this.primaryKey !== \"id\") {\n instance.attributes.id = id;\n }\n\n instance.exists = true;\n instance.syncOriginal();\n\n return instance as T;\n }\n\n /**\n * Update a record\n */\n static async update<T>(id: any, data: Partial<T>): Promise<T> {\n const instance = await this.findOrFail<T>(id);\n await (instance as any).update(data);\n return instance;\n }\n\n /**\n * Delete a record\n */\n static async destroy(id: any): Promise<boolean> {\n const instance = await this.find(id);\n if (!instance) return false;\n return await (instance as any).delete();\n }\n\n /**\n * First or create\n */\n static async firstOrCreate<T>(\n attributes: Partial<T>,\n values: Partial<T> = {}\n ): Promise<T> {\n const query = this.query<T>();\n\n for (const [key, value] of Object.entries(attributes)) {\n query.where(key, value);\n }\n\n const existing = await query.first();\n if (existing) {\n return this.hydrate<T>(existing);\n }\n\n return await this.create<T>({ ...attributes, ...values });\n }\n\n /**\n * Update or create\n */\n static async updateOrCreate<T>(\n attributes: Partial<T>,\n values: Partial<T> = {}\n ): Promise<T> {\n const query = this.query<T>();\n\n for (const [key, value] of Object.entries(attributes)) {\n query.where(key, value);\n }\n\n const existing = await query.first();\n if (existing) {\n const instance = this.hydrate<T>(existing) as any;\n await instance.update(values);\n return instance;\n }\n\n return await this.create<T>({ ...attributes, ...values });\n }\n\n /**\n * Hydrate a model instance from data\n */\n protected static hydrate<T>(data: any): T {\n const instance = new this() as any;\n instance.attributes = { ...data };\n instance.original = { ...data };\n instance.exists = true;\n return instance as T;\n }\n\n /**\n * Fill model attributes\n */\n fill(attributes: Partial<T>): this {\n for (const [key, value] of Object.entries(attributes)) {\n if (this.isFillable(key)) {\n this.setAttribute(key, value);\n }\n }\n return this;\n }\n\n /**\n * Check if attribute is fillable\n */\n protected isFillable(key: string): boolean {\n if (this.fillable.length > 0) {\n return this.fillable.includes(key);\n }\n return !this.guarded.includes(key);\n }\n\n /**\n * Set an attribute\n */\n setAttribute(key: string, value: any): void {\n // Check for mutator\n const mutator = `set${this.studly(key)}Attribute`;\n if (typeof (this as any)[mutator] === \"function\") {\n value = (this as any)[mutator](value);\n }\n\n this.attributes[key] = this.castAttribute(key, value);\n }\n\n /**\n * Get an attribute\n */\n getAttribute(key: string): any {\n // Check for accessor\n const accessor = `get${this.studly(key)}Attribute`;\n if (typeof (this as any)[accessor] === \"function\") {\n return (this as any)[accessor]();\n }\n\n const value = this.attributes[key];\n return this.castAttribute(key, value, true);\n }\n\n /**\n * Cast attribute to specified type\n */\n protected castAttribute(\n key: string,\n value: any,\n isGetting: boolean = false\n ): any {\n if (value === null || value === undefined) return value;\n\n const cast = this.casts[key];\n if (!cast) return value;\n\n if (isGetting) {\n switch (cast) {\n case \"int\":\n case \"integer\":\n return parseInt(value);\n case \"float\":\n case \"double\":\n return parseFloat(value);\n case \"string\":\n return String(value);\n case \"bool\":\n case \"boolean\":\n return Boolean(value);\n case \"array\":\n case \"json\":\n return typeof value === \"string\" ? JSON.parse(value) : value;\n case \"date\":\n case \"datetime\":\n return value instanceof Date ? value : new Date(value);\n default:\n return value;\n }\n } else {\n switch (cast) {\n case \"array\":\n case \"json\":\n return typeof value === \"object\" ? JSON.stringify(value) : value;\n case \"date\":\n case \"datetime\":\n return value instanceof Date ? value : new Date(value);\n default:\n return value;\n }\n }\n }\n\n /**\n * Save the model\n */\n async save(): Promise<this> {\n const constructor = this.constructor as typeof Model;\n\n if (this.timestamps) {\n const now = new Date();\n if (!this.exists) {\n this.attributes[this.createdAt] = now;\n }\n this.attributes[this.updatedAt] = now;\n }\n\n if (this.exists) {\n // Update existing record\n const id = this.attributes[constructor.primaryKey];\n await constructor.adapter.update(\n constructor.getTable(),\n id,\n this.attributes\n );\n } else {\n // Insert new record\n const result = await constructor.adapter.insert(\n constructor.getTable(),\n this.attributes\n );\n\n const id = result[constructor.primaryKey] || result.id || result.insertId;\n this.attributes[constructor.primaryKey] = id;\n if (constructor.primaryKey !== \"id\") {\n this.attributes.id = id;\n }\n\n this.exists = true;\n }\n\n this.syncOriginal();\n return this;\n }\n\n /**\n * Update the model\n */\n async update(attributes: Partial<T>): Promise<this> {\n this.fill(attributes);\n return await this.save();\n }\n\n /**\n * Delete the model\n */\n async delete(): Promise<boolean> {\n const constructor = this.constructor as typeof Model;\n\n if (this.softDeletes) {\n this.attributes[this.deletedAt] = new Date();\n await this.save();\n return true;\n }\n\n const id = this.attributes[constructor.primaryKey];\n return await constructor.adapter.delete(constructor.getTable(), id);\n }\n\n /**\n * Force delete (ignore soft deletes)\n */\n async forceDelete(): Promise<boolean> {\n const constructor = this.constructor as typeof Model;\n const id = this.attributes[constructor.primaryKey];\n return await constructor.adapter.delete(constructor.getTable(), id);\n }\n\n /**\n * Restore soft deleted model\n */\n async restore(): Promise<this> {\n if (this.softDeletes) {\n this.attributes[this.deletedAt] = null;\n await this.save();\n }\n return this;\n }\n\n /**\n * Sync original attributes\n */\n protected syncOriginal(): void {\n this.original = { ...this.attributes };\n }\n\n /**\n * Get dirty attributes (changed since last sync)\n */\n getDirty(): Record<string, any> {\n const dirty: Record<string, any> = {};\n for (const [key, value] of Object.entries(this.attributes)) {\n if (this.original[key] !== value) {\n dirty[key] = value;\n }\n }\n return dirty;\n }\n\n /**\n * Check if model is dirty\n */\n isDirty(): boolean {\n return Object.keys(this.getDirty()).length > 0;\n }\n\n constructor(attributes: Partial<T> = {}) {\n super();\n this.fill(attributes);\n }\n\n /**\n * Convert model to JSON\n */\n toJSON(): Record<string, any> {\n const json: Record<string, any> = {};\n\n // Add attributes\n for (const [key, value] of Object.entries(this.attributes)) {\n if (this.hidden.includes(key)) continue;\n if (this.visible.length > 0 && !this.visible.includes(key)) continue;\n json[key] = this.getAttribute(key);\n }\n\n // Add relations\n for (const [key, value] of Object.entries(this.relations)) {\n json[key] = value;\n }\n\n return json;\n }\n\n /**\n * Define a one-to-one relationship\n */\n hasOne<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n localKey?: string\n ): HasOne<R> {\n const instance = new related();\n const foreign = foreignKey || `${this.constructor.name.toLowerCase()}_id`;\n const local = localKey || \"id\";\n\n return new HasOne<R>(instance.newQuery(), this, foreign, local);\n }\n\n /**\n * Define a one-to-many relationship\n */\n hasMany<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n localKey?: string\n ): HasMany<R> {\n const instance = new related();\n const foreign = foreignKey || `${this.constructor.name.toLowerCase()}_id`;\n const local = localKey || \"id\";\n\n return new HasMany<R>(instance.newQuery(), this, foreign, local);\n }\n\n /**\n * Define an inverse one-to-one or many relationship\n */\n belongsTo<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n ownerKey?: string\n ): BelongsTo<R> {\n const instance = new related();\n const foreign =\n foreignKey || `${instance.constructor.name.toLowerCase()}_id`;\n const owner = ownerKey || \"id\";\n\n return new BelongsTo<R>(instance.newQuery(), this, foreign, owner);\n }\n\n /**\n * Define a many-to-many relationship\n */\n belongsToMany<R extends Model>(\n related: new () => R,\n table?: string,\n foreignPivotKey?: string,\n relatedPivotKey?: string,\n parentKey?: string,\n relatedKey?: string\n ): BelongsToMany<R> {\n const instance = new related();\n const pivotTable = table || this.guessPivotTable(instance);\n const foreignPivot =\n foreignPivotKey || `${this.constructor.name.toLowerCase()}_id`;\n const relatedPivot =\n relatedPivotKey || `${instance.constructor.name.toLowerCase()}_id`;\n const parent = parentKey || \"id\";\n const relatedK = relatedKey || \"id\";\n\n return new BelongsToMany<R>(\n instance.newQuery(),\n this,\n pivotTable,\n foreignPivot,\n relatedPivot,\n parent,\n relatedK\n );\n }\n\n /**\n * Guess the pivot table name (alphabetical order of model names)\n */\n protected guessPivotTable(related: Model): string {\n const segments = [\n this.constructor.name.toLowerCase(),\n related.constructor.name.toLowerCase(),\n ];\n segments.sort();\n return segments.join(\"_\");\n }\n\n /**\n * Eager load relationships\n */\n static with<T>(relations: string | string[]): QueryBuilder<T> {\n return this.query<T>().with(relations);\n }\n\n /**\n * Set a loaded relationship\n */\n setRelation(relation: string, value: any): this {\n this.relations[relation] = value;\n return this;\n }\n\n /**\n * Get a loaded relationship\n */\n getRelation(relation: string): any {\n return this.relations[relation];\n }\n\n /**\n * Check if a relationship is loaded\n */\n relationLoaded(relation: string): boolean {\n return this.relations[relation] !== undefined;\n }\n\n /**\n * Create a new query builder for the model\n */\n newQuery(): QueryBuilder<T> {\n return (this.constructor as typeof Model).query<T>();\n }\n\n /**\n * Helper: Convert string to snake_case\n */\n protected static snakeCase(str: string): string {\n return str\n .replace(/([A-Z])/g, \"_$1\")\n .toLowerCase()\n .replace(/^_/, \"\");\n }\n\n /**\n * Helper: Pluralize string (simple implementation)\n */\n protected static pluralize(str: string): string {\n if (str.endsWith(\"y\")) {\n return str.slice(0, -1) + \"ies\";\n }\n if (str.endsWith(\"s\")) {\n return str + \"es\";\n }\n return str + \"s\";\n }\n\n /**\n * Helper: Convert to StudlyCase\n */\n protected studly(str: string): string {\n return str.replace(/(^|_)(\\w)/g, (_, __, c) => c.toUpperCase());\n }\n}\n","import path from \"path\";\nimport { MySQLAdapter } from \"../../lib/arcanox/adapters/MySQLAdapter\";\nimport { PostgresAdapter } from \"../../lib/arcanox/adapters/PostgresAdapter\";\nimport { Model } from \"../../lib/arcanox/Model\";\n\nexport const handleDb = async (args: string[]) => {\n const command = args[0]; // db:seed\n\n if (command !== \"db:seed\") {\n console.error(`Unknown db command: ${command}`);\n process.exit(1);\n }\n\n // Load config\n const configPath = path.resolve(process.cwd(), \"database/config.ts\");\n\n try {\n require(\"ts-node\").register({\n transpileOnly: true,\n compilerOptions: {\n module: \"commonjs\",\n },\n });\n } catch (e) {}\n\n // Use dynamic require to avoid webpack bundling user project files\n const { dynamicRequire } = require(\"../../lib/server/utils/dynamicRequire\");\n\n let config;\n try {\n const module = dynamicRequire(configPath);\n config = module.default || module.databaseConfig || module;\n } catch (error) {\n console.error(\"Failed to load database config:\", error);\n process.exit(1);\n }\n\n // Connect to DB\n let adapter;\n if (config.type === \"postgres\") {\n adapter = new PostgresAdapter();\n } else if (config.type === \"mysql\") {\n adapter = new MySQLAdapter();\n } else {\n console.error(`Unsupported database type: ${config.type}`);\n process.exit(1);\n }\n\n try {\n await adapter.connect(config);\n Model.setAdapter(adapter); // Set adapter for Models used in seeders\n\n // Load DatabaseSeeder\n const seederPath = path.resolve(\n process.cwd(),\n \"database/seeders/DatabaseSeeder.ts\"\n );\n const seederModule = dynamicRequire(seederPath);\n const DatabaseSeeder = seederModule.default || seederModule.DatabaseSeeder;\n\n if (!DatabaseSeeder) {\n throw new Error(\"DatabaseSeeder not found\");\n }\n\n console.log(\"Seeding database...\");\n const seeder = new DatabaseSeeder();\n await seeder.run();\n console.log(\"Database seeded successfully\");\n } catch (error) {\n console.error(\"Seeding failed:\", error);\n process.exit(1);\n } finally {\n await adapter.disconnect();\n }\n};\n","import fs from \"fs\";\nimport path from \"path\";\n\nexport const handleMake = async (args: string[]) => {\n const type = args[0].split(\":\")[1]; // model, controller, etc.\n const name = args[1];\n\n if (!name) {\n console.error(`Please specify a name for the ${type}`);\n process.exit(1);\n }\n\n switch (type) {\n case \"model\":\n await makeModel(name);\n break;\n case \"controller\":\n await makeController(name);\n break;\n case \"migration\":\n await makeMigration(name);\n break;\n case \"seeder\":\n await makeSeeder(name);\n break;\n case \"factory\":\n await makeFactory(name);\n break;\n default:\n console.error(`Unknown make command: make:${type}`);\n process.exit(1);\n }\n};\n\nconst makeModel = async (name: string) => {\n const content = `import { Model } from 'arcanajs/arcanox'\n\nexport class ${name} extends Model {\n // protected table = '${name.toLowerCase()}s'\n protected fillable = []\n}\n\nexport default ${name}\n`;\n await writeFile(\"app/Models\", `${name}.ts`, content);\n};\n\nconst makeController = async (name: string) => {\n const content = `import type { Request, Response } from 'express'\n\nexport class ${name} {\n async index(req: Request, res: Response) {\n //\n }\n\n async show(req: Request, res: Response) {\n //\n }\n\n async store(req: Request, res: Response) {\n //\n }\n\n async update(req: Request, res: Response) {\n //\n }\n\n async destroy(req: Request, res: Response) {\n //\n }\n}\n\nexport default ${name}\n`;\n await writeFile(\"app/Controllers\", `${name}.ts`, content);\n};\n\nconst makeMigration = async (name: string) => {\n const timestamp = new Date()\n .toISOString()\n .replace(/[-T:.Z]/g, \"\")\n .slice(0, 14);\n const fileName = `${timestamp}_${name}.ts`;\n\n const content = `import { Migration, Schema } from 'arcanajs/arcanox'\n\nexport class ${toPascalCase(name)} extends Migration {\n async up() {\n // await Schema.create('table_name', (table) => {\n // table.id()\n // table.timestamps()\n // })\n }\n\n async down() {\n // await Schema.dropIfExists('table_name')\n }\n}\n\nexport default ${toPascalCase(name)}\n`;\n await writeFile(\"database/migrations\", fileName, content);\n};\n\nconst makeSeeder = async (name: string) => {\n const content = `import { Seeder } from 'arcanajs/arcanox'\n\nexport class ${name} extends Seeder {\n async run() {\n //\n }\n}\n\nexport default ${name}\n`;\n await writeFile(\"database/seeders\", `${name}.ts`, content);\n};\n\nconst makeFactory = async (name: string) => {\n const modelName = name.replace(\"Factory\", \"\");\n const content = `import { Factory } from 'arcanajs/arcanox'\nimport { ${modelName} } from '../../app/Models/${modelName}'\n\nexport class ${name} extends Factory<${modelName}> {\n protected model = ${modelName}\n\n definition() {\n return {\n //\n }\n }\n}\n\nexport default ${name}\n`;\n await writeFile(\"database/factories\", `${name}.ts`, content);\n};\n\nconst writeFile = async (dir: string, fileName: string, content: string) => {\n const targetDir = path.resolve(process.cwd(), dir);\n const targetFile = path.join(targetDir, fileName);\n\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n if (fs.existsSync(targetFile)) {\n console.error(`File already exists: ${targetFile}`);\n process.exit(1);\n }\n\n fs.writeFileSync(targetFile, content);\n console.log(`Created: ${path.join(dir, fileName)}`);\n};\n\nconst toPascalCase = (str: string) => {\n return str.replace(/(^|_)(\\w)/g, (_, __, c) => c.toUpperCase());\n};\n","import type { ColumnDefinition } from \"../types\";\n\n/**\n * Column definition builder - fluent interface for defining columns\n */\nexport class ColumnBuilder {\n private definition: ColumnDefinition;\n\n constructor(name: string, type: string, length?: number) {\n this.definition = {\n name,\n type,\n length,\n nullable: false,\n };\n }\n\n /**\n * Make column nullable\n */\n nullable(): this {\n this.definition.nullable = true;\n return this;\n }\n\n /**\n * Set default value\n */\n default(value: any): this {\n this.definition.default = value;\n return this;\n }\n\n /**\n * Make column unique\n */\n unique(): this {\n this.definition.unique = true;\n return this;\n }\n\n /**\n * Make column primary key\n */\n primary(): this {\n this.definition.primary = true;\n return this;\n }\n\n /**\n * Make column auto-increment\n */\n autoIncrement(): this {\n this.definition.autoIncrement = true;\n return this;\n }\n\n /**\n * Make column unsigned (for numbers)\n */\n unsigned(): this {\n this.definition.unsigned = true;\n return this;\n }\n\n /**\n * Get the column definition\n */\n getDefinition(): ColumnDefinition {\n return this.definition;\n }\n}\n\n/**\n * Foreign key definition builder\n */\nexport class ForeignKeyBuilder {\n private column: string;\n private referencedTable?: string;\n private referencedColumn?: string;\n private onDeleteAction?: string;\n private onUpdateAction?: string;\n\n constructor(column: string) {\n this.column = column;\n }\n\n /**\n * Set referenced table and column\n */\n references(column: string): this {\n this.referencedColumn = column;\n return this;\n }\n\n /**\n * Set referenced table\n */\n on(table: string): this {\n this.referencedTable = table;\n return this;\n }\n\n /**\n * Set ON DELETE action\n */\n onDelete(action: \"CASCADE\" | \"SET NULL\" | \"RESTRICT\" | \"NO ACTION\"): this {\n this.onDeleteAction = action;\n return this;\n }\n\n /**\n * Set ON UPDATE action\n */\n onUpdate(action: \"CASCADE\" | \"SET NULL\" | \"RESTRICT\" | \"NO ACTION\"): this {\n this.onUpdateAction = action;\n return this;\n }\n\n /**\n * Get foreign key SQL\n */\n toSQL(): string {\n if (!this.referencedTable || !this.referencedColumn) {\n throw new Error(\"Foreign key must reference a table and column\");\n }\n\n let sql = `FOREIGN KEY (${this.column}) REFERENCES ${this.referencedTable}(${this.referencedColumn})`;\n\n if (this.onDeleteAction) {\n sql += ` ON DELETE ${this.onDeleteAction}`;\n }\n if (this.onUpdateAction) {\n sql += ` ON UPDATE ${this.onUpdateAction}`;\n }\n\n return sql;\n }\n}\n\n/**\n * Blueprint - defines table structure\n * Arcanox's Schema Blueprint\n */\nexport class Blueprint {\n private tableName: string;\n private columns: ColumnDefinition[] = [];\n private indexes: Array<{\n columns: string[];\n unique: boolean;\n name?: string;\n }> = [];\n private foreignKeys: ForeignKeyBuilder[] = [];\n private primaryKeys: string[] = [];\n\n constructor(tableName: string) {\n this.tableName = tableName;\n }\n\n /**\n * Add auto-incrementing ID column\n */\n id(name: string = \"id\"): ColumnBuilder {\n const col = new ColumnBuilder(name, \"bigInteger\");\n col.primary().autoIncrement().unsigned();\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add UUID column\n */\n uuid(name: string = \"id\"): ColumnBuilder {\n const col = new ColumnBuilder(name, \"uuid\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add string column\n */\n string(name: string, length: number = 255): ColumnBuilder {\n const col = new ColumnBuilder(name, \"string\", length);\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add text column\n */\n text(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"text\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add integer column\n */\n integer(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"integer\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add big integer column\n */\n bigInteger(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"bigInteger\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add decimal column\n */\n decimal(\n name: string,\n precision: number = 10,\n scale: number = 2\n ): ColumnBuilder {\n const col = new ColumnBuilder(name, \"decimal\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add float column\n */\n float(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"float\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add double column\n */\n double(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"double\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add boolean column\n */\n boolean(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"boolean\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add date column\n */\n date(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"date\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add datetime column\n */\n datetime(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"datetime\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add timestamp column\n */\n timestamp(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"timestamp\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add created_at and updated_at timestamps\n */\n timestamps(): void {\n this.timestamp(\"created_at\").nullable();\n this.timestamp(\"updated_at\").nullable();\n }\n\n /**\n * Add deleted_at timestamp for soft deletes\n */\n softDeletes(name: string = \"deleted_at\"): ColumnBuilder {\n return this.timestamp(name).nullable();\n }\n\n /**\n * Add JSON column\n */\n json(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"json\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add enum column\n */\n enum(name: string, values: string[]): ColumnBuilder {\n const col = new ColumnBuilder(name, \"enum\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add foreign key constraint\n */\n foreign(column: string): ForeignKeyBuilder {\n const fk = new ForeignKeyBuilder(column);\n this.foreignKeys.push(fk);\n return fk;\n }\n\n /**\n * Add index\n */\n index(columns: string | string[], name?: string): void {\n const cols = Array.isArray(columns) ? columns : [columns];\n this.indexes.push({ columns: cols, unique: false, name });\n }\n\n /**\n * Add unique index\n */\n unique(columns: string | string[], name?: string): void {\n const cols = Array.isArray(columns) ? columns : [columns];\n this.indexes.push({ columns: cols, unique: true, name });\n }\n\n /**\n * Set primary key\n */\n primary(columns: string | string[]): void {\n this.primaryKeys = Array.isArray(columns) ? columns : [columns];\n }\n\n /**\n * Get all columns\n */\n getColumns(): ColumnDefinition[] {\n return this.columns;\n }\n\n /**\n * Get table name\n */\n getTableName(): string {\n return this.tableName;\n }\n\n /**\n * Get indexes\n */\n getIndexes() {\n return this.indexes;\n }\n\n /**\n * Get foreign keys\n */\n getForeignKeys() {\n return this.foreignKeys;\n }\n}\n","import type { DatabaseAdapter } from \"../types\";\nimport { Blueprint } from \"./Blueprint\";\n\n/**\n * Schema - ArcnanJS schema builder\n * Provides fluent interface for creating and modifying database tables\n */\nexport class Schema {\n private static adapter: DatabaseAdapter;\n\n /**\n * Set the database adapter\n */\n static setAdapter(adapter: DatabaseAdapter): void {\n this.adapter = adapter;\n }\n\n /**\n * Create a new table\n */\n static async create(\n tableName: string,\n callback: (table: Blueprint) => void\n ): Promise<void> {\n const blueprint = new Blueprint(tableName);\n callback(blueprint);\n\n await this.adapter.createTable(tableName, blueprint.getColumns());\n }\n\n /**\n * Modify an existing table\n */\n static async table(\n tableName: string,\n callback: (table: Blueprint) => void\n ): Promise<void> {\n const blueprint = new Blueprint(tableName);\n callback(blueprint);\n\n // For now, this is a simplified implementation\n // In a full implementation, this would generate ALTER TABLE statements\n console.warn(\n \"Schema.table() is not fully implemented yet. Use migrations for complex alterations.\"\n );\n }\n\n /**\n * Drop a table\n */\n static async drop(tableName: string): Promise<void> {\n await this.adapter.dropTable(tableName);\n }\n\n /**\n * Drop a table if it exists\n */\n static async dropIfExists(tableName: string): Promise<void> {\n const exists = await this.hasTable(tableName);\n if (exists) {\n await this.drop(tableName);\n }\n }\n\n /**\n * Rename a table\n */\n static async rename(from: string, to: string): Promise<void> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.rename() not yet implemented\");\n }\n\n /**\n * Check if a table exists\n */\n static async hasTable(tableName: string): Promise<boolean> {\n return await this.adapter.hasTable(tableName);\n }\n\n /**\n * Check if a column exists in a table\n */\n static async hasColumn(\n tableName: string,\n columnName: string\n ): Promise<boolean> {\n return await this.adapter.hasColumn(tableName, columnName);\n }\n\n /**\n * Get all tables\n */\n static async getTables(): Promise<string[]> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.getTables() not yet implemented\");\n }\n\n /**\n * Get all columns for a table\n */\n static async getColumns(tableName: string): Promise<string[]> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.getColumns() not yet implemented\");\n }\n}\n","import { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport { Schema } from \"./Schema\";\n\n/**\n * Base Migration class\n * All migrations should extend this class and implement up() and down() methods\n */\nexport abstract class Migration {\n /**\n * Run the migration\n */\n abstract up(): Promise<void>;\n\n /**\n * Reverse the migration\n */\n abstract down(): Promise<void>;\n}\n\n/**\n * Migration status\n */\nexport interface MigrationStatus {\n name: string;\n batch: number;\n ranAt: Date;\n}\n\n/**\n * Migration record in database\n */\nexport interface MigrationRecord {\n id?: number;\n migration: string;\n batch: number;\n created_at?: Date;\n}\n\n/**\n * Migration Runner - executes migrations\n */\nexport class MigrationRunner {\n private adapter: any;\n private migrationsTable: string = \"migrations\";\n private migrationsPath: string;\n\n constructor(adapter: any, migrationsPath: string) {\n this.adapter = adapter;\n this.migrationsPath = migrationsPath;\n }\n\n /**\n * Ensure migrations table exists\n */\n private async ensureMigrationsTable(): Promise<void> {\n const exists = await Schema.hasTable(this.migrationsTable);\n if (!exists) {\n await Schema.create(this.migrationsTable, (table) => {\n table.id();\n table.string(\"migration\");\n table.integer(\"batch\");\n table.timestamp(\"created_at\").nullable();\n });\n }\n }\n\n /**\n * Get all ran migrations\n */\n private async getRanMigrations(): Promise<MigrationRecord[]> {\n await this.ensureMigrationsTable();\n return await this.adapter.select(this.migrationsTable, {\n orderBy: [{ column: \"batch\", direction: \"ASC\" }],\n });\n }\n\n /**\n * Get pending migrations\n */\n private async getPendingMigrations(): Promise<string[]> {\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n\n const ranMigrations = await this.getRanMigrations();\n const ranNames = ranMigrations.map((m) => m.migration);\n\n const files = fs.readdirSync(this.migrationsPath);\n const migrationFiles = files\n .filter((f) => f.endsWith(\".ts\") || f.endsWith(\".js\"))\n .filter((f) => !ranNames.includes(f.replace(/\\.(ts|js)$/, \"\")))\n .sort();\n\n return migrationFiles;\n }\n\n /**\n * Run pending migrations\n */\n async run(): Promise<void> {\n const path = await import(\"path\");\n const pendingMigrations = await this.getPendingMigrations();\n\n if (pendingMigrations.length === 0) {\n console.log(\"No pending migrations\");\n return;\n }\n\n const ranMigrations = await this.getRanMigrations();\n const nextBatch =\n ranMigrations.length > 0\n ? Math.max(...ranMigrations.map((m) => m.batch)) + 1\n : 1;\n\n console.log(`Running ${pendingMigrations.length} migration(s)...`);\n\n for (const file of pendingMigrations) {\n const migrationPath = path.resolve(this.migrationsPath, file);\n const migrationName = file.replace(/\\.(ts|js)$/, \"\");\n\n try {\n // Dynamic import of migration\n const MigrationClass = await this.loadMigration(migrationPath);\n const migration = new MigrationClass();\n\n console.log(`Migrating: ${migrationName}`);\n await migration.up();\n\n // Record migration\n await this.adapter.insert(this.migrationsTable, {\n migration: migrationName,\n batch: nextBatch,\n created_at: new Date(),\n });\n\n console.log(`Migrated: ${migrationName}`);\n } catch (error) {\n console.error(`Failed to migrate ${migrationName}:`, error);\n throw error;\n }\n }\n\n console.log(\"Migrations completed successfully\");\n }\n\n /**\n * Rollback last batch of migrations\n */\n async rollback(steps: number = 1): Promise<void> {\n const ranMigrations = await this.getRanMigrations();\n\n if (ranMigrations.length === 0) {\n console.log(\"No migrations to rollback\");\n return;\n }\n\n const maxBatch = Math.max(...ranMigrations.map((m) => m.batch));\n const minBatch = maxBatch - steps + 1;\n\n const migrationsToRollback = ranMigrations\n .filter((m) => m.batch >= minBatch && m.batch <= maxBatch)\n .reverse();\n\n console.log(`Rolling back ${migrationsToRollback.length} migration(s)...`);\n\n const path = await import(\"path\");\n\n for (const record of migrationsToRollback) {\n const migrationPath = path.resolve(\n this.migrationsPath,\n `${record.migration}.ts`\n );\n\n try {\n const MigrationClass = await this.loadMigration(migrationPath);\n const migration = new MigrationClass();\n\n console.log(`Rolling back: ${record.migration}`);\n await migration.down();\n\n // Remove migration record\n await this.adapter.delete(this.migrationsTable, record.id);\n\n console.log(`Rolled back: ${record.migration}`);\n } catch (error) {\n console.error(`Failed to rollback ${record.migration}:`, error);\n throw error;\n }\n }\n\n console.log(\"Rollback completed successfully\");\n }\n\n /**\n * Reset all migrations\n */\n async reset(): Promise<void> {\n const ranMigrations = await this.getRanMigrations();\n const batches = Math.max(...ranMigrations.map((m) => m.batch));\n await this.rollback(batches);\n }\n\n /**\n * Reset and re-run all migrations\n */\n async fresh(): Promise<void> {\n await this.reset();\n await this.run();\n }\n\n /**\n * Get migration status\n */\n async status(): Promise<MigrationStatus[]> {\n const ranMigrations = await this.getRanMigrations();\n return ranMigrations.map((m) => ({\n name: m.migration,\n batch: m.batch,\n ranAt: m.created_at || new Date(),\n }));\n }\n\n /**\n * Load migration class from file\n */\n private async loadMigration(filePath: string): Promise<any> {\n // Use dynamic require to avoid webpack bundling\n const migrationModule = dynamicRequire(filePath);\n const MigrationClass = migrationModule.default || migrationModule;\n\n if (!MigrationClass || typeof MigrationClass !== \"function\") {\n throw new Error(\n `Migration file ${filePath} does not export a valid migration class`\n );\n }\n\n // Validate that it's a concrete class extending Migration\n // Check if the class has the required methods\n const instance = new MigrationClass();\n if (\n typeof instance.up !== \"function\" ||\n typeof instance.down !== \"function\"\n ) {\n throw new Error(\n `Migration class in ${filePath} must implement up() and down() methods`\n );\n }\n\n return MigrationClass;\n }\n}\n","import path from \"path\";\nimport { MySQLAdapter } from \"../../lib/arcanox/adapters/MySQLAdapter\";\nimport { PostgresAdapter } from \"../../lib/arcanox/adapters/PostgresAdapter\";\nimport { MigrationRunner } from \"../../lib/arcanox/schema/Migration\";\n\nexport const handleMigrate = async (args: string[]) => {\n const command = args[0]; // migrate, migrate:rollback, etc.\n\n // Load config\n const configPath = path.resolve(process.cwd(), \"database/config.ts\");\n\n // Dynamic require helper\n const { dynamicRequire } = require(\"../../lib/server/utils/dynamicRequire\");\n\n // We need to register ts-node to load the config if it's a TS file\n try {\n dynamicRequire(\"ts-node\").register({\n transpileOnly: true,\n compilerOptions: {\n module: \"commonjs\",\n },\n });\n } catch (e) {\n // ts-node might not be installed, try loading js\n }\n\n let config;\n try {\n const module = dynamicRequire(configPath);\n config = module.default || module.databaseConfig || module;\n } catch (error) {\n console.error(\"Failed to load database config:\", error);\n process.exit(1);\n }\n\n // Connect to DB\n let adapter;\n if (config.type === \"postgres\") {\n adapter = new PostgresAdapter();\n } else if (config.type === \"mysql\") {\n adapter = new MySQLAdapter();\n } else {\n console.error(`Unsupported database type: ${config.type}`);\n process.exit(1);\n }\n\n try {\n await adapter.connect(config);\n\n const migrationsPath = path.resolve(process.cwd(), \"database/migrations\");\n const runner = new MigrationRunner(adapter, migrationsPath);\n\n switch (command) {\n case \"migrate\":\n await runner.run();\n break;\n case \"migrate:rollback\":\n await runner.rollback();\n break;\n case \"migrate:reset\":\n await runner.reset();\n break;\n case \"migrate:fresh\":\n await runner.fresh();\n break;\n case \"migrate:status\":\n const status = await runner.status();\n console.table(status);\n break;\n default:\n console.error(`Unknown migrate command: ${command}`);\n process.exit(1);\n }\n } catch (error) {\n console.error(\"Migration failed:\", error);\n process.exit(1);\n } finally {\n await adapter.disconnect();\n }\n};\n","import { spawn } from \"child_process\";\nimport path from \"path\";\nimport webpack from \"webpack\";\nimport { createClientConfig, createServerConfig } from \"./webpack.config\";\n\ndeclare module \"webpack-node-externals\";\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nif (!command) {\n console.error(\"Please specify a command: init, dev, build, start\");\n process.exit(1);\n}\n\nconst runCompiler = (compiler: webpack.Compiler) => {\n return new Promise<void>((resolve, reject) => {\n compiler.run((err, stats) => {\n if (err) {\n console.error(err);\n return reject(err);\n }\n if (stats && stats.hasErrors()) {\n console.error(stats.toString({ colors: true }));\n return reject(new Error(\"Webpack build failed\"));\n }\n console.log(stats?.toString({ colors: true }));\n resolve();\n });\n });\n};\n\nlet serverProcess: ReturnType<typeof spawn> | null = null;\n\nimport { WebSocketServer } from \"ws\";\n\nconst startDevServer = (hmrPort: number): Promise<void> => {\n return new Promise((resolve) => {\n if (serverProcess) {\n serverProcess.kill();\n }\n\n const serverPath = path.resolve(process.cwd(), \"dist/server.js\");\n serverProcess = spawn(\"node\", [serverPath], {\n stdio: [\"inherit\", \"pipe\", \"inherit\"],\n env: { ...process.env, ARCANA_HMR_PORT: hmrPort.toString() },\n });\n\n serverProcess.stdout?.on(\"data\", (data) => {\n process.stdout.write(data);\n if (data.toString().includes(\"Server is running\")) {\n resolve();\n }\n });\n\n serverProcess.on(\"close\", (code) => {\n if (code !== 0 && code !== null) {\n console.error(`Dev server exited with code ${code}`);\n }\n });\n });\n};\n\nconst watchCompiler = (\n compiler: webpack.Compiler,\n onBuildComplete?: () => void\n) => {\n compiler.watch({}, (err, stats) => {\n if (err) {\n console.error(err);\n return;\n }\n console.log(stats?.toString({ colors: true }));\n\n if (stats && !stats.hasErrors() && onBuildComplete) {\n onBuildComplete();\n }\n });\n};\n\nconst build = async () => {\n process.env.NODE_ENV = \"production\";\n console.log(\"Building for production...\");\n\n const clientConfig = createClientConfig();\n const serverConfig = createServerConfig();\n\n try {\n await runCompiler(webpack(clientConfig));\n await runCompiler(webpack(serverConfig));\n console.log(\"Build complete.\");\n } catch (error) {\n console.error(\"Build failed:\", error);\n process.exit(1);\n }\n};\n\nconst dev = async () => {\n process.env.NODE_ENV = \"development\";\n console.log(\"Starting development server...\");\n\n // Start HMR WebSocket Server\n const HMR_PORT = 3001;\n const wss = new WebSocketServer({ port: HMR_PORT });\n console.log(`HMR Server running on port ${HMR_PORT}`);\n\n const broadcastReload = () => {\n wss.clients.forEach((client) => {\n if (client.readyState === 1) {\n client.send(JSON.stringify({ type: \"reload\" }));\n }\n });\n };\n\n const clientConfig = createClientConfig();\n const serverConfig = createServerConfig();\n\n let isServerBuilding = false;\n let pendingReload = false;\n\n const serverCompiler = webpack(serverConfig);\n serverCompiler.hooks.invalid.tap(\"ArcanaJS\", () => {\n isServerBuilding = true;\n });\n\n // Watch client\n watchCompiler(webpack(clientConfig), () => {\n console.log(\"Client build complete.\");\n if (isServerBuilding) {\n console.log(\"Server is building. Waiting to reload...\");\n pendingReload = true;\n } else {\n console.log(\"Reloading browsers...\");\n broadcastReload();\n }\n });\n\n // Watch server and restart on build\n watchCompiler(serverCompiler, async () => {\n console.log(\"Server build complete. Restarting server...\");\n await startDevServer(HMR_PORT);\n isServerBuilding = false;\n if (pendingReload) {\n console.log(\"Pending reload found. Reloading browsers...\");\n broadcastReload();\n pendingReload = false;\n }\n });\n};\n\nconst start = () => {\n process.env.NODE_ENV = \"production\";\n const serverPath = path.resolve(process.cwd(), \"dist/server.js\");\n console.log(`Starting server at ${serverPath}...`);\n\n const child = spawn(\"node\", [serverPath], { stdio: \"inherit\" });\n\n child.on(\"close\", (code) => {\n process.exit(code || 0);\n });\n};\n\nimport { handleDb } from \"./commands/db\";\nimport { handleMake } from \"./commands/make\";\nimport { handleMigrate } from \"./commands/migrate\";\n\nswitch (command) {\n case \"build\":\n build();\n break;\n case \"dev\":\n dev();\n break;\n case \"start\":\n start();\n break;\n default:\n if (command.startsWith(\"make:\")) {\n handleMake(args);\n } else if (command.startsWith(\"migrate\")) {\n handleMigrate(args);\n } else if (command.startsWith(\"db:\")) {\n handleDb(args);\n } else {\n console.error(`Unknown command: ${command}`);\n process.exit(1);\n }\n}\n"],"names":["dynamicRequire","id","__non_webpack_require__","eval","module","exports","require","__webpack_module_cache__","leafPrototypes","getProto","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","Object","getPrototypeOf","obj","t","value","mode","this","then","ns","create","r","def","current","indexOf","getOwnPropertyNames","forEach","key","definition","o","defineProperty","enumerable","get","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","cwd","process","resolveLoader","loader","resolve","findEntry","searchPaths","extensions","basePath","ext","fullPath","path","fs","indexPath","exampleClient","exampleServer","some","p","includes","Error","join","getViewsLoaderPath","viewsDir","hasViews","viewsLoaderPath","__dirname","cacheDir","recursive","loaderContent","createClientConfig","isProduction","env","NODE_ENV","target","entry","client","output","filename","publicPath","assetModuleFilename","alias","modules","rules","test","exclude","use","options","presets","runtime","MiniCssExtractPlugin","importLoaders","localIdentName","exportLocalsConvention","postcssOptions","config","type","plugins","CleanWebpackPlugin","HtmlWebpackPlugin","templateContent","inject","minify","removeComments","collapseWhitespace","removeRedundantAttributes","useShortDoctype","removeEmptyAttributes","removeStyleLinkTypeAttributes","keepClosingSlash","minifyJS","minifyCSS","minifyURLs","optimization","splitChunks","chunks","cacheGroups","defaultVendors","priority","reuseExistingChunk","default","minChunks","react","name","performance","maxEntrypointSize","maxAssetSize","hints","devtool","createServerConfig","serverEntry","externals","nodeExternals","allowlist","exportOnlyLocals","generator","emit","MySQLAdapter","pool","connection","connect","_config$pool","mysql","createPool","host","port","database","user","username","password","waitForConnections","connectionLimit","max","queueLimit","query","bind","execute","close","disconnect","end","sql","params","rows","result","createTable","tableName","columns","map","col","mapType","length","unsigned","autoIncrement","nullable","formatValue","primary","unique","dropTable","hasTable","_result$","count","hasColumn","columnName","_result$2","select","table","_options$columns","joins","first","operator","second","where","clause","index","boolean","buildWhereCondition","orderBy","column","direction","limit","push","offset","insert","data","keys","values","placeholders","k","insertId","update","delete","affectedRows","beginTransaction","getConnection","commit","release","rollback","raw","inPlaceholders","notInPlaceholders","string","text","integer","bigInteger","float","double","decimal","date","datetime","timestamp","json","uuid","toUpperCase","replace","Date","toISOString","slice","String","PostgresAdapter","_config$pool2","Pool","ssl","min","exists","paramIndex","condition","_","i","rowCount","startIndex","Macroable","macro","macros","mixin","hasMacro","QueryBuilder","selectColumns","whereClauses","orderByClauses","joinClauses","constructor","adapter","super","orWhere","whereIn","whereNotIn","whereBetween","range","whereNull","whereNotNull","limitValue","offsetValue","leftJoin","rightJoin","eagerLoads","setModel","model","with","relations","Array","isArray","results","eagerLoadRelations","models","hydrate","relationName","instance","relation","addEagerConstraints","relatedResults","match","find","pluck","row","sum","avg","paginate","page","perPage","total","currentPage","lastPage","Math","ceil","clone","cloned","Relation","parent","related","addConstraints","getQuery","BelongsTo","foreignKey","ownerKey","foreignValue","getAttribute","filter","dictionary","setRelation","BelongsToMany","foreignPivotKey","relatedPivotKey","parentKey","relatedKey","performJoin","q","relatedTable","getTable","HasMany","localKey","localValue","HasOne","Model","attributes","original","fillable","guarded","hidden","visible","casts","dates","timestamps","createdAt","updatedAt","softDeletes","deletedAt","setAdapter","className","pluralize","snakeCase","all","primaryKey","findOrFail","fill","now","syncOriginal","destroy","firstOrCreate","entries","existing","updateOrCreate","isFillable","setAttribute","mutator","studly","castAttribute","accessor","isGetting","cast","parseInt","parseFloat","Boolean","JSON","parse","stringify","save","forceDelete","restore","getDirty","dirty","isDirty","toJSON","hasOne","foreign","toLowerCase","local","newQuery","hasMany","belongsTo","owner","belongsToMany","pivotTable","guessPivotTable","foreignPivot","relatedPivot","relatedK","segments","sort","getRelation","relationLoaded","str","endsWith","__","c","handleDb","async","command","args","console","error","exit","configPath","transpileOnly","compilerOptions","e","databaseConfig","seederModule","DatabaseSeeder","log","seeder","run","handleMake","split","makeModel","makeController","makeMigration","makeSeeder","makeFactory","content","writeFile","fileName","toPascalCase","modelName","dir","targetDir","targetFile","ColumnBuilder","getDefinition","ForeignKeyBuilder","references","referencedColumn","on","referencedTable","onDelete","action","onDeleteAction","onUpdate","onUpdateAction","toSQL","Blueprint","indexes","foreignKeys","primaryKeys","precision","scale","enum","fk","cols","getColumns","getTableName","getIndexes","getForeignKeys","Schema","callback","blueprint","warn","drop","dropIfExists","rename","from","to","getTables","Migration","MigrationRunner","migrationsTable","migrationsPath","ensureMigrationsTable","getRanMigrations","getPendingMigrations","ranNames","m","migration","readdirSync","f","pendingMigrations","ranMigrations","nextBatch","batch","file","migrationPath","migrationName","loadMigration","up","created_at","steps","maxBatch","minBatch","migrationsToRollback","reverse","record","down","reset","batches","fresh","status","ranAt","filePath","migrationModule","MigrationClass","handleMigrate","register","runner","argv","runCompiler","compiler","Promise","reject","err","stats","hasErrors","toString","colors","serverProcess","startDevServer","hmrPort","_serverProcess$stdout","kill","serverPath","spawn","stdio","ARCANA_HMR_PORT","stdout","write","code","watchCompiler","onBuildComplete","watch","build","clientConfig","serverConfig","webpack","dev","wss","WebSocketServer","broadcastReload","clients","readyState","send","isServerBuilding","pendingReload","serverCompiler","hooks","invalid","tap","start","startsWith"],"ignoreList":[],"sourceRoot":""}
1
+ {"version":3,"file":"cli/index.js","mappings":"6OAOO,MAAMA,eAAkBC,KAI7B,IAAI,IAAAC,gBACF,MAAMC,EAAUC,OACVC,EAAkC,QAArBH,gBAAGC,EAAiB,eAAC,IAAAD,iBAAgB,QAAhBA,gBAAlBA,gBAAiC,kBAAC,IAAAA,qBAAA,EAAlCA,gBAA8C,QACpE,GAAIG,EACF,OAAOA,EAAcJ,GAEzB,CAAE,MAAOK,GACP,CAKF,OAAOC,KAAK,UAALA,CAAgBN,I,UCvBzBO,EAAOC,QAAUC,QAAQ,K,UCAzBF,EAAOC,QAAUC,QAAQ,U,UCAzBF,EAAOC,QAAUC,QAAQ,O,GCCrBC,yBAA2B,CAAC,ECA5BC,eADAC,SDIJ,SAASC,oBAAoBC,GAE5B,IAAIC,EAAeL,yBAAyBI,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaP,QAGrB,IAAID,EAASG,yBAAyBI,GAAY,CAGjDN,QAAS,CAAC,GAOX,OAHAS,oBAAoBH,GAAUP,EAAQA,EAAOC,QAASK,qBAG/CN,EAAOC,OACf,CErBAK,oBAAoBK,EAAKX,IACxB,IAAIY,EAASZ,GAAUA,EAAOa,WAC7B,IAAOb,EAAiB,QACxB,IAAM,EAEP,OADAM,oBAAoBQ,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,GDNJP,SAAWW,OAAOC,eAAkBC,GAASF,OAAOC,eAAeC,GAASA,GAASA,EAAa,UAQtGZ,oBAAoBa,EAAI,SAASC,EAAOC,GAEvC,GADU,EAAPA,IAAUD,EAAQE,KAAKF,IAChB,EAAPC,EAAU,OAAOD,EACpB,GAAoB,iBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAPC,GAAaD,EAAMP,WAAY,OAAOO,EAC1C,GAAW,GAAPC,GAAoC,mBAAfD,EAAMG,KAAqB,OAAOH,CAC5D,CACA,IAAII,EAAKR,OAAOS,OAAO,MACvBnB,oBAAoBoB,EAAEF,GACtB,IAAIG,EAAM,CAAC,EACXvB,eAAiBA,gBAAkB,CAAC,KAAMC,SAAS,CAAC,GAAIA,SAAS,IAAKA,SAASA,WAC/E,IAAI,IAAIuB,EAAiB,EAAPP,GAAYD,GAA0B,iBAAXQ,GAAyC,mBAAXA,MAA4BxB,eAAeyB,QAAQD,GAAUA,EAAUvB,SAASuB,GAC1JZ,OAAOc,oBAAoBF,GAASG,QAASC,GAASL,EAAIK,GAAO,IAAOZ,EAAMY,IAI/E,OAFAL,EAAa,QAAI,IAAM,EACvBrB,oBAAoBQ,EAAEU,EAAIG,GACnBH,CACR,EExBAlB,oBAAoBQ,EAAI,CAACb,EAASgC,KACjC,IAAI,IAAID,KAAOC,EACX3B,oBAAoB4B,EAAED,EAAYD,KAAS1B,oBAAoB4B,EAAEjC,EAAS+B,IAC5EhB,OAAOmB,eAAelC,EAAS+B,EAAK,CAAEI,YAAY,EAAMC,IAAKJ,EAAWD,MCJ3E1B,oBAAoB4B,EAAI,CAAChB,EAAKoB,IAAUtB,OAAOuB,UAAUC,eAAeC,KAAKvB,EAAKoB,GCClFhC,oBAAoBoB,EAAKzB,IACH,oBAAXyC,QAA0BA,OAAOC,aAC1C3B,OAAOmB,eAAelC,EAASyC,OAAOC,YAAa,CAAEvB,MAAO,WAE7DJ,OAAOmB,eAAelC,EAAS,aAAc,CAAEmB,OAAO,K,2BCLvD,MAAM,uCAA+BlB,QAAQ,iBCAvC,gCAA+BA,QAAQ,U,qRCA7C,MAAM,iCAA+BA,QAAQ,W,qFCA7C,MAAM,8CAA+BA,QAAQ,wBCAvC,6CAA+BA,QAAQ,uB,6GCA7C,MAAM,iDAA+BA,QAAQ,2B,qHCA7C,MAAM,gDAA+BA,QAAQ,0B,mHCS7C,MAAM0C,IAAMC,QAAQD,MAGdE,cAAiBC,GACrBC,QAAwBC,QAAQF,GAK5BG,UAAaC,IACjB,MAAMC,EAAa,CAAC,MAAO,OAAQ,MAAO,QAE1C,IAAK,MAAMC,KAAYF,EACrB,IAAK,MAAMG,KAAOF,EAAY,CAC5B,MAAMG,EAAWC,wBAAAA,QAAaZ,IAAKS,EAAWC,GAC9C,GAAIG,sBAAAA,WAAcF,GAChB,OAAOA,EAGT,MAAMG,EAAYF,wBAAAA,QAAaZ,IAAKS,EAAU,QAAUC,GACxD,GAAIG,sBAAAA,WAAcC,GAChB,OAAOA,CAEX,CAKF,MAAMC,EAAgBH,wBAAAA,QAAaZ,IAAK,gCAClCgB,EAAgBJ,wBAAAA,QAAaZ,IAAK,+BAExC,GACEO,EAAYU,KAAMC,GAAMA,EAAEC,SAAS,YACnCN,sBAAAA,WAAcE,GAEd,OAAOA,EACT,GACER,EAAYU,KAAMC,GAAMA,EAAEC,SAAS,YACnCN,sBAAAA,WAAcG,GAEd,OAAOA,EAET,MAAM,IAAII,MACR,4CAA4Cb,EAAYc,KAAK,UAI3DC,mBAAqBA,KACzB,MAAMC,EAAWX,wBAAAA,QAAaZ,IAAK,uBAC7BwB,EAAWX,sBAAAA,WAAcU,GACzBE,EAAkBb,wBAAAA,QACtBc,UACA,sDAIIC,EAAWf,wBAAAA,QAAaa,GACzBZ,sBAAAA,WAAcc,IACjBd,sBAAAA,UAAac,EAAU,CAAEC,WAAW,IAItC,MAAMC,EAAgBL,EAClB,qCAAqCD,8BACrC,yBAGJ,OADAV,sBAAAA,cAAiBY,EAAiBI,GAC3BJ,GAGIK,mBAAqBA,KAChC,MAAMC,EAAwC,eAAzB9B,QAAQ+B,IAAIC,SAC3BR,EAAkBH,qBAGxB,MAAO,CACL7C,KAAMsD,EAAe,aAAe,cACpCG,OAAQ,MACRC,MAAO,CACLC,OANgB9B,UAAU,CAAC,0BAQ7B+B,OAAQ,CACNzB,KAAMA,wBAAAA,QAAaZ,IAAK,eACxBsC,SAAUP,EACN,iCACA,mBACJQ,WAAY,IACZC,oBAAqB,6BAEvBnC,QAAS,CACPG,WAAY,CAAC,MAAO,OAAQ,MAAO,QACnCiC,MAAO,CACL,eAAgBhB,EAChB,IAAKb,wBAAAA,QAAaZ,IAAK,SAG3BE,cAAe,CACbwC,QAAS,CAAC,eAAgB9B,wBAAAA,QAAac,UAAW,wBAEpDtE,OAAQ,CACNuF,MAAO,CACL,CACEC,KAAM,qBACNC,QAAS,eACTC,IAAK,CACH3C,OAAQD,cAAc,gBACtB6C,QAAS,CACPC,QAAS,CACP9C,cAAc,qBACd,CACEA,cAAc,uBACd,CAAE+C,QAAS,cAEb/C,cAAc,gCAMtB,CACE0C,KAAM,iBACNE,IAAK,CACHf,EACImB,2CAAAA,OACAhD,cAAc,gBAClB,CACEC,OAAQD,cAAc,cACtB6C,QAAS,CACPI,cAAe,EACfT,QAAS,CACPU,eAAgBrB,EACZ,kBACA,yCACJsB,uBAAwB,mBAI9B,CACElD,OAAQD,cAAc,kBACtB6C,QAAS,CACPO,eAAgB,CACdC,OAAQ3C,wBAAAA,QAAaZ,IAAK,0BAOpC,CACE4C,KAAM,SACNC,QAAS,iBACTC,IAAK,CACHf,EACImB,2CAAAA,OACAhD,cAAc,gBAClB,CACEC,OAAQD,cAAc,cACtB6C,QAAS,CACPI,cAAe,IAGnB,CACEhD,OAAQD,cAAc,kBACtB6C,QAAS,CACPO,eAAgB,CACdC,OAAQ3C,wBAAAA,QAAaZ,IAAK,0BAMpC,CACE4C,KAAM,oDACNY,KAAM,oBAIZC,QAAS,CACP,IAAIC,8CAAAA,mBACJ,IAAIC,uCAAJ,CAAsB,CACpBC,gBAAiB,4TAYjBtB,SAAU,aACVuB,OAAQ,OACRC,SAAQ/B,GACJ,CACEgC,gBAAgB,EAChBC,oBAAoB,EACpBC,2BAA2B,EAC3BC,iBAAiB,EACjBC,uBAAuB,EACvBC,+BAA+B,EAC/BC,kBAAkB,EAClBC,UAAU,EACVC,WAAW,EACXC,YAAY,KAIpB,IAAItB,2CAAJ,CAAyB,CACvBZ,SAAUP,EAAe,2BAA6B,gBAG1D0C,aAAc,CACZC,YAAa,CACXC,OAAQ,MACRC,YAAa,CACXC,eAAgB,CACdjC,KAAM,yBACNkC,UAAW,GACXC,oBAAoB,GAEtBC,QAAS,CACPC,UAAW,EACXH,UAAW,GACXC,oBAAoB,GAEtBG,MAAO,CACLtC,KAAM,yDACNuC,KAAM,eACNR,OAAQ,MACRG,SAAU,OAKlBM,YAAa,CACXC,kBAAmB,MACnBC,aAAc,MACdC,QAAOxD,GAAe,WAExByD,QAASzD,EAAe,aAAe,oBAI9B0D,mBAAqBA,KAChC,MAAM1D,EAAwC,eAAzB9B,QAAQ+B,IAAIC,SAC3ByD,EAAcpF,UAAU,CAC5B,yBAGImB,EAAkBH,qBAExB,MAAO,CACL7C,KAAMsD,EAAe,aAAe,cACpCG,OAAQ,OACRC,MAAOuD,EACPrD,OAAQ,CACNzB,KAAMA,wBAAAA,QAAaZ,IAAK,QACxBsC,SAAU,aAEZqD,UAAW,CACTC,0CAAc,CACZC,UAAW,CAAC,gBAGhBxF,QAAS,CACPG,WAAY,CAAC,MAAO,OAAQ,MAAO,QACnCiC,MAAO,CACL,eAAgBhB,EAChB,IAAKb,wBAAAA,QAAaZ,IAAK,SAG3BE,cAAe,CACbwC,QAAS,CAAC,eAAgB9B,wBAAAA,QAAac,UAAW,wBAEpDtE,OAAQ,CACNuF,MAAO,CACL,CACEC,KAAM,qBACNC,QAAS,eACTC,IAAK,CACH3C,OAAQD,cAAc,gBACtB6C,QAAS,CACPC,QAAS,CACP9C,cAAc,qBACd,CACEA,cAAc,uBACd,CAAE+C,QAAS,cAEb/C,cAAc,gCAMtB,CACE0C,KAAM,iBACNE,IAAK,CACH3C,OAAQD,cAAc,cACtB6C,QAAS,CACPL,QAAS,CACPU,eAAgBrB,EACZ,kBACA,yCACJsB,uBAAwB,gBACxByC,kBAAkB,MAM1B,CACElD,KAAM,SACNC,QAAS,iBACTC,IAAK5C,cAAc,gBAErB,CACE0C,KAAM,oDACNY,KAAM,iBACNuC,UAAW,CACTC,MAAM,MAKdR,QAASzD,EAAe,aAAe,oBC/UrC,4BAA+BzE,QAAQ,M,2CCWtC,MAAM2I,aACH7D,OAA6B,KAC7B8D,GAAgB,KAExB,aAAMC,CAAQ5C,GACZ,MAAM,YAAE6C,IAAgBxJ,EAAAA,eAAAA,gBAAe,WACjCyJ,EAAM,aAAa9C,EAAO+C,QAAQ/C,EAAOgD,OAc/C,OAbA7H,KAAK0D,OAAS,IAAIgE,EAAYC,EAAK,CACjCG,KACEjD,EAAOkD,UAAYlD,EAAOmD,SACtB,CACED,SAAUlD,EAAOkD,SACjBC,SAAUnD,EAAOmD,eAEnB7I,UAGFa,KAAK0D,OAAQ+D,UACnBzH,KAAKwH,GAAKxH,KAAK0D,OAAQ8D,GAAG3C,EAAOoD,UAE1B,CACLC,MAAOC,MAAOC,EAAaC,KACzB,MAAM,IAAI3F,MAAM,yDAElB4F,QAASH,MAAOC,EAAaC,KAC3B,MAAM,IAAI3F,MACR,0DAGJ6F,MAAOJ,gBACCnI,KAAKwI,cAGjB,CAEA,gBAAMA,GACAxI,KAAK0D,eACD1D,KAAK0D,OAAO6E,QAClBvI,KAAK0D,OAAS,KACd1D,KAAKwH,GAAK,KAEd,CAGA,iBAAMiB,CACJC,EACAC,GAEA,IAAK3I,KAAKwH,GAAI,MAAM,IAAI9E,MAAM,gCAGxB1C,KAAKwH,GAAGoB,iBAAiBF,EACjC,CAEA,eAAMG,CAAUH,GACd,IAAK1I,KAAKwH,GAAI,MAAM,IAAI9E,MAAM,gCACxB1C,KAAKwH,GAAGsB,WAAWJ,GAAWK,MACtC,CAEA,cAAMC,CAASN,GACb,IAAK1I,KAAKwH,GAAI,MAAM,IAAI9E,MAAM,0BAI9B,aAH0B1C,KAAKwH,GAC5ByB,gBAAgB,CAAExC,KAAMiC,IACxBQ,WACgBC,OAAS,CAC9B,CAEA,eAAMC,CAAUV,EAAmBW,GAGjC,OAAO,CACT,CAGA,YAAMC,CAAOC,EAAelF,GAC1B,IAAKrE,KAAKwH,GAAI,MAAM,IAAI9E,MAAM,0BAE9B,MAAMoG,EAAa9I,KAAKwH,GAAGsB,WAAWS,GAChCC,EAASxJ,KAAKyJ,YAAYpF,EAAQqF,OAAS,IAC3CC,EAAa3J,KAAK4J,gBAAgBvF,EAAQsE,SAEhD,IAAIkB,EAASf,EAAWgB,KAAKN,GAM7B,GAJIG,IACFE,EAASA,EAAOE,QAAQJ,IAGtBtF,EAAQ2F,QAAS,CACnB,MAAMC,EAAY,CAAC,EACnB5F,EAAQ2F,QAAQvJ,QAASyJ,IACvBD,EAAKC,EAAMC,QAA8B,QAApBD,EAAME,UAAsB,GAAK,IAExDP,EAASA,EAAOI,KAAKA,EACvB,CAaA,OAXI5F,EAAQgG,SACVR,EAASA,EAAOS,KAAKjG,EAAQgG,SAG3BhG,EAAQkG,QACVV,EAASA,EAAOU,MAAMlG,EAAQkG,eAGVV,EAAOX,WAGdsB,IAAKC,IAClB,MAAM,IAAEC,KAAQC,GAASF,EACzB,MAAO,CAAEtM,GAAIuM,EAAKA,SAAQC,IAE9B,CAEA,YAAMC,CAAOrB,EAAesB,GAC1B,IAAK7K,KAAKwH,GAAI,MAAM,IAAI9E,MAAM,0BAC9B,MAAMoG,EAAa9I,KAAKwH,GAAGsB,WAAWS,GAGhCkB,EAAM,IAAKI,GACbJ,EAAItM,KACNsM,EAAIC,IAAMD,EAAItM,UACPsM,EAAItM,IAGb,MAAM2M,QAAehC,EAAWiC,UAAUN,GAE1C,MAAO,CACLtM,GAAI2M,EAAOE,WACXN,IAAKI,EAAOE,cACTH,EAEP,CAEA,YAAMI,CACJ1B,EACApL,EACA0M,GAEA,IAAK7K,KAAKwH,GAAI,MAAM,IAAI9E,MAAM,0BAC9B,MAAMoG,EAAa9I,KAAKwH,GAAGsB,WAAWS,GAEhCC,EAAS,CAAEkB,IAAK1K,KAAKkL,YAAY/M,IACjC8M,EAAS,CAAEE,KAAMN,SAEjB/B,EAAWsC,UAAU5B,EAAQyB,GAGnC,MAAMI,QAAgBvC,EAAWwC,QAAQ9B,GACzC,GAAI6B,EAAS,CACX,MAAM,IAAEX,KAAQC,GAASU,EACzB,MAAO,CAAElN,GAAIuM,EAAKA,SAAQC,EAC5B,CACA,OAAO,IACT,CAEA,YAAMY,CAAOhC,EAAepL,GAC1B,IAAK6B,KAAKwH,GAAI,MAAM,IAAI9E,MAAM,0BAC9B,MAAMoG,EAAa9I,KAAKwH,GAAGsB,WAAWS,GAEtC,OAA+B,WADVT,EAAW0C,UAAU,CAAEd,IAAK1K,KAAKkL,YAAY/M,MACpDsN,YAChB,CAGA,sBAAMC,GAEJ,CAGF,SAAMC,CAAIzD,EAAeG,EAAgB,IACvC,IAAKrI,KAAKwH,GACR,MAAM,IAAI9E,MAAM,0BAIlB,MAAc,OAAVwF,EAAuBlI,KAAKwH,SAGnBxH,KAAKwH,GAAGoE,QAAQC,KAAKC,MAAM5D,GAC1C,CAEA,YAAM6D,GACJ,CAGF,cAAMC,GACJ,CAIMvC,WAAAA,CAAYC,GAClB,MAAMF,EAAc,CAAC,EAkDrB,OAhDAE,EAAMjJ,QAASwL,IACb,MAAM9B,EAA2B,OAAlB8B,EAAO9B,OAAkB,MAAQ8B,EAAO9B,OACvD,IAAIrK,EAAQmM,EAAOnM,MAMnB,OAJe,QAAXqK,IACFrK,EAAQE,KAAKkL,YAAYpL,IAGnBmM,EAAOC,UACb,IAAK,IACH1C,EAAOW,GAAUrK,EACjB,MACF,IAAK,KACH0J,EAAOW,GAAU,CAAEgC,IAAKrM,GACxB,MACF,IAAK,IACH0J,EAAOW,GAAU,CAAEiC,IAAKtM,GACxB,MACF,IAAK,IACH0J,EAAOW,GAAU,CAAEkC,IAAKvM,GACxB,MACF,IAAK,KACH0J,EAAOW,GAAU,CAAEmC,KAAMxM,GACzB,MACF,IAAK,KACH0J,EAAOW,GAAU,CAAEoC,KAAMzM,GACzB,MACF,IAAK,KACH0J,EAAOW,GAAU,CAAEqC,IAAKC,MAAMC,QAAQ5M,GAASA,EAAQ,CAACA,IACxD,MACF,IAAK,SACH0J,EAAOW,GAAU,CAAEwC,KAAMF,MAAMC,QAAQ5M,GAASA,EAAQ,CAACA,IACzD,MACF,IAAK,OAEH0J,EAAOW,GAAU,CACfyC,OAAQ,IAAIC,OAAO/M,EAAMgN,QAAQ,KAAM,MAAO,MAEhD,MACF,IAAK,UACHtD,EAAOW,GAAU,KACjB,MACF,IAAK,cACHX,EAAOW,GAAU,CAAEgC,IAAK,SAKvB3C,CACT,CAEQI,eAAAA,CAAgBjB,GACtB,IAAKA,GAA8B,IAAnBA,EAAQQ,QAAgBR,EAAQlG,SAAS,KACvD,OAAO,KAET,MAAMkH,EAAkB,CAAC,EASzB,OARAhB,EAAQlI,QAASsM,IACH,OAARA,IAIFpD,EAAWoD,GAAO,KAGfpD,CACT,CAEQuB,WAAAA,CAAY/M,GAClB,MAAM,SAAE6O,IAAa9O,EAAAA,eAAAA,gBAAe,WACpC,OAAIC,aAAc6O,EAAiB7O,EACjB,iBAAPA,GAAmB6O,EAASC,QAAQ9O,GACtC,IAAI6O,EAAS7O,GAEfA,CACT,ECjQK,MAAM+O,aACHC,KAAoB,KACpBC,WAAoC,KAE5C,aAAM3F,CAAQ5C,GAA6C,IAAAwI,EACzD,MAAMC,GAAQpP,EAAAA,eAAAA,gBAAe,kBAa7B,OAXA8B,KAAKmN,KAAOG,EAAMC,WAAW,CAC3B3F,KAAM/C,EAAO+C,KACbC,KAAMhD,EAAOgD,KACbI,SAAUpD,EAAOoD,SACjBuF,KAAM3I,EAAOkD,SACbC,SAAUnD,EAAOmD,SACjByF,oBAAoB,EACpBC,iBAA4B,QAAXL,EAAAxI,EAAOsI,YAAI,IAAAE,OAAA,EAAXA,EAAaM,MAAO,GACrCC,WAAY,IAGP,CACL1F,MAAOlI,KAAKkI,MAAM2F,KAAK7N,MACvBsI,QAAStI,KAAKsI,QAAQuF,KAAK7N,MAC3BuI,MAAOvI,KAAKwI,WAAWqF,KAAK7N,MAEhC,CAEA,gBAAMwI,GACAxI,KAAKmN,aACDnN,KAAKmN,KAAKW,MAChB9N,KAAKmN,KAAO,KAEhB,CAEA,WAAMjF,CAAME,EAAaC,GACvB,IAAKrI,KAAKmN,KAAM,MAAM,IAAIzK,MAAM,0BAChC,MAAOqL,SAAc/N,KAAKmN,KAAKjF,MAAuBE,EAAKC,GAC3D,OAAO0F,CACT,CAEA,aAAMzF,CAAQF,EAAaC,GACzB,IAAKrI,KAAKmN,KAAM,MAAM,IAAIzK,MAAM,0BAChC,MAAOoI,SAAgB9K,KAAKmN,KAAK7E,QAAyBF,EAAKC,GAC/D,OAAOyC,CACT,CAEA,iBAAMrC,CACJC,EACAC,GAEA,MAiBMP,EAAM,gCAAgCM,QAjBzBC,EAChB6B,IAAKuC,IACJ,IAAI1M,EAAM,KAAK0M,EAAItG,UAAUzG,KAAKgO,QAAQjB,EAAIjI,KAAMiI,EAAI5D,UAWxD,OATI4D,EAAIkB,WAAU5N,GAAO,aACrB0M,EAAImB,gBAAe7N,GAAO,mBACzB0M,EAAIoB,WAAU9N,GAAO,kBACNlB,IAAhB4N,EAAIzG,UACNjG,GAAO,YAAYL,KAAKoO,YAAYrB,EAAIzG,YAEtCyG,EAAIsB,UAAShO,GAAO,gBACpB0M,EAAIuB,SAAQjO,GAAO,WAEhBA,IAERsC,KAAK,gFAGF3C,KAAKsI,QAAQF,EACrB,CAEA,eAAMS,CAAUH,SACR1I,KAAKsI,QAAQ,0BAA0BI,MAC/C,CAEA,cAAMM,CAASN,GAAqC,IAAA6F,EAMlD,OAAgB,QAATA,SALcvO,KAAKkI,MACxB,sHAEA,CAACQ,KAEW,UAAE,IAAA6F,OAAA,EAATA,EAAWC,OAAQ,CAC5B,CAEA,eAAMpF,CAAUV,EAAmBW,GAAsC,IAAAoF,EAMvE,OAAgB,QAATA,SALczO,KAAKkI,MACxB,2IAEA,CAACQ,EAAWW,KAEA,UAAE,IAAAoF,OAAA,EAATA,EAAWD,OAAQ,CAC5B,CAEA,YAAMlF,CAAOC,EAAelF,GAAwC,IAAAqK,EAElE,IAAItG,EAAM,WADqB,QAAfsG,EAAArK,EAAQsE,eAAO,IAAA+F,OAAA,EAAfA,EAAiB/L,KAAK,QAAS,cACT4G,MACtC,MAAMlB,EAAgB,GAGtB,GAAIhE,EAAQsK,OAAStK,EAAQsK,MAAMxF,OAAS,EAC1C,IAAK,MAAMxG,KAAQ0B,EAAQsK,MACzBvG,GAAO,IAAIzF,EAAKmC,eAAenC,EAAK4G,cAAc5G,EAAKiM,SAASjM,EAAKuJ,YAAYvJ,EAAKkM,SAgC1F,OA3BIxK,EAAQqF,OAASrF,EAAQqF,MAAMP,OAAS,IAM1Cf,GAAO,IALY/D,EAAQqF,MAAMc,IAAI,CAACyB,EAAQ6C,IAGrC,GAFmB,IAAVA,EAAc,QAAU7C,EAAO8C,WAC7B/O,KAAKgP,oBAAoB/C,EAAQ5D,MAG7B1F,KAAK,MAI3B0B,EAAQ2F,SAAW3F,EAAQ2F,QAAQb,OAAS,IAI9Cf,GAAO,aAHY/D,EAAQ2F,QAAQQ,IAChC5J,GAAM,KAAKA,EAAEuJ,YAAYvJ,EAAEwJ,aAECzH,KAAK,SAIlC0B,EAAQkG,QACVnC,GAAO,WACPC,EAAO4G,KAAK5K,EAAQkG,QAElBlG,EAAQgG,SACVjC,GAAO,YACPC,EAAO4G,KAAK5K,EAAQgG,eAGTrK,KAAKkI,MAAME,EAAKC,EAC/B,CAEA,YAAMuC,CAAOrB,EAAesB,GAC1B,MAAMqE,EAAOxP,OAAOwP,KAAKrE,GACnBsE,EAASzP,OAAOyP,OAAOtE,GACvBuE,EAAeD,EAAO3E,IAAI,IAAM,KAAK7H,KAAK,MAE1CyF,EAAM,iBAAiBmB,QAAY2F,EACtC1E,IAAK6E,GAAM,KAAKA,OAChB1M,KAAK,kBAAkByM,KAG1B,MAAO,CAAEjR,UAFY6B,KAAKsI,QAAQF,EAAK+G,IAEnBG,YAAazE,EACnC,CAEA,YAAMI,CACJ1B,EACApL,EACA0M,GAEA,MAAMqE,EAAOxP,OAAOwP,KAAKrE,GACnBsE,EAASzP,OAAOyP,OAAOtE,GAGvBzC,EAAM,YAAYmB,WAFP2F,EAAK1E,IAAK6E,GAAM,KAAKA,WAAW1M,KAAK,qBAKtD,aAFM3C,KAAKsI,QAAQF,EAAK,IAAI+G,EAAQhR,IAE7B,CAAEA,QAAO0M,EAClB,CAEA,YAAMU,CAAOhC,EAAepL,GAC1B,MAAMiK,EAAM,iBAAiBmB,mBAE7B,aADqBvJ,KAAKsI,QAAQF,EAAK,CAACjK,KAC1BoR,aAAe,CAC/B,CAEA,sBAAM7D,GACJ,IAAK1L,KAAKmN,KAAM,MAAM,IAAIzK,MAAM,0BAChC1C,KAAKoN,iBAAmBpN,KAAKmN,KAAKqC,sBAC5BxP,KAAKoN,WAAW1B,kBACxB,CAEA,YAAMK,GACJ,IAAK/L,KAAKoN,WAAY,MAAM,IAAI1K,MAAM,+BAChC1C,KAAKoN,WAAWrB,SACtB/L,KAAKoN,WAAWqC,UAChBzP,KAAKoN,WAAa,IACpB,CAEA,cAAMpB,GACJ,IAAKhM,KAAKoN,WAAY,MAAM,IAAI1K,MAAM,+BAChC1C,KAAKoN,WAAWpB,WACtBhM,KAAKoN,WAAWqC,UAChBzP,KAAKoN,WAAa,IACpB,CAEA,SAAMzB,CAAIzD,EAAeG,EAAgB,IACvC,IAAKrI,KAAKmN,KAAM,MAAM,IAAIzK,MAAM,0BAChC,MAAOoI,SAAgB9K,KAAKmN,KAAK7E,QAAQJ,EAAOG,GAChD,OAAOyC,CACT,CAEQkE,mBAAAA,CAAoB/C,EAAqB5D,GAC/C,MAAM8B,EAAS,KAAK8B,EAAO9B,WAE3B,OAAQ8B,EAAOC,UACb,IAAK,KACH,MAAMwD,EAAkBzD,EAAOnM,MAC5B0K,IAAI,IAAM,KACV7H,KAAK,MAER,OADA0F,EAAO4G,QAAQhD,EAAOnM,OACf,GAAGqK,SAAcuF,KAE1B,IAAK,SACH,MAAMC,EAAqB1D,EAAOnM,MAC/B0K,IAAI,IAAM,KACV7H,KAAK,MAER,OADA0F,EAAO4G,QAAQhD,EAAOnM,OACf,GAAGqK,aAAkBwF,KAE9B,IAAK,UAEH,OADAtH,EAAO4G,KAAKhD,EAAOnM,MAAM,GAAImM,EAAOnM,MAAM,IACnC,GAAGqK,oBAEZ,IAAK,UACH,MAAO,GAAGA,YAEZ,IAAK,cACH,MAAO,GAAGA,gBAEZ,QAEE,OADA9B,EAAO4G,KAAKhD,EAAOnM,OACZ,GAAGqK,KAAU8B,EAAOC,aAEjC,CAEQ8B,OAAAA,CAAQlJ,EAAcqE,GAgB5B,MAfwC,CACtCyG,OAAQzG,EAAS,WAAWA,KAAY,eACxC0G,KAAM,OACNC,QAAS,MACTC,WAAY,SACZC,MAAO,QACPC,OAAQ,SACRC,QAAS,gBACTnB,QAAS,aACToB,KAAM,OACNC,SAAU,WACVC,UAAW,YACXC,KAAM,OACNC,KAAM,YAEOzL,IAASA,EAAK0L,aAC/B,CAEQpC,WAAAA,CAAYtO,GAClB,OAAc,OAAVA,EAAuB,OACN,iBAAVA,EAA2B,IAAIA,EAAMgN,QAAQ,KAAM,SACzC,kBAAVhN,EAA4BA,EAAQ,IAAM,IACjDA,aAAiB2Q,KACZ,IAAI3Q,EAAM4Q,cAAcC,MAAM,EAAG,IAAI7D,QAAQ,IAAK,QACpD8D,OAAO9Q,EAChB,ECnQK,MAAM+Q,gBACH1D,KAAoB,KACpBzJ,OAA4B,KAEpC,aAAM+D,CAAQ5C,GAA6C,IAAAwI,EAAAyD,EACzD,MAAM,KAAEC,IAAS7S,EAAAA,eAAAA,gBAAe,MAahC,OAXA8B,KAAKmN,KAAO,IAAI4D,EAAK,CACnBnJ,KAAM/C,EAAO+C,KACbC,KAAMhD,EAAOgD,KACbI,SAAUpD,EAAOoD,SACjBuF,KAAM3I,EAAOkD,SACbC,SAAUnD,EAAOmD,SACjBgJ,IAAKnM,EAAOmM,IACZC,KAAgB,QAAX5D,EAAAxI,EAAOsI,YAAI,IAAAE,OAAA,EAAXA,EAAa4D,MAAO,EACzBtD,KAAgB,QAAXmD,EAAAjM,EAAOsI,YAAI,IAAA2D,OAAA,EAAXA,EAAanD,MAAO,KAGpB,CACLzF,MAAOlI,KAAKkI,MAAM2F,KAAK7N,MACvBsI,QAAStI,KAAKsI,QAAQuF,KAAK7N,MAC3BuI,MAAOvI,KAAKwI,WAAWqF,KAAK7N,MAEhC,CAEA,gBAAMwI,GACAxI,KAAKmN,aACDnN,KAAKmN,KAAKW,MAChB9N,KAAKmN,KAAO,KAEhB,CAEA,WAAMjF,CAAME,EAAaC,GACvB,IAAKrI,KAAKmN,KAAM,MAAM,IAAIzK,MAAM,0BAEhC,aADkC1C,KAAKmN,KAAKjF,MAAME,EAAKC,IACzC0F,IAChB,CAEA,aAAMzF,CAAQF,EAAaC,GACzB,IAAKrI,KAAKmN,KAAM,MAAM,IAAIzK,MAAM,0BAEhC,aADkC1C,KAAKmN,KAAKjF,MAAME,EAAKC,EAEzD,CAEA,iBAAMI,CACJC,EACAC,GAEA,MAgBMP,EAAM,+BAA+BM,OAhBxBC,EAChB6B,IAAKuC,IACJ,IAAI1M,EAAM,IAAI0M,EAAItG,SAASzG,KAAKgO,QAAQjB,EAAIjI,KAAMiI,EAAI5D,UAUtD,OARI4D,EAAIsB,UAAShO,GAAO,gBACpB0M,EAAImB,gBAAe7N,GAAO,iCACzB0M,EAAIoB,WAAU9N,GAAO,aACtB0M,EAAIuB,SAAQjO,GAAO,gBACHlB,IAAhB4N,EAAIzG,UACNjG,GAAO,YAAYL,KAAKoO,YAAYrB,EAAIzG,YAGnCjG,IAERsC,KAAK,eAGF3C,KAAKsI,QAAQF,EACrB,CAEA,eAAMS,CAAUH,SACR1I,KAAKsI,QAAQ,yBAAyBI,KAC9C,CAEA,cAAMM,CAASN,GAAqC,IAAA6F,EASlD,OAAgB,QAATA,SARcvO,KAAKkI,MACxB,gJAKA,CAACQ,KAEW,UAAE,IAAA6F,OAAA,EAATA,EAAW2C,UAAU,CAC9B,CAEA,eAAM9H,CAAUV,EAAmBW,GAAsC,IAAAoF,EAUvE,OAAgB,QAATA,SATczO,KAAKkI,MACxB,gLAMA,CAACQ,EAAWW,KAEA,UAAE,IAAAoF,OAAA,EAATA,EAAWyC,UAAU,CAC9B,CAEA,YAAM5H,CAAOC,EAAelF,GAAwC,IAAAqK,EAElE,IAAItG,EAAM,WADqB,QAAfsG,EAAArK,EAAQsE,eAAO,IAAA+F,OAAA,EAAfA,EAAiB/L,KAAK,QAAS,aACV4G,KACrC,MAAMlB,EAAgB,GACtB,IAAI8I,EAAa,EAGjB,GAAI9M,EAAQsK,OAAStK,EAAQsK,MAAMxF,OAAS,EAC1C,IAAK,MAAMxG,KAAQ0B,EAAQsK,MACzBvG,GAAO,IAAIzF,EAAKmC,cAAcnC,EAAK4G,aAAa5G,EAAKiM,SAASjM,EAAKuJ,YAAYvJ,EAAKkM,SAiCxF,OA5BIxK,EAAQqF,OAASrF,EAAQqF,MAAMP,OAAS,IAO1Cf,GAAO,IANY/D,EAAQqF,MAAMc,IAAI,CAACyB,EAAQ6C,KAC5C,MAAMC,EAAoB,IAAVD,EAAc,QAAU7C,EAAO8C,QACzCqC,EAAYpR,KAAKgP,oBAAoB/C,EAAQ5D,EAAQ8I,GAE3D,OADAA,EAAa9I,EAAOc,OAAS,EACtB,GAAG4F,KAAWqC,MAECzO,KAAK,MAI3B0B,EAAQ2F,SAAW3F,EAAQ2F,QAAQb,OAAS,IAI9Cf,GAAO,aAHY/D,EAAQ2F,QAAQQ,IAChC5J,GAAM,IAAIA,EAAEuJ,WAAWvJ,EAAEwJ,aAEGzH,KAAK,SAIlC0B,EAAQkG,QACVnC,GAAO,WAAW+I,IAClB9I,EAAO4G,KAAK5K,EAAQkG,QAElBlG,EAAQgG,SACVjC,GAAO,YAAY+I,IACnB9I,EAAO4G,KAAK5K,EAAQgG,eAGTrK,KAAKkI,MAAME,EAAKC,EAC/B,CAEA,YAAMuC,CAAOrB,EAAesB,GAC1B,MAAMqE,EAAOxP,OAAOwP,KAAKrE,GACnBsE,EAASzP,OAAOyP,OAAOtE,GACvBuE,EAAeD,EAAO3E,IAAI,CAAC6G,EAAGC,IAAM,IAAIA,EAAI,KAAK3O,KAAK,MAEtDyF,EAAM,gBAAgBmB,OAAW2F,EACpC1E,IAAK6E,GAAM,IAAIA,MACf1M,KAAK,qCACeyM,oCAIvB,aADqBpP,KAAKkI,MAAME,EAAK+G,IACvB,EAChB,CAEA,YAAMlE,CACJ1B,EACApL,EACA0M,GAEA,MAAMqE,EAAOxP,OAAOwP,KAAKrE,GACnBsE,EAASzP,OAAOyP,OAAOtE,GAGvBzC,EAAM,WAAWmB,UAFN2F,EAAK1E,IAAI,CAAC6E,EAAGiC,IAAM,IAAIjC,SAASiC,EAAI,KAAK3O,KAAK,qBAG7DuM,EAAK/F,OAAS,gBAGhB,aADqBnJ,KAAKkI,MAAME,EAAK,IAAI+G,EAAQhR,KACnC,EAChB,CAEA,YAAMoN,CAAOhC,EAAepL,GAC1B,MAAMiK,EAAM,gBAAgBmB,mBAE5B,aADqBvJ,KAAKsI,QAAQF,EAAK,CAACjK,KAC1BoT,SAAW,CAC3B,CAEA,sBAAM7F,GACJ,IAAK1L,KAAKmN,KAAM,MAAM,IAAIzK,MAAM,0BAChC1C,KAAK0D,aAAe1D,KAAKmN,KAAK1F,gBACxBzH,KAAK0D,OAAOwE,MAAM,QAC1B,CAEA,YAAM6D,GACJ,IAAK/L,KAAK0D,OAAQ,MAAM,IAAIhB,MAAM,+BAC5B1C,KAAK0D,OAAOwE,MAAM,UACxBlI,KAAK0D,OAAO+L,UACZzP,KAAK0D,OAAS,IAChB,CAEA,cAAMsI,GACJ,IAAKhM,KAAK0D,OAAQ,MAAM,IAAIhB,MAAM,+BAC5B1C,KAAK0D,OAAOwE,MAAM,YACxBlI,KAAK0D,OAAO+L,UACZzP,KAAK0D,OAAS,IAChB,CAEA,SAAMiI,CAAIzD,EAAeG,EAAgB,IACvC,IAAKrI,KAAKmN,KAAM,MAAM,IAAIzK,MAAM,0BAEhC,aADqB1C,KAAKmN,KAAKjF,MAAMA,EAAOG,IAC9B0F,IAChB,CAEQiB,mBAAAA,CACN/C,EACA5D,EACAmJ,GAEA,MAAMrH,EAAS,IAAI8B,EAAO9B,UAE1B,OAAQ8B,EAAOC,UACb,IAAK,KACH,MAAMwD,EAAkBzD,EAAOnM,MAC5B0K,IAAI,CAAC6G,EAAGC,IAAM,IAAIE,EAAaF,KAC/B3O,KAAK,MAER,OADA0F,EAAO4G,QAAQhD,EAAOnM,OACf,GAAGqK,SAAcuF,KAE1B,IAAK,SACH,MAAMC,EAAqB1D,EAAOnM,MAC/B0K,IAAI,CAAC6G,EAAGC,IAAM,IAAIE,EAAaF,KAC/B3O,KAAK,MAER,OADA0F,EAAO4G,QAAQhD,EAAOnM,OACf,GAAGqK,aAAkBwF,KAE9B,IAAK,UAEH,OADAtH,EAAO4G,KAAKhD,EAAOnM,MAAM,GAAImM,EAAOnM,MAAM,IACnC,GAAGqK,cAAmBqH,UAAmBA,EAAa,IAE/D,IAAK,UACH,MAAO,GAAGrH,YAEZ,IAAK,cACH,MAAO,GAAGA,gBAEZ,QAEE,OADA9B,EAAO4G,KAAKhD,EAAOnM,OACZ,GAAGqK,KAAU8B,EAAOC,aAAasF,IAE9C,CAEQxD,OAAAA,CAAQlJ,EAAcqE,GAgB5B,MAfwC,CACtCyG,OAAQzG,EAAS,WAAWA,KAAY,eACxC0G,KAAM,OACNC,QAAS,UACTC,WAAY,SACZC,MAAO,OACPC,OAAQ,mBACRC,QAAS,UACTnB,QAAS,UACToB,KAAM,OACNC,SAAU,YACVC,UAAW,YACXC,KAAM,QACNC,KAAM,QAEOzL,IAASA,EAAK0L,aAC/B,CAEQpC,WAAAA,CAAYtO,GAClB,OAAc,OAAVA,EAAuB,OACN,iBAAVA,EAA2B,IAAIA,EAAMgN,QAAQ,KAAM,SACzC,kBAAVhN,EAA4BA,EAAQ,OAAS,QACpDA,aAAiB2Q,KAAa,IAAI3Q,EAAM4Q,iBACrCE,OAAO9Q,EAChB,ECtRK,MAAM2R,UACX,cAAoD,CAAC,EAKrD,YAAOC,CAAMjL,EAAciL,GACzB1R,KAAK2R,OAAOlL,GAAQiL,EACnB1R,KAAKiB,UAAkBwF,GAAQiL,CAClC,CAKA,YAAOE,CAAMA,GACXlS,OAAOwP,KAAK0C,GAAOnR,QAASC,IAC1BV,KAAK0R,MAAMhR,EAAKkR,EAAMlR,KAE1B,CAKA,eAAOmR,CAASpL,GACd,QAASzG,KAAK2R,OAAOlL,EACvB,EChBK,MAAMqL,qBAA8BL,UAE/BM,cAA0B,CAAC,KAC3BC,aAA8B,GAC9BC,eAAkC,GAClCC,YAA4B,GAKtCC,WAAAA,CAAY5I,EAAe6I,GACzBC,QACArS,KAAK0I,UAAYa,EACjBvJ,KAAKoS,QAAUA,CACjB,CAKA9I,MAAAA,IAAUX,GAER,OADA3I,KAAK+R,cAAgBpJ,EACd3I,IACT,CAKA0J,KAAAA,CAAMS,EAAgB+B,EAAepM,GAanC,YAXcX,IAAVW,IACFA,EAAQoM,EACRA,EAAW,KAGblM,KAAKgS,aAAa/C,KAAK,CACrB9E,SACA+B,WACApM,QACAiP,QAAS,QAEJ/O,IACT,CAKAsS,OAAAA,CAAQnI,EAAgB+B,EAAepM,GAYrC,YAXcX,IAAVW,IACFA,EAAQoM,EACRA,EAAW,KAGblM,KAAKgS,aAAa/C,KAAK,CACrB9E,SACA+B,WACApM,QACAiP,QAAS,OAEJ/O,IACT,CAKAuS,OAAAA,CAAQpI,EAAgBgF,GAOtB,OANAnP,KAAKgS,aAAa/C,KAAK,CACrB9E,SACA+B,SAAU,KACVpM,MAAOqP,EACPJ,QAAS,QAEJ/O,IACT,CAKAwS,UAAAA,CAAWrI,EAAgBgF,GAOzB,OANAnP,KAAKgS,aAAa/C,KAAK,CACrB9E,SACA+B,SAAU,SACVpM,MAAOqP,EACPJ,QAAS,QAEJ/O,IACT,CAKAyS,YAAAA,CAAatI,EAAgBuI,GAO3B,OANA1S,KAAKgS,aAAa/C,KAAK,CACrB9E,SACA+B,SAAU,UACVpM,MAAO4S,EACP3D,QAAS,QAEJ/O,IACT,CAKA2S,SAAAA,CAAUxI,GAOR,OANAnK,KAAKgS,aAAa/C,KAAK,CACrB9E,SACA+B,SAAU,UACVpM,MAAO,KACPiP,QAAS,QAEJ/O,IACT,CAKA4S,YAAAA,CAAazI,GAOX,OANAnK,KAAKgS,aAAa/C,KAAK,CACrB9E,SACA+B,SAAU,cACVpM,MAAO,KACPiP,QAAS,QAEJ/O,IACT,CAKAgK,OAAAA,CACEG,EACAC,EAA6C,OAM7C,OAJApK,KAAKiS,eAAehD,KAAK,CACvB9E,SACAC,UAAWA,EAAUoG,gBAEhBxQ,IACT,CAKAuK,KAAAA,CAAMiE,GAEJ,OADAxO,KAAK6S,WAAarE,EACXxO,IACT,CAKAqK,MAAAA,CAAOmE,GAEL,OADAxO,KAAK8S,YAActE,EACZxO,IACT,CAKA2C,IAAAA,CACE4G,EACAqF,EACA1C,EACA2C,EACA/J,EAAmC,SASnC,OAPA9E,KAAKkS,YAAYjD,KAAK,CACpBnK,OACAyE,QACAqF,QACA1C,WACA2C,WAEK7O,IACT,CAKA+S,QAAAA,CACExJ,EACAqF,EACA1C,EACA2C,GAEA,OAAO7O,KAAK2C,KAAK4G,EAAOqF,EAAO1C,EAAU2C,EAAQ,OACnD,CAKAmE,SAAAA,CACEzJ,EACAqF,EACA1C,EACA2C,GAEA,OAAO7O,KAAK2C,KAAK4G,EAAOqF,EAAO1C,EAAU2C,EAAQ,QACnD,CAEUoE,WAAuB,GAMjCC,QAAAA,CAASC,GAEP,OADAnT,KAAKmT,MAAQA,EACNnT,IACT,CAKAoT,KAAKC,GAMH,OALI5G,MAAMC,QAAQ2G,GAChBrT,KAAKiT,WAAWhE,QAAQoE,GAExBrT,KAAKiT,WAAWhE,KAAKoE,GAEhBrT,IACT,CAKA,SAAMe,GACJ,MAAMsD,EAAyB,CAC7BsE,QAAS3I,KAAK+R,cACdrI,MAAO1J,KAAKgS,aACZhI,QAAShK,KAAKiS,eACd1H,MAAOvK,KAAK6S,WACZxI,OAAQrK,KAAK8S,YACbnE,MAAO3O,KAAKkS,aAGRoB,QAAgBtT,KAAKoS,QAAQ9I,OAAOtJ,KAAK0I,UAAWrE,GAE1D,OAAIrE,KAAKiT,WAAW9J,OAAS,GAAKnJ,KAAKmT,YACxBnT,KAAKuT,mBAAmBD,GAGhCA,CACT,CAKA,wBAAgBC,CAAmBD,GACjC,GAAuB,IAAnBA,EAAQnK,OAAc,OAAOmK,EAGjC,MAAME,EAASF,EAAQ9I,IAAKM,GAAW9K,KAAKmT,MAAMM,QAAQ3I,IAE1D,IAAK,MAAM4I,KAAgB1T,KAAKiT,WAAY,CAE1C,MAAMU,EAAW,IAAI3T,KAAKmT,MAC1B,GAAsC,mBAA3BQ,EAASD,GAClB,MAAM,IAAIhR,MACR,YAAYgR,uBAAkC1T,KAAKmT,MAAM1M,QAK7D,MAAMmN,EAAWD,EAASD,KAG1BE,EAASC,oBAAoBL,GAG7B,MAAMM,QAAuBF,EAAS7S,MAGtC6S,EAASG,MAAMP,EAAQM,EAAgBJ,EACzC,CAEA,OAAOF,CACT,CAKA,WAAM5E,GAGJ,OAFA5O,KAAKuK,MAAM,UACWvK,KAAKe,OACZ,IAAM,IACvB,CAKA,UAAM+I,CAAK3L,GACT,OAAO6B,KAAK0J,MAAM,KAAMvL,GAAIyQ,OAC9B,CAKA,WAAMJ,GACJxO,KAAK+R,cAAgB,CAAC,qBACtB,MAAMjH,QAAe9K,KAAK4O,QAC1B,OAAO9D,EAAUA,EAAe0D,MAAQ,CAC1C,CAKA,WAAMwF,CAAM7J,GAGV,OAFAnK,KAAKsJ,OAAOa,UACUnK,KAAKe,OACZyJ,IAAKyJ,GAASA,EAAY9J,GAC3C,CAKA,SAAM+J,CAAI/J,GACRnK,KAAK+R,cAAgB,CAAC,OAAO5H,aAC7B,MAAMW,QAAe9K,KAAK4O,QAC1B,OAAO9D,GAAUA,EAAeoJ,KAAW,CAC7C,CAKA,SAAMC,CAAIhK,GACRnK,KAAK+R,cAAgB,CAAC,OAAO5H,aAC7B,MAAMW,QAAe9K,KAAK4O,QAC1B,OAAO9D,GAAUA,EAAeqJ,KAAW,CAC7C,CAKA,SAAMlD,CAAI9G,GACRnK,KAAK+R,cAAgB,CAAC,OAAO5H,aAC7B,MAAMW,QAAe9K,KAAK4O,QAC1B,OAAO9D,EAAUA,EAAemG,IAAM,IACxC,CAKA,SAAMtD,CAAIxD,GACRnK,KAAK+R,cAAgB,CAAC,OAAO5H,aAC7B,MAAMW,QAAe9K,KAAK4O,QAC1B,OAAO9D,EAAUA,EAAe6C,IAAM,IACxC,CAKA,YAAMuD,GAEJ,aADoBlR,KAAKwO,QACV,CACjB,CAKA,cAAM4F,CACJC,EAAe,EACfC,EAAkB,IAQlB,MAAMC,QAAcvU,KAAKwO,QACnBnE,GAAUgK,EAAO,GAAKC,EAK5B,OAHAtU,KAAKuK,MAAM+J,GAASjK,OAAOA,GAGpB,CACLQ,WAHiB7K,KAAKe,MAItBwT,QACAD,UACAE,YAAaH,EACbI,SAAUC,KAAKC,KAAKJ,EAAQD,GAEhC,CAKAM,KAAAA,GACE,MAAMC,EAAS,IAAI/C,aAAgB9R,KAAK0I,UAAW1I,KAAKoS,SAOxD,OANAyC,EAAO9C,cAAgB,IAAI/R,KAAK+R,eAChC8C,EAAO7C,aAAe,IAAIhS,KAAKgS,cAC/B6C,EAAO5C,eAAiB,IAAIjS,KAAKiS,gBACjC4C,EAAO3C,YAAc,IAAIlS,KAAKkS,aAC9B2C,EAAOhC,WAAa7S,KAAK6S,WACzBgC,EAAO/B,YAAc9S,KAAK8S,YACnB+B,CACT,ECvZK,MAAeC,SAKpB3C,WAAAA,CAAYjK,EAAwB6M,GAClC/U,KAAKkI,MAAQA,EACblI,KAAK+U,OAASA,EACd/U,KAAKgV,QAAW9M,EAAciL,MAC9BnT,KAAKiV,gBACP,CAQAC,QAAAA,GACE,OAAOlV,KAAKkI,KACd,CAEA,SAAMnH,GACJ,OAAOf,KAAKkI,MAAMnH,KACpB,CAEA,WAAM6N,GACJ,OAAO5O,KAAKkI,MAAM0G,OACpB,EC3BK,MAAMuG,kBAAyCL,SAIpD3C,WAAAA,CACEjK,EACA6M,EACAK,EACAC,GAEAhD,MAAMnK,EAAO6M,GACb/U,KAAKoV,WAAaA,EAClBpV,KAAKqV,SAAWA,CAClB,CAEAJ,cAAAA,GACE,MAAMK,EAAetV,KAAK+U,OAAOQ,aAAavV,KAAKoV,YACnDpV,KAAKkI,MAAMwB,MAAM1J,KAAKqV,SAAU,IAAKC,EACvC,CAEAzB,mBAAAA,CAAoBL,GAClB,MAAMtE,EAAOsE,EACVhJ,IAAK2I,GAAUA,EAAMoC,aAAavV,KAAKoV,aACvC5L,OAAQ6F,GAAY,OAANA,GACjBrP,KAAKkI,MAAMqK,QAAQvS,KAAKqV,SAAUnG,EACpC,CAEA6E,KAAAA,CAAMP,EAAiBF,EAAcM,GACnC,MAAM4B,EAAgC,CAAC,EAcvC,OAZAlC,EAAQ7S,QAASqK,IACf,MAAMpK,EAAMoK,EAAOyK,aAAavV,KAAKqV,UACrCG,EAAW9U,GAAOoK,IAGpB0I,EAAO/S,QAAS0S,IACd,MAAMzS,EAAMyS,EAAMoC,aAAavV,KAAKoV,YAChCI,EAAW9U,IACbyS,EAAMsC,YAAY7B,EAAU4B,EAAW9U,MAIpC8S,CACT,EC3CK,MAAMkC,sBAA6CZ,SAOxD3C,WAAAA,CACEjK,EACA6M,EACAxL,EACAoM,EACAC,EACAC,EACAC,GAEAzD,MAAMnK,EAAO6M,GACb/U,KAAKuJ,MAAQA,EACbvJ,KAAK2V,gBAAkBA,EACvB3V,KAAK4V,gBAAkBA,EACvB5V,KAAK6V,UAAYA,EACjB7V,KAAK8V,WAAaA,CACpB,CAEAb,cAAAA,GACEjV,KAAK+V,cACL/V,KAAKkI,MAAMwB,MACT,GAAG1J,KAAKuJ,SAASvJ,KAAK2V,kBACtB,IACA3V,KAAK+U,OAAOQ,aAAavV,KAAK6V,WAElC,CAEUE,WAAAA,CAAY7N,GACpB,MAAM8N,EAAI9N,GAASlI,KAAKkI,MAClB+N,EAAejW,KAAKgV,QAAQ/T,UAAUiV,WAS5C,OAPAF,EAAErT,KACA3C,KAAKuJ,MACL,GAAG0M,KAAgBjW,KAAK8V,aACxB,IACA,GAAG9V,KAAKuJ,SAASvJ,KAAK4V,mBAGjB5V,IACT,CAEA6T,mBAAAA,CAAoBL,GAClBxT,KAAK+V,cACL,MAAM7G,EAAOsE,EACVhJ,IAAK2I,GAAUA,EAAMoC,aAAavV,KAAK6V,YACvCrM,OAAQ6F,GAAY,OAANA,GACjBrP,KAAKkI,MAAMqK,QAAQ,GAAGvS,KAAKuJ,SAASvJ,KAAK2V,kBAAmBzG,EAC9D,CAEA6E,KAAAA,CAAMP,EAAiBF,EAAcM,GAUnC,OAAOJ,CACT,EClEK,MAAM2C,gBAAuCrB,SAIlD3C,WAAAA,CACEjK,EACA6M,EACAK,EACAgB,GAEA/D,MAAMnK,EAAO6M,GACb/U,KAAKoV,WAAaA,EAClBpV,KAAKoW,SAAWA,CAClB,CAEAnB,cAAAA,GACE,MAAMoB,EAAarW,KAAK+U,OAAOQ,aAAavV,KAAKoW,UACjDpW,KAAKkI,MAAMwB,MAAM1J,KAAKoV,WAAY,IAAKiB,EACzC,CAEAxC,mBAAAA,CAAoBL,GAClB,MAAMtE,EAAOsE,EACVhJ,IAAK2I,GAAUA,EAAMoC,aAAavV,KAAKoW,WACvC5M,OAAQ6F,GAAY,OAANA,GACjBrP,KAAKkI,MAAMqK,QAAQvS,KAAKoV,WAAYlG,EACtC,CAEA6E,KAAAA,CAAMP,EAAiBF,EAAcM,GACnC,MAAM4B,EAAkC,CAAC,EAmBzC,OAjBAlC,EAAQ7S,QAASqK,IACf,MAAMpK,EAAMoK,EAAOyK,aAAavV,KAAKoV,YAChCI,EAAW9U,KACd8U,EAAW9U,GAAO,IAEpB8U,EAAW9U,GAAKuO,KAAKnE,KAGvB0I,EAAO/S,QAAS0S,IACd,MAAMzS,EAAMyS,EAAMoC,aAAavV,KAAKoW,UAChCZ,EAAW9U,GACbyS,EAAMsC,YAAY7B,EAAU4B,EAAW9U,IAEvCyS,EAAMsC,YAAY7B,EAAU,MAIzBJ,CACT,EChDK,MAAM8C,eAAsCxB,SAIjD3C,WAAAA,CACEjK,EACA6M,EACAK,EACAgB,GAEA/D,MAAMnK,EAAO6M,GACb/U,KAAKoV,WAAaA,EAClBpV,KAAKoW,SAAWA,CAClB,CAEAnB,cAAAA,GACE,MAAMoB,EAAarW,KAAK+U,OAAOQ,aAAavV,KAAKoW,UACjDpW,KAAKkI,MAAMwB,MAAM1J,KAAKoV,WAAY,IAAKiB,EACzC,CAEAxC,mBAAAA,CAAoBL,GAClB,MAAMtE,EAAOsE,EACVhJ,IAAK2I,GAAUA,EAAMoC,aAAavV,KAAKoW,WACvC5M,OAAQ6F,GAAY,OAANA,GACjBrP,KAAKkI,MAAMqK,QAAQvS,KAAKoV,WAAYlG,EACtC,CAEA6E,KAAAA,CAAMP,EAAiBF,EAAcM,GACnC,MAAM4B,EAAgC,CAAC,EAcvC,OAZAlC,EAAQ7S,QAASqK,IACf,MAAMpK,EAAMoK,EAAOyK,aAAavV,KAAKoV,YACrCI,EAAW9U,GAAOoK,IAGpB0I,EAAO/S,QAAS0S,IACd,MAAMzS,EAAMyS,EAAMoC,aAAavV,KAAKoW,UAChCZ,EAAW9U,IACbyS,EAAMsC,YAAY7B,EAAU4B,EAAW9U,MAIpC8S,CACT,ECtBK,MAAM+C,cAAuB9E,UAIlC,kBAAsC,KACtC,kBAAsC,UAG5B+E,WAAkC,CAAC,EACnCC,SAAgC,CAAC,EACjCpD,UAAiC,CAAC,EAClCnC,QAAkB,EAGlBwF,SAAqB,GACrBC,QAAoB,CAAC,MACrBC,OAAmB,GACnBC,QAAoB,GACpBC,MAAgC,CAAC,EACjCC,MAAkB,GAClBC,YAAsB,EACtBC,UAAoB,aACpBC,UAAoB,aACpBC,aAAuB,EACvBC,UAAoB,aAK9B,iBAAOC,CAAWjF,GAChBpS,KAAKoS,QAAUA,CACjB,CAKA,eAAO8D,GACL,GAAIlW,KAAK0I,UACP,OAAO1I,KAAK0I,UAGd,MAAM4O,EAAYtX,KAAKyG,KACvB,OAAOzG,KAAKuX,UAAUvX,KAAKwX,UAAUF,GACvC,CAKA,YAAOpP,GACL,OAAO,IAAI4J,aAAgB9R,KAAKkW,WAAYlW,KAAKoS,QACnD,CAKA,gBAAaqF,GAEX,aADsBzX,KAAKkI,QAAWnH,OACvByJ,IAAKK,GAAS7K,KAAKyT,QAAW5I,GAC/C,CAKA,iBAAaf,CAAQ3L,GACnB,MAAM0M,QAAa7K,KAAKkI,QAAWwB,MAAM1J,KAAK0X,WAAYvZ,GAAIyQ,QAC9D,OAAO/D,EAAO7K,KAAKyT,QAAW5I,GAAQ,IACxC,CAKA,uBAAa8M,CAAcxZ,GACzB,MAAMgV,QAAcnT,KAAK8J,KAAQ3L,GACjC,IAAKgV,EACH,MAAM,IAAIzQ,MAAM,wBAAwB1C,KAAK0X,eAAevZ,KAE9D,OAAOgV,CACT,CAKA,YAAOzJ,CAASS,EAAgB+B,EAAepM,GAC7C,OAAOE,KAAKkI,QAAWwB,MAAMS,EAAQ+B,EAAUpM,EACjD,CAKA,mBAAaK,CAAU0K,GACrB,MAAM8I,EAAW,IAAI3T,KAGrB,GAFA2T,EAASiE,KAAK/M,GAEV8I,EAASqD,WAAY,CACvB,MAAMa,EAAM,IAAIpH,KAChBkD,EAAS6C,WAAW7C,EAASsD,WAAaY,EAC1ClE,EAAS6C,WAAW7C,EAASuD,WAAaW,CAC5C,CAEA,MAAM/M,QAAe9K,KAAKoS,QAAQxH,OAChC5K,KAAKkW,WACLvC,EAAS6C,YAGLrY,EAAK2M,EAAO9K,KAAK0X,aAAe5M,EAAO3M,IAAM2M,EAAOwE,SAS1D,OARAqE,EAAS6C,WAAWxW,KAAK0X,YAAcvZ,EACf,OAApB6B,KAAK0X,aACP/D,EAAS6C,WAAWrY,GAAKA,GAG3BwV,EAASzC,QAAS,EAClByC,EAASmE,eAEFnE,CACT,CAKA,mBAAa1I,CAAU9M,EAAS0M,GAC9B,MAAM8I,QAAiB3T,KAAK2X,WAAcxZ,GAE1C,aADOwV,EAAiB1I,OAAOJ,GACxB8I,CACT,CAKA,oBAAaoE,CAAQ5Z,GACnB,MAAMwV,QAAiB3T,KAAK8J,KAAK3L,GACjC,QAAKwV,SACSA,EAAiBpI,QACjC,CAKA,0BAAayM,CACXxB,EACArH,EAAqB,CAAC,GAEtB,MAAMjH,EAAQlI,KAAKkI,QAEnB,IAAK,MAAOxH,EAAKZ,KAAUJ,OAAOuY,QAAQzB,GACxCtO,EAAMwB,MAAMhJ,EAAKZ,GAGnB,MAAMoY,QAAiBhQ,EAAM0G,QAC7B,OAAIsJ,EACKlY,KAAKyT,QAAWyE,SAGZlY,KAAKG,OAAU,IAAKqW,KAAerH,GAClD,CAKA,2BAAagJ,CACX3B,EACArH,EAAqB,CAAC,GAEtB,MAAMjH,EAAQlI,KAAKkI,QAEnB,IAAK,MAAOxH,EAAKZ,KAAUJ,OAAOuY,QAAQzB,GACxCtO,EAAMwB,MAAMhJ,EAAKZ,GAGnB,MAAMoY,QAAiBhQ,EAAM0G,QAC7B,GAAIsJ,EAAU,CACZ,MAAMvE,EAAW3T,KAAKyT,QAAWyE,GAEjC,aADMvE,EAAS1I,OAAOkE,GACfwE,CACT,CAEA,aAAa3T,KAAKG,OAAU,IAAKqW,KAAerH,GAClD,CAKA,cAAiBsE,CAAW5I,GAC1B,MAAM8I,EAAW,IAAI3T,KAIrB,OAHA2T,EAAS6C,WAAa,IAAK3L,GAC3B8I,EAAS8C,SAAW,IAAK5L,GACzB8I,EAASzC,QAAS,EACXyC,CACT,CAKAiE,IAAAA,CAAKpB,GACH,IAAK,MAAO9V,EAAKZ,KAAUJ,OAAOuY,QAAQzB,GACpCxW,KAAKoY,WAAW1X,IAClBV,KAAKqY,aAAa3X,EAAKZ,GAG3B,OAAOE,IACT,CAKUoY,UAAAA,CAAW1X,GACnB,OAAIV,KAAK0W,SAASvN,OAAS,EAClBnJ,KAAK0W,SAASjU,SAAS/B,IAExBV,KAAK2W,QAAQlU,SAAS/B,EAChC,CAKA2X,YAAAA,CAAa3X,EAAaZ,GAExB,MAAMwY,EAAU,MAAMtY,KAAKuY,OAAO7X,cACI,mBAA1BV,KAAasY,KACvBxY,EAASE,KAAasY,GAASxY,IAGjCE,KAAKwW,WAAW9V,GAAOV,KAAKwY,cAAc9X,EAAKZ,EACjD,CAKAyV,YAAAA,CAAa7U,GAEX,MAAM+X,EAAW,MAAMzY,KAAKuY,OAAO7X,cACnC,GAAuC,mBAA3BV,KAAayY,GACvB,OAAQzY,KAAayY,KAGvB,MAAM3Y,EAAQE,KAAKwW,WAAW9V,GAC9B,OAAOV,KAAKwY,cAAc9X,EAAKZ,GAAO,EACxC,CAKU0Y,aAAAA,CACR9X,EACAZ,EACA4Y,GAAqB,GAErB,GAAI5Y,QAAuC,OAAOA,EAElD,MAAM6Y,EAAO3Y,KAAK8W,MAAMpW,GACxB,IAAKiY,EAAM,OAAO7Y,EAElB,GAAI4Y,EACF,OAAQC,GACN,IAAK,MACL,IAAK,UACH,OAAOC,SAAS9Y,GAClB,IAAK,QACL,IAAK,SACH,OAAO+Y,WAAW/Y,GACpB,IAAK,SACH,OAAO8Q,OAAO9Q,GAChB,IAAK,OACL,IAAK,UACH,OAAOgZ,QAAQhZ,GACjB,IAAK,QACL,IAAK,OACH,MAAwB,iBAAVA,EAAqB+L,KAAKC,MAAMhM,GAASA,EACzD,IAAK,OACL,IAAK,WACH,OAAOA,aAAiB2Q,KAAO3Q,EAAQ,IAAI2Q,KAAK3Q,GAClD,QACE,OAAOA,OAGX,OAAQ6Y,GACN,IAAK,QACL,IAAK,OACH,MAAwB,iBAAV7Y,EAAqB+L,KAAKkN,UAAUjZ,GAASA,EAC7D,IAAK,OACL,IAAK,WACH,OAAOA,aAAiB2Q,KAAO3Q,EAAQ,IAAI2Q,KAAK3Q,GAClD,QACE,OAAOA,EAGf,CAKA,UAAMkZ,GACJ,MAAM7G,EAAcnS,KAAKmS,YAEzB,GAAInS,KAAKgX,WAAY,CACnB,MAAMa,EAAM,IAAIpH,KACXzQ,KAAKkR,SACRlR,KAAKwW,WAAWxW,KAAKiX,WAAaY,GAEpC7X,KAAKwW,WAAWxW,KAAKkX,WAAaW,CACpC,CAEA,GAAI7X,KAAKkR,OAAQ,CAEf,MAAM/S,EAAK6B,KAAKwW,WAAWrE,EAAYuF,kBACjCvF,EAAYC,QAAQnH,OACxBkH,EAAY+D,WACZ/X,EACA6B,KAAKwW,WAET,KAAO,CAEL,MAAM1L,QAAeqH,EAAYC,QAAQxH,OACvCuH,EAAY+D,WACZlW,KAAKwW,YAGDrY,EAAK2M,EAAOqH,EAAYuF,aAAe5M,EAAO3M,IAAM2M,EAAOwE,SACjEtP,KAAKwW,WAAWrE,EAAYuF,YAAcvZ,EACX,OAA3BgU,EAAYuF,aACd1X,KAAKwW,WAAWrY,GAAKA,GAGvB6B,KAAKkR,QAAS,CAChB,CAGA,OADAlR,KAAK8X,eACE9X,IACT,CAKA,YAAMiL,CAAOuL,GAEX,OADAxW,KAAK4X,KAAKpB,SACGxW,KAAKgZ,MACpB,CAKA,YAAMzN,GACJ,MAAM4G,EAAcnS,KAAKmS,YAEzB,GAAInS,KAAKmX,YAGP,OAFAnX,KAAKwW,WAAWxW,KAAKoX,WAAa,IAAI3G,WAChCzQ,KAAKgZ,QACJ,EAGT,MAAM7a,EAAK6B,KAAKwW,WAAWrE,EAAYuF,YACvC,aAAavF,EAAYC,QAAQ7G,OAAO4G,EAAY+D,WAAY/X,EAClE,CAKA,iBAAM8a,GACJ,MAAM9G,EAAcnS,KAAKmS,YACnBhU,EAAK6B,KAAKwW,WAAWrE,EAAYuF,YACvC,aAAavF,EAAYC,QAAQ7G,OAAO4G,EAAY+D,WAAY/X,EAClE,CAKA,aAAM+a,GAKJ,OAJIlZ,KAAKmX,cACPnX,KAAKwW,WAAWxW,KAAKoX,WAAa,WAC5BpX,KAAKgZ,QAENhZ,IACT,CAKU8X,YAAAA,GACR9X,KAAKyW,SAAW,IAAKzW,KAAKwW,WAC5B,CAKA2C,QAAAA,GACE,MAAMC,EAA6B,CAAC,EACpC,IAAK,MAAO1Y,EAAKZ,KAAUJ,OAAOuY,QAAQjY,KAAKwW,YACzCxW,KAAKyW,SAAS/V,KAASZ,IACzBsZ,EAAM1Y,GAAOZ,GAGjB,OAAOsZ,CACT,CAKAC,OAAAA,GACE,OAAO3Z,OAAOwP,KAAKlP,KAAKmZ,YAAYhQ,OAAS,CAC/C,CAEAgJ,WAAAA,CAAYqE,EAAyB,CAAC,GACpCnE,QACArS,KAAK4X,KAAKpB,EACZ,CAKA8C,MAAAA,GACE,MAAMhJ,EAA4B,CAAC,EAGnC,IAAK,MAAO5P,EAAKZ,KAAUJ,OAAOuY,QAAQjY,KAAKwW,YACzCxW,KAAK4W,OAAOnU,SAAS/B,IACrBV,KAAK6W,QAAQ1N,OAAS,IAAMnJ,KAAK6W,QAAQpU,SAAS/B,KACtD4P,EAAK5P,GAAOV,KAAKuV,aAAa7U,IAIhC,IAAK,MAAOA,EAAKZ,KAAUJ,OAAOuY,QAAQjY,KAAKqT,WAC7C/C,EAAK5P,GAAOZ,EAGd,OAAOwQ,CACT,CAKAiJ,MAAAA,CACEvE,EACAI,EACAgB,GAEA,MAAMzC,EAAW,IAAIqB,EACfwE,EAAUpE,GAAc,GAAGpV,KAAKmS,YAAY1L,KAAKgT,mBACjDC,EAAQtD,GAAY,KAE1B,OAAO,IAAIE,OAAU3C,EAASgG,WAAY3Z,KAAMwZ,EAASE,EAC3D,CAKAE,OAAAA,CACE5E,EACAI,EACAgB,GAEA,MAAMzC,EAAW,IAAIqB,EACfwE,EAAUpE,GAAc,GAAGpV,KAAKmS,YAAY1L,KAAKgT,mBACjDC,EAAQtD,GAAY,KAE1B,OAAO,IAAID,QAAWxC,EAASgG,WAAY3Z,KAAMwZ,EAASE,EAC5D,CAKAG,SAAAA,CACE7E,EACAI,EACAC,GAEA,MAAM1B,EAAW,IAAIqB,EACfwE,EACJpE,GAAc,GAAGzB,EAASxB,YAAY1L,KAAKgT,mBACvCK,EAAQzE,GAAY,KAE1B,OAAO,IAAIF,UAAaxB,EAASgG,WAAY3Z,KAAMwZ,EAASM,EAC9D,CAKAC,aAAAA,CACE/E,EACAzL,EACAoM,EACAC,EACAC,EACAC,GAEA,MAAMnC,EAAW,IAAIqB,EACfgF,EAAazQ,GAASvJ,KAAKia,gBAAgBtG,GAC3CuG,EACJvE,GAAmB,GAAG3V,KAAKmS,YAAY1L,KAAKgT,mBACxCU,EACJvE,GAAmB,GAAGjC,EAASxB,YAAY1L,KAAKgT,mBAC5C1E,EAASc,GAAa,KACtBuE,EAAWtE,GAAc,KAE/B,OAAO,IAAIJ,cACT/B,EAASgG,WACT3Z,KACAga,EACAE,EACAC,EACApF,EACAqF,EAEJ,CAKUH,eAAAA,CAAgBjF,GACxB,MAAMqF,EAAW,CACfra,KAAKmS,YAAY1L,KAAKgT,cACtBzE,EAAQ7C,YAAY1L,KAAKgT,eAG3B,OADAY,EAASpQ,OACFoQ,EAAS1X,KAAK,IACvB,CAKA,WAAOyQ,CAAQC,GACb,OAAOrT,KAAKkI,QAAWkL,KAAKC,EAC9B,CAKAoC,WAAAA,CAAY7B,EAAkB9T,GAE5B,OADAE,KAAKqT,UAAUO,GAAY9T,EACpBE,IACT,CAKAsa,WAAAA,CAAY1G,GACV,OAAO5T,KAAKqT,UAAUO,EACxB,CAKA2G,cAAAA,CAAe3G,GACb,YAAoCzU,IAA7Ba,KAAKqT,UAAUO,EACxB,CAKA+F,QAAAA,GACE,OAAQ3Z,KAAKmS,YAA6BjK,OAC5C,CAKA,gBAAiBsP,CAAUgD,GACzB,OAAOA,EACJ1N,QAAQ,WAAY,OACpB2M,cACA3M,QAAQ,KAAM,GACnB,CAKA,gBAAiByK,CAAUiD,GACzB,OAAIA,EAAIC,SAAS,KACRD,EAAI7J,MAAM,GAAI,GAAK,MAExB6J,EAAIC,SAAS,KACRD,EAAM,KAERA,EAAM,GACf,CAKUjC,MAAAA,CAAOiC,GACf,OAAOA,EAAI1N,QAAQ,aAAc,CAACuE,EAAGqJ,EAAIC,IAAMA,EAAEnK,cACnD,ECtlBK,MAAMoK,SAAWzS,UACtB,MAAMyD,EAAUiP,EAAK,GAEL,YAAZjP,IACFkP,QAAQC,MAAM,uBAAuBnP,KACrCrK,QAAQyZ,KAAK,IAIf,MAAMC,EAAa/Y,wBAAAA,QAAaX,QAAQD,MAAO,uBAE/C,IACE1C,oBAAAA,KAAAA,SAA4B,CAC1Bsc,eAAe,EACfC,gBAAiB,CACfzc,OAAQ,aAGd,CAAE,MAAOF,GAAI,CAGb,MAAM,eAAEN,GAAmBU,oBAAQ,IAEnC,IAAIiG,EAUAuN,EATJ,IACE,MAAM1T,EAASR,EAAe+c,GAC9BpW,EAASnG,EAAO4H,SAAW5H,EAAO0c,gBAAkB1c,CACtD,CAAE,MAAOqc,GACPD,QAAQC,MAAM,kCAAmCA,GACjDxZ,QAAQyZ,KAAK,EACf,CAIoB,aAAhBnW,EAAOC,KACTsN,EAAU,IAAIvB,gBACW,YAAhBhM,EAAOC,KAChBsN,EAAU,IAAI7K,aACW,UAAhB1C,EAAOC,KAChBsN,EAAU,IAAIlF,cAEd4N,QAAQC,MAAM,8BAA8BlW,EAAOC,QACnDvD,QAAQyZ,KAAK,IAGf,UACQ5I,EAAQ3K,QAAQ5C,GACtB0R,MAAMc,WAAWjF,GAGjB,MAIMiJ,EAAend,EAJFgE,wBAAAA,QACjBX,QAAQD,MACR,uCAGIga,EAAiBD,EAAa/U,SAAW+U,EAAaC,eAE5D,IAAKA,EACH,MAAM,IAAI5Y,MAAM,4BAGlBoY,QAAQS,IAAI,uBACZ,MAAMC,EAAS,IAAIF,QACbE,EAAOC,MACbX,QAAQS,IAAI,+BACd,CAAE,MAAOR,GACPD,QAAQC,MAAM,kBAAmBA,GACjCxZ,QAAQyZ,KAAK,EACf,CAAE,cACM5I,EAAQ5J,YAChB,GCtEIkT,qBAAuBA,KAC3B,MAAMpa,EAAMC,QAAQD,MAEpB,OAAIa,sBAAAA,WAAcD,wBAAAA,KAAUZ,EAAK,cACxB,MAELa,sBAAAA,WAAcD,wBAAAA,KAAUZ,EAAK,mBACxB,OAELa,sBAAAA,WAAcD,wBAAAA,KAAUZ,EAAK,cACxB,OAEF,OAGHqa,kBAAoBA,CAACC,EAAoBC,KAC7C,MAAMC,EAAUD,EAASlZ,KAAK,KAE9B,OAAQiZ,GACN,IAAK,MACH,MAAO,eAAeE,IACxB,IAAK,OACH,MAAO,YAAYA,IACrB,IAAK,OACH,MAAO,YAAYA,IACrB,IAAK,MACH,MAAO,WAAWA,MAIlBC,oBAAsBA,CAC1BF,EACAG,EAAwB,MAExB,MAAMJ,EAAKF,uBAGX,GAFAZ,QAAQS,IAAI,kCAAkCK,OAE1CC,EAAS1S,OAAS,EAAG,CACvB2R,QAAQS,IAAI,4BAA4BM,EAASlZ,KAAK,SACtD,MAAMsZ,EAAaN,kBAAkBC,EAAIC,GACzC,KACEK,EAAAA,uCAAAA,UAASD,EAAY,CAAEE,MAAO,YAC9BrB,QAAQS,IAAI,2CACd,CAAE,MAAOR,GACPD,QAAQC,MAAM,oCACdxZ,QAAQyZ,KAAK,EACf,CACF,CAEA,GAAIgB,EAAY7S,OAAS,EAAG,CAE1B,IAAIiT,EACJ,OAFAtB,QAAQS,IAAI,gCAAgCS,EAAYrZ,KAAK,SAErDiZ,GACN,IAAK,MACHQ,EAAgB,0BAA0BJ,EAAYrZ,KAAK,OAC3D,MACF,IAAK,OACHyZ,EAAgB,kBAAkBJ,EAAYrZ,KAAK,OACnD,MACF,IAAK,OACHyZ,EAAgB,eAAeJ,EAAYrZ,KAAK,OAChD,MACF,IAAK,MACHyZ,EAAgB,cAAcJ,EAAYrZ,KAAK,OAGnD,KACEuZ,EAAAA,uCAAAA,UAASE,EAAe,CAAED,MAAO,YACjCrB,QAAQS,IAAI,+CACd,CAAE,MAAOR,GACPD,QAAQC,MAAM,wCACdxZ,QAAQyZ,KAAK,EACf,CACF,GAGIqB,wBAA0BA,KAC9BvB,QAAQS,IAAI,iDAgBZQ,oBAdqB,CACnB,eACA,WACA,QACA,gBACA,mBAGsB,CACtB,sBACA,kBACA,2BAKFjB,QAAQS,IAAI,2CACZT,QAAQS,IAAI,wDAGRe,wBAA0BA,KAC9BxB,QAAQS,IAAI,iDAcZQ,oBAZqB,CACnB,aACA,MACA,aACA,UACA,sBACA,oCACA,gCAGsB,CAAC,oBAAqB,eAI9CjB,QAAQS,IAAI,2CACZT,QAAQS,IAAI,wDAGRgB,4BAA+BC,IACnC1B,QAAQS,IACN,sDAAsDiB,UAIxD,IAAIC,EAAiC,GACjCC,EAA4B,GAEhC,OAAQF,EAAO/C,eACb,IAAK,QACL,IAAK,UACHgD,EAAuB,CAAC,WACxB3B,QAAQS,IAAI,sCACZ,MACF,IAAK,WACL,IAAK,aACL,IAAK,KACHkB,EAAuB,CAAC,MACxBC,EAAkB,CAAC,aACnB5B,QAAQS,IAAI,yCACZ,MACF,IAAK,QACHkB,EAAuB,CAAC,UACxB3B,QAAQS,IAAI,oCACZ,MACF,QACET,QAAQC,MACN,4BAA4ByB,8CAE9Bjb,QAAQyZ,KAAK,GAGjB,MAAM2B,EAAkB,CA5BI,kBAAmB,sBA4BIF,GACnDV,oBAAoBY,EAAiBD,GAErC5B,QAAQS,IAAI,+CACZT,QAAQS,IAAI,4DAGDqB,iBAAoB/B,IAC/B,MAAM/V,EAAO+V,EAAK,GAAGgC,MAAM,KAAK,GAWhC,OATK/X,IACHgW,QAAQC,MAAM,6DACdD,QAAQS,IAAI,YACZT,QAAQS,IAAI,kCACZT,QAAQS,IAAI,kCACZT,QAAQS,IAAI,6DACZha,QAAQyZ,KAAK,IAGPlW,GACN,IAAK,OACHuX,0BACA,MACF,IAAK,OACHC,0BACA,MACF,IAAK,WACH,MAAME,EAAS3B,EAAK,GACf2B,IACH1B,QAAQC,MACN,6DAEFD,QAAQS,IAAI,YACZT,QAAQS,IAAI,4CACZT,QAAQS,IAAI,+CACZT,QAAQS,IAAI,4CACZha,QAAQyZ,KAAK,IAEfuB,4BAA4BC,GAC5B,MACF,QACE1B,QAAQC,MAAM,4BAA4BjW,KAC1CgW,QAAQS,IAAI,sBACZT,QAAQS,IAAI,YACZT,QAAQS,IAAI,YACZT,QAAQS,IAAI,gBACZha,QAAQyZ,KAAK,KC7MN8B,aAAgBtC,GACpBA,EAAI1N,QAAQ,aAAc,CAACuE,EAAGqJ,EAAIC,IAAMA,EAAEnK,eCEtCuM,UAAY5U,MACvB6U,EACAC,EACAC,KAEA,MAAMC,EAAYjb,wBAAAA,QAAaX,QAAQD,MAAO,OAAO0b,KAC/CI,EAAalb,wBAAAA,KAAUib,EAAWF,GAEnC9a,sBAAAA,WAAcgb,IACjBhb,sBAAAA,UAAagb,EAAW,CAAEja,WAAW,IAGnCf,sBAAAA,WAAcib,KAChBtC,QAAQC,MAAM,wBAAwBqC,KACtC7b,QAAQyZ,KAAK,IAGf7Y,sBAAAA,cAAiBib,EAAYF,GAC7BpC,QAAQS,IAAI,YAAYrZ,wBAAAA,KAAU8a,EAAKC,OChBnCI,eAAiBlV,MACrB1B,EACA3B,EAAuB,YAEvB,IAAIwY,EAAU,GAIZA,EAFW,aAATxY,EAEQ,gbA6BQ,QAATA,EAEC,sTAuBA,WAKZ,MAAMoY,EAAU,gEAEVJ,aAAarW,OAAU6W,wBAEdR,aAAarW,aAEtBsW,UAAU,uBAAwB,GAAGD,aAAarW,QAAYyW,IAGtE,0BC9EMK,YAAcpV,UAClB,MAAMqV,EAAY/W,EAAKqG,QAAQ,UAAW,IACpCoQ,EAAU,wDACPM,0BAAkCA,eAErCV,aAAarW,sBAAyB+W,6BACxBA,kFASLV,aAAarW,aAEtBsW,UAAU,qBAAsB,GAAGD,aAAarW,QAAYyW,IAGpE,oBCpBe/U,eAAesV,eAAehX,GAC3C,MAAMyW,EAAU,2FAEVJ,aAAarW,6KAOJqW,aAAarW,aAGtBsW,UAAU,sBAAuB,GAAGD,aAAarW,QAAYyW,EACrE,CCdA,MAAMQ,cAAgBvV,UACpB,MAAM0P,EAAM,IAAIpH,KACVkN,EAAOte,GAAcA,EAAEue,WAAWC,SAAS,EAAG,KAK9CZ,EAAW,GAJIpF,EAAIiG,iBAAiBH,EAAI9F,EAAIkG,WAAa,MAAMJ,EACnE9F,EAAImG,cACDL,EAAI9F,EAAIoG,cAAcN,EAAI9F,EAAIqG,gBAAgBP,EAAI9F,EAAIsG,iBAE1B1X,OAE3ByW,EAAU,iEAEVJ,aAAarW,uEAESA,6IAOMA,iCAInBqW,aAAarW,aAEtBsW,UAAU,sBAAuBE,EAAUC,IAGnD,wBC7BakB,UAAYjW,UACvB,MAAM+U,EAAU,qDAEVJ,aAAarW,+CACKA,EAAKgT,mEAIdqD,aAAarW,aAEtBsW,UAAU,aAAc,GAAGD,aAAarW,QAAYyW,IAG5D,qBCbe/U,eAAekW,aAAa5X,GACzC,MAAMyW,EAAU,+DAEVJ,aAAarW,qTAgBJqW,aAAarW,WAEtBsW,UAAU,gBAAiB,GAAGD,aAAarW,QAAYyW,EAC/D,CCtBe/U,eAAemW,YAAY7X,GACxC,MAAMyW,EAAU,8DAEVJ,aAAarW,8WAkBJqW,aAAarW,WAEtBsW,UAAU,oBAAqB,GAAGD,aAAarW,QAAYyW,EACnE,CCxBA,MAAMqB,WAAapW,UACjB,MAAM+U,EAAU,sDAEVJ,aAAarW,0EAMJqW,aAAarW,aAEtBsW,UAAU,mBAAoB,GAAGD,aAAarW,QAAYyW,IAGlE,kBCRasB,WAAarW,UACxB,MAAMrD,EAAO+V,EAAK,GAAGgC,MAAM,KAAK,GAC1BpW,EAAOoU,EAAK,GAOlB,OALKpU,IACHqU,QAAQC,MAAM,iCAAiCjW,KAC/CvD,QAAQyZ,KAAK,IAGPlW,GACN,IAAK,cACGsZ,WAAU3X,IACZoU,EAAKpY,SAAS,UAAYoY,EAAKpY,SAAS,eACpCib,UAAc,UAAUjX,EAAKgT,8BAC7B8D,QAAY,GAAG9W,kBACf8X,OAAW,GAAG9X,iBACd4W,WAAe,GAAG5W,cAAkB,aAE5C,MACF,IAAK,aACH,IAAIgY,EAAgD,SAChD5D,EAAKpY,SAAS,eAAiBoY,EAAKpY,SAAS,MAC/Cgc,EAAiB,WACR5D,EAAKpY,SAAS,WACvBgc,EAAiB,aAEbpB,WAAe5W,EAAMgY,GAC3B,MACF,IAAK,kBACGf,UAAcjX,GACpB,MACF,IAAK,eACG8X,OAAW9X,GACjB,MACF,IAAK,gBACG8W,QAAY9W,GAClB,MACF,IAAK,gBACG6X,YAAY7X,GAClB,MACF,IAAK,mBACGgX,eAAehX,GACrB,MACF,IAAK,iBACG4X,aAAa5X,GACnB,MACF,QACEqU,QAAQC,MAAM,8BAA8BjW,KAC5CvD,QAAQyZ,KAAK,KCpDZ,MAAM0D,cAGXvM,WAAAA,CAAY1L,EAAc3B,EAAcqE,GACtCnJ,KAAKW,WAAa,CAChB8F,OACA3B,OACAqE,SACAgF,UAAU,EAEd,CAKAA,QAAAA,GAEE,OADAnO,KAAKW,WAAWwN,UAAW,EACpBnO,IACT,CAKAsG,QAAQxG,GAEN,OADAE,KAAKW,WAAW2F,QAAUxG,EACnBE,IACT,CAKAsO,MAAAA,GAEE,OADAtO,KAAKW,WAAW2N,QAAS,EAClBtO,IACT,CAKAqO,OAAAA,GAEE,OADArO,KAAKW,WAAW0N,SAAU,EACnBrO,IACT,CAKAkO,aAAAA,GAEE,OADAlO,KAAKW,WAAWuN,eAAgB,EACzBlO,IACT,CAKAiO,QAAAA,GAEE,OADAjO,KAAKW,WAAWsN,UAAW,EACpBjO,IACT,CAKA2e,aAAAA,GACE,OAAO3e,KAAKW,UACd,EAMK,MAAMie,kBAOXzM,WAAAA,CAAYhI,GACVnK,KAAKmK,OAASA,CAChB,CAKA0U,UAAAA,CAAW1U,GAET,OADAnK,KAAK8e,iBAAmB3U,EACjBnK,IACT,CAKA+e,EAAAA,CAAGxV,GAED,OADAvJ,KAAKgf,gBAAkBzV,EAChBvJ,IACT,CAKAif,QAAAA,CAASC,GAEP,OADAlf,KAAKmf,eAAiBD,EACflf,IACT,CAKAof,QAAAA,CAASF,GAEP,OADAlf,KAAKqf,eAAiBH,EACflf,IACT,CAKAsf,KAAAA,GACE,IAAKtf,KAAKgf,kBAAoBhf,KAAK8e,iBACjC,MAAM,IAAIpc,MAAM,iDAGlB,IAAI0F,EAAM,gBAAgBpI,KAAKmK,sBAAsBnK,KAAKgf,mBAAmBhf,KAAK8e,oBASlF,OAPI9e,KAAKmf,iBACP/W,GAAO,cAAcpI,KAAKmf,kBAExBnf,KAAKqf,iBACPjX,GAAO,cAAcpI,KAAKqf,kBAGrBjX,CACT,EAOK,MAAMmX,UAEH5W,QAA8B,GAC9B6W,QAIH,GACGC,YAAmC,GACnCC,YAAwB,GAEhCvN,WAAAA,CAAYzJ,GACV1I,KAAK0I,UAAYA,CACnB,CAKAvK,EAAAA,CAAGsI,EAAe,MAChB,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,cAGpC,OAFAsG,EAAIsB,UAAUH,gBAAgBD,WAC9BjO,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAwD,IAAAA,CAAK9J,EAAe,MAClB,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,QAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKA6C,MAAAA,CAAOnJ,EAAc0C,EAAiB,KACpC,MAAM4D,EAAM,IAAI2R,cAAcjY,EAAM,SAAU0C,GAE9C,OADAnJ,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKA8C,IAAAA,CAAKpJ,GACH,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,QAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKA+C,OAAAA,CAAQrJ,GACN,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,WAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAgD,UAAAA,CAAWtJ,GACT,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,cAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAmD,OAAAA,CACEzJ,EACAkZ,EAAoB,GACpBC,EAAgB,GAEhB,MAAM7S,EAAM,IAAI2R,cAAcjY,EAAM,WAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAiD,KAAAA,CAAMvJ,GACJ,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,SAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAkD,MAAAA,CAAOxJ,GACL,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,UAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAgC,OAAAA,CAAQtI,GACN,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,WAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAoD,IAAAA,CAAK1J,GACH,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,QAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAqD,QAAAA,CAAS3J,GACP,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,YAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAsD,SAAAA,CAAU5J,GACR,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,aAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAiK,UAAAA,GACEhX,KAAKqQ,UAAU,cAAclC,WAC7BnO,KAAKqQ,UAAU,cAAclC,UAC/B,CAKAgJ,WAAAA,CAAY1Q,EAAe,cACzB,OAAOzG,KAAKqQ,UAAU5J,GAAM0H,UAC9B,CAKAmC,IAAAA,CAAK7J,GACH,MAAMsG,EAAM,IAAI2R,cAAcjY,EAAM,QAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKA8S,IAAAA,CAAKpZ,EAAc0I,GACjB,MAAMpC,EAAM,IAAI2R,cAAcjY,EAAM,QAEpC,OADAzG,KAAK2I,QAAQsG,KAAKlC,EAAI4R,iBACf5R,CACT,CAKAyM,OAAAA,CAAQrP,GACN,MAAM2V,EAAK,IAAIlB,kBAAkBzU,GAEjC,OADAnK,KAAKyf,YAAYxQ,KAAK6Q,GACfA,CACT,CAKAhR,KAAAA,CAAMnG,EAA4BlC,GAChC,MAAMsZ,EAAOtT,MAAMC,QAAQ/D,GAAWA,EAAU,CAACA,GACjD3I,KAAKwf,QAAQvQ,KAAK,CAAEtG,QAASoX,EAAMzR,QAAQ,EAAO7H,QACpD,CAKA6H,MAAAA,CAAO3F,EAA4BlC,GACjC,MAAMsZ,EAAOtT,MAAMC,QAAQ/D,GAAWA,EAAU,CAACA,GACjD3I,KAAKwf,QAAQvQ,KAAK,CAAEtG,QAASoX,EAAMzR,QAAQ,EAAM7H,QACnD,CAKA4H,OAAAA,CAAQ1F,GACN3I,KAAK0f,YAAcjT,MAAMC,QAAQ/D,GAAWA,EAAU,CAACA,EACzD,CAKAqX,UAAAA,GACE,OAAOhgB,KAAK2I,OACd,CAKAsX,YAAAA,GACE,OAAOjgB,KAAK0I,SACd,CAKAwX,UAAAA,GACE,OAAOlgB,KAAKwf,OACd,CAKAW,cAAAA,GACE,OAAOngB,KAAKyf,WACd,EC7WK,MAAMW,OAMX,iBAAO/I,CAAWjF,GAChBpS,KAAKoS,QAAUA,CACjB,CAKA,mBAAajS,CACXuI,EACA2X,GAEA,MAAMC,EAAY,IAAIf,UAAU7W,GAChC2X,EAASC,SAEHtgB,KAAKoS,QAAQ3J,YAAYC,EAAW4X,EAAUN,aACtD,CAKA,kBAAazW,CACXb,EACA2X,GAGAA,EADkB,IAAId,UAAU7W,IAKhCoS,QAAQyF,KACN,uFAEJ,CAKA,iBAAaxX,CAAKL,SACV1I,KAAKoS,QAAQvJ,UAAUH,EAC/B,CAKA,yBAAa8X,CAAa9X,SACH1I,KAAKgJ,SAASN,UAE3B1I,KAAK+I,KAAKL,EAEpB,CAKA,mBAAa+X,CAAOC,EAAcC,GAEhC,MAAM,IAAIje,MAAM,sCAClB,CAKA,qBAAasG,CAASN,GACpB,aAAa1I,KAAKoS,QAAQpJ,SAASN,EACrC,CAKA,sBAAaU,CACXV,EACAW,GAEA,aAAarJ,KAAKoS,QAAQhJ,UAAUV,EAAWW,EACjD,CAKA,sBAAauX,GAEX,MAAM,IAAIle,MAAM,yCAClB,CAKA,uBAAasd,CAAWtX,GAEtB,MAAM,IAAIhG,MAAM,0CAClB,EChGK,MAAeme,qBAkCf,MAAMC,gBAEHC,gBAA0B,aAGlC5O,WAAAA,CAAYC,EAAc4O,GACxBhhB,KAAKoS,QAAUA,EACfpS,KAAKghB,eAAiBA,CACxB,CAKA,2BAAcC,SACSb,OAAOpX,SAAShJ,KAAK+gB,wBAElCX,OAAOjgB,OAAOH,KAAK+gB,gBAAkBxX,IACzCA,EAAMpL,KACNoL,EAAMqG,OAAO,aACbrG,EAAMuG,QAAQ,SACdvG,EAAM8G,UAAU,cAAclC,YAGpC,CAKA,sBAAc+S,GAEZ,aADMlhB,KAAKihB,8BACEjhB,KAAKoS,QAAQ9I,OAAOtJ,KAAK+gB,gBAAiB,CACrD/W,QAAS,CAAC,CAAEG,OAAQ,QAASC,UAAW,SAE5C,CAKA,0BAAc+W,GACZ,MAAMhf,QAAW,+EAIXif,SAHa,sFAESphB,KAAKkhB,oBACF1W,IAAK6W,GAAMA,EAAEC,YAQ5C,OANcnf,EAAGof,YAAYvhB,KAAKghB,gBAE/BxX,OAAQgY,GAAMA,EAAE/G,SAAS,QAAU+G,EAAE/G,SAAS,QAC9CjR,OAAQgY,IAAOJ,EAAS3e,SAAS+e,EAAE1U,QAAQ,aAAc,MACzD7C,MAGL,CAKA,SAAMwR,GACJ,MAAMvZ,QAAa,+EACbuf,QAA0BzhB,KAAKmhB,uBAErC,GAAiC,IAA7BM,EAAkBtY,OAEpB,YADA2R,QAAQS,IAAI,yBAId,MAAMmG,QAAsB1hB,KAAKkhB,mBAC3BS,EACJD,EAAcvY,OAAS,EACnBuL,KAAK/G,OAAO+T,EAAclX,IAAK6W,GAAMA,EAAEO,QAAU,EACjD,EAEN9G,QAAQS,IAAI,WAAWkG,EAAkBtY,0BAEzC,IAAK,MAAM0Y,KAAQJ,EAAmB,CACpC,MAAMK,EAAgB5f,EAAKP,QAAQ3B,KAAKghB,eAAgBa,GAClDE,EAAgBF,EAAK/U,QAAQ,aAAc,IAEjD,IAEE,MACMwU,EAAY,UADWthB,KAAKgiB,cAAcF,IAGhDhH,QAAQS,IAAI,cAAcwG,WACpBT,EAAUW,WAGVjiB,KAAKoS,QAAQxH,OAAO5K,KAAK+gB,gBAAiB,CAC9CO,UAAWS,EACXH,MAAOD,EACPO,WAAY,IAAIzR,OAGlBqK,QAAQS,IAAI,aAAawG,IAC3B,CAAE,MAAOhH,GAEP,MADAD,QAAQC,MAAM,qBAAqBgH,KAAkBhH,GAC/CA,CACR,CACF,CAEAD,QAAQS,IAAI,oCACd,CAKA,cAAMvP,CAASmW,EAAgB,GAC7B,MAAMT,QAAsB1hB,KAAKkhB,mBAEjC,GAA6B,IAAzBQ,EAAcvY,OAEhB,YADA2R,QAAQS,IAAI,6BAId,MAAM6G,EAAW1N,KAAK/G,OAAO+T,EAAclX,IAAK6W,GAAMA,EAAEO,QAClDS,EAAWD,EAAWD,EAAQ,EAE9BG,EAAuBZ,EAC1BlY,OAAQ6X,GAAMA,EAAEO,OAASS,GAAYhB,EAAEO,OAASQ,GAChDG,UAEHzH,QAAQS,IAAI,gBAAgB+G,EAAqBnZ,0BAEjD,MAAMjH,QAAa,+EAEnB,IAAK,MAAMsgB,KAAUF,EAAsB,CACzC,MAAMR,EAAgB5f,EAAKP,QACzB3B,KAAKghB,eACL,GAAGwB,EAAOlB,gBAGZ,IACE,MACMA,EAAY,UADWthB,KAAKgiB,cAAcF,IAGhDhH,QAAQS,IAAI,iBAAiBiH,EAAOlB,mBAC9BA,EAAUmB,aAGVziB,KAAKoS,QAAQ7G,OAAOvL,KAAK+gB,gBAAiByB,EAAOrkB,IAEvD2c,QAAQS,IAAI,gBAAgBiH,EAAOlB,YACrC,CAAE,MAAOvG,GAEP,MADAD,QAAQC,MAAM,sBAAsByH,EAAOlB,aAAcvG,GACnDA,CACR,CACF,CAEAD,QAAQS,IAAI,kCACd,CAKA,WAAMmH,GACJ,MAAMhB,QAAsB1hB,KAAKkhB,mBAC3ByB,EAAUjO,KAAK/G,OAAO+T,EAAclX,IAAK6W,GAAMA,EAAEO,cACjD5hB,KAAKgM,SAAS2W,EACtB,CAKA,WAAMC,SACE5iB,KAAK0iB,cACL1iB,KAAKyb,KACb,CAKA,YAAMoH,GAEJ,aAD4B7iB,KAAKkhB,oBACZ1W,IAAK6W,IAAC,CACzB5a,KAAM4a,EAAEC,UACRM,MAAOP,EAAEO,MACTkB,MAAOzB,EAAEa,YAAc,IAAIzR,OAE/B,CAKA,mBAAcuR,CAAce,GAE1B,MAAMC,GAAkB9kB,EAAAA,eAAAA,gBAAe6kB,GACjCE,EAAiBD,EAAgB1c,SAAW0c,EAElD,IAAKC,GAA4C,mBAAnBA,EAC5B,MAAM,IAAIvgB,MACR,kBAAkBqgB,6CAMtB,MAAMpP,EAAW,IAAIsP,EACrB,GACyB,mBAAhBtP,EAASsO,IACS,mBAAlBtO,EAAS8O,KAEhB,MAAM,IAAI/f,MACR,sBAAsBqgB,4CAI1B,OAAOE,CACT,ECnPK,MAAMC,cAAgB/a,UAC3B,MAAMyD,EAAUiP,EAAK,GAGfI,EAAa/Y,wBAAAA,QAAaX,QAAQD,MAAO,wBAGzC,eAAEpD,GAAmBU,oBAAQ,IAGnC,IACEV,EAAe,WAAWilB,SAAS,CACjCjI,eAAe,EACfC,gBAAiB,CACfzc,OAAQ,aAGd,CAAE,MAAOF,GACP,CAGF,IAAIqG,EAUAuN,EATJ,IACE,MAAM1T,EAASR,EAAe+c,GAC9BpW,EAASnG,EAAO4H,SAAW5H,EAAO0c,gBAAkB1c,CACtD,CAAE,MAAOqc,GACPD,QAAQC,MAAM,kCAAmCA,GACjDxZ,QAAQyZ,KAAK,EACf,CAIoB,aAAhBnW,EAAOC,KACTsN,EAAU,IAAIvB,gBACW,UAAhBhM,EAAOC,KAChBsN,EAAU,IAAIlF,cAEd4N,QAAQC,MAAM,8BAA8BlW,EAAOC,QACnDvD,QAAQyZ,KAAK,IAGf,UACQ5I,EAAQ3K,QAAQ5C,GAEtB,MAAMmc,EAAiB9e,wBAAAA,QAAaX,QAAQD,MAAO,2BAC7C8hB,EAAS,IAAItC,gBAAgB1O,EAAS4O,GAE5C,OAAQpV,GACN,IAAK,gBACGwX,EAAO3H,MACb,MACF,IAAK,yBACG2H,EAAOpX,WACb,MACF,IAAK,sBACGoX,EAAOV,QACb,MACF,IAAK,sBACGU,EAAOR,QACb,MACF,IAAK,iBACH,MAAMC,QAAeO,EAAOP,SAC5B/H,QAAQvR,MAAMsZ,GACd,MACF,QACE/H,QAAQC,MAAM,4BAA4BnP,KAC1CrK,QAAQyZ,KAAK,GAEnB,CAAE,MAAOD,GACPD,QAAQC,MAAM,oBAAqBA,GACnCxZ,QAAQyZ,KAAK,EACf,CAAE,cACM5I,EAAQ5J,YAChB,GCrEIqS,KAAOtZ,QAAQ8hB,KAAK1S,MAAM,GAG1B2S,WAAazI,KAAK/Q,KAAMyZ,GAAQA,EAAIC,WAAW,gBAC/CC,cAAgBH,WAAaA,WAAWzG,MAAM,KAAK,GAAK,KAE9D,GAAI4G,cAAe,CACjB,MAAMC,EAAUxhB,wBAAAA,QAAaX,QAAQD,MAAOmiB,eACxCthB,sBAAAA,WAAcuhB,IAChBC,0BAAAA,OAAc,CAAEzhB,KAAMwhB,IACtB5I,QAAQS,IAAI,2BAA2BkI,kBAEvC3I,QAAQyF,KAAK,6BAA6BkD,2BAE9C,MAEEE,0BAAAA,SAGF,MAAM/X,QAAUiP,KAAK,GAEhBjP,UACHkP,QAAQC,MAAM,qDACdxZ,QAAQyZ,KAAK,IAGf,MAAM4I,YAAeC,GACZ,IAAIC,QAAc,CAACniB,EAASoiB,KACjCF,EAASpI,IAAI,CAACuI,EAAKC,IACbD,GACFlJ,QAAQC,MAAMiJ,GACPD,EAAOC,IAEZC,GAASA,EAAMC,aACjBpJ,QAAQC,MAAMkJ,EAAMrG,SAAS,CAAEuG,QAAQ,KAChCJ,EAAO,IAAIrhB,MAAM,2BAE1BoY,QAAQS,IAAI0I,aAAK,EAALA,EAAOrG,SAAS,CAAEuG,QAAQ,UACtCxiB,QAKN,IAAIyiB,cAAiD,KAIrD,MAAMC,eAAkBC,GACf,IAAIR,QAASniB,IAAY,IAAA4iB,EAC1BH,eACFA,cAAcI,OAGhB,MAAMC,EAAaviB,wBAAAA,QAAaX,QAAQD,MAAO,kBAC/C8iB,eAAgBM,EAAAA,uCAAAA,OAAM,OAAQ,CAACD,GAAa,CAC1CtI,MAAO,CAAC,UAAW,OAAQ,WAC3B7Y,IAAK,IAAK/B,QAAQ+B,IAAKqhB,gBAAiBL,EAAQ1G,cAG9B,QAApB2G,EAAAH,cAAcQ,cAAM,IAAAL,GAApBA,EAAsBxF,GAAG,OAASlU,IAChCtJ,QAAQqjB,OAAOC,MAAMha,GACjBA,EAAK+S,WAAWnb,SAAS,sBAC3Bd,MAIJyiB,cAAcrF,GAAG,QAAU+F,IACZ,IAATA,GAAuB,OAATA,GAChBhK,QAAQC,MAAM,+BAA+B+J,SAM/CC,cAAgBA,CACpBlB,EACAmB,KAEAnB,EAASoB,MAAM,CAAC,EAAG,CAACjB,EAAKC,KACnBD,EACFlJ,QAAQC,MAAMiJ,IAGhBlJ,QAAQS,IAAI0I,aAAK,EAALA,EAAOrG,SAAS,CAAEuG,QAAQ,KAElCF,IAAUA,EAAMC,aAAec,GACjCA,QAKAE,MAAQ/c,UACZ5G,QAAQ+B,IAAIC,SAAW,aACvBuX,QAAQS,IAAI,8BAEZ,MAAM4J,EAAe/hB,qBACfgiB,EAAere,qBAErB,UACQ6c,YAAYyB,2BAAQF,UACpBvB,YAAYyB,2BAAQD,IAC1BtK,QAAQS,IAAI,kBACd,CAAE,MAAOR,GACPD,QAAQC,MAAM,gBAAiBA,GAC/BxZ,QAAQyZ,KAAK,EACf,GAGIsK,IAAMnd,UAMV,IAAIod,EACAC,EANJjkB,QAAQ+B,IAAIC,SAAW,cACvBuX,QAAQS,IAAI,kCAQZ,MAAMkK,EAAa5d,GACV,IAAIic,QAAQ,CAACniB,EAASoiB,KAC3B,MAAM2B,EAAS,IAAIC,4BAAAA,gBAAgB,CAAE9d,SAErC6d,EAAO3G,GAAG,YAAa,KACrBpd,EAAQ+jB,KAGVA,EAAO3G,GAAG,QAAUiF,IAClBD,EAAOC,OAMb,IAAK,IAAI1S,EAAI,EAAGA,EApBU,GAoBaA,IACrC,IACE,MAAMsU,EAvBe,KAuBkBtU,EACvCiU,QAAYE,EAAUG,GACtBJ,EAAWI,EACX9K,QAAQS,IAAI,8BAA8BiK,KAC1C,KACF,CAAE,MAAOxB,GACP,GAAiB,eAAbA,EAAIc,KAUN,MAAMd,EANN,GAHAlJ,QAAQyF,KACN,QA/BiB,KA+BUjP,oCAEnBuU,IAANvU,EACF,MAAM,IAAI5O,MACR,gDAMR,CAGF,IAAK6iB,IAAQC,EACX,MAAM,IAAI9iB,MAAM,+BAIlB,MAAMojB,EAAUA,KACdhL,QAAQS,IAAI,yCAERgK,GACFA,EAAIhd,MAAM,KACRuS,QAAQS,IAAI,wBAIZ6I,gBACFA,cAAcI,OACdJ,cAAgB,MAGlB7iB,QAAQyZ,KAAK,IAIfzZ,QAAQwd,GAAG,SAAU+G,GACrBvkB,QAAQwd,GAAG,UAAW+G,GAEtB,MAAMC,EAAkBA,KACtBR,EAAIS,QAAQvlB,QAASiD,IACO,IAAtBA,EAAOuiB,YACTviB,EAAOwiB,KAAKra,KAAKkN,UAAU,CAAEjU,KAAM,eAKnCqgB,EAAe/hB,qBACfgiB,EAAere,qBAErB,IAAIof,GAAmB,EACnBC,GAAgB,EAEpB,MAAMC,EAAiBhB,2BAAQD,GAC/BiB,EAAeC,MAAMC,QAAQC,IAAI,WAAY,KAC3CL,GAAmB,IAIrBpB,cAAcM,2BAAQF,GAAe,KACnCrK,QAAQS,IAAI,0BACR4K,GACFrL,QAAQS,IAAI,4CACZ6K,GAAgB,IAEhBtL,QAAQS,IAAI,yBACZwK,OAKJhB,cAAcsB,EAAgBle,UAC5B2S,QAAQS,IAAI,qDACN8I,eAAemB,GACrBW,GAAmB,EACfC,IACFtL,QAAQS,IAAI,+CACZwK,IACAK,GAAgB,MAKhBK,MAAQA,KACZllB,QAAQ+B,IAAIC,SAAW,aACvB,MAAMkhB,EAAaviB,wBAAAA,QAAaX,QAAQD,MAAO,kBAC/CwZ,QAAQS,IAAI,sBAAsBkJ,SAEpBC,EAAAA,uCAAAA,OAAM,OAAQ,CAACD,GAAa,CAAEtI,MAAO,YAE7C4C,GAAG,QAAU+F,IACjBvjB,QAAQyZ,KAAK8J,GAAQ,MASzB,OAAQlZ,SACN,IAAK,QACHsZ,QACA,MACF,IAAK,MACHI,MACA,MACF,IAAK,QACHmB,QACA,MACF,QACM7a,QAAQ4X,WAAW,SACrBhF,WAAW3D,MACFjP,QAAQ4X,WAAW,WAC5BN,cAAcrI,MACLjP,QAAQ4X,WAAW,OAC5B5I,SAASC,MACAjP,QAAQ4X,WAAW,eAC5B5G,iBAAiB/B,OAEjBC,QAAQC,MAAM,oBAAoBnP,WAClCrK,QAAQyZ,KAAK,I","sources":["webpack://arcanajs/./src/lib/server/utils/dynamicRequire.ts","webpack://arcanajs/external node-commonjs \"fs\"","webpack://arcanajs/external commonjs \"ts-node\"","webpack://arcanajs/external node-commonjs \"path\"","webpack://arcanajs/webpack/bootstrap","webpack://arcanajs/webpack/runtime/create fake namespace object","webpack://arcanajs/webpack/runtime/compat get default export","webpack://arcanajs/webpack/runtime/define property getters","webpack://arcanajs/webpack/runtime/hasOwnProperty shorthand","webpack://arcanajs/webpack/runtime/make namespace object","webpack://arcanajs/external node-commonjs \"child_process\"","webpack://arcanajs/external commonjs \"dotenv\"","webpack://arcanajs/external commonjs \"webpack\"","webpack://arcanajs/external commonjs \"clean-webpack-plugin\"","webpack://arcanajs/external commonjs \"html-webpack-plugin\"","webpack://arcanajs/external commonjs \"mini-css-extract-plugin\"","webpack://arcanajs/external commonjs \"webpack-node-externals\"","webpack://arcanajs/./src/cli/webpack.config.ts","webpack://arcanajs/external commonjs \"ws\"","webpack://arcanajs/./src/lib/arcanox/adapters/MongoAdapter.ts","webpack://arcanajs/./src/lib/arcanox/adapters/MySQLAdapter.ts","webpack://arcanajs/./src/lib/arcanox/adapters/PostgresAdapter.ts","webpack://arcanajs/./src/lib/arcanox/support/Macroable.ts","webpack://arcanajs/./src/lib/arcanox/QueryBuilder.ts","webpack://arcanajs/./src/lib/arcanox/relations/Relation.ts","webpack://arcanajs/./src/lib/arcanox/relations/BelongsTo.ts","webpack://arcanajs/./src/lib/arcanox/relations/BelongsToMany.ts","webpack://arcanajs/./src/lib/arcanox/relations/HasMany.ts","webpack://arcanajs/./src/lib/arcanox/relations/HasOne.ts","webpack://arcanajs/./src/lib/arcanox/Model.ts","webpack://arcanajs/./src/cli/commands/db.ts","webpack://arcanajs/./src/cli/commands/dependency.ts","webpack://arcanajs/./src/cli/utils/toPascalCase.ts","webpack://arcanajs/./src/cli/utils/writeFile.ts","webpack://arcanajs/./src/cli/commands/make/Controller.ts","webpack://arcanajs/./src/cli/commands/make/Factory.ts","webpack://arcanajs/./src/cli/commands/make/Middleware.ts","webpack://arcanajs/./src/cli/commands/make/Migration.ts","webpack://arcanajs/./src/cli/commands/make/Model.ts","webpack://arcanajs/./src/cli/commands/make/Provider.ts","webpack://arcanajs/./src/cli/commands/make/Request.ts","webpack://arcanajs/./src/cli/commands/make/Seeder.ts","webpack://arcanajs/./src/cli/commands/make.ts","webpack://arcanajs/./src/lib/arcanox/schema/Blueprint.ts","webpack://arcanajs/./src/lib/arcanox/schema/Schema.ts","webpack://arcanajs/./src/lib/arcanox/schema/Migration.ts","webpack://arcanajs/./src/cli/commands/migrate.ts","webpack://arcanajs/./src/cli/index.ts"],"sourcesContent":["declare const __non_webpack_require__: NodeJS.Require;\n\n/**\n * Helper to dynamically require modules at runtime, bypassing Webpack bundling.\n * This is necessary for loading user configuration files, migrations, and views\n * that are not part of the framework bundle but exist in the user's project.\n */\nexport const dynamicRequire = (id: string) => {\n // Use a string lookup to access the native require function via process.mainModule\n // This prevents Webpack from seeing \"require\" and warning about critical dependencies.\n // It also ensures we get the native Node require, not Webpack's internal require.\n try {\n const _global = global as any;\n const nativeRequire = _global[\"process\"]?.[\"mainModule\"]?.[\"require\"];\n if (nativeRequire) {\n return nativeRequire(id);\n }\n } catch (e) {\n // Ignore errors during lookup\n }\n\n // Fallback to eval(\"require\") if mainModule lookup fails.\n // This might return Webpack's require in some contexts, but it's a last resort.\n return eval(\"require\")(id);\n};\n","module.exports = require(\"fs\");","module.exports = require(\"ts-node\");","module.exports = require(\"path\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"child_process\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"dotenv\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"webpack\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"clean-webpack-plugin\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"html-webpack-plugin\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"mini-css-extract-plugin\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"webpack-node-externals\");","import { CleanWebpackPlugin } from \"clean-webpack-plugin\";\nimport HtmlWebpackPlugin from \"html-webpack-plugin\";\nimport MiniCssExtractPlugin from \"mini-css-extract-plugin\";\nimport path from \"path\";\nimport webpack from \"webpack\";\nimport nodeExternals from \"webpack-node-externals\";\n\ndeclare const __non_webpack_require__: NodeJS.Require;\n\nconst cwd = process.cwd();\n\n// Helper to resolve loaders from the framework's node_modules\nconst resolveLoader = (loader: string) =>\n __non_webpack_require__.resolve(loader);\n\nimport fs from \"fs\";\n\n// Helper to find entry file with supported extensions\nconst findEntry = (searchPaths: string[]): string => {\n const extensions = [\".ts\", \".tsx\", \".js\", \".jsx\"];\n\n for (const basePath of searchPaths) {\n for (const ext of extensions) {\n const fullPath = path.resolve(cwd, basePath + ext);\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n // Also check for index files in directories\n const indexPath = path.resolve(cwd, basePath, \"index\" + ext);\n if (fs.existsSync(indexPath)) {\n return indexPath;\n }\n }\n }\n\n // Fallback to example if not found (for internal framework dev) or throw error\n // For now, we'll try the example paths as a last resort before failing\n const exampleClient = path.resolve(cwd, \"src/example/client/index.tsx\");\n const exampleServer = path.resolve(cwd, \"src/example/server/index.ts\");\n\n if (\n searchPaths.some((p) => p.includes(\"client\")) &&\n fs.existsSync(exampleClient)\n )\n return exampleClient;\n if (\n searchPaths.some((p) => p.includes(\"server\")) &&\n fs.existsSync(exampleServer)\n )\n return exampleServer;\n\n throw new Error(\n `Could not find entry point. Searched in: ${searchPaths.join(\", \")}`\n );\n};\n\nconst getViewsLoaderPath = () => {\n const viewsDir = path.resolve(cwd, \"src/resources/views\");\n const hasViews = fs.existsSync(viewsDir);\n const viewsLoaderPath = path.resolve(\n __dirname,\n \"../../node_modules/.cache/arcanajs/views-loader.js\"\n );\n\n // Ensure cache directory exists\n const cacheDir = path.dirname(viewsLoaderPath);\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { recursive: true });\n }\n\n // Generate the loader file\n const loaderContent = hasViews\n ? `module.exports = require.context('${viewsDir}', true, /\\\\.(tsx|jsx)$/);`\n : `module.exports = null;`;\n\n fs.writeFileSync(viewsLoaderPath, loaderContent);\n return viewsLoaderPath;\n};\n\nexport const createClientConfig = (): webpack.Configuration => {\n const isProduction = process.env.NODE_ENV === \"production\";\n const viewsLoaderPath = getViewsLoaderPath();\n const clientEntry = findEntry([\"src/bootstrap/client\"]);\n\n return {\n mode: isProduction ? \"production\" : \"development\",\n target: \"web\",\n entry: {\n client: clientEntry,\n },\n output: {\n path: path.resolve(cwd, \"dist/public\"),\n filename: isProduction\n ? \"[name].[contenthash].bundle.js\"\n : \"[name].bundle.js\",\n publicPath: \"/\",\n assetModuleFilename: \"assets/[hash][ext][query]\",\n },\n resolve: {\n extensions: [\".ts\", \".tsx\", \".js\", \".jsx\"],\n alias: {\n \"arcana-views\": viewsLoaderPath,\n \"@\": path.resolve(cwd, \"src\"),\n },\n },\n resolveLoader: {\n modules: [\"node_modules\", path.resolve(__dirname, \"../../node_modules\")],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx|js|jsx)$/,\n exclude: /node_modules/,\n use: {\n loader: resolveLoader(\"babel-loader\"),\n options: {\n presets: [\n resolveLoader(\"@babel/preset-env\"),\n [\n resolveLoader(\"@babel/preset-react\"),\n { runtime: \"automatic\" },\n ],\n resolveLoader(\"@babel/preset-typescript\"),\n ],\n },\n },\n },\n // CSS Modules rule for .module.css files\n {\n test: /\\.module\\.css$/,\n use: [\n isProduction\n ? MiniCssExtractPlugin.loader\n : resolveLoader(\"style-loader\"),\n {\n loader: resolveLoader(\"css-loader\"),\n options: {\n importLoaders: 1,\n modules: {\n localIdentName: isProduction\n ? \"[hash:base64:8]\"\n : \"[path][name]__[local]--[hash:base64:5]\",\n exportLocalsConvention: \"camelCaseOnly\",\n },\n },\n },\n {\n loader: resolveLoader(\"postcss-loader\"),\n options: {\n postcssOptions: {\n config: path.resolve(cwd, \"postcss.config.js\"),\n },\n },\n },\n ],\n },\n // Global CSS rule for regular .css files\n {\n test: /\\.css$/,\n exclude: /\\.module\\.css$/,\n use: [\n isProduction\n ? MiniCssExtractPlugin.loader\n : resolveLoader(\"style-loader\"),\n {\n loader: resolveLoader(\"css-loader\"),\n options: {\n importLoaders: 1,\n },\n },\n {\n loader: resolveLoader(\"postcss-loader\"),\n options: {\n postcssOptions: {\n config: path.resolve(cwd, \"postcss.config.js\"),\n },\n },\n },\n ],\n },\n {\n test: /\\.(png|jpg|jpeg|gif|svg|woff|woff2|eot|ttf|otf)$/i,\n type: \"asset/resource\",\n },\n ],\n },\n plugins: [\n new CleanWebpackPlugin(),\n new HtmlWebpackPlugin({\n templateContent: `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <!--HEAD_CONTENT-->\n </head>\n <body>\n <div id=\"root\"><!--APP_CONTENT--></div>\n <!--ARCANAJS_DATA_SCRIPT-->\n </body>\n</html>`,\n filename: \"index.html\",\n inject: \"body\",\n minify: isProduction\n ? {\n removeComments: false,\n collapseWhitespace: true,\n removeRedundantAttributes: true,\n useShortDoctype: true,\n removeEmptyAttributes: true,\n removeStyleLinkTypeAttributes: true,\n keepClosingSlash: true,\n minifyJS: true,\n minifyCSS: true,\n minifyURLs: true,\n }\n : false,\n }),\n new MiniCssExtractPlugin({\n filename: isProduction ? \"[name].[contenthash].css\" : \"[name].css\",\n }),\n ],\n optimization: {\n splitChunks: {\n chunks: \"all\",\n cacheGroups: {\n defaultVendors: {\n test: /[\\\\/]node_modules[\\\\/]/,\n priority: -10,\n reuseExistingChunk: true,\n },\n default: {\n minChunks: 2,\n priority: -20,\n reuseExistingChunk: true,\n },\n react: {\n test: /[\\\\/]node_modules[\\\\/](react|react-dom|scheduler)[\\\\/]/,\n name: \"react-vendor\",\n chunks: \"all\",\n priority: 10,\n },\n },\n },\n },\n performance: {\n maxEntrypointSize: 512000,\n maxAssetSize: 512000,\n hints: isProduction ? \"warning\" : false,\n },\n devtool: isProduction ? \"source-map\" : \"eval-source-map\",\n };\n};\n\nexport const createServerConfig = (): webpack.Configuration => {\n const isProduction = process.env.NODE_ENV === \"production\";\n const serverEntry = findEntry([\n \"src/bootstrap/server\",\n ]);\n\n const viewsLoaderPath = getViewsLoaderPath();\n\n return {\n mode: isProduction ? \"production\" : \"development\",\n target: \"node\",\n entry: serverEntry,\n output: {\n path: path.resolve(cwd, \"dist\"),\n filename: \"server.js\",\n },\n externals: [\n nodeExternals({\n allowlist: [/^arcanajs/],\n }),\n ],\n resolve: {\n extensions: [\".ts\", \".tsx\", \".js\", \".jsx\"],\n alias: {\n \"arcana-views\": viewsLoaderPath,\n \"@\": path.resolve(cwd, \"src\"),\n },\n },\n resolveLoader: {\n modules: [\"node_modules\", path.resolve(__dirname, \"../../node_modules\")],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx|js|jsx)$/,\n exclude: /node_modules/,\n use: {\n loader: resolveLoader(\"babel-loader\"),\n options: {\n presets: [\n resolveLoader(\"@babel/preset-env\"),\n [\n resolveLoader(\"@babel/preset-react\"),\n { runtime: \"automatic\" },\n ],\n resolveLoader(\"@babel/preset-typescript\"),\n ],\n },\n },\n },\n // CSS Modules rule for .module.css files on server (for SSR)\n {\n test: /\\.module\\.css$/,\n use: {\n loader: resolveLoader(\"css-loader\"),\n options: {\n modules: {\n localIdentName: isProduction\n ? \"[hash:base64:8]\"\n : \"[path][name]__[local]--[hash:base64:5]\",\n exportLocalsConvention: \"camelCaseOnly\",\n exportOnlyLocals: true, // Only export class names, not CSS\n },\n },\n },\n },\n // Regular CSS files - ignore on server side\n {\n test: /\\.css$/,\n exclude: /\\.module\\.css$/,\n use: resolveLoader(\"null-loader\"),\n },\n {\n test: /\\.(png|jpg|jpeg|gif|svg|woff|woff2|eot|ttf|otf)$/i,\n type: \"asset/resource\",\n generator: {\n emit: false,\n },\n },\n ],\n },\n devtool: isProduction ? \"source-map\" : \"eval-source-map\",\n };\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"ws\");","import type { Db, MongoClient } from \"mongodb\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\nexport class MongoAdapter implements DatabaseAdapter {\n private client: MongoClient | null = null;\n private db: Db | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const { MongoClient } = dynamicRequire(\"mongodb\");\n const url = `mongodb://${config.host}:${config.port}`;\n this.client = new MongoClient(url, {\n auth:\n config.username && config.password\n ? {\n username: config.username,\n password: config.password,\n }\n : undefined,\n });\n\n await this.client!.connect();\n this.db = this.client!.db(config.database);\n\n return {\n query: async (sql: string, params?: any[]) => {\n throw new Error(\"Raw SQL queries are not supported in MongoDB adapter\");\n },\n execute: async (sql: string, params?: any[]) => {\n throw new Error(\n \"Raw SQL execution is not supported in MongoDB adapter\"\n );\n },\n close: async () => {\n await this.disconnect();\n },\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.client) {\n await this.client.close();\n this.client = null;\n this.db = null;\n }\n }\n\n // Schema operations\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n if (!this.db) throw new Error(\"Database not connected\");\n // MongoDB creates collections automatically, but we can create it explicitly\n // to apply validation rules if needed (not implemented here for simplicity)\n await this.db.createCollection(tableName);\n }\n\n async dropTable(tableName: string): Promise<void> {\n if (!this.db) throw new Error(\"Database not connected\");\n await this.db.collection(tableName).drop();\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collections = await this.db\n .listCollections({ name: tableName })\n .toArray();\n return collections.length > 0;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n // MongoDB is schemaless, so this is always true effectively,\n // or we could check if any document has this field.\n return true;\n }\n\n // Query operations\n async select(table: string, options: SelectOptions): Promise<any[]> {\n if (!this.db) throw new Error(\"Database not connected\");\n\n const collection = this.db.collection(table);\n const filter = this.buildFilter(options.where || []);\n const projection = this.buildProjection(options.columns);\n\n let cursor = collection.find(filter);\n\n if (projection) {\n cursor = cursor.project(projection);\n }\n\n if (options.orderBy) {\n const sort: any = {};\n options.orderBy.forEach((order) => {\n sort[order.column] = order.direction === \"ASC\" ? 1 : -1;\n });\n cursor = cursor.sort(sort);\n }\n\n if (options.offset) {\n cursor = cursor.skip(options.offset);\n }\n\n if (options.limit) {\n cursor = cursor.limit(options.limit);\n }\n\n const results = await cursor.toArray();\n\n // Map _id to id but keep _id\n return results.map((doc) => {\n const { _id, ...rest } = doc;\n return { id: _id, _id, ...rest };\n });\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collection = this.db.collection(table);\n\n // Remove id if present and let Mongo generate _id, or map id to _id\n const doc = { ...data };\n if (doc.id) {\n doc._id = doc.id;\n delete doc.id;\n }\n\n const result = await collection.insertOne(doc);\n\n return {\n id: result.insertedId,\n _id: result.insertedId,\n ...data,\n };\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collection = this.db.collection(table);\n\n const filter = { _id: this.normalizeId(id) };\n const update = { $set: data };\n\n await collection.updateOne(filter, update);\n\n // Return updated document (requires another query or findOneAndUpdate)\n const updated = await collection.findOne(filter);\n if (updated) {\n const { _id, ...rest } = updated;\n return { id: _id, _id, ...rest };\n }\n return null;\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n if (!this.db) throw new Error(\"Database not connected\");\n const collection = this.db.collection(table);\n const result = await collection.deleteOne({ _id: this.normalizeId(id) });\n return result.deletedCount === 1;\n }\n\n // Transaction support\n async beginTransaction(): Promise<void> {\n // MongoDB transactions require replica set\n // Placeholder implementation\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.db) {\n throw new Error(\"Database not connected\");\n }\n // For MongoDB, raw query might interpret the string as a command\n // or return the raw db object for advanced usage if query is \"db\"\n if (query === \"db\") return this.db;\n\n // Simple command execution\n return await this.db.command(JSON.parse(query));\n }\n\n async commit(): Promise<void> {\n //\n }\n\n async rollback(): Promise<void> {\n //\n }\n\n // Helpers\n private buildFilter(where: WhereClause[]): any {\n const filter: any = {};\n\n where.forEach((clause) => {\n const column = clause.column === \"id\" ? \"_id\" : clause.column;\n let value = clause.value;\n\n if (column === \"_id\") {\n value = this.normalizeId(value);\n }\n\n switch (clause.operator) {\n case \"=\":\n filter[column] = value;\n break;\n case \"!=\":\n filter[column] = { $ne: value };\n break;\n case \">\":\n filter[column] = { $gt: value };\n break;\n case \"<\":\n filter[column] = { $lt: value };\n break;\n case \">=\":\n filter[column] = { $gte: value };\n break;\n case \"<=\":\n filter[column] = { $lte: value };\n break;\n case \"IN\":\n filter[column] = { $in: Array.isArray(value) ? value : [value] };\n break;\n case \"NOT IN\":\n filter[column] = { $nin: Array.isArray(value) ? value : [value] };\n break;\n case \"LIKE\":\n // Simple regex for LIKE\n filter[column] = {\n $regex: new RegExp(value.replace(/%/g, \".*\"), \"i\"),\n };\n break;\n case \"IS NULL\":\n filter[column] = null;\n break;\n case \"IS NOT NULL\":\n filter[column] = { $ne: null };\n break;\n }\n });\n\n return filter;\n }\n\n private buildProjection(columns?: string[]): any {\n if (!columns || columns.length === 0 || columns.includes(\"*\")) {\n return null;\n }\n const projection: any = {};\n columns.forEach((col) => {\n if (col === \"id\") {\n // _id is included by default, no need to project it explicitly unless we want to exclude others\n // But if we select specific columns, we need to ensure _id is handled\n } else {\n projection[col] = 1;\n }\n });\n return projection;\n }\n\n private normalizeId(id: any): any {\n const { ObjectId } = dynamicRequire(\"mongodb\");\n if (id instanceof ObjectId) return id;\n if (typeof id === \"string\" && ObjectId.isValid(id)) {\n return new ObjectId(id);\n }\n return id;\n }\n}\n","import type {\n Pool,\n PoolConnection,\n ResultSetHeader,\n RowDataPacket,\n} from \"mysql2/promise\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport type {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\n/**\n * MySQL Database Adapter\n */\nexport class MySQLAdapter implements DatabaseAdapter {\n private pool: Pool | null = null;\n private connection: PoolConnection | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const mysql = dynamicRequire(\"mysql2/promise\");\n\n this.pool = mysql.createPool({\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.username,\n password: config.password,\n waitForConnections: true,\n connectionLimit: config.pool?.max || 10,\n queueLimit: 0,\n });\n\n return {\n query: this.query.bind(this),\n execute: this.execute.bind(this),\n close: this.disconnect.bind(this),\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.pool) {\n await this.pool.end();\n this.pool = null;\n }\n }\n\n async query(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [rows] = await this.pool.query<RowDataPacket[]>(sql, params);\n return rows;\n }\n\n async execute(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [result] = await this.pool.execute<ResultSetHeader>(sql, params);\n return result;\n }\n\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n const columnDefs = columns\n .map((col) => {\n let def = `\\`${col.name}\\` ${this.mapType(col.type, col.length)}`;\n\n if (col.unsigned) def += \" UNSIGNED\";\n if (col.autoIncrement) def += \" AUTO_INCREMENT\";\n if (!col.nullable) def += \" NOT NULL\";\n if (col.default !== undefined) {\n def += ` DEFAULT ${this.formatValue(col.default)}`;\n }\n if (col.primary) def += \" PRIMARY KEY\";\n if (col.unique) def += \" UNIQUE\";\n\n return def;\n })\n .join(\", \");\n\n const sql = `CREATE TABLE IF NOT EXISTS \\`${tableName}\\` (${columnDefs}) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci`;\n await this.execute(sql);\n }\n\n async dropTable(tableName: string): Promise<void> {\n await this.execute(`DROP TABLE IF EXISTS \\`${tableName}\\``);\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT COUNT(*) as count FROM information_schema.tables \n WHERE table_schema = DATABASE() AND table_name = ?`,\n [tableName]\n );\n return result[0]?.count > 0;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT COUNT(*) as count FROM information_schema.columns \n WHERE table_schema = DATABASE() AND table_name = ? AND column_name = ?`,\n [tableName, columnName]\n );\n return result[0]?.count > 0;\n }\n\n async select(table: string, options: SelectOptions): Promise<any[]> {\n const columns = options.columns?.join(\", \") || \"*\";\n let sql = `SELECT ${columns} FROM \\`${table}\\``;\n const params: any[] = [];\n\n // Joins\n if (options.joins && options.joins.length > 0) {\n for (const join of options.joins) {\n sql += ` ${join.type} JOIN \\`${join.table}\\` ON ${join.first} ${join.operator} ${join.second}`;\n }\n }\n\n // Where clauses\n if (options.where && options.where.length > 0) {\n const whereParts = options.where.map((clause, index) => {\n const boolean = index === 0 ? \"WHERE\" : clause.boolean;\n const condition = this.buildWhereCondition(clause, params);\n return `${boolean} ${condition}`;\n });\n sql += \" \" + whereParts.join(\" \");\n }\n\n // Order by\n if (options.orderBy && options.orderBy.length > 0) {\n const orderParts = options.orderBy.map(\n (o) => `\\`${o.column}\\` ${o.direction}`\n );\n sql += ` ORDER BY ${orderParts.join(\", \")}`;\n }\n\n // Limit and offset\n if (options.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return await this.query(sql, params);\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const placeholders = values.map(() => \"?\").join(\", \");\n\n const sql = `INSERT INTO \\`${table}\\` (${keys\n .map((k) => `\\`${k}\\``)\n .join(\", \")}) VALUES (${placeholders})`;\n const result = await this.execute(sql, values);\n\n return { id: result.insertId, ...data };\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const setParts = keys.map((k) => `\\`${k}\\` = ?`).join(\", \");\n\n const sql = `UPDATE \\`${table}\\` SET ${setParts} WHERE id = ?`;\n await this.execute(sql, [...values, id]);\n\n return { id, ...data };\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n const sql = `DELETE FROM \\`${table}\\` WHERE id = ?`;\n const result = await this.execute(sql, [id]);\n return result.affectedRows > 0;\n }\n\n async beginTransaction(): Promise<void> {\n if (!this.pool) throw new Error(\"Database not connected\");\n this.connection = await this.pool.getConnection();\n await this.connection.beginTransaction();\n }\n\n async commit(): Promise<void> {\n if (!this.connection) throw new Error(\"No active transaction\");\n await this.connection.commit();\n this.connection.release();\n this.connection = null;\n }\n\n async rollback(): Promise<void> {\n if (!this.connection) throw new Error(\"No active transaction\");\n await this.connection.rollback();\n this.connection.release();\n this.connection = null;\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const [result] = await this.pool.execute(query, params);\n return result;\n }\n\n private buildWhereCondition(clause: WhereClause, params: any[]): string {\n const column = `\\`${clause.column}\\``;\n\n switch (clause.operator) {\n case \"IN\":\n const inPlaceholders = (clause.value as any[])\n .map(() => \"?\")\n .join(\", \");\n params.push(...clause.value);\n return `${column} IN (${inPlaceholders})`;\n\n case \"NOT IN\":\n const notInPlaceholders = (clause.value as any[])\n .map(() => \"?\")\n .join(\", \");\n params.push(...clause.value);\n return `${column} NOT IN (${notInPlaceholders})`;\n\n case \"BETWEEN\":\n params.push(clause.value[0], clause.value[1]);\n return `${column} BETWEEN ? AND ?`;\n\n case \"IS NULL\":\n return `${column} IS NULL`;\n\n case \"IS NOT NULL\":\n return `${column} IS NOT NULL`;\n\n default:\n params.push(clause.value);\n return `${column} ${clause.operator} ?`;\n }\n }\n\n private mapType(type: string, length?: number): string {\n const typeMap: Record<string, string> = {\n string: length ? `VARCHAR(${length})` : \"VARCHAR(255)\",\n text: \"TEXT\",\n integer: \"INT\",\n bigInteger: \"BIGINT\",\n float: \"FLOAT\",\n double: \"DOUBLE\",\n decimal: \"DECIMAL(10,2)\",\n boolean: \"TINYINT(1)\",\n date: \"DATE\",\n datetime: \"DATETIME\",\n timestamp: \"TIMESTAMP\",\n json: \"JSON\",\n uuid: \"CHAR(36)\",\n };\n return typeMap[type] || type.toUpperCase();\n }\n\n private formatValue(value: any): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value.replace(/'/g, \"''\")}'`;\n if (typeof value === \"boolean\") return value ? \"1\" : \"0\";\n if (value instanceof Date)\n return `'${value.toISOString().slice(0, 19).replace(\"T\", \" \")}'`;\n return String(value);\n }\n}\n","import type { Pool, PoolClient, QueryResult } from \"pg\";\nimport { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport type {\n ColumnDefinition,\n Connection,\n DatabaseAdapter,\n DatabaseConfig,\n SelectOptions,\n WhereClause,\n} from \"../types\";\n\n/**\n * PostgreSQL Database Adapter\n */\nexport class PostgresAdapter implements DatabaseAdapter {\n private pool: Pool | null = null;\n private client: PoolClient | null = null;\n\n async connect(config: DatabaseConfig): Promise<Connection> {\n const { Pool } = dynamicRequire(\"pg\");\n\n this.pool = new Pool({\n host: config.host,\n port: config.port,\n database: config.database,\n user: config.username,\n password: config.password,\n ssl: config.ssl,\n min: config.pool?.min || 2,\n max: config.pool?.max || 10,\n });\n\n return {\n query: this.query.bind(this),\n execute: this.execute.bind(this),\n close: this.disconnect.bind(this),\n };\n }\n\n async disconnect(): Promise<void> {\n if (this.pool) {\n await this.pool.end();\n this.pool = null;\n }\n }\n\n async query(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result: QueryResult = await this.pool.query(sql, params);\n return result.rows;\n }\n\n async execute(sql: string, params?: any[]): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result: QueryResult = await this.pool.query(sql, params);\n return result;\n }\n\n async createTable(\n tableName: string,\n columns: ColumnDefinition[]\n ): Promise<void> {\n const columnDefs = columns\n .map((col) => {\n let def = `\"${col.name}\" ${this.mapType(col.type, col.length)}`;\n\n if (col.primary) def += \" PRIMARY KEY\";\n if (col.autoIncrement) def += \" GENERATED ALWAYS AS IDENTITY\";\n if (!col.nullable) def += \" NOT NULL\";\n if (col.unique) def += \" UNIQUE\";\n if (col.default !== undefined) {\n def += ` DEFAULT ${this.formatValue(col.default)}`;\n }\n\n return def;\n })\n .join(\", \");\n\n const sql = `CREATE TABLE IF NOT EXISTS \"${tableName}\" (${columnDefs})`;\n await this.execute(sql);\n }\n\n async dropTable(tableName: string): Promise<void> {\n await this.execute(`DROP TABLE IF EXISTS \"${tableName}\"`);\n }\n\n async hasTable(tableName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT EXISTS (\n SELECT FROM information_schema.tables \n WHERE table_schema = 'public' \n AND table_name = $1\n )`,\n [tableName]\n );\n return result[0]?.exists || false;\n }\n\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const result = await this.query(\n `SELECT EXISTS (\n SELECT FROM information_schema.columns \n WHERE table_schema = 'public' \n AND table_name = $1 \n AND column_name = $2\n )`,\n [tableName, columnName]\n );\n return result[0]?.exists || false;\n }\n\n async select(table: string, options: SelectOptions): Promise<any[]> {\n const columns = options.columns?.join(\", \") || \"*\";\n let sql = `SELECT ${columns} FROM \"${table}\"`;\n const params: any[] = [];\n let paramIndex = 1;\n\n // Joins\n if (options.joins && options.joins.length > 0) {\n for (const join of options.joins) {\n sql += ` ${join.type} JOIN \"${join.table}\" ON ${join.first} ${join.operator} ${join.second}`;\n }\n }\n\n // Where clauses\n if (options.where && options.where.length > 0) {\n const whereParts = options.where.map((clause, index) => {\n const boolean = index === 0 ? \"WHERE\" : clause.boolean;\n const condition = this.buildWhereCondition(clause, params, paramIndex);\n paramIndex = params.length + 1;\n return `${boolean} ${condition}`;\n });\n sql += \" \" + whereParts.join(\" \");\n }\n\n // Order by\n if (options.orderBy && options.orderBy.length > 0) {\n const orderParts = options.orderBy.map(\n (o) => `\"${o.column}\" ${o.direction}`\n );\n sql += ` ORDER BY ${orderParts.join(\", \")}`;\n }\n\n // Limit and offset\n if (options.limit) {\n sql += ` LIMIT $${paramIndex++}`;\n params.push(options.limit);\n }\n if (options.offset) {\n sql += ` OFFSET $${paramIndex++}`;\n params.push(options.offset);\n }\n\n return await this.query(sql, params);\n }\n\n async insert(table: string, data: Record<string, any>): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const placeholders = values.map((_, i) => `$${i + 1}`).join(\", \");\n\n const sql = `INSERT INTO \"${table}\" (${keys\n .map((k) => `\"${k}\"`)\n .join(\", \")}) \n VALUES (${placeholders}) \n RETURNING *`;\n\n const result = await this.query(sql, values);\n return result[0];\n }\n\n async update(\n table: string,\n id: any,\n data: Record<string, any>\n ): Promise<any> {\n const keys = Object.keys(data);\n const values = Object.values(data);\n const setParts = keys.map((k, i) => `\"${k}\" = $${i + 1}`).join(\", \");\n\n const sql = `UPDATE \"${table}\" SET ${setParts} WHERE id = $${\n keys.length + 1\n } RETURNING *`;\n const result = await this.query(sql, [...values, id]);\n return result[0];\n }\n\n async delete(table: string, id: any): Promise<boolean> {\n const sql = `DELETE FROM \"${table}\" WHERE id = $1`;\n const result = await this.execute(sql, [id]);\n return result.rowCount > 0;\n }\n\n async beginTransaction(): Promise<void> {\n if (!this.pool) throw new Error(\"Database not connected\");\n this.client = await this.pool.connect();\n await this.client.query(\"BEGIN\");\n }\n\n async commit(): Promise<void> {\n if (!this.client) throw new Error(\"No active transaction\");\n await this.client.query(\"COMMIT\");\n this.client.release();\n this.client = null;\n }\n\n async rollback(): Promise<void> {\n if (!this.client) throw new Error(\"No active transaction\");\n await this.client.query(\"ROLLBACK\");\n this.client.release();\n this.client = null;\n }\n\n async raw(query: string, params: any[] = []): Promise<any> {\n if (!this.pool) throw new Error(\"Database not connected\");\n const result = await this.pool.query(query, params);\n return result.rows;\n }\n\n private buildWhereCondition(\n clause: WhereClause,\n params: any[],\n startIndex: number\n ): string {\n const column = `\"${clause.column}\"`;\n\n switch (clause.operator) {\n case \"IN\":\n const inPlaceholders = (clause.value as any[])\n .map((_, i) => `$${startIndex + i}`)\n .join(\", \");\n params.push(...clause.value);\n return `${column} IN (${inPlaceholders})`;\n\n case \"NOT IN\":\n const notInPlaceholders = (clause.value as any[])\n .map((_, i) => `$${startIndex + i}`)\n .join(\", \");\n params.push(...clause.value);\n return `${column} NOT IN (${notInPlaceholders})`;\n\n case \"BETWEEN\":\n params.push(clause.value[0], clause.value[1]);\n return `${column} BETWEEN $${startIndex} AND $${startIndex + 1}`;\n\n case \"IS NULL\":\n return `${column} IS NULL`;\n\n case \"IS NOT NULL\":\n return `${column} IS NOT NULL`;\n\n default:\n params.push(clause.value);\n return `${column} ${clause.operator} $${startIndex}`;\n }\n }\n\n private mapType(type: string, length?: number): string {\n const typeMap: Record<string, string> = {\n string: length ? `VARCHAR(${length})` : \"VARCHAR(255)\",\n text: \"TEXT\",\n integer: \"INTEGER\",\n bigInteger: \"BIGINT\",\n float: \"REAL\",\n double: \"DOUBLE PRECISION\",\n decimal: \"DECIMAL\",\n boolean: \"BOOLEAN\",\n date: \"DATE\",\n datetime: \"TIMESTAMP\",\n timestamp: \"TIMESTAMP\",\n json: \"JSONB\",\n uuid: \"UUID\",\n };\n return typeMap[type] || type.toUpperCase();\n }\n\n private formatValue(value: any): string {\n if (value === null) return \"NULL\";\n if (typeof value === \"string\") return `'${value.replace(/'/g, \"''\")}'`;\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n if (value instanceof Date) return `'${value.toISOString()}'`;\n return String(value);\n }\n}\n","/**\n * Macroable trait\n * Allows adding custom methods to a class at runtime\n */\nexport class Macroable {\n protected static macros: Record<string, Function> = {};\n\n /**\n * Register a custom macro\n */\n static macro(name: string, macro: Function): void {\n this.macros[name] = macro;\n (this.prototype as any)[name] = macro;\n }\n\n /**\n * Mix another object into the class\n */\n static mixin(mixin: Record<string, Function>): void {\n Object.keys(mixin).forEach((key) => {\n this.macro(key, mixin[key]);\n });\n }\n\n /**\n * Check if macro exists\n */\n static hasMacro(name: string): boolean {\n return !!this.macros[name];\n }\n}\n","import type {\n JoinClause,\n OrderByClause,\n SelectOptions,\n WhereClause,\n} from \"./types\";\n\nimport { Macroable } from \"./support/Macroable\";\n\n/**\n * Query Builder - Fluent interface for building database queries\n * Arcanox Query Builder\n */\nexport class QueryBuilder<T = any> extends Macroable {\n protected tableName: string;\n protected selectColumns: string[] = [\"*\"];\n protected whereClauses: WhereClause[] = [];\n protected orderByClauses: OrderByClause[] = [];\n protected joinClauses: JoinClause[] = [];\n protected limitValue?: number;\n protected offsetValue?: number;\n protected adapter: any; // DatabaseAdapter\n\n constructor(table: string, adapter: any) {\n super();\n this.tableName = table;\n this.adapter = adapter;\n }\n\n /**\n * Select specific columns\n */\n select(...columns: string[]): this {\n this.selectColumns = columns;\n return this;\n }\n\n /**\n * Add a WHERE clause\n */\n where(column: string, operator: any, value?: any): this {\n // Support where(column, value) syntax\n if (value === undefined) {\n value = operator;\n operator = \"=\";\n }\n\n this.whereClauses.push({\n column,\n operator,\n value,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * Add an OR WHERE clause\n */\n orWhere(column: string, operator: any, value?: any): this {\n if (value === undefined) {\n value = operator;\n operator = \"=\";\n }\n\n this.whereClauses.push({\n column,\n operator,\n value,\n boolean: \"OR\",\n });\n return this;\n }\n\n /**\n * WHERE IN clause\n */\n whereIn(column: string, values: any[]): this {\n this.whereClauses.push({\n column,\n operator: \"IN\",\n value: values,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NOT IN clause\n */\n whereNotIn(column: string, values: any[]): this {\n this.whereClauses.push({\n column,\n operator: \"NOT IN\",\n value: values,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE BETWEEN clause\n */\n whereBetween(column: string, range: [any, any]): this {\n this.whereClauses.push({\n column,\n operator: \"BETWEEN\",\n value: range,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NULL clause\n */\n whereNull(column: string): this {\n this.whereClauses.push({\n column,\n operator: \"IS NULL\",\n value: null,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * WHERE NOT NULL clause\n */\n whereNotNull(column: string): this {\n this.whereClauses.push({\n column,\n operator: \"IS NOT NULL\",\n value: null,\n boolean: \"AND\",\n });\n return this;\n }\n\n /**\n * Add ORDER BY clause\n */\n orderBy(\n column: string,\n direction: \"ASC\" | \"DESC\" | \"asc\" | \"desc\" = \"ASC\"\n ): this {\n this.orderByClauses.push({\n column,\n direction: direction.toUpperCase() as \"ASC\" | \"DESC\",\n });\n return this;\n }\n\n /**\n * Add LIMIT clause\n */\n limit(count: number): this {\n this.limitValue = count;\n return this;\n }\n\n /**\n * Add OFFSET clause\n */\n offset(count: number): this {\n this.offsetValue = count;\n return this;\n }\n\n /**\n * Add JOIN clause\n */\n join(\n table: string,\n first: string,\n operator: string,\n second: string,\n type: \"INNER\" | \"LEFT\" | \"RIGHT\" = \"INNER\"\n ): this {\n this.joinClauses.push({\n type,\n table,\n first,\n operator,\n second,\n });\n return this;\n }\n\n /**\n * Add LEFT JOIN clause\n */\n leftJoin(\n table: string,\n first: string,\n operator: string,\n second: string\n ): this {\n return this.join(table, first, operator, second, \"LEFT\");\n }\n\n /**\n * Add RIGHT JOIN clause\n */\n rightJoin(\n table: string,\n first: string,\n operator: string,\n second: string\n ): this {\n return this.join(table, first, operator, second, \"RIGHT\");\n }\n\n protected eagerLoads: string[] = [];\n protected model: any; // Model class\n\n /**\n * Set the model class\n */\n setModel(model: any): this {\n this.model = model;\n return this;\n }\n\n /**\n * Eager load relationships\n */\n with(relations: string | string[]): this {\n if (Array.isArray(relations)) {\n this.eagerLoads.push(...relations);\n } else {\n this.eagerLoads.push(relations);\n }\n return this;\n }\n\n /**\n * Execute query and get all results\n */\n async get(): Promise<T[]> {\n const options: SelectOptions = {\n columns: this.selectColumns,\n where: this.whereClauses,\n orderBy: this.orderByClauses,\n limit: this.limitValue,\n offset: this.offsetValue,\n joins: this.joinClauses,\n };\n\n const results = await this.adapter.select(this.tableName, options);\n\n if (this.eagerLoads.length > 0 && this.model) {\n return await this.eagerLoadRelations(results);\n }\n\n return results;\n }\n\n /**\n * Eager load relations\n */\n protected async eagerLoadRelations(results: any[]): Promise<any[]> {\n if (results.length === 0) return results;\n\n // Hydrate models first\n const models = results.map((result) => this.model.hydrate(result));\n\n for (const relationName of this.eagerLoads) {\n // Check if relation exists on model\n const instance = new this.model();\n if (typeof instance[relationName] !== \"function\") {\n throw new Error(\n `Relation ${relationName} does not exist on ${this.model.name}`\n );\n }\n\n // Get relation instance\n const relation = instance[relationName]();\n\n // Add constraints for eager loading\n relation.addEagerConstraints(models);\n\n // Get related results\n const relatedResults = await relation.get();\n\n // Match results to models\n relation.match(models, relatedResults, relationName);\n }\n\n return models;\n }\n\n /**\n * Get first result\n */\n async first(): Promise<T | null> {\n this.limit(1);\n const results = await this.get();\n return results[0] || null;\n }\n\n /**\n * Find by ID\n */\n async find(id: any): Promise<T | null> {\n return this.where(\"id\", id).first();\n }\n\n /**\n * Count results\n */\n async count(): Promise<number> {\n this.selectColumns = [\"COUNT(*) as count\"];\n const result = await this.first();\n return result ? (result as any).count : 0;\n }\n\n /**\n * Get specific column values\n */\n async pluck(column: string): Promise<any[]> {\n this.select(column);\n const results = await this.get();\n return results.map((row) => (row as any)[column]);\n }\n\n /**\n * Sum of column\n */\n async sum(column: string): Promise<number> {\n this.selectColumns = [`SUM(${column}) as sum`];\n const result = await this.first();\n return result ? (result as any).sum || 0 : 0;\n }\n\n /**\n * Average of column\n */\n async avg(column: string): Promise<number> {\n this.selectColumns = [`AVG(${column}) as avg`];\n const result = await this.first();\n return result ? (result as any).avg || 0 : 0;\n }\n\n /**\n * Minimum value of column\n */\n async min(column: string): Promise<any> {\n this.selectColumns = [`MIN(${column}) as min`];\n const result = await this.first();\n return result ? (result as any).min : null;\n }\n\n /**\n * Maximum value of column\n */\n async max(column: string): Promise<any> {\n this.selectColumns = [`MAX(${column}) as max`];\n const result = await this.first();\n return result ? (result as any).max : null;\n }\n\n /**\n * Check if any records exist\n */\n async exists(): Promise<boolean> {\n const count = await this.count();\n return count > 0;\n }\n\n /**\n * Paginate results\n */\n async paginate(\n page: number = 1,\n perPage: number = 15\n ): Promise<{\n data: T[];\n total: number;\n perPage: number;\n currentPage: number;\n lastPage: number;\n }> {\n const total = await this.count();\n const offset = (page - 1) * perPage;\n\n this.limit(perPage).offset(offset);\n const data = await this.get();\n\n return {\n data,\n total,\n perPage,\n currentPage: page,\n lastPage: Math.ceil(total / perPage),\n };\n }\n\n /**\n * Clone the query builder\n */\n clone(): QueryBuilder<T> {\n const cloned = new QueryBuilder<T>(this.tableName, this.adapter);\n cloned.selectColumns = [...this.selectColumns];\n cloned.whereClauses = [...this.whereClauses];\n cloned.orderByClauses = [...this.orderByClauses];\n cloned.joinClauses = [...this.joinClauses];\n cloned.limitValue = this.limitValue;\n cloned.offsetValue = this.offsetValue;\n return cloned;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\n\nexport abstract class Relation<R extends Model = any> {\n protected query: QueryBuilder<R>;\n protected parent: Model;\n protected related: new () => R;\n\n constructor(query: QueryBuilder<R>, parent: Model) {\n this.query = query;\n this.parent = parent;\n this.related = (query as any).model;\n this.addConstraints();\n }\n\n abstract addConstraints(): void;\n\n abstract addEagerConstraints(models: Model[]): void;\n\n abstract match(models: Model[], results: R[], relation: string): Model[];\n\n getQuery(): QueryBuilder<R> {\n return this.query;\n }\n\n async get(): Promise<R[]> {\n return this.query.get();\n }\n\n async first(): Promise<R | null> {\n return this.query.first();\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class BelongsTo<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected ownerKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n ownerKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.ownerKey = ownerKey;\n }\n\n addConstraints(): void {\n const foreignValue = this.parent.getAttribute(this.foreignKey);\n this.query.where(this.ownerKey, \"=\", foreignValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.foreignKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.ownerKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.ownerKey);\n dictionary[key] = result;\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.foreignKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n }\n });\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class BelongsToMany<R extends Model = any> extends Relation<R> {\n protected table: string;\n protected foreignPivotKey: string;\n protected relatedPivotKey: string;\n protected parentKey: string;\n protected relatedKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n table: string,\n foreignPivotKey: string,\n relatedPivotKey: string,\n parentKey: string,\n relatedKey: string\n ) {\n super(query, parent);\n this.table = table;\n this.foreignPivotKey = foreignPivotKey;\n this.relatedPivotKey = relatedPivotKey;\n this.parentKey = parentKey;\n this.relatedKey = relatedKey;\n }\n\n addConstraints(): void {\n this.performJoin();\n this.query.where(\n `${this.table}.${this.foreignPivotKey}`,\n \"=\",\n this.parent.getAttribute(this.parentKey)\n );\n }\n\n protected performJoin(query?: QueryBuilder<R>): this {\n const q = query || this.query;\n const relatedTable = this.related.prototype.getTable();\n\n q.join(\n this.table,\n `${relatedTable}.${this.relatedKey}`,\n \"=\",\n `${this.table}.${this.relatedPivotKey}`\n );\n\n return this;\n }\n\n addEagerConstraints(models: Model[]): void {\n this.performJoin();\n const keys = models\n .map((model) => model.getAttribute(this.parentKey))\n .filter((k) => k !== null);\n this.query.whereIn(`${this.table}.${this.foreignPivotKey}`, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R[]> = {};\n\n // In a real implementation, we'd select the pivot fields to map correctly\n // For now, we'll assume the results contain the pivot data or we re-query\n // This is a simplified implementation\n\n // TODO: Implement proper pivot mapping\n // For now, we'll just map based on the assumption that results are correct\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class HasMany<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected localKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n localKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.localKey = localKey;\n }\n\n addConstraints(): void {\n const localValue = this.parent.getAttribute(this.localKey);\n this.query.where(this.foreignKey, \"=\", localValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.localKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.foreignKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R[]> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.foreignKey);\n if (!dictionary[key]) {\n dictionary[key] = [];\n }\n dictionary[key].push(result);\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.localKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n } else {\n model.setRelation(relation, []);\n }\n });\n\n return models;\n }\n}\n","import { Model } from \"../Model\";\nimport { QueryBuilder } from \"../QueryBuilder\";\nimport { Relation } from \"./Relation\";\n\nexport class HasOne<R extends Model = any> extends Relation<R> {\n protected foreignKey: string;\n protected localKey: string;\n\n constructor(\n query: QueryBuilder<R>,\n parent: Model,\n foreignKey: string,\n localKey: string\n ) {\n super(query, parent);\n this.foreignKey = foreignKey;\n this.localKey = localKey;\n }\n\n addConstraints(): void {\n const localValue = this.parent.getAttribute(this.localKey);\n this.query.where(this.foreignKey, \"=\", localValue);\n }\n\n addEagerConstraints(models: Model[]): void {\n const keys = models\n .map((model) => model.getAttribute(this.localKey))\n .filter((k) => k !== null);\n this.query.whereIn(this.foreignKey, keys);\n }\n\n match(models: Model[], results: R[], relation: string): Model[] {\n const dictionary: Record<string, R> = {};\n\n results.forEach((result) => {\n const key = result.getAttribute(this.foreignKey);\n dictionary[key] = result;\n });\n\n models.forEach((model) => {\n const key = model.getAttribute(this.localKey);\n if (dictionary[key]) {\n model.setRelation(relation, dictionary[key]);\n }\n });\n\n return models;\n }\n}\n","import { QueryBuilder } from \"./QueryBuilder\";\nimport { BelongsTo } from \"./relations/BelongsTo\";\nimport { BelongsToMany } from \"./relations/BelongsToMany\";\nimport { HasMany } from \"./relations/HasMany\";\nimport { HasOne } from \"./relations/HasOne\";\nimport type { DatabaseAdapter } from \"./types\";\n\n/**\n * Relation types for arcanox relationships\n */\nexport type RelationType = \"hasOne\" | \"hasMany\" | \"belongsTo\" | \"belongsToMany\";\n\nexport interface RelationConfig {\n type: RelationType;\n related: typeof Model;\n foreignKey?: string;\n localKey?: string;\n pivotTable?: string;\n}\n\nimport { Macroable } from \"./support/Macroable\";\n\n/**\n * Base Model class - Arcanox ORM\n */\nexport class Model<T = any> extends Macroable {\n // Static properties\n protected static adapter: DatabaseAdapter;\n protected static tableName: string;\n protected static primaryKey: string = \"id\";\n protected static connection: string = \"default\";\n\n // Instance properties\n protected attributes: Record<string, any> = {};\n protected original: Record<string, any> = {};\n protected relations: Record<string, any> = {};\n protected exists: boolean = false;\n\n // Configuration\n protected fillable: string[] = [];\n protected guarded: string[] = [\"id\"];\n protected hidden: string[] = [];\n protected visible: string[] = [];\n protected casts: Record<string, string> = {};\n protected dates: string[] = [];\n protected timestamps: boolean = true;\n protected createdAt: string = \"created_at\";\n protected updatedAt: string = \"updated_at\";\n protected softDeletes: boolean = false;\n protected deletedAt: string = \"deleted_at\";\n\n /**\n * Set the database adapter\n */\n static setAdapter(adapter: DatabaseAdapter): void {\n this.adapter = adapter;\n }\n\n /**\n * Get the table name\n */\n static getTable(): string {\n if (this.tableName) {\n return this.tableName;\n }\n // Auto-generate table name from class name (pluralize and snake_case)\n const className = this.name;\n return this.pluralize(this.snakeCase(className));\n }\n\n /**\n * Create a new query builder instance\n */\n static query<T>(): QueryBuilder<T> {\n return new QueryBuilder<T>(this.getTable(), this.adapter);\n }\n\n /**\n * Get all records\n */\n static async all<T>(): Promise<T[]> {\n const results = await this.query<T>().get();\n return results.map((data) => this.hydrate<T>(data));\n }\n\n /**\n * Find a record by ID\n */\n static async find<T>(id: any): Promise<T | null> {\n const data = await this.query<T>().where(this.primaryKey, id).first();\n return data ? this.hydrate<T>(data) : null;\n }\n\n /**\n * Find a record by ID or throw exception\n */\n static async findOrFail<T>(id: any): Promise<T> {\n const model = await this.find<T>(id);\n if (!model) {\n throw new Error(`Model not found with ${this.primaryKey}: ${id}`);\n }\n return model;\n }\n\n /**\n * Create a WHERE query\n */\n static where<T>(column: string, operator: any, value?: any): QueryBuilder<T> {\n return this.query<T>().where(column, operator, value);\n }\n\n /**\n * Create a new record\n */\n static async create<T>(data: Partial<T>): Promise<T> {\n const instance = new this() as any;\n instance.fill(data);\n\n if (instance.timestamps) {\n const now = new Date();\n instance.attributes[instance.createdAt] = now;\n instance.attributes[instance.updatedAt] = now;\n }\n\n const result = await this.adapter.insert(\n this.getTable(),\n instance.attributes\n );\n\n const id = result[this.primaryKey] || result.id || result.insertId;\n instance.attributes[this.primaryKey] = id;\n if (this.primaryKey !== \"id\") {\n instance.attributes.id = id;\n }\n\n instance.exists = true;\n instance.syncOriginal();\n\n return instance as T;\n }\n\n /**\n * Update a record\n */\n static async update<T>(id: any, data: Partial<T>): Promise<T> {\n const instance = await this.findOrFail<T>(id);\n await (instance as any).update(data);\n return instance;\n }\n\n /**\n * Delete a record\n */\n static async destroy(id: any): Promise<boolean> {\n const instance = await this.find(id);\n if (!instance) return false;\n return await (instance as any).delete();\n }\n\n /**\n * First or create\n */\n static async firstOrCreate<T>(\n attributes: Partial<T>,\n values: Partial<T> = {}\n ): Promise<T> {\n const query = this.query<T>();\n\n for (const [key, value] of Object.entries(attributes)) {\n query.where(key, value);\n }\n\n const existing = await query.first();\n if (existing) {\n return this.hydrate<T>(existing);\n }\n\n return await this.create<T>({ ...attributes, ...values });\n }\n\n /**\n * Update or create\n */\n static async updateOrCreate<T>(\n attributes: Partial<T>,\n values: Partial<T> = {}\n ): Promise<T> {\n const query = this.query<T>();\n\n for (const [key, value] of Object.entries(attributes)) {\n query.where(key, value);\n }\n\n const existing = await query.first();\n if (existing) {\n const instance = this.hydrate<T>(existing) as any;\n await instance.update(values);\n return instance;\n }\n\n return await this.create<T>({ ...attributes, ...values });\n }\n\n /**\n * Hydrate a model instance from data\n */\n protected static hydrate<T>(data: any): T {\n const instance = new this() as any;\n instance.attributes = { ...data };\n instance.original = { ...data };\n instance.exists = true;\n return instance as T;\n }\n\n /**\n * Fill model attributes\n */\n fill(attributes: Partial<T>): this {\n for (const [key, value] of Object.entries(attributes)) {\n if (this.isFillable(key)) {\n this.setAttribute(key, value);\n }\n }\n return this;\n }\n\n /**\n * Check if attribute is fillable\n */\n protected isFillable(key: string): boolean {\n if (this.fillable.length > 0) {\n return this.fillable.includes(key);\n }\n return !this.guarded.includes(key);\n }\n\n /**\n * Set an attribute\n */\n setAttribute(key: string, value: any): void {\n // Check for mutator\n const mutator = `set${this.studly(key)}Attribute`;\n if (typeof (this as any)[mutator] === \"function\") {\n value = (this as any)[mutator](value);\n }\n\n this.attributes[key] = this.castAttribute(key, value);\n }\n\n /**\n * Get an attribute\n */\n getAttribute(key: string): any {\n // Check for accessor\n const accessor = `get${this.studly(key)}Attribute`;\n if (typeof (this as any)[accessor] === \"function\") {\n return (this as any)[accessor]();\n }\n\n const value = this.attributes[key];\n return this.castAttribute(key, value, true);\n }\n\n /**\n * Cast attribute to specified type\n */\n protected castAttribute(\n key: string,\n value: any,\n isGetting: boolean = false\n ): any {\n if (value === null || value === undefined) return value;\n\n const cast = this.casts[key];\n if (!cast) return value;\n\n if (isGetting) {\n switch (cast) {\n case \"int\":\n case \"integer\":\n return parseInt(value);\n case \"float\":\n case \"double\":\n return parseFloat(value);\n case \"string\":\n return String(value);\n case \"bool\":\n case \"boolean\":\n return Boolean(value);\n case \"array\":\n case \"json\":\n return typeof value === \"string\" ? JSON.parse(value) : value;\n case \"date\":\n case \"datetime\":\n return value instanceof Date ? value : new Date(value);\n default:\n return value;\n }\n } else {\n switch (cast) {\n case \"array\":\n case \"json\":\n return typeof value === \"object\" ? JSON.stringify(value) : value;\n case \"date\":\n case \"datetime\":\n return value instanceof Date ? value : new Date(value);\n default:\n return value;\n }\n }\n }\n\n /**\n * Save the model\n */\n async save(): Promise<this> {\n const constructor = this.constructor as typeof Model;\n\n if (this.timestamps) {\n const now = new Date();\n if (!this.exists) {\n this.attributes[this.createdAt] = now;\n }\n this.attributes[this.updatedAt] = now;\n }\n\n if (this.exists) {\n // Update existing record\n const id = this.attributes[constructor.primaryKey];\n await constructor.adapter.update(\n constructor.getTable(),\n id,\n this.attributes\n );\n } else {\n // Insert new record\n const result = await constructor.adapter.insert(\n constructor.getTable(),\n this.attributes\n );\n\n const id = result[constructor.primaryKey] || result.id || result.insertId;\n this.attributes[constructor.primaryKey] = id;\n if (constructor.primaryKey !== \"id\") {\n this.attributes.id = id;\n }\n\n this.exists = true;\n }\n\n this.syncOriginal();\n return this;\n }\n\n /**\n * Update the model\n */\n async update(attributes: Partial<T>): Promise<this> {\n this.fill(attributes);\n return await this.save();\n }\n\n /**\n * Delete the model\n */\n async delete(): Promise<boolean> {\n const constructor = this.constructor as typeof Model;\n\n if (this.softDeletes) {\n this.attributes[this.deletedAt] = new Date();\n await this.save();\n return true;\n }\n\n const id = this.attributes[constructor.primaryKey];\n return await constructor.adapter.delete(constructor.getTable(), id);\n }\n\n /**\n * Force delete (ignore soft deletes)\n */\n async forceDelete(): Promise<boolean> {\n const constructor = this.constructor as typeof Model;\n const id = this.attributes[constructor.primaryKey];\n return await constructor.adapter.delete(constructor.getTable(), id);\n }\n\n /**\n * Restore soft deleted model\n */\n async restore(): Promise<this> {\n if (this.softDeletes) {\n this.attributes[this.deletedAt] = null;\n await this.save();\n }\n return this;\n }\n\n /**\n * Sync original attributes\n */\n protected syncOriginal(): void {\n this.original = { ...this.attributes };\n }\n\n /**\n * Get dirty attributes (changed since last sync)\n */\n getDirty(): Record<string, any> {\n const dirty: Record<string, any> = {};\n for (const [key, value] of Object.entries(this.attributes)) {\n if (this.original[key] !== value) {\n dirty[key] = value;\n }\n }\n return dirty;\n }\n\n /**\n * Check if model is dirty\n */\n isDirty(): boolean {\n return Object.keys(this.getDirty()).length > 0;\n }\n\n constructor(attributes: Partial<T> = {}) {\n super();\n this.fill(attributes);\n }\n\n /**\n * Convert model to JSON\n */\n toJSON(): Record<string, any> {\n const json: Record<string, any> = {};\n\n // Add attributes\n for (const [key, value] of Object.entries(this.attributes)) {\n if (this.hidden.includes(key)) continue;\n if (this.visible.length > 0 && !this.visible.includes(key)) continue;\n json[key] = this.getAttribute(key);\n }\n\n // Add relations\n for (const [key, value] of Object.entries(this.relations)) {\n json[key] = value;\n }\n\n return json;\n }\n\n /**\n * Define a one-to-one relationship\n */\n hasOne<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n localKey?: string\n ): HasOne<R> {\n const instance = new related();\n const foreign = foreignKey || `${this.constructor.name.toLowerCase()}_id`;\n const local = localKey || \"id\";\n\n return new HasOne<R>(instance.newQuery(), this, foreign, local);\n }\n\n /**\n * Define a one-to-many relationship\n */\n hasMany<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n localKey?: string\n ): HasMany<R> {\n const instance = new related();\n const foreign = foreignKey || `${this.constructor.name.toLowerCase()}_id`;\n const local = localKey || \"id\";\n\n return new HasMany<R>(instance.newQuery(), this, foreign, local);\n }\n\n /**\n * Define an inverse one-to-one or many relationship\n */\n belongsTo<R extends Model>(\n related: new () => R,\n foreignKey?: string,\n ownerKey?: string\n ): BelongsTo<R> {\n const instance = new related();\n const foreign =\n foreignKey || `${instance.constructor.name.toLowerCase()}_id`;\n const owner = ownerKey || \"id\";\n\n return new BelongsTo<R>(instance.newQuery(), this, foreign, owner);\n }\n\n /**\n * Define a many-to-many relationship\n */\n belongsToMany<R extends Model>(\n related: new () => R,\n table?: string,\n foreignPivotKey?: string,\n relatedPivotKey?: string,\n parentKey?: string,\n relatedKey?: string\n ): BelongsToMany<R> {\n const instance = new related();\n const pivotTable = table || this.guessPivotTable(instance);\n const foreignPivot =\n foreignPivotKey || `${this.constructor.name.toLowerCase()}_id`;\n const relatedPivot =\n relatedPivotKey || `${instance.constructor.name.toLowerCase()}_id`;\n const parent = parentKey || \"id\";\n const relatedK = relatedKey || \"id\";\n\n return new BelongsToMany<R>(\n instance.newQuery(),\n this,\n pivotTable,\n foreignPivot,\n relatedPivot,\n parent,\n relatedK\n );\n }\n\n /**\n * Guess the pivot table name (alphabetical order of model names)\n */\n protected guessPivotTable(related: Model): string {\n const segments = [\n this.constructor.name.toLowerCase(),\n related.constructor.name.toLowerCase(),\n ];\n segments.sort();\n return segments.join(\"_\");\n }\n\n /**\n * Eager load relationships\n */\n static with<T>(relations: string | string[]): QueryBuilder<T> {\n return this.query<T>().with(relations);\n }\n\n /**\n * Set a loaded relationship\n */\n setRelation(relation: string, value: any): this {\n this.relations[relation] = value;\n return this;\n }\n\n /**\n * Get a loaded relationship\n */\n getRelation(relation: string): any {\n return this.relations[relation];\n }\n\n /**\n * Check if a relationship is loaded\n */\n relationLoaded(relation: string): boolean {\n return this.relations[relation] !== undefined;\n }\n\n /**\n * Create a new query builder for the model\n */\n newQuery(): QueryBuilder<T> {\n return (this.constructor as typeof Model).query<T>();\n }\n\n /**\n * Helper: Convert string to snake_case\n */\n protected static snakeCase(str: string): string {\n return str\n .replace(/([A-Z])/g, \"_$1\")\n .toLowerCase()\n .replace(/^_/, \"\");\n }\n\n /**\n * Helper: Pluralize string (simple implementation)\n */\n protected static pluralize(str: string): string {\n if (str.endsWith(\"y\")) {\n return str.slice(0, -1) + \"ies\";\n }\n if (str.endsWith(\"s\")) {\n return str + \"es\";\n }\n return str + \"s\";\n }\n\n /**\n * Helper: Convert to StudlyCase\n */\n protected studly(str: string): string {\n return str.replace(/(^|_)(\\w)/g, (_, __, c) => c.toUpperCase());\n }\n}\n","import path from \"path\";\nimport { MongoAdapter } from \"../../lib/arcanox/adapters/MongoAdapter\";\nimport { MySQLAdapter } from \"../../lib/arcanox/adapters/MySQLAdapter\";\nimport { PostgresAdapter } from \"../../lib/arcanox/adapters/PostgresAdapter\";\nimport { Model } from \"../../lib/arcanox/Model\";\n\nexport const handleDb = async (args: string[]) => {\n const command = args[0]; // db:seed\n\n if (command !== \"db:seed\") {\n console.error(`Unknown db command: ${command}`);\n process.exit(1);\n }\n\n // Load config\n const configPath = path.resolve(process.cwd(), \"src/config/database\");\n\n try {\n require(\"ts-node\").register({\n transpileOnly: true,\n compilerOptions: {\n module: \"commonjs\",\n },\n });\n } catch (e) {}\n\n // Use dynamic require to avoid webpack bundling user project files\n const { dynamicRequire } = require(\"../../lib/server/utils/dynamicRequire\");\n\n let config;\n try {\n const module = dynamicRequire(configPath);\n config = module.default || module.databaseConfig || module;\n } catch (error) {\n console.error(\"Failed to load database config:\", error);\n process.exit(1);\n }\n\n // Connect to DB\n let adapter;\n if (config.type === \"postgres\") {\n adapter = new PostgresAdapter();\n } else if (config.type === \"mongodb\") {\n adapter = new MongoAdapter();\n } else if (config.type === \"mysql\") {\n adapter = new MySQLAdapter();\n } else {\n console.error(`Unsupported database type: ${config.type}`);\n process.exit(1);\n }\n\n try {\n await adapter.connect(config);\n Model.setAdapter(adapter); // Set adapter for Models used in seeders\n\n // Load DatabaseSeeder\n const seederPath = path.resolve(\n process.cwd(),\n \"database/seeders/DatabaseSeeder.ts\"\n );\n const seederModule = dynamicRequire(seederPath);\n const DatabaseSeeder = seederModule.default || seederModule.DatabaseSeeder;\n\n if (!DatabaseSeeder) {\n throw new Error(\"DatabaseSeeder not found\");\n }\n\n console.log(\"Seeding database...\");\n const seeder = new DatabaseSeeder();\n await seeder.run();\n console.log(\"Database seeded successfully\");\n } catch (error) {\n console.error(\"Seeding failed:\", error);\n process.exit(1);\n } finally {\n await adapter.disconnect();\n }\n};\n","import { execSync } from \"child_process\";\nimport fs from \"fs\";\nimport path from \"path\";\n\ntype PackageManager = \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n\nconst detectPackageManager = (): PackageManager => {\n const cwd = process.cwd();\n\n if (fs.existsSync(path.join(cwd, \"bun.lockb\"))) {\n return \"bun\";\n }\n if (fs.existsSync(path.join(cwd, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n }\n if (fs.existsSync(path.join(cwd, \"yarn.lock\"))) {\n return \"yarn\";\n }\n return \"npm\";\n};\n\nconst getInstallCommand = (pm: PackageManager, packages: string[]): string => {\n const pkgList = packages.join(\" \");\n\n switch (pm) {\n case \"npm\":\n return `npm install ${pkgList}`;\n case \"yarn\":\n return `yarn add ${pkgList}`;\n case \"pnpm\":\n return `pnpm add ${pkgList}`;\n case \"bun\":\n return `bun add ${pkgList}`;\n }\n};\n\nconst installDependencies = (\n packages: string[],\n devPackages: string[] = []\n) => {\n const pm = detectPackageManager();\n console.log(`\\nšŸ“¦ Detected package manager: ${pm}\\n`);\n\n if (packages.length > 0) {\n console.log(`Installing dependencies: ${packages.join(\", \")}`);\n const installCmd = getInstallCommand(pm, packages);\n try {\n execSync(installCmd, { stdio: \"inherit\" });\n console.log(\"āœ… Dependencies installed successfully!\\n\");\n } catch (error) {\n console.error(\"āŒ Failed to install dependencies\");\n process.exit(1);\n }\n }\n\n if (devPackages.length > 0) {\n console.log(`Installing dev dependencies: ${devPackages.join(\", \")}`);\n let devInstallCmd: string;\n switch (pm) {\n case \"npm\":\n devInstallCmd = `npm install --save-dev ${devPackages.join(\" \")}`;\n break;\n case \"yarn\":\n devInstallCmd = `yarn add --dev ${devPackages.join(\" \")}`;\n break;\n case \"pnpm\":\n devInstallCmd = `pnpm add -D ${devPackages.join(\" \")}`;\n break;\n case \"bun\":\n devInstallCmd = `bun add -d ${devPackages.join(\" \")}`;\n break;\n }\n try {\n execSync(devInstallCmd, { stdio: \"inherit\" });\n console.log(\"āœ… Dev dependencies installed successfully!\\n\");\n } catch (error) {\n console.error(\"āŒ Failed to install dev dependencies\");\n process.exit(1);\n }\n }\n};\n\nconst installAuthDependencies = () => {\n console.log(\"šŸ” Installing Auth Provider dependencies...\\n\");\n\n const dependencies = [\n \"jsonwebtoken\",\n \"bcryptjs\",\n \"redis\",\n \"connect-redis\",\n \"express-session\",\n ];\n\n const devDependencies = [\n \"@types/jsonwebtoken\",\n \"@types/bcryptjs\",\n \"@types/express-session\",\n ];\n\n installDependencies(dependencies, devDependencies);\n\n console.log(\"✨ Auth Provider dependencies installed!\");\n console.log(\"You can now use AuthProvider in your application.\\n\");\n};\n\nconst installMailDependencies = () => {\n console.log(\"šŸ“§ Installing Mail Provider dependencies...\\n\");\n\n const dependencies = [\n \"nodemailer\",\n \"ejs\",\n \"handlebars\",\n \"ioredis\",\n \"@aws-sdk/client-ses\",\n \"@aws-sdk/credential-provider-node\",\n \"nodemailer-mailgun-transport\",\n ];\n\n const devDependencies = [\"@types/nodemailer\", \"@types/ejs\"];\n\n installDependencies(dependencies, devDependencies);\n\n console.log(\"✨ Mail Provider dependencies installed!\");\n console.log(\"You can now use MailProvider in your application.\\n\");\n};\n\nconst installDatabaseDependencies = (dbType: string) => {\n console.log(\n `šŸ—„ļø Installing Database Provider dependencies for ${dbType}...\\n`\n );\n\n const commonDependencies = [\"@faker-js/faker\", \"reflect-metadata\"];\n let specificDependencies: string[] = [];\n let devDependencies: string[] = [];\n\n switch (dbType.toLowerCase()) {\n case \"mongo\":\n case \"mongodb\":\n specificDependencies = [\"mongodb\"];\n console.log(\"Installing MongoDB dependencies...\");\n break;\n case \"postgres\":\n case \"postgresql\":\n case \"pg\":\n specificDependencies = [\"pg\"];\n devDependencies = [\"@types/pg\"];\n console.log(\"Installing PostgreSQL dependencies...\");\n break;\n case \"mysql\":\n specificDependencies = [\"mysql2\"];\n console.log(\"Installing MySQL dependencies...\");\n break;\n default:\n console.error(\n `āŒ Unknown database type: ${dbType}. Supported types: mongo, postgres, mysql`\n );\n process.exit(1);\n }\n\n const allDependencies = [...commonDependencies, ...specificDependencies];\n installDependencies(allDependencies, devDependencies);\n\n console.log(\"✨ Database Provider dependencies installed!\");\n console.log(\"You can now use DatabaseProvider in your application.\\n\");\n};\n\nexport const handleDependency = (args: string[]) => {\n const type = args[0].split(\":\")[1]; // auth, mail, database\n\n if (!type) {\n console.error(\"Please specify a dependency type: auth, mail, or database\");\n console.log(\"\\nUsage:\");\n console.log(\" npx arcanajs dependency:auth\");\n console.log(\" npx arcanajs dependency:mail\");\n console.log(\" npx arcanajs dependency:database [mongo|postgres|mysql]\");\n process.exit(1);\n }\n\n switch (type) {\n case \"auth\":\n installAuthDependencies();\n break;\n case \"mail\":\n installMailDependencies();\n break;\n case \"database\":\n const dbType = args[1];\n if (!dbType) {\n console.error(\n \"Please specify a database type: mongo, postgres, or mysql\"\n );\n console.log(\"\\nUsage:\");\n console.log(\" npx arcanajs dependency:database mongo\");\n console.log(\" npx arcanajs dependency:database postgres\");\n console.log(\" npx arcanajs dependency:database mysql\");\n process.exit(1);\n }\n installDatabaseDependencies(dbType);\n break;\n default:\n console.error(`Unknown dependency type: ${type}`);\n console.log(\"\\nAvailable types:\");\n console.log(\" - auth\");\n console.log(\" - mail\");\n console.log(\" - database\");\n process.exit(1);\n }\n};\n","export const toPascalCase = (str: string) => {\n return str.replace(/(^|_)(\\w)/g, (_, __, c) => c.toUpperCase());\n};\n","import fs from \"fs\";\nimport path from \"path\";\n\nexport const writeFile = async (\n dir: string,\n fileName: string,\n content: string\n) => {\n const targetDir = path.resolve(process.cwd(), `src/${dir}`);\n const targetFile = path.join(targetDir, fileName);\n\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n if (fs.existsSync(targetFile)) {\n console.error(`File already exists: ${targetFile}`);\n process.exit(1);\n }\n\n fs.writeFileSync(targetFile, content);\n console.log(`Created: ${path.join(dir, fileName)}`);\n};\n","import { toPascalCase } from \"../../utils/toPascalCase\";\nimport { writeFile } from \"../../utils/writeFile\";\n\ntype ControllerType = \"normal\" | \"api\" | \"resource\";\n\nconst makeController = async (\n name: string,\n type: ControllerType = \"normal\"\n) => {\n let methods = \"\";\n\n if (type === \"resource\") {\n // Full resource controller with all 7 RESTful methods\n methods = `\n async index(req: Request, res: Response) {\n //\n }\n\n async create(req: Request, res: Response) {\n //\n }\n\n async store(req: Request, res: Response) {\n //\n }\n\n async show(req: Request, res: Response) {\n //\n }\n\n async edit(req: Request, res: Response) {\n //\n }\n\n async update(req: Request, res: Response) {\n //\n }\n\n async destroy(req: Request, res: Response) {\n //\n }\n`;\n } else if (type === \"api\") {\n // API controller with 4 methods (no create/edit views)\n methods = `\n async index(req: Request, res: Response) {\n //\n }\n\n async store(req: Request, res: Response) {\n //\n }\n\n async show(req: Request, res: Response) {\n //\n }\n\n async update(req: Request, res: Response) {\n //\n }\n\n async destroy(req: Request, res: Response) {\n //\n }\n`;\n } else {\n // Normal controller - empty\n methods = `\n //\n`;\n }\n\n const content = `import { Request, Response } from 'arcanajs/server'\n\nclass ${toPascalCase(name)} {${methods}}\n\nexport default ${toPascalCase(name)}\n`;\n await writeFile(\"app/Http/Controllers\", `${toPascalCase(name)}.ts`, content);\n};\n\nexport default makeController;\n","import { toPascalCase } from \"../../utils/toPascalCase\";\nimport { writeFile } from \"../../utils/writeFile\";\n\nconst makeFactory = async (name: string) => {\n const modelName = name.replace(\"Factory\", \"\");\n const content = `import { Factory } from 'arcanajs/arcanox'\nimport { ${modelName} } from '@/app/Models/${modelName}'\n\nclass ${toPascalCase(name)} extends Factory<${modelName}> {\n protected model = ${modelName}\n\n definition() {\n return {\n //\n }\n }\n}\n\nexport default ${toPascalCase(name)}\n`;\n await writeFile(\"database/factories\", `${toPascalCase(name)}.ts`, content);\n};\n\nexport default makeFactory;\n","import { writeFile } from \"../../utils/writeFile\";\nimport { toPascalCase } from \"../../utils/toPascalCase\";\n\nexport default async function makeMiddleware(name: string) {\n const content = `import { Middleware, NextFunction, Request, Response } from \"arcanajs/server\";\n\nclass ${toPascalCase(name)} implements Middleware {\n public handle(req: Request, res: Response, next: NextFunction): void {\n // Middleware logic here\n next();\n }\n}\n\nexport default ${toPascalCase(name)}\n`;\n\n await writeFile(\"app/Http/Middleware\", `${toPascalCase(name)}.ts`, content);\n}\n","import { toPascalCase } from \"../../utils/toPascalCase\";\nimport { writeFile } from \"../../utils/writeFile\";\n\nconst makeMigration = async (name: string) => {\n const now = new Date();\n const pad = (n: number) => n.toString().padStart(2, \"0\");\n const timestamp = `${now.getFullYear()}_${pad(now.getMonth() + 1)}_${pad(\n now.getDate()\n )}_${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`;\n \n const fileName = `${timestamp}_${name}.ts`;\n\n const content = `import { Migration, Schema } from 'arcanajs/arcanox'\n\nclass ${toPascalCase(name)} extends Migration {\n async up() {\n // await Schema.create('${name}', (table) => {\n // table.id()\n // table.timestamps()\n // })\n }\n\n async down() {\n // await Schema.dropIfExists('${name}')\n }\n}\n\nexport default ${toPascalCase(name)}\n`;\n await writeFile(\"database/migrations\", fileName, content);\n};\n\nexport default makeMigration;\n","import { toPascalCase } from \"../../utils/toPascalCase\";\nimport { writeFile } from \"../../utils/writeFile\";\n\nexport const makeModel = async (name: string) => {\n const content = `import { Model } from 'arcanajs/arcanox'\n\nclass ${toPascalCase(name)} extends Model {\n // protected table = '${name.toLowerCase()}s'\n protected fillable = []\n}\n\nexport default ${toPascalCase(name)}\n`;\n await writeFile(\"app/Models\", `${toPascalCase(name)}.ts`, content);\n};\n\nexport default makeModel;\n\n","import { writeFile } from \"../../utils/writeFile\";\nimport { toPascalCase } from \"../../utils/toPascalCase\";\n\nexport default async function makeProvider(name: string) {\n const content = `import { ServiceProvider } from \"arcanajs/server\";\n\nclass ${toPascalCase(name)} extends ServiceProvider {\n /**\n * Register any application services.\n */\n public register(): void {\n // Bind services to the container\n }\n\n /**\n * Bootstrap any application services.\n */\n public boot(): void {\n // Run code on application startup\n }\n}\n\nexport default ${toPascalCase(name)}`;\n\n await writeFile(\"app/Providers\", `${toPascalCase(name)}.ts`, content);\n}\n","import { writeFile } from \"../../utils/writeFile\";\nimport { toPascalCase } from \"../../utils/toPascalCase\";\n\nexport default async function makeRequest(name: string) {\n const content = `import { FormRequest } from \"arcanajs/validator\";\n\nclass ${toPascalCase(name)} extends FormRequest {\n /**\n * Determine if the user is authorized to make this request.\n */\n public authorize(): boolean {\n return true;\n }\n\n /**\n * Get the validation rules that apply to the request.\n */\n public rules(): Record<string, string> {\n return {\n // 'field': 'required|string',\n };\n }\n}\n\nexport default ${toPascalCase(name)}`;\n\n await writeFile(\"app/Http/Requests\", `${toPascalCase(name)}.ts`, content);\n}\n","import { toPascalCase } from \"../../utils/toPascalCase\";\nimport { writeFile } from \"../../utils/writeFile\";\n\nconst makeSeeder = async (name: string) => {\n const content = `import { Seeder } from 'arcanajs/arcanox'\n\nclass ${toPascalCase(name)} extends Seeder {\n async run() {\n //\n }\n}\n\nexport default ${toPascalCase(name)}\n`;\n await writeFile(\"database/seeders\", `${toPascalCase(name)}.ts`, content);\n};\n\nexport default makeSeeder;\n","import makeController from \"./make/Controller\";\nimport makeFactory from \"./make/Factory\";\nimport makeMiddleware from \"./make/Middleware\";\nimport makeMigration from \"./make/Migration\";\nimport makeModel from \"./make/Model\";\nimport makeProvider from \"./make/Provider\";\nimport makeRequest from \"./make/Request\";\nimport makeSeeder from \"./make/Seeder\";\n\nexport const handleMake = async (args: string[]) => {\n const type = args[0].split(\":\")[1]; // model, controller, etc.\n const name = args[1];\n\n if (!name) {\n console.error(`Please specify a name for the ${type}`);\n process.exit(1);\n }\n\n switch (type) {\n case \"model\":\n await makeModel(name);\n if (args.includes(\"--all\") || args.includes(\"-a\")) {\n await makeMigration(`create_${name.toLowerCase()}s_table`);\n await makeFactory(`${name}Factory`);\n await makeSeeder(`${name}Seeder`);\n await makeController(`${name}Controller`, \"resource\");\n }\n break;\n case \"controller\":\n let controllerType: \"normal\" | \"api\" | \"resource\" = \"normal\";\n if (args.includes(\"--resource\") || args.includes(\"-r\")) {\n controllerType = \"resource\";\n } else if (args.includes(\"--api\")) {\n controllerType = \"api\";\n }\n await makeController(name, controllerType);\n break;\n case \"migration\":\n await makeMigration(name);\n break;\n case \"seeder\":\n await makeSeeder(name);\n break;\n case \"factory\":\n await makeFactory(name);\n break;\n case \"request\":\n await makeRequest(name);\n break;\n case \"middleware\":\n await makeMiddleware(name);\n break;\n case \"provider\":\n await makeProvider(name);\n break;\n default:\n console.error(`Unknown make command: make:${type}`);\n process.exit(1);\n }\n};\n","import type { ColumnDefinition } from \"../types\";\n\n/**\n * Column definition builder - fluent interface for defining columns\n */\nexport class ColumnBuilder {\n private definition: ColumnDefinition;\n\n constructor(name: string, type: string, length?: number) {\n this.definition = {\n name,\n type,\n length,\n nullable: false,\n };\n }\n\n /**\n * Make column nullable\n */\n nullable(): this {\n this.definition.nullable = true;\n return this;\n }\n\n /**\n * Set default value\n */\n default(value: any): this {\n this.definition.default = value;\n return this;\n }\n\n /**\n * Make column unique\n */\n unique(): this {\n this.definition.unique = true;\n return this;\n }\n\n /**\n * Make column primary key\n */\n primary(): this {\n this.definition.primary = true;\n return this;\n }\n\n /**\n * Make column auto-increment\n */\n autoIncrement(): this {\n this.definition.autoIncrement = true;\n return this;\n }\n\n /**\n * Make column unsigned (for numbers)\n */\n unsigned(): this {\n this.definition.unsigned = true;\n return this;\n }\n\n /**\n * Get the column definition\n */\n getDefinition(): ColumnDefinition {\n return this.definition;\n }\n}\n\n/**\n * Foreign key definition builder\n */\nexport class ForeignKeyBuilder {\n private column: string;\n private referencedTable?: string;\n private referencedColumn?: string;\n private onDeleteAction?: string;\n private onUpdateAction?: string;\n\n constructor(column: string) {\n this.column = column;\n }\n\n /**\n * Set referenced table and column\n */\n references(column: string): this {\n this.referencedColumn = column;\n return this;\n }\n\n /**\n * Set referenced table\n */\n on(table: string): this {\n this.referencedTable = table;\n return this;\n }\n\n /**\n * Set ON DELETE action\n */\n onDelete(action: \"CASCADE\" | \"SET NULL\" | \"RESTRICT\" | \"NO ACTION\"): this {\n this.onDeleteAction = action;\n return this;\n }\n\n /**\n * Set ON UPDATE action\n */\n onUpdate(action: \"CASCADE\" | \"SET NULL\" | \"RESTRICT\" | \"NO ACTION\"): this {\n this.onUpdateAction = action;\n return this;\n }\n\n /**\n * Get foreign key SQL\n */\n toSQL(): string {\n if (!this.referencedTable || !this.referencedColumn) {\n throw new Error(\"Foreign key must reference a table and column\");\n }\n\n let sql = `FOREIGN KEY (${this.column}) REFERENCES ${this.referencedTable}(${this.referencedColumn})`;\n\n if (this.onDeleteAction) {\n sql += ` ON DELETE ${this.onDeleteAction}`;\n }\n if (this.onUpdateAction) {\n sql += ` ON UPDATE ${this.onUpdateAction}`;\n }\n\n return sql;\n }\n}\n\n/**\n * Blueprint - defines table structure\n * Arcanox's Schema Blueprint\n */\nexport class Blueprint {\n private tableName: string;\n private columns: ColumnDefinition[] = [];\n private indexes: Array<{\n columns: string[];\n unique: boolean;\n name?: string;\n }> = [];\n private foreignKeys: ForeignKeyBuilder[] = [];\n private primaryKeys: string[] = [];\n\n constructor(tableName: string) {\n this.tableName = tableName;\n }\n\n /**\n * Add auto-incrementing ID column\n */\n id(name: string = \"id\"): ColumnBuilder {\n const col = new ColumnBuilder(name, \"bigInteger\");\n col.primary().autoIncrement().unsigned();\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add UUID column\n */\n uuid(name: string = \"id\"): ColumnBuilder {\n const col = new ColumnBuilder(name, \"uuid\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add string column\n */\n string(name: string, length: number = 255): ColumnBuilder {\n const col = new ColumnBuilder(name, \"string\", length);\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add text column\n */\n text(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"text\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add integer column\n */\n integer(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"integer\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add big integer column\n */\n bigInteger(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"bigInteger\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add decimal column\n */\n decimal(\n name: string,\n precision: number = 10,\n scale: number = 2\n ): ColumnBuilder {\n const col = new ColumnBuilder(name, \"decimal\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add float column\n */\n float(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"float\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add double column\n */\n double(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"double\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add boolean column\n */\n boolean(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"boolean\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add date column\n */\n date(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"date\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add datetime column\n */\n datetime(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"datetime\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add timestamp column\n */\n timestamp(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"timestamp\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add created_at and updated_at timestamps\n */\n timestamps(): void {\n this.timestamp(\"created_at\").nullable();\n this.timestamp(\"updated_at\").nullable();\n }\n\n /**\n * Add deleted_at timestamp for soft deletes\n */\n softDeletes(name: string = \"deleted_at\"): ColumnBuilder {\n return this.timestamp(name).nullable();\n }\n\n /**\n * Add JSON column\n */\n json(name: string): ColumnBuilder {\n const col = new ColumnBuilder(name, \"json\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add enum column\n */\n enum(name: string, values: string[]): ColumnBuilder {\n const col = new ColumnBuilder(name, \"enum\");\n this.columns.push(col.getDefinition());\n return col;\n }\n\n /**\n * Add foreign key constraint\n */\n foreign(column: string): ForeignKeyBuilder {\n const fk = new ForeignKeyBuilder(column);\n this.foreignKeys.push(fk);\n return fk;\n }\n\n /**\n * Add index\n */\n index(columns: string | string[], name?: string): void {\n const cols = Array.isArray(columns) ? columns : [columns];\n this.indexes.push({ columns: cols, unique: false, name });\n }\n\n /**\n * Add unique index\n */\n unique(columns: string | string[], name?: string): void {\n const cols = Array.isArray(columns) ? columns : [columns];\n this.indexes.push({ columns: cols, unique: true, name });\n }\n\n /**\n * Set primary key\n */\n primary(columns: string | string[]): void {\n this.primaryKeys = Array.isArray(columns) ? columns : [columns];\n }\n\n /**\n * Get all columns\n */\n getColumns(): ColumnDefinition[] {\n return this.columns;\n }\n\n /**\n * Get table name\n */\n getTableName(): string {\n return this.tableName;\n }\n\n /**\n * Get indexes\n */\n getIndexes() {\n return this.indexes;\n }\n\n /**\n * Get foreign keys\n */\n getForeignKeys() {\n return this.foreignKeys;\n }\n}\n","import type { DatabaseAdapter } from \"../types\";\nimport { Blueprint } from \"./Blueprint\";\n\n/**\n * Schema - ArcnanJS schema builder\n * Provides fluent interface for creating and modifying database tables\n */\nexport class Schema {\n private static adapter: DatabaseAdapter;\n\n /**\n * Set the database adapter\n */\n static setAdapter(adapter: DatabaseAdapter): void {\n this.adapter = adapter;\n }\n\n /**\n * Create a new table\n */\n static async create(\n tableName: string,\n callback: (table: Blueprint) => void\n ): Promise<void> {\n const blueprint = new Blueprint(tableName);\n callback(blueprint);\n\n await this.adapter.createTable(tableName, blueprint.getColumns());\n }\n\n /**\n * Modify an existing table\n */\n static async table(\n tableName: string,\n callback: (table: Blueprint) => void\n ): Promise<void> {\n const blueprint = new Blueprint(tableName);\n callback(blueprint);\n\n // For now, this is a simplified implementation\n // In a full implementation, this would generate ALTER TABLE statements\n console.warn(\n \"Schema.table() is not fully implemented yet. Use migrations for complex alterations.\"\n );\n }\n\n /**\n * Drop a table\n */\n static async drop(tableName: string): Promise<void> {\n await this.adapter.dropTable(tableName);\n }\n\n /**\n * Drop a table if it exists\n */\n static async dropIfExists(tableName: string): Promise<void> {\n const exists = await this.hasTable(tableName);\n if (exists) {\n await this.drop(tableName);\n }\n }\n\n /**\n * Rename a table\n */\n static async rename(from: string, to: string): Promise<void> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.rename() not yet implemented\");\n }\n\n /**\n * Check if a table exists\n */\n static async hasTable(tableName: string): Promise<boolean> {\n return await this.adapter.hasTable(tableName);\n }\n\n /**\n * Check if a column exists in a table\n */\n static async hasColumn(\n tableName: string,\n columnName: string\n ): Promise<boolean> {\n return await this.adapter.hasColumn(tableName, columnName);\n }\n\n /**\n * Get all tables\n */\n static async getTables(): Promise<string[]> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.getTables() not yet implemented\");\n }\n\n /**\n * Get all columns for a table\n */\n static async getColumns(tableName: string): Promise<string[]> {\n // This would need to be implemented in the adapter\n throw new Error(\"Schema.getColumns() not yet implemented\");\n }\n}\n","import { dynamicRequire } from \"../../server/utils/dynamicRequire\";\nimport { Schema } from \"./Schema\";\n\n/**\n * Base Migration class\n * All migrations should extend this class and implement up() and down() methods\n */\nexport abstract class Migration {\n /**\n * Run the migration\n */\n abstract up(): Promise<void>;\n\n /**\n * Reverse the migration\n */\n abstract down(): Promise<void>;\n}\n\n/**\n * Migration status\n */\nexport interface MigrationStatus {\n name: string;\n batch: number;\n ranAt: Date;\n}\n\n/**\n * Migration record in database\n */\nexport interface MigrationRecord {\n id?: number;\n migration: string;\n batch: number;\n created_at?: Date;\n}\n\n/**\n * Migration Runner - executes migrations\n */\nexport class MigrationRunner {\n private adapter: any;\n private migrationsTable: string = \"migrations\";\n private migrationsPath: string;\n\n constructor(adapter: any, migrationsPath: string) {\n this.adapter = adapter;\n this.migrationsPath = migrationsPath;\n }\n\n /**\n * Ensure migrations table exists\n */\n private async ensureMigrationsTable(): Promise<void> {\n const exists = await Schema.hasTable(this.migrationsTable);\n if (!exists) {\n await Schema.create(this.migrationsTable, (table) => {\n table.id();\n table.string(\"migration\");\n table.integer(\"batch\");\n table.timestamp(\"created_at\").nullable();\n });\n }\n }\n\n /**\n * Get all ran migrations\n */\n private async getRanMigrations(): Promise<MigrationRecord[]> {\n await this.ensureMigrationsTable();\n return await this.adapter.select(this.migrationsTable, {\n orderBy: [{ column: \"batch\", direction: \"ASC\" }],\n });\n }\n\n /**\n * Get pending migrations\n */\n private async getPendingMigrations(): Promise<string[]> {\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n\n const ranMigrations = await this.getRanMigrations();\n const ranNames = ranMigrations.map((m) => m.migration);\n\n const files = fs.readdirSync(this.migrationsPath);\n const migrationFiles = files\n .filter((f) => f.endsWith(\".ts\") || f.endsWith(\".js\"))\n .filter((f) => !ranNames.includes(f.replace(/\\.(ts|js)$/, \"\")))\n .sort();\n\n return migrationFiles;\n }\n\n /**\n * Run pending migrations\n */\n async run(): Promise<void> {\n const path = await import(\"path\");\n const pendingMigrations = await this.getPendingMigrations();\n\n if (pendingMigrations.length === 0) {\n console.log(\"No pending migrations\");\n return;\n }\n\n const ranMigrations = await this.getRanMigrations();\n const nextBatch =\n ranMigrations.length > 0\n ? Math.max(...ranMigrations.map((m) => m.batch)) + 1\n : 1;\n\n console.log(`Running ${pendingMigrations.length} migration(s)...`);\n\n for (const file of pendingMigrations) {\n const migrationPath = path.resolve(this.migrationsPath, file);\n const migrationName = file.replace(/\\.(ts|js)$/, \"\");\n\n try {\n // Dynamic import of migration\n const MigrationClass = await this.loadMigration(migrationPath);\n const migration = new MigrationClass();\n\n console.log(`Migrating: ${migrationName}`);\n await migration.up();\n\n // Record migration\n await this.adapter.insert(this.migrationsTable, {\n migration: migrationName,\n batch: nextBatch,\n created_at: new Date(),\n });\n\n console.log(`Migrated: ${migrationName}`);\n } catch (error) {\n console.error(`Failed to migrate ${migrationName}:`, error);\n throw error;\n }\n }\n\n console.log(\"Migrations completed successfully\");\n }\n\n /**\n * Rollback last batch of migrations\n */\n async rollback(steps: number = 1): Promise<void> {\n const ranMigrations = await this.getRanMigrations();\n\n if (ranMigrations.length === 0) {\n console.log(\"No migrations to rollback\");\n return;\n }\n\n const maxBatch = Math.max(...ranMigrations.map((m) => m.batch));\n const minBatch = maxBatch - steps + 1;\n\n const migrationsToRollback = ranMigrations\n .filter((m) => m.batch >= minBatch && m.batch <= maxBatch)\n .reverse();\n\n console.log(`Rolling back ${migrationsToRollback.length} migration(s)...`);\n\n const path = await import(\"path\");\n\n for (const record of migrationsToRollback) {\n const migrationPath = path.resolve(\n this.migrationsPath,\n `${record.migration}.ts`\n );\n\n try {\n const MigrationClass = await this.loadMigration(migrationPath);\n const migration = new MigrationClass();\n\n console.log(`Rolling back: ${record.migration}`);\n await migration.down();\n\n // Remove migration record\n await this.adapter.delete(this.migrationsTable, record.id);\n\n console.log(`Rolled back: ${record.migration}`);\n } catch (error) {\n console.error(`Failed to rollback ${record.migration}:`, error);\n throw error;\n }\n }\n\n console.log(\"Rollback completed successfully\");\n }\n\n /**\n * Reset all migrations\n */\n async reset(): Promise<void> {\n const ranMigrations = await this.getRanMigrations();\n const batches = Math.max(...ranMigrations.map((m) => m.batch));\n await this.rollback(batches);\n }\n\n /**\n * Reset and re-run all migrations\n */\n async fresh(): Promise<void> {\n await this.reset();\n await this.run();\n }\n\n /**\n * Get migration status\n */\n async status(): Promise<MigrationStatus[]> {\n const ranMigrations = await this.getRanMigrations();\n return ranMigrations.map((m) => ({\n name: m.migration,\n batch: m.batch,\n ranAt: m.created_at || new Date(),\n }));\n }\n\n /**\n * Load migration class from file\n */\n private async loadMigration(filePath: string): Promise<any> {\n // Use dynamic require to avoid webpack bundling\n const migrationModule = dynamicRequire(filePath);\n const MigrationClass = migrationModule.default || migrationModule;\n\n if (!MigrationClass || typeof MigrationClass !== \"function\") {\n throw new Error(\n `Migration file ${filePath} does not export a valid migration class`\n );\n }\n\n // Validate that it's a concrete class extending Migration\n // Check if the class has the required methods\n const instance = new MigrationClass();\n if (\n typeof instance.up !== \"function\" ||\n typeof instance.down !== \"function\"\n ) {\n throw new Error(\n `Migration class in ${filePath} must implement up() and down() methods`\n );\n }\n\n return MigrationClass;\n }\n}\n","import path from \"path\";\nimport { MySQLAdapter } from \"../../lib/arcanox/adapters/MySQLAdapter\";\nimport { PostgresAdapter } from \"../../lib/arcanox/adapters/PostgresAdapter\";\nimport { MigrationRunner } from \"../../lib/arcanox/schema/Migration\";\n\nexport const handleMigrate = async (args: string[]) => {\n const command = args[0]; // migrate, migrate:rollback, etc.\n\n // Load config\n const configPath = path.resolve(process.cwd(), \"src/config/database\");\n\n // Dynamic require helper\n const { dynamicRequire } = require(\"../../lib/server/utils/dynamicRequire\");\n\n // We need to register ts-node to load the config if it's a TS file\n try {\n dynamicRequire(\"ts-node\").register({\n transpileOnly: true,\n compilerOptions: {\n module: \"commonjs\",\n },\n });\n } catch (e) {\n // ts-node might not be installed, try loading js\n }\n\n let config;\n try {\n const module = dynamicRequire(configPath);\n config = module.default || module.databaseConfig || module;\n } catch (error) {\n console.error(\"Failed to load database config:\", error);\n process.exit(1);\n }\n\n // Connect to DB\n let adapter;\n if (config.type === \"postgres\") {\n adapter = new PostgresAdapter();\n } else if (config.type === \"mysql\") {\n adapter = new MySQLAdapter();\n } else {\n console.error(`Unsupported database type: ${config.type}`);\n process.exit(1);\n }\n\n try {\n await adapter.connect(config);\n\n const migrationsPath = path.resolve(process.cwd(), \"src/database/migrations\");\n const runner = new MigrationRunner(adapter, migrationsPath);\n\n switch (command) {\n case \"migrate\":\n await runner.run();\n break;\n case \"migrate:rollback\":\n await runner.rollback();\n break;\n case \"migrate:reset\":\n await runner.reset();\n break;\n case \"migrate:fresh\":\n await runner.fresh();\n break;\n case \"migrate:status\":\n const status = await runner.status();\n console.table(status);\n break;\n default:\n console.error(`Unknown migrate command: ${command}`);\n process.exit(1);\n }\n } catch (error) {\n console.error(\"Migration failed:\", error);\n process.exit(1);\n } finally {\n await adapter.disconnect();\n }\n};\n","import { spawn } from \"child_process\";\nimport dotenv from \"dotenv\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport webpack from \"webpack\";\nimport { createClientConfig, createServerConfig } from \"./webpack.config\";\n\ndeclare module \"webpack-node-externals\";\n\nconst args = process.argv.slice(2);\n\n// Handle custom environment file\nconst envFileArg = args.find((arg) => arg.startsWith(\"--env-file=\"));\nconst customEnvFile = envFileArg ? envFileArg.split(\"=\")[1] : null;\n\nif (customEnvFile) {\n const envPath = path.resolve(process.cwd(), customEnvFile);\n if (fs.existsSync(envPath)) {\n dotenv.config({ path: envPath });\n console.log(`Loaded environment from ${customEnvFile}`);\n } else {\n console.warn(`Warning: Environment file ${customEnvFile} not found.`);\n }\n} else {\n // Try to load .env by default\n dotenv.config();\n}\n\nconst command = args[0];\n\nif (!command) {\n console.error(\"Please specify a command: init, dev, build, start\");\n process.exit(1);\n}\n\nconst runCompiler = (compiler: webpack.Compiler) => {\n return new Promise<void>((resolve, reject) => {\n compiler.run((err, stats) => {\n if (err) {\n console.error(err);\n return reject(err);\n }\n if (stats && stats.hasErrors()) {\n console.error(stats.toString({ colors: true }));\n return reject(new Error(\"Webpack build failed\"));\n }\n console.log(stats?.toString({ colors: true }));\n resolve();\n });\n });\n};\n\nlet serverProcess: ReturnType<typeof spawn> | null = null;\n\nimport { WebSocketServer } from \"ws\";\n\nconst startDevServer = (hmrPort: number): Promise<void> => {\n return new Promise((resolve) => {\n if (serverProcess) {\n serverProcess.kill();\n }\n\n const serverPath = path.resolve(process.cwd(), \"dist/server.js\");\n serverProcess = spawn(\"node\", [serverPath], {\n stdio: [\"inherit\", \"pipe\", \"inherit\"],\n env: { ...process.env, ARCANA_HMR_PORT: hmrPort.toString() },\n });\n\n serverProcess.stdout?.on(\"data\", (data) => {\n process.stdout.write(data);\n if (data.toString().includes(\"Server is running\")) {\n resolve();\n }\n });\n\n serverProcess.on(\"close\", (code) => {\n if (code !== 0 && code !== null) {\n console.error(`Dev server exited with code ${code}`);\n }\n });\n });\n};\n\nconst watchCompiler = (\n compiler: webpack.Compiler,\n onBuildComplete?: () => void\n) => {\n compiler.watch({}, (err, stats) => {\n if (err) {\n console.error(err);\n return;\n }\n console.log(stats?.toString({ colors: true }));\n\n if (stats && !stats.hasErrors() && onBuildComplete) {\n onBuildComplete();\n }\n });\n};\n\nconst build = async () => {\n process.env.NODE_ENV = \"production\";\n console.log(\"Building for production...\");\n\n const clientConfig = createClientConfig();\n const serverConfig = createServerConfig();\n\n try {\n await runCompiler(webpack(clientConfig));\n await runCompiler(webpack(serverConfig));\n console.log(\"Build complete.\");\n } catch (error) {\n console.error(\"Build failed:\", error);\n process.exit(1);\n }\n};\n\nconst dev = async () => {\n process.env.NODE_ENV = \"development\";\n console.log(\"Starting development server...\");\n\n const HMR_INITIAL_PORT = 3001;\n const MAX_PORT_ATTEMPTS = 10;\n let wss: WebSocketServer | undefined;\n let HMR_PORT: number | undefined;\n\n // Helper function to create WebSocket server with proper error handling\n const createWSS = (port: number): Promise<WebSocketServer> => {\n return new Promise((resolve, reject) => {\n const server = new WebSocketServer({ port });\n\n server.on(\"listening\", () => {\n resolve(server);\n });\n\n server.on(\"error\", (err: any) => {\n reject(err);\n });\n });\n };\n\n // Try to find an available port\n for (let i = 0; i < MAX_PORT_ATTEMPTS; i++) {\n try {\n const currentPort = HMR_INITIAL_PORT + i;\n wss = await createWSS(currentPort);\n HMR_PORT = currentPort;\n console.log(`HMR Server running on port ${HMR_PORT}`);\n break;\n } catch (err: any) {\n if (err.code === \"EADDRINUSE\") {\n console.warn(\n `Port ${HMR_INITIAL_PORT + i} is in use, trying next port...`\n );\n if (i === MAX_PORT_ATTEMPTS - 1) {\n throw new Error(\n `Could not start HMR server after ${MAX_PORT_ATTEMPTS} attempts.`\n );\n }\n } else {\n throw err;\n }\n }\n }\n\n if (!wss || !HMR_PORT) {\n throw new Error(\"Failed to start HMR server.\");\n }\n\n // Graceful shutdown handler\n const cleanup = () => {\n console.log(\"\\nShutting down development server...\");\n\n if (wss) {\n wss.close(() => {\n console.log(\"HMR server closed.\");\n });\n }\n\n if (serverProcess) {\n serverProcess.kill();\n serverProcess = null;\n }\n\n process.exit(0);\n };\n\n // Register cleanup handlers\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n const broadcastReload = () => {\n wss.clients.forEach((client) => {\n if (client.readyState === 1) {\n client.send(JSON.stringify({ type: \"reload\" }));\n }\n });\n };\n\n const clientConfig = createClientConfig();\n const serverConfig = createServerConfig();\n\n let isServerBuilding = false;\n let pendingReload = false;\n\n const serverCompiler = webpack(serverConfig);\n serverCompiler.hooks.invalid.tap(\"ArcanaJS\", () => {\n isServerBuilding = true;\n });\n\n // Watch client\n watchCompiler(webpack(clientConfig), () => {\n console.log(\"Client build complete.\");\n if (isServerBuilding) {\n console.log(\"Server is building. Waiting to reload...\");\n pendingReload = true;\n } else {\n console.log(\"Reloading browsers...\");\n broadcastReload();\n }\n });\n\n // Watch server and restart on build\n watchCompiler(serverCompiler, async () => {\n console.log(\"Server build complete. Restarting server...\");\n await startDevServer(HMR_PORT);\n isServerBuilding = false;\n if (pendingReload) {\n console.log(\"Pending reload found. Reloading browsers...\");\n broadcastReload();\n pendingReload = false;\n }\n });\n};\n\nconst start = () => {\n process.env.NODE_ENV = \"production\";\n const serverPath = path.resolve(process.cwd(), \"dist/server.js\");\n console.log(`Starting server at ${serverPath}...`);\n\n const child = spawn(\"node\", [serverPath], { stdio: \"inherit\" });\n\n child.on(\"close\", (code) => {\n process.exit(code || 0);\n });\n};\n\nimport { handleDb } from \"./commands/db\";\nimport { handleDependency } from \"./commands/dependency\";\nimport { handleMake } from \"./commands/make\";\nimport { handleMigrate } from \"./commands/migrate\";\n\nswitch (command) {\n case \"build\":\n build();\n break;\n case \"dev\":\n dev();\n break;\n case \"start\":\n start();\n break;\n default:\n if (command.startsWith(\"make:\")) {\n handleMake(args);\n } else if (command.startsWith(\"migrate\")) {\n handleMigrate(args);\n } else if (command.startsWith(\"db:\")) {\n handleDb(args);\n } else if (command.startsWith(\"dependency:\")) {\n handleDependency(args);\n } else {\n console.error(`Unknown command: ${command}`);\n process.exit(1);\n }\n}\n"],"names":["dynamicRequire","id","_global$process","_global","global","nativeRequire","e","eval","module","exports","require","__webpack_module_cache__","leafPrototypes","getProto","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","n","getter","__esModule","d","a","Object","getPrototypeOf","obj","t","value","mode","this","then","ns","create","r","def","current","indexOf","getOwnPropertyNames","forEach","key","definition","o","defineProperty","enumerable","get","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","cwd","process","resolveLoader","loader","__non_webpack_require__","resolve","findEntry","searchPaths","extensions","basePath","ext","fullPath","path","fs","indexPath","exampleClient","exampleServer","some","p","includes","Error","join","getViewsLoaderPath","viewsDir","hasViews","viewsLoaderPath","__dirname","cacheDir","recursive","loaderContent","createClientConfig","isProduction","env","NODE_ENV","target","entry","client","output","filename","publicPath","assetModuleFilename","alias","modules","rules","test","exclude","use","options","presets","runtime","MiniCssExtractPlugin","importLoaders","localIdentName","exportLocalsConvention","postcssOptions","config","type","plugins","CleanWebpackPlugin","HtmlWebpackPlugin","templateContent","inject","minify","removeComments","collapseWhitespace","removeRedundantAttributes","useShortDoctype","removeEmptyAttributes","removeStyleLinkTypeAttributes","keepClosingSlash","minifyJS","minifyCSS","minifyURLs","optimization","splitChunks","chunks","cacheGroups","defaultVendors","priority","reuseExistingChunk","default","minChunks","react","name","performance","maxEntrypointSize","maxAssetSize","hints","devtool","createServerConfig","serverEntry","externals","nodeExternals","allowlist","exportOnlyLocals","generator","emit","MongoAdapter","db","connect","MongoClient","url","host","port","auth","username","password","database","query","async","sql","params","execute","close","disconnect","createTable","tableName","columns","createCollection","dropTable","collection","drop","hasTable","listCollections","toArray","length","hasColumn","columnName","select","table","filter","buildFilter","where","projection","buildProjection","cursor","find","project","orderBy","sort","order","column","direction","offset","skip","limit","map","doc","_id","rest","insert","data","result","insertOne","insertedId","update","normalizeId","$set","updateOne","updated","findOne","delete","deleteOne","deletedCount","beginTransaction","raw","command","JSON","parse","commit","rollback","clause","operator","$ne","$gt","$lt","$gte","$lte","$in","Array","isArray","$nin","$regex","RegExp","replace","col","ObjectId","isValid","MySQLAdapter","pool","connection","_config$pool","mysql","createPool","user","waitForConnections","connectionLimit","max","queueLimit","bind","end","rows","mapType","unsigned","autoIncrement","nullable","formatValue","primary","unique","_result$","count","_result$2","_options$columns","joins","first","second","index","boolean","buildWhereCondition","push","keys","values","placeholders","k","insertId","affectedRows","getConnection","release","inPlaceholders","notInPlaceholders","string","text","integer","bigInteger","float","double","decimal","date","datetime","timestamp","json","uuid","toUpperCase","Date","toISOString","slice","String","PostgresAdapter","_config$pool2","Pool","ssl","min","exists","paramIndex","condition","_","i","rowCount","startIndex","Macroable","macro","macros","mixin","hasMacro","QueryBuilder","selectColumns","whereClauses","orderByClauses","joinClauses","constructor","adapter","super","orWhere","whereIn","whereNotIn","whereBetween","range","whereNull","whereNotNull","limitValue","offsetValue","leftJoin","rightJoin","eagerLoads","setModel","model","with","relations","results","eagerLoadRelations","models","hydrate","relationName","instance","relation","addEagerConstraints","relatedResults","match","pluck","row","sum","avg","paginate","page","perPage","total","currentPage","lastPage","Math","ceil","clone","cloned","Relation","parent","related","addConstraints","getQuery","BelongsTo","foreignKey","ownerKey","foreignValue","getAttribute","dictionary","setRelation","BelongsToMany","foreignPivotKey","relatedPivotKey","parentKey","relatedKey","performJoin","q","relatedTable","getTable","HasMany","localKey","localValue","HasOne","Model","attributes","original","fillable","guarded","hidden","visible","casts","dates","timestamps","createdAt","updatedAt","softDeletes","deletedAt","setAdapter","className","pluralize","snakeCase","all","primaryKey","findOrFail","fill","now","syncOriginal","destroy","firstOrCreate","entries","existing","updateOrCreate","isFillable","setAttribute","mutator","studly","castAttribute","accessor","isGetting","cast","parseInt","parseFloat","Boolean","stringify","save","forceDelete","restore","getDirty","dirty","isDirty","toJSON","hasOne","foreign","toLowerCase","local","newQuery","hasMany","belongsTo","owner","belongsToMany","pivotTable","guessPivotTable","foreignPivot","relatedPivot","relatedK","segments","getRelation","relationLoaded","str","endsWith","__","c","handleDb","args","console","error","exit","configPath","transpileOnly","compilerOptions","databaseConfig","seederModule","DatabaseSeeder","log","seeder","run","detectPackageManager","getInstallCommand","pm","packages","pkgList","installDependencies","devPackages","installCmd","execSync","stdio","devInstallCmd","installAuthDependencies","installMailDependencies","installDatabaseDependencies","dbType","specificDependencies","devDependencies","allDependencies","handleDependency","split","toPascalCase","writeFile","dir","fileName","content","targetDir","targetFile","makeController","methods","makeFactory","modelName","makeMiddleware","makeMigration","pad","toString","padStart","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","makeModel","makeProvider","makeRequest","makeSeeder","handleMake","controllerType","ColumnBuilder","getDefinition","ForeignKeyBuilder","references","referencedColumn","on","referencedTable","onDelete","action","onDeleteAction","onUpdate","onUpdateAction","toSQL","Blueprint","indexes","foreignKeys","primaryKeys","precision","scale","enum","fk","cols","getColumns","getTableName","getIndexes","getForeignKeys","Schema","callback","blueprint","warn","dropIfExists","rename","from","to","getTables","Migration","MigrationRunner","migrationsTable","migrationsPath","ensureMigrationsTable","getRanMigrations","getPendingMigrations","ranNames","m","migration","readdirSync","f","pendingMigrations","ranMigrations","nextBatch","batch","file","migrationPath","migrationName","loadMigration","up","created_at","steps","maxBatch","minBatch","migrationsToRollback","reverse","record","down","reset","batches","fresh","status","ranAt","filePath","migrationModule","MigrationClass","handleMigrate","register","runner","argv","envFileArg","arg","startsWith","customEnvFile","envPath","dotenv","runCompiler","compiler","Promise","reject","err","stats","hasErrors","colors","serverProcess","startDevServer","hmrPort","_serverProcess$stdout","kill","serverPath","spawn","ARCANA_HMR_PORT","stdout","write","code","watchCompiler","onBuildComplete","watch","build","clientConfig","serverConfig","webpack","dev","wss","HMR_PORT","createWSS","server","WebSocketServer","currentPort","MAX_PORT_ATTEMPTS","cleanup","broadcastReload","clients","readyState","send","isServerBuilding","pendingReload","serverCompiler","hooks","invalid","tap","start"],"ignoreList":[],"sourceRoot":""}