@vscode/component-explorer-cli 0.1.1-0 → 0.1.1-10
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 +177 -0
- package/dist/browserPage.js +4 -2
- package/dist/browserPage.js.map +1 -1
- package/dist/commands/acceptCommand.d.ts +3 -1
- package/dist/commands/acceptCommand.d.ts.map +1 -1
- package/dist/commands/acceptCommand.js +20 -8
- package/dist/commands/acceptCommand.js.map +1 -1
- package/dist/commands/compareCommand.d.ts +6 -1
- package/dist/commands/compareCommand.d.ts.map +1 -1
- package/dist/commands/compareCommand.js +51 -73
- package/dist/commands/compareCommand.js.map +1 -1
- package/dist/commands/mcpCommand.d.ts +10 -0
- package/dist/commands/mcpCommand.d.ts.map +1 -0
- package/dist/commands/mcpCommand.js +58 -0
- package/dist/commands/mcpCommand.js.map +1 -0
- package/dist/commands/screenshotCommand.d.ts +8 -2
- package/dist/commands/screenshotCommand.d.ts.map +1 -1
- package/dist/commands/screenshotCommand.js +70 -17
- package/dist/commands/screenshotCommand.js.map +1 -1
- package/dist/commands/serveCommand.d.ts +19 -0
- package/dist/commands/serveCommand.d.ts.map +1 -0
- package/dist/commands/serveCommand.js +194 -0
- package/dist/commands/serveCommand.js.map +1 -0
- package/dist/commands/watchCommand.d.ts +2 -2
- package/dist/commands/watchCommand.d.ts.map +1 -1
- package/dist/commands/watchCommand.js +39 -26
- package/dist/commands/watchCommand.js.map +1 -1
- package/dist/comparison.d.ts +60 -0
- package/dist/comparison.d.ts.map +1 -0
- package/dist/comparison.js +250 -0
- package/dist/comparison.js.map +1 -0
- package/dist/component-explorer-config.schema.json +183 -0
- package/dist/componentExplorer.d.ts +44 -2
- package/dist/componentExplorer.d.ts.map +1 -1
- package/dist/componentExplorer.js +103 -18
- package/dist/componentExplorer.js.map +1 -1
- package/dist/daemon/DaemonContext.d.ts +4 -0
- package/dist/daemon/DaemonContext.d.ts.map +1 -0
- package/dist/daemon/DaemonService.d.ts +188 -0
- package/dist/daemon/DaemonService.d.ts.map +1 -0
- package/dist/daemon/DaemonService.js +610 -0
- package/dist/daemon/DaemonService.js.map +1 -0
- package/dist/daemon/approvalStore.d.ts +51 -0
- package/dist/daemon/approvalStore.d.ts.map +1 -0
- package/dist/daemon/approvalStore.js +58 -0
- package/dist/daemon/approvalStore.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +13 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +68 -0
- package/dist/daemon/lifecycle.js.map +1 -0
- package/dist/daemon/pipeClient.d.ts +9 -0
- package/dist/daemon/pipeClient.d.ts.map +1 -0
- package/dist/daemon/pipeClient.js +111 -0
- package/dist/daemon/pipeClient.js.map +1 -0
- package/dist/daemon/pipeName.d.ts +2 -0
- package/dist/daemon/pipeName.d.ts.map +1 -0
- package/dist/daemon/pipeName.js +14 -0
- package/dist/daemon/pipeName.js.map +1 -0
- package/dist/daemon/pipeServer.d.ts +4 -0
- package/dist/daemon/pipeServer.d.ts.map +1 -0
- package/dist/daemon/pipeServer.js +25 -0
- package/dist/daemon/pipeServer.js.map +1 -0
- package/dist/daemon/types.d.ts +12 -0
- package/dist/daemon/types.d.ts.map +1 -0
- package/dist/dependencyInstaller.js +8 -5
- package/dist/dependencyInstaller.js.map +1 -1
- package/dist/explorerSession.d.ts +5 -3
- package/dist/explorerSession.d.ts.map +1 -1
- package/dist/explorerSession.js +11 -5
- package/dist/explorerSession.js.map +1 -1
- package/dist/external/vscode-observables/observables/dist/disposables.js +66 -0
- package/dist/external/vscode-observables/observables/dist/disposables.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/base.js +22 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/base.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js +37 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js +77 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugName.js +114 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugName.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/index.js +22 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/index.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js +356 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js +79 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/logging.js +100 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/logging.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js +143 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js +28 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js +362 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js +123 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js +81 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js +23 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js +226 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/transaction.js +87 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/transaction.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utils.js +68 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utils.js.map +1 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js +55 -0
- package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js.map +1 -0
- package/dist/formatValue.d.ts +2 -0
- package/dist/formatValue.d.ts.map +1 -0
- package/dist/formatValue.js +96 -0
- package/dist/formatValue.js.map +1 -0
- package/dist/formatValue.test.d.ts +2 -0
- package/dist/formatValue.test.d.ts.map +1 -0
- package/dist/git/gitCommitId.js +4 -2
- package/dist/git/gitCommitId.js.map +1 -1
- package/dist/git/gitCommitResolver.js +11 -3
- package/dist/git/gitCommitResolver.js.map +1 -1
- package/dist/git/gitService.js +5 -2
- package/dist/git/gitService.js.map +1 -1
- package/dist/git/gitUtils.js +10 -7
- package/dist/git/gitUtils.js.map +1 -1
- package/dist/git/gitWorktreeManager.js +5 -2
- package/dist/git/gitWorktreeManager.js.map +1 -1
- package/dist/httpServer.d.ts +9 -7
- package/dist/httpServer.d.ts.map +1 -1
- package/dist/httpServer.js +75 -11
- package/dist/httpServer.js.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +17 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +43 -6
- package/dist/logger.js.map +1 -1
- package/dist/mcp/McpServer.d.ts +58 -0
- package/dist/mcp/McpServer.d.ts.map +1 -0
- package/dist/mcp/McpServer.js +820 -0
- package/dist/mcp/McpServer.js.map +1 -0
- package/dist/packages/simple-api/dist/chunk-3R7GHWBM.js +137 -0
- package/dist/packages/simple-api/dist/chunk-3R7GHWBM.js.map +1 -0
- package/dist/packages/simple-api/dist/chunk-Q24JOMNK.js +27 -0
- package/dist/packages/simple-api/dist/chunk-Q24JOMNK.js.map +1 -0
- package/dist/packages/simple-api/dist/chunk-SGBCNXYH.js +24 -0
- package/dist/packages/simple-api/dist/chunk-SGBCNXYH.js.map +1 -0
- package/dist/packages/simple-api/dist/express.js +104 -0
- package/dist/packages/simple-api/dist/express.js.map +1 -0
- package/dist/resolveProject.d.ts +21 -0
- package/dist/resolveProject.d.ts.map +1 -0
- package/dist/resolveProject.js +39 -0
- package/dist/resolveProject.js.map +1 -0
- package/dist/screenshotCache.js +7 -4
- package/dist/screenshotCache.js.map +1 -1
- package/dist/sourceTreeId.js +4 -2
- package/dist/sourceTreeId.js.map +1 -1
- package/dist/storage.js +5 -2
- package/dist/storage.js.map +1 -1
- package/dist/utils.d.ts +24 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +50 -0
- package/dist/utils.js.map +1 -0
- package/dist/viteProjectRef.js +5 -2
- package/dist/viteProjectRef.js.map +1 -1
- package/dist/watchConfig.d.ts +41 -0
- package/dist/watchConfig.d.ts.map +1 -1
- package/dist/watchConfig.js +48 -23
- package/dist/watchConfig.js.map +1 -1
- package/package.json +19 -6
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Writable } from 'node:stream';
|
|
2
|
+
export interface CompareReportFixtureDetail {
|
|
3
|
+
readonly status: 'added' | 'removed' | 'changed' | 'unchanged';
|
|
4
|
+
readonly baselineHash?: string;
|
|
5
|
+
readonly currentHash?: string;
|
|
6
|
+
readonly baselineScreenshot?: string;
|
|
7
|
+
readonly currentScreenshot?: string;
|
|
8
|
+
readonly background?: 'light' | 'dark';
|
|
9
|
+
}
|
|
10
|
+
export interface CompareReport {
|
|
11
|
+
readonly timestamp: string;
|
|
12
|
+
readonly baseline: string;
|
|
13
|
+
readonly current: string;
|
|
14
|
+
readonly summary: {
|
|
15
|
+
readonly total: number;
|
|
16
|
+
readonly added: number;
|
|
17
|
+
readonly removed: number;
|
|
18
|
+
readonly changed: number;
|
|
19
|
+
readonly unchanged: number;
|
|
20
|
+
};
|
|
21
|
+
readonly fixtures: Record<string, CompareReportFixtureDetail>;
|
|
22
|
+
}
|
|
23
|
+
export interface ComparisonResult {
|
|
24
|
+
readonly added: string[];
|
|
25
|
+
readonly removed: string[];
|
|
26
|
+
readonly changed: string[];
|
|
27
|
+
readonly unchanged: string[];
|
|
28
|
+
readonly fixtures: Record<string, CompareReportFixtureDetail>;
|
|
29
|
+
}
|
|
30
|
+
export interface ScreenshotData {
|
|
31
|
+
readonly data: Uint8Array;
|
|
32
|
+
readonly background?: 'light' | 'dark';
|
|
33
|
+
}
|
|
34
|
+
export interface ComparisonStorage {
|
|
35
|
+
list(): Promise<string[]>;
|
|
36
|
+
read(id: string): Promise<Uint8Array>;
|
|
37
|
+
exists(id: string): Promise<boolean>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Compare screenshots between current and baseline.
|
|
41
|
+
* @param currentScreenshots Map of fixture IDs to screenshot data (already captured)
|
|
42
|
+
* @param baselineStorage Storage to read baseline screenshots from
|
|
43
|
+
*/
|
|
44
|
+
export declare function compareScreenshotsInMemory(currentScreenshots: Map<string, ScreenshotData>, baselineStorage: ComparisonStorage): Promise<ComparisonResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Compare screenshots between two directories on disk.
|
|
47
|
+
*/
|
|
48
|
+
export declare function compareScreenshotsOnDisk(currentStorage: ComparisonStorage, baselineStorage: ComparisonStorage, currentFiles: string[], baselineFiles: string[]): Promise<ComparisonResult>;
|
|
49
|
+
export declare function printComparisonToConsole(result: ComparisonResult, stdout: Writable): void;
|
|
50
|
+
export interface WriteReportOptions {
|
|
51
|
+
readonly reportDir: string;
|
|
52
|
+
readonly result: ComparisonResult;
|
|
53
|
+
readonly baselinePath: string;
|
|
54
|
+
readonly currentPath: string;
|
|
55
|
+
readonly getBaselineData: (fixtureId: string) => Promise<Uint8Array>;
|
|
56
|
+
readonly getCurrentData: (fixtureId: string) => Promise<Uint8Array>;
|
|
57
|
+
}
|
|
58
|
+
export declare function writeComparisonReport(options: WriteReportOptions): Promise<void>;
|
|
59
|
+
export declare function generateMarkdownReport(report: CompareReport): string;
|
|
60
|
+
//# sourceMappingURL=comparison.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison.d.ts","sourceRoot":"","sources":["../src/comparison.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { contentHash } from './screenshotCache.js';
|
|
4
|
+
import { writeFile } from './utils.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Compare screenshots between current and baseline.
|
|
8
|
+
* @param currentScreenshots Map of fixture IDs to screenshot data (already captured)
|
|
9
|
+
* @param baselineStorage Storage to read baseline screenshots from
|
|
10
|
+
*/
|
|
11
|
+
async function compareScreenshotsInMemory(currentScreenshots, baselineStorage) {
|
|
12
|
+
const added = [];
|
|
13
|
+
const changed = [];
|
|
14
|
+
const unchanged = [];
|
|
15
|
+
const fixtures = {};
|
|
16
|
+
for (const [fixtureId, screenshot] of currentScreenshots) {
|
|
17
|
+
const currentHash = contentHash(screenshot.data);
|
|
18
|
+
if (await baselineStorage.exists(`${fixtureId}.png`)) {
|
|
19
|
+
const baselineData = await baselineStorage.read(`${fixtureId}.png`);
|
|
20
|
+
const baselineHash = contentHash(baselineData);
|
|
21
|
+
if (currentHash === baselineHash) {
|
|
22
|
+
unchanged.push(fixtureId);
|
|
23
|
+
fixtures[fixtureId] = { status: 'unchanged', baselineHash, currentHash, background: screenshot.background };
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
changed.push(fixtureId);
|
|
27
|
+
fixtures[fixtureId] = { status: 'changed', baselineHash, currentHash, background: screenshot.background };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
added.push(fixtureId);
|
|
32
|
+
fixtures[fixtureId] = { status: 'added', currentHash, background: screenshot.background };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
added.sort();
|
|
36
|
+
changed.sort();
|
|
37
|
+
unchanged.sort();
|
|
38
|
+
return { added, removed: [], changed, unchanged, fixtures };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Compare screenshots between two directories on disk.
|
|
42
|
+
*/
|
|
43
|
+
async function compareScreenshotsOnDisk(currentStorage, baselineStorage, currentFiles, baselineFiles) {
|
|
44
|
+
const baselineSet = new Set(baselineFiles);
|
|
45
|
+
const currentSet = new Set(currentFiles);
|
|
46
|
+
const added = [];
|
|
47
|
+
const removed = [];
|
|
48
|
+
const changed = [];
|
|
49
|
+
const unchanged = [];
|
|
50
|
+
const fixtures = {};
|
|
51
|
+
for (const file of currentSet) {
|
|
52
|
+
const fixtureId = file.replace(/\.png$/, '');
|
|
53
|
+
if (!baselineSet.has(file)) {
|
|
54
|
+
added.push(fixtureId);
|
|
55
|
+
const currentData = await currentStorage.read(file);
|
|
56
|
+
fixtures[fixtureId] = { status: 'added', currentHash: contentHash(currentData) };
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const baselineData = await baselineStorage.read(file);
|
|
60
|
+
const currentData = await currentStorage.read(file);
|
|
61
|
+
const baselineHash = contentHash(baselineData);
|
|
62
|
+
const currentHash = contentHash(currentData);
|
|
63
|
+
if (baselineHash === currentHash) {
|
|
64
|
+
unchanged.push(fixtureId);
|
|
65
|
+
fixtures[fixtureId] = { status: 'unchanged', baselineHash, currentHash };
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
changed.push(fixtureId);
|
|
69
|
+
fixtures[fixtureId] = { status: 'changed', baselineHash, currentHash };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
for (const file of baselineSet) {
|
|
74
|
+
const fixtureId = file.replace(/\.png$/, '');
|
|
75
|
+
if (!currentSet.has(file)) {
|
|
76
|
+
removed.push(fixtureId);
|
|
77
|
+
const baselineData = await baselineStorage.read(file);
|
|
78
|
+
fixtures[fixtureId] = { status: 'removed', baselineHash: contentHash(baselineData) };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
added.sort();
|
|
82
|
+
removed.sort();
|
|
83
|
+
changed.sort();
|
|
84
|
+
unchanged.sort();
|
|
85
|
+
return { added, removed, changed, unchanged, fixtures };
|
|
86
|
+
}
|
|
87
|
+
function printComparisonToConsole(result, stdout) {
|
|
88
|
+
if (result.added.length > 0) {
|
|
89
|
+
stdout.write(`Added (${result.added.length}):\n`);
|
|
90
|
+
for (const f of result.added) {
|
|
91
|
+
stdout.write(` + ${f}\n`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (result.removed.length > 0) {
|
|
95
|
+
stdout.write(`Removed (${result.removed.length}):\n`);
|
|
96
|
+
for (const f of result.removed) {
|
|
97
|
+
stdout.write(` - ${f}\n`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (result.changed.length > 0) {
|
|
101
|
+
stdout.write(`Changed (${result.changed.length}):\n`);
|
|
102
|
+
for (const f of result.changed) {
|
|
103
|
+
stdout.write(` ~ ${f}\n`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const total = result.added.length + result.removed.length + result.changed.length + result.unchanged.length;
|
|
107
|
+
stdout.write(`\nSummary: ${total} fixtures`);
|
|
108
|
+
if (result.added.length > 0 || result.removed.length > 0 || result.changed.length > 0) {
|
|
109
|
+
const parts = [];
|
|
110
|
+
if (result.added.length > 0)
|
|
111
|
+
parts.push(`${result.added.length} added`);
|
|
112
|
+
if (result.removed.length > 0)
|
|
113
|
+
parts.push(`${result.removed.length} removed`);
|
|
114
|
+
if (result.changed.length > 0)
|
|
115
|
+
parts.push(`${result.changed.length} changed`);
|
|
116
|
+
if (result.unchanged.length > 0)
|
|
117
|
+
parts.push(`${result.unchanged.length} unchanged`);
|
|
118
|
+
stdout.write(` (${parts.join(', ')})\n`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
stdout.write(' — no differences\n');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function writeComparisonReport(options) {
|
|
125
|
+
const { reportDir, result, baselinePath, currentPath, getBaselineData, getCurrentData } = options;
|
|
126
|
+
await fs.mkdir(reportDir, { recursive: true });
|
|
127
|
+
const screenshotsRelDir = 'screenshots';
|
|
128
|
+
const fixturesWithPaths = { ...result.fixtures };
|
|
129
|
+
for (const id of result.changed) {
|
|
130
|
+
const relBase = `${screenshotsRelDir}/${id}/baseline.png`;
|
|
131
|
+
const relCurrent = `${screenshotsRelDir}/${id}/current.png`;
|
|
132
|
+
const baselineData = await getBaselineData(id);
|
|
133
|
+
const currentData = await getCurrentData(id);
|
|
134
|
+
await writeFile(path.join(reportDir, relBase), baselineData);
|
|
135
|
+
await writeFile(path.join(reportDir, relCurrent), currentData);
|
|
136
|
+
fixturesWithPaths[id] = { ...fixturesWithPaths[id], baselineScreenshot: relBase, currentScreenshot: relCurrent };
|
|
137
|
+
}
|
|
138
|
+
for (const id of result.added) {
|
|
139
|
+
const relCurrent = `${screenshotsRelDir}/${id}/current.png`;
|
|
140
|
+
const currentData = await getCurrentData(id);
|
|
141
|
+
await writeFile(path.join(reportDir, relCurrent), currentData);
|
|
142
|
+
fixturesWithPaths[id] = { ...fixturesWithPaths[id], currentScreenshot: relCurrent };
|
|
143
|
+
}
|
|
144
|
+
for (const id of result.removed) {
|
|
145
|
+
const relBase = `${screenshotsRelDir}/${id}/baseline.png`;
|
|
146
|
+
const baselineData = await getBaselineData(id);
|
|
147
|
+
await writeFile(path.join(reportDir, relBase), baselineData);
|
|
148
|
+
fixturesWithPaths[id] = { ...fixturesWithPaths[id], baselineScreenshot: relBase };
|
|
149
|
+
}
|
|
150
|
+
const hasDiffs = result.added.length + result.removed.length + result.changed.length > 0;
|
|
151
|
+
const report = {
|
|
152
|
+
timestamp: new Date().toISOString(),
|
|
153
|
+
baseline: baselinePath,
|
|
154
|
+
current: currentPath,
|
|
155
|
+
summary: {
|
|
156
|
+
total: result.added.length + result.removed.length + result.changed.length + result.unchanged.length,
|
|
157
|
+
added: result.added.length,
|
|
158
|
+
removed: result.removed.length,
|
|
159
|
+
changed: result.changed.length,
|
|
160
|
+
unchanged: result.unchanged.length,
|
|
161
|
+
},
|
|
162
|
+
fixtures: fixturesWithPaths,
|
|
163
|
+
};
|
|
164
|
+
await fs.writeFile(path.join(reportDir, 'report.json'), JSON.stringify(report, null, 2));
|
|
165
|
+
if (hasDiffs) {
|
|
166
|
+
const markdown = generateMarkdownReport(report);
|
|
167
|
+
await fs.writeFile(path.join(reportDir, 'report.md'), markdown);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function generateMarkdownReport(report) {
|
|
171
|
+
const lines = [];
|
|
172
|
+
const changed = Object.entries(report.fixtures).filter(([, d]) => d.status === 'changed').map(([id]) => id);
|
|
173
|
+
const added = Object.entries(report.fixtures).filter(([, d]) => d.status === 'added').map(([id]) => id);
|
|
174
|
+
const removed = Object.entries(report.fixtures).filter(([, d]) => d.status === 'removed').map(([id]) => id);
|
|
175
|
+
const unchanged = Object.entries(report.fixtures).filter(([, d]) => d.status === 'unchanged').map(([id]) => id);
|
|
176
|
+
lines.push('# Screenshot Comparison Report');
|
|
177
|
+
lines.push('');
|
|
178
|
+
lines.push(`**Generated:** ${report.timestamp}`);
|
|
179
|
+
lines.push(`**Baseline:** \`${report.baseline}\``);
|
|
180
|
+
lines.push(`**Current:** \`${report.current}\``);
|
|
181
|
+
lines.push('');
|
|
182
|
+
lines.push('## Summary');
|
|
183
|
+
lines.push('');
|
|
184
|
+
lines.push('| Status | Count |');
|
|
185
|
+
lines.push('|--------|-------|');
|
|
186
|
+
if (added.length > 0)
|
|
187
|
+
lines.push(`| Added | ${added.length} |`);
|
|
188
|
+
if (removed.length > 0)
|
|
189
|
+
lines.push(`| Removed | ${removed.length} |`);
|
|
190
|
+
if (changed.length > 0)
|
|
191
|
+
lines.push(`| Changed | ${changed.length} |`);
|
|
192
|
+
lines.push(`| Unchanged | ${unchanged.length} |`);
|
|
193
|
+
lines.push(`| **Total** | **${report.summary.total}** |`);
|
|
194
|
+
lines.push('');
|
|
195
|
+
if (changed.length > 0) {
|
|
196
|
+
lines.push('## Changed Fixtures');
|
|
197
|
+
lines.push('');
|
|
198
|
+
for (const id of changed) {
|
|
199
|
+
const detail = report.fixtures[id];
|
|
200
|
+
lines.push(`### \`${id}\``);
|
|
201
|
+
lines.push('');
|
|
202
|
+
lines.push('| Baseline | Current |');
|
|
203
|
+
lines.push('|----------|---------|');
|
|
204
|
+
const baseImg = detail.baselineScreenshot ? `` : '-';
|
|
205
|
+
const curImg = detail.currentScreenshot ? `` : '-';
|
|
206
|
+
lines.push(`| ${baseImg} | ${curImg} |`);
|
|
207
|
+
lines.push('');
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (added.length > 0) {
|
|
211
|
+
lines.push('## Added Fixtures');
|
|
212
|
+
lines.push('');
|
|
213
|
+
for (const id of added) {
|
|
214
|
+
const detail = report.fixtures[id];
|
|
215
|
+
lines.push(`### \`${id}\``);
|
|
216
|
+
lines.push('');
|
|
217
|
+
if (detail.currentScreenshot) {
|
|
218
|
+
lines.push(``);
|
|
219
|
+
}
|
|
220
|
+
lines.push('');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (removed.length > 0) {
|
|
224
|
+
lines.push('## Removed Fixtures');
|
|
225
|
+
lines.push('');
|
|
226
|
+
for (const id of removed) {
|
|
227
|
+
const detail = report.fixtures[id];
|
|
228
|
+
lines.push(`### \`${id}\``);
|
|
229
|
+
lines.push('');
|
|
230
|
+
if (detail.baselineScreenshot) {
|
|
231
|
+
lines.push(``);
|
|
232
|
+
}
|
|
233
|
+
lines.push('');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (unchanged.length > 0) {
|
|
237
|
+
lines.push('<details>');
|
|
238
|
+
lines.push(`<summary>Unchanged Fixtures (${unchanged.length})</summary>`);
|
|
239
|
+
lines.push('');
|
|
240
|
+
for (const id of unchanged) {
|
|
241
|
+
lines.push(`- \`${id}\``);
|
|
242
|
+
}
|
|
243
|
+
lines.push('');
|
|
244
|
+
lines.push('</details>');
|
|
245
|
+
}
|
|
246
|
+
return lines.join('\n');
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export { compareScreenshotsInMemory, compareScreenshotsOnDisk, generateMarkdownReport, printComparisonToConsole, writeComparisonReport };
|
|
250
|
+
//# sourceMappingURL=comparison.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison.js","sources":["../src/comparison.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"screenshotDir": {
|
|
6
|
+
"description": "Directory for storing screenshots (default: .screenshots)",
|
|
7
|
+
"type": "string"
|
|
8
|
+
},
|
|
9
|
+
"sessions": {
|
|
10
|
+
"minItems": 1,
|
|
11
|
+
"type": "array",
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"properties": {
|
|
15
|
+
"name": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Unique session name"
|
|
18
|
+
},
|
|
19
|
+
"source": {
|
|
20
|
+
"anyOf": [
|
|
21
|
+
{
|
|
22
|
+
"type": "string",
|
|
23
|
+
"const": "current"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"type": "object",
|
|
27
|
+
"properties": {
|
|
28
|
+
"worktree": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"properties": {
|
|
31
|
+
"ref": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Git ref (branch, tag, or commit) to check out"
|
|
34
|
+
},
|
|
35
|
+
"name": {
|
|
36
|
+
"description": "Directory name for the worktree (default: component-explorer-baseline)",
|
|
37
|
+
"type": "string"
|
|
38
|
+
},
|
|
39
|
+
"install": {
|
|
40
|
+
"anyOf": [
|
|
41
|
+
{
|
|
42
|
+
"type": "string",
|
|
43
|
+
"const": "auto"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "string",
|
|
47
|
+
"const": "npm"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "string",
|
|
51
|
+
"const": "pnpm"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"type": "string",
|
|
55
|
+
"const": "yarn"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"type": "object",
|
|
59
|
+
"properties": {
|
|
60
|
+
"command": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"description": "Custom install command to run in the worktree"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"required": [
|
|
66
|
+
"command"
|
|
67
|
+
],
|
|
68
|
+
"additionalProperties": false
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"type": "boolean",
|
|
72
|
+
"const": false
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"description": "Dependency install strategy for the worktree"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"required": [
|
|
79
|
+
"ref"
|
|
80
|
+
],
|
|
81
|
+
"additionalProperties": false,
|
|
82
|
+
"description": "Git worktree configuration for a baseline session"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"required": [
|
|
86
|
+
"worktree"
|
|
87
|
+
],
|
|
88
|
+
"additionalProperties": false
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"description": "Session source: \"current\" for the working tree, or a worktree config for a baseline"
|
|
92
|
+
},
|
|
93
|
+
"viteConfig": {
|
|
94
|
+
"description": "Path to vite config file, relative to this config (overrides top-level viteConfig)",
|
|
95
|
+
"type": "string"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"required": [
|
|
99
|
+
"name"
|
|
100
|
+
],
|
|
101
|
+
"additionalProperties": false,
|
|
102
|
+
"description": "A component explorer session"
|
|
103
|
+
},
|
|
104
|
+
"description": "List of explorer sessions"
|
|
105
|
+
},
|
|
106
|
+
"compare": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"properties": {
|
|
109
|
+
"baseline": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"description": "Session name to use as the baseline for comparisons"
|
|
112
|
+
},
|
|
113
|
+
"current": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"description": "Session name to use as the current version for comparisons"
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"required": [
|
|
119
|
+
"baseline",
|
|
120
|
+
"current"
|
|
121
|
+
],
|
|
122
|
+
"additionalProperties": false,
|
|
123
|
+
"description": "Screenshot comparison configuration"
|
|
124
|
+
},
|
|
125
|
+
"viteConfig": {
|
|
126
|
+
"description": "Default vite config file path, relative to this config (default: vite.config.ts)",
|
|
127
|
+
"type": "string"
|
|
128
|
+
},
|
|
129
|
+
"vite": {
|
|
130
|
+
"type": "object",
|
|
131
|
+
"properties": {
|
|
132
|
+
"hmr": {
|
|
133
|
+
"type": "object",
|
|
134
|
+
"properties": {
|
|
135
|
+
"allowedPaths": {
|
|
136
|
+
"type": "array",
|
|
137
|
+
"items": {
|
|
138
|
+
"type": "string"
|
|
139
|
+
},
|
|
140
|
+
"description": "Glob patterns for files that keep HMR; everything else triggers a full reload"
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"required": [
|
|
144
|
+
"allowedPaths"
|
|
145
|
+
],
|
|
146
|
+
"additionalProperties": false,
|
|
147
|
+
"description": "Vite HMR configuration"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"additionalProperties": false,
|
|
151
|
+
"description": "Vite configuration overrides"
|
|
152
|
+
},
|
|
153
|
+
"redirection": {
|
|
154
|
+
"type": "object",
|
|
155
|
+
"properties": {
|
|
156
|
+
"port": {
|
|
157
|
+
"type": "integer",
|
|
158
|
+
"minimum": 1,
|
|
159
|
+
"maximum": 65535,
|
|
160
|
+
"description": "Port for the redirection HTTP server"
|
|
161
|
+
},
|
|
162
|
+
"host": {
|
|
163
|
+
"description": "Host to bind the redirection server to (default: localhost)",
|
|
164
|
+
"type": "string"
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"required": [
|
|
168
|
+
"port"
|
|
169
|
+
],
|
|
170
|
+
"additionalProperties": false,
|
|
171
|
+
"description": "HTTP redirection server that redirects to the session URL"
|
|
172
|
+
},
|
|
173
|
+
"$schema": {
|
|
174
|
+
"type": "string",
|
|
175
|
+
"description": "URL of the JSON Schema for this config file"
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"required": [
|
|
179
|
+
"sessions"
|
|
180
|
+
],
|
|
181
|
+
"additionalProperties": false,
|
|
182
|
+
"description": "Component Explorer configuration"
|
|
183
|
+
}
|
|
@@ -5,6 +5,7 @@ export interface FixtureInfo {
|
|
|
5
5
|
readonly fixtureId: string;
|
|
6
6
|
readonly fixtureName: string;
|
|
7
7
|
readonly groupPath: string[];
|
|
8
|
+
readonly background: 'light' | 'dark';
|
|
8
9
|
}
|
|
9
10
|
export type FixtureId = {
|
|
10
11
|
readonly fixtureId: string;
|
|
@@ -20,9 +21,47 @@ export interface CoverageFileEntry {
|
|
|
20
21
|
readonly coveredLines: readonly number[];
|
|
21
22
|
readonly uncoveredLines: readonly number[];
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Error captured during fixture rendering.
|
|
26
|
+
* Can be either an unhandled exception or a console error/warning.
|
|
27
|
+
*/
|
|
28
|
+
export type ErrorInfo = ExceptionError | ConsoleError;
|
|
29
|
+
/**
|
|
30
|
+
* Unhandled exception thrown during render.
|
|
31
|
+
*/
|
|
32
|
+
export interface ExceptionError {
|
|
33
|
+
readonly kind: 'exception';
|
|
34
|
+
readonly message: string;
|
|
35
|
+
readonly stack?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Console error or warning captured during render.
|
|
39
|
+
*/
|
|
40
|
+
export interface ConsoleError {
|
|
41
|
+
readonly kind: 'console';
|
|
42
|
+
readonly level: 'error' | 'warn';
|
|
43
|
+
readonly message: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Result of taking a screenshot, including any errors captured during rendering.
|
|
47
|
+
*/
|
|
48
|
+
export interface ScreenshotResult {
|
|
49
|
+
readonly image: Uint8Array;
|
|
50
|
+
readonly errors: ErrorInfo[];
|
|
51
|
+
}
|
|
52
|
+
export interface StabilityScreenshot {
|
|
53
|
+
readonly image: Uint8Array;
|
|
54
|
+
readonly delayMs: number;
|
|
55
|
+
}
|
|
56
|
+
export interface StabilityCheckResult {
|
|
57
|
+
readonly screenshots: readonly StabilityScreenshot[];
|
|
58
|
+
readonly errors: ErrorInfo[];
|
|
59
|
+
}
|
|
23
60
|
export interface ComponentExplorer {
|
|
24
61
|
listFixtures(): Promise<FixtureInfo[]>;
|
|
25
|
-
screenshotFixture(fixtureId: string): Promise<
|
|
62
|
+
screenshotFixture(fixtureId: string): Promise<ScreenshotResult>;
|
|
63
|
+
screenshotFixtureStabilityCheck(fixtureId: string): Promise<StabilityCheckResult>;
|
|
64
|
+
evaluateJs(expression: string, fixtureId?: string): Promise<unknown>;
|
|
26
65
|
codeCoverage(id: FixtureId | FixtureGroupId): Promise<CoverageData>;
|
|
27
66
|
waitForUpdate(timeoutMs?: number): Promise<void>;
|
|
28
67
|
dispose(): Promise<void>;
|
|
@@ -33,12 +72,15 @@ export declare class BrowserComponentExplorer implements ComponentExplorer {
|
|
|
33
72
|
private readonly _logger;
|
|
34
73
|
private _page;
|
|
35
74
|
private _lastState;
|
|
75
|
+
private _screenshotMutex;
|
|
36
76
|
constructor(_browserPageFactory: BrowserPageFactory, _server: ComponentExplorerHttpServer, _logger?: ILogger);
|
|
37
77
|
private _ensureReady;
|
|
38
78
|
private _waitForCliApi;
|
|
39
79
|
private _getState;
|
|
40
80
|
listFixtures(): Promise<FixtureInfo[]>;
|
|
41
|
-
screenshotFixture(fixtureId: string): Promise<
|
|
81
|
+
screenshotFixture(fixtureId: string): Promise<ScreenshotResult>;
|
|
82
|
+
screenshotFixtureStabilityCheck(fixtureId: string): Promise<StabilityCheckResult>;
|
|
83
|
+
evaluateJs(expression: string, fixtureId?: string): Promise<unknown>;
|
|
42
84
|
codeCoverage(_id: FixtureId | FixtureGroupId): Promise<CoverageData>;
|
|
43
85
|
waitForUpdate(timeoutMs?: number): Promise<void>;
|
|
44
86
|
dispose(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentExplorer.d.ts","sourceRoot":"","sources":["../src/componentExplorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"componentExplorer.d.ts","sourceRoot":"","sources":["../src/componentExplorer.ts"],"names":[],"mappings":"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"}
|