datagrok-tools 4.13.75 → 4.13.76
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/bin/commands/add.js +96 -106
- package/bin/commands/api.js +65 -107
- package/bin/commands/check.js +264 -396
- package/bin/commands/config.js +82 -158
- package/bin/commands/create.js +65 -80
- package/bin/commands/help.js +194 -12
- package/bin/commands/init.js +73 -95
- package/bin/commands/link.js +70 -176
- package/bin/commands/publish.js +283 -484
- package/bin/commands/test-all.js +77 -291
- package/bin/commands/test.js +169 -388
- package/bin/utils/color-utils.js +8 -11
- package/bin/utils/ent-helpers.js +52 -42
- package/bin/utils/func-generation.js +25 -57
- package/bin/utils/interfaces.js +5 -1
- package/bin/utils/order-functions.js +47 -118
- package/bin/utils/test-utils.js +322 -750
- package/bin/utils/utils.js +123 -235
- package/bin/validators/config-validator.js +12 -14
- package/package.json +13 -3
package/bin/commands/config.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.config = config;
|
|
9
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
12
9
|
var _inquirer = _interopRequireDefault(require("inquirer"));
|
|
13
10
|
var _os = _interopRequireDefault(require("os"));
|
|
@@ -15,102 +12,63 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
15
12
|
var _jsYaml = _interopRequireDefault(require("js-yaml"));
|
|
16
13
|
var _configValidator = require("../validators/config-validator");
|
|
17
14
|
var color = _interopRequireWildcard(require("../utils/color-utils"));
|
|
18
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function
|
|
19
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" !=
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
const confTemplateDir = _path.default.join(_path.default.dirname(_path.default.dirname(__dirname)), 'config-template.yaml');
|
|
18
|
+
const confTemplate = _jsYaml.default.load(_fs.default.readFileSync(confTemplateDir, {
|
|
22
19
|
encoding: 'utf-8'
|
|
23
20
|
}));
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
const grokDir = _path.default.join(_os.default.homedir(), '.grok');
|
|
22
|
+
const confPath = _path.default.join(grokDir, 'config.yaml');
|
|
26
23
|
function validateKey(key) {
|
|
27
24
|
if (!key || /^([A-Za-z\d-])+$/.test(key)) return true;else return 'Developer key may only include letters, numbers, or hyphens';
|
|
28
25
|
}
|
|
29
26
|
function generateKeyQ(server, url) {
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
const origin = new URL(url).origin;
|
|
28
|
+
const question = {
|
|
32
29
|
name: server,
|
|
33
30
|
type: 'input',
|
|
34
|
-
message:
|
|
31
|
+
message: `Developer key (get it from ${origin}/u or press ENTER to skip):`,
|
|
35
32
|
validate: validateKey
|
|
36
33
|
};
|
|
37
|
-
if (server.startsWith('local')) question.message =
|
|
34
|
+
if (server.startsWith('local')) question.message = `Developer key for ${origin} (press ENTER to skip):`;
|
|
38
35
|
return question;
|
|
39
36
|
}
|
|
40
|
-
function addNewServer(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
_context2.next = 7;
|
|
67
|
-
return _inquirer["default"].prompt({
|
|
68
|
-
name: 'server-name',
|
|
69
|
-
type: 'input',
|
|
70
|
-
message: 'Enter a name:'
|
|
71
|
-
});
|
|
72
|
-
case 7:
|
|
73
|
-
name = _context2.sent['server-name'];
|
|
74
|
-
_context2.next = 10;
|
|
75
|
-
return _inquirer["default"].prompt({
|
|
76
|
-
name: 'server-url',
|
|
77
|
-
type: 'input',
|
|
78
|
-
message: 'Enter a URL:'
|
|
79
|
-
});
|
|
80
|
-
case 10:
|
|
81
|
-
url = _context2.sent['server-url'];
|
|
82
|
-
_context2.next = 13;
|
|
83
|
-
return _inquirer["default"].prompt(generateKeyQ(name, url));
|
|
84
|
-
case 13:
|
|
85
|
-
_context2.t0 = name;
|
|
86
|
-
key = _context2.sent[_context2.t0];
|
|
87
|
-
config.servers[name] = {
|
|
88
|
-
url: url,
|
|
89
|
-
key: key
|
|
90
|
-
};
|
|
91
|
-
_context2.next = 19;
|
|
92
|
-
break;
|
|
93
|
-
case 18:
|
|
94
|
-
return _context2.abrupt("break", 21);
|
|
95
|
-
case 19:
|
|
96
|
-
_context2.next = 0;
|
|
97
|
-
break;
|
|
98
|
-
case 21:
|
|
99
|
-
case "end":
|
|
100
|
-
return _context2.stop();
|
|
101
|
-
}
|
|
102
|
-
}, _callee2);
|
|
103
|
-
}));
|
|
104
|
-
return _addNewServer.apply(this, arguments);
|
|
37
|
+
async function addNewServer(config) {
|
|
38
|
+
while (true) {
|
|
39
|
+
const addServer = (await _inquirer.default.prompt({
|
|
40
|
+
name: 'add-server',
|
|
41
|
+
type: 'confirm',
|
|
42
|
+
message: 'Do you want to add a server?',
|
|
43
|
+
default: false
|
|
44
|
+
}))['add-server'];
|
|
45
|
+
if (addServer) {
|
|
46
|
+
const name = (await _inquirer.default.prompt({
|
|
47
|
+
name: 'server-name',
|
|
48
|
+
type: 'input',
|
|
49
|
+
message: 'Enter a name:'
|
|
50
|
+
}))['server-name'];
|
|
51
|
+
const url = (await _inquirer.default.prompt({
|
|
52
|
+
name: 'server-url',
|
|
53
|
+
type: 'input',
|
|
54
|
+
message: 'Enter a URL:'
|
|
55
|
+
}))['server-url'];
|
|
56
|
+
const key = (await _inquirer.default.prompt(generateKeyQ(name, url)))[name];
|
|
57
|
+
config.servers[name] = {
|
|
58
|
+
url,
|
|
59
|
+
key
|
|
60
|
+
};
|
|
61
|
+
} else break;
|
|
62
|
+
}
|
|
105
63
|
}
|
|
106
64
|
function config(args) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
65
|
+
const nOptions = Object.keys(args).length - 1;
|
|
66
|
+
const interactiveMode = args['_'].length === 1 && (nOptions < 1 || nOptions === 1 && args.reset);
|
|
67
|
+
const hasAddServerCommand = args['_'].length === 2 && args['_'][1] === 'add' && args.server && args.key && args.k && args.alias && (nOptions === 4 || nOptions === 5 && args.default);
|
|
110
68
|
if (!interactiveMode && !hasAddServerCommand) return false;
|
|
111
|
-
if (!_fs
|
|
112
|
-
if (!_fs
|
|
113
|
-
|
|
69
|
+
if (!_fs.default.existsSync(grokDir)) _fs.default.mkdirSync(grokDir);
|
|
70
|
+
if (!_fs.default.existsSync(confPath) || args.reset) _fs.default.writeFileSync(confPath, _jsYaml.default.dump(confTemplate));
|
|
71
|
+
const config = _jsYaml.default.load(_fs.default.readFileSync(confPath, {
|
|
114
72
|
encoding: 'utf-8'
|
|
115
73
|
}));
|
|
116
74
|
if (hasAddServerCommand) {
|
|
@@ -124,89 +82,55 @@ function config(args) {
|
|
|
124
82
|
url: args.server,
|
|
125
83
|
key: args.key
|
|
126
84
|
};
|
|
127
|
-
color.success(
|
|
128
|
-
console.log(
|
|
129
|
-
if (args
|
|
130
|
-
_fs
|
|
85
|
+
color.success(`Successfully added the server to ${confPath}.`);
|
|
86
|
+
console.log(`Use this command to deploy packages: grok publish ${args.alias}`);
|
|
87
|
+
if (args.default) config.default = args.alias;
|
|
88
|
+
_fs.default.writeFileSync(confPath, _jsYaml.default.dump(config));
|
|
131
89
|
return true;
|
|
132
90
|
}
|
|
133
|
-
console.log(
|
|
91
|
+
console.log(`Your config file (${confPath}):`);
|
|
134
92
|
console.log(config);
|
|
135
|
-
|
|
93
|
+
const valRes = (0, _configValidator.validateConf)(config);
|
|
136
94
|
if (!config || !valRes.value) {
|
|
137
95
|
color.error(valRes.message);
|
|
138
96
|
return false;
|
|
139
97
|
}
|
|
140
98
|
if (valRes.warnings.length) color.warn(valRes.warnings.join('\n'));
|
|
141
|
-
(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
answers = _context.sent;
|
|
156
|
-
if (!answers['edit-config']) {
|
|
157
|
-
_context.next = 24;
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
_context.t0 = _regenerator["default"].keys(config.servers);
|
|
161
|
-
case 6:
|
|
162
|
-
if ((_context.t1 = _context.t0()).done) {
|
|
163
|
-
_context.next = 17;
|
|
164
|
-
break;
|
|
165
|
-
}
|
|
166
|
-
server = _context.t1.value;
|
|
167
|
-
url = config['servers'][server]['url'];
|
|
168
|
-
question = generateKeyQ(server, url);
|
|
169
|
-
question["default"] = config['servers'][server]['key'];
|
|
170
|
-
_context.next = 13;
|
|
171
|
-
return _inquirer["default"].prompt(question);
|
|
172
|
-
case 13:
|
|
173
|
-
devKey = _context.sent;
|
|
99
|
+
(async () => {
|
|
100
|
+
try {
|
|
101
|
+
const answers = await _inquirer.default.prompt({
|
|
102
|
+
name: 'edit-config',
|
|
103
|
+
type: 'confirm',
|
|
104
|
+
message: 'Do you want to edit it?',
|
|
105
|
+
default: false
|
|
106
|
+
});
|
|
107
|
+
if (answers['edit-config']) {
|
|
108
|
+
for (const server in config.servers) {
|
|
109
|
+
const url = config['servers'][server]['url'];
|
|
110
|
+
const question = generateKeyQ(server, url);
|
|
111
|
+
question.default = config['servers'][server]['key'];
|
|
112
|
+
const devKey = await _inquirer.default.prompt(question);
|
|
174
113
|
config['servers'][server]['key'] = devKey[server];
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
},
|
|
189
|
-
"default": config["default"]
|
|
190
|
-
});
|
|
191
|
-
case 21:
|
|
192
|
-
defaultServer = _context.sent;
|
|
193
|
-
config["default"] = defaultServer['default-server'];
|
|
194
|
-
_fs["default"].writeFileSync(confPath, _jsYaml["default"].dump(config));
|
|
195
|
-
case 24:
|
|
196
|
-
_context.next = 31;
|
|
197
|
-
break;
|
|
198
|
-
case 26:
|
|
199
|
-
_context.prev = 26;
|
|
200
|
-
_context.t2 = _context["catch"](0);
|
|
201
|
-
color.error('The file is corrupted. Please run `grok config --reset` to restore the default template');
|
|
202
|
-
console.error(_context.t2);
|
|
203
|
-
return _context.abrupt("return", false);
|
|
204
|
-
case 31:
|
|
205
|
-
case "end":
|
|
206
|
-
return _context.stop();
|
|
114
|
+
}
|
|
115
|
+
await addNewServer(config);
|
|
116
|
+
const defaultServer = await _inquirer.default.prompt({
|
|
117
|
+
name: 'default-server',
|
|
118
|
+
type: 'input',
|
|
119
|
+
message: 'Your default server:',
|
|
120
|
+
validate: function (server) {
|
|
121
|
+
if (server in config.servers) return true;else return 'Only one of the specified servers may be chosen as default';
|
|
122
|
+
},
|
|
123
|
+
default: config.default
|
|
124
|
+
});
|
|
125
|
+
config.default = defaultServer['default-server'];
|
|
126
|
+
_fs.default.writeFileSync(confPath, _jsYaml.default.dump(config));
|
|
207
127
|
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
|
|
128
|
+
} catch (err) {
|
|
129
|
+
color.error('The file is corrupted. Please run `grok config --reset` to restore the default template');
|
|
130
|
+
console.error(err);
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
})();
|
|
134
|
+
_fs.default.writeFileSync(confPath, _jsYaml.default.dump(config));
|
|
211
135
|
return true;
|
|
212
136
|
}
|
package/bin/commands/create.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.create = create;
|
|
9
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
8
|
var _fs = _interopRequireDefault(require("fs"));
|
|
11
9
|
var _path = _interopRequireDefault(require("path"));
|
|
12
10
|
var _os = _interopRequireDefault(require("os"));
|
|
@@ -16,35 +14,31 @@ var _entHelpers = require("../utils/ent-helpers");
|
|
|
16
14
|
var utils = _interopRequireWildcard(require("../utils/utils"));
|
|
17
15
|
var color = _interopRequireWildcard(require("../utils/color-utils"));
|
|
18
16
|
var _configValidator = require("../validators/config-validator");
|
|
19
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function
|
|
20
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" !=
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
|
+
const platform = _os.default.platform();
|
|
20
|
+
const curDir = process.cwd();
|
|
21
|
+
const curFolder = _path.default.basename(curDir);
|
|
22
|
+
const grokDir = _path.default.join(_os.default.homedir(), '.grok');
|
|
23
|
+
const confPath = _path.default.join(grokDir, 'config.yaml');
|
|
24
|
+
const templateDir = _path.default.join(_path.default.dirname(_path.default.dirname(__dirname)), 'package-template');
|
|
25
|
+
const confTemplateDir = _path.default.join(_path.default.dirname(_path.default.dirname(__dirname)), 'config-template.yaml');
|
|
26
|
+
const confTemplate = _jsYaml.default.load(_fs.default.readFileSync(confTemplateDir, {
|
|
29
27
|
encoding: 'utf-8'
|
|
30
28
|
}));
|
|
31
|
-
|
|
32
|
-
function createDirectoryContents(name, config, templateDir, packageDir) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
filesToCreate.forEach(function (file) {
|
|
39
|
-
var origFilePath = _path["default"].join(templateDir, file);
|
|
40
|
-
var copyFilePath = _path["default"].join(packageDir, file);
|
|
41
|
-
var stats = _fs["default"].statSync(origFilePath);
|
|
29
|
+
const dependencies = [];
|
|
30
|
+
function createDirectoryContents(name, config, templateDir, packageDir, ide = '', ts = true, eslint = false, test = false) {
|
|
31
|
+
const filesToCreate = _fs.default.readdirSync(templateDir);
|
|
32
|
+
filesToCreate.forEach(file => {
|
|
33
|
+
const origFilePath = _path.default.join(templateDir, file);
|
|
34
|
+
let copyFilePath = _path.default.join(packageDir, file);
|
|
35
|
+
const stats = _fs.default.statSync(origFilePath);
|
|
42
36
|
if (stats.isFile()) {
|
|
43
37
|
if (file === 'package.png') {
|
|
44
|
-
_fs
|
|
38
|
+
_fs.default.writeFileSync(copyFilePath, _fs.default.readFileSync(origFilePath, 'base64'), 'base64');
|
|
45
39
|
return false;
|
|
46
40
|
}
|
|
47
|
-
|
|
41
|
+
let contents = _fs.default.readFileSync(file === 'webpack.config.js' && ts ? _path.default.join(templateDir, 'ts.webpack.config.js') : origFilePath, 'utf8');
|
|
48
42
|
contents = contents.replace(/#{PACKAGE_NAME}/g, name);
|
|
49
43
|
contents = contents.replace(/#{PACKAGE_DETECTORS_NAME}/g, utils.kebabToCamelCase(name));
|
|
50
44
|
contents = contents.replace(/#{PACKAGE_NAME_LOWERCASE}/g, name.toLowerCase());
|
|
@@ -52,21 +46,19 @@ function createDirectoryContents(name, config, templateDir, packageDir) {
|
|
|
52
46
|
contents = contents.replace(/#{CURRENT_DATE}/g, new Date().toISOString().slice(0, 10));
|
|
53
47
|
// eslint-disable-next-line new-cap
|
|
54
48
|
contents = utils.replacers['PACKAGE_NAMESPACE'](contents, name);
|
|
55
|
-
contents = contents.replace(/#{GROK_HOST_ALIAS}/g, config
|
|
56
|
-
contents = contents.replace(/#{GROK_HOST}/g, /localhost|127\.0\.0\.1/.test(config['servers'][config
|
|
49
|
+
contents = contents.replace(/#{GROK_HOST_ALIAS}/g, config.default);
|
|
50
|
+
contents = contents.replace(/#{GROK_HOST}/g, /localhost|127\.0\.0\.1/.test(config['servers'][config.default]['url']) ? 'http://localhost:63343/login.html' : new URL(config['servers'][config.default]['url']).origin);
|
|
57
51
|
if (file === 'package.json') {
|
|
58
|
-
var _package$scripts;
|
|
59
52
|
// Generate scripts for non-default servers from `config.yaml`
|
|
60
|
-
|
|
61
|
-
_package['scripts'] =
|
|
62
|
-
for (
|
|
63
|
-
if (server === config
|
|
64
|
-
_package['scripts'][
|
|
65
|
-
_package['scripts'][
|
|
53
|
+
const _package = JSON.parse(contents);
|
|
54
|
+
_package['scripts'] = _package['scripts'] ?? {};
|
|
55
|
+
for (const server in config.servers) {
|
|
56
|
+
if (server === config.default) continue;
|
|
57
|
+
_package['scripts'][`debug-${name.toLowerCase()}-${server}`] = `webpack && grok publish ${server}`;
|
|
58
|
+
_package['scripts'][`release-${name.toLowerCase()}-${server}`] = `webpack && grok publish ${server} --release`;
|
|
66
59
|
}
|
|
67
60
|
if (ts) {
|
|
68
|
-
|
|
69
|
-
_package.devDependencies = (_package$devDependenc = _package.devDependencies) !== null && _package$devDependenc !== void 0 ? _package$devDependenc : {};
|
|
61
|
+
_package.devDependencies = _package.devDependencies ?? {};
|
|
70
62
|
Object.assign(_package.devDependencies, {
|
|
71
63
|
'ts-loader': 'latest',
|
|
72
64
|
'typescript': 'latest'
|
|
@@ -81,8 +73,8 @@ function createDirectoryContents(name, config, templateDir, packageDir) {
|
|
|
81
73
|
'@typescript-eslint/parser': 'latest'
|
|
82
74
|
} : {});
|
|
83
75
|
Object.assign(_package.scripts, {
|
|
84
|
-
'lint':
|
|
85
|
-
'lint-fix':
|
|
76
|
+
'lint': `eslint src${ts ? ' --ext .ts' : ''}`,
|
|
77
|
+
'lint-fix': `eslint src${ts ? ' --ext .ts' : ''} --fix`
|
|
86
78
|
});
|
|
87
79
|
}
|
|
88
80
|
if (test) {
|
|
@@ -95,15 +87,10 @@ function createDirectoryContents(name, config, templateDir, packageDir) {
|
|
|
95
87
|
}
|
|
96
88
|
|
|
97
89
|
// Save module names for installation prompt
|
|
98
|
-
for (
|
|
99
|
-
var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
|
|
100
|
-
module = _Object$entries$_i[0],
|
|
101
|
-
tag = _Object$entries$_i[1];
|
|
102
|
-
dependencies.push("".concat(module, "@").concat(tag));
|
|
103
|
-
}
|
|
90
|
+
for (const [module, tag] of Object.entries(Object.assign({}, _package.dependencies, _package.devDependencies))) dependencies.push(`${module}@${tag}`);
|
|
104
91
|
contents = JSON.stringify(_package, null, 2);
|
|
105
92
|
}
|
|
106
|
-
if (file === 'package.js' && ts) copyFilePath = _path
|
|
93
|
+
if (file === 'package.js' && ts) copyFilePath = _path.default.join(packageDir, 'package.ts');
|
|
107
94
|
if (file === 'package-test.js' && ts) return false;
|
|
108
95
|
if (file === 'package-test.ts' && !ts) return false;
|
|
109
96
|
if (file === 'tsconfig.json' && !ts) return false;
|
|
@@ -111,57 +98,55 @@ function createDirectoryContents(name, config, templateDir, packageDir) {
|
|
|
111
98
|
if (file === '.eslintrc.json') {
|
|
112
99
|
if (!eslint) return false;
|
|
113
100
|
if (ts) {
|
|
114
|
-
|
|
101
|
+
const eslintConf = JSON.parse(contents);
|
|
115
102
|
eslintConf.parser = '@typescript-eslint/parser';
|
|
116
103
|
eslintConf.plugins = ['@typescript-eslint'];
|
|
117
104
|
contents = JSON.stringify(eslintConf, null, 2);
|
|
118
105
|
}
|
|
119
106
|
}
|
|
120
107
|
if (file === 'gitignore') {
|
|
121
|
-
copyFilePath = _path
|
|
108
|
+
copyFilePath = _path.default.join(packageDir, '.gitignore');
|
|
122
109
|
if (ts) contents += '\n# Emitted *.js files\nsrc/**/*.js\n';
|
|
123
110
|
}
|
|
124
|
-
if (file === 'npmignore') copyFilePath = _path
|
|
125
|
-
_fs
|
|
111
|
+
if (file === 'npmignore') copyFilePath = _path.default.join(packageDir, '.npmignore');
|
|
112
|
+
_fs.default.writeFileSync(copyFilePath, contents, 'utf8');
|
|
126
113
|
} else if (stats.isDirectory()) {
|
|
127
114
|
if (file === '.vscode' && !(ide == 'vscode' && platform == 'win32')) return;
|
|
128
|
-
_fs
|
|
115
|
+
_fs.default.mkdirSync(copyFilePath);
|
|
129
116
|
// recursive call
|
|
130
|
-
if (_path
|
|
117
|
+
if (_path.default.basename(origFilePath) === 'node_modules') return;
|
|
131
118
|
createDirectoryContents(name, config, origFilePath, copyFilePath, ide, ts, eslint, test);
|
|
132
119
|
}
|
|
133
120
|
});
|
|
134
121
|
}
|
|
135
122
|
function create(args) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
123
|
+
const options = ['ide', 'js', 'ts', 'eslint', 'test'];
|
|
124
|
+
const nOptions = Object.keys(args).length - 1;
|
|
125
|
+
const nArgs = args['_'].length;
|
|
139
126
|
if (nArgs > 2 || nOptions > 4) return false;
|
|
140
|
-
if (nOptions && !Object.keys(args).slice(1).every(
|
|
141
|
-
return options.includes(op);
|
|
142
|
-
})) return false;
|
|
127
|
+
if (nOptions && !Object.keys(args).slice(1).every(op => options.includes(op))) return false;
|
|
143
128
|
if (args.js && args.ts) return color.error('Incompatible options: --js and --ts');
|
|
144
|
-
|
|
129
|
+
const ts = !args.js && args.ts !== false;
|
|
145
130
|
|
|
146
131
|
// Create `config.yaml` if it doesn't exist yet
|
|
147
|
-
if (!_fs
|
|
148
|
-
if (!_fs
|
|
149
|
-
|
|
132
|
+
if (!_fs.default.existsSync(grokDir)) _fs.default.mkdirSync(grokDir);
|
|
133
|
+
if (!_fs.default.existsSync(confPath)) _fs.default.writeFileSync(confPath, _jsYaml.default.dump(confTemplate));
|
|
134
|
+
const config = _jsYaml.default.load(_fs.default.readFileSync(confPath, {
|
|
150
135
|
encoding: 'utf-8'
|
|
151
136
|
}));
|
|
152
|
-
|
|
137
|
+
const confTest = (0, _configValidator.validateConf)(config);
|
|
153
138
|
if (!confTest.value) {
|
|
154
139
|
color.error(confTest.message);
|
|
155
140
|
return false;
|
|
156
141
|
}
|
|
157
|
-
|
|
158
|
-
|
|
142
|
+
const name = nArgs === 2 ? args['_'][1] : curFolder;
|
|
143
|
+
const validName = /^([A-Za-z\-_\d])+$/.test(name);
|
|
159
144
|
if (validName) {
|
|
160
|
-
|
|
161
|
-
|
|
145
|
+
let packageDir = curDir;
|
|
146
|
+
let repositoryInfo = null;
|
|
162
147
|
if (curFolder !== name) {
|
|
163
|
-
packageDir = _path
|
|
164
|
-
if (!_fs
|
|
148
|
+
packageDir = _path.default.join(packageDir, name);
|
|
149
|
+
if (!_fs.default.existsSync(packageDir)) _fs.default.mkdirSync(packageDir);
|
|
165
150
|
}
|
|
166
151
|
if (!utils.isEmpty(packageDir)) {
|
|
167
152
|
console.log();
|
|
@@ -170,43 +155,43 @@ function create(args) {
|
|
|
170
155
|
}
|
|
171
156
|
(0, _child_process.exec)('git rev-parse --is-inside-work-tree', {
|
|
172
157
|
cwd: packageDir
|
|
173
|
-
},
|
|
158
|
+
}, err => {
|
|
174
159
|
if (err) return;
|
|
175
|
-
|
|
160
|
+
const repository = {
|
|
176
161
|
type: 'git'
|
|
177
162
|
};
|
|
178
163
|
(0, _child_process.exec)('git config --get remote.origin.url', {
|
|
179
164
|
cwd: packageDir
|
|
180
|
-
},
|
|
165
|
+
}, (err, stdout) => {
|
|
181
166
|
if (err) return;
|
|
182
167
|
repository.url = stdout.trim();
|
|
183
168
|
(0, _child_process.exec)('git rev-parse --show-prefix', {
|
|
184
169
|
cwd: packageDir
|
|
185
|
-
},
|
|
170
|
+
}, (err, stdout) => {
|
|
186
171
|
if (err) return;
|
|
187
|
-
|
|
172
|
+
const prefix = stdout.trim();
|
|
188
173
|
repository.directory = prefix.endsWith('/') ? prefix.slice(0, -1) : prefix;
|
|
189
174
|
if (repository.type && repository.url && repository.directory) repositoryInfo = repository;
|
|
190
175
|
});
|
|
191
176
|
});
|
|
192
177
|
});
|
|
193
|
-
process.on('beforeExit',
|
|
178
|
+
process.on('beforeExit', () => {
|
|
194
179
|
if (repositoryInfo) {
|
|
195
|
-
|
|
196
|
-
|
|
180
|
+
const packagePath = _path.default.join(packageDir, 'package.json');
|
|
181
|
+
const p = JSON.parse(_fs.default.readFileSync(packagePath, 'utf-8'));
|
|
197
182
|
p.repository = repositoryInfo;
|
|
198
|
-
_fs
|
|
183
|
+
_fs.default.writeFileSync(packagePath, JSON.stringify(p, null, 2), 'utf-8');
|
|
199
184
|
}
|
|
200
185
|
process.exit();
|
|
201
186
|
});
|
|
202
187
|
createDirectoryContents(name, config, templateDir, packageDir, args.ide, ts, !!args.eslint, !!args.test);
|
|
203
188
|
color.success('Successfully created package ' + name);
|
|
204
|
-
console.log(_entHelpers.help
|
|
205
|
-
console.log(
|
|
189
|
+
console.log(_entHelpers.help.package(ts));
|
|
190
|
+
console.log(`\nThe package has the following dependencies:\n${dependencies.join(' ')}\n`);
|
|
206
191
|
console.log('Running `npm install` to get the required dependencies...\n');
|
|
207
192
|
(0, _child_process.exec)('npm install', {
|
|
208
193
|
cwd: packageDir
|
|
209
|
-
},
|
|
194
|
+
}, (err, stdout, stderr) => {
|
|
210
195
|
if (err) throw err;else console.log(stderr, stdout);
|
|
211
196
|
});
|
|
212
197
|
} else color.error('Package name may only include letters, numbers, underscores, or hyphens');
|