jsir 2.2.8 → 2.2.9

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
- getOr, getAlias
14
+ getOr, getAlias, wrapperJsirText
15
15
  } = $lib;
16
16
  const _args = process.argv.slice(2).map(trim);
17
17
  const evalCode = require('../deps/evalCode')
@@ -1179,18 +1179,17 @@ const keywordDef = {
1179
1179
  let text = removeComment(String(fs.readFileSync(path)))
1180
1180
  let [space] = parseUniqueName(uniqueName)
1181
1181
 
1182
+ text = wrapperJsirText(text)
1183
+
1182
1184
  await preLoad(text, "[\\s=;]require", requireG, packages, space)
1183
1185
  await preLoad(text, "^require", requireG, packages, space)
1184
1186
  await preLoad(text, "\\$import", importG, packages, space)
1185
- await preLoad(text, "[\\s=;]import", importG, packages, space)
1186
- await preLoad(text, "^import", importG, packages, space)
1187
1187
  }
1188
1188
  Object.keys(packages).forEach(key => {
1189
1189
  let info = packages[key];
1190
1190
  info.version = getPackageVersion(info.space, info.name)
1191
- let loadedSpace = global.$packages[info.name]
1192
- if (loadedSpace) {
1193
- info.loaded = loadedSpace
1191
+ if (global.$packages.hasOwnProperty(info.name)) {
1192
+ info.loaded = global.$packages[info.name]
1194
1193
  }
1195
1194
  if (info.loaded && info.loaded !== info.space) {
1196
1195
  let version = getPackageVersion(info.loaded, info.name)
@@ -1364,7 +1363,9 @@ const keywordDef = {
1364
1363
  let type = '';
1365
1364
  for (let arg of args) {
1366
1365
  if (_cmdMap[arg]) {
1367
- path = `${getLibDataDir()}/log/${md5(_cmdMap[trim(arg)])}`
1366
+ let pair = parseUniqueName(_cmdMap[arg])
1367
+ let fileName = pair[0] + '/' + pair[1].split(".")[0]
1368
+ path = `${getLibDataDir()}/log/${fileName}`
1368
1369
  } else {
1369
1370
  type = arg;
1370
1371
  }
@@ -1382,7 +1383,7 @@ const keywordDef = {
1382
1383
  console.warn('log file not found')
1383
1384
  return;
1384
1385
  }
1385
- ei(cmdStr, [path], true)
1386
+ ei(cmdStr, [`"${path}"`], true)
1386
1387
  },
1387
1388
  short: 'l'
1388
1389
  },
@@ -1508,6 +1509,9 @@ function removeComment(text) {
1508
1509
  function _getScriptRequires(uniqueName, cmds, links) {
1509
1510
  let path = getFullPath(uniqueName);
1510
1511
  let text = removeComment(String(fs.readFileSync(path)))
1512
+
1513
+ text = wrapperJsirText(text);
1514
+
1511
1515
  let temp = []
1512
1516
  regEach(text, /\$require\s*\(([^()]+)\)/g, r=> {
1513
1517
  if (r[1]) {
package/deps/evalCode.js CHANGED
@@ -19,9 +19,7 @@ module.exports = async ($text = '', $cmdName = '', $args = [],
19
19
  };
20
20
 
21
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(');
22
+ $text = $lib.wrapperJsirText($text)
25
23
 
26
24
  const $setTips = $lib.setTips;
27
25
  const $delTips = $lib.delTips;
package/deps/example.js CHANGED
@@ -7,11 +7,14 @@ let {
7
7
  arg, // required argument
8
8
  _arg // optional argument
9
9
  } = $defArgs()
10
+
10
11
  `,
11
12
  initFile: `/*
12
13
  An init script
13
14
  */
14
15
 
15
- return {}
16
+ module.exports = {
17
+
18
+ }
16
19
  `
17
20
  }
package/deps/util.js CHANGED
@@ -11,13 +11,14 @@ const crypto = require('crypto');
11
11
  const dayJs = require('dayjs')
12
12
  const table = require('console.table')
13
13
  const initModulePaths = Object.assign([], module.paths)
14
+ const path = require('path')
14
15
 
15
16
  global.$newInput = false
16
17
  global.$workspaceMap = {}
17
18
  global.$defaultSpace = 'local'
18
19
  global.$newError = false
19
20
  global.$tips = {}
20
- global.$packages = Object.create(null)
21
+ global.$packages = {}
21
22
 
22
23
  let libDataDir;
23
24
  let lockDir;
@@ -198,10 +199,12 @@ function createConsole(uniqueName) {
198
199
  result.$error = $error;
199
200
  result.$draft = draftLog;
200
201
  if (uniqueName) {
201
- result.$log = createLimitLogger(md5(uniqueName) + '.log', {
202
+ let pair = parseUniqueName(uniqueName)
203
+ let fileName = pair[0] + '/' + pair[1].split(".")[0]
204
+ result.$log = createLimitLogger(fileName + '.log', {
202
205
  logInfo: false
203
206
  });
204
- result.$error = createLimitLogger(md5(uniqueName) + '.error', {
207
+ result.$error = createLimitLogger(fileName + '.error', {
205
208
  logInfo: false,
206
209
  error: true
207
210
  });
@@ -297,7 +300,7 @@ function toJsirFileName(name) {
297
300
  }
298
301
 
299
302
  function isJsirFileName(name) {
300
- return /^[^./]*[^./\s]\.[^./\s]+$/.test(name)
303
+ return /^[^./]*[^./\s]\.[^./\s]+$/.test(name) && name.indexOf(".") > 1
301
304
  }
302
305
 
303
306
  function isMatch(text,
@@ -604,6 +607,20 @@ function getLogDir() {
604
607
  return logDir;
605
608
  }
606
609
 
610
+ /**
611
+ * 根据文件完整路径,检查并创建其父级目录
612
+ * 示例:/a/b/c/d.txt -> 检查并创建 /a/b/c
613
+ * @param {string} filePath 文件的完整路径
614
+ */
615
+ function createDirs(filePath) {
616
+ // 1. 获取父目录,比如 '/a/b/c'
617
+ const dirPath = path.dirname(filePath);
618
+
619
+ // 2. 使用 mkdirSync + { recursive: true } 来递归创建目录
620
+ // 如果目录已存在,则不会报错
621
+ fs.mkdirSync(dirPath, { recursive: true });
622
+ }
623
+
607
624
  function createLimitLogger(fileName, {
608
625
  maxChars = 49 * 1024 * 1024,
609
626
  logInfo = true,
@@ -616,6 +633,7 @@ function createLimitLogger(fileName, {
616
633
  }
617
634
  let logDir = getLogDir()
618
635
  let logPath = logDir + "/" + fileName
636
+ createDirs(logPath)
619
637
  if (logInfo) {
620
638
  console.info(`log: ${logPath}`)
621
639
  }
@@ -766,7 +784,7 @@ function setModulePaths(space) {
766
784
  }
767
785
 
768
786
  function enrichPackages(moduleName, space) {
769
- if (!global.$packages[moduleName]) {
787
+ if (!global.$packages.hasOwnProperty(moduleName)) {
770
788
  global.$packages[moduleName] = space
771
789
  }
772
790
  }
@@ -1778,7 +1796,18 @@ function getTextComments(text) {
1778
1796
  return results.map(i => i.replace(/\s+$/, ''))
1779
1797
  }
1780
1798
 
1799
+ function wrapperJsirText(text) {
1800
+ return text
1801
+ .replace(/^require\s*\(\s*(["'`][ei]\s+)/mg, 'await $require($2')
1802
+ .replace(/([\s=;])require\s*\(\s*(["'`][ei]\s+)/g, '$1await $require($2')
1803
+ .replace(/([\s=;])import\s*\(/g, '$1$import(')
1804
+ .replace(/^import\s*\(/mg, '$import(')
1805
+ .replace(/^module\.exports\s*=\s*/m, 'return ')
1806
+ ;
1807
+ }
1808
+
1781
1809
  module.exports = {
1810
+ wrapperJsirText,
1782
1811
  run,
1783
1812
  reget,
1784
1813
  trim,
@@ -1873,5 +1902,6 @@ module.exports = {
1873
1902
  toJsirFileName,
1874
1903
  fileJson,
1875
1904
  debugStr,
1876
- getAlias
1905
+ getAlias,
1906
+ createDirs
1877
1907
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsir",
3
- "version": "2.2.8",
3
+ "version": "2.2.9",
4
4
  "description": "JavaScript Script Management Tool",
5
5
  "main": "index.js",
6
6
  "scripts": {