| "use strict"; |
| var __defProp = Object.defineProperty; |
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; |
| var __getOwnPropNames = Object.getOwnPropertyNames; |
| var __hasOwnProp = Object.prototype.hasOwnProperty; |
| var __export = (target, all) => { |
| for (var name in all) |
| __defProp(target, name, { get: all[name], enumerable: true }); |
| }; |
| var __copyProps = (to, from, except, desc) => { |
| if (from && typeof from === "object" || typeof from === "function") { |
| for (let key of __getOwnPropNames(from)) |
| if (!__hasOwnProp.call(to, key) && key !== except) |
| __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); |
| } |
| return to; |
| }; |
| var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); |
|
|
| |
| var index_exports = {}; |
| __export(index_exports, { |
| TestServerConnection: () => TestServerConnection, |
| TestServerConnectionClosedError: () => TestServerConnectionClosedError, |
| WebSocketTestServerTransport: () => WebSocketTestServerTransport |
| }); |
| module.exports = __toCommonJS(index_exports); |
|
|
| |
| var Disposable; |
| ((Disposable2) => { |
| function disposeAll(disposables) { |
| for (const disposable of disposables.splice(0)) |
| disposable.dispose(); |
| } |
| Disposable2.disposeAll = disposeAll; |
| })(Disposable || (Disposable = {})); |
| var EventEmitter = class { |
| constructor() { |
| this._listeners = new Set(); |
| this.event = (listener, disposables) => { |
| this._listeners.add(listener); |
| let disposed = false; |
| const self = this; |
| const result = { |
| dispose() { |
| if (!disposed) { |
| disposed = true; |
| self._listeners.delete(listener); |
| } |
| } |
| }; |
| if (disposables) |
| disposables.push(result); |
| return result; |
| }; |
| } |
| fire(event) { |
| const dispatch = !this._deliveryQueue; |
| if (!this._deliveryQueue) |
| this._deliveryQueue = []; |
| for (const listener of this._listeners) |
| this._deliveryQueue.push({ listener, event }); |
| if (!dispatch) |
| return; |
| for (let index = 0; index < this._deliveryQueue.length; index++) { |
| const { listener, event: event2 } = this._deliveryQueue[index]; |
| listener.call(null, event2); |
| } |
| this._deliveryQueue = void 0; |
| } |
| dispose() { |
| this._listeners.clear(); |
| if (this._deliveryQueue) |
| this._deliveryQueue = []; |
| } |
| }; |
|
|
| |
| var TestServerConnectionClosedError = class extends Error { |
| }; |
| var WebSocketTestServerTransport = class { |
| constructor(url) { |
| this._ws = new WebSocket(url); |
| } |
| onmessage(listener) { |
| this._ws.addEventListener("message", (event) => listener(event.data.toString())); |
| } |
| onopen(listener) { |
| this._ws.addEventListener("open", listener); |
| } |
| onerror(listener) { |
| this._ws.addEventListener("error", listener); |
| } |
| onclose(listener) { |
| this._ws.addEventListener("close", listener); |
| } |
| send(data) { |
| this._ws.send(data); |
| } |
| close() { |
| this._ws.close(); |
| } |
| }; |
| var TestServerConnection = class { |
| constructor(transport) { |
| this._onCloseEmitter = new EventEmitter(); |
| this._onReportEmitter = new EventEmitter(); |
| this._onStdioEmitter = new EventEmitter(); |
| this._onTestFilesChangedEmitter = new EventEmitter(); |
| this._onLoadTraceRequestedEmitter = new EventEmitter(); |
| this._onTestPausedEmitter = new EventEmitter(); |
| this._lastId = 0; |
| this._callbacks = new Map(); |
| this._isClosed = false; |
| this.onClose = this._onCloseEmitter.event; |
| this.onReport = this._onReportEmitter.event; |
| this.onStdio = this._onStdioEmitter.event; |
| this.onTestFilesChanged = this._onTestFilesChangedEmitter.event; |
| this.onLoadTraceRequested = this._onLoadTraceRequestedEmitter.event; |
| this.onTestPaused = this._onTestPausedEmitter.event; |
| this._transport = transport; |
| this._transport.onmessage((data) => { |
| const message = JSON.parse(data); |
| const { id, result, error, method, params } = message; |
| if (id) { |
| const callback = this._callbacks.get(id); |
| if (!callback) |
| return; |
| this._callbacks.delete(id); |
| if (error) |
| callback.reject(new Error(error)); |
| else |
| callback.resolve(result); |
| } else { |
| this._dispatchEvent(method, params); |
| } |
| }); |
| const pingInterval = setInterval(() => this._sendMessage("ping").catch(() => { |
| }), 3e4); |
| this._connectedPromise = new Promise((f, r) => { |
| this._transport.onopen(f); |
| this._transport.onerror(r); |
| }); |
| this._transport.onclose(() => { |
| this._isClosed = true; |
| this._onCloseEmitter.fire(); |
| clearInterval(pingInterval); |
| for (const callback of this._callbacks.values()) |
| callback.reject(callback.error); |
| this._callbacks.clear(); |
| }); |
| } |
| isClosed() { |
| return this._isClosed; |
| } |
| async _sendMessage(method, params) { |
| const logForTest = globalThis.__logForTest; |
| logForTest?.({ method, params }); |
| await this._connectedPromise; |
| const id = ++this._lastId; |
| const message = { id, method, params }; |
| const error = new TestServerConnectionClosedError(`${method}: test server connection closed`); |
| this._transport.send(JSON.stringify(message)); |
| return new Promise((resolve, reject) => { |
| this._callbacks.set(id, { resolve, reject, error }); |
| }); |
| } |
| _sendMessageNoReply(method, params) { |
| this._sendMessage(method, params).catch(() => { |
| }); |
| } |
| _dispatchEvent(method, params) { |
| if (method === "report") |
| this._onReportEmitter.fire(params); |
| else if (method === "stdio") |
| this._onStdioEmitter.fire(params); |
| else if (method === "testFilesChanged") |
| this._onTestFilesChangedEmitter.fire(params); |
| else if (method === "loadTraceRequested") |
| this._onLoadTraceRequestedEmitter.fire(params); |
| else if (method === "testPaused") |
| this._onTestPausedEmitter.fire(params); |
| } |
| async initialize(params) { |
| await this._sendMessage("initialize", params); |
| } |
| async ping(params) { |
| await this._sendMessage("ping", params); |
| } |
| async pingNoReply(params) { |
| this._sendMessageNoReply("ping", params); |
| } |
| async watch(params) { |
| await this._sendMessage("watch", params); |
| } |
| watchNoReply(params) { |
| this._sendMessageNoReply("watch", params); |
| } |
| async open(params) { |
| await this._sendMessage("open", params); |
| } |
| openNoReply(params) { |
| this._sendMessageNoReply("open", params); |
| } |
| async resizeTerminal(params) { |
| await this._sendMessage("resizeTerminal", params); |
| } |
| resizeTerminalNoReply(params) { |
| this._sendMessageNoReply("resizeTerminal", params); |
| } |
| async checkBrowsers(params) { |
| return await this._sendMessage("checkBrowsers", params); |
| } |
| async installBrowsers(params) { |
| await this._sendMessage("installBrowsers", params); |
| } |
| async runGlobalSetup(params) { |
| return await this._sendMessage("runGlobalSetup", params); |
| } |
| async runGlobalTeardown(params) { |
| return await this._sendMessage("runGlobalTeardown", params); |
| } |
| async clearCache(params) { |
| return await this._sendMessage("clearCache", params); |
| } |
| async listFiles(params) { |
| return await this._sendMessage("listFiles", params); |
| } |
| async listTests(params) { |
| return await this._sendMessage("listTests", params); |
| } |
| async runTests(params) { |
| return await this._sendMessage("runTests", params); |
| } |
| async findRelatedTestFiles(params) { |
| return await this._sendMessage("findRelatedTestFiles", params); |
| } |
| async stopTests(params) { |
| await this._sendMessage("stopTests", params); |
| } |
| stopTestsNoReply(params) { |
| this._sendMessageNoReply("stopTests", params); |
| } |
| async closeGracefully(params) { |
| await this._sendMessage("closeGracefully", params); |
| } |
| close() { |
| try { |
| this._transport.close(); |
| } catch { |
| } |
| } |
| }; |
| |
| 0 && (module.exports = { |
| TestServerConnection, |
| TestServerConnectionClosedError, |
| WebSocketTestServerTransport |
| }); |
|
|