xshell 0.0.10 → 0.0.14

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/process.js CHANGED
@@ -1,31 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.call_node = exports.call = exports.start = exports.EXE_NODE = void 0;
3
+ exports.call_node = exports.call = exports.start = exports.exe_node = exports.fp_root = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const child_process_1 = require("child_process");
6
- const stream_buffers_1 = require("stream-buffers");
7
6
  const iconv_lite_1 = (0, tslib_1.__importDefault)(require("iconv-lite"));
8
7
  require("./prototype");
9
8
  const utils_1 = require("./utils");
10
- exports.EXE_NODE = process.execPath.to_slash();
9
+ exports.fp_root = `${__dirname}/`.to_slash();
10
+ exports.exe_node = process.execPath.to_slash();
11
11
  /** start process
12
- - exe: .exe path or filename (full path is recommanded to skip PATH searching for better perf)
12
+ - exe: .exe path or filename (full path is recommanded to skip path searching for better perf)
13
13
  - args: `[]` arguments list
14
14
  - options
15
- - cwd?: `'D:/'`
15
+ - cwd?: `fp_root`
16
16
  - env?: `process.env` overwrite/add to process.env
17
- - encoding?: `'UTF-8'` child output encoding
17
+ - encoding?: `'utf-8'` child output encoding
18
18
  - print?: `true` print option (with details)
19
19
  - stdio?: `'pipe'` when 'ignore' then ignore stdio processing
20
20
  - detached?: `false` whether to break the connection with child (ignore stdio, unref)
21
21
  */
