@testingbot/cli 1.0.4 → 1.0.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.
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAwkB9B,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA6kB9B,eAAe,OAAO,CAAC"}
package/dist/cli.js CHANGED
@@ -1,10 +1,43 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  const commander_1 = require("commander");
7
- const logger_1 = __importDefault(require("./logger"));
40
+ const logger_1 = __importStar(require("./logger"));
8
41
  const auth_1 = __importDefault(require("./auth"));
9
42
  const espresso_1 = __importDefault(require("./providers/espresso"));
10
43
  const espresso_options_1 = __importDefault(require("./models/espresso_options"));
@@ -183,6 +216,7 @@ const maestroCommand = program
183
216
  // Authentication
184
217
  .option('--api-key <key>', 'TestingBot API key.')
185
218
  .option('--api-secret <secret>', 'TestingBot API secret.')
219
+ .option('--debug', 'Enable debug logging of API responses.')
186
220
  .action(async (appFileArg, flowsArgs, args) => {
187
221
  try {
188
222
  let app;
@@ -245,6 +279,7 @@ const maestroCommand = program
245
279
  artifactsOutputDir: args.artifactsOutputDir,
246
280
  ignoreChecksumCheck: args.ignoreChecksumCheck,
247
281
  shardSplit: args.shardSplit,
282
+ debug: args.debug,
248
283
  metadata,
249
284
  });
250
285
  const credentials = await auth_1.default.getCredentials({
@@ -258,6 +293,9 @@ const maestroCommand = program
258
293
  ' 3. Set TB_KEY and TB_SECRET environment variables\n' +
259
294
  ' 4. Create ~/.testingbot file with content: key:secret');
260
295
  }
296
+ if (args.debug) {
297
+ (0, logger_1.enableDebugLogging)();
298
+ }
261
299
  const maestro = new maestro_1.default(credentials, options);
262
300
  const result = await maestro.run();
263
301
  if (!result.success) {
package/dist/logger.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import tracer from 'tracer';
2
2
  declare const logger: tracer.Tracer.Logger<string>;
3
+ export declare function enableDebugLogging(): void;
3
4
  export default logger;
4
5
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,QAAA,MAAM,MAAM,8BAWV,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,QAAA,MAAM,MAAM,8BAWV,CAAC;AAEH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,eAAe,MAAM,CAAC"}
package/dist/logger.js CHANGED
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.enableDebugLogging = enableDebugLogging;
6
7
  const picocolors_1 = __importDefault(require("picocolors"));
7
8
  const tracer_1 = __importDefault(require("tracer"));
8
9
  const logger = tracer_1.default.colorConsole({
@@ -17,4 +18,7 @@ const logger = tracer_1.default.colorConsole({
17
18
  },
18
19
  ],
19
20
  });
21
+ function enableDebugLogging() {
22
+ tracer_1.default.setLevel('debug');
23
+ }
20
24
  exports.default = logger;
@@ -58,6 +58,7 @@ export default class MaestroOptions {
58
58
  private _artifactsOutputDir?;
59
59
  private _ignoreChecksumCheck;
60
60
  private _shardSplit?;
61
+ private _debug;
61
62
  private _metadata?;
62
63
  constructor(app: string, flows: string | string[], device?: string, options?: {
63
64
  includeTags?: string[];
@@ -81,6 +82,7 @@ export default class MaestroOptions {
81
82
  artifactsOutputDir?: string;
82
83
  ignoreChecksumCheck?: boolean;
83
84
  shardSplit?: number;
85
+ debug?: boolean;
84
86
  metadata?: RunMetadata;
85
87
  });
86
88
  get app(): string;
@@ -107,6 +109,7 @@ export default class MaestroOptions {
107
109
  get artifactsOutputDir(): string | undefined;
108
110
  get ignoreChecksumCheck(): boolean;
109
111
  get shardSplit(): number | undefined;
112
+ get debug(): boolean;
110
113
  get metadata(): RunMetadata | undefined;
111
114
  getMaestroOptions(): MaestroRunOptions | undefined;
112
115
  getCapabilities(detectedPlatform?: 'Android' | 'iOS'): MaestroCapabilities;
@@ -1 +1 @@
1
- {"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,7 @@ class MaestroOptions {
28
28
  _artifactsOutputDir;
29
29
  _ignoreChecksumCheck;
30
30
  _shardSplit;
31
+ _debug;
31
32
  // Metadata
32
33
  _metadata;
33
34
  constructor(app, flows, device, options) {
@@ -51,11 +52,13 @@ class MaestroOptions {
51
52
  this._report = options?.report;
52
53
  this._reportOutputDir = options?.reportOutputDir;
53
54
  // IPA files can only be tested on real iOS devices, so automatically enable realDevice
54
- this._realDevice = MaestroOptions.isIpaFile(app) || (options?.realDevice ?? false);
55
+ this._realDevice =
56
+ MaestroOptions.isIpaFile(app) || (options?.realDevice ?? false);
55
57
  this._downloadArtifacts = options?.downloadArtifacts;
56
58
  this._artifactsOutputDir = options?.artifactsOutputDir;
57
59
  this._ignoreChecksumCheck = options?.ignoreChecksumCheck ?? false;
58
60
  this._shardSplit = options?.shardSplit;
61
+ this._debug = options?.debug ?? false;
59
62
  this._metadata = options?.metadata;
60
63
  }
61
64
  get app() {
@@ -130,6 +133,9 @@ class MaestroOptions {
130
133
  get shardSplit() {
131
134
  return this._shardSplit;
132
135
  }
136
+ get debug() {
137
+ return this._debug;
138
+ }
133
139
  get metadata() {
134
140
  return this._metadata;
135
141
  }
@@ -105,7 +105,7 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
105
105
  * This validates that all referenced files (runScript, runFlow, addMedia, etc.)
106
106
  * will be included in the zip.
107
107
  */
108
- findMissingReferences(flowFiles: string[], allIncludedFiles: string[], baseDir?: string): Promise<MissingFileReference[]>;
108
+ findMissingReferences(flowFiles: string[], allIncludedFiles: string[]): Promise<MissingFileReference[]>;
109
109
  /**
110
110
  * Recursively find missing file references in a YAML value
111
111
  */
@@ -116,6 +116,10 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
116
116
  private logMissingReferences;
117
117
  private logIncludedFiles;
118
118
  private createFlowsZip;
119
+ /**
120
+ * Compute the common parent directory of all files
121
+ */
122
+ private computeCommonDirectory;
119
123
  private runTests;
120
124
  private getStatus;
121
125
  private waitForCompletion;
@@ -1 +1 @@
1
- {"version":3,"file":"maestro.d.ts","sourceRoot":"","sources":["../../src/providers/maestro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"maestro.d.ts","sourceRoot":"","sources":["../../src/providers/maestro.ts"],"names":[],"mappings":"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"}
@@ -279,7 +279,6 @@ class Maestro extends base_provider_1.default {
279
279
  async uploadFlows() {
280
280
  const flowsPaths = this.options.flows;
281
281
  let zipPath;
282
- let shouldCleanup = false;
283
282
  // Special case: single zip file - upload directly
284
283
  if (flowsPaths.length === 1) {
285
284
  const singlePath = flowsPaths[0];
@@ -342,6 +341,22 @@ class Maestro extends base_provider_1.default {
342
341
  // Determine base directory for zip structure
343
342
  // If we have a single directory, use it as base; otherwise use common ancestor or flatten
344
343
  const baseDir = baseDirs.length === 1 ? baseDirs[0] : undefined;
344
+ // Discover dependencies (addMedia, runScript, runFlow, etc.) for all flow files
345
+ // This ensures referenced files are included even when individual YAML files are passed
346
+ const allFilesSet = new Set(allFlowFiles.map((f) => node_path_1.default.resolve(f)));
347
+ for (const flowFile of [...allFlowFiles]) {
348
+ const ext = node_path_1.default.extname(flowFile).toLowerCase();
349
+ if (ext === '.yaml' || ext === '.yml') {
350
+ const deps = await this.discoverDependencies(flowFile, baseDir || node_path_1.default.dirname(flowFile));
351
+ for (const dep of deps) {
352
+ const resolved = node_path_1.default.resolve(dep);
353
+ if (!allFilesSet.has(resolved)) {
354
+ allFilesSet.add(resolved);
355
+ allFlowFiles.push(dep);
356
+ }
357
+ }
358
+ }
359
+ }
345
360
  if (!this.options.quiet) {
346
361
  this.logIncludedFiles(allFlowFiles, baseDir);
347
362
  // Show info about potential slow execution on specific real devices
@@ -349,17 +364,18 @@ class Maestro extends base_provider_1.default {
349
364
  realDevice: this.options.realDevice,
350
365
  device: this.options.device,
351
366
  version: this.options.version,
352
- flowCount: allFlowFiles.filter((f) => f.endsWith('.yaml') || f.endsWith('.yml')).filter((f) => !this.isConfigFile(f)).length,
367
+ flowCount: allFlowFiles
368
+ .filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'))
369
+ .filter((f) => !this.isConfigFile(f)).length,
353
370
  shardSplit: this.options.shardSplit,
354
371
  });
355
372
  }
356
373
  // Check for missing file references and warn the user
357
- const missingReferences = await this.findMissingReferences(allFlowFiles, allFlowFiles, baseDir);
374
+ const missingReferences = await this.findMissingReferences(allFlowFiles, allFlowFiles);
358
375
  if (!this.options.quiet && missingReferences.length > 0) {
359
376
  this.logMissingReferences(missingReferences, baseDir);
360
377
  }
361
378
  zipPath = await this.createFlowsZip(allFlowFiles, baseDir);
362
- shouldCleanup = true;
363
379
  try {
364
380
  await this.upload.upload({
365
381
  filePath: zipPath,
@@ -370,9 +386,7 @@ class Maestro extends base_provider_1.default {
370
386
  });
371
387
  }
372
388
  finally {
373
- if (shouldCleanup) {
374
- await node_fs_1.default.promises.unlink(zipPath).catch(() => { });
375
- }
389
+ await node_fs_1.default.promises.unlink(zipPath).catch(() => { });
376
390
  }
377
391
  return true;
378
392
  }
@@ -621,7 +635,7 @@ class Maestro extends base_provider_1.default {
621
635
  * This validates that all referenced files (runScript, runFlow, addMedia, etc.)
622
636
  * will be included in the zip.
623
637
  */
624
- async findMissingReferences(flowFiles, allIncludedFiles, baseDir) {
638
+ async findMissingReferences(flowFiles, allIncludedFiles) {
625
639
  const missingReferences = [];
626
640
  const includedFilesSet = new Set(allIncludedFiles.map((f) => node_path_1.default.resolve(f)));
627
641
  for (const flowFile of flowFiles) {
@@ -654,20 +668,12 @@ class Maestro extends base_provider_1.default {
654
668
  if (typeof value === 'string') {
655
669
  if (this.looksLikePath(value)) {
656
670
  const resolvedPath = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), value);
657
- // Check if the file is in included files OR exists on disk
658
671
  if (!includedFiles.has(resolvedPath)) {
659
- try {
660
- await node_fs_1.default.promises.access(resolvedPath);
661
- // File exists on disk but won't be included - also warn
662
- }
663
- catch {
664
- // File doesn't exist
665
- missingReferences.push({
666
- flowFile,
667
- referencedFile: value,
668
- resolvedPath,
669
- });
670
- }
672
+ missingReferences.push({
673
+ flowFile,
674
+ referencedFile: value,
675
+ resolvedPath,
676
+ });
671
677
  }
672
678
  }
673
679
  }
@@ -691,16 +697,11 @@ class Maestro extends base_provider_1.default {
691
697
  if (typeof scriptFile === 'string') {
692
698
  const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), scriptFile);
693
699
  if (!includedFiles.has(resolved)) {
694
- try {
695
- await node_fs_1.default.promises.access(resolved);
696
- }
697
- catch {
698
- missingReferences.push({
699
- flowFile,
700
- referencedFile: scriptFile,
701
- resolvedPath: resolved,
702
- });
703
- }
700
+ missingReferences.push({
701
+ flowFile,
702
+ referencedFile: scriptFile,
703
+ resolvedPath: resolved,
704
+ });
704
705
  }
705
706
  }
706
707
  // Don't recurse into runScript - it only has file, env, when (no nested file refs)
@@ -715,16 +716,11 @@ class Maestro extends base_provider_1.default {
715
716
  if (typeof flowRef === 'string') {
716
717
  const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), flowRef);
717
718
  if (!includedFiles.has(resolved)) {
718
- try {
719
- await node_fs_1.default.promises.access(resolved);
720
- }
721
- catch {
722
- missingReferences.push({
723
- flowFile,
724
- referencedFile: flowRef,
725
- resolvedPath: resolved,
726
- });
727
- }
719
+ missingReferences.push({
720
+ flowFile,
721
+ referencedFile: flowRef,
722
+ resolvedPath: resolved,
723
+ });
728
724
  }
729
725
  }
730
726
  // Only recurse into 'commands' if present (for inline commands)
@@ -747,16 +743,11 @@ class Maestro extends base_provider_1.default {
747
743
  if (typeof mediaFile === 'string') {
748
744
  const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), mediaFile);
749
745
  if (!includedFiles.has(resolved)) {
750
- try {
751
- await node_fs_1.default.promises.access(resolved);
752
- }
753
- catch {
754
- missingReferences.push({
755
- flowFile,
756
- referencedFile: mediaFile,
757
- resolvedPath: resolved,
758
- });
759
- }
746
+ missingReferences.push({
747
+ flowFile,
748
+ referencedFile: mediaFile,
749
+ resolvedPath: resolved,
750
+ });
760
751
  }
761
752
  }
762
753
  }
@@ -766,16 +757,11 @@ class Maestro extends base_provider_1.default {
766
757
  handledKeys.add('file');
767
758
  const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), obj.file);
768
759
  if (!includedFiles.has(resolved)) {
769
- try {
770
- await node_fs_1.default.promises.access(resolved);
771
- }
772
- catch {
773
- missingReferences.push({
774
- flowFile,
775
- referencedFile: obj.file,
776
- resolvedPath: resolved,
777
- });
778
- }
760
+ missingReferences.push({
761
+ flowFile,
762
+ referencedFile: obj.file,
763
+ resolvedPath: resolved,
764
+ });
779
765
  }
780
766
  }
781
767
  // Handle onFlowStart, onFlowComplete, commands
@@ -817,8 +803,9 @@ class Maestro extends base_provider_1.default {
817
803
  }
818
804
  logIncludedFiles(files, baseDir) {
819
805
  // Get relative paths for display
806
+ const effectiveBase = baseDir || this.computeCommonDirectory(files);
820
807
  const relativePaths = files
821
- .map((f) => (baseDir ? node_path_1.default.relative(baseDir, f) : node_path_1.default.basename(f)))
808
+ .map((f) => node_path_1.default.relative(effectiveBase, f))
822
809
  .sort();
823
810
  // Group by file type
824
811
  const groups = {
@@ -872,20 +859,38 @@ class Maestro extends base_provider_1.default {
872
859
  output.on('close', () => resolve(zipPath));
873
860
  archive.on('error', (err) => reject(err));
874
861
  archive.pipe(output);
862
+ // Compute effective base directory for archive paths
863
+ const effectiveBase = baseDir || this.computeCommonDirectory(files);
875
864
  for (const file of files) {
876
- // Determine the name in the archive
877
- let archiveName;
878
- if (baseDir) {
879
- archiveName = node_path_1.default.relative(baseDir, file);
880
- }
881
- else {
882
- archiveName = node_path_1.default.basename(file);
883
- }
865
+ const archiveName = node_path_1.default.relative(effectiveBase, file);
884
866
  archive.file(file, { name: archiveName });
885
867
  }
886
868
  archive.finalize();
887
869
  });
888
870
  }
871
+ /**
872
+ * Compute the common parent directory of all files
873
+ */
874
+ computeCommonDirectory(files) {
875
+ if (files.length === 0)
876
+ return process.cwd();
877
+ if (files.length === 1)
878
+ return node_path_1.default.dirname(files[0]);
879
+ const dirs = files.map((f) => node_path_1.default.dirname(node_path_1.default.resolve(f)));
880
+ const parts = dirs[0].split(node_path_1.default.sep);
881
+ let commonLength = parts.length;
882
+ for (let i = 1; i < dirs.length; i++) {
883
+ const dirParts = dirs[i].split(node_path_1.default.sep);
884
+ commonLength = Math.min(commonLength, dirParts.length);
885
+ for (let j = 0; j < commonLength; j++) {
886
+ if (parts[j] !== dirParts[j]) {
887
+ commonLength = j;
888
+ break;
889
+ }
890
+ }
891
+ }
892
+ return parts.slice(0, commonLength).join(node_path_1.default.sep) || node_path_1.default.sep;
893
+ }
889
894
  async runTests() {
890
895
  try {
891
896
  const capabilities = this.options.getCapabilities(this.detectedPlatform);
@@ -950,6 +955,9 @@ class Maestro extends base_provider_1.default {
950
955
  // Check for version update notification
951
956
  const latestVersion = response.headers?.['x-testingbotctl-version'];
952
957
  utils_1.default.checkForUpdate(latestVersion);
958
+ if (this.options.debug) {
959
+ logger_1.default.debug(`API response: ${JSON.stringify(response.data, null, 2)}`);
960
+ }
953
961
  return response.data;
954
962
  });
955
963
  }
@@ -94,7 +94,7 @@ async function checkInternetConnectivity() {
94
94
  message: `Internet connectivity verified via ${successResult.endpoint} (${successResult.latencyMs}ms)`,
95
95
  };
96
96
  }
97
- catch (aggregateError) {
97
+ catch {
98
98
  // All endpoints failed - collect all results
99
99
  const endpointResults = await Promise.all(endpointPromises);
100
100
  const testedEndpoints = endpointResults.map((r) => r.endpoint).join(', ');
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";oBAQkB,MAAM;yBAID,MAAM;IAI3B;;;OAGG;wBACiB,MAAM,MAAM,MAAM,GAAG,MAAM;IAa/C;;OAEG;6BACsB,MAAM,GAAG,SAAS,GAAG,OAAO;IAMrD;;OAEG;+BACwB,MAAM,GAAG,SAAS,GAAG,OAAO;IAMvD;;OAEG;qCAC8B;QAC/B,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI;IAuDR;;OAEG;kCAC2B,MAAM,GAAG,SAAS,GAAG,IAAI;;AA/GzD,wBAyIE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";oBAQkB,MAAM;yBAID,MAAM;IAI3B;;;OAGG;wBACiB,MAAM,MAAM,MAAM,GAAG,MAAM;IAa/C;;OAEG;6BACsB,MAAM,GAAG,SAAS,GAAG,OAAO;IAWrD;;OAEG;+BACwB,MAAM,GAAG,SAAS,GAAG,OAAO;IAWvD;;OAEG;qCAC8B;QAC/B,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI;IAyDR;;OAEG;kCAC2B,MAAM,GAAG,SAAS,GAAG,IAAI;;AA3HzD,wBAqJE"}
package/dist/utils.js CHANGED
@@ -39,7 +39,10 @@ exports.default = {
39
39
  if (!device)
40
40
  return true;
41
41
  // Check for common wildcard/regex characters
42
- return device === '*' || device.includes('*') || device.includes('?') || device.includes('.*');
42
+ return (device === '*' ||
43
+ device.includes('*') ||
44
+ device.includes('?') ||
45
+ device.includes('.*'));
43
46
  },
44
47
  /**
45
48
  * Check if a version specification is a wildcard or regex pattern
@@ -48,7 +51,10 @@ exports.default = {
48
51
  if (!version)
49
52
  return true;
50
53
  // Check for common wildcard/regex characters
51
- return version === '*' || version.includes('*') || version.includes('?') || version.includes('.*');
54
+ return (version === '*' ||
55
+ version.includes('*') ||
56
+ version.includes('?') ||
57
+ version.includes('.*'));
52
58
  },
53
59
  /**
54
60
  * Show info message when running many flows on a specific real device without sharding
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testingbot/cli",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "CLI tool to run Espresso, XCUITest and Maestro tests on TestingBot's cloud infrastructure",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -60,18 +60,18 @@
60
60
  "tracer": "^1.3.0"
61
61
  },
62
62
  "devDependencies": {
63
- "@eslint/js": "^9.39.1",
63
+ "@eslint/js": "^10.0.1",
64
64
  "@tsconfig/node20": "^20.1.8",
65
65
  "@types/archiver": "^7.0.0",
66
- "@types/jest": "^29.5.14",
66
+ "@types/jest": "^30.0.0",
67
67
  "@types/js-yaml": "^4.0.9",
68
- "@types/node": "^20.19.0",
68
+ "@types/node": "^25.4.0",
69
69
  "@types/progress-stream": "^2.0.5",
70
- "babel-jest": "^29.7.0",
71
- "eslint": "^9.39.1",
70
+ "babel-jest": "^30.3.0",
71
+ "eslint": "^10.0.3",
72
72
  "eslint-config-prettier": "^10.1.8",
73
73
  "eslint-plugin-prettier": "^5.5.4",
74
- "jest": "^29.7.0",
74
+ "jest": "^30.3.0",
75
75
  "prettier": "^3.7.4",
76
76
  "ts-jest": "^29.4.6",
77
77
  "typescript": "^5.9.3",