@vscode/component-explorer-cli 0.1.1-9 → 0.2.1-0
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/LICENSE +21 -0
- package/SECURITY.md +14 -0
- package/dist/WorktreePool.d.ts +22 -0
- package/dist/WorktreePool.d.ts.map +1 -0
- package/dist/WorktreePool.js +58 -0
- package/dist/WorktreePool.js.map +1 -0
- package/dist/WorktreePool.test.d.ts +2 -0
- package/dist/WorktreePool.test.d.ts.map +1 -0
- package/dist/_virtual/_build-info.js +4 -0
- package/dist/_virtual/_build-info.js.map +1 -0
- package/dist/browserPage.d.ts +15 -1
- package/dist/browserPage.d.ts.map +1 -1
- package/dist/browserPage.js +51 -7
- package/dist/browserPage.js.map +1 -1
- package/dist/commands/acceptCommand.d.ts.map +1 -1
- package/dist/commands/acceptCommand.js +3 -2
- package/dist/commands/acceptCommand.js.map +1 -1
- package/dist/commands/checkStabilityCommand.d.ts +12 -0
- package/dist/commands/checkStabilityCommand.d.ts.map +1 -0
- package/dist/commands/checkStabilityCommand.js +84 -0
- package/dist/commands/checkStabilityCommand.js.map +1 -0
- package/dist/commands/compareCommand.d.ts +1 -0
- package/dist/commands/compareCommand.d.ts.map +1 -1
- package/dist/commands/compareCommand.js +25 -4
- package/dist/commands/compareCommand.js.map +1 -1
- package/dist/commands/mcpCommand.d.ts +1 -0
- package/dist/commands/mcpCommand.d.ts.map +1 -1
- package/dist/commands/mcpCommand.js +23 -10
- package/dist/commands/mcpCommand.js.map +1 -1
- package/dist/commands/screenshotCommand.d.ts +2 -0
- package/dist/commands/screenshotCommand.d.ts.map +1 -1
- package/dist/commands/screenshotCommand.js +19 -4
- package/dist/commands/screenshotCommand.js.map +1 -1
- package/dist/commands/serveCommand.d.ts +4 -0
- package/dist/commands/serveCommand.d.ts.map +1 -1
- package/dist/commands/serveCommand.js +101 -26
- package/dist/commands/serveCommand.js.map +1 -1
- package/dist/commands/watchCommand.d.ts +2 -0
- package/dist/commands/watchCommand.d.ts.map +1 -1
- package/dist/commands/watchCommand.js +18 -66
- package/dist/commands/watchCommand.js.map +1 -1
- package/dist/comparison.d.ts +11 -1
- package/dist/comparison.d.ts.map +1 -1
- package/dist/comparison.js +25 -11
- package/dist/comparison.js.map +1 -1
- package/dist/component-explorer-config.schema.json +260 -55
- package/dist/componentExplorer.d.ts +21 -18
- package/dist/componentExplorer.d.ts.map +1 -1
- package/dist/componentExplorer.js +60 -19
- package/dist/componentExplorer.js.map +1 -1
- package/dist/daemon/DaemonService.d.ts +100 -11
- package/dist/daemon/DaemonService.d.ts.map +1 -1
- package/dist/daemon/DaemonService.js +512 -129
- package/dist/daemon/DaemonService.js.map +1 -1
- package/dist/daemon/dynamicSessions.test.d.ts +2 -0
- package/dist/daemon/dynamicSessions.test.d.ts.map +1 -0
- package/dist/daemon/lifecycle.d.ts +2 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +52 -30
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/pipeClient.d.ts.map +1 -1
- package/dist/daemon/pipeClient.js +81 -2
- package/dist/daemon/pipeClient.js.map +1 -1
- package/dist/daemon/pipeServer.d.ts +2 -1
- package/dist/daemon/pipeServer.d.ts.map +1 -1
- package/dist/daemon/pipeServer.js +59 -2
- package/dist/daemon/pipeServer.js.map +1 -1
- package/dist/daemon/version.d.ts +10 -0
- package/dist/daemon/version.d.ts.map +1 -0
- package/dist/daemon/version.js +17 -0
- package/dist/daemon/version.js.map +1 -0
- package/dist/dependencyInstaller.d.ts +2 -2
- package/dist/dependencyInstaller.d.ts.map +1 -1
- package/dist/dependencyInstaller.js.map +1 -1
- package/dist/explorerSession.d.ts +3 -3
- package/dist/explorerSession.d.ts.map +1 -1
- package/dist/explorerSession.js +26 -9
- package/dist/explorerSession.js.map +1 -1
- package/dist/git/gitIndexResolver.d.ts +25 -0
- package/dist/git/gitIndexResolver.d.ts.map +1 -0
- package/dist/git/gitIndexResolver.js +91 -0
- package/dist/git/gitIndexResolver.js.map +1 -0
- package/dist/git/gitIndexResolver.test.d.ts +2 -0
- package/dist/git/gitIndexResolver.test.d.ts.map +1 -0
- package/dist/git/gitService.d.ts +2 -0
- package/dist/git/gitService.d.ts.map +1 -1
- package/dist/git/gitService.js +6 -0
- package/dist/git/gitService.js.map +1 -1
- package/dist/git/gitWorktreeManager.d.ts +6 -0
- package/dist/git/gitWorktreeManager.d.ts.map +1 -1
- package/dist/git/gitWorktreeManager.js +42 -13
- package/dist/git/gitWorktreeManager.js.map +1 -1
- package/dist/git/gitWorktreeManager.test.d.ts +2 -0
- package/dist/git/gitWorktreeManager.test.d.ts.map +1 -0
- package/dist/git/testUtils.d.ts +13 -0
- package/dist/git/testUtils.d.ts.map +1 -0
- package/dist/httpServer.d.ts +18 -7
- package/dist/httpServer.d.ts.map +1 -1
- package/dist/httpServer.js +117 -18
- package/dist/httpServer.js.map +1 -1
- package/dist/httpServer.test.d.ts +2 -0
- package/dist/httpServer.test.d.ts.map +1 -0
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +7 -1
- package/dist/logger.js.map +1 -1
- package/dist/mcp/McpServer.d.ts +18 -0
- package/dist/mcp/McpServer.d.ts.map +1 -1
- package/dist/mcp/McpServer.js +555 -13
- package/dist/mcp/McpServer.js.map +1 -1
- package/dist/mcp/TaskManager.d.ts +28 -0
- package/dist/mcp/TaskManager.d.ts.map +1 -0
- package/dist/mcp/TaskManager.js +54 -0
- package/dist/mcp/TaskManager.js.map +1 -0
- package/dist/packages/simple-api/dist/{chunk-Q24JOMNK.js → chunk-TAEFVNPN.js} +1 -1
- package/dist/packages/simple-api/dist/chunk-TAEFVNPN.js.map +1 -0
- package/dist/packages/simple-api/dist/express.js +11 -3
- package/dist/packages/simple-api/dist/express.js.map +1 -1
- package/dist/utils.d.ts +7 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +6 -7
- package/dist/utils.js.map +1 -1
- package/dist/visualCache.d.ts +34 -0
- package/dist/visualCache.d.ts.map +1 -0
- package/dist/visualCache.js +90 -0
- package/dist/visualCache.js.map +1 -0
- package/dist/watchConfig.d.ts +68 -15
- package/dist/watchConfig.d.ts.map +1 -1
- package/dist/watchConfig.js +109 -65
- package/dist/watchConfig.js.map +1 -1
- package/package.json +21 -4
- package/dist/packages/simple-api/dist/chunk-Q24JOMNK.js.map +0 -1
|
@@ -3,13 +3,13 @@ import type { BrowserPageFactory } from './browserPage.js';
|
|
|
3
3
|
import { type ComponentExplorerHttpServerFactory, type ViteServerOptions } from './httpServer.js';
|
|
4
4
|
import type { IObservable } from '@vscode/observables';
|
|
5
5
|
import type { SourceTreeId } from './sourceTreeId.js';
|
|
6
|
-
import type {
|
|
6
|
+
import type { ResolvedServerConfig } from './watchConfig.js';
|
|
7
7
|
export declare class ExplorerSession {
|
|
8
8
|
readonly name: string;
|
|
9
|
-
readonly explorer: ComponentExplorer;
|
|
10
9
|
private readonly _server;
|
|
10
|
+
readonly explorer: ComponentExplorer;
|
|
11
|
+
static create(name: string, serverConfig: ResolvedServerConfig, serverFactory: ComponentExplorerHttpServerFactory, browserFactory: BrowserPageFactory, options?: ViteServerOptions): Promise<ExplorerSession>;
|
|
11
12
|
private constructor();
|
|
12
|
-
static create(name: string, project: ViteProjectRef, serverFactory: ComponentExplorerHttpServerFactory, browserFactory: BrowserPageFactory, options?: ViteServerOptions): Promise<ExplorerSession>;
|
|
13
13
|
get serverUrl(): string;
|
|
14
14
|
get sourceTreeId(): IObservable<SourceTreeId>;
|
|
15
15
|
dispose(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorerSession.d.ts","sourceRoot":"","sources":["../src/explorerSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAoC,KAAK,kCAAkC,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"explorerSession.d.ts","sourceRoot":"","sources":["../src/explorerSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAoC,KAAK,kCAAkC,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,qBAAa,eAAe;IA6B1B,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB;WA9BxB,MAAM,CAClB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,oBAAoB,EAClC,aAAa,EAAE,kCAAkC,EACjD,cAAc,EAAE,kBAAkB,EAClC,OAAO,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,eAAe,CAAC;IAqB3B,OAAO;IAMP,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,YAAY,IAAI,WAAW,CAAC,YAAY,CAAC,CAE5C;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI9B"}
|
package/dist/explorerSession.js
CHANGED
|
@@ -2,23 +2,40 @@ import { BrowserComponentExplorer } from './componentExplorer.js';
|
|
|
2
2
|
|
|
3
3
|
class ExplorerSession {
|
|
4
4
|
name;
|
|
5
|
-
explorer;
|
|
6
5
|
_server;
|
|
7
|
-
|
|
6
|
+
explorer;
|
|
7
|
+
static async create(name, serverConfig, serverFactory, browserFactory, options) {
|
|
8
|
+
let server;
|
|
9
|
+
if (serverConfig.kind === 'vite') {
|
|
10
|
+
server = await serverFactory.createViteServer(serverConfig.viteProject, {
|
|
11
|
+
...options,
|
|
12
|
+
hmrAllowedPaths: serverConfig.hmr?.allowedPaths ?? options?.hmrAllowedPaths,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
else if (serverConfig.kind === 'http') {
|
|
16
|
+
server = await serverFactory.createHttpServer(serverConfig.url, {
|
|
17
|
+
cmd: serverConfig.cmd,
|
|
18
|
+
cwd: serverConfig.cwd,
|
|
19
|
+
wait: serverConfig.wait,
|
|
20
|
+
logger: options?.logger,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
throw new Error(`Unsupported server config kind: ${serverConfig.kind}`);
|
|
25
|
+
}
|
|
26
|
+
const explorer = new BrowserComponentExplorer(browserFactory, server, options?.logger);
|
|
27
|
+
return new ExplorerSession(name, server, explorer);
|
|
28
|
+
}
|
|
29
|
+
constructor(name, _server, explorer) {
|
|
8
30
|
this.name = name;
|
|
9
|
-
this.explorer = explorer;
|
|
10
31
|
this._server = _server;
|
|
11
|
-
|
|
12
|
-
static async create(name, project, serverFactory, browserFactory, options) {
|
|
13
|
-
const server = await serverFactory.createViteServer(project, options);
|
|
14
|
-
const explorer = new BrowserComponentExplorer(browserFactory, server, options?.logger);
|
|
15
|
-
return new ExplorerSession(name, explorer, server);
|
|
32
|
+
this.explorer = explorer;
|
|
16
33
|
}
|
|
17
34
|
get serverUrl() {
|
|
18
35
|
return this._server.url;
|
|
19
36
|
}
|
|
20
37
|
get sourceTreeId() {
|
|
21
|
-
return this.
|
|
38
|
+
return this.explorer.sourceTreeId;
|
|
22
39
|
}
|
|
23
40
|
async dispose() {
|
|
24
41
|
await this.explorer.dispose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorerSession.js","sources":["../src/explorerSession.ts"],"sourcesContent":[null],"names":[],"mappings":";;MAOa,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"explorerSession.js","sources":["../src/explorerSession.ts"],"sourcesContent":[null],"names":[],"mappings":";;MAOa,eAAe,CAAA;AA6BjB,IAAA,IAAA;AACQ,IAAA,OAAA;AACR,IAAA,QAAA;AA9BV,IAAA,aAAa,MAAM,CAClB,IAAY,EACZ,YAAkC,EAClC,aAAiD,EACjD,cAAkC,EAClC,OAA2B,EAAA;AAE3B,QAAA,IAAI,MAAmC;AACvC,QAAA,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE;YACjC,MAAM,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,WAAW,EAAE;AACvE,gBAAA,GAAG,OAAO;gBACV,eAAe,EAAE,YAAY,CAAC,GAAG,EAAE,YAAY,IAAI,OAAO,EAAE,eAAe;AAC3E,aAAA,CAAC;QACH;AAAO,aAAA,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE;YACxC,MAAM,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,EAAE;gBAC/D,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,MAAM,EAAE,OAAO,EAAE,MAAM;AACvB,aAAA,CAAC;QACH;aAAO;YACN,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAoC,YAAoB,CAAC,IAAI,CAAA,CAAE,CAAC;QACjF;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;QACtF,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;IACnD;AAEA,IAAA,WAAA,CACU,IAAY,EACJ,OAAoC,EAC5C,QAA2B,EAAA;QAF3B,IAAA,CAAA,IAAI,GAAJ,IAAI;QACI,IAAA,CAAA,OAAO,GAAP,OAAO;QACf,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACf;AAEH,IAAA,IAAI,SAAS,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG;IACxB;AAEA,IAAA,IAAI,YAAY,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;IAClC;AAEA,IAAA,MAAM,OAAO,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC7B,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IAC7B;AACA;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IDisposable } from '@vscode/observables';
|
|
2
|
+
import { type IObservable } from '@vscode/observables';
|
|
3
|
+
import { GitCommitId } from './gitCommitId.js';
|
|
4
|
+
/**
|
|
5
|
+
* Watches the git index and creates temporary commits representing the staged state.
|
|
6
|
+
* This enables worktree sessions checked out at "INDEX" — a snapshot of what's staged.
|
|
7
|
+
*/
|
|
8
|
+
export declare class GitIndexResolver implements IDisposable {
|
|
9
|
+
private readonly _gitRoot;
|
|
10
|
+
static readonly INDEX_REF = "INDEX";
|
|
11
|
+
private readonly _resolvedCommit;
|
|
12
|
+
private _watcher;
|
|
13
|
+
private _debounceTimer;
|
|
14
|
+
private _disposed;
|
|
15
|
+
get ref(): string;
|
|
16
|
+
get resolvedCommit(): IObservable<GitCommitId>;
|
|
17
|
+
private constructor();
|
|
18
|
+
static create(gitRoot: string): Promise<GitIndexResolver>;
|
|
19
|
+
private static _createIndexCommit;
|
|
20
|
+
private _startWatching;
|
|
21
|
+
private _scheduleResolve;
|
|
22
|
+
private _resolve;
|
|
23
|
+
dispose(): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=gitIndexResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitIndexResolver.d.ts","sourceRoot":"","sources":["../../src/git/gitIndexResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAYlD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX1B,MAAM,CAAC,QAAQ,CAAC,SAAS,WAAW;IAEpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,SAAS,CAAS;IAE1B,IAAI,GAAG,IAAI,MAAM,CAAuC;IACxD,IAAI,cAAc,IAAI,WAAW,CAAC,WAAW,CAAC,CAAiC;IAE/E,OAAO;WAOM,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;mBAO1C,kBAAkB;IAWvC,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;YAMV,QAAQ;IAYtB,OAAO,IAAI,IAAI;CAMf"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import '../external/vscode-observables/observables/dist/observableInternal/index.js';
|
|
4
|
+
import { observableValue } from '../external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js';
|
|
5
|
+
import '../external/vscode-observables/observables/dist/observableInternal/debugLocation.js';
|
|
6
|
+
import '../external/vscode-observables/observables/dist/observableInternal/observables/derived.js';
|
|
7
|
+
import '../external/vscode-observables/observables/dist/observableInternal/utils/utils.js';
|
|
8
|
+
import '../external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
|
|
9
|
+
import { GitCommitId } from './gitCommitId.js';
|
|
10
|
+
import { execGit } from './gitUtils.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Watches the git index and creates temporary commits representing the staged state.
|
|
14
|
+
* This enables worktree sessions checked out at "INDEX" — a snapshot of what's staged.
|
|
15
|
+
*/
|
|
16
|
+
class GitIndexResolver {
|
|
17
|
+
_gitRoot;
|
|
18
|
+
static INDEX_REF = 'INDEX';
|
|
19
|
+
_resolvedCommit;
|
|
20
|
+
_watcher;
|
|
21
|
+
_debounceTimer;
|
|
22
|
+
_disposed = false;
|
|
23
|
+
get ref() { return GitIndexResolver.INDEX_REF; }
|
|
24
|
+
get resolvedCommit() { return this._resolvedCommit; }
|
|
25
|
+
constructor(_gitRoot, initialCommit) {
|
|
26
|
+
this._gitRoot = _gitRoot;
|
|
27
|
+
this._resolvedCommit = observableValue('commitResolver(INDEX)', initialCommit);
|
|
28
|
+
}
|
|
29
|
+
static async create(gitRoot) {
|
|
30
|
+
const commit = await GitIndexResolver._createIndexCommit(gitRoot);
|
|
31
|
+
const resolver = new GitIndexResolver(gitRoot, commit);
|
|
32
|
+
resolver._startWatching();
|
|
33
|
+
return resolver;
|
|
34
|
+
}
|
|
35
|
+
static async _createIndexCommit(gitRoot) {
|
|
36
|
+
const treeHash = (await execGit(gitRoot, ['write-tree'])).trim();
|
|
37
|
+
const headHash = (await execGit(gitRoot, ['rev-parse', 'HEAD'])).trim();
|
|
38
|
+
const commitHash = (await execGit(gitRoot, [
|
|
39
|
+
'commit-tree', treeHash,
|
|
40
|
+
'-p', headHash,
|
|
41
|
+
'-m', 'index snapshot',
|
|
42
|
+
])).trim();
|
|
43
|
+
return new GitCommitId(commitHash);
|
|
44
|
+
}
|
|
45
|
+
_startWatching() {
|
|
46
|
+
const indexPath = path.join(this._gitRoot, '.git', 'index');
|
|
47
|
+
try {
|
|
48
|
+
this._watcher = fs.watch(indexPath, { persistent: false }, () => {
|
|
49
|
+
this._scheduleResolve();
|
|
50
|
+
});
|
|
51
|
+
this._watcher.on('error', () => { });
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// If we can't watch, the resolver still works — just won't auto-update
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
_scheduleResolve() {
|
|
58
|
+
if (this._disposed) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (this._debounceTimer) {
|
|
62
|
+
clearTimeout(this._debounceTimer);
|
|
63
|
+
}
|
|
64
|
+
this._debounceTimer = setTimeout(() => { this._resolve(); }, 300);
|
|
65
|
+
}
|
|
66
|
+
async _resolve() {
|
|
67
|
+
if (this._disposed) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const newCommit = await GitIndexResolver._createIndexCommit(this._gitRoot);
|
|
72
|
+
if (!this._resolvedCommit.get().equals(newCommit)) {
|
|
73
|
+
this._resolvedCommit.set(newCommit, undefined);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// index may be temporarily in a bad state during staging, ignore
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
dispose() {
|
|
81
|
+
this._disposed = true;
|
|
82
|
+
if (this._debounceTimer) {
|
|
83
|
+
clearTimeout(this._debounceTimer);
|
|
84
|
+
}
|
|
85
|
+
this._watcher?.close();
|
|
86
|
+
this._watcher = undefined;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export { GitIndexResolver };
|
|
91
|
+
//# sourceMappingURL=gitIndexResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitIndexResolver.js","sources":["../../src/git/gitIndexResolver.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitIndexResolver.test.d.ts","sourceRoot":"","sources":["../../src/git/gitIndexResolver.test.ts"],"names":[],"mappings":""}
|
package/dist/git/gitService.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { IDisposable } from '@vscode/observables';
|
|
2
2
|
import type { IGitCommitResolver } from './gitCommitResolver.js';
|
|
3
|
+
import { GitIndexResolver } from './gitIndexResolver.js';
|
|
3
4
|
import { type GitWorktreeManager } from './gitWorktreeManager.js';
|
|
4
5
|
import { GitCommitId } from './gitCommitId.js';
|
|
5
6
|
export interface IGitService {
|
|
@@ -9,6 +10,7 @@ export interface IGitRepo extends IDisposable {
|
|
|
9
10
|
readonly gitRoot: string;
|
|
10
11
|
readonly worktrees: GitWorktreeManager;
|
|
11
12
|
createCommitResolver(ref: string): Promise<IGitCommitResolver>;
|
|
13
|
+
createIndexResolver(): Promise<GitIndexResolver>;
|
|
12
14
|
resolveRef(ref: string): Promise<GitCommitId>;
|
|
13
15
|
worktreeRootPath(): string;
|
|
14
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitService.d.ts","sourceRoot":"","sources":["../../src/git/gitService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAA6B,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC3B,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,QAAS,SAAQ,WAAW;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9C,gBAAgB,IAAI,MAAM,CAAC;CAC3B;AAED,qBAAa,UAAW,YAAW,WAAW;IACvC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAI5D"}
|
|
1
|
+
{"version":3,"file":"gitService.d.ts","sourceRoot":"","sources":["../../src/git/gitService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,kBAAkB,EAA6B,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC3B,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,QAAS,SAAQ,WAAW;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/D,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9C,gBAAgB,IAAI,MAAM,CAAC;CAC3B;AAED,qBAAa,UAAW,YAAW,WAAW;IACvC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAI5D"}
|
package/dist/git/gitService.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GitCommitResolver } from './gitCommitResolver.js';
|
|
2
|
+
import { GitIndexResolver } from './gitIndexResolver.js';
|
|
2
3
|
import { DefaultGitWorktreeManager } from './gitWorktreeManager.js';
|
|
3
4
|
import { getGitRoot, resolveRef, worktreeRootPath } from './gitUtils.js';
|
|
4
5
|
import { GitCommitId } from './gitCommitId.js';
|
|
@@ -22,6 +23,11 @@ class GitRepo {
|
|
|
22
23
|
this._resolvers.add(resolver);
|
|
23
24
|
return resolver;
|
|
24
25
|
}
|
|
26
|
+
async createIndexResolver() {
|
|
27
|
+
const resolver = await GitIndexResolver.create(this.gitRoot);
|
|
28
|
+
this._resolvers.add(resolver);
|
|
29
|
+
return resolver;
|
|
30
|
+
}
|
|
25
31
|
async resolveRef(ref) {
|
|
26
32
|
const hash = await resolveRef(this.gitRoot, ref);
|
|
27
33
|
return new GitCommitId(hash);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitService.js","sources":["../../src/git/gitService.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gitService.js","sources":["../../src/git/gitService.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;MAqBa,UAAU,CAAA;IACtB,MAAM,kBAAkB,CAAC,OAAe,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;AACzC,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAC5B;AACA;AAED,MAAM,OAAO,CAAA;AAIS,IAAA,OAAA;AAHZ,IAAA,SAAS;AACD,IAAA,UAAU,GAAG,IAAI,GAAG,EAAsB;AAE3D,IAAA,WAAA,CAAqB,OAAe,EAAA;QAAf,IAAA,CAAA,OAAO,GAAP,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAyB,CAAC,OAAO,CAAC;IACxD;IAEA,MAAM,oBAAoB,CAAC,GAAW,EAAA;AACrC,QAAA,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AAClE,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,QAAQ;IAChB;AAEA,IAAA,MAAM,mBAAmB,GAAA;QACxB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5D,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,QAAQ;IAChB;IAEA,MAAM,UAAU,CAAC,GAAW,EAAA;QAC3B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AAChD,QAAA,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC;IAC7B;IAEA,gBAAgB,GAAA;AACf,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;IACtC;IAEA,OAAO,GAAA;AACN,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;YACvC,QAAQ,CAAC,OAAO,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACxB;AACA;;;;"}
|
|
@@ -3,6 +3,12 @@ export interface GitWorktreeInfo {
|
|
|
3
3
|
readonly path: string;
|
|
4
4
|
readonly checkedOutCommit: GitCommitId;
|
|
5
5
|
readonly isDirty: boolean;
|
|
6
|
+
readonly dirtyFiles: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export declare class DirtyWorktreeError extends Error {
|
|
9
|
+
readonly worktreePath: string;
|
|
10
|
+
readonly dirtyFiles: readonly string[];
|
|
11
|
+
constructor(worktreePath: string, dirtyFiles: readonly string[], operation: string);
|
|
6
12
|
}
|
|
7
13
|
export interface GitWorktreeManager {
|
|
8
14
|
create(worktreePath: string, commit: GitCommitId): Promise<GitWorktreeInfo>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitWorktreeManager.d.ts","sourceRoot":"","sources":["../../src/git/gitWorktreeManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gitWorktreeManager.d.ts","sourceRoot":"","sources":["../../src/git/gitWorktreeManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE;gBAD7B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,SAAS,MAAM,EAAE,EACtC,SAAS,EAAE,MAAM;CAQlB;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5E,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9E,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC;CAChE;AAED,qBAAa,yBAA0B,YAAW,kBAAkB;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEvC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAS3E,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3C,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAe7E,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAehE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;CAqCrE"}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
import * as path from 'node:path';
|
|
1
2
|
import { GitCommitId } from './gitCommitId.js';
|
|
2
3
|
import { execGit } from './gitUtils.js';
|
|
3
4
|
|
|
5
|
+
class DirtyWorktreeError extends Error {
|
|
6
|
+
worktreePath;
|
|
7
|
+
dirtyFiles;
|
|
8
|
+
constructor(worktreePath, dirtyFiles, operation) {
|
|
9
|
+
super(`Worktree is dirty, refusing ${operation}: ${worktreePath}\n` +
|
|
10
|
+
dirtyFiles.map(f => ` ${f}`).join('\n'));
|
|
11
|
+
this.worktreePath = worktreePath;
|
|
12
|
+
this.dirtyFiles = dirtyFiles;
|
|
13
|
+
this.name = 'DirtyWorktreeError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
4
16
|
class DefaultGitWorktreeManager {
|
|
5
17
|
_gitRoot;
|
|
6
18
|
constructor(_gitRoot) {
|
|
@@ -20,7 +32,7 @@ class DefaultGitWorktreeManager {
|
|
|
20
32
|
throw new Error(`Worktree does not exist: ${worktreePath}`);
|
|
21
33
|
}
|
|
22
34
|
if (current.isDirty) {
|
|
23
|
-
throw new
|
|
35
|
+
throw new DirtyWorktreeError(worktreePath, current.dirtyFiles, 'remove');
|
|
24
36
|
}
|
|
25
37
|
await execGit(this._gitRoot, ['worktree', 'remove', worktreePath]);
|
|
26
38
|
}
|
|
@@ -30,7 +42,7 @@ class DefaultGitWorktreeManager {
|
|
|
30
42
|
throw new Error(`Worktree does not exist: ${worktreePath}`);
|
|
31
43
|
}
|
|
32
44
|
if (current.isDirty) {
|
|
33
|
-
throw new
|
|
45
|
+
throw new DirtyWorktreeError(worktreePath, current.dirtyFiles, 'checkout');
|
|
34
46
|
}
|
|
35
47
|
if (current.checkedOutCommit.equals(commit)) {
|
|
36
48
|
return current;
|
|
@@ -41,11 +53,12 @@ class DefaultGitWorktreeManager {
|
|
|
41
53
|
async info(worktreePath) {
|
|
42
54
|
try {
|
|
43
55
|
const head = (await execGit(worktreePath, ['rev-parse', 'HEAD'])).trim();
|
|
44
|
-
const
|
|
56
|
+
const dirtyFiles = parsePorcelainStatus(worktreePath, await execGit(worktreePath, ['status', '--porcelain']));
|
|
45
57
|
return {
|
|
46
58
|
path: worktreePath,
|
|
47
59
|
checkedOutCommit: new GitCommitId(head),
|
|
48
|
-
isDirty:
|
|
60
|
+
isDirty: dirtyFiles.length > 0,
|
|
61
|
+
dirtyFiles,
|
|
49
62
|
};
|
|
50
63
|
}
|
|
51
64
|
catch {
|
|
@@ -60,7 +73,6 @@ class DefaultGitWorktreeManager {
|
|
|
60
73
|
const lines = block.split('\n');
|
|
61
74
|
let entryPath;
|
|
62
75
|
let head;
|
|
63
|
-
let isDirty = false;
|
|
64
76
|
for (const line of lines) {
|
|
65
77
|
if (line.startsWith('worktree ')) {
|
|
66
78
|
entryPath = line.slice('worktree '.length);
|
|
@@ -72,23 +84,40 @@ class DefaultGitWorktreeManager {
|
|
|
72
84
|
if (entryPath && head && entryPath.startsWith(worktreeRoot)) {
|
|
73
85
|
// Check dirty status via git status
|
|
74
86
|
try {
|
|
75
|
-
const
|
|
76
|
-
|
|
87
|
+
const dirtyFiles = parsePorcelainStatus(entryPath, await execGit(entryPath, ['status', '--porcelain']));
|
|
88
|
+
entries.push({
|
|
89
|
+
path: entryPath,
|
|
90
|
+
checkedOutCommit: new GitCommitId(head),
|
|
91
|
+
isDirty: dirtyFiles.length > 0,
|
|
92
|
+
dirtyFiles,
|
|
93
|
+
});
|
|
77
94
|
}
|
|
78
95
|
catch {
|
|
79
96
|
// If we can't check, skip this entry
|
|
80
97
|
continue;
|
|
81
98
|
}
|
|
82
|
-
entries.push({
|
|
83
|
-
path: entryPath,
|
|
84
|
-
checkedOutCommit: new GitCommitId(head),
|
|
85
|
-
isDirty,
|
|
86
|
-
});
|
|
87
99
|
}
|
|
88
100
|
}
|
|
89
101
|
return entries;
|
|
90
102
|
}
|
|
91
103
|
}
|
|
104
|
+
function parsePorcelainStatus(worktreePath, output) {
|
|
105
|
+
// git status --porcelain format: "XY filename" where X=index status, Y=worktree status, then a space.
|
|
106
|
+
const results = [];
|
|
107
|
+
for (const raw of output.split('\n')) {
|
|
108
|
+
const line = raw.replace(/\r$/, '');
|
|
109
|
+
if (line === '') {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
// Expect exactly: 2 status chars + space + filename
|
|
113
|
+
const match = line.match(/^(.)(.) (.+)$/);
|
|
114
|
+
if (!match) {
|
|
115
|
+
throw new Error(`Unexpected git status --porcelain line: ${JSON.stringify(line)}`);
|
|
116
|
+
}
|
|
117
|
+
results.push(path.resolve(worktreePath, match[3]));
|
|
118
|
+
}
|
|
119
|
+
return results;
|
|
120
|
+
}
|
|
92
121
|
|
|
93
|
-
export { DefaultGitWorktreeManager };
|
|
122
|
+
export { DefaultGitWorktreeManager, DirtyWorktreeError };
|
|
94
123
|
//# sourceMappingURL=gitWorktreeManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitWorktreeManager.js","sources":["../../src/git/gitWorktreeManager.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gitWorktreeManager.js","sources":["../../src/git/gitWorktreeManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitWorktreeManager.test.d.ts","sourceRoot":"","sources":["../../src/git/gitWorktreeManager.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { GitCommitId } from './gitCommitId.js';
|
|
2
|
+
export declare class TempGitRepo {
|
|
3
|
+
readonly root: string;
|
|
4
|
+
private constructor();
|
|
5
|
+
static create(): Promise<TempGitRepo>;
|
|
6
|
+
writeFile(relativePath: string, content: string): Promise<string>;
|
|
7
|
+
readFile(relativePath: string): Promise<string>;
|
|
8
|
+
addAndCommit(message: string): Promise<GitCommitId>;
|
|
9
|
+
stageFile(relativePath: string): Promise<void>;
|
|
10
|
+
resolveRef(ref: string): Promise<GitCommitId>;
|
|
11
|
+
dispose(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=testUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../src/git/testUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,WAAW;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAzC,OAAO;WAEM,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAQrC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOjE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOnD,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAK7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAO9B"}
|
package/dist/httpServer.d.ts
CHANGED
|
@@ -1,25 +1,36 @@
|
|
|
1
|
-
import type { IObservable } from '@vscode/observables';
|
|
2
1
|
import { type ILogger } from './logger.js';
|
|
3
|
-
import { SourceTreeId } from './sourceTreeId.js';
|
|
4
2
|
import { ViteProjectRef } from './viteProjectRef.js';
|
|
5
3
|
export interface ViteServerOptions {
|
|
6
4
|
readonly resolveViteFrom?: string;
|
|
7
5
|
readonly logger?: ILogger;
|
|
8
|
-
/** Glob patterns for files that keep HMR. Everything else triggers a full reload. */
|
|
9
6
|
readonly hmrAllowedPaths?: readonly string[];
|
|
7
|
+
readonly daemonConfig?: {
|
|
8
|
+
readonly pipeName: string;
|
|
9
|
+
readonly sessionName: string;
|
|
10
|
+
readonly daemonApiVersion: string;
|
|
11
|
+
readonly pluginProtocolVersion: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface HttpServerOptions {
|
|
15
|
+
readonly cmd?: string;
|
|
16
|
+
readonly cwd?: string;
|
|
17
|
+
readonly logger?: ILogger;
|
|
18
|
+
readonly wait?: {
|
|
19
|
+
readonly stdout?: RegExp;
|
|
20
|
+
readonly stderr?: RegExp;
|
|
21
|
+
};
|
|
10
22
|
}
|
|
11
23
|
export interface ComponentExplorerHttpServerFactory {
|
|
12
24
|
createViteServer(project: ViteProjectRef, options?: ViteServerOptions): Promise<ComponentExplorerHttpServer>;
|
|
13
|
-
|
|
25
|
+
createHttpServer(url: string, options?: HttpServerOptions): Promise<ComponentExplorerHttpServer>;
|
|
14
26
|
}
|
|
15
27
|
export interface ComponentExplorerHttpServer {
|
|
16
28
|
readonly url: string;
|
|
17
|
-
readonly
|
|
18
|
-
readonly sourceTreeId: IObservable<SourceTreeId>;
|
|
29
|
+
readonly onSourceChange?: (callback: () => void) => void;
|
|
19
30
|
dispose(): Promise<void>;
|
|
20
31
|
}
|
|
21
32
|
export declare class DefaultComponentExplorerHttpServerFactory implements ComponentExplorerHttpServerFactory {
|
|
22
33
|
createViteServer(project: ViteProjectRef, options?: ViteServerOptions): Promise<ComponentExplorerHttpServer>;
|
|
23
|
-
|
|
34
|
+
createHttpServer(url: string, options?: HttpServerOptions): Promise<ComponentExplorerHttpServer>;
|
|
24
35
|
}
|
|
25
36
|
//# sourceMappingURL=httpServer.d.ts.map
|
package/dist/httpServer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpServer.d.ts","sourceRoot":"","sources":["../src/httpServer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"httpServer.d.ts","sourceRoot":"","sources":["../src/httpServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,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;CACF;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE;QACf,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACF;AAED,MAAM,WAAW,kCAAkC;IAClD,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC7G,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACjG;AAED,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;AAED,qBAAa,yCAA0C,YAAW,kCAAkC;IAC7F,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAI5G,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAGtG"}
|