jsir 2.1.5 → 2.1.7

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/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # jsir: JavaScript Script Management Tool
2
+
3
+ **jsir** is a command line tool designed to help manage and organize your JavaScript files. With **jsir**, you can edit, run, and compare JavaScript files, view file dependencies, and switch between different workspaces.
4
+
5
+ ## Installation
6
+
7
+ You can install **jsir** globally using npm:
8
+
9
+ ```
10
+ npm install -g jsir
11
+ ```
12
+
13
+ ## Getting Started
14
+
15
+ To start using **jsir**, simply run the command:
16
+
17
+ ```
18
+ jsir
19
+ ```
20
+
21
+ This will open the **jsir** REPL interface where you can start managing your files.
22
+
23
+ ## Commands
24
+
25
+ Here is a list of available commands in **jsir**:
26
+
27
+ | Keyword | Short | Comment |
28
+ | --- | --- | --- |
29
+ | .add | .a | Add file |
30
+ | .clear | .C | Clear task |
31
+ | .compare | .c | Compare files |
32
+ | .deps | .d | View file dependencies |
33
+ | .edit | .e | Edit file |
34
+ | .file | .f | Working file mode |
35
+ | .get | .g | Get file |
36
+ | .help | .h | Help documentation |
37
+ | .list | .l | View file list |
38
+ | .quit | .q | Exit |
39
+ | .rename | .n | Rename file |
40
+ | .repl | .p | Interactive interface |
41
+ | .rm | .R | Remove file |
42
+ | .run | .r | Quick execution |
43
+ | .see | .s | View file |
44
+ | .switch | .S | Switch workspace |
45
+ | .uninstall | .u | Uninstall workspace |
46
+ | .version | .v | View version |
47
+ | .workspace | .w | Workspace Management |
48
+
49
+ For detailed information on how to use each command, use the `.help` command followed by the short keyword of the command.
package/cmd/oaa.js CHANGED
@@ -3,10 +3,11 @@ const $lib = require('../deps/util');
3
3
  const {
4
4
  getLibDataDir, trim, regEach, getConfig, mkdir, reget,
5
5
  getCbText, e, sleep, objDataFile, vl, md5, BigNumber,
6
- info, warn, error, arrayDataFile, infoStr, warnStr, errorStack,
6
+ arrayDataFile, infoStr, warnStr, errorStack,
7
7
  getInfo, ei, pad, msgStr, getType,
8
8
  errorTag, isArgsMatch, draftQuery, setConfig,
9
- $log, $draft, getTextComments, getOr, importG
9
+ $log, $draft, getTextComments, getOr, importG, requireG,
10
+ clearConsole
10
11
  } = $lib;
11
12
  const _args = process.argv.slice(2).map(trim);
12
13
  const evalCode = require('../deps/evalCode')
@@ -15,8 +16,8 @@ const _chokidar = require('chokidar');
15
16
  const setting = require('../deps/setting')
16
17
  const _fs = require('fs')
17
18
  const readline = require("readline");
18
- const {requireG} = require("../deps/util");
19
-
19
+ const packageJson = require("../package.json");
20
+ const example = require("../deps/example");
20
21
  const _workspaceConfigFile = 'workspace.json';
21
22
  const _libDataDir = getLibDataDir()
22
23
  const _tipsOnRm = {}
@@ -30,6 +31,10 @@ const $config = {
30
31
  get: getConfig,
31
32
  set: setConfig
32
33
  }
34
+ const CONSOLE = Object.assign({}, console);
35
+ const info = (msg) => $lib.info(msg, CONSOLE);
36
+ const warn = (msg) => $lib.warn(msg, CONSOLE);
37
+ const error = (msg, tag) => $lib.error(msg, tag, CONSOLE);
33
38
 
34
39
  let _cmdMapFile = setting.name + 'CmdMap.json'
35
40
  let _cmdMap = {}
@@ -40,14 +45,14 @@ let _noAppendNextLine = true
40
45
 
41
46
  const _onLazyGetMap = {}
42
47
  const _data = {}
