UNPKG

data-transport

Version:
116 lines 16.3 kB
import { __assign, __awaiter, __extends, __generator, __rest } from "tslib"; import { beforeEmitKey, beforeEmitResolveKey } from '../constant'; import { Transport } from '../transport'; var connectEventName = 'iframe-connect'; var IFrameMainTransport = /** @class */ (function (_super) { __extends(IFrameMainTransport, _super); function IFrameMainTransport(_options) { var _this = this; var _a = _options.iframe, iframe = _a === void 0 ? document.querySelector('iframe') : _a, _b = _options.targetOrigin, targetOrigin = _b === void 0 ? '*' : _b, _c = _options.listener, listener = _c === void 0 ? function (callback) { var handler = function (_a) { var data = _a.data, source = _a.source; var contentWindow = iframe.contentWindow; if (contentWindow && contentWindow === source) { return callback(data); } }; window.addEventListener('message', handler); return function () { window.removeEventListener('message', handler); }; } : _c, _d = _options.sender, sender = _d === void 0 ? function (message) { if (iframe) { iframe.contentWindow.postMessage(message, targetOrigin); } else if (window.frames[0]) { window.frames[0].postMessage(message, targetOrigin); } else { console.error('The current page does not have any iframe elements'); } } : _d, skipConnectionCheck = _options.skipConnectionCheck, options = __rest(_options, ["iframe", "targetOrigin", "listener", "sender", "skipConnectionCheck"]); _this = _super.call(this, __assign(__assign({}, options), { listener: listener, sender: sender })) || this; if (!skipConnectionCheck) { var connect_1 = function () { _this.emit({ // @ts-ignore name: connectEventName, silent: true, skipBeforeEmit: true, }).then(function (connected) { if (connected) { _this[beforeEmitResolveKey](); } }); }; connect_1(); _this[beforeEmitKey] = new Promise(function (resolve) { _this[beforeEmitResolveKey] = resolve; }); // @ts-ignore _this.listen(connectEventName, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { this[beforeEmitResolveKey](); return [2 /*return*/, true]; }); }); }); // for iframe reload iframe === null || iframe === void 0 ? void 0 : iframe.addEventListener('load', function () { _this[beforeEmitKey] = new Promise(function (resolve) { _this[beforeEmitResolveKey] = resolve; }); connect_1(); }); } return _this; } return IFrameMainTransport; }(Transport)); export { IFrameMainTransport }; var IFrameInternalTransport = /** @class */ (function (_super) { __extends(IFrameInternalTransport, _super); function IFrameInternalTransport(_options) { if (_options === void 0) { _options = {}; } var _this = this; var _a = _options.targetOrigin, targetOrigin = _a === void 0 ? '*' : _a, _b = _options.listener, listener = _b === void 0 ? function (callback) { var handler = function (_a) { var data = _a.data; return callback(data); }; window.addEventListener('message', handler); return function () { window.removeEventListener('message', handler); }; } : _b, _c = _options.sender, sender = _c === void 0 ? function (message) { return window.parent.postMessage(message, targetOrigin); } : _c, skipConnectionCheck = _options.skipConnectionCheck, options = __rest(_options, ["targetOrigin", "listener", "sender", "skipConnectionCheck"]); _this = _super.call(this, __assign(__assign({}, options), { listener: listener, sender: sender })) || this; if (!skipConnectionCheck) { _this.emit({ // @ts-ignore name: connectEventName, silent: true, }).then(function (connected) { if (connected) { _this[beforeEmitResolveKey](); } }); _this[beforeEmitKey] = new Promise(function (resolve) { _this[beforeEmitResolveKey] = resolve; }); // @ts-ignore _this.listen(connectEventName, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { this[beforeEmitResolveKey](); return [2 /*return*/, true]; }); }); }); } return _this; } return IFrameInternalTransport; }(Transport)); export { IFrameInternalTransport }; export var IFrameTransport = { Main: IFrameMainTransport, IFrame: IFrameInternalTransport, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZyYW1lVHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydHMvaWZyYW1lVHJhbnNwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBTWxFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUErQnpDLElBQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFFMUM7SUFFVSx1Q0FBWTtJQUNwQiw2QkFBWSxRQUFvQztRQUFoRCxpQkErREM7UUE3REcsSUFBQSxLQXlCRSxRQUFRLE9BekIrQixFQUF6QyxNQUFNLG1CQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUEsRUFDekMsS0F3QkUsUUFBUSxhQXhCUSxFQUFsQixZQUFZLG1CQUFHLEdBQUcsS0FBQSxFQUNsQixLQXVCRSxRQUFRLFNBWlQsRUFYRCxRQUFRLG1CQUFHLFVBQUMsUUFBUTtZQUNsQixJQUFNLE9BQU8sR0FBRyxVQUFDLEVBQStDO29CQUE3QyxJQUFJLFVBQUEsRUFBRSxNQUFNLFlBQUE7Z0JBQzdCLElBQU0sYUFBYSxHQUFHLE1BQU8sQ0FBQyxhQUFhLENBQUM7Z0JBQzVDLElBQUksYUFBYSxJQUFJLGFBQWEsS0FBTSxNQUFjLEVBQUUsQ0FBQztvQkFDdkQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDLENBQUM7WUFDRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLE9BQU87Z0JBQ0wsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUM7UUFDSixDQUFDLEtBQUEsRUFDRCxLQVdFLFFBQVEsT0FIVCxFQVJELE1BQU0sbUJBQUcsVUFBQyxPQUFP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b3JlRW1pdFJlc29sdmVLZXkgfSBmcm9tICcuLi9jb25zdGFudCc7XG5pbXBvcnQgdHlwZSB7XG4gIEJhc2VJbnRlcmFjdGlvbixcbiAgTGlzdGVuZXJPcHRpb25zLFxuICBUcmFuc3BvcnRPcHRpb25zLFxufSBmcm9tICcuLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhbnNwb3J0IH0gZnJvbSAnLi4vdHJhbnNwb3J0JztcblxuZXhwb3J0IGludGVyZmFjZSBJRnJhbWVUcmFuc3BvcnRJbnRlcm5hbE9wdGlvbnNcbiAgZXh0ZW5kcyBQYXJ0aWFsPFRyYW5zcG9ydE9wdGlvbnM+IHtcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hhdCB0aGUgb3JpZ2luIG9mIHRhcmdldFdpbmRvdyBtdXN0IGJlIGZvciB0aGUgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZCxcbiAgICogYnkgZGVmYXVsdCwgaXQncyB0aGUgbGl0ZXJhbCBzdHJpbmcgXCIqXCIgKGluZGljYXRpbmcgbm8gcHJlZmVyZW5jZSkuXG4gICAqL1xuICB0YXJnZXRPcmlnaW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHNraXAgY29ubmVjdGlvbiBjaGVjaywgZmFsc2UgYnkgZGVmYXVsdC5cbiAgICovXG4gIHNraXBDb25uZWN0aW9uQ2hlY2s/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGcmFtZU1haW5UcmFuc3BvcnRPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxUcmFuc3BvcnRPcHRpb25zPiB7XG4gIC8qKlxuICAgKiBQYXNzIGFuIGlmcmFtZSBmb3IgdXNpbmcgZGF0YSB0cmFuc3BvcnQuXG4gICAqL1xuICBpZnJhbWU/OiBIVE1MSUZyYW1lRWxlbWVudDtcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hhdCB0aGUgb3JpZ2luIG9mIHRhcmdldFdpbmRvdyBtdXN0IGJlIGZvciB0aGUgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZCxcbiAgICogYnkgZGVmYXVsdCwgaXQncyB0aGUgbGl0ZXJhbCBzdHJpbmcgXCIqXCIgKGluZGljYXRpbmcgbm8gcHJlZmVyZW5jZSkuXG4gICAqL1xuICB0YXJnZXRPcmlnaW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHNraXAgY29ubmVjdGlvbiBjaGVjaywgZmFsc2UgYnkgZGVmYXVsdC5cbiAgICovXG4gIHNraXBDb25uZWN0aW9uQ2hlY2s/OiBib29sZWFuO1xufVxuXG5jb25zdCBjb25uZWN0RXZlbnROYW1lID0gJ2lmcmFtZS1jb25uZWN0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElGcmFtZU1haW5UcmFuc3BvcnQ8XG4gIFQgZXh0ZW5kcyBCYXNlSW50ZXJhY3Rpb24gPSBhbnlcbj4gZXh0ZW5kcyBUcmFuc3BvcnQ8VD4ge1xuICBjb25zdHJ1Y3Rvcihfb3B0aW9uczogSUZyYW1lTWFpblRyYW5zcG9ydE9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZnJhbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKSxcbiAgICAgIHRhcmdldE9yaWdpbiA9ICcqJyxcbiAgICAgIGxpc3RlbmVyID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoeyBkYXRhLCBzb3VyY2UgfTogTWVzc2FnZUV2ZW50PExpc3RlbmVyT3B0aW9ucz4pID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50V2luZG93ID0gaWZyYW1lIS5jb250ZW50V2luZG93O1xuICAgICAgICAgIGlmIChjb250ZW50V2luZG93ICYmIGNvbnRlbnRXaW5kb3cgPT09IChzb3VyY2UgYXMgYW55KSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHNlbmRlciA9IChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmIChpZnJhbWUpIHtcbiAgICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdyEucG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZnJhbWVzWzBdKSB7XG4gICAgICAgICAgd2luZG93LmZyYW1lc1swXS5wb3N0TWVzc2FnZShtZXNzYWdlLCB0YXJnZXRPcmlnaW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBjdXJyZW50IHBhZ2UgZG9lcyBub3QgaGF2ZSBhbnkgaWZyYW1lIGVsZW1lbnRzJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBza2lwQ29ubmVjdGlvbkNoZWNrLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSBfb3B0aW9ucztcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGlzdGVuZXIsXG4gICAgICBzZW5kZXIsXG4gICAgfSk7XG4gICAgaWYgKCFza2lwQ29ubmVjdGlvbkNoZWNrKSB7XG4gICAgICBjb25zdCBjb25uZWN0ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmVtaXQoe1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBuYW1lOiBjb25uZWN0RXZlbnROYW1lLFxuICAgICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgICBza2lwQmVmb3JlRW1pdDogdHJ1ZSxcbiAgICAgICAgfSkudGhlbigoY29ubmVjdGVkKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpc1tiZWZvcmVFbWl0UmVzb2x2ZUtleV0hKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjb25uZWN0KCk7XG4gICAgICB0aGlzW2JlZm9yZUVtaXRLZXldID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1tiZWZvcmVFbWl0UmVzb2x2ZUtleV0gPSByZXNvbHZlO1xuICAgICAgfSk7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLmxpc3Rlbihjb25uZWN0RXZlbnROYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXNbYmVmb3JlRW1pdFJlc29sdmVLZXldISgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgLy8gZm9yIGlmcmFtZSByZWxvYWRcbiAgICAgIGlmcmFtZT8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgICAgdGhpc1tiZWZvcmVFbWl0S2V5XSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgdGhpc1tiZWZvcmVFbWl0UmVzb2x2ZUtleV0gPSByZXNvbHZlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29ubmVjdCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJRnJhbWVJbnRlcm5hbFRyYW5zcG9ydDxcbiAgVCBleHRlbmRzIEJhc2VJbnRlcmFjdGlvbiA9IGFueVxuPiBleHRlbmRzIFRyYW5zcG9ydDxUPiB7XG4gIGNvbnN0cnVjdG9yKF9vcHRpb25zOiBJRnJhbWVUcmFuc3BvcnRJbnRlcm5hbE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRhcmdldE9yaWdpbiA9ICcqJyxcbiAgICAgIGxpc3RlbmVyID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoeyBkYXRhIH06IE1lc3NhZ2VFdmVudDxMaXN0ZW5lck9wdGlvbnM+KSA9PlxuICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc2VuZGVyID0gKG1lc3NhZ2UpID0+IHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKSxcbiAgICAgIHNraXBDb25uZWN0aW9uQ2hlY2ssXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IF9vcHRpb25zO1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIHNlbmRlcixcbiAgICB9KTtcbiAgICBpZiAoIXNraXBDb25uZWN0aW9uQ2hlY2spIHtcbiAgICAgIHRoaXMuZW1pdCh7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbmFtZTogY29ubmVjdEV2ZW50TmFtZSxcbiAgICAgICAgc2lsZW50OiB0cnVlLFxuICAgICAgfSkudGhlbigoY29ubmVjdGVkKSA9PiB7XG4gICAgICAgIGlmIChjb25uZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzW2JlZm9yZUVtaXRSZXNvbHZlS2V5XSEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzW2JlZm9yZUVtaXRLZXldID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1tiZWZvcmVFbWl0UmVzb2x2ZUtleV0gPSByZXNvbHZlO1xuICAgICAgfSk7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLmxpc3Rlbihjb25uZWN0RXZlbnROYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXNbYmVmb3JlRW1pdFJlc29sdmVLZXldISgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSUZyYW1lVHJhbnNwb3J0ID0ge1xuICBNYWluOiBJRnJhbWVNYWluVHJhbnNwb3J0LFxuICBJRnJhbWU6IElGcmFtZUludGVybmFsVHJhbnNwb3J0LFxufTtcbiJdfQ==