@wasao/kagemusha 0.2.0 → 0.3.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.
Files changed (93) hide show
  1. package/README.md +103 -453
  2. package/dist/commands/capture.js +57 -35
  3. package/dist/commands/capture.js.map +1 -1
  4. package/dist/commands/edit.d.ts +1 -1
  5. package/dist/commands/edit.d.ts.map +1 -1
  6. package/dist/commands/edit.js +46 -8
  7. package/dist/commands/edit.js.map +1 -1
  8. package/dist/commands/init.d.ts.map +1 -1
  9. package/dist/commands/init.js +82 -83
  10. package/dist/commands/init.js.map +1 -1
  11. package/dist/commands/login.d.ts.map +1 -1
  12. package/dist/commands/login.js +14 -18
  13. package/dist/commands/login.js.map +1 -1
  14. package/dist/editor/inject-script/annotations.d.ts +11 -0
  15. package/dist/editor/inject-script/annotations.d.ts.map +1 -0
  16. package/dist/editor/inject-script/annotations.js +409 -0
  17. package/dist/editor/inject-script/annotations.js.map +1 -0
  18. package/dist/editor/inject-script/bridge.d.ts +13 -0
  19. package/dist/editor/inject-script/bridge.d.ts.map +1 -0
  20. package/dist/editor/inject-script/bridge.js +33 -0
  21. package/dist/editor/inject-script/bridge.js.map +1 -0
  22. package/dist/editor/inject-script/crop.d.ts +9 -0
  23. package/dist/editor/inject-script/crop.d.ts.map +1 -0
  24. package/dist/editor/inject-script/crop.js +236 -0
  25. package/dist/editor/inject-script/crop.js.map +1 -0
  26. package/dist/editor/inject-script/dom.d.ts +7 -0
  27. package/dist/editor/inject-script/dom.d.ts.map +1 -0
  28. package/dist/editor/inject-script/dom.js +32 -0
  29. package/dist/editor/inject-script/dom.js.map +1 -0
  30. package/dist/editor/inject-script/index.d.ts +2 -0
  31. package/dist/editor/inject-script/index.d.ts.map +1 -0
  32. package/dist/editor/inject-script/index.js +56 -0
  33. package/dist/editor/inject-script/index.js.map +1 -0
  34. package/dist/editor/inject-script/record.d.ts +5 -0
  35. package/dist/editor/inject-script/record.d.ts.map +1 -0
  36. package/dist/editor/inject-script/record.js +398 -0
  37. package/dist/editor/inject-script/record.js.map +1 -0
  38. package/dist/editor/inject-script/selector.d.ts +6 -0
  39. package/dist/editor/inject-script/selector.d.ts.map +1 -0
  40. package/dist/editor/inject-script/selector.js +112 -0
  41. package/dist/editor/inject-script/selector.js.map +1 -0
  42. package/dist/editor/inject-script/state.d.ts +27 -0
  43. package/dist/editor/inject-script/state.d.ts.map +1 -0
  44. package/dist/editor/inject-script/state.js +26 -0
  45. package/dist/editor/inject-script/state.js.map +1 -0
  46. package/dist/editor/inject-script/svg.d.ts +7 -0
  47. package/dist/editor/inject-script/svg.d.ts.map +1 -0
  48. package/dist/editor/inject-script/svg.js +39 -0
  49. package/dist/editor/inject-script/svg.js.map +1 -0
  50. package/dist/editor/inject-script/toolbar.d.ts +14 -0
  51. package/dist/editor/inject-script/toolbar.d.ts.map +1 -0
  52. package/dist/editor/inject-script/toolbar.js +240 -0
  53. package/dist/editor/inject-script/toolbar.js.map +1 -0
  54. package/dist/editor/inject-script/types.d.ts +102 -0
  55. package/dist/editor/inject-script/types.d.ts.map +1 -0
  56. package/dist/editor/inject-script/types.js +5 -0
  57. package/dist/editor/inject-script/types.js.map +1 -0
  58. package/dist/editor/inject-script.js +1248 -699
  59. package/dist/index.js +9 -2
  60. package/dist/index.js.map +1 -1
  61. package/dist/lib/canonical.d.ts +35 -3
  62. package/dist/lib/canonical.d.ts.map +1 -1
  63. package/dist/lib/canonical.js +85 -25
  64. package/dist/lib/canonical.js.map +1 -1
  65. package/dist/lib/crawl.js +1 -1
  66. package/dist/lib/crawl.js.map +1 -1
  67. package/dist/lib/diff.d.ts +23 -4
  68. package/dist/lib/diff.d.ts.map +1 -1
  69. package/dist/lib/diff.js +5 -6
  70. package/dist/lib/diff.js.map +1 -1
  71. package/dist/lib/page-ready.d.ts +18 -0
  72. package/dist/lib/page-ready.d.ts.map +1 -0
  73. package/dist/lib/page-ready.js +19 -0
  74. package/dist/lib/page-ready.js.map +1 -0
  75. package/dist/lib/playwright-launch.d.ts +4 -0
  76. package/dist/lib/playwright-launch.d.ts.map +1 -0
  77. package/dist/lib/playwright-launch.js +11 -0
  78. package/dist/lib/playwright-launch.js.map +1 -0
  79. package/dist/lib/screenshot.d.ts +4 -1
  80. package/dist/lib/screenshot.d.ts.map +1 -1
  81. package/dist/lib/screenshot.js +37 -7
  82. package/dist/lib/screenshot.js.map +1 -1
  83. package/dist/lib/staging.d.ts +0 -1
  84. package/dist/lib/staging.d.ts.map +1 -1
  85. package/dist/lib/staging.js +0 -3
  86. package/dist/lib/staging.js.map +1 -1
  87. package/dist/types.d.ts +5 -0
  88. package/dist/types.d.ts.map +1 -1
  89. package/package.json +22 -12
  90. package/templates/notify-slack.jq +30 -0
  91. package/dist/editor/inject-script.d.ts +0 -2
  92. package/dist/editor/inject-script.d.ts.map +0 -1
  93. package/dist/editor/inject-script.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
