@crvy/rprtr 0.2.3 → 0.3.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +33 -0
  3. package/dist/{chunk-HAFWYUNO.js → chunk-4YJL655E.js} +16 -4
  4. package/dist/{chunk-473CWZ4V.js → chunk-IFHYWPXG.js} +710 -281
  5. package/dist/cli.d.ts +7 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +57 -6
  8. package/dist/index.css +7 -0
  9. package/dist/index.js +152 -105
  10. package/dist/reporter-artifact-ops.d.ts +0 -2
  11. package/dist/reporter-artifact-ops.d.ts.map +1 -1
  12. package/dist/reporter.cjs +32 -38
  13. package/dist/reporter.d.ts +2 -1
  14. package/dist/reporter.d.ts.map +1 -1
  15. package/dist/reporter.js +27 -43
  16. package/dist/schemas/http.d.ts +2 -0
  17. package/dist/schemas/http.d.ts.map +1 -1
  18. package/dist/schemas.d.ts +14 -0
  19. package/dist/schemas.d.ts.map +1 -1
  20. package/dist/server/app.d.ts +6 -0
  21. package/dist/server/app.d.ts.map +1 -1
  22. package/dist/server/artifact-routes.d.ts.map +1 -1
  23. package/dist/server/docker-launcher.d.ts +27 -0
  24. package/dist/server/docker-launcher.d.ts.map +1 -0
  25. package/dist/server/docker-support.d.ts +66 -0
  26. package/dist/server/docker-support.d.ts.map +1 -0
  27. package/dist/server/handlers.d.ts +1 -1
  28. package/dist/server/handlers.d.ts.map +1 -1
  29. package/dist/server/launcher-resolver.d.ts +23 -0
  30. package/dist/server/launcher-resolver.d.ts.map +1 -0
  31. package/dist/server/playwright-config.d.ts +6 -0
  32. package/dist/server/playwright-config.d.ts.map +1 -1
  33. package/dist/server/routes-context.d.ts +6 -1
  34. package/dist/server/routes-context.d.ts.map +1 -1
  35. package/dist/server/routes.d.ts +7 -0
  36. package/dist/server/routes.d.ts.map +1 -1
  37. package/dist/server/run-controller.d.ts +19 -19
  38. package/dist/server/run-controller.d.ts.map +1 -1
  39. package/dist/server/run-launcher.d.ts +45 -0
  40. package/dist/server/run-launcher.d.ts.map +1 -0
  41. package/dist/server/run-mode.d.ts +15 -0
  42. package/dist/server/run-mode.d.ts.map +1 -0
  43. package/dist/server/server-factories.d.ts +21 -0
  44. package/dist/server/server-factories.d.ts.map +1 -0
  45. package/dist/server.cjs +885 -446
  46. package/dist/server.js +2 -2
  47. package/dist/types.d.ts +2 -0
  48. package/dist/types.d.ts.map +1 -1
  49. package/package.json +1 -1
package/dist/cli.d.ts CHANGED
@@ -1,11 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { type ServerOptions } from './server.ts';
3
+ import type { DockerOptions } from './server/docker-launcher.ts';
4
+ import type { RunMode } from './server/run-mode.ts';
3
5
  interface ResolvedCliOptions extends ServerOptions {
4
6
  port: number;
5
7
  screenshotDir: string;
6
8
  reportPath: string;
7
9
  outputDir: string;
10
+ runMode?: RunMode;
11
+ docker?: DockerOptions;
8
12
  }
13
+ export declare const HELP_TEXT = "Usage: crvy-rprtr [artifact-dir] [options]\n\nStart the @crvy/rprtr visual regression report UI server.\n\nArguments:\n artifact-dir Directory of downloaded CI test artifacts. When set,\n --report-path defaults to <dir>/report.json and\n --screenshot-dir defaults to <dir>/screenshots.\n\nOptions:\n -p, --port <number> Server port (default: 3000)\n -s, --screenshot-dir <dir> Screenshot artifact directory (default: ./screenshots)\n -r, --report-path <path> Path to report.json (default: ./report.json)\n -o, --output-dir <dir> Playwright test output directory (default: ./test-results)\n -c, --config <path> Path to playwright.config.ts, used for approval routing\n --run-mode <mode> Test run backend: local, docker, or auto (default: auto)\n --docker-image <image> Docker image for docker mode (default: official Playwright image matching the installed @playwright/test version)\n --docker-platform <platform> Container platform: linux/amd64 or linux/arm64 (default: host architecture)\n -h, --help Show this help message\n";
14
+ export declare function printHelp(): void;
15
+ export declare function wantsHelp(args: string[]): boolean;
9
16
  export declare function resolveCliOptions(args: string[]): ResolvedCliOptions;
10
17
  export {};
11
18
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAKA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAO7D,UAAU,kBAAmB,SAAQ,aAAa;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CA8BpE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAKA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAOnD,UAAU,kBAAmB,SAAQ,aAAa;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,aAAa,CAAA;CACvB;AAED,eAAO,MAAM,SAAS,oqCAmBrB,CAAA;AAED,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEjD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAgDpE"}
package/dist/cli.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  startServer
4
- } from "./chunk-473CWZ4V.js";
5
- import "./chunk-HAFWYUNO.js";
4
+ } from "./chunk-IFHYWPXG.js";
5
+ import "./chunk-4YJL655E.js";
6
6
 
7
7
  // src/cli.ts
8
8
  import { join } from "path";
@@ -32,6 +32,32 @@ var DEFAULT_PORT = 3e3;
32
32
  var DEFAULT_SCREENSHOT_DIR = "./screenshots";
