datagrok-tools 4.13.21 → 4.13.23

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/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # Datagrok-tools changelog
2
2
 
3
3
 
4
+ ## 4.13.23 (2024-09-23)
5
+
6
+ ### Features
7
+
8
+ * Test bug all fixes
9
+
10
+ ## 4.13.22 (2024-09-20)
11
+
12
+ ### Features
13
+
14
+ * Implemented mechanism which allows to test few packages by one function
15
+
4
16
  ## 4.13.21 (2024-09-17)
5
17
 
6
18
  ### Features
@@ -12,12 +12,10 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
12
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
13
  var _fs = _interopRequireDefault(require("fs"));
14
14
  var _path = _interopRequireDefault(require("path"));
15
- var _child_process = require("child_process");
16
- var _util = require("util");
15
+ var _utils = require("../utils/utils");
17
16
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
18
17
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
18
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } /* eslint-disable valid-jsdoc */
20
- var execAsync = (0, _util.promisify)(_child_process.exec);
21
19
  var repositoryDirNameRegex = new RegExp(_path["default"].join('1', '2')[1] + 'public$');
22
20
  var curDir = process.cwd();
23
21
  var devMode = false;
@@ -122,13 +120,13 @@ function _linkPackages() {
122
120
  }
123
121
  element = _step.value;
124
122
  _context2.next = 11;
125
- return runScript("npm install", element.packagePath);
123
+ return (0, _utils.runScript)("npm install", element.packagePath);
126
124
  case 11:
127
125
  _context2.next = 13;
128
- return runScript("npm link ".concat(element.dependencies.join(' ')), element.packagePath);
126
+ return (0, _utils.runScript)("npm link ".concat(element.dependencies.join(' ')), element.packagePath);
129
127
  case 13:
130
128
  _context2.next = 15;
131
- return runScript("npm link", element.packagePath);
129
+ return (0, _utils.runScript)("npm link", element.packagePath);
132
130
  case 15:
133
131
  packagesToLink["delete"](element.name);
134
132
  anyChanges = true;
@@ -160,10 +158,10 @@ function _linkPackages() {
160
158
  return x.name;
161
159
  });
162
160
  _context2.next = 34;
163
- return runScript("npm install", curDir);
161
+ return (0, _utils.runScript)("npm install", curDir);
164
162
  case 34:
165
163
  _context2.next = 36;
166
- return runScript("npm link ".concat(names.join(' ')), curDir);
164
+ return (0, _utils.runScript)("npm link ".concat(names.join(' ')), curDir);
167
165
  case 36:
168
166
  case "end":
169
167
  return _context2.stop();
@@ -172,43 +170,6 @@ function _linkPackages() {
172
170
  }));
173
171
  return _linkPackages.apply(this, arguments);
174
172
  }
