@vscode/component-explorer-cli 0.2.1-16 → 0.2.1-161

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 (239) hide show
  1. package/README.md +40 -12
  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 +55 -1
  8. package/dist/browserPage.d.ts.map +1 -1
  9. package/dist/browserPage.js +103 -7
  10. package/dist/browserPage.js.map +1 -1
  11. package/dist/browserPage.test.d.ts +2 -0
  12. package/dist/browserPage.test.d.ts.map +1 -0
  13. package/dist/commands/acceptCommand.d.ts +1 -1
  14. package/dist/commands/acceptCommand.d.ts.map +1 -1
  15. package/dist/commands/acceptCommand.js +21 -14
  16. package/dist/commands/acceptCommand.js.map +1 -1
  17. package/dist/commands/checkStabilityCommand.d.ts +2 -0
  18. package/dist/commands/checkStabilityCommand.d.ts.map +1 -1
  19. package/dist/commands/checkStabilityCommand.js +25 -8
  20. package/dist/commands/checkStabilityCommand.js.map +1 -1
  21. package/dist/commands/compareCommand.d.ts +1 -1
  22. package/dist/commands/compareCommand.d.ts.map +1 -1
  23. package/dist/commands/compareCommand.js +31 -22
  24. package/dist/commands/compareCommand.js.map +1 -1
  25. package/dist/commands/inputArg.d.ts +33 -0
  26. package/dist/commands/inputArg.d.ts.map +1 -0
  27. package/dist/commands/inputArg.js +103 -0
  28. package/dist/commands/inputArg.js.map +1 -0
  29. package/dist/commands/mcpCommand.d.ts.map +1 -1
  30. package/dist/commands/mcpCommand.js +12 -11
  31. package/dist/commands/mcpCommand.js.map +1 -1
  32. package/dist/commands/renderCommand.d.ts +10 -1
  33. package/dist/commands/renderCommand.d.ts.map +1 -1
  34. package/dist/commands/renderCommand.js +390 -61
  35. package/dist/commands/renderCommand.js.map +1 -1
  36. package/dist/commands/renderCommand.test.d.ts +2 -0
  37. package/dist/commands/renderCommand.test.d.ts.map +1 -0
  38. package/dist/commands/serveCommand.d.ts.map +1 -1
  39. package/dist/commands/serveCommand.js +14 -11
  40. package/dist/commands/serveCommand.js.map +1 -1
  41. package/dist/commands/serviceDiffCommitsCommand.d.ts.map +1 -1
  42. package/dist/commands/serviceDiffCommitsCommand.js +10 -9
  43. package/dist/commands/serviceDiffCommitsCommand.js.map +1 -1
  44. package/dist/commands/watchCommand.d.ts +1 -0
  45. package/dist/commands/watchCommand.d.ts.map +1 -1
  46. package/dist/commands/watchCommand.js +31 -20
  47. package/dist/commands/watchCommand.js.map +1 -1
  48. package/dist/comparison.d.ts +4 -3
  49. package/dist/comparison.d.ts.map +1 -1
  50. package/dist/comparison.js +17 -14
  51. package/dist/comparison.js.map +1 -1
  52. package/dist/component-explorer-config.schema.json +55 -2
  53. package/dist/componentExplorer.d.ts +110 -12
  54. package/dist/componentExplorer.d.ts.map +1 -1
  55. package/dist/componentExplorer.js +177 -24
  56. package/dist/componentExplorer.js.map +1 -1
  57. package/dist/config.d.ts +33 -4
  58. package/dist/config.d.ts.map +1 -1
  59. package/dist/config.js +64 -27
  60. package/dist/config.js.map +1 -1
  61. package/dist/coverage.d.ts +64 -0
  62. package/dist/coverage.d.ts.map +1 -0
  63. package/dist/coverage.js +212 -0
  64. package/dist/coverage.js.map +1 -0
  65. package/dist/daemon/DaemonService.d.ts +14 -5
  66. package/dist/daemon/DaemonService.d.ts.map +1 -1
  67. package/dist/daemon/DaemonService.js +47 -23
  68. package/dist/daemon/DaemonService.js.map +1 -1
  69. package/dist/daemon/approvalStore.d.ts +2 -1
  70. package/dist/daemon/approvalStore.d.ts.map +1 -1
  71. package/dist/daemon/approvalStore.js +4 -3
  72. package/dist/daemon/approvalStore.js.map +1 -1
  73. package/dist/daemon/inProcessClient.js +2 -2
  74. package/dist/daemon/lifecycle.d.ts +2 -1
  75. package/dist/daemon/lifecycle.d.ts.map +1 -1
  76. package/dist/daemon/lifecycle.js +1 -1
  77. package/dist/daemon/lifecycle.js.map +1 -1
  78. package/dist/daemon/pipeClient.js +8 -7
  79. package/dist/daemon/pipeClient.js.map +1 -1
  80. package/dist/daemon/pipeName.d.ts +3 -3
  81. package/dist/daemon/pipeName.d.ts.map +1 -1
  82. package/dist/daemon/pipeName.js +1 -2
  83. package/dist/daemon/pipeName.js.map +1 -1
  84. package/dist/daemon/pipeServer.js +3 -3
  85. package/dist/daemon/version.d.ts +1 -1
  86. package/dist/daemon/version.js +2 -2
  87. package/dist/dependencyInstaller.d.ts +2 -1
  88. package/dist/dependencyInstaller.d.ts.map +1 -1
  89. package/dist/dependencyInstaller.js +4 -4
  90. package/dist/dependencyInstaller.js.map +1 -1
  91. package/dist/explorerSession.d.ts +5 -1
  92. package/dist/explorerSession.d.ts.map +1 -1
  93. package/dist/explorerSession.js +24 -7
  94. package/dist/explorerSession.js.map +1 -1
  95. package/dist/git/gitCommitResolver.d.ts +2 -1
  96. package/dist/git/gitCommitResolver.d.ts.map +1 -1
  97. package/dist/git/gitCommitResolver.js +8 -8
  98. package/dist/git/gitCommitResolver.js.map +1 -1
  99. package/dist/git/gitIndexResolver.d.ts +2 -1
  100. package/dist/git/gitIndexResolver.d.ts.map +1 -1
  101. package/dist/git/gitIndexResolver.js +7 -7
  102. package/dist/git/gitIndexResolver.js.map +1 -1
  103. package/dist/git/gitService.d.ts +5 -4
  104. package/dist/git/gitService.d.ts.map +1 -1
  105. package/dist/git/gitService.js.map +1 -1
  106. package/dist/git/gitUtils.d.ts +6 -5
  107. package/dist/git/gitUtils.d.ts.map +1 -1
  108. package/dist/git/gitUtils.js +5 -4
  109. package/dist/git/gitUtils.js.map +1 -1
  110. package/dist/git/gitWorktreeManager.d.ts +15 -14
  111. package/dist/git/gitWorktreeManager.d.ts.map +1 -1
  112. package/dist/git/gitWorktreeManager.js +10 -11
  113. package/dist/git/gitWorktreeManager.js.map +1 -1
  114. package/dist/git/testUtils.d.ts +2 -1
  115. package/dist/git/testUtils.d.ts.map +1 -1
  116. package/dist/index.js +10 -1
  117. package/dist/index.js.map +1 -1
  118. package/dist/js-component-explorer/packages/common/dist/explorerUrl.js +21 -0
  119. package/dist/js-component-explorer/packages/common/dist/explorerUrl.js.map +1 -0
  120. package/dist/js-component-explorer/packages/common/dist/renderManifest.js +68 -0
  121. package/dist/js-component-explorer/packages/common/dist/renderManifest.js.map +1 -0
  122. package/dist/js-component-explorer/packages/semver/dist/index.js.map +1 -0
  123. package/dist/js-component-explorer/packages/simple-api/dist/chunk-FJ7AVNQE.js.map +1 -0
  124. package/dist/js-component-explorer/packages/simple-api/dist/chunk-TTRCY65Z.js.map +1 -0
  125. package/dist/js-component-explorer/packages/simple-api/dist/chunk-WNXMRXWV.js.map +1 -0
  126. package/dist/js-component-explorer/packages/simple-api/dist/express.js.map +1 -0
  127. package/dist/manifest.schema.json +44 -16
  128. package/dist/mcp/McpServer.d.ts.map +1 -1
  129. package/dist/mcp/McpServer.js +183 -101
  130. package/dist/mcp/McpServer.js.map +1 -1
  131. package/dist/path.d.ts +30 -0
  132. package/dist/path.d.ts.map +1 -0
  133. package/dist/path.js +78 -0
  134. package/dist/path.js.map +1 -0
  135. package/dist/processTree.d.ts +6 -1
  136. package/dist/processTree.d.ts.map +1 -1
  137. package/dist/processTree.js +48 -5
  138. package/dist/processTree.js.map +1 -1
  139. package/dist/renderManifest.js +1 -1
  140. package/dist/server/httpServer.d.ts +1 -1
  141. package/dist/server/httpServer.d.ts.map +1 -1
  142. package/dist/server/httpServer.js +4 -8
  143. package/dist/server/httpServer.js.map +1 -1
  144. package/dist/server/serverConfig.d.ts +23 -6
  145. package/dist/server/serverConfig.d.ts.map +1 -1
  146. package/dist/server/serverConfig.js +11 -18
  147. package/dist/server/serverConfig.js.map +1 -1
  148. package/dist/server/viteServer.d.ts +16 -1
  149. package/dist/server/viteServer.d.ts.map +1 -1
  150. package/dist/server/viteServer.js +86 -5
  151. package/dist/server/viteServer.js.map +1 -1
  152. package/dist/storage.d.ts +2 -1
  153. package/dist/storage.d.ts.map +1 -1
  154. package/dist/storage.js +1 -1
  155. package/dist/storage.js.map +1 -1
  156. package/dist/utils.d.ts +3 -30
  157. package/dist/utils.d.ts.map +1 -1
  158. package/dist/utils.js +4 -24
  159. package/dist/utils.js.map +1 -1
  160. package/dist/visualCache.d.ts +2 -1
  161. package/dist/visualCache.d.ts.map +1 -1
  162. package/dist/visualCache.js +4 -3
  163. package/dist/visualCache.js.map +1 -1
  164. package/dist/viteProjectRef.d.ts +4 -12
  165. package/dist/viteProjectRef.d.ts.map +1 -1
  166. package/dist/viteProjectRef.js +9 -17
  167. package/dist/viteProjectRef.js.map +1 -1
  168. package/dist/vscode-observables/observables/dist/disposables.js.map +1 -0
  169. package/dist/vscode-observables/observables/dist/observableInternal/base.js.map +1 -0
  170. package/dist/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +1 -0
  171. package/dist/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +1 -0
  172. package/dist/vscode-observables/observables/dist/observableInternal/debugName.js.map +1 -0
  173. package/dist/vscode-observables/observables/dist/observableInternal/index.js.map +1 -0
  174. package/dist/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +1 -0
  175. package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/logging/debugGetDependencyGraph.js +1 -1
  176. package/dist/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js.map +1 -0
  177. package/dist/vscode-observables/observables/dist/observableInternal/logging/logging.js.map +1 -0
  178. package/dist/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +1 -0
  179. package/dist/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +1 -0
  180. package/dist/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js.map +1 -0
  181. package/dist/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js.map +1 -0
  182. package/dist/vscode-observables/observables/dist/observableInternal/observables/observableValue.js.map +1 -0
  183. package/dist/{external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js → vscode-observables/observables/dist/observableInternal/reactions/createEffect.js} +9 -5
  184. package/dist/vscode-observables/observables/dist/observableInternal/reactions/createEffect.js.map +1 -0
  185. package/dist/{external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js → vscode-observables/observables/dist/observableInternal/reactions/createEffectImpl.js} +1 -1
  186. package/dist/vscode-observables/observables/dist/observableInternal/reactions/createEffectImpl.js.map +1 -0
  187. package/dist/vscode-observables/observables/dist/observableInternal/transaction.js.map +1 -0
  188. package/dist/vscode-observables/observables/dist/observableInternal/utils/utils.js.map +1 -0
  189. package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/utils/utilsCancellation.js +2 -2
  190. package/dist/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js.map +1 -0
  191. package/package.json +11 -9
  192. package/dist/commands/artifactCommand.d.ts +0 -14
  193. package/dist/commands/artifactCommand.d.ts.map +0 -1
  194. package/dist/external/vscode-observables/observables/dist/disposables.js.map +0 -1
  195. package/dist/external/vscode-observables/observables/dist/observableInternal/base.js.map +0 -1
  196. package/dist/external/vscode-observables/observables/dist/observableInternal/commonFacade/deps.js.map +0 -1
  197. package/dist/external/vscode-observables/observables/dist/observableInternal/debugLocation.js.map +0 -1
  198. package/dist/external/vscode-observables/observables/dist/observableInternal/debugName.js.map +0 -1
  199. package/dist/external/vscode-observables/observables/dist/observableInternal/index.js.map +0 -1
  200. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/consoleObservableLogger.js.map +0 -1
  201. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/debugGetDependencyGraph.js.map +0 -1
  202. package/dist/external/vscode-observables/observables/dist/observableInternal/logging/logging.js.map +0 -1
  203. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/baseObservable.js.map +0 -1
  204. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derived.js.map +0 -1
  205. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/derivedImpl.js.map +0 -1
  206. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js.map +0 -1
  207. package/dist/external/vscode-observables/observables/dist/observableInternal/observables/observableValue.js.map +0 -1
  208. package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorun.js.map +0 -1
  209. package/dist/external/vscode-observables/observables/dist/observableInternal/reactions/autorunImpl.js.map +0 -1
  210. package/dist/external/vscode-observables/observables/dist/observableInternal/transaction.js.map +0 -1
  211. package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utils.js.map +0 -1
  212. package/dist/external/vscode-observables/observables/dist/observableInternal/utils/utilsCancellation.js.map +0 -1
  213. package/dist/packages/common/dist/renderManifest.js +0 -46
  214. package/dist/packages/common/dist/renderManifest.js.map +0 -1
  215. package/dist/packages/semver/dist/index.js.map +0 -1
  216. package/dist/packages/simple-api/dist/chunk-FJ7AVNQE.js.map +0 -1
  217. package/dist/packages/simple-api/dist/chunk-TTRCY65Z.js.map +0 -1
  218. package/dist/packages/simple-api/dist/chunk-WNXMRXWV.js.map +0 -1
  219. package/dist/packages/simple-api/dist/express.js.map +0 -1
  220. /package/dist/{packages → js-component-explorer/packages}/semver/dist/index.js +0 -0
  221. /package/dist/{packages → js-component-explorer/packages}/simple-api/dist/chunk-FJ7AVNQE.js +0 -0
  222. /package/dist/{packages → js-component-explorer/packages}/simple-api/dist/chunk-TTRCY65Z.js +0 -0
  223. /package/dist/{packages → js-component-explorer/packages}/simple-api/dist/chunk-WNXMRXWV.js +0 -0
  224. /package/dist/{packages → js-component-explorer/packages}/simple-api/dist/express.js +0 -0
  225. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/disposables.js +0 -0
  226. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/base.js +0 -0
  227. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/commonFacade/deps.js +0 -0
  228. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/debugLocation.js +0 -0
  229. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/debugName.js +0 -0
  230. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/index.js +0 -0
  231. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/logging/consoleObservableLogger.js +0 -0
  232. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/logging/logging.js +0 -0
  233. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/baseObservable.js +0 -0
  234. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/derived.js +0 -0
  235. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/derivedImpl.js +0 -0
  236. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/observableFromEvent.js +0 -0
  237. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/observables/observableValue.js +0 -0
  238. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/transaction.js +0 -0
  239. /package/dist/{external/vscode-observables → vscode-observables}/observables/dist/observableInternal/utils/utils.js +0 -0
