xshell 1.0.6 → 1.0.8

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.
@@ -0,0 +1,34 @@
1
+ # (node:23592) UnsupportedWarning: Status message is not supported by HTTP/2 (RFC7540 8.1.2.4)
2
+ # at statusMessageWarn (node:internal/http2/compat:118:13)
3
+ # at Http2ServerResponse.get statusMessage [as statusMessage] (node:internal/http2/compat:649:5)
4
+ # at Object.get message [as message] (d:\0\node_modules\koa\lib\response.js:102:21)
5
+ # at d:\0\node_modules\only\index.js:6:20
6
+ # at Array.reduce (<anonymous>)
7
+ # at module.exports (d:\0\node_modules\only\index.js:5:15)
8
+ # at Object.toJSON (d:\0\node_modules\koa\lib\response.js:560:12)
9
+ # at Object.toJSON (d:\0\node_modules\koa\lib\context.js:51:31)
10
+ # at Object.inspect (d:\0\node_modules\koa\lib\context.js:33:17)
11
+ # at formatValue (node:internal/util/inspect:761:19)
12
+ #
13
+ # 复现方法
14
+ # ctx.throw 后触发 app.on('error', (error, ctx) => ...)
15
+ # 打印了 ctx, inspect ctx 时出现错误
16
+ #
17
+ # 解决方法
18
+ # D:/0/node_modules/koa/lib/response.js#toJSON
19
+ # 注释掉 message
20
+ # 或者 console.log(ctx) 改为 console.log(ctx.reqeust)
21
+
22
+ diff --git a/lib/response.js b/lib/response.js
23
+ index 54f9d49f788b3640527cf44dd431c0bc930afb2f..8c935617304de5d9e0fced0565b7140593b5e4fb 100644
24
+ --- a/lib/response.js
25
+ +++ b/lib/response.js
26
+ @@ -561,7 +561,7 @@ module.exports = {
27
+ toJSON() {
28
+ return only(this, [
29
+ 'status',
30
+ - 'message',
31
+ + // 'message',
32
+ 'header'
33
+ ]);
34
+ },
package/process.js CHANGED
@@ -159,7 +159,7 @@ export async function call(exe, args = [], options = {}) {
159
159
  }
160
160
  };
161
161
  if (code && throw_code)
162
- throw Object.assign(new Error(message), result);
162
+ throw Object.assign(new Error(message), { result });
163
163
  return result;
164
164
  }
