@vscode/component-explorer-cli 0.1.1-1 → 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.
Files changed (131) hide show
  1. package/README.md +177 -0
  2. package/dist/commands/acceptCommand.d.ts +2 -1
  3. package/dist/commands/acceptCommand.d.ts.map +1 -1
  4. package/dist/commands/acceptCommand.js +12 -6
  5. package/dist/commands/acceptCommand.js.map +1 -1
  6. package/dist/commands/compareCommand.d.ts +5 -1
  7. package/dist/commands/compareCommand.d.ts.map +1 -1
  8. package/dist/commands/compareCommand.js +43 -71
  9. package/dist/commands/compareCommand.js.map +1 -1
  10. package/dist/commands/mcpCommand.d.ts +10 -0
  11. package/dist/commands/mcpCommand.d.ts.map +1 -0
  12. package/dist/commands/mcpCommand.js +58 -0
  13. package/dist/commands/mcpCommand.js.map +1 -0
  14. package/dist/commands/screenshotCommand.d.ts +7 -2
  15. package/dist/commands/screenshotCommand.d.ts.map +1 -1
  16. package/dist/commands/screenshotCommand.js +61 -14
  17. package/dist/commands/screenshotCommand.js.map +1 -1
  18. package/dist/commands/serveCommand.d.ts +19 -0
  19. package/dist/commands/serveCommand.d.ts.map +1 -0
  20. package/dist/commands/serveCommand.js +194 -0
  21. package/dist/commands/serveCommand.js.map +1 -0
  22. package/dist/commands/watchCommand.d.ts +1 -2
  23. package/dist/commands/watchCommand.d.ts.map +1 -1
  24. package/dist/commands/watchCommand.js +23 -19
  25. package/dist/commands/watchCommand.js.map +1 -1
  26. package/dist/comparison.d.ts +60 -0
  27. package/dist/comparison.d.ts.map +1 -0
  28. package/dist/comparison.js +250 -0
  29. package/dist/comparison.js.map +1 -0
  30. package/dist/component-explorer-config.schema.json +183 -0
  31. package/dist/componentExplorer.d.ts +44 -2
  32. package/dist/componentExplorer.d.ts.map +1 -1
  33. package/dist/componentExplorer.js +98 -16
  34. package/dist/componentExplorer.js.map +1 -1
  35. package/dist/daemon/DaemonContext.d.ts +4 -0
  36. package/dist/daemon/DaemonContext.d.ts.map +1 -0
  37. package/dist/daemon/DaemonService.d.ts +188 -0
  38. package/dist/daemon/DaemonService.d.ts.map +1 -0
  39. package/dist/daemon/DaemonService.js +610 -0
  40. package/dist/daemon/DaemonService.js.map +1 -0
  41. package/dist/daemon/approvalStore.d.ts +51 -0
  42. package/dist/daemon/approvalStore.d.ts.map +1 -0
  43. package/dist/daemon/approvalStore.js +58 -0
  44. package/dist/daemon/approvalStore.js.map +1 -0
  45. package/dist/daemon/lifecycle.d.ts +13 -0
  46. package/dist/daemon/lifecycle.d.ts.map +1 -0
  47. package/dist/daemon/lifecycle.js +68 -0
  48. package/dist/daemon/lifecycle.js.map +1 -0
  49. package/dist/daemon/pipeClient.d.ts +9 -0
  50. package/dist/daemon/pipeClient.d.ts.map +1 -0
  51. package/dist/daemon/pipeClient.js +111 -0
  52. package/dist/daemon/pipeClient.js.map +1 -0
  53. package/dist/daemon/pipeName.d.ts +2 -0
  54. package/dist/daemon/pipeName.d.ts.map +1 -0
  55. package/dist/daemon/pipeName.js +14 -0
  56. package/dist/daemon/pipeName.js.map +1 -0
  57. package/dist/daemon/pipeServer.d.ts +4 -0
  58. package/dist/daemon/pipeServer.d.ts.map +1 -0
  59. package/dist/daemon/pipeServer.js +25 -0
  60. package/dist/daemon/pipeServer.js.map +1 -0
  61. package/dist/daemon/types.d.ts +12 -0
  62. package/dist/daemon/types.d.ts.map +1 -0
  63. package/dist/dependencyInstaller.js +1 -1
  64. package/dist/dependencyInstaller.js.map +1 -1
  65. package/dist/explorerSession.d.ts +5 -3
  66. package/dist/explorerSession.d.ts.map +1 -1
  67. package/dist/explorerSession.js +6 -3
  68. package/dist/explorerSession.js.map +1 -1
  69. package/dist/external/vscode-observables/observables/dist/disposables.js +24 -1
  70. package/dist/external/vscode-observables/observables/dist/disposables.js.map +1 -1
  71. package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js +1 -4
  72. package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +1 -1
  73. package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js +3 -0
  74. package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +1 -1
  75. package/dist/external/vscode-observables/observables/dist/observableInternal/index.js +2 -5
  76. package/dist/external/vscode-observables/observables/dist/observableInternal/index.js.map +1 -1
  77. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js +30 -6
  78. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +1 -1
  79. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js +1 -1
  80. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +1 -1
  81. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js +12 -1
  82. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +1 -1
  83. package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js +55 -0
  84. package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js.map +1 -0
  85. package/dist/formatValue.d.ts +2 -0
  86. package/dist/formatValue.d.ts.map +1 -0
  87. package/dist/formatValue.js +96 -0
  88. package/dist/formatValue.js.map +1 -0
  89. package/dist/formatValue.test.d.ts +2 -0
  90. package/dist/formatValue.test.d.ts.map +1 -0
  91. package/dist/git/gitUtils.js +1 -1
  92. package/dist/git/gitUtils.js.map +1 -1
  93. package/dist/httpServer.d.ts +8 -7
  94. package/dist/httpServer.d.ts.map +1 -1
  95. package/dist/httpServer.js +59 -12
  96. package/dist/httpServer.js.map +1 -1
  97. package/dist/index.js +4 -0
  98. package/dist/index.js.map +1 -1
  99. package/dist/mcp/McpServer.d.ts +58 -0
  100. package/dist/mcp/McpServer.d.ts.map +1 -0
  101. package/dist/mcp/McpServer.js +820 -0
  102. package/dist/mcp/McpServer.js.map +1 -0
  103. package/dist/packages/simple-api/dist/chunk-3R7GHWBM.js +137 -0
  104. package/dist/packages/simple-api/dist/chunk-3R7GHWBM.js.map +1 -0
  105. package/dist/packages/simple-api/dist/chunk-Q24JOMNK.js +27 -0
  106. package/dist/packages/simple-api/dist/chunk-Q24JOMNK.js.map +1 -0
  107. package/dist/packages/simple-api/dist/chunk-SGBCNXYH.js +24 -0
  108. package/dist/packages/simple-api/dist/chunk-SGBCNXYH.js.map +1 -0
  109. package/dist/packages/simple-api/dist/express.js +104 -0
  110. package/dist/packages/simple-api/dist/express.js.map +1 -0
  111. package/dist/resolveProject.d.ts +21 -0
  112. package/dist/resolveProject.d.ts.map +1 -0
  113. package/dist/resolveProject.js +39 -0
  114. package/dist/resolveProject.js.map +1 -0
  115. package/dist/utils.d.ts +24 -0
  116. package/dist/utils.d.ts.map +1 -0
  117. package/dist/utils.js +50 -0
  118. package/dist/utils.js.map +1 -0
  119. package/dist/watchConfig.d.ts +41 -0
  120. package/dist/watchConfig.d.ts.map +1 -1
  121. package/dist/watchConfig.js +41 -19
  122. package/dist/watchConfig.js.map +1 -1
  123. package/package.json +16 -6
  124. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/debuggerRpc.js +0 -72
  125. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/debuggerRpc.js.map +0 -1
  126. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/devToolsLogger.js +0 -447
  127. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/devToolsLogger.js.map +0 -1
  128. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/rpc.js +0 -64
  129. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/rpc.js.map +0 -1
  130. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/utils.js +0 -52
  131. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugger/utils.js.map +0 -1
