datagrok-tools 4.7.4 → 4.7.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.
@@ -8,10 +8,10 @@ var HELP = "\nUsage: grok <command>\n\nDatagrok's package management tool\n\nCom
8
8
  var HELP_ADD = "\nUsage: grok add <entity> <name>\n\nAdd an object template to your package:\n\ngrok add app <name>\ngrok add connection <name>\ngrok add detector <semantic-type-name>\ngrok add function [tag] <name>\ngrok add query <name>\ngrok add script [tag] <language> <name>\ngrok add view <name>\ngrok add viewer <name>\ngrok add tests\n\nPlease note that entity names may only include letters and numbers\n\nSupported languages for scripts:\njavascript, julia, node, octave, python, r\n\nAvailable tags:\npanel, init\n";
9
9
  var HELP_API = "\nUsage: grok api\n\nCreate wrapper functions for package scripts and queries\n";
10
10
  var HELP_CONFIG = "\nUsage: grok config\n\nCreate or update a configuration file\n\nOptions:\n[--reset] [--server] [--alias] [--key]\n\n--reset Restore the default config file template\n--server Use to add a server to the config (`grok config add --alias alias --server url --key key`)\n--alias Use in conjunction with the `server` option to set the server name\n--key Use in conjunction with the `server` option to set the developer key\n--default Use in conjunction with the `server` option to set the added server as default\n";
11
- var HELP_CREATE = "\nUsage: grok create [name]\n\nCreate a package:\n\ngrok create Create a package in the current working directory\ngrok create <name> Create a package in a folder with the specified name\n\nPlease note that the package name may only include letters, numbers, underscores, or hyphens\n\nOptions:\n[--eslint] [--ide] [--js|--ts] [--jest]\n\n--eslint Add a configuration for eslint\n--ide Add an IDE-specific configuration for debugging (vscode)\n--js Create a JavaScript package\n--ts Create a TypeScript package (default)\n--jest Add a configuration for jest\n";
11
+ var HELP_CREATE = "\nUsage: grok create [name]\n\nCreate a package:\n\ngrok create Create a package in the current working directory\ngrok create <name> Create a package in a folder with the specified name\n\nPlease note that the package name may only include letters, numbers, underscores, or hyphens\n\nOptions:\n[--eslint] [--ide] [--js|--ts]\n\n--eslint Add a configuration for eslint\n--ide Add an IDE-specific configuration for debugging (vscode)\n--js Create a JavaScript package\n--ts Create a TypeScript package (default)\n";
12
12
  var HELP_PUBLISH = "\nUsage: grok publish [host]\n\nUpload a package\n\nOptions:\n[--build|--rebuild] [--debug|--release] [--key] [--suffix]\n\nRunning `grok publish` is the same as running `grok publish defaultHost --build --debug`\n";
13
13
  var HELP_CHECK = "\nUsage: grok check\n\nOptions:\n[--dir]\n\n--dir Check all packages in a specified directory\n\nCheck package content (function signatures, import statements of external modules, etc.)\n";
14
- var HELP_TEST = "\nUsage: grok test\n\nOptions:\n[--host] [--csv]\n\n--host Host alias as in the config file\n--csv Save the test report in a CSV file\n\nRun package tests\n\nSee instructions:\nhttps://datagrok.ai/help/develop/how-to/test-packages#local-testing\n";
14
+ var HELP_TEST = "\nUsage: grok test\n\nOptions:\n[--host] [--csv]\n\n--host Host alias as in the config file\n--csv Save the test report in a CSV file\n--gui Launch graphical interface (non-headless mode)\n--skip-build Skip the package build step\n--skip-publish Skip the package publication step\n\nRun package tests\n\nSee instructions:\nhttps://datagrok.ai/help/develop/how-to/test-packages#local-testing\n";
15
15
  var HELP_LINK = "\nUsage: grok link\n\nLink `datagrok-api` and libraries for local development\n";
16
16
  var HELP_UNLINK = "\nUsage: grok unlink\n\nRevert `grok link`\n";