@@ -1,22 +1,26 @@
1
1
  import { Command, Option } from 'clipanion';
2
2
  import * as path from 'node:path';
3
3
  import { createHash } from 'node:crypto';
4
- import '../external/vscode-observables/observables/dist/observableInternal/index.js';
5
- import { DisposableStore } from '../external/vscode-observables/observables/dist/disposables.js';
6
- import '../external/vscode-observables/observables/dist/observableInternal/debugLocation.js';
7
- import '../external/vscode-observables/observables/dist/observableInternal/observables/derived.js';
8
- import '../external/vscode-observables/observables/dist/observableInternal/utils/utils.js';
9
- import '../external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
4
+ import { availableParallelism } from 'node:os';
5
+ import '../vscode-observables/observables/dist/observableInternal/index.js';
6
+ import { DisposableStore } from '../vscode-observables/observables/dist/disposables.js';
7
+ import '../vscode-observables/observables/dist/observableInternal/debugLocation.js';
8
+ import '../vscode-observables/observables/dist/observableInternal/observables/derived.js';
9
+ import '../vscode-observables/observables/dist/observableInternal/utils/utils.js';
10
+ import '../vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
10
11
  import { PlaywrightBrowserPageFactory } from '../browserPage.js';
11
12
  import { compareScreenshotsInMemory, printComparisonToConsole, writeComparisonReport } from '../comparison.js';
