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