@vscode/component-explorer-cli 0.2.1-1 → 0.2.1-100
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 +54 -4
- package/dist/browserPage.d.ts.map +1 -1
- package/dist/browserPage.js +113 -2
- 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 +30 -14
- 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 +39 -18
- 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 +53 -25
- 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 +189 -51
- package/dist/commands/mcpCommand.js.map +1 -1
- package/dist/commands/renderCommand.d.ts +28 -0
- package/dist/commands/renderCommand.d.ts.map +1 -0
- package/dist/commands/renderCommand.js +495 -0
- package/dist/commands/renderCommand.js.map +1 -0
- package/dist/commands/serveCommand.d.ts +2 -0
- package/dist/commands/serveCommand.d.ts.map +1 -1
- package/dist/commands/serveCommand.js +85 -44
- 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 +47 -41
- 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 +17 -14
- package/dist/comparison.js.map +1 -1
- package/dist/component-explorer-config.schema.json +55 -2
- package/dist/componentExplorer.d.ts +122 -20
- package/dist/componentExplorer.d.ts.map +1 -1
- package/dist/componentExplorer.js +250 -78
- package/dist/componentExplorer.js.map +1 -1
- package/dist/{watchConfig.d.ts → config.d.ts} +59 -26
- package/dist/config.d.ts.map +1 -0
- package/dist/{watchConfig.js → config.js} +108 -31
- package/dist/config.js.map +1 -0
- 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 +17 -8
- package/dist/daemon/DaemonService.d.ts.map +1 -1
- package/dist/daemon/DaemonService.js +64 -57
- 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 +29 -9
- 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 +10 -4
- package/dist/daemon/pipeServer.js.map +1 -1
- package/dist/daemon/version.d.ts +2 -2
- package/dist/daemon/version.d.ts.map +1 -1
- package/dist/daemon/version.js +2 -2
- package/dist/dependencyInstaller.d.ts +3 -2
- 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/explorerSession.d.ts +2 -3
- package/dist/explorerSession.d.ts.map +1 -1
- package/dist/explorerSession.js +3 -20
- package/dist/explorerSession.js.map +1 -1
- package/dist/git/gitCommitResolver.d.ts +2 -1
- package/dist/git/gitCommitResolver.d.ts.map +1 -1
- package/dist/git/gitCommitResolver.js +8 -8
- 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 +7 -7
- 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 +21 -3
- package/dist/index.js.map +1 -1
- package/dist/js-component-explorer/packages/common/dist/explorerUrl.js +21 -0
- package/dist/js-component-explorer/packages/common/dist/explorerUrl.js.map +1 -0
- package/dist/js-component-explorer/packages/common/dist/renderManifest.js +68 -0
- package/dist/js-component-explorer/packages/common/dist/renderManifest.js.map +1 -0
- package/dist/js-component-explorer/packages/semver/dist/index.js +186 -0
- package/dist/js-component-explorer/packages/semver/dist/index.js.map +1 -0
- package/dist/{packages/simple-api/dist/chunk-3R7GHWBM.js → js-component-explorer/packages/simple-api/dist/chunk-FJ7AVNQE.js} +2 -1
- package/dist/js-component-explorer/packages/simple-api/dist/chunk-FJ7AVNQE.js.map +1 -0
- package/dist/{packages/simple-api/dist/chunk-SGBCNXYH.js → js-component-explorer/packages/simple-api/dist/chunk-TTRCY65Z.js} +4 -1
- package/dist/js-component-explorer/packages/simple-api/dist/chunk-TTRCY65Z.js.map +1 -0
- package/dist/{packages/simple-api/dist/chunk-TAEFVNPN.js → js-component-explorer/packages/simple-api/dist/chunk-WNXMRXWV.js} +2 -1
- package/dist/js-component-explorer/packages/simple-api/dist/chunk-WNXMRXWV.js.map +1 -0
- package/dist/{packages → js-component-explorer/packages}/simple-api/dist/express.js +1 -1
- package/dist/js-component-explorer/packages/simple-api/dist/express.js.map +1 -0
- 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 +215 -0
- 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 +391 -304
- package/dist/mcp/McpServer.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 +14 -0
- package/dist/processTree.d.ts.map +1 -0
- package/dist/processTree.js +84 -0
- package/dist/processTree.js.map +1 -0
- package/dist/renderManifest.d.ts +5 -0
- package/dist/renderManifest.d.ts.map +1 -0
- package/dist/renderManifest.js +11 -0
- package/dist/renderManifest.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 +14 -0
- package/dist/server/httpServer.d.ts.map +1 -0
- package/dist/server/httpServer.js +110 -0
- package/dist/server/httpServer.js.map +1 -0
- package/dist/server/httpServer.test.d.ts.map +1 -0
- package/dist/server/serverConfig.d.ts +59 -0
- package/dist/server/serverConfig.d.ts.map +1 -0
- package/dist/server/serverConfig.js +53 -0
- package/dist/server/serverConfig.js.map +1 -0
- package/dist/server/types.d.ts +6 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/viteServer.d.ts +31 -0
- package/dist/server/viteServer.d.ts.map +1 -0
- package/dist/{httpServer.js → server/viteServer.js} +96 -115
- package/dist/server/viteServer.js.map +1 -0
- 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/dist/vscode-observables/observables/dist/disposables.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/base.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/debugName.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/index.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +1 -0
- package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/logging/debugGetDependencyGraph.js +1 -1
- package/dist/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/logging/logging.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/observables/observableValue.js.map +1 -0
- package/dist/{external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js → vscode-observables/observables/dist/observableInternal/reactions/createEffect.js} +9 -5
- package/dist/vscode-observables/observables/dist/observableInternal/reactions/createEffect.js.map +1 -0
- package/dist/{external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js → vscode-observables/observables/dist/observableInternal/reactions/createEffectImpl.js} +1 -1
- package/dist/vscode-observables/observables/dist/observableInternal/reactions/createEffectImpl.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/transaction.js.map +1 -0
- package/dist/vscode-observables/observables/dist/observableInternal/utils/utils.js.map +1 -0
- package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/utils/utilsCancellation.js +2 -2
- package/dist/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js.map +1 -0
- package/package.json +34 -22
- package/dist/commands/screenshotCommand.d.ts +0 -18
- package/dist/commands/screenshotCommand.d.ts.map +0 -1
- package/dist/commands/screenshotCommand.js +0 -127
- package/dist/commands/screenshotCommand.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/disposables.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/base.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/debugName.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/index.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/logging/logging.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/transaction.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utils.js.map +0 -1
- package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js.map +0 -1
- package/dist/httpServer.d.ts +0 -36
- package/dist/httpServer.d.ts.map +0 -1
- package/dist/httpServer.js.map +0 -1
- package/dist/httpServer.test.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
- package/dist/packages/simple-api/dist/express.js.map +0 -1
- package/dist/resolveProject.d.ts +0 -21
- package/dist/resolveProject.d.ts.map +0 -1
- package/dist/resolveProject.js +0 -39
- package/dist/resolveProject.js.map +0 -1
- package/dist/watchConfig.d.ts.map +0 -1
- package/dist/watchConfig.js.map +0 -1
- /package/dist/{httpServer.test.d.ts → server/httpServer.test.d.ts} +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/disposables.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/base.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/commonFacade/deps.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/debugLocation.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/debugName.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/index.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/logging/consoleObservableLogger.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/logging/logging.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/baseObservable.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/derived.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/derivedImpl.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/observableFromEvent.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/observableValue.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/transaction.js +0 -0
- /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/utils/utils.js +0 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { nullLogger } from '../logger.js';
|
|
2
|
+
import { spawnShellWithTree } from '../processTree.js';
|
|
3
|
+
|
|
4
|
+
function createHttpServer(urlTemplate, options) {
|
|
5
|
+
return HttpComponentExplorerServer.create(urlTemplate, options);
|
|
6
|
+
}
|
|
7
|
+
class HttpComponentExplorerServer {
|
|
8
|
+
url;
|
|
9
|
+
_tree;
|
|
10
|
+
static async create(urlTemplate, options) {
|
|
11
|
+
let proc;
|
|
12
|
+
let vars = {};
|
|
13
|
+
if (options?.cmd) {
|
|
14
|
+
const log = options.logger ?? nullLogger;
|
|
15
|
+
log.debug(`Starting HTTP server: ${options.cmd}`);
|
|
16
|
+
log.debug(`HTTP server cwd: ${options.cwd ?? process.cwd()}`);
|
|
17
|
+
const tree = spawnShellWithTree(options.cmd, { cwd: options.cwd });
|
|
18
|
+
proc = tree;
|
|
19
|
+
tree.process.on('error', (e) => log.log(`HTTP server process error: ${e.message}`));
|
|
20
|
+
tree.process.on('exit', (code) => log.debug(`HTTP server process exited (code=${code})`));
|
|
21
|
+
if (options.wait?.stdout || options.wait?.stderr) {
|
|
22
|
+
vars = await waitForOutputPattern(tree.process, options.wait, log);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
tree.process.stdout?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
26
|
+
tree.process.stderr?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const url = resolveUrlTemplate(urlTemplate, vars);
|
|
30
|
+
return new HttpComponentExplorerServer(url, proc);
|
|
31
|
+
}
|
|
32
|
+
constructor(url, _tree) {
|
|
33
|
+
this.url = url;
|
|
34
|
+
this._tree = _tree;
|
|
35
|
+
}
|
|
36
|
+
async dispose() {
|
|
37
|
+
const tree = this._tree;
|
|
38
|
+
const proc = tree?.process;
|
|
39
|
+
if (!tree || !proc || proc.killed || proc.pid === undefined) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
proc.stdout?.destroy();
|
|
43
|
+
proc.stderr?.destroy();
|
|
44
|
+
// Gracefully terminate the tree, escalating to a forceful kill if needed.
|
|
45
|
+
await tree.kill();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function resolveUrlTemplate(template, vars) {
|
|
49
|
+
return template.replace(/\$\{var:([^}]+)\}/g, (match, name) => {
|
|
50
|
+
if (!(name in vars)) {
|
|
51
|
+
throw new Error(`Unresolved variable \${var:${name}} in URL. Available: ${Object.keys(vars).join(', ') || '(none)'}`);
|
|
52
|
+
}
|
|
53
|
+
return vars[name];
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const _stripAnsi = (s) => s.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '').replace(/\x1b\].*?\x07/g, '');
|
|
57
|
+
function waitForOutputPattern(proc, wait, log) {
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
let resolved = false;
|
|
60
|
+
const vars = {};
|
|
61
|
+
let pendingCount = (wait.stdout ? 1 : 0) + (wait.stderr ? 1 : 0);
|
|
62
|
+
const buffers = { stdout: '', stderr: '' };
|
|
63
|
+
const tryResolve = () => {
|
|
64
|
+
if (resolved || pendingCount > 0) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
resolved = true;
|
|
68
|
+
proc.stdout?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
69
|
+
proc.stderr?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
70
|
+
resolve(vars);
|
|
71
|
+
};
|
|
72
|
+
const makeHandler = (stream, pattern) => {
|
|
73
|
+
const handler = (d) => {
|
|
74
|
+
const text = d.toString();
|
|
75
|
+
log.trace(text.trimEnd());
|
|
76
|
+
buffers[stream] += _stripAnsi(text);
|
|
77
|
+
const m = pattern.exec(buffers[stream]);
|
|
78
|
+
if (m) {
|
|
79
|
+
log.debug(`${stream} pattern matched: ${JSON.stringify(m.groups ?? {})}`);
|
|
80
|
+
proc[stream]?.off('data', handler);
|
|
81
|
+
Object.assign(vars, m.groups ?? {});
|
|
82
|
+
pendingCount--;
|
|
83
|
+
tryResolve();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
return handler;
|
|
87
|
+
};
|
|
88
|
+
if (wait.stdout) {
|
|
89
|
+
proc.stdout?.on('data', makeHandler('stdout', wait.stdout));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
proc.stdout?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
93
|
+
}
|
|
94
|
+
if (wait.stderr) {
|
|
95
|
+
proc.stderr?.on('data', makeHandler('stderr', wait.stderr));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
proc.stderr?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
99
|
+
}
|
|
100
|
+
proc.on('exit', (code) => {
|
|
101
|
+
if (!resolved) {
|
|
102
|
+
const details = [wait.stdout ? `stdout buffer:\n${buffers.stdout}` : '', wait.stderr ? `stderr buffer:\n${buffers.stderr}` : ''].filter(Boolean).join('\n');
|
|
103
|
+
reject(new Error(`HTTP server process exited (code=${code}) before output matched wait patterns.\n${details}`));
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export { createHttpServer };
|
|
110
|
+
//# sourceMappingURL=httpServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpServer.js","sources":["../../src/server/httpServer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpServer.test.d.ts","sourceRoot":"","sources":["../../src/server/httpServer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ComponentExplorerHttpServer } from './types.js';
|
|
2
|
+
import type { ILogger } from '../logger.js';
|
|
3
|
+
import { AbsolutePath } from '../path.js';
|
|
4
|
+
import { ViteProjectRef } from '../viteProjectRef.js';
|
|
5
|
+
export declare abstract class ResolvedServerConfig {
|
|
6
|
+
abstract readonly kind: 'vite' | 'http';
|
|
7
|
+
abstract createServer(ctx: ServerContext): Promise<ComponentExplorerHttpServer>;
|
|
8
|
+
}
|
|
9
|
+
export interface ServerContext {
|
|
10
|
+
readonly logger: ILogger;
|
|
11
|
+
readonly daemonConfig?: {
|
|
12
|
+
readonly pipeName: string;
|
|
13
|
+
readonly sessionName: string;
|
|
14
|
+
readonly daemonApiVersion: string;
|
|
15
|
+
readonly pluginProtocolVersion: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* If set and the server is a Vite server, vite-plugin-istanbul is injected
|
|
19
|
+
* to instrument JS sources matching the given globs. The instrumented code
|
|
20
|
+
* exposes coverage on `window.__coverage__`. No-op for HTTP servers.
|
|
21
|
+
*/
|
|
22
|
+
readonly istanbulCoverage?: {
|
|
23
|
+
readonly include: readonly string[];
|
|
24
|
+
readonly exclude: readonly string[];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* If true and the server is a Vite server, a small post-transform plugin
|
|
28
|
+
* appends `/*# sourceURL=<id> *\/` to the CSS payload of each `.css`
|
|
29
|
+
* module so that Vite's HMR-injected `<style>` tags become visible to
|
|
30
|
+
* Playwright's CSS coverage (which silently skips anonymous stylesheets).
|
|
31
|
+
* No-op for HTTP servers.
|
|
32
|
+
*/
|
|
33
|
+
readonly cssSourceUrl?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface ResolvedViteHmrConfig {
|
|
36
|
+
readonly allowedPaths: readonly string[];
|
|
37
|
+
}
|
|
38
|
+
export declare class ViteServerConfig extends ResolvedServerConfig {
|
|
39
|
+
readonly viteProject: ViteProjectRef;
|
|
40
|
+
readonly hmr: ResolvedViteHmrConfig | undefined;
|
|
41
|
+
readonly kind = "vite";
|
|
42
|
+
constructor(viteProject: ViteProjectRef, hmr: ResolvedViteHmrConfig | undefined);
|
|
43
|
+
forWorktree(repoRoot: AbsolutePath, worktreePath: AbsolutePath, _configDir: AbsolutePath): ViteServerConfig;
|
|
44
|
+
createServer(ctx: ServerContext): Promise<ComponentExplorerHttpServer>;
|
|
45
|
+
}
|
|
46
|
+
export interface ResolvedHttpWaitConfig {
|
|
47
|
+
readonly stdout?: RegExp;
|
|
48
|
+
readonly stderr?: RegExp;
|
|
49
|
+
}
|
|
50
|
+
export declare class HttpServerConfig extends ResolvedServerConfig {
|
|
51
|
+
readonly urlTemplate: string;
|
|
52
|
+
readonly cmd: string | undefined;
|
|
53
|
+
readonly cwd: AbsolutePath;
|
|
54
|
+
readonly wait: ResolvedHttpWaitConfig | undefined;
|
|
55
|
+
readonly kind = "http";
|
|
56
|
+
constructor(urlTemplate: string, cmd: string | undefined, cwd: AbsolutePath, wait: ResolvedHttpWaitConfig | undefined);
|
|
57
|
+
createServer(ctx: ServerContext): Promise<ComponentExplorerHttpServer>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=serverConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverConfig.d.ts","sourceRoot":"","sources":["../../src/server/serverConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,8BAAsB,oBAAoB;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAC/E;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;KACvC,CAAC;IACF;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;KACpC,CAAC;IACF;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,qBAAa,gBAAiB,SAAQ,oBAAoB;IAIxD,QAAQ,CAAC,WAAW,EAAE,cAAc;IACpC,QAAQ,CAAC,GAAG,EAAE,qBAAqB,GAAG,SAAS;IAJhD,QAAQ,CAAC,IAAI,UAAU;gBAGb,WAAW,EAAE,cAAc,EAC3B,GAAG,EAAE,qBAAqB,GAAG,SAAS;IAKhD,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,GAAG,gBAAgB;IAKrG,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAS5E;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,gBAAiB,SAAQ,oBAAoB;IAIxD,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IAChC,QAAQ,CAAC,GAAG,EAAE,YAAY;IAC1B,QAAQ,CAAC,IAAI,EAAE,sBAAsB,GAAG,SAAS;IANlD,QAAQ,CAAC,IAAI,UAAU;gBAGb,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,sBAAsB,GAAG,SAAS;IAK5C,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAQ5E"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createHttpServer } from './httpServer.js';
|
|
2
|
+
import { createViteServer } from './viteServer.js';
|
|
3
|
+
|
|
4
|
+
class ResolvedServerConfig {
|
|
5
|
+
}
|
|
6
|
+
class ViteServerConfig extends ResolvedServerConfig {
|
|
7
|
+
viteProject;
|
|
8
|
+
hmr;
|
|
9
|
+
kind = 'vite';
|
|
10
|
+
constructor(viteProject, hmr) {
|
|
11
|
+
super();
|
|
12
|
+
this.viteProject = viteProject;
|
|
13
|
+
this.hmr = hmr;
|
|
14
|
+
}
|
|
15
|
+
forWorktree(repoRoot, worktreePath, _configDir) {
|
|
16
|
+
const newViteProject = this.viteProject.rebase(repoRoot, worktreePath);
|
|
17
|
+
return new ViteServerConfig(newViteProject, this.hmr);
|
|
18
|
+
}
|
|
19
|
+
async createServer(ctx) {
|
|
20
|
+
return createViteServer(this.viteProject, {
|
|
21
|
+
logger: ctx.logger,
|
|
22
|
+
hmrAllowedPaths: this.hmr?.allowedPaths,
|
|
23
|
+
daemonConfig: ctx.daemonConfig,
|
|
24
|
+
istanbulCoverage: ctx.istanbulCoverage,
|
|
25
|
+
cssSourceUrl: ctx.cssSourceUrl,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
class HttpServerConfig extends ResolvedServerConfig {
|
|
30
|
+
urlTemplate;
|
|
31
|
+
cmd;
|
|
32
|
+
cwd;
|
|
33
|
+
wait;
|
|
34
|
+
kind = 'http';
|
|
35
|
+
constructor(urlTemplate, cmd, cwd, wait) {
|
|
36
|
+
super();
|
|
37
|
+
this.urlTemplate = urlTemplate;
|
|
38
|
+
this.cmd = cmd;
|
|
39
|
+
this.cwd = cwd;
|
|
40
|
+
this.wait = wait;
|
|
41
|
+
}
|
|
42
|
+
async createServer(ctx) {
|
|
43
|
+
return createHttpServer(this.urlTemplate, {
|
|
44
|
+
cmd: this.cmd,
|
|
45
|
+
cwd: this.cwd.value,
|
|
46
|
+
wait: this.wait,
|
|
47
|
+
logger: ctx.logger,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { HttpServerConfig, ResolvedServerConfig, ViteServerConfig };
|
|
53
|
+
//# sourceMappingURL=serverConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverConfig.js","sources":["../../src/server/serverConfig.ts"],"sourcesContent":[null],"names":[],"mappings":";;;MAOsB,oBAAoB,CAAA;AAGzC;AAiCK,MAAO,gBAAiB,SAAQ,oBAAoB,CAAA;AAI/C,IAAA,WAAA;AACA,IAAA,GAAA;IAJD,IAAI,GAAG,MAAM;IAEtB,WAAA,CACU,WAA2B,EAC3B,GAAsC,EAAA;AAE/C,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,GAAG,GAAH,GAAG;IAGb;AAEA,IAAA,WAAW,CAAC,QAAsB,EAAE,YAA0B,EAAE,UAAwB,EAAA;AACvF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC;QACtE,OAAO,IAAI,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC;IACtD;IAEA,MAAM,YAAY,CAAC,GAAkB,EAAA;AACpC,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE;YACzC,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,YAAA,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,YAAY;YACvC,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,YAAY,EAAE,GAAG,CAAC,YAAY;AAC9B,SAAA,CAAC;IACH;AACA;AAOK,MAAO,gBAAiB,SAAQ,oBAAoB,CAAA;AAI/C,IAAA,WAAA;AACA,IAAA,GAAA;AACA,IAAA,GAAA;AACA,IAAA,IAAA;IAND,IAAI,GAAG,MAAM;AAEtB,IAAA,WAAA,CACU,WAAmB,EACnB,GAAuB,EACvB,GAAiB,EACjB,IAAwC,EAAA;AAEjD,QAAA,KAAK,EAAE;QALE,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,IAAI,GAAJ,IAAI;IAGd;IAEA,MAAM,YAAY,CAAC,GAAkB,EAAA;AACpC,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE;YACzC,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,SAAA,CAAC;IACH;AACA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ILogger } from '../logger.js';
|
|
2
|
+
import { ViteProjectRef } from '../viteProjectRef.js';
|
|
3
|
+
import type { ComponentExplorerHttpServer } from './types.js';
|
|
4
|
+
export interface ViteServerOptions {
|
|
5
|
+
readonly resolveViteFromPath?: string;
|
|
6
|
+
readonly logger?: ILogger;
|
|
7
|
+
readonly hmrAllowedPaths?: readonly string[];
|
|
8
|
+
readonly daemonConfig?: {
|
|
9
|
+
readonly pipeName: string;
|
|
10
|
+
readonly sessionName: string;
|
|
11
|
+
readonly daemonApiVersion: string;
|
|
12
|
+
readonly pluginProtocolVersion: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* If set, vite-plugin-istanbul is injected to instrument matching files.
|
|
16
|
+
* After fixture render, JS coverage is exposed on `window.__coverage__`.
|
|
17
|
+
*/
|
|
18
|
+
readonly istanbulCoverage?: {
|
|
19
|
+
readonly include: readonly string[];
|
|
20
|
+
readonly exclude: readonly string[];
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* If true, a tiny post-transform plugin appends `/*# sourceURL=<id> *\/` to
|
|
24
|
+
* the CSS payload that Vite injects via `<style>` tags. This makes those
|
|
25
|
+
* stylesheets visible to Playwright's CSS coverage (which silently skips
|
|
26
|
+
* stylesheets without a sourceURL — see Playwright `crCoverage.ts`).
|
|
27
|
+
*/
|
|
28
|
+
readonly cssSourceUrl?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare function createViteServer(project: ViteProjectRef, options?: ViteServerOptions): Promise<ComponentExplorerHttpServer>;
|
|
31
|
+
//# sourceMappingURL=viteServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viteServer.d.ts","sourceRoot":"","sources":["../../src/server/viteServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;KACvC,CAAC;IACF;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;KACpC,CAAC;IACF;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAE3H"}
|
|
@@ -1,120 +1,14 @@
|
|
|
1
|
-
import { nullLogger } from '
|
|
1
|
+
import { nullLogger } from '../logger.js';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return ViteComponentExplorerHttpServer.create(project, options);
|
|
6
|
-
}
|
|
7
|
-
async createHttpServer(url, options) {
|
|
8
|
-
return HttpComponentExplorerServer.create(url, options);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
class HttpComponentExplorerServer {
|
|
12
|
-
url;
|
|
13
|
-
_process;
|
|
14
|
-
static async create(urlTemplate, options) {
|
|
15
|
-
let proc;
|
|
16
|
-
let vars = {};
|
|
17
|
-
if (options?.cmd) {
|
|
18
|
-
const log = options.logger ?? nullLogger;
|
|
19
|
-
log.debug(`Starting HTTP server: ${options.cmd}`);
|
|
20
|
-
log.debug(`HTTP server cwd: ${options.cwd ?? process.cwd()}`);
|
|
21
|
-
const { spawn } = await import('node:child_process');
|
|
22
|
-
proc = spawn(options.cmd, { shell: true, stdio: 'pipe', cwd: options.cwd });
|
|
23
|
-
proc.on('error', (e) => log.log(`HTTP server process error: ${e.message}`));
|
|
24
|
-
proc.on('exit', (code) => log.debug(`HTTP server process exited (code=${code})`));
|
|
25
|
-
if (options.wait?.stdout || options.wait?.stderr) {
|
|
26
|
-
vars = await waitForOutputPattern(proc, options.wait, log);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
proc.stdout?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
30
|
-
proc.stderr?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
const url = resolveUrlTemplate(urlTemplate, vars);
|
|
34
|
-
return new HttpComponentExplorerServer(url, proc);
|
|
35
|
-
}
|
|
36
|
-
constructor(url, _process) {
|
|
37
|
-
this.url = url;
|
|
38
|
-
this._process = _process;
|
|
39
|
-
}
|
|
40
|
-
async dispose() {
|
|
41
|
-
if (this._process && !this._process.killed) {
|
|
42
|
-
this._process.kill();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function resolveUrlTemplate(template, vars) {
|
|
47
|
-
return template.replace(/\$\{var:([^}]+)\}/g, (match, name) => {
|
|
48
|
-
if (!(name in vars)) {
|
|
49
|
-
throw new Error(`Unresolved variable \${var:${name}} in URL. Available: ${Object.keys(vars).join(', ') || '(none)'}`);
|
|
50
|
-
}
|
|
51
|
-
return vars[name];
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
const _stripAnsi = (s) => s.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '').replace(/\x1b\].*?\x07/g, '');
|
|
55
|
-
function waitForOutputPattern(proc, wait, log) {
|
|
56
|
-
return new Promise((resolve, reject) => {
|
|
57
|
-
let resolved = false;
|
|
58
|
-
const vars = {};
|
|
59
|
-
let pendingCount = (wait.stdout ? 1 : 0) + (wait.stderr ? 1 : 0);
|
|
60
|
-
const buffers = { stdout: '', stderr: '' };
|
|
61
|
-
const tryResolve = () => {
|
|
62
|
-
if (resolved || pendingCount > 0) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
resolved = true;
|
|
66
|
-
proc.stdout?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
67
|
-
proc.stderr?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
68
|
-
resolve(vars);
|
|
69
|
-
};
|
|
70
|
-
const makeHandler = (stream, pattern) => {
|
|
71
|
-
const handler = (d) => {
|
|
72
|
-
const text = d.toString();
|
|
73
|
-
log.trace(text.trimEnd());
|
|
74
|
-
buffers[stream] += _stripAnsi(text);
|
|
75
|
-
const m = pattern.exec(buffers[stream]);
|
|
76
|
-
if (m) {
|
|
77
|
-
log.debug(`${stream} pattern matched: ${JSON.stringify(m.groups ?? {})}`);
|
|
78
|
-
proc[stream]?.off('data', handler);
|
|
79
|
-
Object.assign(vars, m.groups ?? {});
|
|
80
|
-
pendingCount--;
|
|
81
|
-
tryResolve();
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
return handler;
|
|
85
|
-
};
|
|
86
|
-
if (wait.stdout) {
|
|
87
|
-
proc.stdout?.on('data', makeHandler('stdout', wait.stdout));
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
proc.stdout?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
91
|
-
}
|
|
92
|
-
if (wait.stderr) {
|
|
93
|
-
proc.stderr?.on('data', makeHandler('stderr', wait.stderr));
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
proc.stderr?.on('data', (d) => log.trace(d.toString().trimEnd()));
|
|
97
|
-
}
|
|
98
|
-
proc.on('exit', (code) => {
|
|
99
|
-
if (!resolved) {
|
|
100
|
-
const details = [wait.stdout ? `stdout buffer:\n${buffers.stdout}` : '', wait.stderr ? `stderr buffer:\n${buffers.stderr}` : ''].filter(Boolean).join('\n');
|
|
101
|
-
reject(new Error(`HTTP server process exited (code=${code}) before output matched wait patterns.\n${details}`));
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
});
|
|
3
|
+
function createViteServer(project, options) {
|
|
4
|
+
return ViteComponentExplorerHttpServer.create(project, options);
|
|
105
5
|
}
|
|
106
6
|
class ViteComponentExplorerHttpServer {
|
|
107
7
|
_server;
|
|
108
8
|
url;
|
|
109
9
|
onSourceChange;
|
|
110
|
-
constructor(_server, url, onSourceChange) {
|
|
111
|
-
this._server = _server;
|
|
112
|
-
this.url = url;
|
|
113
|
-
this.onSourceChange = onSourceChange;
|
|
114
|
-
}
|
|
115
10
|
static async create(project, options) {
|
|
116
11
|
const log = options?.logger ?? nullLogger;
|
|
117
|
-
const resolveViteFrom = options?.resolveViteFrom;
|
|
118
12
|
const hmrAllowedPaths = options?.hmrAllowedPaths;
|
|
119
13
|
const daemonConfig = options?.daemonConfig;
|
|
120
14
|
// Import Vite from the target project's node_modules, not ours.
|
|
@@ -129,10 +23,9 @@ class ViteComponentExplorerHttpServer {
|
|
|
129
23
|
// We always use createRequire because import.meta.resolve's second
|
|
130
24
|
// argument is ignored in some Node.js versions (it resolves from
|
|
131
25
|
// the calling file instead of the specified parentUrl).
|
|
132
|
-
const resolveFrom =
|
|
26
|
+
const resolveFrom = (project.configFile ?? project.cwd).value;
|
|
133
27
|
const parentUrl = pathToFileURL(resolveFrom).href;
|
|
134
28
|
log.debug(`Resolving vite from: ${resolveFrom} (parentUrl: ${parentUrl})`);
|
|
135
|
-
log.debug(` resolveViteFrom=${resolveViteFrom}`);
|
|
136
29
|
log.debug(` project.configFile=${project.configFile}`);
|
|
137
30
|
log.debug(` project.cwd=${project.cwd}`);
|
|
138
31
|
let viteUrl;
|
|
@@ -162,7 +55,7 @@ class ViteComponentExplorerHttpServer {
|
|
|
162
55
|
// takes precedence over the config file, which would break configs
|
|
163
56
|
// that set their own `root` (e.g. `root: '../..'`).
|
|
164
57
|
const prevCwd = process.cwd();
|
|
165
|
-
process.chdir(project.cwd);
|
|
58
|
+
process.chdir(project.cwd.value);
|
|
166
59
|
const plugins = [];
|
|
167
60
|
if (daemonConfig) {
|
|
168
61
|
plugins.push({
|
|
@@ -186,10 +79,29 @@ class ViteComponentExplorerHttpServer {
|
|
|
186
79
|
},
|
|
187
80
|
});
|
|
188
81
|
}
|
|
82
|
+
if (options?.istanbulCoverage) {
|
|
83
|
+
// vite-plugin-istanbul is dynamically imported from the CLI's own
|
|
84
|
+
// node_modules. The plugin is consumed by the user's Vite instance
|
|
85
|
+
// (resolved separately above) but the plugin source itself is portable.
|
|
86
|
+
log.debug(`Injecting vite-plugin-istanbul (include=${options.istanbulCoverage.include.join(',')}, exclude=${options.istanbulCoverage.exclude.join(',')})`);
|
|
87
|
+
const istanbulMod = await import('vite-plugin-istanbul');
|
|
88
|
+
const istanbulPlugin = istanbulMod.default({
|
|
89
|
+
include: [...options.istanbulCoverage.include],
|
|
90
|
+
exclude: [...options.istanbulCoverage.exclude],
|
|
91
|
+
extension: ['.js', '.ts', '.jsx', '.tsx', '.mjs', '.cjs'],
|
|
92
|
+
requireEnv: false,
|
|
93
|
+
forceBuildInstrument: false,
|
|
94
|
+
});
|
|
95
|
+
plugins.push(istanbulPlugin);
|
|
96
|
+
}
|
|
97
|
+
if (options?.cssSourceUrl) {
|
|
98
|
+
log.debug('Injecting CSS sourceURL plugin (for Playwright CSS coverage)');
|
|
99
|
+
plugins.push(createCssSourceUrlPlugin(log));
|
|
100
|
+
}
|
|
189
101
|
let server;
|
|
190
102
|
try {
|
|
191
103
|
server = await createServer({
|
|
192
|
-
configFile: project.configFile,
|
|
104
|
+
configFile: project.configFile?.value,
|
|
193
105
|
server: { port: 0, strictPort: false },
|
|
194
106
|
customLogger,
|
|
195
107
|
clearScreen: false,
|
|
@@ -208,6 +120,11 @@ class ViteComponentExplorerHttpServer {
|
|
|
208
120
|
};
|
|
209
121
|
return new ViteComponentExplorerHttpServer(server, url.replace(/\/$/, ''), onSourceChange);
|
|
210
122
|
}
|
|
123
|
+
constructor(_server, url, onSourceChange) {
|
|
124
|
+
this._server = _server;
|
|
125
|
+
this.url = url;
|
|
126
|
+
this.onSourceChange = onSourceChange;
|
|
127
|
+
}
|
|
211
128
|
async dispose() {
|
|
212
129
|
await this._server.close();
|
|
213
130
|
}
|
|
@@ -221,6 +138,70 @@ function globToRegExp(glob) {
|
|
|
221
138
|
.replace(/\?/g, '.');
|
|
222
139
|
return new RegExp(`(?:^|/)${escaped}$`);
|
|
223
140
|
}
|
|
141
|
+
const CSS_EXT_RE = /\.(css|scss|sass|less|styl|stylus|pcss|postcss|sss)(\?|$)/;
|
|
142
|
+
/**
|
|
143
|
+
* Vite's CSS transform emits JS like:
|
|
144
|
+
*
|
|
145
|
+
* import { updateStyle as __vite__updateStyle, ... } from "/@vite/client"
|
|
146
|
+
* const __vite__id = "/abs/path/foo.css"
|
|
147
|
+
* const __vite__css = "...css text..."
|
|
148
|
+
* __vite__updateStyle(__vite__id, __vite__css)
|
|
149
|
+
*
|
|
150
|
+
* `__vite__updateStyle` creates a `<style>` tag with `data-vite-dev-id` but
|
|
151
|
+
* does NOT add a `/*# sourceURL=… *\/` annotation, so Chrome treats the
|
|
152
|
+
* stylesheet as anonymous. Playwright's CSS coverage drops anonymous
|
|
153
|
+
* stylesheets in `crCoverage.ts`, making such CSS invisible to coverage.
|
|
154
|
+
*
|
|
155
|
+
* This plugin appends `\n/*# sourceURL=<id> *\/` to the CSS string literal
|
|
156
|
+
* inside the transformed module, so DevTools (and Playwright) attribute the
|
|
157
|
+
* `<style>` tag back to the source file.
|
|
158
|
+
*/
|
|
159
|
+
function createCssSourceUrlPlugin(log) {
|
|
160
|
+
let projectRoot = '';
|
|
161
|
+
return {
|
|
162
|
+
name: 'component-explorer-css-source-url',
|
|
163
|
+
enforce: 'post',
|
|
164
|
+
configResolved(config) {
|
|
165
|
+
projectRoot = config.root;
|
|
166
|
+
},
|
|
167
|
+
transform(code, id) {
|
|
168
|
+
if (!CSS_EXT_RE.test(id)) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (!code.includes('__vite__updateStyle')) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// Match: const __vite__css = "..."
|
|
175
|
+
// The CSS payload is JSON-encoded by Vite (so all newlines are \n,
|
|
176
|
+
// quotes escaped). We re-decode → append annotation → re-encode.
|
|
177
|
+
const re = /(const\s+__vite__css\s*=\s*)("(?:[^"\\]|\\.)*")/;
|
|
178
|
+
const match = re.exec(code);
|
|
179
|
+
if (!match) {
|
|
180
|
+
log.trace(`css-source-url: no __vite__css literal in ${id}`);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const cleanId = id.split('?')[0];
|
|
184
|
+
const relUrl = projectRoot
|
|
185
|
+
? '/' + cleanId.slice(projectRoot.length).replace(/^[\\/]+/, '').replace(/\\/g, '/')
|
|
186
|
+
: cleanId;
|
|
187
|
+
let css;
|
|
188
|
+
try {
|
|
189
|
+
css = JSON.parse(match[2]);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
// Idempotent: don't double-annotate on HMR re-transforms.
|
|
195
|
+
if (css.includes('# sourceURL=')) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const annotated = css + `\n/*# sourceURL=${relUrl} */\n`;
|
|
199
|
+
const newLiteral = JSON.stringify(annotated);
|
|
200
|
+
const patched = code.slice(0, match.index) + match[1] + newLiteral + code.slice(match.index + match[0].length);
|
|
201
|
+
return { code: patched, map: null };
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
}
|
|
224
205
|
|
|
225
|
-
export {
|
|
226
|
-
//# sourceMappingURL=
|
|
206
|
+
export { createViteServer };
|
|
207
|
+
//# sourceMappingURL=viteServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viteServer.js","sources":["../../src/server/viteServer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AbsolutePath } from './path.js';
|
|
1
2
|
export interface Storage {
|
|
2
3
|
write(filePath: string, data: Uint8Array): Promise<void>;
|
|
3
4
|
read(filePath: string): Promise<Uint8Array>;
|
|
@@ -7,7 +8,7 @@ export interface Storage {
|
|
|
7
8
|
}
|
|
8
9
|
export declare class FileSystemStorage implements Storage {
|
|
9
10
|
private readonly _rootDir;
|
|
10
|
-
constructor(_rootDir:
|
|
11
|
+
constructor(_rootDir: AbsolutePath);
|
|
11
12
|
private _resolve;
|
|
12
13
|
write(filePath: string, data: Uint8Array): Promise<void>;
|
|
13
14
|
read(filePath: string): Promise<Uint8Array>;
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,WAAW,OAAO;IACvB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,qBAAa,iBAAkB,YAAW,OAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAEnD,OAAO,CAAC,QAAQ;IAIV,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI3C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBvC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO7C"}
|
package/dist/storage.js
CHANGED
|
@@ -7,7 +7,7 @@ class FileSystemStorage {
|
|
|
7
7
|
this._rootDir = _rootDir;
|
|
8
8
|
}
|
|
9
9
|
_resolve(filePath) {
|
|
10
|
-
return path.join(this._rootDir, ...filePath.split('/'));
|
|
10
|
+
return path.join(this._rootDir.value, ...filePath.split('/'));
|
|
11
11
|
}
|
|
12
12
|
async write(filePath, data) {
|
|
13
13
|
const fullPath = this._resolve(filePath);
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sources":["../src/storage.ts"],"sourcesContent":[null],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"storage.js","sources":["../src/storage.ts"],"sourcesContent":[null],"names":[],"mappings":";;;MAYa,iBAAiB,CAAA;AACA,IAAA,QAAA;AAA7B,IAAA,WAAA,CAA6B,QAAsB,EAAA;QAAtB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAkB;AAE/C,IAAA,QAAQ,CAAC,QAAgB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9D;AAEA,IAAA,MAAM,KAAK,CAAC,QAAgB,EAAE,IAAgB,EAAA;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxC,QAAA,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC;IACnC;IAEA,MAAM,IAAI,CAAC,QAAgB,EAAA;AAC1B,QAAA,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE;IAEA,MAAM,MAAM,CAAC,QAAgB,EAAA;AAC5B,QAAA,IAAI;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACxC,YAAA,OAAO,IAAI;QACZ;AAAE,QAAA,MAAM;AACP,YAAA,OAAO,KAAK;QACb;IACD;IAEA,MAAM,IAAI,CAAC,MAAc,EAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI;AACH,YAAA,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAa,EAAE;AAC5B,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;gBACvC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;AACrC,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7D;YACD;AACA,YAAA,OAAO,OAAO;QACf;AAAE,QAAA,MAAM;AACP,YAAA,OAAO,EAAE;QACV;IACD;IAEA,MAAM,MAAM,CAAC,QAAgB,EAAA;AAC5B,QAAA,IAAI;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC;AAAE,QAAA,MAAM;;QAER;IACD;AACA;;;;"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,31 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
export interface ExplorerQueryParams {
|
|
3
|
-
readonly mode?: ExplorerMode;
|
|
4
|
-
readonly fixture?: string;
|
|
5
|
-
readonly file?: string;
|
|
6
|
-
readonly report?: string;
|
|
7
|
-
}
|
|
1
|
+
import { AbsolutePath } from './path.js';
|
|
8
2
|
/**
|
|
9
3
|
* The default route path for the Component Explorer.
|
|
10
4
|
* Must match the default in vite-plugin.
|
|
11
5
|
*/
|
|
12
6
|
export declare const EXPLORER_ROUTE = "/___explorer";
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
readonly baseUrl: string;
|
|
16
|
-
/** Use raw render mode instead of the full Explorer UI */
|
|
17
|
-
readonly rawRender?: boolean;
|
|
18
|
-
/** Specific fixture to render (only relevant in raw render mode) */
|
|
19
|
-
readonly fixtureId?: string;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Builds a URL for the Component Explorer.
|
|
23
|
-
* - Default: Explorer UI at `/___explorer`
|
|
24
|
-
* - rawRender: `/___explorer?mode=render`
|
|
25
|
-
* - rawRender + fixtureId: `/___explorer?mode=render&fixture=<id>`
|
|
26
|
-
*/
|
|
27
|
-
export declare function buildExplorerUrl(options: ExplorerUrlOptions): string;
|
|
28
|
-
export declare function writeFile(filePath: string, data: Uint8Array): Promise<void>;
|
|
29
|
-
export declare function matchGlob(fixtureId: string, pattern: string): boolean;
|
|
30
|
-
export declare function listPngFiles(dir: string): Promise<string[]>;
|
|
7
|
+
export declare function writeFile(filePath: AbsolutePath, data: Uint8Array): Promise<void>;
|
|
8
|
+
export declare function listPngFiles(dir: AbsolutePath): Promise<string[]>;
|
|
31
9
|
//# sourceMappingURL=utils.d.ts.map
|