175
- function runScript(_x2, _x3) {
176
- return _runScript.apply(this, arguments);
177
- }
178
- function _runScript() {
179
- _runScript = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(script, path) {
180
- var _yield$execAsync, stdout, stderr;
181
- return _regenerator["default"].wrap(function _callee3$(_context3) {
182
- while (1) switch (_context3.prev = _context3.next) {
183
- case 0:
184
- _context3.prev = 0;
185
- _context3.next = 3;
186
- return execAsync(script, {
187
- cwd: path
188
- });
189
- case 3:
190
- _yield$execAsync = _context3.sent;
191
- stdout = _yield$execAsync.stdout;
192
- stderr = _yield$execAsync.stderr;
193
- if (stderr) {
194
- console.error("Error: ".concat(stderr));
195
- } else {
196
- // console.log(`Output: ${stdout}`);
197
- }
198
- _context3.next = 12;
199
- break;
200
- case 9:
201
- _context3.prev = 9;
202
- _context3.t0 = _context3["catch"](0);
203
- console.error("Execution failed: ".concat(_context3.t0.message));
204
- case 12:
205
- case "end":
206
- return _context3.stop();
207
- }
208
- }, _callee3, null, [[0, 9]]);
209
- }));
210
- return _runScript.apply(this, arguments);
211
- }
212
173
  var PackageData = /*#__PURE__*/(0, _createClass2["default"])(function PackageData(name, packagePath) {
213
174
  (0, _classCallCheck2["default"])(this, PackageData);
214
175
  (0, _defineProperty2["default"])(this, "name", void 0);
@@ -0,0 +1,598 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.testAll = testAll;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _fs = _interopRequireDefault(require("fs"));
12
+ var _os = _interopRequireDefault(require("os"));
13
+ var _path = _interopRequireDefault(require("path"));
14
+ var _puppeteer = _interopRequireDefault(require("puppeteer"));
15
+ var _puppeteerScreenRecorder = require("puppeteer-screen-recorder");
16
+ var _jsYaml = _interopRequireDefault(require("js-yaml"));
17
+ var utils = _interopRequireWildcard(require("../utils/utils"));
18
+ var color = _interopRequireWildcard(require("../utils/color-utils"));
19
+ var testUtils = _interopRequireWildcard(require("../utils/test-utils"));
20
+ var _orderFunctions = require("../utils/order-functions");
21
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
22
+ 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; }
23
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
24
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
25
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } /* eslint-disable max-len */
26
+ var order = /*#__PURE__*/function (order) {
27
+ order[order["random"] = 0] = "random";
28
+ order[order["alphabetical"] = 1] = "alphabetical";
29
+ order[order["packageRandom"] = 2] = "packageRandom";
30
+ order[order["packageAlphabetical"] = 3] = "packageAlphabetical";
31
+ return order;
32
+ }(order || {});
33
+ function getEnumOrder(orderStr) {
34
+ switch (orderStr.toLowerCase().replaceAll("-", "")) {
35
+ case "random":
36
+ case "shuffle":
37
+ return order.random;
38
+ break;
39
+ case "alphabetical":
40
+ case "atoz":
41
+ return order.alphabetical;
42
+ break;
43
+ case "packagerandom":
44
+ case "packageshuffle":
45
+ return order.packageRandom;
46
+ break;
47
+ case "packagealphabetical":
48
+ case "packageatoz":
49
+ return order.packageAlphabetical;
50
+ break;
51
+ }
52
+ return order.random;
53
+ }
54
+ var curDir = process.cwd();
55
+ var grokDir = _path["default"].join(_os["default"].homedir(), '.grok');
56
+ var confPath = _path["default"].join(grokDir, 'config.yaml');
57
+ var csvReportDir = _path["default"].join(curDir, 'test-report.csv');
58
+ var testCollectionTimeout = 100000;
59
+ var testInvocationTimeout = 7200000;
60
+ var orderingFunctions = new Map([[order.random, _orderFunctions.setRandomOrder], [order.alphabetical, _orderFunctions.setAlphabeticalOrder], [order.packageRandom, _orderFunctions.setPackageRandomOrder], [order.packageAlphabetical, _orderFunctions.setPackageAlphabeticalOrder]]);
61
+ var workersStarted = 0;
62
+ function testAll(_x) {
63
+ return _testAll.apply(this, arguments);
64
+ }
65
+ function _testAll() {
66
+ _testAll = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(args) {
67
+ var _args$tags, _args$order, _args$benchmark, _args$catchUnhandled, _args$gui, _args$record, _args$report, _args$verbose;
68
+ var config, packagesToRun, testsObj, filteredTests, workersOrder, testsResults, i, _iterator, _step, result;
69
+ return _regenerator["default"].wrap(function _callee$(_context) {
70
+ while (1) switch (_context.prev = _context.next) {
71
+ case 0:
72
+ config = _jsYaml["default"].load(_fs["default"].readFileSync(confPath, {
73
+ encoding: 'utf-8'
74
+ }));
75
+ utils.setHost(args.host, config);
76
+ _context.next = 4;
77
+ return testUtils.loadPackages(curDir, args.packages, args.host, args['skip-publish'], args['skip-build']);
78
+ case 4:
79
+ packagesToRun = _context.sent;
80
+ _context.next = 7;
81
+ return loadTestsList(packagesToRun, args.core);
82
+ case 7:
83
+ testsObj = _context.sent;
84
+ _context.next = 10;
85
+ return filterTests(testsObj, ((_args$tags = args.tags) !== null && _args$tags !== void 0 ? _args$tags : "").split(" "), args['stress-test'], args.benchmark);
86
+ case 10:
87
+ filteredTests = _context.sent;
88
+ _context.next = 13;
89
+ return setWorkersOrder(filteredTests, getEnumOrder((_args$order = args.order) !== null && _args$order !== void 0 ? _args$order : ''), args.workersCount, args.testRepeat);
90
+ case 13:
91
+ workersOrder = _context.sent;
92
+ _context.next = 16;
93
+ return runTests(workersOrder, {
94
+ benchmark: (_args$benchmark = args.benchmark) !== null && _args$benchmark !== void 0 ? _args$benchmark : false,
95
+ catchUnhandled: (_args$catchUnhandled = args.catchUnhandled) !== null && _args$catchUnhandled !== void 0 ? _args$catchUnhandled : false,
96
+ gui: (_args$gui = args.gui) !== null && _args$gui !== void 0 ? _args$gui : false,
97
+ record: (_args$record = args.record) !== null && _args$record !== void 0 ? _args$record : false,
98
+ report: (_args$report = args.report) !== null && _args$report !== void 0 ? _args$report : false,
99
+ verbose: (_args$verbose = args.verbose) !== null && _args$verbose !== void 0 ? _args$verbose : false
100
+ });
101
+ case 16:
102
+ testsResults = _context.sent;
103
+ i = 0;
104
+ _iterator = _createForOfIteratorHelper(testsResults);
105
+ try {
106
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
107
+ result = _step.value;
108
+ console.log("\nWorker #".concat(i++, " "));
109
+ printWorkersResult(result, args.verbose);
110
+ }
111
+ } catch (err) {
112
+ _iterator.e(err);
113
+ } finally {
114
+ _iterator.f();
115
+ }
116
+ if (args.csv) {
117
+ saveCsvResults(testsResults.map(function (result) {
118
+ return result.csv;
119
+ }));
120
+ }
121
+ return _context.abrupt("return", !testsResults.map(function (test) {
122
+ return test.failed;
123
+ }).some(function (failStatus) {
124
+ return failStatus === true;
125
+ }));
126
+ case 22:
127
+ case "end":
128
+ return _context.stop();
129
+ }
130
+ }, _callee);
131
+ }));
132
+ return _testAll.apply(this, arguments);
133
+ }
134
+ function loadTestsList(_x2) {
135
+ return _loadTestsList.apply(this, arguments);
136
+ }
137
+ function _loadTestsList() {
138
+ _loadTestsList = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(packages) {
139
+ var core,
140
+ packageTestsData,
141
+ testsList,
142
+ _iterator2,
143
+ _step2,
144
+ testPackage,
145
+ key,
146
+ _iterator3,
147
+ _step3,
148
+ testValue,
149
+ _args3 = arguments;
150
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
151
+ while (1) switch (_context3.prev = _context3.next) {
152
+ case 0:
153
+ core = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : false;
154
+ _context3.next = 3;
155
+ return testUtils.timeout( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
156
+ var params, out, browser, page, r;
157
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
158
+ while (1) switch (_context2.prev = _context2.next) {
159
+ case 0:
160
+ params = Object.assign({}, testUtils.defaultLaunchParameters); // params['headless'] = false;
161
+ _context2.next = 3;
162
+ return testUtils.getBrowserPage(_puppeteer["default"], params);
163
+ case 3:
164
+ out = _context2.sent;
165
+ browser = out.browser;
166
+ page = out.page;
167
+ _context2.next = 8;
168
+ return page.evaluate(function (packages, coreTests) {
169
+ return new Promise(function (resolve, reject) {
170
+ var promises = [];
171
+ try {
172
+ packages.map(function (packageName) {
173
+ var _DG$Func$find$;
174
+ var p = (_DG$Func$find$ = window.DG.Func.find({
175
+ "package": packageName,
176
+ name: 'test'
177
+ })[0]) === null || _DG$Func$find$ === void 0 ? void 0 : _DG$Func$find$["package"];
178
+ if (p) {
179
+ try {
180
+ promises.push(p.getTests(coreTests)["catch"](function (e) {
181
+ console.error('something else went wrong with collecting package tests');
182
+ console.error(e === null || e === void 0 ? void 0 : e.message);
183
+ }).then(function (ts) {
184
+ return {
185
+ packageName: packageName,
186
+ tests: ts
187
+ };
188
+ }));
189
+ } catch (e) {
190
+ console.error('something went wrong while adding test collection promise');
191
+ console.error(e.message);
192
+ }
193
+ }
194
+ });
195
+ } catch (err) {
196
+ console.error("Error during evaluation in browser context:", err);
197
+ reject();
198
+ }
199
+ Promise.all(promises).then(function (results) {
200
+ resolve(results);
201
+ })["catch"](function (e) {
202
+ var stack = window.DG.Logger.translateStackTrace(e.stack).then(function () {
203
+ resolve({
204
+ failReport: "".concat(e.message, "\n").concat(stack)
205
+ });
206
+ });
207
+ });
208
+ });
209
+ }, packages, core);
210
+ case 8:
211
+ r = _context2.sent;
212
+ if (!(browser != null)) {
213
+ _context2.next = 12;
214
+ break;
215
+ }
216
+ _context2.next = 12;
217
+ return browser.close();
218
+ case 12:
219
+ return _context2.abrupt("return", r);
220
+ case 13:
221
+ case "end":
222
+ return _context2.stop();
223
+ }
224
+ }, _callee2);
225
+ })), testCollectionTimeout);
226
+ case 3:
227
+ packageTestsData = _context3.sent;
228
+ testsList = [];
229
+ _iterator2 = _createForOfIteratorHelper(packageTestsData);
230
+ try {
231
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
232
+ testPackage = _step2.value;
233
+ for (key in testPackage.tests) {
234
+ if (testPackage.tests.hasOwnProperty(key)) {
235
+ _iterator3 = _createForOfIteratorHelper(testPackage.tests[key].tests);
236
+ try {
237
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
238
+ testValue = _step3.value;
239
+ testValue.packageName = testPackage.packageName;
240
+ testsList.push(testValue);
241
+ }
242
+ } catch (err) {
243
+ _iterator3.e(err);
244
+ } finally {
245
+ _iterator3.f();
246
+ }
247
+ }
248
+ }
249
+ }
250
+ } catch (err) {
251
+ _iterator2.e(err);
252
+ } finally {
253
+ _iterator2.f();
254
+ }
255
+ return _context3.abrupt("return", testsList);
256
+ case 8:
257
+ case "end":
258
+ return _context3.stop();
259
+ }
260
+ }, _callee3);
261
+ }));
262
+ return _loadTestsList.apply(this, arguments);
263
+ }
264
+ function filterTests(_x3, _x4) {
265
+ return _filterTests.apply(this, arguments);
266
+ }
267
+ function _filterTests() {
268
+ _filterTests = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(tests, tags) {
269
+ var stressTest,
270
+ benchmark,
271
+ filteredTests,
272
+ stressTestValue,
273
+ benchmarkValue,
274
+ _iterator4,
275
+ _step4,
276
+ _loop,
277
+ _ret,
278
+ _args5 = arguments;
279
+ return _regenerator["default"].wrap(function _callee4$(_context5) {
280
+ while (1) switch (_context5.prev = _context5.next) {
281
+ case 0:
282
+ stressTest = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : false;
283
+ benchmark = _args5.length > 3 && _args5[3] !== undefined ? _args5[3] : false;
284
+ filteredTests = [];
285
+ stressTestValue = tags.includes("stress-test") || stressTest;
286
+ benchmarkValue = benchmark;
287
+ tags = tags.filter(function (tag) {
288
+ return tag !== "stress-test" && tag != "";
289
+ });
290
+ _iterator4 = _createForOfIteratorHelper(tests);
291
+ _context5.prev = 7;
292
+ _loop = /*#__PURE__*/_regenerator["default"].mark(function _loop() {
293
+ var _test$options, _test$options2, _test$options3, _tags;
294
+ var test, hasMatchingTags;
295
+ return _regenerator["default"].wrap(function _loop$(_context4) {
296
+ while (1) switch (_context4.prev = _context4.next) {
297
+ case 0:
298
+ test = _step4.value;
299
+ if (!(benchmarkValue && ((_test$options = test.options) === null || _test$options === void 0 ? void 0 : _test$options.benchmark) !== true)) {
300
+ _context4.next = 3;
301
+ break;
302
+ }
303
+ return _context4.abrupt("return", 0);
304
+ case 3:
305
+ if (!(stressTestValue && ((_test$options2 = test.options) === null || _test$options2 === void 0 ? void 0 : _test$options2.stressTest) !== true && !((_test$options3 = test.options) !== null && _test$options3 !== void 0 && (_test$options3 = _test$options3.tags) !== null && _test$options3 !== void 0 && _test$options3.includes("stressTest")))) {
306
+ _context4.next = 5;
307
+ break;
308
+ }
309
+ return _context4.abrupt("return", 0);
310
+ case 5:
311
+ hasMatchingTags = tags.some(function (tag) {
312
+ var _test$options4;
313
+ return (_test$options4 = test.options) === null || _test$options4 === void 0 || (_test$options4 = _test$options4.tags) === null || _test$options4 === void 0 ? void 0 : _test$options4.includes(tag);
314
+ });
315
+ if (hasMatchingTags || ((_tags = tags) === null || _tags === void 0 ? void 0 : _tags.length) === 0) filteredTests.push(test);
316
+ case 7:
317
+ case "end":
318
+ return _context4.stop();
319
+ }
320
+ }, _loop);
321
+ });
322
+ _iterator4.s();
323
+ case 10:
324
+ if ((_step4 = _iterator4.n()).done) {
325
+ _context5.next = 17;
326
+ break;
327
+ }
328
+ return _context5.delegateYield(_loop(), "t0", 12);
329
+ case 12:
330
+ _ret = _context5.t0;
331
+ if (!(_ret === 0)) {
332
+ _context5.next = 15;
333
+ break;
334
+ }
335
+ return _context5.abrupt("continue", 15);
336
+ case 15:
337
+ _context5.next = 10;
338
+ break;
339
+ case 17:
340
+ _context5.next = 22;
341
+ break;
342
+ case 19:
343
+ _context5.prev = 19;
344
+ _context5.t1 = _context5["catch"](7);
345
+ _iterator4.e(_context5.t1);
346
+ case 22:
347
+ _context5.prev = 22;
348
+ _iterator4.f();
349
+ return _context5.finish(22);
350
+ case 25:
351
+ return _context5.abrupt("return", filteredTests);
352
+ case 26:
353
+ case "end":
354
+ return _context5.stop();
355
+ }
356
+ }, _callee4, null, [[7, 19, 22, 25]]);
357
+ }));
358
+ return _filterTests.apply(this, arguments);
359
+ }
360
+ function setWorkersOrder(_x5) {
361
+ return _setWorkersOrder.apply(this, arguments);
362
+ }
363
+ function _setWorkersOrder() {
364
+ _setWorkersOrder = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(tests) {
365
+ var invocationOrder,
366
+ countOfWorkers,
367
+ testRepeats,
368
+ resultOrder,
369
+ orderingFunction,
370
+ _args6 = arguments;
371
+ return _regenerator["default"].wrap(function _callee5$(_context6) {
372
+ while (1) switch (_context6.prev = _context6.next) {
373
+ case 0:
374
+ invocationOrder = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : 0;
375
+ countOfWorkers = _args6.length > 2 && _args6[2] !== undefined ? _args6[2] : 1;
376
+ testRepeats = _args6.length > 3 && _args6[3] !== undefined ? _args6[3] : 1;
377
+ resultOrder = [];
378
+ orderingFunction = orderingFunctions.get(invocationOrder);
379
+ if (!(orderingFunction !== undefined)) {
380
+ _context6.next = 9;
381
+ break;
382
+ }
383
+ resultOrder = orderingFunction(tests, countOfWorkers, testRepeats);
384
+ _context6.next = 10;
385
+ break;
386
+ case 9:
387
+ throw new Error("Cannot find ordering function");
388
+ case 10:
389
+ return _context6.abrupt("return", resultOrder);
390
+ case 11:
391
+ case "end":
392
+ return _context6.stop();
393
+ }
394
+ }, _callee5);
395
+ }));
396
+ return _setWorkersOrder.apply(this, arguments);
397
+ }
398
+ function runTests(_x6, _x7) {
399
+ return _runTests.apply(this, arguments);
400
+ }
401
+ function _runTests() {
402
+ _runTests = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(workersOrder, workerOptions) {
403
+ var workersCommands, _iterator5, _step5, workerOrder, workersPromises, _i, _workersCommands, workerCommands, resultObjects;
404
+ return _regenerator["default"].wrap(function _callee6$(_context7) {
405
+ while (1) switch (_context7.prev = _context7.next) {
406
+ case 0:
407
+ workersCommands = [];
408
+ _iterator5 = _createForOfIteratorHelper(workersOrder);
409
+ try {
410
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
411
+ workerOrder = _step5.value;
412
+ workersCommands.push(workerOrder.map(function (testObj) {
413
+ return {
414
+ "package": testObj.packageName,
415
+ params: {
416
+ category: testObj.category,
417
+ test: testObj.name,
418
+ options: {
419
+ catchUnhandled: workerOptions.catchUnhandled,
420
+ report: workerOptions.report
421
+ }
422
+ }
423
+ };
424
+ }));
425
+ }
426
+ } catch (err) {
427
+ _iterator5.e(err);
428
+ } finally {
429
+ _iterator5.f();
430
+ }
431
+ workersPromises = [];
432
+ _i = 0, _workersCommands = workersCommands;
433
+ case 5:
434
+ if (!(_i < _workersCommands.length)) {
435
+ _context7.next = 13;
436
+ break;
437
+ }
438
+ workerCommands = _workersCommands[_i];
439
+ workersPromises.push(runWorker(workerCommands, workerOptions));
440
+ _context7.next = 10;
441
+ return workersPromises[workersPromises.length];
442
+ case 10:
443
+ _i++;
444
+ _context7.next = 5;
445
+ break;
446
+ case 13:
447
+ _context7.next = 15;
448
+ return Promise.all(workersPromises);
449
+ case 15:
450
+ resultObjects = _context7.sent;
451
+ return _context7.abrupt("return", resultObjects);
452
+ case 17:
453
+ case "end":
454
+ return _context7.stop();
455
+ }
456
+ }, _callee6);
457
+ }));
458
+ return _runTests.apply(this, arguments);
459
+ }
460
+ function runWorker(_x8, _x9) {
461
+ return _runWorker.apply(this, arguments);
462
+ }
463
+ function _runWorker() {
464
+ _runWorker = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(testExecutionData, workerOptions) {
465
+ return _regenerator["default"].wrap(function _callee8$(_context9) {
466
+ while (1) switch (_context9.prev = _context9.next) {
467
+ case 0:
468
+ _context9.next = 2;
469
+ return testUtils.timeout( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
470
+ var params, out, browser, page, recorder, currentWorkerNum, logsDir, recordDir, testingResults;
471
+ return _regenerator["default"].wrap(function _callee7$(_context8) {
472
+ while (1) switch (_context8.prev = _context8.next) {
473
+ case 0:
474
+ params = Object.assign({}, testUtils.defaultLaunchParameters);
475
+ if (workerOptions.gui) params['headless'] = false;
476
+ _context8.next = 4;
477
+ return testUtils.getBrowserPage(_puppeteer["default"], params);
478
+ case 4:
479
+ out = _context8.sent;
480
+ browser = out.browser;
481
+ page = out.page;
482
+ recorder = new _puppeteerScreenRecorder.PuppeteerScreenRecorder(page, testUtils.recorderConfig);
483
+ currentWorkerNum = workersStarted++;
484
+ logsDir = "./test-console-output-".concat(currentWorkerNum, ".log");
485
+ recordDir = "./test-record-".concat(currentWorkerNum, ".mp4");
486
+ if (!workerOptions.record) {
487
+ _context8.next = 20;
488
+ break;
489
+ }
490
+ _context8.next = 14;
491
+ return recorder.start(recordDir);
492
+ case 14:
493
+ _context8.next = 16;
494
+ return page.exposeFunction("addLogsToFile", addLogsToFile);
495
+ case 16:
496
+ _fs["default"].writeFileSync(logsDir, "");
497
+ page.on('console', function (msg) {
498
+ addLogsToFile(logsDir, "CONSOLE LOG ENTRY: ".concat(msg.text(), "\n"));
499
+ });
500
+ page.on('pageerror', function (error) {
501
+ addLogsToFile(logsDir, "CONSOLE LOG ERROR: ".concat(error.message, "\n"));
502
+ });
503
+ page.on('response', function (response) {
504
+ addLogsToFile(logsDir, "CONSOLE LOG REQUEST: ".concat(response.status(), ", ").concat(response.url(), "\n"));
505
+ });
506
+ case 20:
507
+ _context8.next = 22;
508
+ return page.evaluate(function (testData, options) {
509
+ if (options.benchmark) window.DG.Test.isInBenchmark = true;
510
+ return new Promise(function (resolve, reject) {
511
+ window.DG.Utils.executeTests(testData).then(function (results) {
512
+ resolve(results);
513
+ })["catch"](function (e) {
514
+ resolve({
515
+ failed: true,
516
+ verbosePassed: "",
517
+ verboseSkipped: "",
518
+ verboseFailed: "Tests execution failed",
519
+ passedAmount: 0,
520
+ skippedAmount: 0,
521
+ failedAmount: 1,
522
+ csv: "",
523
+ df: undefined
524
+ });
525
+ });
526
+ });
527
+ }, testExecutionData, workerOptions);
528
+ case 22:
529
+ testingResults = _context8.sent;
530
+ if (!workerOptions.record) {
531
+ _context8.next = 26;
532
+ break;
533
+ }
534
+ _context8.next = 26;
535
+ return recorder.stop();
536
+ case 26:
537
+ if (!(browser != null)) {
538
+ _context8.next = 29;
539
+ break;
540
+ }
541
+ _context8.next = 29;
542
+ return browser.close();
543
+ case 29:
544
+ return _context8.abrupt("return", testingResults);
545
+ case 30:
546
+ case "end":
547
+ return _context8.stop();
548
+ }
549
+ }, _callee7);
550
+ })), testInvocationTimeout);
551
+ case 2:
552
+ return _context9.abrupt("return", _context9.sent);
553
+ case 3:
554
+ case "end":
555
+ return _context9.stop();
556
+ }
557
+ }, _callee8);
558
+ }));
559
+ return _runWorker.apply(this, arguments);
560
+ }
561
+ function addLogsToFile(filePath, stringToSave) {
562
+ _fs["default"].appendFileSync(filePath, "".concat(stringToSave));
563
+ }
564
+ function printWorkersResult(workerResult) {
565
+ var _workerResult$failedA, _workerResult$verbose3;
566
+ var verbose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
567
+ if (verbose) {
568
+ var _workerResult$passedA, _workerResult$verbose, _workerResult$skipped, _workerResult$verbose2;
569
+ if (((_workerResult$passedA = workerResult.passedAmount) !== null && _workerResult$passedA !== void 0 ? _workerResult$passedA : 0) > 0 && ((_workerResult$verbose = workerResult.verbosePassed) !== null && _workerResult$verbose !== void 0 ? _workerResult$verbose : []).length > 0) {
570
+ console.log("Passed: ");
571
+ console.log(workerResult.verbosePassed);
572
+ }
573
+ if (((_workerResult$skipped = workerResult.skippedAmount) !== null && _workerResult$skipped !== void 0 ? _workerResult$skipped : 0) > 0 && ((_workerResult$verbose2 = workerResult.verboseSkipped) !== null && _workerResult$verbose2 !== void 0 ? _workerResult$verbose2 : []).length > 0) {
574
+ console.log("Skipped: ");
575
+ console.log(workerResult.verboseSkipped);
576
+ }
577
+ }
578
+ if (((_workerResult$failedA = workerResult.failedAmount) !== null && _workerResult$failedA !== void 0 ? _workerResult$failedA : 0) > 0 && ((_workerResult$verbose3 = workerResult.verboseFailed) !== null && _workerResult$verbose3 !== void 0 ? _workerResult$verbose3 : []).length > 0) {
579
+ console.log("Failed: ");
580
+ console.log(workerResult.verboseFailed);
581
+ }
582
+ console.log("Passed amount: " + (workerResult === null || workerResult === void 0 ? void 0 : workerResult.passedAmount));
583
+ console.log("Skipped amount: " + (workerResult === null || workerResult === void 0 ? void 0 : workerResult.skippedAmount));
584
+ console.log("Failed amount: " + (workerResult === null || workerResult === void 0 ? void 0 : workerResult.failedAmount));
585
+ if (workerResult.failed) {
586
+ color.fail('Tests failed.');
587
+ } else {
588
+ color.success('Tests passed.');
589
+ }
590
+ }
591
+ function saveCsvResults(stringToSave) {
592
+ var modifiedStrings = stringToSave.map(function (str, index) {
593
+ if (index === 0) return str;
594
+ return str.split('\n').slice(1).join('\n');
595
+ });
596
+ _fs["default"].writeFileSync(csvReportDir, modifiedStrings.join('\n'), 'utf8');
597
+ color.info('Saved `test-report.csv`\n');
598
+ }
package/bin/grok.js CHANGED
@@ -14,6 +14,7 @@ const commands = {
14
14
  link: require('./commands/link').link,
15
15
  publish: require('./commands/publish').publish,
16
16
  test: require('./commands/test').test,
17
+ testall: require('./commands/test-all').testAll,
17
18
  };
