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 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
- 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 = getOr(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: {
@@ -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
- regEach(text, new RegExp(`${fnNameMatch}\\s*\\(([^()]+)\\)`, 'g'), r=> {
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
- 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
- }
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, $file,
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, $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
@@ -748,8 +748,18 @@ async function fileJson(key, fn, fmt = true) {
748
748
  return result;
749
749
  }
750
750
 
751
- function requireG(moduleName){
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
- if (result) {
761
- return result
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
- console.log(warnStr(`npm install ${moduleName}`))
767
- throw `${moduleName} not found, use npm install to add it`;
775
+ throw `${space || global.$defaultSpace} package [${moduleName}] not found`;
768
776
  }
769
- return require(path);
777
+ let result = require(path);
778
+ enrichPackages(moduleName, space);
779
+ return result;
770
780
  }
771
781
 
772
- async function importG(moduleName) {
773
- let moduleDir = $workspaceMap[global.$defaultSpace] + '/node_modules'
774
- if (module.paths.indexOf(moduleDir) === -1) {
775
- module.paths.splice(0, module.paths.length)
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
- if (result) {
782
- return result
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
- console.log(warnStr(`npm install ${moduleName}`))
788
- throw `${moduleName} not found, use npm install to add it`;
798
+ throw `${space || global.$defaultSpace} package [${moduleName}] not found`;
789
799
  }
790
- return await import(require.resolve(path));
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsir",
3
- "version": "2.2.6",
3
+ "version": "2.2.7",
4
4
  "description": "JavaScript Script Management Tool",
5
5
  "main": "index.js",
6
6
  "scripts": {