@vscode/component-explorer-cli 0.2.1-4 → 0.2.1-41
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 +14 -6
- package/dist/WorktreePool.d.ts +5 -4
- package/dist/WorktreePool.d.ts.map +1 -1
- package/dist/WorktreePool.js +3 -3
- package/dist/WorktreePool.js.map +1 -1
- package/dist/_virtual/_build-info.js +1 -1
- package/dist/browserPage.d.ts +51 -1
- package/dist/browserPage.d.ts.map +1 -1
- package/dist/browserPage.js +107 -1
- package/dist/browserPage.js.map +1 -1
- package/dist/commands/acceptCommand.d.ts +2 -1
- package/dist/commands/acceptCommand.d.ts.map +1 -1
- package/dist/commands/acceptCommand.js +18 -10
- package/dist/commands/acceptCommand.js.map +1 -1
- package/dist/commands/checkStabilityCommand.d.ts +3 -0
- package/dist/commands/checkStabilityCommand.d.ts.map +1 -1
- package/dist/commands/checkStabilityCommand.js +22 -4
- package/dist/commands/checkStabilityCommand.js.map +1 -1
- package/dist/commands/compareCommand.d.ts +2 -1
- package/dist/commands/compareCommand.d.ts.map +1 -1
- package/dist/commands/compareCommand.js +27 -17
- package/dist/commands/compareCommand.js.map +1 -1
- package/dist/commands/inputArg.d.ts +33 -0
- package/dist/commands/inputArg.d.ts.map +1 -0
- package/dist/commands/inputArg.js +103 -0
- package/dist/commands/inputArg.js.map +1 -0
- package/dist/commands/mcpCommand.d.ts +3 -0
- package/dist/commands/mcpCommand.d.ts.map +1 -1
- package/dist/commands/mcpCommand.js +178 -45
- package/dist/commands/mcpCommand.js.map +1 -1
- package/dist/commands/renderCommand.d.ts +10 -1
- package/dist/commands/renderCommand.d.ts.map +1 -1
- package/dist/commands/renderCommand.js +311 -23
- package/dist/commands/renderCommand.js.map +1 -1
- package/dist/commands/serveCommand.d.ts +2 -0
- package/dist/commands/serveCommand.d.ts.map +1 -1
- package/dist/commands/serveCommand.js +73 -41
- package/dist/commands/serveCommand.js.map +1 -1
- package/dist/commands/serviceDiffCommitsCommand.d.ts +16 -0
- package/dist/commands/serviceDiffCommitsCommand.d.ts.map +1 -0
- package/dist/commands/serviceDiffCommitsCommand.js +230 -0
- package/dist/commands/serviceDiffCommitsCommand.js.map +1 -0
- package/dist/commands/watchCommand.d.ts +2 -0
- package/dist/commands/watchCommand.d.ts.map +1 -1
- package/dist/commands/watchCommand.js +28 -16
- package/dist/commands/watchCommand.js.map +1 -1
- package/dist/comparison.d.ts +4 -3
- package/dist/comparison.d.ts.map +1 -1
- package/dist/comparison.js +10 -10
- package/dist/comparison.js.map +1 -1
- package/dist/component-explorer-config.schema.json +55 -2
- package/dist/componentExplorer.d.ts +109 -11
- package/dist/componentExplorer.d.ts.map +1 -1
- package/dist/componentExplorer.js +235 -58
- package/dist/componentExplorer.js.map +1 -1
- package/dist/config.d.ts +33 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +64 -27
- package/dist/config.js.map +1 -1
- package/dist/coverage.d.ts +64 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/coverage.js +212 -0
- package/dist/coverage.js.map +1 -0
- package/dist/daemon/DaemonService.d.ts +14 -5
- package/dist/daemon/DaemonService.d.ts.map +1 -1
- package/dist/daemon/DaemonService.js +42 -18
- package/dist/daemon/DaemonService.js.map +1 -1
- package/dist/daemon/approvalStore.d.ts +2 -1
- package/dist/daemon/approvalStore.d.ts.map +1 -1
- package/dist/daemon/approvalStore.js +4 -3
- package/dist/daemon/approvalStore.js.map +1 -1
- package/dist/daemon/client.d.ts +5 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +7 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/inProcessClient.d.ts +11 -0
- package/dist/daemon/inProcessClient.d.ts.map +1 -0
- package/dist/daemon/inProcessClient.js +35 -0
- package/dist/daemon/inProcessClient.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +8 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +13 -3
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/pipeClient.d.ts +2 -0
- package/dist/daemon/pipeClient.d.ts.map +1 -1
- package/dist/daemon/pipeClient.js +22 -3
- package/dist/daemon/pipeClient.js.map +1 -1
- package/dist/daemon/pipeName.d.ts +7 -1
- package/dist/daemon/pipeName.d.ts.map +1 -1
- package/dist/daemon/pipeName.js +8 -4
- package/dist/daemon/pipeName.js.map +1 -1
- package/dist/daemon/pipeServer.d.ts.map +1 -1
- package/dist/daemon/pipeServer.js +9 -3
- package/dist/daemon/pipeServer.js.map +1 -1
- package/dist/daemon/version.d.ts +1 -1
- package/dist/daemon/version.js +1 -1
- package/dist/dependencyInstaller.d.ts +2 -1
- package/dist/dependencyInstaller.d.ts.map +1 -1
- package/dist/dependencyInstaller.js +4 -4
- package/dist/dependencyInstaller.js.map +1 -1
- package/dist/evaluateFn.d.ts +21 -0
- package/dist/evaluateFn.d.ts.map +1 -0
- package/dist/evaluateFn.js +17 -0
- package/dist/evaluateFn.js.map +1 -0
- package/dist/git/gitCommitResolver.d.ts +2 -1
- package/dist/git/gitCommitResolver.d.ts.map +1 -1
- package/dist/git/gitCommitResolver.js +2 -2
- package/dist/git/gitCommitResolver.js.map +1 -1
- package/dist/git/gitIndexResolver.d.ts +2 -1
- package/dist/git/gitIndexResolver.d.ts.map +1 -1
- package/dist/git/gitIndexResolver.js +1 -1
- package/dist/git/gitIndexResolver.js.map +1 -1
- package/dist/git/gitService.d.ts +5 -4
- package/dist/git/gitService.d.ts.map +1 -1
- package/dist/git/gitService.js.map +1 -1
- package/dist/git/gitUtils.d.ts +6 -4
- package/dist/git/gitUtils.d.ts.map +1 -1
- package/dist/git/gitUtils.js +10 -5
- package/dist/git/gitUtils.js.map +1 -1
- package/dist/git/gitWorktreeManager.d.ts +15 -14
- package/dist/git/gitWorktreeManager.d.ts.map +1 -1
- package/dist/git/gitWorktreeManager.js +10 -11
- package/dist/git/gitWorktreeManager.js.map +1 -1
- package/dist/git/testUtils.d.ts +2 -1
- package/dist/git/testUtils.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +12 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +35 -2
- package/dist/logger.js.map +1 -1
- package/dist/manifest.schema.json +38 -16
- package/dist/mcp/DaemonAccessor.d.ts +22 -0
- package/dist/mcp/DaemonAccessor.d.ts.map +1 -0
- package/dist/mcp/McpServer.d.ts +5 -19
- package/dist/mcp/McpServer.d.ts.map +1 -1
- package/dist/mcp/McpServer.js +384 -297
- package/dist/mcp/McpServer.js.map +1 -1
- package/dist/packages/common/dist/explorerUrl.js +21 -0
- package/dist/packages/common/dist/explorerUrl.js.map +1 -0
- package/dist/packages/common/dist/renderManifest.js +26 -5
- package/dist/packages/common/dist/renderManifest.js.map +1 -1
- package/dist/packages/simple-api/dist/{chunk-3R7GHWBM.js → chunk-FJ7AVNQE.js} +2 -1
- package/dist/packages/simple-api/dist/chunk-FJ7AVNQE.js.map +1 -0
- package/dist/packages/simple-api/dist/{chunk-SGBCNXYH.js → chunk-TTRCY65Z.js} +4 -1
- package/dist/packages/simple-api/dist/chunk-TTRCY65Z.js.map +1 -0
- package/dist/packages/simple-api/dist/{chunk-TAEFVNPN.js → chunk-WNXMRXWV.js} +2 -1
- package/dist/packages/simple-api/dist/chunk-WNXMRXWV.js.map +1 -0
- package/dist/packages/simple-api/dist/express.js +1 -1
- package/dist/packages/simple-api/dist/express.js.map +1 -1
- package/dist/path.d.ts +30 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +78 -0
- package/dist/path.js.map +1 -0
- package/dist/processTree.d.ts +9 -0
- package/dist/processTree.d.ts.map +1 -0
- package/dist/processTree.js +41 -0
- package/dist/processTree.js.map +1 -0
- package/dist/screenshotServiceClient.d.ts +31 -0
- package/dist/screenshotServiceClient.d.ts.map +1 -0
- package/dist/screenshotServiceClient.js +38 -0
- package/dist/screenshotServiceClient.js.map +1 -0
- package/dist/server/httpServer.d.ts +1 -1
- package/dist/server/httpServer.d.ts.map +1 -1
- package/dist/server/httpServer.js +22 -20
- package/dist/server/httpServer.js.map +1 -1
- package/dist/server/serverConfig.d.ts +23 -6
- package/dist/server/serverConfig.d.ts.map +1 -1
- package/dist/server/serverConfig.js +11 -18
- package/dist/server/serverConfig.js.map +1 -1
- package/dist/server/viteServer.d.ts +16 -1
- package/dist/server/viteServer.d.ts.map +1 -1
- package/dist/server/viteServer.js +91 -10
- package/dist/server/viteServer.js.map +1 -1
- package/dist/storage.d.ts +2 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +1 -1
- package/dist/storage.js.map +1 -1
- package/dist/utils.d.ts +3 -25
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +4 -23
- package/dist/utils.js.map +1 -1
- package/dist/visualCache.d.ts +2 -1
- package/dist/visualCache.d.ts.map +1 -1
- package/dist/visualCache.js +4 -3
- package/dist/visualCache.js.map +1 -1
- package/dist/viteProjectRef.d.ts +4 -12
- package/dist/viteProjectRef.d.ts.map +1 -1
- package/dist/viteProjectRef.js +9 -17
- package/dist/viteProjectRef.js.map +1 -1
- package/package.json +23 -19
- package/dist/commands/artifactCommand.d.ts +0 -13
- package/dist/commands/artifactCommand.d.ts.map +0 -1
- package/dist/commands/screenshotCommand.d.ts +0 -18
- package/dist/commands/screenshotCommand.d.ts.map +0 -1
- package/dist/packages/simple-api/dist/chunk-3R7GHWBM.js.map +0 -1
- package/dist/packages/simple-api/dist/chunk-SGBCNXYH.js.map +0 -1
- package/dist/packages/simple-api/dist/chunk-TAEFVNPN.js.map +0 -1
|
@@ -8,10 +8,11 @@ import '../external/vscode-observables/observables/dist/observableInternal/obser
|
|
|
8
8
|
import '../external/vscode-observables/observables/dist/observableInternal/utils/utils.js';
|
|
9
9
|
import '../external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
|
|
10
10
|
import { compareScreenshotsOnDisk, printComparisonToConsole, writeComparisonReport } from '../comparison.js';
|
|
11
|
-
import { ConsoleLogger, verbosityToLogLevel, logBuildInfo } from '../logger.js';
|
|
11
|
+
import { ConsoleLogger, verbosityToLogLevel, createLogFileOptions, logBuildInfo } from '../logger.js';
|
|
12
12
|
import { FileSystemStorage } from '../storage.js';
|
|
13
13
|
import { ResolvedConfig } from '../config.js';
|
|
14
|
-
import {
|
|
14
|
+
import { AbsolutePath } from '../path.js';
|
|
15
|
+
import { listPngFiles } from '../utils.js';
|
|
15
16
|
import '../renderManifest.js';
|
|
16
17
|
import { MANIFEST_FILENAME } from '../packages/common/dist/renderManifest.js';
|
|
17
18
|
|
|
@@ -26,43 +27,52 @@ class CompareCommand extends Command {
|
|
|
26
27
|
],
|
|
27
28
|
});
|
|
28
29
|
verbose = Option.Counter('-v,--verbose', 0, { description: 'Increase log verbosity (-v debug, -vv trace)' });
|
|
29
|
-
|
|
30
|
+
logFile = Option.String('--log-file', { description: 'Append logs to this file (works with -v/-vv)' });
|
|
31
|
+
fixtureIdRegex = Option.String('--fixture-id-regex', { required: false, description: 'Filter fixtures whose fixtureId matches this regular expression (unanchored)' });
|
|
30
32
|
project = Option.String('-p,--project', process.cwd(), { description: 'Project: a directory, vite config file, or component-explorer.json' });
|
|
31
|
-
baseline = Option.String('--baseline', '.screenshots/baseline', { description: 'Baseline screenshots directory' });
|
|
32
|
-
current = Option.String('--current', '.screenshots/current', { description: 'Current screenshots directory' });
|
|
33
|
-
report = Option.String('--report', { required: false, description: 'Output report folder (contains report.json, report.md, and changed screenshots)' });
|
|
33
|
+
baseline = Option.String('--baseline', '.screenshots/baseline', { description: 'Baseline screenshots directory, relative to project file.' });
|
|
34
|
+
current = Option.String('--current', '.screenshots/current', { description: 'Current screenshots directory, relative to project file.' });
|
|
35
|
+
report = Option.String('--report', { required: false, description: 'Output report folder (contains report.json, report.md, and changed screenshots), relative to cwd.' });
|
|
34
36
|
failOnLabels = Option.Array('--fail-on-labels', { required: false, description: 'Only fail when fixtures with any of these labels have changes' });
|
|
35
37
|
async execute() {
|
|
36
38
|
const disposables = new DisposableStore();
|
|
37
|
-
const config = await ResolvedConfig.fromProjectPath(this.project, disposables);
|
|
39
|
+
const config = await ResolvedConfig.fromProjectPath(AbsolutePath.resolve(this.project), disposables);
|
|
38
40
|
const projectDir = config.configDir;
|
|
39
41
|
disposables.dispose();
|
|
40
|
-
const _logger = new ConsoleLogger('compare', this.context.stdout, verbosityToLogLevel(this.verbose));
|
|
42
|
+
const _logger = new ConsoleLogger('compare', this.context.stdout, verbosityToLogLevel(this.verbose), createLogFileOptions(this.logFile, this.verbose));
|
|
41
43
|
logBuildInfo(_logger);
|
|
42
|
-
const baselineDir =
|
|
43
|
-
const currentDir =
|
|
44
|
+
const baselineDir = AbsolutePath.fromAbsoluteOrRelative(this.baseline, { base: projectDir });
|
|
45
|
+
const currentDir = AbsolutePath.fromAbsoluteOrRelative(this.current, { base: projectDir });
|
|
44
46
|
const baselineStorage = new FileSystemStorage(baselineDir);
|
|
45
47
|
const currentStorage = new FileSystemStorage(currentDir);
|
|
46
48
|
// List all PNG files
|
|
47
49
|
let baselineFiles = await listPngFiles(baselineDir);
|
|
48
50
|
let currentFiles = await listPngFiles(currentDir);
|
|
49
51
|
// Apply filter if specified
|
|
50
|
-
if (this.
|
|
51
|
-
|
|
52
|
+
if (this.fixtureIdRegex) {
|
|
53
|
+
let regex;
|
|
54
|
+
try {
|
|
55
|
+
regex = new RegExp(this.fixtureIdRegex);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
this.context.stderr.write(`Error: Invalid --fixture-id-regex: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
59
|
+
return 1;
|
|
60
|
+
}
|
|
61
|
+
const filterFn = (file) => regex.test(file.replace(/\.png$/, ''));
|
|
52
62
|
baselineFiles = baselineFiles.filter(filterFn);
|
|
53
63
|
currentFiles = currentFiles.filter(filterFn);
|
|
54
64
|
}
|
|
55
|
-
const currentMetadata = await readFixturesJson(currentDir);
|
|
56
|
-
const baselineMetadata = await readFixturesJson(baselineDir);
|
|
65
|
+
const currentMetadata = await readFixturesJson(currentDir.value);
|
|
66
|
+
const baselineMetadata = await readFixturesJson(baselineDir.value);
|
|
57
67
|
const result = await compareScreenshotsOnDisk({ list: async () => currentFiles, read: (id) => currentStorage.read(id), exists: (id) => currentStorage.exists(id) }, { list: async () => baselineFiles, read: (id) => baselineStorage.read(id), exists: (id) => baselineStorage.exists(id) }, currentFiles, baselineFiles, { currentMetadata, baselineMetadata });
|
|
58
68
|
printComparisonToConsole(result, this.context.stdout);
|
|
59
69
|
if (this.report) {
|
|
60
|
-
const reportDir =
|
|
70
|
+
const reportDir = AbsolutePath.fromAbsoluteOrRelative(this.report, { base: AbsolutePath.resolve('.') });
|
|
61
71
|
await writeComparisonReport({
|
|
62
72
|
reportDir,
|
|
63
73
|
result,
|
|
64
|
-
baselinePath:
|
|
65
|
-
currentPath:
|
|
74
|
+
baselinePath: baselineDir,
|
|
75
|
+
currentPath: currentDir,
|
|
66
76
|
getBaselineData: (id) => baselineStorage.read(`${id}.png`),
|
|
67
77
|
getCurrentData: (id) => currentStorage.read(`${id}.png`),
|
|
68
78
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compareCommand.js","sources":["../../src/commands/compareCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compareCommand.js","sources":["../../src/commands/compareCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for the CLI `--input` family of flags.
|
|
3
|
+
*
|
|
4
|
+
* - `--input '<json>'`: a JSON object passed as `RenderContext.input` to every fixture in the run.
|
|
5
|
+
* - `--input-<key> <value>`: a single property override on the input object. Values are auto-cast:
|
|
6
|
+
* - matches `^-?\d+(\.\d+)?$` → number
|
|
7
|
+
* - matches `^(true|false)$` → boolean
|
|
8
|
+
* - otherwise kept as string
|
|
9
|
+
*
|
|
10
|
+
* Per-key overrides are merged on top of the base `--input` JSON (so `--input-X` wins).
|
|
11
|
+
*
|
|
12
|
+
* The argv preprocessing (`preprocessInputArgs`) runs in the CLI entry, before clipanion sees argv.
|
|
13
|
+
* It rewrites all `--input-<key> <value>` pairs into a single `--input '<merged-json>'` pair,
|
|
14
|
+
* so individual commands only need to declare a single `--input` String option.
|
|
15
|
+
*/
|
|
16
|
+
/** Cast a CLI string value to number / boolean / string per the documented rules. */
|
|
17
|
+
export declare function castInputValue(raw: string): unknown;
|
|
18
|
+
/**
|
|
19
|
+
* Parse the resolved `--input` flag value as a JSON object (or undefined).
|
|
20
|
+
*
|
|
21
|
+
* @throws {Error} when the value isn't valid JSON or isn't a JSON object.
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseInputJson(raw: string | undefined): Record<string, unknown> | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Pre-scan argv, extract every `--input-<key> <value>` pair, merge them onto the existing
|
|
26
|
+
* `--input '<json>'` (if any), and return a rewritten argv with a single `--input '<merged>'` flag.
|
|
27
|
+
*
|
|
28
|
+
* If no `--input-<key>` flags are present, argv is returned unchanged.
|
|
29
|
+
*
|
|
30
|
+
* @throws {Error} when the base `--input` JSON is invalid or not an object.
|
|
31
|
+
*/
|
|
32
|
+
export declare function preprocessInputArgs(args: readonly string[]): string[];
|
|
33
|
+
//# sourceMappingURL=inputArg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputArg.d.ts","sourceRoot":"","sources":["../../src/commands/inputArg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKnD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAY3F;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CA0CrE"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for the CLI `--input` family of flags.
|
|
3
|
+
*
|
|
4
|
+
* - `--input '<json>'`: a JSON object passed as `RenderContext.input` to every fixture in the run.
|
|
5
|
+
* - `--input-<key> <value>`: a single property override on the input object. Values are auto-cast:
|
|
6
|
+
* - matches `^-?\d+(\.\d+)?$` → number
|
|
7
|
+
* - matches `^(true|false)$` → boolean
|
|
8
|
+
* - otherwise kept as string
|
|
9
|
+
*
|
|
10
|
+
* Per-key overrides are merged on top of the base `--input` JSON (so `--input-X` wins).
|
|
11
|
+
*
|
|
12
|
+
* The argv preprocessing (`preprocessInputArgs`) runs in the CLI entry, before clipanion sees argv.
|
|
13
|
+
* It rewrites all `--input-<key> <value>` pairs into a single `--input '<merged-json>'` pair,
|
|
14
|
+
* so individual commands only need to declare a single `--input` String option.
|
|
15
|
+
*/
|
|
16
|
+
const NUMBER_RE = /^-?\d+(?:\.\d+)?$/;
|
|
17
|
+
/** Cast a CLI string value to number / boolean / string per the documented rules. */
|
|
18
|
+
function castInputValue(raw) {
|
|
19
|
+
if (NUMBER_RE.test(raw)) {
|
|
20
|
+
return Number(raw);
|
|
21
|
+
}
|
|
22
|
+
if (raw === 'true') {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (raw === 'false') {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
return raw;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Parse the resolved `--input` flag value as a JSON object (or undefined).
|
|
32
|
+
*
|
|
33
|
+
* @throws {Error} when the value isn't valid JSON or isn't a JSON object.
|
|
34
|
+
*/
|
|
35
|
+
function parseInputJson(raw) {
|
|
36
|
+
if (raw === undefined) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
let parsed;
|
|
40
|
+
try {
|
|
41
|
+
parsed = JSON.parse(raw);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
throw new Error(`--input is not valid JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
45
|
+
}
|
|
46
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
47
|
+
throw new Error('--input must be a JSON object (e.g. \'{"theme":"dark"}\')');
|
|
48
|
+
}
|
|
49
|
+
return parsed;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Pre-scan argv, extract every `--input-<key> <value>` pair, merge them onto the existing
|
|
53
|
+
* `--input '<json>'` (if any), and return a rewritten argv with a single `--input '<merged>'` flag.
|
|
54
|
+
*
|
|
55
|
+
* If no `--input-<key>` flags are present, argv is returned unchanged.
|
|
56
|
+
*
|
|
57
|
+
* @throws {Error} when the base `--input` JSON is invalid or not an object.
|
|
58
|
+
*/
|
|
59
|
+
function preprocessInputArgs(args) {
|
|
60
|
+
const out = [];
|
|
61
|
+
const overrides = {};
|
|
62
|
+
let baseInputJson;
|
|
63
|
+
let baseInputJsonOutIdx;
|
|
64
|
+
for (let i = 0; i < args.length; i++) {
|
|
65
|
+
const a = args[i];
|
|
66
|
+
if (a === '--input' && i + 1 < args.length) {
|
|
67
|
+
baseInputJson = args[i + 1];
|
|
68
|
+
out.push(a);
|
|
69
|
+
baseInputJsonOutIdx = out.length;
|
|
70
|
+
out.push(args[i + 1]);
|
|
71
|
+
i++;
|
|
72
|
+
}
|
|
73
|
+
else if (a.startsWith('--input-') && a.length > '--input-'.length) {
|
|
74
|
+
const key = a.slice('--input-'.length);
|
|
75
|
+
// Reject obvious typos / no value supplied — leave for clipanion to surface.
|
|
76
|
+
if (i + 1 >= args.length || args[i + 1].startsWith('-')) {
|
|
77
|
+
out.push(a);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
overrides[key] = castInputValue(args[i + 1]);
|
|
81
|
+
i++;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
out.push(a);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (Object.keys(overrides).length === 0) {
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
const base = parseInputJson(baseInputJson) ?? {};
|
|
91
|
+
const merged = { ...base, ...overrides };
|
|
92
|
+
const mergedJson = JSON.stringify(merged);
|
|
93
|
+
if (baseInputJsonOutIdx !== undefined) {
|
|
94
|
+
out[baseInputJsonOutIdx] = mergedJson;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
out.push('--input', mergedJson);
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export { castInputValue, parseInputJson, preprocessInputArgs };
|
|
103
|
+
//# sourceMappingURL=inputArg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputArg.js","sources":["../../src/commands/inputArg.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,10 @@ import { Command } from 'clipanion';
|
|
|
2
2
|
export declare class McpCommand extends Command {
|
|
3
3
|
static paths: string[][];
|
|
4
4
|
static usage: import("clipanion").Usage;
|
|
5
|
+
readonly verbose: number;
|
|
6
|
+
readonly logFile: string | undefined;
|
|
5
7
|
readonly project: string;
|
|
8
|
+
readonly useDaemon: boolean;
|
|
6
9
|
readonly noAutostart: boolean;
|
|
7
10
|
readonly noAutostartHint: string | undefined;
|
|
8
11
|
readonly callTimeout: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpCommand.d.ts","sourceRoot":"","sources":["../../src/commands/mcpCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mcpCommand.d.ts","sourceRoot":"","sources":["../../src/commands/mcpCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAY5C,qBAAa,UAAW,SAAQ,OAAO;IACtC,OAAgB,KAAK,aAAa;IAElC,OAAgB,KAAK,4BAOlB;IAEH,QAAQ,CAAC,OAAO,SAAsG;IACtH,QAAQ,CAAC,OAAO,qBAAgG;IAChH,QAAQ,CAAC,OAAO,SAAwI;IACxJ,QAAQ,CAAC,SAAS,UAA6I;IAC/J,QAAQ,CAAC,WAAW,UAA4I;IAChK,QAAQ,CAAC,eAAe,qBAAsJ;IAC9K,QAAQ,CAAC,WAAW,qBAAyG;IAEvH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA0D9B"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Command, Option } from 'clipanion';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
2
|
import '../external/vscode-observables/observables/dist/observableInternal/index.js';
|
|
4
3
|
import { DisposableStore } from '../external/vscode-observables/observables/dist/disposables.js';
|
|
5
4
|
import { observableValue } from '../external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js';
|
|
@@ -8,76 +7,210 @@ import '../external/vscode-observables/observables/dist/observableInternal/obser
|
|
|
8
7
|
import '../external/vscode-observables/observables/dist/observableInternal/utils/utils.js';
|
|
9
8
|
import '../external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
|
|
10
9
|
import { tryConnect, connectToExistingOrStartDaemon } from '../daemon/lifecycle.js';
|
|
11
|
-
import {
|
|
12
|
-
import { ComponentExplorerMcpServer
|
|
10
|
+
import { daemonPipeInfo } from '../daemon/pipeName.js';
|
|
11
|
+
import { ComponentExplorerMcpServer } from '../mcp/McpServer.js';
|
|
13
12
|
import { ResolvedConfig } from '../config.js';
|
|
13
|
+
import { AbsolutePath } from '../path.js';
|
|
14
|
+
import { DaemonService } from '../daemon/DaemonService.js';
|
|
15
|
+
import { createInProcessClient } from '../daemon/inProcessClient.js';
|
|
16
|
+
import { ConsoleLogger, verbosityToLogLevel, createLogFileOptions, logBuildInfo } from '../logger.js';
|
|
14
17
|
|
|
15
18
|
class McpCommand extends Command {
|
|
16
19
|
static paths = [['mcp']];
|
|
17
20
|
static usage = Command.Usage({
|
|
18
|
-
description: 'Start an MCP server over stdio.
|
|
21
|
+
description: 'Start an MCP server over stdio. By default runs as the daemon in-process.',
|
|
19
22
|
examples: [
|
|
20
|
-
['Start MCP server', '$0 mcp --project config.json'],
|
|
21
|
-
['
|
|
23
|
+
['Start MCP server (in-process daemon)', '$0 mcp --project config.json'],
|
|
24
|
+
['Connect to external daemon', '$0 mcp --project config.json --use-daemon'],
|
|
25
|
+
['Require existing daemon', '$0 mcp --project config.json --use-daemon --no-daemon-autostart'],
|
|
22
26
|
],
|
|
23
27
|
});
|
|
28
|
+
verbose = Option.Counter('-v,--verbose', 0, { description: 'Increase log verbosity (-v debug, -vv trace)' });
|
|
29
|
+
logFile = Option.String('--log-file', { description: 'Append logs to this file (works with -v/-vv)' });
|
|
24
30
|
project = Option.String('-p,--project', { required: true, description: 'Project: a directory, vite config file, or component-explorer.json' });
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
useDaemon = Option.Boolean('--use-daemon', false, { description: 'Connect to an external daemon process over a pipe instead of running in-process' });
|
|
32
|
+
noAutostart = Option.Boolean('--no-daemon-autostart', false, { description: 'Do not auto-start daemon; poll for it instead (requires --use-daemon)' });
|
|
33
|
+
noAutostartHint = Option.String('--no-daemon-hint', { description: 'Hint message shown when daemon is not running (used with --use-daemon --no-daemon-autostart)' });
|
|
27
34
|
callTimeout = Option.String('--call-timeout', { description: 'Timeout in seconds for daemon calls (default: 15)' });
|
|
28
35
|
async execute() {
|
|
36
|
+
const logger = new ConsoleLogger('mcp', this.context.stderr, verbosityToLogLevel(this.verbose), createLogFileOptions(this.logFile, this.verbose));
|
|
37
|
+
logBuildInfo(logger);
|
|
38
|
+
if (this.noAutostart && !this.useDaemon) {
|
|
39
|
+
this.context.stderr.write('Error: --no-daemon-autostart requires --use-daemon.\n');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const projectPath = AbsolutePath.resolve(this.project);
|
|
29
43
|
const disposables = new DisposableStore();
|
|
30
|
-
const config = await ResolvedConfig.fromProjectPath(
|
|
44
|
+
const config = await ResolvedConfig.fromProjectPath(projectPath, disposables);
|
|
31
45
|
if (!config.isFullConfig) {
|
|
32
46
|
this.context.stderr.write('Error: mcp requires a component-explorer.json config file.\n');
|
|
33
47
|
disposables.dispose();
|
|
34
48
|
return;
|
|
35
49
|
}
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
const pollFn = async () => {
|
|
42
|
-
const client = await tryConnect(pipeName, { clientName: mcpClientName });
|
|
43
|
-
if (client) {
|
|
44
|
-
const current = daemonObservable.get();
|
|
45
|
-
if (!current || current.isStale) {
|
|
46
|
-
daemonObservable.set(new DaemonConnection(client), undefined);
|
|
47
|
-
}
|
|
50
|
+
// Ensure cleanup on crashes/unexpected exits
|
|
51
|
+
const asyncCleanupFns = [];
|
|
52
|
+
let cleanedUp = false;
|
|
53
|
+
const cleanup = async () => {
|
|
54
|
+
if (cleanedUp) {
|
|
48
55
|
return;
|
|
49
56
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
if (!this.noAutostart && !restartInProgress) {
|
|
56
|
-
restartInProgress = true;
|
|
57
|
-
try {
|
|
58
|
-
const daemon = await connectToExistingOrStartDaemon(configPath, { clientName: mcpClientName });
|
|
59
|
-
daemonObservable.set(new DaemonConnection(daemon), undefined);
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
// Restart failed, will retry on next poll
|
|
63
|
-
}
|
|
64
|
-
finally {
|
|
65
|
-
restartInProgress = false;
|
|
66
|
-
}
|
|
57
|
+
cleanedUp = true;
|
|
58
|
+
logger.debug('Cleaning up...');
|
|
59
|
+
for (const fn of asyncCleanupFns) {
|
|
60
|
+
await fn();
|
|
67
61
|
}
|
|
62
|
+
disposables.dispose();
|
|
68
63
|
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
64
|
+
process.on('uncaughtException', async (err) => {
|
|
65
|
+
logger.log(`Uncaught exception: ${err.message}`);
|
|
66
|
+
await cleanup();
|
|
67
|
+
});
|
|
68
|
+
process.on('unhandledRejection', async (err) => {
|
|
69
|
+
logger.log(`Unhandled rejection: ${err instanceof Error ? err.message : String(err)}`);
|
|
70
|
+
await cleanup();
|
|
71
|
+
});
|
|
72
|
+
process.on('SIGINT', async () => {
|
|
73
|
+
logger.debug('Received SIGINT');
|
|
74
|
+
await cleanup();
|
|
75
|
+
process.exit(0);
|
|
76
|
+
});
|
|
77
|
+
const accessor = this.useDaemon
|
|
78
|
+
? new ExternalDaemonAccessor(projectPath, logger, {
|
|
79
|
+
noAutostart: this.noAutostart,
|
|
80
|
+
noAutostartHint: this.noAutostartHint,
|
|
81
|
+
verbose: this.verbose,
|
|
82
|
+
logFile: this.logFile,
|
|
83
|
+
})
|
|
84
|
+
: new InProcessDaemonAccessor(config, logger, asyncCleanupFns);
|
|
85
|
+
await ComponentExplorerMcpServer.create(accessor, {
|
|
75
86
|
callTimeoutMs: this.callTimeout ? Number(this.callTimeout) * 1000 : undefined,
|
|
76
87
|
});
|
|
77
|
-
|
|
88
|
+
logger.log(`MCP server ready (${this.useDaemon ? 'external' : 'in-process'} daemon)`);
|
|
78
89
|
await new Promise(() => { });
|
|
79
90
|
}
|
|
80
91
|
}
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// InProcessDaemonAccessor — lazily creates a DaemonService on first tool call
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
class InProcessDaemonAccessor {
|
|
96
|
+
_config;
|
|
97
|
+
_logger;
|
|
98
|
+
_asyncCleanupFns;
|
|
99
|
+
_connection = observableValue('daemon', undefined);
|
|
100
|
+
_startInProgress = false;
|
|
101
|
+
constructor(_config, _logger, _asyncCleanupFns) {
|
|
102
|
+
this._config = _config;
|
|
103
|
+
this._logger = _logger;
|
|
104
|
+
this._asyncCleanupFns = _asyncCleanupFns;
|
|
105
|
+
}
|
|
106
|
+
get connection() { return this._connection; }
|
|
107
|
+
async getDaemonOrStart() {
|
|
108
|
+
const current = this._connection.get();
|
|
109
|
+
if (current) {
|
|
110
|
+
return current;
|
|
111
|
+
}
|
|
112
|
+
if (this._startInProgress) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
this._startInProgress = true;
|
|
116
|
+
try {
|
|
117
|
+
this._logger.log('Starting in-process daemon...');
|
|
118
|
+
const service = await DaemonService.create(this._config, this._logger, undefined, {
|
|
119
|
+
idleTimeoutMs: 0,
|
|
120
|
+
});
|
|
121
|
+
this._asyncCleanupFns.push(() => service.dispose());
|
|
122
|
+
const client = createInProcessClient(service.api, { clientName: 'mcp-inproc' });
|
|
123
|
+
this._connection.set(client, undefined);
|
|
124
|
+
return client;
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
this._logger.log(`Failed to start in-process daemon: ${err instanceof Error ? err.message : String(err)}`);
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
this._startInProgress = false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
class ExternalDaemonAccessor {
|
|
136
|
+
_logger;
|
|
137
|
+
_options;
|
|
138
|
+
_connection = observableValue('daemon', undefined);
|
|
139
|
+
_pipeName;
|
|
140
|
+
_configPath;
|
|
141
|
+
_clientName;
|
|
142
|
+
_restartInProgress = false;
|
|
143
|
+
constructor(projectPath, _logger, _options) {
|
|
144
|
+
this._logger = _logger;
|
|
145
|
+
this._options = _options;
|
|
146
|
+
this._configPath = projectPath;
|
|
147
|
+
const { pipeName, source: pipeSource } = daemonPipeInfo(this._configPath);
|
|
148
|
+
this._pipeName = pipeName;
|
|
149
|
+
this._clientName = `mcp-${new Date().toISOString().replace(/[-:]/g, '').replace(/\.\d+Z$/, '')}`;
|
|
150
|
+
_logger.debug(`Daemon pipe: ${pipeName} (source: ${pipeSource})`);
|
|
151
|
+
}
|
|
152
|
+
get connection() { return this._connection; }
|
|
153
|
+
get noDaemonHint() { return this._options.noAutostartHint; }
|
|
154
|
+
_onConnectionError = () => {
|
|
155
|
+
if (this._connection.get()) {
|
|
156
|
+
this._connection.set(undefined, undefined);
|
|
157
|
+
this._logger.debug('Daemon connection lost');
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
async getDaemonOrStart() {
|
|
161
|
+
const current = this._connection.get();
|
|
162
|
+
if (current) {
|
|
163
|
+
return current;
|
|
164
|
+
}
|
|
165
|
+
return waitForConnection(() => this._connection.get(), () => this._poll());
|
|
166
|
+
}
|
|
167
|
+
async _poll() {
|
|
168
|
+
const client = await tryConnect(this._pipeName, { clientName: this._clientName, onConnectionError: this._onConnectionError });
|
|
169
|
+
if (client) {
|
|
170
|
+
if (!this._connection.get()) {
|
|
171
|
+
this._logger.debug('Daemon connection established');
|
|
172
|
+
this._connection.set(client, undefined);
|
|
173
|
+
}
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
this._onConnectionError();
|
|
177
|
+
if (!this._options.noAutostart && !this._restartInProgress) {
|
|
178
|
+
this._restartInProgress = true;
|
|
179
|
+
try {
|
|
180
|
+
const daemon = await connectToExistingOrStartDaemon(this._configPath, {
|
|
181
|
+
clientName: this._clientName,
|
|
182
|
+
onConnectionError: this._onConnectionError,
|
|
183
|
+
logger: this._logger,
|
|
184
|
+
verbosity: this._options.verbose,
|
|
185
|
+
logFile: this._options.logFile,
|
|
186
|
+
});
|
|
187
|
+
this._connection.set(daemon, undefined);
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
this._logger.debug(`Daemon restart failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
this._restartInProgress = false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Wait up to `timeoutMs` for a connection to appear, calling `poll` each
|
|
200
|
+
* iteration to trigger connection attempts.
|
|
201
|
+
*/
|
|
202
|
+
async function waitForConnection(get, poll, timeoutMs = 3000) {
|
|
203
|
+
const startTime = Date.now();
|
|
204
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
205
|
+
await poll();
|
|
206
|
+
const client = get();
|
|
207
|
+
if (client) {
|
|
208
|
+
return client;
|
|
209
|
+
}
|
|
210
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
211
|
+
}
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
81
214
|
|
|
82
215
|
export { McpCommand };
|
|
83
216
|
//# sourceMappingURL=mcpCommand.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpCommand.js","sources":["../../src/commands/mcpCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcpCommand.js","sources":["../../src/commands/mcpCommand.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAYM,MAAO,UAAW,SAAQ,OAAO,CAAA;IACtC,OAAgB,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAEjC,IAAA,OAAgB,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AACrC,QAAA,WAAW,EAAE,2EAA2E;AACxF,QAAA,QAAQ,EAAE;YACT,CAAC,sCAAsC,EAAE,8BAA8B,CAAC;YACxE,CAAC,4BAA4B,EAAE,2CAA2C,CAAC;YAC3E,CAAC,yBAAyB,EAAE,iEAAiE,CAAC;AAC9F,SAAA;AACD,KAAA,CAAC;AAEO,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;AAC5G,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;AACtG,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oEAAoE,EAAE,CAAC;AAC9I,IAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,iFAAiF,EAAE,CAAC;AACrJ,IAAA,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,uEAAuE,EAAE,CAAC;AACtJ,IAAA,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE,8FAA8F,EAAE,CAAC;AACpK,IAAA,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,WAAW,EAAE,mDAAmD,EAAE,CAAC;AAE5H,IAAA,MAAM,OAAO,GAAA;AACZ,QAAA,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjJ,YAAY,CAAC,MAAM,CAAC;QAEpB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC;YAClF;QACD;QAEA,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE;QACzC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC;AAC7E,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC;YACzF,WAAW,CAAC,OAAO,EAAE;YACrB;QACD;;QAGA,MAAM,eAAe,GAA4B,EAAE;QACnD,IAAI,SAAS,GAAG,KAAK;AACrB,QAAA,MAAM,OAAO,GAAG,YAAW;YAC1B,IAAI,SAAS,EAAE;gBAAE;YAAQ;YACzB,SAAS,GAAG,IAAI;AAChB,YAAA,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAC9B,YAAA,KAAK,MAAM,EAAE,IAAI,eAAe,EAAE;gBAAE,MAAM,EAAE,EAAE;YAAE;YAChD,WAAW,CAAC,OAAO,EAAE;AACtB,QAAA,CAAC;QACD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,OAAO,GAAG,KAAI;YAC7C,MAAM,CAAC,GAAG,CAAC,CAAA,oBAAA,EAAuB,GAAG,CAAC,OAAO,CAAA,CAAE,CAAC;YAChD,MAAM,OAAO,EAAE;AAChB,QAAA,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,OAAO,GAAG,KAAI;YAC9C,MAAM,CAAC,GAAG,CAAC,CAAA,qBAAA,EAAwB,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;YACtF,MAAM,OAAO,EAAE;AAChB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAW;AAC/B,YAAA,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;YAC/B,MAAM,OAAO,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAChB,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACrB,cAAE,IAAI,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE;gBACjD,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;aACrB;cACC,IAAI,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC;AAE/D,QAAA,MAAM,0BAA0B,CAAC,MAAM,CAAC,QAAQ,EAAE;AACjD,YAAA,aAAa,EAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS;AAC7E,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,GAAG,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,SAAS,GAAG,UAAU,GAAG,YAAY,CAAA,QAAA,CAAU,CAAC;QAErF,MAAM,IAAI,OAAO,CAAO,MAAK,EAAG,CAAC,CAAC;IACnC;;AAGD;AACA;AACA;AAEA,MAAM,uBAAuB,CAAA;AAKV,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,gBAAA;AAND,IAAA,WAAW,GAAG,eAAe,CAA2B,QAAQ,EAAE,SAAS,CAAC;IACrF,gBAAgB,GAAG,KAAK;AAEhC,IAAA,WAAA,CACkB,OAAuB,EACvB,OAAsB,EACtB,gBAAyC,EAAA;QAFzC,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAC9B;IAEJ,IAAI,UAAU,KAA4C,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;AAEnF,IAAA,MAAM,gBAAgB,GAAA;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;QACtC,IAAI,OAAO,EAAE;AAAE,YAAA,OAAO,OAAO;QAAE;AAE/B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAAE,YAAA,OAAO,SAAS;QAAE;AAC/C,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;AACjD,YAAA,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;AACjF,gBAAA,aAAa,EAAE,CAAC;AAChB,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;AACnD,YAAA,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;YAC/E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;AACvC,YAAA,OAAO,MAAM;QACd;QAAE,OAAO,GAAG,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sCAAsC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;AAC1G,YAAA,OAAO,SAAS;QACjB;gBAAU;AACT,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC9B;IACD;AACA;AAaD,MAAM,sBAAsB,CAAA;AAST,IAAA,OAAA;AACA,IAAA,QAAA;AATD,IAAA,WAAW,GAAG,eAAe,CAA2B,QAAQ,EAAE,SAAS,CAAC;AAC5E,IAAA,SAAS;AACT,IAAA,WAAW;AACX,IAAA,WAAW;IACpB,kBAAkB,GAAG,KAAK;AAElC,IAAA,WAAA,CACC,WAAyB,EACR,OAAsB,EACtB,QAA+B,EAAA;QAD/B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAEzB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACzE,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,CAAC,WAAW,GAAG,CAAA,IAAA,EAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA,CAAE;QAChG,OAAO,CAAC,KAAK,CAAC,CAAA,aAAA,EAAgB,QAAQ,CAAA,UAAA,EAAa,UAAU,CAAA,CAAA,CAAG,CAAC;IAClE;IAEA,IAAI,UAAU,KAA4C,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;IACnF,IAAI,YAAY,GAAA,EAAyB,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE9D,kBAAkB,GAAG,MAAK;AAC1C,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC;AAC1C,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC;QAC7C;AACD,IAAA,CAAC;AAED,IAAA,MAAM,gBAAgB,GAAA;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;QACtC,IAAI,OAAO,EAAE;AAAE,YAAA,OAAO,OAAO;QAAE;QAE/B,OAAO,iBAAiB,CACvB,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,EAC5B,MAAM,IAAI,CAAC,KAAK,EAAE,CAClB;IACF;AAEQ,IAAA,MAAM,KAAK,GAAA;QAClB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7H,IAAI,MAAM,EAAE;YACX,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC;gBACnD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;YACxC;YACA;QACD;QAEA,IAAI,CAAC,kBAAkB,EAAE;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC3D,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI;gBACH,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC,IAAI,CAAC,WAAW,EAAE;oBACrE,UAAU,EAAE,IAAI,CAAC,WAAW;oBAC5B,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;oBAC1C,MAAM,EAAE,IAAI,CAAC,OAAO;AACpB,oBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;AAChC,oBAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;AAC9B,iBAAA,CAAC;gBACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;YACxC;YAAE,OAAO,GAAG,EAAE;gBACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;YACjG;oBAAU;AACT,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAChC;QACD;IACD;AACA;AAED;;;AAGG;AACH,eAAe,iBAAiB,CAC/B,GAAmC,EACnC,IAAyB,EACzB,YAAoB,IAAI,EAAA;AAExB,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;IAC5B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE;QAC1C,MAAM,IAAI,EAAE;AACZ,QAAA,MAAM,MAAM,GAAG,GAAG,EAAE;QACpB,IAAI,MAAM,EAAE;AAAE,YAAA,OAAO,MAAM;QAAE;AAC7B,QAAA,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvD;AACA,IAAA,OAAO,SAAS;AACjB;;;;"}
|
|
@@ -3,7 +3,8 @@ export declare class RenderCommand extends Command {
|
|
|
3
3
|
static paths: string[][];
|
|
4
4
|
static usage: import("clipanion").Usage;
|
|
5
5
|
readonly verbose: number;
|
|
6
|
-
readonly
|
|
6
|
+
readonly logFile: string | undefined;
|
|
7
|
+
readonly fixtureIdRegex: string | undefined;
|
|
7
8
|
readonly accept: boolean;
|
|
8
9
|
readonly project: string;
|
|
9
10
|
readonly target: string | undefined;
|
|
@@ -13,7 +14,15 @@ export declare class RenderCommand extends Command {
|
|
|
13
14
|
readonly headed: boolean;
|
|
14
15
|
readonly timeout: string;
|
|
15
16
|
readonly useHashPaths: boolean;
|
|
17
|
+
readonly reloadBetweenFixtures: boolean;
|
|
18
|
+
readonly input: string | undefined;
|
|
19
|
+
readonly coverage: boolean;
|
|
20
|
+
readonly coverageMode: string | undefined;
|
|
21
|
+
readonly coverageJs: string | undefined;
|
|
22
|
+
readonly coverageCss: boolean;
|
|
23
|
+
readonly coverageOutput: string | undefined;
|
|
16
24
|
execute(): Promise<number>;
|
|
25
|
+
private _resolveCoverage;
|
|
17
26
|
private _runComparison;
|
|
18
27
|
}
|
|
19
28
|
//# sourceMappingURL=renderCommand.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderCommand.d.ts","sourceRoot":"","sources":["../../src/commands/renderCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"renderCommand.d.ts","sourceRoot":"","sources":["../../src/commands/renderCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAwB5C,qBAAa,aAAc,SAAQ,OAAO;IACzC,OAAgB,KAAK,aAAgB;IAErC,OAAgB,KAAK,4BAOlB;IAEH,QAAQ,CAAC,OAAO,SAAsG;IACtH,QAAQ,CAAC,OAAO,qBAAgG;IAChH,QAAQ,CAAC,cAAc,qBAAyJ;IAChL,QAAQ,CAAC,MAAM,UAAiI;IAChJ,QAAQ,CAAC,OAAO,SAAuI;IACvJ,QAAQ,CAAC,MAAM,qBAAsK;IACrL,QAAQ,CAAC,OAAO,UAA8F;IAC9G,QAAQ,CAAC,aAAa,qBAA+K;IACrM,QAAQ,CAAC,MAAM,qBAA4G;IAC3H,QAAQ,CAAC,MAAM,UAAwG;IACvH,QAAQ,CAAC,OAAO,SAA+G;IAC/H,QAAQ,CAAC,YAAY,UAA8J;IACnL,QAAQ,CAAC,qBAAqB,UAAkJ;IAChL,QAAQ,CAAC,KAAK,qBAAmO;IAEjP,QAAQ,CAAC,QAAQ,UAAoJ;IACrK,QAAQ,CAAC,YAAY,qBAA0N;IAC/O,QAAQ,CAAC,UAAU,qBAAiM;IACpN,QAAQ,CAAC,WAAW,UAAyH;IAC7I,QAAQ,CAAC,cAAc,qBAAiJ;IAElK,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAoWhC,OAAO,CAAC,gBAAgB;YA8CV,cAAc;CA+B5B"}
|