18
19
 
19
20
  const command = argv['_'][0];
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.setAlphabeticalOrder = setAlphabeticalOrder;
8
+ exports.setPackageAlphabeticalOrder = setPackageAlphabeticalOrder;
9
+ exports.setPackageRandomOrder = setPackageRandomOrder;
10
+ exports.setRandomOrder = setRandomOrder;
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
16
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
18
+ function setRandomOrder(tests, workersAmount, testRepeats) {
19
+ if (workersAmount > tests.length) workersAmount = tests.length;
20
+ var repeatedTests = repeatTests(tests, testRepeats);
21
+ var orderedTests = shuffle(repeatedTests);
22
+ return splitArray(orderedTests, workersAmount);
23
+ }
24
+ function setPackageRandomOrder(tests, workersAmount, testRepeats) {
25
+ var packages = splitTestsByPackages(tests);
26
+ if (workersAmount > packages.size) workersAmount = packages.size;
27
+ var _iterator = _createForOfIteratorHelper(packages.keys()),
28
+ _step;
29
+ try {
30
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
31
+ var packageName = _step.value;
32
+ packages.set(packageName, repeatTests(packages.get(packageName), testRepeats));
33
+ packages.set(packageName, shuffle(packages.get(packageName)));
34
+ }
35
+ } catch (err) {
36
+ _iterator.e(err);
37
+ } finally {
38
+ _iterator.f();
39
+ }
40
+ var splittedPackagesArray = splitArray((0, _toConsumableArray2["default"])(packages.values()), workersAmount);
41
+ var splittedTestsArray = [];
42
+ for (var _i = 0, _splittedPackagesArra = splittedPackagesArray; _i < _splittedPackagesArra.length; _i++) {
43
+ var _splitArray = _splittedPackagesArra[_i];
44
+ var testsArray = [];
45
+ var _iterator2 = _createForOfIteratorHelper(_splitArray),
46
+ _step2;
47
+ try {
48
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
49
+ var packageTests = _step2.value;
50
+ testsArray = testsArray.concat(packageTests);
51
+ }
52
+ } catch (err) {
53
+ _iterator2.e(err);
54
+ } finally {
55
+ _iterator2.f();
56
+ }
57
+ splittedTestsArray.push(testsArray);
58
+ }
59
+ return splittedTestsArray;
60
+ }
61
+ function setAlphabeticalOrder(tests, workersAmount, testRepeats) {
62
+ if (workersAmount > tests.length) workersAmount = tests.length;
63
+ var repeatedTests = repeatTests(tests, testRepeats);
64
+ var orderedTests = repeatedTests.sort(function (test1, test2) {
65
+ return "".concat(test1.category, ": ").concat(test1.name, "s").localeCompare("".concat(test2.category, ": ").concat(test2.name, "s"));
66
+ });
67
+ return splitArray(orderedTests, workersAmount);
68
+ }
69
+ function setPackageAlphabeticalOrder(tests, workersAmount, testRepeats) {
70
+ var packages = splitTestsByPackages(tests);
71
+ if (workersAmount > packages.size) workersAmount = packages.size;
72
+ var _iterator3 = _createForOfIteratorHelper(packages.keys()),
73
+ _step3;
74
+ try {
75
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
76
+ var packageName = _step3.value;
77
+ packages.set(packageName, repeatTests(packages.get(packageName), testRepeats));
78
+ packages.set(packageName, packages.get(packageName).sort(alphabeticalSortFunction));
79
+ }
80
+ } catch (err) {
81
+ _iterator3.e(err);
82
+ } finally {
83
+ _iterator3.f();
84
+ }
85
+ var splittedPackagesArray = splitArray((0, _toConsumableArray2["default"])(packages.values()), workersAmount);
86
+ var splittedTestsArray = [];
87
+ for (var _i2 = 0, _splittedPackagesArra2 = splittedPackagesArray; _i2 < _splittedPackagesArra2.length; _i2++) {
88
+ var _splitArray2 = _splittedPackagesArra2[_i2];
89
+ var testsArray = [];
90
+ var _iterator4 = _createForOfIteratorHelper(_splitArray2),
91
+ _step4;
92
+ try {
93
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
94
+ var packageTests = _step4.value;
95
+ testsArray = testsArray.concat(packageTests);
96
+ }
97
+ } catch (err) {
98
+ _iterator4.e(err);
99
+ } finally {
100
+ _iterator4.f();
101
+ }
102
+ splittedTestsArray.push(testsArray);
103
+ }
104
+ return splittedTestsArray;
105
+ }
106
+ function alphabeticalSortFunction(test1, test2) {
107
+ return "".concat(test1.category, ": ").concat(test1.name, "s").localeCompare("".concat(test2.category, ": ").concat(test2.name, "s"));
108
+ }
109
+ function splitTestsByPackages(tests) {
110
+ var resultMap = new Map();
111
+ var _iterator5 = _createForOfIteratorHelper(tests),
112
+ _step5;
113
+ try {
114
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
115
+ var test = _step5.value;
116
+ if (resultMap.has(test.packageName)) resultMap.get(test.packageName).push(test);else resultMap.set(test.packageName, [test]);
117
+ }
118
+ } catch (err) {
119
+ _iterator5.e(err);
120
+ } finally {
121
+ _iterator5.f();
122
+ }
123
+ return resultMap;
124
+ }
125
+ function repeatTests(tests, testRepeats) {
126
+ var repeatedTests = [];
127
+ var _iterator6 = _createForOfIteratorHelper(tests),
128
+ _step6;
129
+ try {
130
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
131
+ var test = _step6.value;
132
+ for (var i = 0; i < testRepeats; i++) {
133
+ repeatedTests.push(_objectSpread({}, test));
134
+ }
135
+ }
136
+ } catch (err) {
137
+ _iterator6.e(err);
138
+ } finally {
139
+ _iterator6.f();
140
+ }
141
+ return repeatedTests;
142
+ }
143
+ function shuffle(array) {
144
+ var newArr = array.slice();
145
+ newArr.sort(function () {
146
+ return Math.random() - 0.5;
147
+ });
148
+ return newArr;
149
+ }
150
+ ;
151
+ function splitArray(arr, countOfParts) {
152
+ var result = [];
153
+ var partSize = Math.ceil(arr.length / countOfParts);
154
+ for (var i = 0; i < arr.length; i += partSize) {
155
+ result.push(arr.slice(i, i + partSize));
156
+ }
157
+ return result;
158
+ }
@@ -11,10 +11,12 @@ exports.getBrowserPage = getBrowserPage;
11
11
  exports.getDevKey = getDevKey;
