sa2kit 3.7.0 → 3.9.1
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/{chunk-ZJLS5JU5.mjs → chunk-6KD4CD7O.mjs} +7 -16
- package/dist/chunk-6KD4CD7O.mjs.map +1 -0
- package/dist/chunk-FV7IHC23.js +751 -0
- package/dist/chunk-FV7IHC23.js.map +1 -0
- package/dist/chunk-GJVEYCS4.js +12 -0
- package/dist/chunk-GJVEYCS4.js.map +1 -0
- package/dist/chunk-OOVINE7M.mjs +715 -0
- package/dist/chunk-OOVINE7M.mjs.map +1 -0
- package/dist/chunk-PPV4IEWR.mjs +8 -0
- package/dist/chunk-PPV4IEWR.mjs.map +1 -0
- package/dist/{chunk-XPY45Y75.js → chunk-VVHFMAE7.js} +9 -21
- package/dist/chunk-VVHFMAE7.js.map +1 -0
- package/dist/common/aiApi/client/index.d.mts +66 -4
- package/dist/common/aiApi/client/index.d.ts +66 -4
- package/dist/common/aiApi/client/index.js +360 -15
- package/dist/common/aiApi/client/index.js.map +1 -1
- package/dist/common/aiApi/client/index.mjs +345 -11
- package/dist/common/aiApi/client/index.mjs.map +1 -1
- package/dist/common/aiApi/index.d.mts +2 -2
- package/dist/common/aiApi/index.d.ts +2 -2
- package/dist/common/aiApi/index.js +63 -62
- package/dist/common/aiApi/index.mjs +2 -1
- package/dist/common/aiApi/server/index.d.mts +1 -1
- package/dist/common/aiApi/server/index.d.ts +1 -1
- package/dist/common/aiApi/server/index.js +63 -62
- package/dist/common/aiApi/server/index.mjs +2 -1
- package/dist/common/appLauncher/index.d.mts +32 -0
- package/dist/common/appLauncher/index.d.ts +32 -0
- package/dist/common/appLauncher/index.js +149 -0
- package/dist/common/appLauncher/index.js.map +1 -0
- package/dist/common/appLauncher/index.mjs +4 -0
- package/dist/common/appLauncher/index.mjs.map +1 -0
- package/dist/common/appLauncher/rn/index.d.mts +35 -0
- package/dist/common/appLauncher/rn/index.d.ts +35 -0
- package/dist/common/appLauncher/rn/index.js +100 -0
- package/dist/common/appLauncher/rn/index.js.map +1 -0
- package/dist/common/appLauncher/rn/index.mjs +31 -0
- package/dist/common/appLauncher/rn/index.mjs.map +1 -0
- package/dist/index-BHgDdlJW.d.mts +177 -0
- package/dist/index-BHgDdlJW.d.ts +177 -0
- package/dist/index.d.mts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +3 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -9
- package/dist/index.mjs.map +1 -1
- package/dist/{types-CiqMQ-uu.d.mts → types-DgbG0Of-.d.mts} +9 -1
- package/dist/{types-CiqMQ-uu.d.ts → types-DgbG0Of-.d.ts} +9 -1
- package/package.json +11 -1
- package/dist/chunk-XPY45Y75.js.map +0 -1
- package/dist/chunk-ZJLS5JU5.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/appLauncher/adapters/rn.ts","../src/common/appLauncher/detect.ts","../src/common/appLauncher/adapters/web.ts","../src/common/appLauncher/core/config.ts","../src/common/appLauncher/types.ts","../src/common/appLauncher/utils/query.ts","../src/common/appLauncher/providers/amap.ts","../src/common/appLauncher/providers/baidu.ts","../src/common/appLauncher/providers/generic.ts","../src/common/appLauncher/providers/google.ts","../src/common/appLauncher/providers/qq.ts","../src/common/appLauncher/providers/wechat.ts","../src/common/appLauncher/providers/registry.ts","../src/common/appLauncher/core/launcher.ts","../src/common/appLauncher/core/return-handler.ts","../src/common/appLauncher/shortcuts/map-navigation.ts","../src/common/appLauncher/shortcuts/index.ts"],"names":["result","__require","buildKeywordNavigationUrl","buildCoordinateNavigationUrl"],"mappings":";;;;;AAsBO,SAAS,yBAAyB,OAAA,EAA0C;AACjF,EAAA,MAAM,QAAA,GAA8B,IAAA;AAEpC,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IAEA,MAAM,QAAQ,GAAA,EAA+B;AAC3C,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA;AAAA,MACrC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,MAAA,CAAO,IAAA,EAAM,OAAA,EAA2D;AAC5E,MAAA,MAAM,UAAA,GAAa;AAAA,QACjB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB;AAAA,OACF;AAEA,MAAA,MAAM,OAAA,GAAU,OAAO,GAAA,KAAgB;AACrC,QAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,CAAE,KAAA,CAAM,MAAM,KAAK,CAAA;AAC/D,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,MAAM,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACzB,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAEA,MAAA,IAAI,MAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AAC/B,QAAA,MAAMA,OAAAA,GAA0B;AAAA,UAC9B,GAAG,UAAA;AAAA,UACH,MAAA,EAAQ,QAAA;AAAA,UACR,KAAK,IAAA,CAAK;AAAA,SACZ;AACA,QAAA,OAAA,CAAQ,SAAA,EAAW,WAAWA,OAAM,CAAA;AACpC,QAAA,OAAOA,OAAAA;AAAA,MACT;AAEA,MAAA,IAAI,KAAK,QAAA,IAAa,MAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAI;AACnD,QAAA,MAAMA,OAAAA,GAA0B;AAAA,UAC9B,GAAG,UAAA;AAAA,UACH,MAAA,EAAQ,UAAA;AAAA,UACR,KAAK,IAAA,CAAK;AAAA,SACZ;AACA,QAAA,OAAA,CAAQ,SAAA,EAAW,aAAaA,OAAM,CAAA;AACtC,QAAA,OAAOA,OAAAA;AAAA,MACT;AAEA,MAAA,MAAM,MAAA,GAA0B;AAAA,QAC9B,GAAG,UAAA;AAAA,QACH,MAAA,EAAQ,aAAA;AAAA,QACR,KAAK,IAAA,CAAK;AAAA,OACZ;AACA,MAAA,OAAA,CAAQ,SAAA,EAAW,gBAAgB,MAAM,CAAA;AACzC,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,GACF;AACF;AAMO,SAAS,uCAAA,GAA4D;AAC1E,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AAEF,IAAA,OAAA,GAAUC,0BAAA,CAAQ,cAAc,CAAA,CAAE,OAAA;AAAA,EACpC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,yBAAyB,OAAO,CAAA;AACzC;;;AClGO,SAAS,SAAA,CAAU,SAAA,GAAY,YAAA,EAAa,EAAY;AAC7D,EAAA,OAAO,UAAA,CAAW,KAAK,SAAS,CAAA;AAClC;AAEO,SAAS,KAAA,CAAM,SAAA,GAAY,YAAA,EAAa,EAAY;AACzD,EAAA,OAAO,mBAAA,CAAoB,KAAK,SAAS,CAAA;AAC3C;AAEO,SAAS,cAAA,CAAe,SAAA,GAAY,YAAA,EAAa,EAAY;AAClE,EAAA,OAAO,SAAA,CAAU,SAAS,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA;AAChD;AAEA,SAAS,YAAA,GAAuB;AAC9B,EAAA,IAAI,OAAO,cAAc,WAAA,EAAa;AACpC,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAA,CAAU,SAAA;AACnB;;;ACPA,SAAS,iBAAA,CACP,SACA,MAAA,EACM;AACN,EAAA,MAAM,EAAE,WAAU,GAAI,OAAA;AACtB,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA;AAAA,EACF;AAEA,EAAA,QAAQ,OAAO,MAAA;AAAQ,IACrB,KAAK,QAAA;AACH,MAAA,SAAA,CAAU,WAAW,MAAM,CAAA;AAC3B,MAAA;AAAA,IACF,KAAK,UAAA;AACH,MAAA,SAAA,CAAU,aAAa,MAAM,CAAA;AAC7B,MAAA;AAAA,IACF,KAAK,aAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,SAAA,CAAU,gBAAgB,MAAM,CAAA;AAChC,MAAA;AAEA;AAEN;AAEA,SAAS,OAAA,CAAQ,KAAa,MAAA,EAAuB;AACnD,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAA,CAAO,QAAA,CAAS,OAAO,GAAG,CAAA;AAC1B,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,QAAA,EAAU,qBAAqB,CAAA;AAClD;AAEA,SAAS,eAAe,SAAA,EAA6C;AACnE,EAAA,OAAO,IAAI,QAAQ,CAAA,OAAA,KAAW;AAC5B,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,MAAM,MAAA,GAAS,CAAC,MAAA,KAA4B;AAC1C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA;AAAA,MACF;AACA,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,QAAA,CAAS,mBAAA,CAAoB,oBAAoB,kBAAkB,CAAA;AACnE,MAAA,MAAA,CAAO,aAAa,KAAK,CAAA;AACzB,MAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,IAChB,CAAA;AAEA,IAAA,MAAM,qBAAqB,MAAM;AAC/B,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,kBAAkB,CAAA;AAChE,IAAA,MAAM,QAAQ,MAAA,CAAO,UAAA,CAAW,MAAM,MAAA,CAAO,SAAS,GAAG,SAAS,CAAA;AAAA,EACpE,CAAC,CAAA;AACH;AAEO,SAAS,yBAAA,GAA8C;AAC5D,EAAA,MAAM,QAAA,GAA8B,KAAA;AAEpC,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IAEA,MAAM,MAAA,CAAO,IAAA,EAAM,OAAA,EAAmC;AACpD,MAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,MAAA,MAAM,UAAA,GAAa;AAAA,QACjB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB;AAAA,OACF;AAEA,MAAA,OAAA,CAAQ,IAAA,CAAK,SAAS,MAAM,CAAA;AAE5B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,OAAA,CAAQ,SAAS,CAAA;AACrD,QAAA,IAAI,WAAW,QAAA,EAAU;AACvB,UAAA,MAAMD,OAAAA,GAA0B;AAAA,YAC9B,GAAG,UAAA;AAAA,YACH,MAAA,EAAQ,QAAA;AAAA,YACR,KAAK,IAAA,CAAK;AAAA,WACZ;AACA,UAAA,iBAAA,CAAkB,SAASA,OAAM,CAAA;AACjC,UAAA,OAAOA,OAAAA;AAAA,QACT;AAEA,QAAA,IAAI,KAAK,QAAA,EAAU;AACjB,UAAA,OAAA,CAAQ,IAAA,CAAK,UAAU,IAAI,CAAA;AAC3B,UAAA,MAAMA,OAAAA,GAA0B;AAAA,YAC9B,GAAG,UAAA;AAAA,YACH,MAAA,EAAQ,UAAA;AAAA,YACR,KAAK,IAAA,CAAK;AAAA,WACZ;AACA,UAAA,iBAAA,CAAkB,SAASA,OAAM,CAAA;AACjC,UAAA,OAAOA,OAAAA;AAAA,QACT;AAEA,QAAA,MAAMA,OAAAA,GAA0B;AAAA,UAC9B,GAAG,UAAA;AAAA,UACH,MAAA,EAAQ,SAAA;AAAA,UACR,KAAK,IAAA,CAAK;AAAA,SACZ;AACA,QAAA,iBAAA,CAAkB,SAASA,OAAM,CAAA;AACjC,QAAA,OAAOA,OAAAA;AAAA,MACT;AAEA,MAAA,MAAM,MAAA,GAA0B;AAAA,QAC9B,GAAG,UAAA;AAAA,QACH,MAAA,EAAQ,QAAA;AAAA,QACR,KAAK,IAAA,CAAK;AAAA,OACZ;AACA,MAAA,iBAAA,CAAkB,SAAS,MAAM,CAAA;AACjC,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,GACF;AACF;;;ACrIA,IAAM,aAAA,GAAmC;AAAA,EACvC,iBAAA,EAAmB;AACrB,CAAA;AAEA,IAAI,aAAA,GAAmC,EAAE,GAAG,aAAA,EAAc;AAEnD,SAAS,qBAAqB,KAAA,EAAsD;AACzF,EAAA,aAAA,GAAgB;AAAA,IACd,GAAG,aAAA;AAAA,IACH,GAAG,KAAA;AAAA,IACH,cAAA,EAAgB;AAAA,MACd,GAAG,aAAA,CAAc,cAAA;AAAA,MACjB,GAAG,KAAA,CAAM;AAAA,KACX;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,GAAG,aAAA,CAAc,gBAAA;AAAA,MACjB,GAAG,KAAA,CAAM;AAAA;AACX,GACF;AACA,EAAA,OAAO,oBAAA,EAAqB;AAC9B;AAEO,SAAS,oBAAA,GAA0C;AACxD,EAAA,OAAO,aAAA;AACT;AAEO,SAAS,sBAAA,GAA+B;AAC7C,EAAA,aAAA,GAAgB,EAAE,GAAG,aAAA,EAAc;AACrC;;;ACAO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EAUxC,WAAA,CACE,IAAA,EACA,OAAA,EACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AACF;;;AChDO,SAAS,qBAAA,CACd,OACA,KAAA,EACQ;AACR,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,MAAK,EAAG;AAC9C,IAAA,MAAM,IAAI,cAAA,CAAe,gBAAA,EAAkB,CAAA,EAAG,KAAK,CAAA,yBAAA,CAAO,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,MAAM,IAAA,EAAK;AACpB;AAUO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,OAAO,mBAAmB,KAAK,CAAA;AACjC;;;ACFA,SAAS,yBAAA,CACP,aACA,iBAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,YAAY,WAAW,CAAA;AAEvC,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,SAAA,EAAU,EAAG;AACnD,IAAA,OAAO,CAAA,4CAAA,EAA+C,WAAA,CAAY,iBAAiB,CAAC,YAAY,OAAO,CAAA,QAAA,CAAA;AAAA,EACzG;AAEA,EAAA,OAAO,wCAAwC,OAAO,CAAA,sBAAA,CAAA;AACxD;AAEA,SAAS,4BAAA,CACP,QACA,iBAAA,EACe;AACf,EAAA,MAAM,OAAO,MAAA,CAAO,WAAA,GAAc,WAAA,CAAY,MAAA,CAAO,WAAW,CAAA,GAAI,EAAA;AACpE,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAQ,KAAA;AAC5B,EAAA,MAAM,MAAM,MAAA,CAAO,SAAA;AACnB,EAAA,MAAM,MAAM,MAAA,CAAO,QAAA;AAEnB,EAAA,MAAM,OAAA,GACJ,OAAO,SAAA,KAAc,WAAA,IAAe,SAAA,KAChC,CAAA,sCAAA,EAAyC,WAAA,CAAY,iBAAiB,CAAC,CAAA,MAAA,EAAS,GAAG,SAAS,GAAG,CAAA,OAAA,EAAU,IAAI,CAAA,UAAA,CAAA,GAC7G,CAAA,iCAAA,EAAoC,WAAA,CAAY,iBAAiB,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAA,KAAA,EAAQ,GAAG,CAAA,cAAA,CAAA;AAE9F,EAAA,MAAM,QAAA,GAAW,sCAAsC,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,IAAI,SAAS,IAAI,CAAA,aAAA,CAAA;AAEtF,EAAA,OAAO,EAAE,SAAS,QAAA,EAAS;AAC7B;AAEO,IAAM,YAAA,GAAkC;AAAA,EAC7C,EAAA,EAAI,MAAA;AAAA,EACJ,OAAA,EAAS,CAAC,UAAA,EAAY,sBAAsB,CAAA;AAAA,EAE5C,cAAA,CAAe,QAAQ,MAAA,EAAQ;AAC7B,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,qBAAA,CAAsB,MAAA,CAAO,aAAa,aAAa,CAAA;AACvD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,WAAW,sBAAA,EAAwB;AACrC,MAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,YAAY,OAAO,MAAA,CAAO,cAAc,QAAA,EAAU;AAC/E,QAAA,MAAM,IAAI,cAAA;AAAA,UACR,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAwB;AAChD,IAAA,MAAM,oBAAoB,OAAA,CAAQ,iBAAA;AAElC,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,MAAA,CAAO,WAAA,EAAa,aAAa,CAAA;AAC3E,MAAA,MAAM,GAAA,GAAM,yBAAA,CAA0B,WAAA,EAAa,iBAAiB,CAAA;AACpE,MAAA,MAAM,WACJ,OAAA,CAAQ,OAAA,CAAQ,eAChB,CAAA,oCAAA,EAAuC,WAAA,CAAY,WAAW,CAAC,CAAA,aAAA,CAAA;AAEjE,MAAA,OAAO,EAAE,OAAA,EAAS,GAAA,EAAK,QAAA,EAAS;AAAA,IAClC;AAEA,IAAA,IAAI,WAAW,sBAAA,EAAwB;AACrC,MAAA,MAAM,gBAAA,GAAmD;AAAA,QACvD,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,MAAM,MAAA,CAAO;AAAA,OACf;AACA,MAAA,MAAM,IAAA,GAAO,4BAAA,CAA6B,gBAAA,EAAkB,iBAAiB,CAAA;AAC7E,MAAA,IAAI,OAAA,CAAQ,QAAQ,WAAA,EAAa;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,OAAA,CAAQ,WAAA;AAAA,MAClC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0CAAA,EAA8B,MAAM,CAAA,CAAE,CAAA;AAAA,EACxD;AACF;AAEO,SAAS,sBAAA,CACd,WAAA,EACA,iBAAA,GAAoB,QAAA,EACZ;AACR,EAAA,OAAO,yBAAA,CAA0B,aAAa,iBAAiB,CAAA;AACjE;;;ACvGA,SAAS,cAAc,iBAAA,EAAmC;AACxD,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,OAAA,CAAQ,kBAAA,EAAoB,EAAE,CAAA;AACnE,EAAA,OAAO,CAAA,SAAA,EAAY,cAAc,QAAQ,CAAA,CAAA;AAC3C;AAEA,SAASE,0BAAAA,CACP,aACA,iBAAA,EACQ;AACR,EAAA,MAAM,kBAAA,GAAqB,YAAY,WAAW,CAAA;AAClD,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,aAAA,CAAc,iBAAiB,CAAC,CAAA;AAExD,EAAA,OAAO;AAAA,IACL,qBAAA;AAAA,IACA,gBAAgB,kBAAkB,CAAA,CAAA;AAAA,IAClC,eAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAQ,GAAG,CAAA;AAAA,GACb,CAAE,KAAK,EAAE,CAAA;AACX;AAEO,IAAM,aAAA,GAAmC;AAAA,EAC9C,EAAA,EAAI,OAAA;AAAA,EACJ,OAAA,EAAS,CAAC,UAAA,EAAY,sBAAsB,CAAA;AAAA,EAE5C,cAAA,CAAe,QAAQ,MAAA,EAAQ;AAC7B,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,qBAAA,CAAsB,MAAA,CAAO,aAAa,aAAa,CAAA;AACvD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,WAAW,sBAAA,EAAwB;AACrC,MAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,YAAY,OAAO,MAAA,CAAO,cAAc,QAAA,EAAU;AAC/E,QAAA,MAAM,IAAI,cAAA;AAAA,UACR,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAwB;AAChD,IAAA,MAAM,oBAAoB,OAAA,CAAQ,iBAAA;AAElC,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,MAAA,CAAO,WAAA,EAAa,aAAa,CAAA;AAC3E,MAAA,MAAM,OAAA,GAAUA,0BAAAA,CAA0B,WAAA,EAAa,iBAAiB,CAAA;AACxE,MAAA,MAAM,kBAAA,GAAqB,YAAY,WAAW,CAAA;AAElD,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,QAAA,EACE,OAAA,CAAQ,OAAA,CAAQ,WAAA,IAChB,8DAA8D,kBAAkB,CAAA,uBAAA;AAAA,OACpF;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,sBAAA,EAAwB;AACrC,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AACvC,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA;AACzC,MAAA,MAAM,IAAA,GAAO,OAAO,WAAA,GAAc,WAAA,CAAY,OAAO,MAAA,CAAO,WAAW,CAAC,CAAA,GAAI,EAAA;AAC5E,MAAA,MAAM,GAAA,GAAM,WAAA,CAAY,aAAA,CAAc,iBAAiB,CAAC,CAAA;AACxD,MAAA,MAAM,WAAA,GAAc,IAAA,GAChB,CAAA,OAAA,EAAU,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,GAC5C,CAAA,OAAA,EAAU,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAEnC,MAAA,OAAO;AAAA,QACL,SAAS,CAAA,gCAAA,EAAmC,WAAA,CAAY,WAAW,CAAC,sCAAsC,GAAG,CAAA,CAAA;AAAA,QAC7G,QAAA,EACE,OAAA,CAAQ,OAAA,CAAQ,WAAA,IAChB,CAAA,2DAAA,EAA8D,WAAA,CAAY,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAA,uBAAA;AAAA,OACzG;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2CAAA,EAA+B,MAAM,CAAA,CAAE,CAAA;AAAA,EACzD;AACF;AAEO,SAAS,uBAAA,CACd,WAAA,EACA,iBAAA,GAAoB,QAAA,EACZ;AACR,EAAA,OAAOA,0BAAAA,CAA0B,aAAa,iBAAiB,CAAA;AACjE;;;AC7EO,IAAM,eAAA,GAAqC;AAAA,EAChD,EAAA,EAAI,SAAA;AAAA,EACJ,OAAA,EAAS,CAAC,MAAM,CAAA;AAAA,EAEhB,cAAA,CAAe,SAAS,MAAA,EAAQ;AAC9B,IAAA,qBAAA,CAAsB,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EACzC,CAAA;AAAA,EAEA,SAAA,CAAU,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS;AAClC,IAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,MAAA,CAAO,GAAA,EAAK,KAAK,CAAA;AACnD,IAAA,MAAM,QAAA,GACJ,QAAQ,OAAA,CAAQ,WAAA,KACf,OAAO,MAAA,CAAO,QAAA,KAAa,QAAA,GAAW,MAAA,CAAO,QAAA,GAAW,MAAA,CAAA;AAE3D,IAAA,OAAO,EAAE,OAAA,EAAS,GAAA,EAAK,QAAA,EAAS;AAAA,EAClC;AACF;;;ACpBA,SAASA,2BAA0B,WAAA,EAAoC;AACrE,EAAA,MAAM,OAAA,GAAU,YAAY,WAAW,CAAA;AAEvC,EAAA,MAAM,OAAA,GACJ,OAAO,SAAA,KAAc,WAAA,IAAe,SAAA,KAChC,CAAA,oBAAA,EAAuB,OAAO,CAAA,CAAA,GAC9B,CAAA,uBAAA,EAA0B,OAAO,CAAA,uBAAA,CAAA;AAEvC,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,QAAA,EAAU,sDAAsD,OAAO,CAAA,mBAAA;AAAA,GACzE;AACF;AAEA,SAASC,6BAAAA,CACP,QAAA,EACA,SAAA,EACA,WAAA,EACe;AACf,EAAA,MAAM,eAAA,GAAkB,cACpB,WAAA,CAAY,WAAW,IACvB,CAAA,EAAG,QAAQ,IAAI,SAAS,CAAA,CAAA;AAE5B,EAAA,MAAM,OAAA,GACJ,OAAO,SAAA,KAAc,WAAA,IAAe,SAAA,EAAU,GAC1C,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAC5C,CAAA,uBAAA,EAA0B,eAAe,CAAA,uBAAA,CAAA;AAE/C,EAAA,MAAM,mBAAA,GAAsB,cACxB,WAAA,CAAY,WAAW,IACvB,CAAA,EAAG,QAAQ,IAAI,SAAS,CAAA,CAAA;AAE5B,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,QAAA,EAAU,sDAAsD,mBAAmB,CAAA,mBAAA;AAAA,GACrF;AACF;AAEO,IAAM,cAAA,GAAoC;AAAA,EAC/C,EAAA,EAAI,QAAA;AAAA,EACJ,OAAA,EAAS,CAAC,UAAA,EAAY,sBAAsB,CAAA;AAAA,EAE5C,cAAA,CAAe,QAAQ,MAAA,EAAQ;AAC7B,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,qBAAA,CAAsB,MAAA,CAAO,aAAa,aAAa,CAAA;AACvD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,WAAW,sBAAA,EAAwB;AACrC,MAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,YAAY,OAAO,MAAA,CAAO,cAAc,QAAA,EAAU;AAC/E,QAAA,MAAM,IAAI,cAAA;AAAA,UACR,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAwB;AAChD,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,MAAA,CAAO,WAAA,EAAa,aAAa,CAAA;AAC3E,MAAA,MAAM,IAAA,GAAOD,2BAA0B,WAAW,CAAA;AAClD,MAAA,IAAI,OAAA,CAAQ,QAAQ,WAAA,EAAa;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,OAAA,CAAQ,WAAA;AAAA,MAClC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,WAAW,sBAAA,EAAwB;AACrC,MAAA,MAAM,IAAA,GAAOC,6BAAAA;AAAA,QACX,MAAA,CAAO,QAAA;AAAA,QACP,MAAA,CAAO,SAAA;AAAA,QACP,MAAA,CAAO;AAAA,OACT;AACA,MAAA,IAAI,OAAA,CAAQ,QAAQ,WAAA,EAAa;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,OAAA,CAAQ,WAAA;AAAA,MAClC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4CAAA,EAAgC,MAAM,CAAA,CAAE,CAAA;AAAA,EAC1D;AACF;AAEO,SAAS,yBAAyB,WAAA,EAA6B;AACpE,EAAA,OAAOD,0BAAAA,CAA0B,WAAW,CAAA,CAAE,OAAA;AAChD;;;AC/EO,IAAM,UAAA,GAAgC;AAAA,EAC3C,EAAA,EAAI,IAAA;AAAA,EACJ,OAAA,EAAS,CAAC,OAAA,EAAS,MAAM,CAAA;AAAA,EAEzB,cAAA,CAAe,QAAQ,MAAA,EAAQ;AAC7B,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA;AAAA,IACF;AACA,IAAA,qBAAA,CAAsB,MAAA,CAAO,OAAO,OAAO,CAAA;AAC3C,IAAA,qBAAA,CAAsB,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EACzC,CAAA;AAAA,EAEA,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS;AACjC,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,WAAA;AAAA,QACT,QAAA,EAAU,OAAA,CAAQ,OAAA,CAAQ,WAAA,IAAe;AAAA,OAC3C;AAAA,IACF;AAEA,IAAA,MAAM,QAAQ,WAAA,CAAY,qBAAA,CAAsB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAC,CAAA;AACtE,IAAA,MAAM,OAAA,GAAU,WAAA;AAAA,MACd,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,GAAW,OAAO,OAAA,GAAU;AAAA,KACxD;AACA,IAAA,MAAM,MAAM,WAAA,CAAY,qBAAA,CAAsB,MAAA,CAAO,GAAA,EAAK,KAAK,CAAC,CAAA;AAChE,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,GACpB,WAAA,CAAY,OAAO,MAAA,CAAO,QAAQ,CAAC,CAAA,GACnC,EAAA;AAEJ,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,uBAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,UAAU,KAAK,CAAA,CAAA;AAAA,MACf,gBAAgB,OAAO,CAAA,CAAA;AAAA,MACvB,QAAQ,GAAG,CAAA,CAAA;AAAA,MACX,QAAA,GAAW,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAA,GAAK;AAAA,KACxC,CAAE,KAAK,EAAE,CAAA;AAET,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,QAAA,EAAU,OAAA,CAAQ,OAAA,CAAQ,WAAA,IAAe,CAAA,uBAAA;AAAA,KAC3C;AAAA,EACF;AACF;;;ACzCO,IAAM,cAAA,GAAoC;AAAA,EAC/C,EAAA,EAAI,QAAA;AAAA,EACJ,OAAA,EAAS,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,EAEzB,cAAA,CAAe,QAAQ,MAAA,EAAQ;AAC7B,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA;AAAA,IACF;AACA,IAAA,qBAAA,CAAsB,MAAA,CAAO,OAAO,OAAO,CAAA;AAC3C,IAAA,qBAAA,CAAsB,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EACzC,CAAA;AAAA,EAEA,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAwB;AAChD,IAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,OAAA,CAAQ,iBAAiB,CAAA;AAE/D,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAA,SAAA,CAAA;AAAA,QACT,QAAA,EAAU,OAAA,CAAQ,OAAA,CAAQ,WAAA,IAAe;AAAA,OAC3C;AAAA,IACF;AAEA,IAAA,MAAM,QAAQ,WAAA,CAAY,qBAAA,CAAsB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAC,CAAA;AACtE,IAAA,MAAM,WAAA,GAAc,WAAA;AAAA,MAClB,OAAO,MAAA,CAAO,WAAA,KAAgB,QAAA,GAAW,OAAO,WAAA,GAAc;AAAA,KAChE;AACA,IAAA,MAAM,MAAM,WAAA,CAAY,qBAAA,CAAsB,MAAA,CAAO,GAAA,EAAK,KAAK,CAAC,CAAA;AAChE,IAAiB,OAAO,QAAA,GACpB,WAAA,CAAY,OAAO,MAAA,CAAO,QAAQ,CAAC,CAAA,GACnC;AAGJ,IAAA,MAAM,UAAU,CAAA,4CAAA,EAA+C,GAAG,CAAA,OAAA,EAAU,KAAK,gBAAgB,WAAW,CAAA,CAAA;AAE5G,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,UACE,OAAA,CAAQ,OAAA,CAAQ,eAChB,CAAA,6EAAA,EAAgF,GAAG,mDAAmD,iBAAiB,CAAA,gBAAA;AAAA,KAC3J;AAAA,EACF;AACF;;;AChDA,IAAM,gBAAA,GAA6D;AAAA,EACjE,IAAA,EAAM,YAAA;AAAA,EACN,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,EAAQ,cAAA;AAAA,EACR,EAAA,EAAI,UAAA;AAAA,EACJ,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,eAAA,uBAAsB,GAAA,EAAsC;AAE3D,SAAS,oBAAoB,QAAA,EAAmC;AACrE,EAAA,eAAA,CAAgB,GAAA,CAAI,QAAA,CAAS,EAAA,EAAI,QAAQ,CAAA;AAC3C;AAEO,SAAS,eAAe,EAAA,EAAkD;AAC/E,EAAA,OAAO,eAAA,CAAgB,GAAA,CAAI,EAAE,CAAA,IAAK,iBAAiB,EAAE,CAAA;AACvD;AAEO,SAAS,gBAAA,GAAoC;AAClD,EAAA,MAAM,GAAA,uBAAU,GAAA,CAAmB;AAAA,IACjC,GAAI,MAAA,CAAO,IAAA,CAAK,gBAAgB,CAAA;AAAA,IAChC,GAAG,gBAAgB,IAAA;AAAK,GACzB,CAAA;AACD,EAAA,OAAO,CAAC,GAAG,GAAG,CAAA;AAChB;;;ACvBA,SAAS,eAAe,OAAA,EAA6C;AACnE,EAAA,MAAM,SAAS,oBAAA,EAAqB;AACpC,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,MAAA,CAAO,OAAA;AAE1C,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,OAAO,yBAAA,EAA0B;AAAA,EACnC;AAEA,EAAA,MAAM,IAAI,cAAA;AAAA,IACR,iBAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,eAAsB,UAAU,OAAA,EAAqD;AACnF,EAAA,MAAM,SAAS,oBAAA,EAAqB;AACpC,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,OAAA,CAAQ,QAAQ,CAAA;AAEhD,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,cAAA,CAAe,kBAAA,EAAoB,CAAA,uBAAA,EAAgB,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AAAA,EACjF;AAEA,EAAA,IAAI,CAAC,QAAA,CAAS,OAAA,CAAQ,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC9C,IAAA,MAAM,IAAI,cAAA;AAAA,MACR,gBAAA;AAAA,MACA,CAAA,UAAA,EAAa,OAAA,CAAQ,QAAQ,CAAA,6BAAA,EAAiB,QAAQ,MAAM,CAAA,CAAA,CAAA;AAAA,MAC5D,EAAE,gBAAA,EAAkB,CAAC,GAAG,QAAA,CAAS,OAAO,CAAA;AAAE,KAC5C;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,EAAC;AAClC,EAAA,QAAA,CAAS,cAAA,GAAiB,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA;AAEhD,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,mBAAmB,MAAA,CAAO,iBAAA;AAAA,IAC1B,SAAA,EAAW,IAAA;AAAA,IACX,GAAG,MAAA,CAAO,cAAA;AAAA,IACV,GAAG,OAAA,CAAQ;AAAA,GACb;AAEA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,SAAA,CAAU,OAAA,CAAQ,QAAQ,MAAA,EAAQ;AAAA,IACtD,iBAAA,EAAmB,aAAA,CAAc,iBAAA,IAAqB,MAAA,CAAO,iBAAA;AAAA,IAC7D,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,IAAI,aAAA,CAAc,WAAA,IAAe,CAAC,IAAA,CAAK,QAAA,EAAU;AAC/C,IAAA,IAAA,CAAK,WAAW,aAAA,CAAc,WAAA;AAAA,EAChC;AAEA,EAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AACtC,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,GAAG,MAAA,CAAO,gBAAA;AAAA,IACV,GAAG,OAAA,CAAQ;AAAA,GACb;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAM;AAAA,MAChC,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAA,EAAW,cAAc,SAAA,IAAa,IAAA;AAAA,MACtC;AAAA,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,WAAA,GACJ,KAAA,YAAiB,cAAA,GACb,KAAA,GACA,IAAI,cAAA;AAAA,MACF,aAAA;AAAA,MACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAC3C;AACN,IAAA,SAAA,CAAU,UAAU,WAAW,CAAA;AAC/B,IAAA,MAAM,WAAA;AAAA,EACR;AACF;;;ACtFO,SAAS,eAAe,GAAA,EAA+B;AAC5D,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,IAAI,GAAG,CAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,EAAC,EAAE;AAAA,EAC3B;AAEA,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC1C,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,EAChB,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAEnD,EAAA,OAAO;AAAA,IACL,UAAU,QAAA,IAAY,MAAA;AAAA,IACtB,MAAA,EAAQ,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,IAAK,MAAA;AAAA,IAC7C,GAAA;AAAA,IACA;AAAA,GACF;AACF;AAIA,IAAM,SAAA,uBAAgB,GAAA,EAAoB;AAGnC,SAAS,gBAAgB,OAAA,EAAiC;AAC/D,EAAA,SAAA,CAAU,OAAA,CAAQ,CAAA,QAAA,KAAY,QAAA,CAAS,OAAO,CAAC,CAAA;AACjD;AAEO,SAAS,mBAAmB,QAAA,EAAsC;AACvE,EAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,EAAA,OAAO,MAAM,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AACxC;AAEO,SAAS,gBAAA,CACd,aACA,iBAAA,EACS;AACT,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,gBAAgB,iBAAA,EAAmB;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,WAAW,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,iBAAiB,CAAA;AAC1C,IAAA,OACE,QAAA,CAAS,QAAA,KAAa,QAAA,CAAS,QAAA,IAC/B,QAAA,CAAS,aAAa,QAAA,CAAS,QAAA,IAC/B,QAAA,CAAS,QAAA,KAAa,QAAA,CAAS,QAAA;AAAA,EAEnC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,WAAA,CAAY,WAAW,iBAAiB,CAAA;AAAA,EACjD;AACF;;;ACpDO,IAAM,sBAAA,GAAyD;AAAA,EACpE,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,0BAAA,EAAQ,aAAa,0EAAA,EAAe;AAAA,EACzD,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,0BAAA,EAAQ,aAAa,0EAAA,EAAe;AAAA,EAC1D,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,0BAAA,EAAQ,aAAa,qEAAA;AAC9C;AAMA,eAAsB,mBAAA,CACpB,QAAA,EACA,WAAA,EACA,OAAA,EAC0B;AAC1B,EAAA,MAAM,EAAE,SAAA,EAAW,GAAG,aAAA,EAAc,GAAI,WAAW,EAAC;AACpD,EAAA,OAAO,SAAA,CAAU;AAAA,IACf,QAAA;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,MAAA,EAAQ,EAAE,WAAA,EAAY;AAAA,IACtB,OAAA,EAAS,aAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;AAGO,SAAS,iBAAA,CACd,QAAA,EACA,WAAA,EACA,OAAA,EACM;AACN,EAAA,KAAK,mBAAA,CAAoB,QAAA,EAAU,WAAA,EAAa,OAAO,CAAA;AACzD;;;ACjCA,eAAsB,oBAAA,CACpB,aACA,OAAA,EAC0B;AAC1B,EAAA,MAAM,EAAE,SAAA,EAAW,GAAG,aAAA,EAAc,GAAI,WAAW,EAAC;AACpD,EAAA,OAAO,SAAA,CAAU;AAAA,IACf,QAAA,EAAU,MAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,MAAA,EAAQ,EAAE,WAAA,EAAY;AAAA,IACtB,OAAA,EAAS,aAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;AAGO,SAAS,kBAAA,CACd,aACA,OAAA,EACM;AACN,EAAA,KAAK,oBAAA,CAAqB,aAAa,OAAO,CAAA;AAChD;AAYA,eAAsB,kBACpB,OAAA,EAC0B;AAC1B,EAAA,MAAM,EAAE,WAAW,KAAA,EAAO,WAAA,EAAa,KAAK,QAAA,EAAU,GAAG,eAAc,GAAI,OAAA;AAC3E,EAAA,OAAO,SAAA,CAAU;AAAA,IACf,QAAA,EAAU,QAAA;AAAA,IACV,MAAA,EAAQ,OAAA;AAAA,IACR,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAA,EAAa,KAAK,QAAA,EAAS;AAAA,IAC5C,OAAA,EAAS,aAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;AAUA,eAAsB,cAAc,OAAA,EAAmD;AACrF,EAAA,MAAM,EAAE,WAAW,KAAA,EAAO,OAAA,EAAS,KAAK,QAAA,EAAU,GAAG,eAAc,GAAI,OAAA;AACvE,EAAA,OAAO,SAAA,CAAU;AAAA,IACf,QAAA,EAAU,IAAA;AAAA,IACV,MAAA,EAAQ,OAAA;AAAA,IACR,MAAA,EAAQ,EAAE,KAAA,EAAO,OAAA,EAAS,KAAK,QAAA,EAAS;AAAA,IACxC,OAAA,EAAS,aAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;AAEA,eAAsB,gBAAA,CACpB,KACA,OAAA,EAC0B;AAC1B,EAAA,MAAM,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,aAAA,EAAc,GAAI,WAAW,EAAC;AAC9D,EAAA,OAAO,SAAA,CAAU;AAAA,IACf,QAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,MAAA,EAAQ,EAAE,GAAA,EAAK,QAAA,EAAS;AAAA,IACxB,OAAA,EAAS,aAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH","file":"chunk-FV7IHC23.js","sourcesContent":["import type {\n AppLaunchAdapter,\n AppLaunchPlatform,\n AppLaunchResult,\n LaunchExecutionOptions,\n} from '../types';\n\n/** RN Linking 最小能力面,避免硬依赖 react-native */\nexport type RnLinkingLike = {\n canOpenURL(url: string): Promise<boolean>;\n openURL(url: string): Promise<void>;\n addEventListener?: (\n type: 'url',\n handler: (event: { url: string }) => void,\n ) => void;\n removeEventListener?: (\n type: 'url',\n handler: (event: { url: string }) => void,\n ) => void;\n getInitialURL?: () => Promise<string | null>;\n};\n\nexport function createRnAppLaunchAdapter(linking: RnLinkingLike): AppLaunchAdapter {\n const platform: AppLaunchPlatform = 'rn';\n\n return {\n platform,\n\n async canOpen(url: string): Promise<boolean> {\n try {\n return await linking.canOpenURL(url);\n } catch {\n return false;\n }\n },\n\n async launch(urls, options: LaunchExecutionOptions): Promise<AppLaunchResult> {\n const baseResult = {\n provider: options.provider,\n action: options.action,\n platform,\n } satisfies Pick<AppLaunchResult, 'provider' | 'action' | 'platform'>;\n\n const tryOpen = async (url: string) => {\n const canOpen = await linking.canOpenURL(url).catch(() => false);\n if (!canOpen) {\n return false;\n }\n await linking.openURL(url);\n return true;\n };\n\n if (await tryOpen(urls.primary)) {\n const result: AppLaunchResult = {\n ...baseResult,\n status: 'opened',\n url: urls.primary,\n };\n options.callbacks?.onOpened?.(result);\n return result;\n }\n\n if (urls.fallback && (await tryOpen(urls.fallback))) {\n const result: AppLaunchResult = {\n ...baseResult,\n status: 'fallback',\n url: urls.fallback,\n };\n options.callbacks?.onFallback?.(result);\n return result;\n }\n\n const result: AppLaunchResult = {\n ...baseResult,\n status: 'unavailable',\n url: urls.primary,\n };\n options.callbacks?.onUnavailable?.(result);\n return result;\n },\n };\n}\n\n/**\n * 在已安装 react-native 的宿主中快捷创建 adapter。\n * 若未安装 react-native 将抛出明确错误。\n */\nexport function createRnAppLaunchAdapterFromReactNative(): AppLaunchAdapter {\n let linking: RnLinkingLike;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n linking = require('react-native').Linking as RnLinkingLike;\n } catch {\n throw new Error(\n '[appLauncher/rn] 未找到 react-native,请使用 createRnAppLaunchAdapter(linking) 手动注入 Linking',\n );\n }\n return createRnAppLaunchAdapter(linking);\n}\n","export function isAndroid(userAgent = getUserAgent()): boolean {\n return /Android/i.test(userAgent);\n}\n\nexport function isIOS(userAgent = getUserAgent()): boolean {\n return /iPhone|iPad|iPod/i.test(userAgent);\n}\n\nexport function isMobileDevice(userAgent = getUserAgent()): boolean {\n return isAndroid(userAgent) || isIOS(userAgent);\n}\n\nfunction getUserAgent(): string {\n if (typeof navigator === 'undefined') {\n return '';\n }\n return navigator.userAgent;\n}\n","import { isMobileDevice } from '../detect';\nimport type {\n AppLaunchAdapter,\n AppLaunchPlatform,\n AppLaunchResult,\n AppLaunchStatus,\n AppLaunchUrls,\n LaunchExecutionOptions,\n} from '../types';\n\nfunction dispatchCallbacks(\n options: LaunchExecutionOptions,\n result: AppLaunchResult,\n): void {\n const { callbacks } = options;\n if (!callbacks) {\n return;\n }\n\n switch (result.status) {\n case 'opened':\n callbacks.onOpened?.(result);\n break;\n case 'fallback':\n callbacks.onFallback?.(result);\n break;\n case 'unavailable':\n case 'timeout':\n case 'cancelled':\n callbacks.onUnavailable?.(result);\n break;\n default:\n break;\n }\n}\n\nfunction openUrl(url: string, mobile: boolean): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n if (mobile) {\n window.location.assign(url);\n return;\n }\n\n window.open(url, '_blank', 'noopener,noreferrer');\n}\n\nfunction waitForAppOpen(timeoutMs: number): Promise<AppLaunchStatus> {\n return new Promise(resolve => {\n if (typeof document === 'undefined') {\n resolve('opened');\n return;\n }\n\n let settled = false;\n const finish = (status: AppLaunchStatus) => {\n if (settled) {\n return;\n }\n settled = true;\n document.removeEventListener('visibilitychange', onVisibilityChange);\n window.clearTimeout(timer);\n resolve(status);\n };\n\n const onVisibilityChange = () => {\n if (document.hidden) {\n finish('opened');\n }\n };\n\n document.addEventListener('visibilitychange', onVisibilityChange);\n const timer = window.setTimeout(() => finish('timeout'), timeoutMs);\n });\n}\n\nexport function createWebAppLaunchAdapter(): AppLaunchAdapter {\n const platform: AppLaunchPlatform = 'web';\n\n return {\n platform,\n\n async launch(urls, options): Promise<AppLaunchResult> {\n const mobile = isMobileDevice();\n const baseResult = {\n provider: options.provider,\n action: options.action,\n platform,\n } satisfies Pick<AppLaunchResult, 'provider' | 'action' | 'platform'>;\n\n openUrl(urls.primary, mobile);\n\n if (mobile) {\n const status = await waitForAppOpen(options.timeoutMs);\n if (status === 'opened') {\n const result: AppLaunchResult = {\n ...baseResult,\n status: 'opened',\n url: urls.primary,\n };\n dispatchCallbacks(options, result);\n return result;\n }\n\n if (urls.fallback) {\n openUrl(urls.fallback, true);\n const result: AppLaunchResult = {\n ...baseResult,\n status: 'fallback',\n url: urls.fallback,\n };\n dispatchCallbacks(options, result);\n return result;\n }\n\n const result: AppLaunchResult = {\n ...baseResult,\n status: 'timeout',\n url: urls.primary,\n };\n dispatchCallbacks(options, result);\n return result;\n }\n\n const result: AppLaunchResult = {\n ...baseResult,\n status: 'opened',\n url: urls.primary,\n };\n dispatchCallbacks(options, result);\n return result;\n },\n };\n}\n","import type { AppLauncherConfig } from '../types';\n\nconst defaultConfig: AppLauncherConfig = {\n sourceApplication: 'sa2kit',\n};\n\nlet runtimeConfig: AppLauncherConfig = { ...defaultConfig };\n\nexport function configureAppLauncher(patch: Partial<AppLauncherConfig>): AppLauncherConfig {\n runtimeConfig = {\n ...runtimeConfig,\n ...patch,\n defaultOptions: {\n ...runtimeConfig.defaultOptions,\n ...patch.defaultOptions,\n },\n defaultCallbacks: {\n ...runtimeConfig.defaultCallbacks,\n ...patch.defaultCallbacks,\n },\n };\n return getAppLauncherConfig();\n}\n\nexport function getAppLauncherConfig(): AppLauncherConfig {\n return runtimeConfig;\n}\n\nexport function resetAppLauncherConfig(): void {\n runtimeConfig = { ...defaultConfig };\n}\n","/** 支持的第三方 App 提供方 */\nexport type AppProviderId = 'amap' | 'baidu' | 'google' | 'wechat' | 'qq' | 'generic';\n\n/** 运行平台 */\nexport type AppLaunchPlatform = 'web' | 'rn';\n\n/** 唤起结果状态 */\nexport type AppLaunchStatus =\n | 'opened'\n | 'fallback'\n | 'unavailable'\n | 'cancelled'\n | 'timeout';\n\nexport type AppLaunchUrls = {\n /** 优先尝试的 scheme / URI */\n primary: string;\n /** 无法唤起 App 时的降级链接(通常为 https://uri.* 网页版) */\n fallback?: string;\n};\n\nexport type AppLaunchResult = {\n provider: AppProviderId;\n action: string;\n status: AppLaunchStatus;\n url: string;\n platform: AppLaunchPlatform;\n data?: Record<string, unknown>;\n};\n\nexport class AppLaunchError extends Error {\n readonly code:\n | 'UNKNOWN_PROVIDER'\n | 'UNKNOWN_ACTION'\n | 'INVALID_PARAMS'\n | 'ADAPTER_MISSING'\n | 'OPEN_FAILED';\n\n readonly details?: Record<string, unknown>;\n\n constructor(\n code: AppLaunchError['code'],\n message: string,\n details?: Record<string, unknown>,\n ) {\n super(message);\n this.name = 'AppLaunchError';\n this.code = code;\n this.details = details;\n }\n}\n\nexport type AppReturnPayload = {\n provider?: AppProviderId;\n action?: string;\n url: string;\n params: Record<string, string>;\n raw?: unknown;\n};\n\nexport type AppLaunchCallbacks = {\n /** 已成功尝试唤起(Web 端通过页面隐藏等方式推断) */\n onOpened?: (result: AppLaunchResult) => void;\n /** 使用了 fallback 链接 */\n onFallback?: (result: AppLaunchResult) => void;\n /** 无法唤起目标 App */\n onUnavailable?: (result: AppLaunchResult) => void;\n /** 第三方 App 通过 returnUrl / deep link 回传 */\n onReturn?: (payload: AppReturnPayload) => void;\n /** 任意错误 */\n onError?: (error: AppLaunchError) => void;\n};\n\nexport type AppLaunchOptions = {\n /** 第三方统计用的来源应用名,如 profile-v1 */\n sourceApplication?: string;\n /** 自定义 fallback,覆盖 provider 默认值 */\n fallbackUrl?: string;\n /** 回跳地址(如 myapp://launch/callback),供宿主监听 */\n returnUrl?: string;\n /** Web 端等待 App 唤起的超时(毫秒) */\n timeoutMs?: number;\n};\n\nexport type AppLaunchRequest = {\n provider: AppProviderId;\n action: string;\n params?: Record<string, unknown>;\n options?: AppLaunchOptions;\n callbacks?: AppLaunchCallbacks;\n /** 单次调用可覆盖全局 adapter */\n adapter?: AppLaunchAdapter;\n};\n\nexport type LaunchExecutionOptions = {\n timeoutMs: number;\n callbacks?: AppLaunchCallbacks;\n provider: AppProviderId;\n action: string;\n};\n\n/** 平台适配器:负责实际 openURL 与结果推断 */\nexport type AppLaunchAdapter = {\n platform: AppLaunchPlatform;\n launch(urls: AppLaunchUrls, options: LaunchExecutionOptions): Promise<AppLaunchResult>;\n canOpen?(url: string): Promise<boolean>;\n};\n\nexport type AppLauncherConfig = {\n sourceApplication: string;\n adapter?: AppLaunchAdapter;\n defaultOptions?: AppLaunchOptions;\n defaultCallbacks?: AppLaunchCallbacks;\n};\n\nexport type AppLaunchProviderContext = {\n sourceApplication: string;\n options: AppLaunchOptions;\n};\n\n/** 各子功能(高德/微信/QQ 等)的统一契约 */\nexport type AppLaunchProvider = {\n id: AppProviderId;\n actions: readonly string[];\n buildUrls(\n action: string,\n params: Record<string, unknown>,\n context: AppLaunchProviderContext,\n ): AppLaunchUrls;\n validateParams?(\n action: string,\n params: Record<string, unknown>,\n ): void;\n};\n","import { AppLaunchError } from '../types';\n\nexport function requireNonEmptyString(\n value: unknown,\n field: string,\n): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new AppLaunchError('INVALID_PARAMS', `${field} 不能为空`);\n }\n return value.trim();\n}\n\nexport function optionalString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nexport function encodeQuery(value: string): string {\n return encodeURIComponent(value);\n}\n\nexport function appendQuery(url: string, key: string, value: string): string {\n const separator = url.includes('?') ? '&' : '?';\n return `${url}${separator}${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n}\n","import type {\n AppLaunchProvider,\n AppLaunchUrls,\n} from '../types';\nimport { AppLaunchError } from '../types';\nimport { requireNonEmptyString, encodeQuery } from '../utils/query';\nimport { isAndroid } from '../detect';\n\nexport type AmapNavigateParams = {\n destination: string;\n mode?: 'car' | 'walk' | 'ride' | 'bus';\n};\n\nexport type AmapNavigateByCoordinateParams = {\n latitude: number;\n longitude: number;\n destination?: string;\n mode?: 'car' | 'walk' | 'ride' | 'bus';\n};\n\nfunction buildKeywordNavigationUrl(\n destination: string,\n sourceApplication: string,\n): string {\n const keyword = encodeQuery(destination);\n\n if (typeof navigator !== 'undefined' && isAndroid()) {\n return `androidamap://keywordNavi?sourceApplication=${encodeQuery(sourceApplication)}&keyword=${keyword}&style=2`;\n }\n\n return `https://uri.amap.com/navigation?to=,,${keyword}&mode=car&callnative=1`;\n}\n\nfunction buildCoordinateNavigationUrl(\n params: AmapNavigateByCoordinateParams,\n sourceApplication: string,\n): AppLaunchUrls {\n const name = params.destination ? encodeQuery(params.destination) : '';\n const mode = params.mode ?? 'car';\n const lon = params.longitude;\n const lat = params.latitude;\n\n const primary =\n typeof navigator !== 'undefined' && isAndroid()\n ? `androidamap://route?sourceApplication=${encodeQuery(sourceApplication)}&dlat=${lat}&dlon=${lon}&dname=${name}&dev=0&t=0`\n : `iosamap://navi?sourceApplication=${encodeQuery(sourceApplication)}&lat=${lat}&lon=${lon}&dev=0&style=2`;\n\n const fallback = `https://uri.amap.com/navigation?to=${lon},${lat},${name}&mode=${mode}&callnative=1`;\n\n return { primary, fallback };\n}\n\nexport const amapProvider: AppLaunchProvider = {\n id: 'amap',\n actions: ['navigate', 'navigateByCoordinate'] as const,\n\n validateParams(action, params) {\n if (action === 'navigate') {\n requireNonEmptyString(params.destination, 'destination');\n return;\n }\n if (action === 'navigateByCoordinate') {\n if (typeof params.latitude !== 'number' || typeof params.longitude !== 'number') {\n throw new AppLaunchError(\n 'INVALID_PARAMS',\n 'navigateByCoordinate 需要 latitude 与 longitude',\n );\n }\n }\n },\n\n buildUrls(action, params, context): AppLaunchUrls {\n const sourceApplication = context.sourceApplication;\n\n if (action === 'navigate') {\n const destination = requireNonEmptyString(params.destination, 'destination');\n const url = buildKeywordNavigationUrl(destination, sourceApplication);\n const fallback =\n context.options.fallbackUrl ??\n `https://uri.amap.com/search?keyword=${encodeQuery(destination)}&callnative=1`;\n\n return { primary: url, fallback };\n }\n\n if (action === 'navigateByCoordinate') {\n const coordinateParams: AmapNavigateByCoordinateParams = {\n latitude: params.latitude as number,\n longitude: params.longitude as number,\n destination: params.destination as string | undefined,\n mode: params.mode as AmapNavigateByCoordinateParams['mode'],\n };\n const urls = buildCoordinateNavigationUrl(coordinateParams, sourceApplication);\n if (context.options.fallbackUrl) {\n urls.fallback = context.options.fallbackUrl;\n }\n return urls;\n }\n\n throw new Error(`[amapProvider] 不支持 action: ${action}`);\n },\n};\n\nexport function buildAmapNavigationUrl(\n destination: string,\n sourceApplication = 'sa2kit',\n): string {\n return buildKeywordNavigationUrl(destination, sourceApplication);\n}\n","import type { AppLaunchProvider, AppLaunchUrls } from '../types';\nimport { AppLaunchError } from '../types';\nimport { requireNonEmptyString, encodeQuery } from '../utils/query';\n\nfunction buildSrcParam(sourceApplication: string): string {\n const normalized = sourceApplication.replace(/[^a-zA-Z0-9._-]/g, '');\n return `andr.web.${normalized || 'sa2kit'}`;\n}\n\nfunction buildKeywordNavigationUrl(\n destination: string,\n sourceApplication: string,\n): string {\n const encodedDestination = encodeQuery(destination);\n const src = encodeQuery(buildSrcParam(sourceApplication));\n\n return [\n 'baidumap://map/navi',\n `?destination=${encodedDestination}`,\n '&mode=driving',\n '&coord_type=gcj02',\n `&src=${src}`,\n ].join('');\n}\n\nexport const baiduProvider: AppLaunchProvider = {\n id: 'baidu',\n actions: ['navigate', 'navigateByCoordinate'] as const,\n\n validateParams(action, params) {\n if (action === 'navigate') {\n requireNonEmptyString(params.destination, 'destination');\n return;\n }\n if (action === 'navigateByCoordinate') {\n if (typeof params.latitude !== 'number' || typeof params.longitude !== 'number') {\n throw new AppLaunchError(\n 'INVALID_PARAMS',\n 'navigateByCoordinate 需要 latitude 与 longitude',\n );\n }\n }\n },\n\n buildUrls(action, params, context): AppLaunchUrls {\n const sourceApplication = context.sourceApplication;\n\n if (action === 'navigate') {\n const destination = requireNonEmptyString(params.destination, 'destination');\n const primary = buildKeywordNavigationUrl(destination, sourceApplication);\n const encodedDestination = encodeQuery(destination);\n\n return {\n primary,\n fallback:\n context.options.fallbackUrl ??\n `https://map.baidu.com/mobile/webapp/search/search/qt=na&wd=${encodedDestination}&mode=MAP_MODE&newmap=1`,\n };\n }\n\n if (action === 'navigateByCoordinate') {\n const latitude = String(params.latitude);\n const longitude = String(params.longitude);\n const name = params.destination ? encodeQuery(String(params.destination)) : '';\n const src = encodeQuery(buildSrcParam(sourceApplication));\n const destination = name\n ? `latlng:${latitude},${longitude}|name:${name}`\n : `latlng:${latitude},${longitude}`;\n\n return {\n primary: `baidumap://map/navi?destination=${encodeQuery(destination)}&mode=driving&coord_type=gcj02&src=${src}`,\n fallback:\n context.options.fallbackUrl ??\n `https://map.baidu.com/mobile/webapp/search/search/qt=na&wd=${encodeQuery(`${latitude},${longitude}`)}&mode=MAP_MODE&newmap=1`,\n };\n }\n\n throw new Error(`[baiduProvider] 不支持 action: ${action}`);\n },\n};\n\nexport function buildBaiduNavigationUrl(\n destination: string,\n sourceApplication = 'sa2kit',\n): string {\n return buildKeywordNavigationUrl(destination, sourceApplication);\n}\n","import type { AppLaunchProvider } from '../types';\nimport { requireNonEmptyString } from '../utils/query';\n\nexport type GenericOpenParams = {\n url: string;\n fallback?: string;\n};\n\n/** 通用 scheme / https 唤起 */\nexport const genericProvider: AppLaunchProvider = {\n id: 'generic',\n actions: ['open'] as const,\n\n validateParams(_action, params) {\n requireNonEmptyString(params.url, 'url');\n },\n\n buildUrls(_action, params, context) {\n const url = requireNonEmptyString(params.url, 'url');\n const fallback =\n context.options.fallbackUrl ??\n (typeof params.fallback === 'string' ? params.fallback : undefined);\n\n return { primary: url, fallback };\n },\n};\n","import type { AppLaunchProvider, AppLaunchUrls } from '../types';\nimport { AppLaunchError } from '../types';\nimport { requireNonEmptyString, encodeQuery } from '../utils/query';\nimport { isAndroid } from '../detect';\n\nfunction buildKeywordNavigationUrl(destination: string): AppLaunchUrls {\n const encoded = encodeQuery(destination);\n\n const primary =\n typeof navigator !== 'undefined' && isAndroid()\n ? `google.navigation:q=${encoded}`\n : `comgooglemaps://?daddr=${encoded}&directionsmode=driving`;\n\n return {\n primary,\n fallback: `https://www.google.com/maps/dir/?api=1&destination=${encoded}&travelmode=driving`,\n };\n}\n\nfunction buildCoordinateNavigationUrl(\n latitude: number,\n longitude: number,\n destination?: string,\n): AppLaunchUrls {\n const coordinateQuery = destination\n ? encodeQuery(destination)\n : `${latitude},${longitude}`;\n\n const primary =\n typeof navigator !== 'undefined' && isAndroid()\n ? `google.navigation:q=${latitude},${longitude}`\n : `comgooglemaps://?daddr=${coordinateQuery}&directionsmode=driving`;\n\n const fallbackDestination = destination\n ? encodeQuery(destination)\n : `${latitude},${longitude}`;\n\n return {\n primary,\n fallback: `https://www.google.com/maps/dir/?api=1&destination=${fallbackDestination}&travelmode=driving`,\n };\n}\n\nexport const googleProvider: AppLaunchProvider = {\n id: 'google',\n actions: ['navigate', 'navigateByCoordinate'] as const,\n\n validateParams(action, params) {\n if (action === 'navigate') {\n requireNonEmptyString(params.destination, 'destination');\n return;\n }\n if (action === 'navigateByCoordinate') {\n if (typeof params.latitude !== 'number' || typeof params.longitude !== 'number') {\n throw new AppLaunchError(\n 'INVALID_PARAMS',\n 'navigateByCoordinate 需要 latitude 与 longitude',\n );\n }\n }\n },\n\n buildUrls(action, params, context): AppLaunchUrls {\n if (action === 'navigate') {\n const destination = requireNonEmptyString(params.destination, 'destination');\n const urls = buildKeywordNavigationUrl(destination);\n if (context.options.fallbackUrl) {\n urls.fallback = context.options.fallbackUrl;\n }\n return urls;\n }\n\n if (action === 'navigateByCoordinate') {\n const urls = buildCoordinateNavigationUrl(\n params.latitude as number,\n params.longitude as number,\n params.destination as string | undefined,\n );\n if (context.options.fallbackUrl) {\n urls.fallback = context.options.fallbackUrl;\n }\n return urls;\n }\n\n throw new Error(`[googleProvider] 不支持 action: ${action}`);\n },\n};\n\nexport function buildGoogleNavigationUrl(destination: string): string {\n return buildKeywordNavigationUrl(destination).primary;\n}\n","import type { AppLaunchProvider } from '../types';\nimport { requireNonEmptyString, encodeQuery } from '../utils/query';\n\nexport type QqShareParams = {\n title: string;\n summary?: string;\n url: string;\n imageUrl?: string;\n};\n\n/** QQ 好友分享 — mqqapi scheme */\nexport const qqProvider: AppLaunchProvider = {\n id: 'qq',\n actions: ['share', 'open'] as const,\n\n validateParams(action, params) {\n if (action === 'open') {\n return;\n }\n requireNonEmptyString(params.title, 'title');\n requireNonEmptyString(params.url, 'url');\n },\n\n buildUrls(action, params, context) {\n if (action === 'open') {\n return {\n primary: 'mqqapi://',\n fallback: context.options.fallbackUrl ?? 'https://im.qq.com/',\n };\n }\n\n const title = encodeQuery(requireNonEmptyString(params.title, 'title'));\n const summary = encodeQuery(\n typeof params.summary === 'string' ? params.summary : '',\n );\n const url = encodeQuery(requireNonEmptyString(params.url, 'url'));\n const imageUrl = params.imageUrl\n ? encodeQuery(String(params.imageUrl))\n : '';\n\n const primary = [\n 'mqqapi://share/to_fri',\n '?src_type=web',\n '&version=1',\n '&file_type=news',\n `&title=${title}`,\n `&description=${summary}`,\n `&url=${url}`,\n imageUrl ? `&image_url=${imageUrl}` : '',\n ].join('');\n\n return {\n primary,\n fallback: context.options.fallbackUrl ?? `https://connect.qq.com/`,\n };\n },\n};\n","import type { AppLaunchProvider, AppLaunchUrls } from '../types';\nimport { requireNonEmptyString, encodeQuery } from '../utils/query';\n\nexport type WechatShareParams = {\n title: string;\n description?: string;\n url: string;\n thumbUrl?: string;\n};\n\n/**\n * 微信外链唤起能力受场景限制:\n * - 微信内 H5 通常需 JS-SDK\n * - 外部浏览器多仅能打开微信或跳转 Universal Link\n */\nexport const wechatProvider: AppLaunchProvider = {\n id: 'wechat',\n actions: ['open', 'share'] as const,\n\n validateParams(action, params) {\n if (action === 'open') {\n return;\n }\n requireNonEmptyString(params.title, 'title');\n requireNonEmptyString(params.url, 'url');\n },\n\n buildUrls(action, params, context): AppLaunchUrls {\n const sourceApplication = encodeQuery(context.sourceApplication);\n\n if (action === 'open') {\n return {\n primary: `weixin://`,\n fallback: context.options.fallbackUrl ?? 'https://weixin.qq.com/',\n };\n }\n\n const title = encodeQuery(requireNonEmptyString(params.title, 'title'));\n const description = encodeQuery(\n typeof params.description === 'string' ? params.description : '',\n );\n const url = encodeQuery(requireNonEmptyString(params.url, 'url'));\n const thumbUrl = params.thumbUrl\n ? encodeQuery(String(params.thumbUrl))\n : '';\n\n // 移动端常用唤起:打开微信并进入分享流程(具体能力依赖微信版本与场景)\n const primary = `weixin://dl/businessWebview/link?appid=&url=${url}&title=${title}&description=${description}`;\n\n return {\n primary,\n fallback:\n context.options.fallbackUrl ??\n `https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=${url}&response_type=code&scope=snsapi_userinfo&state=${sourceApplication}#wechat_redirect`,\n };\n },\n};\n","import type { AppLaunchProvider, AppProviderId } from '../types';\nimport { amapProvider } from './amap';\nimport { baiduProvider } from './baidu';\nimport { genericProvider } from './generic';\nimport { googleProvider } from './google';\nimport { qqProvider } from './qq';\nimport { wechatProvider } from './wechat';\n\nconst builtinProviders: Record<AppProviderId, AppLaunchProvider> = {\n amap: amapProvider,\n baidu: baiduProvider,\n google: googleProvider,\n wechat: wechatProvider,\n qq: qqProvider,\n generic: genericProvider,\n};\n\nconst customProviders = new Map<AppProviderId, AppLaunchProvider>();\n\nexport function registerAppProvider(provider: AppLaunchProvider): void {\n customProviders.set(provider.id, provider);\n}\n\nexport function getAppProvider(id: AppProviderId): AppLaunchProvider | undefined {\n return customProviders.get(id) ?? builtinProviders[id];\n}\n\nexport function listAppProviders(): AppProviderId[] {\n const ids = new Set<AppProviderId>([\n ...(Object.keys(builtinProviders) as AppProviderId[]),\n ...customProviders.keys(),\n ]);\n return [...ids];\n}\n\nexport { amapProvider, baiduProvider, googleProvider, wechatProvider, qqProvider, genericProvider };\n","import { createWebAppLaunchAdapter } from '../adapters/web';\nimport { getAppLauncherConfig } from './config';\nimport { getAppProvider } from '../providers/registry';\nimport {\n AppLaunchError,\n type AppLaunchAdapter,\n type AppLaunchRequest,\n type AppLaunchResult,\n} from '../types';\n\nfunction resolveAdapter(request: AppLaunchRequest): AppLaunchAdapter {\n const config = getAppLauncherConfig();\n const adapter = request.adapter ?? config.adapter;\n\n if (adapter) {\n return adapter;\n }\n\n if (typeof window !== 'undefined') {\n return createWebAppLaunchAdapter();\n }\n\n throw new AppLaunchError(\n 'ADAPTER_MISSING',\n '未配置 AppLaunchAdapter,请在宿主启动时调用 configureAppLauncher({ adapter })',\n );\n}\n\n/**\n * 统一唤起入口:按 provider + action 构建 scheme,经平台 adapter 拉起第三方 App。\n */\nexport async function launchApp(request: AppLaunchRequest): Promise<AppLaunchResult> {\n const config = getAppLauncherConfig();\n const provider = getAppProvider(request.provider);\n\n if (!provider) {\n throw new AppLaunchError('UNKNOWN_PROVIDER', `未知 provider: ${request.provider}`);\n }\n\n if (!provider.actions.includes(request.action)) {\n throw new AppLaunchError(\n 'UNKNOWN_ACTION',\n `provider \"${request.provider}\" 不支持 action \"${request.action}\"`,\n { supportedActions: [...provider.actions] },\n );\n }\n\n const params = request.params ?? {};\n provider.validateParams?.(request.action, params);\n\n const mergedOptions = {\n sourceApplication: config.sourceApplication,\n timeoutMs: 1500,\n ...config.defaultOptions,\n ...request.options,\n };\n\n const urls = provider.buildUrls(request.action, params, {\n sourceApplication: mergedOptions.sourceApplication ?? config.sourceApplication,\n options: mergedOptions,\n });\n\n if (mergedOptions.fallbackUrl && !urls.fallback) {\n urls.fallback = mergedOptions.fallbackUrl;\n }\n\n const adapter = resolveAdapter(request);\n const callbacks = {\n ...config.defaultCallbacks,\n ...request.callbacks,\n };\n\n try {\n return await adapter.launch(urls, {\n provider: request.provider,\n action: request.action,\n timeoutMs: mergedOptions.timeoutMs ?? 1500,\n callbacks,\n });\n } catch (error) {\n const launchError =\n error instanceof AppLaunchError\n ? error\n : new AppLaunchError(\n 'OPEN_FAILED',\n error instanceof Error ? error.message : '唤起第三方 App 失败',\n );\n callbacks.onError?.(launchError);\n throw launchError;\n }\n}\n","import type { AppProviderId, AppReturnPayload } from '../types';\n\nexport type { AppReturnPayload };\n\nexport function parseReturnUrl(url: string): AppReturnPayload {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return { url, params: {} };\n }\n\n const params: Record<string, string> = {};\n parsed.searchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n const provider = parsed.searchParams.get('provider') as AppProviderId | null;\n\n return {\n provider: provider ?? undefined,\n action: parsed.searchParams.get('action') ?? undefined,\n url,\n params,\n };\n}\n\ntype ReturnListener = (payload: AppReturnPayload) => void;\n\nconst listeners = new Set<ReturnListener>();\n\n/** 宿主 App 在收到 deep link 回跳时调用,分发给 onReturn 订阅者 */\nexport function notifyAppReturn(payload: AppReturnPayload): void {\n listeners.forEach(listener => listener(payload));\n}\n\nexport function subscribeAppReturn(listener: ReturnListener): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nexport function matchesReturnUrl(\n incomingUrl: string,\n expectedReturnUrl?: string,\n): boolean {\n if (!expectedReturnUrl) {\n return false;\n }\n\n if (incomingUrl === expectedReturnUrl) {\n return true;\n }\n\n try {\n const incoming = new URL(incomingUrl);\n const expected = new URL(expectedReturnUrl);\n return (\n incoming.protocol === expected.protocol &&\n incoming.hostname === expected.hostname &&\n incoming.pathname === expected.pathname\n );\n } catch {\n return incomingUrl.startsWith(expectedReturnUrl);\n }\n}\n","import { launchApp } from '../core/launcher';\nimport type { AppLaunchCallbacks, AppLaunchOptions, AppLaunchResult } from '../types';\n\n/** 地图导航提供方(关键词导航场景) */\nexport type MapNavigationProviderId = 'amap' | 'baidu' | 'google';\n\nexport type MapNavigationOption = {\n id: MapNavigationProviderId;\n label: string;\n description?: string;\n};\n\nexport const MAP_NAVIGATION_OPTIONS: readonly MapNavigationOption[] = [\n { id: 'amap', label: '高德地图', description: '国内常用,支持关键词导航' },\n { id: 'baidu', label: '百度地图', description: '国内常用,支持关键词导航' },\n { id: 'google', label: '谷歌地图', description: '海外或已安装 Google Maps 时适用' },\n] as const;\n\nexport type MapNavigationOptions = AppLaunchOptions & {\n callbacks?: AppLaunchCallbacks;\n};\n\nexport async function launchMapNavigation(\n provider: MapNavigationProviderId,\n destination: string,\n options?: MapNavigationOptions,\n): Promise<AppLaunchResult> {\n const { callbacks, ...launchOptions } = options ?? {};\n return launchApp({\n provider,\n action: 'navigate',\n params: { destination },\n options: launchOptions,\n callbacks,\n });\n}\n\n/** 同步唤起,结果通过 callbacks 回传 */\nexport function openMapNavigation(\n provider: MapNavigationProviderId,\n destination: string,\n options?: MapNavigationOptions,\n): void {\n void launchMapNavigation(provider, destination, options);\n}\n","import { launchApp } from '../core/launcher';\nimport { buildAmapNavigationUrl } from '../providers/amap';\nimport { buildBaiduNavigationUrl } from '../providers/baidu';\nimport { buildGoogleNavigationUrl } from '../providers/google';\nimport type { AppLaunchCallbacks, AppLaunchOptions, AppLaunchResult } from '../types';\n\nexport type AmapNavigationOptions = AppLaunchOptions & {\n callbacks?: AppLaunchCallbacks;\n};\n\n/** 高德关键词导航(日历等场景:仅地点文本) */\nexport async function launchAmapNavigation(\n destination: string,\n options?: AmapNavigationOptions,\n): Promise<AppLaunchResult> {\n const { callbacks, ...launchOptions } = options ?? {};\n return launchApp({\n provider: 'amap',\n action: 'navigate',\n params: { destination },\n options: launchOptions,\n callbacks,\n });\n}\n\n/** 兼容同步调用:不阻塞 UI,结果通过 callbacks 回传 */\nexport function openAmapNavigation(\n destination: string,\n options?: AmapNavigationOptions,\n): void {\n void launchAmapNavigation(destination, options);\n}\n\nexport { buildAmapNavigationUrl };\n\nexport type WechatShareOptions = AppLaunchOptions & {\n callbacks?: AppLaunchCallbacks;\n title: string;\n description?: string;\n url: string;\n thumbUrl?: string;\n};\n\nexport async function launchWechatShare(\n options: WechatShareOptions,\n): Promise<AppLaunchResult> {\n const { callbacks, title, description, url, thumbUrl, ...launchOptions } = options;\n return launchApp({\n provider: 'wechat',\n action: 'share',\n params: { title, description, url, thumbUrl },\n options: launchOptions,\n callbacks,\n });\n}\n\nexport type QqShareOptions = AppLaunchOptions & {\n callbacks?: AppLaunchCallbacks;\n title: string;\n summary?: string;\n url: string;\n imageUrl?: string;\n};\n\nexport async function launchQqShare(options: QqShareOptions): Promise<AppLaunchResult> {\n const { callbacks, title, summary, url, imageUrl, ...launchOptions } = options;\n return launchApp({\n provider: 'qq',\n action: 'share',\n params: { title, summary, url, imageUrl },\n options: launchOptions,\n callbacks,\n });\n}\n\nexport async function launchGenericUrl(\n url: string,\n options?: AppLaunchOptions & { callbacks?: AppLaunchCallbacks; fallback?: string },\n): Promise<AppLaunchResult> {\n const { callbacks, fallback, ...launchOptions } = options ?? {};\n return launchApp({\n provider: 'generic',\n action: 'open',\n params: { url, fallback },\n options: launchOptions,\n callbacks,\n });\n}\n\nexport {\n MAP_NAVIGATION_OPTIONS,\n launchMapNavigation,\n openMapNavigation,\n type MapNavigationOption,\n type MapNavigationOptions,\n type MapNavigationProviderId,\n} from './map-navigation';\n\nexport { buildBaiduNavigationUrl } from '../providers/baidu';\nexport { buildGoogleNavigationUrl } from '../providers/google';\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/common/aiApi/types.ts
|
|
4
|
+
var CORE_LLM_COMPLETION_TASK_ID = "core.llmCompletion";
|
|
5
|
+
var CORE_STRUCTURED_MULTIMODAL_TASK_ID = "core.structuredMultimodal";
|
|
6
|
+
var CORE_CONNECTIVITY_TEST_TASK_ID = "core.connectivityTest";
|
|
7
|
+
|
|
8
|
+
exports.CORE_CONNECTIVITY_TEST_TASK_ID = CORE_CONNECTIVITY_TEST_TASK_ID;
|
|
9
|
+
exports.CORE_LLM_COMPLETION_TASK_ID = CORE_LLM_COMPLETION_TASK_ID;
|
|
10
|
+
exports.CORE_STRUCTURED_MULTIMODAL_TASK_ID = CORE_STRUCTURED_MULTIMODAL_TASK_ID;
|
|
11
|
+
//# sourceMappingURL=chunk-GJVEYCS4.js.map
|
|
12
|
+
//# sourceMappingURL=chunk-GJVEYCS4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/aiApi/types.ts"],"names":[],"mappings":";;;AA0IO,IAAM,2BAAA,GAA8B;AACpC,IAAM,kCAAA,GAAqC;AAC3C,IAAM,8BAAA,GAAiC","file":"chunk-GJVEYCS4.js","sourcesContent":["/** 音频处理策略:native=chat 内嵌音频,stt=先转写再 chat,auto=按模型能力自动选择(失败时 STT 回退) */\nexport type AudioStrategy = 'native' | 'stt' | 'auto';\n\n/** 连接配置(调用方可显式传入,或与 env 合并) */\nexport interface AiConnectionSettings {\n apiKey: string;\n baseUrl: string;\n model?: string;\n textModel?: string;\n visionModel?: string;\n audioModel?: string;\n audioStrategy?: AudioStrategy;\n timeoutMs?: number;\n maxImageBytes?: number;\n maxAudioBytes?: number;\n}\n\n/** 客户端/请求可携带的 AI 连接配置(字段均可选,用于覆盖环境变量) */\nexport type AiClientSettings = Partial<AiConnectionSettings>;\n\n/** 解析后的完整连接配置 */\nexport interface AiConnectionConfig extends AiConnectionSettings {\n textModel: string;\n visionModel: string;\n audioModel: string;\n audioStrategy: AudioStrategy;\n timeoutMs: number;\n maxImageBytes: number;\n maxAudioBytes: number;\n}\n\n/** 统一 AI 任务请求 */\nexport interface AiApiRunRequest<TInput = unknown> {\n taskId: string;\n input: TInput;\n options?: AiTaskRunOptions;\n clientSettings?: AiClientSettings;\n}\n\nexport interface AiTaskRunOptions {\n model?: string;\n temperature?: number;\n maxTokens?: number;\n}\n\n/** 统一 AI 任务响应 */\nexport interface AiApiResponse<TData = unknown> {\n success: boolean;\n taskId: string;\n data?: TData;\n error?: AiApiErrorBody;\n meta?: AiApiResponseMeta;\n}\n\nexport interface AiApiErrorBody {\n code: AiApiErrorCode;\n message: string;\n details?: unknown;\n}\n\nexport type AiApiErrorCode =\n | 'UNAUTHORIZED'\n | 'INVALID_INPUT'\n | 'TASK_NOT_FOUND'\n | 'AI_CONFIG_MISSING'\n | 'AI_REQUEST_FAILED'\n | 'AI_PARSE_FAILED'\n | 'PAYLOAD_TOO_LARGE'\n | 'UNSUPPORTED_MEDIA';\n\nexport interface AiApiResponseMeta {\n model: string;\n latencyMs: number;\n provider?: string;\n confidence?: number;\n rawSummary?: string;\n}\n\n/** 多模态图片输入(base64) */\nexport interface AiImageInput {\n base64: string;\n mimeType: string;\n}\n\n/** 多模态音频输入(base64) */\nexport interface AiAudioInput {\n base64: string;\n mimeType: string;\n}\n\nexport type AiMediaKind = 'image' | 'audio';\n\nexport interface AiImageMediaInput extends AiImageInput {\n kind: 'image';\n}\n\nexport interface AiAudioMediaInput extends AiAudioInput {\n kind: 'audio';\n}\n\nexport type AiMediaInput = AiImageMediaInput | AiAudioMediaInput;\n\n/** 通用文本补全任务输入 */\nexport interface TextCompletionInput {\n systemPrompt?: string;\n userPrompt: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n /** 显式连接配置,优先级高于 clientSettings / 环境变量 */\n connection?: AiClientSettings;\n}\n\n/** 通用文本补全任务输出 */\nexport interface TextCompletionOutput {\n content: string;\n rawText: string;\n}\n\n/** 通用结构化多模态任务输入 */\nexport interface StructuredMultimodalInput {\n systemPrompt: string;\n userPrompt: string;\n media?: AiMediaInput[];\n jsonSchemaHint?: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n audioStrategy?: AudioStrategy;\n connection?: AiClientSettings;\n}\n\n/** 通用结构化多模态任务输出 */\nexport interface StructuredMultimodalOutput {\n json: Record<string, unknown>;\n rawText: string;\n}\n\nexport const CORE_LLM_COMPLETION_TASK_ID = 'core.llmCompletion';\nexport const CORE_STRUCTURED_MULTIMODAL_TASK_ID = 'core.structuredMultimodal';\nexport const CORE_CONNECTIVITY_TEST_TASK_ID = 'core.connectivityTest';\n\nexport interface ConnectivityTestOutput {\n ok: boolean;\n reply: string;\n}\n\n/** GET /api/ai/config 响应(宿主实现,不暴露 apiKey) */\nexport interface AiServerConfigStatus {\n serverConfigured: boolean;\n baseUrl?: string;\n visionModel?: string;\n textModel?: string;\n error?: string;\n}\n\nexport interface AiModelsListRequest {\n clientSettings?: AiClientSettings;\n}\n\nexport interface AiModelsListResponse {\n success: boolean;\n models: string[];\n visionModels: string[];\n suggestedVisionModel?: string;\n error?: {\n code: string;\n message: string;\n };\n}\n\nexport interface AiTaskContext {\n requestId?: string;\n userId?: string | number;\n clientSettings?: AiClientSettings;\n}\n\nexport interface AiTaskDefinition<TInput = unknown, TOutput = unknown> {\n id: string;\n description?: string;\n validateInput: (input: unknown) => TInput;\n execute: (\n input: TInput,\n ctx: AiTaskContext\n ) => Promise<{\n data: TOutput;\n meta?: Partial<AiApiResponseMeta>;\n }>;\n}\n\nexport interface MultimodalChatParams {\n systemPrompt: string;\n userPrompt: string;\n media?: AiMediaInput[];\n model?: string;\n temperature?: number;\n maxTokens?: number;\n jsonMode?: boolean;\n audioStrategy?: AudioStrategy;\n connection?: AiClientSettings;\n}\n\nexport interface MultimodalChatResult {\n content: string;\n model: string;\n raw: unknown;\n /** auto/native/stt 实际采用的音频处理方式 */\n audioHandling?: 'none' | 'native' | 'stt';\n /** STT 或 native 失败回退时的转写文本 */\n transcriptions?: string[];\n}\n"]}
|