datagrok-tools 4.13.20 → 4.13.22

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,11 +1,24 @@
1
1
  # Datagrok-tools changelog
2
2
 
3
3
 
4
+ ## 4.13.22 (2024-09-20)
5
+
6
+ ### Features
7
+
8
+ * Implemented mechanism which allows to test few packages by one function
9
+
10
+ ## 4.13.21 (2024-09-17)
11
+
12
+ ### Features
13
+
14
+ * Grok check updated for release candidate versions
15
+
4
16
  ## 4.13.20 (2024-08-28)
5
17
 
6
18
  ### Features
7
19
 
8
20
  * Grok link command fixes
21
+
9
22
  ## 4.13.19 (2024-08-27)
10
23
 
11
24
  ### Features
@@ -27,6 +27,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
27
27
  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; } } }; }
28
28
  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); }
29
29
  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; }
30
+ var warns = ['Latest package version', 'Datagrok API version should contain'];
30
31
  function check(args) {
31
32
  var nOptions = Object.keys(args).length - 1;
32
33
  if (args['_'].length !== 1 || nOptions > 2 || nOptions > 0 && !args.r && !args.recursive) return false;
@@ -59,7 +60,9 @@ function runChecks(packagePath) {
59
60
  }));
60
61
  var webpackConfigPath = _path["default"].join(packagePath, 'webpack.config.js');
61
62
  var isWebpack = _fs["default"].existsSync(webpackConfigPath);
63
+ var isReleaseCandidateVersion = false;
62
64
  var externals = null;