@@ -1,10 +1,13 @@
1
1
  import { Command, Option } from 'clipanion';
2
+ import * as path from 'node:path';
2
3
  import { PlaywrightBrowserPageFactory } from '../browserPage.js';
4
+ import { compareScreenshotsInMemory, printComparisonToConsole, writeComparisonReport } from '../comparison.js';
3
5
  import { BrowserComponentExplorer } from '../componentExplorer.js';
4
6
  import { DefaultComponentExplorerHttpServerFactory } from '../httpServer.js';
5
7
  import { ConsoleLogger, verbosityToLogLevel } from '../logger.js';
8
+ import { resolveProject, resolvedProjectToViteProjectRef } from '../resolveProject.js';
6
9
  import { FileSystemStorage } from '../storage.js';
7
- import { ViteProjectRef } from '../viteProjectRef.js';
10
+ import { matchGlob } from '../utils.js';
8
11
 
9
12
  class ScreenshotCommand extends Command {
10
13
  static paths = [['screenshot']];
@@ -18,19 +21,39 @@ class ScreenshotCommand extends Command {
18
21
  });
19
22
  verbose = Option.Counter('-v,--verbose', 0, { description: 'Increase log verbosity (-v debug, -vv trace)' });
20
23
  filter = Option.String('--filter', { required: false, description: 'Filter fixtures by glob pattern' });
