@teamvelix/velix-core 5.2.8 → 5.3.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/router/index.ts","../src/config.ts","../src/version.ts","../src/logger.ts","../src/metadata/index.ts","../src/middleware/index.ts","../src/plugins/index.ts","../src/plugins/ai/utils.ts","../src/plugins/ai/providers/openai.ts","../src/plugins/ai/providers/ollama.ts","../src/plugins/ai/client.ts","../src/plugins/ai/index.ts","../src/cache/index.ts","../src/server/errors.ts","../src/api/define-route.ts","../src/api/manifest.ts","../src/server/define-loader.ts","../src/server/server-action.ts","../src/dev/hmr-server.ts","../src/server/error-cascade.ts","../src/server/define-error.ts"],"names":["path","fs","escapeHtml","c","pathToFileURL","url","crypto","params"],"mappings":";;;;;;;;;;;AAWO,SAAS,aAAa,OAAA,EAAyB;AACpD,EAAA,OAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAC1E;AAKO,SAAS,WAAW,GAAA,EAAqB;AAC9C,EAAA,MAAM,YAAA,GAAuC;AAAA,IAC3C,GAAA,EAAK,OAAA;AAAA,IAAS,GAAA,EAAK,MAAA;AAAA,IAAQ,GAAA,EAAK,MAAA;AAAA,IAChC,GAAA,EAAK,QAAA;AAAA,IAAU,GAAA,EAAK;AAAA,GACtB;AACA,EAAA,OAAO,MAAA,CAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,YAAY,CAAA,IAAA,KAAQ,YAAA,CAAa,IAAI,CAAC,CAAA;AACnE;AAKO,SAAS,SAAA,CAAU,GAAA,EAAa,OAAA,EAAiB,KAAA,GAAkB,EAAC,EAAa;AACtF,EAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,GAAG,GAAG,OAAO,KAAA;AAChC,EAAA,MAAM,UAAU,EAAA,CAAG,WAAA,CAAY,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC3D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,QAAA,GAAWA,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AAC1C,IAAA,IAAI,MAAM,WAAA,EAAY,EAAG,SAAA,CAAU,QAAA,EAAU,SAAS,KAAK,CAAA;AAAA,SAAA,IAClD,QAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,UAAU,GAAA,EAAmB;AAC3C,EAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,GAAG,CAAA,EAAG,EAAA,CAAG,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAChE;AAKO,SAAS,SAAS,GAAA,EAAmB;AAC1C,EAAA,IAAI,EAAA,CAAG,UAAA,CAAW,GAAG,CAAA,EAAG,EAAA,CAAG,MAAA,CAAO,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AACvE,EAAA,EAAA,CAAG,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACvC;AAKO,SAAS,OAAA,CAAQ,KAAa,IAAA,EAAoB;AACvD,EAAA,SAAA,CAAU,IAAI,CAAA;AACd,EAAA,MAAM,UAAU,EAAA,CAAG,WAAA,CAAY,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC3D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,OAAA,GAAUA,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AACzC,IAAA,MAAM,QAAA,GAAWA,KAAA,CAAK,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AAC3C,IAAA,IAAI,KAAA,CAAM,WAAA,EAAY,EAAG,OAAA,CAAQ,SAAS,QAAQ,CAAA;AAAA,SAC7C,EAAA,CAAG,YAAA,CAAa,OAAA,EAAS,QAAQ,CAAA;AAAA,EACxC;AACF;AAKO,SAAS,QAAA,CAAoD,IAAO,KAAA,EAAiD;AAC1H,EAAA,IAAI,OAAA;AACJ,EAAA,OAAO,IAAI,IAAA,KAAwB;AACjC,IAAA,YAAA,CAAa,OAAO,CAAA;AACpB,IAAA,OAAA,GAAU,WAAW,MAAM,EAAA,CAAG,GAAG,IAAI,GAAG,KAAK,CAAA;AAAA,EAC/C,CAAA;AACF;AAKO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,KAAA;AACxB,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AACpC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAClD,EAAA,OAAO,UAAA,CAAA,CAAY,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAI,GAAA,GAAM,MAAM,CAAC,CAAA;AACxE;AAKO,SAAS,WAAW,EAAA,EAAoB;AAC7C,EAAA,IAAI,EAAA,GAAK,GAAA,EAAM,OAAO,CAAA,EAAG,EAAE,CAAA,EAAA,CAAA;AAC3B,EAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAClC;AAKO,SAAS,cAAA,GAAoB;AAClC,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAW,CAAC,KAAK,GAAA,KAAQ;AAC3C,IAAA,OAAA,GAAU,GAAA;AACV,IAAA,MAAA,GAAS,GAAA;AAAA,EACX,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAmB,MAAA,EAAgB;AACvD;AAKO,SAAS,MAAM,EAAA,EAA2B;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACvD;AAKO,SAAS,kBAAkB,QAAA,EAA2B;AAC3D,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,EAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AACjD,IAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,EAAE,IAAA,EAAK;AAC9C,IAAA,OAAO,SAAA,KAAc,kBAAkB,SAAA,KAAc,cAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAC1B;AAKO,SAAS,kBAAkB,QAAA,EAA2B;AAC3D,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,EAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AACjD,IAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,EAAE,IAAA,EAAK;AAC9C,IAAA,OAAO,SAAA,KAAc,kBAAkB,SAAA,KAAc,cAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAC1B;AAKO,SAAS,SAAS,QAAA,EAA2B;AAClD,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,EAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AACjD,IAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,EAAE,IAAA,EAAK;AAC9C,IAAA,OAAO,SAAA,KAAc,kBAAkB,SAAA,KAAc,cAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAC1B;;;AChIO,IAAM,SAAA,GAAY;AAAA,EACvB,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,OAAA;AAAA,EACP,SAAA,EAAW;AACb;AASO,SAAS,eAAe,MAAA,EAAgB;AAC7C,EAAA,MAAM,WAAA,GAAcA,KAAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAEvC,EAAA,MAAM,MAAA,GAOF;AAAA,IACF,OAAO,EAAC;AAAA,IACR,KAAK,EAAC;AAAA,IACN,OAAA,sBAAa,GAAA,EAAI;AAAA,IACjB,MAAM,EAAE,QAAA,EAAU,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,IACjC,WAAW;AAAC,GACd;AAGA,EAAA,IAAIC,EAAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,IAAA,gBAAA,CAAiB,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,EACzC;AAGA,EAAA,MAAM,YAAA,GAAeD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,UAAU,KAAK,CAAA;AAC3D,EAAA,IAAIC,EAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,IAAA,gBAAA,CAAiB,YAAA,EAAc,cAAc,MAAM,CAAA;AAAA,EACrD;AAGA,EAAA,MAAM,aAAA,GAAgBD,KAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,YAAY,CAAA;AACpD,EAAA,MAAM,aAAA,GAAgBA,KAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,YAAY,CAAA;AACpD,EAAA,IAAIC,EAAAA,CAAG,UAAA,CAAW,aAAa,CAAA,SAAU,UAAA,GAAa,aAAA;AAAA,OAAA,IAC7CA,EAAAA,CAAG,UAAA,CAAW,aAAa,CAAA,SAAU,UAAA,GAAa,aAAA;AAG3D,EAAA,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,SAAS,CAAA;AAExC,EAAA,OAAO,MAAA;AACT;AAUA,SAAS,gBAAA,CACP,OAAA,EACA,UAAA,EACA,MAAA,EACA,cAAA,GAA2B,EAAC,EAC5B,YAAA,GAA8B,IAAA,EAC9B,gBAAA,GAAkC,IAAA,EAClC;AACA,EAAA,MAAM,UAAUA,EAAAA,CAAG,WAAA,CAAY,YAAY,EAAE,aAAA,EAAe,MAAM,CAAA;AAGlE,EAAA,MAAM,YAAA,GAA8C;AAAA,IAClD,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,KAAA,EAAO,IAAA;AAAA,IACP,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU,IAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,QAAO,EAAG;AAClB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,sBAAsB,EAAE,CAAA;AACxD,MAAA,MAAM,QAAA,GAAWD,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAM,IAAI,CAAA;AACjD,MAAA,MAAM,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAGnC,MAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAO,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAEnD,MAAA,IAAI,IAAA,KAAS,MAAA,EAAQ,YAAA,CAAa,IAAA,GAAO,QAAA;AACzC,MAAA,IAAI,IAAA,KAAS,QAAA,EAAU,YAAA,CAAa,MAAA,GAAS,QAAA;AAC7C,MAAA,IAAI,IAAA,KAAS,SAAA,EAAW,YAAA,CAAa,OAAA,GAAU,QAAA;AAC/C,MAAA,IAAI,IAAA,KAAS,OAAA,EAAS,YAAA,CAAa,KAAA,GAAQ,QAAA;AAC3C,MAAA,IAAI,IAAA,KAAS,WAAA,EAAa,YAAA,CAAa,QAAA,GAAW,QAAA;AAClD,MAAA,IAAI,IAAA,KAAS,UAAA,EAAY,YAAA,CAAa,QAAA,GAAW,QAAA;AACjD,MAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,aAAA,eAA4B,UAAA,GAAa,QAAA;AAG/E,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,KAAK,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,MAAA,EAAQ,MAAM,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAChF,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAClC,QAAA,IAAI,WAAA;AAEJ,QAAA,IAAI,SAAA,CAAU,UAAA,CAAW,KAAK,CAAA,EAAG;AAC/B,UAAA,WAAA,GAAc,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AAAA,QACvC,CAAA,MAAO;AACL,UAAA,WAAA,GAAc,GAAA,GAAM,SAAA;AAAA,QACtB;AAEA,QAAA,MAAM,SAAA,GAAY,MAAM,CAAC,GAAG,gBAAgB,WAAW,CAAA,CAAE,KAAK,GAAG,CAAA;AAEjE,QAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,UACpB,MAAM,SAAA,CAAU,IAAA;AAAA,UAChB,IAAA,EAAM,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AAAA,UACnC,QAAA,EAAU,QAAA;AAAA,UACV,OAAA,EAAS,mBAAmB,SAAS,CAAA;AAAA,UACrC,QAAA,EAAU,CAAC,GAAG,cAAA,EAAgB,WAAW,CAAA;AAAA,UACzC,MAAA,EAAQ,aAAa,MAAA,IAAU,YAAA;AAAA,UAC/B,SAAS,YAAA,CAAa,OAAA;AAAA,UACtB,OAAO,YAAA,CAAa,KAAA;AAAA,UACpB,UAAU,YAAA,CAAa,QAAA;AAAA,UACvB,UAAU,YAAA,CAAa,QAAA;AAAA,UACvB,UAAA,EAAY,aAAa,UAAA,IAAc,gBAAA;AAAA,UACvC,iBAAA,EAAmB,kBAAkB,QAAQ,CAAA;AAAA,UAC7C,iBAAA,EAAmB,kBAAkB,QAAQ,CAAA;AAAA,UAC7C,QAAA,EAAU,SAAS,QAAQ;AAAA,SAC5B,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,MAAM,SAAA,GAAY,GAAA,GAAM,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,IAAK,GAAA;AAEpD,IAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,MACpB,MAAM,SAAA,CAAU,IAAA;AAAA,MAChB,IAAA,EAAM,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,IAAK,GAAA;AAAA,MACxC,UAAU,YAAA,CAAa,IAAA;AAAA,MACvB,OAAA,EAAS,kBAAA,CAAmB,SAAgB,CAAA;AAAA,MAC5C,QAAA,EAAU,cAAA;AAAA,MACV,MAAA,EAAQ,aAAa,MAAA,IAAU,YAAA;AAAA,MAC/B,SAAS,YAAA,CAAa,OAAA;AAAA,MACtB,OAAO,YAAA,CAAa,KAAA;AAAA,MACpB,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,UAAA,EAAY,aAAa,UAAA,IAAc,gBAAA;AAAA,MACvC,iBAAA,EAAmB,iBAAA,CAAkB,YAAA,CAAa,IAAI,CAAA;AAAA,MACtD,iBAAA,EAAmB,iBAAA,CAAkB,YAAA,CAAa,IAAI,CAAA;AAAA,MACtD,QAAA,EAAU,QAAA,CAAS,YAAA,CAAa,IAAI;AAAA,KACrC,CAAA;AAAA,EACH;AAGA,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,MAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAM,IAAI,CAAA;AAGjD,MAAA,IAAI,KAAA,CAAM,KAAK,UAAA,CAAW,GAAG,KAAK,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAG9D,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA;AAGrE,MAAA,IAAI,cAAc,KAAA,CAAM,IAAA;AACxB,MAAA,IAAI,KAAA,CAAM,KAAK,UAAA,CAAW,GAAG,KAAK,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1D,QAAA,WAAA,GAAc,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA;AAC1C,QAAA,IAAI,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG;AACjC,UAAA,WAAA,GAAc,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,QAC5C;AACA,QAAA,IAAI,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AAClC,UAAA,WAAA,GAAc,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,QAC5C;AAAA,MACF;AAEA,MAAA,MAAM,cAAc,OAAA,GAAU,cAAA,GAAiB,CAAC,GAAG,gBAAgB,WAAW,CAAA;AAC9E,MAAA,MAAM,SAAA,GAAY,aAAa,MAAA,IAAU,YAAA;AACzC,MAAA,MAAM,aAAA,GAAgB,aAAa,UAAA,IAAc,gBAAA;AAEjD,MAAA,gBAAA,CAAiB,OAAA,EAAS,QAAA,EAAU,MAAA,EAAQ,WAAA,EAAa,WAAW,aAAa,CAAA;AAAA,IACnF;AAAA,EACF;AACF;AAMA,SAAS,iBAAiB,OAAA,EAAiB,UAAA,EAAoB,MAAA,EAA0B,cAAA,GAA2B,EAAC,EAAG;AACtH,EAAA,MAAM,UAAUC,EAAAA,CAAG,WAAA,CAAY,YAAY,EAAE,aAAA,EAAe,MAAM,CAAA;AAElE,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,QAAA,GAAWD,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAM,IAAI,CAAA;AAEjD,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,MAAA,gBAAA,CAAiB,OAAA,EAAS,UAAU,MAAA,EAAQ,CAAC,GAAG,cAAA,EAAgB,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,IAC7E,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,EAAO,EAAG;AACzB,MAAA,MAAM,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AACnC,MAAA,IAAI,CAAC,CAAC,KAAA,EAAO,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAEnC,MAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,QAAA,CAAS,KAAA,CAAM,MAAM,GAAG,CAAA;AAE9C,MAAA,MAAM,WAAA,GAAc,aAAa,OAAA,IAAW,QAAA,KAAa,UACrD,cAAA,GACA,CAAC,GAAG,cAAA,EAAgB,QAAQ,CAAA;AAEhC,MAAA,MAAM,OAAA,GAAU,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA;AAE9C,MAAA,MAAA,CAAO,IAAI,IAAA,CAAK;AAAA,QACd,MAAM,SAAA,CAAU,GAAA;AAAA,QAChB,IAAA,EAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,IAAK,MAAA;AAAA,QACtC,QAAA,EAAU,QAAA;AAAA,QACV,OAAA,EAAS,mBAAmB,OAAO,CAAA;AAAA,QACnC,UAAU,CAAC,KAAA,EAAO,GAAG,WAAW,CAAA,CAAE,OAAO,OAAO;AAAA,OACjD,CAAA;AAAA,IACH;AAAA,EACF;AACF;AASA,SAAS,mBAAmB,SAAA,EAA2B;AACrD,EAAA,IAAI,OAAA,GAAU,SAAA,CACX,OAAA,CAAQ,UAAA,EAAY,MAAM,CAAA,CAC1B,OAAA,CAAQ,SAAA,EAAW,SAAS,CAAA,CAC5B,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AAEvB,EAAA,OAAO,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,CAAG,CAAA;AAClC;AAKO,SAAS,UAAA,CAAW,SAAiB,MAAA,EAAiB;AAC3D,EAAA,MAAM,cAAA,GAAiB,YAAY,EAAA,GAAK,GAAA,GAAM,QAAQ,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAElE,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA;AAChD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAC9C,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAO;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,aAAA,CAAc,WAAmB,KAAA,EAAiD;AACzF,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,MAAM,UAAA,GAAa,qBAAA;AACnB,EAAA,IAAI,UAAA;AACJ,EAAA,OAAA,CAAQ,UAAA,GAAa,UAAA,CAAW,IAAA,CAAK,SAAS,OAAO,IAAA,EAAM;AACzD,IAAA,UAAA,CAAW,KAAK,UAAA,CAAW,CAAC,KAAK,UAAA,CAAW,CAAC,KAAK,OAAO,CAAA;AAAA,EAC3D;AAEA,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAClC,IAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAAA,EAChC,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AASO,SAAS,gBAAA,CAAiB,OAAc,UAAA,EAAwF;AACrI,EAAA,MAAM,UAAiE,EAAC;AAGxE,EAAA,KAAA,MAAW,OAAA,IAAW,MAAM,QAAA,EAAU;AACpC,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA,EAAG;AAC3B,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA,EAAG,CAAA;AAAA,IACnE;AAAA,EACF;AAGA,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,SAAS,QAAA,EAAU,KAAA,CAAM,QAAQ,CAAA;AAAA,EACxD;AAGA,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAA,CAAQ,OAAA,CAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA,EAAG,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,OAAA;AACT;AAMA,SAAS,UAAU,MAAA,EAAgC;AACjD,EAAA,MAAM,OAAsB,EAAE,QAAA,EAAU,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAEvD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,KAAA,MAAW,OAAA,IAAW,MAAM,QAAA,EAAU;AACpC,MAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC9B,QAAA,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,GAAI,EAAE,UAAU,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,MACzD;AACA,MAAA,OAAA,GAAU,OAAA,CAAQ,SAAS,OAAO,CAAA;AAAA,IACpC;AACA,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,IAAA;AACT;AC9UA,IAAM,eAAA,GAAkB,EAAE,MAAA,CAAO;AAAA,EAC/B,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,WAAW,CAAA;AAAA,EACpC,KAAK,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA;AACxB,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAEb,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EAClC,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,KAAK,CAAA,CAAE,OAAA,CAAQ,GAAI,CAAA;AAAA,EAC/C,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,WAAW;AACtC,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAEb,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EACnC,aAAA,EAAe,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK;AAC1C,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAEb,IAAM,eAAA,GAAkB,EAAE,MAAA,CAAO;AAAA,EAC/B,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA,EACjC,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA,EAChC,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI;AACrC,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAEb,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACjC,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,QAAQ,CAAA;AAAA,EACnC,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA,EAChC,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA,EACnC,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA,EACnC,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,QAAQ;AACrC,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAEb,IAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;AAAA,EACxC,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA,EACjC,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI;AACrC,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAEb,IAAM,YAAA,GAAe,EAAE,KAAA,CAAM;AAAA,EAC3B,EAAE,MAAA,EAAO;AAAA,EACT,EAAE,MAAA,CAAO;AAAA,IACP,IAAA,EAAM,EAAE,MAAA;AAAO,GAChB,EAAE,WAAA;AACL,CAAC,CAAA;AAEM,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA;AAAA,EAExC,GAAA,EAAK,eAAA;AAAA;AAAA,EAGL,QAAA,EAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA;AAAA,EAGlC,MAAA,EAAQ,kBAAA;AAAA;AAAA,EAGR,OAAA,EAAS,mBAAA;AAAA;AAAA,EAGT,GAAA,EAAK,eAAA;AAAA;AAAA,EAGL,KAAA,EAAO,iBAAA;AAAA;AAAA,EAGP,YAAA,EAAc,wBAAA;AAAA;AAAA,EAGd,SAAS,CAAA,CAAE,KAAA,CAAM,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA;AAAA,EAGzC,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,KAAK,CAAA;AAAA,EAChC,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAQ,QAAQ,CAAA;AAAA;AAAA,EAGtC,MAAA,EAAQ,EAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA;AAAA,EAGtC,SAAS,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,IAAI;AAC7C,CAAC;AAQM,IAAM,aAAA,GAA6B,iBAAA,CAAkB,KAAA,CAAM,EAAE;AAqB7D,SAAS,aAAa,MAAA,EAAoD;AAC/E,EAAA,OAAO,MAAA;AACT;AASA,eAAsB,WAAW,WAAA,EAA2C;AAC1E,EAAA,MAAM,YAAA,GAAeA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,iBAAiB,CAAA;AAC7D,EAAA,MAAM,YAAA,GAAeA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,iBAAiB,CAAA;AAE7D,EAAA,MAAM,kBAAA,GAAqBA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,sBAAsB,CAAA;AACxE,EAAA,MAAM,kBAAA,GAAqBA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,sBAAsB,CAAA;AAExE,EAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,EAAA,IAAIC,EAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG,UAAA,GAAa,YAAA;AAAA,OAAA,IACrCA,EAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG,UAAA,GAAa,YAAA;AAAA,OAAA,IAC1CA,EAAAA,CAAG,UAAA,CAAW,kBAAkB,CAAA,EAAG,UAAA,GAAa,kBAAA;AAAA,OAAA,IAChDA,EAAAA,CAAG,UAAA,CAAW,kBAAkB,CAAA,EAAG,UAAA,GAAa,kBAAA;AAEzD,EAAA,IAAI,aAAmC,EAAC;AAExC,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,aAAA,CAAc,UAAU,CAAA,CAAE,IAAA;AAC5C,MAAA,MAAM,MAAA,GAAS,MAAM,OAAO,CAAA,EAAG,SAAS,CAAA,GAAA,EAAM,IAAA,CAAK,KAAK,CAAA,CAAA,CAAA;AACxD,MAAA,UAAA,GAAa,OAAO,OAAA,IAAW,MAAA;AAAA,IACjC,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,KAAK,EAAA,CAAG,MAAA,CAAO,iCAA4B,KAAA,CAAM,OAAO,EAAE,CAAC,CAAA;AAAA,IACrE;AAAA,EACF;AAGA,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,aAAA,EAAe,UAAiC,CAAA;AAEzE,EAAA,IAAI;AACF,IAAA,OAAO,iBAAA,CAAkB,MAAM,MAAM,CAAA;AAAA,EACvC,SAAS,GAAA,EAAc;AACrB,IAAA,IAAI,GAAA,YAAe,EAAE,QAAA,EAAU;AAC7B,MAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,GAAA,CAAI,yCAAoC,CAAC,CAAA;AAC1D,MAAA,KAAA,MAAW,KAAA,IAAS,IAAI,MAAA,EAAQ;AAC9B,QAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,GAAA,CAAI,CAAA,IAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,EAAE,CAAC,CAAA;AAAA,MACvE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AASO,SAAS,YAAA,CAAa,QAAqB,WAAA,EAAkH;AAClK,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,cAAA,EAAgBD,KAAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,OAAO,MAAM,CAAA;AAAA,IACvD,iBAAA,EAAmBA,KAAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,OAAO,SAAS,CAAA;AAAA,IAC7D,gBAAgBA,KAAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,MAAA,CAAO,MAAM,MAAM;AAAA,GAC/D;AACF;AAMA,SAAS,SAAA,CAAU,QAA6B,MAAA,EAAkD;AAChG,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,MAAA,EAAO;AAE3B,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,IAAI,MAAA,CAAO,GAAG,CAAA,IAAK,OAAO,OAAO,GAAG,CAAA,KAAM,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA,EAAG;AACjF,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,SAAA,CAAU,MAAA,CAAO,GAAG,KAAK,EAAC,EAAG,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACvMO,IAAM,OAAA,GAAU,OAAA;;;ACGvB,IAAM,MAAA,GAAS;AAAA,EACb,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,GAAA,EAAK,SAAA;AAAA,EACL,GAAA,EAAK,UAAA;AAAA,EACL,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ,UAAA;AAAA,EAGR,IAAA,EAAM,UAAA;AAAA,EACN,KAAA,EAAO,UAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,CAAA,GAAI,MAAA;AAUV,SAAS,eAAe,MAAA,EAAgB;AACtC,EAAA,IAAI,MAAA,IAAU,GAAA,EAAK,OAAO,CAAA,CAAE,GAAA;AAC5B,EAAA,IAAI,MAAA,IAAU,GAAA,EAAK,OAAO,CAAA,CAAE,MAAA;AAC5B,EAAA,IAAI,MAAA,IAAU,GAAA,EAAK,OAAO,CAAA,CAAE,IAAA;AAC5B,EAAA,IAAI,MAAA,IAAU,GAAA,EAAK,OAAO,CAAA,CAAE,KAAA;AAC5B,EAAA,OAAO,CAAA,CAAE,KAAA;AACX;AAEA,SAAS,QAAQ,EAAA,EAAY;AAC3B,EAAA,IAAI,EAAA,GAAK,GAAG,OAAO,CAAA,EAAG,EAAE,IAAI,CAAA,IAAA,EAAO,EAAE,KAAK,CAAA,CAAA;AAC1C,EAAA,IAAI,EAAA,GAAK,GAAA,EAAK,OAAO,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,EAAG,EAAE,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAA;AAChD,EAAA,IAAI,EAAA,GAAK,GAAA,EAAK,OAAO,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA,EAAG,EAAE,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAA;AACjD,EAAA,OAAO,GAAG,CAAA,CAAE,GAAG,GAAG,EAAE,CAAA,EAAA,EAAK,EAAE,KAAK,CAAA,CAAA;AAClC;AAEA,IAAM,IAAA,GAAO;AAAA,EAAA,EACT,EAAE,IAAI,CAAA,MAAA,EAAI,EAAE,KAAK,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,KAAA,EAAQ,CAAA,CAAE,KAAK,IAAI,CAAA,CAAE,GAAG,IAAI,OAAO,CAAA,EAAG,EAAE,KAAK;AAAA,CAAA;AAGrE,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,GAAO;AACL,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,sRAAA,EAAmD,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAChF,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB,CAAA;AAAA,EAEA,WAAA,CAAY,MAAA,EAAkF,SAAA,GAAY,IAAA,CAAK,KAAI,EAAG;AACpH,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,UAAS,GAAI,MAAA;AACvC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE7B,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,SAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,KAAA,EAAQ,CAAA,CAAE,KAAK,CAAA,IAAA,EAAO,OAAO,CAAA,EAAA,CAAI,CAAA;AAC9E,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,MAAA,EAAS,EAAE,KAAK,CAAA,MAAA,EAAS,CAAA,CAAE,IAAI,UAAU,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACxF,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,KAAA,EAAQ,CAAA,CAAE,KAAK,CAAA,OAAA,EAAU,IAAA,KAAS,gBAAgB,CAAA,CAAE,MAAA,GAAS,EAAE,KAAK,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAC9G,IAAA,IAAI,UAAU,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,IAAA,EAAO,CAAA,CAAE,KAAK,CAAA,QAAA,EAAW,EAAE,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAC1F,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB,CAAA;AAAA,EAEA,QAAQ,MAAA,EAAgBA,KAAAA,EAAc,QAAgB,IAAA,EAAc,KAAA,GAA2B,EAAC,EAAG;AACjG,IAAA,MAAM,WAAA,GAAc,eAAe,MAAM,CAAA;AACzC,IAAA,MAAM,OAAA,GAAU,QAAQ,IAAI,CAAA;AAE5B,IAAA,IAAI,QAAQ,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,MAAA,EAAI,EAAE,KAAK,CAAA,CAAA;AAC/B,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,SAAA,IAAa,KAAA,CAAM,IAAA,KAAS,KAAA,EAAO,KAAA,GAAQ,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,MAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAA;AAAA,SAAA,IAC1E,KAAA,CAAM,SAAS,KAAA,EAAO,KAAA,GAAQ,GAAG,CAAA,CAAE,IAAI,CAAA,MAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAA;AAE3D,IAAA,MAAM,YAAY,CAAA,EAAG,WAAW,GAAG,MAAM,CAAA,EAAG,EAAE,KAAK,CAAA,CAAA;AACnD,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA,CAAA,EAAI,EAAE,KAAK,CAAA,EAAG,MAAM,CAAA,EAAG,CAAA,CAAE,KAAK,IAAIA,KAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,CAAA,CAAE,GAAG,GAAG,OAAO,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,EAC1G,CAAA;AAAA,EAEA,KAAK,GAAA,EAAa;AAAE,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,IAAI,SAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAAA,EAAG,CAAA;AAAA,EAClE,QAAQ,GAAA,EAAa;AAAE,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAK,SAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAAA,EAAG,CAAA;AAAA,EACtE,KAAK,GAAA,EAAa;AAAE,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,SAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,MAAM,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,EAAG,CAAA;AAAA,EAEzF,KAAA,CAAM,GAAA,EAAa,GAAA,GAAoB,IAAA,EAAM;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAG,SAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,GAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAC5D,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,CAAE,GAAG,GAAG,GAAA,CAAI,KAAA,CAAM,MAAM,IAAI,CAAA,CAAE,MAAM,CAAA,EAAG,CAAC,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAC/E,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,IAChB;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,CAAQ,MAAc,IAAA,EAAc;AAClC,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAK,SAAI,CAAA,CAAE,KAAK,CAAA,WAAA,EAAc,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,GAAG,IAAI,IAAI,CAAA,GAAA,EAAM,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,EACzG,CAAA;AAAA,EAEA,IAAI,IAAA,EAAc;AAChB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,SAAI,CAAA,CAAE,KAAK,CAAA,cAAA,EAAiB,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,EAC9E,CAAA;AAAA,EAEA,OAAO,IAAA,EAAc;AACnB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,SAAI,CAAA,CAAE,KAAK,CAAA,QAAA,EAAW,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,EACvE,CAAA;AAAA,EAEA,KAAA,CAAMA,OAAc,IAAA,EAAc;AAChC,IAAA,MAAM,YAAY,IAAA,KAAS,KAAA,GAAQ,QAAA,GAAM,IAAA,KAAS,YAAY,QAAA,GAAM,QAAA;AACpE,IAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,GAAQ,CAAA,CAAE,OAAO,IAAA,KAAS,SAAA,GAAY,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,GAAA;AACzE,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,KAAK,CAAA,EAAG,SAAS,GAAG,CAAA,CAAE,KAAK,CAAA,CAAA,EAAIA,KAAI,CAAA,CAAE,CAAA;AAAA,EACxD,CAAA;AAAA,EAEA,OAAA,GAAU;AAAE,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,sRAAA,EAAmD,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,EAAG,CAAA;AAAA,EAC/F,KAAA,GAAQ;AAAE,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAAG,CAAA;AAAA,EAE3B,UAAU,IAAA,EAAuB;AAC/B,IAAA,IAAA,CAAK,KAAA,CAAM,CAAA,KAAA,EAAQ,IAAI,CAAA,mBAAA,CAAqB,CAAA;AAC5C,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAG,CAAA,IAAA,EAAO,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACtC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AACnD,IAAA,OAAA,CAAQ,IAAI,CAAA,0CAAA,CAA4C,CAAA;AACxD,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACb,CAAA;AAAA,EAEA,MAAM,KAAA,EAAyB;AAC7B,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,MAAA,EAAI,CAAA,CAAE,KAAK,CAAA,gBAAA,CAAkB,CAAA;AACrD,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAG,CAAA,WAAA,EAAc,EAAE,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,GAAG,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACjF,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACb;AACF;;;AC9DO,SAAS,oBAAA,CAAqB,UAAoB,OAAA,EAA0B;AACjF,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,MAAM,IAAA,GAAO,OAAA,IAAW,QAAA,CAAS,YAAA,EAAc,UAAS,IAAK,EAAA;AAG7D,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,CAAS,KAAA,KAAU,WACpC,QAAA,CAAS,KAAA,GACT,QAAA,CAAS,KAAA,CAAM,QAAA,KAAa,QAAA,CAAS,MAAM,QAAA,GACzC,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,IAAA,EAAM,SAAS,KAAA,CAAM,OAAO,CAAA,GAC5D,QAAA,CAAS,KAAA,CAAM,OAAA,CAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,CAAA,OAAA,EAAUE,WAAAA,CAAW,KAAK,CAAC,CAAA,QAAA,CAAU,CAAA;AAAA,EACjD;AAEA,EAAA,IAAI,QAAA,CAAS,aAAa,IAAA,CAAK,IAAA,CAAK,qCAAqCA,WAAAA,CAAW,QAAA,CAAS,WAAW,CAAC,CAAA,EAAA,CAAI,CAAA;AAE7G,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,MAAM,EAAA,GAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,GAAI,QAAA,CAAS,QAAA;AACtF,IAAA,IAAA,CAAK,IAAA,CAAK,CAAA,+BAAA,EAAkCA,WAAAA,CAAW,EAAE,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EAChE;AAEA,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,IAAI,QAAA,CAAS,OAAA,GAAU,CAAC,QAAA,CAAS,OAAO,CAAA;AACtF,IAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA,KAAK;AACnB,MAAA,IAAI,CAAA,CAAE,MAAM,IAAA,CAAK,IAAA,CAAK,gCAAgCA,WAAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAC5E,MAAA,IAAI,EAAE,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA,yBAAA,EAA4B,CAAA,CAAE,GAAG,CAAA,EAAA,CAAI,CAAA;AAAA,IAC5D,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,IAAA,CAAK,IAAA,CAAK,mCAAmCA,WAAAA,CAAW,QAAA,CAAS,SAAS,CAAC,CAAA,EAAA,CAAI,CAAA;AACvG,EAAA,IAAI,QAAA,CAAS,iBAAiB,IAAA,CAAK,IAAA,CAAK,0CAA0CA,WAAAA,CAAW,QAAA,CAAS,eAAe,CAAC,CAAA,EAAA,CAAI,CAAA;AAC1H,EAAA,IAAI,SAAS,QAAA,EAAU,IAAA,CAAK,KAAK,CAAA,+BAAA,EAAkC,QAAA,CAAS,QAAQ,CAAA,EAAA,CAAI,CAAA;AAGxF,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,IAAI,OAAO,QAAA,CAAS,MAAA,KAAW,QAAA,EAAU;AACvC,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,6BAAA,EAAgC,QAAA,CAAS,MAAM,CAAA,EAAA,CAAI,CAAA;AAAA,IAC/D,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAK,CAAA,6BAAA,EAAgC,qBAAA,CAAsB,QAAA,CAAS,MAAM,CAAC,CAAA,EAAA,CAAI,CAAA;AACpF,MAAA,IAAI,QAAA,CAAS,OAAO,SAAA,EAAW;AAC7B,QAAA,MAAM,GAAA,GAAM,OAAO,QAAA,CAAS,MAAA,CAAO,SAAA,KAAc,QAAA,GAAW,QAAA,CAAS,MAAA,CAAO,SAAA,GAAY,qBAAA,CAAsB,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA;AACvI,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,gCAAA,EAAmC,GAAG,CAAA,EAAA,CAAI,CAAA;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,MAAM,EAAA,GAAK,OAAO,QAAA,CAAS,QAAA,KAAa,WAAW,QAAA,CAAS,QAAA,GAAW,uBAAA,CAAwB,QAAA,CAAS,QAAQ,CAAA;AAChH,IAAA,IAAA,CAAK,IAAA,CAAK,CAAA,+BAAA,EAAkC,EAAE,CAAA,EAAA,CAAI,CAAA;AAAA,EACpD;AAGA,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,UAAU,IAAI,QAAA,CAAS,UAAA,GAAa,CAAC,QAAA,CAAS,UAAU,CAAA;AAC3F,IAAA,GAAA,CAAI,QAAQ,CAAA,EAAA,KAAM;AAChB,MAAA,MAAM,KAAA,GAAQ,OAAO,EAAA,KAAO,QAAA,IAAY,GAAG,KAAA,GAAQ,CAAA,QAAA,EAAW,EAAA,CAAG,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AAC5E,MAAA,MAAM,KAAA,GAAQ,OAAO,EAAA,KAAO,QAAA,GAAW,KAAK,EAAA,CAAG,KAAA;AAC/C,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,kCAAA,EAAqC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IAClE,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,SAAS,WAAA,EAAa,IAAA,CAAK,KAAK,CAAA,mCAAA,EAAsC,QAAA,CAAS,WAAW,CAAA,EAAA,CAAI,CAAA;AAGlG,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,OAAA,GAAU,CAAC,IAAA,EAAsB,UAAA,KAAuB;AAC5D,MAAA,MAAM,GAAA,GAAM,KAAK,GAAA,IAAO,UAAA;AACxB,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,IAAA,CAAK,IAAA,GAAO,CAAA,OAAA,EAAU,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,GAAM,EAAA;AAAA,QACrC,IAAA,CAAK,KAAA,GAAQ,CAAA,QAAA,EAAW,IAAA,CAAK,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AAAA,QACxC,IAAA,CAAK,KAAA,GAAQ,CAAA,QAAA,EAAW,IAAA,CAAK,KAAK,CAAA,CAAA,CAAA,GAAM;AAAA,OAC1C,CAAE,KAAK,EAAE,CAAA;AACT,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,WAAA,EAAc,GAAG,CAAA,QAAA,EAAW,UAAA,CAAW,IAAA,CAAK,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IAC9E,CAAA;AACA,IAAA,IAAI,QAAA,CAAS,MAAM,IAAA,EAAM;AAAE,MAAA,CAAC,MAAM,OAAA,CAAQ,QAAA,CAAS,MAAM,IAAI,CAAA,GAAI,SAAS,KAAA,CAAM,IAAA,GAAO,CAAC,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA,CAAQ,OAAK,OAAA,CAAQ,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,IAAG;AAChJ,IAAA,IAAI,QAAA,CAAS,MAAM,KAAA,EAAO;AAAE,MAAA,CAAC,MAAM,OAAA,CAAQ,QAAA,CAAS,MAAM,KAAK,CAAA,GAAI,SAAS,KAAA,CAAM,KAAA,GAAQ,CAAC,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,EAAG,OAAA,CAAQ,OAAK,OAAA,CAAQ,CAAA,EAAG,kBAAkB,CAAC,CAAA;AAAA,IAAG;AAAA,EAClK;AAEA,EAAA,IAAI,QAAA,CAAS,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,CAAA,2BAAA,EAA8B,WAAW,QAAA,CAAS,QAAA,EAAU,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAGtG,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,MAAM,KAAK,QAAA,CAAS,SAAA;AACpB,IAAA,IAAI,GAAG,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA,kCAAA,EAAqC,EAAA,CAAG,IAAI,CAAA,EAAA,CAAI,CAAA;AACvE,IAAA,IAAI,EAAA,CAAG,OAAO,IAAA,CAAK,IAAA,CAAK,sCAAsCA,WAAAA,CAAW,EAAA,CAAG,KAAK,CAAC,CAAA,EAAA,CAAI,CAAA;AACtF,IAAA,IAAI,EAAA,CAAG,aAAa,IAAA,CAAK,IAAA,CAAK,4CAA4CA,WAAAA,CAAW,EAAA,CAAG,WAAW,CAAC,CAAA,EAAA,CAAI,CAAA;AACxG,IAAA,IAAI,EAAA,CAAG,GAAA,EAAK,IAAA,CAAK,IAAA,CAAK,CAAA,iCAAA,EAAoC,WAAW,EAAA,CAAG,GAAA,EAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AACtF,IAAA,IAAI,EAAA,CAAG,UAAU,IAAA,CAAK,IAAA,CAAK,0CAA0CA,WAAAA,CAAW,EAAA,CAAG,QAAQ,CAAC,CAAA,EAAA,CAAI,CAAA;AAChG,IAAA,IAAI,GAAG,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,oCAAA,EAAuC,EAAA,CAAG,MAAM,CAAA,EAAA,CAAI,CAAA;AAC7E,IAAA,IAAI,GAAG,MAAA,EAAQ;AACb,MAAA,CAAC,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,MAAM,CAAA,GAAI,EAAA,CAAG,MAAA,GAAS,CAAC,EAAA,CAAG,MAAM,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAA,KAAO;AAClE,QAAA,IAAA,CAAK,KAAK,CAAA,mCAAA,EAAsC,UAAA,CAAW,IAAI,GAAA,EAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAC7E,QAAA,IAAI,IAAI,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA,yCAAA,EAA4C,GAAA,CAAI,KAAK,CAAA,EAAA,CAAI,CAAA;AAClF,QAAA,IAAI,IAAI,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,0CAAA,EAA6C,GAAA,CAAI,MAAM,CAAA,EAAA,CAAI,CAAA;AACrF,QAAA,IAAI,GAAA,CAAI,KAAK,IAAA,CAAK,IAAA,CAAK,0CAA0CA,WAAAA,CAAW,GAAA,CAAI,GAAG,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,MAC1F,CAAC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,EAAA,CAAG,SAAS,SAAA,EAAW;AACzB,MAAA,IAAI,GAAG,aAAA,EAAe,IAAA,CAAK,KAAK,CAAA,iDAAA,EAAoD,EAAA,CAAG,aAAa,CAAA,EAAA,CAAI,CAAA;AACxG,MAAA,IAAI,GAAG,YAAA,EAAc,IAAA,CAAK,KAAK,CAAA,gDAAA,EAAmD,EAAA,CAAG,YAAY,CAAA,EAAA,CAAI,CAAA;AACrG,MAAA,IAAI,EAAA,CAAG,IAAA,EAAM,EAAA,CAAG,IAAA,CAAK,OAAA,CAAQ,CAAA,CAAA,KAAK,IAAA,CAAK,IAAA,CAAK,CAAA,sCAAA,EAAyCA,WAAAA,CAAW,CAAC,CAAC,IAAI,CAAC,CAAA;AAAA,IACzG;AAAA,EACF;AAGA,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,MAAM,KAAK,QAAA,CAAS,OAAA;AACpB,IAAA,IAAI,GAAG,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA,mCAAA,EAAsC,EAAA,CAAG,IAAI,CAAA,EAAA,CAAI,CAAA;AACxE,IAAA,IAAI,GAAG,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA,mCAAA,EAAsC,EAAA,CAAG,IAAI,CAAA,EAAA,CAAI,CAAA;AACxE,IAAA,IAAI,GAAG,OAAA,EAAS,IAAA,CAAK,KAAK,CAAA,sCAAA,EAAyC,EAAA,CAAG,OAAO,CAAA,EAAA,CAAI,CAAA;AACjF,IAAA,IAAI,EAAA,CAAG,OAAO,IAAA,CAAK,IAAA,CAAK,uCAAuCA,WAAAA,CAAW,EAAA,CAAG,KAAK,CAAC,CAAA,EAAA,CAAI,CAAA;AACvF,IAAA,IAAI,EAAA,CAAG,aAAa,IAAA,CAAK,IAAA,CAAK,6CAA6CA,WAAAA,CAAW,EAAA,CAAG,WAAW,CAAC,CAAA,EAAA,CAAI,CAAA;AACzG,IAAA,IAAI,GAAG,MAAA,EAAQ;AACb,MAAA,CAAC,KAAA,CAAM,OAAA,CAAQ,EAAA,CAAG,MAAM,CAAA,GAAI,EAAA,CAAG,MAAA,GAAS,CAAC,EAAA,CAAG,MAAM,CAAA,EAAG,OAAA,CAAQ,CAAA,GAAA,KAAO;AAClE,QAAA,MAAM,GAAA,GAAM,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAM,GAAA,CAAI,GAAA;AAChD,QAAA,IAAA,CAAK,KAAK,CAAA,oCAAA,EAAuC,UAAA,CAAW,GAAA,EAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,MAC5E,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,IAAI,SAAS,YAAA,EAAc;AACzB,IAAA,IAAI,QAAA,CAAS,aAAa,MAAA,EAAQ;AAChC,MAAA,CAAC,KAAA,CAAM,QAAQ,QAAA,CAAS,YAAA,CAAa,MAAM,CAAA,GAAI,QAAA,CAAS,aAAa,MAAA,GAAS,CAAC,SAAS,YAAA,CAAa,MAAM,GACxG,OAAA,CAAQ,CAAA,CAAA,KAAK,KAAK,IAAA,CAAK,CAAA,+CAAA,EAAkD,CAAC,CAAA,EAAA,CAAI,CAAC,CAAA;AAAA,IACpF;AAAA,EACF;AAGA,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,IAAI,QAAA,CAAS,UAAA,CAAW,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,CAAA,4BAAA,EAA+B,UAAA,CAAW,QAAA,CAAS,UAAA,CAAW,SAAA,EAAW,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAC/H,IAAA,IAAI,QAAA,CAAS,WAAW,SAAA,EAAW;AACjC,MAAA,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,CAAE,QAAQ,CAAC,CAAC,IAAA,EAAM,GAAG,CAAA,KAAM;AACrE,QAAA,IAAA,CAAK,IAAA,CAAK,mCAAmC,IAAI,CAAA,QAAA,EAAW,WAAW,GAAA,EAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,MACvF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,CAAK,KAAK,QAAQ,CAAA;AAC3B;AAMO,SAAS,aAAA,CAAc,QAAkB,KAAA,EAA2B;AACzE,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IAAQ,GAAG,KAAA;AAAA,IACd,SAAA,EAAW,KAAA,CAAM,SAAA,GAAY,EAAE,GAAG,MAAA,CAAO,SAAA,EAAW,GAAG,KAAA,CAAM,SAAA,EAAU,GAAI,MAAA,CAAO,SAAA;AAAA,IAClF,OAAA,EAAS,KAAA,CAAM,OAAA,GAAU,EAAE,GAAG,MAAA,CAAO,OAAA,EAAS,GAAG,KAAA,CAAM,OAAA,EAAQ,GAAI,MAAA,CAAO,OAAA;AAAA,IAC1E,KAAA,EAAO,KAAA,CAAM,KAAA,GAAQ,EAAE,GAAG,MAAA,CAAO,KAAA,EAAO,GAAG,KAAA,CAAM,KAAA,EAAM,GAAI,MAAA,CAAO,KAAA;AAAA,IAClE,UAAA,EAAY,KAAA,CAAM,UAAA,GAAa,EAAE,GAAG,MAAA,CAAO,UAAA,EAAY,GAAG,KAAA,CAAM,UAAA,EAAW,GAAI,MAAA,CAAO;AAAA,GACxF;AACF;AAEO,SAAS,eAAe,IAAA,EAAuC;AACpE,EAAA,OAAO,CAAA,mCAAA,EAAsC,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,SAAA,CAAA;AACnE;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,OAAA,EAAS,CAACC,EAAAA,MAA4D;AAAA,IACpE,UAAA,EAAY,oBAAA;AAAA,IAAsB,OAAA,EAAS,SAAA;AAAA,IAAW,MAAMA,EAAAA,CAAE,IAAA;AAAA,IAAM,KAAKA,EAAAA,CAAE,GAAA;AAAA,IAAK,aAAaA,EAAAA,CAAE;AAAA,GACjG,CAAA;AAAA,EACA,OAAA,EAAS,CAACA,EAAAA,MAAuM;AAAA,IAC/M,UAAA,EAAY,oBAAA;AAAA,IAAsB,OAAA,EAAS,SAAA;AAAA,IAAW,UAAUA,EAAAA,CAAE,QAAA;AAAA,IAAU,aAAaA,EAAAA,CAAE,WAAA;AAAA,IAC3F,OAAOA,EAAAA,CAAE,KAAA;AAAA,IAAO,eAAeA,EAAAA,CAAE,aAAA;AAAA,IAAe,YAAA,EAAcA,EAAAA,CAAE,YAAA,IAAgBA,EAAAA,CAAE,aAAA;AAAA,IAClF,MAAA,EAAQ,MAAM,OAAA,CAAQA,EAAAA,CAAE,MAAM,CAAA,GAAIA,EAAAA,CAAE,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,SAAS,QAAA,EAAU,GAAG,GAAE,CAAE,CAAA,GAAI,EAAE,OAAA,EAAS,QAAA,EAAU,GAAGA,EAAAA,CAAE,MAAA;AAAO,GACxH,CAAA;AAAA,EACA,YAAA,EAAc,CAACA,EAAAA,MAAwE;AAAA,IACrF,UAAA,EAAY,oBAAA;AAAA,IAAsB,OAAA,EAAS,cAAA;AAAA,IAAgB,MAAMA,EAAAA,CAAE,IAAA;AAAA,IAAM,KAAKA,EAAAA,CAAE,GAAA;AAAA,IAAK,MAAMA,EAAAA,CAAE,IAAA;AAAA,IAAM,QAAQA,EAAAA,CAAE;AAAA,GAC/G,CAAA;AAAA,EACA,UAAA,EAAY,CAAC,KAAA,MAA4C;AAAA,IACvD,UAAA,EAAY,oBAAA;AAAA,IAAsB,OAAA,EAAS,gBAAA;AAAA,IAC3C,iBAAiB,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,MAAO,EAAE,OAAA,EAAS,UAAA,EAAY,QAAA,EAAU,CAAA,GAAI,GAAG,IAAA,EAAM,IAAA,CAAK,MAAM,IAAA,EAAM,IAAA,CAAK,KAAI,CAAE;AAAA,GACrH;AACF;AASO,SAAS,eAAA,CAAgB,QAA+C,OAAA,EAAyB;AACtG,EAAA,MAAM,IAAA,GAAO,OACV,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,MAAA,IAAU,CAAC,CAAA,CAAE,IAAA,CAAK,SAAS,GAAG,CAAA,IAAK,CAAC,CAAA,CAAE,IAAA,CAAK,SAAS,GAAG,CAAC,CAAA,CAC/E,GAAA,CAAI,CAAA,CAAA,KAAK;AACR,IAAA,MAAM,GAAA,GAAM,GAAG,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAC,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA;AAClD,IAAA,OAAO,CAAA;AAAA,SAAA,EAAqB,GAAG,CAAA;AAAA,aAAA,EAAA,iBAAwB,IAAI,MAAK,EAAE,WAAA,GAAc,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA;AAAA,cAAA,EAAkE,CAAA,CAAE,IAAA,KAAS,GAAA,GAAM,KAAA,GAAQ,KAAK,CAAA;AAAA,QAAA,CAAA;AAAA,EAC/L,CAAC,CAAA;AAEH,EAAA,OAAO,CAAA;AAAA;AAAA,EAAyG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC;AAAA,SAAA,CAAA;AACjI;AAKO,SAAS,iBAAA,CAAkB,OAAA,EAAiB,OAAA,GAAqD,EAAC,EAAW;AAClH,EAAA,MAAM,KAAA,GAAQ,CAAC,eAAe,CAAA;AAC9B,EAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAA,KAAK,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,CAAC,CAAA,CAAE,CAAC,CAAA;AACvE,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,OAAA,CAAQ,CAAA,CAAA,KAAK,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE,CAAC,CAAA;AAAA,OAC3E,KAAA,CAAM,KAAK,UAAU,CAAA;AAC1B,EAAA,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,SAAA,EAAY,OAAA,CAAQ,QAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,YAAA,CAAc,CAAA;AACnE,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAMA,SAASD,YAAW,GAAA,EAAqB;AACvC,EAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CAAE,OAAA,CAAQ,MAAM,MAAM,CAAA,CAAE,QAAQ,IAAA,EAAM,MAAM,EAAE,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA,CAAE,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAC9H;AAEA,SAAS,UAAA,CAAW,KAAa,IAAA,EAAsB;AACrD,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,UAAU,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,GAAA;AAC5F,EAAA,OAAO,OAAO,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,EAAG,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,EAAG,GAAG,CAAA,CAAA,GAAK,GAAA;AACtF;AAEA,SAAS,sBAAsB,MAAA,EAAwB;AACrD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW,KAAA,CAAM,KAAK,MAAA,CAAO,KAAA,GAAQ,UAAU,SAAS,CAAA;AAC7E,EAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAW,KAAA,CAAM,KAAK,MAAA,CAAO,MAAA,GAAS,WAAW,UAAU,CAAA;AACjF,EAAA,IAAI,MAAA,CAAO,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AAC5C,EAAA,IAAI,MAAA,CAAO,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AAC5C,EAAA,IAAI,MAAA,CAAO,YAAA,EAAc,KAAA,CAAM,IAAA,CAAK,cAAc,CAAA;AAClD,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,IAAK,eAAA;AAC7B;AAEA,SAAS,wBAAwB,QAAA,EAA4B;AAC3D,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,SAAS,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,MAAA,EAAS,QAAA,CAAS,KAAK,CAAA,CAAE,CAAA;AACxD,EAAA,IAAI,SAAS,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,OAAA,EAAU,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAC3D,EAAA,IAAI,QAAA,CAAS,iBAAiB,MAAA,EAAW,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,QAAA,CAAS,YAAY,CAAA,CAAE,CAAA;AAC5F,EAAA,IAAI,QAAA,CAAS,iBAAiB,MAAA,EAAW,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,QAAA,CAAS,YAAY,CAAA,CAAE,CAAA;AAC5F,EAAA,IAAI,QAAA,CAAS,YAAA,KAAiB,MAAA,EAAW,KAAA,CAAM,IAAA,CAAK,iBAAiB,QAAA,CAAS,YAAA,GAAe,KAAA,GAAQ,IAAI,CAAA,CAAE,CAAA;AAC3G,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,IAAK,qCAAA;AAC7B;ACjQO,IAAM,WAAA,GAAc;AAAA,EACzB,IAAA,CAAK,OAAA,GAMD,EAAC,EAAuB;AAC1B,IAAA,MAAM;AAAA,MACJ,MAAA,GAAS,GAAA;AAAA,MACT,UAAU,CAAC,KAAA,EAAO,QAAQ,KAAA,EAAO,QAAA,EAAU,SAAS,SAAS,CAAA;AAAA,MAC7D,OAAA,EAAS,YAAA,GAAe,CAAC,cAAA,EAAgB,eAAe,CAAA;AAAA,MACxD,WAAA,GAAc,KAAA;AAAA,MACd,MAAA,GAAS;AAAA,KACX,GAAI,OAAA;AAEJ,IAAA,OAAO,OAAO,GAAA,EAAK,GAAA,EAAK,IAAA,KAAS;AAC/B,MAAA,MAAM,YAAA,GAAe,OAAO,MAAA,KAAW,QAAA,GAAW,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,MAAgB,CAAA,GAAI,GAAA,CAAI,QAAQ,MAAA,GAAmB,EAAA;AAE1I,MAAA,GAAA,CAAI,MAAA,CAAO,+BAA+B,YAAY,CAAA;AACtD,MAAA,GAAA,CAAI,MAAA,CAAO,8BAAA,EAAgC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAC7D,MAAA,GAAA,CAAI,MAAA,CAAO,8BAAA,EAAgC,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA;AAClE,MAAA,GAAA,CAAI,MAAA,CAAO,wBAAA,EAA0B,MAAA,CAAO,MAAM,CAAC,CAAA;AAEnD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,GAAA,CAAI,MAAA,CAAO,oCAAoC,MAAM,CAAA;AAAA,MACvD;AAEA,MAAA,IAAI,GAAA,CAAI,WAAW,SAAA,EAAW;AAC5B,QAAA,GAAA,CAAI,OAAO,GAAG,CAAA;AACd,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,EAAK;AAAA,IACb,CAAA;AAAA,EACF,CAAA;AAAA,EAEA,SAAA,CAAU,OAAA,GAIN,EAAC,EAAuB;AAC1B,IAAA,MAAM,EAAE,QAAA,GAAW,GAAA,EAAO,MAAM,GAAA,EAAK,OAAA,GAAU,qBAAoB,GAAI,OAAA;AACvE,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAkD;AAEpE,IAAA,OAAO,OAAO,GAAA,EAAK,GAAA,EAAK,IAAA,KAAS;AAC/B,MAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,iBAAiB,CAAA,IAAe,SAAA;AACvD,MAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA;AAE3B,MAAA,IAAI,CAAC,MAAA,IAAU,GAAA,GAAM,MAAA,CAAO,SAAA,EAAW;AACrC,QAAA,KAAA,CAAM,GAAA,CAAI,IAAI,EAAE,KAAA,EAAO,GAAG,SAAA,EAAW,GAAA,GAAM,UAAU,CAAA;AAAA,MACvD,CAAA,MAAA,IAAW,MAAA,CAAO,KAAA,IAAS,GAAA,EAAK;AAC9B,QAAA,GAAA,CAAI,OAAO,GAAG,CAAA,CAAE,KAAK,EAAE,KAAA,EAAO,SAAS,CAAA;AACvC,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,KAAA,EAAA;AAAA,MACT;AAEA,MAAA,MAAM,IAAA,EAAK;AAAA,IACb,CAAA;AAAA,EACF,CAAA;AAAA,EAEA,QAAA,GAA+B;AAC7B,IAAA,OAAO,OAAO,IAAA,EAAM,GAAA,EAAK,IAAA,KAAS;AAChC,MAAA,GAAA,CAAI,MAAA,CAAO,0BAA0B,SAAS,CAAA;AAC9C,MAAA,GAAA,CAAI,MAAA,CAAO,mBAAmB,MAAM,CAAA;AACpC,MAAA,GAAA,CAAI,MAAA,CAAO,oBAAoB,eAAe,CAAA;AAC9C,MAAA,GAAA,CAAI,MAAA,CAAO,mBAAmB,iCAAiC,CAAA;AAC/D,MAAA,MAAM,IAAA,EAAK;AAAA,IACb,CAAA;AAAA,EACF;AACF;AASA,eAAsB,eAAe,WAAA,EAAoD;AACvF,EAAA,MAAM,MAA4B,EAAC;AACnC,EAAA,MAAM,aAAA,GAAgB,CAAC,UAAA,EAAY,UAAU,CAAA;AAE7C,EAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,IAAA,MAAM,QAAA,GAAWF,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,IAAI,CAAA;AAC5C,IAAA,IAAI,CAACC,EAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAE9B,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,aAAA,EAAAG,cAAAA,EAAc,GAAI,MAAM,OAAO,KAAK,CAAA;AAC5C,MAAA,MAAM,GAAA,GAAMA,cAAAA,CAAc,QAAQ,CAAA,CAAE,IAAA;AACpC,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,IAAA,CAAK,KAAK,CAAA,CAAA,CAAA;AAC/C,MAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,SAAS,GAAA,CAAI,UAAA;AAC3C,MAAA,IAAI,OAAO,OAAO,UAAA,EAAY;AAC5B,QAAA,GAAA,CAAI,KAAK,EAAE,CAAA;AACX,QAAA;AAAA,MACF;AAAA,IACF,SAAS,GAAA,EAAc;AACrB,MAAA,MAAM,KAAA,GAAQ,GAAA;AACd,MAAA,OAAA,CAAQ,KAAK,CAAA,4BAAA,EAA0B,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACjE;AAAA,EACF;AAEA,EAAA,OAAO,GAAA;AACT;AASA,eAAsB,aAAA,CACpB,GAAA,EACA,GAAA,EACA,GAAA,EAC2B;AAC3B,EAAA,MAAM,MAAA,GAA2B,EAAE,QAAA,EAAU,IAAA,EAAM,WAAW,KAAA,EAAM;AACpE,EAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAE7B,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,GAAA,CAAI,GAAA,IAAO,GAAA,EAAK,CAAA,OAAA,EAAU,GAAA,CAAI,OAAA,CAAQ,IAAA,IAAQ,WAAW,CAAA,CAAE,CAAA;AAC/E,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,MAAM,YAAA,GAAe,IAAI,OAAA,CAAQ,MAAA;AACjC,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,YAAA,CAAa,KAAA,CAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAAD,EAAAA,KAAK;AACnC,MAAA,MAAM,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,GAAIA,EAAAA,CAAE,MAAM,GAAG,CAAA;AAC7B,MAAA,IAAI,CAAA,EAAG,OAAA,CAAQ,CAAA,CAAE,IAAA,EAAM,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,IAC9C,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,IAAA,GAA0B;AAAA,IAC9B,GAAA,EAAK,IAAI,GAAA,IAAO,GAAA;AAAA,IAChB,MAAA,EAAQ,IAAI,MAAA,IAAU,KAAA;AAAA,IACtB,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,OAAA;AAAA,IACA,QAAQ,EAAC;AAAA,IACT,KAAA,EAAO,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,YAAY,CAAA;AAAA,IAC1C,GAAA,EAAK;AAAA,GACP;AAEA,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,MAAM,IAAA,GAA2B;AAAA,IAC/B,WAAA,EAAa,GAAA;AAAA,IACb,UAAU,EAAC;AAAA,IACX,YAAA,EAAc,IAAA;AAAA,IACd,WAAA,EAAa,IAAA;AAAA,IACb,MAAA,EAAQ,KAAA;AAAA,IACR,OAAO,IAAA,EAAM;AAAE,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAM,MAAA,OAAO,IAAA;AAAA,IAAM,CAAA;AAAA,IACrD,MAAA,CAAO,MAAM,KAAA,EAAO;AAAE,MAAA,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,GAAI,KAAA;AAAO,MAAA,OAAO,IAAA;AAAA,IAAM,CAAA;AAAA,IAChE,KAAK,IAAA,EAAM;AACT,MAAA,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA,GAAI,kBAAA;AAChC,MAAA,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,QAAQ,CAAA;AAC7C,MAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAC5B,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV,CAAA;AAAA,IACA,QAAA,CAASE,IAAAA,EAAK,MAAA,GAAS,GAAA,EAAK;AAC1B,MAAA,IAAA,CAAK,YAAA,GAAeA,IAAAA;AACpB,MAAA,IAAA,CAAK,WAAA,GAAc,MAAA;AACnB,MAAA,GAAA,CAAI,SAAA,CAAU,QAAQ,EAAE,QAAA,EAAUA,MAAK,GAAG,IAAA,CAAK,UAAU,CAAA;AACzD,MAAA,GAAA,CAAI,GAAA,EAAI;AACR,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV,CAAA;AAAA,IACA,QAAQA,IAAAA,EAAK;AACX,MAAA,IAAA,CAAK,WAAA,GAAcA,IAAAA;AACnB,MAAA,GAAA,CAAI,GAAA,GAAMA,IAAAA;AACV,MAAA,MAAA,CAAO,SAAA,GAAY,IAAA;AAAA,IACrB,CAAA;AAAA,IACA,MAAM,IAAA,GAAO;AAAA,IAAyB;AAAA,GACxC;AAGA,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,IAAI,KAAA,IAAS,KAAA,IAAS,GAAA,CAAI,MAAA,EAAQ;AAClC,IAAA,MAAM,EAAA,GAAK,IAAI,KAAA,EAAO,CAAA;AACtB,IAAA,MAAM,EAAA,CAAG,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,IAAA,EAAK;AAGX,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG;AACxD,MAAA,GAAA,CAAI,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,WAAW,CAAC,KAAA;AACnB,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,qBAAqB,GAAA,EAA+C;AAClF,EAAA,OAAO,OAAO,GAAA,EAAK,GAAA,EAAK,IAAA,KAAS;AAC/B,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,MAAM,MAAM,YAAY;AACtB,MAAA,IAAI,KAAA,IAAS,IAAI,MAAA,EAAQ;AAAE,QAAA,MAAM,IAAA,EAAK;AAAG,QAAA;AAAA,MAAQ;AACjD,MAAA,MAAM,EAAA,GAAK,IAAI,KAAA,EAAO,CAAA;AACtB,MAAA,MAAM,EAAA,CAAG,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,IACxB,CAAA;AACA,IAAA,MAAM,GAAA,EAAI;AAAA,EACZ,CAAA;AACF;ACvPO,IAAM,WAAA,GAAc;AAAA,EACzB,MAAA,EAAQ,QAAA;AAAA,EACR,YAAA,EAAc,cAAA;AAAA,EACd,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,UAAA;AAAA,EACV,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,YAAA,EAAc,cAAA;AAAA,EACd,WAAA,EAAa,aAAA;AAAA,EACb,SAAA,EAAW;AACb;AAgCO,IAAM,gBAAN,MAAoB;AAAA,EACjB,UAAmC,EAAC;AAAA,EACpC,KAAA,uBAAyD,GAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAKrE,SAAS,MAAA,EAA+B;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAM,CAAA;AAGxB,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,KAAA,MAAW,CAAC,UAAU,OAAO,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AAC9D,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,KAAK,EAAC;AAC9C,UAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AACrB,UAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAA;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,CAA8B,QAAA,EAAA,GAAgB,IAAA,EAAwC;AAC1F,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,KAAK,EAAC;AAC9C,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,OAAA,CAAQ,GAAG,IAAI,CAAA;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CAAuC,QAAA,EAAa,KAAA,EAAA,GAAgC,IAAA,EAAqG;AAC7L,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,KAAK,EAAC;AAC9C,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,MAAA,EAAQ,GAAG,IAAI,CAAA;AACjD,MAAA,IAAI,WAAA,KAAgB,QAAW,MAAA,GAAS,WAAA;AAAA,IAC1C;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAsC;AACpC,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAO,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,IAAA,EAAuB;AAC/B,IAAA,OAAO,KAAK,OAAA,CAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,IAAI,CAAA;AAAA,EAC/C;AACF;AAMO,IAAM,aAAA,GAAgB,IAAI,aAAA;AASjC,eAAsB,WAAA,CAAY,aAAqB,MAAA,EAAgD;AACrG,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,IAAW,EAAC;AAEzC,EAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAE7B,QAAA,MAAM,YAAYL,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,SAAA,EAAW,QAAQ,KAAK,CAAA;AACjE,QAAA,MAAM,cAAcA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,SAAA,EAAW,QAAQ,KAAK,CAAA;AACnE,QAAA,MAAM,eAAeA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,SAAA,EAAW,OAAO,UAAU,CAAA;AAExE,QAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,QAAA,IAAIC,EAAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG,UAAA,GAAa,SAAA;AAAA,aAAA,IAClCA,EAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG,UAAA,GAAa,WAAA;AAAA,aAAA,IACzCA,EAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG,UAAA,GAAa,YAAA;AAEnD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,GAAA,GAAMG,aAAAA,CAAc,UAAU,CAAA,CAAE,IAAA;AACtC,UAAA,MAAM,GAAA,GAAM,MAAM,OAAO,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,IAAA,CAAK,KAAK,CAAA,CAAA,CAAA;AAC/C,UAAA,MAAM,MAAA,GAAS,IAAI,OAAA,IAAW,GAAA;AAC9B,UAAA,IAAI,OAAO,IAAA,EAAM;AACf,YAAA,aAAA,CAAc,SAAS,MAAM,CAAA;AAAA,UAC/B;AAAA,QACF,CAAA,MAAO;AAEL,UAAA,IAAI;AACF,YAAA,MAAM,GAAA,GAAM,MAAM,OAAO,KAAA,CAAA;AACzB,YAAA,MAAM,MAAA,GAAS,IAAI,OAAA,IAAW,GAAA;AAC9B,YAAA,IAAI,MAAA,CAAO,IAAA,EAAM,aAAA,CAAc,QAAA,CAAS,MAAM,CAAA;AAAA,UAChD,CAAA,CAAA,MAAQ;AACN,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yBAAA,EAAuB,KAAK,CAAA,CAAE,CAAA;AAAA,UAC7C;AAAA,QACF;AAAA,MACF,WAAW,OAAO,KAAA,KAAU,YAAY,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAEzE,QAAA,aAAA,CAAc,SAAS,KAA8B,CAAA;AAAA,MACvD;AAAA,IACF,SAAS,GAAA,EAAc;AACrB,MAAA,MAAM,KAAA,GAAQ,GAAA;AACd,MAAA,OAAA,CAAQ,KAAK,CAAA,8BAAA,EAA4B,KAAA,EAAO,WAAW,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAC5E;AAAA,EACF;AACF;AAqBO,SAAS,aAAa,UAAA,EAA0D;AACrF,EAAA,OAAO,UAAA;AACT;AAMO,IAAM,cAAA,GAAiB;AAAA;AAAA;AAAA;AAAA,EAI5B,UAAU,YAAA,CAAa;AAAA,IACrB,IAAA,EAAM,gBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,CAAC,WAAA,CAAY,QAAQ,GAAG,CAAC,MAAe,GAAA,KAAiB;AACvD,QAAA,MAAM,QAAA,GAAW,GAAA;AACjB,QAAA,IAAI,CAAC,SAAS,WAAA,EAAa;AACzB,UAAA,QAAA,CAAS,SAAA,CAAU,0BAA0B,SAAS,CAAA;AACtD,UAAA,QAAA,CAAS,SAAA,CAAU,mBAAmB,MAAM,CAAA;AAC5C,UAAA,QAAA,CAAS,SAAA,CAAU,oBAAoB,eAAe,CAAA;AAAA,QACxD;AAAA,MACF;AAAA;AACF,GACD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKD,QAAQ,YAAA,CAAa;AAAA,IACnB,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,CAAC,WAAA,CAAY,QAAQ,GAAG,CAAC,GAAA,EAAc,MAAe,QAAA,KAAsB;AAC1E,QAAA,MAAM,OAAA,GAAU,GAAA;AAChB,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,OAAA,CAAQ,MAAM,IAAI,OAAA,CAAQ,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,CAAI,CAAA;AAAA,MAChE;AAAA;AACF,GACD;AACH;;;AC7NA,eAAsB,KAAA,CACpB,IACA,OAAA,GAAsD,EAAE,YAAY,CAAA,EAAG,UAAA,EAAY,KAAK,EAC5E;AACZ,EAAA,IAAI,SAAA;AAEJ,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,YAAY,CAAA,EAAA,EAAK;AAC3C,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,GAAY,KAAA;AAEZ,MAAA,IAAI,CAAA,GAAI,OAAA,CAAQ,UAAA,GAAa,CAAA,EAAG;AAC9B,QAAA,MAAM,QAAQ,OAAA,CAAQ,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAChD,QAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,IAAa,IAAI,KAAA,CAAM,cAAc,CAAA;AAC7C;AAKO,SAAS,aAAA,CAA2B,MAAc,QAAA,EAAwB;AAC/E,EAAA,IAAI;AAEF,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,0BAA0B,CAAA;AACvD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,IAChC;AAGA,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,QAAA,IAAY,IAAA;AAAA,EACrB;AACF;AAKO,SAAS,WAAA,CAAY,UAAkB,SAAA,EAA4C;AACxF,EAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,gBAAA,EAAkB,CAAC,GAAG,GAAA,KAAQ;AACpD,IAAA,MAAM,GAAA,GAAM,UAAU,GAAG,CAAA;AACzB,IAAA,OAAO,GAAA,IAAO,IAAA,GAAO,MAAA,CAAO,GAAG,CAAA,GAAI,EAAA;AAAA,EACrC,CAAC,CAAA;AACH;AAKO,SAAS,cAAA,CAAe,QAA4B,QAAA,EAAwB;AACjF,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACnC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,QAAQ,CAAA,SAAA,CAAW,CAAA;AAAA,EAChE;AACF;AAKO,SAAS,aAAA,CAAc,OAAgC,cAAA,EAAgC;AAC5F,EAAA,KAAA,MAAW,SAAS,cAAA,EAAgB;AAClC,IAAA,IAAI,EAAE,KAAA,IAAS,KAAA,CAAA,IAAU,KAAA,CAAM,KAAK,MAAM,MAAA,IAAa,KAAA,CAAM,KAAK,CAAA,KAAM,IAAA,EAAM;AAC5E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAE,CAAA;AAAA,IACpD;AAAA,EACF;AACF;AAKO,SAAS,mBAAA,GAAsB;AACpC,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAEhC,EAAA,OAAO,CAAC,KAAA,KAA8B;AACpC,IAAA,OAAO,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,EAC/C,CAAA;AACF;AAKO,SAAS,SAAS,IAAA,EAAuB;AAC9C,EAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAEzB,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,OAAO,EAAE,MAAM,IAAA,EAAK;AAAA,EACtB;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKO,SAAS,cAAc,IAAA,EAAsB;AAClD,EAAA,OAAO,IAAA,CAAK,IAAA,EAAK,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AACtC;AAKO,SAAS,eAAe,IAAA,EAAsB;AAEnD,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAClC;AAKO,SAAS,gBAAA,CAAiB,MAAc,SAAA,EAA2B;AACxE,EAAA,MAAM,eAAA,GAAkB,eAAe,IAAI,CAAA;AAE3C,EAAA,IAAI,mBAAmB,SAAA,EAAW;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAW,SAAA,GAAY,CAAA;AAC7B,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,GAAI,KAAA;AACnC;;;AC9GO,IAAM,iBAAN,MAA2C;AAAA,EAChD,IAAA,GAAO,QAAA;AAAA,EACC,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EAER,YAAY,MAAA,EAAsB;AAChC,IAAA,cAAA,CAAe,MAAA,CAAO,QAAQ,QAAQ,CAAA;AAEtC,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,2BAAA;AACjC,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,aAAA;AAC3C,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,YAAA;AAC3B,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,KAAA,IAAS,EAAE,UAAA,EAAY,CAAA,EAAG,YAAY,GAAA,EAAK;AAAA,EACvE;AAAA,EAEA,MAAM,SAAS,KAAA,EAAqC;AAClD,IAAA,OAAO,MAAM,YAAY;AACvB,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,QAC/D,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,QACzB,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,UAC3B,QAAA,EAAU;AAAA,YACR,GAAI,KAAA,CAAM,MAAA,GAAS,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,CAAM,MAAA,EAAQ,CAAA,GAAI,EAAC;AAAA,YAClE,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,MAAM,MAAA;AAAO,WACxC;AAAA,UACA,WAAA,EAAa,MAAM,WAAA,IAAe,GAAA;AAAA,UAClC,YAAY,KAAA,CAAM,SAAA;AAAA,UAClB,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,GAAG,KAAA,CAAM;AAAA,SACV;AAAA,OACF,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,QAAA,MAAM,IAAI,MAAM,CAAA,kBAAA,EAAqB,KAAA,CAAM,OAAO,OAAA,IAAW,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MACpF;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,CAAQ,OAAA;AAAA,QAC9B,QAAA,EAAU,QAAA;AAAA,QACV,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,UACL,YAAA,EAAc,KAAK,KAAA,CAAM,aAAA;AAAA,UACzB,gBAAA,EAAkB,KAAK,KAAA,CAAM,iBAAA;AAAA,UAC7B,WAAA,EAAa,KAAK,KAAA,CAAM;AAAA,SAC1B;AAAA,QACA,GAAA,EAAK;AAAA,OACP;AAAA,IACF,CAAA,EAAG,KAAK,WAAW,CAAA;AAAA,EACrB;AAAA,EAEA,MAAM,KAAK,KAAA,EAAuC;AAChD,IAAA,OAAO,MAAM,YAAY;AACvB,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,QAC/D,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,QACzB,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,UAC3B,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,WAAA,EAAa,MAAM,WAAA,IAAe,GAAA;AAAA,UAClC,YAAY,KAAA,CAAM,SAAA;AAAA,UAClB,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,GAAG,KAAA,CAAM;AAAA,SACV;AAAA,OACF,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,QAAA,MAAM,IAAI,MAAM,CAAA,kBAAA,EAAqB,KAAA,CAAM,OAAO,OAAA,IAAW,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MACpF;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,CAAQ,OAAA;AAAA,QAC9B,QAAA,EAAU,QAAA;AAAA,QACV,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,UACL,YAAA,EAAc,KAAK,KAAA,CAAM,aAAA;AAAA,UACzB,gBAAA,EAAkB,KAAK,KAAA,CAAM,iBAAA;AAAA,UAC7B,WAAA,EAAa,KAAK,KAAA,CAAM;AAAA,SAC1B;AAAA,QACA,GAAA,EAAK;AAAA,OACP;AAAA,IACF,CAAA,EAAG,KAAK,WAAW,CAAA;AAAA,EACrB;AAAA,EAEA,OAAO,OAAO,KAAA,EAA8C;AAC1D,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC/D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,MACzB,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,QAC3B,QAAA,EAAU;AAAA,UACR,GAAI,KAAA,CAAM,MAAA,GAAS,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,CAAM,MAAA,EAAQ,CAAA,GAAI,EAAC;AAAA,UAClE,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,MAAM,MAAA;AAAO,SACxC;AAAA,QACA,WAAA,EAAa,MAAM,WAAA,IAAe,GAAA;AAAA,QAClC,YAAY,KAAA,CAAM,SAAA;AAAA,QAClB,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAA,EAAQ,IAAA;AAAA,QACR,GAAG,KAAA,CAAM;AAAA,OACV;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,MAAM,IAAI,MAAM,CAAA,kBAAA,EAAqB,KAAA,CAAM,OAAO,OAAA,IAAW,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACpF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,EAAM,SAAA,EAAU;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAE1C,QAAA,IAAI,IAAA,EAAM;AAEV,QAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,UAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,cAAA,EAAgB;AAE5C,UAAA,MAAM,MAAA,GAAS,SAAS,OAAO,CAAA;AAC/B,UAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,UAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,GAAU,CAAC,GAAG,KAAA,EAAO,OAAA;AAC1C,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAM;AAAA,cACJ,IAAA,EAAM,KAAA;AAAA,cACN,IAAA,EAAM,KAAA;AAAA,cACN,QAAA,EAAU,QAAA;AAAA,cACV,OAAO,MAAA,CAAO;AAAA,aAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,UAAU,QAAA,EAAS;AAAA,IACnD,CAAA,SAAE;AACA,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,KAAA,EAA2C;AACrD,IAAA,OAAO,MAAM,YAAY;AACvB,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,WAAA,CAAA,EAAe;AAAA,QACzD,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,QACzB,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,KAAA,EAAO,MAAM,KAAA,IAAS,wBAAA;AAAA,UACtB,OAAO,KAAA,CAAM;AAAA,SACd;AAAA,OACF,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,QAAA,MAAM,IAAI,MAAM,CAAA,kBAAA,EAAqB,KAAA,CAAM,OAAO,OAAA,IAAW,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MACpF;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,SAAA;AAAA,QACxB,QAAA,EAAU,QAAA;AAAA,QACV,OAAO,IAAA,CAAK;AAAA,OACd;AAAA,IACF,CAAA,EAAG,KAAK,WAAW,CAAA;AAAA,EACrB;AAAA,EAEQ,UAAA,GAAqC;AAC3C,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB,kBAAA;AAAA,MAChB,eAAA,EAAiB,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,KACxC;AAEA,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,OAAA,CAAQ,qBAAqB,IAAI,IAAA,CAAK,YAAA;AAAA,IACxC;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;;;ACvMO,IAAM,iBAAN,MAA2C;AAAA,EAChD,IAAA,GAAO,QAAA;AAAA,EACC,OAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAuB,EAAC,EAAG;AACrC,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,wBAAA;AACjC,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,UAAA;AAC3C,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,KAAA,IAAS,EAAE,UAAA,EAAY,CAAA,EAAG,YAAY,GAAA,EAAK;AAAA,EACvE;AAAA,EAEA,MAAM,SAAS,KAAA,EAAqC;AAClD,IAAA,OAAO,MAAM,YAAY;AACvB,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,aAAA,CAAA,EAAiB;AAAA,QAC3D,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,UAC3B,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,OAAA,EAAS;AAAA,YACP,WAAA,EAAa,MAAM,WAAA,IAAe,GAAA;AAAA,YAClC,aAAa,KAAA,CAAM,SAAA;AAAA,YACnB,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,GAAG,KAAA,CAAM;AAAA,WACX;AAAA,UACA,MAAA,EAAQ;AAAA,SACT;AAAA,OACF,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MAC5D;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,OAAO;AAAA,QACL,MAAM,IAAA,CAAK,QAAA;AAAA,QACX,QAAA,EAAU,QAAA;AAAA,QACV,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,UACL,YAAA,EAAc,KAAK,iBAAA,IAAqB,CAAA;AAAA,UACxC,gBAAA,EAAkB,KAAK,UAAA,IAAc,CAAA;AAAA,UACrC,WAAA,EAAA,CAAc,IAAA,CAAK,iBAAA,IAAqB,CAAA,KAAM,KAAK,UAAA,IAAc,CAAA;AAAA,SACnE;AAAA,QACA,GAAA,EAAK;AAAA,OACP;AAAA,IACF,CAAA,EAAG,KAAK,WAAW,CAAA;AAAA,EACrB;AAAA,EAEA,MAAM,KAAK,KAAA,EAAuC;AAChD,IAAA,OAAO,MAAM,YAAY;AACvB,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,SAAA,CAAA,EAAa;AAAA,QACvD,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,UAC3B,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,OAAA,EAAS;AAAA,YACP,WAAA,EAAa,MAAM,WAAA,IAAe,GAAA;AAAA,YAClC,aAAa,KAAA,CAAM,SAAA;AAAA,YACnB,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,GAAG,KAAA,CAAM;AAAA,WACX;AAAA,UACA,MAAA,EAAQ;AAAA,SACT;AAAA,OACF,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MAC5D;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,KAAK,OAAA,CAAQ,OAAA;AAAA,QACnB,QAAA,EAAU,QAAA;AAAA,QACV,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,UACL,YAAA,EAAc,KAAK,iBAAA,IAAqB,CAAA;AAAA,UACxC,gBAAA,EAAkB,KAAK,UAAA,IAAc,CAAA;AAAA,UACrC,WAAA,EAAA,CAAc,IAAA,CAAK,iBAAA,IAAqB,CAAA,KAAM,KAAK,UAAA,IAAc,CAAA;AAAA,SACnE;AAAA,QACA,GAAA,EAAK;AAAA,OACP;AAAA,IACF,CAAA,EAAG,KAAK,WAAW,CAAA;AAAA,EACrB;AAAA,EAEA,OAAO,OAAO,KAAA,EAA8C;AAC1D,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,aAAA,CAAA,EAAiB;AAAA,MAC3D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,QAC3B,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,OAAA,EAAS;AAAA,UACP,WAAA,EAAa,MAAM,WAAA,IAAe,GAAA;AAAA,UAClC,aAAa,KAAA,CAAM,SAAA;AAAA,UACnB,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,GAAG,KAAA,CAAM;AAAA,SACX;AAAA,QACA,MAAA,EAAQ;AAAA,OACT;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC5D;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,EAAM,SAAA,EAAU;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAE1C,QAAA,IAAI,IAAA,EAAM;AAEV,QAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,UAAA,IAAI,CAAC,OAAA,EAAS;AAEd,UAAA,IAAI;AACF,YAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAE/B,YAAA,IAAI,KAAK,QAAA,EAAU;AACjB,cAAA,MAAM;AAAA,gBACJ,MAAM,IAAA,CAAK,QAAA;AAAA,gBACX,IAAA,EAAM,KAAK,IAAA,IAAQ,KAAA;AAAA,gBACnB,QAAA,EAAU,QAAA;AAAA,gBACV,OAAO,IAAA,CAAK;AAAA,eACd;AAAA,YACF;AAEA,YAAA,IAAI,KAAK,IAAA,EAAM;AACb,cAAA;AAAA,YACF;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,UAAU,QAAA,EAAS;AAAA,IACnD,CAAA,SAAE;AACA,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,KAAA,EAA2C;AACrD,IAAA,OAAO,MAAM,YAAY;AACvB,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,eAAA,CAAA,EAAmB;AAAA,QAC7D,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,UAC3B,QAAQ,KAAA,CAAM;AAAA,SACf;AAAA,OACF,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MAC5D;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,OAAO;AAAA,QACL,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,QAAA,EAAU,QAAA;AAAA,QACV,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,KAAA,CAAM,SAAS,IAAA,CAAK;AAAA,OAC3C;AAAA,IACF,CAAA,EAAG,KAAK,WAAW,CAAA;AAAA,EACrB;AACF;;;AC3LO,SAAS,eAAe,MAAA,EAAkC;AAC/D,EAAA,MAAM,QAAA,GAAW,eAAe,MAAM,CAAA;AAEtC,EAAA,OAAO;AAAA,IACL,MAAM,SAAS,KAAA,EAAqC;AAClD,MAAA,OAAO,QAAA,CAAS,SAAS,KAAK,CAAA;AAAA,IAChC,CAAA;AAAA,IAEA,MAAM,KAAK,KAAA,EAAuC;AAChD,MAAA,OAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,IAC5B,CAAA;AAAA,IAEA,OAAO,KAAA,EAA8C;AACnD,MAAA,OAAO,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,IAC9B,CAAA;AAAA,IAEA,MAAM,MAAM,KAAA,EAA2C;AACrD,MAAA,OAAO,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,IAC7B,CAAA;AAAA,IAEA,WAAA,GAA0B;AACxB,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAKA,SAAS,eAAe,MAAA,EAAoC;AAC1D,EAAA,QAAQ,OAAO,QAAA;AAAU,IACvB,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,cAAA,CAAe;AAAA,QACxB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,cAAc,MAAA,CAAO,YAAA;AAAA,QACrB,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IAEH,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,cAAA,CAAe;AAAA,QACxB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,cAAc,MAAA,CAAO,YAAA;AAAA,QACrB,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IAEH;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAAA;AAEnE;;;ACjBO,SAAS,KAAA,GAAkB;AAChC,EAAA,IAAI,OAAO,UAAA,KAAe,WAAA,IAAe,CAAE,WAAsD,YAAA,EAAc;AAC7G,IAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,EAChF;AAEA,EAAA,OAAQ,UAAA,CAAqD,YAAA;AAC/D;AAcO,SAAS,eAAmD,MAAA,EAOhE;AACD,EAAA,OAAO,OAAO,KAAA,KAAoC;AAChD,IAAA,MAAM,KAAK,KAAA,EAAM;AAEjB,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAElC,IAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,QAAA,CAAS;AAAA,MACjC,MAAA;AAAA,MACA,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,aAAa,MAAA,CAAO;AAAA,KACrB,CAAA;AAED,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB,CAAA;AACF;;;ACzDO,IAAM,aAAN,MAAiB;AAAA,EACL,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EAEA,KAAA,uBAAY,GAAA,EAAiC;AAAA,EAC7C,QAAA,uBAAe,GAAA,EAAyB;AAAA;AAAA,EAGxC,IAAA;AAAA,EACA,IAAA;AAAA,EAEjB,WAAA,CAAY,MAAA,GAA2B,EAAC,EAAG;AACzC,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,GAAA;AACjC,IAAA,IAAA,CAAK,UAAA,GAAa,OAAO,UAAA,IAAc,GAAA;AACvC,IAAA,IAAA,CAAK,UAAA,GAAa,OAAO,UAAA,IAAc,GAAA;AAGvC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,UAAU,CAAA;AAC1C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,UAAU,CAAA;AAC1C,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,EACxB;AAAA;AAAA,EAGA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,GAAA,CAAO,GAAA,EAAa,KAAA,EAAU,OAAA,EAA8B;AAE1D,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAE,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,KAAA,GAAuB;AAAA,MAC3B,GAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAM,IAAI,GAAA,CAAI,OAAA,EAAS,IAAA,IAAQ,EAAE,CAAA;AAAA,MACjC,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,GAAA,EAAK,OAAA,EAAS,GAAA,IAAO,IAAA,CAAK,UAAA;AAAA,MAC1B,GAAA,EAAK,OAAA,EAAS,GAAA,IAAO,IAAA,CAAK,UAAA;AAAA,MAC1B,IAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAGA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,KAA4B,CAAA;AAChD,IAAA,IAAA,CAAK,UAAU,KAA4B,CAAA;AAG3C,IAAA,KAAA,MAAW,GAAA,IAAO,MAAM,IAAA,EAAM;AAC5B,MAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AAC3B,QAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,kBAAK,IAAI,KAAK,CAAA;AAAA,MAClC;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,CAAG,IAAI,GAAG,CAAA;AAAA,IACjC;AAGA,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,IAAA,CAAK,OAAA,EAAS;AACrC,MAAA,IAAA,CAAK,QAAA,EAAS;AAAA,IAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAO,GAAA,EAAkD;AACvD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,SAAA;AAGxB,IAAA,IAAI,GAAA,GAAM,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,GAAA,EAAK;AAC/B,MAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AACtB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AAErB,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,GAAA;AAC1B,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAY,KAAA,EAAM;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAY,GAAA,EAAuB;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAO,GAAG,CAAA;AAC9B,IAAA,OAAO,MAAA,GAAS,OAAO,KAAA,GAAQ,IAAA;AAAA,EACjC;AAAA;AAAA,EAGA,IAAI,GAAA,EAAsB;AACxB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,KAAM,IAAA;AAAA,EAC3B;AAAA;AAAA,EAGA,OAAO,GAAA,EAAsB;AAC3B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,IAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,eAAeJ,KAAAA,EAAoB;AACjC,IAAA,IAAA,CAAK,OAAOA,KAAI,CAAA;AAAA,EAClB;AAAA;AAAA,EAGA,cAAc,GAAA,EAAmB;AAC/B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAChC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,MACxB;AAAA,IACF;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,EAC1B;AAAA;AAAA,EAGA,aAAA,GAAsB;AACpB,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,EACxB;AAAA;AAAA,EAGA,KAAA,GAAyD;AACvD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAK,KAAA,CAAM,IAAA;AAAA,MACjB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,IAAA,EAAM,KAAK,QAAA,CAAS;AAAA,KACtB;AAAA,EACF;AAAA;AAAA,EAIQ,eAAe,GAAA,EAAkC;AACvD,IAAA,OAAO;AAAA,MACL,GAAA;AAAA,MACA,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,sBAAU,GAAA,EAAI;AAAA,MACd,SAAA,EAAW,CAAA;AAAA,MACX,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,IAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAAA,EACF;AAAA,EAEQ,UAAU,KAAA,EAAkC;AAClD,IAAA,KAAA,CAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,KAAA,CAAM,IAAA,GAAO,KAAK,IAAA,CAAK,IAAA;AACvB,IAAA,IAAA,CAAK,IAAA,CAAK,KAAM,IAAA,GAAO,KAAA;AACvB,IAAA,IAAA,CAAK,KAAK,IAAA,GAAO,KAAA;AAAA,EACnB;AAAA,EAEQ,eAAe,KAAA,EAAkC;AACvD,IAAA,IAAI,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AACxC,IAAA,IAAI,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AACxC,IAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AACb,IAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AAAA,EACf;AAAA,EAEQ,WAAW,KAAA,EAAkC;AACnD,IAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AACzB,IAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EACtB;AAAA,EAEQ,QAAA,GAAiB;AACvB,IAAA,MAAM,GAAA,GAAM,KAAK,IAAA,CAAK,IAAA;AACtB,IAAA,IAAI,GAAA,IAAO,GAAA,KAAQ,IAAA,CAAK,IAAA,EAAM;AAC5B,MAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,IACtB;AAAA,EACF;AAAA,EAEQ,YAAY,KAAA,EAAkC;AAEpD,IAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AAEzB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAE3B,IAAA,KAAA,MAAW,GAAA,IAAO,MAAM,IAAA,EAAM;AAC5B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAClC,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,GAAG,CAAA;AACrB,QAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,UAAA,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAIO,IAAM,YAAA,GAAe,IAAI,UAAA;AAYzB,SAAS,cAAA,CAAeA,KAAAA,EAAc,KAAA,GAA0B,MAAA,EAAc;AACnF,EAAA,YAAA,CAAa,eAAeA,KAAI,CAAA;AAGhC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAgB,MAAA,CAAsF,oBAAA,EAAsB;AAChJ,IAAC,MAAA,CAAqF,oBAAA,CAAqB,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU;AAAA,MAClI,IAAA,EAAM,YAAA;AAAA,MACN,IAAA,EAAAA,KAAAA;AAAA,MACA,gBAAA,EAAkB;AAAA,KACnB,CAAC,CAAA;AAAA,EACJ;AACF;AAWO,SAAS,cAAc,GAAA,EAAmB;AAC/C,EAAA,YAAA,CAAa,cAAc,GAAG,CAAA;AAG9B,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAgB,MAAA,CAAsF,oBAAA,EAAsB;AAChJ,IAAC,MAAA,CAAqF,oBAAA,CAAqB,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU;AAAA,MAClI,IAAA,EAAM,YAAA;AAAA,MACN;AAAA,KACD,CAAC,CAAA;AAAA,EACJ;AACF;AAKO,SAAS,cAAA,CACd,EAAA,EACA,IAAA,EACA,OAAA,EACkB;AAClB,EAAA,OAAO,YAAY;AACjB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAE9B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAO,QAAQ,CAAA;AAC3C,IAAA,IAAI,MAAA,IAAU,CAAC,MAAA,CAAO,KAAA,EAAO;AAC3B,MAAA,OAAO,MAAA,CAAO,KAAA;AAAA,IAChB;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,EAAG;AACxB,IAAA,YAAA,CAAa,GAAA,CAAI,UAAU,MAAA,EAAQ;AAAA,MACjC,MAAM,OAAA,EAAS,IAAA;AAAA,MACf,GAAA,EAAK,OAAA,EAAS,UAAA,GAAa,OAAA,CAAQ,aAAa,GAAA,GAAO;AAAA,KACxD,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AClUO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EACjC,MAAA;AAAA,EACA,MAAA;AAAA,EAEP,WAAA,CAAY,QAAgB,OAAA,EAAiB;AAC3C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,KAAK,WAAA,CAAY,IAAA;AAC7B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAGd,IAAA,MAAM,IAAA,GAAOM,MAAAA,CAAO,UAAA,CAAW,QAAQ,CAAA;AACvC,IAAA,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,CAAA;AACjE,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,CAAE,SAAA,CAAU,GAAG,EAAE,CAAA;AAAA,EAClD;AAAA,EAEA,cAAc,KAAA,EAAgB;AAC5B,IAAA,OAAO;AAAA,MACL,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,KAAA,EAAO,KAAA,GAAQ,IAAA,CAAK,KAAA,GAAQ;AAAA,KAC9B;AAAA,EACF;AACF;AAEO,IAAM,aAAA,GAAN,cAA4B,cAAA,CAAe;AAAA,EAChD,WAAA,CAAY,UAAkB,WAAA,EAAa;AACzC,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EACpB;AACF;AAEO,IAAM,cAAA,GAAN,cAA6B,cAAA,CAAe;AAAA,EACjD,WAAA,CAAY,UAAkB,WAAA,EAAa;AACzC,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EACpB;AACF;AAEO,IAAM,iBAAA,GAAN,cAAgC,cAAA,CAAe;AAAA,EACpD,WAAA,CAAY,UAAkB,cAAA,EAAgB;AAC5C,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EACpB;AACF;;;AC5BO,SAAS,YAAY,OAAA,EAAqC;AAC/D,EAAA,OAAO,OAAO,KAAK,GAAA,KAAQ;AACzB,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,IAC/B,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,eAAe,cAAA,EAAgB;AACjC,QAAA,OAAO,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,CAAI,OAAA,EAAQ,EAAG,EAAE,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,CAAA;AAAA,MACrE;AACA,MAAA,OAAA,CAAQ,KAAA,CAAM,eAAe,GAAG,CAAA;AAChC,MAAA,OAAO,QAAA,CAAS,KAAK,EAAE,KAAA,EAAO,yBAAwB,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,IAC1E;AAAA,EACF,CAAA;AACF;ACfA,eAAsB,iBAAiB,SAAA,EAAwC;AAC7E,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,aAAA,EAAe,EAAE,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,CAAA;AAC1E,EAAA,OAAO,MAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,eAAA,CAAgB,IAAA,EAAM,SAAS,CAAC,CAAA;AAC3D;AAGO,SAAS,eAAA,CAAgB,UAAkB,SAAA,EAA6B;AAC7E,EAAA,MAAM,QAAA,GAAWN,MAAK,QAAA,CAASA,KAAAA,CAAK,KAAK,SAAA,EAAW,KAAK,GAAG,QAAQ,CAAA;AAEpE,EAAA,MAAM,kBAAA,GAAqB,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAIzD,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,EAAA,MAAM,UAAU,OAAA,GAAU,UAAA,CACvB,QAAQ,kBAAA,EAAoB,CAAC,GAAG,IAAA,KAAS;AAAE,IAAA,UAAA,GAAa,IAAA;AAAM,IAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAG,IAAA,OAAO,GAAA;AAAA,EAAK,CAAC,CAAA,CAC9F,OAAA,CAAQ,YAAA,EAAc,CAAC,GAAG,IAAA,KAAS;AAAE,IAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAG,IAAA,OAAO,IAAI,IAAI,CAAA,CAAA;AAAA,EAAI,CAAC,EAC5E,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA,CACrB,OAAA,CAAQ,OAAO,GAAG,CAAA;AAErB,EAAA,OAAO,EAAE,OAAA,EAAS,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAW;AACjD;AAEA,SAAS,YAAA,CAAa,UAAkB,KAAA,EAA4D;AAClG,EAAA,IAAI,MAAM,UAAA,EAAY;AACpB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,EAAE,CAAA;AAC3C,IAAA,IAAI,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AACvC,MAAA,MAAMO,UAAiC,EAAC;AACxC,MAAA,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG;AACnB,QAAAA,OAAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAAA,MACnE;AACA,MAAA,OAAO,EAAE,QAAAA,OAAAA,EAAO;AAAA,IAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAY,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACpD,EAAA,MAAM,eAAe,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAE5D,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,YAAA,CAAa,MAAA,EAAQ,OAAO,IAAA;AAErD,EAAA,MAAM,SAAiC,EAAC;AAExC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,IAAA,MAAM,IAAA,GAAO,aAAa,CAAC,CAAA;AAC3B,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,UAAU,CAAC,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,IAAA,KAAS,SAAA,CAAU,CAAC,CAAA,EAAG;AAChC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,MAAA,EAAO;AAClB;AAEA,eAAsB,gBAAA,CACpB,KACA,QAAA,EAC0B;AAC1B,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AAC3B,EAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AAErB,EAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,EAAU,KAAK,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,MAAM,OAAA,GAAUH,aAAAA,CAAc,KAAA,CAAM,QAAQ,CAAA,CAAE,IAAA;AAC9C,IAAA,MAAM,QAAA,GAAW,MAAM,OAAO,CAAA,EAAG,OAAO,CAAA,GAAA,EAAM,IAAA,CAAK,KAAK,CAAA,CAAA,CAAA;AACxD,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,WAAA,EAAY;AACtC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAM,CAAA,IAAK,QAAA,CAAS,OAAA;AAE7C,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,QAAA,CAAS,KAAK,EAAE,KAAA,EAAO,sBAAqB,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,IACvE;AAEA,IAAA,OAAO,QAAQ,GAAA,EAAK;AAAA,MAClB,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,cAAc,GAAA,CAAI;AAAA,KACnB,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;;;ACtFO,SAAS,aACd,EAAA,EACkD;AAClD,EAAA,OAAO,OAAO,GAAA,KAAQ;AACpB,IAAA,MAAM,IAAA,GAAO,MAAM,EAAA,CAAG,GAAG,CAAA;AACzB,IAAA,OAAO,EAAE,IAAA,EAAK;AAAA,EAChB,CAAA;AACF;;;ACHO,SAAS,aACd,OAAA,EACA;AACA,EAAA,OAAO,OAAO,UAAmB,GAAA,KAAuD;AACtF,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,SAAA,CAAU,QAAQ,CAAA;AAC/C,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,mBAAA;AAAA,QACP,WAAA,EAAa,MAAA,CAAO,KAAA,CAAM,OAAA,EAAQ,CAAE;AAAA,OACtC;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,OAAA,CAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,IAAA,EAAM,GAAA,EAAK,CAAA;AAC9D,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,IAAA,EAAK;AAAA,IAC/B,SAAS,GAAA,EAAK;AACZ,MAAA,OAAO,EAAE,SAAS,KAAA,EAAO,KAAA,EAAO,eAAe,KAAA,GAAQ,GAAA,CAAI,UAAU,eAAA,EAAgB;AAAA,IACvF;AAAA,EACF,CAAA;AACF;ACvBO,SAAS,eAAA,CAAgB,YAAwB,WAAA,EAAqB;AAC3E,EAAA,MAAM,GAAA,GAAM,IAAI,eAAA,CAAgB,EAAE,QAAQ,UAAA,EAAY,IAAA,EAAM,gBAAgB,CAAA;AAC5E,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAe;AAEnC,EAAA,GAAA,CAAI,EAAA,CAAG,YAAA,EAAc,CAAC,EAAA,KAAO;AAC3B,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,EAAA,CAAG,KAAK,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,WAAA,EAAa,CAAC,CAAA;AAC7C,IAAA,EAAA,CAAG,GAAG,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,EACzC,CAAC,CAAA;AAED,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,WAAA,EAAa;AAAA,IAC1C,OAAA,EAAS,iCAAA;AAAA,IACT,UAAA,EAAY,IAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GAChB,CAAA;AAED,EAAA,SAAS,UAAU,KAAA,EAAiB;AAClC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAChC,IAAA,OAAA,CAAQ,QAAQ,CAAA,EAAA,KAAM;AACpB,MAAA,IAAI,GAAG,UAAA,KAAe,EAAA,CAAG,IAAA,EAAM,EAAA,CAAG,KAAK,GAAG,CAAA;AAAA,IAC5C,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,IAAA,KAAS;AAC7B,IAAA,SAAA,CAAU,EAAE,MAAM,cAAA,EAAgB,IAAA,EAAM,WAAW,IAAA,CAAK,GAAA,IAAO,CAAA;AAAA,EACjE,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,EAAA,CAAG,KAAA,EAAO,CAAC,IAAA,KAAS;AAC1B,IAAA,SAAA,CAAU,EAAE,MAAM,YAAA,EAAc,IAAA,EAAM,WAAW,IAAA,CAAK,GAAA,IAAO,CAAA;AAAA,EAC/D,CAAC,CAAA;AAED,EAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,GAAA,EAAK,OAAA,EAAQ;AAC5C;AC/BO,SAAS,qBAAqB,KAAA,EAAmC;AACtE,EAAA,IAAI,KAAA,YAAiB,eAAe,OAAO,WAAA;AAC3C,EAAA,IAAI,KAAA,YAAiB,cAAA,IAAkB,KAAA,CAAM,MAAA,KAAW,KAAK,OAAO,WAAA;AACpE,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,oBAAA,CAAqB,aAAA,EAAuB,MAAA,EAAgB,IAAA,EAAkD;AAC5H,EAAA,IAAI,UAAA,GAAaJ,KAAAA,CAAK,OAAA,CAAQ,aAAa,CAAA;AAG3C,EAAA,OAAO,WAAW,MAAA,IAAU,MAAA,CAAO,UAAU,UAAA,CAAW,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1E,IAAA,MAAM,eAAeA,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,CAAA,EAAG,IAAI,CAAA,IAAA,CAAM,CAAA;AACxD,IAAA,IAAIC,EAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,MAAA,MAAM,QAAQ,UAAA,KAAe,MAAA,GAAS,MAAA,GAASD,KAAAA,CAAK,SAAS,UAAU,CAAA;AACvE,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,YAAA;AAAA,QACV,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACzC,IAAA,IAAI,cAAc,UAAA,EAAY;AAC9B,IAAA,UAAA,GAAa,SAAA;AAAA,EACf;AAEA,EAAA,OAAO,IAAA;AACT;;;ACrCO,SAAS,YAAY,SAAA,EAA2C;AACrE,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,eAAe,SAAA,EAAiD;AAC9E,EAAA,OAAO,SAAA;AACT","file":"index.js","sourcesContent":["/**\n * Velix v5 Utility Functions\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport crypto from 'crypto';\n\n/**\n * Generates a unique hash for cache busting\n */\nexport function generateHash(content: string): string {\n return crypto.createHash('md5').update(content).digest('hex').slice(0, 8);\n}\n\n/**\n * Escapes HTML special characters\n */\nexport function escapeHtml(str: string): string {\n const htmlEntities: Record<string, string> = {\n '&': '&amp;', '<': '&lt;', '>': '&gt;',\n '\"': '&quot;', \"'\": '&#39;'\n };\n return String(str).replace(/[&<>\"']/g, char => htmlEntities[char]);\n}\n\n/**\n * Recursively finds all files matching a pattern\n */\nexport function findFiles(dir: string, pattern: RegExp, files: string[] = []): string[] {\n if (!fs.existsSync(dir)) return files;\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) findFiles(fullPath, pattern, files);\n else if (pattern.test(entry.name)) files.push(fullPath);\n }\n return files;\n}\n\n/**\n * Ensures a directory exists\n */\nexport function ensureDir(dir: string): void {\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n}\n\n/**\n * Cleans a directory\n */\nexport function cleanDir(dir: string): void {\n if (fs.existsSync(dir)) fs.rmSync(dir, { recursive: true, force: true });\n fs.mkdirSync(dir, { recursive: true });\n}\n\n/**\n * Copies a directory recursively\n */\nexport function copyDir(src: string, dest: string): void {\n ensureDir(dest);\n const entries = fs.readdirSync(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) copyDir(srcPath, destPath);\n else fs.copyFileSync(srcPath, destPath);\n }\n}\n\n/**\n * Debounce function for file watching\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(fn: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), delay);\n };\n}\n\n/**\n * Formats bytes to human-readable string\n */\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\n/**\n * Formats milliseconds to human-readable string\n */\nexport function formatTime(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n}\n\n/**\n * Creates a deferred promise\n */\nexport function createDeferred<T>() {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve!, reject: reject! };\n}\n\n/**\n * Sleep utility\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Check if a file is a server component (has 'use server' directive)\n */\nexport function isServerComponent(filePath: string): boolean {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n const firstLine = content.split('\\n')[0].trim();\n return firstLine === \"'use server'\" || firstLine === '\"use server\"';\n } catch { return false; }\n}\n\n/**\n * Check if a file is a client component (has 'use client' directive)\n */\nexport function isClientComponent(filePath: string): boolean {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n const firstLine = content.split('\\n')[0].trim();\n return firstLine === \"'use client'\" || firstLine === '\"use client\"';\n } catch { return false; }\n}\n\n/**\n * Check if a component is an island (has 'use island' directive)\n */\nexport function isIsland(filePath: string): boolean {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n const firstLine = content.split('\\n')[0].trim();\n return firstLine === \"'use island'\" || firstLine === '\"use island\"';\n } catch { return false; }\n}\n","/**\n * Velix v5 Router\n * File-based routing using the app/ directory convention\n *\n * Supports:\n * - app/page.tsx → /\n * - app/dashboard/page.tsx → /dashboard\n * - app/blog/[slug]/page.tsx → /blog/:slug\n * - app/(group)/page.tsx → / (route groups)\n * - app/[...slug]/page.tsx → catch-all routes\n * - layout.tsx, loading.tsx, error.tsx, not-found.tsx\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { isServerComponent, isClientComponent, isIsland } from '../utils.js';\nimport type { Route, RouteTree as TypedRouteTree, RouteTreeNode } from '../types.js';\n\n// ============================================================================\n// Route Types\n// ============================================================================\n\nexport const RouteType = {\n PAGE: 'page',\n API: 'api',\n LAYOUT: 'layout',\n LOADING: 'loading',\n ERROR: 'error',\n NOT_FOUND: 'not-found'\n} as const;\n\n// ============================================================================\n// Build Route Tree\n// ============================================================================\n\n/**\n * Builds the complete route tree from the app/ directory\n */\nexport function buildRouteTree(appDir: string) {\n const projectRoot = path.dirname(appDir);\n\n const routes: {\n pages: Route[];\n api: Route[];\n layouts: Map<string, string>;\n tree: RouteTreeNode;\n appRoutes: Route[];\n rootLayout?: string;\n } = {\n pages: [],\n api: [],\n layouts: new Map(),\n tree: { children: {}, routes: [] },\n appRoutes: [],\n };\n\n // Scan app/ directory\n if (fs.existsSync(appDir)) {\n scanAppDirectory(appDir, appDir, routes);\n }\n\n // Scan server/api/ for API routes\n const serverApiDir = path.join(projectRoot, 'server', 'api');\n if (fs.existsSync(serverApiDir)) {\n scanApiDirectory(serverApiDir, serverApiDir, routes);\n }\n\n // Check for root layout\n const rootLayoutTsx = path.join(appDir, 'layout.tsx');\n const rootLayoutJsx = path.join(appDir, 'layout.jsx');\n if (fs.existsSync(rootLayoutTsx)) routes.rootLayout = rootLayoutTsx;\n else if (fs.existsSync(rootLayoutJsx)) routes.rootLayout = rootLayoutJsx;\n\n // Build route tree for nested routes\n routes.tree = buildTree(routes.appRoutes);\n\n return routes;\n}\n\n// ============================================================================\n// App Directory Scanner\n// ============================================================================\n\n/**\n * Scans app/ directory for file-based routing\n * Supports: page.tsx, layout.tsx, loading.tsx, error.tsx, not-found.tsx, [param].tsx\n */\nfunction scanAppDirectory(\n baseDir: string,\n currentDir: string,\n routes: { appRoutes: Route[] },\n parentSegments: string[] = [],\n parentLayout: string | null = null,\n parentMiddleware: string | null = null\n) {\n const entries = fs.readdirSync(currentDir, { withFileTypes: true });\n\n // Find special files in current directory\n const specialFiles: Record<string, string | null> = {\n page: null,\n layout: null,\n loading: null,\n error: null,\n notFound: null,\n template: null,\n middleware: null\n };\n\n for (const entry of entries) {\n if (entry.isFile()) {\n const name = entry.name.replace(/\\.(jsx|js|tsx|ts)$/, '');\n const fullPath = path.join(currentDir, entry.name);\n const ext = path.extname(entry.name);\n\n // Only process relevant extensions\n if (!['.tsx', '.jsx', '.ts', '.js'].includes(ext)) continue;\n\n if (name === 'page') specialFiles.page = fullPath;\n if (name === 'layout') specialFiles.layout = fullPath;\n if (name === 'loading') specialFiles.loading = fullPath;\n if (name === 'error') specialFiles.error = fullPath;\n if (name === 'not-found') specialFiles.notFound = fullPath;\n if (name === 'template') specialFiles.template = fullPath;\n if (name === 'middleware' || name === '_middleware') specialFiles.middleware = fullPath;\n\n // Handle [param].tsx files directly in app/ (alternative to [param]/page.tsx)\n if (name.startsWith('[') && name.endsWith(']') && ['.tsx', '.jsx'].includes(ext)) {\n const paramName = name.slice(1, -1);\n let segmentName: string;\n\n if (paramName.startsWith('...')) {\n segmentName = '*' + paramName.slice(3);\n } else {\n segmentName = ':' + paramName;\n }\n\n const routePath = '/' + [...parentSegments, segmentName].join('/');\n\n routes.appRoutes.push({\n type: RouteType.PAGE,\n path: routePath.replace(/\\/+/g, '/'),\n filePath: fullPath,\n pattern: createRoutePattern(routePath),\n segments: [...parentSegments, segmentName],\n layout: specialFiles.layout || parentLayout,\n loading: specialFiles.loading,\n error: specialFiles.error,\n notFound: specialFiles.notFound,\n template: specialFiles.template,\n middleware: specialFiles.middleware || parentMiddleware,\n isServerComponent: isServerComponent(fullPath),\n isClientComponent: isClientComponent(fullPath),\n isIsland: isIsland(fullPath),\n });\n }\n }\n }\n\n // If there's a page.tsx, create a route for this directory\n if (specialFiles.page) {\n const routePath = '/' + parentSegments.join('/') || '/';\n\n routes.appRoutes.push({\n type: RouteType.PAGE,\n path: routePath.replace(/\\/+/g, '/') || '/',\n filePath: specialFiles.page,\n pattern: createRoutePattern(routePath || '/'),\n segments: parentSegments,\n layout: specialFiles.layout || parentLayout,\n loading: specialFiles.loading,\n error: specialFiles.error,\n notFound: specialFiles.notFound,\n template: specialFiles.template,\n middleware: specialFiles.middleware || parentMiddleware,\n isServerComponent: isServerComponent(specialFiles.page),\n isClientComponent: isClientComponent(specialFiles.page),\n isIsland: isIsland(specialFiles.page),\n });\n }\n\n // Recursively scan subdirectories\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const fullPath = path.join(currentDir, entry.name);\n\n // Skip special directories\n if (entry.name.startsWith('_') || entry.name.startsWith('.')) continue;\n\n // Handle route groups (parentheses) — don't add to URL\n const isGroup = entry.name.startsWith('(') && entry.name.endsWith(')');\n\n // Handle dynamic segments [param]\n let segmentName = entry.name;\n if (entry.name.startsWith('[') && entry.name.endsWith(']')) {\n segmentName = ':' + entry.name.slice(1, -1);\n if (entry.name.startsWith('[...')) {\n segmentName = '*' + entry.name.slice(4, -1);\n }\n if (entry.name.startsWith('[[...')) {\n segmentName = '*' + entry.name.slice(5, -2);\n }\n }\n\n const newSegments = isGroup ? parentSegments : [...parentSegments, segmentName];\n const newLayout = specialFiles.layout || parentLayout;\n const newMiddleware = specialFiles.middleware || parentMiddleware;\n\n scanAppDirectory(baseDir, fullPath, routes, newSegments, newLayout, newMiddleware);\n }\n }\n}\n\n// ============================================================================\n// API Directory Scanner (server/api/)\n// ============================================================================\n\nfunction scanApiDirectory(baseDir: string, currentDir: string, routes: { api: Route[] }, parentSegments: string[] = []) {\n const entries = fs.readdirSync(currentDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(currentDir, entry.name);\n\n if (entry.isDirectory()) {\n scanApiDirectory(baseDir, fullPath, routes, [...parentSegments, entry.name]);\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name);\n if (!['.ts', '.js'].includes(ext)) continue;\n\n const baseName = path.basename(entry.name, ext);\n // route.ts maps to the parent path, other names become segments\n const apiSegments = baseName === 'route' || baseName === 'index'\n ? parentSegments\n : [...parentSegments, baseName];\n\n const apiPath = '/api/' + apiSegments.join('/');\n\n routes.api.push({\n type: RouteType.API,\n path: apiPath.replace(/\\/+/g, '/') || '/api',\n filePath: fullPath,\n pattern: createRoutePattern(apiPath),\n segments: ['api', ...apiSegments].filter(Boolean),\n });\n }\n }\n}\n\n// ============================================================================\n// Route Matching\n// ============================================================================\n\n/**\n * Creates regex pattern for route matching\n */\nfunction createRoutePattern(routePath: string): RegExp {\n let pattern = routePath\n .replace(/\\*[^/]*/g, '(.*)') // Catch-all\n .replace(/:[^/]+/g, '([^/]+)') // Dynamic segments\n .replace(/\\//g, '\\\\/');\n\n return new RegExp(`^${pattern}$`);\n}\n\n/**\n * Matches URL path against routes\n */\nexport function matchRoute(urlPath: string, routes: Route[]) {\n const normalizedPath = urlPath === '' ? '/' : urlPath.split('?')[0];\n\n for (const route of routes) {\n const match = normalizedPath.match(route.pattern);\n if (match) {\n const params = extractParams(route.path, match);\n return { ...route, params };\n }\n }\n\n return null;\n}\n\n/**\n * Extracts parameters from route match\n */\nfunction extractParams(routePath: string, match: RegExpMatchArray): Record<string, string> {\n const params: Record<string, string> = {};\n const paramNames: string[] = [];\n\n const paramRegex = /:([^/]+)|\\*([^/]*)/g;\n let paramMatch;\n while ((paramMatch = paramRegex.exec(routePath)) !== null) {\n paramNames.push(paramMatch[1] || paramMatch[2] || 'splat');\n }\n\n paramNames.forEach((name, index) => {\n params[name] = match[index + 1];\n });\n\n return params;\n}\n\n// ============================================================================\n// Layout Resolution\n// ============================================================================\n\n/**\n * Finds all layouts that apply to a route\n */\nexport function findRouteLayouts(route: Route, layoutsMap: Map<string, string>): Array<{ name: string; filePath: string | undefined }> {\n const layouts: Array<{ name: string; filePath: string | undefined }> = [];\n\n // Check for segment-based layouts\n for (const segment of route.segments) {\n if (layoutsMap.has(segment)) {\n layouts.push({ name: segment, filePath: layoutsMap.get(segment) });\n }\n }\n\n // Check for route-specific layout\n if (route.layout) {\n layouts.push({ name: 'route', filePath: route.layout });\n }\n\n // Check for root layout\n if (layoutsMap.has('root')) {\n layouts.unshift({ name: 'root', filePath: layoutsMap.get('root') });\n }\n\n return layouts;\n}\n\n// ============================================================================\n// Tree Building\n// ============================================================================\n\nfunction buildTree(routes: Route[]): RouteTreeNode {\n const tree: RouteTreeNode = { children: {}, routes: [] };\n\n for (const route of routes) {\n let current = tree;\n for (const segment of route.segments) {\n if (!current.children[segment]) {\n current.children[segment] = { children: {}, routes: [] };\n }\n current = current.children[segment];\n }\n current.routes.push(route);\n }\n\n return tree;\n}\n\n// ============================================================================\n// Default Export\n// ============================================================================\n\nexport default {\n buildRouteTree,\n matchRoute,\n findRouteLayouts,\n RouteType\n};\n","/**\n * Velix v5 Configuration System\n * Handles loading, validation, and merging of velix.config.ts\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\nimport { z } from 'zod';\nimport pc from 'picocolors';\n\n// ============================================================================\n// Configuration Schema (Zod validation)\n// ============================================================================\n\nconst AppConfigSchema = z.object({\n name: z.string().default('Velix App'),\n url: z.string().url().optional(),\n}).default({});\n\nconst ServerConfigSchema = z.object({\n port: z.number().min(1).max(65535).default(3000),\n host: z.string().default('localhost'),\n}).default({});\n\nconst RoutingConfigSchema = z.object({\n trailingSlash: z.boolean().default(false),\n}).default({});\n\nconst SEOConfigSchema = z.object({\n sitemap: z.boolean().default(true),\n robots: z.boolean().default(true),\n openGraph: z.boolean().default(true),\n}).default({});\n\nconst BuildConfigSchema = z.object({\n target: z.string().default('es2022'),\n minify: z.boolean().default(true),\n sourcemap: z.boolean().default(true),\n splitting: z.boolean().default(true),\n outDir: z.string().default('.velix'),\n}).default({});\n\nconst ExperimentalConfigSchema = z.object({\n islands: z.boolean().default(true),\n streaming: z.boolean().default(true),\n}).default({});\n\nconst PluginSchema = z.union([\n z.string(),\n z.object({\n name: z.string()\n }).passthrough(),\n]);\n\nexport const VelixConfigSchema = z.object({\n // App identity\n app: AppConfigSchema,\n\n // DevTools toggle\n devtools: z.boolean().default(true),\n\n // Server options\n server: ServerConfigSchema,\n\n // Routing options\n routing: RoutingConfigSchema,\n\n // SEO configuration\n seo: SEOConfigSchema,\n\n // Build options\n build: BuildConfigSchema,\n\n // Experimental features\n experimental: ExperimentalConfigSchema,\n\n // Plugins\n plugins: z.array(PluginSchema).default([]),\n\n // Directories (resolved automatically)\n appDir: z.string().default('app'),\n publicDir: z.string().default('public'),\n\n // Stylesheets\n styles: z.array(z.string()).default([]),\n\n // Favicon\n favicon: z.string().nullable().default(null),\n});\n\nexport type VelixConfig = z.infer<typeof VelixConfigSchema>;\n\n// ============================================================================\n// Default configuration\n// ============================================================================\n\nexport const defaultConfig: VelixConfig = VelixConfigSchema.parse({});\n\n// ============================================================================\n// defineConfig helper\n// ============================================================================\n\n/**\n * Helper function to define configuration with full type support.\n * Use this in your velix.config.ts file.\n *\n * @example\n * ```ts\n * import { defineConfig } from \"velix\";\n *\n * export default defineConfig({\n * app: { name: \"My App\" },\n * server: { port: 3000 },\n * seo: { sitemap: true }\n * });\n * ```\n */\nexport function defineConfig(config: Partial<VelixConfig>): Partial<VelixConfig> {\n return config;\n}\n\n// ============================================================================\n// Config Loader\n// ============================================================================\n\n/**\n * Loads and validates configuration from velix.config.ts\n */\nexport async function loadConfig(projectRoot: string): Promise<VelixConfig> {\n const configPathTs = path.join(projectRoot, 'velix.config.ts');\n const configPathJs = path.join(projectRoot, 'velix.config.js');\n // Support legacy config for migration\n const configPathLegacyTs = path.join(projectRoot, 'flexireact.config.ts');\n const configPathLegacyJs = path.join(projectRoot, 'flexireact.config.js');\n\n let configPath: string | null = null;\n if (fs.existsSync(configPathTs)) configPath = configPathTs;\n else if (fs.existsSync(configPathJs)) configPath = configPathJs;\n else if (fs.existsSync(configPathLegacyTs)) configPath = configPathLegacyTs;\n else if (fs.existsSync(configPathLegacyJs)) configPath = configPathLegacyJs;\n\n let userConfig: Partial<VelixConfig> = {};\n\n if (configPath) {\n try {\n const configUrl = pathToFileURL(configPath).href;\n const module = await import(`${configUrl}?t=${Date.now()}`);\n userConfig = module.default || module;\n } catch (error: any) {\n console.warn(pc.yellow(`⚠ Failed to load config: ${error.message}`));\n }\n }\n\n // Merge and validate with Zod\n const merged = deepMerge(defaultConfig, userConfig as Record<string, any>);\n\n try {\n return VelixConfigSchema.parse(merged);\n } catch (err: unknown) {\n if (err instanceof z.ZodError) {\n console.error(pc.red('✖ Configuration validation failed:'));\n for (const issue of err.issues) {\n console.error(pc.dim(` - ${issue.path.join('.')}: ${issue.message}`));\n }\n process.exit(1);\n }\n throw err;\n }\n}\n\n// ============================================================================\n// Path Resolution\n// ============================================================================\n\n/**\n * Resolves all paths in config relative to project root\n */\nexport function resolvePaths(config: VelixConfig, projectRoot: string): VelixConfig & { resolvedAppDir: string; resolvedPublicDir: string; resolvedOutDir: string } {\n return {\n ...config,\n resolvedAppDir: path.resolve(projectRoot, config.appDir),\n resolvedPublicDir: path.resolve(projectRoot, config.publicDir),\n resolvedOutDir: path.resolve(projectRoot, config.build.outDir),\n };\n}\n\n// ============================================================================\n// Utility: Deep merge\n// ============================================================================\n\nfunction deepMerge(target: Record<string, any>, source: Record<string, any>): Record<string, any> {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n result[key] = deepMerge(target[key] || {}, source[key]);\n } else {\n result[key] = source[key];\n }\n }\n\n return result;\n}\n","/**\r\n * Velix version — single source of truth.\r\n * Update this file only when releasing a new version.\r\n */\r\nexport const VERSION = '5.2.8';\r\n","/**\n * Velix v5 Logger\n * Minimalist, professional output inspired by modern CLIs\n */\n\nimport { VERSION } from './version.js';\n\nconst colors = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n};\n\nconst c = colors;\n\nfunction getTime() {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n const seconds = String(now.getSeconds()).padStart(2, '0');\n return `${c.dim}${hours}:${minutes}:${seconds}${c.reset}`;\n}\n\nfunction getStatusColor(status: number) {\n if (status >= 500) return c.red;\n if (status >= 400) return c.yellow;\n if (status >= 300) return c.cyan;\n if (status >= 200) return c.green;\n return c.white;\n}\n\nfunction fmtTime(ms: number) {\n if (ms < 1) return `${c.gray}<1ms${c.reset}`;\n if (ms < 100) return `${c.green}${ms}ms${c.reset}`;\n if (ms < 500) return `${c.yellow}${ms}ms${c.reset}`;\n return `${c.red}${ms}ms${c.reset}`;\n}\n\nconst LOGO = `\n ${c.cyan}▲${c.reset} ${c.bold}Velix${c.reset} ${c.dim}v${VERSION}${c.reset}\n`;\n\nexport const logger = {\n logo() {\n console.log(LOGO);\n console.log(`${c.dim} ──────────────────────────────────────────────${c.reset}`);\n console.log('');\n },\n\n serverStart(config: { port: number | string; host: string; mode: string; pagesDir?: string }, startTime = Date.now()) {\n const { port, host, mode, pagesDir } = config;\n const elapsed = Date.now() - startTime;\n\n console.log(LOGO);\n console.log(` ${c.green}✔${c.reset} ${c.bold}Ready${c.reset} in ${elapsed}ms`);\n console.log('');\n console.log(` ${c.bold}Local:${c.reset} ${c.cyan}http://${host}:${port}${c.reset}`);\n console.log(` ${c.bold}Mode:${c.reset} ${mode === 'development' ? c.yellow : c.green}${mode}${c.reset}`);\n if (pagesDir) console.log(` ${c.bold}App:${c.reset} ${c.dim}${pagesDir}${c.reset}`);\n console.log('');\n },\n\n request(method: string, path: string, status: number, time: number, extra: { type?: string } = {}) {\n const statusColor = getStatusColor(status);\n const timeStr = fmtTime(time);\n\n let badge = `${c.dim}○${c.reset}`;\n if (extra.type === 'dynamic' || extra.type === 'ssr') badge = `${c.white}ƒ${c.reset}`;\n else if (extra.type === 'api') badge = `${c.cyan}λ${c.reset}`;\n\n const statusStr = `${statusColor}${status}${c.reset}`;\n console.log(` ${badge} ${c.white}${method}${c.reset} ${path} ${statusStr} ${c.dim}${timeStr}${c.reset}`);\n },\n\n info(msg: string) { console.log(` ${c.cyan}ℹ${c.reset} ${msg}`); },\n success(msg: string) { console.log(` ${c.green}✔${c.reset} ${msg}`); },\n warn(msg: string) { console.log(` ${c.yellow}⚠${c.reset} ${c.yellow}${msg}${c.reset}`); },\n\n error(msg: string, err: Error | null = null) {\n console.log(` ${c.red}✖${c.reset} ${c.red}${msg}${c.reset}`);\n if (err?.stack) {\n console.log('');\n console.log(`${c.dim}${err.stack.split('\\n').slice(1, 4).join('\\n')}${c.reset}`);\n console.log('');\n }\n },\n\n compile(file: string, time: number) {\n console.log(` ${c.white}●${c.reset} Compiling ${c.dim}${file}${c.reset} ${c.dim}(${time}ms)${c.reset}`);\n },\n\n hmr(file: string) {\n console.log(` ${c.green}↻${c.reset} Fast Refresh ${c.dim}${file}${c.reset}`);\n },\n\n plugin(name: string) {\n console.log(` ${c.cyan}◆${c.reset} Plugin ${c.dim}${name}${c.reset}`);\n },\n\n route(path: string, type: string) {\n const typeLabel = type === 'api' ? 'λ' : type === 'dynamic' ? 'ƒ' : '○';\n const color = type === 'api' ? c.cyan : type === 'dynamic' ? c.white : c.dim;\n console.log(` ${color}${typeLabel}${c.reset} ${path}`);\n },\n\n divider() { console.log(`${c.dim} ──────────────────────────────────────────────${c.reset}`); },\n blank() { console.log(''); },\n\n portInUse(port: number | string) {\n this.error(`Port ${port} is already in use.`);\n this.blank();\n console.log(` ${c.dim}Try:${c.reset}`);\n console.log(` 1. Kill the process on port ${port}`);\n console.log(` 2. Use a different port via PORT env var`);\n this.blank();\n },\n\n build(stats: { time: number }) {\n this.blank();\n console.log(` ${c.green}✔${c.reset} Build completed`);\n this.blank();\n console.log(` ${c.dim}Total time:${c.reset} ${c.white}${stats.time}ms${c.reset}`);\n this.blank();\n },\n};\n\nexport default logger;\n","/**\n * Velix v5 Metadata & SEO System\n *\n * First-class SEO with automatic:\n * - Meta tags, Open Graph, Twitter Cards\n * - Canonical URLs, robots, sitemaps\n * - JSON-LD structured data\n * - Viewport, theme color, icons\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\n// ============================================================================\n// Types (comprehensive metadata interface)\n// ============================================================================\n\nexport interface Metadata {\n title?: string | { default: string; template?: string; absolute?: string };\n description?: string;\n keywords?: string | string[];\n authors?: Author | Author[];\n creator?: string;\n publisher?: string;\n robots?: Robots | string;\n icons?: Icons;\n manifest?: string;\n openGraph?: OpenGraph;\n twitter?: Twitter;\n verification?: Verification;\n alternates?: Alternates;\n viewport?: Viewport | string;\n themeColor?: ThemeColor | ThemeColor[];\n colorScheme?: 'normal' | 'light' | 'dark' | 'light dark' | 'dark light';\n formatDetection?: FormatDetection;\n metadataBase?: URL | string;\n generator?: string;\n applicationName?: string;\n referrer?: string;\n other?: Record<string, string | string[]>;\n}\n\nexport interface Author { name?: string; url?: string; }\nexport interface Robots { index?: boolean; follow?: boolean; noarchive?: boolean; nosnippet?: boolean; noimageindex?: boolean; nocache?: boolean; googleBot?: Robots | string; }\nexport interface Icons { icon?: IconDescriptor | IconDescriptor[]; shortcut?: IconDescriptor | IconDescriptor[]; apple?: IconDescriptor | IconDescriptor[]; other?: IconDescriptor[]; }\nexport interface IconDescriptor { url: string; type?: string; sizes?: string; color?: string; rel?: string; media?: string; }\nexport interface OpenGraph {\n type?: string; url?: string; title?: string; description?: string; siteName?: string;\n locale?: string; images?: OGImage | OGImage[]; videos?: OGVideo | OGVideo[];\n determiner?: string; publishedTime?: string; modifiedTime?: string;\n expirationTime?: string; authors?: string | string[]; section?: string; tags?: string[];\n}\nexport interface OGImage { url: string; secureUrl?: string; type?: string; width?: number; height?: number; alt?: string; }\nexport interface OGVideo { url: string; secureUrl?: string; type?: string; width?: number; height?: number; }\nexport interface Twitter {\n card?: 'summary' | 'summary_large_image' | 'app' | 'player';\n site?: string; siteId?: string; creator?: string; creatorId?: string;\n title?: string; description?: string; images?: string | TwitterImage | (string | TwitterImage)[];\n}\nexport interface TwitterImage { url: string; alt?: string; }\nexport interface Verification { google?: string | string[]; yahoo?: string | string[]; yandex?: string | string[]; other?: Record<string, string | string[]>; }\nexport interface Alternates { canonical?: string; languages?: Record<string, string>; media?: Record<string, string>; }\nexport interface Viewport { width?: number | 'device-width'; height?: number | 'device-height'; initialScale?: number; minimumScale?: number; maximumScale?: number; userScalable?: boolean; viewportFit?: 'auto' | 'cover' | 'contain'; }\nexport interface ThemeColor { color: string; media?: string; }\nexport interface FormatDetection { telephone?: boolean; date?: boolean; address?: boolean; email?: boolean; }\n\n// ============================================================================\n// Metadata Tag Generation\n// ============================================================================\n\nexport function generateMetadataTags(metadata: Metadata, baseUrl?: string): string {\n const tags: string[] = [];\n const base = baseUrl || metadata.metadataBase?.toString() || '';\n\n // Title\n if (metadata.title) {\n const title = typeof metadata.title === 'string'\n ? metadata.title\n : metadata.title.absolute || (metadata.title.template\n ? metadata.title.template.replace('%s', metadata.title.default)\n : metadata.title.default);\n tags.push(`<title>${escapeHtml(title)}</title>`);\n }\n\n if (metadata.description) tags.push(`<meta name=\"description\" content=\"${escapeHtml(metadata.description)}\">`);\n\n if (metadata.keywords) {\n const kw = Array.isArray(metadata.keywords) ? metadata.keywords.join(', ') : metadata.keywords;\n tags.push(`<meta name=\"keywords\" content=\"${escapeHtml(kw)}\">`);\n }\n\n if (metadata.authors) {\n const authors = Array.isArray(metadata.authors) ? metadata.authors : [metadata.authors];\n authors.forEach(a => {\n if (a.name) tags.push(`<meta name=\"author\" content=\"${escapeHtml(a.name)}\">`);\n if (a.url) tags.push(`<link rel=\"author\" href=\"${a.url}\">`);\n });\n }\n\n if (metadata.generator) tags.push(`<meta name=\"generator\" content=\"${escapeHtml(metadata.generator)}\">`);\n if (metadata.applicationName) tags.push(`<meta name=\"application-name\" content=\"${escapeHtml(metadata.applicationName)}\">`);\n if (metadata.referrer) tags.push(`<meta name=\"referrer\" content=\"${metadata.referrer}\">`);\n\n // Robots\n if (metadata.robots) {\n if (typeof metadata.robots === 'string') {\n tags.push(`<meta name=\"robots\" content=\"${metadata.robots}\">`);\n } else {\n tags.push(`<meta name=\"robots\" content=\"${generateRobotsContent(metadata.robots)}\">`);\n if (metadata.robots.googleBot) {\n const gbc = typeof metadata.robots.googleBot === 'string' ? metadata.robots.googleBot : generateRobotsContent(metadata.robots.googleBot);\n tags.push(`<meta name=\"googlebot\" content=\"${gbc}\">`);\n }\n }\n }\n\n // Viewport\n if (metadata.viewport) {\n const vc = typeof metadata.viewport === 'string' ? metadata.viewport : generateViewportContent(metadata.viewport);\n tags.push(`<meta name=\"viewport\" content=\"${vc}\">`);\n }\n\n // Theme Color\n if (metadata.themeColor) {\n const tcs = Array.isArray(metadata.themeColor) ? metadata.themeColor : [metadata.themeColor];\n tcs.forEach(tc => {\n const media = typeof tc !== 'string' && tc.media ? ` media=\"${tc.media}\"` : '';\n const color = typeof tc === 'string' ? tc : tc.color;\n tags.push(`<meta name=\"theme-color\" content=\"${color}\"${media}>`);\n });\n }\n\n if (metadata.colorScheme) tags.push(`<meta name=\"color-scheme\" content=\"${metadata.colorScheme}\">`);\n\n // Icons\n if (metadata.icons) {\n const addIcon = (icon: IconDescriptor, defaultRel: string) => {\n const rel = icon.rel || defaultRel;\n const attrs = [\n icon.type ? ` type=\"${icon.type}\"` : '',\n icon.sizes ? ` sizes=\"${icon.sizes}\"` : '',\n icon.color ? ` color=\"${icon.color}\"` : '',\n ].join('');\n tags.push(`<link rel=\"${rel}\" href=\"${resolveUrl(icon.url, base)}\"${attrs}>`);\n };\n if (metadata.icons.icon) { (Array.isArray(metadata.icons.icon) ? metadata.icons.icon : [metadata.icons.icon]).forEach(i => addIcon(i, 'icon')); }\n if (metadata.icons.apple) { (Array.isArray(metadata.icons.apple) ? metadata.icons.apple : [metadata.icons.apple]).forEach(i => addIcon(i, 'apple-touch-icon')); }\n }\n\n if (metadata.manifest) tags.push(`<link rel=\"manifest\" href=\"${resolveUrl(metadata.manifest, base)}\">`);\n\n // Open Graph\n if (metadata.openGraph) {\n const og = metadata.openGraph;\n if (og.type) tags.push(`<meta property=\"og:type\" content=\"${og.type}\">`);\n if (og.title) tags.push(`<meta property=\"og:title\" content=\"${escapeHtml(og.title)}\">`);\n if (og.description) tags.push(`<meta property=\"og:description\" content=\"${escapeHtml(og.description)}\">`);\n if (og.url) tags.push(`<meta property=\"og:url\" content=\"${resolveUrl(og.url, base)}\">`);\n if (og.siteName) tags.push(`<meta property=\"og:site_name\" content=\"${escapeHtml(og.siteName)}\">`);\n if (og.locale) tags.push(`<meta property=\"og:locale\" content=\"${og.locale}\">`);\n if (og.images) {\n (Array.isArray(og.images) ? og.images : [og.images]).forEach(img => {\n tags.push(`<meta property=\"og:image\" content=\"${resolveUrl(img.url, base)}\">`);\n if (img.width) tags.push(`<meta property=\"og:image:width\" content=\"${img.width}\">`);\n if (img.height) tags.push(`<meta property=\"og:image:height\" content=\"${img.height}\">`);\n if (img.alt) tags.push(`<meta property=\"og:image:alt\" content=\"${escapeHtml(img.alt)}\">`);\n });\n }\n if (og.type === 'article') {\n if (og.publishedTime) tags.push(`<meta property=\"article:published_time\" content=\"${og.publishedTime}\">`);\n if (og.modifiedTime) tags.push(`<meta property=\"article:modified_time\" content=\"${og.modifiedTime}\">`);\n if (og.tags) og.tags.forEach(t => tags.push(`<meta property=\"article:tag\" content=\"${escapeHtml(t)}\">`));\n }\n }\n\n // Twitter\n if (metadata.twitter) {\n const tw = metadata.twitter;\n if (tw.card) tags.push(`<meta name=\"twitter:card\" content=\"${tw.card}\">`);\n if (tw.site) tags.push(`<meta name=\"twitter:site\" content=\"${tw.site}\">`);\n if (tw.creator) tags.push(`<meta name=\"twitter:creator\" content=\"${tw.creator}\">`);\n if (tw.title) tags.push(`<meta name=\"twitter:title\" content=\"${escapeHtml(tw.title)}\">`);\n if (tw.description) tags.push(`<meta name=\"twitter:description\" content=\"${escapeHtml(tw.description)}\">`);\n if (tw.images) {\n (Array.isArray(tw.images) ? tw.images : [tw.images]).forEach(img => {\n const url = typeof img === 'string' ? img : img.url;\n tags.push(`<meta name=\"twitter:image\" content=\"${resolveUrl(url, base)}\">`);\n });\n }\n }\n\n // Verification\n if (metadata.verification) {\n if (metadata.verification.google) {\n (Array.isArray(metadata.verification.google) ? metadata.verification.google : [metadata.verification.google])\n .forEach(v => tags.push(`<meta name=\"google-site-verification\" content=\"${v}\">`));\n }\n }\n\n // Alternates\n if (metadata.alternates) {\n if (metadata.alternates.canonical) tags.push(`<link rel=\"canonical\" href=\"${resolveUrl(metadata.alternates.canonical, base)}\">`);\n if (metadata.alternates.languages) {\n Object.entries(metadata.alternates.languages).forEach(([lang, url]) => {\n tags.push(`<link rel=\"alternate\" hreflang=\"${lang}\" href=\"${resolveUrl(url, base)}\">`);\n });\n }\n }\n\n return tags.join('\\n ');\n}\n\n// ============================================================================\n// Merge & JSON-LD\n// ============================================================================\n\nexport function mergeMetadata(parent: Metadata, child: Metadata): Metadata {\n return {\n ...parent, ...child,\n openGraph: child.openGraph ? { ...parent.openGraph, ...child.openGraph } : parent.openGraph,\n twitter: child.twitter ? { ...parent.twitter, ...child.twitter } : parent.twitter,\n icons: child.icons ? { ...parent.icons, ...child.icons } : parent.icons,\n alternates: child.alternates ? { ...parent.alternates, ...child.alternates } : parent.alternates,\n };\n}\n\nexport function generateJsonLd(data: Record<string, unknown>): string {\n return `<script type=\"application/ld+json\">${JSON.stringify(data)}</script>`;\n}\n\nexport const jsonLd = {\n website: (c: { name: string; url: string; description?: string }) => ({\n '@context': 'https://schema.org', '@type': 'WebSite', name: c.name, url: c.url, description: c.description\n }),\n article: (c: { headline: string; description?: string; image?: string | string[]; datePublished: string; dateModified?: string; author: { name: string; url?: string } | { name: string; url?: string }[] }) => ({\n '@context': 'https://schema.org', '@type': 'Article', headline: c.headline, description: c.description,\n image: c.image, datePublished: c.datePublished, dateModified: c.dateModified || c.datePublished,\n author: Array.isArray(c.author) ? c.author.map(a => ({ '@type': 'Person', ...a })) : { '@type': 'Person', ...c.author }\n }),\n organization: (c: { name: string; url: string; logo?: string; sameAs?: string[] }) => ({\n '@context': 'https://schema.org', '@type': 'Organization', name: c.name, url: c.url, logo: c.logo, sameAs: c.sameAs\n }),\n breadcrumb: (items: { name: string; url: string }[]) => ({\n '@context': 'https://schema.org', '@type': 'BreadcrumbList',\n itemListElement: items.map((item, i) => ({ '@type': 'ListItem', position: i + 1, name: item.name, item: item.url }))\n }),\n};\n\n// ============================================================================\n// Automatic SEO Generation\n// ============================================================================\n\n/**\n * Generate sitemap.xml content from routes\n */\nexport function generateSitemap(routes: Array<{ type: string; path: string }>, baseUrl: string): string {\n const urls = routes\n .filter(r => r.type === 'page' && !r.path.includes(':') && !r.path.includes('*'))\n .map(r => {\n const loc = `${baseUrl.replace(/\\/$/, '')}${r.path}`;\n return ` <url>\\n <loc>${loc}</loc>\\n <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\\n <changefreq>weekly</changefreq>\\n <priority>${r.path === '/' ? '1.0' : '0.8'}</priority>\\n </url>`;\n });\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n${urls.join('\\n')}\\n</urlset>`;\n}\n\n/**\n * Generate robots.txt content\n */\nexport function generateRobotsTxt(baseUrl: string, options: { disallow?: string[]; allow?: string[] } = {}): string {\n const lines = ['User-agent: *'];\n if (options.allow) options.allow.forEach(p => lines.push(`Allow: ${p}`));\n if (options.disallow) options.disallow.forEach(p => lines.push(`Disallow: ${p}`));\n else lines.push('Allow: /');\n lines.push('', `Sitemap: ${baseUrl.replace(/\\/$/, '')}/sitemap.xml`);\n return lines.join('\\n');\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction escapeHtml(str: string): string {\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');\n}\n\nfunction resolveUrl(url: string, base: string): string {\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//')) return url;\n return base ? `${base.replace(/\\/$/, '')}${url.startsWith('/') ? '' : '/'}${url}` : url;\n}\n\nfunction generateRobotsContent(robots: Robots): string {\n const parts: string[] = [];\n if (robots.index !== undefined) parts.push(robots.index ? 'index' : 'noindex');\n if (robots.follow !== undefined) parts.push(robots.follow ? 'follow' : 'nofollow');\n if (robots.noarchive) parts.push('noarchive');\n if (robots.nosnippet) parts.push('nosnippet');\n if (robots.noimageindex) parts.push('noimageindex');\n return parts.join(', ') || 'index, follow';\n}\n\nfunction generateViewportContent(viewport: Viewport): string {\n const parts: string[] = [];\n if (viewport.width) parts.push(`width=${viewport.width}`);\n if (viewport.height) parts.push(`height=${viewport.height}`);\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`);\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`);\n if (viewport.userScalable !== undefined) parts.push(`user-scalable=${viewport.userScalable ? 'yes' : 'no'}`);\n return parts.join(', ') || 'width=device-width, initial-scale=1';\n}\n\nexport default { generateMetadataTags, mergeMetadata, generateJsonLd, jsonLd, generateSitemap, generateRobotsTxt };\n","/**\n * Velix v5 Middleware System\n * Request processing pipeline with composable middleware\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface MiddlewareRequest {\n url: string;\n method: string;\n headers: Record<string, string | string[] | undefined>;\n cookies: Record<string, string>;\n params: Record<string, string>;\n query: Record<string, string>;\n body?: unknown;\n raw: import('http').IncomingMessage;\n}\n\nexport interface MiddlewareResponse {\n status: (code: number) => MiddlewareResponse;\n header: (name: string, value: string) => MiddlewareResponse;\n json: (data: unknown) => void;\n redirect: (url: string, status?: number) => void;\n rewrite: (url: string) => void;\n next: () => Promise<void>;\n _statusCode: number;\n _headers: Record<string, string>;\n _redirectUrl: string | null;\n _rewriteUrl: string | null;\n _ended: boolean;\n}\n\nexport type MiddlewareFunction = (\n req: MiddlewareRequest,\n res: MiddlewareResponse,\n next: () => Promise<void>\n) => void | Promise<void>;\n\nexport type MiddlewareResult = {\n continue: boolean;\n rewritten: boolean;\n};\n\n// ============================================================================\n// Built-in Middleware Registry\n// ============================================================================\n\nexport const middlewares = {\n cors(options: {\n origin?: string | string[];\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n maxAge?: number;\n } = {}): MiddlewareFunction {\n const {\n origin = '*',\n methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n headers: allowHeaders = ['Content-Type', 'Authorization'],\n credentials = false,\n maxAge = 86400\n } = options;\n\n return async (req, res, next) => {\n const originHeader = typeof origin === 'string' ? origin : origin.includes(req.headers.origin as string) ? req.headers.origin as string : '';\n\n res.header('Access-Control-Allow-Origin', originHeader);\n res.header('Access-Control-Allow-Methods', methods.join(', '));\n res.header('Access-Control-Allow-Headers', allowHeaders.join(', '));\n res.header('Access-Control-Max-Age', String(maxAge));\n\n if (credentials) {\n res.header('Access-Control-Allow-Credentials', 'true');\n }\n\n if (req.method === 'OPTIONS') {\n res.status(204);\n return;\n }\n\n await next();\n };\n },\n\n rateLimit(options: {\n windowMs?: number;\n max?: number;\n message?: string;\n } = {}): MiddlewareFunction {\n const { windowMs = 60000, max = 100, message = 'Too many requests' } = options;\n const store = new Map<string, { count: number; resetTime: number }>();\n\n return async (req, res, next) => {\n const ip = req.headers['x-forwarded-for'] as string || 'unknown';\n const now = Date.now();\n const record = store.get(ip);\n\n if (!record || now > record.resetTime) {\n store.set(ip, { count: 1, resetTime: now + windowMs });\n } else if (record.count >= max) {\n res.status(429).json({ error: message });\n return;\n } else {\n record.count++;\n }\n\n await next();\n };\n },\n\n security(): MiddlewareFunction {\n return async (_req, res, next) => {\n res.header('X-Content-Type-Options', 'nosniff');\n res.header('X-Frame-Options', 'DENY');\n res.header('X-XSS-Protection', '1; mode=block');\n res.header('Referrer-Policy', 'strict-origin-when-cross-origin');\n await next();\n };\n },\n};\n\n// ============================================================================\n// Middleware Loader\n// ============================================================================\n\n/**\n * Loads proxy middleware from the project root (proxy.ts or proxy.js)\n */\nexport async function loadMiddleware(projectRoot: string): Promise<MiddlewareFunction[]> {\n const fns: MiddlewareFunction[] = [];\n const possibleFiles = ['proxy.ts', 'proxy.js'];\n\n for (const file of possibleFiles) {\n const filePath = path.join(projectRoot, file);\n if (!fs.existsSync(filePath)) continue;\n\n try {\n const { pathToFileURL } = await import('url');\n const url = pathToFileURL(filePath).href;\n const mod = await import(`${url}?t=${Date.now()}`);\n const fn = mod.default || mod.proxy || mod.middleware;\n if (typeof fn === 'function') {\n fns.push(fn);\n break; // Only load the first found proxy file\n }\n } catch (err: unknown) {\n const error = err as Error;\n console.warn(`⚠ Failed to load proxy ${file}: ${error.message}`);\n }\n }\n\n return fns;\n}\n\n// ============================================================================\n// Middleware Runner\n// ============================================================================\n\n/**\n * Runs middleware chain for a request\n */\nexport async function runMiddleware(\n req: import('http').IncomingMessage,\n res: import('http').ServerResponse,\n fns: MiddlewareFunction[]\n): Promise<MiddlewareResult> {\n const result: MiddlewareResult = { continue: true, rewritten: false };\n if (fns.length === 0) return result;\n\n const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);\n const cookies: Record<string, string> = {};\n const cookieHeader = req.headers.cookie;\n if (cookieHeader) {\n cookieHeader.split(';').forEach(c => {\n const [k, ...v] = c.split('=');\n if (k) cookies[k.trim()] = v.join('=').trim();\n });\n }\n\n const mReq: MiddlewareRequest = {\n url: req.url || '/',\n method: req.method || 'GET',\n headers: req.headers as Record<string, string>,\n cookies,\n params: {},\n query: Object.fromEntries(url.searchParams),\n raw: req,\n };\n\n let ended = false;\n const mRes: MiddlewareResponse = {\n _statusCode: 200,\n _headers: {},\n _redirectUrl: null,\n _rewriteUrl: null,\n _ended: false,\n status(code) { this._statusCode = code; return this; },\n header(name, value) { this._headers[name] = value; return this; },\n json(data) {\n this._headers['Content-Type'] = 'application/json';\n res.writeHead(this._statusCode, this._headers);\n res.end(JSON.stringify(data));\n this._ended = true;\n ended = true;\n },\n redirect(url, status = 307) {\n this._redirectUrl = url;\n this._statusCode = status;\n res.writeHead(status, { Location: url, ...this._headers });\n res.end();\n this._ended = true;\n ended = true;\n },\n rewrite(url) {\n this._rewriteUrl = url;\n req.url = url;\n result.rewritten = true;\n },\n async next() { /* handled by chain */ },\n };\n\n // Run middleware chain\n let index = 0;\n const next = async () => {\n if (ended || index >= fns.length) return;\n const fn = fns[index++];\n await fn(mReq, mRes, next);\n };\n\n await next();\n\n // Apply headers that were set\n if (!ended) {\n for (const [key, value] of Object.entries(mRes._headers)) {\n res.setHeader(key, value);\n }\n }\n\n result.continue = !ended;\n return result;\n}\n\n/**\n * Compose multiple middleware into one\n */\nexport function composeMiddleware(...fns: MiddlewareFunction[]): MiddlewareFunction {\n return async (req, res, next) => {\n let index = 0;\n const run = async () => {\n if (index >= fns.length) { await next(); return; }\n const fn = fns[index++];\n await fn(req, res, run);\n };\n await run();\n };\n}\n","/**\n * Velix v5 Plugin System\n * Extensible hook-based plugin architecture\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\n\n// ============================================================================\n// Plugin Hooks\n// ============================================================================\n\nexport const PluginHooks = {\n CONFIG: 'config',\n SERVER_START: 'server:start',\n REQUEST: 'request',\n RESPONSE: 'response',\n ROUTES_LOADED: 'routes:loaded',\n BEFORE_RENDER: 'render:before',\n AFTER_RENDER: 'render:after',\n BUILD_START: 'build:start',\n BUILD_END: 'build:end',\n} as const;\n\nexport type PluginHook = typeof PluginHooks[keyof typeof PluginHooks];\n\n// ============================================================================\n// Plugin Interface\n// ============================================================================\n\nexport interface PluginHookArgs {\n [PluginHooks.CONFIG]: [config: import('../config.js').VelixConfig];\n [PluginHooks.SERVER_START]: [context: { config: import('../config.js').VelixConfig; isDev: boolean; projectRoot: string }, isDev: boolean];\n [PluginHooks.REQUEST]: [req: import('http').IncomingMessage, res: import('http').ServerResponse];\n [PluginHooks.RESPONSE]: [req: import('http').IncomingMessage, res: import('http').ServerResponse, duration: number];\n [PluginHooks.ROUTES_LOADED]: [routes: import('../types.js').RouteTree];\n [PluginHooks.BEFORE_RENDER]: [html: string, context: { route: import('../types.js').Route; config: import('../config.js').VelixConfig; isDev: boolean }];\n [PluginHooks.AFTER_RENDER]: [html: string, context: { route: import('../types.js').Route; config: import('../config.js').VelixConfig; isDev: boolean }];\n [PluginHooks.BUILD_START]: [];\n [PluginHooks.BUILD_END]: [stats: { time: number }];\n}\n\nexport interface VelixPluginDefinition {\n name: string;\n version?: string;\n setup?: (config: import('../config.js').VelixConfig) => void | Promise<void>;\n hooks?: { [K in PluginHook]?: (...args: PluginHookArgs[K]) => unknown };\n [key: string]: unknown; // Allow for Zod passthrough and extra properties\n}\n\n// ============================================================================\n// Plugin Manager\n// ============================================================================\n\nexport class PluginManager {\n private plugins: VelixPluginDefinition[] = [];\n private hooks: Map<string, Array<(...args: any[]) => any>> = new Map();\n\n /**\n * Register a plugin\n */\n register(plugin: VelixPluginDefinition) {\n this.plugins.push(plugin);\n\n // Register hooks\n if (plugin.hooks) {\n for (const [hookName, handler] of Object.entries(plugin.hooks)) {\n if (handler) {\n const existing = this.hooks.get(hookName) || [];\n existing.push(handler);\n this.hooks.set(hookName, existing);\n }\n }\n }\n }\n\n /**\n * Run a hook with arguments\n */\n async runHook<K extends PluginHook>(hookName: K, ...args: PluginHookArgs[K]): Promise<void> {\n const handlers = this.hooks.get(hookName) || [];\n for (const handler of handlers) {\n await handler(...args);\n }\n }\n\n /**\n * Run a waterfall hook — each handler transforms the first argument\n */\n async runWaterfallHook<K extends PluginHook>(hookName: K, value: PluginHookArgs[K][0], ...args: PluginHookArgs[K] extends [unknown, ...infer Rest] ? Rest : []): Promise<PluginHookArgs[K][0]> {\n const handlers = this.hooks.get(hookName) || [];\n let result = value;\n for (const handler of handlers) {\n const transformed = await handler(result, ...args);\n if (transformed !== undefined) result = transformed;\n }\n return result;\n }\n\n /**\n * Get all registered plugins\n */\n getPlugins(): VelixPluginDefinition[] {\n return [...this.plugins];\n }\n\n /**\n * Check if a plugin is registered\n */\n hasPlugin(name: string): boolean {\n return this.plugins.some(p => p.name === name);\n }\n}\n\n// ============================================================================\n// Global Instance\n// ============================================================================\n\nexport const pluginManager = new PluginManager();\n\n// ============================================================================\n// Plugin Loader\n// ============================================================================\n\n/**\n * Load plugins from project configuration\n */\nexport async function loadPlugins(projectRoot: string, config: { plugins?: unknown[] }): Promise<void> {\n const pluginEntries = config.plugins || [];\n\n for (const entry of pluginEntries) {\n try {\n if (typeof entry === 'string') {\n // Load plugin by name (from plugins/ dir or node_modules)\n const localPath = path.join(projectRoot, 'plugins', entry + '.ts');\n const localPathJs = path.join(projectRoot, 'plugins', entry + '.js');\n const localPathDir = path.join(projectRoot, 'plugins', entry, 'index.ts');\n\n let pluginPath: string | null = null;\n if (fs.existsSync(localPath)) pluginPath = localPath;\n else if (fs.existsSync(localPathJs)) pluginPath = localPathJs;\n else if (fs.existsSync(localPathDir)) pluginPath = localPathDir;\n\n if (pluginPath) {\n const url = pathToFileURL(pluginPath).href;\n const mod = await import(`${url}?t=${Date.now()}`);\n const plugin = mod.default || mod;\n if (plugin.name) {\n pluginManager.register(plugin);\n }\n } else {\n // Try node_modules\n try {\n const mod = await import(entry);\n const plugin = mod.default || mod;\n if (plugin.name) pluginManager.register(plugin);\n } catch {\n console.warn(`⚠ Plugin not found: ${entry}`);\n }\n }\n } else if (typeof entry === 'object' && entry !== null && 'name' in entry) {\n // Inline plugin definition\n pluginManager.register(entry as VelixPluginDefinition);\n }\n } catch (err: unknown) {\n const error = err as Error;\n console.warn(`⚠ Failed to load plugin: ${error?.message || String(error)}`);\n }\n }\n}\n\n// ============================================================================\n// Plugin Definition Helper\n// ============================================================================\n\n/**\n * Helper to define a Velix plugin with type safety.\n *\n * @example\n * ```ts\n * export default definePlugin({\n * name: 'my-plugin',\n * hooks: {\n * 'server:start': (server) => {\n * console.log('Server started!');\n * }\n * }\n * });\n * ```\n */\nexport function definePlugin(definition: VelixPluginDefinition): VelixPluginDefinition {\n return definition;\n}\n\n// ============================================================================\n// Built-in Plugins\n// ============================================================================\n\nexport const builtinPlugins = {\n /**\n * Security headers plugin\n */\n security: definePlugin({\n name: 'velix:security',\n hooks: {\n [PluginHooks.RESPONSE]: (_req: unknown, res: unknown) => {\n const response = res as import('http').ServerResponse;\n if (!response.headersSent) {\n response.setHeader('X-Content-Type-Options', 'nosniff');\n response.setHeader('X-Frame-Options', 'DENY');\n response.setHeader('X-XSS-Protection', '1; mode=block');\n }\n }\n }\n }),\n\n /**\n * Request logging plugin\n */\n logger: definePlugin({\n name: 'velix:logger',\n hooks: {\n [PluginHooks.RESPONSE]: (req: unknown, _res: unknown, duration: unknown) => {\n const request = req as import('http').IncomingMessage;\n console.log(` ${request.method} ${request.url} ${duration}ms`);\n }\n }\n }),\n};\n","/**\n * Velix AI Plugin - Utilities\n * @module velix-plugin-ai/utils\n */\n\n/**\n * Retry a function with exponential backoff\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n options: { maxRetries: number; retryDelay: number } = { maxRetries: 3, retryDelay: 1000 }\n): Promise<T> {\n let lastError: Error | undefined;\n \n for (let i = 0; i < options.maxRetries; i++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n \n if (i < options.maxRetries - 1) {\n const delay = options.retryDelay * Math.pow(2, i);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n }\n \n throw lastError || new Error('Retry failed');\n}\n\n/**\n * Safe JSON parsing with fallback\n */\nexport function safeJsonParse<T = unknown>(text: string, fallback?: T): T | null {\n try {\n // Try to extract JSON from markdown code blocks\n const jsonMatch = text.match(/```json\\n([\\s\\S]*?)\\n```/);\n if (jsonMatch) {\n return JSON.parse(jsonMatch[1]);\n }\n \n // Try to parse the whole text\n return JSON.parse(text);\n } catch {\n return fallback ?? null;\n }\n}\n\n/**\n * Build a prompt from a template\n */\nexport function buildPrompt(template: string, variables: Record<string, unknown>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => {\n const val = variables[key];\n return val != null ? String(val) : '';\n });\n}\n\n/**\n * Validate API key\n */\nexport function validateApiKey(apiKey: string | undefined, provider: string): void {\n if (!apiKey || apiKey.trim() === '') {\n throw new Error(`API key is required for ${provider} provider`);\n }\n}\n\n/**\n * Validate input\n */\nexport function validateInput(input: Record<string, unknown>, requiredFields: string[]): void {\n for (const field of requiredFields) {\n if (!(field in input) || input[field] === undefined || input[field] === null) {\n throw new Error(`Missing required field: ${field}`);\n }\n }\n}\n\n/**\n * Create a streaming text decoder\n */\nexport function createStreamDecoder() {\n const decoder = new TextDecoder();\n \n return (chunk: Uint8Array): string => {\n return decoder.decode(chunk, { stream: true });\n };\n}\n\n/**\n * Parse SSE (Server-Sent Events) data\n */\nexport function parseSSE(line: string): unknown {\n if (!line.startsWith('data: ')) {\n return null;\n }\n \n const data = line.slice(6);\n \n if (data === '[DONE]') {\n return { done: true };\n }\n \n try {\n return JSON.parse(data);\n } catch {\n return null;\n }\n}\n\n/**\n * Sanitize input text\n */\nexport function sanitizeInput(text: string): string {\n return text.trim().replace(/\\0/g, '');\n}\n\n/**\n * Count tokens (rough estimation)\n */\nexport function estimateTokens(text: string): number {\n // Rough estimation: ~4 characters per token\n return Math.ceil(text.length / 4);\n}\n\n/**\n * Truncate text to max tokens\n */\nexport function truncateToTokens(text: string, maxTokens: number): string {\n const estimatedTokens = estimateTokens(text);\n \n if (estimatedTokens <= maxTokens) {\n return text;\n }\n \n const maxChars = maxTokens * 4;\n return text.slice(0, maxChars) + '...';\n}\n","/**\n * Velix AI Plugin - OpenAI Provider\n * @module velix-plugin-ai/providers/openai\n */\n\nimport type {\n AIProvider,\n AIInput,\n AIResponse,\n ChatInput,\n AIStreamChunk,\n EmbedInput,\n EmbedResponse\n} from '../types';\nimport { validateApiKey, retry, parseSSE } from '../utils';\n\nexport interface OpenAIConfig {\n apiKey: string;\n baseUrl?: string;\n defaultModel?: string;\n organization?: string;\n retry?: {\n maxRetries: number;\n retryDelay: number;\n };\n}\n\nexport class OpenAIProvider implements AIProvider {\n name = 'openai' as const;\n private apiKey: string;\n private baseUrl: string;\n private defaultModel: string;\n private organization?: string;\n private retryConfig: { maxRetries: number; retryDelay: number };\n\n constructor(config: OpenAIConfig) {\n validateApiKey(config.apiKey, 'OpenAI');\n \n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl || 'https://api.openai.com/v1';\n this.defaultModel = config.defaultModel || 'gpt-4o-mini';\n this.organization = config.organization;\n this.retryConfig = config.retry || { maxRetries: 3, retryDelay: 1000 };\n }\n\n async generate(input: AIInput): Promise<AIResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n messages: [\n ...(input.system ? [{ role: 'system', content: input.system }] : []),\n { role: 'user', content: input.prompt }\n ],\n temperature: input.temperature ?? 0.7,\n max_tokens: input.maxTokens,\n stop: input.stop,\n ...input.options\n })\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(`OpenAI API error: ${error.error?.message || response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n text: data.choices[0].message.content,\n provider: 'openai',\n model: data.model,\n usage: {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens\n },\n raw: data\n };\n }, this.retryConfig);\n }\n\n async chat(input: ChatInput): Promise<AIResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n messages: input.messages,\n temperature: input.temperature ?? 0.7,\n max_tokens: input.maxTokens,\n stop: input.stop,\n ...input.options\n })\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(`OpenAI API error: ${error.error?.message || response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n text: data.choices[0].message.content,\n provider: 'openai',\n model: data.model,\n usage: {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens\n },\n raw: data\n };\n }, this.retryConfig);\n }\n\n async *stream(input: AIInput): AsyncIterable<AIStreamChunk> {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n messages: [\n ...(input.system ? [{ role: 'system', content: input.system }] : []),\n { role: 'user', content: input.prompt }\n ],\n temperature: input.temperature ?? 0.7,\n max_tokens: input.maxTokens,\n stop: input.stop,\n stream: true,\n ...input.options\n })\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(`OpenAI API error: ${error.error?.message || response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('Response body is not readable');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n \n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n\n const parsed = parseSSE(trimmed) as { choices?: Array<{ delta?: { content?: string } }>; model?: string } | null;\n if (!parsed) continue;\n\n const delta = parsed.choices?.[0]?.delta?.content;\n if (delta) {\n yield {\n text: delta,\n done: false,\n provider: 'openai',\n model: parsed.model\n };\n }\n }\n }\n\n yield { text: '', done: true, provider: 'openai' };\n } finally {\n reader.releaseLock();\n }\n }\n\n async embed(input: EmbedInput): Promise<EmbedResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/embeddings`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n model: input.model || 'text-embedding-3-small',\n input: input.text\n })\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(`OpenAI API error: ${error.error?.message || response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n embedding: data.data[0].embedding,\n provider: 'openai',\n model: data.model\n };\n }, this.retryConfig);\n }\n\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`\n };\n\n if (this.organization) {\n headers['OpenAI-Organization'] = this.organization;\n }\n\n return headers;\n }\n}\n","/**\n * Velix AI Plugin - Ollama Provider\n * @module velix-plugin-ai/providers/ollama\n */\n\nimport type {\n AIProvider,\n AIInput,\n AIResponse,\n ChatInput,\n AIStreamChunk,\n EmbedInput,\n EmbedResponse\n} from '../types';\nimport { retry } from '../utils';\n\nexport interface OllamaConfig {\n baseUrl?: string;\n defaultModel?: string;\n retry?: {\n maxRetries: number;\n retryDelay: number;\n };\n}\n\nexport class OllamaProvider implements AIProvider {\n name = 'ollama' as const;\n private baseUrl: string;\n private defaultModel: string;\n private retryConfig: { maxRetries: number; retryDelay: number };\n\n constructor(config: OllamaConfig = {}) {\n this.baseUrl = config.baseUrl || 'http://localhost:11434';\n this.defaultModel = config.defaultModel || 'llama3.2';\n this.retryConfig = config.retry || { maxRetries: 3, retryDelay: 1000 };\n }\n\n async generate(input: AIInput): Promise<AIResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/api/generate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n prompt: input.prompt,\n system: input.system,\n options: {\n temperature: input.temperature ?? 0.7,\n num_predict: input.maxTokens,\n stop: input.stop,\n ...input.options\n },\n stream: false\n })\n });\n\n if (!response.ok) {\n throw new Error(`Ollama API error: ${response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n text: data.response,\n provider: 'ollama',\n model: data.model,\n usage: {\n promptTokens: data.prompt_eval_count || 0,\n completionTokens: data.eval_count || 0,\n totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0)\n },\n raw: data\n };\n }, this.retryConfig);\n }\n\n async chat(input: ChatInput): Promise<AIResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n messages: input.messages,\n options: {\n temperature: input.temperature ?? 0.7,\n num_predict: input.maxTokens,\n stop: input.stop,\n ...input.options\n },\n stream: false\n })\n });\n\n if (!response.ok) {\n throw new Error(`Ollama API error: ${response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n text: data.message.content,\n provider: 'ollama',\n model: data.model,\n usage: {\n promptTokens: data.prompt_eval_count || 0,\n completionTokens: data.eval_count || 0,\n totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0)\n },\n raw: data\n };\n }, this.retryConfig);\n }\n\n async *stream(input: AIInput): AsyncIterable<AIStreamChunk> {\n const response = await fetch(`${this.baseUrl}/api/generate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n prompt: input.prompt,\n system: input.system,\n options: {\n temperature: input.temperature ?? 0.7,\n num_predict: input.maxTokens,\n stop: input.stop,\n ...input.options\n },\n stream: true\n })\n });\n\n if (!response.ok) {\n throw new Error(`Ollama API error: ${response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('Response body is not readable');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n \n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n\n try {\n const data = JSON.parse(trimmed);\n \n if (data.response) {\n yield {\n text: data.response,\n done: data.done || false,\n provider: 'ollama',\n model: data.model\n };\n }\n\n if (data.done) {\n return;\n }\n } catch {\n // Skip invalid JSON\n }\n }\n }\n\n yield { text: '', done: true, provider: 'ollama' };\n } finally {\n reader.releaseLock();\n }\n }\n\n async embed(input: EmbedInput): Promise<EmbedResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/api/embeddings`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n prompt: input.text\n })\n });\n\n if (!response.ok) {\n throw new Error(`Ollama API error: ${response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n embedding: data.embedding,\n provider: 'ollama',\n model: data.model || input.model || this.defaultModel\n };\n }, this.retryConfig);\n }\n}\n","/**\n * Velix AI Plugin - AI Client\n * @module velix-plugin-ai/client\n */\n\nimport type {\n AIClient,\n AIProvider,\n AIInput,\n AIResponse,\n ChatInput,\n AIStreamChunk,\n EmbedInput,\n EmbedResponse,\n AIPluginConfig\n} from './types';\nimport { OpenAIProvider } from './providers/openai';\nimport { OllamaProvider } from './providers/ollama';\n\n/**\n * Create an AI client\n */\nexport function createAIClient(config: AIPluginConfig): AIClient {\n const provider = createProvider(config);\n\n return {\n async generate(input: AIInput): Promise<AIResponse> {\n return provider.generate(input);\n },\n\n async chat(input: ChatInput): Promise<AIResponse> {\n return provider.chat(input);\n },\n\n stream(input: AIInput): AsyncIterable<AIStreamChunk> {\n return provider.stream(input);\n },\n\n async embed(input: EmbedInput): Promise<EmbedResponse> {\n return provider.embed(input);\n },\n\n getProvider(): AIProvider {\n return provider;\n }\n };\n}\n\n/**\n * Create a provider instance\n */\nfunction createProvider(config: AIPluginConfig): AIProvider {\n switch (config.provider) {\n case 'openai':\n return new OpenAIProvider({\n apiKey: config.apiKey!,\n baseUrl: config.baseUrl,\n defaultModel: config.defaultModel,\n retry: config.retry\n });\n\n case 'ollama':\n return new OllamaProvider({\n baseUrl: config.baseUrl,\n defaultModel: config.defaultModel,\n retry: config.retry\n });\n\n default:\n throw new Error(`Unsupported AI provider: ${config.provider}`);\n }\n}\n","/**\n * Velix AI Plugin v1\n * @module velix-plugin-ai\n */\n\nimport { createAIClient } from './client';\nimport type { AIPluginConfig, AIClient } from './types';\n\n// Export types\nexport * from './types';\nexport * from './utils';\nexport { OpenAIProvider } from './providers/openai';\nexport { OllamaProvider } from './providers/ollama';\nexport { createAIClient } from './client';\n\n/**\n * Velix AI Plugin\n * \n * @example\n * ```ts\n * import aiPlugin from 'velix/plugins/ai';\n * \n * export default defineConfig({\n * plugins: [\n * aiPlugin({\n * provider: 'openai',\n * apiKey: process.env.OPENAI_API_KEY\n * })\n * ]\n * });\n * ```\n */\nexport default function aiPlugin(config: AIPluginConfig) {\n return {\n name: 'velix-ai',\n \n setup(ctx: Record<string, unknown>) {\n // Create AI client\n const client = createAIClient(config);\n \n // Attach to context\n ctx.ai = client;\n \n // Make available globally for server actions\n if (typeof globalThis !== 'undefined') {\n (globalThis as unknown as { __VELIX_AI__: AIClient }).__VELIX_AI__ = client;\n }\n }\n };\n}\n\n/**\n * Get AI client in server actions\n */\nexport function useAI(): AIClient {\n if (typeof globalThis === 'undefined' || !(globalThis as unknown as { __VELIX_AI__?: AIClient }).__VELIX_AI__) {\n throw new Error('AI client not initialized. Make sure aiPlugin is configured.');\n }\n \n return (globalThis as unknown as { __VELIX_AI__: AIClient }).__VELIX_AI__;\n}\n\n/**\n * Create an AI-powered server action\n * \n * @example\n * ```ts\n * export const summarize = createAIAction({\n * input: { text: 'string' },\n * prompt: ({ text }) => `Summarize this text: ${text}`,\n * system: 'You are a helpful assistant that summarizes text concisely.'\n * });\n * ```\n */\nexport function createAIAction<TInput = unknown, TOutput = string>(config: {\n input: TInput;\n prompt: (input: TInput) => string;\n system?: string;\n model?: string;\n temperature?: number;\n transform?: (response: string) => TOutput;\n}) {\n return async (input: TInput): Promise<TOutput> => {\n const ai = useAI();\n \n const prompt = config.prompt(input);\n \n const response = await ai.generate({\n prompt,\n system: config.system,\n model: config.model,\n temperature: config.temperature\n });\n \n if (config.transform) {\n return config.transform(response.text);\n }\n \n return response.text as TOutput;\n };\n}\n","/**\n * Velix v5 — Advanced Cache (VelixCache)\n *\n * Production-grade caching with:\n * - LRU eviction (configurable maxSize)\n * - TTL-based expiration\n * - Stale-while-revalidate (SWR) window\n * - Tag-based invalidation\n * - Type-safe generics\n */\n\nexport type RevalidationType = 'path' | 'tag' | 'layout';\n\nexport interface CacheOptions {\n /** Time-to-live in milliseconds */\n ttl?: number;\n /** Stale-while-revalidate window in milliseconds (after TTL expires) */\n swr?: number;\n /** Tags for group invalidation */\n tags?: string[];\n}\n\ninterface CacheEntry<T> {\n key: string;\n value: T;\n tags: Set<string>;\n createdAt: number;\n ttl: number;\n swr: number;\n /** Doubly-linked list pointers for LRU */\n prev: CacheEntry<unknown> | null;\n next: CacheEntry<unknown> | null;\n}\n\ninterface VelixCacheConfig {\n /** Maximum number of entries (default: 1000) */\n maxSize?: number;\n /** Default TTL in ms (default: 60_000 — 1 minute) */\n defaultTtl?: number;\n /** Default SWR window in ms (default: 10_000 — 10 seconds) */\n defaultSwr?: number;\n}\n\nexport class VelixCache {\n private readonly maxSize: number;\n private readonly defaultTtl: number;\n private readonly defaultSwr: number;\n\n private readonly store = new Map<string, CacheEntry<unknown>>();\n private readonly tagIndex = new Map<string, Set<string>>();\n\n // LRU doubly-linked list sentinel nodes\n private readonly head: CacheEntry<unknown>;\n private readonly tail: CacheEntry<unknown>;\n\n constructor(config: VelixCacheConfig = {}) {\n this.maxSize = config.maxSize ?? 1000;\n this.defaultTtl = config.defaultTtl ?? 60_000;\n this.defaultSwr = config.defaultSwr ?? 10_000;\n\n // Sentinel nodes for the doubly-linked list\n this.head = this.createSentinel('__HEAD__');\n this.tail = this.createSentinel('__TAIL__');\n this.head.next = this.tail;\n this.tail.prev = this.head;\n }\n\n /** Current number of entries */\n get size(): number {\n return this.store.size;\n }\n\n /**\n * Store a value with optional TTL, SWR, and tags.\n */\n set<T>(key: string, value: T, options?: CacheOptions): void {\n // Remove existing entry if present (will be re-added at head)\n if (this.store.has(key)) {\n this.removeEntry(this.store.get(key)!);\n }\n\n const entry: CacheEntry<T> = {\n key,\n value,\n tags: new Set(options?.tags ?? []),\n createdAt: Date.now(),\n ttl: options?.ttl ?? this.defaultTtl,\n swr: options?.swr ?? this.defaultSwr,\n prev: null,\n next: null,\n };\n\n // Add to store and move to head (most recently used)\n this.store.set(key, entry as CacheEntry<unknown>);\n this.addToHead(entry as CacheEntry<unknown>);\n\n // Update tag index\n for (const tag of entry.tags) {\n if (!this.tagIndex.has(tag)) {\n this.tagIndex.set(tag, new Set());\n }\n this.tagIndex.get(tag)!.add(key);\n }\n\n // Evict LRU entries if over capacity\n while (this.store.size > this.maxSize) {\n this.evictLRU();\n }\n }\n\n /**\n * Get a cached value. Returns `null` if not found or expired beyond SWR window.\n *\n * @returns `{ value, stale }` — `stale` is true when the entry is past TTL but within SWR window.\n */\n get<T>(key: string): { value: T; stale: boolean } | null {\n const entry = this.store.get(key);\n if (!entry) return null;\n\n const now = Date.now();\n const age = now - entry.createdAt;\n\n // Past TTL + SWR → fully expired, remove\n if (age > entry.ttl + entry.swr) {\n this.removeEntry(entry);\n return null;\n }\n\n // Move to head (recently used)\n this.moveToHead(entry);\n\n const stale = age > entry.ttl;\n return { value: entry.value as T, stale };\n }\n\n /**\n * Simple get that returns only the value (ignoring staleness).\n * Returns `null` if not found or expired.\n */\n getValue<T>(key: string): T | null {\n const result = this.get<T>(key);\n return result ? result.value : null;\n }\n\n /** Check whether a key exists and is not expired */\n has(key: string): boolean {\n return this.get(key) !== null;\n }\n\n /** Remove a specific key */\n delete(key: string): boolean {\n const entry = this.store.get(key);\n if (!entry) return false;\n this.removeEntry(entry);\n return true;\n }\n\n /** Invalidate a specific path/key */\n revalidatePath(path: string): void {\n this.delete(path);\n }\n\n /** Invalidate all entries associated with a tag */\n revalidateTag(tag: string): void {\n const keys = this.tagIndex.get(tag);\n if (!keys) return;\n\n for (const key of keys) {\n const entry = this.store.get(key);\n if (entry) {\n this.removeEntry(entry);\n }\n }\n this.tagIndex.delete(tag);\n }\n\n /** Clear all entries */\n invalidateAll(): void {\n this.store.clear();\n this.tagIndex.clear();\n this.head.next = this.tail;\n this.tail.prev = this.head;\n }\n\n /** Get cache stats for debugging/monitoring */\n stats(): { size: number; maxSize: number; tags: number } {\n return {\n size: this.store.size,\n maxSize: this.maxSize,\n tags: this.tagIndex.size,\n };\n }\n\n // ── Internal LRU operations ──\n\n private createSentinel(key: string): CacheEntry<unknown> {\n return {\n key,\n value: null,\n tags: new Set(),\n createdAt: 0,\n ttl: 0,\n swr: 0,\n prev: null,\n next: null,\n };\n }\n\n private addToHead(entry: CacheEntry<unknown>): void {\n entry.prev = this.head;\n entry.next = this.head.next;\n this.head.next!.prev = entry;\n this.head.next = entry;\n }\n\n private removeFromList(entry: CacheEntry<unknown>): void {\n if (entry.prev) entry.prev.next = entry.next;\n if (entry.next) entry.next.prev = entry.prev;\n entry.prev = null;\n entry.next = null;\n }\n\n private moveToHead(entry: CacheEntry<unknown>): void {\n this.removeFromList(entry);\n this.addToHead(entry);\n }\n\n private evictLRU(): void {\n const lru = this.tail.prev;\n if (lru && lru !== this.head) {\n this.removeEntry(lru);\n }\n }\n\n private removeEntry(entry: CacheEntry<unknown>): void {\n // Remove from linked list\n this.removeFromList(entry);\n // Remove from store\n this.store.delete(entry.key);\n // Remove from tag index\n for (const tag of entry.tags) {\n const keys = this.tagIndex.get(tag);\n if (keys) {\n keys.delete(entry.key);\n if (keys.size === 0) {\n this.tagIndex.delete(tag);\n }\n }\n }\n }\n}\n\n// ── Singleton instance for the framework ──\n\nexport const cacheManager = new VelixCache();\n\n/**\n * Revalidate a specific path\n * @example\n * ```ts\n * import { revalidatePath } from 'velix/actions';\n *\n * await revalidatePath('/blog');\n * await revalidatePath('/blog/[slug]', 'layout');\n * ```\n */\nexport function revalidatePath(path: string, _type: RevalidationType = 'path'): void {\n cacheManager.revalidatePath(path);\n\n // Notify connected clients via HMR\n if (typeof global !== 'undefined' && (global as unknown as { __VELIX_HMR_SERVER__?: { broadcast: (msg: string) => void } }).__VELIX_HMR_SERVER__) {\n (global as unknown as { __VELIX_HMR_SERVER__: { broadcast: (msg: string) => void } }).__VELIX_HMR_SERVER__.broadcast(JSON.stringify({\n type: 'revalidate',\n path,\n revalidationType: _type,\n }));\n }\n}\n\n/**\n * Revalidate all paths with a specific cache tag\n * @example\n * ```ts\n * import { revalidateTag } from 'velix/actions';\n *\n * await revalidateTag('blog-posts');\n * ```\n */\nexport function revalidateTag(tag: string): void {\n cacheManager.revalidateTag(tag);\n\n // Notify connected clients\n if (typeof global !== 'undefined' && (global as unknown as { __VELIX_HMR_SERVER__?: { broadcast: (msg: string) => void } }).__VELIX_HMR_SERVER__) {\n (global as unknown as { __VELIX_HMR_SERVER__: { broadcast: (msg: string) => void } }).__VELIX_HMR_SERVER__.broadcast(JSON.stringify({\n type: 'revalidate',\n tag,\n }));\n }\n}\n\n/**\n * Unstable cache wrapper (experimental)\n */\nexport function unstable_cache<T>(\n fn: () => Promise<T>,\n keys: string[],\n options?: { tags?: string[]; revalidate?: number }\n): () => Promise<T> {\n return async () => {\n const cacheKey = keys.join(':');\n\n const cached = cacheManager.get<T>(cacheKey);\n if (cached && !cached.stale) {\n return cached.value;\n }\n\n const result = await fn();\n cacheManager.set(cacheKey, result, {\n tags: options?.tags,\n ttl: options?.revalidate ? options.revalidate * 1000 : undefined,\n });\n\n return result;\n };\n}\n","import crypto from 'crypto';\n\nexport class VelixHttpError extends Error {\n public status: number;\n public digest?: string;\n\n constructor(status: number, message: string) {\n super(message);\n this.name = this.constructor.name;\n this.status = status;\n \n // Generate actual cryptographic hash\n const hash = crypto.createHash('sha256');\n hash.update(`${Date.now()}-${message}-${status}-${Math.random()}`);\n this.digest = hash.digest('hex').substring(0, 16);\n }\n\n toClientError(isDev: boolean) {\n return {\n message: this.message,\n status: this.status,\n digest: this.digest,\n stack: isDev ? this.stack : undefined,\n };\n }\n}\n\nexport class NotFoundError extends VelixHttpError {\n constructor(message: string = 'Not Found') {\n super(404, message);\n }\n}\n\nexport class ForbiddenError extends VelixHttpError {\n constructor(message: string = 'Forbidden') {\n super(403, message);\n }\n}\n\nexport class UnauthorizedError extends VelixHttpError {\n constructor(message: string = 'Unauthorized') {\n super(401, message);\n }\n}\n","export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';\n\nexport type RouteContext = {\n params: Record<string, string>;\n searchParams: URLSearchParams;\n};\n\nexport type RouteHandler = (\n req: Request,\n ctx: RouteContext\n) => Response | Promise<Response>;\n\nimport { VelixHttpError } from '../server/errors.js';\nexport { VelixHttpError };\n\nexport function defineRoute(handler: RouteHandler): RouteHandler {\n return async (req, ctx) => {\n try {\n return await handler(req, ctx);\n } catch (err) {\n if (err instanceof VelixHttpError) {\n return Response.json({ error: err.message }, { status: err.status });\n }\n console.error('[Velix API]', err);\n return Response.json({ error: 'Internal Server Error' }, { status: 500 });\n }\n };\n}\n","import { glob } from 'glob';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\nimport type { HttpMethod } from './define-route.js';\n\nexport type ApiRoute = {\n pattern: string; // ex: /api/users/:id\n filePath: string; // chemin absolu vers le fichier\n params: string[]; // noms des paramètres dynamiques\n isCatchAll: boolean;\n};\n\nexport async function buildApiManifest(serverDir: string): Promise<ApiRoute[]> {\n const files = await glob('api/**/*.ts', { cwd: serverDir, absolute: true });\n return files.map(file => filePathToRoute(file, serverDir));\n}\n\n/** Exported for testing */\nexport function filePathToRoute(filePath: string, serverDir: string): ApiRoute {\n const relative = path.relative(path.join(serverDir, 'api'), filePath);\n // Ensure we replace Windows backslashes with forward slashes for the pattern\n const normalizedRelative = relative.replace(/\\\\/g, '/');\n const withoutExt = normalizedRelative.replace(/\\.ts$/, '');\n \n // users.[id] → /api/users/:id\n // auth/[...slug] → /api/auth/*\n const params: string[] = [];\n let isCatchAll = false;\n\n const pattern = '/api/' + withoutExt\n .replace(/\\[\\.\\.\\.(\\w+)\\]/g, (_, name) => { isCatchAll = true; params.push(name); return '*'; })\n .replace(/\\[(\\w+)\\]/g, (_, name) => { params.push(name); return `:${name}`; })\n .replace(/\\.\\[/g, '/[') // users.[id] → users/[id]\n .replace(/\\./g, '/'); // nested avec dots → slashes\n\n return { pattern, filePath, params, isCatchAll };\n}\n\nfunction matchPattern(pathname: string, route: ApiRoute): { params: Record<string, string> } | null {\n if (route.isCatchAll) {\n const base = route.pattern.replace('/*', '');\n if (pathname.startsWith(base)) {\n const rest = pathname.slice(base.length);\n const params: Record<string, string> = {};\n if (route.params[0]) {\n params[route.params[0]] = rest.startsWith('/') ? rest.slice(1) : rest;\n }\n return { params };\n }\n return null;\n }\n\n const pathParts = pathname.split('/').filter(Boolean);\n const patternParts = route.pattern.split('/').filter(Boolean);\n\n if (pathParts.length !== patternParts.length) return null;\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < patternParts.length; i++) {\n const part = patternParts[i];\n if (part.startsWith(':')) {\n params[part.slice(1)] = pathParts[i];\n } else if (part !== pathParts[i]) {\n return null;\n }\n }\n\n return { params };\n}\n\nexport async function handleApiRequest(\n req: Request,\n manifest: ApiRoute[]\n): Promise<Response | null> {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n for (const route of manifest) {\n const match = matchPattern(pathname, route);\n if (!match) continue;\n\n const fileUrl = pathToFileURL(route.filePath).href;\n const handlers = await import(`${fileUrl}?t=${Date.now()}`);\n const method = req.method.toUpperCase() as HttpMethod;\n const handler = handlers[method] || handlers.default;\n\n if (!handler) {\n return Response.json({ error: 'Method Not Allowed' }, { status: 405 });\n }\n\n return handler(req, {\n params: match.params,\n searchParams: url.searchParams,\n });\n }\n\n return null; // pas de route API → fallback SSR\n}\n","export type LoaderContext = {\n params: Record<string, string>;\n searchParams: URLSearchParams;\n req: Request;\n};\n\nexport type LoaderResult<T> = {\n data: T;\n headers?: Record<string, string>;\n cache?: { maxAge: number } | 'no-store';\n};\n\nexport function defineLoader<T>(\n fn: (ctx: LoaderContext) => Promise<T>\n): (ctx: LoaderContext) => Promise<LoaderResult<T>> {\n return async (ctx) => {\n const data = await fn(ctx);\n return { data };\n };\n}\n","import { z } from 'zod';\n\nexport type ActionContext = {\n req: Request;\n headers: Headers;\n};\n\nexport type ActionOptions<TInput extends z.ZodTypeAny, TOutput> = {\n input: TInput;\n handler: (ctx: { input: z.infer<TInput>; ctx: ActionContext }) => Promise<TOutput>;\n};\n\nexport type ActionResult<T> =\n | { success: true; data: T }\n | { success: false; error: string; fieldErrors?: Record<string, string[]> };\n\nexport function serverAction<TInput extends z.ZodTypeAny, TOutput>(\n options: ActionOptions<TInput, TOutput>\n) {\n return async (rawInput: unknown, ctx: ActionContext): Promise<ActionResult<TOutput>> => {\n const parsed = options.input.safeParse(rawInput);\n if (!parsed.success) {\n return {\n success: false,\n error: 'Validation failed',\n fieldErrors: parsed.error.flatten().fieldErrors as Record<string, string[]>,\n };\n }\n try {\n const data = await options.handler({ input: parsed.data, ctx });\n return { success: true, data };\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : 'Unknown error' };\n }\n };\n}\n","import { WebSocketServer, WebSocket } from 'ws';\nimport chokidar from 'chokidar';\nimport type { Server as HttpServer } from 'http';\n\nexport type HMREvent =\n | { type: 'file-changed'; file: string; timestamp: number }\n | { type: 'file-added'; file: string; timestamp: number }\n | { type: 'compile-start'; timestamp: number }\n | { type: 'compile-done'; duration: number; timestamp: number }\n | { type: 'compile-error'; message: string; file?: string; line?: number; col?: number; timestamp: number }\n | { type: 'full-reload'; timestamp: number };\n\nexport function createHMRServer(httpServer: HttpServer, projectRoot: string) {\n const wss = new WebSocketServer({ server: httpServer, path: '/__velix_hmr' });\n const clients = new Set<WebSocket>();\n\n wss.on('connection', (ws) => {\n clients.add(ws);\n ws.send(JSON.stringify({ type: 'connected' }));\n ws.on('close', () => clients.delete(ws));\n });\n\n const watcher = chokidar.watch(projectRoot, {\n ignored: /node_modules|\\.velix|dist|\\.git/,\n persistent: true,\n ignoreInitial: true,\n });\n\n function broadcast(event: HMREvent) {\n const msg = JSON.stringify(event);\n clients.forEach(ws => {\n if (ws.readyState === ws.OPEN) ws.send(msg);\n });\n }\n\n watcher.on('change', (file) => {\n broadcast({ type: 'file-changed', file, timestamp: Date.now() });\n });\n watcher.on('add', (file) => {\n broadcast({ type: 'file-added', file, timestamp: Date.now() });\n });\n\n return { broadcast, watcher, wss, clients };\n}\n","import path from 'path';\nimport fs from 'fs';\nimport { NotFoundError, VelixHttpError } from './errors.js';\n\nexport type ErrorBoundaryType = 'error' | 'not-found';\n\nexport interface ResolvedBoundary {\n filePath: string;\n type: ErrorBoundaryType;\n scope: string;\n}\n\nexport function getErrorBoundaryType(error: unknown): ErrorBoundaryType {\n if (error instanceof NotFoundError) return 'not-found';\n if (error instanceof VelixHttpError && error.status === 404) return 'not-found';\n return 'error';\n}\n\nexport function resolveErrorBoundary(routeFilePath: string, appDir: string, type: ErrorBoundaryType): ResolvedBoundary | null {\n let currentDir = path.dirname(routeFilePath);\n \n // Ensure we don't go outside appDir\n while (currentDir.length >= appDir.length && currentDir.startsWith(appDir)) {\n const boundaryPath = path.join(currentDir, `${type}.tsx`);\n if (fs.existsSync(boundaryPath)) {\n const scope = currentDir === appDir ? 'root' : path.basename(currentDir);\n return {\n filePath: boundaryPath,\n type,\n scope\n };\n }\n \n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) break;\n currentDir = parentDir;\n }\n \n return null;\n}\n","import type { ErrorComponent, NotFoundComponent } from '../types.js';\n\nexport function defineError(component: ErrorComponent): ErrorComponent {\n return component;\n}\n\nexport function defineNotFound(component: NotFoundComponent): NotFoundComponent {\n return component;\n}\n"]}
1
+ {"version":3,"sources":["../src/router/types.ts","../src/utils.ts","../src/router/parser.ts","../src/router/scanner.ts","../src/router/tree-builder.ts","../src/router/matcher.ts","../src/router/index.ts","../src/config.ts","../src/version.ts","../src/logger.ts","../src/metadata/index.ts","../src/middleware/index.ts","../src/plugins/index.ts","../src/plugins/ai/utils.ts","../src/plugins/ai/providers/openai.ts","../src/plugins/ai/providers/ollama.ts","../src/plugins/ai/client.ts","../src/plugins/ai/index.ts","../src/cache/adapters/memory.adapter.ts","../src/cache/deduplicator.ts","../src/cache/index.ts","../src/server/errors.ts","../src/api/define-route.ts","../src/api/manifest.ts","../src/server/define-loader.ts","../src/server/server-action.ts","../src/dev/hmr-server.ts","../src/server/error-cascade.ts","../src/server/define-error.ts"],"names":["path","fs","escapeHtml","c","pathToFileURL","url","crypto","params"],"mappings":"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","file":"index.js","sourcesContent":["import type { Route, RouteTree as TypedRouteTree, RouteTreeNode } from '../types.js';\n\nexport const RouteType = {\n PAGE: 'page',\n API: 'api',\n LAYOUT: 'layout',\n LOADING: 'loading',\n ERROR: 'error',\n NOT_FOUND: 'not-found'\n} as const;\n\nexport type RouteMatch = Route & {\n params: Record<string, string>;\n};\n\nexport interface RouteBuilderContext {\n pages: Route[];\n api: Route[];\n layouts: Map<string, string>;\n tree: RouteTreeNode;\n appRoutes: Route[];\n rootLayout?: string;\n}\n","/**\n * Velix v5 Utility Functions\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport crypto from 'crypto';\n\n/**\n * Generates a unique hash for cache busting\n */\nexport function generateHash(content: string): string {\n return crypto.createHash('md5').update(content).digest('hex').slice(0, 8);\n}\n\n/**\n * Escapes HTML special characters\n */\nexport function escapeHtml(str: string): string {\n const htmlEntities: Record<string, string> = {\n '&': '&amp;', '<': '&lt;', '>': '&gt;',\n '\"': '&quot;', \"'\": '&#39;'\n };\n return String(str).replace(/[&<>\"']/g, char => htmlEntities[char]);\n}\n\n/**\n * Recursively finds all files matching a pattern\n */\nexport function findFiles(dir: string, pattern: RegExp, files: string[] = []): string[] {\n if (!fs.existsSync(dir)) return files;\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) findFiles(fullPath, pattern, files);\n else if (pattern.test(entry.name)) files.push(fullPath);\n }\n return files;\n}\n\n/**\n * Ensures a directory exists\n */\nexport function ensureDir(dir: string): void {\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n}\n\n/**\n * Cleans a directory\n */\nexport function cleanDir(dir: string): void {\n if (fs.existsSync(dir)) fs.rmSync(dir, { recursive: true, force: true });\n fs.mkdirSync(dir, { recursive: true });\n}\n\n/**\n * Copies a directory recursively\n */\nexport function copyDir(src: string, dest: string): void {\n ensureDir(dest);\n const entries = fs.readdirSync(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) copyDir(srcPath, destPath);\n else fs.copyFileSync(srcPath, destPath);\n }\n}\n\n/**\n * Debounce function for file watching\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(fn: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), delay);\n };\n}\n\n/**\n * Formats bytes to human-readable string\n */\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\n/**\n * Formats milliseconds to human-readable string\n */\nexport function formatTime(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n}\n\n/**\n * Creates a deferred promise\n */\nexport function createDeferred<T>() {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve!, reject: reject! };\n}\n\n/**\n * Sleep utility\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Check if a file is a server component (has 'use server' directive)\n */\nexport function isServerComponent(filePath: string): boolean {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n const firstLine = content.split('\\n')[0].trim();\n return firstLine === \"'use server'\" || firstLine === '\"use server\"';\n } catch { return false; }\n}\n\n/**\n * Check if a file is a client component (has 'use client' directive)\n */\nexport function isClientComponent(filePath: string): boolean {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n const firstLine = content.split('\\n')[0].trim();\n return firstLine === \"'use client'\" || firstLine === '\"use client\"';\n } catch { return false; }\n}\n\n/**\n * Check if a component is an island (has 'use island' directive)\n */\nexport function isIsland(filePath: string): boolean {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n const firstLine = content.split('\\n')[0].trim();\n return firstLine === \"'use island'\" || firstLine === '\"use island\"';\n } catch { return false; }\n}\n","/**\n * Creates regex pattern for route matching\n */\nexport function createRoutePattern(routePath: string): RegExp {\n let pattern = routePath\n .replace(/\\*[^/]*/g, '(.*)') // Catch-all\n .replace(/:[^/]+/g, '([^/]+)') // Dynamic segments\n .replace(/\\//g, '\\\\/');\n\n return new RegExp(`^${pattern}$`);\n}\n\n/**\n * Extracts parameters from route match\n */\nexport function extractParams(routePath: string, match: RegExpMatchArray): Record<string, string> {\n const params: Record<string, string> = {};\n const paramNames: string[] = [];\n\n const paramRegex = /:([^/]+)|\\*([^/]*)/g;\n let paramMatch;\n while ((paramMatch = paramRegex.exec(routePath)) !== null) {\n paramNames.push(paramMatch[1] || paramMatch[2] || 'splat');\n }\n\n paramNames.forEach((name, index) => {\n params[name] = match[index + 1];\n });\n\n return params;\n}\n","import fs from 'fs';\nimport path from 'path';\nimport { isServerComponent, isClientComponent, isIsland } from '../utils.js';\nimport type { Route } from '../types.js';\nimport { RouteType } from './types.js';\nimport { createRoutePattern } from './parser.js';\n\n/**\n * Scans app/ directory for file-based routing asynchronously\n * Supports: page.tsx, layout.tsx, loading.tsx, error.tsx, not-found.tsx, [param].tsx\n */\nexport async function scanAppDirectory(\n baseDir: string,\n currentDir: string,\n parentSegments: string[] = [],\n parentLayout: string | null = null,\n parentMiddleware: string | null = null\n): Promise<Route[]> {\n const routes: Route[] = [];\n const entries = await fs.promises.readdir(currentDir, { withFileTypes: true });\n\n // Find special files in current directory\n const specialFiles: Record<string, string | null> = {\n page: null,\n layout: null,\n loading: null,\n error: null,\n notFound: null,\n template: null,\n middleware: null\n };\n\n for (const entry of entries) {\n if (entry.isFile()) {\n const name = entry.name.replace(/\\.(jsx|js|tsx|ts)$/, '');\n const fullPath = path.join(currentDir, entry.name);\n const ext = path.extname(entry.name);\n\n // Only process relevant extensions\n if (!['.tsx', '.jsx', '.ts', '.js'].includes(ext)) continue;\n\n if (name === 'page') specialFiles.page = fullPath;\n if (name === 'layout') specialFiles.layout = fullPath;\n if (name === 'loading') specialFiles.loading = fullPath;\n if (name === 'error') specialFiles.error = fullPath;\n if (name === 'not-found') specialFiles.notFound = fullPath;\n if (name === 'template') specialFiles.template = fullPath;\n if (name === 'middleware' || name === '_middleware') specialFiles.middleware = fullPath;\n\n // Handle [param].tsx files directly in app/ (alternative to [param]/page.tsx)\n if (name.startsWith('[') && name.endsWith(']') && ['.tsx', '.jsx'].includes(ext)) {\n const paramName = name.slice(1, -1);\n let segmentName: string;\n\n if (paramName.startsWith('...')) {\n segmentName = '*' + paramName.slice(3);\n } else {\n segmentName = ':' + paramName;\n }\n\n const routePath = '/' + [...parentSegments, segmentName].join('/');\n\n routes.push({\n type: RouteType.PAGE,\n path: routePath.replace(/\\/+/g, '/'),\n filePath: fullPath,\n pattern: createRoutePattern(routePath),\n segments: [...parentSegments, segmentName],\n layout: specialFiles.layout || parentLayout,\n loading: specialFiles.loading,\n error: specialFiles.error,\n notFound: specialFiles.notFound,\n template: specialFiles.template,\n middleware: specialFiles.middleware || parentMiddleware,\n isServerComponent: isServerComponent(fullPath),\n isClientComponent: isClientComponent(fullPath),\n isIsland: isIsland(fullPath),\n });\n }\n }\n }\n\n // If there's a page.tsx, create a route for this directory\n if (specialFiles.page) {\n const routePath = '/' + parentSegments.join('/') || '/';\n\n routes.push({\n type: RouteType.PAGE,\n path: routePath.replace(/\\/+/g, '/') || '/',\n filePath: specialFiles.page,\n pattern: createRoutePattern(routePath || '/'),\n segments: parentSegments,\n layout: specialFiles.layout || parentLayout,\n loading: specialFiles.loading,\n error: specialFiles.error,\n notFound: specialFiles.notFound,\n template: specialFiles.template,\n middleware: specialFiles.middleware || parentMiddleware,\n isServerComponent: isServerComponent(specialFiles.page),\n isClientComponent: isClientComponent(specialFiles.page),\n isIsland: isIsland(specialFiles.page),\n });\n }\n\n // Recursively scan subdirectories in parallel\n const ignoredDirs = ['node_modules', '.velix', 'dist'];\n const dirPromises = entries\n .filter(entry => \n entry.isDirectory() && \n !entry.name.startsWith('_') && \n !entry.name.startsWith('.') &&\n !ignoredDirs.includes(entry.name)\n )\n .map(async entry => {\n const fullPath = path.join(currentDir, entry.name);\n\n // Handle route groups (parentheses) — don't add to URL\n const isGroup = entry.name.startsWith('(') && entry.name.endsWith(')');\n\n // Handle dynamic segments [param]\n let segmentName = entry.name;\n if (entry.name.startsWith('[') && entry.name.endsWith(']')) {\n segmentName = ':' + entry.name.slice(1, -1);\n if (entry.name.startsWith('[...')) {\n segmentName = '*' + entry.name.slice(4, -1);\n }\n if (entry.name.startsWith('[[...')) {\n segmentName = '*' + entry.name.slice(5, -2);\n }\n }\n\n const newSegments = isGroup ? parentSegments : [...parentSegments, segmentName];\n const newLayout = specialFiles.layout || parentLayout;\n const newMiddleware = specialFiles.middleware || parentMiddleware;\n\n return scanAppDirectory(baseDir, fullPath, newSegments, newLayout, newMiddleware);\n });\n\n const subRoutes = await Promise.all(dirPromises);\n return routes.concat(...subRoutes);\n}\n\n// ============================================================================\n// API Directory Scanner (server/api/)\n// ============================================================================\n\nexport async function scanApiDirectory(\n baseDir: string, \n currentDir: string, \n parentSegments: string[] = []\n): Promise<Route[]> {\n const entries = await fs.promises.readdir(currentDir, { withFileTypes: true });\n const routes: Route[] = [];\n\n const promises = entries.map(async entry => {\n const fullPath = path.join(currentDir, entry.name);\n\n if (entry.isDirectory()) {\n return scanApiDirectory(baseDir, fullPath, [...parentSegments, entry.name]);\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name);\n if (!['.ts', '.js'].includes(ext)) return [];\n\n const baseName = path.basename(entry.name, ext);\n // route.ts maps to the parent path, other names become segments\n const apiSegments = baseName === 'route' || baseName === 'index'\n ? parentSegments\n : [...parentSegments, baseName];\n\n const apiPath = '/api/' + apiSegments.join('/');\n\n return [{\n type: RouteType.API,\n path: apiPath.replace(/\\/+/g, '/') || '/api',\n filePath: fullPath,\n pattern: createRoutePattern(apiPath),\n segments: ['api', ...apiSegments].filter(Boolean),\n } as Route];\n }\n return [];\n });\n\n const subRoutes = await Promise.all(promises);\n return routes.concat(...subRoutes);\n}\n","import type { Route, RouteTreeNode } from '../types.js';\n\n/**\n * Finds all layouts that apply to a route\n */\nexport function findRouteLayouts(route: Route, layoutsMap: Map<string, string>): Array<{ name: string; filePath: string | undefined }> {\n const layouts: Array<{ name: string; filePath: string | undefined }> = [];\n\n // Check for segment-based layouts\n for (const segment of route.segments) {\n if (layoutsMap.has(segment)) {\n layouts.push({ name: segment, filePath: layoutsMap.get(segment) });\n }\n }\n\n // Check for route-specific layout\n if (route.layout) {\n layouts.push({ name: 'route', filePath: route.layout });\n }\n\n // Check for root layout\n if (layoutsMap.has('root')) {\n layouts.unshift({ name: 'root', filePath: layoutsMap.get('root') });\n }\n\n return layouts;\n}\n\n/**\n * Builds route tree for nested routes\n */\nexport function buildTree(routes: Route[]): RouteTreeNode {\n const tree: RouteTreeNode = { children: {}, routes: [] };\n\n for (const route of routes) {\n let current = tree;\n for (const segment of route.segments) {\n if (!current.children[segment]) {\n current.children[segment] = { children: {}, routes: [] };\n }\n current = current.children[segment];\n }\n current.routes.push(route);\n }\n\n return tree;\n}\n","import type { Route } from '../types.js';\nimport { extractParams } from './parser.js';\nimport type { RouteMatch } from './types.js';\n\n/**\n * Matches URL path against routes\n */\nexport function matchRoute(urlPath: string, routes: Route[]): RouteMatch | null {\n const normalizedPath = urlPath === '' ? '/' : urlPath.split('?')[0];\n\n for (const route of routes) {\n const match = normalizedPath.match(route.pattern);\n if (match) {\n const params = extractParams(route.path, match);\n return { ...route, params };\n }\n }\n\n return null;\n}\n","import fs from 'fs';\nimport path from 'path';\nimport type { Route, RouteTree, RouteTreeNode } from '../types.js';\nimport { RouteType } from './types.js';\nimport { scanAppDirectory, scanApiDirectory } from './scanner.js';\nimport { buildTree, findRouteLayouts } from './tree-builder.js';\nimport { matchRoute } from './matcher.js';\nimport { createRoutePattern } from './parser.js';\n\n/**\n * Velix v5 Router\n * File-based routing using the app/ directory convention\n */\n\n/**\n * Builds the complete route tree from the app/ directory asynchronously\n */\nexport async function buildRouteTree(appDir: string) {\n const projectRoot = path.dirname(appDir);\n\n const routes: {\n pages: Route[];\n api: Route[];\n layouts: Map<string, string>;\n tree: RouteTreeNode;\n appRoutes: Route[];\n rootLayout?: string;\n } = {\n pages: [],\n api: [],\n layouts: new Map(),\n tree: { children: {}, routes: [] },\n appRoutes: [],\n };\n\n // Scan app/ directory\n if (fs.existsSync(appDir)) {\n routes.appRoutes = await scanAppDirectory(appDir, appDir);\n }\n\n // Scan server/api/ for API routes\n const serverApiDir = path.join(projectRoot, 'server', 'api');\n if (fs.existsSync(serverApiDir)) {\n routes.api = await scanApiDirectory(serverApiDir, serverApiDir);\n }\n\n // Check for root layout\n const rootLayoutTsx = path.join(appDir, 'layout.tsx');\n const rootLayoutJsx = path.join(appDir, 'layout.jsx');\n if (fs.existsSync(rootLayoutTsx)) routes.rootLayout = rootLayoutTsx;\n else if (fs.existsSync(rootLayoutJsx)) routes.rootLayout = rootLayoutJsx;\n\n // Build route tree for nested routes\n routes.tree = buildTree(routes.appRoutes);\n\n return routes;\n}\n\nexport { RouteType, matchRoute, findRouteLayouts, createRoutePattern };\n\nexport default {\n buildRouteTree,\n matchRoute,\n findRouteLayouts,\n RouteType,\n createRoutePattern\n};\n","/**\n * Velix v5 Configuration System\n * Handles loading, validation, and merging of velix.config.ts\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\nimport { z } from 'zod';\nimport pc from 'picocolors';\n\n// ============================================================================\n// Configuration Schema (Zod validation)\n// ============================================================================\n\nconst AppConfigSchema = z.object({\n name: z.string().default('Velix App'),\n url: z.string().url().optional(),\n}).default({});\n\nconst ServerConfigSchema = z.object({\n port: z.number().min(1).max(65535).default(3000),\n host: z.string().default('localhost'),\n}).default({});\n\nconst RoutingConfigSchema = z.object({\n trailingSlash: z.boolean().default(false),\n}).default({});\n\nconst SEOConfigSchema = z.object({\n sitemap: z.boolean().default(true),\n robots: z.boolean().default(true),\n openGraph: z.boolean().default(true),\n}).default({});\n\nconst BuildConfigSchema = z.object({\n target: z.string().default('es2022'),\n minify: z.boolean().default(true),\n sourcemap: z.boolean().default(true),\n splitting: z.boolean().default(true),\n outDir: z.string().default('.velix'),\n}).default({});\n\nconst ExperimentalConfigSchema = z.object({\n islands: z.boolean().default(true),\n streaming: z.boolean().default(true),\n}).default({});\n\nconst PluginSchema = z.union([\n z.string(),\n z.object({\n name: z.string()\n }).passthrough(),\n]);\n\nexport const VelixConfigSchema = z.object({\n // App identity\n app: AppConfigSchema,\n\n // DevTools toggle\n devtools: z.boolean().default(true),\n\n // Server options\n server: ServerConfigSchema,\n\n // Routing options\n routing: RoutingConfigSchema,\n\n // SEO configuration\n seo: SEOConfigSchema,\n\n // Build options\n build: BuildConfigSchema,\n\n // Experimental features\n experimental: ExperimentalConfigSchema,\n\n // Plugins\n plugins: z.array(PluginSchema).default([]),\n\n // Directories (resolved automatically)\n appDir: z.string().default('app'),\n publicDir: z.string().default('public'),\n\n // Stylesheets\n styles: z.array(z.string()).default([]),\n\n // Favicon\n favicon: z.string().nullable().default(null),\n});\n\nexport type VelixConfig = z.infer<typeof VelixConfigSchema>;\n\n// ============================================================================\n// Default configuration\n// ============================================================================\n\nexport const defaultConfig: VelixConfig = VelixConfigSchema.parse({});\n\n// ============================================================================\n// defineConfig helper\n// ============================================================================\n\n/**\n * Helper function to define configuration with full type support.\n * Use this in your velix.config.ts file.\n *\n * @example\n * ```ts\n * import { defineConfig } from \"velix\";\n *\n * export default defineConfig({\n * app: { name: \"My App\" },\n * server: { port: 3000 },\n * seo: { sitemap: true }\n * });\n * ```\n */\nexport function defineConfig(config: Partial<VelixConfig>): Partial<VelixConfig> {\n return config;\n}\n\n// ============================================================================\n// Config Loader\n// ============================================================================\n\n/**\n * Loads and validates configuration from velix.config.ts\n */\nexport async function loadConfig(projectRoot: string): Promise<VelixConfig> {\n const configPathTs = path.join(projectRoot, 'velix.config.ts');\n const configPathJs = path.join(projectRoot, 'velix.config.js');\n // Support legacy config for migration\n const configPathLegacyTs = path.join(projectRoot, 'flexireact.config.ts');\n const configPathLegacyJs = path.join(projectRoot, 'flexireact.config.js');\n\n let configPath: string | null = null;\n if (fs.existsSync(configPathTs)) configPath = configPathTs;\n else if (fs.existsSync(configPathJs)) configPath = configPathJs;\n else if (fs.existsSync(configPathLegacyTs)) configPath = configPathLegacyTs;\n else if (fs.existsSync(configPathLegacyJs)) configPath = configPathLegacyJs;\n\n let userConfig: Partial<VelixConfig> = {};\n\n if (configPath) {\n try {\n const configUrl = pathToFileURL(configPath).href;\n const module = await import(`${configUrl}?t=${Date.now()}`);\n userConfig = module.default || module;\n } catch (error: any) {\n console.warn(pc.yellow(`⚠ Failed to load config: ${error.message}`));\n }\n }\n\n // Merge and validate with Zod\n const merged = deepMerge(defaultConfig, userConfig as Record<string, any>);\n\n try {\n return VelixConfigSchema.parse(merged);\n } catch (err: unknown) {\n if (err instanceof z.ZodError) {\n console.error(pc.red('✖ Configuration validation failed:'));\n for (const issue of err.issues) {\n console.error(pc.dim(` - ${issue.path.join('.')}: ${issue.message}`));\n }\n process.exit(1);\n }\n throw err;\n }\n}\n\n// ============================================================================\n// Path Resolution\n// ============================================================================\n\n/**\n * Resolves all paths in config relative to project root\n */\nexport function resolvePaths(config: VelixConfig, projectRoot: string): VelixConfig & { resolvedAppDir: string; resolvedPublicDir: string; resolvedOutDir: string } {\n return {\n ...config,\n resolvedAppDir: path.resolve(projectRoot, config.appDir),\n resolvedPublicDir: path.resolve(projectRoot, config.publicDir),\n resolvedOutDir: path.resolve(projectRoot, config.build.outDir),\n };\n}\n\n// ============================================================================\n// Utility: Deep merge\n// ============================================================================\n\nfunction deepMerge(target: Record<string, any>, source: Record<string, any>): Record<string, any> {\n const result = { ...target };\n\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n result[key] = deepMerge(target[key] || {}, source[key]);\n } else {\n result[key] = source[key];\n }\n }\n\n return result;\n}\n","/**\r\n * Velix version — single source of truth.\r\n * Update this file only when releasing a new version.\r\n */\r\nexport const VERSION = '5.3.0';\r\n","/**\n * Velix v5 Logger\n * Minimalist, professional output inspired by modern CLIs\n */\n\nimport { VERSION } from './version.js';\n\nconst colors = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n};\n\nconst c = colors;\n\nfunction getTime() {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n const seconds = String(now.getSeconds()).padStart(2, '0');\n return `${c.dim}${hours}:${minutes}:${seconds}${c.reset}`;\n}\n\nfunction getStatusColor(status: number) {\n if (status >= 500) return c.red;\n if (status >= 400) return c.yellow;\n if (status >= 300) return c.cyan;\n if (status >= 200) return c.green;\n return c.white;\n}\n\nfunction fmtTime(ms: number) {\n if (ms < 1) return `${c.gray}<1ms${c.reset}`;\n if (ms < 100) return `${c.green}${ms}ms${c.reset}`;\n if (ms < 500) return `${c.yellow}${ms}ms${c.reset}`;\n return `${c.red}${ms}ms${c.reset}`;\n}\n\nconst LOGO = `\n ${c.cyan}▲${c.reset} ${c.bold}Velix${c.reset} ${c.dim}v${VERSION}${c.reset}\n`;\n\nexport const logger = {\n logo() {\n console.log(LOGO);\n console.log(`${c.dim} ──────────────────────────────────────────────${c.reset}`);\n console.log('');\n },\n\n serverStart(config: { port: number | string; host: string; mode: string; pagesDir?: string }, startTime = Date.now()) {\n const { port, host, mode, pagesDir } = config;\n const elapsed = Date.now() - startTime;\n\n console.log(LOGO);\n console.log(` ${c.green}✔${c.reset} ${c.bold}Ready${c.reset} in ${elapsed}ms`);\n console.log('');\n console.log(` ${c.bold}Local:${c.reset} ${c.cyan}http://${host}:${port}${c.reset}`);\n console.log(` ${c.bold}Mode:${c.reset} ${mode === 'development' ? c.yellow : c.green}${mode}${c.reset}`);\n if (pagesDir) console.log(` ${c.bold}App:${c.reset} ${c.dim}${pagesDir}${c.reset}`);\n console.log('');\n },\n\n request(method: string, path: string, status: number, time: number, extra: { type?: string } = {}) {\n const statusColor = getStatusColor(status);\n const timeStr = fmtTime(time);\n\n let badge = `${c.dim}○${c.reset}`;\n if (extra.type === 'dynamic' || extra.type === 'ssr') badge = `${c.white}ƒ${c.reset}`;\n else if (extra.type === 'api') badge = `${c.cyan}λ${c.reset}`;\n\n const statusStr = `${statusColor}${status}${c.reset}`;\n console.log(` ${badge} ${c.white}${method}${c.reset} ${path} ${statusStr} ${c.dim}${timeStr}${c.reset}`);\n },\n\n info(msg: string) { console.log(` ${c.cyan}ℹ${c.reset} ${msg}`); },\n success(msg: string) { console.log(` ${c.green}✔${c.reset} ${msg}`); },\n warn(msg: string) { console.log(` ${c.yellow}⚠${c.reset} ${c.yellow}${msg}${c.reset}`); },\n\n error(msg: string, err: Error | null = null) {\n console.log(` ${c.red}✖${c.reset} ${c.red}${msg}${c.reset}`);\n if (err?.stack) {\n console.log('');\n console.log(`${c.dim}${err.stack.split('\\n').slice(1, 4).join('\\n')}${c.reset}`);\n console.log('');\n }\n },\n\n compile(file: string, time: number) {\n console.log(` ${c.white}●${c.reset} Compiling ${c.dim}${file}${c.reset} ${c.dim}(${time}ms)${c.reset}`);\n },\n\n hmr(file: string) {\n console.log(` ${c.green}↻${c.reset} Fast Refresh ${c.dim}${file}${c.reset}`);\n },\n\n plugin(name: string) {\n console.log(` ${c.cyan}◆${c.reset} Plugin ${c.dim}${name}${c.reset}`);\n },\n\n route(path: string, type: string) {\n const typeLabel = type === 'api' ? 'λ' : type === 'dynamic' ? 'ƒ' : '○';\n const color = type === 'api' ? c.cyan : type === 'dynamic' ? c.white : c.dim;\n console.log(` ${color}${typeLabel}${c.reset} ${path}`);\n },\n\n divider() { console.log(`${c.dim} ──────────────────────────────────────────────${c.reset}`); },\n blank() { console.log(''); },\n\n portInUse(port: number | string) {\n this.error(`Port ${port} is already in use.`);\n this.blank();\n console.log(` ${c.dim}Try:${c.reset}`);\n console.log(` 1. Kill the process on port ${port}`);\n console.log(` 2. Use a different port via PORT env var`);\n this.blank();\n },\n\n build(stats: { time: number }) {\n this.blank();\n console.log(` ${c.green}✔${c.reset} Build completed`);\n this.blank();\n console.log(` ${c.dim}Total time:${c.reset} ${c.white}${stats.time}ms${c.reset}`);\n this.blank();\n },\n};\n\nexport default logger;\n","/**\n * Velix v5 Metadata & SEO System\n *\n * First-class SEO with automatic:\n * - Meta tags, Open Graph, Twitter Cards\n * - Canonical URLs, robots, sitemaps\n * - JSON-LD structured data\n * - Viewport, theme color, icons\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\n// ============================================================================\n// Types (comprehensive metadata interface)\n// ============================================================================\n\nexport interface Metadata {\n title?: string | { default: string; template?: string; absolute?: string };\n description?: string;\n keywords?: string | string[];\n authors?: Author | Author[];\n creator?: string;\n publisher?: string;\n robots?: Robots | string;\n icons?: Icons;\n manifest?: string;\n openGraph?: OpenGraph;\n twitter?: Twitter;\n verification?: Verification;\n alternates?: Alternates;\n viewport?: Viewport | string;\n themeColor?: ThemeColor | ThemeColor[];\n colorScheme?: 'normal' | 'light' | 'dark' | 'light dark' | 'dark light';\n formatDetection?: FormatDetection;\n metadataBase?: URL | string;\n generator?: string;\n applicationName?: string;\n referrer?: string;\n other?: Record<string, string | string[]>;\n}\n\nexport interface Author { name?: string; url?: string; }\nexport interface Robots { index?: boolean; follow?: boolean; noarchive?: boolean; nosnippet?: boolean; noimageindex?: boolean; nocache?: boolean; googleBot?: Robots | string; }\nexport interface Icons { icon?: IconDescriptor | IconDescriptor[]; shortcut?: IconDescriptor | IconDescriptor[]; apple?: IconDescriptor | IconDescriptor[]; other?: IconDescriptor[]; }\nexport interface IconDescriptor { url: string; type?: string; sizes?: string; color?: string; rel?: string; media?: string; }\nexport interface OpenGraph {\n type?: string; url?: string; title?: string; description?: string; siteName?: string;\n locale?: string; images?: OGImage | OGImage[]; videos?: OGVideo | OGVideo[];\n determiner?: string; publishedTime?: string; modifiedTime?: string;\n expirationTime?: string; authors?: string | string[]; section?: string; tags?: string[];\n}\nexport interface OGImage { url: string; secureUrl?: string; type?: string; width?: number; height?: number; alt?: string; }\nexport interface OGVideo { url: string; secureUrl?: string; type?: string; width?: number; height?: number; }\nexport interface Twitter {\n card?: 'summary' | 'summary_large_image' | 'app' | 'player';\n site?: string; siteId?: string; creator?: string; creatorId?: string;\n title?: string; description?: string; images?: string | TwitterImage | (string | TwitterImage)[];\n}\nexport interface TwitterImage { url: string; alt?: string; }\nexport interface Verification { google?: string | string[]; yahoo?: string | string[]; yandex?: string | string[]; other?: Record<string, string | string[]>; }\nexport interface Alternates { canonical?: string; languages?: Record<string, string>; media?: Record<string, string>; }\nexport interface Viewport { width?: number | 'device-width'; height?: number | 'device-height'; initialScale?: number; minimumScale?: number; maximumScale?: number; userScalable?: boolean; viewportFit?: 'auto' | 'cover' | 'contain'; }\nexport interface ThemeColor { color: string; media?: string; }\nexport interface FormatDetection { telephone?: boolean; date?: boolean; address?: boolean; email?: boolean; }\n\n// ============================================================================\n// Metadata Tag Generation\n// ============================================================================\n\nexport function generateMetadataTags(metadata: Metadata, baseUrl?: string): string {\n const tags: string[] = [];\n const base = baseUrl || metadata.metadataBase?.toString() || '';\n\n // Title\n if (metadata.title) {\n const title = typeof metadata.title === 'string'\n ? metadata.title\n : metadata.title.absolute || (metadata.title.template\n ? metadata.title.template.replace('%s', metadata.title.default)\n : metadata.title.default);\n tags.push(`<title>${escapeHtml(title)}</title>`);\n }\n\n if (metadata.description) tags.push(`<meta name=\"description\" content=\"${escapeHtml(metadata.description)}\">`);\n\n if (metadata.keywords) {\n const kw = Array.isArray(metadata.keywords) ? metadata.keywords.join(', ') : metadata.keywords;\n tags.push(`<meta name=\"keywords\" content=\"${escapeHtml(kw)}\">`);\n }\n\n if (metadata.authors) {\n const authors = Array.isArray(metadata.authors) ? metadata.authors : [metadata.authors];\n authors.forEach(a => {\n if (a.name) tags.push(`<meta name=\"author\" content=\"${escapeHtml(a.name)}\">`);\n if (a.url) tags.push(`<link rel=\"author\" href=\"${a.url}\">`);\n });\n }\n\n if (metadata.generator) tags.push(`<meta name=\"generator\" content=\"${escapeHtml(metadata.generator)}\">`);\n if (metadata.applicationName) tags.push(`<meta name=\"application-name\" content=\"${escapeHtml(metadata.applicationName)}\">`);\n if (metadata.referrer) tags.push(`<meta name=\"referrer\" content=\"${metadata.referrer}\">`);\n\n // Robots\n if (metadata.robots) {\n if (typeof metadata.robots === 'string') {\n tags.push(`<meta name=\"robots\" content=\"${metadata.robots}\">`);\n } else {\n tags.push(`<meta name=\"robots\" content=\"${generateRobotsContent(metadata.robots)}\">`);\n if (metadata.robots.googleBot) {\n const gbc = typeof metadata.robots.googleBot === 'string' ? metadata.robots.googleBot : generateRobotsContent(metadata.robots.googleBot);\n tags.push(`<meta name=\"googlebot\" content=\"${gbc}\">`);\n }\n }\n }\n\n // Viewport\n if (metadata.viewport) {\n const vc = typeof metadata.viewport === 'string' ? metadata.viewport : generateViewportContent(metadata.viewport);\n tags.push(`<meta name=\"viewport\" content=\"${vc}\">`);\n }\n\n // Theme Color\n if (metadata.themeColor) {\n const tcs = Array.isArray(metadata.themeColor) ? metadata.themeColor : [metadata.themeColor];\n tcs.forEach(tc => {\n const media = typeof tc !== 'string' && tc.media ? ` media=\"${tc.media}\"` : '';\n const color = typeof tc === 'string' ? tc : tc.color;\n tags.push(`<meta name=\"theme-color\" content=\"${color}\"${media}>`);\n });\n }\n\n if (metadata.colorScheme) tags.push(`<meta name=\"color-scheme\" content=\"${metadata.colorScheme}\">`);\n\n // Icons\n if (metadata.icons) {\n const addIcon = (icon: IconDescriptor, defaultRel: string) => {\n const rel = icon.rel || defaultRel;\n const attrs = [\n icon.type ? ` type=\"${icon.type}\"` : '',\n icon.sizes ? ` sizes=\"${icon.sizes}\"` : '',\n icon.color ? ` color=\"${icon.color}\"` : '',\n ].join('');\n tags.push(`<link rel=\"${rel}\" href=\"${resolveUrl(icon.url, base)}\"${attrs}>`);\n };\n if (metadata.icons.icon) { (Array.isArray(metadata.icons.icon) ? metadata.icons.icon : [metadata.icons.icon]).forEach(i => addIcon(i, 'icon')); }\n if (metadata.icons.apple) { (Array.isArray(metadata.icons.apple) ? metadata.icons.apple : [metadata.icons.apple]).forEach(i => addIcon(i, 'apple-touch-icon')); }\n }\n\n if (metadata.manifest) tags.push(`<link rel=\"manifest\" href=\"${resolveUrl(metadata.manifest, base)}\">`);\n\n // Open Graph\n if (metadata.openGraph) {\n const og = metadata.openGraph;\n if (og.type) tags.push(`<meta property=\"og:type\" content=\"${og.type}\">`);\n if (og.title) tags.push(`<meta property=\"og:title\" content=\"${escapeHtml(og.title)}\">`);\n if (og.description) tags.push(`<meta property=\"og:description\" content=\"${escapeHtml(og.description)}\">`);\n if (og.url) tags.push(`<meta property=\"og:url\" content=\"${resolveUrl(og.url, base)}\">`);\n if (og.siteName) tags.push(`<meta property=\"og:site_name\" content=\"${escapeHtml(og.siteName)}\">`);\n if (og.locale) tags.push(`<meta property=\"og:locale\" content=\"${og.locale}\">`);\n if (og.images) {\n (Array.isArray(og.images) ? og.images : [og.images]).forEach(img => {\n tags.push(`<meta property=\"og:image\" content=\"${resolveUrl(img.url, base)}\">`);\n if (img.width) tags.push(`<meta property=\"og:image:width\" content=\"${img.width}\">`);\n if (img.height) tags.push(`<meta property=\"og:image:height\" content=\"${img.height}\">`);\n if (img.alt) tags.push(`<meta property=\"og:image:alt\" content=\"${escapeHtml(img.alt)}\">`);\n });\n }\n if (og.type === 'article') {\n if (og.publishedTime) tags.push(`<meta property=\"article:published_time\" content=\"${og.publishedTime}\">`);\n if (og.modifiedTime) tags.push(`<meta property=\"article:modified_time\" content=\"${og.modifiedTime}\">`);\n if (og.tags) og.tags.forEach(t => tags.push(`<meta property=\"article:tag\" content=\"${escapeHtml(t)}\">`));\n }\n }\n\n // Twitter\n if (metadata.twitter) {\n const tw = metadata.twitter;\n if (tw.card) tags.push(`<meta name=\"twitter:card\" content=\"${tw.card}\">`);\n if (tw.site) tags.push(`<meta name=\"twitter:site\" content=\"${tw.site}\">`);\n if (tw.creator) tags.push(`<meta name=\"twitter:creator\" content=\"${tw.creator}\">`);\n if (tw.title) tags.push(`<meta name=\"twitter:title\" content=\"${escapeHtml(tw.title)}\">`);\n if (tw.description) tags.push(`<meta name=\"twitter:description\" content=\"${escapeHtml(tw.description)}\">`);\n if (tw.images) {\n (Array.isArray(tw.images) ? tw.images : [tw.images]).forEach(img => {\n const url = typeof img === 'string' ? img : img.url;\n tags.push(`<meta name=\"twitter:image\" content=\"${resolveUrl(url, base)}\">`);\n });\n }\n }\n\n // Verification\n if (metadata.verification) {\n if (metadata.verification.google) {\n (Array.isArray(metadata.verification.google) ? metadata.verification.google : [metadata.verification.google])\n .forEach(v => tags.push(`<meta name=\"google-site-verification\" content=\"${v}\">`));\n }\n }\n\n // Alternates\n if (metadata.alternates) {\n if (metadata.alternates.canonical) tags.push(`<link rel=\"canonical\" href=\"${resolveUrl(metadata.alternates.canonical, base)}\">`);\n if (metadata.alternates.languages) {\n Object.entries(metadata.alternates.languages).forEach(([lang, url]) => {\n tags.push(`<link rel=\"alternate\" hreflang=\"${lang}\" href=\"${resolveUrl(url, base)}\">`);\n });\n }\n }\n\n return tags.join('\\n ');\n}\n\n// ============================================================================\n// Merge & JSON-LD\n// ============================================================================\n\nexport function mergeMetadata(parent: Metadata, child: Metadata): Metadata {\n return {\n ...parent, ...child,\n openGraph: child.openGraph ? { ...parent.openGraph, ...child.openGraph } : parent.openGraph,\n twitter: child.twitter ? { ...parent.twitter, ...child.twitter } : parent.twitter,\n icons: child.icons ? { ...parent.icons, ...child.icons } : parent.icons,\n alternates: child.alternates ? { ...parent.alternates, ...child.alternates } : parent.alternates,\n };\n}\n\nexport function generateJsonLd(data: Record<string, unknown>): string {\n return `<script type=\"application/ld+json\">${JSON.stringify(data)}</script>`;\n}\n\nexport const jsonLd = {\n website: (c: { name: string; url: string; description?: string }) => ({\n '@context': 'https://schema.org', '@type': 'WebSite', name: c.name, url: c.url, description: c.description\n }),\n article: (c: { headline: string; description?: string; image?: string | string[]; datePublished: string; dateModified?: string; author: { name: string; url?: string } | { name: string; url?: string }[] }) => ({\n '@context': 'https://schema.org', '@type': 'Article', headline: c.headline, description: c.description,\n image: c.image, datePublished: c.datePublished, dateModified: c.dateModified || c.datePublished,\n author: Array.isArray(c.author) ? c.author.map(a => ({ '@type': 'Person', ...a })) : { '@type': 'Person', ...c.author }\n }),\n organization: (c: { name: string; url: string; logo?: string; sameAs?: string[] }) => ({\n '@context': 'https://schema.org', '@type': 'Organization', name: c.name, url: c.url, logo: c.logo, sameAs: c.sameAs\n }),\n breadcrumb: (items: { name: string; url: string }[]) => ({\n '@context': 'https://schema.org', '@type': 'BreadcrumbList',\n itemListElement: items.map((item, i) => ({ '@type': 'ListItem', position: i + 1, name: item.name, item: item.url }))\n }),\n};\n\n// ============================================================================\n// Automatic SEO Generation\n// ============================================================================\n\n/**\n * Generate sitemap.xml content from routes\n */\nexport function generateSitemap(routes: Array<{ type: string; path: string }>, baseUrl: string): string {\n const urls = routes\n .filter(r => r.type === 'page' && !r.path.includes(':') && !r.path.includes('*'))\n .map(r => {\n const loc = `${baseUrl.replace(/\\/$/, '')}${r.path}`;\n return ` <url>\\n <loc>${loc}</loc>\\n <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\\n <changefreq>weekly</changefreq>\\n <priority>${r.path === '/' ? '1.0' : '0.8'}</priority>\\n </url>`;\n });\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\\n${urls.join('\\n')}\\n</urlset>`;\n}\n\n/**\n * Generate robots.txt content\n */\nexport function generateRobotsTxt(baseUrl: string, options: { disallow?: string[]; allow?: string[] } = {}): string {\n const lines = ['User-agent: *'];\n if (options.allow) options.allow.forEach(p => lines.push(`Allow: ${p}`));\n if (options.disallow) options.disallow.forEach(p => lines.push(`Disallow: ${p}`));\n else lines.push('Allow: /');\n lines.push('', `Sitemap: ${baseUrl.replace(/\\/$/, '')}/sitemap.xml`);\n return lines.join('\\n');\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction escapeHtml(str: string): string {\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');\n}\n\nfunction resolveUrl(url: string, base: string): string {\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//')) return url;\n return base ? `${base.replace(/\\/$/, '')}${url.startsWith('/') ? '' : '/'}${url}` : url;\n}\n\nfunction generateRobotsContent(robots: Robots): string {\n const parts: string[] = [];\n if (robots.index !== undefined) parts.push(robots.index ? 'index' : 'noindex');\n if (robots.follow !== undefined) parts.push(robots.follow ? 'follow' : 'nofollow');\n if (robots.noarchive) parts.push('noarchive');\n if (robots.nosnippet) parts.push('nosnippet');\n if (robots.noimageindex) parts.push('noimageindex');\n return parts.join(', ') || 'index, follow';\n}\n\nfunction generateViewportContent(viewport: Viewport): string {\n const parts: string[] = [];\n if (viewport.width) parts.push(`width=${viewport.width}`);\n if (viewport.height) parts.push(`height=${viewport.height}`);\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`);\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`);\n if (viewport.userScalable !== undefined) parts.push(`user-scalable=${viewport.userScalable ? 'yes' : 'no'}`);\n return parts.join(', ') || 'width=device-width, initial-scale=1';\n}\n\nexport default { generateMetadataTags, mergeMetadata, generateJsonLd, jsonLd, generateSitemap, generateRobotsTxt };\n","/**\n * Velix v5 Middleware System\n * Request processing pipeline with composable middleware\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface MiddlewareRequest {\n url: string;\n method: string;\n headers: Record<string, string | string[] | undefined>;\n cookies: Record<string, string>;\n params: Record<string, string>;\n query: Record<string, string>;\n body?: unknown;\n raw: import('http').IncomingMessage;\n}\n\nexport interface MiddlewareResponse {\n status: (code: number) => MiddlewareResponse;\n header: (name: string, value: string) => MiddlewareResponse;\n json: (data: unknown) => void;\n redirect: (url: string, status?: number) => void;\n rewrite: (url: string) => void;\n next: () => Promise<void>;\n _statusCode: number;\n _headers: Record<string, string>;\n _redirectUrl: string | null;\n _rewriteUrl: string | null;\n _ended: boolean;\n}\n\nexport type MiddlewareFunction = (\n req: MiddlewareRequest,\n res: MiddlewareResponse,\n next: () => Promise<void>\n) => void | Promise<void>;\n\nexport type MiddlewareResult = {\n continue: boolean;\n rewritten: boolean;\n};\n\n// ============================================================================\n// Built-in Middleware Registry\n// ============================================================================\n\nexport const middlewares = {\n cors(options: {\n origin?: string | string[];\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n maxAge?: number;\n } = {}): MiddlewareFunction {\n const {\n origin = '*',\n methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n headers: allowHeaders = ['Content-Type', 'Authorization'],\n credentials = false,\n maxAge = 86400\n } = options;\n\n return async (req, res, next) => {\n const originHeader = typeof origin === 'string' ? origin : origin.includes(req.headers.origin as string) ? req.headers.origin as string : '';\n\n res.header('Access-Control-Allow-Origin', originHeader);\n res.header('Access-Control-Allow-Methods', methods.join(', '));\n res.header('Access-Control-Allow-Headers', allowHeaders.join(', '));\n res.header('Access-Control-Max-Age', String(maxAge));\n\n if (credentials) {\n res.header('Access-Control-Allow-Credentials', 'true');\n }\n\n if (req.method === 'OPTIONS') {\n res.status(204);\n return;\n }\n\n await next();\n };\n },\n\n rateLimit(options: {\n windowMs?: number;\n max?: number;\n message?: string;\n } = {}): MiddlewareFunction {\n const { windowMs = 60000, max = 100, message = 'Too many requests' } = options;\n const store = new Map<string, { count: number; resetTime: number }>();\n\n return async (req, res, next) => {\n const ip = req.headers['x-forwarded-for'] as string || 'unknown';\n const now = Date.now();\n const record = store.get(ip);\n\n if (!record || now > record.resetTime) {\n store.set(ip, { count: 1, resetTime: now + windowMs });\n } else if (record.count >= max) {\n res.status(429).json({ error: message });\n return;\n } else {\n record.count++;\n }\n\n await next();\n };\n },\n\n security(): MiddlewareFunction {\n return async (_req, res, next) => {\n res.header('X-Content-Type-Options', 'nosniff');\n res.header('X-Frame-Options', 'DENY');\n res.header('X-XSS-Protection', '1; mode=block');\n res.header('Referrer-Policy', 'strict-origin-when-cross-origin');\n await next();\n };\n },\n};\n\n// ============================================================================\n// Middleware Loader\n// ============================================================================\n\n/**\n * Loads proxy middleware from the project root (proxy.ts or proxy.js)\n */\nexport async function loadMiddleware(projectRoot: string): Promise<MiddlewareFunction[]> {\n const fns: MiddlewareFunction[] = [];\n const possibleFiles = ['proxy.ts', 'proxy.js'];\n\n for (const file of possibleFiles) {\n const filePath = path.join(projectRoot, file);\n if (!fs.existsSync(filePath)) continue;\n\n try {\n const { pathToFileURL } = await import('url');\n const url = pathToFileURL(filePath).href;\n const mod = await import(`${url}?t=${Date.now()}`);\n const fn = mod.default || mod.proxy || mod.middleware;\n if (typeof fn === 'function') {\n fns.push(fn);\n break; // Only load the first found proxy file\n }\n } catch (err: unknown) {\n const error = err as Error;\n console.warn(`⚠ Failed to load proxy ${file}: ${error.message}`);\n }\n }\n\n return fns;\n}\n\n// ============================================================================\n// Middleware Runner\n// ============================================================================\n\n/**\n * Runs middleware chain for a request\n */\nexport async function runMiddleware(\n req: import('http').IncomingMessage,\n res: import('http').ServerResponse,\n fns: MiddlewareFunction[]\n): Promise<MiddlewareResult> {\n const result: MiddlewareResult = { continue: true, rewritten: false };\n if (fns.length === 0) return result;\n\n const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);\n const cookies: Record<string, string> = {};\n const cookieHeader = req.headers.cookie;\n if (cookieHeader) {\n cookieHeader.split(';').forEach(c => {\n const [k, ...v] = c.split('=');\n if (k) cookies[k.trim()] = v.join('=').trim();\n });\n }\n\n const mReq: MiddlewareRequest = {\n url: req.url || '/',\n method: req.method || 'GET',\n headers: req.headers as Record<string, string>,\n cookies,\n params: {},\n query: Object.fromEntries(url.searchParams),\n raw: req,\n };\n\n let ended = false;\n const mRes: MiddlewareResponse = {\n _statusCode: 200,\n _headers: {},\n _redirectUrl: null,\n _rewriteUrl: null,\n _ended: false,\n status(code) { this._statusCode = code; return this; },\n header(name, value) { this._headers[name] = value; return this; },\n json(data) {\n this._headers['Content-Type'] = 'application/json';\n res.writeHead(this._statusCode, this._headers);\n res.end(JSON.stringify(data));\n this._ended = true;\n ended = true;\n },\n redirect(url, status = 307) {\n this._redirectUrl = url;\n this._statusCode = status;\n res.writeHead(status, { Location: url, ...this._headers });\n res.end();\n this._ended = true;\n ended = true;\n },\n rewrite(url) {\n this._rewriteUrl = url;\n req.url = url;\n result.rewritten = true;\n },\n async next() { /* handled by chain */ },\n };\n\n // Run middleware chain\n let index = 0;\n const next = async () => {\n if (ended || index >= fns.length) return;\n const fn = fns[index++];\n await fn(mReq, mRes, next);\n };\n\n await next();\n\n // Apply headers that were set\n if (!ended) {\n for (const [key, value] of Object.entries(mRes._headers)) {\n res.setHeader(key, value);\n }\n }\n\n result.continue = !ended;\n return result;\n}\n\n/**\n * Compose multiple middleware into one\n */\nexport function composeMiddleware(...fns: MiddlewareFunction[]): MiddlewareFunction {\n return async (req, res, next) => {\n let index = 0;\n const run = async () => {\n if (index >= fns.length) { await next(); return; }\n const fn = fns[index++];\n await fn(req, res, run);\n };\n await run();\n };\n}\n","/**\n * Velix v5 Plugin System\n * Extensible hook-based plugin architecture\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\n\n// ============================================================================\n// Plugin Hooks\n// ============================================================================\n\nexport const PluginHooks = {\n CONFIG: 'config',\n SERVER_START: 'server:start',\n REQUEST: 'request',\n RESPONSE: 'response',\n ROUTES_LOADED: 'routes:loaded',\n BEFORE_RENDER: 'render:before',\n AFTER_RENDER: 'render:after',\n BUILD_START: 'build:start',\n BUILD_END: 'build:end',\n} as const;\n\nexport type PluginHook = typeof PluginHooks[keyof typeof PluginHooks];\n\n// ============================================================================\n// Plugin Interface\n// ============================================================================\n\nexport interface PluginHookArgs {\n [PluginHooks.CONFIG]: [config: import('../config.js').VelixConfig];\n [PluginHooks.SERVER_START]: [context: { config: import('../config.js').VelixConfig; isDev: boolean; projectRoot: string }, isDev: boolean];\n [PluginHooks.REQUEST]: [req: import('http').IncomingMessage, res: import('http').ServerResponse];\n [PluginHooks.RESPONSE]: [req: import('http').IncomingMessage, res: import('http').ServerResponse, duration: number];\n [PluginHooks.ROUTES_LOADED]: [routes: import('../types.js').RouteTree];\n [PluginHooks.BEFORE_RENDER]: [html: string, context: { route: import('../types.js').Route; config: import('../config.js').VelixConfig; isDev: boolean }];\n [PluginHooks.AFTER_RENDER]: [html: string, context: { route: import('../types.js').Route; config: import('../config.js').VelixConfig; isDev: boolean }];\n [PluginHooks.BUILD_START]: [];\n [PluginHooks.BUILD_END]: [stats: { time: number }];\n}\n\nexport interface VelixPluginDefinition {\n name: string;\n version?: string;\n setup?: (config: import('../config.js').VelixConfig) => void | Promise<void>;\n hooks?: { [K in PluginHook]?: (...args: PluginHookArgs[K]) => unknown };\n [key: string]: unknown; // Allow for Zod passthrough and extra properties\n}\n\n// ============================================================================\n// Plugin Manager\n// ============================================================================\n\nexport class PluginManager {\n private plugins: VelixPluginDefinition[] = [];\n private hooks: Map<string, Array<(...args: any[]) => any>> = new Map();\n\n /**\n * Register a plugin\n */\n register(plugin: VelixPluginDefinition) {\n this.plugins.push(plugin);\n\n // Register hooks\n if (plugin.hooks) {\n for (const [hookName, handler] of Object.entries(plugin.hooks)) {\n if (handler) {\n const existing = this.hooks.get(hookName) || [];\n existing.push(handler);\n this.hooks.set(hookName, existing);\n }\n }\n }\n }\n\n /**\n * Run a hook with arguments\n */\n async runHook<K extends PluginHook>(hookName: K, ...args: PluginHookArgs[K]): Promise<void> {\n const handlers = this.hooks.get(hookName) || [];\n for (const handler of handlers) {\n await handler(...args);\n }\n }\n\n /**\n * Run a waterfall hook — each handler transforms the first argument\n */\n async runWaterfallHook<K extends PluginHook>(hookName: K, value: PluginHookArgs[K][0], ...args: PluginHookArgs[K] extends [unknown, ...infer Rest] ? Rest : []): Promise<PluginHookArgs[K][0]> {\n const handlers = this.hooks.get(hookName) || [];\n let result = value;\n for (const handler of handlers) {\n const transformed = await handler(result, ...args);\n if (transformed !== undefined) result = transformed;\n }\n return result;\n }\n\n /**\n * Get all registered plugins\n */\n getPlugins(): VelixPluginDefinition[] {\n return [...this.plugins];\n }\n\n /**\n * Check if a plugin is registered\n */\n hasPlugin(name: string): boolean {\n return this.plugins.some(p => p.name === name);\n }\n}\n\n// ============================================================================\n// Global Instance\n// ============================================================================\n\nexport const pluginManager = new PluginManager();\n\n// ============================================================================\n// Plugin Loader\n// ============================================================================\n\n/**\n * Load plugins from project configuration\n */\nexport async function loadPlugins(projectRoot: string, config: { plugins?: unknown[] }): Promise<void> {\n const pluginEntries = config.plugins || [];\n\n for (const entry of pluginEntries) {\n try {\n if (typeof entry === 'string') {\n // Load plugin by name (from plugins/ dir or node_modules)\n const localPath = path.join(projectRoot, 'plugins', entry + '.ts');\n const localPathJs = path.join(projectRoot, 'plugins', entry + '.js');\n const localPathDir = path.join(projectRoot, 'plugins', entry, 'index.ts');\n\n let pluginPath: string | null = null;\n if (fs.existsSync(localPath)) pluginPath = localPath;\n else if (fs.existsSync(localPathJs)) pluginPath = localPathJs;\n else if (fs.existsSync(localPathDir)) pluginPath = localPathDir;\n\n if (pluginPath) {\n const url = pathToFileURL(pluginPath).href;\n const mod = await import(`${url}?t=${Date.now()}`);\n const plugin = mod.default || mod;\n if (plugin.name) {\n pluginManager.register(plugin);\n }\n } else {\n // Try node_modules\n try {\n const mod = await import(entry);\n const plugin = mod.default || mod;\n if (plugin.name) pluginManager.register(plugin);\n } catch {\n console.warn(`⚠ Plugin not found: ${entry}`);\n }\n }\n } else if (typeof entry === 'object' && entry !== null && 'name' in entry) {\n // Inline plugin definition\n pluginManager.register(entry as VelixPluginDefinition);\n }\n } catch (err: unknown) {\n const error = err as Error;\n console.warn(`⚠ Failed to load plugin: ${error?.message || String(error)}`);\n }\n }\n}\n\n// ============================================================================\n// Plugin Definition Helper\n// ============================================================================\n\n/**\n * Helper to define a Velix plugin with type safety.\n *\n * @example\n * ```ts\n * export default definePlugin({\n * name: 'my-plugin',\n * hooks: {\n * 'server:start': (server) => {\n * console.log('Server started!');\n * }\n * }\n * });\n * ```\n */\nexport function definePlugin(definition: VelixPluginDefinition): VelixPluginDefinition {\n return definition;\n}\n\n// ============================================================================\n// Built-in Plugins\n// ============================================================================\n\nexport const builtinPlugins = {\n /**\n * Security headers plugin\n */\n security: definePlugin({\n name: 'velix:security',\n hooks: {\n [PluginHooks.RESPONSE]: (_req: unknown, res: unknown) => {\n const response = res as import('http').ServerResponse;\n if (!response.headersSent) {\n response.setHeader('X-Content-Type-Options', 'nosniff');\n response.setHeader('X-Frame-Options', 'DENY');\n response.setHeader('X-XSS-Protection', '1; mode=block');\n }\n }\n }\n }),\n\n /**\n * Request logging plugin\n */\n logger: definePlugin({\n name: 'velix:logger',\n hooks: {\n [PluginHooks.RESPONSE]: (req: unknown, _res: unknown, duration: unknown) => {\n const request = req as import('http').IncomingMessage;\n console.log(` ${request.method} ${request.url} ${duration}ms`);\n }\n }\n }),\n};\n","/**\n * Velix AI Plugin - Utilities\n * @module velix-plugin-ai/utils\n */\n\n/**\n * Retry a function with exponential backoff\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n options: { maxRetries: number; retryDelay: number } = { maxRetries: 3, retryDelay: 1000 }\n): Promise<T> {\n let lastError: Error | undefined;\n \n for (let i = 0; i < options.maxRetries; i++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n \n if (i < options.maxRetries - 1) {\n const delay = options.retryDelay * Math.pow(2, i);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n }\n \n throw lastError || new Error('Retry failed');\n}\n\n/**\n * Safe JSON parsing with fallback\n */\nexport function safeJsonParse<T = unknown>(text: string, fallback?: T): T | null {\n try {\n // Try to extract JSON from markdown code blocks\n const jsonMatch = text.match(/```json\\n([\\s\\S]*?)\\n```/);\n if (jsonMatch) {\n return JSON.parse(jsonMatch[1]);\n }\n \n // Try to parse the whole text\n return JSON.parse(text);\n } catch {\n return fallback ?? null;\n }\n}\n\n/**\n * Build a prompt from a template\n */\nexport function buildPrompt(template: string, variables: Record<string, unknown>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => {\n const val = variables[key];\n return val != null ? String(val) : '';\n });\n}\n\n/**\n * Validate API key\n */\nexport function validateApiKey(apiKey: string | undefined, provider: string): void {\n if (!apiKey || apiKey.trim() === '') {\n throw new Error(`API key is required for ${provider} provider`);\n }\n}\n\n/**\n * Validate input\n */\nexport function validateInput(input: Record<string, unknown>, requiredFields: string[]): void {\n for (const field of requiredFields) {\n if (!(field in input) || input[field] === undefined || input[field] === null) {\n throw new Error(`Missing required field: ${field}`);\n }\n }\n}\n\n/**\n * Create a streaming text decoder\n */\nexport function createStreamDecoder() {\n const decoder = new TextDecoder();\n \n return (chunk: Uint8Array): string => {\n return decoder.decode(chunk, { stream: true });\n };\n}\n\n/**\n * Parse SSE (Server-Sent Events) data\n */\nexport function parseSSE(line: string): unknown {\n if (!line.startsWith('data: ')) {\n return null;\n }\n \n const data = line.slice(6);\n \n if (data === '[DONE]') {\n return { done: true };\n }\n \n try {\n return JSON.parse(data);\n } catch {\n return null;\n }\n}\n\n/**\n * Sanitize input text\n */\nexport function sanitizeInput(text: string): string {\n return text.trim().replace(/\\0/g, '');\n}\n\n/**\n * Count tokens (rough estimation)\n */\nexport function estimateTokens(text: string): number {\n // Rough estimation: ~4 characters per token\n return Math.ceil(text.length / 4);\n}\n\n/**\n * Truncate text to max tokens\n */\nexport function truncateToTokens(text: string, maxTokens: number): string {\n const estimatedTokens = estimateTokens(text);\n \n if (estimatedTokens <= maxTokens) {\n return text;\n }\n \n const maxChars = maxTokens * 4;\n return text.slice(0, maxChars) + '...';\n}\n","/**\n * Velix AI Plugin - OpenAI Provider\n * @module velix-plugin-ai/providers/openai\n */\n\nimport type {\n AIProvider,\n AIInput,\n AIResponse,\n ChatInput,\n AIStreamChunk,\n EmbedInput,\n EmbedResponse\n} from '../types';\nimport { validateApiKey, retry, parseSSE } from '../utils';\n\nexport interface OpenAIConfig {\n apiKey: string;\n baseUrl?: string;\n defaultModel?: string;\n organization?: string;\n retry?: {\n maxRetries: number;\n retryDelay: number;\n };\n}\n\nexport class OpenAIProvider implements AIProvider {\n name = 'openai' as const;\n private apiKey: string;\n private baseUrl: string;\n private defaultModel: string;\n private organization?: string;\n private retryConfig: { maxRetries: number; retryDelay: number };\n\n constructor(config: OpenAIConfig) {\n validateApiKey(config.apiKey, 'OpenAI');\n \n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl || 'https://api.openai.com/v1';\n this.defaultModel = config.defaultModel || 'gpt-4o-mini';\n this.organization = config.organization;\n this.retryConfig = config.retry || { maxRetries: 3, retryDelay: 1000 };\n }\n\n async generate(input: AIInput): Promise<AIResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n messages: [\n ...(input.system ? [{ role: 'system', content: input.system }] : []),\n { role: 'user', content: input.prompt }\n ],\n temperature: input.temperature ?? 0.7,\n max_tokens: input.maxTokens,\n stop: input.stop,\n ...input.options\n })\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(`OpenAI API error: ${error.error?.message || response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n text: data.choices[0].message.content,\n provider: 'openai',\n model: data.model,\n usage: {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens\n },\n raw: data\n };\n }, this.retryConfig);\n }\n\n async chat(input: ChatInput): Promise<AIResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n messages: input.messages,\n temperature: input.temperature ?? 0.7,\n max_tokens: input.maxTokens,\n stop: input.stop,\n ...input.options\n })\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(`OpenAI API error: ${error.error?.message || response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n text: data.choices[0].message.content,\n provider: 'openai',\n model: data.model,\n usage: {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens\n },\n raw: data\n };\n }, this.retryConfig);\n }\n\n async *stream(input: AIInput): AsyncIterable<AIStreamChunk> {\n const response = await fetch(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n messages: [\n ...(input.system ? [{ role: 'system', content: input.system }] : []),\n { role: 'user', content: input.prompt }\n ],\n temperature: input.temperature ?? 0.7,\n max_tokens: input.maxTokens,\n stop: input.stop,\n stream: true,\n ...input.options\n })\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(`OpenAI API error: ${error.error?.message || response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('Response body is not readable');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n \n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n\n const parsed = parseSSE(trimmed) as { choices?: Array<{ delta?: { content?: string } }>; model?: string } | null;\n if (!parsed) continue;\n\n const delta = parsed.choices?.[0]?.delta?.content;\n if (delta) {\n yield {\n text: delta,\n done: false,\n provider: 'openai',\n model: parsed.model\n };\n }\n }\n }\n\n yield { text: '', done: true, provider: 'openai' };\n } finally {\n reader.releaseLock();\n }\n }\n\n async embed(input: EmbedInput): Promise<EmbedResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/embeddings`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n model: input.model || 'text-embedding-3-small',\n input: input.text\n })\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(`OpenAI API error: ${error.error?.message || response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n embedding: data.data[0].embedding,\n provider: 'openai',\n model: data.model\n };\n }, this.retryConfig);\n }\n\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`\n };\n\n if (this.organization) {\n headers['OpenAI-Organization'] = this.organization;\n }\n\n return headers;\n }\n}\n","/**\n * Velix AI Plugin - Ollama Provider\n * @module velix-plugin-ai/providers/ollama\n */\n\nimport type {\n AIProvider,\n AIInput,\n AIResponse,\n ChatInput,\n AIStreamChunk,\n EmbedInput,\n EmbedResponse\n} from '../types';\nimport { retry } from '../utils';\n\nexport interface OllamaConfig {\n baseUrl?: string;\n defaultModel?: string;\n retry?: {\n maxRetries: number;\n retryDelay: number;\n };\n}\n\nexport class OllamaProvider implements AIProvider {\n name = 'ollama' as const;\n private baseUrl: string;\n private defaultModel: string;\n private retryConfig: { maxRetries: number; retryDelay: number };\n\n constructor(config: OllamaConfig = {}) {\n this.baseUrl = config.baseUrl || 'http://localhost:11434';\n this.defaultModel = config.defaultModel || 'llama3.2';\n this.retryConfig = config.retry || { maxRetries: 3, retryDelay: 1000 };\n }\n\n async generate(input: AIInput): Promise<AIResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/api/generate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n prompt: input.prompt,\n system: input.system,\n options: {\n temperature: input.temperature ?? 0.7,\n num_predict: input.maxTokens,\n stop: input.stop,\n ...input.options\n },\n stream: false\n })\n });\n\n if (!response.ok) {\n throw new Error(`Ollama API error: ${response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n text: data.response,\n provider: 'ollama',\n model: data.model,\n usage: {\n promptTokens: data.prompt_eval_count || 0,\n completionTokens: data.eval_count || 0,\n totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0)\n },\n raw: data\n };\n }, this.retryConfig);\n }\n\n async chat(input: ChatInput): Promise<AIResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n messages: input.messages,\n options: {\n temperature: input.temperature ?? 0.7,\n num_predict: input.maxTokens,\n stop: input.stop,\n ...input.options\n },\n stream: false\n })\n });\n\n if (!response.ok) {\n throw new Error(`Ollama API error: ${response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n text: data.message.content,\n provider: 'ollama',\n model: data.model,\n usage: {\n promptTokens: data.prompt_eval_count || 0,\n completionTokens: data.eval_count || 0,\n totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0)\n },\n raw: data\n };\n }, this.retryConfig);\n }\n\n async *stream(input: AIInput): AsyncIterable<AIStreamChunk> {\n const response = await fetch(`${this.baseUrl}/api/generate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n prompt: input.prompt,\n system: input.system,\n options: {\n temperature: input.temperature ?? 0.7,\n num_predict: input.maxTokens,\n stop: input.stop,\n ...input.options\n },\n stream: true\n })\n });\n\n if (!response.ok) {\n throw new Error(`Ollama API error: ${response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('Response body is not readable');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n \n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n\n try {\n const data = JSON.parse(trimmed);\n \n if (data.response) {\n yield {\n text: data.response,\n done: data.done || false,\n provider: 'ollama',\n model: data.model\n };\n }\n\n if (data.done) {\n return;\n }\n } catch {\n // Skip invalid JSON\n }\n }\n }\n\n yield { text: '', done: true, provider: 'ollama' };\n } finally {\n reader.releaseLock();\n }\n }\n\n async embed(input: EmbedInput): Promise<EmbedResponse> {\n return retry(async () => {\n const response = await fetch(`${this.baseUrl}/api/embeddings`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: input.model || this.defaultModel,\n prompt: input.text\n })\n });\n\n if (!response.ok) {\n throw new Error(`Ollama API error: ${response.statusText}`);\n }\n\n const data = await response.json();\n \n return {\n embedding: data.embedding,\n provider: 'ollama',\n model: data.model || input.model || this.defaultModel\n };\n }, this.retryConfig);\n }\n}\n","/**\n * Velix AI Plugin - AI Client\n * @module velix-plugin-ai/client\n */\n\nimport type {\n AIClient,\n AIProvider,\n AIInput,\n AIResponse,\n ChatInput,\n AIStreamChunk,\n EmbedInput,\n EmbedResponse,\n AIPluginConfig\n} from './types';\nimport { OpenAIProvider } from './providers/openai';\nimport { OllamaProvider } from './providers/ollama';\n\n/**\n * Create an AI client\n */\nexport function createAIClient(config: AIPluginConfig): AIClient {\n const provider = createProvider(config);\n\n return {\n async generate(input: AIInput): Promise<AIResponse> {\n return provider.generate(input);\n },\n\n async chat(input: ChatInput): Promise<AIResponse> {\n return provider.chat(input);\n },\n\n stream(input: AIInput): AsyncIterable<AIStreamChunk> {\n return provider.stream(input);\n },\n\n async embed(input: EmbedInput): Promise<EmbedResponse> {\n return provider.embed(input);\n },\n\n getProvider(): AIProvider {\n return provider;\n }\n };\n}\n\n/**\n * Create a provider instance\n */\nfunction createProvider(config: AIPluginConfig): AIProvider {\n switch (config.provider) {\n case 'openai':\n return new OpenAIProvider({\n apiKey: config.apiKey!,\n baseUrl: config.baseUrl,\n defaultModel: config.defaultModel,\n retry: config.retry\n });\n\n case 'ollama':\n return new OllamaProvider({\n baseUrl: config.baseUrl,\n defaultModel: config.defaultModel,\n retry: config.retry\n });\n\n default:\n throw new Error(`Unsupported AI provider: ${config.provider}`);\n }\n}\n","/**\n * Velix AI Plugin v1\n * @module velix-plugin-ai\n */\n\nimport { createAIClient } from './client';\nimport type { AIPluginConfig, AIClient } from './types';\n\n// Export types\nexport * from './types';\nexport * from './utils';\nexport { OpenAIProvider } from './providers/openai';\nexport { OllamaProvider } from './providers/ollama';\nexport { createAIClient } from './client';\n\n/**\n * Velix AI Plugin\n * \n * @example\n * ```ts\n * import aiPlugin from 'velix/plugins/ai';\n * \n * export default defineConfig({\n * plugins: [\n * aiPlugin({\n * provider: 'openai',\n * apiKey: process.env.OPENAI_API_KEY\n * })\n * ]\n * });\n * ```\n */\nexport default function aiPlugin(config: AIPluginConfig) {\n return {\n name: 'velix-ai',\n \n setup(ctx: Record<string, unknown>) {\n // Create AI client\n const client = createAIClient(config);\n \n // Attach to context\n ctx.ai = client;\n \n // Make available globally for server actions\n if (typeof globalThis !== 'undefined') {\n (globalThis as unknown as { __VELIX_AI__: AIClient }).__VELIX_AI__ = client;\n }\n }\n };\n}\n\n/**\n * Get AI client in server actions\n */\nexport function useAI(): AIClient {\n if (typeof globalThis === 'undefined' || !(globalThis as unknown as { __VELIX_AI__?: AIClient }).__VELIX_AI__) {\n throw new Error('AI client not initialized. Make sure aiPlugin is configured.');\n }\n \n return (globalThis as unknown as { __VELIX_AI__: AIClient }).__VELIX_AI__;\n}\n\n/**\n * Create an AI-powered server action\n * \n * @example\n * ```ts\n * export const summarize = createAIAction({\n * input: { text: 'string' },\n * prompt: ({ text }) => `Summarize this text: ${text}`,\n * system: 'You are a helpful assistant that summarizes text concisely.'\n * });\n * ```\n */\nexport function createAIAction<TInput = unknown, TOutput = string>(config: {\n input: TInput;\n prompt: (input: TInput) => string;\n system?: string;\n model?: string;\n temperature?: number;\n transform?: (response: string) => TOutput;\n}) {\n return async (input: TInput): Promise<TOutput> => {\n const ai = useAI();\n \n const prompt = config.prompt(input);\n \n const response = await ai.generate({\n prompt,\n system: config.system,\n model: config.model,\n temperature: config.temperature\n });\n \n if (config.transform) {\n return config.transform(response.text);\n }\n \n return response.text as TOutput;\n };\n}\n","import { LRUCache } from 'lru-cache';\nimport type { ICacheAdapter, CacheSetOptions } from '../adapter.js';\n\ntype CacheEntry<T> = {\n value: T;\n tags: string[];\n expiresAt: number | null;\n}\n\nexport class MemoryCacheAdapter implements ICacheAdapter {\n private lru: LRUCache<string, CacheEntry<unknown>>;\n private tagIndex: Map<string, Set<string>> = new Map();\n\n constructor(options: { maxSize?: number } = {}) {\n this.lru = new LRUCache({ max: options.maxSize ?? 500 });\n }\n\n async get<T>(key: string): Promise<T | null> {\n const entry = this.lru.get(key) as CacheEntry<T> | undefined;\n if (!entry) return null;\n if (entry.expiresAt && Date.now() > entry.expiresAt) {\n this.lru.delete(key);\n return null;\n }\n return entry.value;\n }\n\n async set<T>(key: string, value: T, options: CacheSetOptions = {}): Promise<void> {\n const entry: CacheEntry<T> = {\n value,\n tags: options.tags ?? [],\n expiresAt: options.ttl ? Date.now() + options.ttl : null,\n };\n this.lru.set(key, entry as CacheEntry<unknown>);\n // Index par tag pour invalidation rapide\n options.tags?.forEach(tag => {\n if (!this.tagIndex.has(tag)) this.tagIndex.set(tag, new Set());\n this.tagIndex.get(tag)!.add(key);\n });\n }\n\n async delete(key: string): Promise<void> {\n this.lru.delete(key);\n }\n\n async deleteByTag(tag: string): Promise<void> {\n const keys = this.tagIndex.get(tag);\n if (!keys) return;\n keys.forEach(key => this.lru.delete(key));\n this.tagIndex.delete(tag);\n }\n\n async deleteByPrefix(prefix: string): Promise<void> {\n for (const key of this.lru.keys()) {\n if (key.startsWith(prefix)) this.lru.delete(key);\n }\n }\n\n async clear(): Promise<void> {\n this.lru.clear();\n this.tagIndex.clear();\n }\n\n async has(key: string): Promise<boolean> {\n return this.lru.has(key);\n }\n}\n","export class RequestDeduplicator {\n private inFlight: Map<string, Promise<unknown>> = new Map();\n\n async dedupe<T>(key: string, fn: () => Promise<T>): Promise<T> {\n if (this.inFlight.has(key)) {\n return this.inFlight.get(key) as Promise<T>;\n }\n\n const promise = fn().finally(() => {\n this.inFlight.delete(key);\n });\n\n this.inFlight.set(key, promise);\n return promise;\n }\n}\n","import type { ICacheAdapter, CacheSetOptions } from './adapter.js';\nimport { MemoryCacheAdapter } from './adapters/memory.adapter.js';\nimport { RequestDeduplicator } from './deduplicator.js';\n\nexport type RevalidationType = 'path' | 'tag' | 'layout';\n\nexport class VelixCache {\n private adapter: ICacheAdapter;\n private deduplicator: RequestDeduplicator;\n\n constructor(adapter: ICacheAdapter = new MemoryCacheAdapter()) {\n this.adapter = adapter;\n this.deduplicator = new RequestDeduplicator();\n }\n\n async revalidatePath(path: string): Promise<void> {\n await this.adapter.deleteByPrefix(`route:${path}`);\n }\n\n async revalidateTag(tag: string): Promise<void> {\n await this.adapter.deleteByTag(tag);\n }\n\n // unstable_cache — avec déduplication\n unstable_cache<T>(\n fn: () => Promise<T>,\n keys: string[],\n options?: { tags?: string[]; revalidate?: number }\n ): () => Promise<T> {\n const key = keys.join(':');\n return async () => {\n const cached = await this.adapter.get<T>(key);\n if (cached !== null) return cached;\n\n const value = await this.deduplicator.dedupe(key, fn);\n await this.adapter.set(key, value, {\n ttl: options?.revalidate ? options.revalidate * 1000 : undefined,\n tags: options?.tags,\n });\n return value;\n };\n }\n}\n\n// ── Singleton instance for the framework ──\n\nexport const cacheManager = new VelixCache();\n\n/**\n * Revalidate a specific path\n */\nexport async function revalidatePath(path: string, _type: RevalidationType = 'path'): Promise<void> {\n await cacheManager.revalidatePath(path);\n\n // Notify connected clients via HMR\n if (typeof global !== 'undefined' && (global as any).__VELIX_HMR_SERVER__) {\n (global as any).__VELIX_HMR_SERVER__.broadcast(JSON.stringify({\n type: 'revalidate',\n path,\n revalidationType: _type,\n }));\n }\n}\n\n/**\n * Revalidate all paths with a specific cache tag\n */\nexport async function revalidateTag(tag: string): Promise<void> {\n await cacheManager.revalidateTag(tag);\n\n // Notify connected clients\n if (typeof global !== 'undefined' && (global as any).__VELIX_HMR_SERVER__) {\n (global as any).__VELIX_HMR_SERVER__.broadcast(JSON.stringify({\n type: 'revalidate',\n tag,\n }));\n }\n}\n\n/**\n * Unstable cache wrapper (experimental)\n */\nexport function unstable_cache<T>(\n fn: () => Promise<T>,\n keys: string[],\n options?: { tags?: string[]; revalidate?: number }\n): () => Promise<T> {\n return cacheManager.unstable_cache(fn, keys, options);\n}\n","import crypto from 'crypto';\n\nexport class VelixHttpError extends Error {\n public status: number;\n public digest?: string;\n\n constructor(status: number, message: string) {\n super(message);\n this.name = this.constructor.name;\n this.status = status;\n \n // Generate actual cryptographic hash\n const hash = crypto.createHash('sha256');\n hash.update(`${Date.now()}-${message}-${status}-${Math.random()}`);\n this.digest = hash.digest('hex').substring(0, 16);\n }\n\n toClientError(isDev: boolean) {\n return {\n message: this.message,\n status: this.status,\n digest: this.digest,\n stack: isDev ? this.stack : undefined,\n };\n }\n}\n\nexport class NotFoundError extends VelixHttpError {\n constructor(message: string = 'Not Found') {\n super(404, message);\n }\n}\n\nexport class ForbiddenError extends VelixHttpError {\n constructor(message: string = 'Forbidden') {\n super(403, message);\n }\n}\n\nexport class UnauthorizedError extends VelixHttpError {\n constructor(message: string = 'Unauthorized') {\n super(401, message);\n }\n}\n","export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';\n\nexport type RouteContext = {\n params: Record<string, string>;\n searchParams: URLSearchParams;\n};\n\nexport type RouteHandler = (\n req: Request,\n ctx: RouteContext\n) => Response | Promise<Response>;\n\nimport { VelixHttpError } from '../server/errors.js';\nexport { VelixHttpError };\n\nexport function defineRoute(handler: RouteHandler): RouteHandler {\n return async (req, ctx) => {\n try {\n return await handler(req, ctx);\n } catch (err) {\n if (err instanceof VelixHttpError) {\n return Response.json({ error: err.message }, { status: err.status });\n }\n console.error('[Velix API]', err);\n return Response.json({ error: 'Internal Server Error' }, { status: 500 });\n }\n };\n}\n","import { glob } from 'glob';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\nimport type { HttpMethod } from './define-route.js';\n\nexport type ApiRoute = {\n pattern: string; // ex: /api/users/:id\n filePath: string; // chemin absolu vers le fichier\n params: string[]; // noms des paramètres dynamiques\n isCatchAll: boolean;\n};\n\nexport async function buildApiManifest(serverDir: string): Promise<ApiRoute[]> {\n const files = await glob('api/**/*.ts', { cwd: serverDir, absolute: true });\n return files.map(file => filePathToRoute(file, serverDir));\n}\n\n/** Exported for testing */\nexport function filePathToRoute(filePath: string, serverDir: string): ApiRoute {\n const relative = path.relative(path.join(serverDir, 'api'), filePath);\n // Ensure we replace Windows backslashes with forward slashes for the pattern\n const normalizedRelative = relative.replace(/\\\\/g, '/');\n const withoutExt = normalizedRelative.replace(/\\.ts$/, '');\n \n // users.[id] → /api/users/:id\n // auth/[...slug] → /api/auth/*\n const params: string[] = [];\n let isCatchAll = false;\n\n const pattern = '/api/' + withoutExt\n .replace(/\\[\\.\\.\\.(\\w+)\\]/g, (_, name) => { isCatchAll = true; params.push(name); return '*'; })\n .replace(/\\[(\\w+)\\]/g, (_, name) => { params.push(name); return `:${name}`; })\n .replace(/\\.\\[/g, '/[') // users.[id] → users/[id]\n .replace(/\\./g, '/'); // nested avec dots → slashes\n\n return { pattern, filePath, params, isCatchAll };\n}\n\nfunction matchPattern(pathname: string, route: ApiRoute): { params: Record<string, string> } | null {\n if (route.isCatchAll) {\n const base = route.pattern.replace('/*', '');\n if (pathname.startsWith(base)) {\n const rest = pathname.slice(base.length);\n const params: Record<string, string> = {};\n if (route.params[0]) {\n params[route.params[0]] = rest.startsWith('/') ? rest.slice(1) : rest;\n }\n return { params };\n }\n return null;\n }\n\n const pathParts = pathname.split('/').filter(Boolean);\n const patternParts = route.pattern.split('/').filter(Boolean);\n\n if (pathParts.length !== patternParts.length) return null;\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < patternParts.length; i++) {\n const part = patternParts[i];\n if (part.startsWith(':')) {\n params[part.slice(1)] = pathParts[i];\n } else if (part !== pathParts[i]) {\n return null;\n }\n }\n\n return { params };\n}\n\nexport async function handleApiRequest(\n req: Request,\n manifest: ApiRoute[]\n): Promise<Response | null> {\n const url = new URL(req.url);\n const pathname = url.pathname;\n\n for (const route of manifest) {\n const match = matchPattern(pathname, route);\n if (!match) continue;\n\n const fileUrl = pathToFileURL(route.filePath).href;\n const handlers = await import(`${fileUrl}?t=${Date.now()}`);\n const method = req.method.toUpperCase() as HttpMethod;\n const handler = handlers[method] || handlers.default;\n\n if (!handler) {\n return Response.json({ error: 'Method Not Allowed' }, { status: 405 });\n }\n\n return handler(req, {\n params: match.params,\n searchParams: url.searchParams,\n });\n }\n\n return null; // pas de route API → fallback SSR\n}\n","export type LoaderContext = {\n params: Record<string, string>;\n searchParams: URLSearchParams;\n req: Request;\n};\n\nexport type LoaderResult<T> = {\n data: T;\n headers?: Record<string, string>;\n cache?: { maxAge: number } | 'no-store';\n};\n\nexport function defineLoader<T>(\n fn: (ctx: LoaderContext) => Promise<T>\n): (ctx: LoaderContext) => Promise<LoaderResult<T>> {\n return async (ctx) => {\n const data = await fn(ctx);\n return { data };\n };\n}\n","import { z } from 'zod';\n\nexport type ActionContext = {\n req: Request;\n headers: Headers;\n};\n\nexport type ActionOptions<TInput extends z.ZodTypeAny, TOutput> = {\n input: TInput;\n handler: (ctx: { input: z.infer<TInput>; ctx: ActionContext }) => Promise<TOutput>;\n};\n\nexport type ActionResult<T> =\n | { success: true; data: T }\n | { success: false; error: string; fieldErrors?: Record<string, string[]> };\n\nexport function serverAction<TInput extends z.ZodTypeAny, TOutput>(\n options: ActionOptions<TInput, TOutput>\n) {\n return async (rawInput: unknown, ctx: ActionContext): Promise<ActionResult<TOutput>> => {\n const parsed = options.input.safeParse(rawInput);\n if (!parsed.success) {\n return {\n success: false,\n error: 'Validation failed',\n fieldErrors: parsed.error.flatten().fieldErrors as Record<string, string[]>,\n };\n }\n try {\n const data = await options.handler({ input: parsed.data, ctx });\n return { success: true, data };\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : 'Unknown error' };\n }\n };\n}\n","import { WebSocketServer, WebSocket } from 'ws';\nimport chokidar from 'chokidar';\nimport type { Server as HttpServer } from 'http';\nimport type { HMRPubSubBackplane } from './hmr-pubsub.js';\n\nexport type HMREvent =\n | { type: 'file-changed'; file: string; timestamp: number }\n | { type: 'file-added'; file: string; timestamp: number }\n | { type: 'compile-start'; timestamp: number }\n | { type: 'compile-done'; duration: number; timestamp: number }\n | { type: 'compile-error'; message: string; file?: string; line?: number; col?: number; timestamp: number }\n | { type: 'full-reload'; timestamp: number };\n\nexport interface HMRServerOptions {\n /**\n * Backplane Redis Pub/Sub pour la synchronisation HMR multi-instances.\n * Optionnel — si absent, le HMR est local à cette instance uniquement.\n */\n pubsub?: HMRPubSubBackplane;\n}\n\nexport function createHMRServer(\n httpServer: HttpServer,\n projectRoot: string,\n options?: HMRServerOptions\n) {\n const wss = new WebSocketServer({ server: httpServer, path: '/__velix_hmr' });\n const clients = new Set<WebSocket>();\n\n wss.on('connection', (ws) => {\n clients.add(ws);\n ws.send(JSON.stringify({ type: 'connected' }));\n ws.on('close', () => clients.delete(ws));\n });\n\n const watcher = chokidar.watch(projectRoot, {\n ignored: /node_modules|\\.velix|dist|\\.git/,\n persistent: true,\n ignoreInitial: true,\n });\n\n /**\n * Broadcast local : envoie l'event aux clients WebSocket de cette instance.\n */\n function broadcastLocal(event: HMREvent) {\n const msg = JSON.stringify(event);\n clients.forEach(ws => {\n if (ws.readyState === ws.OPEN) ws.send(msg);\n });\n }\n\n /**\n * Broadcast complet :\n * 1. Notifie les clients locaux (WebSocket de cette instance)\n * 2. Publie sur le backplane Redis si configuré (pour les autres pods)\n */\n function broadcast(event: HMREvent) {\n broadcastLocal(event);\n // Cross-instance via Redis Pub/Sub si configuré\n options?.pubsub?.publish(event);\n }\n\n // Écouter les events des autres instances via le backplane\n options?.pubsub?.onEvent(event => {\n // Uniquement rebroadcast local — ne pas re-publier sur Redis (évite les boucles)\n broadcastLocal(event);\n });\n\n watcher.on('change', (file) => {\n broadcast({ type: 'file-changed', file, timestamp: Date.now() });\n });\n watcher.on('add', (file) => {\n broadcast({ type: 'file-added', file, timestamp: Date.now() });\n });\n\n return { broadcast, broadcastLocal, watcher, wss, clients };\n}\n","import path from 'path';\nimport fs from 'fs';\nimport { NotFoundError, VelixHttpError } from './errors.js';\n\nexport type ErrorBoundaryType = 'error' | 'not-found';\n\nexport interface ResolvedBoundary {\n filePath: string;\n type: ErrorBoundaryType;\n scope: string;\n}\n\nexport function getErrorBoundaryType(error: unknown): ErrorBoundaryType {\n if (error instanceof NotFoundError) return 'not-found';\n if (error instanceof VelixHttpError && error.status === 404) return 'not-found';\n return 'error';\n}\n\nexport function resolveErrorBoundary(routeFilePath: string, appDir: string, type: ErrorBoundaryType): ResolvedBoundary | null {\n let currentDir = path.dirname(routeFilePath);\n \n // Ensure we don't go outside appDir\n while (currentDir.length >= appDir.length && currentDir.startsWith(appDir)) {\n const boundaryPath = path.join(currentDir, `${type}.tsx`);\n if (fs.existsSync(boundaryPath)) {\n const scope = currentDir === appDir ? 'root' : path.basename(currentDir);\n return {\n filePath: boundaryPath,\n type,\n scope\n };\n }\n \n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) break;\n currentDir = parentDir;\n }\n \n return null;\n}\n","import type { ErrorComponent, NotFoundComponent } from '../types.js';\n\nexport function defineError(component: ErrorComponent): ErrorComponent {\n return component;\n}\n\nexport function defineNotFound(component: NotFoundComponent): NotFoundComponent {\n return component;\n}\n"]}