jsir 2.0.5 → 2.0.6

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
@@ -1,24 +1,26 @@
1
1
  #!/usr/bin/env node
2
- const $lib = require('../util');
3
2
  const path = require('path');
3
+ const {spawnSync} = require('child_process');
4
+ const globalDirectories = require('global-dirs');
5
+ let nodePath = process.env.NODE_PATH ? process.env.NODE_PATH.trim():'';
6
+ let avoidFlag = path.delimiter + path.delimiter + path.delimiter;
7
+ if (!nodePath.endsWith(avoidFlag) && nodePath.indexOf(globalDirectories.npm.packages) === -1) {
8
+ process.env.NODE_PATH = [globalDirectories.npm.packages, nodePath].filter(i => i).join(path.delimiter) + avoidFlag
9
+ process.on('SIGINT', function () {});
10
+ spawnSync(process.argv[0], process.argv.slice(1), {stdio:"inherit"});
11
+ return;
12
+ }
13
+
14
+ const $lib = require('../util');
4
15
  const {
5
16
  getLibDataDir, trim, regEach, getConfig, mkdir, reget,
6
17
  getCbText, e, sleep, objDataFile, vl, md5, BigNumber,
7
18
  info, warn, error, arrayDataFile, infoStr, warnStr, errorStack,
8
19
  getInfo, ei, pad, msgStr, getType,
9
20
  errorTag, isArgsMatch, draftQuery, setConfig,
10
- $log, $draft, getTextComments, globalModulesPath
21
+ $log, $draft, getTextComments
11
22
  } = $lib;
12
- const _args = process.argv.slice(2).map(trim)
13
- let nodePath = trim(process.env.NODE_PATH)
14
- let avoidFlag = path.delimiter + path.delimiter + path.delimiter;
15
- if (!nodePath.endsWith(avoidFlag) && nodePath.indexOf(globalModulesPath) === -1) {
16
- process.env.NODE_PATH = [globalModulesPath, nodePath].filter(i => i).join(path.delimiter) + avoidFlag
17
- process.on('SIGINT', function () {});
18
- ei(`jsir`, _args);
19
- return;
20
- }
21
-
23
+ const _args = process.argv.slice(2).map(trim);
22
24
  const evalCode = require('../evalCode')
23
25
  const _chokidar = require('chokidar');
24
26
  const setting = require('../setting')
@@ -27,7 +29,6 @@ const readline = require("readline");
27
29
 
28
30
  const _workspaceConfigFile = 'workspace.json';
29
31
  const _libDataDir = getLibDataDir()
30
- const _history9 = []
31
32
  const _tipsOnRm = {}
32
33
  const _fileWatcherMap = {}
