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 +49 -55
- package/deps/evalCode.js +4 -2
- package/deps/setting.js +7 -1
- package/deps/util.js +41 -37
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
152
|
+
setting.workspaceMap[space] = workspace;
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
|
-
arrayDataFile(_workspaceConfigFile, () => Object.values(
|
|
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),
|
|
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(
|
|
350
|
-
let val =
|
|
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 >
|
|
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 =
|
|
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 (
|
|
587
|
+
if (Object.keys(aliasMap).length <= 0) {
|
|
588
588
|
return str;
|
|
589
589
|
}
|
|
590
|
-
let
|
|
591
|
-
|
|
592
|
-
|
|
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(
|
|
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 (
|
|
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 =
|
|
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 =
|
|
911
|
+
let targetPath = setting.workspaceMap[setting.defaultSpace] + '/' + fileName;
|
|
924
912
|
if (fs.existsSync(targetPath)) {
|
|
925
|
-
console.warn(`${fileName} already exist in ${
|
|
913
|
+
console.warn(`${fileName} already exist in ${setting.defaultSpace}`)
|
|
926
914
|
} else {
|
|
927
915
|
fs.writeFileSync(targetPath, text)
|
|
928
|
-
console.info(`get ${uniqueName} to ${
|
|
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(
|
|
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(
|
|
1181
|
-
let bFiles = fs.readdirSync(
|
|
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 (
|
|
1224
|
-
info.loaded =
|
|
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 (
|
|
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(
|
|
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
|
-
|
|
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) ===
|
|
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 "${
|
|
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 = '
|
|
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 (
|
|
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
|
-
|
|
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)) ||
|
|
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(
|
|
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 =
|
|
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
|
|
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, $
|
|
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
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 =
|
|
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 ||
|
|
281
|
+
uniqueName = (space || setting.defaultSpace) + '/' + name;
|
|
285
282
|
}
|
|
286
283
|
let pair = parseUniqueName(uniqueName);
|
|
287
|
-
return (pair[0] || space ||
|
|
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('
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 (!
|
|
804
|
-
|
|
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 ||
|
|
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 ||
|
|
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
|
-
$
|
|
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
|
-
$
|
|
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 =
|
|
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(
|
|
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(
|
|
1122
|
+
for (let key of Object.keys(setting.tips)) {
|
|
1119
1123
|
if (keys.length === 0) {
|
|
1120
|
-
delete
|
|
1124
|
+
delete setting.tips[key]
|
|
1121
1125
|
tipsOnRmCallback(key)
|
|
1122
1126
|
} else if (keys.indexOf(key) !== -1) {
|
|
1123
|
-
delete
|
|
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
|
-
$
|
|
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 (
|
|
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',
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
})
|