jsir 2.4.1 → 2.4.3
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 +13 -3
- package/deps/room.js +10 -5
- package/deps/server.js +2 -2
- package/deps/setting.js +10 -4
- package/deps/util.js +41 -5
- package/package.json +1 -1
package/cmd/oaa.js
CHANGED
|
@@ -12,7 +12,8 @@ const {
|
|
|
12
12
|
getEditor, errorStr, getConfigDir,
|
|
13
13
|
getFullPath, parseUniqueName, toUniqueName, isJsirFileName, toJsirFileName,
|
|
14
14
|
getAlias, wrapperJsirText, eia, getKeyTips, getValTips, getJsirTypeKey,
|
|
15
|
-
createDetachedProcess, interceptStdStreams
|
|
15
|
+
createDetachedProcess, interceptStdStreams,
|
|
16
|
+
draftModify
|
|
16
17
|
} = $lib;
|
|
17
18
|
const _args = process.argv.slice(2).map(trim);
|
|
18
19
|
const evalCode = require('../deps/evalCode')
|
|
@@ -32,6 +33,7 @@ const console = createConsole();
|
|
|
32
33
|
const room = require('../deps/room');
|
|
33
34
|
const server = require('../deps/server')
|
|
34
35
|
const {reqNode} = require("../deps/room");
|
|
36
|
+
const {isRunningInBackground} = require("../deps/util");
|
|
35
37
|
|
|
36
38
|
let lastFilterArg = '';
|
|
37
39
|
let _cmdMapFile = setting.name + 'CmdMap.json'
|
|
@@ -599,7 +601,11 @@ async function _wrapperInput(str) {
|
|
|
599
601
|
} else {
|
|
600
602
|
let fLine = trim(str.substr(1))
|
|
601
603
|
if (fLine) {
|
|
602
|
-
|
|
604
|
+
if (/\s+[+-]$/.test(fLine)) {
|
|
605
|
+
console.log((await draftModify(fLine)).join("\n"))
|
|
606
|
+
} else {
|
|
607
|
+
console.log(draftQuery(fLine).join("\n"))
|
|
608
|
+
}
|
|
603
609
|
} else {
|
|
604
610
|
console.$draft(await nextText(line => line, fstr))
|
|
605
611
|
}
|
|
@@ -1442,7 +1448,11 @@ const keywordDef = {
|
|
|
1442
1448
|
if (args.length > 1) {
|
|
1443
1449
|
_args = args.slice(1)
|
|
1444
1450
|
}
|
|
1445
|
-
|
|
1451
|
+
if (isRunningInBackground()) {
|
|
1452
|
+
console.log(await e(`cd "${setting.workspaceMap[setting.defaultSpace]}";${args.join(' ')}`))
|
|
1453
|
+
} else {
|
|
1454
|
+
await eia(`cd "${setting.workspaceMap[setting.defaultSpace]}";${cmd}`, _args, true)
|
|
1455
|
+
}
|
|
1446
1456
|
},
|
|
1447
1457
|
short: 'E'
|
|
1448
1458
|
},
|
package/deps/room.js
CHANGED
|
@@ -74,7 +74,7 @@ function _onRoom() {
|
|
|
74
74
|
if (setting.roomTid[0]) {
|
|
75
75
|
_onRoom();
|
|
76
76
|
}
|
|
77
|
-
},
|
|
77
|
+
}, setting.roomTimer)
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
function offRoom() {
|
|
@@ -137,7 +137,12 @@ async function syncRooms() {
|
|
|
137
137
|
fns.push(async () => {
|
|
138
138
|
let respBody = ''
|
|
139
139
|
try {
|
|
140
|
-
|
|
140
|
+
try {
|
|
141
|
+
respBody = await reqNode(node, "get", "/");
|
|
142
|
+
} catch (e) {
|
|
143
|
+
debug(`sync ${node} failed:`, e);
|
|
144
|
+
respBody = await reqNode(node, "get", "/", setting.defaultPort);
|
|
145
|
+
}
|
|
141
146
|
syncRooms.push(JSON.parse(respBody))
|
|
142
147
|
debug(`sync ${node} success`);
|
|
143
148
|
} catch (e) {
|
|
@@ -327,7 +332,7 @@ function isDisableConnect(node, port) {
|
|
|
327
332
|
async function reqNode(node, method, url, port, body) {
|
|
328
333
|
let room = setting.rooms.filter(i => i.selfNode === node)[0]
|
|
329
334
|
if (!port) {
|
|
330
|
-
port =
|
|
335
|
+
port = setting.defaultPort;
|
|
331
336
|
if (room) {
|
|
332
337
|
let activeJsir = Object.values(room.jsirs)
|
|
333
338
|
.filter(i => !isDisableConnect(node, i.port));
|
|
@@ -348,7 +353,7 @@ async function reqNode(node, method, url, port, body) {
|
|
|
348
353
|
debug('reqRoom', JSON.stringify(opt))
|
|
349
354
|
return await new Promise((resolve, reject) => {
|
|
350
355
|
try {
|
|
351
|
-
let timeoutMs = url
|
|
356
|
+
let timeoutMs = setting.reqNodeTimeouts[url] || setting.reqNodeDefaultTimeout;
|
|
352
357
|
let timeout = null
|
|
353
358
|
|
|
354
359
|
const req = http.request(opt, (res) => {
|
|
@@ -378,7 +383,7 @@ async function reqNode(node, method, url, port, body) {
|
|
|
378
383
|
req.on('error', (e) => {
|
|
379
384
|
clearTimeout(timeout); // 清除超时定时器
|
|
380
385
|
if (room) {
|
|
381
|
-
setting.disableConnect[node + ":" + port] = Date.now() +
|
|
386
|
+
setting.disableConnect[node + ":" + port] = Date.now() + setting.disableConnectLimit
|
|
382
387
|
}
|
|
383
388
|
reject(e)
|
|
384
389
|
});
|
package/deps/server.js
CHANGED
|
@@ -3,7 +3,7 @@ const {createConsole, vl, aesDecipher, md5, aesCipher, debugStr, isError} = requ
|
|
|
3
3
|
const console = createConsole();
|
|
4
4
|
const setting = require('../deps/setting')
|
|
5
5
|
// 尝试监听的端口
|
|
6
|
-
const preferredPort =
|
|
6
|
+
const preferredPort = setting.defaultPort;
|
|
7
7
|
// 路由存储
|
|
8
8
|
const routes = setting.routes;
|
|
9
9
|
let invokeStart = false;
|
|
@@ -51,7 +51,7 @@ async function createServer(port) {
|
|
|
51
51
|
const decodedTime = verifySign(sign);
|
|
52
52
|
const currentTime = Date.now();
|
|
53
53
|
|
|
54
|
-
if (decodedTime === null || Math.abs(currentTime - decodedTime) >
|
|
54
|
+
if (decodedTime === null || Math.abs(currentTime - decodedTime) > setting.serverSignExpire) {
|
|
55
55
|
res.writeHead(403, { 'Content-Type': 'text/plain' });
|
|
56
56
|
res.end('Forbidden: Invalid Sign');
|
|
57
57
|
return;
|
package/deps/setting.js
CHANGED
|
@@ -8,8 +8,6 @@ fileType[exeKey] = "exe";
|
|
|
8
8
|
fileType[initKey] = "init";
|
|
9
9
|
fileType[fileKey] = "file";
|
|
10
10
|
|
|
11
|
-
const defaultType = 'note';
|
|
12
|
-
|
|
13
11
|
module.exports = {
|
|
14
12
|
name: 'jsir',
|
|
15
13
|
libDataDir: '.jsirData',
|
|
@@ -17,7 +15,7 @@ module.exports = {
|
|
|
17
15
|
exeKey,
|
|
18
16
|
initKey,
|
|
19
17
|
fileKey,
|
|
20
|
-
defaultType,
|
|
18
|
+
defaultType: 'note',
|
|
21
19
|
packages: {},
|
|
22
20
|
tips: {},
|
|
23
21
|
defaultSpace: 'local',
|
|
@@ -28,8 +26,16 @@ module.exports = {
|
|
|
28
26
|
rooms: [],
|
|
29
27
|
server: null,
|
|
30
28
|
disableConnect: {},
|
|
29
|
+
disableConnectLimit: 6000,
|
|
31
30
|
routes: {},
|
|
32
31
|
services: {},
|
|
33
32
|
serviceFns: {},
|
|
34
|
-
enterOutputs: null
|
|
33
|
+
enterOutputs: null,
|
|
34
|
+
defaultPort: 52108,
|
|
35
|
+
reqNodeDefaultTimeout: 9000,
|
|
36
|
+
reqNodeTimeouts: {
|
|
37
|
+
'/': 3000
|
|
38
|
+
},
|
|
39
|
+
roomTimer: 1000,
|
|
40
|
+
serverSignExpire: 6000
|
|
35
41
|
}
|
package/deps/util.js
CHANGED
|
@@ -424,6 +424,42 @@ function parseDraftLog(draftPath) {
|
|
|
424
424
|
}
|
|
425
425
|
|
|
426
426
|
function draftQuery(fLine) {
|
|
427
|
+
fLine = fLine.trim();
|
|
428
|
+
let results = [];
|
|
429
|
+
let draftPath = getLibDataDir() + "/log/draft.log";
|
|
430
|
+
if (!fs.existsSync(draftPath)) {
|
|
431
|
+
return results;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
let { lines } = parseDraftLog(draftPath);
|
|
435
|
+
let limit = 0;
|
|
436
|
+
let filterKeywords = '';
|
|
437
|
+
|
|
438
|
+
if (/\s+\d+$/.test(fLine)) {
|
|
439
|
+
filterKeywords = fLine.replace(/\s+\d+$/, '');
|
|
440
|
+
limit = parseInt(fLine.match(/\d+$/)[0]);
|
|
441
|
+
} else {
|
|
442
|
+
filterKeywords = fLine;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
if (/^\d+$/.test(filterKeywords)) {
|
|
446
|
+
results = lines.slice(- parseInt(filterKeywords));
|
|
447
|
+
} else {
|
|
448
|
+
lines.forEach(line => {
|
|
449
|
+
if (isMatch(line, filterKeywords)) {
|
|
450
|
+
results.push(line);
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
if (limit > 0) {
|
|
456
|
+
results = results.slice(-limit);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
return results;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
async function draftModify(fLine) {
|
|
427
463
|
fLine = fLine.trim();
|
|
428
464
|
let results = [];
|
|
429
465
|
let deleteRanges = [];
|
|
@@ -486,7 +522,7 @@ function draftQuery(fLine) {
|
|
|
486
522
|
if (isEdit && results.length === 1) {
|
|
487
523
|
let tempPath = getLibDataDir() + "/log/draft.temp";
|
|
488
524
|
fs.writeFileSync(tempPath, results[0].split(/\n/).slice(1).join('\n'))
|
|
489
|
-
|
|
525
|
+
await eia(getEditor(), [tempPath])
|
|
490
526
|
let tempText = String(fs.readFileSync(tempPath))
|
|
491
527
|
let lineRange = lineRanges.get(results[0]);
|
|
492
528
|
let before = allLines.filter((_, index) => {
|
|
@@ -702,9 +738,8 @@ function createLimitLogger(fileName, {
|
|
|
702
738
|
if (error) {
|
|
703
739
|
global.$newError = true;
|
|
704
740
|
}
|
|
705
|
-
text = `${pad(3, String(process.pid%1000), process.pid >= 1000 ? '0':' ')}> ${text}`
|
|
706
741
|
if (time) {
|
|
707
|
-
text = `${timeStr('YYYY-MM-DD HH:mm:ss.SSS')} ${text}`
|
|
742
|
+
text = `${timeStr('YYYY-MM-DD HH:mm:ss.SSS')} ${pad(3, String(process.pid%1000), process.pid >= 1000 ? '0':' ')}> ${text}`
|
|
708
743
|
}
|
|
709
744
|
syncQueue(() => fp.appendFile(logPath, text + '\n'), logPath)
|
|
710
745
|
let _minNum = (Date.now()/(1000 * 60 * 10)).toFixed(0)
|
|
@@ -1204,7 +1239,7 @@ async function _fileLock(key, fn, expireMs = 49000) {
|
|
|
1204
1239
|
|
|
1205
1240
|
async function fileLock(key, fn, wait = true, expireMs = 49000) {
|
|
1206
1241
|
`
|
|
1207
|
-
文件锁,
|
|
1242
|
+
文件锁, 默认一直等待expireMs,直到加锁成功执行fn
|
|
1208
1243
|
wait = false, 加锁失败则不执行fn
|
|
1209
1244
|
return void
|
|
1210
1245
|
`
|
|
@@ -2164,5 +2199,6 @@ module.exports = {
|
|
|
2164
2199
|
getJsirTypeKey,
|
|
2165
2200
|
isRunningInBackground,
|
|
2166
2201
|
createDetachedProcess,
|
|
2167
|
-
interceptStdStreams
|
|
2202
|
+
interceptStdStreams,
|
|
2203
|
+
draftModify
|
|
2168
2204
|
}
|