jsir 2.2.6 → 2.2.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/cmd/oaa.js +54 -40
- package/deps/evalCode.js +22 -9
- package/deps/util.js +32 -20
- package/package.json +1 -1
package/cmd/oaa.js
CHANGED
|
@@ -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
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
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 = getOr(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: {
|
|
@@ -1397,27 +1408,30 @@ function getQuickRunCmds(input, matchStr) {
|
|
|
1397
1408
|
return filterCmd(matchStr).filter(i => parseUniqueName(i)[1].startsWith("e "))
|
|
1398
1409
|
}
|
|
1399
1410
|
|
|
1400
|
-
function preLoad(text, fnNameMatch, fn, packages = []) {
|
|
1401
|
-
|
|
1411
|
+
async function preLoad(text, fnNameMatch, fn, packages = [], space) {
|
|
1412
|
+
let flags = fnNameMatch.startsWith("^") ? 'mg':'g';
|
|
1413
|
+
let items = []
|
|
1414
|
+
regEach(text, new RegExp(`${fnNameMatch}\\s*\\(([^()]+)\\)`, flags), r=> {
|
|
1402
1415
|
let item = trim(r[1])
|
|
1403
1416
|
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
|
-
}
|
|
1417
|
+
items.push(item)
|
|
1419
1418
|
}
|
|
1420
1419
|
});
|
|
1420
|
+
for (let item of items) {
|
|
1421
|
+
try {
|
|
1422
|
+
let packageName = evalVal(item);
|
|
1423
|
+
if (packages[packageName]) {
|
|
1424
|
+
return;
|
|
1425
|
+
}
|
|
1426
|
+
packages[space + ":" + packageName] = {
|
|
1427
|
+
name: packageName,
|
|
1428
|
+
space,
|
|
1429
|
+
};
|
|
1430
|
+
await fn(packageName, space)
|
|
1431
|
+
} catch (e) {
|
|
1432
|
+
console.$error(e)
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1421
1435
|
return packages;
|
|
1422
1436
|
}
|
|
1423
1437
|
|
|
@@ -2037,7 +2051,7 @@ async function evalText($text = '', $cmdName = '', $args = []) {
|
|
|
2037
2051
|
return await _requireSource(currSpace, matchItem)
|
|
2038
2052
|
}
|
|
2039
2053
|
return await evalCode(addErrorTag($text), $cmdName, $args,
|
|
2040
|
-
$data,
|
|
2054
|
+
$data,
|
|
2041
2055
|
$require, $requires,
|
|
2042
2056
|
nextLine, nextText,
|
|
2043
2057
|
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
|
@@ -748,8 +748,18 @@ async function fileJson(key, fn, fmt = true) {
|
|
|
748
748
|
return result;
|
|
749
749
|
}
|
|
750
750
|
|
|
751
|
-
function
|
|
752
|
-
let moduleDir = $workspaceMap[global.$defaultSpace] + '/node_modules'
|
|
751
|
+
function setModulePaths(space) {
|
|
752
|
+
let moduleDir = $workspaceMap[space || global.$defaultSpace] + '/node_modules'
|
|
753
|
+
if (module.paths.indexOf(moduleDir) === -1) {
|
|
754
|
+
module.paths.splice(0, module.paths.length)
|
|
755
|
+
module.paths.push(moduleDir)
|
|
756
|
+
module.paths.push(...initModulePaths)
|
|
757
|
+
}
|
|
758
|
+
return moduleDir;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
function requireG(moduleName, space){
|
|
762
|
+
let moduleDir = setModulePaths(space);
|
|
753
763
|
if (module.paths.indexOf(moduleDir) === -1) {
|
|
754
764
|
module.paths.splice(0, module.paths.length)
|
|
755
765
|
module.paths.push(moduleDir)
|
|
@@ -757,37 +767,39 @@ function requireG(moduleName){
|
|
|
757
767
|
}
|
|
758
768
|
try {
|
|
759
769
|
let result = require(moduleName);
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
}
|
|
770
|
+
enrichPackages(moduleName, space);
|
|
771
|
+
return result
|
|
763
772
|
} catch (e) {}
|
|
764
773
|
let path = moduleDir + '/' + moduleName;
|
|
765
774
|
if (!fs.existsSync(path)) {
|
|
766
|
-
|
|
767
|
-
throw `${moduleName} not found, use npm install to add it`;
|
|
775
|
+
throw `${space || global.$defaultSpace} package [${moduleName}] not found`;
|
|
768
776
|
}
|
|
769
|
-
|
|
777
|
+
let result = require(path);
|
|
778
|
+
enrichPackages(moduleName, space);
|
|
779
|
+
return result;
|
|
770
780
|
}
|
|
771
781
|
|
|
772
|
-
|
|
773
|
-
let
|
|
774
|
-
if (
|
|
775
|
-
|
|
776
|
-
module.paths.push(moduleDir)
|
|
777
|
-
module.paths.push(...initModulePaths)
|
|
782
|
+
function enrichPackages(moduleName, space) {
|
|
783
|
+
let packages = getOr(global, '$packages', {});
|
|
784
|
+
if (!packages[moduleName]) {
|
|
785
|
+
packages[moduleName] = space
|
|
778
786
|
}
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
async function importG(moduleName, space) {
|
|
790
|
+
let moduleDir = setModulePaths(space);
|
|
779
791
|
try {
|
|
780
792
|
let result = await import(moduleName);
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
}
|
|
793
|
+
enrichPackages(moduleName, space);
|
|
794
|
+
return result
|
|
784
795
|
} catch (e) {}
|
|
785
796
|
let path = moduleDir + '/' + moduleName;
|
|
786
797
|
if (!fs.existsSync(path)) {
|
|
787
|
-
|
|
788
|
-
throw `${moduleName} not found, use npm install to add it`;
|
|
798
|
+
throw `${space || global.$defaultSpace} package [${moduleName}] not found`;
|
|
789
799
|
}
|
|
790
|
-
|
|
800
|
+
let result = await import(require.resolve(path));
|
|
801
|
+
enrichPackages(moduleName, space);
|
|
802
|
+
return result;
|
|
791
803
|
}
|
|
792
804
|
|
|
793
805
|
function validStr(str, name) {
|