2
4
  import chalk from "chalk";
3
5
  import { Command } from "commander";
4
6
  import { addCommand } from "./commands/add.js";
@@ -9,8 +11,13 @@ import { initCommand } from "./commands/init.js";
9
11
  import { listCommand } from "./commands/list.js";
10
12
  import { loginCommand } from "./commands/login.js";
11
13
  import { validateCommand } from "./commands/validate.js";
14
+ // Read version from package.json at runtime so release-please only needs to
15
+ // update one file (= package.json) on every bump. dist/index.js sits next
16
+ // to dist/, so package.json is two levels up (= ../package.json).
17
+ const pkgPath = fileURLToPath(new URL("../package.json", import.meta.url));
18
+ const VERSION = JSON.parse(readFileSync(pkgPath, "utf-8")).version;
12
19
  const BANNER = `
13
- ${chalk.bold("kagemusha")} ${chalk.gray("v0.2.0")}
20
+ ${chalk.bold("kagemusha")} ${chalk.gray(`v${VERSION}`)}
14
21
  ${chalk.dim("The shadow warrior for your documentation.")}
15
22
 
16
23
  ${chalk.white("Auto-update help center screenshots")}
@@ -19,7 +26,7 @@ const BANNER = `
19
26
  const program = new Command();
20
27
  program
21
28
  .name("kagemusha")
22
- .version("0.2.0")
29
+ .version(VERSION)
23
30
  .addHelpText("beforeAll", BANNER)