165
165
  /** call node <js> for result
package/process.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["process.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n spawn,\n type SpawnOptions,\n type ChildProcess\n} from 'child_process'\nimport { Readable } from 'stream'\nimport { userInfo } from 'os'\n\nimport iconv from 'iconv-lite'\n\nimport { t } from './i18n/instance.js'\n\nimport './prototype.js'\nimport { Encoding } from './file.js'\nimport { inspect } from './utils.js'\n\n\nexport const exe_nodejs = process.execPath.to_slash()\n\n\n// ------------------------------------ start & call\ninterface StartOptions {\n /** `继承当前工作目录 process.cwd()` 子进程的工作目录 `inherit the cwd` cwd of the child process. */\n cwd?: string\n \n /** `process.env` 覆盖/添加到 process.env 的环境变量 overwrite/add to process.env */\n env?: Record<string, string>\n \n /** `'utf-8'` 子进程输出编码 child output encoding */\n encoding?: Encoding\n \n /** `true` print 选项,支持设置细项 print option (with details) */\n print?: boolean | {\n stdout: boolean\n stderr: boolean\n command: boolean\n code: boolean\n }\n \n /** `'pipe'` 设置为 'ignore' 时忽略 stdio 处理 when 'ignore' then ignore stdio processing */\n stdio?: 'pipe' | 'ignore' | ['pipe' | 'ignore' | 'inherit', 'pipe' | 'ignore' | 'inherit', 'pipe' | 'ignore' | 'inherit']\n \n /** `false` 是否断开和 child 的关系 (ignore stdio, unref) whether to break the connection with child (ignore stdio, unref) */\n detached?: boolean\n \n /** 为 true 时会设置 UV_PROCESS_WINDOWS_HIDE \n 然后设置启动进程的参数 CREATE_NO_WINDOW, 和 SW_HIDE \n d:/0/libuv/src/win/process.c \n CREATE_NO_WINDOW:\n The process is a console application that is being run without a console window. \n Therefore, the console handle for the application is not set.\n This flag is ignored if the application is not a console application, or \n if it is used with either CREATE_NEW_CONSOLE or DETACHED_PROCESS.\n \n 具体有什么用还不清楚\n */\n window?: boolean\n}\n\n/** start process \n - exe: .exe 路径或文件名 (建议使用完整路径,跳过 path 搜索,性能更高) path or filename (full path is recommanded to skip path searching for better perf)\n - args: `[]` 参数列表 arguments list\n - options\n - cwd?: `fp_root`\n - env?: `process.env` 覆盖/添加到 process.env 的环境变量 overwrite/add to process.env\n - encoding?: `'utf-8'` 子进程输出编码 child output encoding\n - print?: `true` print 选项,支持设置细项 print option (with details)\n - stdio?: `'pipe'` 设置为 'ignore' 时忽略 stdio 处理 when 'ignore' then ignore stdio processing\n - detached?: `false` 是否断开和 child 的关系 (ignore stdio, unref) whether to break the connection with child (ignore stdio, unref)\n*/\nexport async function start (exe: string, args: string[] = [ ], {\n cwd,\n \n encoding = 'utf-8',\n \n print = true,\n \n stdio = 'pipe',\n \n detached = false,\n \n env,\n \n window: _window = true,\n}: StartOptions = { }): Promise<ChildProcess> {\n const options: SpawnOptions = {\n cwd,\n shell: false,\n windowsHide: !_window,\n stdio,\n ... env ? {\n env: { ...process.env, ...env }\n } : { },\n }\n \n if (typeof print === 'boolean')\n print = {\n stdout: print,\n stderr: print,\n command: print,\n code: print,\n }\n \n if (typeof stdio === 'string')\n stdio = [stdio, stdio, stdio]\n \n if (print.command)\n console.log((\n (short_exe_names[exe] || (exe.includes(' ') ? exe.quote() : exe)) +\n (args.length ? \n ' ' + args.filter(arg => arg !== '--suppressApplicationTitle')\n .map(arg => arg.includes(' ') ? arg.quote() : arg)\n .join(' ')\n :\n '')\n ).blue)\n \n if (detached) {\n let child = spawn(exe, args, {\n ...options,\n stdio: 'ignore',\n detached: true,\n })\n \n child.unref()\n return child\n }\n \n let child = spawn(exe, args, options)\n \n // 防止 child spawn 失败时 crash nodejs 进程\n child.on('error', error => {\n console.error(error)\n })\n \n if (stdio[0] === 'pipe')\n child.stdin.setDefaultEncoding('utf8')\n \n if (\n stdio.every(s => \n s === 'ignore')\n )\n return child\n \n if (encoding !== 'binary') {\n if (stdio[1] === 'pipe') {\n if (encoding === 'utf-8')\n child.stdout.setEncoding('utf-8')\n else\n child.stdout = child.stdout.pipe(\n iconv.decodeStream(encoding)\n ) as any as Readable\n \n if (print.stdout)\n child.stdout.pipe(process.stdout, { end: false })\n }\n \n if (stdio[2] === 'pipe') {\n if (encoding === 'utf-8')\n child.stderr.setEncoding('utf-8')\n else\n child.stderr = child.stderr.pipe(\n iconv.decodeStream(encoding)\n ) as any as Readable\n \n if (print.stderr)\n child.stderr.pipe(process.stderr, { end: false })\n }\n }\n \n return child\n}\n\n\nexport interface CallOptions extends StartOptions {\n throw_code?: boolean\n input?: string\n}\n\nexport interface CallResult <TOutput extends string | Buffer = string> {\n pid: number\n stdout: TOutput\n stderr: TOutput\n code: number | null\n signal: NodeJS.Signals | null\n child: ChildProcess\n [inspect.custom] (): string\n}\n\n\n/** call process for result\n - exe: .exe 路径或文件名 (建议使用路径,跳过 path 搜索,性能更高) path or filename (full path is recommanded to skip path searching for better perf)\n - args: `[]` 参数列表 arguments list\n - options?:\n - cwd?: `'d:/'`\n - env?: `process.env` 覆盖/添加到 process.env 的环境变量 overwrite/add to process.env\n - encoding?: `'utf-8'` 子进程输出编码, 设置为 binary 时返回 stdout, stderr 类型为 Buffer; 否则是 string \n child output encoding. When set to binary, return stdout, stderr is of type Buffer; otherwise it is string\n - print?: `true` print 选项,支持设置细项 print option (with details)\n - stdio?: `'pipe'` 设置为 'ignore' 时忽略 stdio 处理 when 'ignore' then ignore stdio processing\n - input?: string, start 子进程之后写入到子进程 stdin 中的内容 After starting the sub-process, write to the content of the sub-process STDIN\n - detached?: `false` 是否断开和 child 的关系 (ignore stdio, unref) whether to break the connection with child (ignore stdio, unref)\n - throw_code?: `true` code 不为 0 时是否抛出异常 whether to throw Error when code is not 0 */\nexport async function call (exe: string, args?: string[]): Promise<CallResult<string>>\nexport async function call (exe: string, args?: string[], options?: CallOptions & { encoding: 'binary' }): Promise<CallResult<Buffer>>\nexport async function call (exe: string, args?: string[], options?: CallOptions): Promise<CallResult<string>>\nexport async function call (exe: string, args: string[] = [ ], options: CallOptions = { }): Promise<CallResult<string | Buffer>> {\n const {\n encoding = 'utf-8', \n throw_code = true,\n input,\n } = options\n \n let {\n stdio = 'pipe',\n print = true\n } = options\n \n if (typeof print === 'boolean')\n print = {\n command: print,\n stdout: print,\n stderr: print,\n code: print,\n }\n \n if (typeof stdio === 'string')\n stdio = [stdio, stdio, stdio]\n \n const cmd = \n (short_exe_names[exe] || (exe.includes(' ') ? exe.quote() : exe)) + \n (args.length ? (\n ' ' + args.map(arg => arg.includes(' ') ? arg.quote() : arg)\n .join(' '))\n :\n '')\n \n if (print.command)\n console.log(cmd.blue)\n \n let child = await start(exe, args, {\n ...options,\n print: false,\n })\n \n if (input)\n child.stdin.write(input)\n \n // --- collect output\n let stdouts: (string | Buffer)[] = [ ]\n let stderrs: (string | Buffer)[] = [ ]\n \n let code: number | null, \n signal: NodeJS.Signals\n \n await Promise.all([\n new Promise<void>(resolve => {\n child.once('exit', (_code, _signal) => {\n code = _code\n signal = _signal\n resolve()\n })\n }),\n (async () => {\n if (stdio[1] === 'pipe')\n for await (const chunk of child.stdout as AsyncIterable<string | Buffer>) {\n if (encoding !== 'binary' && print.stdout)\n process.stdout.write(chunk)\n stdouts.push(chunk)\n }\n })(),\n (async () => {\n if (stdio[2] === 'pipe')\n for await (const chunk of child.stderr as AsyncIterable<string | Buffer>) {\n if (encoding !== 'binary' && print.stderr)\n process.stderr.write(chunk)\n stderrs.push(chunk)\n }\n })()\n ])\n \n const message = `${t('进程')} ${cmd} ` + (\n code ? \n `(pid: ${child.pid}) ${ throw_code ? t('异常结束') : t('结束') }, code: ${code}${ signal ? `, signal: ${ signal }` : '' }`\n :\n t('正常结束'))\n \n if (print.code || (throw_code && (code || signal)))\n console.log(message[(throw_code && (code || signal)) ? 'red' : 'blue'])\n \n const result = {\n pid: child.pid,\n \n stdout: encoding === 'binary' ?\n Buffer.concat(stdouts as Buffer[])\n :\n (stdouts as string[]).join(''),\n \n stderr: encoding === 'binary' ?\n Buffer.concat(stderrs as Buffer[])\n :\n (stderrs as string[]).join(''),\n \n code,\n \n signal,\n \n child,\n \n [inspect.custom] () {\n return inspect(this, { omit: ['child'] })\n }\n }\n \n if (code && throw_code)\n throw Object.assign(\n new Error(message), \n result\n )\n \n return result\n}\n\n\n/** call node <js> for result\n - js: .js 路径 (相对路径根据 cwd 解析) path (relative path will resolve based on cwd)\n - args: `[]` 参数列表 arguments list\n - options\n - cwd?: `'d:/'`\n - env?: `process.env` 覆盖/添加到 process.env 的环境变量 overwrite/add to process.env\n - encoding?: `'utf-8'` 子进程输出编码 child process output encoding\n - print?: `true` print 选项,支持设置细项 print option (with details)\n - stdio?: `'pipe'` 设置为 'ignore' 时忽略 stdio 处理 when 'ignore' then ignore stdio processing\n - detached?: `false` 是否断开和 child 的关系 (ignore stdio, unref) whether to break the connection with child (ignore stdio, unref)\n - throw_code?: `true` code 不为 0 时是否抛出异常 whether to throw Error when code is not 0 */\nexport async function call_nodejs (js: string, args: string[] = [], options?: CallOptions) {\n return call(exe_nodejs, [js, ...args], options)\n}\n\n\n// ------------------------------------ term\nexport interface TermOptions {\n /** `d:/t/` */\n cwd?: string\n \n /** `true` 打印参数 */\n print?: boolean\n \n title?: string\n \n // 不支持 background, 在 WinTerm 中后台创建标签页,而非创建并切换到该标签页\n // 不支持 icon\n // 不支持 env, WindowsTerminal 在调用 CreateProcess API 时没有传入 env\n}\n\nexport const exe_winterm = `C:/Users/${userInfo().username}/AppData/Local/Microsoft/WindowsApps/wt.exe`\n\n/** 新建 terminal 窗口执行进程 New Terminal window execution process\n - exe: exe 文件路径 exe file path\n - args: 调用参数 call parameter\n - options?: WinTermOptions\n*/\nexport function term (exe: string, args: string[] = [], {\n cwd = 'd:/t/',\n \n print = true,\n \n title,\n \n // env\n}: TermOptions = { }) {\n \n \n return start(\n exe_winterm,\n [\n 'new-tab',\n \n '-d', cwd,\n \n ... title ? ['--suppressApplicationTitle', '--title', title] : [ ],\n \n exe,\n \n ...args.map(arg => \n arg.replaceAll(';', '\\\\;')), \n ],\n {\n print,\n detached: true,\n cwd,\n // env\n }\n )\n}\n\n\nexport interface TermNodeOptions extends TermOptions {\n /** nodejs debugger port */\n inspect?: number\n \n /** break at first line */\n break?: boolean\n \n /** 使用 ts-node 直接运行 use ts-node to run directly */\n tsnode?: boolean\n \n /** `false` --experimental-specifier-resolution=node */\n resolve?: boolean\n \n /** `false` --trace-warnings */\n trace_warnings?: boolean\n}\n\n\n/** 在 term tab 中创建 node.exe 进程 create the node.exe process in term tab */\nexport async function term_nodejs (\n fp_js: string, \n args: string[] = [ ],\n {\n title, \n inspect, \n tsnode = false,\n break: _break,\n resolve = false,\n trace_warnings = false,\n ..._options\n }: TermNodeOptions = { }\n) {\n return term(exe_nodejs, [\n ... trace_warnings ? ['--trace-warnings'] : [ ],\n ... resolve ? ['--experimental-specifier-resolution=node'] : [ ],\n ... title ? [`--title=${title}`] : [ ],\n ... inspect ? [\n _break ? `--inspect-brk=0.0.0.0:${inspect}` : `--inspect=0.0.0.0:${inspect}`\n ] : [ ],\n ... tsnode ? [\n '--loader=ts-node/esm',\n '--experimental-specifier-resolution=node'\n ] : [ ],\n fp_js,\n ... args\n ], {\n title,\n ..._options,\n })\n}\n\n\nconst short_exe_names = {\n [exe_winterm]: 'term',\n [exe_nodejs]: 'node',\n} as const\n\n"]}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["process.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EAGR,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAE7B,OAAO,KAAK,MAAM,YAAY,CAAA;AAE9B,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AAEtC,OAAO,gBAAgB,CAAA;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGpC,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAA;AA0CrD;;;;;;;;;;EAUE;AACF,MAAM,CAAC,KAAK,UAAU,KAAK,CAAE,GAAW,EAAE,OAAiB,EAAG,EAAE,EAC5D,GAAG,EAEH,QAAQ,GAAG,OAAO,EAElB,KAAK,GAAG,IAAI,EAEZ,KAAK,GAAG,MAAM,EAEd,QAAQ,GAAG,KAAK,EAEhB,GAAG,EAEH,MAAM,EAAE,OAAO,GAAG,IAAI,MACR,EAAG;IACjB,MAAM,OAAO,GAAiB;QAC1B,GAAG;QACH,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,CAAC,OAAO;QACrB,KAAK;QACL,GAAI,GAAG,CAAC,CAAC,CAAC;YACN,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;SAClC,CAAC,CAAC,CAAC,EAAG;KACV,CAAA;IAED,IAAI,OAAO,KAAK,KAAK,SAAS;QAC1B,KAAK,GAAG;YACJ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,KAAK;SACd,CAAA;IAEL,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAEjC,IAAI,KAAK,CAAC,OAAO;QACb,OAAO,CAAC,GAAG,CAAC,CACR,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACV,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,4BAA4B,CAAC;qBACzD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;qBACjD,IAAI,CAAC,GAAG,CAAC;gBAClB,CAAC;oBACG,EAAE,CAAC,CACV,CAAC,IAAI,CAAC,CAAA;IAEX,IAAI,QAAQ,EAAE;QACV,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YACzB,GAAG,OAAO;YACV,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAA;QAEF,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,OAAO,KAAK,CAAA;KACf;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IAErC,qCAAqC;IACrC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM;QACnB,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1C,IACI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CACZ,CAAC,KAAK,QAAQ,CAAC;QAEnB,OAAO,KAAK,CAAA;IAEhB,IAAI,QAAQ,KAAK,QAAQ,EAAE;QACvB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;YACrB,IAAI,QAAQ,KAAK,OAAO;gBACpB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;;gBAEjC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAC5B,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CACZ,CAAA;YAExB,IAAI,KAAK,CAAC,MAAM;gBACZ,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;SACxD;QAED,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;YACrB,IAAI,QAAQ,KAAK,OAAO;gBACpB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;;gBAEjC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAC5B,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CACZ,CAAA;YAExB,IAAI,KAAK,CAAC,MAAM;gBACZ,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;SACxD;KACJ;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAmCD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAE,GAAW,EAAE,OAAiB,EAAG,EAAE,UAAuB,EAAG;IACrF,MAAM,EACF,QAAQ,GAAG,OAAO,EAClB,UAAU,GAAG,IAAI,EACjB,KAAK,GACR,GAAG,OAAO,CAAA;IAEX,IAAI,EACA,KAAK,GAAG,MAAM,EACd,KAAK,GAAG,IAAI,EACf,GAAG,OAAO,CAAA;IAEX,IAAI,OAAO,KAAK,KAAK,SAAS;QAC1B,KAAK,GAAG;YACJ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;SACd,CAAA;IAEL,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAEjC,MAAM,GAAG,GACL,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACX,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;aACvD,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;gBACG,EAAE,CAAC,CAAA;IAEX,IAAI,KAAK,CAAC,OAAO;QACb,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAEzB,IAAI,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;QAC/B,GAAG,OAAO;QACV,KAAK,EAAE,KAAK;KACf,CAAC,CAAA;IAEF,IAAI,KAAK;QACL,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE5B,qBAAqB;IACrB,IAAI,OAAO,GAAwB,EAAG,CAAA;IACtC,IAAI,OAAO,GAAwB,EAAG,CAAA;IAEtC,IAAI,IAAmB,EACnB,MAAsB,CAAA;IAE1B,MAAM,OAAO,CAAC,GAAG,CAAC;QACd,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAClC,IAAI,GAAG,KAAK,CAAA;gBACZ,MAAM,GAAG,OAAO,CAAA;gBAChB,OAAO,EAAE,CAAA;YACb,CAAC,CAAC,CAAA;QACN,CAAC,CAAC;QACF,CAAC,KAAK,IAAI,EAAE;YACR,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM;gBACnB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,MAAwC,EAAE;oBACtE,IAAI,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM;wBACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;oBAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;iBACtB;QACT,CAAC,CAAC,EAAE;QACJ,CAAC,KAAK,IAAI,EAAE;YACR,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM;gBACnB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,MAAwC,EAAE;oBACtE,IAAI,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM;wBACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;oBAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;iBACtB;QACT,CAAC,CAAC,EAAE;KACP,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,CACnC,IAAI,CAAC,CAAC;QACF,SAAS,KAAK,CAAC,GAAG,KAAM,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAE,WAAW,IAAI,GAAI,MAAM,CAAC,CAAC,CAAC,aAAc,MAAO,EAAE,CAAC,CAAC,CAAC,EAAG,EAAE;QACxH,CAAC;YACG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAElB,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAE3E,MAAM,MAAM,GAAG;QACX,GAAG,EAAE,KAAK,CAAC,GAAG;QAEd,MAAM,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,OAAmB,CAAC;YACtC,CAAC;gBACI,OAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAElC,MAAM,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,OAAmB,CAAC;YACtC,CAAC;gBACI,OAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAElC,IAAI;QAEJ,MAAM;QAEN,KAAK;QAEL,CAAC,OAAO,CAAC,MAAM,CAAC;YACZ,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC7C,CAAC;KACJ,CAAA;IAED,IAAI,IAAI,IAAI,UAAU;QAClB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvD,OAAO,MAAM,CAAA;AACjB,CAAC;AAGD;;;;;;;;;;6FAU6F;AAC7F,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,EAAU,EAAE,OAAiB,EAAE,EAAE,OAAqB;IACrF,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;AACnD,CAAC;AAkBD,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,QAAQ,EAAE,CAAC,QAAQ,6CAA6C,CAAA;AAEvG;;;;EAIE;AACF,MAAM,UAAU,IAAI,CAAE,GAAW,EAAE,OAAiB,EAAE,EAAE,EACpD,GAAG,GAAG,OAAO,EAEb,KAAK,GAAG,IAAI,EAEZ,KAAK;AAEL,MAAM;KACO,EAAG;IAGhB,OAAO,KAAK,CACR,WAAW,EACX;QACI,SAAS;QAET,IAAI,EAAE,GAAG;QAET,GAAI,KAAK,CAAC,CAAC,CAAC,CAAC,4BAA4B,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAG;QAElE,GAAG;QAEH,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACd,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAClC,EACD;QACI,KAAK;QACL,QAAQ,EAAE,IAAI;QACd,GAAG;QACH,MAAM;KACT,CACJ,CAAA;AACL,CAAC;AAqBD,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,KAAa,EACb,OAAiB,EAAG,EACpB,EACI,KAAK,EACL,OAAO,EACP,MAAM,GAAG,KAAK,EACd,KAAK,EAAE,MAAM,EACb,OAAO,GAAG,KAAK,EACf,cAAc,GAAG,KAAK,EACtB,GAAG,QAAQ,KACM,EAAG;IAExB,OAAO,IAAI,CAAC,UAAU,EAAE;QACpB,GAAI,cAAc,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAG;QAC/C,GAAI,OAAO,CAAC,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,CAAC,EAAG;QAChE,GAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAG;QACtC,GAAI,OAAO,CAAC,CAAC,CAAC;YACV,MAAM,CAAC,CAAC,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC,CAAC,qBAAqB,OAAO,EAAE;SAC/E,CAAC,CAAC,CAAC,EAAG;QACP,GAAI,MAAM,CAAC,CAAC,CAAC;YACT,sBAAsB;YACtB,0CAA0C;SAC7C,CAAC,CAAC,CAAC,EAAG;QACP,KAAK;QACL,GAAI,IAAI;KACX,EAAE;QACC,KAAK;QACL,GAAG,QAAQ;KACd,CAAC,CAAA;AACN,CAAC;AAGD,MAAM,eAAe,GAAG;IACpB,CAAC,WAAW,CAAC,EAAE,MAAM;IACrB,CAAC,UAAU,CAAC,EAAE,MAAM;CACd,CAAA","sourcesContent":["import {\n spawn,\n type SpawnOptions,\n type ChildProcess\n} from 'child_process'\nimport { Readable } from 'stream'\nimport { userInfo } from 'os'\n\nimport iconv from 'iconv-lite'\n\nimport { t } from './i18n/instance.js'\n\nimport './prototype.js'\nimport { Encoding } from './file.js'\nimport { inspect } from './utils.js'\n\n\nexport const exe_nodejs = process.execPath.to_slash()\n\n\n// ------------------------------------ start & call\ninterface StartOptions {\n /** `继承当前工作目录 process.cwd()` 子进程的工作目录 `inherit the cwd` cwd of the child process. */\n cwd?: string\n \n /** `process.env` 覆盖/添加到 process.env 的环境变量 overwrite/add to process.env */\n env?: Record<string, string>\n \n /** `'utf-8'` 子进程输出编码 child output encoding */\n encoding?: Encoding\n \n /** `true` print 选项,支持设置细项 print option (with details) */\n print?: boolean | {\n stdout: boolean\n stderr: boolean\n command: boolean\n code: boolean\n }\n \n /** `'pipe'` 设置为 'ignore' 时忽略 stdio 处理 when 'ignore' then ignore stdio processing */\n stdio?: 'pipe' | 'ignore' | ['pipe' | 'ignore' | 'inherit', 'pipe' | 'ignore' | 'inherit', 'pipe' | 'ignore' | 'inherit']\n \n /** `false` 是否断开和 child 的关系 (ignore stdio, unref) whether to break the connection with child (ignore stdio, unref) */\n detached?: boolean\n \n /** 为 true 时会设置 UV_PROCESS_WINDOWS_HIDE \n 然后设置启动进程的参数 CREATE_NO_WINDOW, 和 SW_HIDE \n d:/0/libuv/src/win/process.c \n CREATE_NO_WINDOW:\n The process is a console application that is being run without a console window. \n Therefore, the console handle for the application is not set.\n This flag is ignored if the application is not a console application, or \n if it is used with either CREATE_NEW_CONSOLE or DETACHED_PROCESS.\n \n 具体有什么用还不清楚\n */\n window?: boolean\n}\n\n/** start process \n - exe: .exe 路径或文件名 (建议使用完整路径,跳过 path 搜索,性能更高) path or filename (full path is recommanded to skip path searching for better perf)\n - args: `[]` 参数列表 arguments list\n - options\n - cwd?: `fp_root`\n - env?: `process.env` 覆盖/添加到 process.env 的环境变量 overwrite/add to process.env\n - encoding?: `'utf-8'` 子进程输出编码 child output encoding\n - print?: `true` print 选项,支持设置细项 print option (with details)\n - stdio?: `'pipe'` 设置为 'ignore' 时忽略 stdio 处理 when 'ignore' then ignore stdio processing\n - detached?: `false` 是否断开和 child 的关系 (ignore stdio, unref) whether to break the connection with child (ignore stdio, unref)\n*/\nexport async function start (exe: string, args: string[] = [ ], {\n cwd,\n \n encoding = 'utf-8',\n \n print = true,\n \n stdio = 'pipe',\n \n detached = false,\n \n env,\n \n window: _window = true,\n}: StartOptions = { }): Promise<ChildProcess> {\n const options: SpawnOptions = {\n cwd,\n shell: false,\n windowsHide: !_window,\n stdio,\n ... env ? {\n env: { ...process.env, ...env }\n } : { },\n }\n \n if (typeof print === 'boolean')\n print = {\n stdout: print,\n stderr: print,\n command: print,\n code: print,\n }\n \n if (typeof stdio === 'string')\n stdio = [stdio, stdio, stdio]\n \n if (print.command)\n console.log((\n (short_exe_names[exe] || (exe.includes(' ') ? exe.quote() : exe)) +\n (args.length ? \n ' ' + args.filter(arg => arg !== '--suppressApplicationTitle')\n .map(arg => arg.includes(' ') ? arg.quote() : arg)\n .join(' ')\n :\n '')\n ).blue)\n \n if (detached) {\n let child = spawn(exe, args, {\n ...options,\n stdio: 'ignore',\n detached: true,\n })\n \n child.unref()\n return child\n }\n \n let child = spawn(exe, args, options)\n \n // 防止 child spawn 失败时 crash nodejs 进程\n child.on('error', error => {\n console.error(error)\n })\n \n if (stdio[0] === 'pipe')\n child.stdin.setDefaultEncoding('utf8')\n \n if (\n stdio.every(s => \n s === 'ignore')\n )\n return child\n \n if (encoding !== 'binary') {\n if (stdio[1] === 'pipe') {\n if (encoding === 'utf-8')\n child.stdout.setEncoding('utf-8')\n else\n child.stdout = child.stdout.pipe(\n iconv.decodeStream(encoding)\n ) as any as Readable\n \n if (print.stdout)\n child.stdout.pipe(process.stdout, { end: false })\n }\n \n if (stdio[2] === 'pipe') {\n if (encoding === 'utf-8')\n child.stderr.setEncoding('utf-8')\n else\n child.stderr = child.stderr.pipe(\n iconv.decodeStream(encoding)\n ) as any as Readable\n \n if (print.stderr)\n child.stderr.pipe(process.stderr, { end: false })\n }\n }\n \n return child\n}\n\n\nexport interface CallOptions extends StartOptions {\n throw_code?: boolean\n input?: string\n}\n\nexport interface CallResult <TOutput extends string | Buffer = string> {\n pid: number\n stdout: TOutput\n stderr: TOutput\n code: number | null\n signal: NodeJS.Signals | null\n child: ChildProcess\n [inspect.custom] (): string\n}\n\n\n/** call process for result\n - exe: .exe 路径或文件名 (建议使用路径,跳过 path 搜索,性能更高) path or filename (full path is recommanded to skip path searching for better perf)\n - args: `[]` 参数列表 arguments list\n - options?:\n - cwd?: `'d:/'`\n - env?: `process.env` 覆盖/添加到 process.env 的环境变量 overwrite/add to process.env\n - encoding?: `'utf-8'` 子进程输出编码, 设置为 binary 时返回 stdout, stderr 类型为 Buffer; 否则是 string \n child output encoding. When set to binary, return stdout, stderr is of type Buffer; otherwise it is string\n - print?: `true` print 选项,支持设置细项 print option (with details)\n - stdio?: `'pipe'` 设置为 'ignore' 时忽略 stdio 处理 when 'ignore' then ignore stdio processing\n - input?: string, start 子进程之后写入到子进程 stdin 中的内容 After starting the sub-process, write to the content of the sub-process STDIN\n - detached?: `false` 是否断开和 child 的关系 (ignore stdio, unref) whether to break the connection with child (ignore stdio, unref)\n - throw_code?: `true` code 不为 0 时是否抛出异常 whether to throw Error when code is not 0 */\nexport async function call (exe: string, args?: string[]): Promise<CallResult<string>>\nexport async function call (exe: string, args?: string[], options?: CallOptions & { encoding: 'binary' }): Promise<CallResult<Buffer>>\nexport async function call (exe: string, args?: string[], options?: CallOptions): Promise<CallResult<string>>\nexport async function call (exe: string, args: string[] = [ ], options: CallOptions = { }): Promise<CallResult<string | Buffer>> {\n const {\n encoding = 'utf-8', \n throw_code = true,\n input,\n } = options\n \n let {\n stdio = 'pipe',\n print = true\n } = options\n \n if (typeof print === 'boolean')\n print = {\n command: print,\n stdout: print,\n stderr: print,\n code: print,\n }\n \n if (typeof stdio === 'string')\n stdio = [stdio, stdio, stdio]\n \n const cmd = \n (short_exe_names[exe] || (exe.includes(' ') ? exe.quote() : exe)) + \n (args.length ? (\n ' ' + args.map(arg => arg.includes(' ') ? arg.quote() : arg)\n .join(' '))\n :\n '')\n \n if (print.command)\n console.log(cmd.blue)\n \n let child = await start(exe, args, {\n ...options,\n print: false,\n })\n \n if (input)\n child.stdin.write(input)\n \n // --- collect output\n let stdouts: (string | Buffer)[] = [ ]\n let stderrs: (string | Buffer)[] = [ ]\n \n let code: number | null, \n signal: NodeJS.Signals\n \n await Promise.all([\n new Promise<void>(resolve => {\n child.once('exit', (_code, _signal) => {\n code = _code\n signal = _signal\n resolve()\n })\n }),\n (async () => {\n if (stdio[1] === 'pipe')\n for await (const chunk of child.stdout as AsyncIterable<string | Buffer>) {\n if (encoding !== 'binary' && print.stdout)\n process.stdout.write(chunk)\n stdouts.push(chunk)\n }\n })(),\n (async () => {\n if (stdio[2] === 'pipe')\n for await (const chunk of child.stderr as AsyncIterable<string | Buffer>) {\n if (encoding !== 'binary' && print.stderr)\n process.stderr.write(chunk)\n stderrs.push(chunk)\n }\n })()\n ])\n \n const message = `${t('进程')} ${cmd} ` + (\n code ? \n `(pid: ${child.pid}) ${ throw_code ? t('异常结束') : t('结束') }, code: ${code}${ signal ? `, signal: ${ signal }` : '' }`\n :\n t('正常结束'))\n \n if (print.code || (throw_code && (code || signal)))\n console.log(message[(throw_code && (code || signal)) ? 'red' : 'blue'])\n \n const result = {\n pid: child.pid,\n \n stdout: encoding === 'binary' ?\n Buffer.concat(stdouts as Buffer[])\n :\n (stdouts as string[]).join(''),\n \n stderr: encoding === 'binary' ?\n Buffer.concat(stderrs as Buffer[])\n :\n (stderrs as string[]).join(''),\n \n code,\n \n signal,\n \n child,\n \n [inspect.custom] () {\n return inspect(this, { omit: ['child'] })\n }\n }\n \n if (code && throw_code)\n throw Object.assign(new Error(message), { result })\n \n return result\n}\n\n\n/** call node <js> for result\n - js: .js 路径 (相对路径根据 cwd 解析) path (relative path will resolve based on cwd)\n - args: `[]` 参数列表 arguments list\n - options\n - cwd?: `'d:/'`\n - env?: `process.env` 覆盖/添加到 process.env 的环境变量 overwrite/add to process.env\n - encoding?: `'utf-8'` 子进程输出编码 child process output encoding\n - print?: `true` print 选项,支持设置细项 print option (with details)\n - stdio?: `'pipe'` 设置为 'ignore' 时忽略 stdio 处理 when 'ignore' then ignore stdio processing\n - detached?: `false` 是否断开和 child 的关系 (ignore stdio, unref) whether to break the connection with child (ignore stdio, unref)\n - throw_code?: `true` code 不为 0 时是否抛出异常 whether to throw Error when code is not 0 */\nexport async function call_nodejs (js: string, args: string[] = [], options?: CallOptions) {\n return call(exe_nodejs, [js, ...args], options)\n}\n\n\n// ------------------------------------ term\nexport interface TermOptions {\n /** `d:/t/` */\n cwd?: string\n \n /** `true` 打印参数 */\n print?: boolean\n \n title?: string\n \n // 不支持 background, 在 WinTerm 中后台创建标签页,而非创建并切换到该标签页\n // 不支持 icon\n // 不支持 env, WindowsTerminal 在调用 CreateProcess API 时没有传入 env\n}\n\nexport const exe_winterm = `C:/Users/${userInfo().username}/AppData/Local/Microsoft/WindowsApps/wt.exe`\n\n/** 新建 terminal 窗口执行进程 New Terminal window execution process\n - exe: exe 文件路径 exe file path\n - args: 调用参数 call parameter\n - options?: WinTermOptions\n*/\nexport function term (exe: string, args: string[] = [], {\n cwd = 'd:/t/',\n \n print = true,\n \n title,\n \n // env\n}: TermOptions = { }) {\n \n \n return start(\n exe_winterm,\n [\n 'new-tab',\n \n '-d', cwd,\n \n ... title ? ['--suppressApplicationTitle', '--title', title] : [ ],\n \n exe,\n \n ...args.map(arg => \n arg.replaceAll(';', '\\\\;')), \n ],\n {\n print,\n detached: true,\n cwd,\n // env\n }\n )\n}\n\n\nexport interface TermNodeOptions extends TermOptions {\n /** nodejs debugger port */\n inspect?: number\n \n /** break at first line */\n break?: boolean\n \n /** 使用 ts-node 直接运行 use ts-node to run directly */\n tsnode?: boolean\n \n /** `false` --experimental-specifier-resolution=node */\n resolve?: boolean\n \n /** `false` --trace-warnings */\n trace_warnings?: boolean\n}\n\n\n/** 在 term tab 中创建 node.exe 进程 create the node.exe process in term tab */\nexport async function term_nodejs (\n fp_js: string, \n args: string[] = [ ],\n {\n title, \n inspect, \n tsnode = false,\n break: _break,\n resolve = false,\n trace_warnings = false,\n ..._options\n }: TermNodeOptions = { }\n) {\n return term(exe_nodejs, [\n ... trace_warnings ? ['--trace-warnings'] : [ ],\n ... resolve ? ['--experimental-specifier-resolution=node'] : [ ],\n ... title ? [`--title=${title}`] : [ ],\n ... inspect ? [\n _break ? `--inspect-brk=0.0.0.0:${inspect}` : `--inspect=0.0.0.0:${inspect}`\n ] : [ ],\n ... tsnode ? [\n '--loader=ts-node/esm',\n '--experimental-specifier-resolution=node'\n ] : [ ],\n fp_js,\n ... args\n ], {\n title,\n ..._options,\n })\n}\n\n\nconst short_exe_names = {\n [exe_winterm]: 'term',\n [exe_nodejs]: 'node',\n} as const\n\n"]}
package/repl.js CHANGED
@@ -137,7 +137,7 @@ function get_expr_of_stmt(statement) {
137
137
  return name;
138
138
  else // const { a, b } = c
139
139
  return factory.createObjectLiteralExpression(name.elements
140
- .filter(({ name }) => isIdentifier(name))
140
+ .filter(({ name }) => name && isIdentifier(name))
141
141
  .map(({ name }) => factory.createShorthandPropertyAssignment(name)));
142
142
  })()
