@vscode/component-explorer-cli 0.2.1-18 → 0.2.1-180
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 +130 -12
- 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 +55 -1
- package/dist/browserPage.d.ts.map +1 -1
- package/dist/browserPage.js +103 -7
- package/dist/browserPage.js.map +1 -1
- package/dist/browserPage.test.d.ts +2 -0
- package/dist/browserPage.test.d.ts.map +1 -0
- package/dist/commands/acceptCommand.d.ts +1 -1
- package/dist/commands/acceptCommand.d.ts.map +1 -1
- package/dist/commands/acceptCommand.js +21 -14
- package/dist/commands/acceptCommand.js.map +1 -1
- package/dist/commands/checkStabilityCommand.d.ts +2 -0
- package/dist/commands/checkStabilityCommand.d.ts.map +1 -1
- package/dist/commands/checkStabilityCommand.js +25 -8
- package/dist/commands/checkStabilityCommand.js.map +1 -1
- package/dist/commands/compareCommand.d.ts +1 -1
- package/dist/commands/compareCommand.d.ts.map +1 -1
- package/dist/commands/compareCommand.js +31 -22
- 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.map +1 -1
- package/dist/commands/mcpCommand.js +18 -12
- 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 +390 -61
- package/dist/commands/renderCommand.js.map +1 -1
- package/dist/commands/renderCommand.test.d.ts +2 -0
- package/dist/commands/renderCommand.test.d.ts.map +1 -0
- package/dist/commands/serveCommand.d.ts +4 -1
- package/dist/commands/serveCommand.d.ts.map +1 -1
- package/dist/commands/serveCommand.js +105 -36
- package/dist/commands/serveCommand.js.map +1 -1
- package/dist/commands/serviceDiffCommitsCommand.d.ts.map +1 -1
- package/dist/commands/serviceDiffCommitsCommand.js +10 -9
- package/dist/commands/serviceDiffCommitsCommand.js.map +1 -1
- package/dist/commands/watchCommand.d.ts +1 -0
- package/dist/commands/watchCommand.d.ts.map +1 -1
- package/dist/commands/watchCommand.js +31 -20
- 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 +110 -12
- package/dist/componentExplorer.d.ts.map +1 -1
- package/dist/componentExplorer.js +177 -24
- 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 +5 -199
- package/dist/daemon/DaemonService.d.ts.map +1 -1
- package/dist/daemon/DaemonService.js +248 -300
- 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 +76 -5
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/daemonRpc.test.d.ts +2 -0
- package/dist/daemon/daemonRpc.test.d.ts.map +1 -0
- package/dist/daemon/endpointServer.d.ts +4 -0
- package/dist/daemon/endpointServer.d.ts.map +1 -0
- package/dist/daemon/endpointServer.js +24 -0
- package/dist/daemon/endpointServer.js.map +1 -0
- package/dist/daemon/inProcessClient.d.ts +3 -9
- package/dist/daemon/inProcessClient.d.ts.map +1 -1
- package/dist/daemon/inProcessClient.js +29 -30
- package/dist/daemon/inProcessClient.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts +5 -5
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +4 -3
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/pipeClient.d.ts +2 -3
- package/dist/daemon/pipeClient.d.ts.map +1 -1
- package/dist/daemon/pipeClient.js +93 -194
- package/dist/daemon/pipeClient.js.map +1 -1
- package/dist/daemon/pipeName.d.ts +3 -3
- package/dist/daemon/pipeName.d.ts.map +1 -1
- package/dist/daemon/pipeName.js +6 -5
- package/dist/daemon/pipeName.js.map +1 -1
- package/dist/daemon/pipeServer.d.ts +2 -2
- package/dist/daemon/pipeServer.d.ts.map +1 -1
- package/dist/daemon/pipeServer.js +79 -70
- package/dist/daemon/pipeServer.js.map +1 -1
- package/dist/daemon/registerDaemonConnection.d.ts +7 -0
- package/dist/daemon/registerDaemonConnection.d.ts.map +1 -0
- package/dist/daemon/registerDaemonConnection.js +37 -0
- package/dist/daemon/registerDaemonConnection.js.map +1 -0
- package/dist/daemon/transports.test.d.ts +2 -0
- package/dist/daemon/transports.test.d.ts.map +1 -0
- package/dist/daemon/types.d.ts +1655 -8
- package/dist/daemon/types.d.ts.map +1 -1
- package/dist/daemon/types.js +4 -0
- package/dist/daemon/types.js.map +1 -0
- package/dist/daemon/version.d.ts +1 -5
- package/dist/daemon/version.d.ts.map +1 -1
- package/dist/daemon/version.js +3 -7
- package/dist/daemon/version.js.map +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/explorerSession.d.ts +5 -1
- package/dist/explorerSession.d.ts.map +1 -1
- package/dist/explorerSession.js +24 -7
- package/dist/explorerSession.js.map +1 -1
- package/dist/external/linkrpc/typescript/packages/linkrpc/dist/chunks/inspectionHost-BA6ZmC_P.js +2523 -0
- package/dist/external/linkrpc/typescript/packages/linkrpc/dist/chunks/inspectionHost-BA6ZmC_P.js.map +1 -0
- package/dist/external/linkrpc/typescript/packages/linkrpc/dist/chunks/src-DYVSK_tz.js +1871 -0
- package/dist/external/linkrpc/typescript/packages/linkrpc/dist/chunks/src-DYVSK_tz.js.map +1 -0
- package/dist/external/linkrpc/typescript/packages/linkrpc/dist/chunks/webSocketTransport-Ct4OIdG9.js +220 -0
- package/dist/external/linkrpc/typescript/packages/linkrpc/dist/chunks/webSocketTransport-Ct4OIdG9.js.map +1 -0
- package/dist/external/linkrpc/typescript/packages/linkrpc/dist/node.js +721 -0
- package/dist/external/linkrpc/typescript/packages/linkrpc/dist/node.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 +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 -5
- package/dist/git/gitUtils.d.ts.map +1 -1
- package/dist/git/gitUtils.js +5 -4
- 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.d.ts +0 -2
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/js-component-explorer/packages/common/dist/daemonRpc.js +165 -0
- package/dist/js-component-explorer/packages/common/dist/daemonRpc.js.map +1 -0
- 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.map +1 -0
- package/dist/manifest.schema.json +44 -16
- package/dist/mcp/DaemonAccessor.d.ts +2 -3
- package/dist/mcp/DaemonAccessor.d.ts.map +1 -1
- package/dist/mcp/McpServer.d.ts +1 -1
- package/dist/mcp/McpServer.d.ts.map +1 -1
- package/dist/mcp/McpServer.js +252 -159
- 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 +6 -1
- package/dist/processTree.d.ts.map +1 -1
- package/dist/processTree.js +48 -5
- package/dist/processTree.js.map +1 -1
- package/dist/renderManifest.d.ts +70 -5
- package/dist/renderManifest.js +1 -1
- package/dist/server/httpServer.d.ts +1 -1
- package/dist/server/httpServer.d.ts.map +1 -1
- package/dist/server/httpServer.js +4 -8
- package/dist/server/httpServer.js.map +1 -1
- package/dist/server/serverConfig.d.ts +23 -8
- 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 -3
- package/dist/server/viteServer.d.ts.map +1 -1
- package/dist/server/viteServer.js +86 -5
- 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 -30
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +4 -24
- 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 +18 -15
- package/dist/commands/artifactCommand.d.ts +0 -14
- package/dist/commands/artifactCommand.d.ts.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/formatValue.js +0 -96
- package/dist/formatValue.js.map +0 -1
- package/dist/packages/common/dist/renderManifest.js +0 -46
- package/dist/packages/common/dist/renderManifest.js.map +0 -1
- package/dist/packages/semver/dist/index.js.map +0 -1
- package/dist/packages/simple-api/dist/chunk-FJ7AVNQE.js +0 -138
- package/dist/packages/simple-api/dist/chunk-FJ7AVNQE.js.map +0 -1
- package/dist/packages/simple-api/dist/chunk-TTRCY65Z.js +0 -27
- package/dist/packages/simple-api/dist/chunk-TTRCY65Z.js.map +0 -1
- package/dist/packages/simple-api/dist/chunk-WNXMRXWV.js +0 -28
- package/dist/packages/simple-api/dist/chunk-WNXMRXWV.js.map +0 -1
- package/dist/packages/simple-api/dist/express.js +0 -104
- package/dist/packages/simple-api/dist/express.js.map +0 -1
- /package/dist/{packages → js-component-explorer/packages}/semver/dist/index.js +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
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
import '../
|
|
3
|
-
import
|
|
4
|
-
import '../
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import '../
|
|
9
|
-
import '../external/
|
|
10
|
-
import {
|
|
11
|
-
import { AsyncStream } from '../packages/simple-api/dist/chunk-TTRCY65Z.js';
|
|
1
|
+
import '../vscode-observables/observables/dist/observableInternal/index.js';
|
|
2
|
+
import { observableValue } from '../vscode-observables/observables/dist/observableInternal/observables/observableValue.js';
|
|
3
|
+
import '../vscode-observables/observables/dist/observableInternal/debugLocation.js';
|
|
4
|
+
import { autorun } from '../vscode-observables/observables/dist/observableInternal/reactions/createEffect.js';
|
|
5
|
+
import { derived } from '../vscode-observables/observables/dist/observableInternal/observables/derived.js';
|
|
6
|
+
import { waitForState } from '../vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js';
|
|
7
|
+
import '../vscode-observables/observables/dist/observableInternal/utils/utils.js';
|
|
8
|
+
import '../vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
|
|
9
|
+
import { nt as defaultInterfaceTarget } from '../external/linkrpc/typescript/packages/linkrpc/dist/chunks/src-DYVSK_tz.js';
|
|
10
|
+
import { daemonRpcInterface } from '../js-component-explorer/packages/common/dist/daemonRpc.js';
|
|
12
11
|
import { ExplorerSession } from '../explorerSession.js';
|
|
13
12
|
import '../config.js';
|
|
13
|
+
import { RelativePath } from '../path.js';
|
|
14
14
|
import { GitIndexResolver } from '../git/gitIndexResolver.js';
|
|
15
15
|
import { DirtyWorktreeError } from '../git/gitWorktreeManager.js';
|
|
16
16
|
import { execGit } from '../git/gitUtils.js';
|
|
@@ -20,7 +20,6 @@ import { FileApprovalStore } from './approvalStore.js';
|
|
|
20
20
|
import { VisualCache } from '../visualCache.js';
|
|
21
21
|
import { contentHash } from '../screenshotCache.js';
|
|
22
22
|
import { WorktreePool } from '../WorktreePool.js';
|
|
23
|
-
import { pluginProtocolVersionText, daemonApiVersionText } from './version.js';
|
|
24
23
|
export { isCompatibleVersion, parseVersion } from './version.js';
|
|
25
24
|
import { ViteServerConfig } from '../server/serverConfig.js';
|
|
26
25
|
|
|
@@ -107,339 +106,276 @@ class DaemonService {
|
|
|
107
106
|
_worktreePool;
|
|
108
107
|
approvals;
|
|
109
108
|
visualCache;
|
|
110
|
-
api;
|
|
111
109
|
constructor(_config, _pipeName, _logger, _browserFactory, approvalStorePath, idleTimeoutMs) {
|
|
112
110
|
this._config = _config;
|
|
113
111
|
this._pipeName = _pipeName;
|
|
114
112
|
this._logger = _logger;
|
|
115
113
|
this._browserFactory = _browserFactory;
|
|
116
114
|
this.approvals = new FileApprovalStore(approvalStorePath);
|
|
117
|
-
this.visualCache = new VisualCache(
|
|
115
|
+
this.visualCache = new VisualCache(_config.screenshotDir.join(new RelativePath('visual-cache.json')));
|
|
118
116
|
this._activityTracker = new ActivityTracker(idleTimeoutMs, () => this.requestShutdown(), this._logger);
|
|
119
117
|
if (_config.worktreePool) {
|
|
120
118
|
this._worktreePool = new WorktreePool(_config.worktreePool.maxSlots, _config.repo.worktreeRootPath());
|
|
121
119
|
}
|
|
122
|
-
this.api = this._buildApi();
|
|
123
120
|
}
|
|
124
121
|
static async create(config, logger, pipeName, options) {
|
|
125
122
|
const browserFactory = new PlaywrightBrowserPageFactory(options?.headed ?? false, 30_000, logger);
|
|
126
|
-
const approvalStorePath =
|
|
123
|
+
const approvalStorePath = config.screenshotDir.join(new RelativePath('approvals.json'));
|
|
127
124
|
const idleTimeoutMs = options?.idleTimeoutMs ?? 5 * 60 * 1000; // 5 minutes default
|
|
128
125
|
const svc = new DaemonService(config, pipeName, logger, browserFactory, approvalStorePath, idleTimeoutMs);
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
126
|
+
try {
|
|
127
|
+
for (const sessionConfig of config.sessions) {
|
|
128
|
+
svc._sessionConfigs.set(sessionConfig.name, sessionConfig);
|
|
129
|
+
await svc._setupSession(sessionConfig);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
await svc.dispose();
|
|
134
|
+
throw error;
|
|
132
135
|
}
|
|
133
136
|
return svc;
|
|
134
137
|
}
|
|
135
138
|
// -- API definition ------------------------------------------------------
|
|
136
|
-
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
args: {
|
|
157
|
-
fixtureId: z.string(),
|
|
158
|
-
sourceTreeId: z.string(),
|
|
159
|
-
sessionName: z.string(),
|
|
160
|
-
includeImage: z.boolean().optional(),
|
|
161
|
-
stabilityCheck: z.boolean().optional(),
|
|
162
|
-
},
|
|
163
|
-
}, async (args) => {
|
|
164
|
-
this._activityTracker.reportActivity();
|
|
165
|
-
const session = this.getSession(args.sessionName);
|
|
166
|
-
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
167
|
-
if (args.stabilityCheck) {
|
|
168
|
-
const result = await session.explorer.screenshotFixtureStabilityCheck(args.fixtureId);
|
|
169
|
-
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
170
|
-
const hashes = result.screenshots.map(s => contentHash(s.image));
|
|
171
|
-
const isStable = hashes[0] === hashes[1] && hashes[1] === hashes[2];
|
|
172
|
-
const stabilityScreenshots = result.screenshots.map((s, i) => ({
|
|
173
|
-
hash: hashes[i],
|
|
174
|
-
delayMs: s.delayMs,
|
|
175
|
-
image: (args.includeImage ?? true)
|
|
176
|
-
? Buffer.from(s.image).toString('base64')
|
|
177
|
-
: undefined,
|
|
178
|
-
}));
|
|
179
|
-
return {
|
|
180
|
-
hash: hashes[hashes.length - 1],
|
|
181
|
-
sourceTreeId: args.sourceTreeId,
|
|
182
|
-
image: (args.includeImage ?? true)
|
|
183
|
-
? Buffer.from(result.screenshots[result.screenshots.length - 1].image).toString('base64')
|
|
184
|
-
: undefined,
|
|
185
|
-
hasError: result.hasError,
|
|
186
|
-
error: result.error,
|
|
187
|
-
events: result.events.length > 0 ? result.events : undefined,
|
|
188
|
-
resultData: result.resultData,
|
|
189
|
-
isStable,
|
|
190
|
-
stabilityScreenshots,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
const result = await session.explorer.screenshotFixture(args.fixtureId);
|
|
139
|
+
registerRpc(connection, context) {
|
|
140
|
+
const registration = connection.register(defaultInterfaceTarget(daemonRpcInterface), {
|
|
141
|
+
fixturesList: async (args) => {
|
|
142
|
+
this._activityTracker.reportActivity();
|
|
143
|
+
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
144
|
+
const session = this.getSession(args.sessionName);
|
|
145
|
+
const result = await session.explorer.listFixtures();
|
|
146
|
+
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
147
|
+
return result;
|
|
148
|
+
},
|
|
149
|
+
screenshotsTake: async (args) => {
|
|
150
|
+
this._activityTracker.reportActivity();
|
|
151
|
+
const session = this.getSession(args.sessionName);
|
|
152
|
+
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
153
|
+
if (args.stabilityCheck) {
|
|
154
|
+
const result = await session.explorer.screenshotFixtureStabilityCheck(args.fixtureId, {
|
|
155
|
+
reloadBeforeRender: args.reloadBeforeRender,
|
|
156
|
+
input: args.input,
|
|
157
|
+
disposeAfter: args.disposeAfter,
|
|
158
|
+
});
|
|
194
159
|
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
160
|
+
const hashes = result.screenshots.map(s => contentHash(s.image));
|
|
161
|
+
const isStable = hashes[0] === hashes[1] && hashes[1] === hashes[2];
|
|
162
|
+
const stabilityScreenshots = result.screenshots.map((s, i) => ({
|
|
163
|
+
hash: hashes[i],
|
|
164
|
+
delayMs: s.delayMs,
|
|
165
|
+
image: (args.includeImage ?? true)
|
|
166
|
+
? Buffer.from(s.image).toString('base64')
|
|
167
|
+
: undefined,
|
|
168
|
+
}));
|
|
195
169
|
return {
|
|
196
|
-
hash:
|
|
170
|
+
hash: hashes[hashes.length - 1],
|
|
197
171
|
sourceTreeId: args.sourceTreeId,
|
|
198
|
-
image: (args.includeImage ?? true)
|
|
199
|
-
? Buffer.from(result.image).toString('base64')
|
|
172
|
+
image: (args.includeImage ?? true)
|
|
173
|
+
? Buffer.from(result.screenshots[result.screenshots.length - 1].image).toString('base64')
|
|
200
174
|
: undefined,
|
|
201
175
|
hasError: result.hasError,
|
|
202
176
|
error: result.error,
|
|
203
|
-
events: result.events
|
|
204
|
-
|
|
177
|
+
events: result.events.length > 0 ? result.events : undefined,
|
|
178
|
+
output: result.output,
|
|
179
|
+
isStable,
|
|
180
|
+
stabilityScreenshots,
|
|
181
|
+
previousDispose: result.previousDispose,
|
|
182
|
+
currentDispose: result.currentDispose,
|
|
205
183
|
};
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
184
|
+
}
|
|
185
|
+
const result = await session.explorer.screenshotFixture(args.fixtureId, {
|
|
186
|
+
reloadBeforeRender: args.reloadBeforeRender,
|
|
187
|
+
input: args.input,
|
|
188
|
+
disposeAfter: args.disposeAfter,
|
|
189
|
+
});
|
|
190
|
+
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
191
|
+
return {
|
|
192
|
+
hash: result.image ? contentHash(result.image) : undefined,
|
|
193
|
+
sourceTreeId: args.sourceTreeId,
|
|
194
|
+
image: (args.includeImage ?? true) && result.image
|
|
195
|
+
? Buffer.from(result.image).toString('base64')
|
|
196
|
+
: undefined,
|
|
197
|
+
hasError: result.hasError,
|
|
198
|
+
error: result.error,
|
|
199
|
+
events: result.events?.length > 0 ? result.events : undefined,
|
|
200
|
+
output: result.output,
|
|
201
|
+
previousDispose: result.previousDispose,
|
|
202
|
+
currentDispose: result.currentDispose,
|
|
203
|
+
};
|
|
204
|
+
},
|
|
205
|
+
screenshotsTakeBatch: async (args) => {
|
|
206
|
+
this._activityTracker.reportActivity();
|
|
207
|
+
const session = this.getSession(args.sessionName);
|
|
208
|
+
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
209
|
+
const includeImages = args.includeImages ?? false;
|
|
210
|
+
this._logger.trace(`takeBatch: ${args.fixtureIds.length} fixtures, session=${args.sessionName}`);
|
|
211
|
+
const startTime = Date.now();
|
|
212
|
+
const screenshots = [];
|
|
213
|
+
for (let i = 0; i < args.fixtureIds.length; i++) {
|
|
214
|
+
const fixtureId = args.fixtureIds[i];
|
|
215
|
+
const result = await session.explorer.screenshotFixture(fixtureId, {
|
|
216
|
+
reloadOnError: true,
|
|
217
|
+
// Reload between fixtures (skip before the first one — the page is already fresh)
|
|
218
|
+
reloadBeforeRender: args.reloadBetweenFixtures && i > 0,
|
|
219
|
+
input: args.input,
|
|
220
|
+
});
|
|
217
221
|
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
const result = await session.explorer.screenshotFixture(fixtureId);
|
|
224
|
-
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
225
|
-
screenshots.push({
|
|
226
|
-
fixtureId,
|
|
227
|
-
hash: result.image ? contentHash(result.image) : undefined,
|
|
228
|
-
image: includeImages && result.image
|
|
229
|
-
? Buffer.from(result.image).toString('base64')
|
|
230
|
-
: undefined,
|
|
231
|
-
hasError: result.hasError,
|
|
232
|
-
error: result.error,
|
|
233
|
-
events: result.events.length > 0 ? result.events : undefined,
|
|
234
|
-
resultData: result.resultData,
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
this._logger.trace(`takeBatch: done in ${Date.now() - startTime}ms`);
|
|
238
|
-
return { sourceTreeId: args.sourceTreeId, screenshots };
|
|
239
|
-
}),
|
|
240
|
-
compare: createMethod({
|
|
241
|
-
args: {
|
|
242
|
-
fixtureId: z.string(),
|
|
243
|
-
baselineSessionName: z.string(),
|
|
244
|
-
baselineSourceTreeId: z.string(),
|
|
245
|
-
currentSessionName: z.string(),
|
|
246
|
-
currentSourceTreeId: z.string(),
|
|
247
|
-
includeImages: z.boolean().optional(),
|
|
248
|
-
},
|
|
249
|
-
}, async (args) => {
|
|
250
|
-
this._activityTracker.reportActivity();
|
|
251
|
-
const baselineSession = this.getSession(args.baselineSessionName);
|
|
252
|
-
const currentSession = this.getSession(args.currentSessionName);
|
|
253
|
-
this.assertSourceTreeId(args.baselineSessionName, args.baselineSourceTreeId);
|
|
254
|
-
this.assertSourceTreeId(args.currentSessionName, args.currentSourceTreeId);
|
|
255
|
-
const [baselineResult, baselineListResult] = await Promise.all([
|
|
256
|
-
baselineSession.explorer.screenshotFixture(args.fixtureId),
|
|
257
|
-
baselineSession.explorer.listFixtures(),
|
|
258
|
-
]);
|
|
259
|
-
this.assertSourceTreeId(args.baselineSessionName, args.baselineSourceTreeId);
|
|
260
|
-
const [currentResult, currentListResult] = await Promise.all([
|
|
261
|
-
currentSession.explorer.screenshotFixture(args.fixtureId),
|
|
262
|
-
currentSession.explorer.listFixtures(),
|
|
263
|
-
]);
|
|
264
|
-
this.assertSourceTreeId(args.currentSessionName, args.currentSourceTreeId);
|
|
265
|
-
const baselineHash = baselineResult.image ? contentHash(baselineResult.image) : undefined;
|
|
266
|
-
const currentHash = currentResult.image ? contentHash(currentResult.image) : undefined;
|
|
267
|
-
const includeImages = args.includeImages ?? false;
|
|
268
|
-
const currentFixture = currentListResult.fixtures.find(f => f.fixtureId === args.fixtureId);
|
|
269
|
-
const baselineFixture = baselineListResult.fixtures.find(f => f.fixtureId === args.fixtureId);
|
|
270
|
-
const labels = currentFixture?.labels;
|
|
271
|
-
const labelsChanged = baselineFixture && !arraysEqual(baselineFixture.labels, currentFixture?.labels ?? []);
|
|
272
|
-
return {
|
|
273
|
-
match: baselineHash === currentHash,
|
|
274
|
-
baselineHash,
|
|
275
|
-
currentHash,
|
|
276
|
-
baselineImage: includeImages && baselineResult.image
|
|
277
|
-
? Buffer.from(baselineResult.image).toString('base64') : undefined,
|
|
278
|
-
currentImage: includeImages && currentResult.image
|
|
279
|
-
? Buffer.from(currentResult.image).toString('base64') : undefined,
|
|
280
|
-
baselineHasError: baselineResult.hasError,
|
|
281
|
-
baselineError: baselineResult.error,
|
|
282
|
-
baselineEvents: baselineResult.events.length > 0 ? baselineResult.events : undefined,
|
|
283
|
-
baselineResultData: baselineResult.resultData,
|
|
284
|
-
currentHasError: currentResult.hasError,
|
|
285
|
-
currentError: currentResult.error,
|
|
286
|
-
currentEvents: currentResult.events.length > 0 ? currentResult.events : undefined,
|
|
287
|
-
currentResultData: currentResult.resultData,
|
|
288
|
-
labels,
|
|
289
|
-
labelsBefore: labelsChanged ? baselineFixture.labels : undefined,
|
|
290
|
-
approval: (baselineHash !== undefined && currentHash !== undefined && baselineHash !== currentHash)
|
|
291
|
-
? this.approvals.lookup({
|
|
292
|
-
fixtureId: args.fixtureId,
|
|
293
|
-
originalHash: baselineHash,
|
|
294
|
-
modifiedHash: currentHash,
|
|
295
|
-
}) ?? undefined
|
|
222
|
+
screenshots.push({
|
|
223
|
+
fixtureId,
|
|
224
|
+
hash: result.image ? contentHash(result.image) : undefined,
|
|
225
|
+
image: includeImages && result.image
|
|
226
|
+
? Buffer.from(result.image).toString('base64')
|
|
296
227
|
: undefined,
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
args
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
228
|
+
hasError: result.hasError,
|
|
229
|
+
error: result.error,
|
|
230
|
+
events: result.events.length > 0 ? result.events : undefined,
|
|
231
|
+
output: result.output,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
this._logger.trace(`takeBatch: done in ${Date.now() - startTime}ms`);
|
|
235
|
+
return { sourceTreeId: args.sourceTreeId, screenshots };
|
|
236
|
+
},
|
|
237
|
+
screenshotsCompare: async (args) => {
|
|
238
|
+
this._activityTracker.reportActivity();
|
|
239
|
+
const baselineSession = this.getSession(args.baselineSessionName);
|
|
240
|
+
const currentSession = this.getSession(args.currentSessionName);
|
|
241
|
+
this.assertSourceTreeId(args.baselineSessionName, args.baselineSourceTreeId);
|
|
242
|
+
this.assertSourceTreeId(args.currentSessionName, args.currentSourceTreeId);
|
|
243
|
+
const [baselineResult, baselineListResult] = await Promise.all([
|
|
244
|
+
baselineSession.explorer.screenshotFixture(args.fixtureId),
|
|
245
|
+
baselineSession.explorer.listFixtures(),
|
|
246
|
+
]);
|
|
247
|
+
this.assertSourceTreeId(args.baselineSessionName, args.baselineSourceTreeId);
|
|
248
|
+
const [currentResult, currentListResult] = await Promise.all([
|
|
249
|
+
currentSession.explorer.screenshotFixture(args.fixtureId),
|
|
250
|
+
currentSession.explorer.listFixtures(),
|
|
251
|
+
]);
|
|
252
|
+
this.assertSourceTreeId(args.currentSessionName, args.currentSourceTreeId);
|
|
253
|
+
const baselineHash = baselineResult.image ? contentHash(baselineResult.image) : undefined;
|
|
254
|
+
const currentHash = currentResult.image ? contentHash(currentResult.image) : undefined;
|
|
255
|
+
const includeImages = args.includeImages ?? false;
|
|
256
|
+
const currentFixture = currentListResult.fixtures.find(f => f.fixtureId === args.fixtureId);
|
|
257
|
+
const baselineFixture = baselineListResult.fixtures.find(f => f.fixtureId === args.fixtureId);
|
|
258
|
+
const labels = currentFixture?.labels;
|
|
259
|
+
const labelsChanged = baselineFixture && !arraysEqual(baselineFixture.labels, currentFixture?.labels ?? []);
|
|
260
|
+
return {
|
|
261
|
+
match: baselineHash === currentHash,
|
|
262
|
+
baselineHash,
|
|
263
|
+
currentHash,
|
|
264
|
+
baselineImage: includeImages && baselineResult.image
|
|
265
|
+
? Buffer.from(baselineResult.image).toString('base64') : undefined,
|
|
266
|
+
currentImage: includeImages && currentResult.image
|
|
267
|
+
? Buffer.from(currentResult.image).toString('base64') : undefined,
|
|
268
|
+
baselineHasError: baselineResult.hasError,
|
|
269
|
+
baselineError: baselineResult.error,
|
|
270
|
+
baselineEvents: baselineResult.events.length > 0 ? baselineResult.events : undefined,
|
|
271
|
+
baselineOutput: baselineResult.output,
|
|
272
|
+
currentHasError: currentResult.hasError,
|
|
273
|
+
currentError: currentResult.error,
|
|
274
|
+
currentEvents: currentResult.events.length > 0 ? currentResult.events : undefined,
|
|
275
|
+
currentOutput: currentResult.output,
|
|
276
|
+
labels,
|
|
277
|
+
labelsBefore: labelsChanged ? baselineFixture.labels : undefined,
|
|
278
|
+
approval: (baselineHash !== undefined && currentHash !== undefined && baselineHash !== currentHash)
|
|
279
|
+
? this.approvals.lookup({
|
|
280
|
+
fixtureId: args.fixtureId,
|
|
281
|
+
originalHash: baselineHash,
|
|
282
|
+
modifiedHash: currentHash,
|
|
283
|
+
}) ?? undefined
|
|
284
|
+
: undefined,
|
|
285
|
+
};
|
|
286
|
+
},
|
|
287
|
+
approvalsApprove: async (args) => {
|
|
288
|
+
this._activityTracker.reportActivity();
|
|
289
|
+
this.approvals.approve(args);
|
|
290
|
+
},
|
|
291
|
+
approvalsRevoke: async (args) => {
|
|
292
|
+
this._activityTracker.reportActivity();
|
|
293
|
+
this.approvals.revoke(args);
|
|
294
|
+
},
|
|
295
|
+
approvalsList: async (args) => {
|
|
296
|
+
this._activityTracker.reportActivity();
|
|
297
|
+
return this.approvals.list(args.fixtureId);
|
|
298
|
+
},
|
|
299
|
+
approvalsLookup: async (args) => {
|
|
300
|
+
this._activityTracker.reportActivity();
|
|
301
|
+
return this.approvals.lookup(args) ?? null;
|
|
302
|
+
},
|
|
303
|
+
visualReviewGetStatus: async (args) => {
|
|
304
|
+
this._activityTracker.reportActivity();
|
|
305
|
+
return this.visualCache.getReviewStatus(args.fixtureId, args.expectedVisualDescriptions, args.screenshotHash);
|
|
306
|
+
},
|
|
307
|
+
visualReviewApprove: async (args) => {
|
|
308
|
+
this._activityTracker.reportActivity();
|
|
309
|
+
this.visualCache.approve(args.fixtureId, args.expectedVisualDescriptions, args.screenshotHash, args.comment);
|
|
310
|
+
},
|
|
311
|
+
evaluate: async (args) => {
|
|
370
312
|
this._activityTracker.reportActivity();
|
|
371
313
|
const session = this.getSession(args.sessionName);
|
|
372
314
|
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
373
315
|
const result = await session.explorer.evaluateJs(args.expression, args.fixtureId);
|
|
374
316
|
this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
|
|
375
317
|
return { result };
|
|
376
|
-
}
|
|
377
|
-
setBrowserVisibility:
|
|
378
|
-
args: { visible: z.boolean() },
|
|
379
|
-
}, async (args, ctx) => {
|
|
318
|
+
},
|
|
319
|
+
setBrowserVisibility: async (args) => {
|
|
380
320
|
this._activityTracker.reportActivity();
|
|
381
|
-
this._logger.debug(`Set browser visibility: ${args.visible} (client=${
|
|
321
|
+
this._logger.debug(`Set browser visibility: ${args.visible} (client=${context.clientName})`);
|
|
382
322
|
await this._browserFactory.setHeaded(args.visible);
|
|
383
323
|
for (const session of this._sessions.values()) {
|
|
384
324
|
session.explorer.closePage();
|
|
385
325
|
}
|
|
386
326
|
return { visible: args.visible };
|
|
387
|
-
}
|
|
388
|
-
events:
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
327
|
+
},
|
|
328
|
+
events: async (_args, _ctx, stream) => {
|
|
329
|
+
const iterator = this.eventStream()[Symbol.asyncIterator]();
|
|
330
|
+
const onAbort = () => { void iterator.return?.(); };
|
|
331
|
+
stream.signal.addEventListener('abort', onAbort, { once: true });
|
|
332
|
+
try {
|
|
333
|
+
while (!stream.signal.aborted) {
|
|
334
|
+
const next = await iterator.next();
|
|
335
|
+
if (next.done) {
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
await stream.send(next.value);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
finally {
|
|
342
|
+
stream.signal.removeEventListener('abort', onAbort);
|
|
343
|
+
await iterator.return?.();
|
|
344
|
+
}
|
|
345
|
+
},
|
|
346
|
+
sessions: async () => {
|
|
392
347
|
this._activityTracker.reportActivity();
|
|
393
|
-
this._logger.trace(`API: sessions (client=${
|
|
348
|
+
this._logger.trace(`API: sessions (client=${context.clientName}, eventListeners=${this._eventListeners.size})`);
|
|
394
349
|
return this.getSessionInfos();
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
this._activityTracker.reportActivity();
|
|
398
|
-
return {
|
|
399
|
-
daemonApiVersion: daemonApiVersionText,
|
|
400
|
-
pluginProtocolVersion: pluginProtocolVersionText,
|
|
401
|
-
};
|
|
402
|
-
}),
|
|
403
|
-
restartSession: createMethod({
|
|
404
|
-
args: { sessionName: z.string() },
|
|
405
|
-
}, async (args, ctx) => {
|
|
350
|
+
},
|
|
351
|
+
restartSession: async (args) => {
|
|
406
352
|
this._activityTracker.reportActivity();
|
|
407
|
-
this._logger.debug(`Restart session "${args.sessionName}" requested (client=${
|
|
353
|
+
this._logger.debug(`Restart session "${args.sessionName}" requested (client=${context.clientName})`);
|
|
408
354
|
await this._restartSession(args.sessionName);
|
|
409
355
|
return this.getSessionInfos();
|
|
410
|
-
}
|
|
411
|
-
openSession:
|
|
412
|
-
args: {
|
|
413
|
-
name: z.string(),
|
|
414
|
-
ref: z.string(),
|
|
415
|
-
},
|
|
416
|
-
}, async (args, ctx) => {
|
|
356
|
+
},
|
|
357
|
+
openSession: async (args) => {
|
|
417
358
|
this._activityTracker.reportActivity();
|
|
418
|
-
this._logger.log(`Open session "${args.name}" @ ${args.ref} requested (client=${
|
|
359
|
+
this._logger.log(`Open session "${args.name}" @ ${args.ref} requested (client=${context.clientName})`);
|
|
419
360
|
return this._openDynamicSession(args.name, args.ref);
|
|
420
|
-
}
|
|
421
|
-
closeSession:
|
|
422
|
-
args: { name: z.string() },
|
|
423
|
-
}, async (args, ctx) => {
|
|
361
|
+
},
|
|
362
|
+
closeSession: async (args) => {
|
|
424
363
|
this._activityTracker.reportActivity();
|
|
425
|
-
this._logger.log(`Close session "${args.name}" requested (client=${
|
|
364
|
+
this._logger.log(`Close session "${args.name}" requested (client=${context.clientName})`);
|
|
426
365
|
return this._closeDynamicSession(args.name);
|
|
427
|
-
}
|
|
428
|
-
updateSessionRef:
|
|
429
|
-
args: {
|
|
430
|
-
name: z.string(),
|
|
431
|
-
ref: z.string(),
|
|
432
|
-
},
|
|
433
|
-
}, async (args, ctx) => {
|
|
366
|
+
},
|
|
367
|
+
updateSessionRef: async (args) => {
|
|
434
368
|
this._activityTracker.reportActivity();
|
|
435
|
-
this._logger.log(`Update session ref "${args.name}" → ${args.ref} requested (client=${
|
|
369
|
+
this._logger.log(`Update session ref "${args.name}" → ${args.ref} requested (client=${context.clientName})`);
|
|
436
370
|
return this._updateDynamicSessionRef(args.name, args.ref);
|
|
437
|
-
}
|
|
438
|
-
shutdown:
|
|
439
|
-
this._logger.debug(`Shutdown requested via API (client=${
|
|
440
|
-
|
|
441
|
-
|
|
371
|
+
},
|
|
372
|
+
shutdown: async () => {
|
|
373
|
+
this._logger.debug(`Shutdown requested via API (client=${context.clientName})`);
|
|
374
|
+
// Let LinkRPC serialize the reply before shutting down its transport.
|
|
375
|
+
setImmediate(() => this.requestShutdown());
|
|
376
|
+
},
|
|
442
377
|
});
|
|
378
|
+
return registration;
|
|
443
379
|
}
|
|
444
380
|
// -- Session access ------------------------------------------------------
|
|
445
381
|
getSession(name) {
|
|
@@ -466,7 +402,7 @@ class DaemonService {
|
|
|
466
402
|
sourceKind: 'worktree',
|
|
467
403
|
serverUrl: session.serverUrl,
|
|
468
404
|
sourceTreeId: reader ? session.sourceTreeId.read(reader).value : session.sourceTreeId.get().value,
|
|
469
|
-
worktreePath: meta.worktreePath,
|
|
405
|
+
worktreePath: meta.worktreePath.value,
|
|
470
406
|
ref: meta.ref,
|
|
471
407
|
});
|
|
472
408
|
}
|
|
@@ -494,7 +430,7 @@ class DaemonService {
|
|
|
494
430
|
sourceKind: 'worktree',
|
|
495
431
|
serverUrl: session.serverUrl,
|
|
496
432
|
sourceTreeId: reader ? session.sourceTreeId.read(reader).value : session.sourceTreeId.get().value,
|
|
497
|
-
worktreePath: meta.worktreePath,
|
|
433
|
+
worktreePath: meta.worktreePath.value,
|
|
498
434
|
ref: meta.ref,
|
|
499
435
|
});
|
|
500
436
|
}
|
|
@@ -527,6 +463,9 @@ class DaemonService {
|
|
|
527
463
|
let resolve;
|
|
528
464
|
let done = false;
|
|
529
465
|
const listener = (event) => {
|
|
466
|
+
if (done) {
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
530
469
|
if (event.type !== 'log') {
|
|
531
470
|
self._logger.trace(`Event stream: ${event.type}`);
|
|
532
471
|
}
|
|
@@ -544,6 +483,9 @@ class DaemonService {
|
|
|
544
483
|
self._activityTracker.setActive(true);
|
|
545
484
|
self._logger.debug(`Event stream opened (listeners: ${self._eventListeners.size})`);
|
|
546
485
|
const onShutdown = () => {
|
|
486
|
+
if (done) {
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
547
489
|
done = true;
|
|
548
490
|
cleanup();
|
|
549
491
|
if (resolve) {
|
|
@@ -554,9 +496,16 @@ class DaemonService {
|
|
|
554
496
|
};
|
|
555
497
|
self._shutdownResolvers.push(onShutdown);
|
|
556
498
|
const cleanup = () => {
|
|
499
|
+
if (!self._eventListeners.has(listener)) {
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
557
502
|
self._eventListeners.delete(listener);
|
|
558
503
|
self._eventListenerCount.set(self._eventListeners.size, undefined);
|
|
559
504
|
self._activityTracker.setActive(false);
|
|
505
|
+
const shutdownIndex = self._shutdownResolvers.indexOf(onShutdown);
|
|
506
|
+
if (shutdownIndex >= 0) {
|
|
507
|
+
self._shutdownResolvers.splice(shutdownIndex, 1);
|
|
508
|
+
}
|
|
560
509
|
self._logger.debug(`Event stream closed (listeners: ${self._eventListeners.size})`);
|
|
561
510
|
};
|
|
562
511
|
return {
|
|
@@ -652,10 +601,11 @@ class DaemonService {
|
|
|
652
601
|
// -- Shutdown ------------------------------------------------------------
|
|
653
602
|
requestShutdown() {
|
|
654
603
|
this._shutdownRequested = true;
|
|
655
|
-
|
|
604
|
+
const resolvers = this._shutdownResolvers;
|
|
605
|
+
this._shutdownResolvers = [];
|
|
606
|
+
for (const resolve of resolvers) {
|
|
656
607
|
resolve();
|
|
657
608
|
}
|
|
658
|
-
this._shutdownResolvers = [];
|
|
659
609
|
}
|
|
660
610
|
async dispose() {
|
|
661
611
|
this.requestShutdown();
|
|
@@ -709,8 +659,6 @@ class DaemonService {
|
|
|
709
659
|
daemonConfig: this._pipeName ? {
|
|
710
660
|
pipeName: this._pipeName,
|
|
711
661
|
sessionName,
|
|
712
|
-
daemonApiVersion: daemonApiVersionText,
|
|
713
|
-
pluginProtocolVersion: pluginProtocolVersionText,
|
|
714
662
|
} : undefined,
|
|
715
663
|
};
|
|
716
664
|
}
|
|
@@ -967,5 +915,5 @@ function arraysEqual(a, b) {
|
|
|
967
915
|
return true;
|
|
968
916
|
}
|
|
969
917
|
|
|
970
|
-
export { ActivityTracker, DaemonService, SourceTreeChangedError
|
|
918
|
+
export { ActivityTracker, DaemonService, SourceTreeChangedError };
|
|
971
919
|
//# sourceMappingURL=DaemonService.js.map
|