21
- accept = Option.Boolean('--accept', false, { description: 'Write directly to baseline instead of current' });
22
- root = Option.String('--root', process.cwd(), { description: 'Project root directory' });
24
+ accept = Option.Boolean('--accept', false, { description: 'Write to baseline instead of current (mutually exclusive with --target)' });
25
+ project = Option.String('-p,--project', process.cwd(), { description: 'Project: a directory, vite config file, or component-explorer.json' });
26
+ target = Option.String('--target', { required: false, description: 'Screenshot output directory (default: .screenshots/current, or .screenshots/baseline with --accept)' });
27
+ compare = Option.Boolean('--compare', false, { description: 'Compare screenshots after capturing' });
28
+ compareTarget = Option.String('--compare-target', { required: false, description: 'Directory to compare against (default: .screenshots/baseline, or .screenshots/current with --accept)' });
29
+ report = Option.String('--report', { required: false, description: 'Output report folder (requires --compare)' });
23
30
  async execute() {
31
+ // Validate mutually exclusive options
32
+ if (this.accept && this.target) {
33
+ this.context.stderr.write('Error: --accept and --target are mutually exclusive.\n');
34
+ return 1;
35
+ }
24
36
  const logger = new ConsoleLogger('screenshot', this.context.stdout, verbosityToLogLevel(this.verbose));
25
- const outputDir = this.accept ? 'baseline' : 'current';
26
- const storage = new FileSystemStorage(`${this.root}/.screenshots`);
37
+ const resolved = await resolveProject(this.project);
38
+ const projectDir = resolved.projectDir;
39
+ const viteProject = resolvedProjectToViteProjectRef(resolved);
40
+ // Determine target directory
41
+ const defaultTarget = this.accept ? '.screenshots/baseline' : '.screenshots/current';
42
+ const targetDir = this.target ?? defaultTarget;
43
+ const targetPath = path.isAbsolute(targetDir) ? targetDir : path.join(projectDir, targetDir);
44
+ // Determine compare target directory
45
+ const defaultCompareTarget = this.accept ? '.screenshots/current' : '.screenshots/baseline';
46
+ const compareTargetDir = this.compareTarget ?? defaultCompareTarget;
47
+ const compareTargetPath = path.isAbsolute(compareTargetDir) ? compareTargetDir : path.join(projectDir, compareTargetDir);
48
+ const storage = new FileSystemStorage(targetPath);
27
49
  const serverFactory = new DefaultComponentExplorerHttpServerFactory();
28
50
  const browserFactory = new PlaywrightBrowserPageFactory();
51
+ const screenshots = new Map();
29
52
  let server;
30
53
  let explorer;
31
54
  try {
32
55
  this.context.stdout.write('Starting Vite dev server...\n');
33
- server = await serverFactory.createViteServer(ViteProjectRef.fromSourceRootDir(this.root), undefined, logger);
56
+ server = await serverFactory.createViteServer(viteProject, { logger });
34
57
  this.context.stdout.write(`Server running at ${server.url}\n`);
35
58
  explorer = new BrowserComponentExplorer(browserFactory, server, logger);
36
59
  const fixtures = await explorer.listFixtures();
@@ -39,23 +62,47 @@ class ScreenshotCommand extends Command {
39
62
  : fixtures;
40
63
  this.context.stdout.write(`Found ${filtered.length} fixture(s)\n`);
41
64
  for (const fixture of filtered) {
42
- const png = await explorer.screenshotFixture(fixture.fixtureId);
43
- const filePath = `${outputDir}/${fixture.fixtureId}.png`;
44
- await storage.write(filePath, png);
65
+ const result = await explorer.screenshotFixture(fixture.fixtureId);
66
+ await storage.write(`${fixture.fixtureId}.png`, result.image);
67
+ screenshots.set(fixture.fixtureId, { data: result.image, background: fixture.background });
45
68
  this.context.stdout.write(` ✓ ${fixture.fixtureId}\n`);
46
69
  }
47
- this.context.stdout.write(`\nScreenshots saved to .screenshots/${outputDir}/\n`);
70
+ this.context.stdout.write(`\nScreenshots saved to ${targetDir}/\n`);
48
71
  }
49
72
  finally {
50
73
  await explorer?.dispose();
51
74
  await browserFactory.dispose();
52
75
  await server?.dispose();
53
76
  }
77
+ // Compare if requested
78
+ if (this.compare) {
79
+ this.context.stdout.write(`\nComparing against ${compareTargetDir}...\n`);
80
+ return this._runComparison(screenshots, targetPath, compareTargetPath, projectDir);
81
+ }
82
+ return 0;
83
+ }
84
+ async _runComparison(screenshots, targetPath, compareTargetPath, projectDir) {
85
+ const compareStorage = new FileSystemStorage(compareTargetPath);
86
+ const result = await compareScreenshotsInMemory(screenshots, {
87
+ list: async () => [],
88
+ read: (id) => compareStorage.read(id),
89
+ exists: (id) => compareStorage.exists(id),
90
+ });
91
+ printComparisonToConsole(result, this.context.stdout);
92
+ if (this.report) {
93
+ const reportDir = path.isAbsolute(this.report) ? this.report : path.join(projectDir, this.report);
94
+ await writeComparisonReport({
95
+ reportDir,
96
+ result,
97
+ baselinePath: compareTargetPath,
98
+ currentPath: targetPath,
99
+ getBaselineData: (id) => compareStorage.read(`${id}.png`),
100
+ getCurrentData: async (id) => screenshots.get(id).data,
101
+ });
102
+ this.context.stdout.write(`\nReport written to: ${this.report}/\n`);
103
+ }
104
+ return (result.added.length > 0 || result.changed.length > 0) ? 1 : 0;
54
105
  }
55
- }
56
- function matchGlob(fixtureId, pattern) {
57
- const regex = new RegExp('^' + pattern.replace(/\*/g, '.*').replace(/\?/g, '.') + '$');
58
- return regex.test(fixtureId);
59
106
  }
