@qontinui/ui-bridge 0.2.0 → 0.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/ai/index.d.mts +4 -4
- package/dist/ai/index.d.ts +4 -4
- package/dist/babel-plugin/index.js +515 -0
- package/dist/babel-plugin/index.js.map +1 -0
- package/dist/babel-plugin/index.mjs +499 -0
- package/dist/babel-plugin/index.mjs.map +1 -0
- package/dist/control/index.d.mts +5 -5
- package/dist/control/index.d.ts +5 -5
- package/dist/core/index.d.mts +115 -44
- package/dist/core/index.d.ts +115 -44
- package/dist/core/index.js +0 -1560
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +1 -1549
- package/dist/core/index.mjs.map +1 -1
- package/dist/debug/index.d.mts +3 -3
- package/dist/debug/index.d.ts +3 -3
- package/dist/index.d.mts +7 -8
- package/dist/index.d.ts +7 -8
- package/dist/index.js +859 -873
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +860 -862
- package/dist/index.mjs.map +1 -1
- package/dist/{metrics-C9XRi_mL.d.ts → metrics-BfiT_rhZ.d.ts} +2 -2
- package/dist/{metrics-NC3csD0R.d.mts → metrics-DTA2bwG7.d.mts} +2 -2
- package/dist/native/control/index.js +453 -0
- package/dist/native/control/index.js.map +1 -0
- package/dist/native/control/index.mjs +450 -0
- package/dist/native/control/index.mjs.map +1 -0
- package/dist/native/core/index.js +486 -0
- package/dist/native/core/index.js.map +1 -0
- package/dist/native/core/index.mjs +475 -0
- package/dist/native/core/index.mjs.map +1 -0
- package/dist/native/debug/index.js +451 -0
- package/dist/native/debug/index.js.map +1 -0
- package/dist/native/debug/index.mjs +449 -0
- package/dist/native/debug/index.mjs.map +1 -0
- package/dist/native/index.js +2274 -0
- package/dist/native/index.js.map +1 -0
- package/dist/native/index.mjs +2246 -0
- package/dist/native/index.mjs.map +1 -0
- package/dist/native/react/index.js +1401 -0
- package/dist/native/react/index.js.map +1 -0
- package/dist/native/react/index.mjs +1389 -0
- package/dist/native/react/index.mjs.map +1 -0
- package/dist/native/server/index.js +415 -0
- package/dist/native/server/index.js.map +1 -0
- package/dist/native/server/index.mjs +410 -0
- package/dist/native/server/index.mjs.map +1 -0
- package/dist/react/index.d.mts +20 -7
- package/dist/react/index.d.ts +20 -7
- package/dist/react/index.js +42 -4
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +42 -4
- package/dist/react/index.mjs.map +1 -1
- package/dist/{registry-CIEDjbQ9.d.ts → registry-BKLEm-yk.d.ts} +9 -15
- package/dist/{registry-SsSDq46X.d.mts → registry-BmZgyCz8.d.mts} +9 -15
- package/dist/render-log/index.d.mts +1 -1
- package/dist/render-log/index.d.ts +1 -1
- package/dist/server/express.d.mts +36 -0
- package/dist/server/express.d.ts +36 -0
- package/dist/server/express.js +196 -0
- package/dist/server/express.js.map +1 -0
- package/dist/server/express.mjs +192 -0
- package/dist/server/express.mjs.map +1 -0
- package/dist/server/handlers.d.mts +93 -0
- package/dist/server/handlers.d.ts +93 -0
- package/dist/server/handlers.js +4278 -0
- package/dist/server/handlers.js.map +1 -0
- package/dist/server/handlers.mjs +4275 -0
- package/dist/server/handlers.mjs.map +1 -0
- package/dist/server/index.d.mts +10 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.js +5352 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +5337 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/nextjs.d.mts +126 -0
- package/dist/server/nextjs.d.ts +126 -0
- package/dist/server/nextjs.js +287 -0
- package/dist/server/nextjs.js.map +1 -0
- package/dist/server/nextjs.mjs +282 -0
- package/dist/server/nextjs.mjs.map +1 -0
- package/dist/server/standalone.d.mts +6 -0
- package/dist/server/standalone.d.ts +6 -0
- package/dist/server/standalone.js +719 -0
- package/dist/server/standalone.js.map +1 -0
- package/dist/server/standalone.mjs +715 -0
- package/dist/server/standalone.mjs.map +1 -0
- package/dist/standalone-BURj8J3G.d.ts +212 -0
- package/dist/standalone-Dwmel29d.d.mts +212 -0
- package/dist/swc-plugin/index.d.mts +79 -0
- package/dist/swc-plugin/index.d.ts +79 -0
- package/dist/swc-plugin/index.js +15 -0
- package/dist/swc-plugin/index.js.map +1 -0
- package/dist/swc-plugin/index.mjs +9 -0
- package/dist/swc-plugin/index.mjs.map +1 -0
- package/dist/{types-CFT3Dnx4.d.mts → types-B5Q0GVo0.d.mts} +115 -3
- package/dist/{types-Dr6tH-bm.d.mts → types-B7J7noLK.d.mts} +1 -1
- package/dist/{types-oCTrRxSw.d.ts → types-BkNRILUa.d.ts} +1 -1
- package/dist/types-CEQLnFMv.d.mts +156 -0
- package/dist/types-CHnlwiTK.d.ts +156 -0
- package/dist/{types-BvCfFuEV.d.ts → types-DfPqwU-i.d.ts} +115 -3
- package/dist/{types-CPMbN_Iw.d.mts → types-jKVgTI6_.d.mts} +356 -160
- package/dist/{types-CPMbN_Iw.d.ts → types-jKVgTI6_.d.ts} +356 -160
- package/package.json +106 -3
- package/swc-plugin-wasm/ui_bridge_swc_plugin.wasm +0 -0
- package/dist/websocket-client-CX4QJesI.d.ts +0 -124
- package/dist/websocket-client-C_Na0OSp.d.mts +0 -124
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/types.ts","../../src/server/websocket-handler.ts","../../src/server/standalone.ts"],"names":[],"mappings":";;;AA2LO,IAAM,gBAAA,GAAsC;AAAA;AAAA,EAEjD,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,aAAA,EAAe,SAAS,cAAA,EAAe;AAAA,EAC9D,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,SAAS,gBAAA,EAAiB;AAAA,EACnE,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,sBAAA,EAAwB,SAAS,iBAAA,EAAkB;AAAA,EAC3E,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,kBAAA,EAAoB,SAAS,kBAAA,EAAmB;AAAA;AAAA,EAGvE,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,mBAAA,EAAqB,SAAS,aAAA,EAAc;AAAA,EACnE,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,sBAAA,EAAwB,SAAS,YAAA,EAAc,MAAA,EAAQ,CAAC,IAAI,CAAA,EAAE;AAAA,EACrF,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,4BAAA,EAA8B,SAAS,iBAAA,EAAmB,MAAA,EAAQ,CAAC,IAAI,CAAA,EAAE;AAAA,EAChG;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,6BAAA;AAAA,IACN,OAAA,EAAS,sBAAA;AAAA,IACT,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA,EAGA,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,qBAAA,EAAuB,SAAS,eAAA,EAAgB;AAAA,EACvE,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,wBAAA,EAA0B,SAAS,cAAA,EAAgB,MAAA,EAAQ,CAAC,IAAI,CAAA,EAAE;AAAA,EACzF,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,8BAAA,EAAgC,SAAS,mBAAA,EAAqB,MAAA,EAAQ,CAAC,IAAI,CAAA,EAAE;AAAA,EACpG;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,yCAAA;AAAA,IACN,OAAA,EAAS,wBAAA;AAAA,IACT,MAAA,EAAQ,CAAC,IAAA,EAAM,UAAU,CAAA;AAAA,IACzB,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA,EAGA,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,eAAA,EAAiB,SAAS,MAAA,EAAO;AAAA,EACzD,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,mBAAA,EAAqB,SAAS,UAAA,EAAW;AAAA;AAAA,EACjE,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,mBAAA,EAAqB,SAAS,oBAAA,EAAqB;AAAA;AAAA,EAG1E,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,oBAAA,EAAsB,SAAS,cAAA,EAAe;AAAA,EACrE,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,2BAAA,EAA6B,SAAS,aAAA,EAAe,MAAA,EAAQ,CAAC,IAAI,CAAA,EAAE;AAAA,EAC5F;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,iCAAA;AAAA,IACN,OAAA,EAAS,mBAAA;AAAA,IACT,MAAA,EAAQ,CAAC,OAAO;AAAA,GAClB;AAAA;AAAA,EAGA,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,uBAAA,EAAyB,SAAS,kBAAA,EAAmB;AAAA,EAC5E,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,gBAAA,EAAkB,SAAS,YAAA,EAAa;AAAA,EAC/D,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,sBAAA,EAAwB,SAAS,kBAAA,EAAoB,MAAA,EAAQ,CAAC,IAAI,CAAA,EAAE;AAAA,EAC5F,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,qBAAA,EAAuB,SAAS,gBAAA,EAAiB;AAAA;AAAA,EAGxE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,cAAc,OAAA,EAAS,UAAA,EAAY,cAAc,IAAA,EAAK;AAAA,EAC9E,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,eAAe,OAAA,EAAS,WAAA,EAAa,cAAc,IAAA,EAAK;AAAA,EAChF,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,cAAc,OAAA,EAAS,UAAA,EAAY,cAAc,IAAA,EAAK;AAAA,EAC9E,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,oBAAoB,OAAA,EAAS,eAAA,EAAiB,cAAc,IAAA,EAAK;AAAA,EACzF,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,cAAA,EAAgB,SAAS,qBAAA,EAAsB;AAAA,EACtE,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,UAAA,EAAY,SAAS,iBAAA,EAAkB;AAAA,EAC9D,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,aAAA,EAAe,SAAS,gBAAA,EAAiB;AAAA,EAChE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,uBAAuB,OAAA,EAAS,kBAAA,EAAoB,cAAc,IAAA;AAC5F,CAAA;;;ACjMA,SAAS,UAAA,GAAqB;AAC5B,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AACjE;AAKA,IAAM,OAAA,GAAU,OAAA;AAKT,IAAM,oBAAN,MAAwB;AAAA,EAM7B,WAAA,CACE,QAAA,EACA,OAAA,GAAkE,EAAC,EACnE;AAPF,IAAA,IAAA,CAAQ,OAAA,uBAAc,GAAA,EAA6B;AAQjD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,KAAA;AAClC,IAAA,IAAA,CAAK,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,EAAA,EAA2B;AAC1C,IAAA,MAAM,WAAW,UAAA,EAAW;AAE5B,IAAA,MAAM,MAAA,GAA0B;AAAA,MAC9B,EAAA,EAAI,QAAA;AAAA,MACJ,EAAA;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,MAAA,sBAAY,GAAA,EAAI;AAAA,QAChB,UAAA,sBAAgB,GAAA,EAAI;AAAA,QACpB,YAAA,sBAAkB,GAAA;AAAI,OACxB;AAAA,MACA,WAAA,EAAa,KAAK,GAAA;AAAI,KACxB;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AAEjC,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,GAAA,CAAI,CAAA,uBAAA,EAA0B,QAAQ,CAAA,CAAE,CAAA;AAAA,IAC/C;AAGA,IAAA,EAAA,CAAG,SAAA,GAAY,CAAC,KAAA,KAA4B;AAC1C,MAAA,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,KAAA,CAAM,IAAI,CAAA;AAAA,IACzC,CAAA;AAGA,IAAA,EAAA,CAAG,UAAU,MAAM;AACjB,MAAA,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AAAA,IAChC,CAAA;AAGA,IAAA,IAAA,CAAK,aAAa,QAAA,EAAU;AAAA,MAC1B,IAAI,UAAA,EAAW;AAAA,MACf,IAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,OAAA;AAAA,QACT,QAAA,EAAU;AAAA,UACR,SAAA,EAAW,IAAA;AAAA,UACX,OAAA,EAAS,IAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACT;AAAA,QACA;AAAA;AACF,KACmB,CAAA;AAErB,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,QAAA,EAAwB;AACvC,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,QAAQ,CAAA;AAE5B,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,GAAA,CAAI,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAE,CAAA;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,CAAc,QAAA,EAAkB,IAAA,EAA6B;AACzE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,MAAA,EAAW,aAAA,EAAe,sBAAsB,CAAA;AACzE,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,IAAI,CAAA,KAAA,EAAQ,QAAQ,CAAA,IAAA,EAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI;AACF,MAAA,QAAQ,QAAQ,IAAA;AAAM,QACpB,KAAK,MAAA;AACH,UAAA,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,OAAA,CAAQ,EAAE,CAAA;AACpC,UAAA;AAAA,QAEF,KAAK,WAAA;AACH,UAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,QAAA,EAAU,OAAO,CAAA;AAC5C,UAAA;AAAA,QAEF,KAAK,aAAA;AACH,UAAA,MAAM,IAAA,CAAK,iBAAA,CAAkB,QAAA,EAAU,OAAO,CAAA;AAC9C,UAAA;AAAA,QAEF,KAAK,MAAA;AACH,UAAA,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,OAAO,CAAA;AACvC,UAAA;AAAA,QAEF,KAAK,UAAA;AAEH,UAAA,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,OAAwD,CAAA;AACxF,UAAA;AAAA,QAEF,KAAK,YAAA;AACH,UAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,QAAA,EAAU,OAAO,CAAA;AAC7C,UAAA;AAAA,QAEF,KAAK,aAAA;AACH,UAAA,MAAM,IAAA,CAAK,iBAAA,CAAkB,QAAA,EAAU,OAAO,CAAA;AAC9C,UAAA;AAAA,QAEF,KAAK,eAAA;AACH,UAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAChD,UAAA;AAAA,QAEF,KAAK,wBAAA;AACH,UAAA,MAAM,IAAA,CAAK,4BAAA,CAA6B,QAAA,EAAU,OAAO,CAAA;AACzD,UAAA;AAAA,QAEF,KAAK,iBAAA;AACH,UAAA,MAAM,IAAA,CAAK,qBAAA,CAAsB,QAAA,EAAU,OAAO,CAAA;AAClD,UAAA;AAAA,QAEF;AACE,UAAA,IAAA,CAAK,SAAA;AAAA,YACH,QAAA;AAAA,YACC,OAAA,CAA4B,EAAA;AAAA,YAC7B,iBAAA;AAAA,YACA,CAAA,sBAAA,EAA0B,QAA4B,IAAI,CAAA;AAAA,WAC5D;AAAA;AACJ,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,GAAA,GAAM,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,MAAA,IAAA,CAAK,UAAU,QAAA,EAAU,OAAA,CAAQ,EAAA,EAAI,eAAA,EAAiB,IAAI,OAAO,CAAA;AAAA,IACnE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,CAAW,UAAkB,UAAA,EAA0B;AAC7D,IAAA,IAAA,CAAK,aAAa,QAAA,EAAU;AAAA,MAC1B,IAAI,UAAA,EAAW;AAAA,MACf,IAAA,EAAM,MAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA;AAAI,KACJ,CAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAA,CACZ,QAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,YAAA,KAAiB,OAAA,CAAQ,OAAA;AAGrD,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,MACtC;AAAA,IACF;AACA,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,KAAA,MAAW,MAAM,UAAA,EAAY;AAC3B,QAAA,MAAA,CAAO,YAAA,CAAa,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA;AAAA,MACvC;AAAA,IACF;AACA,IAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,MAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,QAAA,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AAAA,MACzC;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,aAAa,QAAA,EAAU;AAAA,MAC1B,IAAI,UAAA,EAAW;AAAA,MACf,IAAA,EAAM,YAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,aAAa,MAAM;AAAA;AAC/C,KACsB,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAA,CACZ,QAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,OAAA,CAAQ,OAAA;AAE3B,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,aAAA,GAAgB,MAAA,CAAO,OAAO,CAAC,CAAA,KAAuB,OAAO,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA;AACvF,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAAA,MACzC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,aAAA,GAAgB,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA;AACrD,MAAA,MAAA,CAAO,YAAA,CAAa,OAAO,KAAA,EAAM;AACjC,MAAA,MAAA,CAAO,YAAA,CAAa,WAAW,KAAA,EAAM;AACrC,MAAA,MAAA,CAAO,YAAA,CAAa,aAAa,KAAA,EAAM;AAAA,IACzC;AAEA,IAAA,IAAA,CAAK,aAAa,QAAA,EAAU;AAAA,MAC1B,IAAI,UAAA,EAAW;AAAA,MACf,IAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ;AAAA;AACV,KACwB,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,UAAA,CACZ,QAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA;AAE7D,IAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,IAAA,EAAM;AACjC,MAAA,IAAA,CAAK,YAAA,CAAa,QAAA,EAAU,OAAA,CAAQ,EAAA,EAAI,IAAA,EAAM,EAAE,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAA,EAAU,CAAA;AAAA,IAClF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,aAAa,QAAA,EAAU,OAAA,CAAQ,IAAI,KAAA,EAAO,MAAA,EAAW,OAAO,KAAK,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAA,CACZ,QAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,OAAA,CAAQ,OAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,SAAS,CAAA;AAEvD,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,IAAA,CAAK,YAAA,CAAa,UAAU,OAAA,CAAQ,EAAA,EAAI,MAAM,EAAE,OAAA,EAAS,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,IACxE,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,aAAa,QAAA,EAAU,OAAA,CAAQ,IAAI,KAAA,EAAO,MAAA,EAAW,OAAO,KAAK,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAA,CACZ,QAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,kBAAA,EAAmB;AAEtD,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,IAAA,CAAK,aAAa,QAAA,EAAU,OAAA,CAAQ,EAAA,EAAI,IAAA,EAAM,OAAO,IAAI,CAAA;AAAA,IAC3D,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,aAAa,QAAA,EAAU,OAAA,CAAQ,IAAI,KAAA,EAAO,MAAA,EAAW,OAAO,KAAK,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAA,CACZ,QAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,EAAE,SAAA,EAAW,MAAA,EAAO,GAAI,OAAA,CAAQ,OAAA;AACtC,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAA,CAAS,oBAAA,CAAqB,WAAW,MAAM,CAAA;AAEzE,IAAA,IAAA,CAAK,YAAA,CAAa,UAAU,OAAA,CAAQ,EAAA,EAAI,OAAO,OAAA,EAAS,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,4BAAA,CACZ,QAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,EAAE,WAAA,EAAa,MAAA,EAAQ,MAAA,KAAW,OAAA,CAAQ,OAAA;AAChD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,uBAAuB,WAAA,EAAa,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAEzF,IAAA,IAAA,CAAK,YAAA,CAAa,UAAU,OAAA,CAAQ,EAAA,EAAI,OAAO,OAAA,EAAS,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,qBAAA,CACZ,QAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,EAAE,UAAA,EAAY,MAAA,EAAO,GAAI,OAAA,CAAQ,OAAA;AAIvC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,YAAY,UAAA,EAAY,EAAE,QAAQ,CAAA;AAErE,IAAA,IAAA,CAAK,YAAA,CAAa,UAAU,OAAA,CAAQ,EAAA,EAAI,OAAO,OAAA,EAAS,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,KAAA,EAA0B;AACvC,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,MAAM,CAAA,IAAK,KAAK,OAAA,EAAS;AAE7C,MAAA,IACE,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,IAAA,KAAS,CAAA,IACpC,MAAA,CAAO,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EACzC;AAEA,QAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AAExB,QAAA,IACE,SAAA,CAAU,SAAA,IACV,MAAA,CAAO,YAAA,CAAa,WAAW,IAAA,GAAO,CAAA,IACtC,CAAC,MAAA,CAAO,YAAA,CAAa,UAAA,CAAW,GAAA,CAAI,SAAA,CAAU,SAAS,CAAA,EACvD;AACA,UAAA;AAAA,QACF;AAEA,QAAA,IACE,SAAA,CAAU,WAAA,IACV,MAAA,CAAO,YAAA,CAAa,aAAa,IAAA,GAAO,CAAA,IACxC,CAAC,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa,GAAA,CAAI,SAAA,CAAU,WAAW,CAAA,EAC3D;AACA,UAAA;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,aAAa,QAAA,EAAU;AAAA,UAC1B,IAAI,UAAA,EAAW;AAAA,UACf,IAAA,EAAM,OAAA;AAAA,UACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,UACpB,OAAA,EAAS;AAAA,SACQ,CAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CAAa,UAAkB,OAAA,EAAgC;AACrE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AACxC,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,EAAA,CAAG,eAAe,CAAA,EAAG;AAE3C,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAEtC,MAAA,IAAI,IAAA,CAAK,OAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,MAAA,EAAQ;AAC3C,QAAA,IAAA,CAAK,IAAI,CAAA,KAAA,EAAQ,QAAQ,CAAA,IAAA,EAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,MAChD;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CACN,QAAA,EACA,SAAA,EACA,OAAA,EACA,MACA,KAAA,EACM;AACN,IAAA,IAAA,CAAK,aAAa,QAAA,EAAU;AAAA,MAC1B,IAAI,UAAA,EAAW;AAAA,MACf,IAAA,EAAM,UAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,SAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA;AACF,KACuB,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAA,CACN,QAAA,EACA,SAAA,EACA,IAAA,EACA,OAAA,EACM;AACN,IAAA,IAAA,CAAK,aAAa,QAAA,EAAU;AAAA,MAC1B,IAAI,UAAA,EAAW;AAAA,MACf,IAAA,EAAM,OAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,SAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA;AAAA,QACA;AAAA;AACF,KACiB,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAA,GAAsB;AACxB,IAAA,OAAO,KAAK,OAAA,CAAQ,IAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAA,GAAsB;AACxB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAsB;AACpB,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,MAAM,CAAA,IAAK,KAAK,OAAA,EAAS;AAC9C,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,GAAG,KAAA,EAAM;AAAA,MAClB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,EACrB;AACF,CAAA;;;ACzeA,IAAM,cAAA,GAEF;AAAA,EACF,IAAA,EAAM,WAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,SAAA,EAAW,KAAA;AAAA,EACX,aAAA,EAAe,IAAA;AAAA,EACf,KAAK,OAAA,CAAQ;AACf,CAAA;AAKA,SAAS,SAAA,CAAU,OAAuB,IAAA,EAAmC;AAC3E,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAA;AAAA,IACT,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,QAAQ,KAAA,CAAM,OAAA;AAAA,IACjD,IAAA;AAAA,IACA,SAAA,EAAW,KAAK,GAAA;AAAI,GACtB;AACF;AAMO,IAAM,mBAAN,MAAuB;AAAA,EAW5B,WAAA,CAAY,QAAA,EAAkC,MAAA,GAAiC,EAAC,EAAG;AAVnF,IAAA,IAAA,CAAQ,MAAA,GAAuC,IAAA;AAC/C,IAAA,IAAA,CAAQ,QAAA,GAAoB,IAAA;AAM5B,IAAA,IAAA,CAAQ,SAAA,GAAsC,IAAA;AAC9C,IAAA,IAAA,CAAQ,aAAA,uBAAwC,GAAA,EAAI;AAGlD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AAG7C,IAAA,IAAI,IAAA,CAAK,OAAO,SAAA,EAAW;AACzB,MAAA,IAAA,CAAK,SAAA,GAAY,IAAI,iBAAA,CAAkB,QAAA,EAAU;AAAA,QAC/C,OAAA,EAAS,IAAA;AAAA,QACT,GAAA,EAAK,KAAK,MAAA,CAAO;AAAA,OAClB,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,IAAA,GAAO,MAAM,OAAO,MAAM,CAAA;AAEhC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,OAAO,KAAK,GAAA,KAAQ;AAClD,MAAA,MAAM,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,GAAG,CAAA;AAAA,IACnC,CAAC,CAAA;AAGD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,IAAA,CAAK,SAAA,EAAW;AAC3C,MAAA,MAAM,KAAK,oBAAA,EAAqB;AAAA,IAClC;AAEA,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAQ,OAAO,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM;AAC5D,QAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,UACV,wCAAwC,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,SAC9E;AACA,QAAA,IAAI,IAAA,CAAK,OAAO,SAAA,EAAW;AACzB,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB,KAAK,MAAA,CAAO,IAAA;AACxD,UAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,YACV,CAAA,6CAAA,EAAgD,IAAA,CAAK,MAAA,CAAO,IAAI,IAAI,MAAM,CAAA;AAAA,WAC5E;AAAA,QACF;AACA,QAAA,OAAA,EAAQ;AAAA,MACV,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,MAAA,CAAQ,EAAA,CAAG,OAAA,EAAS,MAAM,CAAA;AAAA,IACjC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,oBAAA,GAAsC;AAClD,IAAA,IAAI;AAEF,MAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,OAAO,IAAI,CAAA;AAE7C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB,KAAK,MAAA,CAAO,IAAA;AACxD,MAAA,MAAM,WAAA,GAAc,MAAA,KAAW,IAAA,CAAK,MAAA,CAAO,IAAA;AAE3C,MAAA,IAAI,WAAA,IAAe,KAAK,MAAA,EAAQ;AAE9B,QAAA,IAAA,CAAK,WAAW,IAAI,eAAA,CAAgB,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA,MAC7D,CAAA,MAAO;AAEL,QAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,CAAgB;AAAA,UAClC,IAAA,EAAM,KAAK,MAAA,CAAO,IAAA;AAAA,UAClB,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,MAAM,IAAA,CAAK,QAAA;AAMjB,MAAA,GAAA,CAAI,EAAA,CAAG,YAAA,EAAc,CAAC,EAAA,KAAO;AAC3B,QAAA,IAAA,CAAK,aAAA,CAAc,IAAI,EAAE,CAAA;AACzB,QAAA,IAAA,CAAK,SAAA,CAAW,iBAAiB,EAAE,CAAA;AAEnC,QAAA,EAAA,CAAG,UAAU,MAAM;AACjB,UAAA,IAAA,CAAK,aAAA,CAAc,OAAO,EAAE,CAAA;AAAA,QAC9B,CAAA;AAAA,MACF,CAAC,CAAA;AAED,MAAA,GAAA,CAAI,EAAA,CAAG,OAAA,EAAS,CAAC,KAAA,KAAU;AACzB,QAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,wBAAA,EAA2B,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MAC5D,CAAC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AAEd,MAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,QACV;AAAA,OACF;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,GAAsB;AAE1B,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,UAAU,aAAA,EAAc;AAAA,IAC/B;AAGA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,MAAM,IAAA,CAAK,QAAA;AACjB,MAAA,GAAA,CAAI,KAAA,EAAM;AACV,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,IAClB;AAGA,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,aAAA,EAAe;AACnC,MAAA,EAAA,CAAG,KAAA,EAAM;AAAA,IACX;AACA,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AAEzB,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,QAAA,OAAA,EAAQ;AACR,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAC,GAAA,KAAQ;AACzB,QAAA,IAAI,GAAA,SAAY,GAAG,CAAA;AAAA,aACd,OAAA,EAAQ;AAAA,MACf,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAA,CACZ,GAAA,EACA,GAAA,EACe;AACf,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,GAAA,CAAI,GAAA,IAAO,KAAK,CAAA,OAAA,EAAU,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAChE,IAAA,MAAM,MAAA,GAAS,IAAI,MAAA,IAAU,KAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,YAAA;AAGzC,IAAA,IAAI,IAAA,CAAK,OAAO,IAAA,EAAM;AACpB,MAAA,GAAA,CAAI,SAAA,CAAU,+BAA+B,GAAG,CAAA;AAChD,MAAA,GAAA,CAAI,SAAA,CAAU,gCAAgC,iCAAiC,CAAA;AAC/E,MAAA,GAAA,CAAI,SAAA,CAAU,gCAAgC,6BAA6B,CAAA;AAAA,IAC7E;AAGA,IAAA,IAAI,WAAW,SAAA,EAAW;AACxB,MAAA,GAAA,CAAI,UAAU,GAAG,CAAA;AACjB,MAAA,GAAA,CAAI,GAAA,EAAI;AACR,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,GAAA,CAAI,aAAa,SAAA,EAAW;AAC9B,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,MAAM,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAC1D,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,GAAA,CAAI,QAAA;AACf,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC7B,MAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IAAK,GAAA;AAAA,IACxC;AAGA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,SAAS,GAAA,EAAK,SAAA,CAAU,WAAA,EAAa,WAAW,GAAG,GAAG,CAAA;AAC3D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,IAAI,OAAgB,EAAC;AACrB,MAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,QAAA,IAAA,GAAO,MAAM,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA;AAAA,MACjC;AAGA,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,MAAM,IAAI,CAAA;AAGlD,MAAA,MAAM,cAAc,KAAA,CAAM,OAAA;AAC1B,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AAEzC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,IAAA,CAAK,SAAS,GAAA,EAAK,SAAA,CAAU,iBAAA,EAAmB,iBAAiB,GAAG,GAAG,CAAA;AACvE,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,OAAkB,EAAC;AAEzB,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,UAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QACzB;AAAA,MACF;AAEA,MAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,QAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,MAChB;AAEA,MAAA,IAAI,WAAW,KAAA,EAAO;AACpB,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,YAAY,CAAA;AACjD,QAAA,IAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG;AACjC,UAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,QACjB;AAAA,MACF;AAGA,MAAA,MAAM,SAAS,MAAO,OAAA;AAAA,QACpB,GAAG;AAAA,OACL;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,eAAA,EAAkB,MAAM,IAAI,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAC5D,MAAA,IAAA,CAAK,SAAS,GAAA,EAAK,SAAA,CAAU,KAAA,EAAgB,gBAAgB,GAAG,GAAG,CAAA;AAAA,IACrE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAA,CAAU,MAAc,MAAA,EAAqD;AACnF,IAAA,KAAA,MAAW,SAAS,gBAAA,EAAkB;AACpC,MAAA,IAAI,KAAA,CAAM,WAAW,MAAA,EAAQ;AAE7B,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,OAAA,CAAQ,WAAW,SAAS,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AAEhF,MAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAG,CAAA;AAC1C,MAAA,IAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG;AACpB,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CAAc,MAAc,SAAA,EAA2C;AAC7E,IAAA,MAAM,SAAiC,EAAC;AACxC,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA;AACtC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAEhC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,IAAI,UAAA,CAAW,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG;AACjC,QAAA,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,UAAU,CAAC,CAAA;AAAA,MAC9C;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAU,GAAA,EAAuD;AACvE,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,GAAA,CAAI,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAW,QAAQ,KAAM,CAAA;AACzC,MAAA,GAAA,CAAI,EAAA,CAAG,OAAO,MAAM;AAClB,QAAA,IAAI;AACF,UAAA,OAAA,CAAQ,OAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,EAAE,CAAA;AAAA,QACtC,CAAA,CAAA,MAAQ;AACN,UAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,QACZ;AAAA,MACF,CAAC,CAAA;AACD,MAAA,GAAA,CAAI,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,IACxB,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,QAAA,CAAS,GAAA,EAAoC,IAAA,EAAe,MAAA,GAAS,GAAA,EAAW;AACtF,IAAA,GAAA,CAAI,SAAA,CAAU,MAAA,EAAQ,EAAE,cAAA,EAAgB,oBAAoB,CAAA;AAC5D,IAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,OAAA,EAAiC;AACzC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACnC,IAAA,KAAA,MAAW,EAAA,IAAM,KAAK,aAAA,EAAe;AACnC,MAAA,IAAI,EAAA,CAAG,eAAe,CAAA,EAAG;AAEvB,QAAA,EAAA,CAAG,KAAK,IAAI,CAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,KAAA,EAA0B;AACvC,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,SAAA,CAAU,eAAe,KAAK,CAAA;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAyC;AACvC,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,aAAA,GAAwB;AAC1B,IAAA,OAAO,IAAA,CAAK,WAAW,WAAA,IAAe,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAoD;AAClD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,EAAQ,OAAA,EAAQ;AACrC,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,UAAU,OAAO,IAAA;AACpD,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,OAAO,IAAA,EAAM,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,EACtD;AACF;AAKA,eAAsB,sBAAA,CACpB,UACA,MAAA,EAC2B;AAC3B,EAAA,MAAM,MAAA,GAAS,IAAI,gBAAA,CAAiB,QAAA,EAAU,MAAM,CAAA;AACpD,EAAA,MAAM,OAAO,KAAA,EAAM;AACnB,EAAA,OAAO,MAAA;AACT;AAKA,eAAsB,SACpB,QAAA,EACA,IAAA,GAAiB,QAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EACtB;AACf,EAAA,MAAM,SAAiC,EAAC;AAGxC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AAE1B,IAAA,IAAI,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,EAAM;AACpC,MAAA,MAAA,CAAO,IAAA,GAAO,SAAS,OAAO,CAAA;AAC9B,MAAA,CAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAW,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,EAAM;AAC3C,MAAA,MAAA,CAAO,IAAA,GAAO,OAAA;AACd,MAAA,CAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,sBAAA,CAAuB,QAAA,EAAU,MAAM,CAAA;AAG5D,EAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,YAAY;AAC/B,IAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,IAAA,MAAM,OAAO,IAAA,EAAK;AAClB,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAED,EAAA,OAAA,CAAQ,EAAA,CAAG,WAAW,YAAY;AAChC,IAAA,MAAM,OAAO,IAAA,EAAK;AAClB,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AACH","file":"standalone.js","sourcesContent":["/**\n * UI Bridge Server Types\n *\n * Shared types for server adapters.\n */\n\nimport type { UIBridgeConfig } from '../core';\nimport type {\n ControlActionRequest,\n ControlActionResponse,\n ComponentActionRequest,\n ComponentActionResponse,\n FindRequest,\n FindResponse,\n ControlSnapshot,\n WorkflowRunRequest,\n WorkflowRunResponse,\n} from '../control';\nimport type { RenderLogEntry, RenderLogEntryType } from '../render-log';\nimport type {\n SearchCriteria,\n SearchResponse,\n NLActionRequest,\n NLActionResponse,\n AssertionRequest,\n AssertionResult,\n BatchAssertionRequest,\n BatchAssertionResult,\n SemanticSnapshot,\n SemanticDiff,\n SemanticSearchCriteria,\n SemanticSearchResponse,\n} from '../ai';\n\n/**\n * Server configuration\n */\nexport interface UIBridgeServerConfig extends UIBridgeConfig {\n /** Base path for API routes */\n basePath?: string;\n /** Enable CORS */\n cors?: boolean | CORSOptions;\n /** Authentication middleware */\n authenticate?: (req: unknown) => boolean | Promise<boolean>;\n /** Rate limiting */\n rateLimit?: RateLimitOptions;\n}\n\n/**\n * CORS options\n */\nexport interface CORSOptions {\n /** Allowed origins */\n origin?: string | string[] | boolean;\n /** Allowed methods */\n methods?: string[];\n /** Allowed headers */\n headers?: string[];\n /** Expose headers */\n exposeHeaders?: string[];\n /** Allow credentials */\n credentials?: boolean;\n /** Max age for preflight cache */\n maxAge?: number;\n}\n\n/**\n * Rate limit options\n */\nexport interface RateLimitOptions {\n /** Time window in milliseconds */\n windowMs?: number;\n /** Max requests per window */\n max?: number;\n /** Message when rate limited */\n message?: string;\n}\n\n/**\n * API response wrapper\n */\nexport interface APIResponse<T = unknown> {\n /** Whether the request succeeded */\n success: boolean;\n /** Response data */\n data?: T;\n /** Error message if failed */\n error?: string;\n /** Error code */\n code?: string;\n /** Request timestamp */\n timestamp: number;\n}\n\n/**\n * Render log query parameters\n */\nexport interface RenderLogQuery {\n /** Filter by entry type */\n type?: RenderLogEntryType;\n /** Filter entries since timestamp */\n since?: number;\n /** Filter entries until timestamp */\n until?: number;\n /** Limit number of results */\n limit?: number;\n}\n\n/**\n * Server handler interface\n *\n * Implementations provide these handlers for different frameworks.\n */\nexport interface UIBridgeServerHandlers {\n // Render log endpoints\n getRenderLog: (query?: RenderLogQuery) => Promise<APIResponse<RenderLogEntry[]>>;\n clearRenderLog: () => Promise<APIResponse<void>>;\n captureSnapshot: () => Promise<APIResponse<unknown>>;\n getRenderLogPath: () => Promise<APIResponse<{ path: string }>>;\n\n // Control endpoints\n getElements: () => Promise<APIResponse<ControlSnapshot['elements']>>;\n getElement: (id: string) => Promise<APIResponse<ControlSnapshot['elements'][0]>>;\n getElementState: (id: string) => Promise<APIResponse<unknown>>;\n executeElementAction: (\n id: string,\n request: ControlActionRequest\n ) => Promise<APIResponse<ControlActionResponse>>;\n\n // Component endpoints\n getComponents: () => Promise<APIResponse<ControlSnapshot['components']>>;\n getComponent: (id: string) => Promise<APIResponse<ControlSnapshot['components'][0]>>;\n getComponentState: (id: string) => Promise<APIResponse<{ state: Record<string, unknown>; computed: Record<string, unknown>; timestamp: number }>>;\n executeComponentAction: (\n id: string,\n request: ComponentActionRequest\n ) => Promise<APIResponse<ComponentActionResponse>>;\n\n // Find endpoints\n find: (request?: FindRequest) => Promise<APIResponse<FindResponse>>;\n /**\n * @deprecated Use find() instead\n */\n discover: (request?: FindRequest) => Promise<APIResponse<FindResponse>>;\n getControlSnapshot: () => Promise<APIResponse<ControlSnapshot>>;\n\n // Workflow endpoints\n getWorkflows: () => Promise<APIResponse<ControlSnapshot['workflows']>>;\n runWorkflow: (\n id: string,\n request?: WorkflowRunRequest\n ) => Promise<APIResponse<WorkflowRunResponse>>;\n getWorkflowStatus: (runId: string) => Promise<APIResponse<WorkflowRunResponse>>;\n\n // Debug endpoints\n getActionHistory: (limit?: number) => Promise<APIResponse<unknown[]>>;\n getMetrics: () => Promise<APIResponse<unknown>>;\n highlightElement: (id: string) => Promise<APIResponse<void>>;\n getElementTree: () => Promise<APIResponse<unknown>>;\n\n // AI-native endpoints\n aiSearch: (criteria: SearchCriteria) => Promise<APIResponse<SearchResponse>>;\n aiExecute: (request: NLActionRequest) => Promise<APIResponse<NLActionResponse>>;\n aiAssert: (request: AssertionRequest) => Promise<APIResponse<AssertionResult>>;\n aiAssertBatch: (request: BatchAssertionRequest) => Promise<APIResponse<BatchAssertionResult>>;\n getSemanticSnapshot: () => Promise<APIResponse<SemanticSnapshot>>;\n getSemanticDiff: (since?: number) => Promise<APIResponse<SemanticDiff | null>>;\n getPageSummary: () => Promise<APIResponse<string>>;\n\n // Semantic search (embedding-based)\n aiSemanticSearch: (criteria: SemanticSearchCriteria) => Promise<APIResponse<SemanticSearchResponse>>;\n}\n\n/**\n * Route definition\n */\nexport interface RouteDefinition {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n path: string;\n handler: string; // Key in UIBridgeServerHandlers\n params?: string[]; // URL params to extract\n bodyRequired?: boolean;\n}\n\n/**\n * All UI Bridge routes\n */\nexport const UI_BRIDGE_ROUTES: RouteDefinition[] = [\n // Render log\n { method: 'GET', path: '/render-log', handler: 'getRenderLog' },\n { method: 'DELETE', path: '/render-log', handler: 'clearRenderLog' },\n { method: 'POST', path: '/render-log/snapshot', handler: 'captureSnapshot' },\n { method: 'GET', path: '/render-log/path', handler: 'getRenderLogPath' },\n\n // Control - Elements\n { method: 'GET', path: '/control/elements', handler: 'getElements' },\n { method: 'GET', path: '/control/element/:id', handler: 'getElement', params: ['id'] },\n { method: 'GET', path: '/control/element/:id/state', handler: 'getElementState', params: ['id'] },\n {\n method: 'POST',\n path: '/control/element/:id/action',\n handler: 'executeElementAction',\n params: ['id'],\n bodyRequired: true,\n },\n\n // Control - Components\n { method: 'GET', path: '/control/components', handler: 'getComponents' },\n { method: 'GET', path: '/control/component/:id', handler: 'getComponent', params: ['id'] },\n { method: 'GET', path: '/control/component/:id/state', handler: 'getComponentState', params: ['id'] },\n {\n method: 'POST',\n path: '/control/component/:id/action/:actionId',\n handler: 'executeComponentAction',\n params: ['id', 'actionId'],\n bodyRequired: true,\n },\n\n // Find (formerly Discovery)\n { method: 'POST', path: '/control/find', handler: 'find' },\n { method: 'POST', path: '/control/discover', handler: 'discover' }, // @deprecated Use /control/find\n { method: 'GET', path: '/control/snapshot', handler: 'getControlSnapshot' },\n\n // Workflows\n { method: 'GET', path: '/control/workflows', handler: 'getWorkflows' },\n { method: 'POST', path: '/control/workflow/:id/run', handler: 'runWorkflow', params: ['id'] },\n {\n method: 'GET',\n path: '/control/workflow/:runId/status',\n handler: 'getWorkflowStatus',\n params: ['runId'],\n },\n\n // Debug\n { method: 'GET', path: '/debug/action-history', handler: 'getActionHistory' },\n { method: 'GET', path: '/debug/metrics', handler: 'getMetrics' },\n { method: 'POST', path: '/debug/highlight/:id', handler: 'highlightElement', params: ['id'] },\n { method: 'GET', path: '/debug/element-tree', handler: 'getElementTree' },\n\n // AI-native endpoints\n { method: 'POST', path: '/ai/search', handler: 'aiSearch', bodyRequired: true },\n { method: 'POST', path: '/ai/execute', handler: 'aiExecute', bodyRequired: true },\n { method: 'POST', path: '/ai/assert', handler: 'aiAssert', bodyRequired: true },\n { method: 'POST', path: '/ai/assert/batch', handler: 'aiAssertBatch', bodyRequired: true },\n { method: 'GET', path: '/ai/snapshot', handler: 'getSemanticSnapshot' },\n { method: 'GET', path: '/ai/diff', handler: 'getSemanticDiff' },\n { method: 'GET', path: '/ai/summary', handler: 'getPageSummary' },\n { method: 'POST', path: '/ai/semantic-search', handler: 'aiSemanticSearch', bodyRequired: true },\n];\n\n/**\n * WebSocket message types\n */\nexport type WebSocketMessageType =\n | 'subscribe'\n | 'unsubscribe'\n | 'event'\n | 'snapshot'\n | 'action'\n | 'error';\n\n/**\n * WebSocket message\n */\nexport interface WebSocketMessage<T = unknown> {\n type: WebSocketMessageType;\n channel?: string;\n data?: T;\n error?: string;\n timestamp: number;\n}\n","/**\n * WebSocket Handler for UI Bridge Server\n *\n * Handles WebSocket connections and message routing.\n */\n\nimport type { UIBridgeServerHandlers } from './types';\nimport type {\n BridgeEvent,\n BridgeEventType,\n WSClientMessage,\n WSServerMessage,\n WSWelcomeMessage,\n WSPongMessage,\n WSSubscribedMessage,\n WSUnsubscribedMessage,\n WSEventMessage,\n WSResponseMessage,\n WSErrorMessage,\n} from '../core';\n\n/**\n * WebSocket-like interface for compatibility\n */\nexport interface WebSocketLike {\n send(data: string): void;\n close(): void;\n readyState: number;\n onmessage?: ((event: { data: string }) => void) | null;\n onclose?: (() => void) | null;\n onerror?: ((error: unknown) => void) | null;\n}\n\n/**\n * Client subscription state\n */\ninterface ClientSubscription {\n events: Set<BridgeEventType>;\n elementIds: Set<string>;\n componentIds: Set<string>;\n}\n\n/**\n * Connected client info\n */\ninterface ConnectedClient {\n id: string;\n ws: WebSocketLike;\n subscription: ClientSubscription;\n connectedAt: number;\n}\n\n/**\n * Generate unique ID\n */\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n}\n\n/**\n * UI Bridge server version\n */\nconst VERSION = '0.1.0';\n\n/**\n * WebSocket handler for UI Bridge server\n */\nexport class UIBridgeWSHandler {\n private handlers: UIBridgeServerHandlers;\n private clients = new Map<string, ConnectedClient>();\n private verbose: boolean;\n private log: (message: string) => void;\n\n constructor(\n handlers: UIBridgeServerHandlers,\n options: { verbose?: boolean; log?: (message: string) => void } = {}\n ) {\n this.handlers = handlers;\n this.verbose = options.verbose ?? false;\n this.log = options.log ?? console.log;\n }\n\n /**\n * Handle new WebSocket connection\n */\n handleConnection(ws: WebSocketLike): string {\n const clientId = generateId();\n\n const client: ConnectedClient = {\n id: clientId,\n ws,\n subscription: {\n events: new Set(),\n elementIds: new Set(),\n componentIds: new Set(),\n },\n connectedAt: Date.now(),\n };\n\n this.clients.set(clientId, client);\n\n if (this.verbose) {\n this.log(`[WS] Client connected: ${clientId}`);\n }\n\n // Set up message handler\n ws.onmessage = (event: { data: string }) => {\n this.handleMessage(clientId, event.data);\n };\n\n // Set up close handler\n ws.onclose = () => {\n this.handleDisconnect(clientId);\n };\n\n // Send welcome message\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'welcome',\n timestamp: Date.now(),\n payload: {\n version: VERSION,\n features: {\n renderLog: true,\n control: true,\n debug: true,\n },\n clientId,\n },\n } as WSWelcomeMessage);\n\n return clientId;\n }\n\n /**\n * Handle client disconnect\n */\n handleDisconnect(clientId: string): void {\n this.clients.delete(clientId);\n\n if (this.verbose) {\n this.log(`[WS] Client disconnected: ${clientId}`);\n }\n }\n\n /**\n * Handle incoming message\n */\n private async handleMessage(clientId: string, data: string): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) return;\n\n let message: WSClientMessage;\n try {\n message = JSON.parse(data) as WSClientMessage;\n } catch (error) {\n this.sendError(clientId, undefined, 'PARSE_ERROR', 'Invalid JSON message');\n return;\n }\n\n if (this.verbose) {\n this.log(`[WS] ${clientId} -> ${message.type}`);\n }\n\n try {\n switch (message.type) {\n case 'ping':\n this.handlePing(clientId, message.id);\n break;\n\n case 'subscribe':\n await this.handleSubscribe(clientId, message);\n break;\n\n case 'unsubscribe':\n await this.handleUnsubscribe(clientId, message);\n break;\n\n case 'find':\n await this.handleFind(clientId, message);\n break;\n\n case 'discover':\n // @deprecated Use 'find' instead\n await this.handleFind(clientId, message as unknown as WSClientMessage & { type: 'find' });\n break;\n\n case 'getElement':\n await this.handleGetElement(clientId, message);\n break;\n\n case 'getSnapshot':\n await this.handleGetSnapshot(clientId, message);\n break;\n\n case 'executeAction':\n await this.handleExecuteAction(clientId, message);\n break;\n\n case 'executeComponentAction':\n await this.handleExecuteComponentAction(clientId, message);\n break;\n\n case 'executeWorkflow':\n await this.handleExecuteWorkflow(clientId, message);\n break;\n\n default:\n this.sendError(\n clientId,\n (message as WSClientMessage).id,\n 'UNKNOWN_MESSAGE',\n `Unknown message type: ${(message as WSClientMessage).type}`\n );\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.sendError(clientId, message.id, 'HANDLER_ERROR', err.message);\n }\n }\n\n /**\n * Handle ping message\n */\n private handlePing(clientId: string, _requestId: string): void {\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'pong',\n timestamp: Date.now(),\n } as WSPongMessage);\n }\n\n /**\n * Handle subscribe message\n */\n private async handleSubscribe(\n clientId: string,\n message: WSClientMessage & { type: 'subscribe' }\n ): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) return;\n\n const { events, elementIds, componentIds } = message.payload;\n\n // Add to subscriptions\n if (events?.length) {\n for (const event of events) {\n client.subscription.events.add(event);\n }\n }\n if (elementIds?.length) {\n for (const id of elementIds) {\n client.subscription.elementIds.add(id);\n }\n }\n if (componentIds?.length) {\n for (const id of componentIds) {\n client.subscription.componentIds.add(id);\n }\n }\n\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'subscribed',\n timestamp: Date.now(),\n payload: {\n events: Array.from(client.subscription.events),\n },\n } as WSSubscribedMessage);\n }\n\n /**\n * Handle unsubscribe message\n */\n private async handleUnsubscribe(\n clientId: string,\n message: WSClientMessage & { type: 'unsubscribe' }\n ): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) return;\n\n const { events } = message.payload;\n\n let removedEvents: BridgeEventType[];\n if (events?.length) {\n removedEvents = events.filter((e: BridgeEventType) => client.subscription.events.has(e));\n for (const event of events) {\n client.subscription.events.delete(event);\n }\n } else {\n removedEvents = Array.from(client.subscription.events);\n client.subscription.events.clear();\n client.subscription.elementIds.clear();\n client.subscription.componentIds.clear();\n }\n\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'unsubscribed',\n timestamp: Date.now(),\n payload: {\n events: removedEvents,\n },\n } as WSUnsubscribedMessage);\n }\n\n /**\n * Handle find message\n */\n private async handleFind(\n clientId: string,\n message: WSClientMessage & { type: 'find' }\n ): Promise<void> {\n const result = await this.handlers.find(message.payload || {});\n\n if (result.success && result.data) {\n this.sendResponse(clientId, message.id, true, { elements: result.data.elements });\n } else {\n this.sendResponse(clientId, message.id, false, undefined, result.error);\n }\n }\n\n /**\n * Handle getElement message\n */\n private async handleGetElement(\n clientId: string,\n message: WSClientMessage & { type: 'getElement' }\n ): Promise<void> {\n const { elementId } = message.payload;\n const result = await this.handlers.getElement(elementId);\n\n if (result.success) {\n this.sendResponse(clientId, message.id, true, { element: result.data });\n } else {\n this.sendResponse(clientId, message.id, false, undefined, result.error);\n }\n }\n\n /**\n * Handle getSnapshot message\n */\n private async handleGetSnapshot(\n clientId: string,\n message: WSClientMessage & { type: 'getSnapshot' }\n ): Promise<void> {\n const result = await this.handlers.getControlSnapshot();\n\n if (result.success) {\n this.sendResponse(clientId, message.id, true, result.data);\n } else {\n this.sendResponse(clientId, message.id, false, undefined, result.error);\n }\n }\n\n /**\n * Handle executeAction message\n */\n private async handleExecuteAction(\n clientId: string,\n message: WSClientMessage & { type: 'executeAction' }\n ): Promise<void> {\n const { elementId, action } = message.payload;\n const result = await this.handlers.executeElementAction(elementId, action);\n\n this.sendResponse(clientId, message.id, result.success, result.data, result.error);\n }\n\n /**\n * Handle executeComponentAction message\n */\n private async handleExecuteComponentAction(\n clientId: string,\n message: WSClientMessage & { type: 'executeComponentAction' }\n ): Promise<void> {\n const { componentId, action, params } = message.payload;\n const result = await this.handlers.executeComponentAction(componentId, { action, params });\n\n this.sendResponse(clientId, message.id, result.success, result.data, result.error);\n }\n\n /**\n * Handle executeWorkflow message\n */\n private async handleExecuteWorkflow(\n clientId: string,\n message: WSClientMessage & { type: 'executeWorkflow' }\n ): Promise<void> {\n const { workflowId, params } = message.payload;\n\n // Note: Progress streaming would need to be added to the handlers interface\n // For now, we just run the workflow without progress callbacks\n const result = await this.handlers.runWorkflow(workflowId, { params });\n\n this.sendResponse(clientId, message.id, result.success, result.data, result.error);\n }\n\n /**\n * Broadcast event to all subscribed clients\n */\n broadcastEvent(event: BridgeEvent): void {\n for (const [clientId, client] of this.clients) {\n // Check if client is subscribed to this event type\n if (\n client.subscription.events.size === 0 ||\n client.subscription.events.has(event.type)\n ) {\n // Check element/component filters if applicable\n const eventData = event.data as { elementId?: string; componentId?: string };\n\n if (\n eventData.elementId &&\n client.subscription.elementIds.size > 0 &&\n !client.subscription.elementIds.has(eventData.elementId)\n ) {\n continue;\n }\n\n if (\n eventData.componentId &&\n client.subscription.componentIds.size > 0 &&\n !client.subscription.componentIds.has(eventData.componentId)\n ) {\n continue;\n }\n\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'event',\n timestamp: Date.now(),\n payload: event,\n } as WSEventMessage);\n }\n }\n }\n\n /**\n * Send message to specific client\n */\n private sendToClient(clientId: string, message: WSServerMessage): void {\n const client = this.clients.get(clientId);\n if (!client || client.ws.readyState !== 1) return;\n\n try {\n client.ws.send(JSON.stringify(message));\n\n if (this.verbose && message.type !== 'pong') {\n this.log(`[WS] ${clientId} <- ${message.type}`);\n }\n } catch (error) {\n console.error(`Failed to send message to ${clientId}:`, error);\n }\n }\n\n /**\n * Send response message\n */\n private sendResponse<T>(\n clientId: string,\n requestId: string,\n success: boolean,\n data?: T,\n error?: string\n ): void {\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'response',\n timestamp: Date.now(),\n requestId,\n payload: {\n success,\n data,\n error,\n },\n } as WSResponseMessage<T>);\n }\n\n /**\n * Send error message\n */\n private sendError(\n clientId: string,\n requestId: string | undefined,\n code: string,\n message: string\n ): void {\n this.sendToClient(clientId, {\n id: generateId(),\n type: 'error',\n timestamp: Date.now(),\n requestId,\n payload: {\n code,\n message,\n },\n } as WSErrorMessage);\n }\n\n /**\n * Get connected client count\n */\n get clientCount(): number {\n return this.clients.size;\n }\n\n /**\n * Get all connected client IDs\n */\n get clientIds(): string[] {\n return Array.from(this.clients.keys());\n }\n\n /**\n * Disconnect all clients\n */\n disconnectAll(): void {\n for (const [_clientId, client] of this.clients) {\n try {\n client.ws.close();\n } catch {\n // Ignore close errors\n }\n }\n this.clients.clear();\n }\n}\n","/**\n * Standalone Server\n *\n * Standalone HTTP server for UI Bridge that can run independently.\n * Supports both HTTP and WebSocket connections.\n */\n\nimport type {\n UIBridgeServerConfig,\n UIBridgeServerHandlers,\n APIResponse,\n WebSocketMessage,\n} from './types';\nimport { UI_BRIDGE_ROUTES } from './types';\nimport { UIBridgeWSHandler, type WebSocketLike } from './websocket-handler';\nimport type { BridgeEvent } from '../core';\n\n/**\n * Standalone server configuration\n */\nexport interface StandaloneServerConfig extends UIBridgeServerConfig {\n /** Host to bind to */\n host?: string;\n /** Port to listen on */\n port?: number;\n /** Enable WebSocket support */\n websocket?: boolean;\n /** WebSocket port (defaults to port) */\n websocketPort?: number;\n /** Logging function */\n log?: (message: string) => void;\n}\n\n/**\n * Default configuration\n */\nconst DEFAULT_CONFIG: Required<\n Pick<StandaloneServerConfig, 'host' | 'port' | 'websocket' | 'websocketPort' | 'log'>\n> = {\n host: 'localhost',\n port: 9876,\n websocket: false,\n websocketPort: 9876,\n log: console.log,\n};\n\n/**\n * Wrap error in API format\n */\nfunction wrapError(error: Error | string, code?: string): APIResponse<never> {\n return {\n success: false,\n error: typeof error === 'string' ? error : error.message,\n code,\n timestamp: Date.now(),\n };\n}\n\n/**\n * Simple HTTP server implementation using Node.js built-in http module\n * with optional WebSocket support.\n */\nexport class StandaloneServer {\n private server: import('http').Server | null = null;\n private wsServer: unknown = null; // WebSocket.Server from 'ws' package\n private config: Required<\n Pick<StandaloneServerConfig, 'host' | 'port' | 'websocket' | 'websocketPort' | 'log'>\n > &\n StandaloneServerConfig;\n private handlers: UIBridgeServerHandlers;\n private wsHandler: UIBridgeWSHandler | null = null;\n private wsConnections: Set<WebSocketLike> = new Set();\n\n constructor(handlers: UIBridgeServerHandlers, config: StandaloneServerConfig = {}) {\n this.handlers = handlers;\n this.config = { ...DEFAULT_CONFIG, ...config };\n\n // Create WebSocket handler if enabled\n if (this.config.websocket) {\n this.wsHandler = new UIBridgeWSHandler(handlers, {\n verbose: true,\n log: this.config.log,\n });\n }\n }\n\n /**\n * Start the server\n */\n async start(): Promise<void> {\n const http = await import('http');\n\n this.server = http.createServer(async (req, res) => {\n await this.handleRequest(req, res);\n });\n\n // Start WebSocket server if enabled\n if (this.config.websocket && this.wsHandler) {\n await this.startWebSocketServer();\n }\n\n return new Promise((resolve, reject) => {\n this.server!.listen(this.config.port, this.config.host, () => {\n this.config.log(\n `UI Bridge server listening on http://${this.config.host}:${this.config.port}`\n );\n if (this.config.websocket) {\n const wsPort = this.config.websocketPort || this.config.port;\n this.config.log(\n `UI Bridge WebSocket server listening on ws://${this.config.host}:${wsPort}`\n );\n }\n resolve();\n });\n\n this.server!.on('error', reject);\n });\n }\n\n /**\n * Start WebSocket server\n */\n private async startWebSocketServer(): Promise<void> {\n try {\n // Dynamically import ws package\n const { WebSocketServer } = await import('ws');\n\n const wsPort = this.config.websocketPort || this.config.port;\n const useSamePort = wsPort === this.config.port;\n\n if (useSamePort && this.server) {\n // Attach to same HTTP server (upgrade handling)\n this.wsServer = new WebSocketServer({ server: this.server });\n } else {\n // Create separate WebSocket server\n this.wsServer = new WebSocketServer({\n host: this.config.host,\n port: wsPort,\n });\n }\n\n const wss = this.wsServer as {\n on(event: 'connection', callback: (ws: WebSocketLike) => void): void;\n on(event: 'error', callback: (error: Error) => void): void;\n close(): void;\n };\n\n wss.on('connection', (ws) => {\n this.wsConnections.add(ws);\n this.wsHandler!.handleConnection(ws);\n\n ws.onclose = () => {\n this.wsConnections.delete(ws);\n };\n });\n\n wss.on('error', (error) => {\n this.config.log(`WebSocket server error: ${error.message}`);\n });\n } catch (error) {\n // ws package not installed - WebSocket support disabled\n this.config.log(\n 'Warning: WebSocket support requires the \"ws\" package. Install it with: npm install ws'\n );\n this.wsHandler = null;\n }\n }\n\n /**\n * Stop the server\n */\n async stop(): Promise<void> {\n // Close WebSocket handler\n if (this.wsHandler) {\n this.wsHandler.disconnectAll();\n }\n\n // Close WebSocket server\n if (this.wsServer) {\n const wss = this.wsServer as { close(): void };\n wss.close();\n this.wsServer = null;\n }\n\n // Close WebSocket connections\n for (const ws of this.wsConnections) {\n ws.close();\n }\n this.wsConnections.clear();\n\n return new Promise((resolve, reject) => {\n if (!this.server) {\n resolve();\n return;\n }\n\n this.server.close((err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n\n /**\n * Handle an HTTP request\n */\n private async handleRequest(\n req: import('http').IncomingMessage,\n res: import('http').ServerResponse\n ): Promise<void> {\n const url = new URL(req.url || '/', `http://${req.headers.host}`);\n const method = req.method || 'GET';\n const basePath = this.config.basePath || '/ui-bridge';\n\n // Add CORS headers\n if (this.config.cors) {\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n }\n\n // Handle preflight\n if (method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n // Health check\n if (url.pathname === '/health') {\n this.sendJSON(res, { status: 'ok', timestamp: Date.now() });\n return;\n }\n\n // Remove base path\n let path = url.pathname;\n if (path.startsWith(basePath)) {\n path = path.slice(basePath.length) || '/';\n }\n\n // Find matching route\n const route = this.findRoute(path, method);\n if (!route) {\n this.sendJSON(res, wrapError('Not found', 'NOT_FOUND'), 404);\n return;\n }\n\n try {\n // Parse body for POST requests\n let body: unknown = {};\n if (method === 'POST') {\n body = await this.parseBody(req);\n }\n\n // Extract params\n const params = this.extractParams(path, route.path);\n\n // Get handler\n const handlerName = route.handler as keyof UIBridgeServerHandlers;\n const handler = this.handlers[handlerName];\n\n if (!handler) {\n this.sendJSON(res, wrapError('Not implemented', 'NOT_IMPLEMENTED'), 501);\n return;\n }\n\n // Build arguments\n const args: unknown[] = [];\n\n if (route.params) {\n for (const param of route.params) {\n args.push(params[param]);\n }\n }\n\n if (method === 'POST') {\n args.push(body);\n }\n\n if (method === 'GET') {\n const query = Object.fromEntries(url.searchParams);\n if (Object.keys(query).length > 0) {\n args.push(query);\n }\n }\n\n // Call handler\n const result = await (handler as (...args: unknown[]) => Promise<APIResponse<unknown>>)(\n ...args\n );\n this.sendJSON(res, result);\n } catch (error) {\n this.config.log(`Error handling ${method} ${path}: ${error}`);\n this.sendJSON(res, wrapError(error as Error, 'INTERNAL_ERROR'), 500);\n }\n }\n\n /**\n * Find a matching route\n */\n private findRoute(path: string, method: string): (typeof UI_BRIDGE_ROUTES)[0] | null {\n for (const route of UI_BRIDGE_ROUTES) {\n if (route.method !== method) continue;\n\n const routeRegex = route.path.replace(/:[^/]+/g, '([^/]+)').replace(/\\//g, '\\\\/');\n\n const regex = new RegExp(`^${routeRegex}$`);\n if (regex.test(path)) {\n return route;\n }\n }\n return null;\n }\n\n /**\n * Extract params from path\n */\n private extractParams(path: string, routePath: string): Record<string, string> {\n const params: Record<string, string> = {};\n const routeParts = routePath.split('/');\n const pathParts = path.split('/');\n\n for (let i = 0; i < routeParts.length; i++) {\n if (routeParts[i].startsWith(':')) {\n params[routeParts[i].slice(1)] = pathParts[i];\n }\n }\n\n return params;\n }\n\n /**\n * Parse request body\n */\n private parseBody(req: import('http').IncomingMessage): Promise<unknown> {\n return new Promise((resolve, reject) => {\n let data = '';\n req.on('data', (chunk) => (data += chunk));\n req.on('end', () => {\n try {\n resolve(data ? JSON.parse(data) : {});\n } catch {\n resolve({});\n }\n });\n req.on('error', reject);\n });\n }\n\n /**\n * Send JSON response\n */\n private sendJSON(res: import('http').ServerResponse, data: unknown, status = 200): void {\n res.writeHead(status, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(data));\n }\n\n /**\n * Broadcast a message to all WebSocket connections (legacy)\n */\n broadcast(message: WebSocketMessage): void {\n const data = JSON.stringify(message);\n for (const ws of this.wsConnections) {\n if (ws.readyState === 1) {\n // OPEN\n ws.send(data);\n }\n }\n }\n\n /**\n * Broadcast an event to all subscribed WebSocket clients\n */\n broadcastEvent(event: BridgeEvent): void {\n if (this.wsHandler) {\n this.wsHandler.broadcastEvent(event);\n }\n }\n\n /**\n * Get WebSocket handler for direct access\n */\n getWSHandler(): UIBridgeWSHandler | null {\n return this.wsHandler;\n }\n\n /**\n * Get number of connected WebSocket clients\n */\n get wsClientCount(): number {\n return this.wsHandler?.clientCount ?? 0;\n }\n\n /**\n * Get the server address\n */\n getAddress(): { host: string; port: number } | null {\n const address = this.server?.address();\n if (!address || typeof address === 'string') return null;\n return { host: this.config.host, port: address.port };\n }\n}\n\n/**\n * Create and start a standalone server\n */\nexport async function createStandaloneServer(\n handlers: UIBridgeServerHandlers,\n config?: StandaloneServerConfig\n): Promise<StandaloneServer> {\n const server = new StandaloneServer(handlers, config);\n await server.start();\n return server;\n}\n\n/**\n * CLI entry point\n */\nexport async function startCLI(\n handlers: UIBridgeServerHandlers,\n args: string[] = process.argv.slice(2)\n): Promise<void> {\n const config: StandaloneServerConfig = {};\n\n // Parse CLI args\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const nextArg = args[i + 1];\n\n if (arg === '--port' || arg === '-p') {\n config.port = parseInt(nextArg);\n i++;\n } else if (arg === '--host' || arg === '-h') {\n config.host = nextArg;\n i++;\n } else if (arg === '--cors') {\n config.cors = true;\n }\n }\n\n const server = await createStandaloneServer(handlers, config);\n\n // Handle shutdown\n process.on('SIGINT', async () => {\n console.log('\\nShutting down...');\n await server.stop();\n process.exit(0);\n });\n\n process.on('SIGTERM', async () => {\n await server.stop();\n process.exit(0);\n });\n}\n"]}
|