43
- const _tempTime = 60 * 1000
48
+ const _lazyTime = 5 * 60 * 1000
44
49
  const _dealOnLazyGet = (key) => {
45
50
  if (_noAppendNextLine || !_onLazyGetMap[key]) {
46
51
  return _data[key]
47
52
  }
48
53
  let item = _onLazyGetMap[key]
49
54
  if (Date.now() <= item.startTime) {
50
- item.startTime = Date.now() + _tempTime
55
+ item.startTime = Date.now() + _lazyTime
51
56
  return _data[key]
52
57
  }
53
58
  let flag = _onLazyGetMap[key].fn()
@@ -55,14 +60,14 @@ const _dealOnLazyGet = (key) => {
55
60
  return new Promise(async (resolve, reject) => {
56
61
  try {
57
62
  await flag
58
- item.startTime = Date.now() + _tempTime
63
+ item.startTime = Date.now() + _lazyTime
59
64
  resolve(_data[key])
60
65
  } catch (e) {
61
66
  reject(e)
62
67
  }
63
68
  })
64
69
  } else {
65
- item.startTime = Date.now() + _tempTime
70
+ item.startTime = Date.now() + _lazyTime
66
71
  return _data[key]
67
72
  }
68
73
  }
@@ -70,7 +75,7 @@ const _dataSet = (key, val, onLazyGet) => {
70
75
  if (onLazyGet) {
71
76
  _onLazyGetMap[key] = {
72
77
  fn: onLazyGet,
73
- startTime: Date.now() + _tempTime
78
+ startTime: Date.now() + _lazyTime
74
79
  }
75
80
  }
76
81
  return _data[key] = val
@@ -209,7 +214,7 @@ async function watchFile(uniqueName) {
209
214
  text = newText;
210
215
  if (trim(exeStr)) {
211
216
  try {
212
- console.log("\n" + infoStr("------ workFile run ------"))
217
+ CONSOLE.log("\n" + infoStr("------ workFile run ------"))
213
218
  await wrapperInput("# " + exeStr)
214
219
  } catch (e) {
215
220
  error(e)
@@ -377,7 +382,9 @@ function _nextLine(callback, promptStr, hidden, resolve, end, isText) {
377
382
  _haveWrapperInput = true;
378
383
  closeRl()
379
384
  inputStr = inputStr.replace(/\s+$/, '');
380
-
385
+ if (!isText && /^\d+$/.test(inputStr) && /^\s+/.test(textLine)) {
386
+ inputStr = "& " + inputStr;
387
+ }
381
388
  let pro = (callback || wrapperInput)(inputStr);
382
389
  resolve && resolve(inputStr);
383
390
  try {
@@ -386,7 +393,11 @@ function _nextLine(callback, promptStr, hidden, resolve, end, isText) {
386
393
  if ((callback || wrapperInput) === wrapperInput) {
387
394
  if (!_noAppendNextLine) {
388
395
  if (/^\s+$/.test(textLine)) {
389
- process.stdout.write('\033[2J\033[H');
396
+ if (textLine.length > 1) {
397
+ clearConsole(false)
398
+ } else {
399
+ clearConsole();
400
+ }
390
401
  listCmd();
391
402
  nextLine(null, defaultPromptStr(true))
392
403
  } else {
@@ -422,30 +433,9 @@ async function save(args) {
422
433
  }
423
434
  let resp;
424
435
  if (args[0] === 'e') {
425
- resp = `/*
426
- A test exe script
427
- */
428
-
429
- $defArgs({
430
- arg: 'required argument',
431
- _arg: 'optional argument'
432
- })
433
-
434
- let {} = $lib // Reference to built-in resources
435
-
436
- console.log($args)
437
-
438
- return {}
439
- `;
436
+ resp = example.exeFile;
440
437
  } else if (args[0] === 'i') {
441
- resp = `/*
442
- A test init script
443
- */
444
-
445
- let {} = $lib // Reference to built-in resources
446
-
447
- return {}
448
- `;
438
+ resp = example.initFile;
449
439
  } else {
450
440
  resp = await getCbText();
451
441
  }
@@ -522,6 +512,9 @@ function listCmd(tmpMap) {
522
512
  warn("no items")
523
513
  } else {
524
514
  items.forEach(item => {
515
+ if (tmpList && item.key) {
516
+ item.key = ' - '
517
+ }
525
518
  if (item.type) {
526
519
  let pair = parseUniqueName(item.name);
527
520
  if (item.type.startsWith('exe.')) {
@@ -534,7 +527,7 @@ function listCmd(tmpMap) {
534
527
  item.name = pair[0] + '/' + item.name
535
528
  }
536
529
  })
537
- console.table(items)
530
+ CONSOLE.table(items)
538
531
  }
539
532
  }
540
533
 
@@ -556,11 +549,11 @@ async function _wrapperInput(str) {
556
549
  }
557
550
  if (/^&/.test(str)) {
558
551
  let cmdStr = trim(str.substr(1));
559
- if (/^\d+$/.test(cmdStr) && _cmdMap[cmdStr]) {
552
+ if (/^\d+$/.test(cmdStr)) {
560
553
  if (_cmdMap[cmdStr]) {
561
554
  ei('vi', [getFullPath(_cmdMap[cmdStr])])
562
555
  } else {
563
- warn("no items")
556
+ ei('vi', ['-n'])
564
557
  }
565
558
  } else if (cmdStr) {
566
559
  ei(cmdStr.split(/\s+/)[0],
@@ -576,7 +569,7 @@ async function _wrapperInput(str) {
576
569
  } else {
577
570
  let fLine = trim(str.substr(1))
578
571
  if (fLine) {
579
- console.log(draftQuery(fLine).join("\n"))
572
+ CONSOLE.log(draftQuery(fLine).join("\n"))
580
573
  } else {
581
574
  let text = str.substr(1) + "\n" + await nextText(line => line, fstr)
582
575
  $draft(text)
@@ -587,14 +580,14 @@ async function _wrapperInput(str) {
587
580
  let isStar = str.startsWith('*')
588
581
  let text = trim(str.replace(/^[$#*]/, ''))
589
582
  if (is$) {
590
- console.log(await evalText('return ' + text))
583
+ CONSOLE.log(await evalText('return ' + text))
591
584
  } else if (isStar) {
592
585
  if (!text) {
593
586
  text = '$context';
594
587
  }
595
588
  let result = await evalText('return ' + text)
596
589
  if (!result || typeof result === 'string' || Object.keys(result).length === 0) {
597
- console.nable([getInfo(result)])
590
+ CONSOLE.nable([getInfo(result)])
598
591
  return
599
592
  }
600
593
  let rows = []
@@ -604,7 +597,7 @@ async function _wrapperInput(str) {
604
597
  if (rows.length === 0) {
605
598
  warn("no items")
606
599
  } else {
607
- console.nable(rows)
600
+ CONSOLE.nable(rows)
608
601
  }
609
602
  } else {
610
603
  await evalText(text)
@@ -624,7 +617,7 @@ async function _wrapperInput(str) {
624
617
  if (firstName === 'f') {
625
618
  await workFile(uniqueName)
626
619
  } else if (firstName !== 'e') {
627
- console.log(String(_fs.readFileSync(path)));
620
+ CONSOLE.log(String(_fs.readFileSync(path)));
628
621
  } else {
629
622
  await runCmd(str)
630
623
  }
@@ -643,7 +636,7 @@ function arrayToCmdMap(cmds) {
643
636
  }
644
637
 
645
638
  function help() {
646
- console.nable(Object.keys(keywordDef).map(key => {
639
+ CONSOLE.nable(Object.keys(keywordDef).map(key => {
647
640
  let item = keywordDef[key];
648
641
  return {
649
642
  keyword: ' ' + warnStr(`.${key}`),
@@ -759,7 +752,7 @@ const keywordDef = {
759
752
  version: {
760
753
  comment: 'View version',
761
754
  exeFn: (args) => {
762
- console.log(require("../package.json").version)
755
+ CONSOLE.log(packageJson.version)
763
756
  },
764
757
  short: 'v'
765
758
  },
@@ -795,7 +788,7 @@ const keywordDef = {
795
788
  } else {
796
789
  let path = getFullPath(uniqueName)
797
790
  let sourceStr = String(_fs.readFileSync(path))
798
- console.log(sourceStr)
791
+ CONSOLE.log(sourceStr)
799
792
  }
800
793
  },
801
794
  args: {
@@ -888,7 +881,7 @@ const keywordDef = {
888
881
  let bSpace = args[1]
889
882
 
890
883
  if (aUniqueName && bUniqueName) {
891
- await e(`idea diff "${getFullPath(aUniqueName)}" "${getFullPath(bUniqueName)}"`)
884
+ await e(`${getConfig("compareExe", "idea diff")} "${getFullPath(aUniqueName)}" "${getFullPath(bUniqueName)}"`)
892
885
  } else if (aSpace && bSpace) {
893
886
  if (!args[2]) {
894
887
  warn('require mode')
@@ -984,7 +977,7 @@ const keywordDef = {
984
977
  path
985
978
  }
986
979
  })
987
- console.table(items)
980
+ CONSOLE.table(items)
988
981
  },
989
982
  args: {
990
983
  workspacePath: 'New workspace path'
@@ -1002,7 +995,7 @@ const keywordDef = {
1002
995
  path
1003
996
  }
1004
997
  })
1005
- console.table(items)
998
+ CONSOLE.table(items)
1006
999
  let index = await nextLine(line => line, "index: ")
1007
1000
  let workspace = workspaces[index - 1]
1008
1001
  if (workspace) {
@@ -1027,7 +1020,7 @@ const keywordDef = {
1027
1020
  path
1028
1021
  }
1029
1022
  })
1030
- console.table(items)
1023
+ CONSOLE.table(items)
1031
1024
  let index = trim(await nextLine(line => line, "switch workspace: "));
1032
1025
  if (index && workspaces[index - 1]) {
1033
1026
  let workspace = workspaces[index - 1];
@@ -1055,19 +1048,31 @@ const keywordDef = {
1055
1048
  warn('invalid args')
1056
1049
  return
1057
1050
  }
1058
- let pair = parseUniqueName(args[0])
1051
+ let keyword = args[0]
1052
+ let justList = false;
1053
+ if (keyword.endsWith('.')) {
1054
+ let _tmp = trim(keyword.substring(0, keyword.length - 1));
1055
+ if (_tmp) {
1056
+ justList = true;
1057
+ keyword = _tmp;
1058
+ }
1059
+ }
1060
+ let pair = parseUniqueName(keyword)
1059
1061
  let cmds;
1060
1062
  if (/^0x[a-z\d]{8}$/.test(pair[1]) || pair[1].indexOf(",") !== -1) {
1061
- cmds = getQuickRunCmds(args[0], args[0])
1063
+ cmds = getQuickRunCmds(keyword, keyword)
1062
1064
  } else {
1063
- cmds = getQuickRunCmds(args[0], '^e ' + toJsirFileName(pair[1]) + '$')
1065
+ cmds = getQuickRunCmds(keyword, '^e ' + toJsirFileName(pair[1]) + '$')
1064
1066
  if (cmds.length === 0) {
1065
- cmds = getQuickRunCmds(args[0], args[0])
1067
+ cmds = getQuickRunCmds(keyword, keyword)
1066
1068
  }
1067
1069
  }
1068
1070
  if (cmds.length === 1) {
1069
- listCmd(arrayToCmdMap(cmds))
1070
- await runCmd(args.slice(1).join(' '), cmds[0])
1071
+ if (justList) {
1072
+ listCmd(arrayToCmdMap(cmds))
1073
+ } else {
1074
+ await runCmd(args.slice(1).join(' '), cmds[0])
1075
+ }
1071
1076
  } else {
1072
1077
  warn(cmds.length > 1 ? "multiple match" : "no match")
1073
1078
  }
@@ -1081,7 +1086,7 @@ const keywordDef = {
1081
1086
  comment: 'Exit',
1082
1087
  exeFn: (args) => {
1083
1088
  delTips();
1084
- console.log(infoStr("Bye!"))
1089
+ CONSOLE.log(infoStr("Bye!"))
1085
1090
  process.exit(0)
1086
1091
  },
1087
1092
  short: 'q'
@@ -1091,7 +1096,7 @@ const keywordDef = {
1091
1096
  exeFn: (args) => {
1092
1097
  _noAppendNextLine = false
1093
1098
  _cmdMap = {}
1094
- console.log(warnStr("You can start with .help, use * to expand context"))
1099
+ CONSOLE.log(warnStr("You can start with .help, use * to expand context"))
1095
1100
  },
1096
1101
  short: 'p'
1097
1102
  }
@@ -1158,7 +1163,7 @@ async function _dealKeyword(keyword, args) {
1158
1163
  }
1159
1164
  }
1160
1165
  if (unMatched) {
1161
- warn(`unknown keyword: ${keyword}`)
1166
+ await keywordDef.run.exeFn([keyword, ...args])
1162
1167
  }
1163
1168
  }
1164
1169
 
@@ -1382,18 +1387,15 @@ function parseUniqueName(uniqueName) {
1382
1387
  function getArgComments(argDef) {
1383
1388
  let comments = []
1384
1389
  let keys = Object.keys(argDef)
1390
+ let shortMap = {}
1391
+ let tempShortMap = getShortDefMap(keys)
1392
+ for (let key of Object.keys(tempShortMap)) {
1393
+ shortMap[tempShortMap[key].replace(/^:/, '')] = key;
1394
+ }
1385
1395
  if (keys.length > 0) {
1386
- let aLine = []
1387
1396
  for (let k of keys) {
1388
- let item = warnStr(k) + (argDef[k] ? ` <${argDef[k]}>`:'')
1389
- if (aLine.length > 0 && [...aLine, item].join(', ').length > 64) {
1390
- comments.push(aLine.join(", ") + ", ")
1391
- aLine = []
1392
- }
1393
- aLine.push(item)
1394
- }
1395
- if (aLine.length > 0) {
1396
- comments.push(aLine.join(", "))
1397
+ let item = warnStr(k) + (shortMap[k] ? ` ${warnStr(shortMap[k])}`:'') + (argDef[k] ? ` <${argDef[k]}>`:'')
1398
+ comments.push(item)
1397
1399
  }
1398
1400
  comments[0] = '$args: ' + comments[0]
1399
1401
  if (comments.length > 1) {
@@ -1405,6 +1407,39 @@ function getArgComments(argDef) {
1405
1407
  return comments
1406
1408
  }
1407
1409
 
1410
+ function getShortStr(str) {
1411
+ let result = []
1412
+ for (let i = 0; i < str.length; i++) {
1413
+ if (i === 0) {
1414
+ result.push(str[i].toLowerCase())
1415
+ }
1416
+ if (/[A-Z]/.test(str[i])) {
1417
+ result.push(str[i].toLowerCase())
1418
+ }
1419
+ }
1420
+ return result.join('');
1421
+ }
1422
+
1423
+ function getShortDefMap(argDefKeys) {
1424
+ const result = {};
1425
+ for (let str of argDefKeys) {
1426
+ let originStr = ":" + str;
1427
+ str = str.replace(/^:/, '')
1428
+ str = str.replace(/^_/, '')
1429
+ let shortStr = getShortStr(str);
1430
+ let key = '-' + shortStr;
1431
+ let val = result[key]
1432
+ let i = 1;
1433
+ while (val) {
1434
+ key = '-' + shortStr + i;
1435
+ val = result[key];
1436
+ i ++;
1437
+ }
1438
+ result[key] = originStr;
1439
+ }
1440
+ return result;
1441
+ }
1442
+
1408
1443
  async function runCmd(str = '', uniqueName = '', text = '') {
1409
1444
  let path = getFullPath(uniqueName);
1410
1445
  if (uniqueName || text) {
@@ -1433,8 +1468,9 @@ async function runCmd(str = '', uniqueName = '', text = '') {
1433
1468
  return;
1434
1469
  }
1435
1470
 
1436
- let oriArgs = enrichArgs(str, text)
1437
1471
  let argDef = getArgDef(text)
1472
+ let shortDefMap = getShortDefMap(Object.keys(argDef))
1473
+ let oriArgs = enrichArgs(str).map(i => shortDefMap[i] ? shortDefMap[i]:i)
1438
1474
  if (argDef['[ParseError]']) {
1439
1475
  throw `argDef [ParseError] ${argDef['[ParseError]']}`
1440
1476
  }
@@ -1445,7 +1481,7 @@ async function runCmd(str = '', uniqueName = '', text = '') {
1445
1481
  let arg = oriArgs[i]
1446
1482
  let needTrans
1447
1483
  let pair
1448
- if (arg.startsWith(":") || arg.startsWith("_")) {
1484
+ if (arg.startsWith(":") || arg.startsWith("_") && !arg.endsWith(' ')) {
1449
1485
  arg = arg.replace(/^:/, '')
1450
1486
  if (oriArgs[i+1] && !(oriArgs[i+1].startsWith(":") || oriArgs[i+1].startsWith("_"))) {
1451
1487
  pair = [arg, oriArgs[i+1]]
@@ -1547,8 +1583,8 @@ function getArgDef(text) {
1547
1583
  argDef = (exeStr ? evalVal(exeStr) : {}) || {}
1548
1584
  let array = []
1549
1585
  for (let key of Object.keys(argDef)) {
1550
- if (array.hasOwnProperty(key)) {
1551
- throw `invalid argName ${key}`
1586
+ if (/\s/.test(key) || array.hasOwnProperty(key)) {
1587
+ throw `invalid argName ${warnStr(key)}`
1552
1588
  }
1553
1589
  }
1554
1590
  } catch (e) {
@@ -1714,7 +1750,6 @@ async function evalText($text = '', $cmdName = '', $args = []) {
1714
1750
  setTips, delTips,
1715
1751
  wrapperInput, filterCmd,
1716
1752
  currSpace,
1717
- $log, $draft,
1718
1753
  $homeDir, $lib)
1719
1754
  } catch(e) {
1720
1755
  throw errorTag(e, $cmdName);
package/deps/evalCode.js CHANGED
@@ -1,4 +1,4 @@
1
- const {info: $info, msg: $msg, warn: $warn, error: $error, importG: $import} = require("./util");
1
+ const {info: $info, msg: $msg, warn: $warn, error: $error, importG: $import, $log, $draft} = require("./util");
2
2
  require = require("./util").requireG
3
3
  module.exports = async ($text = '', $cmdName = '', $args = [],
4
4
  $data, $config,
@@ -7,7 +7,6 @@ module.exports = async ($text = '', $cmdName = '', $args = [],
7
7
  $setTips, $delTips,
8
8
  $enter, $filterCmd,
9
9
  $currentSpace,
10
- $log, $draft,
11
10
  $homeDir, $lib) => {
12
11
  const $defArgs = () => $args;
13
12
  const $context = {
@@ -0,0 +1,25 @@
1
+ module.exports = {
2
+ exeFile: `/*
3
+ A test exe script
4
+ */
5
+
6
+ $defArgs({
7
+ arg: 'required argument',
8
+ _arg: 'optional argument'
9
+ })
10
+
11
+ let {} = $lib // Reference to built-in resources
12
+
13
+ console.log($args)
14
+
15
+ return {}
16
+ `,
17
+ initFile: `/*
18
+ A test init script
19
+ */
20
+
21
+ let {} = $lib // Reference to built-in resources
22
+
23
+ return {}
24
+ `
25
+ }
package/deps/util.js CHANGED
@@ -13,6 +13,7 @@ const globalDirectories = require('global-dirs');
13
13
  const emptyFn = ()=>{}
14
14
  const dayJs = require('dayjs')
15
15
  const table = require('console.table')
16
+ const {log: _log, clear: _clear} = console;
16
17
  const _fs = require("fs");
17
18
  if (module.paths.indexOf(globalDirectories.npm.packages) === -1) {
18
19
  module.paths.push(globalDirectories.npm.packages)
@@ -126,10 +127,10 @@ function nableStr(rows) {
126
127
  return tableStr(wrapRows(rows))
127
128
  }
128
129
  console.table = (...args) => {
129
- console.log(tableStr(...args))
130
+ _log(tableStr(...args))
130
131
  }
131
132
  console.nable = (rows) => {
132
- console.log(nableStr(rows))
133
+ _log(nableStr(rows))
133
134
  }
134
135
 
135
136
  function timeStr(fmt, date) {
@@ -212,9 +213,16 @@ async function timeLimit(proms, mills) {
212
213
  return result
213
214
  }
214
215
 
215
- function clearConsole() {
216
- process.stdout.write('\033[0f');
217
- console.clear()
216
+ function clearConsole(clean = true) {
217
+ if (clean) {
218
+ // \033[0f 清除从光标位置到屏幕末尾的内容,并把光标移动到屏幕的左上角。
219
+ // process.stdout.write('\033[0f');
220
+ _clear();
221
+ } else {
222
+ // \033[2J:清空屏幕。
223
+ // \033[H:将光标定位到屏幕左上角。
224
+ process.stdout.write('\033[2J\033[H');
225
+ }
218
226
  }
219
227
 
220
228
  function appendLog(fileName, text) {
@@ -344,7 +352,7 @@ function requireG(moduleName){
344
352
  } catch (e) {}
345
353
  let path = globalDirectories.npm.packages + '/' + moduleName;
346
354
  if (!fs.existsSync(path)) {
347
- console.log(warnStr(`npm install -g ${moduleName}`))
355
+ _log(warnStr(`npm install -g ${moduleName}`))
348
356
  throw `${moduleName} not found, use above cmd to install it`;
349
357
  }
350
358
  return require(path);
@@ -359,7 +367,7 @@ async function importG(moduleName) {
359
367
  } catch (e) {}
360
368
  let path = globalDirectories.npm.packages + '/' + moduleName;
361
369
  if (!fs.existsSync(path)) {
362
- console.log(warnStr(`npm install -g ${moduleName}`))
370
+ _log(warnStr(`npm install -g ${moduleName}`))
363
371
  throw `${moduleName} not found, use above cmd to install it`;
364
372
  }
365
373
  return await import(path);
@@ -953,32 +961,32 @@ function wrapRows(rows) {
953
961
  return result
954
962
  }
955
963
 
956
- function info(msg) {
964
+ function info(msg, _console = console) {
957
965
  if (typeof msg === 'string' && msg && msg.indexOf('\n') === -1) {
958
966
  msg = infoStr(msg)
959
967
  }
960
- console.log(infoStr('[info]'), msg)
968
+ _console.log(infoStr('[info]'), msg)
961
969
  }
962
970
 
963
- function msg(msg) {
971
+ function msg(msg, _console = console) {
964
972
  if (typeof msg === 'string' && msg && msg.indexOf('\n') === -1) {
965
973
  msg = msgStr(msg)
966
974
  }
967
- console.log(msgStr('[msg]'), msg)
975
+ _console.log(msgStr('[msg]'), msg)
968
976
  }
969
977
 
970
- function warn(msg) {
978
+ function warn(msg, _console = console) {
971
979
  if (typeof msg === 'string' && msg && msg.indexOf('\n') === -1) {
972
980
  msg = warnStr(msg)
973
981
  }
974
- console.warn(warnStr('[warn]'), msg)
982
+ _console.warn(warnStr('[warn]'), msg)
975
983
  }
976
984
 
977
- function error(msg, tag) {
985
+ function error(msg, tag, _console = console) {
978
986
  if (typeof msg === 'string' && msg && msg.indexOf('\n') === -1) {
979
987
  msg = errorStr(msg)
980
988
  }
981
- console.error(errorStr(`[${tag || 'error'}]`), msg)
989
+ _console.error(errorStr(`[${tag || 'error'}]`), msg)
982
990
  }
983
991
 
984
992
  function infoStr(str) {
package/index.js CHANGED
@@ -1,4 +0,0 @@
1
-
2
- module.exports = {
3
- ...require('deps/util')
4
- }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "jsir",
3
- "version": "2.1.5",
4
- "description": "js script manager tool",
3
+ "version": "2.1.7",
4
+ "description": "JavaScript Script Management Tool",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
7
  "test": "cmd/oaa.js"
@@ -9,7 +9,12 @@
9
9
  "bin": {
10
10
  "jsir": "cmd/oaa.js"
11
11
  },
12
- "keywords": [],
12
+ "keywords": [
13
+ "javascript",
14
+ "scripts",
15
+ "manager",
16
+ "executor"
17
+ ],
13
18
  "author": "",
14
19
  "license": "ISC",
15
20
  "dependencies": {