@mirascript/cli 0.1.78 → 0.1.79
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/dist/index.js +33 -23
- package/dist/index.js.map +2 -2
- package/package.json +4 -4
- package/src/commands/run.ts +33 -23
package/dist/index.js
CHANGED
|
@@ -201,7 +201,31 @@ async function startRepl() {
|
|
|
201
201
|
|
|
202
202
|
// src/commands/run.ts
|
|
203
203
|
var DEFAULT_TIMEOUT = 3e3;
|
|
204
|
-
|
|
204
|
+
async function checkScriptFile(script) {
|
|
205
|
+
try {
|
|
206
|
+
const s = await stat(script);
|
|
207
|
+
if (!s.isFile()) {
|
|
208
|
+
console.error(`脚本路径不是文件: ${script}`);
|
|
209
|
+
process.exitCode = 2;
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
} catch (ex) {
|
|
213
|
+
if (ex.code === "ENOENT") {
|
|
214
|
+
console.error(`脚本文件不存在: ${script}`);
|
|
215
|
+
process.exitCode = 2;
|
|
216
|
+
} else if (ex.code === "EACCES") {
|
|
217
|
+
console.error(`权限不足: ${ex.message}`);
|
|
218
|
+
process.exitCode = 3;
|
|
219
|
+
} else {
|
|
220
|
+
console.error(`无法访问脚本文件: ${ex.message}`);
|
|
221
|
+
process.exitCode = 1;
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
var command = program.command("run", { isDefault: true });
|
|
228
|
+
command.description("执行 MiraScript 脚本,默认命令").option(
|
|
205
229
|
"-v, --variable <key=value>",
|
|
206
230
|
"设置全局变量,可以多次使用",
|
|
207
231
|
(v, p2) => {
|
|
@@ -233,13 +257,16 @@ program.command("run", { isDefault: true }).description("执行 MiraScript 脚
|
|
|
233
257
|
return ms;
|
|
234
258
|
},
|
|
235
259
|
DEFAULT_TIMEOUT
|
|
236
|
-
).option("--no-template", "使用脚本模式").option("-e, --eval <script>", "要执行的脚本").argument("[script]", "要执行的脚本文件路径,使用 -
|
|
260
|
+
).option("--no-template", "使用脚本模式").option("-e, --eval <script>", "要执行的脚本").argument("[script]", "要执行的脚本文件路径,使用 - 从标准输入读取").action(async (script, opt) => {
|
|
237
261
|
if (opt.eval == null && script == null) {
|
|
238
262
|
await startRepl();
|
|
239
263
|
return;
|
|
240
264
|
}
|
|
241
265
|
configCheckpoint(opt.timeout || Number.POSITIVE_INFINITY);
|
|
242
266
|
if (opt.eval != null) {
|
|
267
|
+
if (script != null) {
|
|
268
|
+
command.help({ error: true });
|
|
269
|
+
}
|
|
243
270
|
const template2 = !!opt.template;
|
|
244
271
|
await execute(opt.eval, template2, opt.variable, template2 ? "eval.miratpl" : "eval.mira");
|
|
245
272
|
return;
|
|
@@ -253,24 +280,7 @@ program.command("run", { isDefault: true }).description("执行 MiraScript 脚
|
|
|
253
280
|
template = !!opt.template;
|
|
254
281
|
url = "stdin";
|
|
255
282
|
} else {
|
|
256
|
-
|
|
257
|
-
const s = await stat(script);
|
|
258
|
-
if (!s.isFile()) {
|
|
259
|
-
console.error(`脚本路径不是文件: ${script}`);
|
|
260
|
-
process.exitCode = 2;
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
} catch (ex) {
|
|
264
|
-
if (ex.code === "ENOENT") {
|
|
265
|
-
console.error(`脚本文件不存在: ${script}`);
|
|
266
|
-
process.exitCode = 2;
|
|
267
|
-
} else if (ex.code === "EACCES") {
|
|
268
|
-
console.error(`权限不足: ${ex.message}`);
|
|
269
|
-
process.exitCode = 3;
|
|
270
|
-
} else {
|
|
271
|
-
console.error(`无法访问脚本文件: ${ex.message}`);
|
|
272
|
-
process.exitCode = 1;
|
|
273
|
-
}
|
|
283
|
+
if (!await checkScriptFile(script)) {
|
|
274
284
|
return;
|
|
275
285
|
}
|
|
276
286
|
codeStr = await readFile(script, "utf8");
|
|
@@ -319,10 +329,10 @@ async function format(input, templateMode) {
|
|
|
319
329
|
compiler.free();
|
|
320
330
|
}
|
|
321
331
|
}
|
|
322
|
-
var
|
|
323
|
-
|
|
332
|
+
var command2 = program2.command("format");
|
|
333
|
+
command2.description("格式化 MiraScript 脚本").option("-w, --write", "直接修改文件").option("-t, --template", "对无法推断类型的文件使用模板模式").argument("<script...>", '要格式化的脚本文件路径或 glob,输入 "-" 表示从标准输入读取').action(async (script, opt) => {
|
|
324
334
|
if (script.length === 0) {
|
|
325
|
-
|
|
335
|
+
command2.help({ error: true });
|
|
326
336
|
}
|
|
327
337
|
if (script.length === 1 && script[0] === "-") {
|
|
328
338
|
let input = "";
|
package/dist/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/commands/run.ts", "../src/utils/execute.ts", "../src/utils/print.ts", "../src/utils/color.ts", "../src/utils/repl.ts", "../src/commands/format.ts", "../src/commands/repl.ts"],
|
|
4
|
-
"mappings": ";AAAA,SAAS,WAAAA,gBAAe;AACxB,OAAO,SAAS,gBAAgB,KAAK,EAAE,MAAM,OAAO;;;
|
|
5
|
-
"names": ["program", "styles", "supportsColor", "options", "format", "supportsColor", "styles", "compile", "CompileError", "createVmContext", "CompileError", "createVmContext", "script", "compile", "result", "p", "template", "program", "program", "program", "program"]
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["program", "styles", "supportsColor", "options", "format", "supportsColor", "styles", "compile", "CompileError", "createVmContext", "CompileError", "createVmContext", "script", "compile", "result", "p", "template", "program", "command", "program", "program", "program"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mirascript/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.79",
|
|
4
4
|
"author": "CloudPSS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Cli for MiraScript, an expression based scripting language.",
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
"ansi-styles": "^7.0.0",
|
|
39
39
|
"commander": "^15.0.0",
|
|
40
40
|
"supports-color": "^11.0.0",
|
|
41
|
-
"@mirascript/bindings": "~0.1.
|
|
42
|
-
"@mirascript/mirascript": "~0.1.
|
|
41
|
+
"@mirascript/bindings": "~0.1.79",
|
|
42
|
+
"@mirascript/mirascript": "~0.1.79"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@types/node": "^26.1.
|
|
45
|
+
"@types/node": "^26.1.2",
|
|
46
46
|
"type-fest": "^5.8.0"
|
|
47
47
|
},
|
|
48
48
|
"scripts": {
|
package/src/commands/run.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
1
2
|
import { readFile, stat } from 'node:fs/promises';
|
|
2
3
|
import { pathToFileURL } from 'node:url';
|
|
3
4
|
import { text } from 'node:stream/consumers';
|
|
@@ -8,9 +9,33 @@ import { startRepl } from '../utils/repl.js';
|
|
|
8
9
|
|
|
9
10
|
const DEFAULT_TIMEOUT = 3000;
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
/** 检查脚本文件 */
|
|
13
|
+
async function checkScriptFile(script: string): Promise<boolean> {
|
|
14
|
+
try {
|
|
15
|
+
const s = await stat(script);
|
|
16
|
+
if (!s.isFile()) {
|
|
17
|
+
console.error(`脚本路径不是文件: ${script}`);
|
|
18
|
+
process.exitCode = 2;
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
} catch (ex) {
|
|
22
|
+
if ((ex as NodeJS.ErrnoException).code === 'ENOENT') {
|
|
23
|
+
console.error(`脚本文件不存在: ${script}`);
|
|
24
|
+
process.exitCode = 2;
|
|
25
|
+
} else if ((ex as NodeJS.ErrnoException).code === 'EACCES') {
|
|
26
|
+
console.error(`权限不足: ${(ex as NodeJS.ErrnoException).message}`);
|
|
27
|
+
process.exitCode = 3;
|
|
28
|
+
} else {
|
|
29
|
+
console.error(`无法访问脚本文件: ${(ex as NodeJS.ErrnoException).message}`);
|
|
30
|
+
process.exitCode = 1;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const command = program.command('run', { isDefault: true });
|
|
38
|
+
command
|
|
14
39
|
.description('执行 MiraScript 脚本,默认命令')
|
|
15
40
|
.option(
|
|
16
41
|
'-v, --variable <key=value>',
|
|
@@ -49,7 +74,7 @@ program
|
|
|
49
74
|
)
|
|
50
75
|
.option('--no-template', '使用脚本模式')
|
|
51
76
|
.option('-e, --eval <script>', '要执行的脚本')
|
|
52
|
-
.argument('[script]', '要执行的脚本文件路径,使用 -
|
|
77
|
+
.argument('[script]', '要执行的脚本文件路径,使用 - 从标准输入读取')
|
|
53
78
|
.action(async (script, opt) => {
|
|
54
79
|
if (opt.eval == null && script == null) {
|
|
55
80
|
await startRepl();
|
|
@@ -57,6 +82,9 @@ program
|
|
|
57
82
|
}
|
|
58
83
|
configCheckpoint(opt.timeout || Number.POSITIVE_INFINITY);
|
|
59
84
|
if (opt.eval != null) {
|
|
85
|
+
if (script != null) {
|
|
86
|
+
command.help({ error: true });
|
|
87
|
+
}
|
|
60
88
|
const template = !!opt.template;
|
|
61
89
|
await execute(opt.eval, template, opt.variable, template ? 'eval.miratpl' : 'eval.mira');
|
|
62
90
|
return;
|
|
@@ -70,27 +98,9 @@ program
|
|
|
70
98
|
template = !!opt.template;
|
|
71
99
|
url = 'stdin';
|
|
72
100
|
} else {
|
|
73
|
-
|
|
74
|
-
const s = await stat(script);
|
|
75
|
-
if (!s.isFile()) {
|
|
76
|
-
console.error(`脚本路径不是文件: ${script}`);
|
|
77
|
-
process.exitCode = 2;
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
} catch (ex) {
|
|
81
|
-
if ((ex as NodeJS.ErrnoException).code === 'ENOENT') {
|
|
82
|
-
console.error(`脚本文件不存在: ${script}`);
|
|
83
|
-
process.exitCode = 2;
|
|
84
|
-
} else if ((ex as NodeJS.ErrnoException).code === 'EACCES') {
|
|
85
|
-
console.error(`权限不足: ${(ex as NodeJS.ErrnoException).message}`);
|
|
86
|
-
process.exitCode = 3;
|
|
87
|
-
} else {
|
|
88
|
-
console.error(`无法访问脚本文件: ${(ex as NodeJS.ErrnoException).message}`);
|
|
89
|
-
process.exitCode = 1;
|
|
90
|
-
}
|
|
101
|
+
if (!(await checkScriptFile(script))) {
|
|
91
102
|
return;
|
|
92
103
|
}
|
|
93
|
-
|
|
94
104
|
codeStr = await readFile(script, 'utf8');
|
|
95
105
|
template = opt.template ?? script.endsWith('.miratpl');
|
|
96
106
|
url = pathToFileURL(script).href;
|