12
13
  import { ConsoleLogger, verbosityToLogLevel, createLogFileOptions, logBuildInfo } from '../logger.js';
13
- import { ResolvedConfig } from '../config.js';
14
+ import { ResolvedConfig, ResolvedCoverageConfig } from '../config.js';
15
+ import { AbsolutePath, RelativePath } from '../path.js';
14
16
  import { ExplorerSession } from '../explorerSession.js';
15
17
  import { FileSystemStorage } from '../storage.js';
16
- import { matchGlob, writeFile } from '../utils.js';
18
+ import { writeFile } from '../utils.js';
17
19
  import { getGitRoot, execGit } from '../git/gitUtils.js';
18
20
  import { serializeManifest } from '../renderManifest.js';
19
- import { MANIFEST_FILENAME } from '../packages/common/dist/renderManifest.js';
21
+ import { parseInputJson } from './inputArg.js';
22
+ import { validateIstanbulMap, v8EntriesToIstanbul, mergeIstanbul, cssEntriesToIstanbul, writeIstanbulFile } from '../coverage.js';
23
+ import { RenderManifestSchema, MANIFEST_FILENAME } from '../js-component-explorer/packages/common/dist/renderManifest.js';
20
24
 
21
25
  class RenderCommand extends Command {
22
26
  static paths = [['render']];
@@ -25,12 +29,12 @@ class RenderCommand extends Command {
25
29
  examples: [
26
30
  ['Render all fixtures', '$0 render'],
27
31
  ['Render and accept as baseline', '$0 render --accept'],
28
- ['Filter by glob', '$0 render --filter "Button/*"'],
32
+ ['Filter by fixture-id regex', '$0 render --fixture-id-regex "^Button/"'],
29
33
  ],
30
34
  });