65
+ if (/\d+.\d+.\d+-rc(.[A-Za-z0-9]*.[A-Za-z0-9]*)?/.test(json.version)) isReleaseCandidateVersion = true;
63
66
  if (isWebpack) {
64
67
  var content = _fs["default"].readFileSync(webpackConfigPath, {
65
68
  encoding: 'utf-8'
@@ -73,9 +76,10 @@ function runChecks(packagePath) {
73
76
  errors.push.apply(errors, (0, _toConsumableArray2["default"])(checkFuncSignatures(packagePath, funcFiles)));
74
77
  errors.push.apply(errors, (0, _toConsumableArray2["default"])(checkPackageFile(packagePath, json, {
75
78
  isWebpack: isWebpack,
76
- externals: externals
79
+ externals: externals,
80
+ isReleaseCandidateVersion: isReleaseCandidateVersion
77
81
  })));
78
- warnings.push.apply(warnings, (0, _toConsumableArray2["default"])(checkChangelog(packagePath, json)));
82
+ if (!isReleaseCandidateVersion) warnings.push.apply(warnings, (0, _toConsumableArray2["default"])(checkChangelog(packagePath, json)));
79
83
  if (warnings.length) {
80
84
  console.log("".concat(_path["default"].basename(packagePath), " warnings"));
81
85
  warn(warnings);
@@ -93,7 +97,6 @@ function runChecks(packagePath) {
93
97
  console.log("Checking package ".concat(_path["default"].basename(packagePath), "...\t\t\t\u2713 OK"));
94
98
  return true;
95
99
  }
96
- var warns = ['Latest package version', 'Datagrok API version should contain'];
97
100
  function runChecksRec(dir) {
98
101
  var files = _fs["default"].readdirSync(dir);
99
102
  var _iterator = _createForOfIteratorHelper(files),
@@ -424,7 +427,7 @@ function checkPackageFile(packagePath, json, options) {
424
427
  if (json.version.includes('beta') && isPublicPackage) warnings.push('File "package.json": public package cannot be beta version.');
425
428
  var api = (_json$dependencies = json.dependencies) === null || _json$dependencies === void 0 ? void 0 : _json$dependencies['datagrok-api'];
426
429
  if (api) {
427
- if (api === '../../js-api') {} else if (api === 'latest') warnings.push('File "package.json": you should specify Datagrok API version constraint (for example ^1.16.0, >=1.16.0).');else if (!/^(\^|>|<|~).+/.test(api)) warnings.push('File "package.json": Datagrok API version should starts with > | >= | ~ | ^ | < | <=');
430
+ if (api === '../../js-api') {} else if (api === 'latest') warnings.push('File "package.json": you should specify Datagrok API version constraint (for example ^1.16.0, >=1.16.0).');else if ((options === null || options === void 0 ? void 0 : options.isReleaseCandidateVersion) === false && !/^(\^|>|<|~).+/.test(api)) warnings.push('File "package.json": Datagrok API version should starts with > | >= | ~ | ^ | < | <=');
428
431
  }
429
432
  var dt = (_json$devDependencies = (_json$devDependencies2 = json.devDependencies) === null || _json$devDependencies2 === void 0 ? void 0 : _json$devDependencies2['datagrok-tools']) !== null && _json$devDependencies !== void 0 ? _json$devDependencies : (_json$dependencies2 = json.dependencies) === null || _json$dependencies2 === void 0 ? void 0 : _json$dependencies2['datagrok-tools'];
430
433
  if (dt && dt !== 'latest') warnings.push('File "package.json": "datagrok-tools" dependency must be "latest" version.');
@@ -464,6 +467,30 @@ function checkPackageFile(packagePath, json, options) {
464
467
  _iterator8.f();
465
468
  }
466
469
  }
470
+ if ((options === null || options === void 0 ? void 0 : options.isReleaseCandidateVersion) === true) {
471
+ var hasRCDependency = false;
472
+ for (var _i2 = 0, _Object$keys = Object.keys((_json$dependencies3 = json.dependencies) !== null && _json$dependencies3 !== void 0 ? _json$dependencies3 : {}); _i2 < _Object$keys.length; _i2++) {
473
+ var _json$dependencies3, _json$dependencies4;
474
+ var dependency = _Object$keys[_i2];
475
+ if (/\d+.\d+.\d+-rc(.[A-Za-z0-9]*.[A-Za-z0-9]*)?/.test(((_json$dependencies4 = json.dependencies) !== null && _json$dependencies4 !== void 0 ? _json$dependencies4 : {})[dependency])) {
476
+ hasRCDependency = true;
477
+ break;
478
+ }
479
+ }
480
+ if (!hasRCDependency) {
481
+ for (var _i3 = 0, _Object$keys2 = Object.keys((_json$dependencies5 = json.dependencies) !== null && _json$dependencies5 !== void 0 ? _json$dependencies5 : {}); _i3 < _Object$keys2.length; _i3++) {
482
+ var _json$dependencies5, _json$dependencies6, _json$devDependencies3;
483
+ var _dependency = _Object$keys2[_i3];
484
+ console.log(_dependency);
485
+ console.log(((_json$dependencies6 = json.dependencies) !== null && _json$dependencies6 !== void 0 ? _json$dependencies6 : {})[_dependency]);
486
+ if (/\d+.\d+.\d+-rc(.[A-Za-z0-9]*.[A-Za-z0-9]*)?/.test(((_json$devDependencies3 = json.devDependencies) !== null && _json$devDependencies3 !== void 0 ? _json$devDependencies3 : {})[_dependency])) {
487
+ hasRCDependency = true;
488
+ break;
489
+ }
490
+ }
491
+ }
492
+ if (!hasRCDependency) warnings.push('Release candidate error: Current package doesnt have any dependencies from any release candidate package ');
493
+ }
467
494
  return warnings;
468
495
  }
469
496
  function checkChangelog(packagePath, json) {
@@ -551,9 +578,9 @@ function checkScriptNames(packagePath) {
551
578
  try {
552
579
  if (_fs["default"].existsSync(packagePath)) {
553
580
  var filesInDirectory = getAllFilesInDirectory(packagePath);
554
- for (var _i2 = 0, _filesInDirectory = filesInDirectory; _i2 < _filesInDirectory.length; _i2++) {
581
+ for (var _i4 = 0, _filesInDirectory = filesInDirectory; _i4 < _filesInDirectory.length; _i4++) {
555
582
  var _fileName$match;
556
- var fileName = _filesInDirectory[_i2];
583
+ var fileName = _filesInDirectory[_i4];
557
584
  if (((_fileName$match = fileName.match(new RegExp('^[A-Za-z0-9._-]*$'))) === null || _fileName$match === void 0 ? void 0 : _fileName$match.length) !== 1) warnings.push("".concat(fileName, ": file name contains inappropriate symbols"));
558
585
  }
559
586
  }
@@ -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,694 @@
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 color = _interopRequireWildcard(require("../utils/color-utils"));
18
+ var testUtils = _interopRequireWildcard(require("../utils/test-utils"));
19
+ var _utils = require("../utils/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 grokDir = _path["default"].join(_os["default"].homedir(), '.grok');
55
+ var confPath = _path["default"].join(grokDir, 'config.yaml');
56
+ var config = _jsYaml["default"].load(_fs["default"].readFileSync(confPath, {
57
+ encoding: 'utf-8'
58
+ }));
59
+ var curDir = process.cwd();
60
+ var testCollectionTimeout = 100000;
61
+ var testInvocationTimeout = 3600000;
62
+ var orderingFunctions = new Map([[order.random, _orderFunctions.setRandomOrder], [order.alphabetical, _orderFunctions.setAlphabeticalOrder], [order.packageRandom, _orderFunctions.setPackageRandomOrder], [order.packageAlphabetical, _orderFunctions.setPackageAlphabeticalOrder]]);
63
+ var workersStarted = 0;
64
+ function testAll(_x) {
65
+ return _testAll.apply(this, arguments);
66
+ }
67
+ function _testAll() {
68
+ _testAll = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(args) {
69
+ var _args$tags, _args$order, _args$benchmark, _args$catchUnhandled, _args$gui, _args$record, _args$report, _args$verbose;
70
+ var builtPackages, packagesToRun, testsObj, filteredTests, workersOrder, testsResults, i, _iterator, _step, result;
71
+ return _regenerator["default"].wrap(function _callee$(_context) {
72
+ while (1) switch (_context.prev = _context.next) {
73
+ case 0:
74
+ setHost(args);
75
+ _context.next = 3;
76
+ return buildPackages(args.packages, args.host, args['skip-publish'], args['skip-build']);
77
+ case 3:
78
+ builtPackages = _context.sent;
79
+ packagesToRun = [];
80
+ builtPackages.forEach(function (value, key) {
81
+ if (value) {
82
+ packagesToRun.push(key);
83
+ }
84
+ });
85
+ _context.next = 8;
86
+ return loadTestsList(packagesToRun, args.core);
87
+ case 8:
88
+ testsObj = _context.sent;
89
+ _context.next = 11;
90
+ return filterTests(testsObj, ((_args$tags = args.tags) !== null && _args$tags !== void 0 ? _args$tags : "").split(" "), args['stress-test'], args.benchmark);
91
+ case 11:
92
+ filteredTests = _context.sent;
93
+ _context.next = 14;
94
+ return setWorkersOrder(filteredTests, getEnumOrder((_args$order = args.order) !== null && _args$order !== void 0 ? _args$order : ''), args.workersCount, args.testRepeat);
95
+ case 14:
96
+ workersOrder = _context.sent;
97
+ console.log(filteredTests);
98
+ _context.next = 18;
99
+ return runTests(workersOrder, {
100
+ benchmark: (_args$benchmark = args.benchmark) !== null && _args$benchmark !== void 0 ? _args$benchmark : false,
101
+ catchUnhandled: (_args$catchUnhandled = args.catchUnhandled) !== null && _args$catchUnhandled !== void 0 ? _args$catchUnhandled : false,
102
+ gui: (_args$gui = args.gui) !== null && _args$gui !== void 0 ? _args$gui : false,
103
+ record: (_args$record = args.record) !== null && _args$record !== void 0 ? _args$record : false,
104
+ report: (_args$report = args.report) !== null && _args$report !== void 0 ? _args$report : false,
105
+ verbose: (_args$verbose = args.verbose) !== null && _args$verbose !== void 0 ? _args$verbose : false
106
+ });
107
+ case 18:
108
+ testsResults = _context.sent;
109
+ i = 0;
110
+ _iterator = _createForOfIteratorHelper(testsResults);
111
+ try {
112
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
113
+ result = _step.value;
114
+ console.log("\nWorker #".concat(i++, " "));
115
+ printWorkersResult(result, args.verbose);
116
+ }
117
+ } catch (err) {
118
+ _iterator.e(err);
119
+ } finally {
120
+ _iterator.f();
121
+ }
122
+ return _context.abrupt("return", !testsResults.map(function (test) {
123
+ return test.failed;
124
+ }).some(function (failStatus) {
125
+ return failStatus === true;
126
+ }));
127
+ case 23:
128
+ case "end":
129
+ return _context.stop();
130
+ }
131
+ }, _callee);
132
+ }));
133
+ return _testAll.apply(this, arguments);
134
+ }
135
+ function setHost(args) {
136
+ if (args.host) {
137
+ if (args.host in config.servers) {
138
+ process.env.HOST = args.host;
139
+ console.log('Environment variable `HOST` is set to', args.host);
140
+ } else {
141
+ color.error("Unknown server alias. Please add it to ".concat(confPath));
142
+ return false;
143
+ }
144
+ } else if (config["default"]) {
145
+ process.env.HOST = config["default"];
146
+ console.log('Environment variable `HOST` is set to', config["default"]);
147
+ }
148
+ }
149
+ function buildPackages(_x2, _x3, _x4, _x5, _x6) {
150
+ return _buildPackages.apply(this, arguments);
151
+ }
152
+ function _buildPackages() {
153
+ _buildPackages = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(packages, host, skipPublish, skipBuild, linkPackage) {
154
+ var packagesToRun, hostString, _iterator2, _step2, pacakgeName, _iterator3, _step3, dirName, packageDir;
155
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
156
+ while (1) switch (_context2.prev = _context2.next) {
157
+ case 0:
158
+ packagesToRun = new Map();
159
+ hostString = host === undefined ? "" : "".concat(host);
160
+ if (packages !== "all") {
161
+ _iterator2 = _createForOfIteratorHelper((packages !== null && packages !== void 0 ? packages : "").split(' '));
162
+ try {
163
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
164
+ pacakgeName = _step2.value;
165
+ packagesToRun.set(pacakgeName, false);
166
+ }
167
+ } catch (err) {
168
+ _iterator2.e(err);
169
+ } finally {
170
+ _iterator2.f();
171
+ }
172
+ }
173
+ _iterator3 = _createForOfIteratorHelper(_fs["default"].readdirSync(curDir));
174
+ _context2.prev = 4;
175
+ _iterator3.s();
176
+ case 6:
177
+ if ((_step3 = _iterator3.n()).done) {
178
+ _context2.next = 26;
179
+ break;
180
+ }
181
+ dirName = _step3.value;
182
+ packageDir = _path["default"].join(curDir, dirName);
183
+ if (_fs["default"].lstatSync(packageDir).isFile()) {
184
+ _context2.next = 24;
185
+ break;
186
+ }
187
+ if (!((0, _utils.isPackageDir)(packageDir) && (packagesToRun.get(dirName) !== undefined || packages === "all"))) {
188
+ _context2.next = 24;
189
+ break;
190
+ }
191
+ if (!(skipPublish != true)) {
192
+ _context2.next = 22;
193
+ break;
194
+ }
195
+ _context2.next = 14;
196
+ return (0, _utils.runScript)("npm install", packageDir);
197
+ case 14:
198
+ if (!linkPackage) {
199
+ _context2.next = 17;
200
+ break;
201
+ }
202
+ _context2.next = 17;
203
+ return (0, _utils.runScript)("grok link", packageDir);
204
+ case 17:
205
+ if (!(skipBuild != true)) {
206
+ _context2.next = 20;
207
+ break;
208
+ }
209
+ _context2.next = 20;
210
+ return (0, _utils.runScript)("npm run build", packageDir);
211
+ case 20:
212
+ _context2.next = 22;
213
+ return (0, _utils.runScript)("grok publish ".concat(hostString), packageDir);
214
+ case 22:
215
+ packagesToRun.set(dirName, true);
216
+ console.log("Package published ".concat(dirName));
217
+ case 24:
218
+ _context2.next = 6;
219
+ break;
220
+ case 26:
221
+ _context2.next = 31;
222
+ break;
223
+ case 28:
224
+ _context2.prev = 28;
225
+ _context2.t0 = _context2["catch"](4);
226
+ _iterator3.e(_context2.t0);
227
+ case 31:
228
+ _context2.prev = 31;
229
+ _iterator3.f();
230
+ return _context2.finish(31);
231
+ case 34:
232
+ console.log();
233
+ return _context2.abrupt("return", packagesToRun);
234
+ case 36:
235
+ case "end":
236
+ return _context2.stop();
237
+ }
238
+ }, _callee2, null, [[4, 28, 31, 34]]);
239
+ }));
240
+ return _buildPackages.apply(this, arguments);
241
+ }
242
+ function loadTestsList(_x7) {
243
+ return _loadTestsList.apply(this, arguments);
244
+ }
245
+ function _loadTestsList() {
246
+ _loadTestsList = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(packages) {
247
+ var core,
248
+ packageTestsData,
249
+ testsList,
250
+ _iterator4,
251
+ _step4,
252
+ testPackage,
253
+ key,
254
+ _iterator5,
255
+ _step5,
256
+ testValue,
257
+ _args4 = arguments;
258
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
259
+ while (1) switch (_context4.prev = _context4.next) {
260
+ case 0:
261
+ core = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : false;
262
+ _context4.next = 3;
263
+ return testUtils.timeout( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
264
+ var params, out, browser, page, r;
265
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
266
+ while (1) switch (_context3.prev = _context3.next) {
267
+ case 0:
268
+ params = Object.assign({}, testUtils.defaultLaunchParameters); // params['headless'] = false;
269
+ _context3.next = 3;
270
+ return testUtils.getBrowserPage(_puppeteer["default"], params);
271
+ case 3:
272
+ out = _context3.sent;
273
+ browser = out.browser;
274
+ page = out.page;
275
+ _context3.next = 8;
276
+ return page.evaluate(function (packages, coreTests) {
277
+ return new Promise(function (resolve, reject) {
278
+ var promises = [];
279
+ try {
280
+ packages.map(function (packageName) {
281
+ var _DG$Func$find$;
282
+ var p = (_DG$Func$find$ = window.DG.Func.find({
283
+ "package": packageName,
284
+ name: 'test'
285
+ })[0]) === null || _DG$Func$find$ === void 0 ? void 0 : _DG$Func$find$["package"];
286
+ if (p) {
287
+ try {
288
+ promises.push(p.getTests(coreTests)["catch"](function (e) {
289
+ console.error('something else went wrong with collecting package tests');
290
+ console.error(e === null || e === void 0 ? void 0 : e.message);
291
+ }).then(function (ts) {
292
+ return {
293
+ packageName: packageName,
294
+ tests: ts
295
+ };
296
+ }));
297
+ } catch (e) {
298
+ console.error('something went wrong while adding test collection promise');
299
+ console.error(e.message);
300
+ }
301
+ }
302
+ });
303
+ } catch (err) {
304
+ console.error("Error during evaluation in browser context:", err);
305
+ reject();
306
+ }
307
+ Promise.all(promises).then(function (results) {
308
+ resolve(results);
309
+ })["catch"](function (e) {
310
+ var stack = window.DG.Logger.translateStackTrace(e.stack).then(function () {
311
+ resolve({
312
+ failReport: "".concat(e.message, "\n").concat(stack)
313
+ });
314
+ });
315
+ });
316
+ });
317
+ }, packages, core);
318
+ case 8:
319
+ r = _context3.sent;
320
+ if (!(browser != null)) {
321
+ _context3.next = 12;
322
+ break;
323
+ }
324
+ _context3.next = 12;
325
+ return browser.close();
326
+ case 12:
327
+ return _context3.abrupt("return", r);
328
+ case 13:
329
+ case "end":
330
+ return _context3.stop();
331
+ }
332
+ }, _callee3);
333
+ })), testCollectionTimeout);
334
+ case 3:
335
+ packageTestsData = _context4.sent;
336
+ testsList = [];
337
+ _iterator4 = _createForOfIteratorHelper(packageTestsData);
338
+ try {
339
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
340
+ testPackage = _step4.value;
341
+ for (key in testPackage.tests) {
342
+ if (testPackage.tests.hasOwnProperty(key)) {
343
+ _iterator5 = _createForOfIteratorHelper(testPackage.tests[key].tests);
344
+ try {
345
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
346
+ testValue = _step5.value;
347
+ testValue.packageName = testPackage.packageName;
348
+ testsList.push(testValue);
349
+ }
350
+ } catch (err) {
351
+ _iterator5.e(err);
352
+ } finally {
353
+ _iterator5.f();
354
+ }
355
+ }
356
+ }
357
+ }
358
+ } catch (err) {
359
+ _iterator4.e(err);
360
+ } finally {
361
+ _iterator4.f();
362
+ }
363
+ return _context4.abrupt("return", testsList);
364
+ case 8:
365
+ case "end":
366
+ return _context4.stop();
367
+ }
368
+ }, _callee4);
369
+ }));
370
+ return _loadTestsList.apply(this, arguments);
371
+ }
372
+ function filterTests(_x8, _x9) {
373
+ return _filterTests.apply(this, arguments);
374
+ }
375
+ function _filterTests() {
376
+ _filterTests = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(tests, tags) {
377
+ var stressTest,
378
+ benchmark,
379
+ filteredTests,
380
+ stressTestValue,
381
+ benchmarkValue,
382
+ _iterator6,
383
+ _step6,
384
+ _loop,
385
+ _ret,
386
+ _args6 = arguments;
387
+ return _regenerator["default"].wrap(function _callee5$(_context6) {
388
+ while (1) switch (_context6.prev = _context6.next) {
389
+ case 0:
390
+ stressTest = _args6.length > 2 && _args6[2] !== undefined ? _args6[2] : false;
391
+ benchmark = _args6.length > 3 && _args6[3] !== undefined ? _args6[3] : false;
392
+ filteredTests = [];
393
+ stressTestValue = tags.includes("stress-test") || stressTest;
394
+ benchmarkValue = benchmark;
395
+ tags = tags.filter(function (tag) {
396
+ return tag !== "stress-test" && tag != "";
397
+ });
398
+ _iterator6 = _createForOfIteratorHelper(tests);
399
+ _context6.prev = 7;
400
+ _loop = /*#__PURE__*/_regenerator["default"].mark(function _loop() {
401
+ var _test$options, _test$options2, _test$options3, _tags;
402
+ var test, hasMatchingTags;
403
+ return _regenerator["default"].wrap(function _loop$(_context5) {
404
+ while (1) switch (_context5.prev = _context5.next) {
405
+ case 0:
406
+ test = _step6.value;
407
+ if (!(benchmarkValue && ((_test$options = test.options) === null || _test$options === void 0 ? void 0 : _test$options.benchmark) !== true)) {
408
+ _context5.next = 3;
409
+ break;
410
+ }
411
+ return _context5.abrupt("return", 0);
412
+ case 3:
413
+ 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")))) {
414
+ _context5.next = 5;
415
+ break;
416
+ }
417
+ return _context5.abrupt("return", 0);
418
+ case 5:
419
+ hasMatchingTags = tags.some(function (tag) {
420
+ var _test$options4;
421
+ 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);
422
+ });
423
+ if (hasMatchingTags || ((_tags = tags) === null || _tags === void 0 ? void 0 : _tags.length) === 0) filteredTests.push(test);
424
+ case 7:
425
+ case "end":
426
+ return _context5.stop();
427
+ }
428
+ }, _loop);
429
+ });
430
+ _iterator6.s();
431
+ case 10:
432
+ if ((_step6 = _iterator6.n()).done) {
433
+ _context6.next = 17;
434
+ break;
435
+ }
436
+ return _context6.delegateYield(_loop(), "t0", 12);
437
+ case 12:
438
+ _ret = _context6.t0;
439
+ if (!(_ret === 0)) {
440
+ _context6.next = 15;
441
+ break;
442
+ }
443
+ return _context6.abrupt("continue", 15);
444
+ case 15:
445
+ _context6.next = 10;
446
+ break;
447
+ case 17:
448
+ _context6.next = 22;
449
+ break;
450
+ case 19:
451
+ _context6.prev = 19;
452
+ _context6.t1 = _context6["catch"](7);
453
+ _iterator6.e(_context6.t1);
454
+ case 22:
455
+ _context6.prev = 22;
456
+ _iterator6.f();
457
+ return _context6.finish(22);
458
+ case 25:
459
+ return _context6.abrupt("return", filteredTests);
460
+ case 26:
461
+ case "end":
462
+ return _context6.stop();
463
+ }
464
+ }, _callee5, null, [[7, 19, 22, 25]]);
465
+ }));
466
+ return _filterTests.apply(this, arguments);
467
+ }
468
+ function setWorkersOrder(_x10) {
469
+ return _setWorkersOrder.apply(this, arguments);
470
+ }
471
+ function _setWorkersOrder() {
472
+ _setWorkersOrder = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(tests) {
473
+ var invocationOrder,
474
+ countOfWorkers,
475
+ testRepeats,
476
+ resultOrder,
477
+ orderingFunction,
478
+ _args7 = arguments;
479
+ return _regenerator["default"].wrap(function _callee6$(_context7) {
480
+ while (1) switch (_context7.prev = _context7.next) {
481
+ case 0:
482
+ invocationOrder = _args7.length > 1 && _args7[1] !== undefined ? _args7[1] : 0;
483
+ countOfWorkers = _args7.length > 2 && _args7[2] !== undefined ? _args7[2] : 1;
484
+ testRepeats = _args7.length > 3 && _args7[3] !== undefined ? _args7[3] : 1;
485
+ resultOrder = [];
486
+ orderingFunction = orderingFunctions.get(invocationOrder);
487
+ if (!(orderingFunction !== undefined)) {
488
+ _context7.next = 9;
489
+ break;
490
+ }
491
+ resultOrder = orderingFunction(tests, countOfWorkers, testRepeats);
492
+ _context7.next = 10;
493
+ break;
494
+ case 9:
495
+ throw new Error("Cannot find ordering function");
496
+ case 10:
497
+ return _context7.abrupt("return", resultOrder);
498
+ case 11:
499
+ case "end":
500
+ return _context7.stop();
501
+ }
502
+ }, _callee6);
503
+ }));
504
+ return _setWorkersOrder.apply(this, arguments);
505
+ }
506
+ function runTests(_x11, _x12) {
507
+ return _runTests.apply(this, arguments);
508
+ }
509
+ function _runTests() {
510
+ _runTests = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(workersOrder, workerOptions) {
511
+ var workersCommands, _iterator7, _step7, workerOrder, workersPromises, _i, _workersCommands, workerCommands, resultObjects;
512
+ return _regenerator["default"].wrap(function _callee7$(_context8) {
513
+ while (1) switch (_context8.prev = _context8.next) {
514
+ case 0:
515
+ workersCommands = [];
516
+ _iterator7 = _createForOfIteratorHelper(workersOrder);
517
+ try {
518
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
519
+ workerOrder = _step7.value;
520
+ workersCommands.push(workerOrder.map(function (testObj) {
521
+ return {
522
+ "package": testObj.packageName,
523
+ params: {
524
+ category: testObj.category,
525
+ test: testObj.name,
526
+ options: {
527
+ catchUnhandled: workerOptions.catchUnhandled,
528
+ report: workerOptions.report
529
+ }
530
+ }
531
+ };
532
+ }));
533
+ }
534
+ } catch (err) {
535
+ _iterator7.e(err);
536
+ } finally {
537
+ _iterator7.f();
538
+ }
539
+ workersPromises = [];
540
+ _i = 0, _workersCommands = workersCommands;
541
+ case 5:
542
+ if (!(_i < _workersCommands.length)) {
543
+ _context8.next = 13;
544
+ break;
545
+ }
546
+ workerCommands = _workersCommands[_i];
547
+ workersPromises.push(runWorker(workerCommands, workerOptions));
548
+ _context8.next = 10;
549
+ return workersPromises[workersPromises.length];
550
+ case 10:
551
+ _i++;
552
+ _context8.next = 5;
553
+ break;
554
+ case 13:
555
+ _context8.next = 15;
556
+ return Promise.all(workersPromises);
557
+ case 15:
558
+ resultObjects = _context8.sent;
559
+ return _context8.abrupt("return", resultObjects);
560
+ case 17:
561
+ case "end":
562
+ return _context8.stop();
563
+ }
564
+ }, _callee7);
565
+ }));
566
+ return _runTests.apply(this, arguments);
567
+ }
568
+ function runWorker(_x13, _x14) {
569
+ return _runWorker.apply(this, arguments);
570
+ }
571
+ function _runWorker() {
572
+ _runWorker = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(testExecutionData, workerOptions) {
573
+ return _regenerator["default"].wrap(function _callee9$(_context10) {
574
+ while (1) switch (_context10.prev = _context10.next) {
575
+ case 0:
576
+ _context10.next = 2;
577
+ return testUtils.timeout( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
578
+ var params, out, browser, page, recorder, currentWorkerNum, logsDir, recordDir, testingResults;
579
+ return _regenerator["default"].wrap(function _callee8$(_context9) {
580
+ while (1) switch (_context9.prev = _context9.next) {
581
+ case 0:
582
+ params = Object.assign({}, testUtils.defaultLaunchParameters);
583
+ if (workerOptions.gui) params['headless'] = false;
584
+ _context9.next = 4;
585
+ return testUtils.getBrowserPage(_puppeteer["default"], params);
586
+ case 4:
587
+ out = _context9.sent;
588
+ browser = out.browser;
589
+ page = out.page;
590
+ recorder = new _puppeteerScreenRecorder.PuppeteerScreenRecorder(page, testUtils.recorderConfig);
591
+ currentWorkerNum = workersStarted++;
592
+ logsDir = "./test-console-output-".concat(currentWorkerNum, ".log");
593
+ recordDir = "./test-record-".concat(currentWorkerNum, ".mp4");
594
+ if (!workerOptions.record) {
595
+ _context9.next = 20;
596
+ break;
597
+ }
598
+ _context9.next = 14;
599
+ return recorder.start(recordDir);
600
+ case 14:
601
+ _context9.next = 16;
602
+ return page.exposeFunction("addLogsToFile", addLogsToFile);
603
+ case 16:
604
+ _fs["default"].writeFileSync(logsDir, "");
605
+ page.on('console', function (msg) {
606
+ addLogsToFile(logsDir, "CONSOLE LOG ENTRY: ".concat(msg.text(), "\n"));
607
+ });
608
+ page.on('pageerror', function (error) {
609
+ addLogsToFile(logsDir, "CONSOLE LOG ERROR: ".concat(error.message, "\n"));
610
+ });
611
+ page.on('response', function (response) {
612
+ addLogsToFile(logsDir, "CONSOLE LOG REQUEST: ".concat(response.status(), ", ").concat(response.url(), "\n"));
613
+ });
614
+ case 20:
615
+ _context9.next = 22;
616
+ return page.evaluate(function (testData, options) {
617
+ if (options.benchmark) window.DG.Test.isInBenchmark = true;
618
+ return new Promise(function (resolve, reject) {
619
+ window.DG.Utils.executeTests(testData).then(function (results) {
620
+ resolve(results);
621
+ })["catch"](function (e) {
622
+ resolve({
623
+ failed: true,
624
+ verbosePassed: "",
625
+ verboseSkipped: "",
626
+ verboseFailed: "Tests execution failed",
627
+ passedAmount: 0,
628
+ skippedAmount: 0,
629
+ failedAmount: 1
630
+ });
631
+ });
632
+ });
633
+ }, testExecutionData, workerOptions);
634
+ case 22:
635
+ testingResults = _context9.sent;
636
+ if (!workerOptions.record) {
637
+ _context9.next = 26;
638
+ break;
639
+ }
640
+ _context9.next = 26;
641
+ return recorder.stop();
642
+ case 26:
643
+ if (!(browser != null)) {
644
+ _context9.next = 29;
645
+ break;
646
+ }
647
+ _context9.next = 29;
648
+ return browser.close();
649
+ case 29:
650
+ return _context9.abrupt("return", testingResults);
651
+ case 30:
652
+ case "end":
653
+ return _context9.stop();
654
+ }
655
+ }, _callee8);
656
+ })), testInvocationTimeout);
657
+ case 2:
658
+ return _context10.abrupt("return", _context10.sent);
659
+ case 3:
660
+ case "end":
661
+ return _context10.stop();
662
+ }
663
+ }, _callee9);
664
+ }));
665
+ return _runWorker.apply(this, arguments);
666
+ }
667
+ function addLogsToFile(filePath, stringToSave) {
668
+ _fs["default"].appendFileSync(filePath, "".concat(stringToSave));
669
+ }
670
+ function printWorkersResult(workerResult) {
671
+ var verbose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
672
+ if (verbose) {
673
+ if (workerResult.passedAmount > 0 && workerResult.verbosePassed.length > 0) {
674
+ console.log("Passed: ");
675
+ console.log(workerResult.verbosePassed);
676
+ }
677
+ if (workerResult.skippedAmount > 0 && workerResult.verboseSkipped.length > 0) {
678
+ console.log("Skipped: ");
679
+ console.log(workerResult.verboseSkipped);
680
+ }
681
+ }
682
+ if (workerResult.failedAmount > 0 && workerResult.verboseFailed.length > 0) {
683
+ console.log("Failed: ");
684
+ console.log(workerResult.verboseFailed);
685
+ }
686
+ console.log("Passed amount: " + workerResult.passedAmount);
687
+ console.log("Skipped amount: " + workerResult.skippedAmount);
688
+ console.log("Failed amount: " + workerResult.failedAmount);
689
+ if (workerResult.failed) {
690
+ color.fail('Tests failed.');
691
+ } else {
692
+ color.success('Tests passed.');
693
+ }
694
+ }
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
+ }
@@ -22,7 +22,9 @@ 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;
26
28
  exports.spaceToCamelCase = spaceToCamelCase;