17
17
  var HELP_MIGRATE = "\nUsage: grok migrate\n\nSwitch to `grok` tools by copying your keys to the config\nfile and converting your scripts in the `package.json` file\n";
@@ -37,7 +37,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
37
37
 
38
38
  function test(args) {
39
39
  var options = Object.keys(args).slice(1);
40
- var commandOptions = ['host', 'csv'];
40
+ var commandOptions = ['host', 'csv', 'gui', 'skip-build', 'skip-publish'];
41
41
  var nArgs = args['_'].length;
42
42
  var curDir = process.cwd();
43
43
 
@@ -45,7 +45,7 @@ function test(args) {
45
45
 
46
46
  var confPath = _path["default"].join(grokDir, 'config.yaml');
47
47
 
48
- if (nArgs > 1 || options.length > 2 || options.length > 0 && !options.every(function (op) {
48
+ if (nArgs > 1 || options.length > commandOptions.length || options.length > 0 && !options.every(function (op) {
49
49
  return commandOptions.includes(op);
50
50
  })) return false;
51
51
 
@@ -88,181 +88,205 @@ function test(args) {
88
88
  return false;
89
89
  }
90
90
 
91
- color.info("Building package...");
92
- (0, _child_process.exec)('npm run build', function (err, stdout, stderr) {
93
- if (err) {
94
- console.log(stdout);
95
- throw err;
96
- } else {
97
- console.log(stdout);
98
- color.warn(stderr);
99
- }
91
+ if (args['skip-build']) {
92
+ if (args['skip-publish']) test();else publish(test);
93
+ } else {
94
+ build(args['skip-publish'] ? test : function () {
95
+ return publish(test);
96
+ });
97
+ }
98
+
99
+ function build(callback) {
100
+ (0, _child_process.exec)('npm run build', function (err, stdout, stderr) {
101
+ color.info("Building package...");
100
102
 
101
- color.info("Publishing package \"".concat(process.env.TARGET_PACKAGE, "\" to ").concat(process.env.HOST, "..."));
103
+ if (err) {
104
+ console.log(stdout);
105
+ throw err;
106
+ } else {
107
+ console.log(stdout);
108
+ color.warn(stderr);
109
+ }
110
+
111
+ callback();
112
+ });
113
+ }
114
+
115
+ function publish(callback) {
102
116
  (0, _child_process.exec)("grok publish ".concat(process.platform === 'win32' ? '%HOST%' : '${HOST}'), function (err, stdout, stderr) {
117
+ color.info("Publishing package \"".concat(process.env.TARGET_PACKAGE, "\" to ").concat(process.env.HOST, "..."));
103
118
  if (err) throw err;else {
104
119
  console.log(stdout);
105
120
  color.warn(stderr);
106
121
  }
107
- color.info('Starting tests...');
108
- var P_START_TIMEOUT = 3600000;
109
- var browser;
110
- var page;
111
-
112
- function init(timeout) {
113
- return testUtils.runWithTimeout(timeout, /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
114
- var out;
115
- return _regenerator["default"].wrap(function _callee$(_context) {
116
- while (1) {
117
- switch (_context.prev = _context.next) {
118
- case 0:
119
- _context.next = 2;
120
- return testUtils.getBrowserPage(_puppeteer["default"]);
121
-
122
- case 2:
123
- out = _context.sent;
124
- browser = out.browser;
125
- page = out.page;
126
- return _context.abrupt("return", 'Initialization completed.');
127
-
128
- case 6:
129
- case "end":
130
- return _context.stop();
131
- }
132
- }
133
- }, _callee);
134
- })));
135
- }
122
+ callback();
123
+ });
124
+ }
136
125
 
137
- function runTest(timeout) {
138
- return testUtils.runWithTimeout(timeout, /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
139
- var _process$env$TARGET_P;
140
-
141
- var targetPackage, r;
142
- return _regenerator["default"].wrap(function _callee2$(_context2) {
143
- while (1) {
144
- switch (_context2.prev = _context2.next) {
145
- case 0:
146
- targetPackage = (_process$env$TARGET_P = process.env.TARGET_PACKAGE) !== null && _process$env$TARGET_P !== void 0 ? _process$env$TARGET_P : '#{PACKAGE_NAMESPACE}';
147
- console.log("Testing ".concat(targetPackage, " package...\n"));
148
- _context2.next = 4;
149
- return page.evaluate(function (targetPackage) {
150
- return new Promise(function (resolve, reject) {
151
- window.grok.functions.eval(targetPackage + ':test()').then(function (df) {
152
- var failed = false;
153
- var skipReport = '';
154
- var passReport = '';
155
- var failReport = '';
156
-
157
- if (df == null) {
158
- failed = true;
159
- failReport = 'Fail reason: No package tests found';
160
- resolve({
161
- failReport: failReport,
162
- skipReport: skipReport,
163
- passReport: passReport,
164
- failed: failed
165
- });
166
- }
126
+ function test() {
127
+ color.info('Starting tests...');
128
+ var P_START_TIMEOUT = 3600000;
129
+ var browser;
130
+ var page;
131
+
132
+ function init(timeout) {
133
+ var params = Object.assign({}, testUtils.defaultLaunchParameters);
134
+ if (args.gui) params['headless'] = false;
135
+ return testUtils.runWithTimeout(timeout, /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
136
+ var out;
137
+ return _regenerator["default"].wrap(function _callee$(_context) {
138
+ while (1) {
139
+ switch (_context.prev = _context.next) {
140
+ case 0:
141
+ _context.next = 2;
142
+ return testUtils.getBrowserPage(_puppeteer["default"], params);
167
143
 
168
- var cStatus = df.columns.byName('success');
169
- var cSkipped = df.columns.byName('skipped');
170
- var cMessage = df.columns.byName('result');
171
- var cCat = df.columns.byName('category');
172
- var cName = df.columns.byName('name');
173
- var cTime = df.columns.byName('ms');
174
-
175
- for (var i = 0; i < df.rowCount; i++) {
176
- if (cStatus.get(i)) {
177
- if (cSkipped.get(i)) {
178
- skipReport += "Test result : Skipped : ".concat(cTime.get(i), " : ").concat(targetPackage, ".").concat(cCat.get(i), ".").concat(cName.get(i), " : ").concat(cMessage.get(i), "\n");
179
- } else {
180
- passReport += "Test result : Success : ".concat(cTime.get(i), " : ").concat(targetPackage, ".").concat(cCat.get(i), ".").concat(cName.get(i), " : ").concat(cMessage.get(i), "\n");
181
- }
182
- } else {
183
- failed = true;
184
- failReport += "Test result : Failed : ".concat(cTime.get(i), " : ").concat(targetPackage, ".").concat(cCat.get(i), ".").concat(cName.get(i), " : ").concat(cMessage.get(i), "\n");
185
- }
186
- }
144
+ case 2:
145
+ out = _context.sent;
146
+ browser = out.browser;
147
+ page = out.page;
148
+ return _context.abrupt("return", 'Initialization completed.');
187
149
 
188
- var csv = df.toCsv();
150
+ case 6:
151
+ case "end":
152
+ return _context.stop();
153
+ }
154
+ }
155
+ }, _callee);
156
+ })));
157
+ }
158
+
159
+ function runTest(timeout) {
160
+ return testUtils.runWithTimeout(timeout, /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
161
+ var _process$env$TARGET_P;
162
+
163
+ var targetPackage, r;
164
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
165
+ while (1) {
166
+ switch (_context2.prev = _context2.next) {
167
+ case 0:
168
+ targetPackage = (_process$env$TARGET_P = process.env.TARGET_PACKAGE) !== null && _process$env$TARGET_P !== void 0 ? _process$env$TARGET_P : '#{PACKAGE_NAMESPACE}';
169
+ console.log("Testing ".concat(targetPackage, " package...\n"));
170
+ _context2.next = 4;
171
+ return page.evaluate(function (targetPackage) {
172
+ return new Promise(function (resolve, reject) {
173
+ window.grok.functions.eval(targetPackage + ':test()').then(function (df) {
174
+ var failed = false;
175
+ var skipReport = '';
176
+ var passReport = '';
177
+ var failReport = '';
178
+
179
+ if (df == null) {
180
+ failed = true;
181
+ failReport = 'Fail reason: No package tests found';
189
182
  resolve({
190
183
  failReport: failReport,
191
184
  skipReport: skipReport,
192
185
  passReport: passReport,
193
- failed: failed,
194
- csv: csv
186
+ failed: failed
195
187
  });
196
- })["catch"](function (e) {
197
- return reject(e);
188
+ }
189
+
190
+ var cStatus = df.columns.byName('success');
191
+ var cSkipped = df.columns.byName('skipped');
192
+ var cMessage = df.columns.byName('result');
193
+ var cCat = df.columns.byName('category');
194
+ var cName = df.columns.byName('name');
195
+ var cTime = df.columns.byName('ms');
196
+
197
+ for (var i = 0; i < df.rowCount; i++) {
198
+ if (cStatus.get(i)) {
199
+ if (cSkipped.get(i)) {
200
+ skipReport += "Test result : Skipped : ".concat(cTime.get(i), " : ").concat(targetPackage, ".").concat(cCat.get(i), ".").concat(cName.get(i), " : ").concat(cMessage.get(i), "\n");
201
+ } else {
202
+ passReport += "Test result : Success : ".concat(cTime.get(i), " : ").concat(targetPackage, ".").concat(cCat.get(i), ".").concat(cName.get(i), " : ").concat(cMessage.get(i), "\n");
203
+ }
204
+ } else {
205
+ failed = true;
206
+ failReport += "Test result : Failed : ".concat(cTime.get(i), " : ").concat(targetPackage, ".").concat(cCat.get(i), ".").concat(cName.get(i), " : ").concat(cMessage.get(i), "\n");
207
+ }
208
+ }
209
+
210
+ var csv = df.toCsv();
211
+ resolve({
212
+ failReport: failReport,
213
+ skipReport: skipReport,
214
+ passReport: passReport,
215
+ failed: failed,
216
+ csv: csv
198
217
  });
218
+ })["catch"](function (e) {
219
+ return reject(e);
199
220
  });
200
- }, targetPackage);
221
+ });
222
+ }, targetPackage);
201
223
 
202
- case 4:
203
- r = _context2.sent;
204
- return _context2.abrupt("return", r);
224
+ case 4:
225
+ r = _context2.sent;
226
+ return _context2.abrupt("return", r);
205
227
 
206
- case 6:
207
- case "end":
208
- return _context2.stop();
209
- }
228
+ case 6:
229
+ case "end":
230
+ return _context2.stop();
210
231
  }
211
- }, _callee2);
212
- })));
213
- }
214
-
215
- (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
216
- var initMessage, r;
217
- return _regenerator["default"].wrap(function _callee3$(_context3) {
218
- while (1) {
219
- switch (_context3.prev = _context3.next) {
220
- case 0:
221
- _context3.next = 2;
222
- return init(P_START_TIMEOUT);
232
+ }
233
+ }, _callee2);
234
+ })));
235
+ }
223
236
 
224
- case 2:
225
- initMessage = _context3.sent;
226
- console.log(initMessage);
227
- _context3.next = 6;
228
- return runTest(7200000);
237
+ (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
238
+ var initMessage, r;
239
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
240
+ while (1) {
241
+ switch (_context3.prev = _context3.next) {
242
+ case 0:
243
+ _context3.next = 2;
244
+ return init(P_START_TIMEOUT);
229
245
 
230
- case 6:
231
- r = _context3.sent;
246
+ case 2:
247
+ initMessage = _context3.sent;
248
+ console.log(initMessage);
249
+ _context3.next = 6;
250
+ return runTest(7200000);
232
251
 
233
- if (r.csv && args.csv) {
234
- _fs["default"].writeFileSync(_path["default"].join(curDir, 'test-report.csv'), r.csv, 'utf8');
252
+ case 6:
253
+ r = _context3.sent;
235
254
 
236
- color.info('Saved `test-report.csv`\n');
237
- }
255
+ if (r.csv && args.csv) {
256
+ _fs["default"].writeFileSync(_path["default"].join(curDir, 'test-report.csv'), r.csv, 'utf8');
238
257
 
239
- if (r.passReport) console.log(r.passReport);
240
- if (r.skipReport) console.log(r.skipReport);
258
+ color.info('Saved `test-report.csv`\n');
259
+ }
241
260
 
242
- if (r.failed) {
243
- console.log(r.failReport);
244
- color.fail('Tests failed.');
245
- } else {
246
- color.success('Tests passed.');
247
- } //@ts-ignore
261
+ if (r.passReport) console.log(r.passReport);
262
+ if (r.skipReport) console.log(r.skipReport);
248
263
 
264
+ if (r.failed) {
265
+ console.log(r.failReport);
266
+ color.fail('Tests failed.');
267
+ testUtils.exitWithCode(1);
268
+ } else {
269
+ color.success('Tests passed.');
270
+ testUtils.exitWithCode(0);
271
+ } //@ts-ignore
249
272
 
250
- if (!(browser != null)) {
251
- _context3.next = 14;
252
- break;
253
- }
254
273
 
274
+ if (!(browser != null)) {
255
275
  _context3.next = 14;
256
- return browser.close();
276
+ break;
277
+ }
257
278
 
258
- case 14:
259
- case "end":
260
- return _context3.stop();
261
- }
279
+ _context3.next = 14;
280
+ return browser.close();
281
+
282
+ case 14:
283
+ case "end":
284
+ return _context3.stop();
262
285
  }
263
- }, _callee3);
264
- }))();
265
- });
266
- });
286
+ }
287
+ }, _callee3);
288
+ }))();
289
+ }
290
+
267
291
  return true;
