jsir 2.3.0 → 2.3.2

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/cmd/oaa.js CHANGED
@@ -11,7 +11,7 @@ const {
11
11
  createConsole, setTips, delTips,
12
12
  getEditor, errorStr, getConfigDir,
13
13
  getFullPath, parseUniqueName, toUniqueName, isJsirFileName, toJsirFileName,
14
- getOr, getAlias, wrapperJsirText, eia
14
+ getAlias, wrapperJsirText, eia
15
15
  } = $lib;
16
16
  const _args = process.argv.slice(2).map(trim);
17
17
  const evalCode = require('../deps/evalCode')
@@ -138,7 +138,7 @@ function getFileOpenExe(fileName) {
138
138
 
139
139
  function checkWorkspaces() {
140
140
  let localWorkspace = _libDataDir + '/local';
141
- global.$workspaceMap = {
141
+ setting.workspaceMap = {
142
142
  'local': localWorkspace
143
143
  }
144
144
  mkdir(localWorkspace)
@@ -149,15 +149,15 @@ function checkWorkspaces() {
149
149
  continue
150
150
  }
151
151
  if (fs.existsSync(workspace)) {
152
- $workspaceMap[space] = workspace;
152
+ setting.workspaceMap[space] = workspace;
153
153
  }
154
154
  }
155
- arrayDataFile(_workspaceConfigFile, () => Object.values($workspaceMap))
156
- initWorkspace()
155
+ arrayDataFile(_workspaceConfigFile, () => Object.values(setting.workspaceMap))
157
156
  }
158
157
 
159
158
  async function start() {
160
159
  checkWorkspaces()
160
+ initWorkspace()
161
161
 
162
162
  lastFilterArg = getConfig("lastFilterArg");
163
163
  _cmdMap = objDataFile(_cmdMapFile);
@@ -288,7 +288,7 @@ async function nextLine(callback, promptStr, hidden) {
288
288
  }
289
289
 
290
290
  function defaultPromptStr(showKey = false) {
291
- let tips = [getTipStr(showKey), $defaultSpace].filter(i => i).join(':') + `> `;
291
+ let tips = [getTipStr(showKey), setting.defaultSpace].filter(i => i).join(':') + `> `;
292
292
  _isTipsDoneShowKey = showKey;
293
293
  return tips;
294
294
  }
@@ -346,8 +346,8 @@ function initRl(callback, promptStr, hidden) {
346
346
 
347
347
  function getTipStr(showKey = false) {
348
348
  let items = [];
349
- for (let key of Object.keys(global.$tips)) {
350
- let val = global.$tips[key].map(i => {
349
+ for (let key of Object.keys(setting.tips)) {
350
+ let val = setting.tips[key].map(i => {
351
351
  let item = trim(i)
352
352
  if (item.indexOf(',') !== -1) {
353
353
  item = `[${item}]`;
@@ -367,7 +367,7 @@ function getTipStr(showKey = false) {
367
367
  }
368
368
  }
369
369
  let tips = items.join(',')
370
- if (!showKey && !_isTipsDoneShowKey && tips.length > 81) {
370
+ if (!showKey && !_isTipsDoneShowKey && tips.length > 64) {
371
371
  return '...'
372
372
  }
373
373
  return tips;
@@ -578,30 +578,18 @@ async function wrapperInput(str) {
578
578
  }
579
579
 
580
580
  function wrapperAlias(str) {
581
- let aliasMap = null;
581
+ let aliasMap = {};
582
582
  try {
583
583
  aliasMap = getConfig("alias");
584
584
  } catch (e) {
585
- console.$error(e);
585
+ console.$error("getAlias failed ", e);
586
586
  }
587
- if (!aliasMap) {
587
+ if (Object.keys(aliasMap).length <= 0) {
588
588
  return str;
589
589
  }
590
- let args = enrichArgs(str);
591
- for (let i = 0; i < args.length; i++) {
592
- let arg = args[i];
593
- if (arg.endsWith(" ")) {
594
- arg = `\`${arg}\``
595
- } else if (arg.endsWith(" ")) {
596
- arg = `"${arg}"`
597
- } else if (arg.endsWith(" ")) {
598
- arg = `'${arg}'`
599
- } else {
600
- arg = getAlias(aliasMap, arg)
601
- }
602
- args[i] = arg;
603
- }
604
- return args.join(' ')
590
+ let fstr = str.split(/\s+/)[0];
591
+ fstr = getAlias(aliasMap, fstr);
592
+ return [fstr, str.substring(fstr.length)].map(trim).filter(i => i).join(' ')
605
593
  }
606
594
 
607
595
  async function _wrapperInput(str) {
@@ -884,14 +872,14 @@ function help(filterFn) {
884
872
  }
885
873
 
886
874
  function delTipsByIndex(idxs) {
887
- let keys = Object.keys($tips)
875
+ let keys = Object.keys(setting.tips)
888
876
  let indexKeyMap = {}
889
877
  for(let i = 1;i<=keys.length;i++) {
890
878
  indexKeyMap[i] = keys[i - 1]
891
879
  }
892
880
  let params = []
893
881
  for (const index of idxs) {
894
- if ($tips.hasOwnProperty(index)) {
882
+ if (setting.tips.hasOwnProperty(index)) {
895
883
  params.push(index)
896
884
  } else if (indexKeyMap[Number(index)]) {
897
885
  params.push(indexKeyMap[Number(index)])
@@ -907,7 +895,7 @@ function delTipsByIndex(idxs) {
907
895
  }
908
896
 
909
897
  function getPackageVersion(space, name) {
910
- let moduleDir = $workspaceMap[space] + '/node_modules'
898
+ let moduleDir = setting.workspaceMap[space] + '/node_modules'
911
899
  let dir = moduleDir + "/" + name;
912
900
  if (fs.existsSync(dir) && fs.existsSync(dir + '/package.json')) {
913
901
  return require(dir + '/package.json').version;
@@ -920,12 +908,12 @@ function copyToSpace(uniqueName) {
920
908
  let path = getFullPath(uniqueName)
921
909
  let text = String(fs.readFileSync(path))
922
910
  let fileName = parseUniqueName(uniqueName)[1];
923
- let targetPath = $workspaceMap[$defaultSpace] + '/' + fileName;
911
+ let targetPath = setting.workspaceMap[setting.defaultSpace] + '/' + fileName;
924
912
  if (fs.existsSync(targetPath)) {
925
- console.warn(`${fileName} already exist in ${$defaultSpace}`)
913
+ console.warn(`${fileName} already exist in ${setting.defaultSpace}`)
926
914
  } else {
927
915
  fs.writeFileSync(targetPath, text)
928
- console.info(`get ${uniqueName} to ${$defaultSpace}`)
916
+ console.info(`get ${uniqueName} to ${setting.defaultSpace}`)
929
917
  }
930
918
  }
931
919
 
@@ -1088,7 +1076,7 @@ const keywordDef = {
1088
1076
  } else {
1089
1077
  let pair = parseUniqueName(uniqueName)
1090
1078
  let newName =trim(args.slice(1).join(" "))
1091
- rename($workspaceMap[pair[0]], pair[1], toJsirFileName(newName), true)
1079
+ rename(setting.workspaceMap[pair[0]], pair[1], toJsirFileName(newName), true)
1092
1080
  }
1093
1081
  },
1094
1082
  args: {
@@ -1177,8 +1165,8 @@ const keywordDef = {
1177
1165
  return;
1178
1166
  }
1179
1167
 
1180
- let aFiles = fs.readdirSync($workspaceMap[aSpace]).filter(isJsirFileName)
1181
- let bFiles = fs.readdirSync($workspaceMap[bSpace]).filter(isJsirFileName)
1168
+ let aFiles = fs.readdirSync(setting.workspaceMap[aSpace]).filter(isJsirFileName)
1169
+ let bFiles = fs.readdirSync(setting.workspaceMap[bSpace]).filter(isJsirFileName)
1182
1170
 
1183
1171
  let result = compareMode[mode](aSpace, bSpace, aFiles, bFiles);
1184
1172
  resetCmdMap(arrayToCmdMap(result))
@@ -1220,8 +1208,8 @@ const keywordDef = {
1220
1208
  Object.keys(packages).forEach(key => {
1221
1209
  let info = packages[key];
1222
1210
  info.version = getPackageVersion(info.space, info.name)
1223
- if (global.$packages.hasOwnProperty(info.name)) {
1224
- info.loaded = global.$packages[info.name]
1211
+ if (setting.packages.hasOwnProperty(info.name)) {
1212
+ info.loaded = setting.packages[info.name]
1225
1213
  }
1226
1214
  if (info.loaded && info.loaded !== info.space) {
1227
1215
  let version = getPackageVersion(info.loaded, info.name)
@@ -1264,14 +1252,14 @@ const keywordDef = {
1264
1252
  let newWorkspace = args.join(' ')
1265
1253
  let isSwitch = false
1266
1254
  if (newWorkspace) {
1267
- if ($workspaceMap[newWorkspace]) {
1255
+ if (setting.workspaceMap[newWorkspace]) {
1268
1256
  isSwitch = true;
1269
1257
  initWorkspace(newWorkspace)
1270
1258
  } else if (newWorkspace.startsWith('-')) {
1271
1259
  let name = newWorkspace.replace(/^-\s*/, '');
1272
1260
  arrayDataFile(_workspaceConfigFile, arr => arr.filter(path => name !== getSpaceFromDir(path)))
1273
1261
  } else if (newWorkspace.startsWith("/")) {
1274
- let workspaces = Object.values($workspaceMap)
1262
+ let workspaces = Object.values(setting.workspaceMap)
1275
1263
  workspaces.push(newWorkspace)
1276
1264
  arrayDataFile(_workspaceConfigFile, () => workspaces)
1277
1265
  } else {
@@ -1279,10 +1267,11 @@ const keywordDef = {
1279
1267
  }
1280
1268
  }
1281
1269
  checkWorkspaces()
1282
- let workspaces = Object.values($workspaceMap)
1270
+ initWorkspace(setting.defaultSpace)
1271
+ let workspaces = Object.values(setting.workspaceMap)
1283
1272
  let items = workspaces.map((path, index) => {
1284
1273
  return {
1285
- name: (getSpaceFromDir(path) === $defaultSpace ? '*':' ') + getSpaceFromDir(path),
1274
+ name: (getSpaceFromDir(path) === setting.defaultSpace ? '*':' ') + getSpaceFromDir(path),
1286
1275
  path
1287
1276
  }
1288
1277
  })
@@ -1382,7 +1371,7 @@ const keywordDef = {
1382
1371
  if (args.length > 1) {
1383
1372
  _args = args.slice(1)
1384
1373
  }
1385
- await eia(`cd "${$workspaceMap[global.$defaultSpace]}";${cmd}`, _args, true)
1374
+ await eia(`cd "${setting.workspaceMap[setting.defaultSpace]}";${cmd}`, _args, true)
1386
1375
  },
1387
1376
  short: 'E'
1388
1377
  },
@@ -1401,12 +1390,12 @@ const keywordDef = {
1401
1390
  }
1402
1391
  }
1403
1392
  let suffix = 'log'
1404
- let cmdStr = 'less -R'
1393
+ let cmdStr = 'less -R +G'
1405
1394
  if (type.indexOf("e") !== -1) {
1406
1395
  suffix = 'error'
1407
1396
  }
1408
1397
  if (type.indexOf("t") !== -1) {
1409
- cmdStr = 'tail -n 50 -f'
1398
+ cmdStr = 'less -R +F'
1410
1399
  }
1411
1400
  path = path + '.' + suffix;
1412
1401
  if (!fs.existsSync(path)) {
@@ -1462,7 +1451,7 @@ async function preLoad(text, fnNameMatch, fn, packages = [], space) {
1462
1451
  };
1463
1452
  await fn(packageName, space)
1464
1453
  } catch (e) {
1465
- console.$error(e)
1454
+ console.$error('preLoad failed', e)
1466
1455
  }
1467
1456
  }
1468
1457
  return packages;
@@ -1501,14 +1490,17 @@ async function _dealKeyword(keyword, args) {
1501
1490
  if (item.short === shortKey) {
1502
1491
  unMatched = false;
1503
1492
  if (item === keywordDef.run) {
1493
+ console.$log('execute', key)
1504
1494
  await item.exeFn(args);
1505
1495
  } else {
1496
+ console.$log('execute', key)
1506
1497
  await item.exeFn(args.map(trim));
1507
1498
  }
1508
1499
  break;
1509
1500
  }
1510
1501
  }
1511
1502
  if (unMatched) {
1503
+ console.$log('execute run', keyword)
1512
1504
  await keywordDef.run.exeFn([keyword, ...args])
1513
1505
  }
1514
1506
  }
@@ -1632,13 +1624,13 @@ function getJsirFileSuffix(name) {
1632
1624
  function initWorkspace(space) {
1633
1625
  let current = getConfig("workspace");
1634
1626
  let workspace = space || current || 'local'
1635
- if (!$workspaceMap[current]) {
1627
+ if (!setting.workspaceMap[workspace]) {
1636
1628
  workspace = 'local'
1637
1629
  }
1638
- if (workspace !== current) {
1630
+ if (workspace !== current && _noAppendNextLine) {
1639
1631
  setConfig("workspace", workspace)
1640
1632
  }
1641
- global.$defaultSpace = workspace;
1633
+ setting.defaultSpace = workspace;
1642
1634
  }
1643
1635
 
1644
1636
  function filterCmdAndList(arg) {
@@ -1664,10 +1656,10 @@ function filterCmd(arg){
1664
1656
  let spaceName
1665
1657
  if (arg.indexOf('/') !== -1) {
1666
1658
  let index = arg.indexOf('/');
1667
- spaceName = trim(arg.substring(0, index)) || $defaultSpace
1659
+ spaceName = trim(arg.substring(0, index)) || setting.defaultSpace
1668
1660
  arg = trim(arg.substring(index + 1))
1669
1661
  }
1670
- for (let workspace of Object.values($workspaceMap)) {
1662
+ for (let workspace of Object.values(setting.workspaceMap)) {
1671
1663
  let spaceTmp = getSpaceFromDir(workspace);
1672
1664
  if (!spaceName || spaceName === spaceTmp) {
1673
1665
  cmds.push(..._filterCmd(workspace, arg));
@@ -2072,7 +2064,7 @@ async function evalText($text = '', $cmdName = '', $args = []) {
2072
2064
  let pair = parseUniqueName($cmdName)
2073
2065
  currSpace = pair[0]
2074
2066
  } else {
2075
- currSpace = $defaultSpace
2067
+ currSpace = setting.defaultSpace
2076
2068
  }
2077
2069
  let $requires = async (...matchItems) => {
2078
2070
  let result = []
@@ -2089,19 +2081,21 @@ async function evalText($text = '', $cmdName = '', $args = []) {
2089
2081
  $require, $requires,
2090
2082
  nextLine, nextText,
2091
2083
  wrapperInput, filterCmd,
2092
- currSpace,
2084
+ currSpace, setting.defaultSpace, setting.workspaceMap,
2093
2085
  $homeDir, $lib, _cmdMap);
2094
2086
  }
2095
2087
 
2096
2088
  function clearFileLock() {
2097
- let fileLockMap = getOr(global, `$fileLock`, {})
2098
2089
  for (let file of Object.keys(fileLockMap)) {
2099
2090
  fp.rmdir(file)
2100
- delete fileLockMap[file]
2091
+ delete setting.fileLock[file]
2101
2092
  }
2102
2093
  }
2103
2094
 
2104
2095
  function sigExit() {
2096
+ if (!setting.sigExit) {
2097
+ return;
2098
+ }
2105
2099
  if (_noAppendNextLine) {
2106
2100
  delTips();
2107
2101
  clearFileLock();
package/deps/evalCode.js CHANGED
@@ -3,7 +3,7 @@ module.exports = async ($text = '', $cmdName = '', $args = [],
3
3
  $require, $requires,
4
4
  $nextLine, $nextText,
5
5
  $enter, $filterCmd,
6
- $currentSpace,
6
+ $currentSpace, $defaultSpace, $workspaceMap,
7
7
  $homeDir, $lib,
8
8
  $cmdMap) => {
9
9
  const $defArgs = () => $args;
@@ -26,13 +26,15 @@ module.exports = async ($text = '', $cmdName = '', $args = [],
26
26
  const $errorTag = $lib.errorTag;
27
27
 
28
28
  const $context = {
29
+ $defArgs,
29
30
  $data, $config, $file,
30
31
  $require, $requires, $import,
31
32
  $text, $cmdName, $args,
32
33
  $nextLine, $nextText,
33
34
  $setTips, $delTips,
34
35
  $enter, $filterCmd,
35
- $currentSpace, $homeDir, $lib, $cmdMap,
36
+ $currentSpace, $defaultSpace, $workspaceMap,
37
+ $homeDir, $lib, $cmdMap
36
38
  }
37
39
  let console = $lib.createConsole($cmdName);
38
40
  return await eval(`(async ()=>{${$text};
package/deps/setting.js CHANGED
@@ -17,5 +17,11 @@ module.exports = {
17
17
  exeKey,
18
18
  initKey,
19
19
  fileKey,
20
- defaultType
20
+ defaultType,
21
+ sigExit: true,
22
+ packages: {},
23
+ fileLock: {},
24
+ tips: {},
25
+ defaultSpace: 'local',
26
+ workspaceMap: {}
21
27
  }
package/deps/util.js CHANGED
@@ -16,11 +16,7 @@ const _types = setting.fileType
16
16
  const _typeKeys = Object.keys(_types)
17
17
 
18
18
  global.$newInput = false
19
- global.$workspaceMap = {}
20
- global.$defaultSpace = 'local'
21
19
  global.$newError = false
22
- global.$tips = {}
23
- global.$packages = {}
24
20
 
25
21
  let libDataDir;
26
22
  let lockDir;
@@ -71,7 +67,8 @@ const $log = createLimitLogger(`${setting.name}.log`, {
71
67
  });
72
68
  const $error = createLimitLogger(`${setting.name}.error`, {
73
69
  logInfo: false,
74
- error: true
70
+ error: true,
71
+ syncLogs: [$log]
75
72
  });
76
73
  let _globalDraft= createLimitLogger(`draft.log`, {
77
74
  logInfo: false,
@@ -209,7 +206,8 @@ function createConsole(uniqueName) {
209
206
  });
210
207
  result.$error = createLimitLogger(fileName + '.error', {
211
208
  logInfo: false,
212
- error: true
209
+ error: true,
210
+ syncLogs: [result.$log]
213
211
  });
214
212
  }
215
213
  let quite = false
@@ -230,7 +228,6 @@ function createConsole(uniqueName) {
230
228
  }
231
229
  let _args = _consoleFns[key].args(args);
232
230
  if ("error" === key) {
233
- result.$log(..._args)
234
231
  result.$error(..._args)
235
232
  } else {
236
233
  result.$log(..._args)
@@ -255,7 +252,7 @@ function getFullPath(name) {
255
252
  }
256
253
  let uniqueName = toUniqueName(name)
257
254
  let pair = parseUniqueName(uniqueName)
258
- let space = $workspaceMap[pair[0]]
255
+ let space = setting.workspaceMap[pair[0]]
259
256
  if (!space) {
260
257
  return ''
261
258
  }
@@ -281,10 +278,10 @@ function toUniqueName(name, space) {
281
278
  } else if (name.indexOf('/') !== -1) {
282
279
  uniqueName = name;
283
280
  } else {
284
- uniqueName = (space || $defaultSpace) + '/' + name;
281
+ uniqueName = (space || setting.defaultSpace) + '/' + name;
285
282
  }
286
283
  let pair = parseUniqueName(uniqueName);
287
- return (pair[0] || space || $defaultSpace) + '/' + toJsirFileName(pair[1])
284
+ return (pair[0] || space || setting.defaultSpace) + '/' + toJsirFileName(pair[1])
288
285
  }
289
286
 
290
287
  function toJsirFileName(name) {
@@ -502,7 +499,7 @@ function getEditor() {
502
499
  try {
503
500
  defaultEditor = getConfig("defaultEditor", "vi");
504
501
  } catch (e) {
505
- console.$error('getConfig failed', e);
502
+ console.$error('getEditor failed', e);
506
503
  }
507
504
  return defaultEditor
508
505
  }
@@ -640,7 +637,8 @@ function createLimitLogger(fileName, {
640
637
  maxChars = 49 * 1024 * 1024,
641
638
  logInfo = true,
642
639
  time = true,
643
- error = false
640
+ error = false,
641
+ syncLogs = []
644
642
  } = {}) {
645
643
  fileName = trim(fileName)
646
644
  if (!fileName) {
@@ -657,10 +655,16 @@ function createLimitLogger(fileName, {
657
655
  }
658
656
  let minNum = (Date.now()/(1000 * 60 * 10)).toFixed(0)
659
657
  return (...args) => {
660
- let text = args.join(" ")
661
- if (!text) {
658
+ if (args.length <= 0) {
662
659
  return
663
660
  }
661
+ // 处理参数
662
+ args = args.map(i => isError(i) ? errorStack(i):i);
663
+
664
+ // 处理同步函数
665
+ syncLogs.forEach(i => i(...args));
666
+
667
+ let text = args.join(" ")
664
668
  if (error) {
665
669
  global.$newError = true;
666
670
  }
@@ -692,7 +696,7 @@ function iarrayDataFile(fileName, fn, fmt) {
692
696
  }
693
697
  function getInitName(fileName) {
694
698
  fileName = trim(fileName)
695
- let homeDir = global.$workspaceMap[$defaultSpace]
699
+ let homeDir = setting.workspaceMap[setting.defaultSpace]
696
700
  if (!fileName.startsWith("/")) {
697
701
  fileName = setting.initKey + ' ' + fileName.replace(new RegExp(`^${setting.initKey}\\s+`), '')
698
702
  if (!/\..+/.test(fileName)) {
@@ -761,7 +765,7 @@ async function fileJson(key, fn, fmt = true) {
761
765
  let dataDir = getLibDataDir() + "/data"
762
766
  let fileName = trim(key)
763
767
  let path = dataDir + "/" + fileName;
764
- let homeDir = global.$workspaceMap[$defaultSpace]
768
+ let homeDir = setting.workspaceMap[setting.defaultSpace]
765
769
  let isInit = fileName.startsWith(setting.initKey);
766
770
  if (isInit) {
767
771
  path = homeDir + '/' + toJsirFileName(fileName);
@@ -790,7 +794,7 @@ async function fileJson(key, fn, fmt = true) {
790
794
  }
791
795
 
792
796
  function setModulePaths(space) {
793
- let moduleDir = $workspaceMap[space] + '/node_modules'
797
+ let moduleDir = setting.workspaceMap[space] + '/node_modules'
794
798
  if (module.paths.indexOf(moduleDir) === -1) {
795
799
  module.paths.splice(0, module.paths.length)
796
800
  module.paths.push(moduleDir)
@@ -800,13 +804,13 @@ function setModulePaths(space) {
800
804
  }
801
805
 
802
806
  function enrichPackages(moduleName, space) {
803
- if (!global.$packages.hasOwnProperty(moduleName)) {
804
- global.$packages[moduleName] = space
807
+ if (!setting.packages.hasOwnProperty(moduleName)) {
808
+ setting.packages[moduleName] = space
805
809
  }
806
810
  }
807
811
 
808
812
  function requireG(moduleName, space){
809
- space = space || global.$defaultSpace;
813
+ space = space || setting.defaultSpace;
810
814
  let moduleDir = setModulePaths(space);
811
815
  if (module.paths.indexOf(moduleDir) === -1) {
812
816
  module.paths.splice(0, module.paths.length)
@@ -828,7 +832,7 @@ function requireG(moduleName, space){
828
832
  }
829
833
 
830
834
  async function importG(moduleName, space) {
831
- space = space || global.$defaultSpace;
835
+ space = space || setting.defaultSpace;
832
836
  let moduleDir = setModulePaths(space);
833
837
  try {
834
838
  let result = await import(moduleName);
@@ -862,7 +866,7 @@ function aesCipher(str, key){
862
866
  const cipher = crypto.createCipheriv('aes-128-ecb', pad(key, 16, '0'), null);
863
867
  return cipher.update(str, 'utf8', 'hex') + cipher.final('hex');
864
868
  } catch(err) {
865
- $log(errorStack(err))
869
+ $error(err)
866
870
  throw 'aesCipher failed: ' + String(err)
867
871
  }
868
872
  }
@@ -879,7 +883,7 @@ function aesDecipher(str, key){
879
883
  const decipher = crypto.createDecipheriv('aes-128-ecb', pad(key, 16, '0'), null);
880
884
  return decipher.update(str, 'hex', 'utf8') + decipher.final('utf8');
881
885
  } catch(err) {
882
- $log(errorStack(err))
886
+ $error(err)
883
887
  throw 'aesDecipher failed: ' + String(err)
884
888
  }
885
889
  }
@@ -1056,7 +1060,7 @@ async function _fileLock(key, fn) {
1056
1060
  } catch (e) {
1057
1061
  return false;
1058
1062
  }
1059
- let fileLockMap = getOr(global, `$fileLock`, {})
1063
+ let fileLockMap = setting.fileLock;
1060
1064
  fileLockMap[file] = true;
1061
1065
  try {
1062
1066
  await fn();
@@ -1108,19 +1112,19 @@ function setTips(key, value, onRm) {
1108
1112
  if (!vl(key) || key.indexOf(",") !== -1) {
1109
1113
  throw "invalid tip key";
1110
1114
  }
1111
- getOr(global.$tips, key, []).push(value);
1115
+ getOr(setting.tips, key, []).push(value);
1112
1116
  if (onRm) {
1113
1117
  getOr(_tipsOnRm, key, []).push(onRm)
1114
1118
  }
1115
1119
  }
1116
1120
 
1117
1121
  function delTips(...keys) {
1118
- for (let key of Object.keys($tips)) {
1122
+ for (let key of Object.keys(setting.tips)) {
1119
1123
  if (keys.length === 0) {
1120
- delete $tips[key]
1124
+ delete setting.tips[key]
1121
1125
  tipsOnRmCallback(key)
1122
1126
  } else if (keys.indexOf(key) !== -1) {
1123
- delete $tips[key]
1127
+ delete setting.tips[key]
1124
1128
  tipsOnRmCallback(key)
1125
1129
  }
1126
1130
  }
@@ -1139,8 +1143,7 @@ function tipsOnRmCallback(key) {
1139
1143
  try {
1140
1144
  callback()
1141
1145
  } catch (e) {
1142
- $log(errorStack(e))
1143
- console.error(`[${key}] OnRmCallback: ${String(e)}`)
1146
+ $error(`[${key}] OnRmCallback`, e)
1144
1147
  }
1145
1148
  }
1146
1149
  }
@@ -1179,7 +1182,7 @@ function fileCleaner(path, maxChars) {
1179
1182
  `
1180
1183
  cleanFiles[path] = Date.now() + (1000 * 60)
1181
1184
  let flag = "sys"
1182
- if (!$tips[flag]) {
1185
+ if (!setting.tips.hasOwnProperty(flag)) {
1183
1186
  timer(flag, 1000 * 9, () => {
1184
1187
  for (let aPath of Object.keys(cleanFiles)) {
1185
1188
  if (cleanFiles[aPath] < Date.now()) {
@@ -1211,7 +1214,7 @@ function cleanFile(path, maxChars = 9 * 1024 * 1024) {
1211
1214
  try {
1212
1215
  stats = await fp.stat(path);
1213
1216
  } catch (e) {
1214
- console.$error('cleanFile stat failed', errorMsg(e));
1217
+ console.$error('cleanFile stat failed', e);
1215
1218
  return;
1216
1219
  }
1217
1220
  const fileSize = stats.size;
@@ -1292,8 +1295,7 @@ function timeLoop(fn, timestamp, lastIds = []){
1292
1295
  try {
1293
1296
  val = fn()
1294
1297
  } catch (e) {
1295
- console.error(String(e))
1296
- $log(new Error(errorStack(e)).stack)
1298
+ $error(e)
1297
1299
  }
1298
1300
  if (vl(val) && getType(val) === 'Promise') {
1299
1301
  return val.then(result => {
@@ -1302,8 +1304,7 @@ function timeLoop(fn, timestamp, lastIds = []){
1302
1304
  }
1303
1305
  return lastIds
1304
1306
  }).catch(e => {
1305
- console.error(String(e))
1306
- $log(new Error(errorStack(e)).stack)
1307
+ $error(e)
1307
1308
 
1308
1309
  if (lastIds[0] !== false) {
1309
1310
  lastIds[0] = setTimeout(() => timeLoop(fn, timestamp, lastIds), timestamp)
@@ -1348,7 +1349,7 @@ function mkdir(dir) {
1348
1349
  try {
1349
1350
  fs.mkdirSync(dir)
1350
1351
  } catch (e) {
1351
- console.$error(errorStack(e))
1352
+ console.$error(e)
1352
1353
  }
1353
1354
  }
1354
1355
 
@@ -1394,14 +1395,17 @@ async function eia(cmd, args = [], shell = false) {
1394
1395
  `
1395
1396
  当前进程不会卡住,输入输出由cmd进程持有
1396
1397
  `
1398
+ setting.sigExit = false;
1397
1399
  let child = spawn(cmd, args, {stdio:"inherit", shell});
1398
1400
  return new Promise((resolve, reject) => {
1399
1401
  // 监听子进程的关闭事件
1400
1402
  child.on('close', (code) => {
1403
+ setting.sigExit = true;
1401
1404
  resolve(code);
1402
1405
  });
1403
1406
  // 可选:监听子进程的错误事件
1404
1407
  child.on('error', (err) => {
1408
+ setting.sigExit = true;
1405
1409
  reject(err)
1406
1410
  });
1407
1411
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsir",
3
- "version": "2.3.0",
3
+ "version": "2.3.2",
4
4
  "description": "JavaScript Script Management Tool",
5
5
  "main": "index.js",
6
6
  "scripts": {