@testim/testim-cli 3.284.0 → 3.285.0

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.
@@ -7,9 +7,11 @@
7
7
  const fs = require('fs');
8
8
  const childProcess = require('child_process');
9
9
  const path = require('path');
10
+ const chalk = require('chalk');
10
11
  const validateNpmPackageName = require('validate-npm-package-name');
11
12
  const { promisify } = require('util');
12
13
  const { ArgError } = require('../errors.js');
14
+ const { copyDir } = require('../utils/fsUtils');
13
15
 
14
16
  const exec = promisify(childProcess.exec);
15
17
 
@@ -40,10 +42,12 @@ module.exports.init = async function init(name) {
40
42
  const nameValidity = validateNpmPackageName(packageName);
41
43
 
42
44
  if (!nameValidity.validForNewPackages) {
43
- if (nameValidity.errors) nameValidity.errors.forEach((e) => console.log(e));
44
- if (nameValidity.warnings) nameValidity.warnings.forEach((e) => console.log(e));
45
+ const message = `The name '${packageName}' is not a valid package name:`;
46
+ console.log(chalk.red(message));
47
+ if (nameValidity.errors) nameValidity.errors.forEach((e) => console.log(chalk.red(e)));
48
+ if (nameValidity.warnings) nameValidity.warnings.forEach((e) => console.log(chalk.yellowBright(`warning: ${e}`)));
45
49
 
46
- throw new ArgError('Package name is not valid');
50
+ throw new ArgError(`${message}\nvalidation errors:\n${nameValidity.errors?.join('\n') || ''}\nwarnings:\n${nameValidity.warnings?.join('\n') || ''}`);
47
51
  }
48
52
 
49
53
  const response = await prompts({
@@ -55,14 +59,14 @@ module.exports.init = async function init(name) {
55
59
  inactive: 'yes',
56
60
  });
57
61
 
58
- const sourceFolder = response.isJs ? 'template.js' : 'template.ts';
62
+ const sourceFolder = response.isJs ? 'template.js' : 'template.ts'; // these are directories and not file names
59
63
 
60
64
  const source = path.join(__dirname, sourceFolder);
61
- const dest = path.join(process.cwd(), name);
65
+ const destDir = path.join(process.cwd(), name);
62
66
 
63
- let spinner = ora(`Creating new test project in ${dest}`).start();
67
+ let spinner = ora(`Creating new test project in ${destDir}`).start();
64
68
 
65
- await fs.promises.copyFile(source, dest);
69
+ await copyDir(source, destDir);
66
70
 
67
71
  const sourcePackageJson = path.join(__dirname, sourceFolder, 'package.json');
68
72
  const destPackageJson = path.join(process.cwd(), name, 'package.json');
@@ -79,9 +83,9 @@ module.exports.init = async function init(name) {
79
83
 
80
84
  spinner.succeed();
81
85
  spinner = ora('Installing dependencies').start();
82
- await exec('npm install', { cwd: dest });
86
+ await exec('npm install', { cwd: destDir });
83
87
 
84
88
  spinner.succeed();
85
89
 
86
- console.log(`Testim Dev Kit project folder successfully created in ${dest}.`);
90
+ console.log(`Testim Dev Kit project folder successfully created in ${destDir}.`);
87
91
  };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@testim/testim-cli",
3
- "version": "3.284.0",
3
+ "version": "3.285.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@testim/testim-cli",
9
- "version": "3.284.0",
9
+ "version": "3.285.0",
10
10
  "license": "Proprietary",
11
11
  "dependencies": {
12
12
  "@applitools/eyes-sdk-core": "13.11.21",
@@ -62,7 +62,7 @@
62
62
  "superagent-proxy": "3.0.0",
63
63
  "test-exclude": "6.0.0",
64
64
  "threads": "0.12.0",
65
- "ua-parser-js": "0.7.28",
65
+ "ua-parser-js": "0.7.33",
66
66
  "validate-npm-package-name": "3.0.0",
67
67
  "webdriverio": "7.24.0",
68
68
  "winston": "3.6.0",
@@ -226,6 +226,7 @@
226
226
  "version": "1.1.35",
227
227
  "resolved": "https://registry.npmjs.org/@applitools/execution-grid-client/-/execution-grid-client-1.1.35.tgz",
228
228
  "integrity": "sha512-C5F7u0feVoQ9kncFiVSM2jqNHjAmz+VUdY55TfZuchq1CzSQv34pxhra5OlU62TZ74Cs4Uz0gv+tJYeGb6oeYA==",
229
+ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
229
230
  "dependencies": {
230
231
  "@applitools/logger": "1.1.30",
231
232
  "@applitools/utils": "1.3.16",
@@ -1328,9 +1329,9 @@
1328
1329
  }
1329
1330
  },
1330
1331
  "node_modules/acorn": {
1331
- "version": "8.8.1",
1332
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
1333
- "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
1332
+ "version": "8.8.2",
1333
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
1334
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
1334
1335
  "bin": {
1335
1336
  "acorn": "bin/acorn"
1336
1337
  },
@@ -4215,9 +4216,9 @@
4215
4216
  "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
4216
4217
  },
4217
4218
  "node_modules/devtools/node_modules/ua-parser-js": {
4218
- "version": "1.0.32",
4219
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.32.tgz",
4220
- "integrity": "sha512-dXVsz3M4j+5tTiovFVyVqssXBu5HM47//YSOeZ9fQkdDKkfzv2v3PP1jmH6FUyPW+yCSn7aBVK1fGGKNhowdDA==",
4219
+ "version": "1.0.33",
4220
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz",
4221
+ "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==",
4221
4222
  "funding": [
4222
4223
  {
4223
4224
  "type": "opencollective",
@@ -14787,9 +14788,9 @@
14787
14788
  }
14788
14789
  },
14789
14790
  "node_modules/ua-parser-js": {
14790
- "version": "0.7.28",
14791
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
14792
- "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==",
14791
+ "version": "0.7.33",
14792
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz",
14793
+ "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==",
14793
14794
  "funding": [
14794
14795
  {
14795
14796
  "type": "opencollective",
@@ -16835,9 +16836,9 @@
16835
16836
  }
16836
16837
  },
16837
16838
  "acorn": {
16838
- "version": "8.8.1",
16839
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
16840
- "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA=="
16839
+ "version": "8.8.2",
16840
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
16841
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
16841
16842
  },
16842
16843
  "acorn-globals": {
16843
16844
  "version": "6.0.0",
@@ -19136,9 +19137,9 @@
19136
19137
  "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
19137
19138
  },
19138
19139
  "ua-parser-js": {
19139
- "version": "1.0.32",
19140
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.32.tgz",
19141
- "integrity": "sha512-dXVsz3M4j+5tTiovFVyVqssXBu5HM47//YSOeZ9fQkdDKkfzv2v3PP1jmH6FUyPW+yCSn7aBVK1fGGKNhowdDA=="
19140
+ "version": "1.0.33",
19141
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz",
19142
+ "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ=="
19142
19143
  }
19143
19144
  }
19144
19145
  },
@@ -27217,9 +27218,9 @@
27217
27218
  "devOptional": true
27218
27219
  },
27219
27220
  "ua-parser-js": {
27220
- "version": "0.7.28",
27221
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
27222
- "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g=="
27221
+ "version": "0.7.33",
27222
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz",
27223
+ "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw=="
27223
27224
  },
27224
27225
  "unbzip2-stream": {
27225
27226
  "version": "1.4.3",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testim/testim-cli",
3
- "version": "3.284.0",
3
+ "version": "3.285.0",
4
4
  "description": "Command line interface for running Testing on your CI",
5
5
  "author": "Oren Rubin",
6
6
  "contributors": [{
@@ -38,7 +38,7 @@
38
38
  "istanbul-lib-coverage": "3.0.0",
39
39
  "@bcoe/v8-coverage": "0.2.3",
40
40
  "convert-source-map": "1.7.0",
41
- "multer": "1.4.4"
41
+ "multer": "1.4.5-lts.1"
42
42
  },
43
43
  "dependencies": {
44
44
  "@applitools/eyes-sdk-core": "13.11.21",
@@ -94,7 +94,7 @@
94
94
  "superagent-proxy": "3.0.0",
95
95
  "test-exclude": "6.0.0",
96
96
  "threads": "0.12.0",
97
- "ua-parser-js": "0.7.28",
97
+ "ua-parser-js": "0.7.33",
98
98
  "validate-npm-package-name": "3.0.0",
99
99
  "webdriverio": "7.24.0",
100
100
  "winston": "3.6.0",
@@ -20,6 +20,7 @@ const LT_TUNNEL_BINARY_PATHNAME = {
20
20
  win32x64: 'windows/64bit/LT_Windows.zip',
21
21
  darwinia32: 'mac/32bit/LT_Mac.zip',
22
22
  darwinx64: 'mac/64bit/LT_Mac.zip',
23
+ darwinarm64: 'mac/64bit/LT_Mac.zip',
23
24
  linuxia32: 'linux/32bit/LT_Linux.zip',
24
25
  linuxx64: 'linux/64bit/LT_Linux.zip',
25
26
  freebsdia32: 'freebsd/32bit/LT_Freebsd.zip',
package/utils/fsUtils.js CHANGED
@@ -138,6 +138,25 @@ async function getEnginesVersionAsync() {
138
138
  }
139
139
  }
140
140
 
141
+ /**
142
+ * @param {string} src Source directory to copy its contents
143
+ * @param {string} dest Target directory to copy to
144
+ * @param {boolean} [createParentDirs=true] Whether to create parent directories
145
+ */
146
+ async function copyDir(src, dest, createParentDirs = true) {
147
+ const dirents = await fsPromises.readdir(src, { withFileTypes: true });
148
+ await fsPromises.mkdir(dest, { recursive: createParentDirs });
149
+ for (const item of dirents) {
150
+ const srcPath = path.join(src, item.name);
151
+ const destPath = path.join(dest, item.name);
152
+ if (item.isDirectory()) {
153
+ await copyDir(srcPath, destPath);
154
+ } else {
155
+ await fsPromises.copyFile(srcPath, destPath);
156
+ }
157
+ }
158
+ }
159
+
141
160
  module.exports = {
142
161
  getCliLocation,
143
162
  download,
@@ -151,4 +170,5 @@ module.exports = {
151
170
  getRunnerVersion,
152
171
  getEnginesVersion,
153
172
  getEnginesVersionAsync,
173
+ copyDir,
154
174
  };