xshell 1.0.21 → 1.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/net.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"net.js","sourceRoot":"","sources":["net.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InspectOptions } from 'util'\n\nimport { fetch, ProxyAgent, FormData, Headers, type Response, type RequestInit } from 'undici'\n\nimport { WebSocket, type CloseEvent, type ErrorEvent } from 'ws'\n\nimport qs from 'qs'\n\nimport { Cookie, CookieJar, MemoryCookieStore } from 'tough-cookie'\n\ndeclare module 'tough-cookie' {\n interface MemoryCookieStore {\n idx: Record<string, any>\n }\n}\n\nimport make_fetch_cookie from 'fetch-cookie'\n\nimport { t } from './i18n/instance.js'\nimport './prototype.js'\nimport type { Encoding } from './file.js'\nimport { inspect, concat, assert, genid, delay, Lock } from './utils.js'\n\nexport enum MyProxy {\n socks5 = 'http://localhost:10080',\n whistle = 'http://localhost:8899',\n}\n\n\n// ------------------------------------ fetch, request\nlet cookie_store = new MemoryCookieStore()\n\nexport const cookies = {\n store: cookie_store,\n \n jar: new CookieJar(cookie_store),\n \n get (domain_or_url: string, str = false) {\n if (domain_or_url.startsWith('http'))\n if (str)\n return this.jar.getCookieString(domain_or_url)\n else\n return this.jar.getCookies(domain_or_url)\n \n let cookies: Cookie[]\n this.store.findCookies(domain_or_url, null, true, (error, _cookies) => {\n if (error)\n throw error\n cookies = _cookies\n })\n return cookies\n },\n}\n\nexport { Cookie }\n\n\nlet proxy_agents: Record<string, ProxyAgent> = { }\n\nconst fetch_cookie = make_fetch_cookie(fetch, cookies.jar, false)\n\n\nexport interface BasicAuth {\n type: 'basic',\n username: string\n password: string\n}\n\nexport interface BearerAuth {\n type: 'bearer',\n token: string\n}\n\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'HEAD' | 'DELETE' | 'PATCH'\n \n queries?: Record<string, any>\n \n headers?: Record<string, string> | Headers\n \n body?: string | Record<string, any> | NodeJS.ArrayBufferView | ArrayBuffer | \n AsyncIterable<Uint8Array> | Iterable<Uint8Array> | \n URLSearchParams | FormData\n \n type?: 'application/json' | 'application/x-www-form-urlencoded' | 'multipart/form-data'\n \n proxy?: boolean | MyProxy | string\n \n encoding?: Encoding | 'binary'\n \n retries?: true | number\n \n timeout?: number\n \n auth?: BasicAuth | BearerAuth\n \n cookies?: Record<string, string>\n}\n\nexport interface RequestRawOptions extends RequestOptions {\n raw: true\n}\n\n\nasync function fetch_retry (url: URL, options: RequestInit, timeout: number, retries = 0, count = 0): Promise<Response> {\n try {\n options.signal = AbortSignal.timeout(timeout)\n return await fetch_cookie(url, options)\n } catch (error) {\n if (\n count >= retries ||\n error.name !== 'TimeoutError' && !['ECONNRESET', 'ETIMEDOUT', 'ESOCKETTIMEDOUT'].includes(error.cause?.code)\n )\n throw error\n else {\n const duration = 2 ** count\n console.log(`${t('等待 {{duration}} 秒后重试 fetch ({{_count}}) …', { duration, _count: count }).yellow} ${url.toString().blue.underline}`)\n await delay(1000 * duration)\n return fetch_retry(url, options, timeout, retries, count + 1)\n }\n }\n}\n\n\nexport interface RequestError extends Error {\n url: URL\n \n options: RequestInit\n \n response?: {\n /** 状态码 */\n status: number\n \n url: string\n \n headers: Headers\n \n ok: boolean\n \n type: ResponseType\n \n text: string\n \n redirected: boolean\n }\n \n [inspect.custom]: Function\n}\n\n\n/** \n - url: 必须是完整 url\n - options?:\n - method?: `有 body 时为 POST, 否则为 GET` 'GET' | 'POST' | ···\n - queries?: 添加到 url 上的参数,是 Record<string, any>,true/false 会被转换为 0/1\n - headers?: http 请求头 (Record<string, string> 或者 Headers 类型),其中 key 必须是小写的\n - body?: http 请求体,可以是 string, Record<string, any> (会自动 JSON.stringify), ArrayBuffer(View), (Async)Iterable<Uint8Array> \n URLSearchParams (type 为 x-www-form-urlencoded), FormData (type 为 form-data)\n - type?: `'application/json'` 有 body 时设置 http 请求头中的 content-type 头\n - proxy?: `false` 通过代理发送请求\n - 为 true 时使用 MyProxy.socks5\n - 为非空 string 作为代理地址\n - 为 falsy 值时设为 false\n - encoding?: `根据网页 content-type: charset=gb18030 提取 || 'utf-8'` 传入 'binary' 时返回 ArrayBuffer\n - retries?: `false` 可以传入 true (默认 2 次) 或 重试次数\n - timeout?: `5 * 1000`\n - auth?: BasicAuth | BearerAuth\n - cookies?: 需要额外添加到请求的 cookies, 默认情况下携带了 MemoryCookieStore 中保存的之前 http 响应中的 cookies \n - raw?: `false` 传入后返回整个 response */\nexport async function request (url: string | URL): Promise<string>\nexport async function request (url: string | URL, options: RequestRawOptions): Promise<Response>\nexport async function request (url: string | URL, options: RequestOptions & { encoding: 'binary' }): Promise<ArrayBuffer>\nexport async function request (url: string | URL, options: RequestOptions): Promise<string>\nexport async function request (url: string | URL, {\n method,\n \n queries,\n \n headers: _headers,\n \n body,\n \n type = 'application/json',\n \n proxy,\n \n encoding,\n \n retries,\n \n timeout = 5 * 1000,\n \n auth,\n \n cookies: _cookies,\n \n raw = false,\n}: RequestOptions & { raw?: boolean } = { }) {\n url = new URL(url)\n \n if (queries)\n for (const key in queries) {\n let value = queries[key]\n if (typeof value === 'boolean')\n value = value ? '1' : '0'\n url.searchParams.append(key, value)\n }\n \n if (body !== undefined && !method)\n method = 'POST'\n \n if (retries === true)\n retries = 2\n \n \n // --- headers, http/2 开始都用小写的 headers\n let headers = new Headers({\n 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,ja-JP;q=0.6,ja;q=0.5',\n 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',\n })\n \n if (body !== undefined)\n headers.set('content-type', type)\n \n if (auth)\n headers.set(\n 'authorization',\n auth.type === 'basic' ? `Basic ${`${auth.username}:${auth.password}`.to_base64()}` : `Bearer ${auth.token}`\n )\n \n if (_cookies)\n Object.entries(_cookies)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n .join('; ')\n \n if (_headers)\n if (_headers instanceof Headers)\n // @ts-ignore: ts 类型不支持,实际上已经有了\n for (const [key, value] of _headers)\n headers.set(key, value)\n else\n for (const key in _headers) {\n const value = _headers[key]\n if (!value.startsWith(':')) { // 可能在 http/2 的 response 中会有这样开头的保留 headers, 在透传时忽略比较好\n assert(key === key.toLowerCase(), t('传入 request 的 headers 参数中 key 应该都是小写的,实际为 {{key}}', { key }))\n headers[key] = value\n }\n }\n \n \n let options: RequestInit & { maxRedirect: number /* fetch-cookie 需要这个参数 */ } = {\n ... method ? { method } : { },\n \n dispatcher: (() => {\n if (proxy) {\n if (proxy === true)\n proxy = MyProxy.socks5\n \n return proxy_agents[proxy] ??= new ProxyAgent({ uri: proxy })\n }\n })(),\n \n keepalive: true,\n \n redirect: 'follow',\n \n maxRedirect: 6,\n \n credentials: 'include',\n \n headers,\n \n // --- body\n body: (() => {\n if (body === undefined)\n return\n \n switch (type) {\n case 'application/json':\n return typeof body === 'string' || \n ArrayBuffer.isView(body) || \n body instanceof ArrayBuffer || \n // 测试 Iterable<Uint8Array>, AsyncIterable<Uint8Array>\n (!Array.isArray(body) && (Symbol.iterator in Object(body) || Symbol.asyncIterator in Object(body))) ?\n body as (string | NodeJS.ArrayBufferView | ArrayBuffer | AsyncIterable<Uint8Array> | Iterable<Uint8Array>)\n :\n JSON.stringify(body)\n \n case 'application/x-www-form-urlencoded':\n return body instanceof URLSearchParams ? body : new URLSearchParams(body as Record<string, any>)\n \n case 'multipart/form-data':\n if (body instanceof FormData)\n return body\n else {\n let form = new FormData()\n for (const key in body as Record<string, any>) {\n let value = body[key]\n form.set(key, value)\n }\n return form\n }\n }\n })(),\n }\n \n \n let response: Response\n \n try {\n response = await fetch_retry(url, options, timeout, retries)\n \n if (!response.ok)\n throw Object.assign(\n new Error(t('状态码 {{status}} 非 2xx', { status: response.status })),\n { name: 'StatusCodeError' }\n )\n } catch (error) {\n error.url = url\n error.options = options\n \n if (response)\n error.response = {\n status: response.status,\n url: response.url,\n headers: response.headers,\n ok: response.ok,\n type: response.type,\n text: await response.text(),\n redirected: response.redirected\n }\n \n error[inspect.custom] = (depth: number, options: InspectOptions, inspect: Function) => {\n const { colors } = options\n \n let _method: string = method || 'GET'\n if (colors)\n _method = _method.red\n \n let _url = url.toString()\n if (colors)\n _url = _url.blue.underline\n \n let s = '\\n' +\n `${_method} ${_url}\\n`\n \n if (queries && Object.keys(queries).length) {\n let _query = t('请求参数:')\n if (colors)\n _query = _query.yellow\n \n s += _query + '\\n' +\n inspect(queries, options) + '\\n'\n }\n \n if (body !== undefined) {\n let _body = t('请求体:')\n if (colors)\n _body = _body.yellow\n \n s += _body + '\\n' +\n inspect(body, options) + '\\n'\n }\n \n \n if (error.name === 'StatusCodeError') {\n let _status = t('响应状态码:')\n if (colors)\n _status = _status.yellow\n \n let _code = String(response.status)\n if (colors)\n _code = _code.red\n \n s += _status + ' ' + _code + '\\n'\n } else if (error.name === 'TimeoutError') {\n let _timeout = t('超过等待时间:')\n if (colors)\n _timeout = _timeout.red\n \n s += `${_timeout} ${timeout} ms\\n`\n }\n \n \n if (response) {\n let _headers = t('响应头:')\n if (colors)\n _headers = _headers.yellow\n \n s += _headers + '\\n'\n \n for (const [key, value] of response.headers)\n s += `${key}: ${value}\\n`\n \n if ((error as RequestError).response.text) {\n let _body = t('响应体:')\n if (colors)\n _body = _body.yellow\n \n s += _body + '\\n' +\n (error as RequestError).response.text + '\\n'\n }\n }\n \n let _stack = t('调用栈:')\n if (colors)\n _stack = _stack.yellow\n \n s += _stack + '\\n'\n \n if (error.cause)\n s += inspect(error.cause, options) + '\\n'\n \n s += error.stack + '\\n' +\n '\\n'\n \n return s\n }\n \n throw error\n }\n \n if (raw)\n return response\n \n if (!response.body)\n return response.body\n \n // --- decode body\n if (encoding === 'binary')\n return response.arrayBuffer()\n \n encoding ||= /charset=(.*)/.exec(response.headers.get('content-type'))?.[1] as Encoding || 'utf-8'\n \n if (/utf-?8/i.test(encoding))\n return response.text()\n \n return new TextDecoder(encoding)\n .decode(await response.arrayBuffer())\n}\n\n\n/** 发起 http 请求并将响应体作为 json 解析 */\nexport async function request_json <T = any> (url: string | URL, options?: RequestOptions): Promise<T> {\n const resp = await request(url, options)\n if (!resp)\n return\n \n try {\n return JSON.parse(resp)\n } catch (error) {\n console.error(resp)\n throw error\n }\n}\n\n\n/** 使用 $.html(cheerio_element) 来获取 outer html */\nexport async function parse_html (html: string) {\n const { default: cheerio } = await import('cheerio')\n \n let $ = cheerio.load(html, { decodeEntities: false })\n \n Object.defineProperty($, inspect.custom, {\n configurable: true,\n enumerable: false,\n value () {\n return this.html()\n }\n })\n \n Object.defineProperty($.prototype, inspect.custom, {\n configurable: true,\n enumerable: false,\n value (this: cheerio.Cheerio) {\n if (this.length > 1)\n return this.map((index, element) => {\n if (typeof element === 'string') return element\n return $.html(element)\n }).get().join_lines()\n \n return this.toString()\n }\n })\n \n return $\n}\n\n\n/** 使用 $.html(cheerio_element) 来获取 outer html */\nexport async function request_page (url: string | URL, options?: RequestOptions) {\n return parse_html(\n await request(url, options)\n )\n}\n\n\nexport function to_curl (url: string | URL, { queries, headers, method, body, proxy, exe = true }: RequestOptions & { exe?: boolean } = { }) {\n if (proxy === true)\n proxy = process.env.http_proxy\n \n url = url.toString()\n \n if (!url.startsWith('http'))\n url = `http://${url}`\n \n return (exe ? 'curl.exe' : 'curl') + \n ' ' + ( url + (queries ? '?' : '') + qs.stringify(queries) ).quote() +\n // ( typeof proxy === 'undefined' ?\n // ''\n // :\n // ( proxy ? ' --proxy ' + proxy.quote() : ' --noproxy ' + '*'.quote())\n // ) +\n ( proxy ? ` --proxy ${proxy.quote()}` : '' ) +\n ( method && method !== 'GET' ? ` -X ${method}` : '' ) +\n ( headers ? Object.entries(headers).map( ([key, value]) => ' -H ' + `${key}: ${value}`.quote() ).join('') : '' ) +\n ( body ? ' -H ' + 'content-type: application/json'.quote() : '') +\n ( body ? ' --data ' + JSON.stringify(body).quote() : '')\n}\n\n\n\n\n// ------------------------------------ rpc client\n/** post json to http://localhost:8421/api/rpc\n - func: function name\n - args?: argument array\n - options?:\n - ignore?: `false` wait for execution but do not serialize result to response\n - async?: `false` do not wait for exec\n*/\nexport async function rpc (\n func: string, \n args?: any[], \n { url = 'http://localhost:8421/api/rpc', async: _async = false, ignore = false }: { url?: string, async?: boolean, ignore?: boolean } = { }\n) {\n if (!func)\n throw new Error('rpc argument error: no func')\n \n return request_json(url, {\n body: {\n func,\n args,\n async: _async,\n ignore,\n }\n })\n}\n\n\n\nlet decoder = new TextDecoder()\n\nlet encoder = new TextEncoder()\n\n\nexport { WebSocket }\n\n\nexport class WebSocketConnectionError extends Error {\n override name = 'WebSocketConnectionError'\n \n websocket: WebSocket\n \n event: CloseEvent | ErrorEvent\n \n type: 'close' | 'error'\n \n address?: string\n \n errno?: number\n \n port?: number\n \n syscall?: string\n \n /** close 事件时为 close code, error 事件为 error code */\n code?: string | number\n \n reason?: string\n \n \n constructor (websocket: WebSocket, event: CloseEvent | ErrorEvent, message: string = '') {\n super(`${websocket.url} ${t('连接出错了')}. ${message}`)\n \n this.websocket = websocket\n this.event = event\n this.type = event.type as 'close' | 'error'\n \n if (this.type === 'error') {\n const { error } = event as ErrorEvent\n this.address = error.address\n this.code = error.code\n this.errno = error.errno\n this.port = error.port\n this.syscall = error.syscall\n this.reason = error.reason\n \n this.stack = `${this.name}: ${this.message}\\n` +\n error.stack.slice(error.stack.indexOf('\\n') + 1) + '\\n'\n } else {\n this.code = (event as CloseEvent).code\n this.reason = (event as CloseEvent).reason\n }\n }\n}\n\n\n/** 连接 websocket url, 设置各种事件监听器。在 open 事件后 resolve, 返回 websocket \n 遇到 error 时会创建 WebSocketConnectionError: \n - reject 掉返回的 promise (若此时未 settle) \n - 作为参数调用 on_error (已 settle 且有 on_error 回调) \n 可以用 WebSocket.bufferedAmount 来显示大消息的发送进度 \n https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/bufferedAmount\n - url\n - options:\n - protocols?\n - max_payload?: `8 GB`\n - on_message: 根据 websocket frame 的 opcode 不同 (text frame 或 binary frame),event 中的 data 对应为 ArrayBuffer 或者 string \n https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n - on_error?: 在 websocket 出错和非正常关闭 (close, error 事件) 时都调用,可以根据 error.type 来区分,error 的类型是 WebSocketConnectionError, \n type 为 'close' 时有 code 和 reason 属性 \n - on_close?: 和 websocket 的 'close' 事件不相同,只在正常关闭 (close code 为 1000) 时才调用,否则都会调用 on_error \n https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes */\nexport async function connect_websocket (\n url: string | URL,\n {\n protocols,\n max_payload = 2 ** 33, // 8 GB\n on_message,\n on_error,\n on_close\n }: {\n protocols?: string | string[]\n max_payload?: number\n on_message (data: ArrayBuffer | string, websocket: WebSocket): any\n on_error? (error: WebSocketConnectionError, websocket: WebSocket): any\n on_close? (event: CloseEvent, websocket: WebSocket): any\n }\n) {\n let websocket = new WebSocket(url, protocols, {\n maxPayload: max_payload,\n skipUTF8Validation: true\n })\n \n // https://stackoverflow.com/questions/11821096/what-is-the-difference-between-an-arraybuffer-and-a-blob/39951543\n websocket.binaryType = 'arraybuffer'\n \n return new Promise<WebSocket>((resolve, reject) => {\n let settled = false\n \n websocket.addEventListener('open', event => {\n console.log(\n websocket.url +\n (protocols ? \n ' ' + (\n typeof protocols === 'string' ? protocols : protocols.join(', ').bracket('square')\n ).bracket()\n :\n '') +\n t(' 已连接')\n )\n \n settled = true\n resolve(websocket)\n })\n \n websocket.addEventListener('close', event => {\n // https://blog.insiderattack.net/promises-next-ticks-and-immediates-nodejs-event-loop-part-3-9226cbe7a6aa\n // error 事件会先发生,然后 reject(error) 被执行,此时还未轮到外层的 await connect_websocket 执行(在微任务队列中),\n // 接着马上 close 事件也被调用,此时 settled,马上调用了 on_error 函数,弄乱了顺序\n // error 的错误信息比较多,而且通过 await 得到的栈也比较清晰,这里延后调用 on_close 和 on_error,放到微任务队列之后的 timers 队列中\n setTimeout(() => {\n if (event.code === 1000) // 正常关闭\n if (on_close)\n on_close(event, websocket)\n else\n console.log(`${websocket.url} ${t('已正常关闭')}`)\n else { // 异常关闭,认为发生了错误,进行错误处理\n assert(settled, t('websocket close 事件时应该已经 settled'))\n \n const error = new WebSocketConnectionError(websocket, event, `${t('连接被关闭')}, code: ${event.code}${ event.reason ? `, ${t('原因')}: ${event.reason}` : '' }`)\n \n if (on_error)\n on_error(error, websocket)\n else // 既然用户不传 on_error, 就当 unhandled error 抛出来\n throw error\n }\n })\n })\n \n websocket.addEventListener('error', event => {\n const error = new WebSocketConnectionError(websocket, event, event.error?.message)\n \n if (settled) {\n if (on_error)\n on_error(error, websocket)\n else // 既然用户不传 on_error, 就当 unhandled error 抛出来\n throw error\n } else {\n settled = true\n reject(error)\n }\n })\n \n websocket.addEventListener('message', event => {\n on_message(event.data as ArrayBuffer | string, websocket)\n })\n })\n}\n\n\n/** 接收到消息后的处理函数 \n 返回值可以是:\n - 数组: 会自动被封装为 { id: 相同, data: 返回值, done: true } 这样的消息并调用 websocket.send 将其发送\n - void: 什么都不做\n - 以上的 promise */\nexport type MessageHandler = (message: Message, websocket?: WebSocket) => void | any[] | Promise<void | any[]>\n\n\n/** 二进制消息格式 \n - json.length (小端序): 4 字节\n - json 数据\n - binary 数据 */\nexport interface Message <TData extends any[] = any[]> {\n /** rpc id: 在 rpc 系统中认为是唯一的。用来在单个 websocket 连接上复用多个 rpc 请求。多个相同 id 的 message 组成一个请求流 */\n id?: number\n \n /** 只在 rpc 发起时指定被调用的 function name,发起时 rpc 时必传 */\n func?: string\n \n /** 通过这个 flag 主动表明这是发往对方的最后一个 message, 对方可以销毁 handler 了 \n 并非强制,可以不说明,由双方的函数自己约定\n */\n done?: boolean\n \n /** 通知对方这里产生的错误,本质上类似 data 也是一种数据,并不代表 rpc 的结束,后续可能继续有 rpc message 交换 */\n error?: Error\n \n /** data 是一个数组, 作为:\n - rpc 发起方调用 func 的参数,或者请求流 message 携带的数据\n - 结果或者响应流的数据,传给请求发起方\n \n 里面是可序列化为 json 的 js 变量,或者是 Uint8Array \n Uint8Array 的参数处理后被替换为 Uint8Array.byteLength, 并将下标记录在 bins 中\n \n 注意: 数组中如果有 undefined 值,传输到对面会变成 null 值 */\n data?: TData\n \n /** bins: data 中哪些下标对应的原始值是 Uint8Array 类型的,如: [0, 3] */\n bins?: number[]\n}\n\n/** 通过创建 remote 对象对 websocket rpc 进行抽象 \n 调用方使用 remote.call 进行调用 \n 被调方在创建 remote 对象时传入 funcs 注册处理函数,并使用 remote.handle 方法处理 websocket message \n 未连接时自动连接,断开后自动重连 (保证执行 send 时已连接,否则报错) \n 从设计上与 rpc 状态与底层连接的状态无关 (通过传入 url 创建的),底层连接断开后,只要检测到断线,会尝试重连,如果重连成功,则不影响调用的状态 \n @example\n // Zero 继承自 Remote 并通过 call 实现了一些方法\n let zero = new Zero({ local: true })\n \n // 一元 rpc\n await zero.repl_ts('1234')\n \n // 订阅流\n const id = genid()\n \n zero.handlers.set(id, ({ data: [chunk] }: Message<[Uint8Array]>) => {\n term.write(chunk)\n })\n \n zero.send({ id, func: 'subscribe_stdio' }) */\nexport class Remote {\n /** 是否为建立 rpc 连接的发起方 */\n initiator: boolean\n \n /** websocket url */\n url?: string\n \n /** 主动发起 websocket 连接的客户端 (构造函数传 url) 有这个属性 */\n lwebsocket?: Lock<WebSocket>\n \n /** 通过 rpc message.func 被调用的 rpc 函数 */\n funcs: Record<string, MessageHandler>\n \n /** map<id, message handler>: 通过 rpc message.id 找到对应的 handler, unary rpc 接收方不需要设置 handlers, 发送方需要 */\n handlers = new Map<number, MessageHandler>()\n \n \n print = false\n \n pconnect: Promise<any>\n \n \n /** 使用 Uint8Array 作为参数更灵活 https://stackoverflow.com/a/74505197/7609214 */\n static parse <TData extends any[] = any[]> (buffer: Uint8Array) {\n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n \n const len_json = dv.getUint32(0, true)\n \n let offset = 4 + len_json\n \n let message: Message<TData> = JSON.parse(decoder.decode(buffer.subarray(4, offset)))\n \n if (message.bins) {\n const { bins } = message\n let { data } = message\n \n for (const ibin of bins) {\n const len_buf = data[ibin]\n data[ibin] = buffer.subarray(offset, offset + len_buf)\n offset += len_buf\n }\n }\n \n if (message.error)\n message.error = Object.assign(new Error(), message.error)\n \n return message\n }\n \n \n static pack ({ id, func, data = [ ], done, error }: Message) {\n let data_ = new Array(data.length)\n let bins: number[] = [ ]\n let bufs: Uint8Array[] = [ ]\n \n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n if (item instanceof Uint8Array) {\n bins.push(i)\n bufs.push(item)\n data_[i] = item.length\n } else\n data_[i] = item\n }\n \n const data_json = {\n id,\n ... func ? { func } : { },\n ... done ? { done } : { },\n ... error ? { error } : { },\n ... data_.length ? { data: data_ } : { },\n ... bins.length ? { bins } : { },\n }\n \n const str_json = encoder.encode(JSON.stringify(data_json))\n \n let dv = new DataView(new ArrayBuffer(4))\n \n dv.setUint32(0, str_json.length, true)\n \n return concat([dv, str_json, ... bufs])\n }\n \n \n /** 作为 rpc 发起方,可以通过传入 url 或者 websocket 定义远程 Remote \n 作为 rpc 接收方,可以不传 url 和 websocket 定义本地 Remote */\n constructor ({\n url,\n funcs = { },\n websocket,\n on_error\n }: {\n url?: string\n funcs?: Remote['funcs']\n websocket?: WebSocket\n on_error? (error: WebSocketConnectionError, websocket: WebSocket): void\n } = { }) {\n assert(!(url && websocket), t('构建 Remote 时 url 和 websocket 最多只能传一个'))\n this.initiator = Boolean(url || websocket)\n this.url = url\n this.funcs = funcs\n if (on_error)\n this.on_error = on_error\n this.lwebsocket = new Lock(websocket || null)\n }\n \n \n on_error? (error: WebSocketConnectionError, websocket: WebSocket) {\n throw error\n }\n \n \n /** 幂等,保证 websocket 已连接,否则抛出异常,不需要手动调用,在其它方法中已默认自动重连 \n 作为接收方需要传入使用的 websocket 连接,确保这个这个连接的状态 */\n async connect (websocket?: WebSocket) {\n if (this.initiator) {\n if (this.lwebsocket.resource?.readyState === WebSocket.OPEN)\n return\n else if (!this.url)\n throw new Error(t('创建 Remote 时传入的 websocket 连接已断开'))\n // else 等待重连\n } else\n if (websocket.readyState === WebSocket.OPEN)\n return\n else\n throw new Error(t('传入的 websocket 连接已断开'))\n \n // 假设有多个请求想要并发连接 websocket, 且此时 websocket 是断开的状态\n // 应该排队依次连接,而不是后续的连接直接使用第一次连接的 promise,后续调用还是应该尝试重连(不止连接一次)\n \n return this.lwebsocket.request(async (websocket) => {\n // 保存的 rpc 状态在 this.handlers, 与 websocket 无关,因此即使断开重连也不影响 rpc 的运行,即\n // 底层连接断开后自动重连对上层应该是无感知的,除非再次连接时失败\n \n if (websocket?.readyState === WebSocket.OPEN)\n return\n else if (!this.url)\n throw new Error(t('创建 Remote 时传入的 websocket 连接已断开'))\n else // 重连\n this.lwebsocket.resource = await connect_websocket(this.url, {\n on_message: (data: ArrayBuffer, websocket) => {\n this.handle(new Uint8Array(data), websocket)\n },\n on_error: this.on_error.bind(this)\n })\n })\n }\n \n \n disconnect () {\n this.lwebsocket.resource?.close(1000)\n }\n \n \n /** 接收 websocket 连接的本地 remote 必传 websocket 参数;发起端选传,如果传了必须等于 this.websocket_lock.resource \n 发送或连接出错时自动清理 message.id 对应的 handler */\n async send (message: Message, websocket?: WebSocket) {\n try {\n if (this.initiator) {\n assert(!websocket || websocket === this.lwebsocket.resource)\n await this.connect()\n websocket = this.lwebsocket.resource\n } else\n await this.connect(websocket)\n \n if (!message.id)\n message.id = genid()\n \n // 不需要独占 websocket\n websocket.send(Remote.pack(message))\n } catch (error) {\n if (message.id)\n this.handlers.delete(message.id)\n throw error\n }\n }\n \n \n /** 处理接收到的 websocket message 并解析, 根据 id dispatch 到对应的 handler 进行处理 \n 如果 message.done == true 则清理 handler \n 如果 handler 返回了值,则包装为 message 发送 \n 使用 Uint8Array 作为参数更灵活 https://stackoverflow.com/a/74505197/7609214 */\n async handle (data: Uint8Array, websocket: WebSocket) {\n const message = Remote.parse(data)\n \n const { id, func, done } = message\n \n if (this.print)\n console.log(message)\n \n let handler: MessageHandler\n \n if (func)\n handler = this.funcs[func]\n else {\n handler = this.handlers.get(id)\n if (done)\n this.handlers.delete(id)\n }\n \n try {\n if (handler) {\n const data = await handler(message, websocket)\n if (data)\n await this.send({ id, data }, websocket)\n } else if (message.error)\n throw message.error\n else\n throw new Error(`${t('找不到 rpc handler')}: ${func ? `func: ${func.quote()}` : `id: ${id}`}`)\n } catch (error) {\n // handle 出错并不意味着 rpc 一定会结束,可能 error 是运行中的正常数据,所以不能清理 handler\n \n if (\n websocket.readyState === WebSocket.OPEN &&\n !message.error // 防止无限循环往对方发送 error, 只有在对方无错误时才可以发送\n )\n try { await this.send({ id, error, /* 不能设置 done 清理对面 handler, 理由同上 */ }, websocket) } catch { }\n \n // 再往上层抛出错误没有意义了,上层调用栈是 websocket.on('message') 之类的\n console.log(error)\n }\n }\n \n \n /** 调用 remote 中的 func, 只适用于最简单的一元 rpc (请求, 响应) */\n async call <TReturn extends any[] = any[]> (func: string, args?: any[]) {\n return new Promise<TReturn>(async (resolve, reject) => {\n const id = genid()\n \n this.handlers.set(id, (message: Message<TReturn>) => {\n const { error, data } = message\n if (error)\n reject(error)\n else\n resolve(data)\n this.handlers.delete(id)\n })\n \n try {\n await this.send({ id, func, data: args }) // 不需要 done: true, 因为对面的 remote.handlers 中不会有这个 id 的 handler\n } catch (error) {\n reject(error)\n }\n })\n }\n}\n\n"]}
1
+ {"version":3,"file":"net.js","sourceRoot":"","sources":["net.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAmC,MAAM,QAAQ,CAAA;AAE9F,OAAO,EAAE,SAAS,EAAoC,MAAM,IAAI,CAAA;AAEhE,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAQnE,OAAO,iBAAiB,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AACtC,OAAO,gBAAgB,CAAA;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAExE,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACf,4CAAkC,CAAA;IAClC,4CAAiC,CAAA;AACrC,CAAC,EAHW,OAAO,GAAP,OAAO,KAAP,OAAO,QAGlB;AAGD,sDAAsD;AACtD,IAAI,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAA;AAE1C,MAAM,CAAC,MAAM,OAAO,GAAG;IACnB,KAAK,EAAE,YAAY;IAEnB,GAAG,EAAE,IAAI,SAAS,CAAC,YAAY,CAAC;IAEhC,GAAG,CAAE,aAAqB,EAAE,GAAG,GAAG,KAAK;QACnC,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,IAAI,GAAG;gBACH,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;;gBAE9C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;QAEjD,IAAI,OAAiB,CAAA;QACrB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAClE,IAAI,KAAK;gBACL,MAAM,KAAK,CAAA;YACf,OAAO,GAAG,QAAQ,CAAA;QACtB,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,CAAA;AAGjB,IAAI,YAAY,GAA+B,EAAG,CAAA;AAElD,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AA8CjE,KAAK,UAAU,WAAW,CAAE,GAAQ,EAAE,OAAoB,EAAE,OAAe,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;IAC/F,IAAI;QACA,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC7C,OAAO,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;KAC1C;IAAC,OAAO,KAAK,EAAE;QACZ,IACI,KAAK,IAAI,OAAO;YAChB,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;YAE5G,MAAM,KAAK,CAAA;aACV;YACD,MAAM,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAA;YAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,2CAA2C,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;YACtI,MAAM,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAA;YAC5B,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;SAChE;KACJ;AACL,CAAC;AAoDD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAE,GAAiB,EAAE,EAC9C,MAAM,EAEN,OAAO,EAEP,OAAO,EAAE,QAAQ,EAEjB,IAAI,EAEJ,IAAI,GAAG,kBAAkB,EAEzB,KAAK,EAEL,QAAQ,EAER,OAAO,EAEP,OAAO,GAAG,CAAC,GAAG,IAAI,EAElB,IAAI,EAEJ,OAAO,EAAE,QAAQ,EAEjB,GAAG,GAAG,KAAK,MACyB,EAAG;IACvC,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IAElB,IAAI,OAAO;QACP,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;YACvB,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YACxB,IAAI,OAAO,KAAK,KAAK,SAAS;gBAC1B,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;YAC7B,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;SACtC;IAEL,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM;QAC7B,MAAM,GAAG,MAAM,CAAA;IAEnB,IAAI,OAAO,KAAK,IAAI;QAChB,OAAO,GAAG,CAAC,CAAA;IAGf,sCAAsC;IACtC,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC;QACtB,iBAAiB,EAAE,0DAA0D;QAC7E,YAAY,EAAE,iHAAiH;KAClI,CAAC,CAAA;IAEF,IAAI,IAAI,KAAK,SAAS;QAClB,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IAErC,IAAI,IAAI;QACJ,OAAO,CAAC,GAAG,CACP,eAAe,EACf,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAC9G,CAAA;IAEL,IAAI,QAAQ;QACR,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;aACnB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;aAChF,IAAI,CAAC,IAAI,CAAC,CAAA;IAEnB,IAAI,QAAQ;QACR,IAAI,QAAQ,YAAY,OAAO;YAC3B,+BAA+B;YAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ;gBAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;;YAE3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;gBACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAG,sDAAsD;oBACjF,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,kDAAkD,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;oBACjG,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;iBACvB;aACJ;IAGT,IAAI,OAAO,GAAoE;QAC3E,GAAI,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAG;QAE7B,UAAU,EAAE,CAAC,GAAG,EAAE;YACd,IAAI,KAAK,EAAE;gBACP,IAAI,KAAK,KAAK,IAAI;oBACd,KAAK,GAAG,OAAO,CAAC,MAAM,CAAA;gBAE1B,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;aAChE;QACL,CAAC,CAAC,EAAE;QAEJ,SAAS,EAAE,IAAI;QAEf,QAAQ,EAAE,QAAQ;QAElB,WAAW,EAAE,CAAC;QAEd,WAAW,EAAE,SAAS;QAEtB,OAAO;QAEP,WAAW;QACX,IAAI,EAAE,CAAC,GAAG,EAAE;YACR,IAAI,IAAI,KAAK,SAAS;gBAClB,OAAM;YAEV,QAAQ,IAAI,EAAE;gBACV,KAAK,kBAAkB;oBACnB,OAAO,OAAO,IAAI,KAAK,QAAQ;wBAC3B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;wBACxB,IAAI,YAAY,WAAW;wBAC3B,qDAAqD;wBACrD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjG,IAA0G;wBAC9G,CAAC;4BACG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;gBAEhC,KAAK,mCAAmC;oBACpC,OAAO,IAAI,YAAY,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,IAA2B,CAAC,CAAA;gBAEpG,KAAK,qBAAqB;oBACtB,IAAI,IAAI,YAAY,QAAQ;wBACxB,OAAO,IAAI,CAAA;yBACV;wBACD,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAA;wBACzB,KAAK,MAAM,GAAG,IAAI,IAA2B,EAAE;4BAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;4BACrB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;yBACvB;wBACD,OAAO,IAAI,CAAA;qBACd;aACR;QACL,CAAC,CAAC,EAAE;KACP,CAAA;IAGD,IAAI,QAAkB,CAAA;IAEtB,IAAI;QACA,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAE5D,IAAI,CAAC,QAAQ,CAAC,EAAE;YACZ,MAAM,MAAM,CAAC,MAAM,CACf,IAAI,KAAK,CAAC,CAAC,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EACjE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAC9B,CAAA;KACR;IAAC,OAAO,KAAK,EAAE;QACZ,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QACf,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;QAEvB,IAAI,QAAQ;YACR,KAAK,CAAC,QAAQ,GAAG;gBACb,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,GAAG,EAAE,QAAQ,CAAC,GAAG;gBACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE;gBAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;aAClC,CAAA;QAEL,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAa,EAAE,OAAuB,EAAE,OAAiB,EAAE,EAAE;YAClF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;YAE1B,IAAI,OAAO,GAAW,MAAM,IAAI,KAAK,CAAA;YACrC,IAAI,MAAM;gBACN,OAAO,GAAG,OAAO,CAAC,GAAG,CAAA;YAEzB,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;YACzB,IAAI,MAAM;gBACN,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;YAE9B,IAAI,CAAC,GAAG,IAAI;gBACR,GAAG,OAAO,IAAI,IAAI,IAAI,CAAA;YAE1B,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;gBACxC,IAAI,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;gBACvB,IAAI,MAAM;oBACN,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;gBAE1B,CAAC,IAAI,MAAM,GAAG,IAAI;oBACd,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;aACvC;YAED,IAAI,IAAI,KAAK,SAAS,EAAE;gBACpB,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;gBACrB,IAAI,MAAM;oBACN,KAAK,GAAG,KAAK,CAAC,MAAM,CAAA;gBAExB,CAAC,IAAI,KAAK,GAAG,IAAI;oBACb,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;aACpC;YAGD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE;gBAClC,IAAI,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;gBACzB,IAAI,MAAM;oBACN,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;gBAE5B,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBACnC,IAAI,MAAM;oBACN,KAAK,GAAG,KAAK,CAAC,GAAG,CAAA;gBAErB,CAAC,IAAI,OAAO,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,CAAA;aACpC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;gBACtC,IAAI,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,CAAA;gBAC3B,IAAI,MAAM;oBACN,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAA;gBAE3B,CAAC,IAAI,GAAG,QAAQ,IAAI,OAAO,OAAO,CAAA;aACrC;YAGD,IAAI,QAAQ,EAAE;gBACV,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;gBACxB,IAAI,MAAM;oBACN,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAA;gBAE9B,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAA;gBAEpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO;oBACvC,CAAC,IAAI,GAAG,GAAG,KAAK,KAAK,IAAI,CAAA;gBAE7B,IAAK,KAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE;oBACvC,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;oBACrB,IAAI,MAAM;wBACN,KAAK,GAAG,KAAK,CAAC,MAAM,CAAA;oBAExB,CAAC,IAAI,KAAK,GAAG,IAAI;wBACZ,KAAsB,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;iBACnD;aACJ;YAED,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;YACtB,IAAI,MAAM;gBACN,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YAE1B,CAAC,IAAI,MAAM,GAAG,IAAI,CAAA;YAElB,IAAI,KAAK,CAAC,KAAK;gBACX,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;YAE7C,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI;gBACnB,IAAI,CAAA;YAER,OAAO,CAAC,CAAA;QACZ,CAAC,CAAA;QAED,MAAM,KAAK,CAAA;KACd;IAED,IAAI,GAAG;QACH,OAAO,QAAQ,CAAA;IAEnB,IAAI,CAAC,QAAQ,CAAC,IAAI;QACd,OAAO,QAAQ,CAAC,IAAI,CAAA;IAExB,kBAAkB;IAClB,IAAI,QAAQ,KAAK,QAAQ;QACrB,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAA;IAEjC,QAAQ,KAAK,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAa,IAAI,OAAO,CAAA;IAElG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxB,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;IAE1B,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC;SAC3B,MAAM,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;AAC7C,CAAC;AAGD,gCAAgC;AAChC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAY,GAAiB,EAAE,OAAwB;IACrF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI;QACL,OAAM;IAEV,IAAI;QACA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;KAC1B;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACnB,MAAM,KAAK,CAAA;KACd;AACL,CAAC;AAGD,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAE,IAAY;IAC1C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;IAEpD,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAA;IAErD,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE;QACrC,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,KAAK;YACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;QACtB,CAAC;KACJ,CAAC,CAAA;IAEF,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE;QAC/C,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,KAAK;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBACf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;oBAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ;wBAAE,OAAO,OAAO,CAAA;oBAC/C,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC1B,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAA;YAEzB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC1B,CAAC;KACJ,CAAC,CAAA;IAEF,OAAO,CAAC,CAAA;AACZ,CAAC;AAGD,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,GAAiB,EAAE,OAAwB;IAC3E,OAAO,UAAU,CACb,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAC9B,CAAA;AACL,CAAC;AAGD,MAAM,UAAU,OAAO,CAAE,GAAiB,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,KAAyC,EAAG;IACvI,IAAI,KAAK,KAAK,IAAI;QACd,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;IAElC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;IAEpB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,GAAG,GAAG,UAAU,GAAG,EAAE,CAAA;IAEzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9B,GAAG,GAAG,CAAE,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAE,CAAC,KAAK,EAAE;QACpE,mCAAmC;QACnC,SAAS;QACT,QAAQ;QACR,+EAA+E;QAC/E,MAAM;QACN,CAAE,KAAK,CAAE,CAAC,CAAE,YAAY,KAAK,CAAC,KAAK,EAAE,EAAE,CAAE,CAAC,CAAE,EAAE,CAAE;QAChD,CAAE,MAAM,IAAI,MAAM,KAAK,KAAK,CAAE,CAAC,CAAE,OAAO,MAAM,EAAE,CAAE,CAAC,CAAE,EAAE,CAAE;QACzD,CAAE,OAAO,CAAE,CAAC,CAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,KAAK,EAAE,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE;QAClH,CAAE,IAAI,CAAE,CAAC,CAAE,MAAM,GAAG,gCAAgC,CAAC,KAAK,EAAE,CAAE,CAAC,CAAE,EAAE,CAAC;QACpE,CAAE,IAAI,CAAE,CAAC,CAAE,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAE,CAAC,CAAE,EAAE,CAAC,CAAA;AACpE,CAAC;AAKD,kDAAkD;AAClD;;;;;;EAME;AACF,MAAM,CAAC,KAAK,UAAU,GAAG,CACrB,IAAY,EACZ,IAAY,EACZ,EAAE,GAAG,GAAG,+BAA+B,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,KAA0D,EAAG;IAE3I,IAAI,CAAC,IAAI;QACL,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAElD,OAAO,YAAY,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE;YACF,IAAI;YACJ,IAAI;YACJ,KAAK,EAAE,MAAM;YACb,MAAM;SACT;KACJ,CAAC,CAAA;AACN,CAAC;AAID,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;AAE/B,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;AAG/B,OAAO,EAAE,SAAS,EAAE,CAAA;AAGpB,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACtC,IAAI,GAAG,0BAA0B,CAAA;IAE1C,SAAS,CAAW;IAEpB,KAAK,CAAyB;IAE9B,IAAI,CAAmB;IAEvB,OAAO,CAAS;IAEhB,KAAK,CAAS;IAEd,IAAI,CAAS;IAEb,OAAO,CAAS;IAEhB,kDAAkD;IAClD,IAAI,CAAkB;IAEtB,MAAM,CAAS;IAGf,YAAa,SAAoB,EAAE,KAA8B,EAAE,UAAkB,EAAE;QACnF,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC,CAAA;QAEnD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAyB,CAAA;QAE3C,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACvB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAmB,CAAA;YACrC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;YAC5B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;YACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YACxB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;YACtB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;YAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;YAE1B,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI;gBAC1C,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAA;SAC9D;aAAM;YACH,IAAI,CAAC,IAAI,GAAI,KAAoB,CAAC,IAAI,CAAA;YACtC,IAAI,CAAC,MAAM,GAAI,KAAoB,CAAC,MAAM,CAAA;SAC7C;IACL,CAAC;CACJ;AAGD;;;;;;;;;;;;;;;wFAewF;AACxF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,GAAiB,EACjB,EACI,SAAS,EACT,WAAW,GAAG,CAAC,IAAI,EAAE,EAAG,OAAO;AAC/B,UAAU,EACV,QAAQ,EACR,QAAQ,EAOX;IAED,IAAI,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE;QAC1C,UAAU,EAAE,WAAW;QACvB,kBAAkB,EAAE,IAAI;KAC3B,CAAC,CAAA;IAEF,iHAAiH;IACjH,SAAS,CAAC,UAAU,GAAG,aAAa,CAAA;IAEpC,OAAO,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9C,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YACvC,OAAO,CAAC,GAAG,CACP,SAAS,CAAC,GAAG;gBACb,CAAC,SAAS,CAAC,CAAC;oBACR,GAAG,GAAG,CACF,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CACrF,CAAC,OAAO,EAAE;oBACf,CAAC;wBACG,EAAE,CAAC;gBACP,CAAC,CAAC,MAAM,CAAC,CACZ,CAAA;YAED,OAAO,GAAG,IAAI,CAAA;YACd,OAAO,CAAC,SAAS,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACxC,0GAA0G;YAC1G,mFAAmF;YACnF,uDAAuD;YACvD,uFAAuF;YACvF,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAG,OAAO;oBAC7B,IAAI,QAAQ;wBACR,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;;wBAE1B,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;qBAChD,EAAG,sBAAsB;oBAC1B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAA;oBAErD,MAAM,KAAK,GAAG,IAAI,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,IAAI,GAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAG,EAAE,CAAC,CAAA;oBAE1J,IAAI,QAAQ;wBACR,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;yBACxB,0CAA0C;wBAC5C,MAAM,KAAK,CAAA;iBAClB;YACL,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAElF,IAAI,OAAO,EAAE;gBACT,IAAI,QAAQ;oBACR,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;qBACxB,0CAA0C;oBAC5C,MAAM,KAAK,CAAA;aAClB;iBAAM;gBACH,OAAO,GAAG,IAAI,CAAA;gBACd,MAAM,CAAC,KAAK,CAAC,CAAA;aAChB;QACL,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;YAC1C,UAAU,CAAC,KAAK,CAAC,IAA4B,EAAE,SAAS,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC;AA4CD;;;;;;;;;;;;;;;;;;;iDAmBiD;AACjD,MAAM,OAAO,MAAM;IACf,uBAAuB;IACvB,SAAS,CAAS;IAElB,oBAAoB;IACpB,GAAG,CAAS;IAEZ,8CAA8C;IAC9C,UAAU,CAAkB;IAE5B,sCAAsC;IACtC,KAAK,CAAgC;IAErC,oGAAoG;IACpG,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAA;IAG5C,KAAK,GAAG,KAAK,CAAA;IAEb,QAAQ,CAAc;IAGtB,yEAAyE;IACzE,MAAM,CAAC,KAAK,CAAgC,MAAkB;QAC1D,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QAE5E,MAAM,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAEtC,IAAI,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAA;QAEzB,IAAI,OAAO,GAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QAEpF,IAAI,OAAO,CAAC,IAAI,EAAE;YACd,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;YACxB,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;YAEtB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;gBACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;gBACtD,MAAM,IAAI,OAAO,CAAA;aACpB;SACJ;QAED,IAAI,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAE7D,OAAO,OAAO,CAAA;IAClB,CAAC;IAGD,MAAM,CAAC,IAAI,CAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,EAAG,EAAE,IAAI,EAAE,KAAK,EAAW;QACvD,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,IAAI,GAAa,EAAG,CAAA;QACxB,IAAI,IAAI,GAAiB,EAAG,CAAA;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACpB,IAAI,IAAI,YAAY,UAAU,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;aACzB;;gBACG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;SACtB;QAED,2CAA2C;QAC3C,MAAM,SAAS,GAAG;YACd,EAAE;YACF,GAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAG;YACzB,GAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAG;YACzB,GAAI,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAG;YAC3B,GAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAG;YACxC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAG;SACnC,CAAA;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;QAE1D,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QAEzC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEtC,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAI,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;IAGD;sDACkD;IAClD,YAAa,EACT,GAAG,EACH,KAAK,GAAG,EAAG,EACX,SAAS,EACT,QAAQ,KAMR,EAAG;QACH,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAA;QACrE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,CAAA;QAC1C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,QAAQ;YACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;IACjD,CAAC;IAGD,QAAQ,CAAG,KAA+B,EAAE,SAAoB;QAC5D,MAAM,KAAK,CAAA;IACf,CAAC;IAGD;gDAC4C;IAC5C,KAAK,CAAC,OAAO,CAAE,SAAqB;QAChC,IAAI,IAAI,CAAC,SAAS;YACd,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI;gBACvD,OAAM;iBACL,IAAI,CAAC,IAAI,CAAC,GAAG;gBACd,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAA;;gBAEpD,gDAAgD;gBAChD,2DAA2D;gBAC3D,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE;oBAC7C,mEAAmE;oBACnE,kCAAkC;oBAElC,IAAI,SAAS,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI;wBACxC,OAAM;yBACL,IAAI,CAAC,IAAI,CAAC,GAAG;wBACd,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAA;yBAClD,KAAK;wBACP,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE;4BACzD,UAAU,EAAE,CAAC,IAAiB,EAAE,SAAS,EAAE,EAAE;gCACzC,IAAI,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAA;4BAChD,CAAC;4BACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;yBACrC,CAAC,CAAA;gBACV,CAAC,CAAC,CAAA;aAEN,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YACvC,OAAM;;YAEN,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAA;IACrD,CAAC;IAGD,UAAU;QACN,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IAGD;8CAC0C;IAC1C,KAAK,CAAC,IAAI,CAAE,OAAgB,EAAE,SAAqB;QAC/C,IAAI;YACA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,MAAM,CAAC,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;gBAC5D,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;gBACpB,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAA;aACvC;;gBACG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAEjC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACX,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,CAAA;YAExB,kBAAkB;YAClB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;SACvC;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACpC,MAAM,KAAK,CAAA;SACd;IACL,CAAC;IAGD;;;8EAG0E;IAC1E,KAAK,CAAC,MAAM,CAAE,IAAgB,EAAE,SAAoB;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAElC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;QAElC,IAAI,IAAI,CAAC,KAAK;YACV,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAExB,IAAI,OAAuB,CAAA;QAE3B,IAAI,IAAI;YACJ,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;aACzB;YACD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC/B,IAAI,IAAI;gBACJ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;SAC/B;QAED,IAAI;YACA,IAAI,OAAO,EAAE;gBACT,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;gBAC9C,IAAI,IAAI;oBACJ,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC,CAAA;aAC/C;iBAAM,IAAI,OAAO,CAAC,KAAK;gBACpB,MAAM,OAAO,CAAC,KAAK,CAAA;;gBAEnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;SAClG;QAAC,OAAO,KAAK,EAAE;YACZ,8DAA8D;YAE9D,IACI,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;gBACvC,CAAC,OAAO,CAAC,KAAK,CAAC,oCAAoC;;gBAEnD,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,kCAAkC,EAAE,EAAE,SAAS,CAAC,CAAA;YAEjF,MAAM,KAAK,CAAA;SACd;IACL,CAAC;IAGD,iDAAiD;IACjD,KAAK,CAAC,IAAI,CAAkC,IAAY,EAAE,IAAY;QAClE,OAAO,IAAI,OAAO,CAAU,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAClD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;YAElB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAyB,EAAE,EAAE;gBAChD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;gBAC/B,IAAI,KAAK;oBACL,MAAM,CAAC,KAAK,CAAC,CAAA;;oBAEb,OAAO,CAAC,IAAI,CAAC,CAAA;gBACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;YAEF,IAAI;gBACA,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA,CAAE,4DAA4D;aAC1G;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,CAAC,KAAK,CAAC,CAAA;aAChB;QACL,CAAC,CAAC,CAAA;IACN,CAAC;CACJ","sourcesContent":["import type { InspectOptions } from 'util'\n\nimport { fetch, ProxyAgent, FormData, Headers, type Response, type RequestInit } from 'undici'\n\nimport { WebSocket, type CloseEvent, type ErrorEvent } from 'ws'\n\nimport qs from 'qs'\n\nimport { Cookie, CookieJar, MemoryCookieStore } from 'tough-cookie'\n\ndeclare module 'tough-cookie' {\n interface MemoryCookieStore {\n idx: Record<string, any>\n }\n}\n\nimport make_fetch_cookie from 'fetch-cookie'\n\nimport { t } from './i18n/instance.js'\nimport './prototype.js'\nimport type { Encoding } from './file.js'\nimport { inspect, concat, assert, genid, delay, Lock } from './utils.js'\n\nexport enum MyProxy {\n socks5 = 'http://localhost:10080',\n whistle = 'http://localhost:8899',\n}\n\n\n// ------------------------------------ fetch, request\nlet cookie_store = new MemoryCookieStore()\n\nexport const cookies = {\n store: cookie_store,\n \n jar: new CookieJar(cookie_store),\n \n get (domain_or_url: string, str = false) {\n if (domain_or_url.startsWith('http'))\n if (str)\n return this.jar.getCookieString(domain_or_url)\n else\n return this.jar.getCookies(domain_or_url)\n \n let cookies: Cookie[]\n this.store.findCookies(domain_or_url, null, true, (error, _cookies) => {\n if (error)\n throw error\n cookies = _cookies\n })\n return cookies\n },\n}\n\nexport { Cookie }\n\n\nlet proxy_agents: Record<string, ProxyAgent> = { }\n\nconst fetch_cookie = make_fetch_cookie(fetch, cookies.jar, false)\n\n\nexport interface BasicAuth {\n type: 'basic',\n username: string\n password: string\n}\n\nexport interface BearerAuth {\n type: 'bearer',\n token: string\n}\n\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'HEAD' | 'DELETE' | 'PATCH'\n \n queries?: Record<string, any>\n \n headers?: Record<string, string> | Headers\n \n body?: string | Record<string, any> | NodeJS.ArrayBufferView | ArrayBuffer | \n AsyncIterable<Uint8Array> | Iterable<Uint8Array> | \n URLSearchParams | FormData\n \n type?: 'application/json' | 'application/x-www-form-urlencoded' | 'multipart/form-data'\n \n proxy?: boolean | MyProxy | string\n \n encoding?: Encoding | 'binary'\n \n retries?: true | number\n \n timeout?: number\n \n auth?: BasicAuth | BearerAuth\n \n cookies?: Record<string, string>\n}\n\nexport interface RequestRawOptions extends RequestOptions {\n raw: true\n}\n\n\nasync function fetch_retry (url: URL, options: RequestInit, timeout: number, retries = 0, count = 0): Promise<Response> {\n try {\n options.signal = AbortSignal.timeout(timeout)\n return await fetch_cookie(url, options)\n } catch (error) {\n if (\n count >= retries ||\n error.name !== 'TimeoutError' && !['ECONNRESET', 'ETIMEDOUT', 'ESOCKETTIMEDOUT'].includes(error.cause?.code)\n )\n throw error\n else {\n const duration = 2 ** count\n console.log(`${t('等待 {{duration}} 秒后重试 fetch ({{_count}}) …', { duration, _count: count }).yellow} ${url.toString().blue.underline}`)\n await delay(1000 * duration)\n return fetch_retry(url, options, timeout, retries, count + 1)\n }\n }\n}\n\n\nexport interface RequestError extends Error {\n url: URL\n \n options: RequestInit\n \n response?: {\n /** 状态码 */\n status: number\n \n url: string\n \n headers: Headers\n \n ok: boolean\n \n type: ResponseType\n \n text: string\n \n redirected: boolean\n }\n \n [inspect.custom]: Function\n}\n\n\n/** \n - url: 必须是完整 url\n - options?:\n - method?: `有 body 时为 POST, 否则为 GET` 'GET' | 'POST' | ···\n - queries?: 添加到 url 上的参数,是 Record<string, any>,true/false 会被转换为 0/1\n - headers?: http 请求头 (Record<string, string> 或者 Headers 类型),其中 key 必须是小写的\n - body?: http 请求体,可以是 string, Record<string, any> (会自动 JSON.stringify), ArrayBuffer(View), (Async)Iterable<Uint8Array> \n URLSearchParams (type 为 x-www-form-urlencoded), FormData (type 为 form-data)\n - type?: `'application/json'` 有 body 时设置 http 请求头中的 content-type 头\n - proxy?: `false` 通过代理发送请求\n - 为 true 时使用 MyProxy.socks5\n - 为非空 string 作为代理地址\n - 为 falsy 值时设为 false\n - encoding?: `根据网页 content-type: charset=gb18030 提取 || 'utf-8'` 传入 'binary' 时返回 ArrayBuffer\n - retries?: `false` 可以传入 true (默认 2 次) 或 重试次数\n - timeout?: `5 * 1000`\n - auth?: BasicAuth | BearerAuth\n - cookies?: 需要额外添加到请求的 cookies, 默认情况下携带了 MemoryCookieStore 中保存的之前 http 响应中的 cookies \n - raw?: `false` 传入后返回整个 response */\nexport async function request (url: string | URL): Promise<string>\nexport async function request (url: string | URL, options: RequestRawOptions): Promise<Response>\nexport async function request (url: string | URL, options: RequestOptions & { encoding: 'binary' }): Promise<ArrayBuffer>\nexport async function request (url: string | URL, options: RequestOptions): Promise<string>\nexport async function request (url: string | URL, {\n method,\n \n queries,\n \n headers: _headers,\n \n body,\n \n type = 'application/json',\n \n proxy,\n \n encoding,\n \n retries,\n \n timeout = 5 * 1000,\n \n auth,\n \n cookies: _cookies,\n \n raw = false,\n}: RequestOptions & { raw?: boolean } = { }) {\n url = new URL(url)\n \n if (queries)\n for (const key in queries) {\n let value = queries[key]\n if (typeof value === 'boolean')\n value = value ? '1' : '0'\n url.searchParams.append(key, value)\n }\n \n if (body !== undefined && !method)\n method = 'POST'\n \n if (retries === true)\n retries = 2\n \n \n // --- headers, http/2 开始都用小写的 headers\n let headers = new Headers({\n 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,ja-JP;q=0.6,ja;q=0.5',\n 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',\n })\n \n if (body !== undefined)\n headers.set('content-type', type)\n \n if (auth)\n headers.set(\n 'authorization',\n auth.type === 'basic' ? `Basic ${`${auth.username}:${auth.password}`.to_base64()}` : `Bearer ${auth.token}`\n )\n \n if (_cookies)\n Object.entries(_cookies)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n .join('; ')\n \n if (_headers)\n if (_headers instanceof Headers)\n // @ts-ignore: ts 类型不支持,实际上已经有了\n for (const [key, value] of _headers)\n headers.set(key, value)\n else\n for (const key in _headers) {\n const value = _headers[key]\n if (!value.startsWith(':')) { // 可能在 http/2 的 response 中会有这样开头的保留 headers, 在透传时忽略比较好\n assert(key === key.toLowerCase(), t('传入 request 的 headers 参数中 key 应该都是小写的,实际为 {{key}}', { key }))\n headers[key] = value\n }\n }\n \n \n let options: RequestInit & { maxRedirect: number /* fetch-cookie 需要这个参数 */ } = {\n ... method ? { method } : { },\n \n dispatcher: (() => {\n if (proxy) {\n if (proxy === true)\n proxy = MyProxy.socks5\n \n return proxy_agents[proxy] ??= new ProxyAgent({ uri: proxy })\n }\n })(),\n \n keepalive: true,\n \n redirect: 'follow',\n \n maxRedirect: 6,\n \n credentials: 'include',\n \n headers,\n \n // --- body\n body: (() => {\n if (body === undefined)\n return\n \n switch (type) {\n case 'application/json':\n return typeof body === 'string' || \n ArrayBuffer.isView(body) || \n body instanceof ArrayBuffer || \n // 测试 Iterable<Uint8Array>, AsyncIterable<Uint8Array>\n (!Array.isArray(body) && (Symbol.iterator in Object(body) || Symbol.asyncIterator in Object(body))) ?\n body as (string | NodeJS.ArrayBufferView | ArrayBuffer | AsyncIterable<Uint8Array> | Iterable<Uint8Array>)\n :\n JSON.stringify(body)\n \n case 'application/x-www-form-urlencoded':\n return body instanceof URLSearchParams ? body : new URLSearchParams(body as Record<string, any>)\n \n case 'multipart/form-data':\n if (body instanceof FormData)\n return body\n else {\n let form = new FormData()\n for (const key in body as Record<string, any>) {\n let value = body[key]\n form.set(key, value)\n }\n return form\n }\n }\n })(),\n }\n \n \n let response: Response\n \n try {\n response = await fetch_retry(url, options, timeout, retries)\n \n if (!response.ok)\n throw Object.assign(\n new Error(t('状态码 {{status}} 非 2xx', { status: response.status })),\n { name: 'StatusCodeError' }\n )\n } catch (error) {\n error.url = url\n error.options = options\n \n if (response)\n error.response = {\n status: response.status,\n url: response.url,\n headers: response.headers,\n ok: response.ok,\n type: response.type,\n text: await response.text(),\n redirected: response.redirected\n }\n \n error[inspect.custom] = (depth: number, options: InspectOptions, inspect: Function) => {\n const { colors } = options\n \n let _method: string = method || 'GET'\n if (colors)\n _method = _method.red\n \n let _url = url.toString()\n if (colors)\n _url = _url.blue.underline\n \n let s = '\\n' +\n `${_method} ${_url}\\n`\n \n if (queries && Object.keys(queries).length) {\n let _query = t('请求参数:')\n if (colors)\n _query = _query.yellow\n \n s += _query + '\\n' +\n inspect(queries, options) + '\\n'\n }\n \n if (body !== undefined) {\n let _body = t('请求体:')\n if (colors)\n _body = _body.yellow\n \n s += _body + '\\n' +\n inspect(body, options) + '\\n'\n }\n \n \n if (error.name === 'StatusCodeError') {\n let _status = t('响应状态码:')\n if (colors)\n _status = _status.yellow\n \n let _code = String(response.status)\n if (colors)\n _code = _code.red\n \n s += _status + ' ' + _code + '\\n'\n } else if (error.name === 'TimeoutError') {\n let _timeout = t('超过等待时间:')\n if (colors)\n _timeout = _timeout.red\n \n s += `${_timeout} ${timeout} ms\\n`\n }\n \n \n if (response) {\n let _headers = t('响应头:')\n if (colors)\n _headers = _headers.yellow\n \n s += _headers + '\\n'\n \n for (const [key, value] of response.headers)\n s += `${key}: ${value}\\n`\n \n if ((error as RequestError).response.text) {\n let _body = t('响应体:')\n if (colors)\n _body = _body.yellow\n \n s += _body + '\\n' +\n (error as RequestError).response.text + '\\n'\n }\n }\n \n let _stack = t('调用栈:')\n if (colors)\n _stack = _stack.yellow\n \n s += _stack + '\\n'\n \n if (error.cause)\n s += inspect(error.cause, options) + '\\n'\n \n s += error.stack + '\\n' +\n '\\n'\n \n return s\n }\n \n throw error\n }\n \n if (raw)\n return response\n \n if (!response.body)\n return response.body\n \n // --- decode body\n if (encoding === 'binary')\n return response.arrayBuffer()\n \n encoding ||= /charset=(.*)/.exec(response.headers.get('content-type'))?.[1] as Encoding || 'utf-8'\n \n if (/utf-?8/i.test(encoding))\n return response.text()\n \n return new TextDecoder(encoding)\n .decode(await response.arrayBuffer())\n}\n\n\n/** 发起 http 请求并将响应体作为 json 解析 */\nexport async function request_json <T = any> (url: string | URL, options?: RequestOptions): Promise<T> {\n const resp = await request(url, options)\n if (!resp)\n return\n \n try {\n return JSON.parse(resp)\n } catch (error) {\n console.error(resp)\n throw error\n }\n}\n\n\n/** 使用 $.html(cheerio_element) 来获取 outer html */\nexport async function parse_html (html: string) {\n const { default: cheerio } = await import('cheerio')\n \n let $ = cheerio.load(html, { decodeEntities: false })\n \n Object.defineProperty($, inspect.custom, {\n configurable: true,\n enumerable: false,\n value () {\n return this.html()\n }\n })\n \n Object.defineProperty($.prototype, inspect.custom, {\n configurable: true,\n enumerable: false,\n value (this: cheerio.Cheerio) {\n if (this.length > 1)\n return this.map((index, element) => {\n if (typeof element === 'string') return element\n return $.html(element)\n }).get().join_lines()\n \n return this.toString()\n }\n })\n \n return $\n}\n\n\n/** 使用 $.html(cheerio_element) 来获取 outer html */\nexport async function request_page (url: string | URL, options?: RequestOptions) {\n return parse_html(\n await request(url, options)\n )\n}\n\n\nexport function to_curl (url: string | URL, { queries, headers, method, body, proxy, exe = true }: RequestOptions & { exe?: boolean } = { }) {\n if (proxy === true)\n proxy = process.env.http_proxy\n \n url = url.toString()\n \n if (!url.startsWith('http'))\n url = `http://${url}`\n \n return (exe ? 'curl.exe' : 'curl') + \n ' ' + ( url + (queries ? '?' : '') + qs.stringify(queries) ).quote() +\n // ( typeof proxy === 'undefined' ?\n // ''\n // :\n // ( proxy ? ' --proxy ' + proxy.quote() : ' --noproxy ' + '*'.quote())\n // ) +\n ( proxy ? ` --proxy ${proxy.quote()}` : '' ) +\n ( method && method !== 'GET' ? ` -X ${method}` : '' ) +\n ( headers ? Object.entries(headers).map( ([key, value]) => ' -H ' + `${key}: ${value}`.quote() ).join('') : '' ) +\n ( body ? ' -H ' + 'content-type: application/json'.quote() : '') +\n ( body ? ' --data ' + JSON.stringify(body).quote() : '')\n}\n\n\n\n\n// ------------------------------------ rpc client\n/** post json to http://localhost:8421/api/rpc\n - func: function name\n - args?: argument array\n - options?:\n - ignore?: `false` wait for execution but do not serialize result to response\n - async?: `false` do not wait for exec\n*/\nexport async function rpc (\n func: string, \n args?: any[], \n { url = 'http://localhost:8421/api/rpc', async: _async = false, ignore = false }: { url?: string, async?: boolean, ignore?: boolean } = { }\n) {\n if (!func)\n throw new Error('rpc argument error: no func')\n \n return request_json(url, {\n body: {\n func,\n args,\n async: _async,\n ignore,\n }\n })\n}\n\n\n\nlet decoder = new TextDecoder()\n\nlet encoder = new TextEncoder()\n\n\nexport { WebSocket }\n\n\nexport class WebSocketConnectionError extends Error {\n override name = 'WebSocketConnectionError'\n \n websocket: WebSocket\n \n event: CloseEvent | ErrorEvent\n \n type: 'close' | 'error'\n \n address?: string\n \n errno?: number\n \n port?: number\n \n syscall?: string\n \n /** close 事件时为 close code, error 事件为 error code */\n code?: string | number\n \n reason?: string\n \n \n constructor (websocket: WebSocket, event: CloseEvent | ErrorEvent, message: string = '') {\n super(`${websocket.url} ${t('连接出错了')}. ${message}`)\n \n this.websocket = websocket\n this.event = event\n this.type = event.type as 'close' | 'error'\n \n if (this.type === 'error') {\n const { error } = event as ErrorEvent\n this.address = error.address\n this.code = error.code\n this.errno = error.errno\n this.port = error.port\n this.syscall = error.syscall\n this.reason = error.reason\n \n this.stack = `${this.name}: ${this.message}\\n` +\n error.stack.slice(error.stack.indexOf('\\n') + 1) + '\\n'\n } else {\n this.code = (event as CloseEvent).code\n this.reason = (event as CloseEvent).reason\n }\n }\n}\n\n\n/** 连接 websocket url, 设置各种事件监听器。在 open 事件后 resolve, 返回 websocket \n 遇到 error 时会创建 WebSocketConnectionError: \n - reject 掉返回的 promise (若此时未 settle) \n - 作为参数调用 on_error (已 settle 且有 on_error 回调) \n 可以用 WebSocket.bufferedAmount 来显示大消息的发送进度 \n https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/bufferedAmount\n - url\n - options:\n - protocols?\n - max_payload?: `8 GB`\n - on_message: 根据 websocket frame 的 opcode 不同 (text frame 或 binary frame),event 中的 data 对应为 ArrayBuffer 或者 string \n https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n - on_error?: 在 websocket 出错和非正常关闭 (close, error 事件) 时都调用,可以根据 error.type 来区分,error 的类型是 WebSocketConnectionError, \n type 为 'close' 时有 code 和 reason 属性 \n - on_close?: 和 websocket 的 'close' 事件不相同,只在正常关闭 (close code 为 1000) 时才调用,否则都会调用 on_error \n https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes */\nexport async function connect_websocket (\n url: string | URL,\n {\n protocols,\n max_payload = 2 ** 33, // 8 GB\n on_message,\n on_error,\n on_close\n }: {\n protocols?: string | string[]\n max_payload?: number\n on_message (data: ArrayBuffer | string, websocket: WebSocket): any\n on_error? (error: WebSocketConnectionError, websocket: WebSocket): any\n on_close? (event: CloseEvent, websocket: WebSocket): any\n }\n) {\n let websocket = new WebSocket(url, protocols, {\n maxPayload: max_payload,\n skipUTF8Validation: true\n })\n \n // https://stackoverflow.com/questions/11821096/what-is-the-difference-between-an-arraybuffer-and-a-blob/39951543\n websocket.binaryType = 'arraybuffer'\n \n return new Promise<WebSocket>((resolve, reject) => {\n let settled = false\n \n websocket.addEventListener('open', event => {\n console.log(\n websocket.url +\n (protocols ? \n ' ' + (\n typeof protocols === 'string' ? protocols : protocols.join(', ').bracket('square')\n ).bracket()\n :\n '') +\n t(' 已连接')\n )\n \n settled = true\n resolve(websocket)\n })\n \n websocket.addEventListener('close', event => {\n // https://blog.insiderattack.net/promises-next-ticks-and-immediates-nodejs-event-loop-part-3-9226cbe7a6aa\n // error 事件会先发生,然后 reject(error) 被执行,此时还未轮到外层的 await connect_websocket 执行(在微任务队列中),\n // 接着马上 close 事件也被调用,此时 settled,马上调用了 on_error 函数,弄乱了顺序\n // error 的错误信息比较多,而且通过 await 得到的栈也比较清晰,这里延后调用 on_close 和 on_error,放到微任务队列之后的 timers 队列中\n setTimeout(() => {\n if (event.code === 1000) // 正常关闭\n if (on_close)\n on_close(event, websocket)\n else\n console.log(`${websocket.url} ${t('已正常关闭')}`)\n else { // 异常关闭,认为发生了错误,进行错误处理\n assert(settled, t('websocket close 事件时应该已经 settled'))\n \n const error = new WebSocketConnectionError(websocket, event, `${t('连接被关闭')}, code: ${event.code}${ event.reason ? `, ${t('原因')}: ${event.reason}` : '' }`)\n \n if (on_error)\n on_error(error, websocket)\n else // 既然用户不传 on_error, 就当 unhandled error 抛出来\n throw error\n }\n })\n })\n \n websocket.addEventListener('error', event => {\n const error = new WebSocketConnectionError(websocket, event, event.error?.message)\n \n if (settled) {\n if (on_error)\n on_error(error, websocket)\n else // 既然用户不传 on_error, 就当 unhandled error 抛出来\n throw error\n } else {\n settled = true\n reject(error)\n }\n })\n \n websocket.addEventListener('message', event => {\n on_message(event.data as ArrayBuffer | string, websocket)\n })\n })\n}\n\n\n/** 接收到消息后的处理函数 \n 返回值可以是:\n - 数组: 会自动被封装为 { id: 相同, data: 返回值, done: true } 这样的消息并调用 websocket.send 将其发送\n - void: 什么都不做\n - 以上的 promise */\nexport type MessageHandler = (message: Message, websocket?: WebSocket) => void | any[] | Promise<void | any[]>\n\n\n/** 二进制消息格式 \n - json.length (小端序): 4 字节\n - json 数据\n - binary 数据 */\nexport interface Message <TData extends any[] = any[]> {\n /** rpc id: 在 rpc 系统中认为是唯一的。用来在单个 websocket 连接上复用多个 rpc 请求。多个相同 id 的 message 组成一个请求流 */\n id?: number\n \n /** 只在 rpc 发起时指定被调用的 function name,发起时 rpc 时必传 */\n func?: string\n \n /** 通过这个 flag 主动表明这是发往对方的最后一个 message, 对方可以销毁 handler 了 \n 并非强制,可以不说明,由双方的函数自己约定\n */\n done?: boolean\n \n /** 通知对方这里产生的错误,本质上类似 data 也是一种数据,并不代表 rpc 的结束,后续可能继续有 rpc message 交换 */\n error?: Error\n \n /** data 是一个数组, 作为:\n - rpc 发起方调用 func 的参数,或者请求流 message 携带的数据\n - 结果或者响应流的数据,传给请求发起方\n \n 里面是可序列化为 json 的 js 变量,或者是 Uint8Array \n Uint8Array 的参数处理后被替换为 Uint8Array.byteLength, 并将下标记录在 bins 中\n \n 注意: 数组中如果有 undefined 值,传输到对面会变成 null 值 */\n data?: TData\n \n /** bins: data 中哪些下标对应的原始值是 Uint8Array 类型的,如: [0, 3] */\n bins?: number[]\n}\n\n/** 通过创建 remote 对象对 websocket rpc 进行抽象 \n 调用方使用 remote.call 进行调用 \n 被调方在创建 remote 对象时传入 funcs 注册处理函数,并使用 remote.handle 方法处理 websocket message \n 未连接时自动连接,断开后自动重连 (保证执行 send 时已连接,否则报错) \n 从设计上与 rpc 状态与底层连接的状态无关 (通过传入 url 创建的),底层连接断开后,只要检测到断线,会尝试重连,如果重连成功,则不影响调用的状态 \n @example\n // Zero 继承自 Remote 并通过 call 实现了一些方法\n let zero = new Zero({ local: true })\n \n // 一元 rpc\n await zero.repl_ts('1234')\n \n // 订阅流\n const id = genid()\n \n zero.handlers.set(id, ({ data: [chunk] }: Message<[Uint8Array]>) => {\n term.write(chunk)\n })\n \n zero.send({ id, func: 'subscribe_stdio' }) */\nexport class Remote {\n /** 是否为建立 rpc 连接的发起方 */\n initiator: boolean\n \n /** websocket url */\n url?: string\n \n /** 主动发起 websocket 连接的客户端 (构造函数传 url) 有这个属性 */\n lwebsocket?: Lock<WebSocket>\n \n /** 通过 rpc message.func 被调用的 rpc 函数 */\n funcs: Record<string, MessageHandler>\n \n /** map<id, message handler>: 通过 rpc message.id 找到对应的 handler, unary rpc 接收方不需要设置 handlers, 发送方需要 */\n handlers = new Map<number, MessageHandler>()\n \n \n print = false\n \n pconnect: Promise<any>\n \n \n /** 使用 Uint8Array 作为参数更灵活 https://stackoverflow.com/a/74505197/7609214 */\n static parse <TData extends any[] = any[]> (buffer: Uint8Array) {\n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n \n const len_json = dv.getUint32(0, true)\n \n let offset = 4 + len_json\n \n let message: Message<TData> = JSON.parse(decoder.decode(buffer.subarray(4, offset)))\n \n if (message.bins) {\n const { bins } = message\n let { data } = message\n \n for (const ibin of bins) {\n const len_buf = data[ibin]\n data[ibin] = buffer.subarray(offset, offset + len_buf)\n offset += len_buf\n }\n }\n \n if (message.error)\n message.error = Object.assign(new Error(), message.error)\n \n return message\n }\n \n \n static pack ({ id, func, data = [ ], done, error }: Message) {\n let data_ = new Array(data.length)\n let bins: number[] = [ ]\n let bufs: Uint8Array[] = [ ]\n \n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n if (item instanceof Uint8Array) {\n bins.push(i)\n bufs.push(item)\n data_[i] = item.length\n } else\n data_[i] = item\n }\n \n // 有可能 data_json 含有循环引用导致 JSON.stringify 报错\n const data_json = {\n id,\n ... func ? { func } : { },\n ... done ? { done } : { },\n ... error ? { error } : { },\n ... data_.length ? { data: data_ } : { },\n ... bins.length ? { bins } : { },\n }\n \n const str_json = encoder.encode(JSON.stringify(data_json))\n \n let dv = new DataView(new ArrayBuffer(4))\n \n dv.setUint32(0, str_json.length, true)\n \n return concat([dv, str_json, ... bufs])\n }\n \n \n /** 作为 rpc 发起方,可以通过传入 url 或者 websocket 定义远程 Remote \n 作为 rpc 接收方,可以不传 url 和 websocket 定义本地 Remote */\n constructor ({\n url,\n funcs = { },\n websocket,\n on_error\n }: {\n url?: string\n funcs?: Remote['funcs']\n websocket?: WebSocket\n on_error? (error: WebSocketConnectionError, websocket: WebSocket): void\n } = { }) {\n assert(!(url && websocket), t('构建 Remote 时 url 和 websocket 最多只能传一个'))\n this.initiator = Boolean(url || websocket)\n this.url = url\n this.funcs = funcs\n if (on_error)\n this.on_error = on_error\n this.lwebsocket = new Lock(websocket || null)\n }\n \n \n on_error? (error: WebSocketConnectionError, websocket: WebSocket) {\n throw error\n }\n \n \n /** 幂等,保证 websocket 已连接,否则抛出异常,不需要手动调用,在其它方法中已默认自动重连 \n 作为接收方需要传入使用的 websocket 连接,确保这个这个连接的状态 */\n async connect (websocket?: WebSocket) {\n if (this.initiator)\n if (this.lwebsocket.resource?.readyState === WebSocket.OPEN)\n return\n else if (!this.url)\n throw new Error(t('创建 Remote 时传入的 websocket 连接已断开'))\n else\n // 假设有多个请求想要并发连接 websocket, 且此时 websocket 是断开的状态\n // 应该排队依次连接,而不是后续的连接直接使用第一次连接的 promise,后续调用还是应该尝试重连(不止连接一次)\n return this.lwebsocket.request(async websocket => {\n // 保存的 rpc 状态在 this.handlers, 与 websocket 无关,因此即使断开重连也不影响 rpc 的运行,即\n // 底层连接断开后自动重连对上层应该是无感知的,除非再次连接时失败\n \n if (websocket?.readyState === WebSocket.OPEN)\n return\n else if (!this.url)\n throw new Error(t('创建 Remote 时传入的 websocket 连接已断开'))\n else // 重连\n this.lwebsocket.resource = await connect_websocket(this.url, {\n on_message: (data: ArrayBuffer, websocket) => {\n this.handle(new Uint8Array(data), websocket)\n },\n on_error: this.on_error.bind(this)\n })\n })\n else\n if (websocket.readyState === WebSocket.OPEN)\n return\n else\n throw new Error(t('传入的 websocket 连接已断开'))\n }\n \n \n disconnect () {\n this.lwebsocket.resource?.close(1000)\n }\n \n \n /** 接收 websocket 连接的本地 remote 必传 websocket 参数;发起端选传,如果传了必须等于 this.websocket_lock.resource \n 发送或连接出错时自动清理 message.id 对应的 handler */\n async send (message: Message, websocket?: WebSocket) {\n try {\n if (this.initiator) {\n assert(!websocket || websocket === this.lwebsocket.resource)\n await this.connect()\n websocket = this.lwebsocket.resource\n } else\n await this.connect(websocket)\n \n if (!message.id)\n message.id = genid()\n \n // 不需要独占 websocket\n websocket.send(Remote.pack(message))\n } catch (error) {\n if (message.id)\n this.handlers.delete(message.id)\n throw error\n }\n }\n \n \n /** 处理接收到的 websocket message 并解析, 根据 id dispatch 到对应的 handler 进行处理 \n 如果 message.done == true 则清理 handler \n 如果 handler 返回了值,则包装为 message 发送 \n 使用 Uint8Array 作为参数更灵活 https://stackoverflow.com/a/74505197/7609214 */\n async handle (data: Uint8Array, websocket: WebSocket) {\n const message = Remote.parse(data)\n \n const { id, func, done } = message\n \n if (this.print)\n console.log(message)\n \n let handler: MessageHandler\n \n if (func)\n handler = this.funcs[func]\n else {\n handler = this.handlers.get(id)\n if (done)\n this.handlers.delete(id)\n }\n \n try {\n if (handler) {\n const data = await handler(message, websocket)\n if (data)\n await this.send({ id, data }, websocket)\n } else if (message.error)\n throw message.error\n else\n throw new Error(`${t('找不到 rpc handler')}: ${func ? `func: ${func.quote()}` : `id: ${id}`}`)\n } catch (error) {\n // handler 出错并不意味着 rpc 一定会结束,可能 error 是运行中的正常数据,所以不能清理 handler\n \n if (\n websocket.readyState === WebSocket.OPEN &&\n !message.error // 防止无限循环往对方发送 error, 只有在对方无错误时才可以发送\n )\n await this.send({ id, error, /* 不能设置 done 清理对面 handler, 理由同上 */ }, websocket)\n \n throw error\n }\n }\n \n \n /** 调用 remote 中的 func, 只适用于最简单的一元 rpc (请求, 响应) */\n async call <TReturn extends any[] = any[]> (func: string, args?: any[]) {\n return new Promise<TReturn>(async (resolve, reject) => {\n const id = genid()\n \n this.handlers.set(id, (message: Message<TReturn>) => {\n const { error, data } = message\n if (error)\n reject(error)\n else\n resolve(data)\n this.handlers.delete(id)\n })\n \n try {\n await this.send({ id, func, data: args }) // 不需要 done: true, 因为对面的 remote.handlers 中不会有这个 id 的 handler\n } catch (error) {\n reject(error)\n }\n })\n }\n}\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xshell",
3
- "version": "1.0.21",
3
+ "version": "1.0.22",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "bin": {
@@ -21,15 +21,7 @@
21
21
  },
22
22
  "author": "ShenHongFei <shen.hongfei@outlook.com> (https://github.com/ShenHongFei)",
23
23
  "publisher": "ShenHongFei",
24
- "license": "MIT",
25
- "homepage": "https://github.com/ShenHongFei/xshell",
26
- "repository": {
27
- "type": "git",
28
- "url": "https://github.com/ShenHongFei/xshell.git"
29
- },
30
- "bugs": {
31
- "url": "https://github.com/ShenHongFei/xshell/issues"
32
- },
24
+ "homepage": "https://www.npmjs.com/package/xshell",
33
25
  "icon": "xshell.png",
34
26
  "extensionKind": [
35
27
  "workspace"
@@ -69,20 +61,19 @@
69
61
  "commander": "^10.0.0",
70
62
  "emoji-regex": "^10.2.1",
71
63
  "fetch-cookie": "^2.1.0",
72
- "fs-extra": "^11.1.0",
64
+ "fs-extra": "^11.1.1",
73
65
  "fs-monkey": "^1.0.3",
74
66
  "gulp-sort": "^2.0.0",
75
67
  "hash-string": "^1.0.0",
76
- "i18next": "^22.4.11",
77
- "i18next-scanner": "^4.1.1",
68
+ "i18next": "^22.4.13",
69
+ "i18next-scanner": "^4.2.0",
78
70
  "js-cookie": "^3.0.1",
79
71
  "koa": "^2.14.1",
80
72
  "koa-compress": "^5.1.0",
81
73
  "koa-useragent": "^4.1.0",
82
74
  "lodash": "^4.17.21",
83
75
  "map-stream": "0.0.7",
84
- "memfs": "^3.4.13",
85
- "ora": "^6.1.2",
76
+ "ora": "^6.3.0",
86
77
  "qs": "^6.11.1",
87
78
  "react": "^18.2.0",
88
79
  "react-i18next": "^12.2.0",
@@ -109,12 +100,12 @@
109
100
  "@types/fs-extra": "^11.0.1",
110
101
  "@types/gulp-sort": "2.0.0",
111
102
  "@types/js-cookie": "^3.0.3",
112
- "@types/koa": "^2.13.5",
103
+ "@types/koa": "^2.13.6",
113
104
  "@types/koa-compress": "^4.0.3",
114
- "@types/lodash": "^4.14.191",
115
- "@types/node": "^18.15.3",
105
+ "@types/lodash": "^4.14.192",
106
+ "@types/node": "^18.15.11",
116
107
  "@types/qs": "^6.9.7",
117
- "@types/react": "^18.0.28",
108
+ "@types/react": "^18.0.31",
118
109
  "@types/stream-buffers": "^3.0.4",
119
110
  "@types/through2": "^2.0.38",
120
111
  "@types/tough-cookie": "^4.0.2",
package/repl.js CHANGED
@@ -7,7 +7,7 @@ import ts from 'typescript';
7
7
  const { factory, createPrinter, SyntaxKind, NodeFlags, ModifierFlags, isIdentifier, isNamedImports, isImportDeclaration, isAwaitExpression, isExpressionStatement, isVariableStatement, isNamespaceImport, isClassDeclaration, isCallExpression, isReturnStatement, isBinaryExpression, isFunctionDeclaration, } = ts;
8
8
  import { t } from './i18n/instance.js';
9
9
  import './prototype.js';
10
- import { log_section, log_line, delay, inspect, set_inspect_options, Timer } from './utils.js';
10
+ import { log_line, delay, inspect, set_inspect_options, Timer, delta2str } from './utils.js';
11
11
  import { fread, fwrite } from './file.js';
12
12
  import { Remote } from './net.js';
13
13
  set_inspect_options();
@@ -251,8 +251,8 @@ export async function repl_ts(code) {
251
251
  return __;
252
252
  }
253
253
  export async function start_repl() {
254
- // ------------ load library
255
- log_section(t('xshell 开始启动'), { color: 'green', time: true });
254
+ // ------------ 加载库
255
+ console.log(t('xshell 开始启动').yellow);
256
256
  // --- prevent from exiting
257
257
  process.on('uncaughtException', error => {
258
258
  console.error(error);
@@ -265,7 +265,7 @@ export async function start_repl() {
265
265
  useColors: true,
266
266
  terminal: true,
267
267
  });
268
- log_section(t('nodejs.repl 启动成功'), { color: 'yellow', time: true });
268
+ console.log(t('nodejs.repl 启动成功'));
269
269
  process.title = 'xshell';
270
270
  await Promise.all([
271
271
  pollute_global(),
@@ -287,16 +287,16 @@ export async function start_repl() {
287
287
  })
288
288
  });
289
289
  await server.start();
290
- log_section(t('server 启动成功'), { color: 'green', time: true });
290
+ console.log(t('server 启动成功'));
291
291
  })(),
292
292
  ]);
293
- console.log('-'.repeat(30).red);
294
- log_section(t('xshell 启动成功'), { color: 'red', time: true });
295
- console.log('-'.repeat(30).red);
296
- console.log((t('xshell 正在监听: ') + 'http://localhost:8421').green);
293
+ console.log(('-'.repeat(30) + '\n' +
294
+ t('xshell 启动成功,用时 ') + delta2str(new Date().getTime() - global.started_at.getTime()) + '\n' +
295
+ t('正在监听: http://localhost:8421\n') +
296
+ '-'.repeat(30)).green);
297
297
  }