33
34
  const _types = {
@@ -110,10 +111,8 @@ function checkWorkspaces() {
110
111
  async function start() {
111
112
  checkWorkspaces()
112
113
 
114
+ _cmdMap = objDataFile(_cmdMapFile)
113
115
  if (_args[0]) {
114
- if (_noAppendNextLine) {
115
- _cmdMap = objDataFile(_cmdMapFile)
116
- }
117
116
  let line = _args.map(i => {
118
117
  if (/\s+/.test(i) || !i) {
119
118
  i = `"${i}"`
@@ -122,8 +121,12 @@ async function start() {
122
121
  }).join(' ')
123
122
  await wrapperInput(line)
124
123
  } else {
125
- _noAppendNextLine = false
126
- console.log(warnStr("You can start with .help, use * to expand context"))
124
+ let defaultAction = getConfig("defaultAction", "repl");
125
+ if (defaultAction && keywordDef[defaultAction]) {
126
+ await wrapperInput('.' + defaultAction)
127
+ } else {
128
+ await wrapperInput('.repl')
129
+ }
127
130
  }
128
131
  }
129
132
 
@@ -262,7 +265,7 @@ function initRl(callback, preStr, hidden) {
262
265
  if (promptStr !== '') {
263
266
  promptStr = (preStr
264
267
  || ((callback && callback !== wrapperInput) ? "-> ":"")
265
- || [Object.values(global.$tips).filter(i => String(i)).join(','), $defaultSpace].filter(i => i).join(':') + `> `)
268
+ || [Object.values(global.$tips).map(String).filter(i => i).map(i => i.replace(/,/g, '-')).join(','), $defaultSpace].filter(i => i).join(':') + `> `)
266
269
  promptStr = infoStr(promptStr)
267
270
  }
268
271
  if (hidden) {
@@ -411,26 +414,6 @@ function rename(dir, oldName, newName) {
411
414
  listCmd()
412
415
  }
413
416
 
414
- function putHis(x) {
415
- if (_history9.indexOf(x) !== -1) {
416
- _history9.splice(_history9.indexOf(x), 1)
417
- }
418
- _history9.push(x)
419
- if (_history9.length > 9) {
420
- _history9.shift()
421
- }
422
- }
423
-
424
- function hisToCmdMap() {
425
- let i = 1
426
- let cmdMap = {}
427
- for (let item of _history9) {
428
- cmdMap[i] = item
429
- i ++
430
- }
431
- _cmdMap = cmdMap
432
- }
433
-
434
417
  function listCmd() {
435
418
  let items = Object.values(_cmdMap)
436
419
  .filter(item => _fs.existsSync(getFullPath(item)))
@@ -542,18 +525,14 @@ async function _wrapperInput(str) {
542
525
  if (!text) {
543
526
  text = '$context';
544
527
  }
545
- let items = text.split(/\s+/).map(trim).filter(i => i)
546
- let result = await evalText('return ' + items[0])
528
+ let result = await evalText('return ' + text)
547
529
  if (!result || typeof result === 'string' || Object.keys(result).length === 0) {
548
530
  console.nable([getInfo(result)])
549
531
  return
550
532
  }
551
533
  let rows = []
552
- let matchs = items.slice(1)
553
534
  for (let key of Object.keys(result)) {
554
- if (matchs.length === 0 || isArgsMatch(key, [matchs.join(' ')])){
555
- rows.push(getInfo(result[key], key))
556
- }
535
+ rows.push(getInfo(result[key], key))
557
536
  }
558
537
  if (rows.length === 0) {
559
538
  warn("no items")
@@ -576,7 +555,6 @@ async function _wrapperInput(str) {
576
555
  } else {
577
556
  let strs = str.split(/\s+/)
578
557
  if (_cmdMap[strs[0]]) {
579
- putHis(_cmdMap[strs[0]])
580
558
  let path = getFullPath(_cmdMap[strs[0]])
581
559
  let uniqueName = trim(_cmdMap[strs[0]]);
582
560
  let fileName = parseUniqueName(uniqueName)[1]
@@ -714,7 +692,7 @@ const keywordDef = {
714
692
  exeFn: (args) => {
715
693
  help()
716
694
  },
717
- short: 'H'
695
+ short: 'h'
718
696
  },
719
697
  list: {
720
698
  comment: '查看文件列表',
@@ -725,7 +703,7 @@ const keywordDef = {
725
703
  listCmd()
726
704
  },
727
705
  args: {
728
- queryParams: '条件参数(param1,param2 param3 ...), [,]代表全部'
706
+ queryParams: '字符串匹配,[,]代表全部,关键字可以省略'
729
707
  },
730
708
  short: 'l'
731
709
  },
@@ -888,14 +866,6 @@ const keywordDef = {
888
866
  // },
889
867
  // short: 'd'
890
868
  // },
891
- history: {
892
- comment: '查看执行记录',
893
- exeFn: (args) => {
894
- hisToCmdMap()
895
- listCmd()
896
- },
897
- short: 'h'
898
- },
899
869
  file: {
900
870
  comment: '工作文件模式',
901
871
  exeFn: async (args) => {
@@ -1024,6 +994,17 @@ const keywordDef = {
1024
994
  process.exit(0)
1025
995
  },
1026
996
  short: 'q'
997
+ },
998
+ repl: {
999
+ comment: '交互式界面',
1000
+ exeFn: (args) => {
1001
+ _noAppendNextLine = false
1002
+ console.log(warnStr("You can start with .help, use * to expand context"))
1003
+ if (Object.keys(_cmdMap).length > 0) {
1004
+ listCmd()
1005
+ }
1006
+ },
1007
+ short: 'p'
1027
1008
  }
1028
1009
  }
1029
1010
 
@@ -1179,7 +1160,9 @@ function initWorkspace(space) {
1179
1160
  if (!$workspaceMap[current]) {
1180
1161
  workspace = 'local'
1181
1162
  }
1182
- setConfig("workspace", workspace)
1163
+ if (workspace !== current) {
1164
+ setConfig("workspace", workspace)
1165
+ }
1183
1166
  global.$defaultSpace = workspace;
1184
1167
  }
1185
1168
 
@@ -1511,6 +1494,8 @@ async function _requireSource(currSpace, cmdMatchStr, printLog = false) {
1511
1494
  result = async (argsStr) => {
1512
1495
  return await runCmd(trim(argsStr), uniqueName, text)
1513
1496
  }
1497
+ } else {
1498
+ result = text;
1514
1499
  }
1515
1500
  if (!vl(result)) {
1516
1501
  if (nullable) {
package/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
 
2
2
  module.exports = {
3
- ...require('util'),
4
- ...require('sol')
3
+ ...require('util')
5
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsir",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
4
4
  "description": "js script manager tool",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/util.js CHANGED
@@ -399,7 +399,7 @@ function aesDecipher(str, key){
399
399
  }
400
400
  }
401
401
 
402
- function getConfig(key, defaultVal) {
402
+ function getConfig(key, defaultVal = null) {
403
403
  if (typeof defaultVal === "string") {
404
404
  defaultVal = trim(defaultVal)
405
405
  }
@@ -414,7 +414,7 @@ function getConfig(key, defaultVal) {
414
414
  return config
415
415
  }
416
416
  let writeFlag = false
417
- if (!(key in config) && defaultVal !== undefined) {
417
+ if (!(key in config)) {
418
418
  writeFlag = true
419
419
  config[key] = defaultVal
420
420
  }
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env node
2
- let {$config, run, lisPid} = require('../util')
3
-
4
- const server = require('server');
5
- let address = require('address');
6
- const { get } = server.router;
7
- const {send} = server.reply
8
-
9
- let port = Number(process.argv[2] || 9563 )
10
- let router = [
11
- get('/', () => {
12
- return send($config.localConfig)
13
- }),
14
- get('/:key', (ctx) => {
15
- if (!$config.localConfig.hasOwnProperty(ctx.params.key)) {
16
- return send(null)
17
- }
18
- return send($config.getLocal(ctx.params.key))
19
- })
20
- ]
21
-
22
- lisPid('configServer_' + port)
23
-
24
- run(async () => {
25
- await $config.build()
26
- await server({
27
- port
28
- },router);
29
- console.log("http://localhost:"+port);
30
- console.log("http://" + address.ip()+":"+port);
31
- })
package/cmd/dirServer.js DELETED
@@ -1,61 +0,0 @@
1
- #!/usr/bin/env node
2
- let http = require('http');
3
- let url=require('url');
4
- let fs=require('fs');
5
- let mine=require('../source/mine').types;
6
- let path=require('path');
7
- let address = require('address');
8
- let urlencode = require('urlencode');
9
- let {lisPid} = require('../util')
10
-
11
- let server = http.createServer(function (request, response) {
12
- let pathname = urlencode.decode(url.parse(request.url).pathname, "utf8");
13
- let realPath = process.cwd() + pathname;
14
- let ext = path.extname(realPath);
15
- ext = ext ? ext.slice(1) : 'unknown';
16
- if (fs.existsSync(realPath)) {
17
- if (fs.statSync(realPath).isFile()) {
18
- fs.readFile(realPath, "binary", function (err, file) {
19
- if (err) {
20
- response.writeHead(500, {
21
- 'Content-Type': 'text/plain'
22
- });
23
- response.end(err);
24
- } else {
25
- let contentType = mine[ext] || "text/plain";
26
- response.writeHead(200, {
27
- 'Content-Type': contentType
28
- });
29
- response.write(file, "binary");
30
- response.end();
31
- }
32
- });
33
- } else {
34
- let paths = fs.readdirSync(realPath)
35
- response.writeHead(200, {
36
- 'Content-Type': 'text/html'
37
- });
38
- response.write('<head><meta charset="utf-8"/></head>');
39
- paths.forEach(path => {
40
- response.write(`
41
- <a href="/${(request.url + '/').replace(/^\/+/, '')}${path}">${path}</a><br/>
42
- `)
43
- })
44
- response.end();
45
- }
46
- } else {
47
- response.writeHead(404, {
48
- 'Content-Type': 'text/plain'
49
- });
50
- response.write("This request URL " + pathname + " was not found on this server.");
51
- response.end();
52
- }
53
- });
54
-
55
- let port = process.argv[2] || 8088;
56
- server.listen(port);
57
-
58
- console.log("http://localhost:"+port);
59
- console.log("http://" + address.ip()+":"+port);
60
-
61
- lisPid('dirServer_' + port)
@@ -1,77 +0,0 @@
1
- #!/usr/bin/env node
2
- let {getPrice, eFn, lisPid} = require('../util')
3
- let Web3 = require('web3');
4
- let web3 = new Web3("https://http-mainnet-node.huobichain.com");
5
- web3.eth.transactionPollingTimeout = 49
6
- global.web3 = web3
7
- const server = require('server');
8
- let address = require('address');
9
-
10
- let usdt = '0xa71edc38d189767582c38a3145b5873052c3e47a'
11
- let wht = '0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f'
12
- let mdxFact = '0xb0b670fc1F7724119963018DB0BfA86aDb22d941'
13
-
14
- const { get } = server.router;
15
- let port = 9589
16
-
17
- let data = {
18
- gasList: [],
19
- htPrice: 0,
20
- cost: 0,
21
- timestamp: 0
22
- }
23
-
24
- let router = [
25
- get('/', ctx => {
26
- return data
27
- })
28
- ]
29
-
30
- lisPid('ethDataServer_' + port)
31
-
32
- setTimeout(() => {
33
- refreshData().catch()
34
- server({port},router);
35
- console.log("http://localhost:"+port);
36
- console.log("http://" + address.ip()+":"+port);
37
- }, 1000 * 5)
38
-
39
- async function refreshData() {
40
- let time = Date.now()
41
- try {
42
- data.htPrice = await getPrice(wht, usdt, mdxFact);
43
- await refreshGasList()
44
- } catch (e) {
45
- console.log(String(e))
46
- } finally {
47
- let cost = Date.now() - time
48
- console.log('Refresh Data Cost: ' + cost)
49
- data.cost = cost
50
- data.timestamp = Date.now()
51
- }
52
- setTimeout(() => refreshData(), 1000)
53
- }
54
-
55
- async function refreshGasList() {
56
- let blockInfo = await web3.eth.getBlock("pending")
57
- if (blockInfo != null) {
58
- let map = {}
59
- let items = []
60
- for (let txHash of blockInfo.transactions) {
61
- items.push(eFn(async (txHash) => {
62
- let rawTransaction = await web3.eth.getTransaction(txHash);
63
- if (rawTransaction) {
64
- map[Number(rawTransaction.gasPrice) / (1000 * 1000 * 1000)] = true
65
- }
66
- }, txHash))
67
- }
68
- await Promise.all(items)
69
- let list = Object.keys(map)
70
- list = list.sort((a, b) => Number(b) - Number(a));
71
- list = list.slice(0, 10)
72
-
73
- if (list.length > 0) {
74
- data.gasList = list
75
- }
76
- }
77
- }
package/cmd/mockServer.js DELETED
@@ -1,119 +0,0 @@
1
- #!/usr/bin/env node
2
- let fs = require('fs')
3
- const server = require('server');
4
- let address = require('address');
5
- let {lisPid, getLibDataDir, trim, fileCleaner, getCbText} = require('../util')
6
- let libRoot = getLibDataDir()
7
- let home = libRoot + '/mock'
8
- let readline = require('readline')
9
- try {
10
- fs.mkdirSync(home)
11
- } catch (e) {}
12
- const { get, post } = server.router;
13
- let mockServerLog = libRoot + '/mockServer.log'
14
- let port = 9549
15
- let cmd = {
16
- path,
17
- start
18
- }
19
- if (!cmd[trim(process.argv[2])]) {
20
- console.log(`ARGS EXAMPLE:
21
- path
22
- start [9549]`)
23
- return;
24
- }
25
- cmd[trim(process.argv[2])]()
26
-
27
- function getPathMap() {
28
- let pathMap = {}
29
- let i = 1
30
- fs.readdirSync(home).forEach(item => {
31
- pathMap[String(i)] = item
32
- i ++
33
- })
34
- return pathMap
35
- }
36
- function path(){
37
- let map = getPathMap()
38
- Object.keys(map).forEach(i => {
39
- console.log(i + ": " + map[i].replace(/_-sep-_/g, '/'))
40
- })
41
-
42
- let rl = readline.createInterface({
43
- input: process.stdin,
44
- output: process.stdout
45
- })
46
- process.stdout.write("> ")
47
- rl.on('line', async (str) => {
48
- str = trim(str)
49
- if (map[str]) {
50
- try {
51
- console.log(String(fs.readFileSync(home + '/' + map[str].replace(/\//g, '_-sep-_'))))
52
- } catch (e) {}
53
- } else {
54
- if (str) {
55
- let url = `${home}/${str.replace(/\//g, '_-sep-_')}`
56
- let textStr = await getCbText()
57
- if (!textStr) {
58
- try {
59
- fs.unlinkSync(url)
60
- } catch (e) {}
61
- } else {
62
- fs.writeFileSync(url, textStr)
63
- }
64
- }
65
-
66
- map = getPathMap()
67
- Object.keys(map).forEach(i => {
68
- console.log(i + ": " + map[i].replace(/_-sep-_/g, '/'))
69
- })
70
- }
71
-
72
- process.stdout.write("> ")
73
- })
74
- }
75
-
76
- function start() {
77
- if (process.argv[3]) {
78
- port = trim(process.argv[3])
79
- }
80
- let router = [
81
- get('/', ctx => {
82
- let map = getPathMap();
83
- return Object.values(map).map(item => item.replace(/_-sep-_/g, '/'))
84
- }),
85
- post('/', ctx => {
86
- log(ctx.data);
87
- let map = getPathMap();
88
- return Object.values(map).map(item => item.replace(/_-sep-_/g, '/'))
89
- })
90
- ]
91
- fs.readdirSync(home).forEach(item => {
92
- let fn = ctx => {
93
- let text = fs.readFileSync(`${home}/${item}`)
94
- try {
95
- (eval(`(()=>{${text}})()`))
96
- return ((typeof ctx.return === 'object') ? ctx.return : String(ctx.return)) || {}
97
- } catch (e) {
98
- log(e)
99
- return String(e)
100
- }
101
- }
102
- let url = item.replace(/_-sep-_/g, '/')
103
- router.push(get('/' + url, fn))
104
- router.push(post('/' + url, fn))
105
- })
106
-
107
- fileCleaner(mockServerLog)
108
- lisPid('mockServer_' + port)
109
-
110
- console.log("http://localhost:"+port);
111
- console.log("http://" + address.ip()+":"+port);
112
- setTimeout(() => {
113
- server({port},router);
114
- }, 1000 * 5)
115
- }
116
-
117
- function log(s) {
118
- fs.appendFileSync(mockServerLog, s + '\n')
119
- }
package/cmd/see.js DELETED
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env node
2
- let fs = require('fs');
3
- let path = require('path')
4
- let {getLibDataDir, cleanFile} = require("../util")
5
- let readline = require('readline');
6
- let gua = require('../source/gua');
7
- let posJson = require('../source/pos');
8
- let desc = process.argv.splice(2).join(" ");
9
- let dataLibDir = getLibDataDir()
10
- let get = n => Math.floor(Math.random()*n) + 1;
11
- let down = get(8);
12
- let up = get(8);
13
- let pos = get(6);
14
- let result = down + "," + up + "," + pos;
15
- console.log(result);
16
-
17
- function save(content) {
18
- let seeTxt = dataLibDir + "/see.txt";
19
- fs.writeFileSync(seeTxt, content,
20
- { encoding: 'utf8', flag: 'a' });
21
- cleanFile(seeTxt)
22
- }
23
- if (desc) save(new Date() + "\t" + result + "\t" + desc + "\n");
24
-
25
- let key = `${gua[String(up)]}上${gua[String(down)]}下`;
26
- let changeStream = fs.createReadStream(path.resolve(__dirname, '../source/change.txt'));
27
- let changeLine = readline.createInterface({
28
- input:changeStream
29
- });
30
- let found = false;
31
- let use = false;
32
- let text = '';
33
- changeLine.on('line',function (line) {
34
- line = line.trim().replace(/-/g, "");
35
- if (!line) return;
36
-
37
- if (line.match(/^初[六九]/)) {
38
- use = false;
39
- }
40
-
41
- let two = line.substr(0, 2);
42
- if (use && (two.indexOf("六") !== -1 || two.indexOf("九") !== -1)) {
43
- use = false;
44
- }
45
- if (two.indexOf(posJson[String(pos)]) !== -1
46
- && (two.indexOf("六") !== -1 || two.indexOf("九") !== -1)) {
47
- use = true;
48
- }
49
- if (line.match(/^第[一二三四五六七八九十]/)){
50
- found = false;
51
- }
52
- if (found && use) {
53
- text += line + "\n";
54
- }
55
- if (line.indexOf(key) !== -1) {
56
- found = true;
57
- use = true;
58
- }
59
- });
60
-
61
- changeLine.on('close', () => {
62
- console.log(text);
63
- if (desc) save(text);
64
- });
65
-
66
-
67
-
package/cmd/solCd.js DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- let {sc, sd} = require('../sol')
3
-
4
- sc(...(process.argv.slice(2)))
5
- sd(...(process.argv.slice(2)))
package/cmd/solComplie.js DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- let {sc} = require('../sol')
3
-
4
- sc(...process.argv.slice(2))
package/cmd/solDeploy.js DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- let {sd} = require('../sol')
3
-
4
- sd(...process.argv.slice(2))
package/cmd/solTest.js DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env node
2
- let {st} = require('../sol')
3
-
4
- st(...(process.argv.slice(2)))
5
-
6
-
7
-
package/cmd/solTt.js DELETED
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env node
2
- let {sc, sd, st} = require('../sol')
3
-
4
- async function execMethods() {
5
- sc(...(process.argv.slice(2)))
6
- await sd(...(process.argv.slice(2)))
7
- await st(...(process.argv.slice(2)))
8
- }
9
- execMethods()
10
-
@@ -1,18 +0,0 @@
1
- #!/usr/bin/env node
2
- const server = require('server');
3
- let address = require('address');
4
- let {lisPid} = require('../util')
5
-
6
- let port = process.argv[2] || 9527
7
- let dir = process.cwd()
8
- let serverInfo = {
9
- port: port,
10
- public: dir
11
- }
12
-
13
- server(serverInfo);
14
-
15
- console.log("http://localhost:"+port);
16
- console.log("http://" + address.ip()+":"+port);
17
-
18
- lisPid('staticServer_' + port)