@wasao/kagemusha 0.1.0 → 0.2.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 (96) hide show
  1. package/README.md +497 -58
  2. package/dist/commands/add.d.ts +6 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +26 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/capture.d.ts +4 -2
  7. package/dist/commands/capture.d.ts.map +1 -1
  8. package/dist/commands/capture.js +236 -11
  9. package/dist/commands/capture.js.map +1 -1
  10. package/dist/commands/discover.d.ts +2 -0
  11. package/dist/commands/discover.d.ts.map +1 -0
  12. package/dist/commands/discover.js +62 -0
  13. package/dist/commands/discover.js.map +1 -0
  14. package/dist/commands/edit.d.ts +6 -0
  15. package/dist/commands/edit.d.ts.map +1 -0
  16. package/dist/commands/edit.js +120 -0
  17. package/dist/commands/edit.js.map +1 -0
  18. package/dist/commands/init.d.ts +1 -1
  19. package/dist/commands/init.d.ts.map +1 -1
  20. package/dist/commands/init.js +220 -118
  21. package/dist/commands/init.js.map +1 -1
  22. package/dist/commands/list.d.ts +2 -0
  23. package/dist/commands/list.d.ts.map +1 -0
  24. package/dist/commands/list.js +33 -0
  25. package/dist/commands/list.js.map +1 -0
  26. package/dist/commands/login.d.ts +6 -0
  27. package/dist/commands/login.d.ts.map +1 -0
  28. package/dist/commands/login.js +142 -0
  29. package/dist/commands/login.js.map +1 -0
  30. package/dist/commands/validate.js +1 -1
  31. package/dist/commands/validate.js.map +1 -1
  32. package/dist/editor/inject-script.d.ts +2 -0
  33. package/dist/editor/inject-script.d.ts.map +1 -0
  34. package/dist/editor/inject-script.js +768 -0
  35. package/dist/editor/inject-script.js.map +1 -0
  36. package/dist/index.js +32 -20
  37. package/dist/index.js.map +1 -1
  38. package/dist/lib/annotate.d.ts +2 -2
  39. package/dist/lib/annotate.d.ts.map +1 -1
  40. package/dist/lib/annotate.js +36 -44
  41. package/dist/lib/annotate.js.map +1 -1
  42. package/dist/lib/auth.d.ts +18 -0
  43. package/dist/lib/auth.d.ts.map +1 -0
  44. package/dist/lib/auth.js +45 -0
  45. package/dist/lib/auth.js.map +1 -0
  46. package/dist/lib/aws-error.d.ts +7 -0
  47. package/dist/lib/aws-error.d.ts.map +1 -0
  48. package/dist/lib/aws-error.js +74 -0
  49. package/dist/lib/aws-error.js.map +1 -0
  50. package/dist/lib/canonical.d.ts +22 -0
  51. package/dist/lib/canonical.d.ts.map +1 -0
  52. package/dist/lib/canonical.js +92 -0
  53. package/dist/lib/canonical.js.map +1 -0
  54. package/dist/lib/config.d.ts +2 -0
  55. package/dist/lib/config.d.ts.map +1 -1
  56. package/dist/lib/config.js +23 -13
  57. package/dist/lib/config.js.map +1 -1
  58. package/dist/lib/crawl.d.ts +1 -1
  59. package/dist/lib/crawl.d.ts.map +1 -1
  60. package/dist/lib/crawl.js +213 -20
  61. package/dist/lib/crawl.js.map +1 -1
  62. package/dist/lib/definition.d.ts +2 -0
  63. package/dist/lib/definition.d.ts.map +1 -0
  64. package/dist/lib/definition.js +6 -0
  65. package/dist/lib/definition.js.map +1 -0
  66. package/dist/lib/diff.d.ts +52 -0
  67. package/dist/lib/diff.d.ts.map +1 -0
  68. package/dist/lib/diff.js +41 -0
  69. package/dist/lib/diff.js.map +1 -0
  70. package/dist/lib/login-error.d.ts +10 -0
  71. package/dist/lib/login-error.d.ts.map +1 -0
  72. package/dist/lib/login-error.js +13 -0
  73. package/dist/lib/login-error.js.map +1 -0
  74. package/dist/lib/screenshot.d.ts +8 -2
  75. package/dist/lib/screenshot.d.ts.map +1 -1
  76. package/dist/lib/screenshot.js +44 -61
  77. package/dist/lib/screenshot.js.map +1 -1
  78. package/dist/lib/staging.d.ts +8 -0
  79. package/dist/lib/staging.d.ts.map +1 -0
  80. package/dist/lib/staging.js +24 -0
  81. package/dist/lib/staging.js.map +1 -0
  82. package/dist/types.d.ts +5 -23
  83. package/dist/types.d.ts.map +1 -1
  84. package/package.json +18 -11
  85. package/dist/commands/preview.d.ts +0 -6
  86. package/dist/commands/preview.d.ts.map +0 -1
  87. package/dist/commands/preview.js +0 -33
  88. package/dist/commands/preview.js.map +0 -1
  89. package/dist/commands/run.d.ts +0 -6
  90. package/dist/commands/run.d.ts.map +0 -1
  91. package/dist/commands/run.js +0 -39
  92. package/dist/commands/run.js.map +0 -1
  93. package/dist/lib/upload.d.ts +0 -9
  94. package/dist/lib/upload.d.ts.map +0 -1
  95. package/dist/lib/upload.js +0 -43
  96. package/dist/lib/upload.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import pixelmatch from "pixelmatch";
