@flakiness/sdk 2.2.1 → 2.3.1

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/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Tests](https://img.shields.io/endpoint?url=https%3A%2F%2Fflakiness.io%2Fapi%2Fbadge%3Finput%3D%257B%2522badgeToken%2522%253A%2522badge-5qUBbhdeYquEDJyBxGAv2X%2522%257D)](https://flakiness.io/flakiness/nodejs-sdk)
2
+
1
3
  # Flakiness Node.js SDK
2
4
 
3
5
  The Flakiness SDK provides a comprehensive set of tools for creating and managing [Flakiness JSON Reports](https://github.com/flakiness/flakiness-report) in Node.js.
@@ -8,6 +10,8 @@ The Flakiness SDK provides a comprehensive set of tools for creating and managin
8
10
  npm i @flakiness/sdk @flakiness/flakiness-report
9
11
  ```
10
12
 
13
+ Requires Node.js 22+.
14
+
11
15
  ## Quick Start
12
16
 
13
17
  Here's a minimal example of creating a Flakiness JSON Report:
@@ -94,6 +98,7 @@ Use this entry point when you need to process or manipulate reports in browser-b
94
98
  ### Working with Reports
95
99
  - **`readReport()`** - Read a Flakiness report and its attachments from disk
96
100
  - **`showReport()`** - Start a local server and open the report in your browser
101
+ - **`showReportCommand()`** - Build a shell command for opening the report later with the Flakiness CLI
97
102
  - **`uploadReport()`** - Upload reports and attachments to Flakiness.io
98
103
  - **`writeReport()`** - Write reports to disk in the standard Flakiness report format
99
104
 
@@ -123,4 +128,3 @@ Use this entry point when you need to process or manipulate reports in browser-b
123
128
  ```
124
129
 
125
130
  If neither method is available, the upload is skipped with a `'skipped'` status.
126
-
package/lib/browser.js CHANGED
@@ -13,7 +13,7 @@ __export(reportUtilsBrowser_exports, {
13
13
  visitTests: () => visitTests
14
14
  });
15
15
 
16
- // node_modules/.pnpm/@flakiness+flakiness-report@0.27.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/flakinessReport.js
16
+ // node_modules/.pnpm/@flakiness+flakiness-report@0.28.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/flakinessReport.js
17
17
  var FlakinessReport;
18
18
  ((FlakinessReport22) => {
19
19
  FlakinessReport22.CATEGORY_PLAYWRIGHT = "playwright";
@@ -23,7 +23,7 @@ var FlakinessReport;
23
23
  FlakinessReport22.STREAM_STDERR = 2;
24
24
  })(FlakinessReport || (FlakinessReport = {}));
25
25
 
26
- // node_modules/.pnpm/@flakiness+flakiness-report@0.27.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/schema.js
26
+ // node_modules/.pnpm/@flakiness+flakiness-report@0.28.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/schema.js
27
27
  import z from "zod/v4";
28
28
  var Schema;
29
29
  ((Schema2) => {
@@ -138,8 +138,15 @@ var Schema;
138
138
  samples: z.array(Schema2.SystemUtilizationSample)
139
139
  });
140
140
  Schema2.UtilizationTelemetry = z.tuple([Schema2.DurationMS, z.number().min(0).max(100)]);
141
+ Schema2.Source = z.object({
142
+ filePath: Schema2.GitFilePath,
143
+ text: z.string(),
144
+ lineOffset: z.number().optional(),
145
+ contentType: z.string().optional()
146
+ });
141
147
  Schema2.FlakinessProject = z.string();
142
148
  Schema2.Report = z.object({
149
+ sources: z.array(Schema2.Source).optional(),
143
150
  flakinessProject: Schema2.FlakinessProject.optional(),
144
151
  category: z.string().min(1).max(100),
145
152
  commitId: Schema2.CommitId,
package/lib/index.js CHANGED
@@ -215,6 +215,12 @@ function randomUUIDBase62() {
215
215
  // src/gitWorktree.ts
216
216
  var log = debug("fk:git");
217
217
  var execAsync = promisify(exec);
218
+ var GIT_SAFE_ENV = {
219
+ ...process.env,
220
+ GIT_CONFIG_COUNT: "1",
221
+ GIT_CONFIG_KEY_0: "safe.directory",
222
+ GIT_CONFIG_VALUE_0: "*"
223
+ };
218
224
  var IS_WIN32_PATH = new RegExp("^[a-zA-Z]:\\\\", "i");
219
225
  var IS_ALMOST_POSIX_PATH = new RegExp("^[a-zA-Z]:/", "i");
220
226
  function toPosixAbsolutePath(absolutePath) {
@@ -259,7 +265,8 @@ var GitWorktree = class _GitWorktree {
259
265
  static create(somePathInsideGitRepo) {
260
266
  const root = shell(`git`, ["rev-parse", "--show-toplevel"], {
261
267
  cwd: somePathInsideGitRepo,
262
- encoding: "utf-8"
268
+ encoding: "utf-8",
269
+ env: GIT_SAFE_ENV
263
270
  });
264
271
  assert(root, `FAILED: git rev-parse --show-toplevel HEAD @ ${somePathInsideGitRepo}`);
265
272
  return new _GitWorktree(root);
@@ -297,7 +304,8 @@ var GitWorktree = class _GitWorktree {
297
304
  headCommitId() {
298
305
  const sha = shell(`git`, ["rev-parse", "HEAD"], {
299
306
  cwd: this._gitRoot,
300
- encoding: "utf-8"
307
+ encoding: "utf-8",
308
+ env: GIT_SAFE_ENV
301
309
  });
302
310
  assert(sha, `FAILED: git rev-parse HEAD @ ${this._gitRoot}`);
303
311
  return sha.trim();
@@ -390,7 +398,7 @@ async function listCommits(gitRoot, head, count) {
390
398
  ].join(FIELD_SEPARATOR);
391
399
  const command = `git log ${head} -n ${count} --pretty=format:"${prettyFormat}" -z`;
392
400
  try {
393
- const { stdout } = await execAsync(command, { cwd: gitRoot });
401
+ const { stdout } = await execAsync(command, { cwd: gitRoot, env: GIT_SAFE_ENV });
394
402
  if (!stdout) {
395
403
  return [];
396
404
  }
@@ -671,7 +679,7 @@ function createEnvironment(options) {
671
679
  };
672
680
  }
673
681
 
674
- // node_modules/.pnpm/@flakiness+flakiness-report@0.27.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/flakinessReport.js
682
+ // node_modules/.pnpm/@flakiness+flakiness-report@0.28.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/flakinessReport.js
675
683
  var FlakinessReport;
676
684
  ((FlakinessReport22) => {
677
685
  FlakinessReport22.CATEGORY_PLAYWRIGHT = "playwright";
@@ -681,7 +689,7 @@ var FlakinessReport;
681
689
  FlakinessReport22.STREAM_STDERR = 2;
682
690
  })(FlakinessReport || (FlakinessReport = {}));
683
691
 
684
- // node_modules/.pnpm/@flakiness+flakiness-report@0.27.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/schema.js
692
+ // node_modules/.pnpm/@flakiness+flakiness-report@0.28.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/schema.js
685
693
  import z from "zod/v4";
686
694
  var Schema;
687
695
  ((Schema2) => {
@@ -796,8 +804,15 @@ var Schema;
796
804
  samples: z.array(Schema2.SystemUtilizationSample)
797
805
  });
798
806
  Schema2.UtilizationTelemetry = z.tuple([Schema2.DurationMS, z.number().min(0).max(100)]);
807
+ Schema2.Source = z.object({
808
+ filePath: Schema2.GitFilePath,
809
+ text: z.string(),
810
+ lineOffset: z.number().optional(),
811
+ contentType: z.string().optional()
812
+ });
799
813
  Schema2.FlakinessProject = z.string();
800
814
  Schema2.Report = z.object({
815
+ sources: z.array(Schema2.Source).optional(),
801
816
  flakinessProject: Schema2.FlakinessProject.optional(),
802
817
  category: z.string().min(1).max(100),
803
818
  commitId: Schema2.CommitId,
@@ -1271,7 +1286,7 @@ async function listFilesRecursively(dir, result = []) {
1271
1286
  }
1272
1287
 
1273
1288
  // src/showReport.ts
1274
- import chalk from "chalk";
1289
+ import { styleText } from "node:util";
1275
1290
  import open from "open";
1276
1291
 
1277
1292
  // src/staticServer.ts
@@ -1434,7 +1449,7 @@ async function showReport(reportFolder, options) {
1434
1449
  const url = new URL(reportViewerUrl);
1435
1450
  url.searchParams.set("port", String(server.port()));
1436
1451
  url.searchParams.set("token", token);
1437
- console.log(chalk.cyan(`
1452
+ console.log(styleText("cyan", `
1438
1453
  Serving Flakiness report at ${url.toString()}
1439
1454
  Press Ctrl+C to quit.`));
1440
1455
  await open(url.toString());
@@ -1442,24 +1457,123 @@ async function showReport(reportFolder, options) {
1442
1457
  });
1443
1458
  }
1444
1459
 
1460
+ // src/showReportCommand.ts
1461
+ import fs7 from "node:fs";
1462
+ import path3 from "node:path";
1463
+ import which from "which";
1464
+ var DEFAULT_REPORT_FOLDER = "flakiness-report";
1465
+ var FLAKINESS_CLI_COMMANDS = {
1466
+ GLOBAL: "flakiness",
1467
+ PNPM: "pnpm dlx flakiness",
1468
+ NPM: "npx flakiness"
1469
+ };
1470
+ function showReportCommand(reportFolder) {
1471
+ const userCwd = path3.resolve(process.env.INIT_CWD || process.cwd());
1472
+ const flakinessCLI = detectFlakinessCLIFromEnv() ?? detectFlakinessCLIFromFilesystem(userCwd) ?? detectFlakinessCLIFromPath() ?? FLAKINESS_CLI_COMMANDS.NPM;
1473
+ const absoluteReportFolder = path3.resolve(reportFolder);
1474
+ const reportFolderArg = formatReportFolderArg(absoluteReportFolder, userCwd);
1475
+ return `${flakinessCLI} show${reportFolderArg ? ` ${reportFolderArg}` : ""}`;
1476
+ }
1477
+ function detectFlakinessCLIFromEnv() {
1478
+ const userAgent = process.env.npm_config_user_agent ?? "";
1479
+ if (userAgent.startsWith("pnpm/"))
1480
+ return FLAKINESS_CLI_COMMANDS.PNPM;
1481
+ if (userAgent.startsWith("npm/"))
1482
+ return FLAKINESS_CLI_COMMANDS.NPM;
1483
+ const execPath = process.env.npm_execpath ?? "";
1484
+ const execName = execPath ? path3.basename(execPath).toLowerCase() : "";
1485
+ if (execName.startsWith("pnpm"))
1486
+ return FLAKINESS_CLI_COMMANDS.PNPM;
1487
+ return void 0;
1488
+ }
1489
+ function detectFlakinessCLIFromFilesystem(userCwd) {
1490
+ for (const dir of ancestorDirectories(userCwd)) {
1491
+ const packageManager = parsePackageJSON(dir);
1492
+ if (packageManager === "pnpm")
1493
+ return FLAKINESS_CLI_COMMANDS.PNPM;
1494
+ if (packageManager === "npm" || packageManager === "other")
1495
+ return FLAKINESS_CLI_COMMANDS.NPM;
1496
+ if (fs7.existsSync(path3.join(dir, "pnpm-lock.yaml")))
1497
+ return FLAKINESS_CLI_COMMANDS.PNPM;
1498
+ if (fs7.existsSync(path3.join(dir, "pnpm-workspace.yaml")))
1499
+ return FLAKINESS_CLI_COMMANDS.PNPM;
1500
+ }
1501
+ return void 0;
1502
+ }
1503
+ function detectFlakinessCLIFromPath() {
1504
+ if (which.sync("flakiness", { nothrow: true }))
1505
+ return FLAKINESS_CLI_COMMANDS.GLOBAL;
1506
+ if (which.sync("npx", { nothrow: true }))
1507
+ return FLAKINESS_CLI_COMMANDS.NPM;
1508
+ if (which.sync("pnpm", { nothrow: true }))
1509
+ return FLAKINESS_CLI_COMMANDS.PNPM;
1510
+ return void 0;
1511
+ }
1512
+ function parsePackageJSON(dir) {
1513
+ const packageJsonPath = path3.join(dir, "package.json");
1514
+ if (!fs7.existsSync(packageJsonPath))
1515
+ return void 0;
1516
+ try {
1517
+ const packageJson = JSON.parse(fs7.readFileSync(packageJsonPath, "utf8"));
1518
+ if (typeof packageJson.packageManager !== "string")
1519
+ return void 0;
1520
+ if (packageJson.packageManager.startsWith("pnpm@"))
1521
+ return "pnpm";
1522
+ if (packageJson.packageManager.startsWith("npm@"))
1523
+ return "npm";
1524
+ return "other";
1525
+ } catch {
1526
+ return void 0;
1527
+ }
1528
+ }
1529
+ function ancestorDirectories(startDir) {
1530
+ const directories = [];
1531
+ let current = path3.resolve(startDir);
1532
+ while (true) {
1533
+ directories.push(current);
1534
+ const parent = path3.dirname(current);
1535
+ if (parent === current)
1536
+ return directories;
1537
+ current = parent;
1538
+ }
1539
+ }
1540
+ function formatReportFolderArg(reportFolder, userCwd) {
1541
+ if (isSamePath(reportFolder, path3.resolve(userCwd, DEFAULT_REPORT_FOLDER)))
1542
+ return "";
1543
+ const relativePath = path3.relative(userCwd, reportFolder) || ".";
1544
+ return quoteShellArgument(relativePath);
1545
+ }
1546
+ function isSamePath(left, right) {
1547
+ const normalizedLeft = path3.resolve(left);
1548
+ const normalizedRight = path3.resolve(right);
1549
+ if (process.platform === "win32")
1550
+ return normalizedLeft.toLowerCase() === normalizedRight.toLowerCase();
1551
+ return normalizedLeft === normalizedRight;
1552
+ }
1553
+ function quoteShellArgument(argument) {
1554
+ if (/^[A-Za-z0-9_./:@%+=,-]+$/u.test(argument))
1555
+ return argument;
1556
+ return JSON.stringify(argument);
1557
+ }
1558
+
1445
1559
  // src/writeReport.ts
1446
- import fs7 from "fs";
1447
- import path3 from "path";
1560
+ import fs8 from "fs";
1561
+ import path4 from "path";
1448
1562
  async function writeReport(report, attachments, outputFolder) {
1449
- const reportPath = path3.join(outputFolder, "report.json");
1450
- const attachmentsFolder = path3.join(outputFolder, "attachments");
1451
- await fs7.promises.rm(outputFolder, { recursive: true, force: true });
1452
- await fs7.promises.mkdir(outputFolder, { recursive: true });
1453
- await fs7.promises.writeFile(reportPath, JSON.stringify(report), "utf-8");
1563
+ const reportPath = path4.join(outputFolder, "report.json");
1564
+ const attachmentsFolder = path4.join(outputFolder, "attachments");
1565
+ await fs8.promises.rm(outputFolder, { recursive: true, force: true });
1566
+ await fs8.promises.mkdir(outputFolder, { recursive: true });
1567
+ await fs8.promises.writeFile(reportPath, JSON.stringify(report), "utf-8");
1454
1568
  if (attachments.length)
1455
- await fs7.promises.mkdir(attachmentsFolder);
1569
+ await fs8.promises.mkdir(attachmentsFolder);
1456
1570
  const movedAttachments = [];
1457
1571
  for (const attachment of attachments) {
1458
- const attachmentPath = path3.join(attachmentsFolder, attachment.id);
1572
+ const attachmentPath = path4.join(attachmentsFolder, attachment.id);
1459
1573
  if (attachment.type === "file")
1460
- await fs7.promises.cp(attachment.path, attachmentPath);
1574
+ await fs8.promises.cp(attachment.path, attachmentPath);
1461
1575
  else if (attachment.type === "buffer")
1462
- await fs7.promises.writeFile(attachmentPath, attachment.body);
1576
+ await fs8.promises.writeFile(attachmentPath, attachment.body);
1463
1577
  movedAttachments.push({
1464
1578
  type: "file",
1465
1579
  contentType: attachment.contentType,
@@ -1478,6 +1592,7 @@ export {
1478
1592
  reportUtils_exports as ReportUtils,
1479
1593
  readReport,
1480
1594
  showReport,
1595
+ showReportCommand,
1481
1596
  uploadReport,
1482
1597
  writeReport
1483
1598
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flakiness/sdk",
3
- "version": "2.2.1",
3
+ "version": "2.3.1",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,27 +24,35 @@
24
24
  "keywords": [],
25
25
  "author": "Degu Labs, Inc",
26
26
  "license": "MIT",
27
+ "engines": {
28
+ "node": ">=22"
29
+ },
27
30
  "devDependencies": {
28
- "@flakiness/flakiness-report": "^0.27.0",
31
+ "@flakiness/flakiness-report": "^0.28.0",
32
+ "@flakiness/playwright": "^1.3.3",
33
+ "@playwright/test": "^1.58.2",
29
34
  "@types/debug": "^4.1.12",
30
35
  "@types/node": "^25.0.3",
36
+ "@types/which": "^3.0.4",
31
37
  "esbuild": "^0.27.0",
32
38
  "kubik": "^0.24.0",
33
39
  "tsx": "^4.21.0",
34
40
  "typescript": "^5.6.2"
35
41
  },
36
42
  "peerDependencies": {
37
- "@flakiness/flakiness-report": "^0.27.0"
43
+ "@flakiness/flakiness-report": ">=0.26.0 <1.0.0"
38
44
  },
39
45
  "dependencies": {
40
- "chalk": "^5.6.2",
41
46
  "debug": "^4.4.3",
42
47
  "open": "^10.2.0",
43
48
  "stable-hash": "^0.0.6",
49
+ "which": "^6.0.1",
44
50
  "zod": "^4.3.5"
45
51
  },
46
52
  "scripts": {
47
53
  "minor": "./version.mjs minor",
48
- "patch": "./version.mjs patch"
54
+ "patch": "./version.mjs patch",
55
+ "test": "pnpm playwright test",
56
+ "build": "kubik ./build.mts"
49
57
  }
50
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gitWorktree.d.ts","sourceRoot":"","sources":["../../src/gitWorktree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAY9D;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,8CAA8C;IAC9C,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC;IACnC,wDAAwD;IACxD,SAAS,EAAE,eAAe,CAAC,eAAe,CAAC;IAC3C,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mHAAmH;IACnH,OAAO,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC;CACrC,CAAA;AAyCD;;;;GAIG;AACH,qBAAa,WAAW;IA4BV,OAAO,CAAC,QAAQ;IA3B5B;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM;IAS3C,OAAO,CAAC,aAAa,CAAoB;gBAErB,QAAQ,EAAE,MAAM;IAIpC;;;;;;;;;;;;OAYG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;;;;;;;OAYG;IACH,YAAY,IAAI,eAAe,CAAC,QAAQ;IASxC;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,CAAC,WAAW;IAI1D;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,WAAW,GAAG,MAAM;IAI/D;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAGvD"}
1
+ {"version":3,"file":"gitWorktree.d.ts","sourceRoot":"","sources":["../../src/gitWorktree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAwB9D;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,8CAA8C;IAC9C,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC;IACnC,wDAAwD;IACxD,SAAS,EAAE,eAAe,CAAC,eAAe,CAAC;IAC3C,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mHAAmH;IACnH,OAAO,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC;CACrC,CAAA;AAyCD;;;;GAIG;AACH,qBAAa,WAAW;IA6BV,OAAO,CAAC,QAAQ;IA5B5B;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM;IAU3C,OAAO,CAAC,aAAa,CAAoB;gBAErB,QAAQ,EAAE,MAAM;IAIpC;;;;;;;;;;;;OAYG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;;;;;;;OAYG;IACH,YAAY,IAAI,eAAe,CAAC,QAAQ;IAUxC;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,CAAC,WAAW;IAI1D;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,WAAW,GAAG,MAAM;IAI/D;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAGvD"}
@@ -6,6 +6,7 @@ export { GithubOIDC } from './githubOIDC.js';
6
6
  export * as ReportUtils from './reportUtils.js';
7
7
  export { readReport } from './readReport.js';
8
8
  export { showReport } from './showReport.js';
9
+ export { showReportCommand } from './showReportCommand.js';
9
10
  export { uploadReport } from './uploadReport.js';
10
11
  export { writeReport } from './writeReport.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Builds a command that opens a Flakiness report with the Flakiness CLI.
3
+ *
4
+ * The command is tailored for the shell directory from which the current process
5
+ * was originally invoked. This matters when package managers like pnpm change the
6
+ * working directory while running scripts.
7
+ *
8
+ * @param {string} reportFolder - Absolute or relative path to the report folder.
9
+ *
10
+ * @returns {string} A shell command such as `pnpm dlx flakiness show`.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const command = showReportCommand('./flakiness-report');
15
+ * // Returns: "npx flakiness show"
16
+ * ```
17
+ */
18
+ export declare function showReportCommand(reportFolder: string): string;
19
+ //# sourceMappingURL=showReportCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"showReportCommand.d.ts","sourceRoot":"","sources":["../../src/showReportCommand.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAM9D"}
@@ -11,7 +11,9 @@
11
11
  *
12
12
  * @example
13
13
  * ```typescript
14
- * const clean = stripAnsi(chalk.red('Error: test failed'));
14
+ * import { styleText } from 'node:util';
15
+ *
16
+ * const clean = stripAnsi(styleText('red', 'Error: test failed'));
15
17
  * // Returns: 'Error: test failed' (without color codes)
16
18
  * ```
17
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"stripAnsi.d.ts","sourceRoot":"","sources":["../../src/stripAnsi.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
1
+ {"version":3,"file":"stripAnsi.d.ts","sourceRoot":"","sources":["../../src/stripAnsi.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}