143
143
  :
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, fwatchers } 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\nfunction trans_require_2_import (stmt: Statement, source_file: SourceFile) {\n if (!isVariableStatement(stmt))\n return stmt\n \n const { name, initializer: require_call } = stmt.declarationList.declarations[0]\n \n if (\n !isCallExpression(require_call) ||\n require_call.expression.getText(source_file) !== 'require'\n )\n return stmt\n \n const modpath = require_call.arguments[0] as StringLiteral\n \n // createNamedImports(createImportSpecifier())\n \n return factory.createImportDeclaration(\n undefined, \n undefined,\n factory.createImportClause(false, name as Identifier, undefined),\n modpath\n )\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, 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) => \n 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() >= 50)\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 for (const key in fwatchers)\n fwatchers[key].close()\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_section, log_line, delay, inspect, set_inspect_options, Timer } from './utils.js'\nimport { fread, fwrite, fwatchers } 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\nfunction trans_require_2_import (stmt: Statement, source_file: SourceFile) {\n if (!isVariableStatement(stmt))\n return stmt\n \n const { name, initializer: require_call } = stmt.declarationList.declarations[0]\n \n if (\n !isCallExpression(require_call) ||\n require_call.expression.getText(source_file) !== 'require'\n )\n return stmt\n \n const modpath = require_call.arguments[0] as StringLiteral\n \n // createNamedImports(createImportSpecifier())\n \n return factory.createImportDeclaration(\n undefined, \n undefined,\n factory.createImportClause(false, name as Identifier, undefined),\n modpath\n )\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, 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() >= 50)\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 for (const key in fwatchers)\n fwatchers[key].close()\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"]}
package/server.d.ts CHANGED
@@ -23,8 +23,6 @@ import { type Remote } from './net.js';
23
23
  import { type UFS } from './file.js';
24
24
  declare module 'http' {
25
25
  interface IncomingMessage {
26
- tunnel?: boolean;
27
- id?: string;
28
26
  body?: Buffer;
29
27
  }
30
28
  interface ServerResponse {
package/server.js CHANGED
@@ -109,13 +109,10 @@ export class Server {
109
109
  process request.ip
110
110
  */
111
111
  async parse(ctx) {
112
- const { req, req: { tunnel }, } = ctx;
113
- let { request } = ctx;
114
- if (!tunnel) {
115
- const buf = await stream_to_buffer(req);
116
- if (buf.length)
117
- req.body = buf;
118
- }
112
+ let { req, request } = ctx;
113
+ const buf = await stream_to_buffer(req);
114
+ if (buf.length)
115
+ req.body = buf;
119
116
  // --- parse request.ip
120
117
  request.ip = (request.headers['x-real-ip'] || request.ip).replace(/^::ffff:/, '');
121
118
  // --- parse body
@@ -184,7 +181,6 @@ export class Server {
184
181
  return t;
185
182
  })().pad(40) + ' ';
186
183
  // --- https/2.0
187
- // if (req.tunnel) `tunnel/${http_version}`.pad(10).cyan
188
184
  s += `${`${protocol.pad(5)}/${http_version}`.pad(10)} `;
189
185
  // --- method
190
186
  method = method.toLowerCase();
@@ -278,11 +274,9 @@ export class Server {
278
274
  // ;(error as any).status = 500
279
275
  // throw error
280
276
  // }
281
- if (!req.tunnel) {
282
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges
283
- // advertise server support of partial requests
284
- response.set('accept-ranges', 'bytes');
285
- }
277
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges
278
+ // advertise server support of partial requests
279
+ response.set('accept-ranges', 'bytes');
286
280
  if (!response.get('cache-control'))
287
281
  response.set('cache-control', 'max-age=0, must-revalidate');
288
282
  if (!response.get('last-modified'))
@@ -297,12 +291,7 @@ export class Server {
297
291
  // 以上会自动设置 response.body = null
298
292
  return path;
299
293
  }
300
- if (request.headers.range) {
301
- if (req.tunnel) {
302
- response.status = 400;
303
- response.body = '';
304
- return;
305
- }
294
+ if (request.headers.range)
306
295
  try {
307
296
  const range_header = request.headers.range;
308
297
  const range_value = /=(.*)$/.exec(range_header)[1];
@@ -325,7 +314,6 @@ export class Server {
325
314
  response.set('content-range', `bytes */${stats.size}`);
326
315
  response.body = fs.createReadStream(path);
327
316
  }
328
- }
329
317
  else {
330
318
  response.set('content-length', String(stats.size));
331
319
  response.body = fs.createReadStream(path);
package/server.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"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","sourcesContent":["import { createServer as http_create_server, type Server as HttpServer } from 'http'\nimport zlib from 'zlib'\nimport { default as nodefs, type Stats } from 'fs'\nimport { promisify } from 'util'\n\n// --- 3rd party\nimport upath from 'upath'\nimport qs from 'qs'\nimport resolve_safely from 'resolve-path'\nimport { WebSocketServer } from 'ws'\n\n// --- koa & koa middleware\nimport { default as Koa, type Context, type Next } from 'koa'\n\nimport KoaCors from '@koa/cors'\nimport KoaCompress from 'koa-compress'\nimport { userAgent as KoaUserAgent, type UserAgentContext } from 'koa-useragent'\n\n\ndeclare module 'koa' {\n interface Request {\n /** 经过 decodeURIComponent 后,在路径重写之前的路径 */\n _path: string\n \n body: any\n }\n \n interface Context {\n compress: boolean\n userAgent: UserAgentContext['userAgent'] & { isWechat: boolean }\n }\n}\n\n// --- my libs\nimport { request as _request, type Remote } from './net.js'\nimport { stream_to_buffer, inspect, output_width } from './utils.js'\nimport { type UFS } from './file.js'\n\n\ndeclare module 'http' {\n interface IncomingMessage {\n tunnel?: boolean\n id?: string\n body?: Buffer\n }\n \n interface ServerResponse {\n body?: Buffer\n }\n}\n\n// ------------ my server\nexport class Server {\n app: Koa\n \n handler: ReturnType<Koa['callback']>\n \n port: number\n \n server_http: HttpServer\n \n server_ws?: WebSocketServer\n \n remote?: Remote\n \n \n constructor (port: number, { remote }: { remote?: Remote } = { }) {\n this.port = port\n if (remote)\n this.remote = remote\n }\n \n /** start http server and listen */\n async start () {\n // --- init koa app\n let app = new Koa()\n \n app.on('error', (error, ctx) => {\n console.error(error)\n console.log(ctx)\n })\n \n app.use(this.entry.bind(this))\n \n app.use(KoaCompress({\n br: {\n chunkSize: 64 * 1024,\n \n // https://nodejs.org/api/zlib.html#zlib_class_brotlioptions\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 3 // 默认为 11 (最大压缩),会导致 news/get 生成的 14 mb 的 json 压缩时长高达 24s\n },\n },\n threshold: 512\n }))\n \n app.use(KoaCors({ credentials: true }))\n app.use(KoaUserAgent)\n \n app.use(this._router.bind(this))\n \n this.app = app\n \n this.handler = this.app.callback()\n \n this.server_http = http_create_server(this.handler)\n \n \n // websocket rpc\n if (this.remote) {\n this.server_ws = new WebSocketServer({\n noServer: true,\n skipUTF8Validation: true,\n perMessageDeflate: true\n })\n \n this.server_ws.on('connection', (ws: WebSocket, request) => {\n ws.addEventListener('message', event => {\n this.remote.handle(event.data, ws as any)\n })\n })\n \n this.server_http.on('upgrade', (request, socket, head) => {\n // url 只有路径部分\n const {\n url, \n headers: { host = '', 'user-agent': ua },\n } = request\n \n const ip = (request.socket.remoteAddress as string).replace(/^::ffff:/, '')\n \n console.log(`${new Date().to_time_str()} ${(ip || '').pad(40)} ${(ua || '').limit(40)} ${'websocket'.pad(10).magenta} ${'connect'.pad(10).magenta}${host.pad(20)} ${url.pad(60).yellow}`)\n \n switch (url) {\n case '/':\n this.server_ws.handleUpgrade(request, socket, head, ws => {\n ws.binaryType = 'arraybuffer'\n this.server_ws.emit('connection', ws, request)\n })\n return\n \n default:\n console.log(`${' '.repeat(13)} connect 404: ${url}`.red)\n socket.destroy()\n }\n })\n }\n \n \n await new Promise<void>(resolve => {\n this.server_http.listen(this.port, resolve)\n })\n }\n \n \n stop () {\n this.server_http.close()\n }\n \n \n async entry (ctx: Context, next: Next) {\n let { response } = ctx\n \n await this.parse(ctx)\n \n // ------------ next\n try {\n await next()\n } catch (error) {\n if (error.status !== 404)\n console.error(error)\n response.status = error.status || 500\n response.body = inspect(error, { colors: false })\n response.type = 'text/plain'\n }\n }\n \n \n /** \n parse req.body to request.body \n process request.ip\n */\n async parse (ctx: Context) {\n const {\n req,\n req: { tunnel },\n } = ctx\n \n let { request } = ctx\n \n if (!tunnel) {\n const buf = await stream_to_buffer(req)\n if (buf.length)\n req.body = buf\n }\n \n // --- parse request.ip\n request.ip = (request.headers['x-real-ip'] as string || request.ip).replace(/^::ffff:/, '')\n \n \n // --- parse body\n if (!req.body)\n return\n \n if (ctx.is('application/json') || ctx.is('text/plain'))\n request.body = JSON.parse(\n req.body.toString()\n )\n else if (ctx.is('application/x-www-form-urlencoded'))\n request.body = qs.parse(\n req.body.toString()\n )\n else if (ctx.is('multipart/form-data')) {\n throw new Error('multipart/form-data is not supported')\n } else\n request.body = req.body\n }\n \n \n async _router (ctx: Context, next: Next) {\n let { request } = ctx\n const _path = request._path = decodeURIComponent(request.path)\n Object.defineProperty(request, 'path', {\n value: _path,\n configurable: true,\n enumerable: true,\n writable: true\n })\n \n // ------------ log\n this.logger(ctx)\n \n // ------------ repl_router hook\n if (await global.repl_router?.(ctx))\n return\n \n if (await this.router(ctx))\n return\n \n await next?.()\n }\n \n \n async router (ctx: Context): Promise<boolean> {\n return false\n }\n \n \n logger (ctx: Context) {\n const { request } = ctx\n const {\n query, \n body, \n path, _path, \n protocol,\n host,\n req: { httpVersion: http_version },\n ip,\n } = request\n \n let { method } = request\n \n const ua = ctx.userAgent\n \n \n let s = ''\n \n // --- time\n s += `${new Date().to_time_str()} `\n \n \n // --- ip\n s += (ip || '').pad(40) + ' '\n \n \n // --- ua\n s += (() => {\n let t = ''\n if (ua.isMobile)\n t += 'mobile'\n if (ua.isDesktop)\n t += 'desktop'\n if (ua.isBot)\n t += `${ t ? ' ' : '' }${'robot'.blue}`\n if (ua.platform !== 'unknown' && !ua.os.startsWith('Windows'))\n t += '/' + ua.platform.toLowerCase().replace('apple mac', 'mac')\n if (ua.os !== 'unknown' && ua.platform !== 'Android')\n t += '/' + ua.os.toLowerCase()\n if (ua.browser !== 'unknown')\n t += '/' + ua.browser.toLowerCase()\n if (ua.isWechat)\n t += '/weixin'\n if (ua.version !== 'unknown')\n t += '/' + ua.version.split('.').slice(0, 2).join('.')\n return t\n })().pad(40) + ' '\n \n \n // --- https/2.0\n // if (req.tunnel) `tunnel/${http_version}`.pad(10).cyan\n s += `${`${protocol.pad(5)}/${http_version}`.pad(10)} `\n \n \n // --- method\n method = method.toLowerCase()\n s += method === 'get' ? method.pad(10) : method.pad(10).yellow\n \n \n // --- host\n s += `${host.pad(20)} `\n \n \n // --- path\n s += (() => {\n if (path.toLowerCase() !== _path.toLowerCase())\n return `${_path.blue} → ${path}`\n if (!path.includes('.'))\n return path.yellow\n return path\n })()\n \n \n // --- query\n if (Object.keys(query).length) {\n let t = inspect(query, { compact: true })\n .replace('[Object: null prototype] ', '')\n \n if (t.endsWith('\\n'))\n t = t.slice(0, -1)\n \n s += (s + t).width > output_width ? '\\n' : ' '\n \n s += t\n }\n \n \n // --- body\n if (body && Object.keys(body).length)\n s += '\\n' + inspect(body).replace('[Object: null prototype] ', '')\n \n \n // --- print log\n console.log(s)\n }\n \n \n async try_send (\n ctx: Context, \n fp: string,\n {\n fs,\n root,\n log_404,\n }: {\n fs?: (typeof nodefs) | UFS\n root: string\n log_404?: boolean\n }) {\n const {\n request: { _path, path, method },\n response,\n } = ctx\n \n if (!(typeof response.body === 'undefined') || response.status !== 404)\n return true\n \n if (method !== 'HEAD' && method !== 'GET')\n return false\n \n function _log_404 () {\n let s = `${' '.repeat(13)} ${method.toLowerCase()} 404: ${path}`\n if (_path !== path)\n s += ` ${_path.bracket()}`\n console.log(s.red)\n }\n \n try {\n await this.fsend(ctx, fp, { fs, root })\n return true\n } catch (error) {\n if (error.status !== 404)\n throw error\n if (log_404)\n _log_404()\n return false\n }\n }\n \n \n /** send file at `path` with the given `options` to the koa `ctx`. */\n async fsend (\n ctx: Context,\n path: string,\n {\n fs = nodefs,\n root,\n absolute\n }: {\n /** `fs` */\n fs?: (typeof nodefs) | UFS\n \n root?: string\n \n /** `false` */\n absolute?: boolean\n \n } = { } as any\n ) {\n const { request, response, req } = ctx\n \n if (!absolute && !root)\n throw new Error('fsend with `!absolute && !root`')\n \n if (absolute)\n path = upath.resolve(path)\n else {\n if (path.startsWith(root))\n path = path.slice(root.length)\n \n if (path.startsWith('/'))\n path = path.slice(1)\n \n try {\n path = upath.normalize(\n resolve_safely(root, path)\n )\n } catch (error) {\n error.message += `, path: ${path}`\n throw error\n }\n }\n \n \n // stat\n let stats: Stats\n try {\n stats = await promisify(fs.stat)(path)\n } catch (error) {\n if (['ENOENT', 'ENAMETOOLONG', 'ENOTDIR'].includes(error.code)) {\n error.status = 404\n throw error\n }\n \n error.status = 500\n error.message = `fs.stat 出错: ${error.message}`\n throw error\n }\n \n \n // size limit\n // if (stats.size >= 100 * 2**20) {\n // let error = new Error('body.length >= 100 mb')\n // ;(error as any).status = 500\n // throw error\n // }\n \n \n if (!req.tunnel) {\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges\n // advertise server support of partial requests\n response.set('accept-ranges', 'bytes')\n }\n \n if (!response.get('cache-control'))\n response.set('cache-control', 'max-age=0, must-revalidate')\n \n if (!response.get('last-modified'))\n response.set('last-modified', (stats.mtime || new Date()).toUTCString())\n \n const fext = path.fext\n \n if (!response.type)\n response.type = fext\n \n if (fext === '.pdf')\n response.set('content-disposition', `attachment; filename=\"${encodeURIComponent(path.fname)}\"`)\n \n if (request.fresh) {\n response.status = 304\n // 以上会自动设置 response.body = null\n return path\n }\n \n if (request.headers.range) {\n if (req.tunnel) {\n response.status = 400\n response.body = ''\n return\n }\n \n try {\n const range_header = request.headers.range\n const range_value = /=(.*)$/.exec(range_header)[1]\n const range = /^[\\w]*?(\\d*)-(\\d*)$/.exec(range_value)\n \n let start = range[1] ? parseInt(range[1]) : undefined\n let end = range[2] ? parseInt(range[2]) : stats.size - 1\n \n if (typeof start == 'undefined') {\n start = (stats.size - end)\n end = (stats.size - 1)\n }\n \n const chunksize = (end - start + 1)\n \n response.status = 206\n response.set('content-length', String(chunksize))\n response.set('content-range', `bytes ${start}-${end}/${stats.size}`)\n response.body = fs.createReadStream(path, { start, end })\n } catch (err) {\n response.status = 416\n response.set('content-length', String(stats.size))\n response.set('content-range', `bytes */${stats.size}`)\n response.body = fs.createReadStream(path)\n }\n } else {\n response.set('content-length', String(stats.size))\n response.body = fs.createReadStream(path)\n }\n \n return path\n }\n}\n\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"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","sourcesContent":["import { createServer as http_create_server, type Server as HttpServer } from 'http'\nimport zlib from 'zlib'\nimport { default as nodefs, type Stats } from 'fs'\nimport { promisify } from 'util'\n\n// --- 3rd party\nimport upath from 'upath'\nimport qs from 'qs'\nimport resolve_safely from 'resolve-path'\nimport { WebSocketServer } from 'ws'\n\n// --- koa & koa middleware\nimport { default as Koa, type Context, type Next } from 'koa'\n\nimport KoaCors from '@koa/cors'\nimport KoaCompress from 'koa-compress'\nimport { userAgent as KoaUserAgent, type UserAgentContext } from 'koa-useragent'\n\n\ndeclare module 'koa' {\n interface Request {\n /** 经过 decodeURIComponent 后,在路径重写之前的路径 */\n _path: string\n \n body: any\n }\n \n interface Context {\n compress: boolean\n userAgent: UserAgentContext['userAgent'] & { isWechat: boolean }\n }\n}\n\n// --- my libs\nimport { request as _request, type Remote } from './net.js'\nimport { stream_to_buffer, inspect, output_width } from './utils.js'\nimport { type UFS } from './file.js'\n\n\ndeclare module 'http' {\n interface IncomingMessage {\n body?: Buffer\n }\n \n interface ServerResponse {\n body?: Buffer\n }\n}\n\n\n// ------------ my server\nexport class Server {\n app: Koa\n \n handler: ReturnType<Koa['callback']>\n \n port: number\n \n server_http: HttpServer\n \n server_ws?: WebSocketServer\n \n remote?: Remote\n \n \n constructor (port: number, { remote }: { remote?: Remote } = { }) {\n this.port = port\n \n if (remote)\n this.remote = remote\n }\n \n \n /** start http server and listen */\n async start () {\n // --- init koa app\n let app = new Koa()\n \n app.on('error', (error, ctx) => {\n console.error(error)\n console.log(ctx)\n })\n \n app.use(this.entry.bind(this))\n \n app.use(KoaCompress({\n br: {\n chunkSize: 64 * 1024,\n \n // https://nodejs.org/api/zlib.html#zlib_class_brotlioptions\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 3 // 默认为 11 (最大压缩),会导致 news/get 生成的 14 mb 的 json 压缩时长高达 24s\n },\n },\n threshold: 512\n }))\n \n app.use(KoaCors({ credentials: true }))\n app.use(KoaUserAgent)\n \n app.use(this._router.bind(this))\n \n this.app = app\n \n this.handler = this.app.callback()\n \n this.server_http = http_create_server(this.handler)\n \n \n // websocket rpc\n if (this.remote) {\n this.server_ws = new WebSocketServer({\n noServer: true,\n skipUTF8Validation: true,\n perMessageDeflate: true\n })\n \n this.server_ws.on('connection', (ws: WebSocket, request) => {\n ws.addEventListener('message', event => {\n this.remote.handle(event.data, ws as any)\n })\n })\n \n this.server_http.on('upgrade', (request, socket, head) => {\n // url 只有路径部分\n const {\n url, \n headers: { host = '', 'user-agent': ua },\n } = request\n \n const ip = (request.socket.remoteAddress as string).replace(/^::ffff:/, '')\n \n console.log(`${new Date().to_time_str()} ${(ip || '').pad(40)} ${(ua || '').limit(40)} ${'websocket'.pad(10).magenta} ${'connect'.pad(10).magenta}${host.pad(20)} ${url.pad(60).yellow}`)\n \n switch (url) {\n case '/':\n this.server_ws.handleUpgrade(request, socket, head, ws => {\n ws.binaryType = 'arraybuffer'\n this.server_ws.emit('connection', ws, request)\n })\n return\n \n default:\n console.log(`${' '.repeat(13)} connect 404: ${url}`.red)\n socket.destroy()\n }\n })\n }\n \n \n await new Promise<void>(resolve => {\n this.server_http.listen(this.port, resolve)\n })\n }\n \n \n stop () {\n this.server_http.close()\n }\n \n \n async entry (ctx: Context, next: Next) {\n let { response } = ctx\n \n await this.parse(ctx)\n \n // ------------ next\n try {\n await next()\n } catch (error) {\n if (error.status !== 404)\n console.error(error)\n response.status = error.status || 500\n response.body = inspect(error, { colors: false })\n response.type = 'text/plain'\n }\n }\n \n \n /** \n parse req.body to request.body \n process request.ip\n */\n async parse (ctx: Context) {\n let { req, request } = ctx\n \n const buf = await stream_to_buffer(req)\n if (buf.length)\n req.body = buf\n \n // --- parse request.ip\n request.ip = (request.headers['x-real-ip'] as string || request.ip).replace(/^::ffff:/, '')\n \n \n // --- parse body\n if (!req.body)\n return\n \n if (ctx.is('application/json') || ctx.is('text/plain'))\n request.body = JSON.parse(\n req.body.toString()\n )\n else if (ctx.is('application/x-www-form-urlencoded'))\n request.body = qs.parse(\n req.body.toString()\n )\n else if (ctx.is('multipart/form-data')) {\n throw new Error('multipart/form-data is not supported')\n } else\n request.body = req.body\n }\n \n \n async _router (ctx: Context, next: Next) {\n let { request } = ctx\n const _path = request._path = decodeURIComponent(request.path)\n Object.defineProperty(request, 'path', {\n value: _path,\n configurable: true,\n enumerable: true,\n writable: true\n })\n \n // ------------ log\n this.logger(ctx)\n \n // ------------ repl_router hook\n if (await global.repl_router?.(ctx))\n return\n \n if (await this.router(ctx))\n return\n \n await next?.()\n }\n \n \n async router (ctx: Context): Promise<boolean> {\n return false\n }\n \n \n logger (ctx: Context) {\n const { request } = ctx\n const {\n query, \n body, \n path, _path, \n protocol,\n host,\n req: { httpVersion: http_version },\n ip,\n } = request\n \n let { method } = request\n \n const ua = ctx.userAgent\n \n \n let s = ''\n \n // --- time\n s += `${new Date().to_time_str()} `\n \n \n // --- ip\n s += (ip || '').pad(40) + ' '\n \n \n // --- ua\n s += (() => {\n let t = ''\n if (ua.isMobile)\n t += 'mobile'\n if (ua.isDesktop)\n t += 'desktop'\n if (ua.isBot)\n t += `${ t ? ' ' : '' }${'robot'.blue}`\n if (ua.platform !== 'unknown' && !ua.os.startsWith('Windows'))\n t += '/' + ua.platform.toLowerCase().replace('apple mac', 'mac')\n if (ua.os !== 'unknown' && ua.platform !== 'Android')\n t += '/' + ua.os.toLowerCase()\n if (ua.browser !== 'unknown')\n t += '/' + ua.browser.toLowerCase()\n if (ua.isWechat)\n t += '/weixin'\n if (ua.version !== 'unknown')\n t += '/' + ua.version.split('.').slice(0, 2).join('.')\n return t\n })().pad(40) + ' '\n \n \n // --- https/2.0\n s += `${`${protocol.pad(5)}/${http_version}`.pad(10)} `\n \n \n // --- method\n method = method.toLowerCase()\n s += method === 'get' ? method.pad(10) : method.pad(10).yellow\n \n \n // --- host\n s += `${host.pad(20)} `\n \n \n // --- path\n s += (() => {\n if (path.toLowerCase() !== _path.toLowerCase())\n return `${_path.blue} → ${path}`\n if (!path.includes('.'))\n return path.yellow\n return path\n })()\n \n \n // --- query\n if (Object.keys(query).length) {\n let t = inspect(query, { compact: true })\n .replace('[Object: null prototype] ', '')\n \n if (t.endsWith('\\n'))\n t = t.slice(0, -1)\n \n s += (s + t).width > output_width ? '\\n' : ' '\n \n s += t\n }\n \n \n // --- body\n if (body && Object.keys(body).length)\n s += '\\n' + inspect(body).replace('[Object: null prototype] ', '')\n \n \n // --- print log\n console.log(s)\n }\n \n \n async try_send (\n ctx: Context, \n fp: string,\n {\n fs,\n root,\n log_404,\n }: {\n fs?: (typeof nodefs) | UFS\n root: string\n log_404?: boolean\n }) {\n const {\n request: { _path, path, method },\n response,\n } = ctx\n \n if (!(typeof response.body === 'undefined') || response.status !== 404)\n return true\n \n if (method !== 'HEAD' && method !== 'GET')\n return false\n \n function _log_404 () {\n let s = `${' '.repeat(13)} ${method.toLowerCase()} 404: ${path}`\n if (_path !== path)\n s += ` ${_path.bracket()}`\n console.log(s.red)\n }\n \n try {\n await this.fsend(ctx, fp, { fs, root })\n return true\n } catch (error) {\n if (error.status !== 404)\n throw error\n if (log_404)\n _log_404()\n return false\n }\n }\n \n \n /** send file at `path` with the given `options` to the koa `ctx`. */\n async fsend (\n ctx: Context,\n path: string,\n {\n fs = nodefs,\n root,\n absolute\n }: {\n /** `fs` */\n fs?: (typeof nodefs) | UFS\n \n root?: string\n \n /** `false` */\n absolute?: boolean\n \n } = { } as any\n ) {\n const { request, response, req } = ctx\n \n if (!absolute && !root)\n throw new Error('fsend with `!absolute && !root`')\n \n if (absolute)\n path = upath.resolve(path)\n else {\n if (path.startsWith(root))\n path = path.slice(root.length)\n \n if (path.startsWith('/'))\n path = path.slice(1)\n \n try {\n path = upath.normalize(\n resolve_safely(root, path)\n )\n } catch (error) {\n error.message += `, path: ${path}`\n throw error\n }\n }\n \n \n // stat\n let stats: Stats\n try {\n stats = await promisify(fs.stat)(path)\n } catch (error) {\n if (['ENOENT', 'ENAMETOOLONG', 'ENOTDIR'].includes(error.code)) {\n error.status = 404\n throw error\n }\n \n error.status = 500\n error.message = `fs.stat 出错: ${error.message}`\n throw error\n }\n \n \n // size limit\n // if (stats.size >= 100 * 2**20) {\n // let error = new Error('body.length >= 100 mb')\n // ;(error as any).status = 500\n // throw error\n // }\n \n \n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges\n // advertise server support of partial requests\n response.set('accept-ranges', 'bytes')\n \n if (!response.get('cache-control'))\n response.set('cache-control', 'max-age=0, must-revalidate')\n \n if (!response.get('last-modified'))\n response.set('last-modified', (stats.mtime || new Date()).toUTCString())\n \n const fext = path.fext\n \n if (!response.type)\n response.type = fext\n \n if (fext === '.pdf')\n response.set('content-disposition', `attachment; filename=\"${encodeURIComponent(path.fname)}\"`)\n \n if (request.fresh) {\n response.status = 304\n // 以上会自动设置 response.body = null\n return path\n }\n \n if (request.headers.range)\n try {\n const range_header = request.headers.range\n const range_value = /=(.*)$/.exec(range_header)[1]\n const range = /^[\\w]*?(\\d*)-(\\d*)$/.exec(range_value)\n \n let start = range[1] ? parseInt(range[1]) : undefined\n let end = range[2] ? parseInt(range[2]) : stats.size - 1\n \n if (typeof start == 'undefined') {\n start = (stats.size - end)\n end = (stats.size - 1)\n }\n \n const chunksize = (end - start + 1)\n \n response.status = 206\n response.set('content-length', String(chunksize))\n response.set('content-range', `bytes ${start}-${end}/${stats.size}`)\n response.body = fs.createReadStream(path, { start, end })\n } catch (err) {\n response.status = 416\n response.set('content-length', String(stats.size))\n response.set('content-range', `bytes */${stats.size}`)\n response.body = fs.createReadStream(path)\n }\n else {\n response.set('content-length', String(stats.size))\n response.body = fs.createReadStream(path)\n }\n \n return path\n }\n}\n\n"]}
package/tsconfig.json CHANGED
@@ -18,7 +18,7 @@
18
18
  "importHelpers": true,
19
19
  // "watch": false
20
20
  "incremental": true,
21
- "tsBuildInfoFile": "./node_modules/.tsbuildinfo",
21
+ "tsBuildInfoFile": "./node_modules/.tsbuildinfo.json",
22
22
 
23
23
 
24
24
  // --- emit
@@ -35,7 +35,7 @@
35
35
  // --- features
36
36
  "experimentalDecorators": true,
37
37
  "emitDecoratorMetadata": true,
38
- "preserveSymlinks": true,
38
+ "preserveSymlinks": false,
39
39
  "jsx": "react",
40
40
  "removeComments": false,
41
41
  "preserveConstEnums": true,
@@ -2,7 +2,7 @@ export declare function assert(assertion: any, message?: string): never | void;
2
2
  export declare function delay(milliseconds: number): Promise<void>;
3
3
  export declare function debug(milliseconds?: number): Promise<void>;
4
4
  /** 字符串字典序比较 */
5
- export declare function strcmp(l: string, r: string): 1 | 0 | -1;
5
+ export declare function strcmp(l: string, r: string): 0 | 1 | -1;
6
6
  /** 拼接 TypedArrays 生成一个完整的 Uint8Array */
7
7
  export declare function concat(arrays: ArrayBufferView[]): Uint8Array;
8
8
  /** 时间间隔 (milliseconds) 格式化 */
package/utils.d.ts CHANGED
@@ -17,7 +17,7 @@ export declare function unique<T>(iterable: T[] | Iterable<T>, selector?: string
17
17
  /** 排序对象中 key 的顺序,返回新的对象 */
18
18
  export declare function sort_keys<T>(obj: T): T;
19
19
  /** 字符串字典序比较 */
20
- export declare function strcmp(l: string, r: string): 1 | 0 | -1;
20
+ export declare function strcmp(l: string, r: string): 0 | 1 | -1;
21
21
  /** 拼接 TypedArrays 生成一个完整的 Uint8Array */
22
22
  export declare function concat(arrays: ArrayBufferView[]): Uint8Array;
23
23
  export declare function typed_array_to_buffer(view: ArrayBufferView): Buffer;
package/LICENSE DELETED
@@ -1,7 +0,0 @@
1
- Copyright 2021 ShenHongFei
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
-
5
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
-
7
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.