60
107
 
61
108
  export { ScreenshotCommand };
@@ -1 +1 @@
1
- {"version":3,"file":"screenshotCommand.js","sources":["../../src/commands/screenshotCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screenshotCommand.js","sources":["../../src/commands/screenshotCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class ServeCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ readonly verbose: number;
6
+ readonly project: string;
7
+ readonly background: boolean;
8
+ readonly attach: boolean;
9
+ readonly kill: boolean;
10
+ readonly redirectionPort: string | undefined;
11
+ readonly redirectionHost: string | undefined;
12
+ execute(): Promise<void>;
13
+ private _ensureBackground;
14
+ private _attach;
15
+ private _printEvent;
16
+ private _startDaemon;
17
+ private _startRedirectionServer;
18
+ }
19
+ //# sourceMappingURL=serveCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serveCommand.d.ts","sourceRoot":"","sources":["../../src/commands/serveCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAe5C,qBAAa,YAAa,SAAQ,OAAO;IACxC,OAAgB,KAAK,aAAe;IAEpC,OAAgB,KAAK,4BAgBlB;IAEH,QAAQ,CAAC,OAAO,SAAsG;IACtH,QAAQ,CAAC,OAAO,SAA2I;IAC3J,QAAQ,CAAC,UAAU,UAAoG;IACvH,QAAQ,CAAC,MAAM,UAAsG;IACrH,QAAQ,CAAC,IAAI,UAAkF;IAC/F,QAAQ,CAAC,eAAe,qBAA8H;IACtJ,QAAQ,CAAC,eAAe,qBAAsH;IAExI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAuDhB,iBAAiB;YA0BjB,OAAO;IAgBrB,OAAO,CAAC,WAAW;YAeL,YAAY;IA+C1B,OAAO,CAAC,uBAAuB;CAyB/B"}
@@ -0,0 +1,194 @@
1
+ import { Command, Option } from 'clipanion';
2
+ import { spawn } from 'node:child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+ import * as path from 'node:path';
5
+ import * as http from 'node:http';
6
+ import { ConsoleLogger, verbosityToLogLevel } from '../logger.js';
7
+ import { ResolvedWatchConfig } from '../watchConfig.js';
8
+ import { DaemonService } from '../daemon/DaemonService.js';
9
+ import { startPipeServer } from '../daemon/pipeServer.js';
10
+ import { daemonPipeName } from '../daemon/pipeName.js';
11
+ import { tryConnect, waitForDaemon } from '../daemon/lifecycle.js';
12
+ import { resolveProject } from '../resolveProject.js';
13
+ import { buildExplorerUrl } from '../utils.js';
14
+
15
+ class ServeCommand extends Command {
16
+ static paths = [['serve']];
17
+ static usage = Command.Usage({
18
+ description: 'Start or attach to a Component Explorer daemon.',
19
+ details: `
20
+ Without flags: starts a foreground daemon. Errors if one is already running.
21
+ --background: spawns a detached daemon, prints pipe name, exits. No-op if already running.
22
+ --attach: connects to a running daemon and streams events. Errors if none is running.
23
+ --background --attach: ensures a daemon is running, then attaches.
24
+ --kill: shuts down a running daemon.
25
+ `,
26
+ examples: [
27
+ ['Start in foreground', '$0 serve -c config.json'],
28
+ ['Start in background', '$0 serve -c config.json --background'],
29
+ ['Attach to running daemon', '$0 serve -c config.json --attach'],
30
+ ['Ensure daemon + attach', '$0 serve -c config.json --background --attach'],
31
+ ['Kill running daemon', '$0 serve -c config.json --kill'],
32
+ ],
33
+ });
34
+ verbose = Option.Counter('-v,--verbose', 0, { description: 'Increase log verbosity (-v debug, -vv trace)' });
35
+ project = Option.String('-p,--project,-c', { required: true, description: 'Project: a directory, vite config file, or component-explorer.json' });
36
+ background = Option.Boolean('--background', false, { description: 'Spawn as a detached background process' });
37
+ attach = Option.Boolean('--attach', false, { description: 'Attach to a running daemon and stream events' });
38
+ kill = Option.Boolean('--kill', false, { description: 'Shut down a running daemon' });
39
+ redirectionPort = Option.String('--redirectionPort', { description: 'Start an HTTP server that redirects /___explorer to the session URL' });
40
+ redirectionHost = Option.String('--redirectionHost', { description: 'Host to bind the redirection server to (default: localhost)' });
41
+ async execute() {
42
+ const resolved = await resolveProject(this.project);
43
+ if (resolved.kind !== 'explorerConfig') {
44
+ this.context.stderr.write('Error: serve requires a component-explorer.json config file.\n');
45
+ return;
46
+ }
47
+ const configPath = resolved.configPath;
48
+ const pipeName = daemonPipeName(configPath);
49
+ if (this.kill) {
50
+ const client = await tryConnect(pipeName, { clientName: 'cli-kill' });
51
+ if (!client) {
52
+ this.context.stderr.write('No daemon running.\n');
53
+ return;
54
+ }
55
+ await client.methods.shutdown();
56
+ this.context.stdout.write('Daemon shut down.\n');
57
+ return;
58
+ }
59
+ if (this.background && this.attach) {
60
+ await this._ensureBackground(pipeName, configPath);
61
+ const client = await tryConnect(pipeName, { clientName: 'cli-attach' });
62
+ if (!client) {
63
+ this.context.stderr.write('Failed to connect after starting daemon.\n');
64
+ return;
65
+ }
66
+ return this._attach(client, pipeName);
67
+ }
68
+ if (this.background) {
69
+ return this._ensureBackground(pipeName, configPath);
70
+ }
71
+ if (this.attach) {
72
+ const client = await tryConnect(pipeName, { clientName: 'cli-attach' });
73
+ if (!client) {
74
+ this.context.stderr.write(`No daemon running. Start one first:\n $0 serve --project ${this.project}\n`);
75
+ return;
76
+ }
77
+ return this._attach(client, pipeName);
78
+ }
79
+ // Default: start foreground daemon
80
+ const existing = await tryConnect(pipeName, { clientName: 'cli-serve' });
81
+ if (existing) {
82
+ this.context.stderr.write(`Daemon already running (pipe: ${pipeName}).\n`);
83
+ this.context.stderr.write(` Attach: component-explorer serve -c ${configPath} --attach\n`);
84
+ this.context.stderr.write(` Kill: component-explorer serve -c ${configPath} --kill\n`);
85
+ return;
86
+ }
87
+ return this._startDaemon(pipeName, configPath);
88
+ }
89
+ async _ensureBackground(pipeName, configPath) {
90
+ if (await tryConnect(pipeName, { clientName: 'cli-serve' })) {
91
+ this.context.stdout.write('Daemon already running.\n');
92
+ return;
93
+ }
94
+ const cliEntryPoint = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../index.js');
95
+ const args = [cliEntryPoint, 'serve', '--project', configPath];
96
+ if (this.redirectionPort) {
97
+ args.push('--redirectionPort', this.redirectionPort);
98
+ }
99
+ if (this.redirectionHost) {
100
+ args.push('--redirectionHost', this.redirectionHost);
101
+ }
102
+ const child = spawn(process.execPath, args, { detached: true, stdio: 'ignore', windowsHide: true });
103
+ child.unref();
104
+ await waitForDaemon(pipeName, { timeoutMs: 30_000, clientName: 'cli-serve' });
105
+ this.context.stdout.write(`Daemon started (pipe: ${pipeName})\n`);
106
+ }
107
+ async _attach(client, pipeName) {
108
+ this.context.stdout.write(`Attached to daemon (pipe: ${pipeName})\n`);
109
+ this.context.stdout.write('Listening for events... (Ctrl+C to detach)\n\n');
110
+ const events = await client.methods.events();
111
+ for await (const event of events) {
112
+ this._printEvent(event);
113
+ }
114
+ this.context.stdout.write('\nEvent stream ended.\n');
115
+ }
116
+ _printEvent(event) {
117
+ const ts = new Date().toLocaleTimeString();
118
+ switch (event.type) {
119
+ case 'source-change':
120
+ this.context.stdout.write(`[${ts}] source-change ${event.sessionName} sourceTreeId=${event.sourceTreeId}\n`);
121
+ break;
122
+ case 'ref-change':
123
+ this.context.stdout.write(`[${ts}] ref-change ${event.sessionName} newCommit=${event.newCommit}\n`);
124
+ break;
125
+ case 'log':
126
+ this.context.stdout.write(`[${ts}] [${event.level}] ${event.message}\n`);
127
+ break;
128
+ }
129
+ }
130
+ async _startDaemon(pipeName, configPath) {
131
+ const logger = new ConsoleLogger('serve', this.context.stdout, verbosityToLogLevel(this.verbose));
132
+ logger.log(`Reading config from ${configPath}`);
133
+ const resolvedConfig = await ResolvedWatchConfig.fromFile(configPath);
134
+ logger.log('Setting up sessions...');
135
+ const service = await DaemonService.create(resolvedConfig, logger, pipeName);
136
+ logger.log(`Starting pipe server on ${pipeName}`);
137
+ const server = await startPipeServer(pipeName, service);
138
+ this.context.stdout.write(`Daemon listening on ${pipeName}\n`);
139
+ this.context.stdout.write('Press Ctrl+C to stop.\n\n');
140
+ const sessionInfos = service.getSessionInfos();
141
+ for (const s of sessionInfos) {
142
+ if (s.isLoading) {
143
+ this.context.stdout.write(` ${s.name}: (loading) (${s.sourceKind})\n`);
144
+ }
145
+ else {
146
+ const explorerUrl = buildExplorerUrl({ baseUrl: s.serverUrl });
147
+ this.context.stdout.write(` ${s.name}: ${explorerUrl} (${s.sourceKind})\n`);
148
+ }
149
+ }
150
+ this.context.stdout.write('\n');
151
+ let redirectServer;
152
+ const redirectPort = this.redirectionPort
153
+ ? parseInt(this.redirectionPort, 10)
154
+ : resolvedConfig.redirection?.port;
155
+ const redirectHost = this.redirectionHost ?? resolvedConfig.redirection?.host ?? 'localhost';
156
+ if (redirectPort) {
157
+ redirectServer = this._startRedirectionServer(service, redirectPort, redirectHost);
158
+ }
159
+ process.on('SIGINT', () => {
160
+ service.requestShutdown();
161
+ });
162
+ await service.runEventLoop();
163
+ this.context.stdout.write('\nShutting down...\n');
164
+ redirectServer?.dispose();
165
+ server.close();
166
+ await service.dispose();
167
+ }
168
+ _startRedirectionServer(service, port, host) {
169
+ const server = http.createServer(async (req, res) => {
170
+ const url = new URL(req.url ?? '/', `http://${req.headers.host}`);
171
+ const sessionName = url.searchParams.get('sessionName');
172
+ try {
173
+ const session = await service.waitForSession(sessionName ?? undefined);
174
+ const target = new URL(session.serverUrl);
175
+ target.pathname = url.pathname;
176
+ url.searchParams.delete('sessionName');
177
+ target.search = url.search;
178
+ res.writeHead(302, { Location: target.href });
179
+ res.end();
180
+ }
181
+ catch {
182
+ res.writeHead(503);
183
+ res.end('Session not available.\\n');
184
+ }
185
+ });
186
+ server.listen(port, host, () => {
187
+ this.context.stdout.write(`Redirection server listening on http://${host}:${port}\\n`);
188
+ });
189
+ return { dispose: () => server.close() };
190
+ }
191
+ }
192
+
193
+ export { ServeCommand };
194
+ //# sourceMappingURL=serveCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serveCommand.js","sources":["../../src/commands/serveCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -3,8 +3,7 @@ export declare class WatchCommand extends Command {
3
3
  static paths: string[][];
4
4
  static usage: import("clipanion").Usage;
5
5
  readonly verbose: number;
6
- readonly root: string;
7
- readonly config: string | undefined;
6
+ readonly project: string;
8
7
  execute(): Promise<void>;
9
8
  private _executeLegacy;
10
9
  private _executeWithConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"watchCommand.d.ts","sourceRoot":"","sources":["../../src/commands/watchCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiB5C,qBAAa,YAAa,SAAQ,OAAO;IACxC,OAAgB,KAAK,aAAe;IAEpC,OAAgB,KAAK,4BAMlB;IAEH,QAAQ,CAAC,OAAO,SAAsG;IACtH,QAAQ,CAAC,IAAI,SAAqF;IAClG,QAAQ,CAAC,MAAM,qBAA+F;IAExG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAOhB,cAAc;YAoCd,kBAAkB;YAkHlB,aAAa;CA6C3B"}
1
+ {"version":3,"file":"watchCommand.d.ts","sourceRoot":"","sources":["../../src/commands/watchCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiB5C,qBAAa,YAAa,SAAQ,OAAO;IACxC,OAAgB,KAAK,aAAe;IAEpC,OAAgB,KAAK,4BAMlB;IAEH,QAAQ,CAAC,OAAO,SAAsG;IACtH,QAAQ,CAAC,OAAO,SAAuI;IAEjJ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAQhB,cAAc;YAsCd,kBAAkB;YAkHlB,aAAa;CAgD3B"}
@@ -10,7 +10,7 @@ import { BrowserComponentExplorer } from '../componentExplorer.js';
10
10
  import { DefaultComponentExplorerHttpServerFactory } from '../httpServer.js';
11
11
  import { ConsoleLogger, verbosityToLogLevel } from '../logger.js';
12
12
  import { FileSystemStorage } from '../storage.js';
13
- import { ViteProjectRef } from '../viteProjectRef.js';
13
+ import { resolveProject, resolvedProjectToViteProjectRef } from '../resolveProject.js';
14
14
  import { ResolvedWatchConfig } from '../watchConfig.js';
15
15
  import { ExplorerSession } from '../explorerSession.js';
16
16
  import { installDependencies } from '../dependencyInstaller.js';
@@ -26,21 +26,22 @@ class WatchCommand extends Command {
26
26
  ],
27
27
  });
28
28
  verbose = Option.Counter('-v,--verbose', 0, { description: 'Increase log verbosity (-v debug, -vv trace)' });
29
- root = Option.String('--root', process.cwd(), { description: 'Project root directory' });
30
- config = Option.String('-c,--config', { required: false, description: 'Path to watch config JSON' });
29
+ project = Option.String('-p,--project', process.cwd(), { description: 'Project: a directory, vite config file, or component-explorer.json' });
31
30
  async execute() {
32
- if (this.config) {
33
- return this._executeWithConfig();
31
+ const resolved = await resolveProject(this.project);
32
+ if (resolved.kind === 'explorerConfig') {
33
+ return this._executeWithConfig(resolved.configPath);
34
34
  }
35
- return this._executeLegacy();
35
+ return this._executeLegacy(resolved);
36
36
  }
37
- async _executeLegacy() {
37
+ async _executeLegacy(resolved) {
38
38
  const logger = new ConsoleLogger('watch', this.context.stdout, verbosityToLogLevel(this.verbose));
39
- const storage = new FileSystemStorage(`${this.root}/.screenshots`);
39
+ const storage = new FileSystemStorage(`${resolved.projectDir}/.screenshots`);
40
40
  const serverFactory = new DefaultComponentExplorerHttpServerFactory();
41
41
  const browserFactory = new PlaywrightBrowserPageFactory();
42
+ const viteProject = resolvedProjectToViteProjectRef(resolved);
42
43
  logger.log('Starting Vite dev server...');
43
- const server = await serverFactory.createViteServer(ViteProjectRef.fromSourceRootDir(this.root), undefined, logger);
44
+ const server = await serverFactory.createViteServer(viteProject, { logger });
44
45
  logger.log(`Server running at ${server.url}`);
45
46
  const explorer = new BrowserComponentExplorer(browserFactory, server, logger);
46
47
  logger.log('Taking initial screenshots...');
@@ -64,12 +65,12 @@ class WatchCommand extends Command {
64
65
  await browserFactory.dispose();
65
66
  await server.dispose();
66
67
  }
67
- async _executeWithConfig() {
68
+ async _executeWithConfig(configPath) {
68
69
  const logger = new ConsoleLogger('watch', this.context.stdout, verbosityToLogLevel(this.verbose));
69
70
  const serverFactory = new DefaultComponentExplorerHttpServerFactory();
70
71
  const browserFactory = new PlaywrightBrowserPageFactory();
71
- logger.log(`Reading config from ${this.config}`);
72
- const resolvedConfig = await ResolvedWatchConfig.fromFile(this.config);
72
+ logger.log(`Reading config from ${configPath}`);
73
+ const resolvedConfig = await ResolvedWatchConfig.fromFile(configPath);
73
74
  const git = resolvedConfig.repo;
74
75
  const storage = new FileSystemStorage(resolvedConfig.screenshotDir);
75
76
  const sessions = new Map();
@@ -133,7 +134,7 @@ class WatchCommand extends Command {
133
134
  }
134
135
  await installDependencies(wt.worktreePath, wt.install, logger);
135
136
  // Recreate session
136
- const newSession = await ExplorerSession.create(sessionConfig.name, sessionConfig.viteProject, serverFactory, browserFactory, logger, resolveViteFrom);
137
+ const newSession = await ExplorerSession.create(sessionConfig.name, sessionConfig.viteProject, serverFactory, browserFactory, { logger, resolveViteFrom });
137
138
  sessions.set(sessionConfig.name, newSession);
138
139
  const cache = caches.get(sessionConfig.name);
139
140
  const screenshots = await captureAll(newSession.explorer);
@@ -195,7 +196,10 @@ class WatchCommand extends Command {
195
196
  }
196
197
  }
197
198
  logger.log(`Starting server: ${sessionConfig.name}`);
198
- const session = await ExplorerSession.create(sessionConfig.name, sessionConfig.viteProject, serverFactory, browserFactory, logger, sessionConfig.source.kind === 'worktree' ? resolveViteFrom : undefined);
199
+ const session = await ExplorerSession.create(sessionConfig.name, sessionConfig.viteProject, serverFactory, browserFactory, {
200
+ logger,
201
+ resolveViteFrom: sessionConfig.source.kind === 'worktree' ? resolveViteFrom : undefined,
202
+ });
199
203
  sessions.set(sessionConfig.name, session);
200
204
  caches.set(sessionConfig.name, new ScreenshotCache());
201
205
  logger.log(`Server ready: ${sessionConfig.name} (${session.serverUrl})`);
@@ -231,8 +235,8 @@ async function captureAll(explorer) {
231
235
  const fixtures = await explorer.listFixtures();
232
236
  const screenshots = new Map();
233
237
  for (const fixture of fixtures) {
234
- const png = await explorer.screenshotFixture(fixture.fixtureId);
235
- screenshots.set(fixture.fixtureId, png);
238
+ const result = await explorer.screenshotFixture(fixture.fixtureId);
239
+ screenshots.set(fixture.fixtureId, result.image);
236
240
  }
237
241
  return screenshots;
238
242
  }
@@ -270,13 +274,13 @@ async function captureAndCompare(explorer, storage, stdout) {
270
274
  const changed = [];
271
275
  const unchanged = [];
272
276
  for (const fixture of fixtures) {
273
- const png = await explorer.screenshotFixture(fixture.fixtureId);
277
+ const result = await explorer.screenshotFixture(fixture.fixtureId);
274
278
  const currentPath = `current/${fixture.fixtureId}.png`;
275
- await storage.write(currentPath, png);
279
+ await storage.write(currentPath, result.image);
276
280
  const baselinePath = `baseline/${fixture.fixtureId}.png`;
277
281
  if (await storage.exists(baselinePath)) {
278
282
  const baseline = await storage.read(baselinePath);
279
- if (buffersEqual(png, baseline)) {
283
+ if (buffersEqual(result.image, baseline)) {
280
284
  unchanged.push(fixture.fixtureId);
281
285
  }
282
286
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"watchCommand.js","sources":["../../src/commands/watchCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watchCommand.js","sources":["../../src/commands/watchCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -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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"}