datagrok-tools 5.1.3 → 5.1.5

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.
@@ -21,15 +21,9 @@ const funcFilePath = _path.default.join(_fs.default.existsSync(srcDir) ? srcDir
21
21
  const packagePath = _path.default.join(curDir, 'package.json');
22
22
  const names = new Set();
23
23
  let _package = {};
24
- function generateQueryWrappers(verbose) {
24
+ function generateQueryWrappers() {
25
25
  const queriesDir = _path.default.join(curDir, 'queries');
26
- if (!_fs.default.existsSync(queriesDir)) {
27
- if (verbose) {
28
- color.warn(`Directory ${queriesDir} not found`);
29
- console.log('Skipping API generation for queries...');
30
- }
31
- return;
32
- }
26
+ if (!_fs.default.existsSync(queriesDir)) return;
33
27
  const files = _ignoreWalk.default.sync({
34
28
  path: './queries',
35
29
  ignoreFiles: ['.npmignore', '.gitignore']
@@ -53,18 +47,12 @@ function generateQueryWrappers(verbose) {
53
47
  wrappers.push(tb.build(1));
54
48
  }
55
49
  }
56
- saveWrappersToFile('queries', wrappers, verbose);
50
+ saveWrappersToFile('queries', wrappers);
57
51
  }
58
- function generateScriptWrappers(verbose) {
52
+ function generateScriptWrappers() {
59
53
  const scriptsDir = _path.default.join(curDir, 'scripts');
60
54
  const pythonDir = _fs.default.existsSync(srcDir) ? _path.default.join(srcDir, 'python') : _path.default.join(curDir, 'python');
61
- if (!_fs.default.existsSync(scriptsDir)) {
62
- if (verbose) {
63
- color.warn(`Directory ${scriptsDir} not found`);
64
- console.log('Skipping API generation for scripts...');
65
- }
66
- return;
67
- }
55
+ if (!_fs.default.existsSync(scriptsDir)) return;
68
56
  const wrappers = [];
69
57
  for (let dir of [scriptsDir, pythonDir]) {
70
58
  if (!_fs.default.existsSync(dir)) continue;
@@ -89,9 +77,9 @@ function generateScriptWrappers(verbose) {
89
77
  wrappers.push(tb.build(1));
90
78
  }
91
79
  }
92
- saveWrappersToFile('scripts', wrappers, verbose);
80
+ saveWrappersToFile('scripts', wrappers);
93
81
  }
94
- function generateFunctionWrappers(verbose) {
82
+ function generateFunctionWrappers() {
95
83
  let filesToParse = packageFuncDirs.map(e => _path.default.join(curDir, 'src', e)).filter(e => _fs.default.existsSync(e));
96
84
  const annotaionRegex = /(?:\/\/[^\n]*\n)+export[^{]*/g;
97
85
  const nameRegex = /\s*export(?:\sasync)?\s*function\s*([^\s(]*)/;
@@ -113,20 +101,16 @@ function generateFunctionWrappers(verbose) {
113
101
  wrappers.push(tb.build(1));
114
102
  }
115
103
  }
116
- saveWrappersToFile('funcs', wrappers, verbose);
104
+ saveWrappersToFile('funcs', wrappers);
117
105
  }
118
- function saveWrappersToFile(namespaceName, wrappers, verbose) {
106
+ function saveWrappersToFile(namespaceName, wrappers) {
119
107
  if (wrappers.length === 0) return;
120
- if (!_fs.default.existsSync(funcFilePath)) createApiFile(verbose);
108
+ if (!_fs.default.existsSync(funcFilePath)) createApiFile();
121
109
  const scriptApi = new utils.TemplateBuilder(utils.namespaceTemplate).replace('PACKAGE_NAMESPACE', namespaceName).replace('NAME', wrappers.join(sep.repeat(2)));
122
110
  _fs.default.appendFileSync(funcFilePath, sep + scriptApi.build() + sep);
123
- if (verbose) color.success(`Successfully generated file ${apiFile}${sep}`);
111
+ color.log(`Successfully generated file ${apiFile}${sep}`, 'success');
124
112
  }
125
- function createApiFile(verbose) {
126
- if (_fs.default.existsSync(funcFilePath) && verbose) {
127
- color.warn(`The file ${funcFilePath} already exists`);
128
- console.log('Rewriting its contents...');
129
- }
113
+ function createApiFile() {
130
114
  _fs.default.writeFileSync(funcFilePath, annotationForApiFile + utils.dgImports + sep, 'utf8');
131
115
  }
132
116
  function checkNameColision(name) {
@@ -134,7 +118,7 @@ function checkNameColision(name) {
134
118
  names.add(name);
135
119
  }
136
120
  function api(args) {
137
- const verbose = args.verbose || args.v || false;
121
+ color.setVerbose(args.verbose || args.v || false);
138
122
  _package = JSON.parse(_fs.default.readFileSync(packagePath, {
139
123
  encoding: 'utf-8'
140
124
  }));
@@ -145,9 +129,9 @@ function api(args) {
145
129
  color.error('File `package.json` not found. Run the command from the package directory');
146
130
  return false;
147
131
  }
148
- createApiFile(verbose);
149
- generateScriptWrappers(verbose);
150
- generateQueryWrappers(verbose);
151
- generateFunctionWrappers(verbose);
132
+ createApiFile();
133
+ generateScriptWrappers();
134
+ generateQueryWrappers();
135
+ generateFunctionWrappers();
152
136
  return true;
153
137
  }
@@ -20,23 +20,22 @@ var utils = _interopRequireWildcard(require("../utils/utils"));
20
20
  var color = _interopRequireWildcard(require("../utils/color-utils"));
21
21
  var testUtils = _interopRequireWildcard(require("../utils/test-utils"));
22
22
  var _const = require("../utils/const");
23
- var _child_process = require("child_process");
24
23
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
25
24
  const warns = ['Latest package version', 'Datagrok API version should contain'];
26
25
  const forbiddenNames = ['function', 'class', 'export'];
27
26
  const namesInFiles = new Map();
28
27
  function check(args) {
29
- const verbose = args.verbose || args.v || false;
28
+ if (args.verbose !== undefined || args.v !== undefined) color.setVerbose(args.verbose || args.v || false);
30
29
  const curDir = args._.length == 2 ? args._[1] : process.cwd();
31
- if (args.recursive) return runChecksRec(curDir, args.soft ?? false, verbose);else {
30
+ if (args.recursive) return runChecksRec(curDir, args.soft ?? false);else {
32
31
  if (!utils.isPackageDir(curDir)) {
33
32
  color.error('File `package.json` not found. Run the command from the package directory');
34
33
  return false;
35
34
  }
36
- return runChecks(curDir, args.soft ?? false, false, verbose);
35
+ return runChecks(curDir, args.soft ?? false, false);
37
36
  }
38
37
  }
39
- function runChecks(packagePath, soft = false, noExit = false, verbose = false) {
38
+ function runChecks(packagePath, soft = false, noExit = false) {
40
39
  if (packagePath.includes(`${_path.default.sep}node_modules${_path.default.sep}`)) return true;
41
40
  const files = _ignoreWalk.default.sync({
42
41
  path: packagePath,
@@ -90,10 +89,10 @@ function runChecks(packagePath, soft = false, noExit = false, verbose = false) {
90
89
  if (soft || json.version.startsWith('0') || errors.every(w => warns.some(ww => w.includes(ww)))) return true;
91
90
  if (noExit) return false;else testUtils.exitWithCode(1);
92
91
  }
93
- if (verbose) console.log(`Checking package ${_path.default.basename(packagePath)}...\t\t\t\u2713 OK`);
92
+ color.log(`Checking package ${_path.default.basename(packagePath)}...\t\t\t\u2713 OK`);
94
93
  return true;
95
94
  }
96
- function runChecksRec(dir, soft = false, verbose = false) {
95
+ function runChecksRec(dir, soft = false) {
97
96
  const files = _fs.default.readdirSync(dir);
98
97
  let allPassed = true;
99
98
  for (const file of files) {
@@ -101,11 +100,11 @@ function runChecksRec(dir, soft = false, verbose = false) {
101
100
  const stats = _fs.default.statSync(filepath);
102
101
  if (stats.isDirectory()) {
103
102
  if (utils.isPackageDir(filepath)) {
104
- const passed = runChecks(filepath, soft, true, verbose);
103
+ const passed = runChecks(filepath, soft, true);
105
104
  allPassed = allPassed && passed;
106
105
  } else {
107
106
  if (file !== 'node_modules' && !file.startsWith('.')) {
108
- const passed = runChecksRec(_path.default.join(dir, file), soft, verbose);
107
+ const passed = runChecksRec(_path.default.join(dir, file), soft);
109
108
  allPassed = allPassed && passed;
110
109
  }
111
110
  }
@@ -456,23 +455,8 @@ function checkSourceMap(packagePath) {
456
455
  // Check if dist files exist
457
456
  const distPackage = _path.default.join(packagePath, 'dist', 'package.js');
458
457
  const distPackageTest = _path.default.join(packagePath, 'dist', 'package-test.js');
459
- let missingFiles = [distPackage, distPackageTest].filter(f => !_fs.default.existsSync(f));
460
-
461
- // If any dist files are missing, try to build automatically
462
- if (missingFiles.length > 0) {
463
- try {
464
- (0, _child_process.execSync)('npm run build', {
465
- cwd: packagePath,
466
- stdio: 'inherit'
467
- });
468
- } catch (e) {
469
- console.warn('Build failed:', e);
470
- }
471
-
472
- // Recheck dist files after build
473
- missingFiles = [distPackage, distPackageTest].filter(f => !_fs.default.existsSync(f));
474
- missingFiles.forEach(f => warnings.push(`${_path.default.relative(packagePath, f)} file doesnt exist even after build`));
475
- }
458
+ const missingFiles = [distPackage, distPackageTest].filter(f => !_fs.default.existsSync(f));
459
+ missingFiles.forEach(f => warnings.push(`${_path.default.relative(packagePath, f)} file doesnt exist. Run 'npm run build' first.`));
476
460
  }
477
461
  return warnings;
478
462
  }
@@ -35,9 +35,8 @@ let curDir = process.cwd();
35
35
  const packDir = _path.default.join(curDir, 'package.json');
36
36
  const packageFiles = ['src/package.ts', 'src/detectors.ts', 'src/package.js', 'src/detectors.js', 'src/package-test.ts', 'src/package-test.js', 'package.js', 'detectors.js'];
37
37
  let config;
38
- async function processPackage(debug, rebuild, host, devKey, packageName, dropDb, suffix, hostAlias, verbose = false) {
38
+ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb, suffix, hostAlias) {
39
39
  // Get the server timestamps
40
- verbose = verbose || false;
41
40
  let timestamps = {};
42
41
  let url = `${host}/packages/dev/${devKey}/${packageName}`;
43
42
  if (debug) {
@@ -49,7 +48,7 @@ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb,
49
48
  }
50
49
  } catch (error) {
51
50
  if (utils.isConnectivityError(error)) color.error(`Server is possibly offline: ${host}`);
52
- if (verbose) console.error(error);
51
+ if (color.isVerbose()) console.error(error);
53
52
  return 1;
54
53
  }
55
54
  }
@@ -84,7 +83,7 @@ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb,
84
83
  rebuild = true;
85
84
  }
86
85
  }
87
- if (verbose) console.log('Starting package checks...');
86
+ color.log('Starting package checks...');
88
87
  const checkStart = Date.now();
89
88
  const jsTsFiles = files.filter(f => !f.startsWith('dist/') && (f.endsWith('.js') || f.endsWith('.ts')));
90
89
  const packageFilePath = _path.default.join(curDir, 'package.json');
@@ -98,7 +97,7 @@ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb,
98
97
  });
99
98
  }
100
99
  const funcFiles = jsTsFiles.filter(f => packageFiles.includes(f));
101
- if (verbose) console.log(`Checks finished in ${Date.now() - checkStart} ms`);
100
+ color.log(`Checks finished in ${Date.now() - checkStart} ms`);
102
101
  const reg = new RegExp(/\${(\w*)}/g);
103
102
  const errs = [];
104
103
  files.forEach(file => {
@@ -117,7 +116,7 @@ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb,
117
116
  const t = _fs.default.statSync(fullPath).mtime.toUTCString();
118
117
  localTimestamps[canonicalRelativePath] = t;
119
118
  if (debug && timestamps[canonicalRelativePath] === t) {
120
- if (verbose) console.log(`Skipping ${canonicalRelativePath}`);
119
+ color.log(`Skipping ${canonicalRelativePath}`);
121
120
  return;
122
121
  }
123
122
  if (canonicalRelativePath.startsWith('connections/')) {
@@ -136,13 +135,13 @@ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb,
136
135
  zip.append(f, {
137
136
  name: relativePath
138
137
  });
139
- if (verbose) console.log(`Adding ${canonicalRelativePath}...`);
138
+ color.log(`Adding ${canonicalRelativePath}...`);
140
139
  return;
141
140
  }
142
141
  zip.append(_fs.default.createReadStream(fullPath), {
143
142
  name: relativePath
144
143
  });
145
- if (verbose) console.log(`Adding ${canonicalRelativePath}...`);
144
+ color.log(`Adding ${canonicalRelativePath}...`);
146
145
  });
147
146
  if (errs.length) {
148
147
  errs.forEach(e => color.error(e));
@@ -171,22 +170,21 @@ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb,
171
170
  console.log(log);
172
171
  return 1;
173
172
  } else {
174
- if (verbose) console.log(log);
173
+ if (color.isVerbose()) console.log(log);
175
174
  color.success(`✓ Published to ${hostAlias || new URL(host).hostname}`);
176
175
  }
177
176
  }
178
177
  } catch (error) {
179
178
  if (utils.isConnectivityError(error)) color.error(`Server is possibly offline: ${url}`);
180
- if (verbose) console.error(error);
179
+ if (color.isVerbose()) console.error(error);
181
180
  return 1;
182
181
  }
183
182
  return 0;
184
183
  }
185
184
  async function publish(args) {
186
- const verbose = args.verbose || args.v || false;
185
+ color.setVerbose(args.verbose || args.v || false);
187
186
  if (!args['skip-check'] && !args['all'] && !args['refresh']) (0, _check.check)({
188
- _: ['check'],
189
- verbose: verbose
187
+ _: ['check']
190
188
  });
191
189
  config = _jsYaml.default.load(_fs.default.readFileSync(confPath, {
192
190
  encoding: 'utf-8'
@@ -212,23 +210,23 @@ async function publish(args) {
212
210
  }
213
211
  })).json()).map(item => item.name);
214
212
  }
215
- if (verbose) console.log('Loading packages:');
213
+ color.log('Loading packages:');
216
214
  await (0, _testUtils.loadPackages)(curDir, packagesToLoad.join(' '), host, false, false, args.link, args.release);
217
215
  } else {
218
216
  if (args.link) {
219
- if (verbose) console.log('Linking');
217
+ color.log('Linking');
220
218
  await utils.runScript(`npm install`, curDir);
221
219
  await utils.runScript(`grok link`, curDir);
222
220
  await utils.runScript(`npm run build`, curDir);
223
221
  }
224
- await publishPackage(args, verbose);
222
+ await publishPackage(args);
225
223
  }
226
224
  }
227
- async function publishPackage(args, verbose) {
225
+ async function publishPackage(args) {
228
226
  const nArgs = args['_'].length;
229
227
  if (!args.link) {
230
228
  if (args.build || args.rebuild) {
231
- if (verbose) console.log('Building');
229
+ color.log('Building');
232
230
  await utils.runScript('npm install', curDir, false);
233
231
  await utils.runScript('npm run build', curDir, false);
234
232
  }
@@ -237,7 +235,7 @@ async function publishPackage(args, verbose) {
237
235
  color.error('Incompatible options: --debug and --release');
238
236
  return false;
239
237
  }
240
- if (verbose) console.log('Publishing...');
238
+ color.log('Publishing...');
241
239
  // Create `config.yaml` if it doesn't exist yet
242
240
  if (!_fs.default.existsSync(grokDir)) _fs.default.mkdirSync(grokDir);
243
241
  if (!_fs.default.existsSync(confPath)) _fs.default.writeFileSync(confPath, _jsYaml.default.dump(confTemplate));
@@ -286,12 +284,12 @@ async function publishPackage(args, verbose) {
286
284
  if (!args.suffix && stdout) args.suffix = stdout.toString().substring(0, 8);
287
285
  });
288
286
  await utils.delay(100);
289
- code = await processPackage(!args.release, Boolean(args.rebuild), url, key, packageName, args.dropDb ?? false, args.suffix, host, verbose);
287
+ code = await processPackage(!args.release, Boolean(args.rebuild), url, key, packageName, args.dropDb ?? false, args.suffix, host);
290
288
  } catch (error) {
291
289
  console.error(error);
292
290
  code = 1;
293
291
  }
294
- if (verbose) console.log(`Exiting with code ${code}`);
292
+ color.log(`Exiting with code ${code}`);
295
293
  process.exit(code);
296
294
  });
297
295
  return true;
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.warn = exports.success = exports.info = exports.fail = exports.error = void 0;
6
+ exports.isVerbose = exports.info = exports.fail = exports.error = void 0;
7
+ exports.log = log;
8
+ exports.warn = exports.success = exports.setVerbose = void 0;
7
9
  const error = s => console.log('\x1b[31m%s\x1b[0m', s);
8
10
  exports.error = error;
9
11
  const info = s => console.log('\x1b[32m%s\x1b[0m', s);
@@ -11,4 +13,33 @@ exports.info = info;
11
13
  const warn = s => console.log('\x1b[33m%s\x1b[0m', s);
12
14
  exports.warn = warn;
13
15
  const success = exports.success = info;
14
- const fail = exports.fail = error;
16
+ const fail = exports.fail = error;
17
+ let verbose = false;
18
+ const setVerbose = value => verbose = value;
19
+ exports.setVerbose = setVerbose;
20
+ const isVerbose = () => verbose;
21
+ exports.isVerbose = isVerbose;
22
+ /** Logs a message only when verbose mode is enabled
23
+ * @param {string} s - The message to log
24
+ * @param {LogType} type - The type of the message, which determines its color. Defaults to 'plain'.
25
+ */
26
+ function log(s, type = 'plain') {
27
+ if (!verbose) return;
28
+ switch (type) {
29
+ case 'fail':
30
+ case 'error':
31
+ error(s);
32
+ break;
33
+ case 'warn':
34
+ warn(s);
35
+ break;
36
+ case 'success':
37
+ case 'info':
38
+ info(s);
39
+ break;
40
+ case 'plain':
41
+ default:
42
+ console.log(s);
43
+ break;
44
+ }
45
+ }
@@ -2,7 +2,7 @@
2
2
  "name": "#{PACKAGE_NAME_LOWERCASE}",
3
3
  "friendlyName": "#{PACKAGE_NAME}",
4
4
  "version": "0.0.1",
5
- "description": "",
5
+ "description": "#{PACKAGE_NAME} package",
6
6
  "dependencies": {
7
7
  "datagrok-api": "^1.26.0",
8
8
  "cash-dom": "^8.1.5",
@@ -10,7 +10,7 @@
10
10
  "@datagrok-libraries/utils": "^4.6.5"
11
11
  },
12
12
  "devDependencies": {
13
- "datagrok-tools": "^4.14.53",
13
+ "datagrok-tools": "^5.1.5",
14
14
  "webpack": "^5.95.0",
15
15
  "webpack-cli": "^5.1.4"
16
16
  },
@@ -18,7 +18,7 @@
18
18
  "debug-#{PACKAGE_NAME_LOWERCASE}": "webpack && grok publish",
19
19
  "release-#{PACKAGE_NAME_LOWERCASE}": "webpack && grok publish --release",
20
20
  "build-#{PACKAGE_NAME_LOWERCASE}": "webpack",
21
- "build": "grok api && grok check && webpack",
21
+ "build": "grok api && grok check --soft && webpack",
22
22
  "test": "grok test"
23
23
  },
24
24
  "canEdit": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datagrok-tools",
3
- "version": "5.1.3",
3
+ "version": "5.1.5",
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": {