24
31
  .configureHelp({
25
32
  sortSubcommands: false,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,18 @@ import type { KagemushaConfig } from "../types.js";
2
2
  export declare const getOutputDir: (config: KagemushaConfig, projectRoot: string) => string;
3
3
  export declare const getCanonicalPath: (config: KagemushaConfig, projectRoot: string, id: string) => string;
4
4
  export type FetchResult = "ok" | "not-found";
5
+ /**
6
+ * URLs returned by `push()` so callers can include them in summary.json
7
+ * for downstream notification consumers (Slack, PR comments, etc.).
8
+ *
9
+ * - `after`: the new `latest.png` we just uploaded
10
+ * - `before`: the previous `latest.png`, copied to `previous.png` before
11
+ * being overwritten. Undefined when no prior version existed (= first push)
12
+ */
13
+ export interface PushUrls {
14
+ after: string;
15
+ before?: string;
16
+ }
5
17
  /**
6
18
  * S3-backed canonical store.
7
19
  * Local mode has no remote — outputDir itself is the source of truth.
@@ -11,11 +23,31 @@ export declare class S3Canonical {
11
23
  private readonly cdnBaseUrl?;
12
24
  private readonly client;
13
25
  constructor(bucket: string, cdnBaseUrl?: string | undefined);
14
- private keyOf;
26
+ private latestKey;
27
+ private previousKey;
28
+ private historyKey;
29
+ private urlFor;
15
30
  /** Download canonical for `id` to `localPath`. Returns "not-found" if absent. */
16
31
  fetch(id: string, localPath: string): Promise<FetchResult>;
17
- /** Upload `localPath` as the canonical for `id`. */
18
- push(id: string, localPath: string): Promise<void>;
32
+ /**
33
+ * Upload `localPath` as the canonical for `id`.
34
+ *
35
+ * Side effects on S3 for a single push:
36
+ * 1. Copy existing latest.png → previous.png (no-op if missing)
37
+ * 2. Upload localPath → latest.png
38
+ * 3. Upload localPath → history/<timestamp>.png
39
+ *
40
+ * Step 1 must complete first (otherwise the soon-to-be-overwritten latest
41
+ * would be replaced before the snapshot is taken). Steps 2-3 target
42
+ * different keys and run in parallel.
43
+ *
44
+ * Returns URLs (`before` / `after`) so callers can surface them in
45
+ * `reports/summary.json` (= public API). Consumers compare before vs after
46
+ * visually; kagemusha intentionally does not publish a pre-generated diff
47
+ * image (= pixelmatch's red overlay is alarming and adds little vs the
48
+ * raw pair).
49
+ */
50
+ push(id: string, localPath: string): Promise<PushUrls>;
19
51
  label(): string;
20
52
  }
21
53
  export declare const createS3Canonical: (config: KagemushaConfig) => S3Canonical | null;
@@ -1 +1 @@
1
- {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/lib/canonical.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,YAAY,GACxB,QAAQ,eAAe,EACvB,aAAa,MAAM,KACjB,MAKF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC5B,QAAQ,eAAe,EACvB,aAAa,MAAM,EACnB,IAAI,MAAM,KACR,MAAmE,CAAC;AAEvE,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,WAAW,CAAC;AAU7C;;;GAGG;AAEH,qBAAa,WAAW;IAItB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAJ7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;gBAGhB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,YAAA;IAMrC,OAAO,CAAC,KAAK;IAIb,iFAAiF;IAC3E,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBhE,oDAAoD;IAC9C,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBxD,KAAK,IAAI,MAAM;CAGf;AAED,eAAO,MAAM,iBAAiB,GAC7B,QAAQ,eAAe,KACrB,WAAW,GAAG,IAOhB,CAAC"}
1
+ {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/lib/canonical.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,YAAY,GACxB,QAAQ,eAAe,EACvB,aAAa,MAAM,KACjB,MAKF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC5B,QAAQ,eAAe,EACvB,aAAa,MAAM,EACnB,IAAI,MAAM,KACR,MAAmE,CAAC;AAEvE,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,WAAW,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD;;;GAGG;AAEH,qBAAa,WAAW;IAItB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAJ7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;gBAGhB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,YAAA;IAMrC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,MAAM;IAKd,iFAAiF;IAC3E,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgBhE;;;;;;;;;;;;;;;;;OAiBG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuD5D,KAAK,IAAI,MAAM;CAGf;AASD,eAAO,MAAM,iBAAiB,GAC7B,QAAQ,eAAe,KACrB,WAAW,GAAG,IAOhB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import { GetObjectCommand, NoSuchKey, PutObjectCommand, S3Client, } from "@aws-sdk/client-s3";
3
+ import { CopyObjectCommand, GetObjectCommand, NoSuchKey, PutObjectCommand, S3Client, } from "@aws-sdk/client-s3";
4
4
  const DEFAULT_OUTPUT_DIR = "screenshots";
5
5
  export const getOutputDir = (config, projectRoot) => {
6
6
  const configured = config.publish?.outputDir ?? DEFAULT_OUTPUT_DIR;
@@ -31,13 +31,26 @@ export class S3Canonical {
31
31
  const region = extractRegionFromCdnBase(cdnBaseUrl);
32
32
  this.client = new S3Client(region ? { region } : {});
33
33
  }
34
- keyOf(id) {
34
+ latestKey(id) {
35
35
  return `${id}/latest.png`;
36
36
  }
37
+ previousKey(id) {
38
+ return `${id}/previous.png`;
39
+ }
40
+ historyKey(id, timestamp) {
41
+ // Group history snapshots under a sub-prefix so the bucket list
42
+ // shows `latest.png` / `previous.png` cleanly without historical
43
+ // snapshots interleaved alphabetically.
44
+ return `${id}/history/${timestamp}.png`;
45
+ }
46
+ urlFor(key) {
47
+ const base = this.cdnBaseUrl ?? `s3://${this.bucket}`;
48
+ return `${base.replace(/\/$/, "")}/${key}`;
49
+ }
37
50
  /** Download canonical for `id` to `localPath`. Returns "not-found" if absent. */
38
51
  async fetch(id, localPath) {
39
52
  try {
40
- const res = await this.client.send(new GetObjectCommand({ Bucket: this.bucket, Key: this.keyOf(id) }));
53
+ const res = await this.client.send(new GetObjectCommand({ Bucket: this.bucket, Key: this.latestKey(id) }));
41
54
  const bytes = await res.Body?.transformToByteArray();
42
55
  if (!bytes)
43
56
  return "not-found";
@@ -46,40 +59,87 @@ export class S3Canonical {
46
59
  return "ok";
47
60
  }
48
61
  catch (e) {
49
- if (e instanceof NoSuchKey)
50
- return "not-found";
51
- if (e?.name === "NoSuchKey")
52
- return "not-found";
53
- if (e?.Code === "NoSuchKey")
62
+ if (isNoSuchKey(e))
54
63
  return "not-found";
55
64
  throw e;
56
65
  }
57
66
  }
58
- /** Upload `localPath` as the canonical for `id`. */
67
+ /**
68
+ * Upload `localPath` as the canonical for `id`.
69
+ *
70
+ * Side effects on S3 for a single push:
71
+ * 1. Copy existing latest.png → previous.png (no-op if missing)
72
+ * 2. Upload localPath → latest.png
73
+ * 3. Upload localPath → history/<timestamp>.png
74
+ *
75
+ * Step 1 must complete first (otherwise the soon-to-be-overwritten latest
76
+ * would be replaced before the snapshot is taken). Steps 2-3 target
77
+ * different keys and run in parallel.
78
+ *
79
+ * Returns URLs (`before` / `after`) so callers can surface them in
80
+ * `reports/summary.json` (= public API). Consumers compare before vs after
81
+ * visually; kagemusha intentionally does not publish a pre-generated diff
82
+ * image (= pixelmatch's red overlay is alarming and adds little vs the
83
+ * raw pair).
84
+ */
59
85
  async push(id, localPath) {
60
86
  const body = fs.readFileSync(localPath);
61
- await this.client.send(new PutObjectCommand({
62
- Bucket: this.bucket,
63
- Key: this.keyOf(id),
64
- Body: body,
65
- ContentType: "image/png",
66
- CacheControl: "no-cache",
67
- }));
68
- // History snapshot for debug / rollback. Replace `:` so the key works
69
- // in URLs without %3A encoding (S3 accepts it but URL-embedding breaks).
87
+ // 1. Snapshot the soon-to-be-overwritten latest as `previous`.
88
+ // Uses CopyObject (= S3-side copy, no local round-trip). First push for
89
+ // this id has no latest yet — we swallow NoSuchKey and report `before:
90
+ // undefined` to the caller.
91
+ let beforeUrl;
92
+ try {
93
+ await this.client.send(new CopyObjectCommand({
94
+ Bucket: this.bucket,
95
+ CopySource: `${this.bucket}/${this.latestKey(id)}`,
96
+ Key: this.previousKey(id),
97
+ MetadataDirective: "REPLACE",
98
+ ContentType: "image/png",
99
+ CacheControl: "no-cache",
100
+ }));
101
+ beforeUrl = this.urlFor(this.previousKey(id));
102
+ }
103
+ catch (e) {
104
+ if (!isNoSuchKey(e))
105
+ throw e;
106
+ // first push for this id — no previous yet, leave beforeUrl undefined
107
+ }
108
+ // 2-3. Independent uploads — run in parallel (= ~2x faster than serial).
70
109
  const timestamp = new Date().toISOString().replaceAll(":", "-");
71
- const historyKey = `${id}/${timestamp}.png`;
72
- await this.client.send(new PutObjectCommand({
73
- Bucket: this.bucket,
74
- Key: historyKey,
75
- Body: body,
76
- ContentType: "image/png",
77
- }));
110
+ await Promise.all([
111
+ // 2. latest
112
+ this.client.send(new PutObjectCommand({
113
+ Bucket: this.bucket,
114
+ Key: this.latestKey(id),
115
+ Body: body,
116
+ ContentType: "image/png",
117
+ CacheControl: "no-cache",
118
+ })),
119
+ // 3. history snapshot
120
+ this.client.send(new PutObjectCommand({
121
+ Bucket: this.bucket,
122
+ Key: this.historyKey(id, timestamp),
123
+ Body: body,
124
+ ContentType: "image/png",
125
+ })),
126
+ ]);
127
+ return {
128
+ after: this.urlFor(this.latestKey(id)),
129
+ before: beforeUrl,
130
+ };
78
131
  }
79
132
  label() {
80
133
  return this.cdnBaseUrl ?? `s3://${this.bucket}`;
81
134
  }
82
135
  }
136
+ const isNoSuchKey = (e) => {
137
+ if (e instanceof NoSuchKey)
138
+ return true;
139
+ const name = e?.name;
140
+ const code = e?.Code;
141
+ return name === "NoSuchKey" || code === "NoSuchKey";
142
+ };
83
143
  export const createS3Canonical = (config) => {
84
144
  const publish = config.publish;
85
145
  if (publish?.destination !== "s3")
@@ -1 +1 @@
1
- {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/lib/canonical.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/lib/canonical.ts"],"names":[],"mappings":"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"}
package/dist/lib/crawl.js CHANGED
@@ -2,7 +2,7 @@ import fs from "node:fs";
2
2
  import chalk from "chalk";
3
3
  import { authContextOptions, getAuthMetaPath } from "./auth.js";
4
4
  export const discoverPages = async (baseUrl, projectRoot, maxDepth = 3, maxPages = 200) => {
5
- const { chromium } = await import("playwright-chromium");
5
+ const { chromium } = await import("playwright-core");
6
6
  const browser = await chromium.launch({ headless: true });
7
7
  const context = await browser.newContext(authContextOptions(projectRoot));
8
8
  const origin = new URL(baseUrl).origin;
@@ -1 +1 @@
1
- {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/lib/crawl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/lib/crawl.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,29 @@ export interface Dimensions {
2
2
  width: number;
3
3
  height: number;
4
4
  }
5
+ /**
6
+ * URLs of the canonical artifacts on the remote (= S3). Only populated when
7
+ * `capture` actually pushed (= default mode, S3 destination). `--dry-run` and
8
+ * `local` destination leave this undefined.
9
+ *
10
+ * - `after`: the new `latest.png` URL
11
+ * - `before`: the previous `latest.png` URL (= `previous.png`). Undefined on
12
+ * the first push for this id (no prior version existed).
13
+ *
14
+ * No `diff` URL — kagemusha intentionally does not publish a pre-generated
15
+ * diff visualization. Consumers compare before vs after raw images instead.
16
+ */
17
+ export interface ResultUrls {
18
+ after: string;
19
+ before?: string;
20
+ }
5
21
  export type DiffStatus = {
6
22
  id: string;
7
23
  status: "unchanged";
8
24
  } | {
9
25
  id: string;
10
26
  status: "new";
27
+ urls?: ResultUrls;
11
28
  } | {
12
29
  id: string;
13
30
  status: "missing";
@@ -17,13 +34,14 @@ export type DiffStatus = {
17
34
  status: "changed";
18
35
  reason: "pixel-diff";
19
36
  diffPercentage: number;
20
- diffPath: string;
37
+ urls?: ResultUrls;
21
38
  } | {
22
39
  id: string;
23
40
  status: "changed";
24
41
  reason: "layout-diff";
25
42
  canonical: Dimensions;
26
43
  staging: Dimensions;
44
+ urls?: ResultUrls;
27
45
  };
28
46
  export interface DiffOptions {
29
47
  /** Color difference threshold per pixel (0-1). Lower = stricter. Default 0.1 */
@@ -45,8 +63,9 @@ export type DiffResult = {
45
63
  diffPercentage: number;
46
64
  };
47
65
  /**
48
- * Compare two PNG files using pixelmatch and write the diff visualization.
49
- * If dimensions differ, returns layout-diff without writing a diff image.
66
+ * Compare two PNG files using pixelmatch. Returns a structured result with
67
+ * the diff percentage; we deliberately don't write a diff PNG anywhere
68
+ * (= the red overlay is alarming + adds little value over the raw pair).
50
69
  */
51
- export declare const diffImages: (baseline: string, current: string, diffPath: string, options?: DiffOptions) => Promise<DiffResult>;
70
+ export declare const diffImages: (baseline: string, current: string, options?: DiffOptions) => Promise<DiffResult>;
52
71
  //# sourceMappingURL=diff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/lib/diff.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GACnB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD;IACA,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAChB,GACD;IACA,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC;CACnB,CAAC;AAEL,MAAM,WAAW,WAAW;IAC3B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,UAAU,GACnB;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IACA,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC;CACnB,GACD;IACA,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACtB,CAAC;AAKL;;;GAGG;AACH,eAAO,MAAM,UAAU,GACtB,UAAU,MAAM,EAChB,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,UAAS,WAAgB,KACvB,OAAO,CAAC,UAAU,CAoCpB,CAAC"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/lib/diff.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GACnB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GAChD;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD;IACA,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;CACjB,GACD;IACA,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;CACjB,CAAC;AAEL,MAAM,WAAW,WAAW;IAC3B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,UAAU,GACnB;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IACA,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC;CACnB,GACD;IACA,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACtB,CAAC;AAKL;;;;GAIG;AACH,eAAO,MAAM,UAAU,GACtB,UAAU,MAAM,EAChB,SAAS,MAAM,EACf,UAAS,WAAgB,KACvB,OAAO,CAAC,UAAU,CAkCpB,CAAC"}
package/dist/lib/diff.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import fs from "node:fs";
2
- import path from "node:path";
3
2
  import pixelmatch from "pixelmatch";
4
3
  import { PNG } from "pngjs";
5
4
  const readPng = (filePath) => PNG.sync.read(fs.readFileSync(filePath));
6
5
  /**
7
- * Compare two PNG files using pixelmatch and write the diff visualization.
8
- * If dimensions differ, returns layout-diff without writing a diff image.
6
+ * Compare two PNG files using pixelmatch. Returns a structured result with
7
+ * the diff percentage; we deliberately don't write a diff PNG anywhere
8
+ * (= the red overlay is alarming + adds little value over the raw pair).
9
9
  */
10
- export const diffImages = async (baseline, current, diffPath, options = {}) => {
10
+ export const diffImages = async (baseline, current, options = {}) => {
11
11
  const a = readPng(baseline);
12
12
  const b = readPng(current);
13
13
  if (a.width !== b.width || a.height !== b.height) {
@@ -19,6 +19,7 @@ export const diffImages = async (baseline, current, diffPath, options = {}) => {
19
19
  };
20
20
  }
21
21
  const { width, height } = a;
22
+ // pixelmatch requires an output buffer even though we discard it.
22
23
  const diff = new PNG({ width, height });
23
24
  const diffCount = pixelmatch(a.data, b.data, diff.data, width, height, {
24
25
  threshold: options.pixelThreshold ?? 0.1,
@@ -29,8 +30,6 @@ export const diffImages = async (baseline, current, diffPath, options = {}) => {
29
30
  if (diffCount === 0) {
30
31
  return { match: true };
31
32
  }
32
- fs.mkdirSync(path.dirname(diffPath), { recursive: true });
33
- fs.writeFileSync(diffPath, PNG.sync.write(diff));
34
33
  return {
35
34
  match: false,
36
35
  reason: "pixel-diff",
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/lib/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAgD5B,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAO,EAAE,CACzC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC9B,QAAgB,EAChB,OAAe,EACf,QAAgB,EAChB,UAAuB,EAAE,EACH,EAAE;IACxB,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAClD,OAAO;YACN,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,aAAa;YACrB,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAC/C,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SAC7C,CAAC;IACH,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAExC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;QACtE,SAAS,EAAE,OAAO,CAAC,cAAc,IAAI,GAAG;QACxC,wEAAwE;QACxE,oEAAoE;QACpE,SAAS,EAAE,OAAO,CAAC,kBAAkB,KAAK,KAAK;KAC/C,CAAC,CAAC;IAEH,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjD,OAAO;QACN,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,YAAY;QACpB,SAAS;QACT,cAAc,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG;KACpD,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/lib/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAkE5B,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAO,EAAE,CACzC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC9B,QAAgB,EAChB,OAAe,EACf,UAAuB,EAAE,EACH,EAAE;IACxB,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAClD,OAAO;YACN,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,aAAa;YACrB,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAC/C,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SAC7C,CAAC;IACH,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,kEAAkE;IAClE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAExC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;QACtE,SAAS,EAAE,OAAO,CAAC,cAAc,IAAI,GAAG;QACxC,wEAAwE;QACxE,oEAAoE;QACpE,SAAS,EAAE,OAAO,CAAC,kBAAkB,KAAK,KAAK;KAC/C,CAAC,CAAC;IAEH,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,OAAO;QACN,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,YAAY;QACpB,SAAS;QACT,cAAc,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG;KACpD,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ type Page = import("playwright-core").Page;
2
+ /**
3
+ * After `page.goto({ waitUntil: "load" })`, wait for the SPA to settle before
4
+ * capturing or letting the user edit. Strategy:
5
+ *
6
+ * 1. Best-effort `networkidle` with a 3s cap — succeeds quickly on pages
7
+ * whose initial API fetches complete fast. SPAs with permanent socket
8
+ * connections never reach networkidle, but we cap the wait so they don't
9
+ * hang the run.
10
+ * 2. 500ms hydration buffer so React / Vue have time to mount after the
11
+ * initial render.
12
+ *
13
+ * Pages that need more than this should add a per-definition
14
+ * `beforeCapture: [{action:"waitForSelector",selector:"..."}]`.
15
+ */
16
+ export declare const waitForPageReady: (page: Page) => Promise<void>;
17
+ export {};
18
+ //# sourceMappingURL=page-ready.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-ready.d.ts","sourceRoot":"","sources":["../../src/lib/page-ready.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG,OAAO,iBAAiB,EAAE,IAAI,CAAC;AAE3C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,IAAI,CAG/D,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * After `page.goto({ waitUntil: "load" })`, wait for the SPA to settle before
3
+ * capturing or letting the user edit. Strategy:
4
+ *
5
+ * 1. Best-effort `networkidle` with a 3s cap — succeeds quickly on pages
6
+ * whose initial API fetches complete fast. SPAs with permanent socket
7
+ * connections never reach networkidle, but we cap the wait so they don't
8
+ * hang the run.
9
+ * 2. 500ms hydration buffer so React / Vue have time to mount after the
10
+ * initial render.
11
+ *
12
+ * Pages that need more than this should add a per-definition
13
+ * `beforeCapture: [{action:"waitForSelector",selector:"..."}]`.
14
+ */
15
+ export const waitForPageReady = async (page) => {
16
+ await page.waitForLoadState("networkidle", { timeout: 3000 }).catch(() => { });
17
+ await page.waitForTimeout(500);
18
+ };
19
+ //# sourceMappingURL=page-ready.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-ready.js","sourceRoot":"","sources":["../../src/lib/page-ready.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAU,EAAiB,EAAE;IACnE,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const launchOptionsFor: () => {
2
+ channel: "chrome";
3
+ };
4
+ //# sourceMappingURL=playwright-launch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-launch.d.ts","sourceRoot":"","sources":["../../src/lib/playwright-launch.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,gBAAgB,QAAO;IAAE,OAAO,EAAE,QAAQ,CAAA;CAErD,CAAC"}
@@ -0,0 +1,11 @@
1
+ // kagemusha は Playwright の API (= playwright-core) だけ使い、browser binary
2
+ // は bundle しない。`channel: "chrome"` で OS インストール済みの Google
3
+ // Chrome を起動する。これで `npm install` 時の ~300MB chromium download も、
4
+ // pnpm の post-install 制限もまるごと回避できる。
5
+ //
6
+ // 前提: 実行環境 (= 開発者の OS / CI runner) に Chrome がインストール済み。
7
+ // CI の場合は browser-actions/setup-chrome 等で事前 install する。
8
+ export const launchOptionsFor = () => ({
9
+ channel: "chrome",
10
+ });
11
+ //# sourceMappingURL=playwright-launch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-launch.js","sourceRoot":"","sources":["../../src/lib/playwright-launch.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yDAAyD;AACzD,gEAAgE;AAChE,oCAAoC;AACpC,EAAE;AACF,uDAAuD;AACvD,wDAAwD;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAA0B,EAAE,CAAC,CAAC;IAC7D,OAAO,EAAE,QAAQ;CACjB,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { KagemushaConfig, ScreenshotDefinition } from "../types.js";
1
+ import type { CaptureAction, KagemushaConfig, ScreenshotDefinition } from "../types.js";
2
+ type Page = import("playwright-core").Page;
2
3
  export interface CaptureFailure {
3
4
  id: string;
4
5
  reason: string;
@@ -6,4 +7,6 @@ export interface CaptureFailure {
6
7
  export declare const captureScreenshots: (config: KagemushaConfig, definitions: ScreenshotDefinition[], projectRoot: string, options?: {
7
8
  outputDir?: string;
8
9
  }) => Promise<CaptureFailure[]>;
10
+ export declare const executeActions: (page: Page, actions: CaptureAction[]) => Promise<void>;
11
+ export {};
9
12
  //# sourceMappingURL=screenshot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/lib/screenshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,eAAe,EACf,oBAAoB,EACpB,MAAM,aAAa,CAAC;AAmBrB,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,GAC9B,QAAQ,eAAe,EACvB,aAAa,oBAAoB,EAAE,EACnC,aAAa,MAAM,EACnB,UAAS;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,KAClC,OAAO,CAAC,cAAc,EAAE,CA6B1B,CAAC"}
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/lib/screenshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,MAAM,aAAa,CAAC;AAOrB,KAAK,IAAI,GAAG,OAAO,iBAAiB,EAAE,IAAI,CAAC;AAc3C,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,GAC9B,QAAQ,eAAe,EACvB,aAAa,oBAAoB,EAAE,EACnC,aAAa,MAAM,EACnB,UAAS;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,KAClC,OAAO,CAAC,cAAc,EAAE,CAgC1B,CAAC;AA8EF,eAAO,MAAM,cAAc,GAC1B,MAAM,IAAI,EACV,SAAS,aAAa,EAAE,KACtB,OAAO,CAAC,IAAI,CAqDd,CAAC"}