27
29
  exports.wordsToCamelCase = wordsToCamelCase;
28
30
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
@@ -32,9 +34,13 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
32
34
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
33
35
  var _fs = _interopRequireDefault(require("fs"));
34
36
  var _path = _interopRequireDefault(require("path"));
37
+ var _child_process = require("child_process");
38
+ var _util = require("util");
35
39
  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
40
  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
41
  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; }
42
+ var execAsync = (0, _util.promisify)(_child_process.exec);
43
+
38
44
  /* Waits [ms] milliseconds */
39
45
  function delay(_x) {
40
46
  return _delay.apply(this, arguments);
@@ -280,4 +286,48 @@ function getScriptInputs(script) {
280
286
  var dgImports = exports.dgImports = "import * as grok from 'datagrok-api/grok';\nimport * as DG from 'datagrok-api/dg';\n\n";
281
287
  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
288
  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}";
289
+ var namespaceTemplate = exports.namespaceTemplate = "export namespace #{PACKAGE_NAMESPACE} {\n#{NAME}\n}";
290
+ function runScript(_x2, _x3) {
291
+ return _runScript.apply(this, arguments);
292
+ }
293
+ function _runScript() {
294
+ _runScript = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(script, path) {
295
+ var verbose,
296
+ _yield$execAsync,
297
+ stdout,
298
+ stderr,
299
+ _args2 = arguments;
300
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
301
+ while (1) switch (_context2.prev = _context2.next) {
302
+ case 0:
303
+ verbose = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : false;
304
+ _context2.prev = 1;
305
+ _context2.next = 4;
306
+ return execAsync(script, {
307
+ cwd: path
308
+ });
309
+ case 4:
310
+ _yield$execAsync = _context2.sent;
311
+ stdout = _yield$execAsync.stdout;
312
+ stderr = _yield$execAsync.stderr;
313
+ if (stderr && verbose) {
314
+ console.error("Warning/Error: ".concat(stderr));
315
+ }
316
+ if (stdout && verbose) {
317
+ console.log("Output: ".concat(stdout));
318
+ }
319
+ _context2.next = 15;
320
+ break;
321
+ case 11:
322
+ _context2.prev = 11;
323
+ _context2.t0 = _context2["catch"](1);
324
+ console.error("Execution failed: ".concat(_context2.t0.message));
325
+ throw new Error("Cant run script");
326
+ case 15:
327
+ case "end":
328
+ return _context2.stop();
329
+ }
330
+ }, _callee2, null, [[1, 11]]);
331
+ }));
332
+ return _runScript.apply(this, arguments);
333
+ }
@@ -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.20",
3
+ "version": "4.13.22",
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": {