12
12
  exports.getToken = getToken;
13
13
  exports.getWebUrl = getWebUrl;
14
+ exports.loadPackages = loadPackages;
14
15
  exports.recorderConfig = void 0;
15
16
  exports.runWithTimeout = runWithTimeout;
16
17
  exports.timeout = timeout;
17
18
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
19
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
18
20
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
21
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
20
22
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -23,9 +25,13 @@ var _fs = _interopRequireDefault(require("fs"));
23
25
  var _os = _interopRequireDefault(require("os"));
24
26
  var _path = _interopRequireDefault(require("path"));
25
27
  var _jsYaml = _interopRequireDefault(require("js-yaml"));
26
- var utils = _interopRequireWildcard(require("../utils/utils"));
28
+ var _utils = _interopRequireWildcard(require("../utils/utils"));
29
+ var utils = _utils;
27
30
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
28
31
  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; }
32
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
33
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
34
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
29
35
  var fetch = require('node-fetch');
30
36
  var grokDir = _path["default"].join(_os["default"].homedir(), '.grok');
31
37
  var confPath = _path["default"].join(grokDir, 'config.yaml');
@@ -308,4 +314,125 @@ var recorderConfig = exports.recorderConfig = {
308
314
  color: 'black'
309
315
  }
310
316
  // aspectRatio: '16:9',
