@shijiu/jsview 1.9.779 → 1.9.782
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/package.json +1 -1
- package/tools/index.js +209 -0
- package/tools/jsview-common.js +111 -15
- package/tools/jsview-jsmap-serve.mjs +4 -4
- package/tools/jsview-post-install.js +9 -3
- package/tools/jsview-run-android.js +7 -1
package/package.json
CHANGED
package/tools/index.js
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
module.exports = function (args, opts) {
|
|
2
|
+
if (!opts) opts = {};
|
|
3
|
+
|
|
4
|
+
var flags = { bools : {}, strings : {} };
|
|
5
|
+
|
|
6
|
+
if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {
|
|
7
|
+
flags.allBools = true;
|
|
8
|
+
} else {
|
|
9
|
+
[].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
|
|
10
|
+
flags.bools[key] = true;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
var aliases = {};
|
|
15
|
+
Object.keys(opts.alias || {}).forEach(function (key) {
|
|
16
|
+
aliases[key] = [].concat(opts.alias[key]);
|
|
17
|
+
aliases[key].forEach(function (x) {
|
|
18
|
+
aliases[x] = [key].concat(aliases[key].filter(function (y) {
|
|
19
|
+
return x !== y;
|
|
20
|
+
}));
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
[].concat(opts.string).filter(Boolean).forEach(function (key) {
|
|
25
|
+
flags.strings[key] = true;
|
|
26
|
+
if (aliases[key]) {
|
|
27
|
+
flags.strings[aliases[key]] = true;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
var defaults = opts['default'] || {};
|
|
32
|
+
|
|
33
|
+
var argv = { _ : [] };
|
|
34
|
+
Object.keys(flags.bools).forEach(function (key) {
|
|
35
|
+
setArg(key, defaults[key] === undefined ? false : defaults[key]);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
var notFlags = [];
|
|
39
|
+
|
|
40
|
+
if (args.indexOf('--') !== -1) {
|
|
41
|
+
notFlags = args.slice(args.indexOf('--')+1);
|
|
42
|
+
args = args.slice(0, args.indexOf('--'));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function setArg (key, val) {
|
|
46
|
+
var value = !flags.strings[key] && isNumber(val)
|
|
47
|
+
? Number(val) : val
|
|
48
|
+
;
|
|
49
|
+
setKey(argv, key.split('.'), value);
|
|
50
|
+
|
|
51
|
+
(aliases[key] || []).forEach(function (x) {
|
|
52
|
+
setKey(argv, x.split('.'), value);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
for (var i = 0; i < args.length; i++) {
|
|
57
|
+
var arg = args[i];
|
|
58
|
+
|
|
59
|
+
if (/^--.+=/.test(arg)) {
|
|
60
|
+
// Using [\s\S] instead of . because js doesn't support the
|
|
61
|
+
// 'dotall' regex modifier. See:
|
|
62
|
+
// http://stackoverflow.com/a/1068308/13216
|
|
63
|
+
var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
|
|
64
|
+
setArg(m[1], m[2]);
|
|
65
|
+
}
|
|
66
|
+
else if (/^--no-.+/.test(arg)) {
|
|
67
|
+
var key = arg.match(/^--no-(.+)/)[1];
|
|
68
|
+
setArg(key, false);
|
|
69
|
+
}
|
|
70
|
+
else if (/^--.+/.test(arg)) {
|
|
71
|
+
var key = arg.match(/^--(.+)/)[1];
|
|
72
|
+
var next = args[i + 1];
|
|
73
|
+
if (next !== undefined && !/^-/.test(next)
|
|
74
|
+
&& !flags.bools[key]
|
|
75
|
+
&& !flags.allBools
|
|
76
|
+
&& (aliases[key] ? !flags.bools[aliases[key]] : true)) {
|
|
77
|
+
setArg(key, next);
|
|
78
|
+
i++;
|
|
79
|
+
}
|
|
80
|
+
else if (/^(true|false)$/.test(next)) {
|
|
81
|
+
setArg(key, next === 'true');
|
|
82
|
+
i++;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
setArg(key, flags.strings[key] ? '' : true);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (/^-[^-]+/.test(arg)) {
|
|
89
|
+
var letters = arg.slice(1,-1).split('');
|
|
90
|
+
|
|
91
|
+
var broken = false;
|
|
92
|
+
for (var j = 0; j < letters.length; j++) {
|
|
93
|
+
var next = arg.slice(j+2);
|
|
94
|
+
|
|
95
|
+
if (next === '-') {
|
|
96
|
+
setArg(letters[j], next)
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (/[A-Za-z]/.test(letters[j])
|
|
101
|
+
&& /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
|
|
102
|
+
setArg(letters[j], next);
|
|
103
|
+
broken = true;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (letters[j+1] && letters[j+1].match(/\W/)) {
|
|
108
|
+
setArg(letters[j], arg.slice(j+2));
|
|
109
|
+
broken = true;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
setArg(letters[j], flags.strings[letters[j]] ? '' : true);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
var key = arg.slice(-1)[0];
|
|
118
|
+
if (!broken && key !== '-') {
|
|
119
|
+
if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])
|
|
120
|
+
&& !flags.bools[key]
|
|
121
|
+
&& (aliases[key] ? !flags.bools[aliases[key]] : true)) {
|
|
122
|
+
setArg(key, args[i+1]);
|
|
123
|
+
i++;
|
|
124
|
+
}
|
|
125
|
+
else if (args[i+1] && /true|false/.test(args[i+1])) {
|
|
126
|
+
setArg(key, args[i+1] === 'true');
|
|
127
|
+
i++;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
setArg(key, flags.strings[key] ? '' : true);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
argv._.push(
|
|
136
|
+
flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
Object.keys(defaults).forEach(function (key) {
|
|
142
|
+
if (!hasKey(argv, key.split('.'))) {
|
|
143
|
+
setKey(argv, key.split('.'), defaults[key]);
|
|
144
|
+
|
|
145
|
+
(aliases[key] || []).forEach(function (x) {
|
|
146
|
+
setKey(argv, x.split('.'), defaults[key]);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
if (opts['--']) {
|
|
152
|
+
argv['--'] = new Array();
|
|
153
|
+
notFlags.forEach(function(key) {
|
|
154
|
+
argv['--'].push(key);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
notFlags.forEach(function(key) {
|
|
159
|
+
argv._.push(key);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return argv;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
function hasKey (obj, keys) {
|
|
167
|
+
var o = obj;
|
|
168
|
+
keys.slice(0,-1).forEach(function (key) {
|
|
169
|
+
o = (o[key] || {});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
var key = keys[keys.length - 1];
|
|
173
|
+
return key in o;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function setKey (obj, keys, value) {
|
|
177
|
+
var o = obj;
|
|
178
|
+
for (var i = 0; i < keys.length-1; i++) {
|
|
179
|
+
var key = keys[i];
|
|
180
|
+
if (key === '__proto__') return;
|
|
181
|
+
if (o[key] === undefined) o[key] = {};
|
|
182
|
+
if (o[key] === Object.prototype || o[key] === Number.prototype
|
|
183
|
+
|| o[key] === String.prototype) o[key] = {};
|
|
184
|
+
if (o[key] === Array.prototype) o[key] = [];
|
|
185
|
+
o = o[key];
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
var key = keys[keys.length - 1];
|
|
189
|
+
if (key === '__proto__') return;
|
|
190
|
+
if (o === Object.prototype || o === Number.prototype
|
|
191
|
+
|| o === String.prototype) o = {};
|
|
192
|
+
if (o === Array.prototype) o = [];
|
|
193
|
+
if (o[key] === undefined || typeof o[key] === 'boolean') {
|
|
194
|
+
o[key] = value;
|
|
195
|
+
}
|
|
196
|
+
else if (Array.isArray(o[key])) {
|
|
197
|
+
o[key].push(value);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
o[key] = [ o[key], value ];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function isNumber (x) {
|
|
205
|
+
if (typeof x === 'number') return true;
|
|
206
|
+
if (/^0x[0-9a-f]+$/i.test(x)) return true;
|
|
207
|
+
return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
|
|
208
|
+
}
|
|
209
|
+
|
package/tools/jsview-common.js
CHANGED
|
@@ -4,8 +4,91 @@
|
|
|
4
4
|
const fs = require('fs');
|
|
5
5
|
const path = require('path');
|
|
6
6
|
|
|
7
|
-
function
|
|
7
|
+
function printArgumentsUsages(requiredUsages, optionalUsages, helpUsages)
|
|
8
8
|
{
|
|
9
|
+
let maxLength = 0;
|
|
10
|
+
for (const usage in requiredUsages) {
|
|
11
|
+
maxLength = (maxLength > usage.length ? maxLength : usage.length);
|
|
12
|
+
}
|
|
13
|
+
for (const usage in optionalUsages) {
|
|
14
|
+
maxLength = (maxLength > usage.length ? maxLength : usage.length);
|
|
15
|
+
}
|
|
16
|
+
for (const usage in helpUsages) {
|
|
17
|
+
maxLength = (maxLength > usage.length ? maxLength : usage.length);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
console.log('Usages:');
|
|
21
|
+
for (const usage in requiredUsages) {
|
|
22
|
+
const spaceLength = maxLength - usage.length;
|
|
23
|
+
console.log();
|
|
24
|
+
console.log(' ' + usage + ': ' + ' '.repeat(spaceLength) + '[Required] ' + requiredUsages[usage]);
|
|
25
|
+
}
|
|
26
|
+
for (const usage in optionalUsages) {
|
|
27
|
+
const spaceLength = maxLength - usage.length;
|
|
28
|
+
console.log();
|
|
29
|
+
console.log(' ' + usage + ': ' + ' '.repeat(spaceLength) + '[Optional] ' + optionalUsages[usage]);
|
|
30
|
+
}
|
|
31
|
+
for (const usage in helpUsages) {
|
|
32
|
+
const spaceLength = maxLength - usage.length;
|
|
33
|
+
console.log();
|
|
34
|
+
console.log(' ' + usage + ': ' + ' '.repeat(spaceLength) + helpUsages[usage]);
|
|
35
|
+
}
|
|
36
|
+
console.log();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function parseArguments(requiredUsages = {},
|
|
40
|
+
optionalUsages = {},
|
|
41
|
+
withoutUnparsed = true)
|
|
42
|
+
{
|
|
43
|
+
const formatKey = (key) => {
|
|
44
|
+
let formattedKey = key.trim().replace(/^-*/, '');
|
|
45
|
+
formattedKey = formattedKey.replace(/-(.)/g, (x) => x[1].toUpperCase())
|
|
46
|
+
return formattedKey;
|
|
47
|
+
};
|
|
48
|
+
const formatValue = (value) => {
|
|
49
|
+
let formattedValue = (typeof(value) === 'string' ? value.trim() : value);
|
|
50
|
+
if (value === undefined
|
|
51
|
+
|| value === null
|
|
52
|
+
|| value === 'undefined'
|
|
53
|
+
|| value === 'null'
|
|
54
|
+
|| value === '') {
|
|
55
|
+
formattedValue = null;
|
|
56
|
+
}
|
|
57
|
+
return formattedValue;
|
|
58
|
+
}
|
|
59
|
+
const checkAliases = (aliases, options) => {
|
|
60
|
+
const formattedAliases = [];
|
|
61
|
+
for (const alias of aliases) {
|
|
62
|
+
const fmtAlias = formatKey(alias);
|
|
63
|
+
formattedAliases.push(fmtAlias);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
let aliasValue = undefined;
|
|
67
|
+
let found = false;
|
|
68
|
+
for (const alias of formattedAliases) {
|
|
69
|
+
if (alias in options) {
|
|
70
|
+
aliasValue = options[alias];
|
|
71
|
+
found = true;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (found == false) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const aliasedOptions = {};
|
|
81
|
+
for (const alias of formattedAliases) {
|
|
82
|
+
aliasedOptions[alias] = aliasValue;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return aliasedOptions;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const helpUsages = {
|
|
89
|
+
'-h | --help': 'Print help usages.',
|
|
90
|
+
}
|
|
91
|
+
|
|
9
92
|
let options = {
|
|
10
93
|
unparsed: []
|
|
11
94
|
};
|
|
@@ -19,7 +102,7 @@ function parseArguments(beginWithHyphen = true)
|
|
|
19
102
|
value = true;
|
|
20
103
|
}
|
|
21
104
|
if (key.startsWith('-') == false) {
|
|
22
|
-
if (
|
|
105
|
+
if (withoutUnparsed) {
|
|
23
106
|
console.error('Failed to parse argument: ' + argu);
|
|
24
107
|
process.exit(1);
|
|
25
108
|
} else {
|
|
@@ -28,21 +111,34 @@ function parseArguments(beginWithHyphen = true)
|
|
|
28
111
|
}
|
|
29
112
|
}
|
|
30
113
|
|
|
31
|
-
let formattedKey = key
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
let formattedValue = value;
|
|
35
|
-
if (value === undefined
|
|
36
|
-
|| value === null
|
|
37
|
-
|| value === 'undefined'
|
|
38
|
-
|| value === 'null'
|
|
39
|
-
|| value === '') {
|
|
40
|
-
formattedValue = null;
|
|
41
|
-
}
|
|
42
|
-
|
|
114
|
+
let formattedKey = formatKey(key);
|
|
115
|
+
let formattedValue = formatValue(value);
|
|
43
116
|
options[formattedKey] = formattedValue;
|
|
44
117
|
}
|
|
45
118
|
|
|
119
|
+
for (const checker in helpUsages) {
|
|
120
|
+
const checkerList = checker.split('|');
|
|
121
|
+
const aliasedOptions = checkAliases(checkerList, options);
|
|
122
|
+
if (aliasedOptions) {
|
|
123
|
+
printArgumentsUsages(requiredUsages, optionalUsages, helpUsages);
|
|
124
|
+
process.exit(0);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
for (const checker in requiredUsages) {
|
|
128
|
+
const checkerList = checker.split('|');
|
|
129
|
+
const aliasedOptions = checkAliases(checkerList, options);
|
|
130
|
+
if (!aliasedOptions) {
|
|
131
|
+
console.log('JsView Error: Failed to find required option: ' + checkerList);
|
|
132
|
+
process.exit(-1);
|
|
133
|
+
}
|
|
134
|
+
options = { ...options, ...aliasedOptions };
|
|
135
|
+
}
|
|
136
|
+
for (const checker in optionalUsages) {
|
|
137
|
+
const checkerList = checker.split('|');
|
|
138
|
+
const aliasedOptions = checkAliases(checkerList, options);
|
|
139
|
+
options = { ...options, ...aliasedOptions };
|
|
140
|
+
}
|
|
141
|
+
|
|
46
142
|
return options;
|
|
47
143
|
}
|
|
48
144
|
|
|
@@ -69,7 +165,7 @@ function parseArguments(beginWithHyphen = true)
|
|
|
69
165
|
* │ │ └── jsview-vue-samples -> ../../../../@shijiu/jsview-vue-samples
|
|
70
166
|
* └── src
|
|
71
167
|
* └── appConfig
|
|
72
|
-
|
|
168
|
+
*************************************************/
|
|
73
169
|
function getOptions(framework)
|
|
74
170
|
{
|
|
75
171
|
const options = {};
|
|
@@ -111,16 +111,16 @@ function main(argv)
|
|
|
111
111
|
server.listen(port, '0.0.0.0', () => {
|
|
112
112
|
const ipAddrs = getIPAddress();
|
|
113
113
|
|
|
114
|
-
console.log(
|
|
114
|
+
console.log();
|
|
115
115
|
console.log('SourceMap base url: ' + context.baseUrl)
|
|
116
|
-
console.log(
|
|
116
|
+
console.log();
|
|
117
117
|
console.log('JsView server running at:');
|
|
118
|
-
console.log(
|
|
118
|
+
console.log();
|
|
119
119
|
console.log(' - Local: http://localhost:' + port + '/');
|
|
120
120
|
for(const ip of ipAddrs) {
|
|
121
121
|
console.log(' - Network: http://' + ip + ':' + port + '/');
|
|
122
122
|
}
|
|
123
|
-
console.log(
|
|
123
|
+
console.log();
|
|
124
124
|
});
|
|
125
125
|
}
|
|
126
126
|
|
|
@@ -52,7 +52,7 @@ function checkPatches(options, pkgNeedPatch, skipCheckVersion)
|
|
|
52
52
|
for (const pkgName of pkgNeedPatch) {
|
|
53
53
|
if (skipCheckVersion !== true) {
|
|
54
54
|
const patchPkgDir = path.resolve(options.jsviewPatchModulesDir, pkgName);
|
|
55
|
-
const patchPkgObj = getPackageObject(
|
|
55
|
+
const patchPkgObj = getPackageObject(patchPkgDir);
|
|
56
56
|
console.info(' ' + pkgName + ': ' + patchPkgObj.version);
|
|
57
57
|
|
|
58
58
|
const modulePkgDir = path.resolve(options.modulesDir, pkgName);
|
|
@@ -110,7 +110,7 @@ async function printRevision(options)
|
|
|
110
110
|
pluginCount++;
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
}
|
|
113
|
+
}
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
console.log(`* total:${pluginCount}`);
|
|
@@ -170,5 +170,11 @@ function main(argv)
|
|
|
170
170
|
doPostInstall(argv.framework, pkgNeedPatch, argv.skipCheckVersion);
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
const
|
|
173
|
+
const requiredUsages = {
|
|
174
|
+
'--framework': 'Select from [vue|react]',
|
|
175
|
+
};
|
|
176
|
+
const optionalUsages = {
|
|
177
|
+
'--skip-check-version': 'Skip check patches version.'
|
|
178
|
+
};
|
|
179
|
+
const argv = parseArguments(requiredUsages, optionalUsages);
|
|
174
180
|
main(argv);
|
|
@@ -63,7 +63,6 @@ function androidStartActivity(options)
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
const argv = parseArguments(false);
|
|
67
66
|
async function main(argv)
|
|
68
67
|
{
|
|
69
68
|
const options = await getExtraOptions(argv);
|
|
@@ -72,4 +71,11 @@ async function main(argv)
|
|
|
72
71
|
|
|
73
72
|
androidStartActivity(options);
|
|
74
73
|
}
|
|
74
|
+
|
|
75
|
+
const requiredUsages = {
|
|
76
|
+
'--framework': 'Select from [vue|react]',
|
|
77
|
+
};
|
|
78
|
+
const optionalUsages = {
|
|
79
|
+
};
|
|
80
|
+
const argv = parseArguments(requiredUsages, optionalUsages, false);
|
|
75
81
|
main(argv)
|