31
35
  verbose = Option.Counter('-v,--verbose', 0, { description: 'Increase log verbosity (-v debug, -vv trace)' });
32
36
  logFile = Option.String('--log-file', { description: 'Append logs to this file (works with -v/-vv)' });
33
- filter = Option.String('--filter', { required: false, description: 'Filter fixtures by glob pattern' });
37
+ fixtureIdRegex = Option.String('--fixture-id-regex', { required: false, description: 'Filter fixtures whose fixtureId matches this regular expression (unanchored)' });
34
38
  accept = Option.Boolean('--accept', false, { description: 'Write to baseline instead of current (mutually exclusive with --target)' });
35
39
  project = Option.String('-p,--project', process.cwd(), { description: 'Project: a directory, vite config file, or component-explorer.json' });
36
40
  target = Option.String('--target', { required: false, description: 'Screenshot output directory (default: .screenshots/current, or .screenshots/baseline with --accept)' });
@@ -39,105 +43,386 @@ class RenderCommand extends Command {
39
43
  report = Option.String('--report', { required: false, description: 'Output report folder (requires --compare)' });
40
44
  headed = Option.Boolean('--headed', false, { description: 'Show the browser window (useful for debugging)' });
41
45
  timeout = Option.String('--timeout', '30000', { description: 'Navigation timeout in milliseconds (default: 30000)' });
46
+ workers = Option.String('--workers', { description: 'Number of parallel render workers (default: available CPUs, capped at 8; use 1 for serial rendering)' });
42
47
  useHashPaths = Option.Boolean('--useHashPaths', false, { description: 'Use content-hash image paths (images/<hash>.png) for deduplication instead of fixture-id paths' });
48
+ reloadBetweenFixtures = Option.Boolean('--reload-between-fixtures', false, { description: 'Reload the browser page between fixtures for cleaner isolation (slower)' });
49
+ input = Option.String('--input', { required: false, description: 'JSON object passed to every fixture as `RenderContext.input` (e.g. \'{"theme":"dark"}\'). Combine with `--input-<key> <value>` to override individual properties.' });
50
+ coverage = Option.Boolean('--coverage', false, { description: 'Collect code coverage during rendering. Output is written to <target>/<coverage-output>/' });
51
+ coverageMode = Option.String('--coverage-mode', { required: false, description: 'Coverage aggregation: "total" (one report for all fixtures, default) or "per-fixture" (one report per fixture; forces --reload-between-fixtures)' });
52
+ coverageJs = Option.String('--coverage-js', { required: false, description: 'JavaScript coverage strategy: "istanbul" (default; vite-plugin-istanbul), "v8" (Playwright V8 + v8-to-istanbul), or "off"' });
53
+ coverageCss = Option.Boolean('--coverage-css', false, { description: 'Also collect CSS coverage via Playwright (raw range data)' });
54
+ coverageOutput = Option.String('--coverage-output', { required: false, description: 'Coverage output directory, relative to --target (default: "coverage")' });
43
55
  async execute() {
44
56
  // Validate mutually exclusive options
45
57
  if (this.accept && this.target) {
46
58
  this.context.stderr.write('Error: --accept and --target are mutually exclusive.\n');
47
59
  return 1;
48
60
  }
61
+ const workerCount = this.workers === undefined
62
+ ? Math.max(1, Math.min(8, availableParallelism()))
63
+ : Number(this.workers);
64
+ if (!Number.isSafeInteger(workerCount) || workerCount < 1) {
65
+ this.context.stderr.write('Error: --workers must be a positive integer.\n');
66
+ return 1;
67
+ }
68
+ let input;
69
+ try {
70
+ input = parseInputJson(this.input);
71
+ }
72
+ catch (e) {
73
+ this.context.stderr.write(`Error: ${e instanceof Error ? e.message : String(e)}\n`);
74
+ return 1;
75
+ }
49
76
  const logger = new ConsoleLogger('render', this.context.stdout, verbosityToLogLevel(this.verbose), createLogFileOptions(this.logFile, this.verbose));
50
77
  logBuildInfo(logger);
78
+ const projectPath = AbsolutePath.resolve(this.project);
51
79
  const disposables = new DisposableStore();
52
- const config = await ResolvedConfig.fromProjectPath(this.project, disposables);
80
+ const config = await ResolvedConfig.fromProjectPath(projectPath, disposables);
53
81
  const projectDir = config.configDir;
54
82
  const serverConfig = config.sessions[0].server;
83
+ // Resolve coverage settings — CLI flags override JSON config.
84
+ let coverage;
85
+ try {
86
+ coverage = this._resolveCoverage(config.coverage);
87
+ }
88
+ catch (e) {
89
+ this.context.stderr.write(`Error: ${e instanceof Error ? e.message : String(e)}\n`);
90
+ return 1;
91
+ }
92
+ if (coverage && coverage.js !== 'istanbul' && coverage.js !== 'v8' && !coverage.css) {
93
+ coverage = undefined;
94
+ }
95
+ // Per-fixture coverage requires page reload between fixtures so the
96
+ // `__coverage__` global / V8 sampler restarts cleanly each iteration.
97
+ const effectiveReloadBetween = this.reloadBetweenFixtures || (coverage?.mode === 'per-fixture' && coverage.enabled);
98
+ if (coverage?.mode === 'per-fixture' && !this.reloadBetweenFixtures) {
99
+ logger.debug('Coverage mode "per-fixture" implies reload-between-fixtures=true');
100
+ }
55
101
  // Determine target directory
56
102
  const defaultTarget = this.accept ? '.screenshots/baseline' : '.screenshots/current';
57
103
  const targetDir = this.target ?? defaultTarget;
58
- const targetPath = path.isAbsolute(targetDir) ? targetDir : path.join(projectDir, targetDir);
104
+ const targetPath = AbsolutePath.fromAbsoluteOrRelative(targetDir, { base: projectDir });
59
105
  // Determine compare target directory
60
106
  const defaultCompareTarget = this.accept ? '.screenshots/current' : '.screenshots/baseline';
61
107
  const compareTargetDir = this.compareTarget ?? defaultCompareTarget;
62
- const compareTargetPath = path.isAbsolute(compareTargetDir) ? compareTargetDir : path.join(projectDir, compareTargetDir);
108
+ const compareTargetPath = AbsolutePath.fromAbsoluteOrRelative(compareTargetDir, { base: projectDir });
63
109
  const storage = new FileSystemStorage(targetPath);
64
110
  const browserFactory = new PlaywrightBrowserPageFactory(this.headed, Number(this.timeout), logger);
65
111
  const screenshots = new Map();
66
112
  let session;
67
113
  try {
68
114
  this.context.stdout.write('Starting server...\n');
69
- session = await ExplorerSession.create('render', serverConfig, browserFactory, { logger });
115
+ const istanbulCoverage = coverage && coverage.js === 'istanbul'
116
+ ? { include: coverage.include, exclude: coverage.exclude }
117
+ : undefined;
118
+ if (istanbulCoverage && serverConfig.kind !== 'vite') {
119
+ this.context.stderr.write('Warning: --coverage-js=istanbul requires a Vite server; falling back to no JS coverage. Use --coverage-js=v8 for non-Vite servers.\n');
120
+ }
121
+ // Enable CSS sourceURL annotation when CSS coverage is requested.
122
+ // Without it, Vite's HMR-injected `<style>` tags are anonymous and
123
+ // Playwright's CSS coverage drops them.
124
+ const cssSourceUrl = coverage?.css === true && serverConfig.kind === 'vite';
125
+ session = await ExplorerSession.create('render', serverConfig, browserFactory, { logger, istanbulCoverage, cssSourceUrl });
70
126
  this.context.stdout.write(`Server running at ${session.serverUrl}\n`);
71
127
  const listResult = await session.explorer.listFixtures();
72
128
  if (listResult.loadError) {
73
129
  this.context.stderr.write(`Warning: Fixture loading error: ${listResult.loadError}\n`);
74
130
  }
75
- const filtered = this.filter
76
- ? listResult.fixtures.filter(f => matchGlob(f.fixtureId, this.filter))
77
- : listResult.fixtures;
131
+ let filtered;
132
+ if (this.fixtureIdRegex) {
133
+ let regex;
134
+ try {
135
+ regex = new RegExp(this.fixtureIdRegex);
136
+ }
137
+ catch (e) {
138
+ this.context.stderr.write(`Error: Invalid --fixture-id-regex: ${e instanceof Error ? e.message : String(e)}\n`);
139
+ return 1;
140
+ }
141
+ filtered = listResult.fixtures.filter(f => regex.test(f.fixtureId));
142
+ }
143
+ else {
144
+ filtered = listResult.fixtures;
145
+ }
78
146
  this.context.stdout.write(`Found ${filtered.length} fixture(s)\n`);
79
147
  const fixtureEntries = [];
80
148
  const writtenHashes = new Set();
81
- for (const fixture of filtered) {
82
- const result = await session.explorer.screenshotFixture(fixture.fixtureId);
83
- let imageHash;
84
- let imagePath;
85
- if (result.image) {
86
- imageHash = createHash('sha256').update(result.image).digest('hex');
87
- if (this.useHashPaths) {
88
- imagePath = `images/${imageHash}.png`;
89
- if (!writtenHashes.has(imageHash)) {
90
- await storage.write(imagePath, result.image);
91
- writtenHashes.add(imageHash);
149
+ // Coverage state
150
+ const useV8Js = coverage?.js === 'v8';
151
+ const useIstanbulJs = coverage?.js === 'istanbul' && serverConfig.kind === 'vite';
152
+ const useCss = coverage?.css === true;
153
+ const v8FilterInclude = useV8Js ? coverage.include.map(_globToRegExp) : undefined;
154
+ const v8FilterExclude = useV8Js ? coverage.exclude.map(_globToRegExp) : undefined;
155
+ const perFixtureMaps = [];
156
+ const totalMaps = [];
157
+ const renderSession = session;
158
+ const explorers = filtered.length === 0 ? [] : [
159
+ renderSession.explorer,
160
+ ...Array.from({ length: Math.min(workerCount, filtered.length) - 1 }, () => renderSession.createExplorer()),
161
+ ];
162
+ this.context.stdout.write(`Rendering with ${explorers.length} worker(s)\n`);
163
+ let failed = false;
164
+ const serverUrl = session.serverUrl;
165
+ const runWorker = async (explorer, workerIndex) => {
166
+ const startIndex = Math.floor(workerIndex * filtered.length / explorers.length);
167
+ const endIndex = Math.floor((workerIndex + 1) * filtered.length / explorers.length);
168
+ try {
169
+ // Total mode: start coverage once before the loop. The BrowserPage
170
+ // snapshots active trackers automatically on every triggered reload
171
+ // (e.g. `reloadOnError`, `reloadBeforeRender`) and reapplies them on
172
+ // the new document, so callers get the union when they finally stop.
173
+ if (coverage && coverage.mode === 'total' && (useV8Js || useCss || useIstanbulJs)) {
174
+ const page = await explorer.getOrOpenPage();
175
+ if (useV8Js) {
176
+ await page.startJSCoverage({ resetOnNavigation: false });
177
+ }
178
+ if (useCss) {
179
+ await page.startCSSCoverage({ resetOnNavigation: false });
180
+ }
181
+ if (useIstanbulJs) {
182
+ page.startIstanbulSnapshot();
92
183
  }
93
184
  }
94
- else {
95
- imagePath = `${fixture.fixtureId}.png`;
96
- await storage.write(imagePath, result.image);
185
+ for (let i = startIndex; !failed && i < endIndex; i++) {
186
+ const fixture = filtered[i];
187
+ // For per-fixture coverage we reload BEFORE rendering, then start
188
+ // V8/CSS coverage on the fresh page so each fixture is isolated.
189
+ const reloadBeforeRender = effectiveReloadBetween && i > startIndex;
190
+ if (coverage && coverage.mode === 'per-fixture' && (useV8Js || useCss)) {
191
+ const page = await explorer.getOrOpenPage();
192
+ // Reload first (mirrors what screenshotFixture would have done) so
193
+ // that __coverage__ resets and the V8 sampler starts on a clean page.
194
+ if (reloadBeforeRender) {
195
+ await page.reload();
196
+ }
197
+ if (useV8Js) {
198
+ await page.startJSCoverage({ resetOnNavigation: false });
199
+ }
200
+ if (useCss) {
201
+ await page.startCSSCoverage({ resetOnNavigation: false });
202
+ }
203
+ }
204
+ const result = await explorer.screenshotFixture(fixture.fixtureId, {
205
+ reloadOnError: true,
206
+ // We already handled the reload manually above for per-fixture coverage.
207
+ reloadBeforeRender: coverage?.mode === 'per-fixture' && (useV8Js || useCss) ? false : reloadBeforeRender,
208
+ input,
209
+ disposeAfter: true,
210
+ });
211
+ let imageHash;
212
+ let imagePath;
213
+ if (result.image) {
214
+ imageHash = createHash('sha256').update(result.image).digest('hex');
215
+ if (this.useHashPaths) {
216
+ imagePath = `images/${imageHash}.png`;
217
+ if (!writtenHashes.has(imageHash)) {
218
+ writtenHashes.add(imageHash);
219
+ await storage.write(imagePath, result.image);
220
+ }
221
+ }
222
+ else {
223
+ imagePath = `${fixture.fixtureId}.png`;
224
+ await storage.write(imagePath, result.image);
225
+ }
226
+ screenshots.set(fixture.fixtureId, { data: result.image, background: fixture.background, labels: fixture.labels });
227
+ }
228
+ const events = [];
229
+ for (const e of result.events) {
230
+ events.push({ ...e, phase: 'render', isError: e.type !== 'console.log' });
231
+ }
232
+ if (result.renderError) {
233
+ events.push({ type: 'thrownError', phase: 'render', isError: true, message: result.renderError.message, stack: result.renderError.stack });
234
+ }
235
+ if (result.captureError) {
236
+ events.push({ type: 'thrownError', phase: 'render', isError: true, message: result.captureError.message, stack: result.captureError.stack });
237
+ }
238
+ if (result.currentDispose) {
239
+ for (const e of result.currentDispose.events) {
240
+ events.push({ ...e, phase: 'dispose', isError: e.type !== 'console.log' });
241
+ }
242
+ for (const err of result.currentDispose.errors) {
243
+ events.push({ type: 'thrownError', phase: 'dispose', isError: true, message: err.message, stack: err.stack });
244
+ }
245
+ }
246
+ const hasError = events.some(e => e.isError);
247
+ fixtureEntries[i] = {
248
+ fixtureId: fixture.fixtureId,
249
+ imageHash,
250
+ imagePath,
251
+ background: fixture.background,
252
+ labels: [...fixture.labels],
253
+ expectedVisualDescriptions: [...fixture.expectedVisualDescriptions],
254
+ hasError,
255
+ events,
256
+ renderTimeMs: result.renderTimeMs,
257
+ ...(result.output !== undefined ? { output: result.output } : {}),
258
+ };
259
+ const firstError = events.find(e => e.isError);
260
+ const errorLine = firstError ? firstError.message.split('\n')[0].slice(0, 200) : 'unknown error';
261
+ if (!result.image) {
262
+ this.context.stderr.write(` ✗ ${fixture.fixtureId} (no screenshot: ${errorLine})\n`);
263
+ }
264
+ else if (hasError) {
265
+ this.context.stdout.write(` ⚠ ${fixture.fixtureId} (error: ${errorLine})\n`);
266
+ }
267
+ else {
268
+ this.context.stdout.write(` ✓ ${fixture.fixtureId}\n`);
269
+ }
270
+ // Per-fixture coverage: collect after each fixture renders.
271
+ if (coverage && coverage.mode === 'per-fixture' && (useV8Js || useIstanbulJs || useCss)) {
272
+ const page = await explorer.getOrOpenPage();
273
+ let map = {};
274
+ if (useIstanbulJs) {
275
+ const raw = await page.evaluateJs('window.__coverage__ ?? null');
276
+ map = validateIstanbulMap(raw, logger);
277
+ }
278
+ if (useV8Js) {
279
+ const v8 = await page.stopJSCoverage();
280
+ const v8Map = await v8EntriesToIstanbul(v8, {
281
+ viteServerUrl: serverUrl,
282
+ projectRoot: projectDir,
283
+ logger,
284
+ include: v8FilterInclude,
285
+ exclude: v8FilterExclude,
286
+ });
287
+ map = mergeIstanbul([map, v8Map]);
288
+ }
289
+ if (useCss) {
290
+ const css = await page.stopCSSCoverage();
291
+ const cssMap = cssEntriesToIstanbul(css, {
292
+ viteServerUrl: serverUrl,
293
+ projectRoot: projectDir,
294
+ logger,
295
+ });
296
+ map = mergeIstanbul([map, cssMap]);
297
+ }
298
+ perFixtureMaps[i] = { fixtureId: fixture.fixtureId, map };
299
+ }
300
+ }
301
+ // Total mode: collect once at the end. Reload-triggered snapshotting
302
+ // is handled inside `BrowserPage.reload()`, which preserves coverage
303
+ // data across our explicit reloads (e.g. `reloadOnError`,
304
+ // `reloadBeforeRender`). Reloads we don't trigger (e.g. Vite's
305
+ // "optimized dependencies changed") are not handled — for now we
306
+ // accept losing data from before such navigations.
307
+ if (coverage && coverage.mode === 'total' && (useV8Js || useIstanbulJs || useCss)) {
308
+ const page = await explorer.getOrOpenPage();
309
+ if (useIstanbulJs) {
310
+ const raw = await page.evaluateJs('window.__coverage__ ?? null');
311
+ totalMaps.push(validateIstanbulMap(raw, logger));
312
+ // Plus any pre-reload snapshots collected during the run.
313
+ for (const snap of page.stopIstanbulSnapshot()) {
314
+ totalMaps.push(validateIstanbulMap(snap, logger));
315
+ }
316
+ }
317
+ if (useV8Js) {
318
+ const v8 = await page.stopJSCoverage();
319
+ totalMaps.push(await v8EntriesToIstanbul(v8, {
320
+ viteServerUrl: serverUrl,
321
+ projectRoot: projectDir,
322
+ logger,
323
+ include: v8FilterInclude,
324
+ exclude: v8FilterExclude,
325
+ }));
326
+ }
327
+ if (useCss) {
328
+ const css = await page.stopCSSCoverage();
329
+ totalMaps.push(cssEntriesToIstanbul(css, {
330
+ viteServerUrl: serverUrl,
331
+ projectRoot: projectDir,
332
+ logger,
333
+ }));
334
+ }
97
335
  }
98
- screenshots.set(fixture.fixtureId, { data: result.image, background: fixture.background, labels: fixture.labels });
99
- }
100
- fixtureEntries.push({
101
- fixtureId: fixture.fixtureId,
102
- imageHash,
103
- imagePath,
104
- background: fixture.background,
105
- labels: [...fixture.labels],
106
- expectedVisualDescriptions: [...fixture.expectedVisualDescriptions],
107
- hasError: result.hasError,
108
- error: result.error,
109
- events: result.events,
110
- renderTimeMs: result.renderTimeMs,
111
- });
112
- if (!result.image) {
113
- this.context.stderr.write(` ✗ ${fixture.fixtureId} (no screenshot)\n`);
114
- }
115
- else if (result.hasError) {
116
- this.context.stdout.write(` ⚠ ${fixture.fixtureId} (rendered with errors)\n`);
117
336
  }
118
- else {
119
- this.context.stdout.write(` ✓ ${fixture.fixtureId}\n`);
337
+ catch (error) {
338
+ failed = true;
339
+ throw error;
120
340
  }
341
+ };
342
+ // Drain in-flight workers before disposing their pages or writing the manifest.
343
+ const results = await Promise.allSettled(explorers.map(runWorker));
344
+ const errors = results.filter(result => result.status === 'rejected').map(result => result.reason);
345
+ if (errors.length > 0) {
346
+ throw new AggregateError(errors, `Failed to render fixtures: ${errors.map(error => error instanceof Error ? error.message : String(error)).join('; ')}`);
121
347
  }
122
348
  const gitRoot = await getGitRoot(projectDir);
123
349
  const commitMetadata = await collectGitMetadata(gitRoot);
124
350
  const repoOrigin = await getRepoOwnerAndName(gitRoot);
125
- const manifest = {
351
+ // Write coverage output(s) BEFORE the manifest so we can reference
352
+ // each emitted file from the manifest by relative path.
353
+ let topLevelCoverage;
354
+ const perFixtureCoverageRef = new Map();
355
+ if (coverage && coverage.enabled) {
356
+ const coverageDir = AbsolutePath.fromAbsoluteOrRelative(coverage.outputDir, { base: targetPath });
357
+ const toManifestRelative = (absPath) => {
358
+ const rel = path.relative(targetPath.value, absPath.value).split(path.sep).join('/');
359
+ return rel.startsWith('.') ? rel : './' + rel;
360
+ };
361
+ if (coverage.mode === 'per-fixture') {
362
+ for (const { fixtureId, map } of perFixtureMaps) {
363
+ if (Object.keys(map).length === 0) {
364
+ continue;
365
+ }
366
+ const safeId = fixtureId.replace(/[/\\:*?"<>|]/g, '_');
367
+ const outPath = coverageDir.join(new RelativePath(`${safeId}.coverage.json`));
368
+ await writeIstanbulFile(outPath, map);
369
+ perFixtureCoverageRef.set(fixtureId, {
370
+ coverageDataIstanbul: toManifestRelative(outPath),
371
+ });
372
+ }
373
+ // Aggregated total alongside per-fixture files.
374
+ const merged = mergeIstanbul(perFixtureMaps.map(p => p.map));
375
+ if (Object.keys(merged).length > 0) {
376
+ const totalPath = coverageDir.join(new RelativePath('coverage-final.json'));
377
+ await writeIstanbulFile(totalPath, merged);
378
+ topLevelCoverage = { coverageDataIstanbul: toManifestRelative(totalPath) };
379
+ }
380
+ this.context.stdout.write(` Coverage: ${perFixtureCoverageRef.size} per-fixture report(s) + total in ${path.relative(projectDir.value, coverageDir.value)}/\n`);
381
+ }
382
+ else {
383
+ const merged = mergeIstanbul(totalMaps);
384
+ if (Object.keys(merged).length > 0) {
385
+ const totalPath = coverageDir.join(new RelativePath('coverage-final.json'));
386
+ await writeIstanbulFile(totalPath, merged);
387
+ topLevelCoverage = { coverageDataIstanbul: toManifestRelative(totalPath) };
388
+ }
389
+ this.context.stdout.write(` Coverage: ${path.relative(projectDir.value, coverageDir.value)}/\n`);
390
+ }
391
+ }
392
+ // Attach per-fixture coverage refs to manifest entries (per-fixture mode only).
393
+ if (perFixtureCoverageRef.size > 0) {
394
+ for (const entry of fixtureEntries) {
395
+ const ref = perFixtureCoverageRef.get(entry.fixtureId);
396
+ if (ref) {
397
+ entry.coverage = ref;
398
+ }
399
+ }
400
+ }
401
+ const manifest = RenderManifestSchema.parse({
126
402
  version: 1,
127
403
  repository: repoOrigin,
128
404
  commit: commitMetadata,
405
+ coverage: topLevelCoverage,
129
406
  fixtures: fixtureEntries,
130
- };
131
- const manifestPath = path.join(targetPath, MANIFEST_FILENAME);
407
+ });
408
+ const manifestPath = targetPath.join(new RelativePath(MANIFEST_FILENAME));
132
409
  await writeFile(manifestPath, Buffer.from(serializeManifest(manifest)));
133
410
  this.context.stdout.write(`\nRendered to ${targetDir}/\n`);
134
411
  this.context.stdout.write(` Manifest: ${manifestPath}\n`);
135
412
  this.context.stdout.write(` ${fixtureEntries.length} fixtures, ${writtenHashes.size} unique images\n`);
136
413
  }
137
414
  finally {
138
- await session?.dispose();
139
- await browserFactory.dispose();
140
- disposables.dispose();
415
+ try {
416
+ await session?.dispose();
417
+ }
418
+ finally {
419
+ try {
420
+ await browserFactory.dispose();
421
+ }
422
+ finally {
423
+ disposables.dispose();
424
+ }
425
+ }
141
426
  }
142
427
  if (this.compare) {
143
428
  this.context.stdout.write(`\nComparing against ${compareTargetDir}...\n`);
@@ -145,6 +430,40 @@ class RenderCommand extends Command {
145
430
  }
146
431
  return 0;
147
432
  }
433
+ _resolveCoverage(fromConfig) {
434
+ // If neither CLI nor config requests coverage, do nothing.
435
+ const configWantsCoverage = fromConfig?.enabled ?? false;
436
+ const cliWantsCoverage = this.coverage || this.coverageCss || this.coverageJs !== undefined || this.coverageMode !== undefined;
437
+ if (!configWantsCoverage && !cliWantsCoverage) {
438
+ return undefined;
439
+ }
440
+ const base = fromConfig ?? new ResolvedCoverageConfig('total', 'istanbul', false, 'coverage', ['**/src/**/*.{js,ts,jsx,tsx,mjs,cjs}'], ['**/*.fixture.{js,ts,jsx,tsx}', '**/node_modules/**', '**/*.{test,spec}.{js,ts,jsx,tsx}']);
441
+ // Mode override
442
+ let mode = base.mode;
443
+ if (this.coverageMode !== undefined) {
444
+ if (this.coverageMode !== 'total' && this.coverageMode !== 'per-fixture') {
445
+ throw new Error(`--coverage-mode must be "total" or "per-fixture", got "${this.coverageMode}"`);
446
+ }
447
+ mode = this.coverageMode;
448
+ }
449
+ // JS strategy override
450
+ let js = base.js;
451
+ if (this.coverageJs !== undefined) {
452
+ if (this.coverageJs === 'off' || this.coverageJs === 'false') {
453
+ js = false;
454
+ }
455
+ else if (this.coverageJs === 'istanbul' || this.coverageJs === 'v8') {
456
+ js = this.coverageJs;
457
+ }
458
+ else {
459
+ throw new Error(`--coverage-js must be "istanbul", "v8", or "off", got "${this.coverageJs}"`);
460
+ }
461
+ }
462
+ // CSS toggle: CLI flag forces on; config decides otherwise.
463
+ const css = this.coverageCss || base.css;
464
+ const outputDir = this.coverageOutput ?? base.outputDir;
465
+ return new ResolvedCoverageConfig(mode, js, css, outputDir, base.include, base.exclude);
466
+ }
148
467
  async _runComparison(screenshots, targetPath, compareTargetPath, projectDir) {
149
468
  const compareStorage = new FileSystemStorage(compareTargetPath);
150
469
  const result = await compareScreenshotsInMemory(screenshots, {
@@ -154,7 +473,7 @@ class RenderCommand extends Command {
154
473
  });
155
474
  printComparisonToConsole(result, this.context.stdout);
156
475
  if (this.report) {
157
- const reportDir = path.isAbsolute(this.report) ? this.report : path.join(projectDir, this.report);
476
+ const reportDir = AbsolutePath.fromAbsoluteOrRelative(this.report, { base: projectDir });
158
477
  await writeComparisonReport({
159
478
  reportDir,
160
479
  result,
@@ -168,6 +487,16 @@ class RenderCommand extends Command {
168
487
  return (result.added.length > 0 || result.changed.length > 0) ? 1 : 0;
169
488
  }
170
489
  }
490
+ function _globToRegExp(glob) {
491
+ // Escape regex metacharacters EXCEPT glob ones we'll process below: * ? { } , and /.
492
+ let pattern = glob.replace(/([.+^$()|[\]\\])/g, '\\$1');
493
+ // Brace expansion: {a,b,c} → (a|b|c)
494
+ pattern = pattern.replace(/\{([^{}]+)\}/g, (_, body) => '(' + body.split(',').join('|') + ')');
495
+ // ** → placeholder, * → [^/]*, then placeholder → .*
496
+ pattern = pattern.replace(/\*\*/g, '\u29eb').replace(/\*/g, '[^/]*').replace(/\u29eb/g, '.*');
497
+ pattern = pattern.replace(/\?/g, '.');
498
+ return new RegExp(pattern);
499
+ }
171
500
  async function collectGitMetadata(gitRoot) {
172
501
  const hash = (await execGit(gitRoot, ['rev-parse', 'HEAD'])).trim();
173
502
  const logOutput = (await execGit(gitRoot, [
@@ -203,7 +532,7 @@ async function getRepoOwnerAndName(gitRoot) {
203
532
  catch {
204
533
  // no remote configured
205
534
  }
206
- return { owner: 'unknown', name: path.basename(gitRoot) };
535
+ return { owner: 'unknown', name: path.basename(gitRoot.value) };
207
536
  }
208
537
 
209
538
  export { RenderCommand };
@@ -1 +1 @@
1
- {"version":3,"file":"renderCommand.js","sources":["../../src/commands/renderCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderCommand.js","sources":["../../src/commands/renderCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=renderCommand.test.d.ts.map