22
- function start(exe, args = [], { cwd = 'd:/', encoding = 'UTF-8', print = true, stdio = 'pipe', detached = false, env, } = {}) {
22
+ function start(exe, args = [], { cwd = exports.fp_root, encoding = 'utf-8', print = true, stdio = 'pipe', detached = false, env, } = {}) {
23
23
  const options = {
24
24
  cwd,
25
25
  shell: false,
26
- windowsHide: true,
26
+ windowsHide: !detached,
27
27
  stdio,
28
- ...env ? { ...process.env, ...env } : {},
28
+ ...env ? {
29
+ env: { ...process.env, ...env }
30
+ } : {},
29
31
  };
30
32
  if (print)
31
33
  console.log(`${exe} ${args.map(arg => arg.includes(' ') ? arg.quote() : arg).join(' ')}`.blue);
@@ -41,28 +43,31 @@ function start(exe, args = [], { cwd = 'd:/', encoding = 'UTF-8', print = true,
41
43
  let child = (0, child_process_1.spawn)(exe, args, options);
42
44
  if (stdio === 'pipe')
43
45
  child.stdin.setDefaultEncoding('utf8');
44
- // prevent child spawn error crashing NodeJS process
46
+ // prevent child spawn error crashing nodejs process
45
47
  child.on('error', error => {
46
48
  console.error(error);
47
49
  });
48
50
  if (stdio === 'ignore')
49
51
  return child;
50
- if (encoding !== 'BINARY') {
51
- child.stdout = child.stdout.pipe(iconv_lite_1.default.decodeStream(encoding));
52
- child.stderr = child.stderr.pipe(iconv_lite_1.default.decodeStream(encoding));
52
+ if (encoding !== 'binary') {
53
+ if (encoding === 'utf-8') {
54
+ child.stdout.setEncoding('utf-8');
55
+ child.stderr.setEncoding('utf-8');
56
+ }
57
+ else {
58
+ child.stdout = child.stdout.pipe(iconv_lite_1.default.decodeStream(encoding));
59
+ child.stderr = child.stderr.pipe(iconv_lite_1.default.decodeStream(encoding));
60
+ }
53
61
  if (print) {
54
- child.stdout.on('data', (chunk) => {
55
- process.stdout.write(chunk);
56
- });
57
- child.stderr.on('data', (chunk) => {
58
- process.stderr.write(chunk);
59
- });
62
+ child.stdout.pipe(process.stdout, { end: false });
63
+ child.stderr.pipe(process.stderr, { end: false });
60
64
  }
61
65
  }
62
66
  return child;
63
67
  }
64
68
  exports.start = start;
65
- async function call(exe, args = [], { encoding = 'UTF-8', print = true, init_buffer_size, throw_code = true, } = {}) {
69
+ async function call(exe, args = [], options = {}) {
70
+ const { encoding = 'utf-8', print = true, throw_code = true, } = options;
66
71
  const print_options = typeof print === 'boolean' ?
67
72
  {
68
73
  command: print,
@@ -76,59 +81,48 @@ async function call(exe, args = [], { encoding = 'UTF-8', print = true, init_buf
76
81
  const cmd = `${exe} ${args.map(arg => arg.includes(' ') ? arg.quote() : arg).join(' ')}`;
77
82
  if (print_options.command)
78
83
  console.log(cmd.blue);
79
- let child = start(exe, args, Object.assign(arguments[2] || {}, { print: false }));
84
+ options.print = false;
85
+ let child = start(exe, args, options);
80
86
  // --- collect output
81
- let stdout;
82
- let stderr;
83
- if (encoding !== 'BINARY') {
84
- stdout = '';
85
- stderr = '';
86
- child.stdout.on('data', chunk => {
87
- if (print_options.stdout)
88
- process.stdout.write(chunk);
89
- stdout += chunk;
90
- });
91
- child.stderr.on('data', chunk => {
92
- if (print_options.stderr)
93
- process.stderr.write(chunk);
94
- stderr += chunk;
95
- });
96
- }
97
- else {
98
- const stream_buffer_options = init_buffer_size ? {
99
- initialSize: init_buffer_size,
100
- incrementAmount: init_buffer_size,
101
- } : {};
102
- stdout = new stream_buffers_1.WritableStreamBuffer(stream_buffer_options);
103
- stderr = new stream_buffers_1.WritableStreamBuffer(stream_buffer_options);
104
- if (print_options.stdout)
105
- child.stdout.pipe(stdout);
106
- if (print_options.stderr)
107
- child.stderr.pipe(stderr);
108
- }
87
+ let stdouts = [];
88
+ let stderrs = [];
109
89
  let code, signal;
110
90
  await Promise.all([
111
- new Promise(resolve => {
112
- child.stdout.on('end', () => { resolve(); });
113
- }),
114
- new Promise(resolve => {
115
- child.stderr.on('end', () => { resolve(); });
116
- }),
117
91
  new Promise(resolve => {
118
92
  child.on('exit', (_code, _signal) => {
119
93
  code = _code;
120
94
  signal = _signal;
121
95
  resolve();
122
96
  });
123
- })
97
+ }),
98
+ (async () => {
99
+ for await (const chunk of child.stdout) {
100
+ if (encoding !== 'binary' && print_options.stdout)
101
+ process.stdout.write(chunk);
102
+ stdouts.push(chunk);
103
+ }
104
+ })(),
105
+ (async () => {
106
+ for await (const chunk of child.stderr) {
107
+ if (encoding !== 'binary' && print_options.stderr)
108
+ process.stderr.write(chunk);
109
+ stderrs.push(chunk);
110
+ }
111
+ })()
124
112
  ]);
125
- const message = `Process(${child.pid}) '${cmd}' exited ${code}${signal ? `, by signal ${signal}` : ''}. `;
113
+ const message = `process(${child.pid}) '${cmd}' exited ${code}${signal ? `, by signal ${signal}` : ''}.`;
126
114
  if (print_options.code || code || signal)
127
- console.log(message[!code && !signal ? 'green' : 'red'].pad(global.WIDTH || 240, { character: '─' }));
115
+ console.log(message[code || signal ? 'red' : 'blue']);
128
116
  const result = {
129
117
  pid: child.pid,
130
- stdout: encoding !== 'BINARY' ? stdout : (stdout.getContents() || Buffer.alloc(0)),
131
- stderr: encoding !== 'BINARY' ? stderr : (stderr.getContents() || Buffer.alloc(0)),
118
+ stdout: encoding === 'binary' ?
119
+ Buffer.concat(stdouts)
120
+ :
121
+ stdouts.join(''),
122
+ stderr: encoding === 'binary' ?
123
+ Buffer.concat(stderrs)
124
+ :
125
+ stderrs.join(''),
132
126
  code,
133
127
  signal,
134
128
  child,
@@ -147,14 +141,14 @@ exports.call = call;
147
141
  - options
148
142
  - cwd?: `'d:/'`
149
143
  - env?: `process.env` overwrite/add to process.env
150
- - encoding?: `'UTF-8'` child process output encoding
144
+ - encoding?: `'utf-8'` child process output encoding
151
145
  - print?: `true` print option (with details)
152
146
  - stdio?: `'pipe'` when 'ignore' then ignore stdio processing
153
147
  - detached?: `false` whether to break the connection with child (ignore stdio, unref)
154
148
  - throw_code?: `true` whether to throw Error when code is not 0
155
149
  */
156
150
  async function call_node(js, args = [], options) {
157
- return call(exports.EXE_NODE, [js, ...args], options);
151
+ return call(exports.exe_node, [js, ...args], options);
158
152
  }
159
153
  exports.call_node = call_node;
160
154
  //# sourceMappingURL=process.js.map
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 { spawn } from 'child_process'\nimport type { SpawnOptions, ChildProcess } from 'child_process'\nimport { Readable, Writable } from 'stream'\n\n\nimport { WritableStreamBuffer } from 'stream-buffers'\nimport type { WritableStreamBufferOptions } from 'stream-buffers'\nimport iconv from 'iconv-lite'\n\n\nimport './prototype'\nimport { Encoding } from './file'\nimport { inspect } from './utils'\n\n\nexport const EXE_NODE = process.execPath.to_slash()\n\n// ------------------------------------ Start & Call\ninterface StartOptions {\n /** `'d:/'` */\n cwd?: string\n \n /** `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 option (with details) */\n print?: boolean | {\n command?: boolean\n stdout?: boolean\n stderr?: boolean\n code?: boolean\n error?: boolean\n }\n \n /** `'pipe'` when 'ignore' then ignore stdio processing */\n stdio?: 'pipe' | 'ignore'\n \n /** `false` whether to break the connection with child (ignore stdio, unref) */\n detached?: boolean\n}\n\n/** start process \n - exe: .exe 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` overwrite/add to process.env\n - encoding?: `'UTF-8'` child output encoding\n - print?: `true` print option (with details)\n - stdio?: `'pipe'` when 'ignore' then ignore stdio processing\n - detached?: `false` whether to break the connection with child (ignore stdio, unref)\n*/\nexport function start (exe: string, args: string[] = [], {\n cwd = 'd:/',\n \n encoding = 'UTF-8',\n \n print = true,\n \n stdio = 'pipe',\n \n detached = false,\n \n env,\n \n}: StartOptions = { }): ChildProcess {\n const options: SpawnOptions = {\n cwd,\n shell: false,\n windowsHide: true,\n stdio,\n ... env ? { ...process.env, ...env } : { },\n }\n \n if (print)\n console.log(`${exe} ${ args.map(arg => arg.includes(' ') ? arg.quote() : arg).join(' ') }`.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 if (stdio === 'pipe')\n child.stdin.setDefaultEncoding('utf8')\n \n // prevent child spawn error crashing NodeJS process\n child.on('error', error => {\n console.error(error)\n })\n \n if (stdio === 'ignore') return child\n \n if (encoding !== 'BINARY') {\n child.stdout = child.stdout.pipe(iconv.decodeStream(encoding)) as any as Readable\n child.stderr = child.stderr.pipe(iconv.decodeStream(encoding)) as any as Readable\n \n if (print) {\n child.stdout.on('data', (chunk) => {\n process.stdout.write(chunk)\n })\n child.stderr.on('data', (chunk) => {\n process.stderr.write(chunk)\n })\n }\n }\n \n return child\n}\n\n\nexport interface CallOptions extends StartOptions {\n /** `true` whether to throw Error when code is not 0 */\n throw_code?: boolean\n}\n\nexport interface CallResult<T = string> {\n pid: number\n stdout: T\n stderr: T\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 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` overwrite/add to process.env\n - encoding?: `'UTF-8'` child output encoding\n - print?: `true` print option (with details)\n - stdio?: `'pipe'` when 'ignore' then ignore stdio processing\n - detached?: `false` whether to break the connection with child (ignore stdio, unref)\n - throw_code?: `true` whether to throw Error when code is not 0\n*/\nexport async function call (exe: string, args?: string[]): Promise<CallResult<string>>\nexport async function call (exe: string, args?: string[], options?: CallOptions & { encoding: 'BINARY', init_buffer_size?: number }): Promise<CallResult<Buffer>>\nexport async function call (exe: string, args?: string[], options?: CallOptions & { encoding?: 'UTF-8' | 'GB18030' }): Promise<CallResult<string>>\nexport async function call (exe: string, args: string[] = [], {\n encoding = 'UTF-8', \n \n print = true,\n \n init_buffer_size,\n \n throw_code = true,\n}: CallOptions & { init_buffer_size?: number } = { }): Promise<CallResult<string | Buffer>> {\n const print_options = typeof print === 'boolean' ?\n {\n command: print,\n stdout: print,\n stderr: print,\n code: print,\n error: print\n }\n :\n print\n \n const cmd = `${exe} ${ args.map(arg => arg.includes(' ') ? arg.quote() : arg).join(' ') }`\n \n if (print_options.command)\n console.log(cmd.blue)\n \n let child = start(exe, args, Object.assign(arguments[2] || { }, { print: false }))\n \n // --- collect output\n let stdout: string | WritableStreamBuffer\n let stderr: string | WritableStreamBuffer\n \n \n if (encoding !== 'BINARY') {\n stdout = ''\n stderr = ''\n \n child.stdout.on('data', chunk => {\n if (print_options.stdout)\n process.stdout.write(chunk)\n \n stdout += chunk\n })\n \n child.stderr.on('data', chunk => {\n if (print_options.stderr)\n process.stderr.write(chunk)\n \n stderr += chunk\n })\n } else {\n const stream_buffer_options: WritableStreamBufferOptions = init_buffer_size ? {\n initialSize: init_buffer_size,\n incrementAmount: init_buffer_size,\n } : { }\n \n stdout = new WritableStreamBuffer(stream_buffer_options)\n stderr = new WritableStreamBuffer(stream_buffer_options)\n \n if (print_options.stdout)\n child.stdout.pipe(stdout as WritableStreamBuffer)\n if (print_options.stderr)\n child.stderr.pipe(stderr as WritableStreamBuffer)\n }\n \n \n let code: number | null, \n signal: NodeJS.Signals\n \n await Promise.all([\n new Promise<void>( resolve => {\n child.stdout.on('end', () => { resolve() })\n }),\n new Promise<void>( resolve => {\n child.stderr.on('end', () => { resolve() })\n }),\n new Promise<void>( resolve => {\n child.on('exit', (_code, _signal: NodeJS.Signals) => {\n code = _code\n signal = _signal\n resolve()\n })\n })\n ])\n \n const message = `Process(${ child.pid }) '${ cmd }' exited ${ code }${ signal ? `, by signal ${ signal }` : '' }. `\n \n if (print_options.code || code || signal)\n console.log(message[!code && !signal ? 'green' : 'red'].pad(global.WIDTH || 240, { character: '─' }))\n \n const result = {\n pid: child.pid,\n stdout: encoding !== 'BINARY' ? (stdout as string) : ((stdout as WritableStreamBuffer).getContents() || Buffer.alloc(0)),\n stderr: encoding !== 'BINARY' ? (stderr as string) : ((stderr as WritableStreamBuffer).getContents() || Buffer.alloc(0)),\n code,\n signal,\n child,\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 path (relative path will resolve based on cwd)\n - args: `[]` arguments list\n - options\n - cwd?: `'d:/'`\n - env?: `process.env` overwrite/add to process.env\n - encoding?: `'UTF-8'` child process output encoding\n - print?: `true` print option (with details)\n - stdio?: `'pipe'` when 'ignore' then ignore stdio processing\n - detached?: `false` whether to break the connection with child (ignore stdio, unref)\n - throw_code?: `true` whether to throw Error when code is not 0\n*/\nexport async function call_node (js: string, args: string[] = [], options?: CallOptions & { encoding?: 'UTF-8' | 'GB18030' }) {\n return call(EXE_NODE, [js, ...args], options)\n}\n\n"]}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["process.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from 'child_process'\nimport type { SpawnOptions, ChildProcess } from 'child_process'\nimport { Readable, Writable } from 'stream'\n\nimport iconv from 'iconv-lite'\n\nimport './prototype'\nimport { Encoding } from './file'\nimport { inspect } from './utils'\n\nexport const fp_root = `${__dirname}/`.to_slash()\n\nexport const exe_node = process.execPath.to_slash()\n\n\n// ------------------------------------ start & call\ninterface StartOptions {\n /** `'d:/'` */\n cwd?: string\n \n /** `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 option (with details) */\n print?: boolean | {\n command?: boolean\n stdout?: boolean\n stderr?: boolean\n code?: boolean\n error?: boolean\n }\n \n /** `'pipe'` when 'ignore' then ignore stdio processing */\n stdio?: 'pipe' | 'ignore'\n \n /** `false` whether to break the connection with child (ignore stdio, unref) */\n detached?: boolean\n}\n\n/** start process \n - exe: .exe 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` overwrite/add to process.env\n - encoding?: `'utf-8'` child output encoding\n - print?: `true` print option (with details)\n - stdio?: `'pipe'` when 'ignore' then ignore stdio processing\n - detached?: `false` whether to break the connection with child (ignore stdio, unref)\n*/\nexport function start (exe: string, args: string[] = [], {\n cwd = fp_root,\n \n encoding = 'utf-8',\n \n print = true,\n \n stdio = 'pipe',\n \n detached = false,\n \n env,\n \n}: StartOptions = { }): ChildProcess {\n const options: SpawnOptions = {\n cwd,\n shell: false,\n windowsHide: !detached,\n stdio,\n ... env ? {\n env: { ...process.env, ...env }\n } : { },\n }\n \n if (print)\n console.log(`${exe} ${ args.map(arg => arg.includes(' ') ? arg.quote() : arg).join(' ') }`.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 if (stdio === 'pipe')\n child.stdin.setDefaultEncoding('utf8')\n \n // prevent child spawn error crashing nodejs process\n child.on('error', error => {\n console.error(error)\n })\n \n if (stdio === 'ignore') return child\n \n if (encoding !== 'binary') {\n if (encoding === 'utf-8') {\n child.stdout.setEncoding('utf-8')\n child.stderr.setEncoding('utf-8')\n } else {\n child.stdout = child.stdout.pipe(\n iconv.decodeStream(encoding)\n ) as any as Readable\n child.stderr = child.stderr.pipe(\n iconv.decodeStream(encoding)\n ) as any as Readable\n }\n \n if (print) {\n child.stdout.pipe(process.stdout, { end: false })\n child.stderr.pipe(process.stderr, { end: false })\n }\n }\n \n return child\n}\n\n\nexport interface CallOptions extends StartOptions {\n /** `true` whether to throw Error when code is not 0 */\n throw_code?: boolean\n}\n\nexport interface CallResult<T = string> {\n pid: number\n stdout: T\n stderr: T\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 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` overwrite/add to process.env\n - encoding?: `'utf-8'` child output encoding\n - print?: `true` print option (with details)\n - stdio?: `'pipe'` when 'ignore' then ignore stdio processing\n - detached?: `false` whether to break the connection with child (ignore stdio, unref)\n - throw_code?: `true` whether to throw Error when code is not 0\n*/\nexport async function call (exe: string, args?: string[]): Promise<CallResult<string>>\nexport async function call (exe: string, args?: string[], options?: CallOptions & { encoding?: 'utf-8' | 'gb18030' }): 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 | Buffer>> {\n const {\n encoding = 'utf-8', \n print = true,\n throw_code = true,\n } = options\n \n const print_options = typeof print === 'boolean' ?\n {\n command: print,\n stdout: print,\n stderr: print,\n code: print,\n error: print\n }\n :\n print\n \n const cmd = `${exe} ${ args.map(arg => arg.includes(' ') ? arg.quote() : arg).join(' ') }`\n \n if (print_options.command)\n console.log(cmd.blue)\n \n options.print = false\n \n let child = start(exe, args, options)\n \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.on('exit', (_code, _signal) => {\n code = _code\n signal = _signal\n resolve()\n })\n }),\n (async () => {\n for await (const chunk of child.stdout as AsyncIterable<string | Buffer>) {\n if (encoding !== 'binary' && print_options.stdout)\n process.stdout.write(chunk)\n stdouts.push(chunk)\n }\n })(),\n (async () => {\n for await (const chunk of child.stderr as AsyncIterable<string | Buffer>) {\n if (encoding !== 'binary' && print_options.stderr)\n process.stderr.write(chunk)\n stderrs.push(chunk)\n }\n })()\n ])\n \n const message = `process(${ child.pid }) '${ cmd }' exited ${ code }${ signal ? `, by signal ${ signal }` : '' }.`\n \n if (print_options.code || code || signal)\n console.log(message[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 path (relative path will resolve based on cwd)\n - args: `[]` arguments list\n - options\n - cwd?: `'d:/'`\n - env?: `process.env` overwrite/add to process.env\n - encoding?: `'utf-8'` child process output encoding\n - print?: `true` print option (with details)\n - stdio?: `'pipe'` when 'ignore' then ignore stdio processing\n - detached?: `false` whether to break the connection with child (ignore stdio, unref)\n - throw_code?: `true` whether to throw Error when code is not 0\n*/\nexport async function call_node (js: string, args: string[] = [], options?: CallOptions & { encoding?: 'utf-8' | 'gb18030' }) {\n return call(exe_node, [js, ...args], options)\n}\n\n"]}
package/prototype.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  declare global {
2
3
  interface String {
3
4
  readonly width: number;
@@ -57,10 +58,10 @@ declare global {
57
58
  find(this: string, pattern: string, preservations?: string, flags?: string, pattern_placeholder?: RegExp): {
58
59
  [name: string]: string;
59
60
  };
60
- /** - type?: `'SINGLE'` */
61
- quote(this: string, type?: keyof typeof QUOTES | 'PSH'): string;
62
- /** - shape?: `'PARENTHESIS'` */
63
- bracket(this: string, shape?: keyof typeof BRACKETS): string;
61
+ /** - type?: `'single'` */
62
+ quote(this: string, type?: keyof typeof quotes | 'psh'): string;
63
+ /** - shape?: `'parenthesis'` */
64
+ bracket(this: string, shape?: keyof typeof brackets): string;
64
65
  surround(this: string, left: string, right?: string): string;
65
66
  surround_tag(this: string, tag_name: string): string;
66
67
  to_lf(this: string): string;
@@ -70,14 +71,21 @@ declare global {
70
71
  */
71
72
  rm(this: string, pattern: string | RegExp, flags?: string): string;
72
73
  readonly red: string;
74
+ readonly red_: string;
73
75
  readonly green: string;
76
+ readonly green_: string;
74
77
  readonly yellow: string;
78
+ readonly yellow_: string;
75
79
  readonly blue: string;
80
+ readonly blue_: string;
76
81
  readonly magenta: string;
82
+ readonly magenta_: string;
77
83
  readonly cyan: string;
84
+ readonly cyan_: string;
78
85
  readonly grey: string;
79
86
  readonly underline: string;
80
87
  strip_ansi(this: string): string;
88
+ /** split string to lines and strip last '' after last \n */
81
89
  split_lines(this: string): string[];
82
90
  trim_doc_comment(this: string): string;
83
91
  split_indent(this: string): {
@@ -85,7 +93,10 @@ declare global {
85
93
  text: string;
86
94
  };
87
95
  to_base64(this: string): string;
96
+ /** - buffer: `false` return raw Buffer */
88
97
  decode_base64(this: string): string;
98
+ decode_base64(this: string, buffer: true): Buffer;
99
+ decode_base64(this: string, buffer?: boolean): string | Buffer;
89
100
  space(this: string): string;
90
101
  fdir: string;
91
102
  /** path.basename, e.g.
@@ -137,29 +148,29 @@ declare global {
137
148
  join_lines(): string;
138
149
  }
139
150
  }
140
- import colors from 'colors/safe';
141
- export declare const EMOJI_REGEX: RegExp;
142
- export { colors };
151
+ import chalk from 'chalk';
152
+ export declare const emoji_regex: RegExp;
153
+ export { chalk };
143
154
  export declare function to_method_property_descriptors(methods: {
144
155
  [name: string]: Function;
145
156
  }): PropertyDescriptorMap;
146
157
  export declare function to_getter_property_descriptors(getters: {
147
158
  [name: string]: Function;
148
159
  }): PropertyDescriptorMap;
149
- export declare const CJK = "([\u2E80-\u9FFF\uF900-\uFAFF])";
150
- export declare const QUOTES: {
151
- SINGLE: string;
152
- DOUBLE: string;
153
- BACKTICK: string;
160
+ export declare const cjk = "([\u2E80-\u9FFF\uF900-\uFAFF])";
161
+ export declare const quotes: {
162
+ single: string;
163
+ double: string;
164
+ backtick: string;
154
165
  };
155
- export declare const BRACKETS: {
156
- readonly ROUND: readonly ["(", ")"];
157
- readonly SQUARE: readonly ["[", "]"];
158
- readonly CURLY: readonly ["{", "}"];
159
- readonly POINTY: readonly ["<", ">"];
160
- readonly CORNER: readonly ["「", "」"];
161
- readonly FAT: readonly ["【", "】"];
162
- readonly TORTOISE_SHELL: readonly ["〔", "〕"];
166
+ export declare const brackets: {
167
+ readonly round: readonly ["(", ")"];
168
+ readonly square: readonly ["[", "]"];
169
+ readonly curly: readonly ["{", "}"];
170
+ readonly pointy: readonly ["<", ">"];
171
+ readonly corner: readonly ["「", "」"];
172
+ readonly fat: readonly ["【", "】"];
173
+ readonly tortoise_shell: readonly ["〔", "〕"];
163
174
  };
164
175
  export declare function to_json(obj: any, replacer?: any): string;
165
176
  export declare function to_json_safely(obj: any, replacer?: any): string;