4
+ import { PNG } from "pngjs";
5
+ const readPng = (filePath) => PNG.sync.read(fs.readFileSync(filePath));
6
+ /**
7
+ * Compare two PNG files using pixelmatch and write the diff visualization.
8
+ * If dimensions differ, returns layout-diff without writing a diff image.
9
+ */
10
+ export const diffImages = async (baseline, current, diffPath, options = {}) => {
11
+ const a = readPng(baseline);
12
+ const b = readPng(current);
13
+ if (a.width !== b.width || a.height !== b.height) {
14
+ return {
15
+ match: false,
16
+ reason: "layout-diff",
17
+ canonical: { width: a.width, height: a.height },
18
+ staging: { width: b.width, height: b.height },
19
+ };
20
+ }
21
+ const { width, height } = a;
22
+ const diff = new PNG({ width, height });
23
+ const diffCount = pixelmatch(a.data, b.data, diff.data, width, height, {
24
+ threshold: options.pixelThreshold ?? 0.1,
25
+ // pixelmatch's `includeAA: true` means "check AA pixels" (= flag them).
26
+ // Our `ignoreAntiAliasing` defaults true (= skip AA), so we invert.
27
+ includeAA: options.ignoreAntiAliasing === false,
28
+ });
29
+ if (diffCount === 0) {
30
+ return { match: true };
31
+ }
32
+ fs.mkdirSync(path.dirname(diffPath), { recursive: true });
33
+ fs.writeFileSync(diffPath, PNG.sync.write(diff));
34
+ return {
35
+ match: false,
36
+ reason: "pixel-diff",
37
+ diffCount,
38
+ diffPercentage: (diffCount / (width * height)) * 100,
39
+ };
40
+ };
41
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Marker error thrown by `kagemusha login` after it has already printed a
3
+ * friendly diagnostic + screenshot path to stderr. Callers (e.g. capture)
4
+ * should treat this as "already explained, just exit" — no extra log, no
5
+ * stack trace.
6
+ */
7
+ export declare class LoginError extends Error {
8
+ constructor(message: string);
9
+ }
10
+ //# sourceMappingURL=login-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-error.d.ts","sourceRoot":"","sources":["../../src/lib/login-error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI3B"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Marker error thrown by `kagemusha login` after it has already printed a
3
+ * friendly diagnostic + screenshot path to stderr. Callers (e.g. capture)
4
+ * should treat this as "already explained, just exit" — no extra log, no
5
+ * stack trace.
6
+ */
7
+ export class LoginError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = "LoginError";
11
+ }
12
+ }
13
+ //# sourceMappingURL=login-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-error.js","sourceRoot":"","sources":["../../src/lib/login-error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACpC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,CAAC;CACD"}
@@ -1,3 +1,9 @@
1
- import type { CaptureResult, KagemushaConfig, ScreenshotDefinition } from "../types.js";
2
- export declare function captureScreenshots(config: KagemushaConfig, definitions: ScreenshotDefinition[], projectRoot: string): Promise<CaptureResult[]>;
1
+ import type { KagemushaConfig, ScreenshotDefinition } from "../types.js";
2
+ export interface CaptureFailure {
3
+ id: string;
4
+ reason: string;
5
+ }
6
+ export declare const captureScreenshots: (config: KagemushaConfig, definitions: ScreenshotDefinition[], projectRoot: string, options?: {
7
+ outputDir?: string;
8
+ }) => Promise<CaptureFailure[]>;
3
9
  //# 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,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,MAAM,aAAa,CAAC;AAmBrB,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,oBAAoB,EAAE,EACnC,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAsB1B"}
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,6 +1,9 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- async function loadPlaywright() {
3
+ import { drawAnnotations } from "./annotate.js";
4
+ import { defaultContextOptions } from "./auth.js";
5
+ import { getOutputDir } from "./canonical.js";
6
+ const loadPlaywright = async () => {
4
7
  try {
5
8
  return await import("playwright-chromium");
6
9
  }
@@ -8,43 +11,33 @@ async function loadPlaywright() {
8
11
  throw new Error("Playwright is required for screenshot capture.\n" +
9
12
  "Install it with: npm install -D playwright && npx playwright install chromium");
10
13
  }
11
- }
12
- const SCREENSHOTS_DIR = "screenshots";
13
- export async function captureScreenshots(config, definitions, projectRoot) {
14
- const outputDir = path.join(projectRoot, SCREENSHOTS_DIR);
14
+ };
15
+ export const captureScreenshots = async (config, definitions, projectRoot, options = {}) => {
16
+ const outputDir = options.outputDir ?? getOutputDir(config, projectRoot);
15
17
  fs.mkdirSync(outputDir, { recursive: true });
16
18
  const { chromium } = await loadPlaywright();
17
19
  const browser = await chromium.launch({ headless: true });
18
- const results = [];
20
+ const failures = [];
19
21
  try {
20
- const context = await createAuthenticatedContext(browser, config);
22
+ const context = await browser.newContext(defaultContextOptions(config, projectRoot));
21
23
  for (const def of definitions) {
22
- const result = await captureOne(context, config, def, outputDir);
23
- results.push(result);
24
+ try {
25
+ await captureOne(context, config, def, outputDir);
26
+ }
27
+ catch (e) {
28
+ const reason = e instanceof Error ? e.message : String(e);
29
+ failures.push({ id: def.id, reason });
30
+ console.error(` ⚠ ${def.id}: ${reason}`);
31
+ }
24
32
  }
25
33
  await context.close();
26
34
  }
27
35
  finally {
28
36
  await browser.close();
29
37
  }
30
- return results;
31
- }
32
- async function createAuthenticatedContext(browser, config) {
33
- const viewport = config.screenshot.defaultViewport;
34
- const context = await browser.newContext({
35
- viewport: { width: viewport.width, height: viewport.height },
36
- deviceScaleFactor: viewport.deviceScaleFactor ?? 2,
37
- });
38
- if (config.auth) {
39
- const page = await context.newPage();
40
- const loginUrl = new URL(config.auth.loginUrl, config.app.baseUrl).toString();
41
- await page.goto(loginUrl);
42
- await executeActions(page, config.auth.steps);
43
- await page.close();
44
- }
45
- return context;
46
- }
47
- async function captureOne(context, config, def, outputDir) {
38
+ return failures;
39
+ };
40
+ const captureOne = async (context, config, def, outputDir) => {
48
41
  const page = await context.newPage();
49
42
  if (def.viewport) {
50
43
  await page.setViewportSize({
@@ -53,43 +46,31 @@ async function captureOne(context, config, def, outputDir) {
53
46
  });
54
47
  }
55
48
  const url = resolveUrl(config.app.baseUrl, def.url, def.urlParams);
56
- await page.goto(url, { waitUntil: "networkidle" });
49
+ await page.goto(url, { waitUntil: "networkidle", timeout: 60000 });
57
50
  if (def.hideElements?.length) {
58
51
  await hideElements(page, def.hideElements);
59
52
  }
60
53
  if (def.beforeCapture?.length) {
61
54
  await executeActions(page, def.beforeCapture);
62
55
  }
63
- const rawPath = path.join(outputDir, `${def.id}.raw.png`);
64
- await takeScreenshot(page, def, rawPath);
56
+ const buffer = await takeScreenshotBuffer(page, def);
65
57
  await page.close();
66
- const timestamp = new Date().toISOString();
67
- return {
68
- id: def.id,
69
- rawPath,
70
- annotatedPath: rawPath, // annotate step will create the final version
71
- timestamp,
72
- };
73
- }
74
- async function takeScreenshot(page, def, outputPath) {
58
+ const finalPath = path.join(outputDir, `${def.id}.png`);
59
+ if (def.decorations?.length) {
60
+ const dpr = config.screenshot.defaultViewport.deviceScaleFactor ?? 2;
61
+ await drawAnnotations(buffer, finalPath, def.decorations, def.capture, dpr);
62
+ }
63
+ else {
64
+ fs.writeFileSync(finalPath, buffer);
65
+ }
66
+ };
67
+ const takeScreenshotBuffer = async (page, def) => {
75
68
  switch (def.capture.mode) {
76
69
  case "fullPage":
77
- await page.screenshot({ path: outputPath, fullPage: true });
78
- break;
79
- case "selector": {
80
- const element = await page.waitForSelector(def.capture.selector, {
81
- timeout: 10000,
82
- });
83
- if (!element) {
84
- throw new Error(`Element not found: ${def.capture.selector} (definition: ${def.id})`);
85
- }
86
- await element.screenshot({ path: outputPath });
87
- break;
88
- }
70
+ return await page.screenshot({ fullPage: true });
89
71
  case "crop": {
90
72
  const { start, end } = def.capture.crop;
91
- await page.screenshot({
92
- path: outputPath,
73
+ return await page.screenshot({
93
74
  clip: {
94
75
  x: start.x,
95
76
  y: start.y,
@@ -97,11 +78,13 @@ async function takeScreenshot(page, def, outputPath) {
97
78
  height: end.y - start.y,
98
79
  },
99
80
  });
100
- break;
101
81
  }
82
+ default:
83
+ console.warn(` ⚠ ${def.id}: unknown capture mode "${def.capture.mode}", falling back to fullPage.`);
84
+ return await page.screenshot({ fullPage: true });
102
85
  }
103
- }
104
- async function executeActions(page, actions) {
86
+ };
87
+ const executeActions = async (page, actions) => {
105
88
  for (const action of actions) {
106
89
  switch (action.action) {
107
90
  case "click":
@@ -144,8 +127,8 @@ async function executeActions(page, actions) {
144
127
  break;
145
128
  }
146
129
  }
147
- }
148
- async function hideElements(page, selectors) {
130
+ };
131
+ const hideElements = async (page, selectors) => {
149
132
  for (const selector of selectors) {
150
133
  await page.evaluate((sel) => {
151
134
  document.querySelectorAll(sel).forEach((el) => {
@@ -153,8 +136,8 @@ async function hideElements(page, selectors) {
153
136
  });
154
137
  }, selector);
155
138
  }
156
- }
157
- function resolveUrl(baseUrl, urlPath, params) {
139
+ };
140
+ const resolveUrl = (baseUrl, urlPath, params) => {
158
141
  let resolved = urlPath;
159
142
  if (params) {
160
143
  for (const [key, value] of Object.entries(params)) {
@@ -162,5 +145,5 @@ function resolveUrl(baseUrl, urlPath, params) {
162
145
  }
163
146
  }
164
147
  return new URL(resolved, baseUrl).toString();
165
- }
148
+ };
166
149
  //# sourceMappingURL=screenshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/lib/screenshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/lib/screenshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare const getStagingDir: (projectRoot: string) => string;
2
+ export declare const getStagingPath: (projectRoot: string, id: string) => string;
3
+ export declare const getReportDiffPath: (projectRoot: string, id: string) => string;
4
+ export declare const ensureStagingDirs: (projectRoot: string) => void;
5
+ /** Move staging file to canonical location, overwriting if it exists. */
6
+ export declare const promoteToCanonical: (stagingPath: string, canonicalPath: string) => void;
7
+ export declare const cleanupStaging: (projectRoot: string) => void;
8
+ //# sourceMappingURL=staging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../src/lib/staging.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,GAAI,aAAa,MAAM,KAAG,MAChB,CAAC;AAErC,eAAO,MAAM,cAAc,GAAI,aAAa,MAAM,EAAE,IAAI,MAAM,KAAG,MAChB,CAAC;AAElD,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,EAAE,IAAI,MAAM,KAAG,MACd,CAAC;AAEvD,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,KAAG,IAGvD,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,GAC9B,aAAa,MAAM,EACnB,eAAe,MAAM,KACnB,IAIF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,aAAa,MAAM,KAAG,IAKpD,CAAC"}
@@ -0,0 +1,24 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ const STAGING_DIR = path.join(".kagemusha", ".staging");
4
+ const REPORTS_DIR = path.join("reports", "diff");
5
+ export const getStagingDir = (projectRoot) => path.join(projectRoot, STAGING_DIR);
6
+ export const getStagingPath = (projectRoot, id) => path.join(projectRoot, STAGING_DIR, `${id}.png`);
7
+ export const getReportDiffPath = (projectRoot, id) => path.join(projectRoot, REPORTS_DIR, `${id}.diff.png`);
8
+ export const ensureStagingDirs = (projectRoot) => {
9
+ fs.mkdirSync(getStagingDir(projectRoot), { recursive: true });
10
+ fs.mkdirSync(path.join(projectRoot, REPORTS_DIR), { recursive: true });
11
+ };
12
+ /** Move staging file to canonical location, overwriting if it exists. */
13
+ export const promoteToCanonical = (stagingPath, canonicalPath) => {
14
+ fs.mkdirSync(path.dirname(canonicalPath), { recursive: true });
15
+ fs.copyFileSync(stagingPath, canonicalPath);
16
+ fs.rmSync(stagingPath, { force: true });
17
+ };
18
+ export const cleanupStaging = (projectRoot) => {
19
+ const dir = getStagingDir(projectRoot);
20
+ if (fs.existsSync(dir)) {
21
+ fs.rmSync(dir, { recursive: true, force: true });
22
+ }
23
+ };
24
+ //# sourceMappingURL=staging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.js","sourceRoot":"","sources":["../../src/lib/staging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AACxD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAmB,EAAU,EAAE,CAC5D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,WAAmB,EAAE,EAAU,EAAU,EAAE,CACzE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAE,EAAU,EAAU,EAAE,CAC5E,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAQ,EAAE;IAC9D,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,WAAmB,EACnB,aAAqB,EACd,EAAE;IACT,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC5C,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,WAAmB,EAAQ,EAAE;IAC3D,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACF,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -2,14 +2,13 @@ export interface KagemushaConfig {
2
2
  app: {
3
3
  baseUrl: string;
4
4
  };
5
- auth?: {
6
- loginUrl: string;
7
- steps: CaptureAction[];
8
- };
9
5
  screenshot: {
10
6
  defaultViewport: Viewport;
11
7
  defaultDiffThreshold: number;
12
8
  };
9
+ auth?: {
10
+ scriptPath?: string;
11
+ };
13
12
  publish?: {
14
13
  destination: "local" | "s3" | "intercom";
15
14
  outputDir?: string;
@@ -39,7 +38,7 @@ export interface ScreenshotDefinition {
39
38
  urlParams?: Record<string, string>;
40
39
  viewport?: Viewport;
41
40
  beforeCapture?: CaptureAction[];
42
- capture: CaptureConfig;
41
+ capture: CaptureSpec;
43
42
  decorations?: Decoration[];
44
43
  hideElements?: string[];
45
44
  intercom?: {
@@ -79,11 +78,8 @@ export type CaptureAction = {
79
78
  action: "evaluate";
80
79
  script: string;
81
80
  };
82
- export type CaptureConfig = {
81
+ export type CaptureSpec = {
83
82
  mode: "fullPage";
84
- } | {
85
- mode: "selector";
86
- selector: string;
87
83
  } | {
88
84
  mode: "crop";
89
85
  crop: {
@@ -151,18 +147,4 @@ export interface LabelDecoration {
151
147
  background?: string;
152
148
  };
153
149
  }
154
- export interface CaptureResult {
155
- id: string;
156
- rawPath: string;
157
- annotatedPath: string;
158
- timestamp: string;
159
- }
160
- export interface CompareResult {
161
- id: string;
162
- status: "unchanged" | "minor" | "changed";
163
- diffRate: number;
164
- beforePath?: string;
165
- afterPath?: string;
166
- diffPath?: string;
167
- }
168
150
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wasao/kagemusha",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Auto-update help center screenshots when your code changes. The shadow warrior for your documentation.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -12,15 +12,9 @@
12
12
  "files": [
13
13
  "dist"
14
14
  ],
15
- "scripts": {
16
- "build": "tsc",
17
- "dev": "bun --watch src/index.ts",
18
- "typecheck": "tsc --noEmit",
19
- "lint": "bunx biome check .",
20
- "format": "bunx biome format --write .",
21
- "test": "bun test",
22
- "prepare": "husky",
23
- "prepublishOnly": "bun run build"
15
+ "publishConfig": {
16
+ "registry": "https://registry.npmjs.org/",
17
+ "access": "public"
24
18
  },
25
19
  "keywords": [
26
20
  "screenshot",
@@ -47,7 +41,9 @@
47
41
  "commander": "^13.0.0",
48
42
  "glob": "^11.0.0",
49
43
  "inquirer": "^12.0.0",
44
+ "pixelmatch": "^7.0.0",
50
45
  "playwright-chromium": "^1.50.0",
46
+ "pngjs": "^7.0.0",
51
47
  "sharp": "^0.34.5",
52
48
  "yaml": "^2.7.0"
53
49
  },
@@ -56,8 +52,19 @@
56
52
  "@types/bun": "latest",
57
53
  "@types/inquirer": "^9.0.0",
58
54
  "@types/node": "^22.0.0",
55
+ "@types/pixelmatch": "^5.2.6",
56
+ "@types/pngjs": "^6.0.5",
59
57
  "@types/sharp": "^0.32.0",
60
58
  "husky": "^9.1.7",
61
59
  "typescript": "^5.7.0"
60
+ },
61
+ "scripts": {
62
+ "build": "tsc",
63
+ "build:clean": "rm -rf dist && tsc",
64
+ "dev": "bun --watch src/index.ts",
65
+ "typecheck": "tsc --noEmit",
66
+ "lint": "bunx biome check .",
67
+ "format": "bunx biome format --write .",
68
+ "test": "bun test"
62
69
  }
63
- }
70
+ }
@@ -1,6 +0,0 @@
1
- interface PreviewOptions {
2
- id?: string;
3
- }
4
- export declare function previewCommand(options: PreviewOptions): Promise<void>;
5
- export {};
6
- //# sourceMappingURL=preview.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAMA,UAAU,cAAc;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC3E"}
@@ -1,33 +0,0 @@
1
- import chalk from "chalk";
2
- import { chromium } from "playwright-chromium";
3
- import { annotateScreenshots } from "../lib/annotate.js";
4
- import { findProjectRoot, loadConfig, loadDefinitions } from "../lib/config.js";
5
- import { captureScreenshots } from "../lib/screenshot.js";
6
- export async function previewCommand(options) {
7
- console.log(chalk.bold("\n🄷 Kagemusha — Preview\n"));
8
- const projectRoot = findProjectRoot();
9
- const config = loadConfig(projectRoot);
10
- let definitions = loadDefinitions(projectRoot);
11
- if (options.id) {
12
- definitions = definitions.filter((d) => d.id === options.id);
13
- if (definitions.length === 0) {
14
- console.log(chalk.red(`Definition not found: ${options.id}`));
15
- return;
16
- }
17
- }
18
- console.log(chalk.blue(`šŸ“ø Capturing ${definitions.length} screenshot(s)...`));
19
- const results = await captureScreenshots(config, definitions, projectRoot);
20
- const annotated = await annotateScreenshots(definitions, results, projectRoot);
21
- console.log(chalk.green("\nāœ… Screenshots captured. Opening preview...\n"));
22
- // Open annotated screenshots in browser
23
- const browser = await chromium.launch({ headless: false });
24
- const context = await browser.newContext();
25
- for (const result of annotated) {
26
- const page = await context.newPage();
27
- await page.goto(`file://${result.annotatedPath}`);
28
- }
29
- console.log(chalk.gray("Press Ctrl+C to close preview.\n"));
30
- // Keep process alive until user closes
31
- await new Promise(() => { });
32
- }
33
- //# sourceMappingURL=preview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAuB;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAEvC,IAAI,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO;QACR,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,MAAM,mBAAmB,CAAC,CACjE,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAC1C,WAAW,EACX,OAAO,EACP,WAAW,CACX,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAE3E,wCAAwC;IACxC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAE3C,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAE5D,uCAAuC;IACvC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC7B,CAAC"}
@@ -1,6 +0,0 @@
1
- interface RunOptions {
2
- ids?: string;
3
- }
4
- export declare function runCommand(options: RunOptions): Promise<void>;
5
- export {};
6
- //# sourceMappingURL=run.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAMA,UAAU,UAAU;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DnE"}
@@ -1,39 +0,0 @@
1
- import chalk from "chalk";
2
- import { annotateScreenshots } from "../lib/annotate.js";
3
- import { findProjectRoot, loadConfig, loadDefinitions } from "../lib/config.js";
4
- import { captureScreenshots } from "../lib/screenshot.js";
5
- import { uploadToS3 } from "../lib/upload.js";
6
- export async function runCommand(options) {
7
- console.log(chalk.bold("\n🄷 Kagemusha — Running pipeline\n"));
8
- const projectRoot = findProjectRoot();
9
- const config = loadConfig(projectRoot);
10
- let definitions = loadDefinitions(projectRoot);
11
- if (options.ids) {
12
- const ids = options.ids.split(",").map((s) => s.trim());
13
- definitions = definitions.filter((d) => ids.includes(d.id));
14
- }
15
- if (definitions.length === 0) {
16
- console.log(chalk.yellow("No screenshot definitions to process. Skipping."));
17
- return;
18
- }
19
- console.log(chalk.gray(` Found ${definitions.length} definition(s) to process\n`));
20
- // Step 1: Capture
21
- console.log(chalk.blue("šŸ“ø Capturing screenshots..."));
22
- const captureResults = await captureScreenshots(config, definitions, projectRoot);
23
- console.log(chalk.green(` āœ“ Captured ${captureResults.length} screenshot(s)\n`));
24
- // Step 2: Annotate
25
- console.log(chalk.blue("šŸŽØ Drawing annotations..."));
26
- const annotatedResults = await annotateScreenshots(definitions, captureResults, projectRoot);
27
- console.log(chalk.green(` āœ“ Annotated ${annotatedResults.length} screenshot(s)\n`));
28
- // Step 3: Publish
29
- if (config.publish?.destination === "s3") {
30
- console.log(chalk.blue("ā˜ļø Uploading to S3..."));
31
- const uploadResults = await uploadToS3(config, annotatedResults, projectRoot);
32
- console.log(chalk.green(` āœ“ Uploaded ${uploadResults.length} screenshot(s)\n`));
33
- }
34
- else {
35
- console.log(chalk.green(` Screenshots saved locally\n`));
36
- }
37
- console.log(chalk.bold.green("āœ… Pipeline complete!\n"));
38
- }
39
- //# sourceMappingURL=run.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAM9C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAE/D,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAC/D,CAAC;QACF,OAAO;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,CAAC,MAAM,6BAA6B,CAAC,CACtE,CAAC;IAEF,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAC9C,MAAM,EACN,WAAW,EACX,WAAW,CACX,CAAC;IACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,gBAAgB,cAAc,CAAC,MAAM,kBAAkB,CAAC,CACpE,CAAC;IAEF,mBAAmB;IACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CACjD,WAAW,EACX,cAAc,EACd,WAAW,CACX,CAAC;IACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,iBAAiB,gBAAgB,CAAC,MAAM,kBAAkB,CAAC,CACvE,CAAC;IAEF,kBAAkB;IAClB,IAAI,MAAM,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,MAAM,UAAU,CACrC,MAAM,EACN,gBAAgB,EAChB,WAAW,CACX,CAAC;QACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,KAAK,CAAC,gBAAgB,aAAa,CAAC,MAAM,kBAAkB,CAAC,CACnE,CAAC;IACH,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { CaptureResult, KagemushaConfig } from "../types.js";
2
- export interface UploadResult {
3
- id: string;
4
- url: string;
5
- bucket: string;
6
- key: string;
7
- }
8
- export declare function uploadToS3(config: KagemushaConfig, results: CaptureResult[], _projectRoot: string): Promise<UploadResult[]>;
9
- //# sourceMappingURL=upload.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,wBAAsB,UAAU,CAC/B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,aAAa,EAAE,EACxB,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC,CAmDzB"}