jsir 2.2.6 → 2.2.8
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 +58 -42
- package/deps/evalCode.js +22 -9
- package/deps/util.js +56 -23
- 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
|
+
getOr, getAlias
|
|
15
15
|
} = $lib;
|
|
16
16
|
const _args = process.argv.slice(2).map(trim);
|
|
17
17
|
const evalCode = require('../deps/evalCode')
|
|
@@ -123,10 +123,6 @@ const $data = {
|
|
|
123
123
|
key: () => Object.keys(_data),
|
|
124
124
|
has: (key) => vl(_data[key])
|
|
125
125
|
}
|
|
126
|
-
const $file = {
|
|
127
|
-
json: fileJson,
|
|
128
|
-
lock: fileLock
|
|
129
|
-
}
|
|
130
126
|
const $homeDir = getLibDataDir()
|
|
131
127
|
|
|
132
128
|
function getFileOpenExe(fileName) {
|
|
@@ -471,6 +467,9 @@ async function save(args) {
|
|
|
471
467
|
|
|
472
468
|
function resetCmdMap(cmdMap = {}) {
|
|
473
469
|
lastFilterArg = '';
|
|
470
|
+
if (_noAppendNextLine) {
|
|
471
|
+
setConfig("lastFilterArg", lastFilterArg)
|
|
472
|
+
}
|
|
474
473
|
_cmdMap = cmdMap;
|
|
475
474
|
}
|
|
476
475
|
|
|
@@ -875,6 +874,16 @@ function delTipsByIndex(idxs) {
|
|
|
875
874
|
delTips(...params)
|
|
876
875
|
}
|
|
877
876
|
|
|
877
|
+
function getPackageVersion(space, name) {
|
|
878
|
+
let moduleDir = $workspaceMap[space] + '/node_modules'
|
|
879
|
+
let dir = moduleDir + "/" + name;
|
|
880
|
+
if (fs.existsSync(dir) && fs.existsSync(dir + '/package.json')) {
|
|
881
|
+
return require(dir + '/package.json').version;
|
|
882
|
+
} else {
|
|
883
|
+
return 'Unknown';
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
|
|
878
887
|
function copyToSpace(uniqueName) {
|
|
879
888
|
let path = getFullPath(uniqueName)
|
|
880
889
|
let text = String(fs.readFileSync(path))
|
|
@@ -1155,7 +1164,7 @@ const keywordDef = {
|
|
|
1155
1164
|
},
|
|
1156
1165
|
deps: {
|
|
1157
1166
|
comment: 'View file dependencies',
|
|
1158
|
-
exeFn: (args) => {
|
|
1167
|
+
exeFn: async (args) => {
|
|
1159
1168
|
let uniqueName = _cmdMap[args[0]]
|
|
1160
1169
|
if (!uniqueName) {
|
|
1161
1170
|
console.warn("no items")
|
|
@@ -1164,32 +1173,34 @@ const keywordDef = {
|
|
|
1164
1173
|
resetCmdMap(arrayToCmdMap([uniqueName, ...cmds]))
|
|
1165
1174
|
listCmd()
|
|
1166
1175
|
|
|
1167
|
-
let packages =
|
|
1176
|
+
let packages = {}
|
|
1168
1177
|
for (let un of [uniqueName, ...cmds]) {
|
|
1169
1178
|
let path = getFullPath(un);
|
|
1170
1179
|
let text = removeComment(String(fs.readFileSync(path)))
|
|
1180
|
+
let [space] = parseUniqueName(uniqueName)
|
|
1171
1181
|
|
|
1172
|
-
preLoad(text, "[\\s=;]require", requireG, packages)
|
|
1173
|
-
preLoad(text, "^require", requireG, packages)
|
|
1174
|
-
preLoad(text, "\\$import", importG, packages)
|
|
1175
|
-
preLoad(text, "[\\s=;]import", importG, packages)
|
|
1176
|
-
preLoad(text, "^import", importG, packages)
|
|
1182
|
+
await preLoad(text, "[\\s=;]require", requireG, packages, space)
|
|
1183
|
+
await preLoad(text, "^require", requireG, packages, space)
|
|
1184
|
+
await preLoad(text, "\\$import", importG, packages, space)
|
|
1185
|
+
await preLoad(text, "[\\s=;]import", importG, packages, space)
|
|
1186
|
+
await preLoad(text, "^import", importG, packages, space)
|
|
1177
1187
|
}
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1188
|
+
Object.keys(packages).forEach(key => {
|
|
1189
|
+
let info = packages[key];
|
|
1190
|
+
info.version = getPackageVersion(info.space, info.name)
|
|
1191
|
+
let loadedSpace = global.$packages[info.name]
|
|
1192
|
+
if (loadedSpace) {
|
|
1193
|
+
info.loaded = loadedSpace
|
|
1183
1194
|
}
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1195
|
+
if (info.loaded && info.loaded !== info.space) {
|
|
1196
|
+
let version = getPackageVersion(info.loaded, info.name)
|
|
1197
|
+
if (version !== info.version) {
|
|
1198
|
+
info.loaded = info.loaded + ":" + getPackageVersion(info.loaded, info.name)
|
|
1199
|
+
}
|
|
1189
1200
|
}
|
|
1190
1201
|
})
|
|
1191
1202
|
console.info("package version")
|
|
1192
|
-
console.
|
|
1203
|
+
console.nable(Object.values(packages))
|
|
1193
1204
|
}
|
|
1194
1205
|
},
|
|
1195
1206
|
args: {
|
|
@@ -1273,7 +1284,7 @@ const keywordDef = {
|
|
|
1273
1284
|
let keyword = args[0]
|
|
1274
1285
|
let justList = false;
|
|
1275
1286
|
if (keyword.endsWith('.')) {
|
|
1276
|
-
let _tmp =
|
|
1287
|
+
let _tmp = getAlias(keyword.substring(0, keyword.length - 1));
|
|
1277
1288
|
if (_tmp) {
|
|
1278
1289
|
if (keywordDef[_tmp] || Object.values(keywordDef).map(item => item.short).indexOf(_tmp) !== -1) {
|
|
1279
1290
|
help(i => i === _tmp || keywordDef[i].short === _tmp);
|
|
@@ -1285,6 +1296,8 @@ const keywordDef = {
|
|
|
1285
1296
|
console.warn('invalid keyword')
|
|
1286
1297
|
return
|
|
1287
1298
|
}
|
|
1299
|
+
} else {
|
|
1300
|
+
keyword = getAlias(keyword)
|
|
1288
1301
|
}
|
|
1289
1302
|
let pair = parseUniqueName(keyword)
|
|
1290
1303
|
let cmds;
|
|
@@ -1397,27 +1410,30 @@ function getQuickRunCmds(input, matchStr) {
|
|
|
1397
1410
|
return filterCmd(matchStr).filter(i => parseUniqueName(i)[1].startsWith("e "))
|
|
1398
1411
|
}
|
|
1399
1412
|
|
|
1400
|
-
function preLoad(text, fnNameMatch, fn, packages = []) {
|
|
1401
|
-
|
|
1413
|
+
async function preLoad(text, fnNameMatch, fn, packages = [], space) {
|
|
1414
|
+
let flags = fnNameMatch.startsWith("^") ? 'mg':'g';
|
|
1415
|
+
let items = []
|
|
1416
|
+
regEach(text, new RegExp(`${fnNameMatch}\\s*\\(([^()]+)\\)`, flags), r=> {
|
|
1402
1417
|
let item = trim(r[1])
|
|
1403
1418
|
if (item) {
|
|
1404
|
-
|
|
1405
|
-
let packageName = evalVal(item);
|
|
1406
|
-
if (packages.indexOf(packageName) !== -1) {
|
|
1407
|
-
return;
|
|
1408
|
-
}
|
|
1409
|
-
packages.push(packageName)
|
|
1410
|
-
let result = fn(packageName)
|
|
1411
|
-
if (getType(result) === 'Promise') {
|
|
1412
|
-
result.catch(e => {
|
|
1413
|
-
console.$error(e)
|
|
1414
|
-
})
|
|
1415
|
-
}
|
|
1416
|
-
} catch (e) {
|
|
1417
|
-
console.$error(e)
|
|
1418
|
-
}
|
|
1419
|
+
items.push(item)
|
|
1419
1420
|
}
|
|
1420
1421
|
});
|
|
1422
|
+
for (let item of items) {
|
|
1423
|
+
try {
|
|
1424
|
+
let packageName = evalVal(item);
|
|
1425
|
+
if (packages[packageName]) {
|
|
1426
|
+
return;
|
|
1427
|
+
}
|
|
1428
|
+
packages[space + ":" + packageName] = {
|
|
1429
|
+
name: packageName,
|
|
1430
|
+
space,
|
|
1431
|
+
};
|
|
1432
|
+
await fn(packageName, space)
|
|
1433
|
+
} catch (e) {
|
|
1434
|
+
console.$error(e)
|
|
1435
|
+
}
|
|
1436
|
+
}
|
|
1421
1437
|
return packages;
|
|
1422
1438
|
}
|
|
1423
1439
|
|
|
@@ -2037,7 +2053,7 @@ async function evalText($text = '', $cmdName = '', $args = []) {
|
|
|
2037
2053
|
return await _requireSource(currSpace, matchItem)
|
|
2038
2054
|
}
|
|
2039
2055
|
return await evalCode(addErrorTag($text), $cmdName, $args,
|
|
2040
|
-
$data,
|
|
2056
|
+
$data,
|
|
2041
2057
|
$require, $requires,
|
|
2042
2058
|
nextLine, nextText,
|
|
2043
2059
|
wrapperInput, filterCmd,
|
package/deps/evalCode.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
const {errorTag: $errorTag, importG: $import,
|
|
2
|
-
setTips: $setTips, delTips: $delTips,
|
|
3
|
-
} = require("./util");
|
|
4
|
-
require = require("./util").requireG
|
|
5
1
|
module.exports = async ($text = '', $cmdName = '', $args = [],
|
|
6
|
-
$data,
|
|
2
|
+
$data,
|
|
7
3
|
$require, $requires,
|
|
8
4
|
$nextLine, $nextText,
|
|
9
5
|
$enter, $filterCmd,
|
|
@@ -11,19 +7,36 @@ module.exports = async ($text = '', $cmdName = '', $args = [],
|
|
|
11
7
|
$homeDir, $lib,
|
|
12
8
|
$cmdMap) => {
|
|
13
9
|
const $defArgs = () => $args;
|
|
10
|
+
|
|
11
|
+
// 重定义加载方法
|
|
12
|
+
const $import = async (moduleName) => await $lib.importG(moduleName, $currentSpace);
|
|
13
|
+
const require = (moduleName) => $lib.requireG(moduleName, $currentSpace);
|
|
14
|
+
|
|
14
15
|
const $config = $lib.createConfig($cmdName);
|
|
16
|
+
const $file = {
|
|
17
|
+
json: $lib.fileJson,
|
|
18
|
+
lock: $lib.fileLock
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// 兼容
|
|
22
|
+
$text = $text.replace(/^module\.exports\s*=\s*/m, 'return ');
|
|
23
|
+
$text = $text.replace(/([\s=;])import\s*\(/g, '$1$import(');
|
|
24
|
+
$text = $text.replace(/^import\s*\(/mg, '$import(');
|
|
25
|
+
|
|
26
|
+
const $setTips = $lib.setTips;
|
|
27
|
+
const $delTips = $lib.delTips;
|
|
28
|
+
const $errorTag = $lib.errorTag;
|
|
29
|
+
|
|
15
30
|
const $context = {
|
|
16
31
|
$data, $config, $file,
|
|
17
|
-
$require, $requires, $import,
|
|
32
|
+
$require, $requires, $import,
|
|
18
33
|
$text, $cmdName, $args,
|
|
19
34
|
$nextLine, $nextText,
|
|
20
35
|
$setTips, $delTips,
|
|
21
36
|
$enter, $filterCmd,
|
|
22
|
-
$currentSpace, $homeDir, $lib, $cmdMap
|
|
37
|
+
$currentSpace, $homeDir, $lib, $cmdMap,
|
|
23
38
|
}
|
|
24
39
|
let console = $lib.createConsole($cmdName);
|
|
25
|
-
// 兼容module.exports
|
|
26
|
-
$text = $text.replace(/^module\.exports\s*=\s*/m, 'return ')
|
|
27
40
|
return await eval(`(async ()=>{${$text};
|
|
28
41
|
})()`)
|
|
29
42
|
}
|
package/deps/util.js
CHANGED
|
@@ -17,6 +17,7 @@ global.$workspaceMap = {}
|
|
|
17
17
|
global.$defaultSpace = 'local'
|
|
18
18
|
global.$newError = false
|
|
19
19
|
global.$tips = {}
|
|
20
|
+
global.$packages = Object.create(null)
|
|
20
21
|
|
|
21
22
|
let libDataDir;
|
|
22
23
|
let lockDir;
|
|
@@ -487,8 +488,14 @@ function trimEmptyLine(text) {
|
|
|
487
488
|
return lines.slice(start, end + 1).join('\n');
|
|
488
489
|
}
|
|
489
490
|
|
|
491
|
+
let defaultEditor = "vi";
|
|
490
492
|
function getEditor() {
|
|
491
|
-
|
|
493
|
+
try {
|
|
494
|
+
defaultEditor = getConfig("defaultEditor", "vi");
|
|
495
|
+
} catch (e) {
|
|
496
|
+
console.$error('getConfig failed', e);
|
|
497
|
+
}
|
|
498
|
+
return defaultEditor
|
|
492
499
|
}
|
|
493
500
|
|
|
494
501
|
function timeStr(fmt, date) {
|
|
@@ -748,46 +755,59 @@ async function fileJson(key, fn, fmt = true) {
|
|
|
748
755
|
return result;
|
|
749
756
|
}
|
|
750
757
|
|
|
751
|
-
function
|
|
752
|
-
let moduleDir = $workspaceMap[
|
|
758
|
+
function setModulePaths(space) {
|
|
759
|
+
let moduleDir = $workspaceMap[space] + '/node_modules'
|
|
753
760
|
if (module.paths.indexOf(moduleDir) === -1) {
|
|
754
761
|
module.paths.splice(0, module.paths.length)
|
|
755
762
|
module.paths.push(moduleDir)
|
|
756
763
|
module.paths.push(...initModulePaths)
|
|
757
764
|
}
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
let path = moduleDir + '/' + moduleName;
|
|
765
|
-
if (!fs.existsSync(path)) {
|
|
766
|
-
console.log(warnStr(`npm install ${moduleName}`))
|
|
767
|
-
throw `${moduleName} not found, use npm install to add it`;
|
|
765
|
+
return moduleDir;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
function enrichPackages(moduleName, space) {
|
|
769
|
+
if (!global.$packages[moduleName]) {
|
|
770
|
+
global.$packages[moduleName] = space
|
|
768
771
|
}
|
|
769
|
-
return require(path);
|
|
770
772
|
}
|
|
771
773
|
|
|
772
|
-
|
|
773
|
-
|
|
774
|
+
function requireG(moduleName, space){
|
|
775
|
+
space = space || global.$defaultSpace;
|
|
776
|
+
let moduleDir = setModulePaths(space);
|
|
774
777
|
if (module.paths.indexOf(moduleDir) === -1) {
|
|
775
778
|
module.paths.splice(0, module.paths.length)
|
|
776
779
|
module.paths.push(moduleDir)
|
|
777
780
|
module.paths.push(...initModulePaths)
|
|
778
781
|
}
|
|
782
|
+
try {
|
|
783
|
+
let result = require(moduleName);
|
|
784
|
+
enrichPackages(moduleName, space);
|
|
785
|
+
return result
|
|
786
|
+
} catch (e) {}
|
|
787
|
+
let path = moduleDir + '/' + moduleName;
|
|
788
|
+
if (!fs.existsSync(path)) {
|
|
789
|
+
throw `${space} package [${moduleName}] not found`;
|
|
790
|
+
}
|
|
791
|
+
let result = require(path);
|
|
792
|
+
enrichPackages(moduleName, space);
|
|
793
|
+
return result;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
async function importG(moduleName, space) {
|
|
797
|
+
space = space || global.$defaultSpace;
|
|
798
|
+
let moduleDir = setModulePaths(space);
|
|
779
799
|
try {
|
|
780
800
|
let result = await import(moduleName);
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
}
|
|
801
|
+
enrichPackages(moduleName, space);
|
|
802
|
+
return result
|
|
784
803
|
} catch (e) {}
|
|
785
804
|
let path = moduleDir + '/' + moduleName;
|
|
786
805
|
if (!fs.existsSync(path)) {
|
|
787
|
-
|
|
788
|
-
throw `${moduleName} not found, use npm install to add it`;
|
|
806
|
+
throw `${space} package [${moduleName}] not found`;
|
|
789
807
|
}
|
|
790
|
-
|
|
808
|
+
let result = await import(require.resolve(path));
|
|
809
|
+
enrichPackages(moduleName, space);
|
|
810
|
+
return result;
|
|
791
811
|
}
|
|
792
812
|
|
|
793
813
|
function validStr(str, name) {
|
|
@@ -843,6 +863,18 @@ function getConfigDir() {
|
|
|
843
863
|
return configDir;
|
|
844
864
|
}
|
|
845
865
|
|
|
866
|
+
function getAlias(key) {
|
|
867
|
+
key = trim(key)
|
|
868
|
+
if (!key) {
|
|
869
|
+
return key;
|
|
870
|
+
}
|
|
871
|
+
let aliasMap = getConfig('alias', {});
|
|
872
|
+
if (aliasMap.hasOwnProperty(key) && vl(aliasMap[key])) {
|
|
873
|
+
return aliasMap[key].trim();
|
|
874
|
+
}
|
|
875
|
+
return key
|
|
876
|
+
}
|
|
877
|
+
|
|
846
878
|
function _getConfig(key, defaultVal, uniqueName) {
|
|
847
879
|
let configInit = {}
|
|
848
880
|
let configFile = getLibDataDir() + '/config.json';
|
|
@@ -1840,5 +1872,6 @@ module.exports = {
|
|
|
1840
1872
|
isJsirFileName,
|
|
1841
1873
|
toJsirFileName,
|
|
1842
1874
|
fileJson,
|
|
1843
|
-
debugStr
|
|
1875
|
+
debugStr,
|
|
1876
|
+
getAlias
|
|
1844
1877
|
}
|