xshell 1.0.13 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/file.d.ts +12 -20
- package/file.js +33 -47
- package/file.js.map +1 -1
- package/i18n/dict.json +15 -0
- package/net.browser.d.ts +2 -2
- package/net.browser.js +23 -15
- package/net.browser.js.map +1 -1
- package/net.d.ts +4 -4
- package/net.js +31 -20
- package/net.js.map +1 -1
- package/package.json +5 -6
- package/process.d.ts +1 -1
- package/process.js +3 -4
- package/process.js.map +1 -1
- package/utils.d.ts +10 -1
- package/utils.js +24 -1
- package/utils.js.map +1 -1
- package/myfont.woff2 +0 -0
- package/myfontb.woff2 +0 -0
package/process.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { spawn } from 'child_process';
|
|
2
2
|
import { userInfo } from 'os';
|
|
3
|
-
import iconv from 'iconv-lite';
|
|
4
3
|
import { t } from './i18n/instance.js';
|
|
5
4
|
import './prototype.js';
|
|
6
|
-
import { inspect } from './utils.js';
|
|
5
|
+
import { inspect, DecoderStream } from './utils.js';
|
|
7
6
|
export const exe_nodejs = process.execPath.to_slash();
|
|
8
7
|
/** start process
|
|
9
8
|
- exe: .exe 路径或文件名 (建议使用完整路径,跳过 path 搜索,性能更高) path or filename (full path is recommanded to skip path searching for better perf)
|
|
@@ -66,7 +65,7 @@ export async function start(exe, args = [], { cwd, encoding = 'utf-8', print = t
|
|
|
66
65
|
if (encoding === 'utf-8')
|
|
67
66
|
child.stdout.setEncoding('utf-8');
|
|
68
67
|
else
|
|
69
|
-
child.stdout = child.stdout.pipe(
|
|
68
|
+
child.stdout = child.stdout.pipe(new DecoderStream(encoding));
|
|
70
69
|
if (print.stdout)
|
|
71
70
|
child.stdout.pipe(process.stdout, { end: false });
|
|
72
71
|
}
|
|
@@ -74,7 +73,7 @@ export async function start(exe, args = [], { cwd, encoding = 'utf-8', print = t
|
|
|
74
73
|
if (encoding === 'utf-8')
|
|
75
74
|
child.stderr.setEncoding('utf-8');
|
|
76
75
|
else
|
|
77
|
-
child.stderr = child.stderr.pipe(
|
|
76
|
+
child.stderr = child.stderr.pipe(new DecoderStream(encoding));
|
|
78
77
|
if (print.stderr)
|
|
79
78
|
child.stderr.pipe(process.stderr, { end: false });
|
|
80
79
|
}
|
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(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"]}
|
|
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 { userInfo } from 'os'\n\nimport { t } from './i18n/instance.js'\n\nimport './prototype.js'\nimport { Encoding } from './file.js'\nimport { inspect, DecoderStream } 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 | 'binary'\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(new DecoderStream(encoding))\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(new DecoderStream(encoding))\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/utils.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
3
|
/// <reference types="node" resolution-mode="require"/>
|
|
4
|
-
import { Writable, type Readable, type Duplex } from 'stream';
|
|
4
|
+
import { Writable, Transform, type Readable, type Duplex, type TransformCallback } from 'stream';
|
|
5
5
|
import util from 'util';
|
|
6
6
|
import type Vinyl from 'vinyl';
|
|
7
7
|
import './prototype.js';
|
|
@@ -86,3 +86,12 @@ export declare class WritableMemoryStream extends Writable {
|
|
|
86
86
|
}[], callback: (error?: Error) => void): void;
|
|
87
87
|
_final(callback: (error?: Error) => void): void;
|
|
88
88
|
}
|
|
89
|
+
/** 用 TextDecoder 通过 .pipe 方法持续的解码 process.stdout 等流,
|
|
90
|
+
主要在 process.ts#start 中使用
|
|
91
|
+
https://nodejs.org/api/stream.html#implementing-a-transform-stream */
|
|
92
|
+
export declare class DecoderStream extends Transform {
|
|
93
|
+
decoder: TextDecoder;
|
|
94
|
+
constructor(encoding: 'gb18030' | 'shift-jis' | 'utf-16le');
|
|
95
|
+
_transform(chunk: Uint8Array, encoding: BufferEncoding, callback: TransformCallback): void;
|
|
96
|
+
_flush(callback: TransformCallback): void;
|
|
97
|
+
}
|
package/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Stream, Writable } from 'stream';
|
|
1
|
+
import { Stream, Writable, Transform } from 'stream';
|
|
2
2
|
import util from 'util';
|
|
3
3
|
import omit from 'lodash/omit.js';
|
|
4
4
|
import { t } from './i18n/instance.js';
|
|
@@ -360,4 +360,27 @@ export class WritableMemoryStream extends Writable {
|
|
|
360
360
|
callback();
|
|
361
361
|
}
|
|
362
362
|
}
|
|
363
|
+
/** 用 TextDecoder 通过 .pipe 方法持续的解码 process.stdout 等流,
|
|
364
|
+
主要在 process.ts#start 中使用
|
|
365
|
+
https://nodejs.org/api/stream.html#implementing-a-transform-stream */
|
|
366
|
+
export class DecoderStream extends Transform {
|
|
367
|
+
decoder;
|
|
368
|
+
constructor(encoding) {
|
|
369
|
+
super({ encoding: 'utf-8' });
|
|
370
|
+
this.decoder = new TextDecoder(encoding);
|
|
371
|
+
}
|
|
372
|
+
_transform(chunk, encoding, callback) {
|
|
373
|
+
assert(chunk instanceof Uint8Array);
|
|
374
|
+
const str = this.decoder.decode(chunk, { stream: true });
|
|
375
|
+
if (str.length)
|
|
376
|
+
this.push(str, 'utf-8');
|
|
377
|
+
callback();
|
|
378
|
+
}
|
|
379
|
+
_flush(callback) {
|
|
380
|
+
const str = this.decoder.decode();
|
|
381
|
+
if (str.length)
|
|
382
|
+
this.push(str, 'utf-8');
|
|
383
|
+
callback();
|
|
384
|
+
}
|
|
385
|
+
}
|
|
363
386
|
//# sourceMappingURL=utils.js.map
|
package/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { Stream, Writable, type Readable, type Duplex } from 'stream'\nimport util from 'util'\n\nimport type Vinyl from 'vinyl'\nimport omit from 'lodash/omit.js'\n\nimport { t } from './i18n/instance.js'\nimport './prototype.js'\n\n\n/** `230` term 字符宽度 (实际上有 240) */\nexport const output_width = 230\n\n\nexport function set_inspect_options () {\n util.inspect.defaultOptions.maxArrayLength = 40\n util.inspect.defaultOptions.maxStringLength = 10000\n util.inspect.defaultOptions.breakLength = output_width\n util.inspect.defaultOptions.colors = true\n util.inspect.defaultOptions.compact = false\n util.inspect.defaultOptions.getters = true\n util.inspect.defaultOptions.depth = 2\n util.inspect.defaultOptions.sorted = false\n util.inspect.defaultOptions.showProxy = true\n \n util.inspect.styles.number = 'green'\n util.inspect.styles.string = 'cyan'\n util.inspect.styles.boolean = 'blue'\n util.inspect.styles.date = 'magenta'\n util.inspect.styles.special = 'white'\n}\n\n\nexport function assert (assertion: any, message?: string): never | void {\n if (!assertion) {\n debugger\n throw new Error(`${t('断言失败')}: ${ message ? `${message}: ` : '' }${inspect(assertion)}`)\n }\n}\n\n\nexport function dedent (\n templ: TemplateStringsArray | string,\n ...values: any[]\n): string {\n let strings = Array.from(typeof templ === 'string' ? [templ] : templ.raw)\n \n // 1. remove trailing whitespace\n strings[strings.length - 1] = strings[strings.length - 1].replace(\n /\\r?\\n([\\t ]*)$/,\n '',\n )\n \n // 2. find all line breaks to determine the highest common indentation level\n const indent_lengths = strings.reduce<number[]>(\n (arr, str) => {\n const matches = str.match(/\\n[\\t ]+/g)\n if (matches) \n return arr.concat(\n matches.map(match => \n match.length - 1)\n )\n \n return arr\n },\n [],\n )\n \n // 3. remove the common indentation from all strings\n if (indent_lengths.length) {\n const pattern = new RegExp(`\\n[\\t ]{${Math.min(...indent_lengths)}}`, 'g')\n \n strings = strings.map(str => str.replace(pattern, '\\n'))\n }\n \n // 4. remove leading whitespace\n strings[0] = strings[0].replace(/^\\r?\\n/, '')\n \n // 5. perform interpolation\n let string = strings[0]\n \n values.forEach((value, i) => {\n string += value + strings[i + 1]\n })\n \n string += '\\n'\n \n return string\n}\n\n\n/** 数组或 iterable 去重(可按 selector 去重) \n - selector?: 可以是 key (string) 或 (obj: any) => any\n*/\nexport function unique <T> (iterable: T[] | Iterable<T>, selector?: string | ((obj: T) => any)) {\n if (!selector)\n return [...new Set(iterable)]\n \n let map = new Map()\n const is_str_selector = typeof selector === 'string'\n for (const x of iterable)\n map.set(\n is_str_selector ? x[selector] : selector(x),\n x\n )\n \n return [...map.values()]\n}\n\n/** 排序对象中 key 的顺序,返回新的对象 */\nexport function sort_keys <T> (obj: T) {\n return Object.fromEntries(\n Object.entries(obj)\n .sort(([key_l], [key_r]) => \n strcmp(key_l, key_r))\n ) as T\n}\n\n\n/** 字符串字典序比较 */\nexport function strcmp (l: string, r: string) {\n if (l === r) return 0\n if (l < r) return -1\n return 1\n}\n\n\n/** 拼接 TypedArrays 生成一个完整的 Uint8Array */\nexport function concat (arrays: ArrayBufferView[]) {\n let length = 0\n for (const a of arrays)\n length += a.byteLength\n \n let buf = new Uint8Array(length)\n let offset = 0\n for (const a of arrays) {\n const uint8view = new Uint8Array(a.buffer, a.byteOffset, a.byteLength)\n buf.set(uint8view, offset)\n offset += uint8view.byteLength\n }\n \n return buf\n}\n\n\nexport function typed_array_to_buffer (view: ArrayBufferView) {\n return Buffer.from(view.buffer, view.byteOffset, view.byteLength)\n}\n\n\n/** 时间间隔 (milliseconds) 格式化 */\nexport function delta2str (delta: number) {\n if (delta < 1)\n return '0 ms'\n \n // [1, 1000) ms\n if (delta < 1000)\n return `${delta} ms`\n \n // 1.123 s\n if (1000 <= delta && delta < 1000 * 60)\n return `${(delta / 1000).toFixed(1)} s`\n \n // 1 min 12 s [1 min 0s, 60 min)\n const seconds = Math.trunc(delta / 1000)\n \n if (seconds < 60 * 60)\n return `${Math.trunc(seconds / 60)} min ${seconds % 60} s`\n \n const hour = Math.trunc(seconds / 3600)\n \n return `${hour} h ${Math.trunc((seconds - 3600 * hour) / 60)} min ${seconds % 60} s`\n}\n\n\n/** generate random id */\nexport function genid () {\n return Math.random() * 2**53\n}\n\n\nexport class Timer {\n started = new Date().getTime()\n \n ended: number\n \n stop () {\n this.ended = new Date().getTime()\n }\n \n get () {\n if (!this.ended)\n this.stop()\n \n return this.ended - this.started\n }\n \n getstr () {\n return `(${delta2str(this.get())})`\n }\n \n print () {\n console.log(this.getstr())\n }\n}\n\n\nexport function log_section (\n message: string, \n {\n time = false,\n timestamp = false,\n color = undefined,\n }: {\n time?: boolean\n timestamp?: boolean | Date\n color?: 'green' | 'red' | 'yellow'\n } = { }\n) {\n const stime = (() => {\n if (time)\n return delta2str(\n new Date().getTime() - global.started_at.getTime()\n ).pad(4, { position: 'left' })\n if (timestamp)\n if (typeof timestamp === 'object')\n return `${timestamp.to_str()}`\n else\n return `${new Date().to_str()}`\n return ''\n })()\n \n message = `${`${message} `.pad(39)} ${stime}`\n \n if (color)\n message = message[color]\n \n console.log(message)\n}\n\n\nexport function log_line () {\n console.log('---')\n}\n\n\nexport async function delay (milliseconds: number) {\n return new Promise(resolve => {\n setTimeout(resolve, milliseconds)\n })\n}\n\n\nexport interface Deferred <TValue> extends Promise<TValue> {\n resolve (value: TValue | PromiseLike<TValue>): void\n reject (reason?: Error): void\n}\n\n/** 创建一个 promise,后续可调用 promise.resolve, promise.reject 方法设置其状态和值 \n - initial?: `undefined` 传入非 undefined 值(包括 null)时直接设置为 resolved 状态 */\nexport function defer <TValue> (initial?: TValue): Deferred<TValue> {\n if (initial === undefined) {\n let resolve: (value: TValue | PromiseLike<TValue>) => void\n let reject: (reason?: Error) => void\n \n let promise = new Promise<TValue>((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n })\n \n return Object.assign(promise, { resolve, reject })\n } else\n return Object.assign(Promise.resolve(initial), {\n resolve () { },\n reject () { }\n })\n}\n\n\n// ------------ text\nexport function has_chinese (str: string) {\n return /[\\u4E00-\\u9FA5]/.test(str)\n}\n\n\nexport function escape_line_feed (str: string) {\n return str.replace(/\\n/g, '\\\\n')\n}\n\n/** util.inspect(obj) \n - options\n - limit?: `10000`\n - omit?: string[] */\nexport function inspect (\n obj: any, \n options: util.InspectOptions & {\n limit?: number\n omit?: string[]\n } = { }\n) {\n if (options.omit)\n obj = omit(obj, [inspect.custom, ...(options.omit || [])])\n \n let text = util.inspect(obj, options)\n \n if (!('limit' in options))\n options.limit = 10000\n if (options.limit && text.length > options.limit)\n return `${text.slice(0, options.limit)}……'\\u001b[39m\\n`\n else\n return text\n}\n\nexport namespace inspect {\n export const custom: typeof util.inspect.custom = util.inspect.custom\n}\n\n\n// ------------------------------------ stream\n/** npm map-stream \n filter will reemit the data if cb(err,pass) pass is truthy \n \n reduce is more tricky \n maybe we want to group the reductions or emit progress updates occasionally \n the most basic reduce just emits one 'data' event after it has recieved 'end'\n \n create an event stream and apply function to each .write, \n emitting each response as data unless it's an empty callback\n */\nexport function map_stream <Out, In = Vinyl> (\n mapper: (obj: In, cb: Function) => any, \n options?: { failures?: boolean }\n) {\n options = options || { }\n \n let inputs = 0,\n outputs = 0,\n ended = false,\n paused = false,\n destroyed = false,\n last_written = 0,\n in_next = false\n \n \n let stream = Object.assign(new Stream(), {\n readable: true, \n writable: true,\n \n write (data?: any) {\n if (ended) throw new Error('map stream is not writable')\n in_next = false\n inputs++\n \n try {\n // catch sync errors and handle them like async errors\n const written = wrapped_mapper(data, inputs, next)\n paused = (written === false)\n return !paused\n } catch (err) {\n // if the callback has been called syncronously, and the error has occured in an listener, throw it again.\n if (in_next)\n throw err\n next(err)\n return !paused\n }\n },\n \n end (data?: any) {\n if (ended) return\n _end(data)\n },\n \n destroy () {\n ended = destroyed = true\n stream.writable = stream.readable = paused = false\n process.nextTick(function () {\n stream.emit('close')\n })\n },\n \n pause () {\n paused = true\n },\n \n resume () {\n paused = false\n }\n })\n \n \n let error_event_name = options.failures ? 'failure' : 'error'\n \n // Items that are not ready to be written yet (because they would come out of order) get stuck in a queue for later.\n let write_queue = { }\n \n \n function queue_data (data, number) {\n let next_to_write = last_written + 1\n \n if (number === next_to_write) {\n // If it's next, and its not undefined write it\n if (data !== undefined) \n stream.emit('data', data)\n \n last_written++\n next_to_write++\n } else \n // Otherwise queue it for later.\n write_queue[number] = data\n \n \n // If the next value is in the queue, write it\n if (Object.prototype.hasOwnProperty.call(write_queue, next_to_write)) {\n let data_to_write = write_queue[next_to_write]\n delete write_queue[next_to_write]\n return queue_data(data_to_write, next_to_write)\n }\n \n outputs++\n if (inputs === outputs) {\n if (paused) {\n paused = false\n stream.emit('drain') // written all the incoming events\n }\n if (ended) _end()\n }\n }\n \n function next (err?: Error, data?: any, number?: number) {\n if (destroyed) return\n in_next = true\n \n if (!err || options.failures)\n queue_data(data, number)\n \n if (err)\n stream.emit(error_event_name, err)\n \n in_next = false\n }\n \n /** Wrap the mapper function by calling its callback with the order number of the item in the stream. */ \n function wrapped_mapper (input, number, callback) {\n return mapper.call(null, input, function (err, data) {\n callback(err, data, number)\n })\n }\n \n function _end (data?: any) {\n // if end was called with args, write it, \n ended = true // write will emit 'end' if ended is true\n stream.writable = false\n if (data !== undefined) \n return queue_data(data, inputs)\n else if (inputs === outputs) { // wait for processing \n stream.readable = false\n stream.emit('end')\n stream.destroy() \n }\n }\n \n return stream as Duplex\n}\n\n\nexport async function stream_to_buffer (stream: Readable) {\n let chunks = [ ]\n for await (const chunk of stream as AsyncIterable<Buffer>)\n chunks.push(chunk)\n return Buffer.concat(chunks)\n}\n\n\nexport async function * stream_to_lines (stream: Readable) {\n let buf = ''\n for await (const chunk of stream as AsyncIterable<string>) {\n let i = 0, j = 0\n for (; (i = chunk.indexOf('\\n', j)) >= 0; ) {\n let line = chunk.slice(j, i)\n if (buf) {\n line = buf + line\n buf = ''\n }\n j = i + 1\n yield line\n }\n buf = chunk.slice(j)\n }\n}\n\n\nexport class WritableMemoryStream extends Writable {\n chunks: Buffer[] = [ ]\n \n pbuffer = defer<Buffer>()\n \n \n constructor () {\n super({ highWaterMark: 2 ** 30, decodeStrings: false })\n }\n \n \n override _write (chunk: Buffer, encoding: BufferEncoding, callback: (error?: Error) => void) {\n this.chunks.push(chunk as Buffer)\n callback()\n }\n \n \n override _writev (chunks: { chunk: any; encoding: BufferEncoding }[], callback: (error?: Error) => void): void {\n for (const { chunk } of chunks)\n this.chunks.push(chunk)\n callback()\n }\n \n \n override _final (callback: (error?: Error) => void): void {\n this.pbuffer.resolve(\n Buffer.concat(this.chunks)\n )\n this.chunks = null\n callback()\n }\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { Stream, Writable, Transform, type Readable, type Duplex, type TransformCallback } from 'stream'\nimport util from 'util'\n\nimport type Vinyl from 'vinyl'\nimport omit from 'lodash/omit.js'\n\nimport { t } from './i18n/instance.js'\nimport './prototype.js'\n\n\n/** `230` term 字符宽度 (实际上有 240) */\nexport const output_width = 230\n\n\nexport function set_inspect_options () {\n util.inspect.defaultOptions.maxArrayLength = 40\n util.inspect.defaultOptions.maxStringLength = 10000\n util.inspect.defaultOptions.breakLength = output_width\n util.inspect.defaultOptions.colors = true\n util.inspect.defaultOptions.compact = false\n util.inspect.defaultOptions.getters = true\n util.inspect.defaultOptions.depth = 2\n util.inspect.defaultOptions.sorted = false\n util.inspect.defaultOptions.showProxy = true\n \n util.inspect.styles.number = 'green'\n util.inspect.styles.string = 'cyan'\n util.inspect.styles.boolean = 'blue'\n util.inspect.styles.date = 'magenta'\n util.inspect.styles.special = 'white'\n}\n\n\nexport function assert (assertion: any, message?: string): never | void {\n if (!assertion) {\n debugger\n throw new Error(`${t('断言失败')}: ${ message ? `${message}: ` : '' }${inspect(assertion)}`)\n }\n}\n\n\nexport function dedent (\n templ: TemplateStringsArray | string,\n ...values: any[]\n): string {\n let strings = Array.from(typeof templ === 'string' ? [templ] : templ.raw)\n \n // 1. remove trailing whitespace\n strings[strings.length - 1] = strings[strings.length - 1].replace(\n /\\r?\\n([\\t ]*)$/,\n '',\n )\n \n // 2. find all line breaks to determine the highest common indentation level\n const indent_lengths = strings.reduce<number[]>(\n (arr, str) => {\n const matches = str.match(/\\n[\\t ]+/g)\n if (matches) \n return arr.concat(\n matches.map(match => \n match.length - 1)\n )\n \n return arr\n },\n [],\n )\n \n // 3. remove the common indentation from all strings\n if (indent_lengths.length) {\n const pattern = new RegExp(`\\n[\\t ]{${Math.min(...indent_lengths)}}`, 'g')\n \n strings = strings.map(str => str.replace(pattern, '\\n'))\n }\n \n // 4. remove leading whitespace\n strings[0] = strings[0].replace(/^\\r?\\n/, '')\n \n // 5. perform interpolation\n let string = strings[0]\n \n values.forEach((value, i) => {\n string += value + strings[i + 1]\n })\n \n string += '\\n'\n \n return string\n}\n\n\n/** 数组或 iterable 去重(可按 selector 去重) \n - selector?: 可以是 key (string) 或 (obj: any) => any\n*/\nexport function unique <T> (iterable: T[] | Iterable<T>, selector?: string | ((obj: T) => any)) {\n if (!selector)\n return [...new Set(iterable)]\n \n let map = new Map()\n const is_str_selector = typeof selector === 'string'\n for (const x of iterable)\n map.set(\n is_str_selector ? x[selector] : selector(x),\n x\n )\n \n return [...map.values()]\n}\n\n/** 排序对象中 key 的顺序,返回新的对象 */\nexport function sort_keys <T> (obj: T) {\n return Object.fromEntries(\n Object.entries(obj)\n .sort(([key_l], [key_r]) => \n strcmp(key_l, key_r))\n ) as T\n}\n\n\n/** 字符串字典序比较 */\nexport function strcmp (l: string, r: string) {\n if (l === r) return 0\n if (l < r) return -1\n return 1\n}\n\n\n/** 拼接 TypedArrays 生成一个完整的 Uint8Array */\nexport function concat (arrays: ArrayBufferView[]) {\n let length = 0\n for (const a of arrays)\n length += a.byteLength\n \n let buf = new Uint8Array(length)\n let offset = 0\n for (const a of arrays) {\n const uint8view = new Uint8Array(a.buffer, a.byteOffset, a.byteLength)\n buf.set(uint8view, offset)\n offset += uint8view.byteLength\n }\n \n return buf\n}\n\n\nexport function typed_array_to_buffer (view: ArrayBufferView) {\n return Buffer.from(view.buffer, view.byteOffset, view.byteLength)\n}\n\n\n/** 时间间隔 (milliseconds) 格式化 */\nexport function delta2str (delta: number) {\n if (delta < 1)\n return '0 ms'\n \n // [1, 1000) ms\n if (delta < 1000)\n return `${delta} ms`\n \n // 1.123 s\n if (1000 <= delta && delta < 1000 * 60)\n return `${(delta / 1000).toFixed(1)} s`\n \n // 1 min 12 s [1 min 0s, 60 min)\n const seconds = Math.trunc(delta / 1000)\n \n if (seconds < 60 * 60)\n return `${Math.trunc(seconds / 60)} min ${seconds % 60} s`\n \n const hour = Math.trunc(seconds / 3600)\n \n return `${hour} h ${Math.trunc((seconds - 3600 * hour) / 60)} min ${seconds % 60} s`\n}\n\n\n/** generate random id */\nexport function genid () {\n return Math.random() * 2**53\n}\n\n\nexport class Timer {\n started = new Date().getTime()\n \n ended: number\n \n stop () {\n this.ended = new Date().getTime()\n }\n \n get () {\n if (!this.ended)\n this.stop()\n \n return this.ended - this.started\n }\n \n getstr () {\n return `(${delta2str(this.get())})`\n }\n \n print () {\n console.log(this.getstr())\n }\n}\n\n\nexport function log_section (\n message: string, \n {\n time = false,\n timestamp = false,\n color = undefined,\n }: {\n time?: boolean\n timestamp?: boolean | Date\n color?: 'green' | 'red' | 'yellow'\n } = { }\n) {\n const stime = (() => {\n if (time)\n return delta2str(\n new Date().getTime() - global.started_at.getTime()\n ).pad(4, { position: 'left' })\n if (timestamp)\n if (typeof timestamp === 'object')\n return `${timestamp.to_str()}`\n else\n return `${new Date().to_str()}`\n return ''\n })()\n \n message = `${`${message} `.pad(39)} ${stime}`\n \n if (color)\n message = message[color]\n \n console.log(message)\n}\n\n\nexport function log_line () {\n console.log('---')\n}\n\n\nexport async function delay (milliseconds: number) {\n return new Promise(resolve => {\n setTimeout(resolve, milliseconds)\n })\n}\n\n\nexport interface Deferred <TValue> extends Promise<TValue> {\n resolve (value: TValue | PromiseLike<TValue>): void\n reject (reason?: Error): void\n}\n\n/** 创建一个 promise,后续可调用 promise.resolve, promise.reject 方法设置其状态和值 \n - initial?: `undefined` 传入非 undefined 值(包括 null)时直接设置为 resolved 状态 */\nexport function defer <TValue> (initial?: TValue): Deferred<TValue> {\n if (initial === undefined) {\n let resolve: (value: TValue | PromiseLike<TValue>) => void\n let reject: (reason?: Error) => void\n \n let promise = new Promise<TValue>((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n })\n \n return Object.assign(promise, { resolve, reject })\n } else\n return Object.assign(Promise.resolve(initial), {\n resolve () { },\n reject () { }\n })\n}\n\n\n// ------------ text\nexport function has_chinese (str: string) {\n return /[\\u4E00-\\u9FA5]/.test(str)\n}\n\n\nexport function escape_line_feed (str: string) {\n return str.replace(/\\n/g, '\\\\n')\n}\n\n/** util.inspect(obj) \n - options\n - limit?: `10000`\n - omit?: string[] */\nexport function inspect (\n obj: any, \n options: util.InspectOptions & {\n limit?: number\n omit?: string[]\n } = { }\n) {\n if (options.omit)\n obj = omit(obj, [inspect.custom, ...(options.omit || [])])\n \n let text = util.inspect(obj, options)\n \n if (!('limit' in options))\n options.limit = 10000\n if (options.limit && text.length > options.limit)\n return `${text.slice(0, options.limit)}……'\\u001b[39m\\n`\n else\n return text\n}\n\nexport namespace inspect {\n export const custom: typeof util.inspect.custom = util.inspect.custom\n}\n\n\n// ------------------------------------ stream\n/** npm map-stream \n filter will reemit the data if cb(err,pass) pass is truthy \n \n reduce is more tricky \n maybe we want to group the reductions or emit progress updates occasionally \n the most basic reduce just emits one 'data' event after it has recieved 'end'\n \n create an event stream and apply function to each .write, \n emitting each response as data unless it's an empty callback\n */\nexport function map_stream <Out, In = Vinyl> (\n mapper: (obj: In, cb: Function) => any, \n options?: { failures?: boolean }\n) {\n options = options || { }\n \n let inputs = 0,\n outputs = 0,\n ended = false,\n paused = false,\n destroyed = false,\n last_written = 0,\n in_next = false\n \n \n let stream = Object.assign(new Stream(), {\n readable: true, \n writable: true,\n \n write (data?: any) {\n if (ended) throw new Error('map stream is not writable')\n in_next = false\n inputs++\n \n try {\n // catch sync errors and handle them like async errors\n const written = wrapped_mapper(data, inputs, next)\n paused = (written === false)\n return !paused\n } catch (err) {\n // if the callback has been called syncronously, and the error has occured in an listener, throw it again.\n if (in_next)\n throw err\n next(err)\n return !paused\n }\n },\n \n end (data?: any) {\n if (ended) return\n _end(data)\n },\n \n destroy () {\n ended = destroyed = true\n stream.writable = stream.readable = paused = false\n process.nextTick(function () {\n stream.emit('close')\n })\n },\n \n pause () {\n paused = true\n },\n \n resume () {\n paused = false\n }\n })\n \n \n let error_event_name = options.failures ? 'failure' : 'error'\n \n // Items that are not ready to be written yet (because they would come out of order) get stuck in a queue for later.\n let write_queue = { }\n \n \n function queue_data (data, number) {\n let next_to_write = last_written + 1\n \n if (number === next_to_write) {\n // If it's next, and its not undefined write it\n if (data !== undefined) \n stream.emit('data', data)\n \n last_written++\n next_to_write++\n } else \n // Otherwise queue it for later.\n write_queue[number] = data\n \n \n // If the next value is in the queue, write it\n if (Object.prototype.hasOwnProperty.call(write_queue, next_to_write)) {\n let data_to_write = write_queue[next_to_write]\n delete write_queue[next_to_write]\n return queue_data(data_to_write, next_to_write)\n }\n \n outputs++\n if (inputs === outputs) {\n if (paused) {\n paused = false\n stream.emit('drain') // written all the incoming events\n }\n if (ended) _end()\n }\n }\n \n function next (err?: Error, data?: any, number?: number) {\n if (destroyed) return\n in_next = true\n \n if (!err || options.failures)\n queue_data(data, number)\n \n if (err)\n stream.emit(error_event_name, err)\n \n in_next = false\n }\n \n /** Wrap the mapper function by calling its callback with the order number of the item in the stream. */ \n function wrapped_mapper (input, number, callback) {\n return mapper.call(null, input, function (err, data) {\n callback(err, data, number)\n })\n }\n \n function _end (data?: any) {\n // if end was called with args, write it, \n ended = true // write will emit 'end' if ended is true\n stream.writable = false\n if (data !== undefined) \n return queue_data(data, inputs)\n else if (inputs === outputs) { // wait for processing \n stream.readable = false\n stream.emit('end')\n stream.destroy() \n }\n }\n \n return stream as Duplex\n}\n\n\nexport async function stream_to_buffer (stream: Readable) {\n let chunks = [ ]\n for await (const chunk of stream as AsyncIterable<Buffer>)\n chunks.push(chunk)\n return Buffer.concat(chunks)\n}\n\n\nexport async function * stream_to_lines (stream: Readable) {\n let buf = ''\n for await (const chunk of stream as AsyncIterable<string>) {\n let i = 0, j = 0\n for (; (i = chunk.indexOf('\\n', j)) >= 0; ) {\n let line = chunk.slice(j, i)\n if (buf) {\n line = buf + line\n buf = ''\n }\n j = i + 1\n yield line\n }\n buf = chunk.slice(j)\n }\n}\n\n\nexport class WritableMemoryStream extends Writable {\n chunks: Buffer[] = [ ]\n \n pbuffer = defer<Buffer>()\n \n \n constructor () {\n super({ highWaterMark: 2 ** 30, decodeStrings: false })\n }\n \n \n override _write (chunk: Buffer, encoding: BufferEncoding, callback: (error?: Error) => void) {\n this.chunks.push(chunk as Buffer)\n callback()\n }\n \n \n override _writev (chunks: { chunk: any; encoding: BufferEncoding }[], callback: (error?: Error) => void): void {\n for (const { chunk } of chunks)\n this.chunks.push(chunk)\n callback()\n }\n \n \n override _final (callback: (error?: Error) => void): void {\n this.pbuffer.resolve(\n Buffer.concat(this.chunks)\n )\n this.chunks = null\n callback()\n }\n}\n\n\n/** 用 TextDecoder 通过 .pipe 方法持续的解码 process.stdout 等流, \n 主要在 process.ts#start 中使用 \n https://nodejs.org/api/stream.html#implementing-a-transform-stream */\nexport class DecoderStream extends Transform {\n decoder: TextDecoder\n \n \n constructor (encoding: 'gb18030' | 'shift-jis' | 'utf-16le') {\n super({ encoding: 'utf-8' })\n this.decoder = new TextDecoder(encoding)\n }\n \n \n override _transform (chunk: Uint8Array, encoding: BufferEncoding, callback: TransformCallback) {\n assert(chunk instanceof Uint8Array)\n \n const str = this.decoder.decode(chunk, { stream: true })\n \n if (str.length)\n this.push(str, 'utf-8')\n \n callback()\n }\n \n \n override _flush (callback: TransformCallback) {\n const str = this.decoder.decode()\n \n if (str.length)\n this.push(str, 'utf-8')\n \n callback()\n }\n}\n"]}
|
package/myfont.woff2
DELETED
|
Binary file
|
package/myfontb.woff2
DELETED
|
Binary file
|