iframe-connect
Version:
A lightweight, type-safe cross-frame communication library with plugin system and multi-window isolation
1 lines • 29.4 kB
Source Map (JSON)
{"version":3,"sources":["../src/message-handler.ts","../src/base-bridge.ts","../src/host-bridge.ts","../src/child-bridge.ts","../src/factory.ts"],"names":[],"mappings":";;;;AAcO,IAAM,iBAAN,MAAqB;AAAA;AAAA,EAU1B,WAAY,CAAA,YAAA,EAAsB,OAAkB,EAAA,KAAA,GAAiB,KAAO,EAAA;AAT5E,IAAQ,IAAA,CAAA,eAAA,uBAAsB,GAA4B,EAAA;AAC1D,IAAQ,IAAA,CAAA,cAAA,uBAAqB,GAAqC,EAAA;AAClE,IAAA,IAAA,CAAQ,SAAY,GAAA,CAAA;AAIpB,IAAA,IAAA,CAAQ,cAAgC,GAAA,IAAA;AACxC;AAAA,IAAA,IAAA,CAAQ,aAAgB,GAAA,GAAA;AAGtB,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA;AACpB,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA;AACf,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAGb,IAAA,IAAA,CAAK,mBAAoB,EAAA;AAAA;AAC3B;AAAA;AAAA;AAAA,EAKQ,mBAA4B,GAAA;AAClC,IAAI,IAAA,IAAA,CAAK,mBAAmB,IAAM,EAAA;AAElC,IAAK,IAAA,CAAA,cAAA,GAAiB,YAAY,MAAM;AACtC,MAAA,IAAA,CAAK,aAAc,EAAA;AAAA,KACrB,EAAG,KAAK,aAAa,CAAA;AAAA;AACvB;AAAA;AAAA;AAAA,EAKQ,aAAsB,GAAA;AAC5B,IAAI,IAAA,IAAA,CAAK,eAAgB,CAAA,IAAA,KAAS,CAAG,EAAA;AAErC,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AAGrB,IAAA,MAAM,cAAwB,EAAC;AAE/B,IAAA,IAAA,CAAK,eAAgB,CAAA,OAAA,CAAQ,CAAC,OAAA,EAAS,EAAO,KAAA;AAC5C,MAAA,IAAI,OAAQ,CAAA,cAAA,IAAkB,GAAO,IAAA,OAAA,CAAQ,cAAgB,EAAA;AAC3D,QAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA;AACrB,KACD,CAAA;AAGD,IAAY,WAAA,CAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AAC1B,MAAA,MAAM,OAAU,GAAA,IAAA,CAAK,eAAgB,CAAA,GAAA,CAAI,EAAE,CAAA;AAC3C,MAAA,IAAI,OAAS,EAAA;AACX,QAAK,IAAA,CAAA,eAAA,CAAgB,OAAO,EAAE,CAAA;AAC9B,QAAA,OAAA,CAAQ,OAAO,IAAI,KAAA,CAAM,CAAoB,iBAAA,EAAA,EAAE,EAAE,CAAC,CAAA;AAElD,QAAA,IAAI,KAAK,KAAO,EAAA;AACd,UAAK,IAAA,CAAA,GAAA,CAAI,CAAS,0BAAA,EAAA,EAAE,CAAE,CAAA,CAAA;AAAA;AACxB;AACF,KACD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKA,iBAA4B,GAAA;AAC1B,IAAA,OAAO,OAAO,IAAK,CAAA,GAAA,EAAK,CAAI,CAAA,EAAA,EAAE,KAAK,SAAS,CAAA,CAAA;AAAA;AAC9C;AAAA;AAAA;AAAA,EAKA,OAAO,IAAmB,EAAA;AACxB,IAAA,IAAI,KAAK,KAAO,EAAA;AACd,MAAQ,OAAA,CAAA,GAAA,CAAI,cAAgB,EAAA,GAAG,IAAI,CAAA;AAAA;AACrC;AACF;AAAA;AAAA;AAAA,EAKA,eAAe,QAAiC,EAAA;AAC9C,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,eAAgB,CAAA,GAAA,CAAI,SAAS,EAAE,CAAA;AACpD,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA;AAAA;AAIF,IAAK,IAAA,CAAA,eAAA,CAAgB,MAAO,CAAA,QAAA,CAAS,EAAE,CAAA;AAEvC,IAAA,IAAI,SAAS,OAAS,EAAA;AACpB,MAAQ,OAAA,CAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,KACxB,MAAA;AACL,MAAA,OAAA,CAAQ,OAAO,IAAI,KAAA,CAAM,QAAS,CAAA,KAAA,IAAS,eAAe,CAAC,CAAA;AAAA;AAC7D;AACF;AAAA;AAAA;AAAA,EAKA,MAAM,aAAc,CAAA,OAAA,EAAyB,MAA+B,EAAA;AAC1E,IAAK,IAAA,CAAA,GAAA,CAAI,qBAAqB,OAAO,CAAA;AAErC,IAAA,MAAM,SAAY,GAAA,IAAA,CAAK,cAAe,CAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AACtD,IAAA,IAAI,CAAC,SAAA,IAAa,SAAU,CAAA,IAAA,KAAS,CAAG,EAAA;AAEtC,MAAA,MAAM,QAA4B,GAAA;AAAA,QAChC,IAAI,OAAQ,CAAA,EAAA;AAAA,QACZ,OAAS,EAAA,KAAA;AAAA,QACT,KAAA,EAAO,CAAgC,6BAAA,EAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,QACnD,UAAY,EAAA,IAAA;AAAA,QACZ,SAAA,EAAW,KAAK,GAAI;AAAA,OACtB;AACA,MAAO,MAAA,CAAA,WAAA,CAAY,QAAU,EAAA,IAAA,CAAK,YAAY,CAAA;AAC9C,MAAA;AAAA;AAGF,IAAI,IAAA;AAEF,MAAM,MAAA,OAAA,GAAU,MAAM,OAAQ,CAAA,GAAA;AAAA,QAC5B,KAAA,CAAM,IAAK,CAAA,SAAS,CAAE,CAAA,GAAA,CAAI,CAAC,QAAa,KAAA,QAAA,CAAS,OAAQ,CAAA,OAAO,CAAC;AAAA,OACnE;AAGA,MAAA,MAAM,QAA4B,GAAA;AAAA,QAChC,IAAI,OAAQ,CAAA,EAAA;AAAA,QACZ,OAAS,EAAA,IAAA;AAAA,QACT,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,QACf,UAAY,EAAA,IAAA;AAAA,QACZ,SAAA,EAAW,KAAK,GAAI;AAAA,OACtB;AACA,MAAO,MAAA,CAAA,WAAA,CAAY,QAAU,EAAA,IAAA,CAAK,YAAY,CAAA;AAAA,aACvC,KAAO,EAAA;AAEd,MAAA,MAAM,QAA4B,GAAA;AAAA,QAChC,IAAI,OAAQ,CAAA,EAAA;AAAA,QACZ,OAAS,EAAA,KAAA;AAAA,QACT,KAAO,EAAA,KAAA,YAAiB,KAAQ,GAAA,KAAA,CAAM,OAAU,GAAA,eAAA;AAAA,QAChD,UAAY,EAAA,IAAA;AAAA,QACZ,SAAA,EAAW,KAAK,GAAI;AAAA,OACtB;AACA,MAAO,MAAA,CAAA,WAAA,CAAY,QAAU,EAAA,IAAA,CAAK,YAAY,CAAA;AAAA;AAChD;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBACE,CAAA,EAAA,EACA,OACA,EAAA,MAAA,EACA,cACM,EAAA;AAEN,IAAA,MAAM,OACJ,GAAA,cAAA,KAAmB,MAAY,GAAA,cAAA,GAAiB,IAAK,CAAA,OAAA;AAGvD,IAAA,MAAM,iBACJ,OAAY,KAAA,MAAA,GAAY,IAAK,CAAA,GAAA,KAAQ,OAAU,GAAA,MAAA;AAGjD,IAAK,IAAA,CAAA,eAAA,CAAgB,IAAI,EAAI,EAAA;AAAA,MAC3B,OAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKA,gBAAA,CAAiB,MAAmB,QAAqC,EAAA;AACvE,IAAA,IAAI,CAAC,IAAA,CAAK,cAAe,CAAA,GAAA,CAAI,IAAI,CAAG,EAAA;AAClC,MAAA,IAAA,CAAK,cAAe,CAAA,GAAA,CAAI,IAAM,kBAAA,IAAI,KAAK,CAAA;AAAA;AAGzC,IAAA,IAAA,CAAK,cAAe,CAAA,GAAA,CAAI,IAAI,CAAA,CAAG,IAAI,QAAQ,CAAA;AAG3C,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,SAAY,GAAA,IAAA,CAAK,cAAe,CAAA,GAAA,CAAI,IAAI,CAAA;AAC9C,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AACzB,QAAI,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACxB,UAAK,IAAA,CAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAAA;AACjC;AACF,KACF;AAAA;AACF;AAAA;AAAA;AAAA,EAKA,mBAAA,CAAoB,MAAmB,QAAgC,EAAA;AACrE,IAAA,MAAM,SAAY,GAAA,IAAA,CAAK,cAAe,CAAA,GAAA,CAAI,IAAI,CAAA;AAE9C,IAAA,IAAI,CAAC,SAAW,EAAA;AACd,MAAA;AAAA;AAGF,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AACzB,MAAI,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACxB,QAAK,IAAA,CAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAAA;AACjC,KACK,MAAA;AACL,MAAK,IAAA,CAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAAA;AACjC;AACF;AAAA;AAAA;AAAA,EAKA,OAAgB,GAAA;AAEd,IAAI,IAAA,IAAA,CAAK,mBAAmB,IAAM,EAAA;AAChC,MAAA,aAAA,CAAc,KAAK,cAAc,CAAA;AACjC,MAAA,IAAA,CAAK,cAAiB,GAAA,IAAA;AAAA;AAIxB,IAAA,IAAA,CAAK,eAAgB,CAAA,OAAA,CAAQ,CAAC,EAAE,QAAa,KAAA;AAC3C,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,kBAAkB,CAAC,CAAA;AAAA,KACrC,CAAA;AACD,IAAA,IAAA,CAAK,gBAAgB,KAAM,EAAA;AAC3B,IAAA,IAAA,CAAK,eAAe,KAAM,EAAA;AAAA;AAC5B;AAAA;AAAA;AAAA,EAKA,uBAAkC,GAAA;AAChC,IAAA,OAAO,KAAK,eAAgB,CAAA,IAAA;AAAA;AAC9B;AAAA;AAAA;AAAA,EAKA,iBAA4B,GAAA;AAC1B,IAAA,OAAO,KAAK,cAAe,CAAA,IAAA;AAAA;AAE/B;;;ACrPO,IAAe,eAAf,MAA4B;AAAA,EAKjC,WAAA,CAAY,MAAuB,GAAA,EAAI,EAAA;AAErC,IAAA,IAAA,CAAK,MAAS,GAAA,cAAA,CAAA;AAAA,MACZ,YAAc,EAAA,GAAA;AAAA,MACd,OAAS,EAAA,GAAA;AAAA,MACT,KAAO,EAAA,KAAA;AAAA,MACP,iBAAmB,EAAA,KAAA;AAAA,MACnB,QAAU,EAAA;AAAA,KACP,EAAA,MAAA,CAAA;AAIL,IAAI,IAAA,IAAA,CAAK,OAAO,iBAAmB,EAAA;AACjC,MAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAK,MAAO,CAAA,QAAA,IAAY,KAAK,gBAAiB,EAAA;AAC9D,MAAI,IAAA,IAAA,CAAK,OAAO,KAAO,EAAA;AACrB,QAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,6EAAA,EAA8B,IAAK,CAAA,QAAQ,CAAE,CAAA,CAAA;AAAA;AAC3D;AAGF,IAAA,IAAA,CAAK,iBAAiB,IAAI,cAAA;AAAA,MACxB,KAAK,MAAO,CAAA,YAAA;AAAA,MACZ,KAAK,MAAO,CAAA,OAAA;AAAA,MACZ,KAAK,MAAO,CAAA;AAAA,KACd;AAEA,IAAA,IAAA,CAAK,oBAAqB,EAAA;AAAA;AAC5B;AAAA;AAAA;AAAA,EAKQ,gBAA2B,GAAA;AACjC,IAAA,OAAO,CAAU,OAAA,EAAA,IAAA,CAAK,GAAI,EAAC,IAAI,IAAK,CAAA,MAAA,EAAS,CAAA,QAAA,CAAS,EAAE,CAAA,CAAE,MAAO,CAAA,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA;AACxE;AAAA;AAAA;AAAA,EAeA,IAAA,CAAc,MAAmB,OAAkB,EAAA;AACjD,IAAM,MAAA,YAAA,GAAe,KAAK,eAAgB,EAAA;AAC1C,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAK,IAAA,CAAA,cAAA,CAAe,IAAI,4CAAS,CAAA;AACjC,MAAA;AAAA;AAGF,IAAA,MAAM,OAA2B,GAAA;AAAA,MAC/B,IAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAI;AAAA,KACtB;AAGA,IAAA,IAAI,IAAK,CAAA,MAAA,CAAO,iBAAqB,IAAA,IAAA,CAAK,QAAU,EAAA;AAClD,MAAA,OAAA,CAAQ,WAAW,IAAK,CAAA,QAAA;AAAA;AAG1B,IAAK,IAAA,CAAA,cAAA,CAAe,GAAI,CAAA,2BAAA,EAAS,OAAO,CAAA;AACxC,IAAA,YAAA,CAAa,WAAY,CAAA,OAAA,EAAS,IAAK,CAAA,MAAA,CAAO,YAAY,CAAA;AAAA;AAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA,CACE,IACA,EAAA,OAAA,EACA,cACY,EAAA;AACZ,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,MAAM,MAAA,YAAA,GAAe,KAAK,eAAgB,EAAA;AAC1C,MAAA,IAAI,CAAC,YAAc,EAAA;AACjB,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,4CAAS,CAAC,CAAA;AAC3B,QAAA;AAAA;AAGF,MAAM,MAAA,SAAA,GAAY,IAAK,CAAA,cAAA,CAAe,iBAAkB,EAAA;AAGxD,MAAA,IAAA,CAAK,cAAe,CAAA,oBAAA;AAAA,QAClB,SAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,cAAA,KAAmB,SAAY,cAAiB,GAAA;AAAA,OAClD;AAEA,MAAA,MAAM,OAA6B,GAAA;AAAA,QACjC,EAAI,EAAA,SAAA;AAAA,QACJ,IAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAc,EAAA,IAAA;AAAA,QACd,SAAA,EAAW,KAAK,GAAI;AAAA,OACtB;AAGA,MAAA,IAAI,IAAK,CAAA,MAAA,CAAO,iBAAqB,IAAA,IAAA,CAAK,QAAU,EAAA;AAClD,QAAA,OAAA,CAAQ,WAAW,IAAK,CAAA,QAAA;AAAA;AAG1B,MAAK,IAAA,CAAA,cAAA,CAAe,GAAI,CAAA,2BAAA,EAAS,OAAO,CAAA;AACxC,MAAA,YAAA,CAAa,WAAY,CAAA,OAAA,EAAS,IAAK,CAAA,MAAA,CAAO,YAAY,CAAA;AAAA,KAC3D,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKA,EAAA,CACE,MACA,QACY,EAAA;AACZ,IAAA,OAAO,IAAK,CAAA,cAAA,CAAe,gBAAiB,CAAA,IAAA,EAAM,QAAQ,CAAA;AAAA;AAC5D;AAAA;AAAA;AAAA,EAKA,GAAA,CACE,MACA,QACM,EAAA;AACN,IAAK,IAAA,CAAA,cAAA,CAAe,mBAAoB,CAAA,IAAA,EAAM,QAAQ,CAAA;AAAA;AACxD;AAAA;AAAA;AAAA,EAKU,sBAAsB,KAA2B,EAAA;AACzD,IAAM,MAAA,YAAA,GAAe,KAAK,eAAgB,EAAA;AAC1C,IAAA,IAAI,CAAC,YAAA,IAAgB,KAAM,CAAA,MAAA,KAAW,YAAc,EAAA;AAClD,MAAA;AAAA;AAIF,IAAI,IAAA,IAAA,CAAK,OAAO,iBAAmB,EAAA;AACjC,MACE,IAAA,CAAC,KAAM,CAAA,IAAA,IACP,CAAC,KAAA,CAAM,IAAK,CAAA,QAAA,IACZ,KAAM,CAAA,IAAA,CAAK,QAAa,KAAA,IAAA,CAAK,QAC7B,EAAA;AACA,QAAI,IAAA,IAAA,CAAK,OAAO,KAAO,EAAA;AACrB,UAAA,IAAA,CAAK,cAAe,CAAA,GAAA,CAAI,mDAAa,EAAA,KAAA,CAAM,IAAI,CAAA;AAAA;AAEjD,QAAA;AAAA;AACF;AAIF,IAAA,IAAI,KAAM,CAAA,IAAA,IAAQ,KAAM,CAAA,IAAA,CAAK,UAAY,EAAA;AACvC,MAAK,IAAA,CAAA,cAAA,CAAe,cAAe,CAAA,KAAA,CAAM,IAAuB,CAAA;AAChE,MAAA;AAAA;AAIF,IAAA,IAAI,KAAM,CAAA,IAAA,IAAQ,KAAM,CAAA,IAAA,CAAK,YAAc,EAAA;AACzC,MAAA,IAAA,CAAK,cAAe,CAAA,aAAA;AAAA,QAClB,KAAM,CAAA,IAAA;AAAA,QACN;AAAA,OACF;AACA,MAAA;AAAA;AAIF,IAAA,IAAI,KAAM,CAAA,IAAA,IAAQ,KAAM,CAAA,IAAA,CAAK,IAAM,EAAA;AACjC,MAAM,MAAA,SAAA,GAAa,IAAK,CAAA,cAAA,CAAuB,cAAe,CAAA,GAAA;AAAA,QAC5D,MAAM,IAAK,CAAA;AAAA,OACb;AACA,MAAI,IAAA,SAAA,IAAa,SAAU,CAAA,IAAA,GAAO,CAAG,EAAA;AACnC,QAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,QAA4B,KAAA;AAC7C,UAAI,IAAA;AACF,YAAS,QAAA,CAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,mBACpB,KAAO,EAAA;AACd,YAAK,IAAA,CAAA,cAAA,CAAe,GAAI,CAAA,yDAAA,EAAc,KAAK,CAAA;AAAA;AAC7C,SACD,CAAA;AAAA;AACH;AACF;AACF;AAAA;AAAA;AAAA,EAKA,YAAe,GAAA;AACb,IAAO,OAAA;AAAA,MACL,QAAQ,IAAK,CAAA,MAAA;AAAA,MACb,UAAU,IAAK,CAAA,QAAA;AAAA,MACf,eAAA,EAAiB,IAAK,CAAA,cAAA,CAAe,uBAAwB,EAAA;AAAA,MAC7D,SAAA,EAAW,IAAK,CAAA,cAAA,CAAe,iBAAkB;AAAA,KACnD;AAAA;AACF;AAAA;AAAA;AAAA,EAKA,OAAgB,GAAA;AACd,IAAA,IAAA,CAAK,eAAe,OAAQ,EAAA;AAC5B,IAAO,MAAA,CAAA,mBAAA;AAAA,MACL,SAAA;AAAA,MACA,IAAA,CAAK,qBAAsB,CAAA,IAAA,CAAK,IAAI;AAAA,KACtC;AAAA;AAEJ;;;AClOa,IAAA,UAAA,GAAN,cAAyB,YAAa,CAAA;AAAA,EAG3C,WAAY,CAAA,MAAA,EAA2B,MAAuB,GAAA,EAAI,EAAA;AAChE,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AAAA;AAChB,EAEU,oBAA6B,GAAA;AACrC,IAAA,MAAA,CAAO,iBAAiB,SAAW,EAAA,IAAA,CAAK,qBAAsB,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAC1E,EAEU,eAAiC,GAAA;AACzC,IAAA,OAAO,KAAK,MAAO,CAAA,aAAA;AAAA;AAEvB;;;ACfa,IAAA,WAAA,GAAN,cAA0B,YAAa,CAAA;AAAA,EAC5C,WAAA,CAAY,MAAuB,GAAA,EAAI,EAAA;AACrC,IAAA,KAAA,CAAM,MAAM,CAAA;AAAA;AACd,EAEU,oBAA6B,GAAA;AACrC,IAAA,MAAA,CAAO,iBAAiB,SAAW,EAAA,IAAA,CAAK,qBAAsB,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAC1E,EAEU,eAAiC,GAAA;AACzC,IAAA,OAAO,MAAO,CAAA,MAAA;AAAA;AAElB;;;ACGO,SAAS,wBACd,CAAA,MAAA,EACA,MAA+B,GAAA,EACnB,EAAA;AACZ,EAAA,MAAoD,aAA5C,EAAS,OAAA,EAAA,aAAA,KAAmC,EAAjB,EAAA,YAAA,GAAA,SAAA,CAAiB,IAAjB,CAA3B,SAAA,CAAA,CAAA;AACR,EAAA,MAAM,MAAS,GAAA,IAAI,UAAW,CAAA,MAAA,EAAQ,YAAY,CAAA;AAGlD,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,YAAA,CAAa,QAAQ,aAAa,CAAA;AAAA;AAGpC,EAAO,OAAA,MAAA;AACT;AAKO,SAAS,yBAAA,CACd,MAA+B,GAAA,EAClB,EAAA;AACb,EAAA,MAAoD,aAA5C,EAAS,OAAA,EAAA,aAAA,KAAmC,EAAjB,EAAA,YAAA,GAAA,SAAA,CAAiB,IAAjB,CAA3B,SAAA,CAAA,CAAA;AACR,EAAM,MAAA,MAAA,GAAS,IAAI,WAAA,CAAY,YAAY,CAAA;AAG3C,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,YAAA,CAAa,QAAQ,aAAa,CAAA;AAAA;AAGpC,EAAO,OAAA,MAAA;AACT;AAKO,SAAS,oBAAA,CACd,gBACA,MAC0B,EAAA;AAE1B,EAAI,IAAA,MAAA,KAAW,OAAO,MAAQ,EAAA;AAC5B,IAAM,MAAA,YAAA,GACJ,cAA0B,YAAA,WAAA,GACtB,MACC,GAAA,cAAA;AACP,IAAA,OAAO,0BAA0B,YAAY,CAAA;AAAA;AAI/C,EAAA,IAAI,0BAA0B,WAAa,EAAA;AACzC,IAAO,OAAA,wBAAA,CAAyB,gBAAgB,MAAM,CAAA;AAAA;AAGxD,EAAM,MAAA,IAAI,MAAM,wFAAuB,CAAA;AACzC;AAKA,SAAS,YAAA,CACP,QACA,MACM,EAAA;AAEN,EAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,IAAA,MAAM,UAAU,MAAO,CAAA,MAAA,KAAW,IAAO,GAAA,KAAK,MAAO,CAAA,MAAA;AACrD,IAAA,YAAA,CAAa,QAAQ,OAAO,CAAA;AAAA;AAI9B,EAAA,IAAI,OAAO,KAAO,EAAA;AAChB,IAAA,MAAM,UAAU,MAAO,CAAA,KAAA,KAAU,IAAO,GAAA,KAAK,MAAO,CAAA,KAAA;AACpD,IAAA,kBAAA,CAAmB,QAAQ,OAAO,CAAA;AAAA;AAIpC,EAAA,IAAI,OAAO,KAAO,EAAA;AAChB,IAAA,MAAM,UAAU,MAAO,CAAA,KAAA,KAAU,IAAO,GAAA,KAAK,MAAO,CAAA,KAAA;AACpD,IAAA,kBAAA,CAAmB,QAAQ,OAAO,CAAA;AAAA;AAEtC;AAKO,SAAS,gBAAA,CACd,QACA,MACY,EAAA;AACZ,EAAO,OAAA,IAAI,UAAW,CAAA,MAAA,EAAQ,MAAM,CAAA;AACtC;AAKO,SAAS,kBAAkB,MAAoC,EAAA;AACpE,EAAO,OAAA,IAAI,YAAY,MAAM,CAAA;AAC/B;AAKO,SAAS,gBAAA,CACd,gBACA,MAC0B,EAAA;AAE1B,EAAI,IAAA,MAAA,KAAW,OAAO,MAAQ,EAAA;AAC5B,IAAM,MAAA,YAAA,GACJ,cAA0B,YAAA,WAAA,GAAc,MAAS,GAAA,cAAA;AACnD,IAAO,OAAA,IAAI,YAAY,YAAY,CAAA;AAAA;AAIrC,EAAA,IAAI,0BAA0B,WAAa,EAAA;AACzC,IAAO,OAAA,IAAI,UAAW,CAAA,cAAA,EAAgB,MAAM,CAAA;AAAA;AAG9C,EAAM,MAAA,IAAI,MAAM,wFAAuB,CAAA;AACzC","file":"index.mjs","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * 消息处理器\n * 负责处理消息的发送、接收和响应逻辑\n */\n\nimport type {\n MessageType,\n RequestMessage,\n ResponseMessage,\n EventListener,\n PendingRequest,\n} from \"./types\";\n\nexport class MessageHandler {\n private pendingRequests = new Map<string, PendingRequest>();\n private eventListeners = new Map<MessageType, Set<EventListener>>();\n private messageId = 0;\n private targetOrigin: string;\n private timeout?: number;\n private debug: boolean;\n private timeoutChecker: number | null = null; // 集中式超时检查器\n private checkInterval = 1000; // 检查间隔(毫秒)\n\n constructor(targetOrigin: string, timeout?: number, debug: boolean = false) {\n this.targetOrigin = targetOrigin;\n this.timeout = timeout;\n this.debug = debug;\n\n // 启动超时检查器\n this.startTimeoutChecker();\n }\n\n /**\n * 启动集中式超时检查器\n */\n private startTimeoutChecker(): void {\n if (this.timeoutChecker !== null) return;\n\n this.timeoutChecker = setInterval(() => {\n this.checkTimeouts();\n }, this.checkInterval) as unknown as number;\n }\n\n /**\n * 检查所有待处理请求的超时\n */\n private checkTimeouts(): void {\n if (this.pendingRequests.size === 0) return;\n\n const now = Date.now();\n\n // 收集超时的请求ID\n const timedOutIds: string[] = [];\n\n this.pendingRequests.forEach((request, id) => {\n if (request.expirationTime && now >= request.expirationTime) {\n timedOutIds.push(id);\n }\n });\n\n // 处理超时的请求\n timedOutIds.forEach((id) => {\n const request = this.pendingRequests.get(id);\n if (request) {\n this.pendingRequests.delete(id);\n request.reject(new Error(`Request timeout: ${id}`));\n\n if (this.debug) {\n this.log(`请求超时: ${id}`);\n }\n }\n });\n }\n\n /**\n * 生成唯一的消息ID\n */\n generateMessageId(): string {\n return `msg_${Date.now()}_${++this.messageId}`;\n }\n\n /**\n * 调试日志\n */\n log(...args: any[]): void {\n if (this.debug) {\n console.log(\"[CrossFrame]\", ...args);\n }\n }\n\n /**\n * 处理响应消息\n */\n handleResponse(response: ResponseMessage): void {\n const pending = this.pendingRequests.get(response.id);\n if (!pending) {\n return;\n }\n\n // 不再需要清除计时器,直接从待处理请求中移除\n this.pendingRequests.delete(response.id);\n\n if (response.success) {\n pending.resolve(response.data);\n } else {\n pending.reject(new Error(response.error || \"Unknown error\"));\n }\n }\n\n /**\n * 处理请求消息\n */\n async handleRequest(request: RequestMessage, source: Window): Promise<void> {\n this.log(\"Received request:\", request);\n\n const listeners = this.eventListeners.get(request.type);\n if (!listeners || listeners.size === 0) {\n // 发送错误响应\n const response: ResponseMessage = {\n id: request.id,\n success: false,\n error: `No handler for message type: ${request.type}`,\n isResponse: true,\n timestamp: Date.now(),\n };\n source.postMessage(response, this.targetOrigin);\n return;\n }\n\n try {\n // 执行所有监听器\n const results = await Promise.all(\n Array.from(listeners).map((listener) => listener(request.payload))\n );\n\n // 发送成功响应(取第一个结果)\n const response: ResponseMessage = {\n id: request.id,\n success: true,\n data: results[0],\n isResponse: true,\n timestamp: Date.now(),\n };\n source.postMessage(response, this.targetOrigin);\n } catch (error) {\n // 发送错误响应\n const response: ResponseMessage = {\n id: request.id,\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n isResponse: true,\n timestamp: Date.now(),\n };\n source.postMessage(response, this.targetOrigin);\n }\n }\n\n /**\n * 创建待处理的请求\n * @param id 请求ID\n * @param resolve 成功回调\n * @param reject 失败回调\n * @param requestTimeout 可选的单个请求超时时间,覆盖全局设置\n */\n createPendingRequest(\n id: string,\n resolve: Function,\n reject: Function,\n requestTimeout?: number\n ): void {\n // 优先使用请求特定的超时时间,其次使用全局超时设置\n const timeout =\n requestTimeout !== undefined ? requestTimeout : this.timeout;\n\n // 计算过期时间\n const expirationTime =\n timeout !== undefined ? Date.now() + timeout : undefined;\n\n // 添加到待处理请求,设置过期时间而不是计时器\n this.pendingRequests.set(id, {\n resolve,\n reject,\n expirationTime,\n });\n }\n\n /**\n * 添加事件监听器\n */\n addEventListener(type: MessageType, listener: EventListener): () => void {\n if (!this.eventListeners.has(type)) {\n this.eventListeners.set(type, new Set());\n }\n\n this.eventListeners.get(type)!.add(listener);\n\n // 返回取消监听的函数\n return () => {\n const listeners = this.eventListeners.get(type);\n if (listeners) {\n listeners.delete(listener);\n if (listeners.size === 0) {\n this.eventListeners.delete(type);\n }\n }\n };\n }\n\n /**\n * 移除事件监听器\n */\n removeEventListener(type: MessageType, listener?: EventListener): void {\n const listeners = this.eventListeners.get(type);\n\n if (!listeners) {\n return;\n }\n\n if (listener) {\n listeners.delete(listener);\n if (listeners.size === 0) {\n this.eventListeners.delete(type);\n }\n } else {\n this.eventListeners.delete(type);\n }\n }\n\n /**\n * 清理所有待处理的请求\n */\n cleanup(): void {\n // 停止超时检查器\n if (this.timeoutChecker !== null) {\n clearInterval(this.timeoutChecker);\n this.timeoutChecker = null;\n }\n\n // 拒绝所有待处理请求\n this.pendingRequests.forEach(({ reject }) => {\n reject(new Error(\"Bridge destroyed\"));\n });\n this.pendingRequests.clear();\n this.eventListeners.clear();\n }\n\n /**\n * 获取待处理请求数量(用于调试)\n */\n getPendingRequestsCount(): number {\n return this.pendingRequests.size;\n }\n\n /**\n * 获取监听器数量(用于调试)\n */\n getListenersCount(): number {\n return this.eventListeners.size;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * 跨框架通信基础桥梁类\n */\n\nimport { MessageHandler } from \"./message-handler\";\nimport type {\n MessageType,\n RequestMessage,\n ResponseMessage,\n EventMessage,\n BridgeConfig,\n EventListener,\n} from \"./types\";\n\nexport abstract class IframeBridge {\n protected messageHandler: MessageHandler;\n protected config: Required<BridgeConfig>;\n protected windowId?: string;\n\n constructor(config: BridgeConfig = {}) {\n // 设置默认配置\n this.config = {\n targetOrigin: \"*\",\n timeout: 5000,\n debug: false,\n enableMultiWindow: false,\n windowId: \"\",\n ...config,\n };\n\n // 如果启用多窗口隔离,生成或使用提供的窗口ID\n if (this.config.enableMultiWindow) {\n this.windowId = this.config.windowId || this.generateWindowId();\n if (this.config.debug) {\n console.log(`[CrossFrame] 多窗口模式启用,窗口ID: ${this.windowId}`);\n }\n }\n\n this.messageHandler = new MessageHandler(\n this.config.targetOrigin,\n this.config.timeout,\n this.config.debug\n );\n\n this.setupMessageListener();\n }\n\n /**\n * 生成唯一窗口ID\n */\n private generateWindowId(): string {\n return `window_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * 设置消息监听器\n */\n protected abstract setupMessageListener(): void;\n\n /**\n * 获取目标窗口\n */\n protected abstract getTargetWindow(): Window | null;\n\n /**\n * 发送消息(无返回值)\n */\n send<T = any>(type: MessageType, payload: T): void {\n const targetWindow = this.getTargetWindow();\n if (!targetWindow) {\n this.messageHandler.log(\"目标窗口不可用\");\n return;\n }\n\n const message: EventMessage<T> = {\n type,\n payload,\n timestamp: Date.now(),\n };\n\n // 如果启用多窗口隔离,添加窗口ID\n if (this.config.enableMultiWindow && this.windowId) {\n message.windowId = this.windowId;\n }\n\n this.messageHandler.log(\"发送消息:\", message);\n targetWindow.postMessage(message, this.config.targetOrigin);\n }\n\n /**\n * 发送请求(有返回值)\n * @param type 消息类型\n * @param payload 消息负载\n * @param requestTimeout 单个请求的超时时间(毫秒),覆盖全局设置\n */\n request<T = any, R = any>(\n type: MessageType,\n payload: T,\n requestTimeout?: number\n ): Promise<R> {\n return new Promise((resolve, reject) => {\n const targetWindow = this.getTargetWindow();\n if (!targetWindow) {\n reject(new Error(\"目标窗口不可用\"));\n return;\n }\n\n const messageId = this.messageHandler.generateMessageId();\n\n // 创建待处理请求,使用传入的requestTimeout或默认配置\n this.messageHandler.createPendingRequest(\n messageId,\n resolve,\n reject,\n requestTimeout !== undefined ? requestTimeout : undefined\n );\n\n const message: RequestMessage<T> = {\n id: messageId,\n type,\n payload,\n needResponse: true,\n timestamp: Date.now(),\n };\n\n // 如果启用多窗口隔离,添加窗口ID\n if (this.config.enableMultiWindow && this.windowId) {\n message.windowId = this.windowId;\n }\n\n this.messageHandler.log(\"发送请求:\", message);\n targetWindow.postMessage(message, this.config.targetOrigin);\n });\n }\n\n /**\n * 监听消息\n */\n on<T = any, R = any>(\n type: MessageType,\n listener: EventListener<T, R>\n ): () => void {\n return this.messageHandler.addEventListener(type, listener);\n }\n\n /**\n * 取消监听\n */\n off<T = any, R = any>(\n type: MessageType,\n listener?: EventListener<T, R>\n ): void {\n this.messageHandler.removeEventListener(type, listener);\n }\n\n /**\n * 处理接收到的消息\n */\n protected handleIncomingMessage(event: MessageEvent): void {\n const targetWindow = this.getTargetWindow();\n if (!targetWindow || event.source !== targetWindow) {\n return;\n }\n\n // 如果启用多窗口隔离,检查窗口ID\n if (this.config.enableMultiWindow) {\n if (\n !event.data ||\n !event.data.windowId ||\n event.data.windowId !== this.windowId\n ) {\n if (this.config.debug) {\n this.messageHandler.log(\"忽略其他窗口消息:\", event.data);\n }\n return;\n }\n }\n\n // 处理响应消息\n if (event.data && event.data.isResponse) {\n this.messageHandler.handleResponse(event.data as ResponseMessage);\n return;\n }\n\n // 处理请求消息\n if (event.data && event.data.needResponse) {\n this.messageHandler.handleRequest(\n event.data as RequestMessage,\n targetWindow\n );\n return;\n }\n\n // 处理普通事件消息\n if (event.data && event.data.type) {\n const listeners = (this.messageHandler as any).eventListeners.get(\n event.data.type\n );\n if (listeners && listeners.size > 0) {\n listeners.forEach((listener: EventListener) => {\n try {\n listener(event.data.payload);\n } catch (error) {\n this.messageHandler.log(\"事件监听器执行错误:\", error);\n }\n });\n }\n }\n }\n\n /**\n * 获取调试信息\n */\n getDebugInfo() {\n return {\n config: this.config,\n windowId: this.windowId,\n pendingRequests: this.messageHandler.getPendingRequestsCount(),\n listeners: this.messageHandler.getListenersCount(),\n };\n }\n\n /**\n * 销毁桥梁\n */\n destroy(): void {\n this.messageHandler.cleanup();\n window.removeEventListener(\n \"message\",\n this.handleIncomingMessage.bind(this)\n );\n }\n}\n","/**\n * 主窗口iframe桥梁\n */\n\nimport { IframeBridge } from \"./base-bridge\";\nimport type { BridgeConfig } from \"./types\";\n\nexport class HostBridge extends IframeBridge {\n private iframe: HTMLIFrameElement;\n\n constructor(iframe: HTMLIFrameElement, config: BridgeConfig = {}) {\n super(config);\n this.iframe = iframe;\n }\n\n protected setupMessageListener(): void {\n window.addEventListener(\"message\", this.handleIncomingMessage.bind(this));\n }\n\n protected getTargetWindow(): Window | null {\n return this.iframe.contentWindow;\n }\n}\n","/**\n * 子窗口iframe桥梁\n */\n\nimport { IframeBridge } from \"./base-bridge\";\nimport type { BridgeConfig } from \"./types\";\n\nexport class ChildBridge extends IframeBridge {\n constructor(config: BridgeConfig = {}) {\n super(config);\n }\n\n protected setupMessageListener(): void {\n window.addEventListener(\"message\", this.handleIncomingMessage.bind(this));\n }\n\n protected getTargetWindow(): Window | null {\n return window.parent;\n }\n}\n","/**\n * 跨框架桥梁工厂函数\n */\n\nimport { HostBridge } from \"./host-bridge\";\nimport { ChildBridge } from \"./child-bridge\";\nimport type { BridgeConfig } from \"./types\";\nimport {\n PluginsConfig,\n createLogger,\n createRetryManager,\n createQueueManager,\n} from \"./plugins\";\n\n// 扩展配置接口\nexport interface EnhancedBridgeConfig extends BridgeConfig {\n plugins?: PluginsConfig;\n}\n\n/**\n * 创建增强的主窗口桥梁(带插件支持)\n */\nexport function createEnhancedHostBridge(\n iframe: HTMLIFrameElement,\n config: EnhancedBridgeConfig = {}\n): HostBridge {\n const { plugins: pluginsConfig, ...bridgeConfig } = config;\n const bridge = new HostBridge(iframe, bridgeConfig);\n\n // 应用插件\n if (pluginsConfig) {\n applyPlugins(bridge, pluginsConfig);\n }\n\n return bridge;\n}\n\n/**\n * 创建增强的子窗口桥梁(带插件支持)\n */\nexport function createEnhancedChildBridge(\n config: EnhancedBridgeConfig = {}\n): ChildBridge {\n const { plugins: pluginsConfig, ...bridgeConfig } = config;\n const bridge = new ChildBridge(bridgeConfig);\n\n // 应用插件\n if (pluginsConfig) {\n applyPlugins(bridge, pluginsConfig);\n }\n\n return bridge;\n}\n\n/**\n * 自动创建增强的桥梁(根据环境判断,带插件支持)\n */\nexport function createEnhancedBridge(\n iframeOrConfig?: HTMLIFrameElement | EnhancedBridgeConfig,\n config?: EnhancedBridgeConfig\n): HostBridge | ChildBridge {\n // 如果在iframe环境中\n if (window !== window.parent) {\n const bridgeConfig =\n iframeOrConfig instanceof HTMLElement\n ? config\n : (iframeOrConfig as EnhancedBridgeConfig);\n return createEnhancedChildBridge(bridgeConfig);\n }\n\n // 如果在主窗口环境中\n if (iframeOrConfig instanceof HTMLElement) {\n return createEnhancedHostBridge(iframeOrConfig, config);\n }\n\n throw new Error(\"在主窗口环境中必须提供 iframe 元素\");\n}\n\n/**\n * 应用插件到桥梁实例\n */\nfunction applyPlugins(\n bridge: HostBridge | ChildBridge,\n config: PluginsConfig\n): void {\n // 应用日志插件\n if (config.logger) {\n const options = config.logger === true ? {} : config.logger;\n createLogger(bridge, options);\n }\n\n // 应用重试插件\n if (config.retry) {\n const options = config.retry === true ? {} : config.retry;\n createRetryManager(bridge, options);\n }\n\n // 应用队列插件\n if (config.queue) {\n const options = config.queue === true ? {} : config.queue;\n createQueueManager(bridge, options);\n }\n}\n\n/**\n * 创建主窗口桥梁\n */\nexport function createHostBridge(\n iframe: HTMLIFrameElement,\n config?: BridgeConfig\n): HostBridge {\n return new HostBridge(iframe, config);\n}\n\n/**\n * 创建子窗口桥梁\n */\nexport function createChildBridge(config?: BridgeConfig): ChildBridge {\n return new ChildBridge(config);\n}\n\n/**\n * 自动创建桥梁(根据环境判断)\n */\nexport function createAutoBridge(\n iframeOrConfig?: HTMLIFrameElement | BridgeConfig,\n config?: BridgeConfig\n): HostBridge | ChildBridge {\n // 如果在iframe环境中\n if (window !== window.parent) {\n const bridgeConfig =\n iframeOrConfig instanceof HTMLElement ? config : iframeOrConfig;\n return new ChildBridge(bridgeConfig);\n }\n\n // 如果在主窗口环境中\n if (iframeOrConfig instanceof HTMLElement) {\n return new HostBridge(iframeOrConfig, config);\n }\n\n throw new Error(\"在主窗口环境中必须提供 iframe 元素\");\n}\n"]}