datagrok-tools 4.13.14 → 4.13.15

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,13 +1,25 @@
1
1
  # Datagrok-tools changelog
2
2
 
3
3
 
4
- ## 4.13.13 (2024-08-09)
4
+ ## 4.13.16 (2024-08-23)
5
+
6
+ ### Features
7
+
8
+ * Grok link fixes
9
+
10
+ ## 4.13.15 (2024-08-21)
11
+
12
+ ### Features
13
+
14
+ * Grok link updated to link all dependent libs
15
+
16
+ ## 4.13.14 (2024-08-09)
5
17
 
6
18
  ### Features
7
19
 
8
20
  * Timeout update for test runs up to 1 hour
9
21
 
10
- ## 4.13.12 (2024-08-09)
22
+ ## 4.13.13 (2024-08-09)
11
23
 
12
24
  ### Features
13
25
 
@@ -1,191 +1,220 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.link = link;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
13
  var _fs = _interopRequireDefault(require("fs"));
11
14
  var _path = _interopRequireDefault(require("path"));
12
15
  var _child_process = require("child_process");
13
- var utils = _interopRequireWildcard(require("../utils/utils"));
14
- var color = _interopRequireWildcard(require("../utils/color-utils"));
15
- 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); }
16
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
16
+ var _util = require("util");
17
17
  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
18
  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
19
  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
+ var repositoryDirNameRegex = new RegExp('\\public$');
20
22
  var curDir = process.cwd();
21
- var repositoryDir = _path["default"].dirname(_path["default"].dirname(curDir));
23
+ var devMode = false;
24
+ var repositoryDir = curDir;
25
+ var localPackageDependencies;
26
+ var packagesToLink;
27
+ while (repositoryDir.length > 0) {
28
+ if (repositoryDirNameRegex.test(repositoryDir)) break;
29
+ repositoryDir = _path["default"].dirname(repositoryDir);
30
+ }
31
+ var apiDir = _path["default"].join(repositoryDir, 'js-api');
32
+ var libDir = _path["default"].join(repositoryDir, 'libraries');
33
+ var packageDir = _path["default"].join(repositoryDir, 'packages');
22
34
  var apiPackageName = 'datagrok-api';
23
- var libScope = '@datagrok-libraries';
24
- var paths = (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, apiPackageName, _path["default"].join(repositoryDir, 'js-api')), libScope, _path["default"].join(repositoryDir, 'libraries'));
25
- var packageDependencies = {};
26
-
27
- /** Links local packages. */
28
- function link(args) {
29
- var nOptions = Object.keys(args).length - 1;
30
- if (nOptions > 1 || args['_'].length > 1 || nOptions === 1 && !args.local && !args.npm) return false;
31
- var local = args.npm ? false : true; // args.local is default
32
-
33
- if (!utils.isPackageDir(curDir)) {
34
- color.error('File `package.json` not found. Run the command from the package directory');
35
- return false;
36
- }
37
- for (var _i = 0, _Object$values = Object.values(paths); _i < _Object$values.length; _i++) {
38
- var p = _Object$values[_i];
39
- if (!_fs["default"].existsSync(p)) {
40
- color.error("Directory ".concat(p, " not found. Run the command from the public package repository"));
41
- return false;
42
- }
43
- }
44
- var dependencies = readDependencies(curDir);
45
- if (local) {
46
- var _link = function _link(packagePath) {
47
- var packageJsonPath = _path["default"].join(packagePath, 'package.json');
48
- var json = JSON.parse(_fs["default"].readFileSync(packageJsonPath, 'utf-8'));
49
- json.scripts['link-all'] = generateLinkScript(packagePath, packageHierarchy);
50
- json.scripts['build-all'] = generateBuildScript(packagePath, packageHierarchy);
51
- _fs["default"].writeFileSync(packageJsonPath, JSON.stringify(json, null, 2), 'utf-8');
52
- (0, _child_process.exec)('npm install && npm link && npm run link-all', {
53
- cwd: packagePath
54
- }, function (err, stdout, stderr) {
55
- if (err) throw err;else console.log(stderr, stdout);
56
- });
57
- };
58
- var packageHierarchy = getHierarchy(curDir);
59
- packageHierarchy.forEach(function (packageName) {
60
- return _link(getPackagePath(packageName));
61
- });
62
- _link(curDir);
63
- } else {
64
- runScript(curDir, 'npm install', dependencies, {
65
- dirMessage: 'Unlinking local packages in ',
66
- successMessage: 'Local packages have been successfully unlinked.'
67
- });
68
- }
69
- return true;
35
+ var libName = '@datagrok-libraries/';
36
+ var packageName = '@datagrok/';
37
+ function link(_x) {
38
+ return _link.apply(this, arguments);
39
+ }
40
+ function _link() {
41
+ _link = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(args) {
42
+ return _regenerator["default"].wrap(function _callee$(_context) {
43
+ while (1) switch (_context.prev = _context.next) {
44
+ case 0:
45
+ localPackageDependencies = [];
46
+ packagesToLink = new Set();
47
+ if (args.dev !== undefined) devMode = args.dev;
48
+ collectPackagesData(curDir);
49
+ _context.next = 6;
50
+ return linkPackages();
51
+ case 6:
52
+ return _context.abrupt("return", true);
53
+ case 7:
54
+ case "end":
55
+ return _context.stop();
56
+ }
57
+ }, _callee);
58
+ }));
59
+ return _link.apply(this, arguments);
70
60
  }
