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 CHANGED
@@ -11,7 +11,7 @@ const {
11
11
  createConsole, setTips, delTips,
12
12
  getEditor, errorStr, getConfigDir,
13
13
  getFullPath, parseUniqueName, toUniqueName, isJsirFileName, toJsirFileName,
14
- fileJson, fileLock, getOr
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
- let moduleDir = $workspaceMap[global.$defaultSpace] + '/node_modules'
1179
- let deps = {}
1180
- packages.forEach(name => {
1181
- if (deps[name]) {
1182
- return;
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
- let dir = moduleDir + "/" + name;
1185
- if (fs.existsSync(dir) && fs.existsSync(dir + '/package.json')) {
1186
- deps[name] = require(dir + '/package.json').version;
1187
- } else {
1188
- deps[name] = 'Unknown';
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.log(JSON.stringify(deps, null, 2))
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 = trim(keyword.substring(0, keyword.length - 1));
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
- regEach(text, new RegExp(`${fnNameMatch}\\s*\\(([^()]+)\\)`, 'g'), r=> {
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
- try {
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, $file,
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, $file,
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, $errorTag,
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
- return getConfig("defaultEditor", "vi")
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 requireG(moduleName){
752
- let moduleDir = $workspaceMap[global.$defaultSpace] + '/node_modules'
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
- try {
759
- let result = require(moduleName);
760
- if (result) {
761
- return result
762
- }
763
- } catch (e) {}
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
- async function importG(moduleName) {
773
- let moduleDir = $workspaceMap[global.$defaultSpace] + '/node_modules'
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
- if (result) {
782
- return result
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
- console.log(warnStr(`npm install ${moduleName}`))
788
- throw `${moduleName} not found, use npm install to add it`;
806
+ throw `${space} package [${moduleName}] not found`;
789
807
  }
790
- return await import(require.resolve(path));
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsir",
3
- "version": "2.2.6",
3
+ "version": "2.2.8",
4
4
  "description": "JavaScript Script Management Tool",
5
5
  "main": "index.js",
6
6
  "scripts": {