@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.
Files changed (281) hide show
  1. package/README.md +14 -6
  2. package/dist/WorktreePool.d.ts +5 -4
  3. package/dist/WorktreePool.d.ts.map +1 -1
  4. package/dist/WorktreePool.js +3 -3
  5. package/dist/WorktreePool.js.map +1 -1
  6. package/dist/_virtual/_build-info.js +1 -1
  7. package/dist/browserPage.d.ts +54 -4
  8. package/dist/browserPage.d.ts.map +1 -1
  9. package/dist/browserPage.js +113 -2
  10. package/dist/browserPage.js.map +1 -1
  11. package/dist/commands/acceptCommand.d.ts +2 -1
  12. package/dist/commands/acceptCommand.d.ts.map +1 -1
  13. package/dist/commands/acceptCommand.js +30 -14
  14. package/dist/commands/acceptCommand.js.map +1 -1
  15. package/dist/commands/checkStabilityCommand.d.ts +3 -0
  16. package/dist/commands/checkStabilityCommand.d.ts.map +1 -1
  17. package/dist/commands/checkStabilityCommand.js +39 -18
  18. package/dist/commands/checkStabilityCommand.js.map +1 -1
  19. package/dist/commands/compareCommand.d.ts +2 -1
  20. package/dist/commands/compareCommand.d.ts.map +1 -1
  21. package/dist/commands/compareCommand.js +53 -25
  22. package/dist/commands/compareCommand.js.map +1 -1
  23. package/dist/commands/inputArg.d.ts +33 -0
  24. package/dist/commands/inputArg.d.ts.map +1 -0
  25. package/dist/commands/inputArg.js +103 -0
  26. package/dist/commands/inputArg.js.map +1 -0
  27. package/dist/commands/mcpCommand.d.ts +3 -0
  28. package/dist/commands/mcpCommand.d.ts.map +1 -1
  29. package/dist/commands/mcpCommand.js +189 -51
  30. package/dist/commands/mcpCommand.js.map +1 -1
  31. package/dist/commands/renderCommand.d.ts +28 -0
  32. package/dist/commands/renderCommand.d.ts.map +1 -0
  33. package/dist/commands/renderCommand.js +495 -0
  34. package/dist/commands/renderCommand.js.map +1 -0
  35. package/dist/commands/serveCommand.d.ts +2 -0
  36. package/dist/commands/serveCommand.d.ts.map +1 -1
  37. package/dist/commands/serveCommand.js +85 -44
  38. package/dist/commands/serveCommand.js.map +1 -1
  39. package/dist/commands/serviceDiffCommitsCommand.d.ts +16 -0
  40. package/dist/commands/serviceDiffCommitsCommand.d.ts.map +1 -0
  41. package/dist/commands/serviceDiffCommitsCommand.js +230 -0
  42. package/dist/commands/serviceDiffCommitsCommand.js.map +1 -0
  43. package/dist/commands/watchCommand.d.ts +2 -0
  44. package/dist/commands/watchCommand.d.ts.map +1 -1
  45. package/dist/commands/watchCommand.js +47 -41
  46. package/dist/commands/watchCommand.js.map +1 -1
  47. package/dist/comparison.d.ts +4 -3
  48. package/dist/comparison.d.ts.map +1 -1
  49. package/dist/comparison.js +17 -14
  50. package/dist/comparison.js.map +1 -1
  51. package/dist/component-explorer-config.schema.json +55 -2
  52. package/dist/componentExplorer.d.ts +122 -20
  53. package/dist/componentExplorer.d.ts.map +1 -1
  54. package/dist/componentExplorer.js +250 -78
  55. package/dist/componentExplorer.js.map +1 -1
  56. package/dist/{watchConfig.d.ts → config.d.ts} +59 -26
  57. package/dist/config.d.ts.map +1 -0
  58. package/dist/{watchConfig.js → config.js} +108 -31
  59. package/dist/config.js.map +1 -0
  60. package/dist/coverage.d.ts +64 -0
  61. package/dist/coverage.d.ts.map +1 -0
  62. package/dist/coverage.js +212 -0
  63. package/dist/coverage.js.map +1 -0
  64. package/dist/daemon/DaemonService.d.ts +17 -8
  65. package/dist/daemon/DaemonService.d.ts.map +1 -1
  66. package/dist/daemon/DaemonService.js +64 -57
  67. package/dist/daemon/DaemonService.js.map +1 -1
  68. package/dist/daemon/approvalStore.d.ts +2 -1
  69. package/dist/daemon/approvalStore.d.ts.map +1 -1
  70. package/dist/daemon/approvalStore.js +4 -3
  71. package/dist/daemon/approvalStore.js.map +1 -1
  72. package/dist/daemon/client.d.ts +5 -0
  73. package/dist/daemon/client.d.ts.map +1 -0
  74. package/dist/daemon/client.js +7 -0
  75. package/dist/daemon/client.js.map +1 -0
  76. package/dist/daemon/inProcessClient.d.ts +11 -0
  77. package/dist/daemon/inProcessClient.d.ts.map +1 -0
  78. package/dist/daemon/inProcessClient.js +35 -0
  79. package/dist/daemon/inProcessClient.js.map +1 -0
  80. package/dist/daemon/lifecycle.d.ts +8 -1
  81. package/dist/daemon/lifecycle.d.ts.map +1 -1
  82. package/dist/daemon/lifecycle.js +13 -3
  83. package/dist/daemon/lifecycle.js.map +1 -1
  84. package/dist/daemon/pipeClient.d.ts +2 -0
  85. package/dist/daemon/pipeClient.d.ts.map +1 -1
  86. package/dist/daemon/pipeClient.js +29 -9
  87. package/dist/daemon/pipeClient.js.map +1 -1
  88. package/dist/daemon/pipeName.d.ts +7 -1
  89. package/dist/daemon/pipeName.d.ts.map +1 -1
  90. package/dist/daemon/pipeName.js +8 -4
  91. package/dist/daemon/pipeName.js.map +1 -1
  92. package/dist/daemon/pipeServer.d.ts.map +1 -1
  93. package/dist/daemon/pipeServer.js +10 -4
  94. package/dist/daemon/pipeServer.js.map +1 -1
  95. package/dist/daemon/version.d.ts +2 -2
  96. package/dist/daemon/version.d.ts.map +1 -1
  97. package/dist/daemon/version.js +2 -2
  98. package/dist/dependencyInstaller.d.ts +3 -2
  99. package/dist/dependencyInstaller.d.ts.map +1 -1
  100. package/dist/dependencyInstaller.js +4 -4
  101. package/dist/dependencyInstaller.js.map +1 -1
  102. package/dist/evaluateFn.d.ts +21 -0
  103. package/dist/evaluateFn.d.ts.map +1 -0
  104. package/dist/evaluateFn.js +17 -0
  105. package/dist/evaluateFn.js.map +1 -0
  106. package/dist/explorerSession.d.ts +2 -3
  107. package/dist/explorerSession.d.ts.map +1 -1
  108. package/dist/explorerSession.js +3 -20
  109. package/dist/explorerSession.js.map +1 -1
  110. package/dist/git/gitCommitResolver.d.ts +2 -1
  111. package/dist/git/gitCommitResolver.d.ts.map +1 -1
  112. package/dist/git/gitCommitResolver.js +8 -8
  113. package/dist/git/gitCommitResolver.js.map +1 -1
  114. package/dist/git/gitIndexResolver.d.ts +2 -1
  115. package/dist/git/gitIndexResolver.d.ts.map +1 -1
  116. package/dist/git/gitIndexResolver.js +7 -7
  117. package/dist/git/gitIndexResolver.js.map +1 -1
  118. package/dist/git/gitService.d.ts +5 -4
  119. package/dist/git/gitService.d.ts.map +1 -1
  120. package/dist/git/gitService.js.map +1 -1
  121. package/dist/git/gitUtils.d.ts +6 -4
  122. package/dist/git/gitUtils.d.ts.map +1 -1
  123. package/dist/git/gitUtils.js +10 -5
  124. package/dist/git/gitUtils.js.map +1 -1
  125. package/dist/git/gitWorktreeManager.d.ts +15 -14
  126. package/dist/git/gitWorktreeManager.d.ts.map +1 -1
  127. package/dist/git/gitWorktreeManager.js +10 -11
  128. package/dist/git/gitWorktreeManager.js.map +1 -1
  129. package/dist/git/testUtils.d.ts +2 -1
  130. package/dist/git/testUtils.d.ts.map +1 -1
  131. package/dist/index.js +21 -3
  132. package/dist/index.js.map +1 -1
  133. package/dist/js-component-explorer/packages/common/dist/explorerUrl.js +21 -0
  134. package/dist/js-component-explorer/packages/common/dist/explorerUrl.js.map +1 -0
  135. package/dist/js-component-explorer/packages/common/dist/renderManifest.js +68 -0
  136. package/dist/js-component-explorer/packages/common/dist/renderManifest.js.map +1 -0
  137. package/dist/js-component-explorer/packages/semver/dist/index.js +186 -0
  138. package/dist/js-component-explorer/packages/semver/dist/index.js.map +1 -0
  139. package/dist/{packages/simple-api/dist/chunk-3R7GHWBM.js → js-component-explorer/packages/simple-api/dist/chunk-FJ7AVNQE.js} +2 -1
  140. package/dist/js-component-explorer/packages/simple-api/dist/chunk-FJ7AVNQE.js.map +1 -0
  141. package/dist/{packages/simple-api/dist/chunk-SGBCNXYH.js → js-component-explorer/packages/simple-api/dist/chunk-TTRCY65Z.js} +4 -1
  142. package/dist/js-component-explorer/packages/simple-api/dist/chunk-TTRCY65Z.js.map +1 -0
  143. package/dist/{packages/simple-api/dist/chunk-TAEFVNPN.js → js-component-explorer/packages/simple-api/dist/chunk-WNXMRXWV.js} +2 -1
  144. package/dist/js-component-explorer/packages/simple-api/dist/chunk-WNXMRXWV.js.map +1 -0
  145. package/dist/{packages → js-component-explorer/packages}/simple-api/dist/express.js +1 -1
  146. package/dist/js-component-explorer/packages/simple-api/dist/express.js.map +1 -0
  147. package/dist/logger.d.ts +12 -1
  148. package/dist/logger.d.ts.map +1 -1
  149. package/dist/logger.js +35 -2
  150. package/dist/logger.js.map +1 -1
  151. package/dist/manifest.schema.json +215 -0
  152. package/dist/mcp/DaemonAccessor.d.ts +22 -0
  153. package/dist/mcp/DaemonAccessor.d.ts.map +1 -0
  154. package/dist/mcp/McpServer.d.ts +5 -19
  155. package/dist/mcp/McpServer.d.ts.map +1 -1
  156. package/dist/mcp/McpServer.js +391 -304
  157. package/dist/mcp/McpServer.js.map +1 -1
  158. package/dist/path.d.ts +30 -0
  159. package/dist/path.d.ts.map +1 -0
  160. package/dist/path.js +78 -0
  161. package/dist/path.js.map +1 -0
  162. package/dist/processTree.d.ts +14 -0
  163. package/dist/processTree.d.ts.map +1 -0
  164. package/dist/processTree.js +84 -0
  165. package/dist/processTree.js.map +1 -0
  166. package/dist/renderManifest.d.ts +5 -0
  167. package/dist/renderManifest.d.ts.map +1 -0
  168. package/dist/renderManifest.js +11 -0
  169. package/dist/renderManifest.js.map +1 -0
  170. package/dist/screenshotServiceClient.d.ts +31 -0
  171. package/dist/screenshotServiceClient.d.ts.map +1 -0
  172. package/dist/screenshotServiceClient.js +38 -0
  173. package/dist/screenshotServiceClient.js.map +1 -0
  174. package/dist/server/httpServer.d.ts +14 -0
  175. package/dist/server/httpServer.d.ts.map +1 -0
  176. package/dist/server/httpServer.js +110 -0
  177. package/dist/server/httpServer.js.map +1 -0
  178. package/dist/server/httpServer.test.d.ts.map +1 -0
  179. package/dist/server/serverConfig.d.ts +59 -0
  180. package/dist/server/serverConfig.d.ts.map +1 -0
  181. package/dist/server/serverConfig.js +53 -0
  182. package/dist/server/serverConfig.js.map +1 -0
  183. package/dist/server/types.d.ts +6 -0
  184. package/dist/server/types.d.ts.map +1 -0
  185. package/dist/server/viteServer.d.ts +31 -0
  186. package/dist/server/viteServer.d.ts.map +1 -0
  187. package/dist/{httpServer.js → server/viteServer.js} +96 -115
  188. package/dist/server/viteServer.js.map +1 -0
  189. package/dist/storage.d.ts +2 -1
  190. package/dist/storage.d.ts.map +1 -1
  191. package/dist/storage.js +1 -1
  192. package/dist/storage.js.map +1 -1
  193. package/dist/utils.d.ts +3 -25
  194. package/dist/utils.d.ts.map +1 -1
  195. package/dist/utils.js +4 -23
  196. package/dist/utils.js.map +1 -1
  197. package/dist/visualCache.d.ts +2 -1
  198. package/dist/visualCache.d.ts.map +1 -1
  199. package/dist/visualCache.js +4 -3
  200. package/dist/visualCache.js.map +1 -1
  201. package/dist/viteProjectRef.d.ts +4 -12
  202. package/dist/viteProjectRef.d.ts.map +1 -1
  203. package/dist/viteProjectRef.js +9 -17
  204. package/dist/viteProjectRef.js.map +1 -1
  205. package/dist/vscode-observables/observables/dist/disposables.js.map +1 -0
  206. package/dist/vscode-observables/observables/dist/observableInternal/base.js.map +1 -0
  207. package/dist/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +1 -0
  208. package/dist/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +1 -0
  209. package/dist/vscode-observables/observables/dist/observableInternal/debugName.js.map +1 -0
  210. package/dist/vscode-observables/observables/dist/observableInternal/index.js.map +1 -0
  211. package/dist/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +1 -0
  212. package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/logging/debugGetDependencyGraph.js +1 -1
  213. package/dist/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js.map +1 -0
  214. package/dist/vscode-observables/observables/dist/observableInternal/logging/logging.js.map +1 -0
  215. package/dist/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +1 -0
  216. package/dist/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +1 -0
  217. package/dist/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js.map +1 -0
  218. package/dist/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js.map +1 -0
  219. package/dist/vscode-observables/observables/dist/observableInternal/observables/observableValue.js.map +1 -0
  220. package/dist/{external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js → vscode-observables/observables/dist/observableInternal/reactions/createEffect.js} +9 -5
  221. package/dist/vscode-observables/observables/dist/observableInternal/reactions/createEffect.js.map +1 -0
  222. package/dist/{external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js → vscode-observables/observables/dist/observableInternal/reactions/createEffectImpl.js} +1 -1
  223. package/dist/vscode-observables/observables/dist/observableInternal/reactions/createEffectImpl.js.map +1 -0
  224. package/dist/vscode-observables/observables/dist/observableInternal/transaction.js.map +1 -0
  225. package/dist/vscode-observables/observables/dist/observableInternal/utils/utils.js.map +1 -0
  226. package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/utils/utilsCancellation.js +2 -2
  227. package/dist/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js.map +1 -0
  228. package/package.json +34 -22
  229. package/dist/commands/screenshotCommand.d.ts +0 -18
  230. package/dist/commands/screenshotCommand.d.ts.map +0 -1
  231. package/dist/commands/screenshotCommand.js +0 -127
  232. package/dist/commands/screenshotCommand.js.map +0 -1
  233. package/dist/external/vscode-observables/observables/dist/disposables.js.map +0 -1
  234. package/dist/external/vscode-observables/observables/dist/observableInternal/base.js.map +0 -1
  235. package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +0 -1
  236. package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +0 -1
  237. package/dist/external/vscode-observables/observables/dist/observableInternal/debugName.js.map +0 -1
  238. package/dist/external/vscode-observables/observables/dist/observableInternal/index.js.map +0 -1
  239. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +0 -1
  240. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js.map +0 -1
  241. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/logging.js.map +0 -1
  242. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +0 -1
  243. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +0 -1
  244. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js.map +0 -1
  245. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js.map +0 -1
  246. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js.map +0 -1
  247. package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js.map +0 -1
  248. package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js.map +0 -1
  249. package/dist/external/vscode-observables/observables/dist/observableInternal/transaction.js.map +0 -1
  250. package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utils.js.map +0 -1
  251. package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js.map +0 -1
  252. package/dist/httpServer.d.ts +0 -36
  253. package/dist/httpServer.d.ts.map +0 -1
  254. package/dist/httpServer.js.map +0 -1
  255. package/dist/httpServer.test.d.ts.map +0 -1
  256. package/dist/packages/simple-api/dist/chunk-3R7GHWBM.js.map +0 -1
  257. package/dist/packages/simple-api/dist/chunk-SGBCNXYH.js.map +0 -1
  258. package/dist/packages/simple-api/dist/chunk-TAEFVNPN.js.map +0 -1
  259. package/dist/packages/simple-api/dist/express.js.map +0 -1
  260. package/dist/resolveProject.d.ts +0 -21
  261. package/dist/resolveProject.d.ts.map +0 -1
  262. package/dist/resolveProject.js +0 -39
  263. package/dist/resolveProject.js.map +0 -1
  264. package/dist/watchConfig.d.ts.map +0 -1
  265. package/dist/watchConfig.js.map +0 -1
  266. /package/dist/{httpServer.test.d.ts → server/httpServer.test.d.ts} +0 -0
  267. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/disposables.js +0 -0
  268. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/base.js +0 -0
  269. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/commonFacade/deps.js +0 -0
  270. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/debugLocation.js +0 -0
  271. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/debugName.js +0 -0
  272. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/index.js +0 -0
  273. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/logging/consoleObservableLogger.js +0 -0
  274. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/logging/logging.js +0 -0
  275. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/baseObservable.js +0 -0
  276. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/derived.js +0 -0
  277. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/derivedImpl.js +0 -0
  278. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/observableFromEvent.js +0 -0
  279. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/observableValue.js +0 -0
  280. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/transaction.js +0 -0
  281. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/utils/utils.js +0 -0