311
- };
317
+ };
318
+ function loadPackages(_x10, _x11, _x12, _x13, _x14, _x15) {
319
+ return _loadPackages.apply(this, arguments);
320
+ }
321
+ function _loadPackages() {
322
+ _loadPackages = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(packagesDir, packagesToLoad, host, skipPublish, skipBuild, linkPackage) {
323
+ var packagesToRun, hostString, _iterator, _step, pacakgeName, _iterator2, _step2, dirName, packageDir, _spaceToCamelCase$toL, _packageJsonData$frie, packageJsonData, packageFriendlyName;
324
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
325
+ while (1) switch (_context6.prev = _context6.next) {
326
+ case 0:
327
+ packagesToRun = new Map();
328
+ hostString = host === undefined ? "" : "".concat(host);
329
+ if (packagesToLoad !== "all") {
330
+ _iterator = _createForOfIteratorHelper((packagesToLoad !== null && packagesToLoad !== void 0 ? packagesToLoad : "").split(' '));
331
+ try {
332
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
333
+ pacakgeName = _step.value;
334
+ packagesToRun.set((0, _utils.spaceToCamelCase)(pacakgeName).toLocaleLowerCase(), false);
335
+ }
336
+ } catch (err) {
337
+ _iterator.e(err);
338
+ } finally {
339
+ _iterator.f();
340
+ }
341
+ }
342
+ _iterator2 = _createForOfIteratorHelper(_fs["default"].readdirSync(packagesDir));
343
+ _context6.prev = 4;
344
+ _iterator2.s();
345
+ case 6:
346
+ if ((_step2 = _iterator2.n()).done) {
347
+ _context6.next = 40;
348
+ break;
349
+ }
350
+ dirName = _step2.value;
351
+ packageDir = _path["default"].join(packagesDir, dirName);
352
+ if (_fs["default"].lstatSync(packageDir).isFile()) {
353
+ _context6.next = 38;
354
+ break;
355
+ }
356
+ _context6.prev = 10;
357
+ packageJsonData = JSON.parse(_fs["default"].readFileSync(_path["default"].join(packageDir, 'package.json'), {
358
+ encoding: 'utf-8'
359
+ }));
360
+ packageFriendlyName = packagesToRun.get((_spaceToCamelCase$toL = (0, _utils.spaceToCamelCase)((_packageJsonData$frie = packageJsonData["friendlyName"]) !== null && _packageJsonData$frie !== void 0 ? _packageJsonData$frie : packageJsonData["name"].split("/")[1]).toLocaleLowerCase()) !== null && _spaceToCamelCase$toL !== void 0 ? _spaceToCamelCase$toL : "");
361
+ if (!(utils.isPackageDir(packageDir) && (packageFriendlyName !== undefined || packagesToLoad === "all"))) {
362
+ _context6.next = 33;
363
+ break;
364
+ }
365
+ _context6.prev = 14;
366
+ if (!(skipPublish != true)) {
367
+ _context6.next = 26;
368
+ break;
369
+ }
370
+ _context6.next = 18;
371
+ return utils.runScript("npm install", packageDir);
372
+ case 18:
373
+ if (!linkPackage) {
374
+ _context6.next = 21;
375
+ break;
376
+ }
377
+ _context6.next = 21;
378
+ return utils.runScript("grok link", packageDir);
379
+ case 21:
380
+ if (!(skipBuild != true)) {
381
+ _context6.next = 24;
382
+ break;
383
+ }
384
+ _context6.next = 24;
385
+ return utils.runScript("npm run build", packageDir);
386
+ case 24:
387
+ _context6.next = 26;
388
+ return utils.runScript("grok publish ".concat(hostString), packageDir);
389
+ case 26:
390
+ packagesToRun.set(dirName, true);
391
+ console.log("Package published ".concat(dirName));
392
+ _context6.next = 33;
393
+ break;
394
+ case 30:
395
+ _context6.prev = 30;
396
+ _context6.t0 = _context6["catch"](14);
397
+ console.log("Package didnt publishded ".concat(dirName));
398
+ case 33:
399
+ _context6.next = 38;
400
+ break;
401
+ case 35:
402
+ _context6.prev = 35;
403
+ _context6.t1 = _context6["catch"](10);
404
+ if (utils.isPackageDir(packageDir) && (packagesToRun.get((0, _utils.spaceToCamelCase)(dirName).toLocaleLowerCase()) !== undefined || packagesToLoad === "all")) console.log("Couldnt read package.json ".concat(dirName));
405
+ case 38:
406
+ _context6.next = 6;
407
+ break;
408
+ case 40:
409
+ _context6.next = 45;
410
+ break;
411
+ case 42:
412
+ _context6.prev = 42;
413
+ _context6.t2 = _context6["catch"](4);
414
+ _iterator2.e(_context6.t2);
415
+ case 45:
416
+ _context6.prev = 45;
417
+ _iterator2.f();
418
+ return _context6.finish(45);
419
+ case 48:
420
+ console.log();
421
+ return _context6.abrupt("return", Array.from(packagesToRun).filter(function (_ref2) {
422
+ var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
423
+ key = _ref3[0],
424
+ value = _ref3[1];
425
+ return value === true;
426
+ }).map(function (_ref4) {
427
+ var _ref5 = (0, _slicedToArray2["default"])(_ref4, 1),
428
+ key = _ref5[0];
429
+ return key;
430
+ }));
431
+ case 51:
432
+ case "end":
433
+ return _context6.stop();
434
+ }
435
+ }, _callee6, null, [[4, 42, 45, 48], [10, 35], [14, 30]]);
436
+ }));
437
+ return _loadPackages.apply(this, arguments);
438
+ }
@@ -22,7 +22,10 @@ exports.kebabToCamelCase = kebabToCamelCase;
22
22
  exports.mapURL = mapURL;