298
298
  export async function stop() {
299
- log_section(t('xshell 正在退出'), { color: 'red' });
299
+ console.log(t('xshell 正在退出').red);
300
300
  server.stop();
301
301
  }
302
302
  export async function exit() {
@@ -335,7 +335,7 @@ export async function pollute_global() {
335
335
  pollute_module_exports('./server.js'),
336
336
  pollute_module_exports('./repl.js'),
337
337
  ]);
338
- log_section(t('所有模块加载成功'), { color: 'green', time: true });
338
+ console.log(t('所有模块加载成功'));
339
339
  }
340
340
  export async function pollute_module_exports(fp_mod) {
341
341
  Object.assign(global, await import(fp_mod));
package/repl.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["repl.ts"],"names":[],"mappings":"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","sourcesContent":["import nvm from 'vm'\nimport repl from 'repl'\nimport process from 'process'\nimport { fileURLToPath } from 'url'\n\n\nimport path from 'upath'\n\nimport ts from 'typescript'\nimport type {\n SourceFile, Node, Statement, Modifier, Identifier, StringLiteral,\n ExpressionStatement, ObjectBindingPattern, BindingElement,\n SyntaxKind as TSyntaxKind\n} from 'typescript'\nconst {\n factory, createPrinter,\n \n SyntaxKind, NodeFlags, ModifierFlags,\n \n isIdentifier, isNamedImports, isImportDeclaration, isAwaitExpression,\n isExpressionStatement, isVariableStatement,\n isNamespaceImport, isClassDeclaration, isCallExpression, isReturnStatement,\n isBinaryExpression, isFunctionDeclaration,\n} = ts\n\nimport type { Context } from 'koa'\n\n\nimport { t } from './i18n/instance.js'\nimport './prototype.js'\nimport { log_section, log_line, delay, inspect, set_inspect_options, Timer } from './utils.js'\nimport { fread, fwrite } from './file.js'\nimport { Remote } from './net.js'\n\n\ndeclare global {\n var __: any\n \n var started_at: Date\n \n var repl_router: (ctx: Context) => Promise<boolean>\n}\n\n\n\nset_inspect_options()\n\n\n\nlet server: import('./server.js').Server\n\nlet inspection_limit = 10000\nlet printing_compiled_js = false\n\n\n/** 谨慎使用,webpack 打包后可能会变成 /d:/1/mod/node_modules/xshell/ 这样的编译期路径 */\nexport const fpd_root = path.dirname(fileURLToPath(import.meta.url)) + '/'\n\n\nexport function set_inspection_limit (limit: number = 10000) {\n if (limit === -1)\n limit = 50 * 10**4\n inspection_limit = limit\n}\n\n\nexport function set_printing_compiled_js (enabled: boolean) {\n printing_compiled_js = enabled\n}\n\n\n// ------------------------------------ Code Compilers, Transformers\nfunction resolve_kind (kind: TSyntaxKind) {\n return kind === SyntaxKind.VariableStatement ? 'VariableStatement' : SyntaxKind[kind]\n}\n\n\nfunction print_ast (nodes: Node[] | Node, sourceFile: SourceFile) {\n function print_node (node: Node) {\n console.log(`${ resolve_kind(node.kind) }: ${ node.getText(sourceFile) }`)\n }\n if (Array.isArray(nodes))\n nodes.forEach( node => { print_node(node) })\n else\n print_node(nodes)\n}\n\n\nexport function parse_code (code: string) {\n return ts.createSourceFile('repl.ts', code, ts.ScriptTarget.ESNext)\n}\n\n\nexport function generate_code (stmts: Statement[]) {\n return createPrinter({ omitTrailingSemicolon: true, removeComments: false, newLine: ts.NewLineKind.LineFeed })\n .printFile(\n factory.updateSourceFile(\n ts.createSourceFile('output.ts', '', ts.ScriptTarget.ESNext),\n stmts\n )\n )\n}\n\n\n\nfunction trans_import_2_require (import_decl: Statement) {\n if (!isImportDeclaration(import_decl))\n return import_decl\n \n const { importClause: import_clause, moduleSpecifier: module_specifier } = import_decl\n \n // require('module_specifier')\n const require_module_stmt = factory.createCallExpression( factory.createIdentifier('require'), [ ], [ module_specifier ])\n \n // aaa, bbb as ccc, default as ddd, ...\n // (import_clause.namedBindings as NamedImports).elements\n \n return [\n // import mod from 'mod'\n // global.mod = __importDefault(require(\"mod\")).default\n ... import_clause.name ? [\n factory.createExpressionStatement( factory.createAssignment(\n factory.createPropertyAccessExpression( factory.createIdentifier('global'), import_clause.name),\n factory.createPropertyAccessExpression( factory.createCallExpression( factory.createIdentifier('__importDefault'), [ ], [ require_module_stmt ]), 'default'),\n )\n ) ] : [ ],\n \n // import * as mod from 'mod'\n // global.mod = __importStar(require(\"mod\"))\n ... import_clause.namedBindings && isNamespaceImport(import_clause.namedBindings) ? [\n factory.createExpressionStatement( factory.createAssignment(\n factory.createPropertyAccessExpression( factory.createIdentifier('global'), import_clause.namedBindings.name),\n factory.createCallExpression( factory.createIdentifier('__importStar'), [ ], [ require_module_stmt ])\n ))\n ] : [ ],\n \n \n // import { element2 as element2_, element3 as element3_, other, default as mod2 } from 'mod2'\n ... import_clause.namedBindings && isNamedImports(import_clause.namedBindings) ? [\n // var { element2: element2_, element3 } = __importDefault(require(\"mod\"))\n factory.createVariableStatement([ ], [ factory.createVariableDeclaration(\n factory.createObjectBindingPattern(\n // ImportSpecifier[] -> ObjectBindingPattern.BindingElement[]\n import_clause.namedBindings.elements.map( import_specifier => \n factory.createBindingElement(\n undefined, \n import_specifier.propertyName, \n import_specifier.name, \n import_specifier.propertyName?.text === 'default' ? require_module_stmt : undefined\n ))),\n undefined,\n undefined,\n require_module_stmt\n ) ]),\n \n // Object.assign(global, { element2_, element3 })\n factory.createExpressionStatement( factory.createCallExpression(\n factory.createPropertyAccessExpression( factory.createIdentifier('Object'), 'assign'),\n [ ],\n // ImportSpecifier[] -> ObjectBindingPattern.BindingElement[]\n [ factory.createIdentifier('global'), factory.createObjectLiteralExpression( import_clause.namedBindings.elements.map( import_specifier => factory.createShorthandPropertyAssignment(import_specifier.name) ), false) ]\n )),\n \n factory.createExpressionStatement(\n import_clause.namedBindings.elements.length === 1 ? \n // (a)\n factory.createParenthesizedExpression(import_clause.namedBindings.elements[0].name)\n : // ({ a: xxx, b: xxx })\n factory.createObjectLiteralExpression( import_clause.namedBindings.elements.map( import_specifier => factory.createShorthandPropertyAssignment(import_specifier.name) ), false)\n )\n ] : [ ],\n ]\n}\n\n\n/** export function foo () { } */\nfunction trans_export_stmt (stmt: Statement) {\n if (ts.isExportAssignment(stmt))\n return factory.createExpressionStatement(stmt.expression)\n \n function is_export_modifier (modifier: Modifier) {\n return modifier.flags & ModifierFlags.Export || modifier.flags & ModifierFlags.ExportDefault || modifier.kind === SyntaxKind.ExportKeyword\n }\n \n // @ts-ignore\n if (stmt.modifiers?.some( modifier => is_export_modifier(modifier) )) {\n // @ts-ignore\n stmt.modifiers = factory.createNodeArray<Modifier>(\n // @ts-ignore\n stmt.modifiers.filter( modifier => !is_export_modifier(modifier) )\n )\n return stmt\n }\n \n return stmt\n}\n\n\n/** const a = 123, b = 234, { c, d: e } = obj */\nfunction trans_variable_decl_2_var (var_decl: Statement) {\n if (!isVariableStatement(var_decl)) return var_decl\n // @ts-ignore\n var_decl.declarationList.flags = NodeFlags.None\n return var_decl\n}\n\n\nfunction trans_class_decl_2_expr (class_decl: Statement) {\n if (!isClassDeclaration(class_decl)) return class_decl\n \n // export class C { } 这样的语句已经在 trans_export_stmt 中被去掉了 export modifier\n \n return factory.createVariableStatement(\n [ ],\n factory.createVariableDeclarationList([\n factory.createVariableDeclaration(\n class_decl.name, \n undefined, \n undefined, \n factory.createClassExpression(undefined, class_decl.name, undefined, undefined, class_decl.members)\n )\n ]))\n}\n\n\nfunction get_expr_of_stmt (statement: Statement): ExpressionStatement | Statement {\n if (isExpressionStatement(statement))\n return statement\n \n if (isVariableStatement(statement)) {\n const { declarations } = statement.declarationList\n return factory.createExpressionStatement(\n declarations.length === 1 ?\n (() => {\n const { name } = declarations[0]\n if (isIdentifier(name)) // const a = c\n return name\n else // const { a, b } = c\n return factory.createObjectLiteralExpression(\n name.elements\n .filter(({ name }: BindingElement) => name && isIdentifier(name))\n .map(({ name }: BindingElement) => \n factory.createShorthandPropertyAssignment(name as Identifier))\n )\n })()\n :\n factory.createObjectLiteralExpression(\n declarations.map( var_decl => \n factory.createShorthandPropertyAssignment(var_decl.name as Identifier)),\n true)\n )\n }\n \n if (isFunctionDeclaration(statement))\n return factory.createExpressionStatement(statement.name)\n \n return statement\n}\n\nfunction trans_return_2_expr (stmt: Statement): Statement {\n if (!isReturnStatement(stmt)) return stmt\n return factory.createExpressionStatement(stmt.expression)\n}\n\n\nfunction assign_var_decl (var_decl: Statement, destination: string = 'global') {\n if (!isVariableStatement(var_decl))\n return [var_decl]\n \n // VariableDeclaration[] -> ObjectLiteral[]\n // const a = 123, b = 234, { c, d: e } = obj\n const obj_literal =\n factory.createObjectLiteralExpression(\n var_decl.declarationList.declarations.map( declaration => \n isIdentifier(declaration.name) ?\n [ factory.createShorthandPropertyAssignment(declaration.name) ]\n : // ObjectBindingPattern\n (declaration.name as ObjectBindingPattern).elements.map( (element: BindingElement) => factory.createShorthandPropertyAssignment(element.name as Identifier))\n ).flat()\n , true\n )\n \n \n return [\n var_decl,\n factory.createExpressionStatement( factory.createCallExpression(\n factory.createPropertyAccessExpression( factory.createIdentifier('Object'), 'assign'),\n [ ],\n [ factory.createIdentifier(destination), obj_literal ]\n )),\n factory.createExpressionStatement(obj_literal)\n ]\n}\n\n\nfunction return_last_expr (statements: Statement[]) {\n if (!statements.length) return statements\n \n const last_expr = get_expr_of_stmt(statements.last)\n if (isExpressionStatement(last_expr))\n return [ ...statements.slice(0, -1), factory.createReturnStatement(last_expr.expression) ]\n else\n return statements\n}\n\n\nfunction wrap_await_stmt (statements: Statement[], code: string) {\n function wrap (stmts: Statement[]) {\n return [\n factory.createExpressionStatement(\n factory.createCallExpression(\n factory.createFunctionExpression(\n [ factory.createModifier(SyntaxKind.AsyncKeyword) ],\n undefined,\n 'async_wrapper',\n [ ],\n [ ],\n undefined,\n factory.createBlock(\n return_last_expr(\n stmts.map(statement => assign_var_decl(statement)).flat()\n )\n , true)\n ),\n [ ],\n [ ]\n )\n ),\n ]\n }\n \n if (!code.includes('await')) return statements\n \n if (code.includes('await') && !code.includes('async ')) return wrap(statements)\n \n if (statements.some( stmt => (\n isExpressionStatement(stmt) && isAwaitExpression(stmt.expression) ||\n isVariableStatement(stmt) && stmt.declarationList.declarations.some( var_decl => \n var_decl.initializer && isAwaitExpression(var_decl.initializer)\n ) ||\n isExpressionStatement(stmt) && isCallExpression(stmt.expression) && stmt.expression.arguments.some( expr => isAwaitExpression(expr)) ||\n isExpressionStatement(stmt) && isBinaryExpression(stmt.expression) && isAwaitExpression(stmt.expression.right)\n )))\n return wrap(statements)\n \n return statements\n}\n\n\nexport async function compile_ts ({\n fp, \n code, \n print = printing_compiled_js, \n save = false,\n}: {\n fp?: string\n code?: string\n print?: boolean\n save?: boolean\n} = { }): Promise<string> {\n if (!code && fp)\n code = await fread(fp)\n \n const source_file = parse_code(code)\n \n let statements: Statement[] = [...source_file.statements]\n statements = statements.map(trans_import_2_require).flat()\n statements = statements.map(trans_export_stmt)\n statements = statements.map(trans_class_decl_2_expr)\n statements = wrap_await_stmt(statements, code)\n statements = statements.map(trans_variable_decl_2_var)\n statements = statements.map(trans_return_2_expr)\n \n if (statements.length) {\n const last_stmt = statements[statements.length - 1]\n const last_expr = get_expr_of_stmt(last_stmt)\n if (last_expr !== last_stmt)\n statements = [...statements, last_expr]\n }\n \n \n code = generate_code(statements)\n \n let { diagnostics, outputText: output_text } = ts.transpileModule(code, { compilerOptions: ts_options_commonjs_repl })\n \n if (diagnostics.length) {\n console.log(diagnostics.join('\\n\\n\\n'))\n log_line()\n }\n \n if (print) {\n console.log(output_text)\n log_line()\n }\n \n if (fp && save)\n await fwrite(fp.replace(/\\.ts(x?)$/, '.js$1'), output_text)\n \n return output_text\n}\n\n\n/** tsconfig.compilerOptions */\nexport let ts_options: any\nexport let ts_options_commonjs: any\nexport let ts_options_commonjs_repl: any\n\nexport async function load_tsconfig () {\n const fp = `${fpd_root}tsconfig.json`\n ;({ config: { compilerOptions: ts_options } } = ts.parseConfigFileTextToJson(\n fp, \n await fread(fp, { print: false })\n ))\n \n ts_options_commonjs = {\n ...ts_options,\n \n module: 'CommonJS',\n incremental: false,\n \n // determine CommonJS module require method\n esModuleInterop: true,\n }\n \n ts_options_commonjs_repl = {\n ...ts_options,\n \n module: 'CommonJS',\n esModuleInterop: true,\n \n // nvm.runInThisContext doesn't support inline source map\n sourceMap: false,\n }\n}\n\n\nlet eval_id = 0\n\nexport async function eval_ts (code: string) {\n return nvm.runInThisContext(\n await compile_ts({ code }),\n `repl/${eval_id++}.ts`\n )\n}\n\n\n// ------------------------------------ repl\nexport async function repl_ts (code: string) {\n console.log() // 离之前的输出有一个空行\n \n const timer = new Timer()\n const __ = global.__ = await eval_ts(code)\n timer.stop()\n \n console.log(inspect(__, { limit: inspection_limit }))\n if (timer.get() >= 500)\n timer.print()\n \n return __\n}\n\n\nexport async function start_repl () {\n // ------------ load library\n log_section(t('xshell 开始启动'), { color: 'green', time: true })\n \n // --- prevent from exiting\n process.on('uncaughtException', error => {\n console.error(error)\n })\n \n // --- start nodejs repl\n repl.start({\n prompt: '',\n replMode: repl.REPL_MODE_SLOPPY,\n useGlobal: true,\n useColors: true,\n terminal: true,\n })\n \n log_section(t('nodejs.repl 启动成功'), { color: 'yellow', time: true })\n \n process.title = 'xshell'\n \n await Promise.all([\n pollute_global(),\n \n load_tsconfig(),\n \n (async () => {\n // --- http server\n let { Server } = await import('./server.js')\n server = new Server(8421, {\n remote: new Remote({\n funcs: {\n echo ({ data: [data] }) {\n console.log('echo:', data)\n return [data]\n },\n \n async repl_ts ({ data: [code] }) {\n return [await repl_ts(code)]\n }\n }\n })\n })\n await server.start()\n log_section(t('server 启动成功'), { color: 'green', time: true })\n })(),\n ])\n \n console.log('-'.repeat(30).red)\n log_section(t('xshell 启动成功'), { color: 'red', time: true })\n console.log('-'.repeat(30).red)\n \n console.log((t('xshell 正在监听: ') + 'http://localhost:8421').green)\n}\n\n\nexport async function stop () {\n log_section(t('xshell 正在退出'), { color: 'red' })\n \n server.stop()\n}\n\nexport async function exit () {\n await stop()\n await delay(100)\n process.exit()\n}\n\n\nexport async function pollute_global () {\n Object.assign(global, {\n __importDefault: (mod: any) => ((mod?.__esModule) ? mod : { default: mod }),\n __importStar: (mod: any) => {\n if (mod?.__esModule) return mod\n let result: { default?: any } = { }\n if (mod != null)\n for (let k in mod)\n if (Object.hasOwnProperty.call(mod, k))\n result[k] = mod[k]\n result.default = mod\n return result\n },\n exports: global\n })\n \n await Promise.all([\n pollute_module_default_export('upath', 'path'),\n pollute_module_default_export('cheerio', 'cheerio'),\n \n pollute_module_default_export('lodash/omit.js', 'omit'),\n pollute_module_default_export('lodash/sortBy.js', 'sort_by'),\n pollute_module_default_export('lodash/groupBy.js', 'group_by'),\n \n pollute_module_default_export('qs', 'qs'),\n \n pollute_module_exports('./prototype.js'),\n pollute_module_exports('./utils.js'),\n pollute_module_exports('./process.js'),\n pollute_module_exports('./file.js'),\n pollute_module_exports('./net.js'),\n pollute_module_exports('./server.js'),\n pollute_module_exports('./repl.js'),\n ])\n \n log_section(t('所有模块加载成功'), { color: 'green', time: true })\n}\n\n\nexport async function pollute_module_exports (fp_mod: string) {\n Object.assign(\n global,\n await import(fp_mod)\n )\n}\n\nexport async function pollute_module_default_export (fp_mod: string, name: string) {\n global[name] = (\n await import(fp_mod)\n ).default\n}\n\n"]}
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["repl.ts"],"names":[],"mappings":"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","sourcesContent":["import nvm from 'vm'\nimport repl from 'repl'\nimport process from 'process'\nimport { fileURLToPath } from 'url'\n\n\nimport path from 'upath'\n\nimport ts from 'typescript'\nimport type {\n SourceFile, Node, Statement, Modifier, Identifier, StringLiteral,\n ExpressionStatement, ObjectBindingPattern, BindingElement,\n SyntaxKind as TSyntaxKind\n} from 'typescript'\nconst {\n factory, createPrinter,\n \n SyntaxKind, NodeFlags, ModifierFlags,\n \n isIdentifier, isNamedImports, isImportDeclaration, isAwaitExpression,\n isExpressionStatement, isVariableStatement,\n isNamespaceImport, isClassDeclaration, isCallExpression, isReturnStatement,\n isBinaryExpression, isFunctionDeclaration,\n} = ts\n\nimport type { Context } from 'koa'\n\n\nimport { t } from './i18n/instance.js'\nimport './prototype.js'\nimport { log_line, delay, inspect, set_inspect_options, Timer, delta2str } from './utils.js'\nimport { fread, fwrite } from './file.js'\nimport { Remote } from './net.js'\n\n\ndeclare global {\n var __: any\n \n var started_at: Date\n \n var repl_router: (ctx: Context) => Promise<boolean>\n}\n\n\n\nset_inspect_options()\n\n\n\nlet server: import('./server.js').Server\n\nlet inspection_limit = 10000\nlet printing_compiled_js = false\n\n\n/** 谨慎使用,webpack 打包后可能会变成 /d:/1/mod/node_modules/xshell/ 这样的编译期路径 */\nexport const fpd_root = path.dirname(fileURLToPath(import.meta.url)) + '/'\n\n\nexport function set_inspection_limit (limit: number = 10000) {\n if (limit === -1)\n limit = 50 * 10**4\n inspection_limit = limit\n}\n\n\nexport function set_printing_compiled_js (enabled: boolean) {\n printing_compiled_js = enabled\n}\n\n\n// ------------------------------------ Code Compilers, Transformers\nfunction resolve_kind (kind: TSyntaxKind) {\n return kind === SyntaxKind.VariableStatement ? 'VariableStatement' : SyntaxKind[kind]\n}\n\n\nfunction print_ast (nodes: Node[] | Node, sourceFile: SourceFile) {\n function print_node (node: Node) {\n console.log(`${ resolve_kind(node.kind) }: ${ node.getText(sourceFile) }`)\n }\n if (Array.isArray(nodes))\n nodes.forEach( node => { print_node(node) })\n else\n print_node(nodes)\n}\n\n\nexport function parse_code (code: string) {\n return ts.createSourceFile('repl.ts', code, ts.ScriptTarget.ESNext)\n}\n\n\nexport function generate_code (stmts: Statement[]) {\n return createPrinter({ omitTrailingSemicolon: true, removeComments: false, newLine: ts.NewLineKind.LineFeed })\n .printFile(\n factory.updateSourceFile(\n ts.createSourceFile('output.ts', '', ts.ScriptTarget.ESNext),\n stmts\n )\n )\n}\n\n\n\nfunction trans_import_2_require (import_decl: Statement) {\n if (!isImportDeclaration(import_decl))\n return import_decl\n \n const { importClause: import_clause, moduleSpecifier: module_specifier } = import_decl\n \n // require('module_specifier')\n const require_module_stmt = factory.createCallExpression( factory.createIdentifier('require'), [ ], [ module_specifier ])\n \n // aaa, bbb as ccc, default as ddd, ...\n // (import_clause.namedBindings as NamedImports).elements\n \n return [\n // import mod from 'mod'\n // global.mod = __importDefault(require(\"mod\")).default\n ... import_clause.name ? [\n factory.createExpressionStatement( factory.createAssignment(\n factory.createPropertyAccessExpression( factory.createIdentifier('global'), import_clause.name),\n factory.createPropertyAccessExpression( factory.createCallExpression( factory.createIdentifier('__importDefault'), [ ], [ require_module_stmt ]), 'default'),\n )\n ) ] : [ ],\n \n // import * as mod from 'mod'\n // global.mod = __importStar(require(\"mod\"))\n ... import_clause.namedBindings && isNamespaceImport(import_clause.namedBindings) ? [\n factory.createExpressionStatement( factory.createAssignment(\n factory.createPropertyAccessExpression( factory.createIdentifier('global'), import_clause.namedBindings.name),\n factory.createCallExpression( factory.createIdentifier('__importStar'), [ ], [ require_module_stmt ])\n ))\n ] : [ ],\n \n \n // import { element2 as element2_, element3 as element3_, other, default as mod2 } from 'mod2'\n ... import_clause.namedBindings && isNamedImports(import_clause.namedBindings) ? [\n // var { element2: element2_, element3 } = __importDefault(require(\"mod\"))\n factory.createVariableStatement([ ], [ factory.createVariableDeclaration(\n factory.createObjectBindingPattern(\n // ImportSpecifier[] -> ObjectBindingPattern.BindingElement[]\n import_clause.namedBindings.elements.map( import_specifier => \n factory.createBindingElement(\n undefined, \n import_specifier.propertyName, \n import_specifier.name, \n import_specifier.propertyName?.text === 'default' ? require_module_stmt : undefined\n ))),\n undefined,\n undefined,\n require_module_stmt\n ) ]),\n \n // Object.assign(global, { element2_, element3 })\n factory.createExpressionStatement( factory.createCallExpression(\n factory.createPropertyAccessExpression( factory.createIdentifier('Object'), 'assign'),\n [ ],\n // ImportSpecifier[] -> ObjectBindingPattern.BindingElement[]\n [ factory.createIdentifier('global'), factory.createObjectLiteralExpression( import_clause.namedBindings.elements.map( import_specifier => factory.createShorthandPropertyAssignment(import_specifier.name) ), false) ]\n )),\n \n factory.createExpressionStatement(\n import_clause.namedBindings.elements.length === 1 ? \n // (a)\n factory.createParenthesizedExpression(import_clause.namedBindings.elements[0].name)\n : // ({ a: xxx, b: xxx })\n factory.createObjectLiteralExpression( import_clause.namedBindings.elements.map( import_specifier => factory.createShorthandPropertyAssignment(import_specifier.name) ), false)\n )\n ] : [ ],\n ]\n}\n\n\n/** export function foo () { } */\nfunction trans_export_stmt (stmt: Statement) {\n if (ts.isExportAssignment(stmt))\n return factory.createExpressionStatement(stmt.expression)\n \n function is_export_modifier (modifier: Modifier) {\n return modifier.flags & ModifierFlags.Export || modifier.flags & ModifierFlags.ExportDefault || modifier.kind === SyntaxKind.ExportKeyword\n }\n \n // @ts-ignore\n if (stmt.modifiers?.some( modifier => is_export_modifier(modifier) )) {\n // @ts-ignore\n stmt.modifiers = factory.createNodeArray<Modifier>(\n // @ts-ignore\n stmt.modifiers.filter( modifier => !is_export_modifier(modifier) )\n )\n return stmt\n }\n \n return stmt\n}\n\n\n/** const a = 123, b = 234, { c, d: e } = obj */\nfunction trans_variable_decl_2_var (var_decl: Statement) {\n if (!isVariableStatement(var_decl)) return var_decl\n // @ts-ignore\n var_decl.declarationList.flags = NodeFlags.None\n return var_decl\n}\n\n\nfunction trans_class_decl_2_expr (class_decl: Statement) {\n if (!isClassDeclaration(class_decl)) return class_decl\n \n // export class C { } 这样的语句已经在 trans_export_stmt 中被去掉了 export modifier\n \n return factory.createVariableStatement(\n [ ],\n factory.createVariableDeclarationList([\n factory.createVariableDeclaration(\n class_decl.name, \n undefined, \n undefined, \n factory.createClassExpression(undefined, class_decl.name, undefined, undefined, class_decl.members)\n )\n ]))\n}\n\n\nfunction get_expr_of_stmt (statement: Statement): ExpressionStatement | Statement {\n if (isExpressionStatement(statement))\n return statement\n \n if (isVariableStatement(statement)) {\n const { declarations } = statement.declarationList\n return factory.createExpressionStatement(\n declarations.length === 1 ?\n (() => {\n const { name } = declarations[0]\n if (isIdentifier(name)) // const a = c\n return name\n else // const { a, b } = c\n return factory.createObjectLiteralExpression(\n name.elements\n .filter(({ name }: BindingElement) => name && isIdentifier(name))\n .map(({ name }: BindingElement) => \n factory.createShorthandPropertyAssignment(name as Identifier))\n )\n })()\n :\n factory.createObjectLiteralExpression(\n declarations.map( var_decl => \n factory.createShorthandPropertyAssignment(var_decl.name as Identifier)),\n true)\n )\n }\n \n if (isFunctionDeclaration(statement))\n return factory.createExpressionStatement(statement.name)\n \n return statement\n}\n\nfunction trans_return_2_expr (stmt: Statement): Statement {\n if (!isReturnStatement(stmt)) return stmt\n return factory.createExpressionStatement(stmt.expression)\n}\n\n\nfunction assign_var_decl (var_decl: Statement, destination: string = 'global') {\n if (!isVariableStatement(var_decl))\n return [var_decl]\n \n // VariableDeclaration[] -> ObjectLiteral[]\n // const a = 123, b = 234, { c, d: e } = obj\n const obj_literal =\n factory.createObjectLiteralExpression(\n var_decl.declarationList.declarations.map( declaration => \n isIdentifier(declaration.name) ?\n [ factory.createShorthandPropertyAssignment(declaration.name) ]\n : // ObjectBindingPattern\n (declaration.name as ObjectBindingPattern).elements.map( (element: BindingElement) => factory.createShorthandPropertyAssignment(element.name as Identifier))\n ).flat()\n , true\n )\n \n \n return [\n var_decl,\n factory.createExpressionStatement( factory.createCallExpression(\n factory.createPropertyAccessExpression( factory.createIdentifier('Object'), 'assign'),\n [ ],\n [ factory.createIdentifier(destination), obj_literal ]\n )),\n factory.createExpressionStatement(obj_literal)\n ]\n}\n\n\nfunction return_last_expr (statements: Statement[]) {\n if (!statements.length) return statements\n \n const last_expr = get_expr_of_stmt(statements.last)\n if (isExpressionStatement(last_expr))\n return [ ...statements.slice(0, -1), factory.createReturnStatement(last_expr.expression) ]\n else\n return statements\n}\n\n\nfunction wrap_await_stmt (statements: Statement[], code: string) {\n function wrap (stmts: Statement[]) {\n return [\n factory.createExpressionStatement(\n factory.createCallExpression(\n factory.createFunctionExpression(\n [ factory.createModifier(SyntaxKind.AsyncKeyword) ],\n undefined,\n 'async_wrapper',\n [ ],\n [ ],\n undefined,\n factory.createBlock(\n return_last_expr(\n stmts.map(statement => assign_var_decl(statement)).flat()\n )\n , true)\n ),\n [ ],\n [ ]\n )\n ),\n ]\n }\n \n if (!code.includes('await')) return statements\n \n if (code.includes('await') && !code.includes('async ')) return wrap(statements)\n \n if (statements.some( stmt => (\n isExpressionStatement(stmt) && isAwaitExpression(stmt.expression) ||\n isVariableStatement(stmt) && stmt.declarationList.declarations.some( var_decl => \n var_decl.initializer && isAwaitExpression(var_decl.initializer)\n ) ||\n isExpressionStatement(stmt) && isCallExpression(stmt.expression) && stmt.expression.arguments.some( expr => isAwaitExpression(expr)) ||\n isExpressionStatement(stmt) && isBinaryExpression(stmt.expression) && isAwaitExpression(stmt.expression.right)\n )))\n return wrap(statements)\n \n return statements\n}\n\n\nexport async function compile_ts ({\n fp, \n code, \n print = printing_compiled_js, \n save = false,\n}: {\n fp?: string\n code?: string\n print?: boolean\n save?: boolean\n} = { }): Promise<string> {\n if (!code && fp)\n code = await fread(fp)\n \n const source_file = parse_code(code)\n \n let statements: Statement[] = [...source_file.statements]\n statements = statements.map(trans_import_2_require).flat()\n statements = statements.map(trans_export_stmt)\n statements = statements.map(trans_class_decl_2_expr)\n statements = wrap_await_stmt(statements, code)\n statements = statements.map(trans_variable_decl_2_var)\n statements = statements.map(trans_return_2_expr)\n \n if (statements.length) {\n const last_stmt = statements[statements.length - 1]\n const last_expr = get_expr_of_stmt(last_stmt)\n if (last_expr !== last_stmt)\n statements = [...statements, last_expr]\n }\n \n \n code = generate_code(statements)\n \n let { diagnostics, outputText: output_text } = ts.transpileModule(code, { compilerOptions: ts_options_commonjs_repl })\n \n if (diagnostics.length) {\n console.log(diagnostics.join('\\n\\n\\n'))\n log_line()\n }\n \n if (print) {\n console.log(output_text)\n log_line()\n }\n \n if (fp && save)\n await fwrite(fp.replace(/\\.ts(x?)$/, '.js$1'), output_text)\n \n return output_text\n}\n\n\n/** tsconfig.compilerOptions */\nexport let ts_options: any\nexport let ts_options_commonjs: any\nexport let ts_options_commonjs_repl: any\n\nexport async function load_tsconfig () {\n const fp = `${fpd_root}tsconfig.json`\n ;({ config: { compilerOptions: ts_options } } = ts.parseConfigFileTextToJson(\n fp, \n await fread(fp, { print: false })\n ))\n \n ts_options_commonjs = {\n ...ts_options,\n \n module: 'CommonJS',\n incremental: false,\n \n // determine CommonJS module require method\n esModuleInterop: true,\n }\n \n ts_options_commonjs_repl = {\n ...ts_options,\n \n module: 'CommonJS',\n esModuleInterop: true,\n \n // nvm.runInThisContext doesn't support inline source map\n sourceMap: false,\n }\n}\n\n\nlet eval_id = 0\n\nexport async function eval_ts (code: string) {\n return nvm.runInThisContext(\n await compile_ts({ code }),\n `repl/${eval_id++}.ts`\n )\n}\n\n\n// ------------------------------------ repl\nexport async function repl_ts (code: string) {\n console.log() // 离之前的输出有一个空行\n \n const timer = new Timer()\n const __ = global.__ = await eval_ts(code)\n timer.stop()\n \n console.log(inspect(__, { limit: inspection_limit }))\n if (timer.get() >= 500)\n timer.print()\n \n return __\n}\n\n\nexport async function start_repl () {\n // ------------ 加载库\n console.log(t('xshell 开始启动').yellow)\n \n // --- prevent from exiting\n process.on('uncaughtException', error => {\n console.error(error)\n })\n \n // --- start nodejs repl\n repl.start({\n prompt: '',\n replMode: repl.REPL_MODE_SLOPPY,\n useGlobal: true,\n useColors: true,\n terminal: true,\n })\n \n console.log(t('nodejs.repl 启动成功'))\n \n process.title = 'xshell'\n \n await Promise.all([\n pollute_global(),\n \n load_tsconfig(),\n \n (async () => {\n // --- http server\n let { Server } = await import('./server.js')\n server = new Server(8421, {\n remote: new Remote({\n funcs: {\n echo ({ data: [data] }) {\n console.log('echo:', data)\n return [data]\n },\n \n async repl_ts ({ data: [code] }) {\n return [await repl_ts(code)]\n }\n }\n })\n })\n await server.start()\n console.log(t('server 启动成功'))\n })(),\n ])\n \n console.log((\n '-'.repeat(30) + '\\n' +\n t('xshell 启动成功,用时 ') + delta2str(new Date().getTime() - global.started_at.getTime()) + '\\n' +\n t('正在监听: http://localhost:8421\\n') +\n '-'.repeat(30)\n ).green)\n}\n\n\nexport async function stop () {\n console.log(t('xshell 正在退出').red)\n \n server.stop()\n}\n\nexport async function exit () {\n await stop()\n await delay(100)\n process.exit()\n}\n\n\nexport async function pollute_global () {\n Object.assign(global, {\n __importDefault: (mod: any) => ((mod?.__esModule) ? mod : { default: mod }),\n __importStar: (mod: any) => {\n if (mod?.__esModule) return mod\n let result: { default?: any } = { }\n if (mod != null)\n for (let k in mod)\n if (Object.hasOwnProperty.call(mod, k))\n result[k] = mod[k]\n result.default = mod\n return result\n },\n exports: global\n })\n \n await Promise.all([\n pollute_module_default_export('upath', 'path'),\n pollute_module_default_export('cheerio', 'cheerio'),\n \n pollute_module_default_export('lodash/omit.js', 'omit'),\n pollute_module_default_export('lodash/sortBy.js', 'sort_by'),\n pollute_module_default_export('lodash/groupBy.js', 'group_by'),\n \n pollute_module_default_export('qs', 'qs'),\n \n pollute_module_exports('./prototype.js'),\n pollute_module_exports('./utils.js'),\n pollute_module_exports('./process.js'),\n pollute_module_exports('./file.js'),\n pollute_module_exports('./net.js'),\n pollute_module_exports('./server.js'),\n pollute_module_exports('./repl.js'),\n ])\n \n console.log(t('所有模块加载成功'))\n}\n\n\nexport async function pollute_module_exports (fp_mod: string) {\n Object.assign(\n global,\n await import(fp_mod)\n )\n}\n\nexport async function pollute_module_default_export (fp_mod: string, name: string) {\n global[name] = (\n await import(fp_mod)\n ).default\n}\n\n"]}