UNPKG

@gdquest/codemirror-lsp

Version:

Enables Codemirror to interact with a local lsp, ie. a LSP that isn't socket-based, but rather work by function calls.

8 lines (7 loc) 31 kB
{ "version": 3, "sources": ["../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js", "../src/index.mts", "../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs", "../src/jsonRpc/index.mts", "../src/lsp/conversion.mts"], "sourcesContent": ["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n", "import { linter, type Diagnostic, setDiagnostics } from \"@codemirror/lint\";\nimport { type Extension } from \"@codemirror/state\";\nimport { type EditorView, ViewPlugin, type ViewUpdate } from \"@codemirror/view\";\nimport { EventEmitter } from \"eventemitter3\";\n\n// import { generateLspAutocomplete } from \"./autocompletion.mts\";\nimport { JsonRpc } from \"./jsonRpc/index.mts\";\nimport {\n type TextDocumentPublishDiagnosticsRequest,\n getCharacterFromPosition,\n getDiagnosticSeverity,\n} from \"./lsp/conversion.mts\";\n\n// Export\nexport * from \"./lsp/conversion.mts\";\n\nexport type ServerResponseCallback = (jsonRpc: string) => void;\n\nexport interface LspConfigData {\n emitServerCommand: ServerResponseCallback;\n}\nexport interface LspConfig {\n autocompletion?: boolean;\n onClientCommand: (jsonRpc: string) => void;\n getData: (data: LspConfigData) => void;\n}\n\nexport function createLsp(config: LspConfig): Extension {\n const lspBus = new EventEmitter();\n\n let lspView: EditorView | null = null;\n let nextVersionId = 0;\n const { autocompletion = true, onClientCommand, getData } = config;\n const jsonRpcClient = new JsonRpc();\n\n class LspPlugin {\n view: EditorView;\n\n constructor(view: EditorView) {\n this.view = view;\n }\n\n update(update: ViewUpdate): void {}\n }\n ViewPlugin.fromClass(LspPlugin);\n\n const lspLinter = linter(async (view) => {\n lspView = view;\n lspBus.emit(\"view\", view);\n\n const diagnostics: Diagnostic[] = [];\n const localVersion = nextVersionId;\n nextVersionId += 1;\n\n jsonRpcClient.notify({\n method: \"textDocument/didChange\",\n params: {\n textDocument: {\n uri: \"file:///whatever\",\n version: localVersion,\n },\n contentChanges: [\n {\n text: view.state.doc.toString(),\n },\n ],\n },\n });\n\n return diagnostics;\n }, {});\n\n jsonRpcClient.on(\"request\", (request) => {\n onClientCommand(request);\n });\n\n const onNotification = (notification: any): void => {\n switch (notification.method) {\n case \"textDocument/publishDiagnostics\":\n onPublishDiagnostics(notification);\n break;\n }\n };\n\n jsonRpcClient.on(\"notification\", onNotification);\n\n const onPublishDiagnostics = (\n notification: TextDocumentPublishDiagnosticsRequest\n ): void => {\n console.log(\"onPublishDiagnostics\", notification, lspView);\n if (lspView == null) {\n return;\n }\n\n const diagnostics: Diagnostic[] = notification.params.diagnostics.map(\n (diagnostic) => {\n return {\n from: getCharacterFromPosition(\n lspView?.state.doc.toString() ?? \"\",\n diagnostic.range.start\n ),\n to: getCharacterFromPosition(\n lspView?.state.doc.toString() ?? \"\",\n diagnostic.range.end\n ),\n severity: getDiagnosticSeverity(diagnostic.severity),\n source: diagnostic.source,\n message: diagnostic.message,\n };\n }\n );\n\n console.log(\"diagnostics\", diagnostics);\n const transitionSpec = setDiagnostics(lspView.state, diagnostics);\n const transaction = lspView.state.update(transitionSpec);\n lspView.dispatch(transaction);\n };\n\n const emitServerCommand = (jsonRpc: string): void => {\n const json = JSON.parse(jsonRpc);\n if (typeof json === \"string\") {\n throw new Error(\"JSON is string\");\n }\n\n if (Array.isArray(json)) {\n const elements = [];\n for (const el of json) {\n if (\"method\" in el) {\n jsonRpcClient.emit(\"notification\", el);\n } else {\n elements.push(el);\n }\n }\n\n jsonRpcClient.emit(\"batch\", elements);\n return;\n }\n if (\"error\" in json) {\n jsonRpcClient.emit(\"error\", json);\n return;\n }\n if (\"result\" in json) {\n jsonRpcClient.emit(\"response\", json);\n return;\n }\n if (\"method\" in json) {\n jsonRpcClient.emit(\"notification\", json);\n return;\n }\n\n throw new Error(\"unknown error\");\n };\n\n getData({ emitServerCommand });\n\n return [\n lspLinter,\n ...(autocompletion\n ? [\n // generateLspAutocomplete({\n // client: jsonRpcClient,\n // bus: lspBus,\n // }),\n ]\n : []),\n ];\n}\n", "import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n", "import EventEmitter from \"eventemitter3\";\n\nimport { type ServerErrors } from \"./serverErrors.mts\";\n\nconst ResponseErrors = {\n PARSE_ERROR: -32700,\n INVALID_REQUEST: -32600,\n METHOD_NOT_FOUND: -32601,\n INVALID_PARAMS: -32602,\n INTERNAL_ERROR: -32603,\n} as const;\ntype ResponseErrorKeys = keyof typeof ResponseErrors;\ntype ResponseErrorValues =\n | (typeof ResponseErrors)[ResponseErrorKeys]\n | ServerErrors;\n\nexport interface Request {\n jsonrpc: \"2.0\";\n method: string;\n params: any;\n id?: string | number | null;\n}\n\ninterface Response {\n jsonrpc: \"2.0\";\n id?: string | number | null;\n}\n\nexport interface ResponseSuccess extends Response {\n result: any;\n}\n\nexport interface ResponseError extends Response {\n error: {\n code: ResponseErrorValues;\n message: string;\n data?: any;\n };\n}\n\nexport type Responses = ResponseSuccess | ResponseError;\n\ntype PartialRequest = Omit<Request, \"jsonrpc\" | \"\">;\n\nexport class JsonRpcError extends Error {\n code: number | string = 0;\n response: ResponseError | null = null;\n\n constructor(\n message?: string,\n options?: ErrorOptions & { code: number | string; response: ResponseError }\n ) {\n const { cause, code, response } = options ?? {};\n\n super(message, { cause });\n\n if (code != null) {\n this.code = code;\n }\n\n if (response != null) {\n this.response = response;\n }\n }\n}\n\nexport class JsonRpc extends EventEmitter {\n _requests = new Map<number, Request>();\n _lastId = 0;\n\n send(request: PartialRequest): Promise<ResponseSuccess>;\n send(request: PartialRequest[]): Promise<Responses[]>;\n async send(\n request: PartialRequest | PartialRequest[]\n ): Promise<ResponseSuccess | Responses[]> {\n return await new Promise<ResponseSuccess | Responses[]>(\n (resolve, reject) => {\n if (Array.isArray(request)) {\n this._processBatch(request, resolve);\n } else {\n this._process(request, resolve, reject);\n }\n }\n );\n }\n\n notify(request: PartialRequest): void;\n notify(request: PartialRequest[]): void;\n notify(request: PartialRequest | PartialRequest[]): void {\n if (Array.isArray(request)) {\n new Promise((resolve) => {\n this._processBatch(request, resolve);\n }).catch((err) => {\n console.error(\"Error while processing batch:\", err);\n });\n return;\n }\n new Promise((resolve, reject) => {\n this._process(request, resolve, reject);\n }).catch((err) => {\n console.error(\"Error while running process:\", err);\n });\n }\n\n _process(\n request: PartialRequest,\n resolve: Parameters<\n ConstructorParameters<typeof Promise<ResponseSuccess>>[0]\n >[0],\n reject: Parameters<\n ConstructorParameters<typeof Promise<ResponseError>>[0]\n >[1]\n ): void {\n const id = this._lastId;\n this._lastId += 1;\n\n const formattedRequest = {\n jsonrpc: \"2.0\" as const,\n id,\n ...request,\n };\n\n const removeListeners = (): void => {\n this.off(\"response\", onResponse);\n this.off(\"error\", onError);\n };\n\n const onResponse = (response: ResponseSuccess): void => {\n if (response.id === id) {\n resolve(response);\n removeListeners();\n }\n };\n\n const onError = (response: ResponseError): void => {\n if (response.id === id) {\n const error = new JsonRpcError(response.error.message, {\n code: response.error.code,\n response,\n });\n reject(error);\n removeListeners();\n }\n };\n\n this.on(\"response\", onResponse);\n this.on(\"error\", onError);\n\n this.emit(\"request\", JSON.stringify(formattedRequest));\n }\n\n _processBatch(\n request: PartialRequest[],\n resolve: Parameters<\n ConstructorParameters<typeof Promise<Responses[]>>[0]\n >[0]\n ): void {\n const requests: Request[] = request.map((request) => {\n const formattedRequest = {\n jsonrpc: \"2.0\" as const,\n id: this._lastId,\n ...request,\n };\n this._lastId += 1;\n return formattedRequest;\n });\n\n const onBatch = (responses: Responses[]): void => {\n const receivedResponses = [];\n\n for (const response of responses) {\n for (const request of requests) {\n if (request.id === response.id) {\n receivedResponses.push(response);\n }\n }\n }\n\n if (receivedResponses.length > 0) {\n resolve(receivedResponses);\n this.off(\"batch\", onBatch);\n }\n };\n\n this.on(\"batch\", onBatch);\n\n this.emit(\"request\", requests);\n }\n}\n", "import { type Request } from \"../jsonRpc/index.mts\";\n\nexport interface Position {\n character: number;\n line: number;\n}\n\nexport interface Range {\n start: Position;\n end: Position;\n}\n\nexport interface TextDocumentPublishDiagnosticsDiagnostic {\n code: number;\n message: string;\n range: Range;\n severity: number;\n source: string;\n}\n\nexport interface TextDocumentPublishDiagnosticsRequest extends Request {\n method: \"textDocument/publishDiagnostics\";\n params: {\n diagnostics: TextDocumentPublishDiagnosticsDiagnostic[];\n };\n}\n\nexport function getCharacterFromPosition(\n text: string,\n position: Position\n): number {\n let currentLine = 0;\n let currentColumn = 0;\n\n for (let ci = 0; ci < text.length; ci++) {\n const char = text[ci];\n if (char === \"\\n\") {\n currentLine += 1;\n currentColumn = 0;\n } else {\n currentColumn += 1;\n }\n\n if (position.line < currentLine) {\n return 0;\n }\n\n if (currentLine === position.line && currentColumn === position.character) {\n return ci + 1;\n }\n }\n\n return text.length;\n}\n\nexport function getPositionFromCharacter(\n text: string,\n character: number\n): Position {\n let currentLine = 0;\n let currentColumn = 0;\n\n for (let i = 1; i < text.length; i++) {\n const char = text[i - 1];\n if (char === \"\\n\") {\n currentLine += 1;\n currentColumn = 0;\n } else {\n currentColumn += 1;\n }\n\n if (i === character) {\n return {\n line: currentLine,\n character: currentColumn,\n };\n }\n }\n\n return {\n line: currentLine,\n character: currentColumn,\n };\n}\n\nexport function getDiagnosticSeverity(\n severity: number\n): \"error\" | \"warning\" | \"info\" {\n switch (severity) {\n case 1:\n return \"error\";\n case 2:\n return \"warning\";\n case 3:\n case 4:\n default:\n return \"info\";\n }\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,8FAAAA,SAAA;AAAA;AAEA,QAAI,MAAM,OAAO,UAAU;AAA3B,QACI,SAAS;AASb,aAAS,SAAS;AAAA,IAAC;AASnB,QAAI,OAAO,QAAQ;AACjB,aAAO,YAAY,uBAAO,OAAO,IAAI;AAMrC,UAAI,CAAC,IAAI,OAAO,EAAE;AAAW,iBAAS;AAAA,IACxC;AAWA,aAAS,GAAG,IAAI,SAAS,MAAM;AAC7B,WAAK,KAAK;AACV,WAAK,UAAU;AACf,WAAK,OAAO,QAAQ;AAAA,IACtB;AAaA,aAAS,YAAY,SAAS,OAAO,IAAI,SAAS,MAAM;AACtD,UAAI,OAAO,OAAO,YAAY;AAC5B,cAAM,IAAI,UAAU,iCAAiC;AAAA,MACvD;AAEA,UAAI,WAAW,IAAI,GAAG,IAAI,WAAW,SAAS,IAAI,GAC9C,MAAM,SAAS,SAAS,QAAQ;AAEpC,UAAI,CAAC,QAAQ,QAAQ,GAAG;AAAG,gBAAQ,QAAQ,GAAG,IAAI,UAAU,QAAQ;AAAA,eAC3D,CAAC,QAAQ,QAAQ,GAAG,EAAE;AAAI,gBAAQ,QAAQ,GAAG,EAAE,KAAK,QAAQ;AAAA;AAChE,gBAAQ,QAAQ,GAAG,IAAI,CAAC,QAAQ,QAAQ,GAAG,GAAG,QAAQ;AAE3D,aAAO;AAAA,IACT;AASA,aAAS,WAAW,SAAS,KAAK;AAChC,UAAI,EAAE,QAAQ,iBAAiB;AAAG,gBAAQ,UAAU,IAAI,OAAO;AAAA;AAC1D,eAAO,QAAQ,QAAQ,GAAG;AAAA,IACjC;AASA,aAASC,gBAAe;AACtB,WAAK,UAAU,IAAI,OAAO;AAC1B,WAAK,eAAe;AAAA,IACtB;AASA,IAAAA,cAAa,UAAU,aAAa,SAAS,aAAa;AACxD,UAAI,QAAQ,CAAC,GACT,QACA;AAEJ,UAAI,KAAK,iBAAiB;AAAG,eAAO;AAEpC,WAAK,QAAS,SAAS,KAAK,SAAU;AACpC,YAAI,IAAI,KAAK,QAAQ,IAAI;AAAG,gBAAM,KAAK,SAAS,KAAK,MAAM,CAAC,IAAI,IAAI;AAAA,MACtE;AAEA,UAAI,OAAO,uBAAuB;AAChC,eAAO,MAAM,OAAO,OAAO,sBAAsB,MAAM,CAAC;AAAA,MAC1D;AAEA,aAAO;AAAA,IACT;AASA,IAAAA,cAAa,UAAU,YAAY,SAAS,UAAU,OAAO;AAC3D,UAAI,MAAM,SAAS,SAAS,QAAQ,OAChC,WAAW,KAAK,QAAQ,GAAG;AAE/B,UAAI,CAAC;AAAU,eAAO,CAAC;AACvB,UAAI,SAAS;AAAI,eAAO,CAAC,SAAS,EAAE;AAEpC,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,IAAI,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK;AAClE,WAAG,CAAC,IAAI,SAAS,CAAC,EAAE;AAAA,MACtB;AAEA,aAAO;AAAA,IACT;AASA,IAAAA,cAAa,UAAU,gBAAgB,SAAS,cAAc,OAAO;AACnE,UAAI,MAAM,SAAS,SAAS,QAAQ,OAChC,YAAY,KAAK,QAAQ,GAAG;AAEhC,UAAI,CAAC;AAAW,eAAO;AACvB,UAAI,UAAU;AAAI,eAAO;AACzB,aAAO,UAAU;AAAA,IACnB;AASA,IAAAA,cAAa,UAAU,OAAO,SAAS,KAAK,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI;AACrE,UAAI,MAAM,SAAS,SAAS,QAAQ;AAEpC,UAAI,CAAC,KAAK,QAAQ,GAAG;AAAG,eAAO;AAE/B,UAAI,YAAY,KAAK,QAAQ,GAAG,GAC5B,MAAM,UAAU,QAChB,MACA;AAEJ,UAAI,UAAU,IAAI;AAChB,YAAI,UAAU;AAAM,eAAK,eAAe,OAAO,UAAU,IAAI,QAAW,IAAI;AAE5E,gBAAQ,KAAK;AAAA,UACX,KAAK;AAAG,mBAAO,UAAU,GAAG,KAAK,UAAU,OAAO,GAAG;AAAA,UACrD,KAAK;AAAG,mBAAO,UAAU,GAAG,KAAK,UAAU,SAAS,EAAE,GAAG;AAAA,UACzD,KAAK;AAAG,mBAAO,UAAU,GAAG,KAAK,UAAU,SAAS,IAAI,EAAE,GAAG;AAAA,UAC7D,KAAK;AAAG,mBAAO,UAAU,GAAG,KAAK,UAAU,SAAS,IAAI,IAAI,EAAE,GAAG;AAAA,UACjE,KAAK;AAAG,mBAAO,UAAU,GAAG,KAAK,UAAU,SAAS,IAAI,IAAI,IAAI,EAAE,GAAG;AAAA,UACrE,KAAK;AAAG,mBAAO,UAAU,GAAG,KAAK,UAAU,SAAS,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG;AAAA,QAC3E;AAEA,aAAK,IAAI,GAAG,OAAO,IAAI,MAAM,MAAK,CAAC,GAAG,IAAI,KAAK,KAAK;AAClD,eAAK,IAAI,CAAC,IAAI,UAAU,CAAC;AAAA,QAC3B;AAEA,kBAAU,GAAG,MAAM,UAAU,SAAS,IAAI;AAAA,MAC5C,OAAO;AACL,YAAI,SAAS,UAAU,QACnB;AAEJ,aAAK,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC3B,cAAI,UAAU,CAAC,EAAE;AAAM,iBAAK,eAAe,OAAO,UAAU,CAAC,EAAE,IAAI,QAAW,IAAI;AAElF,kBAAQ,KAAK;AAAA,YACX,KAAK;AAAG,wBAAU,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC,EAAE,OAAO;AAAG;AAAA,YACpD,KAAK;AAAG,wBAAU,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC,EAAE,SAAS,EAAE;AAAG;AAAA,YACxD,KAAK;AAAG,wBAAU,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC,EAAE,SAAS,IAAI,EAAE;AAAG;AAAA,YAC5D,KAAK;AAAG,wBAAU,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC,EAAE,SAAS,IAAI,IAAI,EAAE;AAAG;AAAA,YAChE;AACE,kBAAI,CAAC;AAAM,qBAAK,IAAI,GAAG,OAAO,IAAI,MAAM,MAAK,CAAC,GAAG,IAAI,KAAK,KAAK;AAC7D,uBAAK,IAAI,CAAC,IAAI,UAAU,CAAC;AAAA,gBAC3B;AAEA,wBAAU,CAAC,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,SAAS,IAAI;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAWA,IAAAA,cAAa,UAAU,KAAK,SAAS,GAAG,OAAO,IAAI,SAAS;AAC1D,aAAO,YAAY,MAAM,OAAO,IAAI,SAAS,KAAK;AAAA,IACpD;AAWA,IAAAA,cAAa,UAAU,OAAO,SAAS,KAAK,OAAO,IAAI,SAAS;AAC9D,aAAO,YAAY,MAAM,OAAO,IAAI,SAAS,IAAI;AAAA,IACnD;AAYA,IAAAA,cAAa,UAAU,iBAAiB,SAAS,eAAe,OAAO,IAAI,SAAS,MAAM;AACxF,UAAI,MAAM,SAAS,SAAS,QAAQ;AAEpC,UAAI,CAAC,KAAK,QAAQ,GAAG;AAAG,eAAO;AAC/B,UAAI,CAAC,IAAI;AACP,mBAAW,MAAM,GAAG;AACpB,eAAO;AAAA,MACT;AAEA,UAAI,YAAY,KAAK,QAAQ,GAAG;AAEhC,UAAI,UAAU,IAAI;AAChB,YACE,UAAU,OAAO,OAChB,CAAC,QAAQ,UAAU,UACnB,CAAC,WAAW,UAAU,YAAY,UACnC;AACA,qBAAW,MAAM,GAAG;AAAA,QACtB;AAAA,MACF,OAAO;AACL,iBAAS,IAAI,GAAG,SAAS,CAAC,GAAG,SAAS,UAAU,QAAQ,IAAI,QAAQ,KAAK;AACvE,cACE,UAAU,CAAC,EAAE,OAAO,MACnB,QAAQ,CAAC,UAAU,CAAC,EAAE,QACtB,WAAW,UAAU,CAAC,EAAE,YAAY,SACrC;AACA,mBAAO,KAAK,UAAU,CAAC,CAAC;AAAA,UAC1B;AAAA,QACF;AAKA,YAAI,OAAO;AAAQ,eAAK,QAAQ,GAAG,IAAI,OAAO,WAAW,IAAI,OAAO,CAAC,IAAI;AAAA;AACpE,qBAAW,MAAM,GAAG;AAAA,MAC3B;AAEA,aAAO;AAAA,IACT;AASA,IAAAA,cAAa,UAAU,qBAAqB,SAAS,mBAAmB,OAAO;AAC7E,UAAI;AAEJ,UAAI,OAAO;AACT,cAAM,SAAS,SAAS,QAAQ;AAChC,YAAI,KAAK,QAAQ,GAAG;AAAG,qBAAW,MAAM,GAAG;AAAA,MAC7C,OAAO;AACL,aAAK,UAAU,IAAI,OAAO;AAC1B,aAAK,eAAe;AAAA,MACtB;AAEA,aAAO;AAAA,IACT;AAKA,IAAAA,cAAa,UAAU,MAAMA,cAAa,UAAU;AACpD,IAAAA,cAAa,UAAU,cAAcA,cAAa,UAAU;AAK5D,IAAAA,cAAa,WAAW;AAKxB,IAAAA,cAAa,eAAeA;AAK5B,QAAI,gBAAgB,OAAOD,SAAQ;AACjC,MAAAA,QAAO,UAAUC;AAAA,IACnB;AAAA;AAAA;;;AC/UA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAwD;AAExD,kBAA6D;;;ACF7D,mBAAyB;AAGzB,IAAO,wBAAQ,aAAAC;;;ACyCR,IAAM,eAAN,cAA2B,MAAM;AAAA,EAItC,YACE,SACA,SACA;AACA,UAAM,EAAE,OAAO,MAAM,SAAS,IAAI,WAAW,CAAC;AAE9C,UAAM,SAAS,EAAE,MAAM,CAAC;AAT1B,gBAAwB;AACxB,oBAAiC;AAU/B,QAAI,QAAQ,MAAM;AAChB,WAAK,OAAO;AAAA,IACd;AAEA,QAAI,YAAY,MAAM;AACpB,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AACF;AAEO,IAAM,UAAN,cAAsB,sBAAa;AAAA,EAAnC;AAAA;AACL,qBAAY,oBAAI,IAAqB;AACrC,mBAAU;AAAA;AAAA,EAIV,MAAM,KACJ,SACwC;AACxC,WAAO,MAAM,IAAI;AAAA,MACf,CAAC,SAAS,WAAW;AACnB,YAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,eAAK,cAAc,SAAS,OAAO;AAAA,QACrC,OAAO;AACL,eAAK,SAAS,SAAS,SAAS,MAAM;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAIA,OAAO,SAAkD;AACvD,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,UAAI,QAAQ,CAAC,YAAY;AACvB,aAAK,cAAc,SAAS,OAAO;AAAA,MACrC,CAAC,EAAE,MAAM,CAAC,QAAQ;AAChB,gBAAQ,MAAM,iCAAiC,GAAG;AAAA,MACpD,CAAC;AACD;AAAA,IACF;AACA,QAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,WAAK,SAAS,SAAS,SAAS,MAAM;AAAA,IACxC,CAAC,EAAE,MAAM,CAAC,QAAQ;AAChB,cAAQ,MAAM,gCAAgC,GAAG;AAAA,IACnD,CAAC;AAAA,EACH;AAAA,EAEA,SACE,SACA,SAGA,QAGM;AACN,UAAM,KAAK,KAAK;AAChB,SAAK,WAAW;AAEhB,UAAM,mBAAmB;AAAA,MACvB,SAAS;AAAA,MACT;AAAA,MACA,GAAG;AAAA,IACL;AAEA,UAAM,kBAAkB,MAAY;AAClC,WAAK,IAAI,YAAY,UAAU;AAC/B,WAAK,IAAI,SAAS,OAAO;AAAA,IAC3B;AAEA,UAAM,aAAa,CAAC,aAAoC;AACtD,UAAI,SAAS,OAAO,IAAI;AACtB,gBAAQ,QAAQ;AAChB,wBAAgB;AAAA,MAClB;AAAA,IACF;AAEA,UAAM,UAAU,CAAC,aAAkC;AACjD,UAAI,SAAS,OAAO,IAAI;AACtB,cAAM,QAAQ,IAAI,aAAa,SAAS,MAAM,SAAS;AAAA,UACrD,MAAM,SAAS,MAAM;AAAA,UACrB;AAAA,QACF,CAAC;AACD,eAAO,KAAK;AACZ,wBAAgB;AAAA,MAClB;AAAA,IACF;AAEA,SAAK,GAAG,YAAY,UAAU;AAC9B,SAAK,GAAG,SAAS,OAAO;AAExB,SAAK,KAAK,WAAW,KAAK,UAAU,gBAAgB,CAAC;AAAA,EACvD;AAAA,EAEA,cACE,SACA,SAGM;AACN,UAAM,WAAsB,QAAQ,IAAI,CAACC,aAAY;AACnD,YAAM,mBAAmB;AAAA,QACvB,SAAS;AAAA,QACT,IAAI,KAAK;AAAA,QACT,GAAGA;AAAA,MACL;AACA,WAAK,WAAW;AAChB,aAAO;AAAA,IACT,CAAC;AAED,UAAM,UAAU,CAAC,cAAiC;AAChD,YAAM,oBAAoB,CAAC;AAE3B,iBAAW,YAAY,WAAW;AAChC,mBAAWA,YAAW,UAAU;AAC9B,cAAIA,SAAQ,OAAO,SAAS,IAAI;AAC9B,8BAAkB,KAAK,QAAQ;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AAEA,UAAI,kBAAkB,SAAS,GAAG;AAChC,gBAAQ,iBAAiB;AACzB,aAAK,IAAI,SAAS,OAAO;AAAA,MAC3B;AAAA,IACF;AAEA,SAAK,GAAG,SAAS,OAAO;AAExB,SAAK,KAAK,WAAW,QAAQ;AAAA,EAC/B;AACF;;;ACjKO,SAAS,yBACd,MACA,UACQ;AACR,MAAI,cAAc;AAClB,MAAI,gBAAgB;AAEpB,WAAS,KAAK,GAAG,KAAK,KAAK,QAAQ,MAAM;AACvC,UAAM,OAAO,KAAK,EAAE;AACpB,QAAI,SAAS,MAAM;AACjB,qBAAe;AACf,sBAAgB;AAAA,IAClB,OAAO;AACL,uBAAiB;AAAA,IACnB;AAEA,QAAI,SAAS,OAAO,aAAa;AAC/B,aAAO;AAAA,IACT;AAEA,QAAI,gBAAgB,SAAS,QAAQ,kBAAkB,SAAS,WAAW;AACzE,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAEA,SAAO,KAAK;AACd;AAEO,SAAS,yBACd,MACA,WACU;AACV,MAAI,cAAc;AAClB,MAAI,gBAAgB;AAEpB,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,OAAO,KAAK,IAAI,CAAC;AACvB,QAAI,SAAS,MAAM;AACjB,qBAAe;AACf,sBAAgB;AAAA,IAClB,OAAO;AACL,uBAAiB;AAAA,IACnB;AAEA,QAAI,MAAM,WAAW;AACnB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AACF;AAEO,SAAS,sBACd,UAC8B;AAC9B,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;;;AHvEO,SAAS,UAAU,QAA8B;AACtD,QAAM,SAAS,IAAI,aAAAC,QAAa;AAEhC,MAAI,UAA6B;AACjC,MAAI,gBAAgB;AACpB,QAAM,EAAE,iBAAiB,MAAM,iBAAiB,QAAQ,IAAI;AAC5D,QAAM,gBAAgB,IAAI,QAAQ;AAAA,EAElC,MAAM,UAAU;AAAA,IAGd,YAAY,MAAkB;AAC5B,WAAK,OAAO;AAAA,IACd;AAAA,IAEA,OAAO,QAA0B;AAAA,IAAC;AAAA,EACpC;AACA,yBAAW,UAAU,SAAS;AAE9B,QAAM,gBAAY,oBAAO,OAAO,SAAS;AACvC,cAAU;AACV,WAAO,KAAK,QAAQ,IAAI;AAExB,UAAM,cAA4B,CAAC;AACnC,UAAM,eAAe;AACrB,qBAAiB;AAEjB,kBAAc,OAAO;AAAA,MACnB,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN,cAAc;AAAA,UACZ,KAAK;AAAA,UACL,SAAS;AAAA,QACX;AAAA,QACA,gBAAgB;AAAA,UACd;AAAA,YACE,MAAM,KAAK,MAAM,IAAI,SAAS;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,gBAAc,GAAG,WAAW,CAAC,YAAY;AACvC,oBAAgB,OAAO;AAAA,EACzB,CAAC;AAED,QAAM,iBAAiB,CAAC,iBAA4B;AAClD,YAAQ,aAAa,QAAQ;AAAA,MAC3B,KAAK;AACH,6BAAqB,YAAY;AACjC;AAAA,IACJ;AAAA,EACF;AAEA,gBAAc,GAAG,gBAAgB,cAAc;AAE/C,QAAM,uBAAuB,CAC3B,iBACS;AACT,YAAQ,IAAI,wBAAwB,cAAc,OAAO;AACzD,QAAI,WAAW,MAAM;AACnB;AAAA,IACF;AAEA,UAAM,cAA4B,aAAa,OAAO,YAAY;AAAA,MAChE,CAAC,eAAe;AACd,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,SAAS,MAAM,IAAI,SAAS,KAAK;AAAA,YACjC,WAAW,MAAM;AAAA,UACnB;AAAA,UACA,IAAI;AAAA,YACF,SAAS,MAAM,IAAI,SAAS,KAAK;AAAA,YACjC,WAAW,MAAM;AAAA,UACnB;AAAA,UACA,UAAU,sBAAsB,WAAW,QAAQ;AAAA,UACnD,QAAQ,WAAW;AAAA,UACnB,SAAS,WAAW;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAI,eAAe,WAAW;AACtC,UAAM,qBAAiB,4BAAe,QAAQ,OAAO,WAAW;AAChE,UAAM,cAAc,QAAQ,MAAM,OAAO,cAAc;AACvD,YAAQ,SAAS,WAAW;AAAA,EAC9B;AAEA,QAAM,oBAAoB,CAAC,YAA0B;AACnD,UAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,QAAI,OAAO,SAAS,UAAU;AAC5B,YAAM,IAAI,MAAM,gBAAgB;AAAA,IAClC;AAEA,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,YAAM,WAAW,CAAC;AAClB,iBAAW,MAAM,MAAM;AACrB,YAAI,YAAY,IAAI;AAClB,wBAAc,KAAK,gBAAgB,EAAE;AAAA,QACvC,OAAO;AACL,mBAAS,KAAK,EAAE;AAAA,QAClB;AAAA,MACF;AAEA,oBAAc,KAAK,SAAS,QAAQ;AACpC;AAAA,IACF;AACA,QAAI,WAAW,MAAM;AACnB,oBAAc,KAAK,SAAS,IAAI;AAChC;AAAA,IACF;AACA,QAAI,YAAY,MAAM;AACpB,oBAAc,KAAK,YAAY,IAAI;AACnC;AAAA,IACF;AACA,QAAI,YAAY,MAAM;AACpB,oBAAc,KAAK,gBAAgB,IAAI;AACvC;AAAA,IACF;AAEA,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AAEA,UAAQ,EAAE,kBAAkB,CAAC;AAE7B,SAAO;AAAA,IACL;AAAA,IACA,GAAI,iBACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,IACA,CAAC;AAAA,EACP;AACF;", "names": ["module", "EventEmitter", "EventEmitter", "request", "EventEmitter"] }