268
292
  }
@@ -7,6 +7,8 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
+ exports.defaultLaunchParameters = void 0;
11
+ exports.exitWithCode = exitWithCode;
10
12
  exports.getBrowserPage = getBrowserPage;
11
13
  exports.getDevKey = getDevKey;
12
14
  exports.getToken = getToken;
@@ -37,6 +39,12 @@ var grokDir = _path["default"].join(_os["default"].homedir(), '.grok');
37
39
 
38
40
  var confPath = _path["default"].join(grokDir, 'config.yaml');
39
41
 
42
+ var defaultLaunchParameters = {
43
+ args: ['--disable-dev-shm-usage', '--disable-features=site-per-process'],
44
+ ignoreHTTPSErrors: true
45
+ };
46
+ exports.defaultLaunchParameters = defaultLaunchParameters;
47
+
40
48
  function getToken(_x, _x2) {
41
49
  return _getToken.apply(this, arguments);
42
50
  }
@@ -151,93 +159,98 @@ function _getBrowserPage() {
151
159
  _getBrowserPage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(puppeteer) {
152
160
  var _process$env$HOST;
153
161
 
154
- var url, cfg, key, token, browser, page;
162
+ var params,
163
+ url,
164
+ cfg,
165
+ key,
166
+ token,
167
+ browser,
168
+ page,
169
+ _args4 = arguments;
155
170
  return _regenerator["default"].wrap(function _callee4$(_context4) {
156
171
  while (1) {
157
172
  switch (_context4.prev = _context4.next) {
158
173
  case 0:
174
+ params = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : defaultLaunchParameters;
159
175
  url = (_process$env$HOST = process.env.HOST) !== null && _process$env$HOST !== void 0 ? _process$env$HOST : '';
160
176
  cfg = getDevKey(url);
161
177
  url = cfg.url;
162
178
  key = cfg.key;
163
- _context4.next = 6;
179
+ _context4.next = 7;
164
180
  return getToken(url, key);
165
181
 
166
- case 6:
182
+ case 7:
167
183
  token = _context4.sent;
168
- _context4.next = 9;
184
+ _context4.next = 10;
169
185
  return getWebUrl(url, token);
170
186
 
171
- case 9:
187
+ case 10:
172
188
  url = _context4.sent;
173
189
  console.log("Using web root: ".concat(url));
174
- _context4.next = 13;
175
- return puppeteer.launch({
176
- args: ['--disable-dev-shm-usage', '--disable-features=site-per-process'],
177
- ignoreHTTPSErrors: true
178
- });
190
+ _context4.next = 14;
191
+ return puppeteer.launch(params);
179
192
 
180
- case 13:
193
+ case 14:
181
194
  browser = _context4.sent;
182
- _context4.next = 16;
195
+ _context4.next = 17;
183
196
  return browser.newPage();
184
197
 
185
- case 16:
198
+ case 17:
186
199
  page = _context4.sent;
187
- _context4.next = 19;
200
+ _context4.next = 20;
188
201
  return page.setDefaultNavigationTimeout(0);
189
202
 
190
- case 19:
191
- _context4.next = 21;
203
+ case 20:
204
+ _context4.next = 22;
192
205
  return page["goto"]("".concat(url, "/oauth/"));
193
206
 
194
- case 21:
195
- _context4.next = 23;
207
+ case 22:
208
+ _context4.next = 24;
196
209
  return page.setCookie({
197
210
  name: 'auth',
198
211
  value: token
199
212
  });
200
213
 
201
- case 23:
202
- _context4.next = 25;
214
+ case 24:
215
+ _context4.next = 26;
203
216
  return page.evaluate(function (token) {
204
217
  window.localStorage.setItem('auth', token);
205
218
  }, token);
206
219
 
207
- case 25:
208
- _context4.next = 27;
220
+ case 26:
221
+ _context4.next = 28;
209
222
  return page["goto"](url);
210
223
 
211
- case 27:
212
- _context4.prev = 27;
213
- _context4.next = 30;
224
+ case 28:
225
+ _context4.prev = 28;
226
+ _context4.next = 31;
214
227
  return page.waitForFunction(function () {
215
228
  return document.querySelector('.grok-preloader') == null;
216
229
  }, {
217
230
  timeout: 3600000
218
231
  });
219
232
 
220
- case 30:
221
- _context4.next = 35;
233
+ case 31:
234
+ _context4.next = 36;
222
235
  break;
223
236
 
224
- case 32:
225
- _context4.prev = 32;
226
- _context4.t0 = _context4["catch"](27);
237
+ case 33:
238
+ _context4.prev = 33;
239
+ _context4.t0 = _context4["catch"](28);
227
240
  throw _context4.t0;
228
241
 
229
- case 35:
242
+ case 36:
230
243
  return _context4.abrupt("return", {
231
244
  browser: browser,
232
245
  page: page
233
246
  });
234
247
 
235
- case 36:
248
+ case 37:
236
249
  case "end":
237
250
  return _context4.stop();
238
251
  }
239
252
  }
240
- }, _callee4, null, [[27, 32]]);
253
+ }, _callee4, null, [[28, 33]]);
241
254
  }));
242
255
  return _getBrowserPage.apply(this, arguments);
243
256
  }
@@ -273,4 +286,9 @@ function runWithTimeout(timeout, f) {
273
286
  return _ref.apply(this, arguments);
274
287
  };
275
288
  }());
289
+ }
290
+
291
+ function exitWithCode(code) {
292
+ console.log("Exiting with code ".concat(code));
293
+ process.exit(code);
276
294
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datagrok-tools",
3
- "version": "4.7.4",
3
+ "version": "4.7.6",
4
4
  "description": "Utility to upload and publish packages to Datagrok",
5
5
  "homepage": "https://github.com/datagrok-ai/public/tree/master/tools#readme",
6
6
  "dependencies": {