33
33
  var DEFAULT_REPORT_PATH = "./report.json";
34
34
  var DEFAULT_OUTPUT_DIR = "./test-results";
35
+ var HELP_TEXT = `Usage: crvy-rprtr [artifact-dir] [options]
36
+
37
+ Start the @crvy/rprtr visual regression report UI server.
38
+
39
+ Arguments:
40
+ artifact-dir Directory of downloaded CI test artifacts. When set,
41
+ --report-path defaults to <dir>/report.json and
42
+ --screenshot-dir defaults to <dir>/screenshots.
43
+
44
+ Options:
45
+ -p, --port <number> Server port (default: 3000)
46
+ -s, --screenshot-dir <dir> Screenshot artifact directory (default: ./screenshots)
47
+ -r, --report-path <path> Path to report.json (default: ./report.json)
48
+ -o, --output-dir <dir> Playwright test output directory (default: ./test-results)
49
+ -c, --config <path> Path to playwright.config.ts, used for approval routing
50
+ --run-mode <mode> Test run backend: local, docker, or auto (default: auto)
51
+ --docker-image <image> Docker image for docker mode (default: official Playwright image matching the installed @playwright/test version)
52
+ --docker-platform <platform> Container platform: linux/amd64 or linux/arm64 (default: host architecture)
53
+ -h, --help Show this help message
54
+ `;
55
+ function printHelp() {
56
+ console.log(HELP_TEXT);
57
+ }
58
+ function wantsHelp(args) {
59
+ return args.includes("--help") || args.includes("-h");
60
+ }
35
61
  function resolveCliOptions(args) {
36
62
  const { values, positionals } = parseArgs({
37
63
  args,
@@ -41,7 +67,10 @@ function resolveCliOptions(args) {
41
67
  "screenshot-dir": { type: "string", short: "s" },
42
68
  "report-path": { type: "string", short: "r" },
43
69
  "output-dir": { type: "string", short: "o" },
44
- config: { type: "string", short: "c" }
70
+ config: { type: "string", short: "c" },
71
+ "run-mode": { type: "string" },
72
+ "docker-image": { type: "string" },
73
+ "docker-platform": { type: "string" }
45
74
  }
46
75
  });
47
76
  if (positionals.length > 1) {
@@ -50,17 +79,39 @@ function resolveCliOptions(args) {
50
79
  const artifactDir = positionals[0];
51
80
  const reportPath = values["report-path"] ?? (artifactDir === void 0 ? DEFAULT_REPORT_PATH : join(artifactDir, "report.json"));
52
81
  const screenshotDir = values["screenshot-dir"] ?? (artifactDir === void 0 ? DEFAULT_SCREENSHOT_DIR : join(artifactDir, "screenshots"));
82
+ const runMode = values["run-mode"];
83
+ if (runMode !== void 0 && runMode !== "local" && runMode !== "docker" && runMode !== "auto") {
84
+ throw new TypeError(`Invalid --run-mode: ${runMode} (expected local, docker, or auto)`);
85
+ }
86
+ const dockerPlatform = values["docker-platform"];
87
+ if (dockerPlatform !== void 0 && dockerPlatform !== "linux/amd64" && dockerPlatform !== "linux/arm64") {
88
+ throw new TypeError(`Invalid --docker-platform: ${dockerPlatform} (expected linux/amd64 or linux/arm64)`);
89
+ }
90
+ const docker = {};
91
+ if (values["docker-image"] !== void 0) docker.image = values["docker-image"];
92
+ if (dockerPlatform !== void 0) docker.platform = dockerPlatform;
93
+ const hasDockerOptions = values["docker-image"] !== void 0 || dockerPlatform !== void 0;
53
94
  return {
54
95
  port: parseInt(values.port ?? `${DEFAULT_PORT}`, 10),
55
96
  screenshotDir,
56
97
  reportPath,
57
98
  outputDir: values["output-dir"] ?? DEFAULT_OUTPUT_DIR,
58
- playwrightConfig: values.config
99
+ playwrightConfig: values.config,
100
+ ...runMode === void 0 ? {} : { runMode },
101
+ ...hasDockerOptions ? { docker } : {}
59
102
  };
60
103
  }
61
104
  if (isDirectExecution(import.meta.url)) {
62
- await startServer(resolveCliOptions(process.argv.slice(2)));
105
+ const args = process.argv.slice(2);
106
+ if (wantsHelp(args)) {
107
+ printHelp();
108
+ } else {
109
+ await startServer(resolveCliOptions(args));
110
+ }
63
111
  }
64
112
  export {
65
- resolveCliOptions
113
+ HELP_TEXT,
114
+ printHelp,
115
+ resolveCliOptions,
116
+ wantsHelp
66
117
  };
package/dist/index.css CHANGED
@@ -305,6 +305,9 @@
305
305
  .mr-3 {
306
306
  margin-right: calc(var(--spacing) * 3);
307
307
  }
308
+ .mb-1 {
309
+ margin-bottom: calc(var(--spacing) * 1);
310
+ }
308
311
  .mb-2 {
309
312
  margin-bottom: calc(var(--spacing) * 2);
310
313
  }
@@ -841,6 +844,10 @@
841
844
  .outline-accent {
842
845
  outline-color: var(--color-accent);
843
846
  }
847
+ .grayscale {
848
+ --tw-grayscale: grayscale(100%);
849
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
850
+ }
844
851
  .invert {
845
852
  --tw-invert: invert(100%);
846
853
  filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);