23
23
  exports.queryWrapperTemplate = exports.queryExtension = exports.propertyTypes = exports.paramRegex = exports.namespaceTemplate = exports.nameRegex = exports.nameAnnRegex = void 0;
24
24
  exports.removeScope = removeScope;
25
- exports.scriptWrapperTemplate = exports.scriptLangExtMap = exports.scriptExtensions = exports.replacers = void 0;
25
+ exports.replacers = void 0;
26
+ exports.runScript = runScript;
27
+ exports.scriptWrapperTemplate = exports.scriptLangExtMap = exports.scriptExtensions = void 0;
28
+ exports.setHost = setHost;
26
29
  exports.spaceToCamelCase = spaceToCamelCase;
27
30
  exports.wordsToCamelCase = wordsToCamelCase;
28
31
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
@@ -32,9 +35,13 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
32
35
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
33
36
  var _fs = _interopRequireDefault(require("fs"));
34
37
  var _path = _interopRequireDefault(require("path"));
38
+ var _child_process = require("child_process");
39
+ var _util = require("util");
35
40
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
36
41
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
37
42
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
43
+ var execAsync = (0, _util.promisify)(_child_process.exec);
44
+
38
45
  /* Waits [ms] milliseconds */
39
46
  function delay(_x) {
40
47
  return _delay.apply(this, arguments);
@@ -280,4 +287,62 @@ function getScriptInputs(script) {
280
287
  var dgImports = exports.dgImports = "import * as grok from 'datagrok-api/grok';\nimport * as DG from 'datagrok-api/dg';\n\n";
281
288
  var scriptWrapperTemplate = exports.scriptWrapperTemplate = "export async function #{FUNC_NAME_LOWERCASE}(#{TYPED_PARAMS}): Promise<#{OUTPUT_TYPE}> {\n return await grok.functions.call('#{PACKAGE_NAMESPACE}:#{FUNC_NAME}', #{PARAMS_OBJECT});\n}";
282
289
  var queryWrapperTemplate = exports.queryWrapperTemplate = "export async function #{FUNC_NAME_LOWERCASE}(#{TYPED_PARAMS}): Promise<#{OUTPUT_TYPE}> {\n return await grok.data.query('#{PACKAGE_NAMESPACE}:#{FUNC_NAME}', #{PARAMS_OBJECT});\n}";
283
- var namespaceTemplate = exports.namespaceTemplate = "export namespace #{PACKAGE_NAMESPACE} {\n#{NAME}\n}";
290
+ var namespaceTemplate = exports.namespaceTemplate = "export namespace #{PACKAGE_NAMESPACE} {\n#{NAME}\n}";
291
+ function runScript(_x2, _x3) {
292
+ return _runScript.apply(this, arguments);
293
+ }
294
+ function _runScript() {
295
+ _runScript = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(script, path) {
296
+ var verbose,
297
+ _yield$execAsync,
298
+ stdout,
299
+ stderr,
300
+ _args2 = arguments;
301
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
302
+ while (1) switch (_context2.prev = _context2.next) {
303
+ case 0:
304
+ verbose = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : false;
305
+ _context2.prev = 1;
306
+ _context2.next = 4;
307
+ return execAsync(script, {
308
+ cwd: path
309
+ });
310
+ case 4:
311
+ _yield$execAsync = _context2.sent;
312
+ stdout = _yield$execAsync.stdout;
313
+ stderr = _yield$execAsync.stderr;
314
+ if (stderr && verbose) {
315
+ console.error("Warning/Error: ".concat(stderr));
316
+ }
317
+ if (stdout && verbose) {
318
+ console.log("Output: ".concat(stdout));
319
+ }
320
+ _context2.next = 15;
321
+ break;
322
+ case 11:
323
+ _context2.prev = 11;
324
+ _context2.t0 = _context2["catch"](1);
325
+ console.error("Execution failed: ".concat(_context2.t0.message));
326
+ throw new Error("Cant run script");
327
+ case 15:
328
+ case "end":
329
+ return _context2.stop();
330
+ }
331
+ }, _callee2, null, [[1, 11]]);
332
+ }));
333
+ return _runScript.apply(this, arguments);
334
+ }
335
+ function setHost(host, configFile) {
336
+ if (host) {
337
+ if (host in configFile.servers) {
338
+ process.env.HOST = host;
339
+ console.log('Environment variable `HOST` is set to', host);
340
+ } else {
341
+ console.error("Unknown server alias. Please add it to Config File");
342
+ return false;
343
+ }
344
+ } else if (configFile["default"]) {
345
+ process.env.HOST = configFile["default"];
346
+ console.log('Environment variable `HOST` is set to', configFile["default"]);
347
+ }
348
+ }
@@ -1,6 +1,6 @@
1
1
  import * as DG from "datagrok-api/dg";
2
2
  import * as grok from 'datagrok-api/grok';
3
- import { runTests, tests, TestContext } from '@datagrok-libraries/utils/src/test';
3
+ import { runTests, tests, TestContext , initAutoTests as initTests } from '@datagrok-libraries/utils/src/test';
4
4
 
5
5
  export let _package = new DG.Package();
6
6
  export { tests };
@@ -13,4 +13,9 @@ export { tests };
13
13
  export async function test(category: string, test: string, testContext: TestContext): Promise<DG.DataFrame> {
14
14
  const data = await runTests({ category, test, testContext });
15
15
  return DG.DataFrame.fromObjects(data)!;
16
- }
16
+ }
17
+
18
+ //name: initAutoTests
19
+ export async function initAutoTests() {
20
+ await initTests(_package, _package.getModule('package-test.js'));
21
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datagrok-tools",
3
- "version": "4.13.21",
3
+ "version": "4.13.23",
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": {