71
- function readDependencies(packagePath) {
72
- if (packagePath in packageDependencies) return packageDependencies[packagePath];
73
- var fileContent = _fs["default"].readFileSync(_path["default"].join(packagePath, 'package.json'), 'utf-8');
74
- var json = JSON.parse(fileContent);
75
- var libs = {};
76
- for (var dep in json.dependencies) {
77
- if (dep === apiPackageName || dep.startsWith("".concat(libScope, "/"))) libs[dep] = json.dependencies[dep];
61
+ function collectPackagesData() {
62
+ var packagePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : curDir;
63
+ var packageJsonPath = _path["default"].join(packagePath, 'package.json');
64
+ var json = JSON.parse(_fs["default"].readFileSync(packageJsonPath, 'utf-8'));
65
+ var result = [];
66
+ result = result.concat(collectPacakgeDataFromJsonObject(json.dependencies));
67
+ if (devMode) result = result.concat(collectPacakgeDataFromJsonObject(json.devDependencies));
68
+ console.log(JSON.stringify(result).toString());
69
+ return result;
70
+ }
71
+ function collectPacakgeDataFromJsonObject(object) {
72
+ var result = [];
73
+ for (var _i = 0, _Object$keys = Object.keys(object); _i < _Object$keys.length; _i++) {
74
+ var dependencyName = _Object$keys[_i];
75
+ var nameSplitted = dependencyName.split('/');
76
+ if (dependencyName === apiPackageName) result = result.concat(parsePackageDependencies(dependencyName, apiDir));else if (dependencyName.includes(libName)) result = result.concat(parsePackageDependencies(dependencyName, _path["default"].join(libDir, nameSplitted[nameSplitted.length - 1])));else if (dependencyName.includes(packageName)) result = result.concat(parsePackageDependencies(dependencyName, _path["default"].join(packageDir, toCamelCase(nameSplitted[nameSplitted.length - 1]))));
78
77
  }
79
- packageDependencies[packagePath] = libs;
80
- return libs;
78
+ return result;
81
79
  }
82
- function getPackagePath(packageName) {
83
- return packageName === apiPackageName ? paths[packageName] : _path["default"].join(paths[libScope], packageName.split('/')[1]);
80
+ function toCamelCase(input) {
81
+ return input.split('-').map(function (word) {
82
+ return word.charAt(0).toUpperCase() + word.slice(1);
83
+ }).join('');
84
84
  }
85
-
86
- /** Forms a hierarchy to understand in which order packages should be linked. */
87
- function getHierarchy(packageDir) {
88
- var hierarchy = [];
89
- var dependencies = Object.keys(readDependencies(packageDir));
90
- var cachedHierarchy = {};
91
- for (var _i2 = 0, _dependencies = dependencies; _i2 < _dependencies.length; _i2++) {
92
- var _cachedHierarchy$depP;
93
- var dep = _dependencies[_i2];
94
- var idx = hierarchy.indexOf(dep);
95
- if (idx === -1) idx = hierarchy.push(dep) - 1;
96
- var depPath = getPackagePath(dep);
97
- var internalHierarchy = (_cachedHierarchy$depP = cachedHierarchy[depPath]) !== null && _cachedHierarchy$depP !== void 0 ? _cachedHierarchy$depP : getHierarchy(depPath);
98
- if (!(depPath in cachedHierarchy)) cachedHierarchy[depPath] = internalHierarchy;
99
- var _iterator = _createForOfIteratorHelper(internalHierarchy),
100
- _step;
101
- try {
102
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
103
- var internalDep = _step.value;
104
- var depIdx = hierarchy.indexOf(internalDep);
105
- if (depIdx === -1) {
106
- // Insert the internal dependency before the main package
107
- hierarchy.splice(idx, 0, internalDep);
108
- idx++;
109
- } else if (depIdx > idx) {
110
- // Remove the internal dependency from the list and place it before the main package
111
- // (doesn't affect the order of same-level libraries, their order is arbitrary)
112
- hierarchy.splice(depIdx, 1);
113
- idx = hierarchy.indexOf(dep);
114
- hierarchy.splice(idx, 0, internalDep);
115
- idx++;
116
- }
117
- }
118
- } catch (err) {
119
- _iterator.e(err);
120
- } finally {
121
- _iterator.f();
122
- }
85
+ function parsePackageDependencies(dependencyName, pathToLink) {
86
+ var result = [];
87
+ if (!packagesToLink.has(dependencyName)) {
88
+ packagesToLink.add(dependencyName);
89
+ localPackageDependencies.push(new PackageData(dependencyName, pathToLink));
123
90
  }
124
- return hierarchy;
91
+ result.push(dependencyName);
92
+ return result;
125
93
  }
126
-
127
- /** Executes a script for a package and its dependencies with messages on the current progress. */
128
- function runScript(packageDir, script, dependencies) {
129
- var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
130
- (0, _child_process.exec)(script, {
131
- cwd: packageDir
132
- }, function (err, stdout, stderr) {
133
- if (options.dirMessage) console.log("".concat(options.dirMessage).concat(_path["default"].basename(packageDir)));
134
- if (options.callback) options.callback(packageDir);
135
- if (err) throw err;else {
136
- console.log(stderr, stdout);
137
- var _loop = function _loop() {
138
- var depPath = getPackagePath(dep);
139
- (0, _child_process.exec)(script, {
140
- cwd: depPath
141
- }, function (err, stdout, stderr) {
142
- if (options.dirMessage) console.log("".concat(options.dirMessage).concat(_path["default"].basename(depPath)));
143
- if (options.callback) options.callback(depPath);
144
- if (err) throw err;else console.log(stderr, stdout);
145
- });
146
- };
147
- for (var dep in dependencies) {
148
- _loop();
94
+ function linkPackages() {
95
+ return _linkPackages.apply(this, arguments);
96
+ }
97
+ function _linkPackages() {
98
+ _linkPackages = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
99
+ var anyChanges, mapElements, _iterator, _step, element, names;
100
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
101
+ while (1) switch (_context2.prev = _context2.next) {
102
+ case 0:
103
+ anyChanges = true;
104
+ case 1:
105
+ if (!(anyChanges && packagesToLink.size > 0)) {
106
+ _context2.next = 31;
107
+ break;
108
+ }
109
+ anyChanges = false;
110
+ mapElements = localPackageDependencies.filter(function (x) {
111
+ return x.dependencies.every(function (i) {
112
+ return !packagesToLink.has(i);
113
+ }) && packagesToLink.has(x.name);
114
+ });
115
+ _iterator = _createForOfIteratorHelper(mapElements);
116
+ _context2.prev = 5;
117
+ _iterator.s();
118
+ case 7:
119
+ if ((_step = _iterator.n()).done) {
120
+ _context2.next = 19;
121
+ break;
122
+ }
123
+ element = _step.value;
124
+ _context2.next = 11;
125
+ return runScript("npm install", element.packagePath);
126
+ case 11:
127
+ _context2.next = 13;
128
+ return runScript("npm link ".concat(element.dependencies.join(' ')), element.packagePath);
129
+ case 13:
130
+ _context2.next = 15;
131
+ return runScript("npm link", element.packagePath);
132
+ case 15:
133
+ packagesToLink["delete"](element.name);
134
+ anyChanges = true;
135
+ case 17:
136
+ _context2.next = 7;
137
+ break;
138
+ case 19:
139
+ _context2.next = 24;
140
+ break;
141
+ case 21:
142
+ _context2.prev = 21;
143
+ _context2.t0 = _context2["catch"](5);
144
+ _iterator.e(_context2.t0);
145
+ case 24:
146
+ _context2.prev = 24;
147
+ _iterator.f();
148
+ return _context2.finish(24);
149
+ case 27:
150
+ if (!(anyChanges === false)) {
151
+ _context2.next = 29;
152
+ break;
153
+ }
154
+ throw new Error("There is loop with next packages: ".concat(JSON.stringify(Array.from(packagesToLink)).toString()));
155
+ case 29:
156
+ _context2.next = 1;
157
+ break;
158
+ case 31:
159
+ names = localPackageDependencies.map(function (x) {
160
+ return x.name;
161
+ });
162
+ _context2.next = 34;
163
+ return runScript("npm install", curDir);
164
+ case 34:
165
+ _context2.next = 36;
166
+ return runScript("npm link ".concat(names.join(' ')), curDir);
167
+ case 36:
168
+ case "end":
169
+ return _context2.stop();
149
170
  }
150
- // if (options.successMessage)
151
- // setTimeout(() => color.success(options.successMessage!), 5000);
152
- }
153
- });
171
+ }, _callee2, null, [[5, 21, 24, 27]]);
172
+ }));
173
+ return _linkPackages.apply(this, arguments);
154
174
  }
155
-
156
- /** Generates a package script to build all dependencies using the provided hierarchy. */
157
- function generateBuildScript(packagePath, hierarchy) {
158
- var dependencies = Object.keys(readDependencies(packagePath));
159
- var packageNames = hierarchy.filter(function (p) {
160
- return dependencies.includes(p);
161
- });
162
- var prefix = "./".concat(_path["default"].relative(packagePath, repositoryDir).split(_path["default"].sep).join('/'), "/");
163
- var script = '';
164
- var _iterator2 = _createForOfIteratorHelper(packageNames),
165
- _step2;
166
- try {
167
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
168
- var packageName = _step2.value;
169
- script += "npm --prefix ".concat(prefix).concat(packageName === apiPackageName ? 'js-api' : "libraries/".concat(packageName.split('/')[1]), " run build && ");
170
- }
171
- } catch (err) {
172
- _iterator2.e(err);
173
- } finally {
174
- _iterator2.f();
175
- }
176
- return "".concat(script ? script : '', "npm run build");
175
+ function runScript(_x2, _x3) {
176
+ return _runScript.apply(this, arguments);
177
177
  }
178
-
179
- /** Generates a package script to link all dependencies using the provided hierarchy. */
180
- function generateLinkScript(packagePath, hierarchy) {
181
- var dependencies = Object.keys(readDependencies(packagePath));
182
- var packageNames = hierarchy.filter(function (p) {
183
- return dependencies.includes(p);
184
- });
185
- for (var _i3 = 0, _dependencies2 = dependencies; _i3 < _dependencies2.length; _i3++) {
186
- var dep = _dependencies2[_i3];
187
- if (!packageNames.includes(dep)) color.error("Hierarchy does not include package ".concat(dep));
188
- }
189
- var script = "npm link".concat(packageNames.length ? ' ' + packageNames.join(' ') : '');
190
- return script;
191
- }
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
+ var PackageData = /*#__PURE__*/(0, _createClass2["default"])(function PackageData(name, packagePath) {
213
+ (0, _classCallCheck2["default"])(this, PackageData);
214
+ (0, _defineProperty2["default"])(this, "name", void 0);
215
+ (0, _defineProperty2["default"])(this, "packagePath", void 0);
216
+ (0, _defineProperty2["default"])(this, "dependencies", []);
217
+ this.name = name;
218
+ this.packagePath = packagePath;
219
+ this.dependencies = collectPackagesData(packagePath);
220
+ });
package/bin/grok.js CHANGED
@@ -18,12 +18,12 @@ const commands = {
18
18
 
19
19
  const command = argv['_'][0];
20
20
  if (command in commands) {
21
- try {
22
- if (!commands[command](argv)) {
21
+ try {
22
+ if (!commands[command](argv)) {
23
23
  console.log(help[command]);
24
24
  exitWithCode(1);
25
25
  }
26
- } catch (err) {
26
+ } catch (err) {
27
27
  console.error(err);
28
28
  console.log(help[command]);
29
29
  exitWithCode(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datagrok-tools",
3
- "version": "4.13.14",
3
+ "version": "4.13.15",
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": {