UNPKG

@browserstack/testcafe

Version:

Automated browser testing for the modern web development stack.

72 lines 10.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const packet_1 = __importDefault(require("./packet")); const runtime_1 = require("../../../errors/runtime"); const types_1 = require("../../../errors/types"); class MessageParser { constructor() { this.dataQueue = []; this.packetQueue = []; } static _concatPackets(packets) { const data = packets.map(packet => packet.data); return Buffer.concat(data); } _processPacket(packet) { if (packet.header.tail) { if (!packet.header.head && this.packetQueue.length === 0) throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.unexpectedIPCTailPacket); const packets = this.packetQueue.splice(0, this.packetQueue.length); const data = packet.header.head ? packet.data : MessageParser._concatPackets([...packets, packet]); return JSON.parse(data.toString()); } if (packet.header.head && this.packetQueue.length !== 0) { this.packetQueue.splice(0, this.packetQueue.length); throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.unexpectedIPCHeadPacket); } if (!packet.header.head && !packet.header.tail && this.packetQueue.length === 0) throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.unexpectedIPCBodyPacket); this.packetQueue.push(packet); return void 0; } _processData() { let buffer = Buffer.concat(this.dataQueue.splice(0, this.dataQueue.length)); let packet = packet_1.default.parse(buffer); const messages = []; while (packet) { const message = this._processPacket(packet); if (message) messages.push(message); buffer = buffer.slice(packet.header.totalSize); packet = packet_1.default.parse(buffer); } if (buffer.length) this.dataQueue.unshift(buffer); return messages; } parse(data) { this.dataQueue.push(data); return this._processData(); } } exports.MessageParser = MessageParser; class MessageSerializer { static _chunkData(data) { const chunks = []; for (let index = 0; index < data.length; index += packet_1.default.MAX_PAYLOAD_SIZE) { const size = Math.min(data.length - index, packet_1.default.MAX_PAYLOAD_SIZE); const head = index === 0; const tail = index + size >= data.length; chunks.push(packet_1.default.serialize(data.slice(index, index + size), { head, tail })); } return chunks; } serialize(message) { return MessageSerializer._chunkData(Buffer.from(JSON.stringify(message))); } } exports.MessageSerializer = MessageSerializer; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy91dGlscy9pcGMvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNEQUEyRDtBQUMzRCxxREFBdUQ7QUFDdkQsaURBQXVEO0FBR3ZELE1BQWEsYUFBYTtJQUl0QjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUssRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFFLE9BQXVCO1FBQ2xELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxjQUFjLENBQUUsTUFBb0I7UUFDeEMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDcEQsTUFBTSxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBRW5FLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sSUFBSSxHQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZ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RCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sU0FBUyxDQUFFLE9BQWU7UUFDN0IsT0FBTyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0NBQ0o7QUFsQkQsOENBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdCBhcyBQYWNrZXQsIFBhcnNlZFBhY2tldCB9IGZyb20gJy4vcGFja2V0JztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uLy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vLi4vZXJyb3JzL3R5cGVzJztcblxuXG5leHBvcnQgY2xhc3MgTWVzc2FnZVBhcnNlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhUXVldWU6IEJ1ZmZlcltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFja2V0UXVldWU6IFBhcnNlZFBhY2tldFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgdGhpcy5kYXRhUXVldWUgICA9IFtdO1xuICAgICAgICB0aGlzLnBhY2tldFF1ZXVlID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2NvbmNhdFBhY2tldHMgKHBhY2tldHM6IFBhcnNlZFBhY2tldFtdKTogQnVmZmVyIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHBhY2tldHMubWFwKHBhY2tldCA9PiBwYWNrZXQuZGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc1BhY2tldCAocGFja2V0OiBQYXJzZWRQYWNrZXQpOiBvYmplY3R8dW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHBhY2tldC5oZWFkZXIudGFpbCkge1xuICAgICAgICAgICAgaWYgKCFwYWNrZXQuaGVhZGVyLmhlYWQgJiYgdGhpcy5wYWNrZXRRdWV1ZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy51bmV4cGVjdGVkSVBDVGFpbFBhY2tldCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhY2tldHMgPSB0aGlzLnBhY2tldFF1ZXVlLnNwbGljZSgwLCB0aGlzLnBhY2tldFF1ZXVlLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBkYXRhICAgID0gcGFja2V0LmhlYWRlci5oZWFkID8gcGFja2V0LmRhdGEgOiBNZXNzYWdlUGFyc2VyLl9jb25jYXRQYWNrZXRzKFsuLi5wYWNrZXRzLCBwYWNrZXRdKTtcblxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYWNrZXQuaGVhZGVyLmhlYWQgJiYgdGhpcy5wYWNrZXRRdWV1ZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucGFja2V0UXVldWUuc3BsaWNlKDAsIHRoaXMucGFja2V0UXVldWUubGVuZ3RoKTtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy51bmV4cGVjdGVkSVBDSGVhZFBhY2tldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhY2tldC5oZWFkZXIuaGVhZCAmJiAhcGFja2V0LmhlYWRlci50YWlsICYmIHRoaXMucGFja2V0UXVldWUubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy51bmV4cGVjdGVkSVBDQm9keVBhY2tldCk7XG5cbiAgICAgICAgdGhpcy5wYWNrZXRRdWV1ZS5wdXNoKHBhY2tldCk7XG5cbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcm9jZXNzRGF0YSAoKTogb2JqZWN0W10ge1xuICAgICAgICBsZXQgYnVmZmVyID0gQnVmZmVyLmNvbmNhdCh0aGlzLmRhdGFRdWV1ZS5zcGxpY2UoMCwgdGhpcy5kYXRhUXVldWUubGVuZ3RoKSk7XG4gICAgICAgIGxldCBwYWNrZXQgPSBQYWNrZXQucGFyc2UoYnVmZmVyKTtcblxuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xuXG4gICAgICAgIHdoaWxlIChwYWNrZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl9wcm9jZXNzUGFja2V0KHBhY2tldCk7XG5cbiAgICAgICAgICAgIGlmIChtZXNzYWdlKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cbiAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShwYWNrZXQuaGVhZGVyLnRvdGFsU2l6ZSk7XG5cbiAgICAgICAgICAgIHBhY2tldCA9IFBhY2tldC5wYXJzZShidWZmZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmRhdGFRdWV1ZS51bnNoaWZ0KGJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJzZSAoZGF0YTogQnVmZmVyKTogb2JqZWN0W10ge1xuICAgICAgICB0aGlzLmRhdGFRdWV1ZS5wdXNoKGRhdGEpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzRGF0YSgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VTZXJpYWxpemVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfY2h1bmtEYXRhIChkYXRhOiBCdWZmZXIpOiBCdWZmZXJbXSB7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aDsgaW5kZXggKz0gUGFja2V0Lk1BWF9QQVlMT0FEX1NJWkUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSBNYXRoLm1pbihkYXRhLmxlbmd0aCAtIGluZGV4LCBQYWNrZXQuTUFYX1BBWUxPQURfU0laRSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkID0gaW5kZXggPT09IDA7XG4gICAgICAgICAgICBjb25zdCB0YWlsID0gaW5kZXggKyBzaXplID49IGRhdGEubGVuZ3RoO1xuXG4gICAgICAgICAgICBjaHVua3MucHVzaChQYWNrZXQuc2VyaWFsaXplKGRhdGEuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2l6ZSksIHsgaGVhZCwgdGFpbCB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2h1bmtzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemUgKG1lc3NhZ2U6IG9iamVjdCk6IEJ1ZmZlcltdIHtcbiAgICAgICAgcmV0dXJuIE1lc3NhZ2VTZXJpYWxpemVyLl9jaHVua0RhdGEoQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpKTtcbiAgICB9XG59XG4iXX0=