@@ -0,0 +1,212 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import libCoverage from 'istanbul-lib-coverage';
5
+ import v8ToIstanbul from 'v8-to-istanbul';
6
+
7
+ const { createCoverageMap } = libCoverage;
8
+ /**
9
+ * Reads `window.__coverage__` produced by vite-plugin-istanbul and validates
10
+ * it has the Istanbul shape. Returns an empty map if the global is not present.
11
+ */
12
+ function validateIstanbulMap(raw, logger) {
13
+ if (!raw || typeof raw !== 'object') {
14
+ logger.debug('No __coverage__ global found on the page (or not an object)');
15
+ return {};
16
+ }
17
+ const map = raw;
18
+ const out = {};
19
+ for (const [, value] of Object.entries(map)) {
20
+ if (!value || typeof value !== 'object') {
21
+ continue;
22
+ }
23
+ const v = value;
24
+ if (typeof v.path !== 'string' || !v.statementMap || !v.s) {
25
+ continue;
26
+ }
27
+ // Normalize the path to OS-native absolute (e.g. `D:/foo` → `D:\foo` on Windows).
28
+ const absPath = path.resolve(v.path);
29
+ out[absPath] = { ...v, path: absPath };
30
+ }
31
+ return out;
32
+ }
33
+ /**
34
+ * Convert raw V8 JS coverage entries (from Playwright) into an Istanbul-shaped
35
+ * coverage map. Entries without source content or with non-resolvable URLs
36
+ * are skipped.
37
+ */
38
+ async function v8EntriesToIstanbul(entries, options) {
39
+ const { viteServerUrl, projectRoot, logger } = options;
40
+ const map = createCoverageMap({});
41
+ const baseUrl = viteServerUrl.endsWith('/') ? viteServerUrl.slice(0, -1) : viteServerUrl;
42
+ for (const entry of entries) {
43
+ if (!entry.source) {
44
+ logger.trace(`v8: skipping ${entry.url} (no source)`);
45
+ continue;
46
+ }
47
+ const filePath = _v8UrlToFsPath(entry.url, baseUrl, projectRoot.value);
48
+ if (!filePath) {
49
+ logger.trace(`v8: skipping ${entry.url} (cannot resolve to fs path)`);
50
+ continue;
51
+ }
52
+ if (options.exclude?.some(re => re.test(filePath))) {
53
+ logger.trace(`v8: excluded ${filePath}`);
54
+ continue;
55
+ }
56
+ if (options.include && !options.include.some(re => re.test(filePath))) {
57
+ logger.trace(`v8: not included ${filePath}`);
58
+ continue;
59
+ }
60
+ try {
61
+ const converter = v8ToIstanbul(filePath, 0, { source: entry.source });
62
+ await converter.load();
63
+ converter.applyCoverage(entry.functions);
64
+ const istanbul = converter.toIstanbul();
65
+ for (const fileCoverage of Object.values(istanbul)) {
66
+ map.merge({ [fileCoverage.path]: fileCoverage });
67
+ }
68
+ converter.destroy();
69
+ }
70
+ catch (err) {
71
+ logger.debug(`v8: failed to convert ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
72
+ }
73
+ }
74
+ return JSON.parse(JSON.stringify(map.toJSON()));
75
+ }
76
+ /** Merge multiple Istanbul coverage maps into one (file/statement/branch hit counts summed). */
77
+ function mergeIstanbul(maps) {
78
+ const merged = createCoverageMap({});
79
+ for (const m of maps) {
80
+ merged.merge(m);
81
+ }
82
+ return JSON.parse(JSON.stringify(merged.toJSON()));
83
+ }
84
+ /**
85
+ * Convert raw Playwright CSS coverage entries into an Istanbul-shaped coverage
86
+ * map by treating each non-blank line as a statement. A line is considered
87
+ * "hit" if any covered byte-range overlaps with the line's character range.
88
+ *
89
+ * This lets CSS files appear in the same `coverage-final.json` as JS sources,
90
+ * so any tool that consumes Istanbul coverage (nyc, the coverage viewer, etc.)
91
+ * renders CSS as if it were source code.
92
+ */
93
+ function cssEntriesToIstanbul(entries, options) {
94
+ const { viteServerUrl, projectRoot, logger } = options;
95
+ const baseUrl = viteServerUrl.endsWith('/') ? viteServerUrl.slice(0, -1) : viteServerUrl;
96
+ const out = {};
97
+ for (const entry of entries) {
98
+ if (!entry.text) {
99
+ logger.trace(`css: skipping ${entry.url} (no text)`);
100
+ continue;
101
+ }
102
+ const filePath = _v8UrlToFsPath(entry.url, baseUrl, projectRoot.value);
103
+ if (!filePath) {
104
+ logger.trace(`css: skipping ${entry.url} (cannot resolve to fs path)`);
105
+ continue;
106
+ }
107
+ if (options.exclude?.some(re => re.test(filePath))) {
108
+ logger.trace(`css: excluded ${filePath}`);
109
+ continue;
110
+ }
111
+ if (options.include && !options.include.some(re => re.test(filePath))) {
112
+ logger.trace(`css: not included ${filePath}`);
113
+ continue;
114
+ }
115
+ const lines = entry.text.split('\n');
116
+ const statementMap = {};
117
+ const s = {};
118
+ let offset = 0;
119
+ let nextId = 0;
120
+ for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {
121
+ const line = lines[lineIdx];
122
+ const lineStart = offset;
123
+ const lineEnd = offset + line.length;
124
+ offset = lineEnd + 1; // account for the '\n' that split() consumed
125
+ if (line.trim() === '') {
126
+ continue;
127
+ }
128
+ const id = String(nextId++);
129
+ statementMap[id] = {
130
+ start: { line: lineIdx + 1, column: 0 },
131
+ end: { line: lineIdx + 1, column: line.length },
132
+ };
133
+ const hit = entry.ranges.some(r => r.start < lineEnd && r.end > lineStart);
134
+ s[id] = hit ? 1 : 0;
135
+ }
136
+ // If we've already seen this file (e.g. multiple stylesheet records for
137
+ // the same URL — happens when a reload re-loads the same .css), merge
138
+ // hit counts: a line is covered if it was hit in any record. We assume
139
+ // the text is identical across records of the same URL; if it differs
140
+ // (post-reload edit), the first record's text wins.
141
+ const existing = out[filePath];
142
+ if (existing) {
143
+ for (const id of Object.keys(existing.s)) {
144
+ if (s[id] && s[id] > 0) {
145
+ existing.s[id] = (existing.s[id] ?? 0) + s[id];
146
+ }
147
+ }
148
+ continue;
149
+ }
150
+ out[filePath] = {
151
+ path: filePath,
152
+ statementMap,
153
+ fnMap: {},
154
+ branchMap: {},
155
+ s,
156
+ f: {},
157
+ b: {},
158
+ };
159
+ }
160
+ return out;
161
+ }
162
+ /** Write a bare Istanbul coverage map (`coverage-final.json` format) to disk. */
163
+ async function writeIstanbulFile(filePath, map) {
164
+ await fs.mkdir(path.dirname(filePath.value), { recursive: true });
165
+ await fs.writeFile(filePath.value, JSON.stringify(map, null, 2) + '\n', 'utf-8');
166
+ }
167
+ function _v8UrlToFsPath(url, viteServerBase, projectRoot) {
168
+ // file:// urls are direct
169
+ if (url.startsWith('file://')) {
170
+ try {
171
+ return path.resolve(fileURLToPath(url));
172
+ }
173
+ catch {
174
+ return undefined;
175
+ }
176
+ }
177
+ let urlPath;
178
+ if (url.startsWith(viteServerBase)) {
179
+ const tail = url.slice(viteServerBase.length).split('?')[0].split('#')[0];
180
+ urlPath = tail.startsWith('/') ? tail : `/${tail}`;
181
+ }
182
+ else if (url.startsWith('/') && !url.startsWith('//')) {
183
+ // Root-relative URLs (e.g. `/src/foo.css`) — produced by sourceURL
184
+ // annotations on inline stylesheets, or stripped from a server URL.
185
+ urlPath = url.split('?')[0].split('#')[0];
186
+ }
187
+ else {
188
+ // External URLs (CDN, etc.) — skip
189
+ return undefined;
190
+ }
191
+ // `/@fs/<abs>` is Vite's escape hatch for files outside the project root,
192
+ // where `<abs>` is already an absolute disk path (POSIX-encoded on Windows).
193
+ const fsMatch = /^\/@fs\/(.+)$/.exec(urlPath);
194
+ if (fsMatch) {
195
+ return path.resolve(decodeURIComponent(fsMatch[1]));
196
+ }
197
+ // Strip Vite-internal prefixes that aren't real files.
198
+ if (urlPath.startsWith('/@id/') || urlPath.startsWith('/@vite/') || urlPath.startsWith('/@react-refresh')) {
199
+ return undefined;
200
+ }
201
+ // Skip the explorer's own virtual HTML route (carries an inline <style>
202
+ // with the page reset rules — not a source file we want to cover).
203
+ if (urlPath === '/___explorer' || urlPath.startsWith('/___explorer.')) {
204
+ return undefined;
205
+ }
206
+ // Resolve against the project root. We use posix join then resolve to get a
207
+ // canonical OS-native absolute path (e.g. on Windows: D:\proj\src\foo.css).
208
+ return path.resolve(projectRoot, urlPath.replace(/^\/+/, ''));
209
+ }
210
+
211
+ export { cssEntriesToIstanbul, mergeIstanbul, v8EntriesToIstanbul, validateIstanbulMap, writeIstanbulFile };
212
+ //# sourceMappingURL=coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.js","sources":["../src/coverage.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { type IDisposable, type IReader } from '@vscode/observables';
2
2
  import { AsyncStream } from '@hediet/simple-api';
3
3
  import { ExplorerSession } from '../explorerSession.js';
4
- import type { ResolvedWatchConfig } from '../watchConfig.js';
4
+ import { type ResolvedConfig } from '../config.js';
5
5
  import { type ILogger } from '../logger.js';
6
6
  import { type ApprovalStore } from './approvalStore.js';
7
7
  import { VisualCache } from '../visualCache.js';
@@ -64,7 +64,6 @@ export declare class DaemonService {
64
64
  private readonly _pipeName;
65
65
  private readonly _logger;
66
66
  private readonly _browserFactory;
67
- private readonly _serverFactory;
68
67
  private readonly _sessions;
69
68
  private readonly _sessionConfigs;
70
69
  private readonly _dynamicSessionMeta;
@@ -91,6 +90,9 @@ export declare class DaemonService {
91
90
  sessionName: string;
92
91
  includeImage?: boolean | undefined;
93
92
  stabilityCheck?: boolean | undefined;
93
+ reloadBeforeRender?: boolean | undefined;
94
+ input?: unknown;
95
+ disposeAfter?: boolean | undefined;
94
96
  }, {
95
97
  hash: string;
96
98
  sourceTreeId: string;
@@ -98,13 +100,15 @@ export declare class DaemonService {
98
100
  hasError: boolean;
99
101
  error: import("../componentExplorer.js").ExceptionError | undefined;
100
102
  events: import("../componentExplorer.js").RenderEvent[] | undefined;
101
- resultData: unknown;
103
+ output: unknown;
102
104
  isStable: boolean;
103
105
  stabilityScreenshots: {
104
106
  hash: string;
105
107
  delayMs: number;
106
108
  image: string | undefined;
107
109
  }[];
110
+ previousDispose: import("../componentExplorer.js").DisposeReport | undefined;
111
+ currentDispose: import("../componentExplorer.js").DisposeReport | undefined;
108
112
  } | {
109
113
  hash: string | undefined;
110
114
  sourceTreeId: string;
@@ -112,7 +116,9 @@ export declare class DaemonService {
112
116
  hasError: boolean;
113
117
  error: import("../componentExplorer.js").ExceptionError | undefined;
114
118
  events: import("../componentExplorer.js").RenderEvent[] | undefined;
115
- resultData: unknown;
119
+ output: unknown;
120
+ previousDispose: import("../componentExplorer.js").DisposeReport | undefined;
121
+ currentDispose: import("../componentExplorer.js").DisposeReport | undefined;
116
122
  isStable?: undefined;
117
123
  stabilityScreenshots?: undefined;
118
124
  }, DaemonContext>;
@@ -121,6 +127,8 @@ export declare class DaemonService {
121
127
  sourceTreeId: string;
122
128
  sessionName: string;
123
129
  includeImages?: boolean | undefined;
130
+ reloadBetweenFixtures?: boolean | undefined;
131
+ input?: unknown;
124
132
  }, {
125
133
  sourceTreeId: string;
126
134
  screenshots: {
@@ -130,7 +138,7 @@ export declare class DaemonService {
130
138
  hasError: boolean;
131
139
  error: import("../componentExplorer.js").ExceptionError | undefined;
132
140
  events: import("../componentExplorer.js").RenderEvent[] | undefined;
133
- resultData: unknown;
141
+ output: unknown;
134
142
  }[];
135
143
  }, DaemonContext>;
136
144
  compare: import("@hediet/simple-api").IMethod<{
@@ -149,11 +157,11 @@ export declare class DaemonService {
149
157
  baselineHasError: boolean;
150
158
  baselineError: import("../componentExplorer.js").ExceptionError | undefined;
151
159
  baselineEvents: import("../componentExplorer.js").RenderEvent[] | undefined;
152
- baselineResultData: unknown;
160
+ baselineOutput: unknown;
153
161
  currentHasError: boolean;
154
162
  currentError: import("../componentExplorer.js").ExceptionError | undefined;
155
163
  currentEvents: import("../componentExplorer.js").RenderEvent[] | undefined;
156
- currentResultData: unknown;
164
+ currentOutput: unknown;
157
165
  labels: readonly string[] | undefined;
158
166
  labelsBefore: readonly string[] | undefined;
159
167
  approval: import("./approvalStore.js").ApprovalInfo | undefined;
@@ -241,7 +249,7 @@ export declare class DaemonService {
241
249
  shutdown: import("@hediet/simple-api").IMethod<Record<string, never>, void, DaemonContext>;
242
250
  }>, DaemonContext>;
243
251
  private constructor();
244
- static create(config: ResolvedWatchConfig, logger: ILogger, pipeName?: string, options?: {
252
+ static create(config: ResolvedConfig, logger: ILogger, pipeName?: string, options?: {
245
253
  idleTimeoutMs?: number;
246
254
  headed?: boolean;
247
255
  }): Promise<DaemonService>;
@@ -264,6 +272,7 @@ export declare class DaemonService {
264
272
  dispose(): Promise<void>;
265
273
  private _emit;
266
274
  private _restartSession;
275
+ private _serverContext;
267
276
  private _createExplorerSession;
268
277
  private _createWorktreeExplorerSession;
269
278
  private _setupSession;
@@ -1 +1 @@
1
- {"version":3,"file":"DaemonService.d.ts","sourceRoot":"","sources":["../../src/daemon/DaemonService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DaemonService.d.ts","sourceRoot":"","sources":["../../src/daemon/DaemonService.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,29 @@
1
1
  import { z } from 'zod';
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 { autorun } from '../external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js';
7
- import { derived } from '../external/vscode-observables/observables/dist/observableInternal/observables/derived.js';
8
- import { waitForState } from '../external/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js';
9
- import '../external/vscode-observables/observables/dist/observableInternal/utils/utils.js';
10
- import '../external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
11
- import { createApiFactory } from '../packages/simple-api/dist/chunk-3R7GHWBM.js';
12
- import { AsyncStream } from '../packages/simple-api/dist/chunk-SGBCNXYH.js';
2
+ import '../vscode-observables/observables/dist/observableInternal/index.js';
3
+ import { observableValue } from '../vscode-observables/observables/dist/observableInternal/observables/observableValue.js';
4
+ import '../vscode-observables/observables/dist/observableInternal/debugLocation.js';
5
+ import { autorun } from '../vscode-observables/observables/dist/observableInternal/reactions/createEffect.js';
6
+ import { derived } from '../vscode-observables/observables/dist/observableInternal/observables/derived.js';
7
+ import { waitForState } from '../vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js';
8
+ import '../vscode-observables/observables/dist/observableInternal/utils/utils.js';
9
+ import '../vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
10
+ import { createApiFactory } from '../js-component-explorer/packages/simple-api/dist/chunk-FJ7AVNQE.js';
11
+ import { AsyncStream } from '../js-component-explorer/packages/simple-api/dist/chunk-TTRCY65Z.js';
13
12
  import { ExplorerSession } from '../explorerSession.js';
13
+ import '../config.js';
14
+ import { RelativePath } from '../path.js';
14
15
  import { GitIndexResolver } from '../git/gitIndexResolver.js';
15
16
  import { DirtyWorktreeError } from '../git/gitWorktreeManager.js';
16
17
  import { execGit } from '../git/gitUtils.js';
17
18
  import { PlaywrightBrowserPageFactory } from '../browserPage.js';
18
- import { DefaultComponentExplorerHttpServerFactory } from '../httpServer.js';
19
19
  import { installDependencies } from '../dependencyInstaller.js';
20
20
  import { FileApprovalStore } from './approvalStore.js';
21
21
  import { VisualCache } from '../visualCache.js';
22
22
  import { contentHash } from '../screenshotCache.js';
23
23
  import { WorktreePool } from '../WorktreePool.js';
24
- import { ViteProjectRef } from '../viteProjectRef.js';
25
24
  import { pluginProtocolVersionText, daemonApiVersionText } from './version.js';
26
25
  export { isCompatibleVersion, parseVersion } from './version.js';
26
+ import { ViteServerConfig } from '../server/serverConfig.js';
27
27
 
28
28
  // ---------------------------------------------------------------------------
29
29
  // ActivityTracker — monitors idle time and triggers shutdown
@@ -96,7 +96,6 @@ class DaemonService {
96
96
  _pipeName;
97
97
  _logger;
98
98
  _browserFactory;
99
- _serverFactory;
100
99
  _sessions = new Map();
101
100
  _sessionConfigs = new Map();
102
101
  _dynamicSessionMeta = new Map();
@@ -110,14 +109,13 @@ class DaemonService {
110
109
  approvals;
111
110
  visualCache;
112
111
  api;
113
- constructor(_config, _pipeName, _logger, _browserFactory, _serverFactory, approvalStorePath, idleTimeoutMs) {
112
+ constructor(_config, _pipeName, _logger, _browserFactory, approvalStorePath, idleTimeoutMs) {
114
113
  this._config = _config;
115
114
  this._pipeName = _pipeName;
116
115
  this._logger = _logger;
117
116
  this._browserFactory = _browserFactory;
118
- this._serverFactory = _serverFactory;
119
117
  this.approvals = new FileApprovalStore(approvalStorePath);
120
- this.visualCache = new VisualCache(`${_config.screenshotDir}/visual-cache.json`);
118
+ this.visualCache = new VisualCache(_config.screenshotDir.join(new RelativePath('visual-cache.json')));
121
119
  this._activityTracker = new ActivityTracker(idleTimeoutMs, () => this.requestShutdown(), this._logger);
122
120
  if (_config.worktreePool) {
123
121
  this._worktreePool = new WorktreePool(_config.worktreePool.maxSlots, _config.repo.worktreeRootPath());
@@ -126,10 +124,9 @@ class DaemonService {
126
124
  }
127
125
  static async create(config, logger, pipeName, options) {
128
126
  const browserFactory = new PlaywrightBrowserPageFactory(options?.headed ?? false, 30_000, logger);
129
- const serverFactory = new DefaultComponentExplorerHttpServerFactory();
130
- const approvalStorePath = `${config.screenshotDir}/approvals.json`;
127
+ const approvalStorePath = config.screenshotDir.join(new RelativePath('approvals.json'));
131
128
  const idleTimeoutMs = options?.idleTimeoutMs ?? 5 * 60 * 1000; // 5 minutes default
132
- const svc = new DaemonService(config, pipeName ?? '', logger, browserFactory, serverFactory, approvalStorePath, idleTimeoutMs);
129
+ const svc = new DaemonService(config, pipeName, logger, browserFactory, approvalStorePath, idleTimeoutMs);
133
130
  for (const sessionConfig of config.sessions) {
134
131
  svc._sessionConfigs.set(sessionConfig.name, sessionConfig);
135
132
  await svc._setupSession(sessionConfig);
@@ -163,13 +160,20 @@ class DaemonService {
163
160
  sessionName: z.string(),
164
161
  includeImage: z.boolean().optional(),
165
162
  stabilityCheck: z.boolean().optional(),
163
+ reloadBeforeRender: z.boolean().optional(),
164
+ input: z.unknown().optional(),
165
+ disposeAfter: z.boolean().optional(),
166
166
  },
167
167
  }, async (args) => {
168
168
  this._activityTracker.reportActivity();
169
169
  const session = this.getSession(args.sessionName);
170
170
  this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
171
171
  if (args.stabilityCheck) {
172
- const result = await session.explorer.screenshotFixtureStabilityCheck(args.fixtureId);
172
+ const result = await session.explorer.screenshotFixtureStabilityCheck(args.fixtureId, {
173
+ reloadBeforeRender: args.reloadBeforeRender,
174
+ input: args.input,
175
+ disposeAfter: args.disposeAfter,
176
+ });
173
177
  this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
174
178
  const hashes = result.screenshots.map(s => contentHash(s.image));
175
179
  const isStable = hashes[0] === hashes[1] && hashes[1] === hashes[2];
@@ -189,12 +193,18 @@ class DaemonService {
189
193
  hasError: result.hasError,
190
194
  error: result.error,
191
195
  events: result.events.length > 0 ? result.events : undefined,
192
- resultData: result.resultData,
196
+ output: result.output,
193
197
  isStable,
194
198
  stabilityScreenshots,
199
+ previousDispose: result.previousDispose,
200
+ currentDispose: result.currentDispose,
195
201
  };
196
202
  }
197
- const result = await session.explorer.screenshotFixture(args.fixtureId);
203
+ const result = await session.explorer.screenshotFixture(args.fixtureId, {
204
+ reloadBeforeRender: args.reloadBeforeRender,
205
+ input: args.input,
206
+ disposeAfter: args.disposeAfter,
207
+ });
198
208
  this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
199
209
  return {
200
210
  hash: result.image ? contentHash(result.image) : undefined,
@@ -205,7 +215,9 @@ class DaemonService {
205
215
  hasError: result.hasError,
206
216
  error: result.error,
207
217
  events: result.events?.length > 0 ? result.events : undefined,
208
- resultData: result.resultData,
218
+ output: result.output,
219
+ previousDispose: result.previousDispose,
220
+ currentDispose: result.currentDispose,
209
221
  };
210
222
  }),
211
223
  takeBatch: createMethod({
@@ -214,6 +226,8 @@ class DaemonService {
214
226
  sourceTreeId: z.string(),
215
227
  sessionName: z.string(),
216
228
  includeImages: z.boolean().optional(),
229
+ reloadBetweenFixtures: z.boolean().optional(),
230
+ input: z.unknown().optional(),
217
231
  },
218
232
  }, async (args) => {
219
233
  this._activityTracker.reportActivity();
@@ -223,8 +237,14 @@ class DaemonService {
223
237
  this._logger.trace(`takeBatch: ${args.fixtureIds.length} fixtures, session=${args.sessionName}`);
224
238
  const startTime = Date.now();
225
239
  const screenshots = [];
226
- for (const fixtureId of args.fixtureIds) {
227
- const result = await session.explorer.screenshotFixture(fixtureId);
240
+ for (let i = 0; i < args.fixtureIds.length; i++) {
241
+ const fixtureId = args.fixtureIds[i];
242
+ const result = await session.explorer.screenshotFixture(fixtureId, {
243
+ reloadOnError: true,
244
+ // Reload between fixtures (skip before the first one — the page is already fresh)
245
+ reloadBeforeRender: args.reloadBetweenFixtures && i > 0,
246
+ input: args.input,
247
+ });
228
248
  this.assertSourceTreeId(args.sessionName, args.sourceTreeId);
229
249
  screenshots.push({
230
250
  fixtureId,
@@ -235,7 +255,7 @@ class DaemonService {
235
255
  hasError: result.hasError,
236
256
  error: result.error,
237
257
  events: result.events.length > 0 ? result.events : undefined,
238
- resultData: result.resultData,
258
+ output: result.output,
239
259
  });
240
260
  }
241
261
  this._logger.trace(`takeBatch: done in ${Date.now() - startTime}ms`);
@@ -284,11 +304,11 @@ class DaemonService {
284
304
  baselineHasError: baselineResult.hasError,
285
305
  baselineError: baselineResult.error,
286
306
  baselineEvents: baselineResult.events.length > 0 ? baselineResult.events : undefined,
287
- baselineResultData: baselineResult.resultData,
307
+ baselineOutput: baselineResult.output,
288
308
  currentHasError: currentResult.hasError,
289
309
  currentError: currentResult.error,
290
310
  currentEvents: currentResult.events.length > 0 ? currentResult.events : undefined,
291
- currentResultData: currentResult.resultData,
311
+ currentOutput: currentResult.output,
292
312
  labels,
293
313
  labelsBefore: labelsChanged ? baselineFixture.labels : undefined,
294
314
  approval: (baselineHash !== undefined && currentHash !== undefined && baselineHash !== currentHash)
@@ -470,7 +490,7 @@ class DaemonService {
470
490
  sourceKind: 'worktree',
471
491
  serverUrl: session.serverUrl,
472
492
  sourceTreeId: reader ? session.sourceTreeId.read(reader).value : session.sourceTreeId.get().value,
473
- worktreePath: meta.worktreePath,
493
+ worktreePath: meta.worktreePath.value,
474
494
  ref: meta.ref,
475
495
  });
476
496
  }
@@ -498,7 +518,7 @@ class DaemonService {
498
518
  sourceKind: 'worktree',
499
519
  serverUrl: session.serverUrl,
500
520
  sourceTreeId: reader ? session.sourceTreeId.read(reader).value : session.sourceTreeId.get().value,
501
- worktreePath: meta.worktreePath,
521
+ worktreePath: meta.worktreePath.value,
502
522
  ref: meta.ref,
503
523
  });
504
524
  }
@@ -707,43 +727,30 @@ class DaemonService {
707
727
  await this._createExplorerSession(config);
708
728
  }
709
729
  }
710
- async _createExplorerSession(sessionConfig) {
711
- const session = await ExplorerSession.create(sessionConfig.name, sessionConfig.server, this._serverFactory, this._browserFactory, {
730
+ _serverContext(sessionName) {
731
+ return {
712
732
  logger: this._logger,
713
- daemonConfig: {
733
+ daemonConfig: this._pipeName ? {
714
734
  pipeName: this._pipeName,
715
- sessionName: sessionConfig.name,
735
+ sessionName,
716
736
  daemonApiVersion: daemonApiVersionText,
717
737
  pluginProtocolVersion: pluginProtocolVersionText,
718
- },
719
- });
738
+ } : undefined,
739
+ };
740
+ }
741
+ async _createExplorerSession(sessionConfig) {
742
+ const session = await ExplorerSession.create(sessionConfig.name, sessionConfig.server, this._browserFactory, this._serverContext(sessionConfig.name));
720
743
  this._sessions.set(sessionConfig.name, session);
721
744
  this._logger.debug(`Session ready: ${sessionConfig.name} (${session.serverUrl})`);
722
745
  }
723
746
  async _createWorktreeExplorerSession(sessionName, worktreePath) {
724
747
  const defaultServer = this._config.defaultServerConfig;
725
- if (defaultServer.kind !== 'vite') {
748
+ if (!(defaultServer instanceof ViteServerConfig)) {
726
749
  throw new Error(`Worktree sessions require a Vite server configuration`);
727
750
  }
728
- const configDirRelToGitRoot = path.relative(this._config.repo.gitRoot, this._config.configDir);
729
- const worktreeConfigDir = path.resolve(worktreePath, configDirRelToGitRoot);
730
- const defaultViteConfig = path.basename(defaultServer.viteProject.configFile ?? 'vite.config.ts');
731
- const viteConfigPath = path.resolve(worktreeConfigDir, defaultViteConfig);
732
- const viteProject = ViteProjectRef.fromViteConfigPath(viteConfigPath);
733
- const currentSession = this._config.sessions.find(s => s.source.kind === 'current');
734
- const resolveViteFrom = currentSession?.server.kind === 'vite' ? currentSession.server.viteProject.configFile : undefined;
735
- this._logger.debug(`Worktree session "${sessionName}": resolveViteFrom=${resolveViteFrom}`);
736
- const worktreeServerConfig = { kind: 'vite', viteProject, hmr: defaultServer.hmr };
737
- const session = await ExplorerSession.create(sessionName, worktreeServerConfig, this._serverFactory, this._browserFactory, {
738
- logger: this._logger,
739
- resolveViteFrom,
740
- daemonConfig: {
741
- pipeName: this._pipeName,
742
- sessionName,
743
- daemonApiVersion: daemonApiVersionText,
744
- pluginProtocolVersion: pluginProtocolVersionText,
745
- },
746
- });
751
+ const worktreeServerConfig = defaultServer.forWorktree(this._config.repo.gitRoot, worktreePath, this._config.configDir);
752
+ this._logger.debug(`Worktree session "${sessionName}": resolveViteFrom=${worktreeServerConfig.viteProject.configFile}`);
753
+ const session = await ExplorerSession.create(sessionName, worktreeServerConfig, this._browserFactory, this._serverContext(sessionName));
747
754
  this._sessions.set(sessionName, session);
748
755
  this._logger.debug(`Session ready: ${sessionName} (${session.serverUrl})`);
749
756
  }