datagrok-tools 4.14.33 → 4.14.35

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.
@@ -129,7 +129,7 @@ async function runTesting(args) {
129
129
  let testsLeft = [];
130
130
  let testsToReproduce = [];
131
131
  for (let testData of organized) {
132
- if (!r.verbosePassed.includes(`${testData.params.category}: ${testData.params.test}`) && !r.verboseSkipped.includes(`${testData.params.category}: ${testData.params.test}`) && !r.verboseFailed.includes(`${testData.params.category}: ${testData.params.test}`) && !new RegExp(`${testData.params.category.trim()}[^\\n]*: (before|after)`).test(r.verboseFailed)) testsLeft.push(testData);
132
+ if (!r.verbosePassed.includes(`${testData.params.category}: ${testData.params.test}`) && !r.verboseSkipped.includes(`${testData.params.category}: ${testData.params.test}`) && !r.verboseFailed.includes(`${testData.params.category}: ${testData.params.test}`) && !new RegExp(`${testUtils.escapeRegex(testData.params.category.trim())}[^\n]*: *?(before|after)(\\(\\))?`).test(r.verboseFailed)) testsLeft.push(testData);
133
133
  if (r.verboseFailed.includes(`${testData.params.category}: ${testData.params.test} : Error:`)) {
134
134
  testsToReproduce.push(testData);
135
135
  }
@@ -8,6 +8,7 @@ exports.TestContext = void 0;
8
8
  exports.addColumnToCsv = addColumnToCsv;
9
9
  exports.addLogsToFile = addLogsToFile;
10
10
  exports.defaultLaunchParameters = void 0;
11
+ exports.escapeRegex = escapeRegex;
11
12
  exports.exitWithCode = exitWithCode;
12
13
  exports.getBrowserPage = getBrowserPage;
13
14
  exports.getDevKey = getDevKey;
@@ -182,22 +183,22 @@ const recorderConfig = exports.recorderConfig = {
182
183
  // aspectRatio: '16:9',
183
184
  };
184
185
  async function loadPackages(packagesDir, packagesToLoad, host, skipPublish, skipBuild, linkPackage, release) {
185
- let packagesToRun = new Map();
186
- let hostString = host === undefined ? `` : `${host}`;
187
- if (packagesToLoad !== "all") {
188
- for (let pacakgeName of (packagesToLoad ?? "").split(' ')) {
186
+ const packagesToRun = new Map();
187
+ const hostString = host === undefined ? `` : `${host}`;
188
+ if (packagesToLoad !== 'all') {
189
+ for (const pacakgeName of (packagesToLoad ?? '').split(' ')) {
189
190
  if ((pacakgeName ?? '').length !== 0) packagesToRun.set((0, _utils.spaceToCamelCase)(pacakgeName).toLocaleLowerCase(), false);
190
191
  }
191
192
  }
192
- for (let dirName of _fs.default.readdirSync(packagesDir)) {
193
- let packageDir = _path.default.join(packagesDir, dirName);
193
+ for (const dirName of _fs.default.readdirSync(packagesDir)) {
194
+ const packageDir = _path.default.join(packagesDir, dirName);
194
195
  if (!_fs.default.lstatSync(packageDir).isFile()) {
195
196
  try {
196
197
  const packageJsonData = JSON.parse(_fs.default.readFileSync(_path.default.join(packageDir, 'package.json'), {
197
198
  encoding: 'utf-8'
198
199
  }));
199
- const packageFriendlyName = packagesToRun.get((0, _utils.spaceToCamelCase)(packageJsonData["friendlyName"] ?? packageJsonData["name"].split("/")[1] ?? packageJsonData["name"] ?? '').toLocaleLowerCase() ?? "") ?? packagesToRun.get(dirName);
200
- if (utils.isPackageDir(packageDir) && (packageFriendlyName !== undefined || packagesToLoad === "all")) {
200
+ const packageFriendlyName = packagesToRun.get((0, _utils.spaceToCamelCase)(packageJsonData['friendlyName'] ?? packageJsonData['name'].split('/')[1] ?? packageJsonData['name'] ?? '').toLocaleLowerCase() ?? '') ?? packagesToRun.get(dirName);
201
+ if (utils.isPackageDir(packageDir) && (packageFriendlyName !== undefined || packagesToLoad === 'all')) {
201
202
  try {
202
203
  process.stdout.write(`Building and publishing ${dirName}...`);
203
204
  if (skipPublish != true) {
@@ -213,7 +214,7 @@ async function loadPackages(packagesDir, packagesToLoad, host, skipPublish, skip
213
214
  }
214
215
  }
215
216
  } catch (e) {
216
- if (utils.isPackageDir(packageDir) && (packagesToRun.get((0, _utils.spaceToCamelCase)(dirName).toLocaleLowerCase()) !== undefined || packagesToLoad === "all")) console.log(`Couldn't read package.json ${dirName}`);
217
+ if (utils.isPackageDir(packageDir) && (packagesToRun.get((0, _utils.spaceToCamelCase)(dirName).toLocaleLowerCase()) !== undefined || packagesToLoad === 'all')) console.log(`Couldn't read package.json ${dirName}`);
217
218
  }
218
219
  }
219
220
  }
@@ -222,7 +223,7 @@ async function loadPackages(packagesDir, packagesToLoad, host, skipPublish, skip
222
223
  ;
223
224
  }
224
225
  async function loadTestsList(packages, core = false) {
225
- var packageTestsData = await timeout(async () => {
226
+ const packageTestsData = await timeout(async () => {
226
227
  const params = Object.assign({}, defaultLaunchParameters);
227
228
  // params['headless'] = false;
228
229
  const out = await getBrowserPage(_puppeteer.default, params);
@@ -253,7 +254,7 @@ async function loadTestsList(packages, core = false) {
253
254
  }
254
255
  });
255
256
  } catch (err) {
256
- console.error("Error during evaluation in browser context:", err);
257
+ console.error('Error during evaluation in browser context:', err);
257
258
  reject();
258
259
  }
259
260
  Promise.all(promises).then(results => {
@@ -267,16 +268,14 @@ async function loadTestsList(packages, core = false) {
267
268
  });
268
269
  });
269
270
  }, packages, core);
270
- if (browser != null) {
271
- await browser.close();
272
- }
271
+ if (browser != null) await browser.close();
273
272
  return r;
274
273
  }, testCollectionTimeout);
275
- let testsList = [];
276
- for (let testPackage of packageTestsData) {
274
+ const testsList = [];
275
+ for (const testPackage of packageTestsData) {
277
276
  for (const key in testPackage.tests) {
278
277
  if (testPackage.tests.hasOwnProperty(key)) {
279
- for (let testValue of testPackage.tests[key].tests) {
278
+ for (const testValue of testPackage.tests[key].tests) {
280
279
  testValue.packageName = testPackage.packageName;
281
280
  testsList.push(testValue);
282
281
  }
@@ -291,26 +290,24 @@ function addLogsToFile(filePath, stringToSave) {
291
290
  function printBrowsersResult(browserResult, verbose = false) {
292
291
  if (verbose) {
293
292
  if ((browserResult.passedAmount ?? 0) > 0 && (browserResult.verbosePassed ?? []).length > 0) {
294
- console.log("Passed: ");
293
+ console.log('Passed: ');
295
294
  console.log(browserResult.verbosePassed);
296
295
  }
297
296
  if ((browserResult.skippedAmount ?? 0) > 0 && (browserResult.verboseSkipped ?? []).length > 0) {
298
- console.log("Skipped: ");
297
+ console.log('Skipped: ');
299
298
  console.log(browserResult.verboseSkipped);
300
299
  }
301
300
  }
302
301
  if ((browserResult.failedAmount ?? 0) > 0 && (browserResult.verboseFailed ?? []).length > 0) {
303
- console.log("Failed: ");
302
+ console.log('Failed: ');
304
303
  console.log(browserResult.verboseFailed);
305
304
  }
306
- console.log("Passed amount: " + browserResult?.passedAmount);
307
- console.log("Skipped amount: " + browserResult?.skippedAmount);
308
- console.log("Failed amount: " + browserResult?.failedAmount);
305
+ console.log('Passed amount: ' + browserResult?.passedAmount);
306
+ console.log('Skipped amount: ' + browserResult?.skippedAmount);
307
+ console.log('Failed amount: ' + browserResult?.failedAmount);
309
308
  if (browserResult.failed) {
310
309
  if (browserResult.verboseFailed === 'Package not found') color.fail('Tests not found');else color.fail('Tests failed.');
311
- } else {
312
- color.success('Tests passed.');
313
- }
310
+ } else color.success('Tests passed.');
314
311
  }
315
312
  function saveCsvResults(stringToSave, csvReportDir) {
316
313
  const modifiedStrings = stringToSave.map((str, index) => {
@@ -322,10 +319,10 @@ function saveCsvResults(stringToSave, csvReportDir) {
322
319
  }
323
320
  async function runTests(testsParams, stopOnFail) {
324
321
  let failed = false;
325
- let verbosePassed = "";
326
- let verboseSkipped = "";
327
- let verboseFailed = "";
328
- let error = "";
322
+ let verbosePassed = '';
323
+ let verboseSkipped = '';
324
+ let verboseFailed = '';
325
+ let error = '';
329
326
  let countPassed = 0;
330
327
  let countSkipped = 0;
331
328
  let countFailed = 0;
@@ -333,13 +330,15 @@ async function runTests(testsParams, stopOnFail) {
333
330
  let lastTest = null;
334
331
  let res = '';
335
332
  try {
336
- for (let testParam of testsParams) {
333
+ for (const testParam of testsParams) {
337
334
  lastTest = testParam;
338
- let df = await window.grok.functions.call(testParam.package + ':test', testParam.params);
339
- let flakingCol = window.DG.Column.fromType(window.DG.COLUMN_TYPE.BOOL, 'flaking', df.rowCount);
335
+ const df = await window.grok.functions.call(testParam.package + ':test', testParam.params);
336
+ const flakingCol = window.DG.Column.fromType(window.DG.COLUMN_TYPE.BOOL, 'flaking', df.rowCount);
340
337
  df.columns.add(flakingCol);
341
- let packageNameCol = window.DG.Column.fromList(window.DG.COLUMN_TYPE.STRING, 'package', Array(df.rowCount).fill(testParam.package));
342
- df.columns.add(packageNameCol);
338
+ if (!df.getCol('package')) {
339
+ const packageNameCol = window.DG.Column.fromList(window.DG.COLUMN_TYPE.STRING, 'package', Array(df.rowCount).fill(testParam.package));
340
+ df.columns.add(packageNameCol);
341
+ }
343
342
  if (df.rowCount === 0) {
344
343
  verboseFailed += `Test result : Invocation Fail : ${testParam.params.category}: ${testParam.params.test}\n`;
345
344
  countFailed += 1;
@@ -348,29 +347,30 @@ async function runTests(testsParams, stopOnFail) {
348
347
  }
349
348
  let row = df.rows.get(0);
350
349
  if (df.rowCount > 1) {
351
- let unhandledErrorRow = df.rows.get(1);
352
- if (!unhandledErrorRow.get("success")) {
353
- unhandledErrorRow["category"] = row.get("category");
354
- unhandledErrorRow["name"] = row.get("name");
350
+ const unhandledErrorRow = df.rows.get(1);
351
+ if (!unhandledErrorRow.get('success')) {
352
+ unhandledErrorRow['category'] = row.get('category');
353
+ unhandledErrorRow['name'] = row.get('name');
355
354
  row = unhandledErrorRow;
356
355
  }
357
356
  }
358
- const category = row.get("category");
359
- const testName = row.get("name");
360
- const time = row.get("ms");
361
- const result = row.get("result");
362
- const success = row.get("success");
363
- const skipped = row.get("skipped");
364
- row["flaking"] = success && window.DG.Test.isReproducing;
357
+ const category = row.get('category');
358
+ const testName = row.get('name');
359
+ const time = row.get('ms');
360
+ const result = row.get('result');
361
+ const success = row.get('success');
362
+ const skipped = row.get('skipped');
363
+ row['flaking'] = success && window.DG.Test.isReproducing;
365
364
  df.changeColumnType('result', window.DG.COLUMN_TYPE.STRING);
366
365
  df.changeColumnType('logs', window.DG.COLUMN_TYPE.STRING);
366
+ df.changeColumnType('widgetsDifference', window.DG.COLUMN_TYPE.STRING);
367
367
  // df.changeColumnType('memoryDelta', (<any>window).DG.COLUMN_TYPE.BIG_INT);
368
368
 
369
369
  if (resultDF === undefined) resultDF = df;else resultDF = resultDF.append(df);
370
- if (row["skipped"]) {
370
+ if (row['skipped']) {
371
371
  verboseSkipped += `Test result : Skipped : ${time} : ${category}: ${testName} : ${result}\n`;
372
372
  countSkipped += 1;
373
- } else if (row["success"]) {
373
+ } else if (row['success']) {
374
374
  verbosePassed += `Test result : Success : ${time} : ${category}: ${testName} : ${result}\n`;
375
375
  countPassed += 1;
376
376
  } else {
@@ -389,9 +389,7 @@ async function runTests(testsParams, stopOnFail) {
389
389
  const bs = window.DG.BitSet.create(resultDF.rowCount);
390
390
  bs.setAll(true);
391
391
  for (let i = 0; i < resultDF.rowCount; i++) {
392
- if (resultDF.rows.get(i).get('category') === 'Unhandled exceptions') {
393
- bs.set(i, false);
394
- }
392
+ if (resultDF.rows.get(i).get('category') === 'Unhandled exceptions') bs.set(i, false);
395
393
  }
396
394
  resultDF = resultDF.clone(bs);
397
395
  res = resultDF.toCsv();
@@ -414,7 +412,7 @@ async function runTests(testsParams, stopOnFail) {
414
412
  };
415
413
  }
416
414
  async function runBrowser(testExecutionData, browserOptions, browsersId, testInvocationTimeout = 3600000) {
417
- let testsToRun = {
415
+ const testsToRun = {
418
416
  func: runTests.toString(),
419
417
  tests: testExecutionData
420
418
  };
@@ -432,7 +430,7 @@ async function runBrowser(testExecutionData, browserOptions, browsersId, testInv
432
430
  const recordDir = `./test-record-${currentBrowserNum}.mp4`;
433
431
  if (browserOptions.record) {
434
432
  await recorder.start(recordDir);
435
- await page.exposeFunction("addLogsToFile", addLogsToFile);
433
+ await page.exposeFunction('addLogsToFile', addLogsToFile);
436
434
  _fs.default.writeFileSync(logsDir, ``);
437
435
  page.on('console', msg => {
438
436
  addLogsToFile(logsDir, `CONSOLE LOG ENTRY: ${msg.text()}\n`);
@@ -444,7 +442,7 @@ async function runBrowser(testExecutionData, browserOptions, browsersId, testInv
444
442
  addLogsToFile(logsDir, `CONSOLE LOG REQUEST: ${response.status()}, ${response.url()}\n`);
445
443
  });
446
444
  }
447
- let testingResults = await page.evaluate((testData, options) => {
445
+ const testingResults = await page.evaluate((testData, options) => {
448
446
  if (options.benchmark) window.DG.Test.isInBenchmark = true;
449
447
  if (options.reproduce) window.DG.Test.isReproducing = true;
450
448
  if (options.ciCd) window.DG.Test.isCiCd = true;
@@ -456,14 +454,14 @@ async function runBrowser(testExecutionData, browserOptions, browsersId, testInv
456
454
  }).catch(e => {
457
455
  resolve({
458
456
  failed: true,
459
- verbosePassed: "",
460
- verboseSkipped: "",
461
- verboseFailed: "",
457
+ verbosePassed: '',
458
+ verboseSkipped: '',
459
+ verboseFailed: '',
462
460
  error: JSON.stringify(e),
463
461
  passedAmount: 0,
464
462
  skippedAmount: 0,
465
463
  failedAmount: 1,
466
- csv: "",
464
+ csv: '',
467
465
  df: undefined
468
466
  });
469
467
  });
@@ -487,17 +485,13 @@ async function runBrowser(testExecutionData, browserOptions, browsersId, testInv
487
485
  // });
488
486
  });
489
487
  }, testsToRun, browserOptions);
490
- if (browserOptions.record) {
491
- await recorder.stop();
492
- }
493
- if (browser != null) {
494
- await browser.close();
495
- }
488
+ if (browserOptions.record) await recorder.stop();
489
+ if (browser != null) await browser.close();
496
490
  return testingResults;
497
491
  }, testInvocationTimeout);
498
492
  }
499
493
  async function mergeBrowsersResults(browsersResults) {
500
- let mergedResult = {
494
+ const mergedResult = {
501
495
  failed: browsersResults[0].failed,
502
496
  verbosePassed: browsersResults[0].verbosePassed,
503
497
  verboseSkipped: browsersResults[0].verboseSkipped,
@@ -508,7 +502,7 @@ async function mergeBrowsersResults(browsersResults) {
508
502
  csv: browsersResults[0].csv,
509
503
  error: ''
510
504
  };
511
- for (let browsersResult of browsersResults) {
505
+ for (const browsersResult of browsersResults) {
512
506
  if (mergedResult.csv === browsersResult.csv) continue;
513
507
  mergedResult.failed = mergedResult.failed || browsersResult.failed;
514
508
  mergedResult.verbosePassed = `${mergedResult.verbosePassed.trim()}\n${browsersResult.verbosePassed.trim()}`;
@@ -549,4 +543,7 @@ async function addColumnToCsv(csv, columnName, defaultValue) {
549
543
  }
550
544
  });
551
545
  return result;
546
+ }
547
+ function escapeRegex(s) {
548
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
552
549
  }
@@ -10,7 +10,7 @@
10
10
  "@datagrok-libraries/utils": "^4.6.0"
11
11
  },
12
12
  "devDependencies": {
13
- "datagrok-tools": "^4.14.32",
13
+ "datagrok-tools": "^4.14.34",
14
14
  "webpack": "^5.95.0",
15
15
  "webpack-cli": "^5.1.4"
16
16
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datagrok-tools",
3
- "version": "4.14.33",
3
+ "version": "4.14.35",
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": {
@@ -30,7 +30,8 @@
30
30
  "link": "npm link",
31
31
  "prepublishOnly": "babel bin --extensions .ts -d bin",
32
32
  "babel": "babel bin --extensions .ts -d bin",
33
- "build": "babel bin --extensions .ts -d bin"
33
+ "build": "babel bin --extensions .ts -d bin",
34
+ "debug-source-map": "babel bin --extensions .ts -d bin --source-maps true"
34
35
  },
35
36
  "bin": {
36
37
  "datagrok-upload": "./bin/_deprecated/upload.js",