@storyshelf/core 0.6.2 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (727) hide show
  1. package/README.md +49 -32
  2. package/dist/adapter/capture-queue.d.mts +44 -4
  3. package/dist/adapter/capture-runner.d.mts +134 -12
  4. package/dist/adapter/capture-runner.mjs +9 -12
  5. package/dist/adapter/database.d.mts +89 -10
  6. package/dist/adapter/database.mjs +4 -3
  7. package/dist/adapter/database.mjs.map +1 -1
  8. package/dist/adapter/design.d.mts +83 -0
  9. package/dist/adapter/design.mjs +27 -0
  10. package/dist/adapter/design.mjs.map +1 -0
  11. package/dist/adapter/email-sender.d.mts +0 -2
  12. package/dist/adapter/metadata.d.mts +3 -12
  13. package/dist/adapter/notifier.d.mts +6 -3
  14. package/dist/adapter/notifier.mjs +5 -1
  15. package/dist/adapter/oauth.d.mts +50 -0
  16. package/dist/adapter/setup.d.mts +4 -7
  17. package/dist/adapter/setup.mjs +3 -3
  18. package/dist/adapter/setup.mjs.map +1 -1
  19. package/dist/adapter/storage.d.mts +1 -3
  20. package/dist/adapter/webhook-events.d.mts +0 -2
  21. package/dist/adapter/webhook-events.mjs +13 -14
  22. package/dist/adapter/webhook-events.mjs.map +1 -1
  23. package/dist/adapters/capture-target-offers.d.mts +26 -0
  24. package/dist/adapters/capture-target-offers.mjs +57 -0
  25. package/dist/adapters/capture-target-offers.mjs.map +1 -0
  26. package/dist/adapters/capture-target.d.mts +69 -0
  27. package/dist/adapters/capture-target.mjs +75 -0
  28. package/dist/adapters/capture-target.mjs.map +1 -0
  29. package/dist/adapters/notifier/build-comment.d.mts +22 -0
  30. package/dist/adapters/notifier/build-comment.mjs +23 -0
  31. package/dist/adapters/notifier/build-comment.mjs.map +1 -0
  32. package/dist/adapters/notifier/build-state.d.mts +97 -0
  33. package/dist/adapters/notifier/build-state.mjs +217 -0
  34. package/dist/adapters/notifier/build-state.mjs.map +1 -0
  35. package/dist/adapters/notifier/events.d.mts +4 -4
  36. package/dist/adapters/notifier/events.mjs +32 -20
  37. package/dist/adapters/notifier/events.mjs.map +1 -1
  38. package/dist/adapters/notifier/format.d.mts +0 -2
  39. package/dist/adapters/notifier/format.mjs +1 -2
  40. package/dist/adapters/notifier/provider.d.mts +53 -9
  41. package/dist/adapters/notifier/provider.mjs +11 -0
  42. package/dist/adapters/notifier/provider.mjs.map +1 -0
  43. package/dist/adapters/notifier/state.d.mts +22 -0
  44. package/dist/adapters/notifier/state.mjs +65 -0
  45. package/dist/adapters/notifier/state.mjs.map +1 -0
  46. package/dist/adapters/notifier/types.d.mts +51 -4
  47. package/dist/adapters/remote-browser.d.mts +168 -0
  48. package/dist/adapters/remote-browser.mjs +201 -0
  49. package/dist/adapters/remote-browser.mjs.map +1 -0
  50. package/dist/adapters/remote-lease-attempt.mjs +39 -0
  51. package/dist/adapters/remote-lease-attempt.mjs.map +1 -0
  52. package/dist/adapters/remote-lease-error.d.mts +25 -0
  53. package/dist/adapters/remote-lease-error.mjs +54 -0
  54. package/dist/adapters/remote-lease-error.mjs.map +1 -0
  55. package/dist/adapters/remote-lease-held.d.mts +15 -0
  56. package/dist/adapters/remote-lease-held.mjs +86 -0
  57. package/dist/adapters/remote-lease-held.mjs.map +1 -0
  58. package/dist/adapters/remote-lease-shutdown.d.mts +12 -0
  59. package/dist/adapters/remote-lease-shutdown.mjs +32 -0
  60. package/dist/adapters/remote-lease-shutdown.mjs.map +1 -0
  61. package/dist/adapters/remote-lease.d.mts +39 -0
  62. package/dist/adapters/remote-lease.mjs +175 -0
  63. package/dist/adapters/remote-lease.mjs.map +1 -0
  64. package/dist/adapters/remote-limiter.mjs +121 -0
  65. package/dist/adapters/remote-limiter.mjs.map +1 -0
  66. package/dist/adapters/remote-pool.d.mts +56 -0
  67. package/dist/adapters/remote-pool.mjs +195 -0
  68. package/dist/adapters/remote-pool.mjs.map +1 -0
  69. package/dist/adapters/render-runs.d.mts +23 -0
  70. package/dist/adapters/render-runs.mjs +40 -0
  71. package/dist/adapters/render-runs.mjs.map +1 -0
  72. package/dist/adapters/setup-runner.d.mts +0 -2
  73. package/dist/adapters/setup-runner.mjs +3 -6
  74. package/dist/adapters/setup-runner.mjs.map +1 -1
  75. package/dist/adapters/sources.d.mts +10 -0
  76. package/dist/adapters/sources.mjs +19 -0
  77. package/dist/adapters/sources.mjs.map +1 -0
  78. package/dist/adapters/validate.d.mts +0 -2
  79. package/dist/adapters/validate.mjs +27 -20
  80. package/dist/adapters/validate.mjs.map +1 -1
  81. package/dist/ai.d.mts +103 -0
  82. package/dist/ai.mjs +18 -0
  83. package/dist/ai.mjs.map +1 -0
  84. package/dist/auth.d.mts +0 -2
  85. package/dist/auth.mjs +1 -2
  86. package/dist/brand-packs.d.mts +0 -2
  87. package/dist/brand-packs.mjs +0 -1
  88. package/dist/capture/a11y/axe-source.d.mts +16 -0
  89. package/dist/capture/a11y/axe-source.mjs +36 -0
  90. package/dist/capture/a11y/axe-source.mjs.map +1 -0
  91. package/dist/capture/a11y/in-page.d.mts +25 -0
  92. package/dist/capture/a11y/in-page.mjs +59 -0
  93. package/dist/capture/a11y/in-page.mjs.map +1 -0
  94. package/dist/capture/a11y/map.d.mts +22 -0
  95. package/dist/capture/a11y/map.mjs +47 -0
  96. package/dist/capture/a11y/map.mjs.map +1 -0
  97. package/dist/capture/a11y/options.d.mts +21 -0
  98. package/dist/capture/a11y/options.mjs +74 -0
  99. package/dist/capture/a11y/options.mjs.map +1 -0
  100. package/dist/capture/adapter.d.mts +46 -5
  101. package/dist/capture/adapter.mjs +1 -2
  102. package/dist/capture/adapter.mjs.map +1 -1
  103. package/dist/capture/affected.d.mts +2 -2
  104. package/dist/capture/affected.mjs +14 -6
  105. package/dist/capture/affected.mjs.map +1 -1
  106. package/dist/capture/attempt-logger.mjs +83 -0
  107. package/dist/capture/attempt-logger.mjs.map +1 -0
  108. package/dist/capture/browsers.d.mts +33 -0
  109. package/dist/capture/browsers.mjs +66 -0
  110. package/dist/capture/browsers.mjs.map +1 -0
  111. package/dist/capture/build-state/deliver.d.mts +30 -0
  112. package/dist/capture/build-state/deliver.mjs +117 -0
  113. package/dist/capture/build-state/deliver.mjs.map +1 -0
  114. package/dist/capture/build-state/index.d.mts +8 -0
  115. package/dist/capture/build-state/notify-job.d.mts +54 -0
  116. package/dist/capture/build-state/notify-job.mjs +132 -0
  117. package/dist/capture/build-state/notify-job.mjs.map +1 -0
  118. package/dist/capture/build-state/publisher.d.mts +21 -0
  119. package/dist/capture/build-state/publisher.mjs +106 -0
  120. package/dist/capture/build-state/publisher.mjs.map +1 -0
  121. package/dist/capture/build-state/resume.d.mts +7 -0
  122. package/dist/capture/build-state/resume.mjs +46 -0
  123. package/dist/capture/build-state/resume.mjs.map +1 -0
  124. package/dist/capture/build-state/types.d.mts +47 -0
  125. package/dist/capture/catalog/catalogue.d.mts +20 -0
  126. package/dist/capture/catalog/catalogue.mjs +52 -0
  127. package/dist/capture/catalog/catalogue.mjs.map +1 -0
  128. package/dist/capture/catalog/components.d.mts +21 -0
  129. package/dist/capture/catalog/components.mjs +54 -0
  130. package/dist/capture/catalog/components.mjs.map +1 -0
  131. package/dist/capture/catalog/history.d.mts +28 -0
  132. package/dist/capture/catalog/history.mjs +50 -0
  133. package/dist/capture/catalog/history.mjs.map +1 -0
  134. package/dist/capture/catalog/hook.d.mts +12 -0
  135. package/dist/capture/catalog/hook.mjs +18 -0
  136. package/dist/capture/catalog/hook.mjs.map +1 -0
  137. package/dist/capture/catalog/index.d.mts +11 -0
  138. package/dist/capture/catalog/load.d.mts +24 -0
  139. package/dist/capture/catalog/load.mjs +48 -0
  140. package/dist/capture/catalog/load.mjs.map +1 -0
  141. package/dist/capture/catalog/parse.d.mts +13 -0
  142. package/dist/capture/catalog/parse.mjs +55 -0
  143. package/dist/capture/catalog/parse.mjs.map +1 -0
  144. package/dist/capture/catalog/read.d.mts +15 -0
  145. package/dist/capture/catalog/read.mjs +39 -0
  146. package/dist/capture/catalog/read.mjs.map +1 -0
  147. package/dist/capture/catalog/types.d.mts +31 -0
  148. package/dist/capture/comparison-reference.d.mts +27 -0
  149. package/dist/capture/comparison-reference.mjs +75 -0
  150. package/dist/capture/comparison-reference.mjs.map +1 -0
  151. package/dist/capture/consumer/capture-handler.d.mts +56 -0
  152. package/dist/capture/consumer/capture-handler.mjs +117 -0
  153. package/dist/capture/consumer/capture-handler.mjs.map +1 -0
  154. package/dist/capture/consumer/idle.d.mts +15 -0
  155. package/dist/capture/consumer/idle.mjs +24 -0
  156. package/dist/capture/consumer/idle.mjs.map +1 -0
  157. package/dist/capture/consumer/index.d.mts +11 -0
  158. package/dist/capture/consumer/index.mjs +138 -0
  159. package/dist/capture/consumer/index.mjs.map +1 -0
  160. package/dist/capture/consumer/loop.mjs +109 -0
  161. package/dist/capture/consumer/loop.mjs.map +1 -0
  162. package/dist/capture/consumer/metrics.d.mts +39 -0
  163. package/dist/capture/consumer/metrics.mjs +37 -0
  164. package/dist/capture/consumer/metrics.mjs.map +1 -0
  165. package/dist/capture/consumer/retry.d.mts +31 -0
  166. package/dist/capture/consumer/retry.mjs +33 -0
  167. package/dist/capture/consumer/retry.mjs.map +1 -0
  168. package/dist/capture/consumer/run-job.mjs +194 -0
  169. package/dist/capture/consumer/run-job.mjs.map +1 -0
  170. package/dist/capture/consumer/startup.mjs +37 -0
  171. package/dist/capture/consumer/startup.mjs.map +1 -0
  172. package/dist/capture/consumer/types.d.mts +95 -0
  173. package/dist/capture/crash-failure.d.mts +23 -0
  174. package/dist/capture/crash-failure.mjs +69 -0
  175. package/dist/capture/crash-failure.mjs.map +1 -0
  176. package/dist/capture/db-queue/cadence.d.mts +30 -0
  177. package/dist/capture/db-queue/cadence.mjs +37 -0
  178. package/dist/capture/db-queue/cadence.mjs.map +1 -0
  179. package/dist/capture/db-queue/claim.d.mts +7 -0
  180. package/dist/capture/db-queue/claim.mjs +148 -0
  181. package/dist/capture/db-queue/claim.mjs.map +1 -0
  182. package/dist/capture/db-queue/clock.mjs +11 -0
  183. package/dist/capture/db-queue/clock.mjs.map +1 -0
  184. package/dist/capture/db-queue/codec.mjs +75 -0
  185. package/dist/capture/db-queue/codec.mjs.map +1 -0
  186. package/dist/capture/db-queue/index.d.mts +18 -0
  187. package/dist/capture/db-queue/index.mjs +89 -0
  188. package/dist/capture/db-queue/index.mjs.map +1 -0
  189. package/dist/capture/db-queue/keeper.d.mts +34 -0
  190. package/dist/capture/db-queue/keeper.mjs +91 -0
  191. package/dist/capture/db-queue/keeper.mjs.map +1 -0
  192. package/dist/capture/db-queue/lease.mjs +45 -0
  193. package/dist/capture/db-queue/lease.mjs.map +1 -0
  194. package/dist/capture/db-queue/lifecycle.mjs +35 -0
  195. package/dist/capture/db-queue/lifecycle.mjs.map +1 -0
  196. package/dist/capture/db-queue/operations.mjs +93 -0
  197. package/dist/capture/db-queue/operations.mjs.map +1 -0
  198. package/dist/capture/db-queue/poll-loop.d.mts +28 -0
  199. package/dist/capture/db-queue/poll-loop.mjs +88 -0
  200. package/dist/capture/db-queue/poll-loop.mjs.map +1 -0
  201. package/dist/capture/db-queue/poll.d.mts +8 -0
  202. package/dist/capture/db-queue/poll.mjs +68 -0
  203. package/dist/capture/db-queue/poll.mjs.map +1 -0
  204. package/dist/capture/db-queue/timers.d.mts +10 -0
  205. package/dist/capture/db-queue/timers.mjs +36 -0
  206. package/dist/capture/db-queue/timers.mjs.map +1 -0
  207. package/dist/capture/db-queue/types.d.mts +81 -0
  208. package/dist/capture/db-queue/types.mjs +11 -0
  209. package/dist/capture/db-queue/types.mjs.map +1 -0
  210. package/dist/capture/db-queue/wake.mjs +47 -0
  211. package/dist/capture/db-queue/wake.mjs.map +1 -0
  212. package/dist/capture/design.mjs +38 -0
  213. package/dist/capture/design.mjs.map +1 -0
  214. package/dist/capture/diff-record.mjs +24 -5
  215. package/dist/capture/diff-record.mjs.map +1 -1
  216. package/dist/capture/dispatch.d.mts +13 -10
  217. package/dist/capture/dispatch.mjs +102 -111
  218. package/dist/capture/dispatch.mjs.map +1 -1
  219. package/dist/capture/enrich.mjs +59 -0
  220. package/dist/capture/enrich.mjs.map +1 -0
  221. package/dist/capture/failure-sets.mjs +21 -0
  222. package/dist/capture/failure-sets.mjs.map +1 -0
  223. package/dist/capture/fingerprint.d.mts +40 -0
  224. package/dist/capture/fingerprint.mjs +82 -0
  225. package/dist/capture/fingerprint.mjs.map +1 -0
  226. package/dist/capture/forked/channel.d.mts +23 -0
  227. package/dist/capture/forked/child.d.mts +32 -0
  228. package/dist/capture/forked/child.mjs +201 -0
  229. package/dist/capture/forked/child.mjs.map +1 -0
  230. package/dist/capture/forked/crash-tracker.mjs +22 -0
  231. package/dist/capture/forked/crash-tracker.mjs.map +1 -0
  232. package/dist/capture/forked/decision.d.mts +24 -0
  233. package/dist/capture/forked/decision.mjs +26 -0
  234. package/dist/capture/forked/decision.mjs.map +1 -0
  235. package/dist/capture/forked/exit.mjs +11 -0
  236. package/dist/capture/forked/exit.mjs.map +1 -0
  237. package/dist/capture/forked/fork.d.mts +29 -0
  238. package/dist/capture/forked/fork.mjs +92 -0
  239. package/dist/capture/forked/fork.mjs.map +1 -0
  240. package/dist/capture/forked/forked-capture.d.mts +38 -0
  241. package/dist/capture/forked/forked-capture.mjs +239 -0
  242. package/dist/capture/forked/forked-capture.mjs.map +1 -0
  243. package/dist/capture/forked/lease-book.mjs +45 -0
  244. package/dist/capture/forked/lease-book.mjs.map +1 -0
  245. package/dist/capture/forked/protocol.d.mts +36 -0
  246. package/dist/capture/forked/protocol.mjs +24 -0
  247. package/dist/capture/forked/protocol.mjs.map +1 -0
  248. package/dist/capture/forked/runs.mjs +74 -0
  249. package/dist/capture/forked/runs.mjs.map +1 -0
  250. package/dist/capture/guards.mjs +1 -2
  251. package/dist/capture/ignore-regions.d.mts +36 -0
  252. package/dist/capture/ignore-regions.mjs +65 -0
  253. package/dist/capture/ignore-regions.mjs.map +1 -0
  254. package/dist/capture/isolate.mjs +140 -0
  255. package/dist/capture/isolate.mjs.map +1 -0
  256. package/dist/capture/job-lease.d.mts +26 -0
  257. package/dist/capture/job-lease.mjs +56 -0
  258. package/dist/capture/job-lease.mjs.map +1 -0
  259. package/dist/capture/matrix.mjs +298 -0
  260. package/dist/capture/matrix.mjs.map +1 -0
  261. package/dist/capture/modes.d.mts +23 -0
  262. package/dist/capture/modes.mjs +106 -0
  263. package/dist/capture/modes.mjs.map +1 -0
  264. package/dist/capture/orchestrator.d.mts +37 -7
  265. package/dist/capture/orchestrator.mjs +120 -110
  266. package/dist/capture/orchestrator.mjs.map +1 -1
  267. package/dist/capture/pipeline.d.mts +9 -4
  268. package/dist/capture/pipeline.mjs +284 -48
  269. package/dist/capture/pipeline.mjs.map +1 -1
  270. package/dist/capture/progress.d.mts +9 -0
  271. package/dist/capture/progress.mjs +27 -0
  272. package/dist/capture/progress.mjs.map +1 -0
  273. package/dist/capture/publish/accept.d.mts +37 -0
  274. package/dist/capture/publish/accept.mjs +27 -0
  275. package/dist/capture/publish/accept.mjs.map +1 -0
  276. package/dist/capture/publish/complete.d.mts +44 -0
  277. package/dist/capture/publish/complete.mjs +63 -0
  278. package/dist/capture/publish/complete.mjs.map +1 -0
  279. package/dist/capture/publish/extract.d.mts +18 -0
  280. package/dist/capture/publish/extract.mjs +120 -0
  281. package/dist/capture/publish/extract.mjs.map +1 -0
  282. package/dist/capture/publish/handler.d.mts +26 -0
  283. package/dist/capture/publish/handler.mjs +61 -0
  284. package/dist/capture/publish/handler.mjs.map +1 -0
  285. package/dist/capture/publish/index.d.mts +11 -0
  286. package/dist/capture/publish/invalid-zip.d.mts +8 -0
  287. package/dist/capture/publish/invalid-zip.mjs +11 -0
  288. package/dist/capture/publish/invalid-zip.mjs.map +1 -0
  289. package/dist/capture/publish/limits.d.mts +35 -0
  290. package/dist/capture/publish/limits.mjs +38 -0
  291. package/dist/capture/publish/limits.mjs.map +1 -0
  292. package/dist/capture/publish/published.d.mts +13 -0
  293. package/dist/capture/publish/published.mjs +17 -0
  294. package/dist/capture/publish/published.mjs.map +1 -0
  295. package/dist/capture/publish/run.d.mts +31 -0
  296. package/dist/capture/publish/run.mjs +29 -0
  297. package/dist/capture/publish/run.mjs.map +1 -0
  298. package/dist/capture/rediff.d.mts +1 -3
  299. package/dist/capture/rediff.mjs +23 -9
  300. package/dist/capture/rediff.mjs.map +1 -1
  301. package/dist/capture/render.mjs +52 -0
  302. package/dist/capture/render.mjs.map +1 -0
  303. package/dist/capture/scratch.d.mts +42 -0
  304. package/dist/capture/scratch.mjs +136 -0
  305. package/dist/capture/scratch.mjs.map +1 -0
  306. package/dist/capture/shard-plan.mjs +127 -0
  307. package/dist/capture/shard-plan.mjs.map +1 -0
  308. package/dist/capture/shards/context.mjs +51 -0
  309. package/dist/capture/shards/context.mjs.map +1 -0
  310. package/dist/capture/shards/execute.mjs +175 -0
  311. package/dist/capture/shards/execute.mjs.map +1 -0
  312. package/dist/capture/shards/fan-out.mjs +125 -0
  313. package/dist/capture/shards/fan-out.mjs.map +1 -0
  314. package/dist/capture/shards/history.mjs +34 -0
  315. package/dist/capture/shards/history.mjs.map +1 -0
  316. package/dist/capture/shards/reduce.mjs +96 -0
  317. package/dist/capture/shards/reduce.mjs.map +1 -0
  318. package/dist/capture/sizing.d.mts +0 -2
  319. package/dist/capture/sizing.mjs +2 -13
  320. package/dist/capture/sizing.mjs.map +1 -1
  321. package/dist/capture/skip-checks.mjs +3 -67
  322. package/dist/capture/skip-checks.mjs.map +1 -1
  323. package/dist/capture/statics.d.mts +7 -10
  324. package/dist/capture/statics.mjs +26 -74
  325. package/dist/capture/statics.mjs.map +1 -1
  326. package/dist/capture/storybook-urls.d.mts +38 -0
  327. package/dist/capture/storybook-urls.mjs +41 -0
  328. package/dist/capture/storybook-urls.mjs.map +1 -0
  329. package/dist/capture/storybook.d.mts +12 -6
  330. package/dist/capture/storybook.mjs +63 -19
  331. package/dist/capture/storybook.mjs.map +1 -1
  332. package/dist/capture/target.mjs +20 -0
  333. package/dist/capture/target.mjs.map +1 -0
  334. package/dist/capture/targets.d.mts +23 -0
  335. package/dist/capture/targets.mjs +31 -0
  336. package/dist/capture/targets.mjs.map +1 -0
  337. package/dist/capture/tests.d.mts +35 -0
  338. package/dist/capture/tests.mjs +136 -0
  339. package/dist/capture/tests.mjs.map +1 -0
  340. package/dist/capture/token-chunks.mjs +91 -0
  341. package/dist/capture/token-chunks.mjs.map +1 -0
  342. package/dist/capture.d.mts +63 -7
  343. package/dist/capture.mjs +51 -3
  344. package/dist/config.d.mts +136 -14
  345. package/dist/config.mjs +14 -8
  346. package/dist/config.mjs.map +1 -1
  347. package/dist/diff.d.mts +7 -3
  348. package/dist/diff.mjs +15 -3
  349. package/dist/diff.mjs.map +1 -0
  350. package/dist/index.d.mts +3 -3
  351. package/dist/index.mjs +2 -2
  352. package/dist/insights/budget.d.mts +18 -0
  353. package/dist/insights/budget.mjs +32 -0
  354. package/dist/insights/budget.mjs.map +1 -0
  355. package/dist/insights/envelope.d.mts +57 -0
  356. package/dist/insights/envelope.mjs +59 -0
  357. package/dist/insights/envelope.mjs.map +1 -0
  358. package/dist/insights/evidence-health.d.mts +30 -0
  359. package/dist/insights/evidence-health.mjs +27 -0
  360. package/dist/insights/evidence-health.mjs.map +1 -0
  361. package/dist/insights/evidence.d.mts +53 -0
  362. package/dist/insights/evidence.mjs +63 -0
  363. package/dist/insights/evidence.mjs.map +1 -0
  364. package/dist/insights/hash.d.mts +16 -0
  365. package/dist/insights/hash.mjs +20 -0
  366. package/dist/insights/hash.mjs.map +1 -0
  367. package/dist/insights/limits.d.mts +22 -0
  368. package/dist/insights/limits.mjs +23 -0
  369. package/dist/insights/limits.mjs.map +1 -0
  370. package/dist/insights/prompts/v1.d.mts +11 -0
  371. package/dist/insights/prompts/v1.mjs +33 -0
  372. package/dist/insights/prompts/v1.mjs.map +1 -0
  373. package/dist/insights/redact.d.mts +7 -0
  374. package/dist/insights/redact.mjs +23 -0
  375. package/dist/insights/redact.mjs.map +1 -0
  376. package/dist/insights/text.mjs +43 -0
  377. package/dist/insights/text.mjs.map +1 -0
  378. package/dist/insights.d.mts +11 -0
  379. package/dist/insights.mjs +12 -0
  380. package/dist/logger.d.mts +0 -2
  381. package/dist/logger.mjs +18 -3
  382. package/dist/logger.mjs.map +1 -1
  383. package/dist/models/ai-budget-alert.d.mts +21 -0
  384. package/dist/models/ai-budget-alert.mjs +37 -0
  385. package/dist/models/ai-budget-alert.mjs.map +1 -0
  386. package/dist/models/ai-usage.d.mts +38 -0
  387. package/dist/models/ai-usage.mjs +60 -0
  388. package/dist/models/ai-usage.mjs.map +1 -0
  389. package/dist/models/baseline-approval.d.mts +18 -0
  390. package/dist/models/baseline-approval.mjs +41 -0
  391. package/dist/models/baseline-approval.mjs.map +1 -0
  392. package/dist/models/baseline-archive.d.mts +82 -0
  393. package/dist/models/baseline-archive.mjs +105 -0
  394. package/dist/models/baseline-archive.mjs.map +1 -0
  395. package/dist/models/baseline-atomic.mjs +66 -0
  396. package/dist/models/baseline-atomic.mjs.map +1 -0
  397. package/dist/models/baseline-conflict.d.mts +6 -0
  398. package/dist/models/baseline-conflict.mjs +9 -0
  399. package/dist/models/baseline-conflict.mjs.map +1 -0
  400. package/dist/models/baseline-export.d.mts +17 -0
  401. package/dist/models/baseline-export.mjs +135 -0
  402. package/dist/models/baseline-export.mjs.map +1 -0
  403. package/dist/models/baseline-import.mjs +117 -0
  404. package/dist/models/baseline-import.mjs.map +1 -0
  405. package/dist/models/baseline-origin.d.mts +16 -0
  406. package/dist/models/baseline-origin.mjs +35 -0
  407. package/dist/models/baseline-origin.mjs.map +1 -0
  408. package/dist/models/baseline-status.d.mts +0 -2
  409. package/dist/models/baseline-status.mjs +1 -2
  410. package/dist/models/baseline-transfer.d.mts +48 -0
  411. package/dist/models/baseline-transfer.mjs +149 -0
  412. package/dist/models/baseline-transfer.mjs.map +1 -0
  413. package/dist/models/baseline.d.mts +37 -7
  414. package/dist/models/baseline.mjs +152 -28
  415. package/dist/models/baseline.mjs.map +1 -1
  416. package/dist/models/build-component.d.mts +26 -0
  417. package/dist/models/build-component.mjs +54 -0
  418. package/dist/models/build-component.mjs.map +1 -0
  419. package/dist/models/build-review-status.d.mts +27 -0
  420. package/dist/models/build-review-status.mjs +36 -0
  421. package/dist/models/build-review-status.mjs.map +1 -0
  422. package/dist/models/build-review.d.mts +26 -0
  423. package/dist/models/build-review.mjs +53 -0
  424. package/dist/models/build-review.mjs.map +1 -0
  425. package/dist/models/build.d.mts +25 -5
  426. package/dist/models/build.mjs +53 -15
  427. package/dist/models/build.mjs.map +1 -1
  428. package/dist/models/capture-attempt.d.mts +7 -3
  429. package/dist/models/capture-attempt.mjs +30 -6
  430. package/dist/models/capture-attempt.mjs.map +1 -1
  431. package/dist/models/capture-job.d.mts +104 -0
  432. package/dist/models/capture-job.mjs +287 -0
  433. package/dist/models/capture-job.mjs.map +1 -0
  434. package/dist/models/capture-log.d.mts +1 -3
  435. package/dist/models/capture-log.mjs +5 -5
  436. package/dist/models/capture-log.mjs.map +1 -1
  437. package/dist/models/capture-shard.d.mts +60 -0
  438. package/dist/models/capture-shard.mjs +189 -0
  439. package/dist/models/capture-shard.mjs.map +1 -0
  440. package/dist/models/changeset.d.mts +46 -0
  441. package/dist/models/changeset.mjs +80 -0
  442. package/dist/models/changeset.mjs.map +1 -0
  443. package/dist/models/columns.mjs +18 -0
  444. package/dist/models/columns.mjs.map +1 -0
  445. package/dist/models/comment.d.mts +4 -3
  446. package/dist/models/comment.mjs +8 -6
  447. package/dist/models/comment.mjs.map +1 -1
  448. package/dist/models/component.d.mts +41 -0
  449. package/dist/models/component.mjs +59 -0
  450. package/dist/models/component.mjs.map +1 -0
  451. package/dist/models/connections.d.mts +39 -0
  452. package/dist/models/connections.mjs +111 -0
  453. package/dist/models/connections.mjs.map +1 -0
  454. package/dist/models/content-ref.d.mts +1 -3
  455. package/dist/models/content-ref.mjs +2 -3
  456. package/dist/models/content-ref.mjs.map +1 -1
  457. package/dist/models/credentials.d.mts +0 -2
  458. package/dist/models/credentials.mjs +13 -4
  459. package/dist/models/credentials.mjs.map +1 -1
  460. package/dist/models/design-credentials.d.mts +39 -0
  461. package/dist/models/design-credentials.mjs +85 -0
  462. package/dist/models/design-credentials.mjs.map +1 -0
  463. package/dist/models/design-health.d.mts +14 -0
  464. package/dist/models/design-health.mjs +24 -0
  465. package/dist/models/design-health.mjs.map +1 -0
  466. package/dist/models/design-nodes.d.mts +81 -0
  467. package/dist/models/design-nodes.mjs +221 -0
  468. package/dist/models/design-nodes.mjs.map +1 -0
  469. package/dist/models/design-renders.mjs +73 -0
  470. package/dist/models/design-renders.mjs.map +1 -0
  471. package/dist/models/design-resolve.d.mts +27 -0
  472. package/dist/models/design-resolve.mjs +40 -0
  473. package/dist/models/design-resolve.mjs.map +1 -0
  474. package/dist/models/design.d.mts +37 -0
  475. package/dist/models/design.mjs +89 -0
  476. package/dist/models/design.mjs.map +1 -0
  477. package/dist/models/inherited-ratio.d.mts +19 -0
  478. package/dist/models/inherited-ratio.mjs +21 -0
  479. package/dist/models/inherited-ratio.mjs.map +1 -0
  480. package/dist/models/insight.d.mts +68 -0
  481. package/dist/models/insight.mjs +161 -0
  482. package/dist/models/insight.mjs.map +1 -0
  483. package/dist/models/label.d.mts +4 -4
  484. package/dist/models/label.mjs +26 -12
  485. package/dist/models/label.mjs.map +1 -1
  486. package/dist/models/member.d.mts +1 -3
  487. package/dist/models/member.mjs +6 -6
  488. package/dist/models/member.mjs.map +1 -1
  489. package/dist/models/notification-channel.d.mts +37 -5
  490. package/dist/models/notification-channel.mjs +89 -11
  491. package/dist/models/notification-channel.mjs.map +1 -1
  492. package/dist/models/notification-subscription.d.mts +1 -4
  493. package/dist/models/notification-subscription.mjs +8 -11
  494. package/dist/models/notification-subscription.mjs.map +1 -1
  495. package/dist/models/project-group-mapping.d.mts +6 -3
  496. package/dist/models/project-group-mapping.mjs +15 -6
  497. package/dist/models/project-group-mapping.mjs.map +1 -1
  498. package/dist/models/project.d.mts +9 -3
  499. package/dist/models/project.mjs +10 -6
  500. package/dist/models/project.mjs.map +1 -1
  501. package/dist/models/public-origin.d.mts +61 -0
  502. package/dist/models/public-origin.mjs +113 -0
  503. package/dist/models/public-origin.mjs.map +1 -0
  504. package/dist/models/review-switch-off.d.mts +12 -0
  505. package/dist/models/review-switch-off.mjs +25 -0
  506. package/dist/models/review-switch-off.mjs.map +1 -0
  507. package/dist/models/site-settings.d.mts +21 -0
  508. package/dist/models/site-settings.mjs +47 -0
  509. package/dist/models/site-settings.mjs.map +1 -0
  510. package/dist/models/snapshot.d.mts +39 -3
  511. package/dist/models/snapshot.mjs +54 -5
  512. package/dist/models/snapshot.mjs.map +1 -1
  513. package/dist/models/token.d.mts +13 -3
  514. package/dist/models/token.mjs +24 -7
  515. package/dist/models/token.mjs.map +1 -1
  516. package/dist/models/usage.d.mts +74 -0
  517. package/dist/models/usage.mjs +148 -0
  518. package/dist/models/usage.mjs.map +1 -0
  519. package/dist/models/user.d.mts +1 -3
  520. package/dist/models/user.mjs +5 -5
  521. package/dist/models/user.mjs.map +1 -1
  522. package/dist/models/webhook.d.mts +15 -3
  523. package/dist/models/webhook.mjs +34 -6
  524. package/dist/models/webhook.mjs.map +1 -1
  525. package/dist/models.d.mts +30 -4
  526. package/dist/models.mjs +31 -6
  527. package/dist/options.d.mts +16 -0
  528. package/dist/options.mjs +88 -0
  529. package/dist/options.mjs.map +1 -0
  530. package/dist/paths.d.mts +21 -6
  531. package/dist/paths.mjs +57 -12
  532. package/dist/paths.mjs.map +1 -1
  533. package/dist/retention/ai.d.mts +16 -0
  534. package/dist/retention/ai.mjs +22 -0
  535. package/dist/retention/ai.mjs.map +1 -0
  536. package/dist/retention/pending.mjs +46 -0
  537. package/dist/retention/pending.mjs.map +1 -0
  538. package/dist/retention/published-gzip-sweep.mjs +28 -0
  539. package/dist/retention/published-gzip-sweep.mjs.map +1 -0
  540. package/dist/retention/screenshot-sweep.d.mts +49 -0
  541. package/dist/retention/screenshot-sweep.mjs +127 -0
  542. package/dist/retention/screenshot-sweep.mjs.map +1 -0
  543. package/dist/retention.d.mts +16 -4
  544. package/dist/retention.mjs +76 -16
  545. package/dist/retention.mjs.map +1 -1
  546. package/dist/schema/baseline.d.mts +8 -2
  547. package/dist/schema/build-component.d.mts +23 -0
  548. package/dist/schema/build-review.d.mts +15 -0
  549. package/dist/schema/build.d.mts +7 -2
  550. package/dist/schema/capture-attempt.d.mts +0 -2
  551. package/dist/schema/capture-job.d.mts +58 -0
  552. package/dist/schema/capture-shard.d.mts +33 -0
  553. package/dist/schema/comment.d.mts +2 -2
  554. package/dist/schema/connection.d.mts +22 -0
  555. package/dist/schema/content-ref.d.mts +0 -2
  556. package/dist/schema/design.d.mts +56 -0
  557. package/dist/schema/insight.d.mts +52 -0
  558. package/dist/schema/label.d.mts +0 -2
  559. package/dist/schema/member.d.mts +0 -2
  560. package/dist/schema/notification.d.mts +4 -2
  561. package/dist/schema/project-group-mapping.d.mts +0 -2
  562. package/dist/schema/project.d.mts +21 -2
  563. package/dist/schema/site-setting.d.mts +19 -0
  564. package/dist/schema/snapshot.d.mts +17 -2
  565. package/dist/schema/token.d.mts +0 -2
  566. package/dist/schema/usage.d.mts +28 -0
  567. package/dist/schema/user.d.mts +0 -2
  568. package/dist/schema/webhook.d.mts +0 -2
  569. package/dist/schema.d.mts +12 -6
  570. package/dist/serverless.d.mts +19 -0
  571. package/dist/serverless.mjs +36 -0
  572. package/dist/serverless.mjs.map +1 -0
  573. package/dist/test-helpers/build-reference-contract.d.mts +14 -0
  574. package/dist/test-helpers/build-reference-contract.mjs +66 -0
  575. package/dist/test-helpers/build-reference-contract.mjs.map +1 -0
  576. package/dist/test-helpers/create-project.d.mts +1 -3
  577. package/dist/test-helpers/create-project.mjs +1 -2
  578. package/dist/test-helpers/database-contract.d.mts +0 -2
  579. package/dist/test-helpers/database-contract.mjs +37 -2
  580. package/dist/test-helpers/database-contract.mjs.map +1 -1
  581. package/dist/test-helpers/deferred.d.mts +37 -0
  582. package/dist/test-helpers/deferred.mjs +60 -0
  583. package/dist/test-helpers/deferred.mjs.map +1 -0
  584. package/dist/test-helpers/design-contract.d.mts +19 -0
  585. package/dist/test-helpers/design-contract.mjs +39 -0
  586. package/dist/test-helpers/design-contract.mjs.map +1 -0
  587. package/dist/test-helpers/fake-adapters.d.mts +0 -2
  588. package/dist/test-helpers/fake-adapters.mjs +1 -2
  589. package/dist/test-helpers/fake-database.d.mts +0 -2
  590. package/dist/test-helpers/fake-database.mjs +21 -4
  591. package/dist/test-helpers/fake-database.mjs.map +1 -1
  592. package/dist/test-helpers/fake-design.d.mts +41 -0
  593. package/dist/test-helpers/fake-design.mjs +113 -0
  594. package/dist/test-helpers/fake-design.mjs.map +1 -0
  595. package/dist/test-helpers/fake-notifier.d.mts +19 -0
  596. package/dist/test-helpers/fake-notifier.mjs +43 -0
  597. package/dist/test-helpers/fake-notifier.mjs.map +1 -0
  598. package/dist/test-helpers/fake-storage.d.mts +0 -2
  599. package/dist/test-helpers/fake-storage.mjs +1 -2
  600. package/dist/test-helpers/fake-tables.mjs +260 -69
  601. package/dist/test-helpers/fake-tables.mjs.map +1 -1
  602. package/dist/test-helpers/manual-clock.d.mts +25 -0
  603. package/dist/test-helpers/manual-clock.mjs +55 -0
  604. package/dist/test-helpers/manual-clock.mjs.map +1 -0
  605. package/dist/test-helpers/notifier-contract.d.mts +7 -3
  606. package/dist/test-helpers/notifier-contract.mjs +33 -5
  607. package/dist/test-helpers/notifier-contract.mjs.map +1 -1
  608. package/dist/test-helpers/queue-contract.d.mts +16 -4
  609. package/dist/test-helpers/queue-contract.mjs +196 -3
  610. package/dist/test-helpers/queue-contract.mjs.map +1 -1
  611. package/dist/test-helpers/queue-multi-instance.d.mts +18 -0
  612. package/dist/test-helpers/queue-multi-instance.mjs +205 -0
  613. package/dist/test-helpers/queue-multi-instance.mjs.map +1 -0
  614. package/dist/test-helpers/runner-contract.d.mts +0 -2
  615. package/dist/test-helpers/runner-contract.mjs +12 -2
  616. package/dist/test-helpers/runner-contract.mjs.map +1 -1
  617. package/dist/test-helpers/sql-chunks.mjs +25 -2
  618. package/dist/test-helpers/sql-chunks.mjs.map +1 -1
  619. package/dist/test-helpers/storage-contract.d.mts +0 -2
  620. package/dist/test-helpers/storage-contract.mjs +2 -3
  621. package/dist/test-helpers.d.mts +10 -4
  622. package/dist/test-helpers.mjs +9 -3
  623. package/dist/tracing.mjs +36 -6
  624. package/dist/tracing.mjs.map +1 -1
  625. package/dist/types.d.mts +14 -5
  626. package/dist/types.mjs +22 -6
  627. package/dist/types.mjs.map +1 -1
  628. package/dist/urls.d.mts +4 -2
  629. package/dist/urls.mjs +12 -4
  630. package/dist/urls.mjs.map +1 -1
  631. package/dist/utils/adaptive-concurrency.d.mts +64 -0
  632. package/dist/utils/adaptive-concurrency.mjs +148 -0
  633. package/dist/utils/adaptive-concurrency.mjs.map +1 -0
  634. package/dist/utils/connect-retry.d.mts +26 -0
  635. package/dist/utils/connect-retry.mjs +42 -0
  636. package/dist/utils/connect-retry.mjs.map +1 -0
  637. package/dist/utils/encrypt.d.mts +0 -2
  638. package/dist/utils/encrypt.mjs +1 -2
  639. package/dist/utils/environment.d.mts +17 -0
  640. package/dist/utils/environment.mjs +58 -0
  641. package/dist/utils/environment.mjs.map +1 -0
  642. package/dist/utils/hash.d.mts +0 -2
  643. package/dist/utils/hash.mjs +1 -2
  644. package/dist/utils/http.d.mts +29 -3
  645. package/dist/utils/http.mjs +100 -19
  646. package/dist/utils/http.mjs.map +1 -1
  647. package/dist/utils/map-adaptive.d.mts +13 -0
  648. package/dist/utils/map-adaptive.mjs +71 -0
  649. package/dist/utils/map-adaptive.mjs.map +1 -0
  650. package/dist/utils/map-limit.d.mts +8 -0
  651. package/dist/utils/map-limit.mjs +31 -0
  652. package/dist/utils/map-limit.mjs.map +1 -0
  653. package/dist/utils/mime.d.mts +0 -2
  654. package/dist/utils/mime.mjs +1 -2
  655. package/dist/utils/page-limiter.d.mts +35 -0
  656. package/dist/utils/page-limiter.mjs +55 -0
  657. package/dist/utils/page-limiter.mjs.map +1 -0
  658. package/dist/utils/path-security.d.mts +0 -2
  659. package/dist/utils/path-security.mjs +2 -4
  660. package/dist/utils/path-security.mjs.map +1 -1
  661. package/dist/utils/public-origin.d.mts +18 -0
  662. package/dist/utils/public-origin.mjs +74 -0
  663. package/dist/utils/public-origin.mjs.map +1 -0
  664. package/dist/utils/redact.d.mts +0 -2
  665. package/dist/utils/redact.mjs +4 -2
  666. package/dist/utils/redact.mjs.map +1 -1
  667. package/dist/utils/remote-environment.d.mts +76 -0
  668. package/dist/utils/remote-environment.mjs +163 -0
  669. package/dist/utils/remote-environment.mjs.map +1 -0
  670. package/dist/utils/resources.d.mts +62 -0
  671. package/dist/utils/resources.mjs +121 -0
  672. package/dist/utils/resources.mjs.map +1 -0
  673. package/dist/utils/screenshot-store.d.mts +13 -0
  674. package/dist/utils/screenshot-store.mjs +40 -0
  675. package/dist/utils/screenshot-store.mjs.map +1 -0
  676. package/dist/utils/session-gate.d.mts +23 -0
  677. package/dist/utils/session-gate.mjs +69 -0
  678. package/dist/utils/session-gate.mjs.map +1 -0
  679. package/dist/utils/storybook-token.d.mts +89 -0
  680. package/dist/utils/storybook-token.mjs +135 -0
  681. package/dist/utils/storybook-token.mjs.map +1 -0
  682. package/dist/utils/storybook-url.d.mts +13 -0
  683. package/dist/utils/storybook-url.mjs +20 -0
  684. package/dist/utils/storybook-url.mjs.map +1 -0
  685. package/dist/utils/timing.d.mts +0 -2
  686. package/dist/utils/timing.mjs +2 -3
  687. package/dist/utils/timing.mjs.map +1 -1
  688. package/dist/utils/ulid.d.mts +0 -2
  689. package/dist/utils/ulid.mjs +1 -2
  690. package/dist/utils/zip-read.mjs +128 -0
  691. package/dist/utils/zip-read.mjs.map +1 -0
  692. package/dist/utils/zip-write.d.mts +16 -0
  693. package/dist/utils/zip-write.mjs +187 -0
  694. package/dist/utils/zip-write.mjs.map +1 -0
  695. package/dist/utils.d.mts +17 -3
  696. package/dist/utils.mjs +18 -4
  697. package/package.json +35 -26
  698. package/dist/adapter/capture-runner.mjs.map +0 -1
  699. package/dist/adapter/git-host/comments.d.mts +0 -41
  700. package/dist/adapter/git-host/comments.mjs +0 -54
  701. package/dist/adapter/git-host/comments.mjs.map +0 -1
  702. package/dist/adapter/git-host/helpers.d.mts +0 -13
  703. package/dist/adapter/git-host/helpers.mjs +0 -30
  704. package/dist/adapter/git-host/helpers.mjs.map +0 -1
  705. package/dist/adapter/git-host.d.mts +0 -42
  706. package/dist/capture/queue.d.mts +0 -38
  707. package/dist/capture/queue.mjs +0 -98
  708. package/dist/capture/queue.mjs.map +0 -1
  709. package/dist/capture/recovery.d.mts +0 -21
  710. package/dist/capture/recovery.mjs +0 -83
  711. package/dist/capture/recovery.mjs.map +0 -1
  712. package/dist/capture/status-fanout.mjs +0 -72
  713. package/dist/capture/status-fanout.mjs.map +0 -1
  714. package/dist/diff/engine.d.mts +0 -16
  715. package/dist/diff/engine.mjs +0 -87
  716. package/dist/diff/engine.mjs.map +0 -1
  717. package/dist/diff/options.d.mts +0 -42
  718. package/dist/diff/options.mjs +0 -15
  719. package/dist/diff/options.mjs.map +0 -1
  720. package/dist/models/status-config.d.mts +0 -38
  721. package/dist/models/status-config.mjs +0 -63
  722. package/dist/models/status-config.mjs.map +0 -1
  723. package/dist/schema/status-config.d.mts +0 -16
  724. package/dist/test-helpers/git-contract.d.mts +0 -11
  725. package/dist/test-helpers/git-contract.mjs +0 -34
  726. package/dist/test-helpers/git-contract.mjs.map +0 -1
  727. /package/dist/adapter/{git-host.mjs → oauth.mjs} +0 -0
@@ -1,14 +1,70 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
- import { DEFAULT_VIEWPORTS, StoryEntry, StoryParameters, StorySourceAdapter, StoryViewportConfig, StoryViewportDefinition, Viewport, isDisabledStory, isFlakyStory } from "./capture/adapter.mjs";
4
- import { PollableCaptureQueue, PollableJob } from "./adapter/capture-queue.mjs";
3
+ import { DEFAULT_VIEWPORTS, ModeDefinition, ModeMap, ModeViewportValue, StoryEntry, StoryParameters, StorySourceAdapter, StoryViewportConfig, StoryViewportDefinition, Viewport, isDisabledStory, isFlakyStory } from "./capture/adapter.mjs";
4
+ import { LeaseRenewal, PollableCaptureQueue, PollableJob } from "./adapter/capture-queue.mjs";
5
+ import { MAX_BROWSERS, assertBrowserCount, assertSupportedBrowsers, listTargets, parseBrowsers, primaryTargetOf, refusalFor, resolveBrowsers } from "./capture/browsers.mjs";
6
+ import { NO_ORIGIN_REASON, NO_SECRET_REASON, TargetPrerequisites, offeredTargets } from "./capture/targets.mjs";
7
+ import { StorybookUrlSource, storybookUrlSource } from "./capture/storybook-urls.mjs";
8
+ import { DEFAULT_IGNORE_SELECTORS, IgnoreSelectorList, MAX_IGNORE_SELECTORS, cleanIgnoreSelectors, declaredIgnoreSelectors, ignoreStylesheet, isSafeIgnoreSelector } from "./capture/ignore-regions.mjs";
9
+ import { MAX_MODES_PER_STORY, buildGlobalsParam, filterModes, modeSlug, parseModesAllowlist } from "./capture/modes.mjs";
10
+ import { TestResult, TestSummary, parseTestResults, summarizeTests } from "./capture/tests.mjs";
11
+ import { JobLease, ProgressLease } from "./capture/job-lease.mjs";
5
12
  import { CaptureContext, persistCapture } from "./capture/pipeline.mjs";
13
+ import { DEFAULT_MAX_INLINE_UNZIP_SIZE, DEFAULT_MAX_UNZIPPED_BYTES, DEFAULT_MAX_ZIP_ENTRIES, ExtractionLimits, FILE_BY_FILE_HINT, PublishLimits, ZipLimitError, extractionLimitsOf, publishRoute, resolvePublishLimits } from "./capture/publish/limits.mjs";
6
14
  import { CaptureAttemptRef, CaptureJobInput, CaptureJobOptions, executeCaptureJob } from "./capture/orchestrator.mjs";
7
- import { REDIFFABLE_BUILD_STATUSES, RediffDeps, RediffResult, rediffBuild } from "./capture/rediff.mjs";
15
+ import { SCRATCH_DIRNAME, SCRATCH_MAX_AGE_MS, ScratchSweepOptions, buildScratchDir, removeBuildScratch, removeJobScratch, sweepOrphanedScratch } from "./capture/scratch.mjs";
16
+ import { BoundingBox, SIZING_DEFAULTS, ScreenshotPlan, SizingOptions, getScreenshotPlan, resolveViewports } from "./capture/sizing.mjs";
17
+ import { EnvironmentChange, Fingerprint, buildFingerprint, changedFields, fingerprintHash, parseFingerprint } from "./capture/fingerprint.mjs";
18
+ import { axeInjectionScript, loadAxeSource } from "./capture/a11y/axe-source.mjs";
19
+ import { MAX_REPORTED_VIOLATIONS, SlimViolation, mapAxeViolations } from "./capture/a11y/map.mjs";
20
+ import { A11Y_ROOT_SELECTOR, A11yRunPlan, resolveA11yRun } from "./capture/a11y/options.mjs";
21
+ import { inPageReadA11yParameters, inPageRunAxe } from "./capture/a11y/in-page.mjs";
22
+ import { BuildStateDeps, BuildStatePublisher, SkipReason, StateTarget } from "./capture/build-state/types.mjs";
23
+ import { deliverBuildState, loadBuild, stateTargets, writeTo } from "./capture/build-state/deliver.mjs";
24
+ import { ACTIVE_POLL_MS, ACTIVE_WINDOW_MS, CANCEL_CHECK_MS, DEFAULT_CADENCE, IDLE_POLL_MS, POLL_JITTER, PollCadence, nextPollDelay } from "./capture/db-queue/cadence.mjs";
8
25
  import { CaptureDispatchJob, DispatchDeps, createDispatchJob } from "./capture/dispatch.mjs";
9
- import { INTERRUPTED_ERROR, RecoveryDeps, RecoveryResult, recoverStuckCaptures } from "./capture/recovery.mjs";
10
- import { InMemoryCaptureQueue, InMemoryCaptureQueueOptions } from "./capture/queue.mjs";
26
+ import { CaptureHandlerOptions, captureDispatchDeps, createCaptureHandler } from "./capture/consumer/capture-handler.mjs";
27
+ import { ConsumerMetrics, DEFAULT_SAMPLE_MS, JobFinishedEvent, JobOutcome, QueueSample, sampleQueue } from "./capture/consumer/metrics.mjs";
28
+ import { DEFAULT_BACKOFF_MS, DEFAULT_MAX_RETRIES, DEFAULT_WAIT_TIME_SECONDS, MAX_BACKOFF_MS, RetryConfig, backoffDelayMs, isFinalAttempt } from "./capture/consumer/retry.mjs";
29
+ import { CaptureConsumer, CaptureConsumerOptions, ConsumerConfig, ConsumerJob, JobHandlers, JobRunContext, KindHandler } from "./capture/consumer/types.mjs";
30
+ import { DEFAULT_LEASE_MS, DEFAULT_RETRIES, DatabaseCaptureQueue, DatabaseCaptureQueueOptions, DatabaseJob, QueueJobInput } from "./capture/db-queue/types.mjs";
31
+ import { NOTIFY_BACKOFF, NOTIFY_MAX_ATTEMPTS, NotifyFailure, NotifyHandlerOptions, NotifyJobQueue, createNotifyEnqueuer, createNotifyHandler, notifyExhausted } from "./capture/build-state/notify-job.mjs";
32
+ import { BuildStatePublisherOptions, PAUSED_MESSAGE, createBuildStatePublisher } from "./capture/build-state/publisher.mjs";
33
+ import { requestOpenBuildStates } from "./capture/build-state/resume.mjs";
34
+ import "./capture/build-state/index.mjs";
35
+ import { REDIFFABLE_BUILD_STATUSES, RediffDeps, RediffResult, rediffBuild } from "./capture/rediff.mjs";
36
+ import { CrashFailureOutcome, failCrashedCapture } from "./capture/crash-failure.mjs";
37
+ import { LEASE_EXHAUSTED_ERROR } from "./capture/db-queue/claim.mjs";
38
+ import { MAX_NACK_DELAY_MS } from "./capture/db-queue/poll.mjs";
39
+ import { DATABASE_QUEUE_METADATA, createDatabaseCaptureQueue } from "./capture/db-queue/index.mjs";
40
+ import { JobLeaseKeeper, LeaseEnd, LeaseKeeperOptions, RENEW_THROTTLE_MS, keepJobLease } from "./capture/db-queue/keeper.mjs";
41
+ import { PollLoop, PollLoopOptions, startPollLoop } from "./capture/db-queue/poll-loop.mjs";
42
+ import { MIN_BLOCKING_POLL_MS, idleDelayMs, isFastEmptyPoll } from "./capture/consumer/idle.mjs";
43
+ import { createCaptureConsumer } from "./capture/consumer/index.mjs";
44
+ import { ChildMessage, ParentMessage } from "./capture/forked/protocol.mjs";
45
+ import { CaptureChildOptions, ChildHost, runCaptureChild } from "./capture/forked/child.mjs";
11
46
  import { STORYBOOK_BUILTIN_VIEWPORTS, StorybookAdapter, mergeParameters, resolveStoryViewports } from "./capture/storybook.mjs";
12
47
  import { extractStorybookToScratch, persistStorybookStatics } from "./capture/statics.mjs";
13
- import { BoundingBox, SIZING_DEFAULTS, ScreenshotPlan, SizingOptions, getScreenshotPlan, resolveViewports } from "./capture/sizing.mjs";
14
- export { type BoundingBox, type CaptureAttemptRef, type CaptureContext, type CaptureDispatchJob, type CaptureJobInput, type CaptureJobOptions, DEFAULT_VIEWPORTS, type DispatchDeps, INTERRUPTED_ERROR, InMemoryCaptureQueue, type InMemoryCaptureQueueOptions, type PollableCaptureQueue, type PollableJob, REDIFFABLE_BUILD_STATUSES, type RecoveryDeps, type RecoveryResult, type RediffDeps, type RediffResult, SIZING_DEFAULTS, STORYBOOK_BUILTIN_VIEWPORTS, type ScreenshotPlan, type SizingOptions, type StoryEntry, type StoryParameters, type StorySourceAdapter, type StoryViewportConfig, type StoryViewportDefinition, StorybookAdapter, type Viewport, createDispatchJob, executeCaptureJob, extractStorybookToScratch, getScreenshotPlan, isDisabledStory, isFlakyStory, mergeParameters, persistCapture, persistStorybookStatics, recoverStuckCaptures, rediffBuild, resolveViewports as resolveCaptureViewports, resolveStoryViewports };
48
+ import { AfterPublishContext, AfterPublishHook, PublishCompleter, PublishCompleterOptions, PublishOutcome, createPublishCompleter } from "./capture/publish/complete.mjs";
49
+ import { PublishHandlerOptions, createPublishHandler } from "./capture/publish/handler.mjs";
50
+ import { PublishFacts, publishVerdict } from "./capture/publish/accept.mjs";
51
+ import { publishingOf } from "./capture/publish/published.mjs";
52
+ import { ExtractionResult, extractZipStream } from "./capture/publish/extract.mjs";
53
+ import { PUBLISH_SCRATCH_ID, PublishZipOptions, publishStoredZip } from "./capture/publish/run.mjs";
54
+ import { ZipInvalidError } from "./capture/publish/invalid-zip.mjs";
55
+ import "./capture/publish/index.mjs";
56
+ import { Catalog, CatalogComponent, CatalogEntry } from "./capture/catalog/types.mjs";
57
+ import { CatalogDeps, catalogueBuild, readCatalog } from "./capture/catalog/catalogue.mjs";
58
+ import { CatalogLoader, CatalogLoaderOptions, DEFAULT_CATALOG_CACHE_SIZE, createCatalogLoader } from "./capture/catalog/load.mjs";
59
+ import { createCatalogHook } from "./capture/catalog/hook.mjs";
60
+ import { EntryChanges, diffEntries, groupComponents, hashEntries, toBuildComponent } from "./capture/catalog/components.mjs";
61
+ import { parseStorybookIndex, parseStorybookIndexText } from "./capture/catalog/parse.mjs";
62
+ import { readPublishedFile, readPublishedFileInfo } from "./capture/catalog/read.mjs";
63
+ import { ComponentBuildRow, ComponentChange, catalogPresence, componentBuildHistory } from "./capture/catalog/history.mjs";
64
+ import "./capture/catalog/index.mjs";
65
+ import { ChildProcessHandle, ParentPort } from "./capture/forked/channel.mjs";
66
+ import { ForkedCaptureHandler, ForkedCaptureOptions, createForkedCaptureHandler } from "./capture/forked/forked-capture.mjs";
67
+ import { CAPTURE_RETRIES_ENV, CAPTURE_SHARD_SIZE_ENV, CAPTURE_WORKER_ROLE, ForkOptions, canForkCaptureChild, forkCaptureChild } from "./capture/forked/fork.mjs";
68
+ import { FORK_MIN_CPUS, FORK_MIN_MEMORY_BYTES, ForkDecision, ForkHost, decideCaptureProcess } from "./capture/forked/decision.mjs";
69
+ import { ComparisonReference, isComparisonImagePath, parseComparisonReference } from "./capture/comparison-reference.mjs";
70
+ export { A11Y_ROOT_SELECTOR, type A11yRunPlan, ACTIVE_POLL_MS, ACTIVE_WINDOW_MS, type AfterPublishContext, type AfterPublishHook, type BoundingBox, type BuildStateDeps, type BuildStatePublisher, type BuildStatePublisherOptions, CANCEL_CHECK_MS, CAPTURE_RETRIES_ENV, CAPTURE_SHARD_SIZE_ENV, CAPTURE_WORKER_ROLE, type CaptureAttemptRef, type CaptureChildOptions, type CaptureConsumer, type CaptureConsumerOptions, type CaptureContext, type CaptureDispatchJob, type CaptureHandlerOptions, type CaptureJobInput, type CaptureJobOptions, type Catalog, type CatalogComponent, type CatalogDeps, type CatalogEntry, type CatalogLoader, type CatalogLoaderOptions, type ChildHost, type ChildMessage, type ChildProcessHandle, type ComparisonReference, type ComponentBuildRow, type ComponentChange, type ConsumerConfig, type ConsumerJob, type ConsumerMetrics, type CrashFailureOutcome, DATABASE_QUEUE_METADATA, DEFAULT_BACKOFF_MS, DEFAULT_CADENCE, DEFAULT_CATALOG_CACHE_SIZE, DEFAULT_IGNORE_SELECTORS, DEFAULT_LEASE_MS, DEFAULT_MAX_INLINE_UNZIP_SIZE, DEFAULT_MAX_RETRIES, DEFAULT_MAX_UNZIPPED_BYTES, DEFAULT_MAX_ZIP_ENTRIES, DEFAULT_RETRIES, DEFAULT_SAMPLE_MS, DEFAULT_VIEWPORTS, DEFAULT_WAIT_TIME_SECONDS, type DatabaseCaptureQueue, type DatabaseCaptureQueueOptions, type DatabaseJob, type DispatchDeps, type EntryChanges, type EnvironmentChange, type ExtractionLimits, type ExtractionResult, FILE_BY_FILE_HINT, FORK_MIN_CPUS, FORK_MIN_MEMORY_BYTES, type Fingerprint, type ForkDecision, type ForkHost, type ForkOptions, type ForkedCaptureHandler, type ForkedCaptureOptions, IDLE_POLL_MS, type IgnoreSelectorList, type JobFinishedEvent, type JobHandlers, type JobLease, type JobLeaseKeeper, type JobOutcome, type JobRunContext, type KindHandler, LEASE_EXHAUSTED_ERROR, type LeaseEnd, type LeaseKeeperOptions, type LeaseRenewal, MAX_BACKOFF_MS, MAX_BROWSERS, MAX_IGNORE_SELECTORS, MAX_MODES_PER_STORY, MAX_NACK_DELAY_MS, MAX_REPORTED_VIOLATIONS, MIN_BLOCKING_POLL_MS, type ModeDefinition, type ModeMap, type ModeViewportValue, NOTIFY_BACKOFF, NOTIFY_MAX_ATTEMPTS, NO_ORIGIN_REASON, NO_SECRET_REASON, type NotifyFailure, type NotifyHandlerOptions, type NotifyJobQueue, PAUSED_MESSAGE, POLL_JITTER, PUBLISH_SCRATCH_ID, type ParentMessage, type ParentPort, type PollCadence, type PollLoop, type PollLoopOptions, type PollableCaptureQueue, type PollableJob, ProgressLease, type PublishCompleter, type PublishCompleterOptions, type PublishFacts, type PublishHandlerOptions, type PublishLimits, type PublishOutcome, type PublishZipOptions, type QueueJobInput, type QueueSample, REDIFFABLE_BUILD_STATUSES, RENEW_THROTTLE_MS, type RediffDeps, type RediffResult, type RetryConfig, SCRATCH_DIRNAME, SCRATCH_MAX_AGE_MS, SIZING_DEFAULTS, STORYBOOK_BUILTIN_VIEWPORTS, type ScratchSweepOptions, type ScreenshotPlan, type SizingOptions, type SkipReason, type SlimViolation, type StateTarget, type StoryEntry, type StoryParameters, type StorySourceAdapter, type StoryViewportConfig, type StoryViewportDefinition, StorybookAdapter, type StorybookUrlSource, type TargetPrerequisites, type TestResult, type TestSummary, type Viewport, ZipInvalidError, ZipLimitError, assertBrowserCount, assertSupportedBrowsers, axeInjectionScript, backoffDelayMs, buildFingerprint, buildGlobalsParam, buildScratchDir, canForkCaptureChild, captureDispatchDeps, catalogPresence, catalogueBuild, changedFields, cleanIgnoreSelectors, componentBuildHistory, createBuildStatePublisher, createCaptureConsumer, createCaptureHandler, createCatalogHook, createCatalogLoader, createDatabaseCaptureQueue, createDispatchJob, createForkedCaptureHandler, createNotifyEnqueuer, createNotifyHandler, createPublishCompleter, createPublishHandler, decideCaptureProcess, declaredIgnoreSelectors, deliverBuildState, diffEntries, executeCaptureJob, extractStorybookToScratch, extractZipStream, extractionLimitsOf, failCrashedCapture, filterModes, fingerprintHash, forkCaptureChild, getScreenshotPlan, groupComponents, hashEntries, idleDelayMs, ignoreStylesheet, inPageReadA11yParameters, inPageRunAxe, isComparisonImagePath, isDisabledStory, isFastEmptyPoll, isFinalAttempt, isFlakyStory, isSafeIgnoreSelector, keepJobLease, listTargets, loadAxeSource, loadBuild, mapAxeViolations, mergeParameters, modeSlug, nextPollDelay, notifyExhausted, offeredTargets, parseBrowsers, parseComparisonReference, parseFingerprint, parseModesAllowlist, parseStorybookIndex, parseStorybookIndexText, parseTestResults, persistCapture, persistStorybookStatics, primaryTargetOf, publishRoute, publishStoredZip, publishVerdict, publishingOf, readCatalog, readPublishedFile, readPublishedFileInfo, rediffBuild, refusalFor, removeBuildScratch, removeJobScratch, requestOpenBuildStates, resolveA11yRun, resolveBrowsers, resolveViewports as resolveCaptureViewports, resolvePublishLimits, resolveStoryViewports, runCaptureChild, sampleQueue, startPollLoop, stateTargets, storybookUrlSource, summarizeTests, sweepOrphanedScratch, toBuildComponent, writeTo };
package/dist/capture.mjs CHANGED
@@ -1,14 +1,62 @@
1
1
  import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
+ import { MAX_BROWSERS, assertBrowserCount, assertSupportedBrowsers, listTargets, parseBrowsers, primaryTargetOf, refusalFor, resolveBrowsers } from "./capture/browsers.mjs";
5
+ import { NO_ORIGIN_REASON, NO_SECRET_REASON, offeredTargets } from "./capture/targets.mjs";
6
+ import { storybookUrlSource } from "./capture/storybook-urls.mjs";
7
+ import { DEFAULT_IGNORE_SELECTORS, MAX_IGNORE_SELECTORS, cleanIgnoreSelectors, declaredIgnoreSelectors, ignoreStylesheet, isSafeIgnoreSelector } from "./capture/ignore-regions.mjs";
8
+ import { MAX_MODES_PER_STORY, buildGlobalsParam, filterModes, modeSlug, parseModesAllowlist } from "./capture/modes.mjs";
4
9
  import { DEFAULT_VIEWPORTS, isDisabledStory, isFlakyStory } from "./capture/adapter.mjs";
5
10
  import { STORYBOOK_BUILTIN_VIEWPORTS, StorybookAdapter, mergeParameters, resolveStoryViewports } from "./capture/storybook.mjs";
11
+ import { parseTestResults, summarizeTests } from "./capture/tests.mjs";
12
+ import { isComparisonImagePath, parseComparisonReference } from "./capture/comparison-reference.mjs";
6
13
  import { SIZING_DEFAULTS, getScreenshotPlan, resolveViewports } from "./capture/sizing.mjs";
14
+ import { buildFingerprint, changedFields, fingerprintHash, parseFingerprint } from "./capture/fingerprint.mjs";
7
15
  import { persistCapture } from "./capture/pipeline.mjs";
16
+ import { SCRATCH_DIRNAME, SCRATCH_MAX_AGE_MS, buildScratchDir, removeBuildScratch, removeJobScratch, sweepOrphanedScratch } from "./capture/scratch.mjs";
17
+ import { ZipInvalidError } from "./capture/publish/invalid-zip.mjs";
18
+ import { DEFAULT_MAX_INLINE_UNZIP_SIZE, DEFAULT_MAX_UNZIPPED_BYTES, DEFAULT_MAX_ZIP_ENTRIES, FILE_BY_FILE_HINT, ZipLimitError, extractionLimitsOf, publishRoute, resolvePublishLimits } from "./capture/publish/limits.mjs";
19
+ import { extractZipStream } from "./capture/publish/extract.mjs";
8
20
  import { extractStorybookToScratch, persistStorybookStatics } from "./capture/statics.mjs";
9
21
  import { executeCaptureJob } from "./capture/orchestrator.mjs";
22
+ import { axeInjectionScript, loadAxeSource } from "./capture/a11y/axe-source.mjs";
23
+ import { inPageReadA11yParameters, inPageRunAxe } from "./capture/a11y/in-page.mjs";
24
+ import { MAX_REPORTED_VIOLATIONS, mapAxeViolations } from "./capture/a11y/map.mjs";
25
+ import { A11Y_ROOT_SELECTOR, resolveA11yRun } from "./capture/a11y/options.mjs";
26
+ import { publishingOf } from "./capture/publish/published.mjs";
27
+ import { deliverBuildState, loadBuild, stateTargets, writeTo } from "./capture/build-state/deliver.mjs";
28
+ import { DEFAULT_BACKOFF_MS, DEFAULT_MAX_RETRIES, DEFAULT_WAIT_TIME_SECONDS, MAX_BACKOFF_MS, backoffDelayMs, isFinalAttempt } from "./capture/consumer/retry.mjs";
29
+ import { NOTIFY_BACKOFF, NOTIFY_MAX_ATTEMPTS, createNotifyEnqueuer, createNotifyHandler, notifyExhausted } from "./capture/build-state/notify-job.mjs";
30
+ import { PAUSED_MESSAGE, createBuildStatePublisher } from "./capture/build-state/publisher.mjs";
31
+ import { requestOpenBuildStates } from "./capture/build-state/resume.mjs";
10
32
  import { REDIFFABLE_BUILD_STATUSES, rediffBuild } from "./capture/rediff.mjs";
11
- import { INTERRUPTED_ERROR, recoverStuckCaptures } from "./capture/recovery.mjs";
12
- import { InMemoryCaptureQueue } from "./capture/queue.mjs";
33
+ import { failCrashedCapture } from "./capture/crash-failure.mjs";
34
+ import { ProgressLease } from "./capture/job-lease.mjs";
35
+ import { LEASE_EXHAUSTED_ERROR } from "./capture/db-queue/claim.mjs";
36
+ import { MAX_NACK_DELAY_MS } from "./capture/db-queue/poll.mjs";
37
+ import { DEFAULT_LEASE_MS, DEFAULT_RETRIES } from "./capture/db-queue/types.mjs";
38
+ import { DATABASE_QUEUE_METADATA, createDatabaseCaptureQueue } from "./capture/db-queue/index.mjs";
39
+ import { ACTIVE_POLL_MS, ACTIVE_WINDOW_MS, CANCEL_CHECK_MS, DEFAULT_CADENCE, IDLE_POLL_MS, POLL_JITTER, nextPollDelay } from "./capture/db-queue/cadence.mjs";
40
+ import { RENEW_THROTTLE_MS, keepJobLease } from "./capture/db-queue/keeper.mjs";
41
+ import { startPollLoop } from "./capture/db-queue/poll-loop.mjs";
13
42
  import { createDispatchJob } from "./capture/dispatch.mjs";
14
- export { DEFAULT_VIEWPORTS, INTERRUPTED_ERROR, InMemoryCaptureQueue, REDIFFABLE_BUILD_STATUSES, SIZING_DEFAULTS, STORYBOOK_BUILTIN_VIEWPORTS, StorybookAdapter, createDispatchJob, executeCaptureJob, extractStorybookToScratch, getScreenshotPlan, isDisabledStory, isFlakyStory, mergeParameters, persistCapture, persistStorybookStatics, recoverStuckCaptures, rediffBuild, resolveViewports as resolveCaptureViewports, resolveStoryViewports };
43
+ import { captureDispatchDeps, createCaptureHandler } from "./capture/consumer/capture-handler.mjs";
44
+ import { MIN_BLOCKING_POLL_MS, idleDelayMs, isFastEmptyPoll } from "./capture/consumer/idle.mjs";
45
+ import { DEFAULT_SAMPLE_MS, sampleQueue } from "./capture/consumer/metrics.mjs";
46
+ import { createCaptureConsumer } from "./capture/consumer/index.mjs";
47
+ import { CAPTURE_RETRIES_ENV, CAPTURE_SHARD_SIZE_ENV, CAPTURE_WORKER_ROLE, canForkCaptureChild, forkCaptureChild } from "./capture/forked/fork.mjs";
48
+ import { runCaptureChild } from "./capture/forked/child.mjs";
49
+ import { PUBLISH_SCRATCH_ID, publishStoredZip } from "./capture/publish/run.mjs";
50
+ import { createPublishHandler } from "./capture/publish/handler.mjs";
51
+ import { publishVerdict } from "./capture/publish/accept.mjs";
52
+ import { createPublishCompleter } from "./capture/publish/complete.mjs";
53
+ import { createCatalogHook } from "./capture/catalog/hook.mjs";
54
+ import { diffEntries, groupComponents, hashEntries, toBuildComponent } from "./capture/catalog/components.mjs";
55
+ import { parseStorybookIndex, parseStorybookIndexText } from "./capture/catalog/parse.mjs";
56
+ import { readPublishedFile, readPublishedFileInfo } from "./capture/catalog/read.mjs";
57
+ import { catalogueBuild, readCatalog } from "./capture/catalog/catalogue.mjs";
58
+ import { DEFAULT_CATALOG_CACHE_SIZE, createCatalogLoader } from "./capture/catalog/load.mjs";
59
+ import { catalogPresence, componentBuildHistory } from "./capture/catalog/history.mjs";
60
+ import { createForkedCaptureHandler } from "./capture/forked/forked-capture.mjs";
61
+ import { FORK_MIN_CPUS, FORK_MIN_MEMORY_BYTES, decideCaptureProcess } from "./capture/forked/decision.mjs";
62
+ export { A11Y_ROOT_SELECTOR, ACTIVE_POLL_MS, ACTIVE_WINDOW_MS, CANCEL_CHECK_MS, CAPTURE_RETRIES_ENV, CAPTURE_SHARD_SIZE_ENV, CAPTURE_WORKER_ROLE, DATABASE_QUEUE_METADATA, DEFAULT_BACKOFF_MS, DEFAULT_CADENCE, DEFAULT_CATALOG_CACHE_SIZE, DEFAULT_IGNORE_SELECTORS, DEFAULT_LEASE_MS, DEFAULT_MAX_INLINE_UNZIP_SIZE, DEFAULT_MAX_RETRIES, DEFAULT_MAX_UNZIPPED_BYTES, DEFAULT_MAX_ZIP_ENTRIES, DEFAULT_RETRIES, DEFAULT_SAMPLE_MS, DEFAULT_VIEWPORTS, DEFAULT_WAIT_TIME_SECONDS, FILE_BY_FILE_HINT, FORK_MIN_CPUS, FORK_MIN_MEMORY_BYTES, IDLE_POLL_MS, LEASE_EXHAUSTED_ERROR, MAX_BACKOFF_MS, MAX_BROWSERS, MAX_IGNORE_SELECTORS, MAX_MODES_PER_STORY, MAX_NACK_DELAY_MS, MAX_REPORTED_VIOLATIONS, MIN_BLOCKING_POLL_MS, NOTIFY_BACKOFF, NOTIFY_MAX_ATTEMPTS, NO_ORIGIN_REASON, NO_SECRET_REASON, PAUSED_MESSAGE, POLL_JITTER, PUBLISH_SCRATCH_ID, ProgressLease, REDIFFABLE_BUILD_STATUSES, RENEW_THROTTLE_MS, SCRATCH_DIRNAME, SCRATCH_MAX_AGE_MS, SIZING_DEFAULTS, STORYBOOK_BUILTIN_VIEWPORTS, StorybookAdapter, ZipInvalidError, ZipLimitError, assertBrowserCount, assertSupportedBrowsers, axeInjectionScript, backoffDelayMs, buildFingerprint, buildGlobalsParam, buildScratchDir, canForkCaptureChild, captureDispatchDeps, catalogPresence, catalogueBuild, changedFields, cleanIgnoreSelectors, componentBuildHistory, createBuildStatePublisher, createCaptureConsumer, createCaptureHandler, createCatalogHook, createCatalogLoader, createDatabaseCaptureQueue, createDispatchJob, createForkedCaptureHandler, createNotifyEnqueuer, createNotifyHandler, createPublishCompleter, createPublishHandler, decideCaptureProcess, declaredIgnoreSelectors, deliverBuildState, diffEntries, executeCaptureJob, extractStorybookToScratch, extractZipStream, extractionLimitsOf, failCrashedCapture, filterModes, fingerprintHash, forkCaptureChild, getScreenshotPlan, groupComponents, hashEntries, idleDelayMs, ignoreStylesheet, inPageReadA11yParameters, inPageRunAxe, isComparisonImagePath, isDisabledStory, isFastEmptyPoll, isFinalAttempt, isFlakyStory, isSafeIgnoreSelector, keepJobLease, listTargets, loadAxeSource, loadBuild, mapAxeViolations, mergeParameters, modeSlug, nextPollDelay, notifyExhausted, offeredTargets, parseBrowsers, parseComparisonReference, parseFingerprint, parseModesAllowlist, parseStorybookIndex, parseStorybookIndexText, parseTestResults, persistCapture, persistStorybookStatics, primaryTargetOf, publishRoute, publishStoredZip, publishVerdict, publishingOf, readCatalog, readPublishedFile, readPublishedFileInfo, rediffBuild, refusalFor, removeBuildScratch, removeJobScratch, requestOpenBuildStates, resolveA11yRun, resolveBrowsers, resolveViewports as resolveCaptureViewports, resolvePublishLimits, resolveStoryViewports, runCaptureChild, sampleQueue, startPollLoop, stateTargets, storybookUrlSource, summarizeTests, sweepOrphanedScratch, toBuildComponent, writeTo };
package/dist/config.d.mts CHANGED
@@ -2,16 +2,17 @@ import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
3
  import { CaptureRunner } from "./adapter/capture-runner.mjs";
4
4
  import { DatabaseAdapter } from "./adapter/database.mjs";
5
+ import { DesignProvider } from "./adapter/design.mjs";
5
6
  import { EmailSender } from "./adapter/email-sender.mjs";
6
- import { GitHostProvider } from "./adapter/git-host.mjs";
7
7
  import { NotifierProvider } from "./adapters/notifier/provider.mjs";
8
8
  import { StorageAdapter } from "./adapter/storage.mjs";
9
+ import { Ai } from "./ai.mjs";
9
10
  import { Auth } from "./auth.mjs";
11
+ import { DEFAULT_SCRATCH_DIR, resolveShelfOptions } from "./options.mjs";
12
+ import { ALLOW_SERVERLESS_ENV, assertServerless, isServerlessHost } from "./serverless.mjs";
10
13
  import { AdapterCategory } from "./adapter/metadata.mjs";
11
- import { CaptureQueue } from "./adapter/capture-queue.mjs";
12
14
  import { z } from "zod";
13
15
  import { Logger } from "pino";
14
- //#region src/config.d.ts
15
16
  /** Brand color theme for the server-rendered UI. */
16
17
  interface BrandTheme {
17
18
  accent: string;
@@ -99,6 +100,17 @@ interface NotificationsConfig {
99
100
  footerText?: string;
100
101
  slackUsername?: string;
101
102
  }
103
+ /** Longest browser-private freshness a signed capture asset may be given, in seconds (1 hour). */
104
+ declare const MAX_CAPTURE_ASSET_CACHE_SECONDS = 3600;
105
+ /** Signed Storybook asset serving for remote capture browsers (ADR 0007, decision 5). */
106
+ interface CaptureAssetsConfig {
107
+ /**
108
+ * Opt-in browser-private freshness of capture-scoped signed assets, in whole seconds from 0 to
109
+ * {@link MAX_CAPTURE_ASSET_CACHE_SECONDS}. 0 (default) keeps every signed answer `no-store`. A
110
+ * positive value is a cap: the answer's `max-age` never exceeds the grant's remaining lifetime.
111
+ */
112
+ cacheMaxAgeSeconds?: number;
113
+ }
102
114
  /** Shelf-level configuration (validated by {@link shelfConfigSchema}). */
103
115
  interface ShelfConfig {
104
116
  secret?: string;
@@ -127,7 +139,10 @@ interface ShelfConfig {
127
139
  * helper document; falls back to the request origin when unset.
128
140
  */
129
141
  publicBaseUrl?: string;
130
- captureConcurrency?: number;
142
+ /**
143
+ * Working directory for capture and inline statics extraction. Defaults to
144
+ * `<os.tmpdir()>/storyshelf`; publishing and capture extract there.
145
+ */
131
146
  scratchDir?: string;
132
147
  purgeTtlDays?: number;
133
148
  /** Branch baseline TTL, days; null disables branch GC (default 30). */
@@ -140,15 +155,29 @@ interface ShelfConfig {
140
155
  * Opt-in, off by default — some deployments prefer no timing headers.
141
156
  */
142
157
  serverTiming?: boolean;
158
+ /** Persist gzip variants for published Storybook files (default off). */
159
+ publishedCompression?: boolean;
160
+ /** Signed Storybook asset serving for remote capture browsers; see {@link CaptureAssetsConfig}. */
161
+ captureAssets?: CaptureAssetsConfig;
143
162
  /**
144
- * Max zip size (bytes) eligible for inline statics extraction at upload.
145
- * Unset (or 0) disables inline extraction — statics land via capture.
163
+ * Largest zip (bytes) extracted inline in the upload request; a larger zip is published by a
164
+ * `publish` job (or refused with 413 on a host that runs no consumer). The count is taken
165
+ * while the upload streams, never from `Content-Length`. Default 50 MB; `0` sends every zip to
166
+ * a `publish` job.
146
167
  */
147
168
  maxInlineUnzipSize?: number;
169
+ /** Most entries an uploaded Storybook zip may hold (default 50 000); more fails the publish. */
170
+ maxZipEntries?: number;
171
+ /**
172
+ * Most uncompressed bytes an uploaded Storybook zip may expand to (default 2 GiB), counted while
173
+ * extracting; more fails the publish. The compressed size is no bound on its own.
174
+ */
175
+ maxUnzippedBytes?: number;
148
176
  viewports?: ShelfViewport[];
149
177
  adapters?: Record<string, AdapterSnapshot>;
150
- notifications?: NotificationsConfig;
151
178
  }
179
+ /** Zod schema validating `notifications.config`. */
180
+ declare const notificationsConfigSchema: z.ZodType<NotificationsConfig>;
152
181
  /** Zod schema validating the shelf-level configuration. */
153
182
  declare const shelfConfigSchema: z.ZodType<ShelfConfig>;
154
183
  /** Zod schema validating the UI branding configuration. */
@@ -167,16 +196,110 @@ declare function validateConfig(config: Record<string, unknown>): ShelfConfig;
167
196
  * @returns The validated UI configuration.
168
197
  */
169
198
  declare function validateUiConfig(config: Record<string, unknown>): UIConfig;
199
+ /** Testing options: what renders, how many run at once, and how screenshots are compared. */
200
+ interface ShelfTestingOptions {
201
+ /** Pure renderer. Required: `testing` without a `runner` throws. */
202
+ runner: CaptureRunner;
203
+ /** Jobs this instance runs at once; auto-sized from CPU and memory when unset. */
204
+ concurrency?: number;
205
+ /**
206
+ * Retries after a first failed attempt before a capture job fails for good (default 2: three
207
+ * attempts). One limit covers failed attempts, lost leases and forked-child crashes.
208
+ */
209
+ retries?: number;
210
+ /**
211
+ * Lease of a job of the database queue, in seconds (default 300: 5 minutes). A running job
212
+ * renews it on a heartbeat (every `min(30 s, lease / 3)`) and on progress, so a stage that prints
213
+ * nothing is not redelivered while its process lives; a crashed holder's job is claimed by
214
+ * another instance once the lease runs out, so a shorter lease recovers crashes sooner.
215
+ */
216
+ leaseSeconds?: number;
217
+ /**
218
+ * Module run in a forked capture child (it calls `runCaptureChild` from `@storyshelf/core/capture`).
219
+ * The app consumes the queue and pushes each job to the child over IPC. Needs `runner`, which
220
+ * serves as the in-process fallback.
221
+ */
222
+ workerEntry?: string;
223
+ /**
224
+ * Split a big build across the queue: captures (story x viewport x engine) per shard. A build of
225
+ * up to twice this size still renders in one piece. Unset keeps every build in one job. Needs
226
+ * `runner`. With `workerEntry` the forked child plans and renders shards and puts them on the
227
+ * database queue itself.
228
+ */
229
+ shardSize?: number;
230
+ /**
231
+ * Requests per minute one client IP may make to the signed Storybook URL route, `/_s/<token>/*`
232
+ * (ADR 0007, decision 5). Default 6000, enough for a render fetching thousands of assets from one
233
+ * farm IP; a larger farm behind one address raises it. Over the limit the route answers `429`
234
+ * before it looks at the token, so the answer says nothing about a token's validity.
235
+ */
236
+ storybookUrlRateLimit?: number;
237
+ /**
238
+ * Where captures run. `auto` (default) forks when `workerEntry` is set and the host can afford
239
+ * a second process; `in-process` never forks; `fork` forks regardless of the host and fails at
240
+ * boot if it cannot.
241
+ */
242
+ mode?: "auto" | "in-process" | "fork";
243
+ /** Screenshot comparison, shared by capture and the re-diff endpoint. */
244
+ compare?: ShelfCompareOptions;
245
+ /** Image library selection; see {@link ShelfImagesOptions}. */
246
+ images?: ShelfImagesOptions;
247
+ /**
248
+ * Clock and timers of the database job queue. Tests inject a manual clock so lease and poll
249
+ * transitions do not depend on wall time; production leaves it unset (`Date.now` and the global
250
+ * timers).
251
+ */
252
+ queueClock?: {
253
+ now: () => number;
254
+ timers: {
255
+ setTimeout(callback: () => void, ms: number): unknown;
256
+ clearTimeout(handle: unknown): void;
257
+ };
258
+ };
259
+ }
260
+ /** Notification options: who can deliver, over which transport, with what branding. */
261
+ interface ShelfNotificationsOptions {
262
+ /** Provider adapters (Slack, Teams, email, ...); a channel's `provider` must name one of these. */
263
+ notifiers?: NotifierProvider[];
264
+ /** Email transport. Listed here so its setup/teardown/validation hooks run with the app's. */
265
+ emailSender?: EmailSender;
266
+ /** Site-wide brand and sender settings for outgoing notifications. */
267
+ config?: NotificationsConfig;
268
+ }
269
+ /** Comparison options. */
270
+ interface ShelfCompareOptions {
271
+ /**
272
+ * Worker threads for pixel diffs: default CPU count minus one (min 1), `0` diffs on the main
273
+ * thread. Takes precedence over `STORYSHELF_DIFF_WORKERS`.
274
+ */
275
+ threads?: number;
276
+ }
277
+ /** Image-handling options: which library decodes, encodes and resizes the PNGs. */
278
+ interface ShelfImagesOptions {
279
+ /**
280
+ * Image library for diffs, diff overlays and AI thumbnails: `"pngjs"` (default, pure JavaScript,
281
+ * runs anywhere) or `"sharp"` (native, several times faster on large PNGs; needs the optional
282
+ * `sharp` package installed). Falls back to `STORYSHELF_IMAGE_ENGINE`. The pixel comparison is
283
+ * pixelmatch either way, so verdicts match.
284
+ */
285
+ engine?: "pngjs" | "sharp";
286
+ }
170
287
  /** Adapter and configuration options for creating the shelf router. */
171
288
  interface ShelfOptions {
172
289
  database: DatabaseAdapter;
173
290
  storage: StorageAdapter;
174
- captureRunner?: CaptureRunner;
175
- captureQueue?: CaptureQueue;
291
+ /**
292
+ * Testing (render + diff in the background). Absent means Storybook hosting only: no renderer,
293
+ * no queue, and the tuning below is unreachable rather than silently ignored.
294
+ */
295
+ testing?: ShelfTestingOptions;
176
296
  auth?: Auth;
177
- gitHosts?: GitHostProvider[];
178
- notifiers?: NotifierProvider[];
179
- emailSender?: EmailSender;
297
+ /** AI insights surface (ADR 0016). Set ⇒ AI on site-wide; absent ⇒ off. */
298
+ ai?: Ai;
299
+ /** Design-tool providers (Figma, …) that resolve links, metadata and previews. */
300
+ design?: DesignProvider[];
301
+ /** Notification subsystem: providers, the email transport, and shared brand/sender settings. */
302
+ notifications?: ShelfNotificationsOptions;
180
303
  logger?: Logger;
181
304
  ui?: UIConfig;
182
305
  config?: ShelfConfig;
@@ -195,6 +318,5 @@ interface ObservabilityHandle {
195
318
  /** Flush exporters and release SDK resources. Must be idempotent. */
196
319
  shutdown(): Promise<void>;
197
320
  }
198
- //#endregion
199
- export { AdapterSnapshot, AuthUiConfig, BrandTheme, DEFAULT_MAX_UPLOAD_BYTES, NotificationsConfig, ObservabilityHandle, ShelfConfig, ShelfOptions, ShelfViewport, UIConfig, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig };
321
+ export { ALLOW_SERVERLESS_ENV, AdapterSnapshot, AuthUiConfig, BrandTheme, CaptureAssetsConfig, DEFAULT_MAX_UPLOAD_BYTES, DEFAULT_SCRATCH_DIR, MAX_CAPTURE_ASSET_CACHE_SECONDS, NotificationsConfig, ObservabilityHandle, ShelfCompareOptions, ShelfConfig, ShelfImagesOptions, ShelfNotificationsOptions, ShelfOptions, ShelfTestingOptions, ShelfViewport, UIConfig, assertServerless, isServerlessHost, notificationsConfigSchema, resolveShelfOptions, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig };
200
322
  //# sourceMappingURL=config.d.mts.map
package/dist/config.mjs CHANGED
@@ -1,10 +1,14 @@
1
1
  import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
+ import { DEFAULT_SCRATCH_DIR, resolveShelfOptions } from "./options.mjs";
5
+ import { ALLOW_SERVERLESS_ENV, assertServerless, isServerlessHost } from "./serverless.mjs";
4
6
  import { z } from "zod";
5
- //#region src/config.ts
7
+ // src/config.ts
6
8
  /** Default cap for a single Storybook zip upload (1 GiB). */
7
9
  const DEFAULT_MAX_UPLOAD_BYTES = 1073741824;
10
+ /** Longest browser-private freshness a signed capture asset may be given, in seconds (1 hour). */
11
+ const MAX_CAPTURE_ASSET_CACHE_SECONDS = 3600;
8
12
  const viewportSchema = z.object({
9
13
  name: z.string().min(1),
10
14
  width: z.number().int().positive(),
@@ -48,7 +52,7 @@ const adapterSnapshotSchema = z.object({
48
52
  "storage",
49
53
  "capture-runner",
50
54
  "capture-queue",
51
- "git-host",
55
+ "design",
52
56
  "notifier"
53
57
  ])
54
58
  });
@@ -62,6 +66,7 @@ const authUiConfigSchema = z.object({
62
66
  helpText: z.string().optional(),
63
67
  footerText: z.string().optional()
64
68
  });
69
+ /** Zod schema validating `notifications.config`. */
65
70
  const notificationsConfigSchema = z.object({
66
71
  fromEmail: z.string().min(1).optional(),
67
72
  fromName: z.string().min(1).optional(),
@@ -76,17 +81,19 @@ const shelfConfigSchema = z.object({
76
81
  adminToken: z.string().min(1).optional(),
77
82
  publishedBaseDomain: z.string().optional(),
78
83
  publicBaseUrl: z.string().url().optional(),
79
- captureConcurrency: z.number().int().positive().optional(),
80
84
  scratchDir: z.string().optional(),
81
85
  purgeTtlDays: z.number().int().positive().optional(),
82
86
  branchTtlDays: z.number().int().positive().nullable().optional(),
83
87
  branchGcIntervalMs: z.number().int().positive().optional(),
84
88
  maxUploadBytes: z.number().int().positive().optional(),
85
89
  serverTiming: z.boolean().optional(),
86
- maxInlineUnzipSize: z.number().int().positive().optional(),
90
+ publishedCompression: z.boolean().optional(),
91
+ captureAssets: z.object({ cacheMaxAgeSeconds: z.number().int().min(0).max(MAX_CAPTURE_ASSET_CACHE_SECONDS).optional() }).strict().optional(),
92
+ maxInlineUnzipSize: z.number().int().min(0).optional(),
93
+ maxZipEntries: z.number().int().positive().optional(),
94
+ maxUnzippedBytes: z.number().int().positive().optional(),
87
95
  viewports: z.array(viewportSchema).min(1, "at least one viewport required").optional(),
88
- adapters: z.record(z.string(), adapterSnapshotSchema).optional(),
89
- notifications: notificationsConfigSchema.optional()
96
+ adapters: z.record(z.string(), adapterSnapshotSchema).optional()
90
97
  }).strict().superRefine((config, ctx) => {
91
98
  if (config.previousSecret !== void 0 && config.secret === void 0) ctx.addIssue({
92
99
  code: "custom",
@@ -136,7 +143,6 @@ function validateUiConfig(config) {
136
143
  }
137
144
  return result.data;
138
145
  }
139
- //#endregion
140
- export { DEFAULT_MAX_UPLOAD_BYTES, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig };
146
+ export { ALLOW_SERVERLESS_ENV, DEFAULT_MAX_UPLOAD_BYTES, DEFAULT_SCRATCH_DIR, MAX_CAPTURE_ASSET_CACHE_SECONDS, assertServerless, isServerlessHost, notificationsConfigSchema, resolveShelfOptions, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig };
141
147
 
142
148
  //# sourceMappingURL=config.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.mjs","names":[],"sources":["../src/config.ts"],"sourcesContent":["import type { Logger } from \"pino\";\nimport { z } from \"zod\";\nimport type { CaptureQueue } from \"./adapters/capture-queue.ts\";\nimport type { CaptureRunner } from \"./adapters/capture-runner.ts\";\nimport type { DatabaseAdapter } from \"./adapters/database.ts\";\nimport type { EmailSender } from \"./adapters/email-sender.ts\";\nimport type { GitHostProvider } from \"./adapters/git-host/index.ts\";\nimport type { AdapterCategory } from \"./adapters/metadata.ts\";\nimport type { NotifierProvider } from \"./adapters/notifier/provider.ts\";\nimport type { StorageAdapter } from \"./adapters/storage.ts\";\nimport type { Auth } from \"./auth.ts\";\n\n/** Brand color theme for the server-rendered UI. */\nexport interface BrandTheme {\n accent: string;\n accentContrast?: string;\n ring?: string;\n surface: { base: string; card: string; muted?: string; subtle?: string };\n text: { primary: string; secondary: string; muted?: string };\n border: string;\n borderSubtle?: string;\n status: { approved: string; new: string; rejected: string };\n sidebarBg?: string;\n topbarBg?: string;\n radius?: string;\n radiusSm?: string;\n shadow?: string;\n}\n\n/** Text overrides for the auth (login) UI. */\nexport interface AuthUiConfig {\n /** Page title, default \"Sign in\". */\n title?: string;\n /** Optional subtitle under the title. */\n subtitle?: string;\n /** Password field label, default \"Password\". */\n passwordLabel?: string;\n /** Password field placeholder. */\n passwordPlaceholder?: string;\n /** Submit button label, default \"Sign in\". */\n submitLabel?: string;\n /**\n * Template for SSO buttons, default \"Sign in with {label}\".\n * Must contain \"{label}\" which is replaced with the provider label.\n */\n ssoLabelTemplate?: string;\n /** Help text shown under the form. */\n helpText?: string;\n /** Footer text shown at the bottom of the card. */\n footerText?: string;\n}\n\n/** Branding overrides for the server-rendered UI. */\nexport interface UIConfig {\n name?: string;\n logo?: string;\n /**\n * @deprecated Ignored. The favicon is the product's own mark, served by the\n * app itself; set `logo` to rebrand the sidebar instead.\n */\n favicon?: string;\n lightTheme?: BrandTheme;\n darkTheme?: BrandTheme;\n auth?: AuthUiConfig;\n}\n\n/** Default cap for a single Storybook zip upload (1 GiB). */\nexport const DEFAULT_MAX_UPLOAD_BYTES = 1024 * 1024 * 1024;\n\n/** A viewport in which stories are captured. */\nexport interface ShelfViewport {\n name: string;\n width: number;\n height: number;\n}\n\n/** Metadata snapshot of a configured adapter. */\nexport interface AdapterSnapshot {\n name: string;\n version: string;\n description?: string;\n kind: string;\n category: AdapterCategory;\n}\n\n/** Site-wide notification defaults (brand + sender identity for admin alerts). */\nexport interface NotificationsConfig {\n fromEmail?: string;\n fromName?: string;\n footerText?: string;\n slackUsername?: string;\n}\n/** Shelf-level configuration (validated by {@link shelfConfigSchema}). */\nexport interface ShelfConfig {\n secret?: string;\n /**\n * The secret `secret` replaced. Used only to decrypt stored credentials\n * (webhook, git-token, and notification secrets) written before a rotation;\n * new writes always use `secret`. Remove once credentials are re-encrypted.\n */\n previousSecret?: string;\n /**\n * Re-encrypt credentials still under `previousSecret` at boot. Default false:\n * site admins can run it from the System page instead. No effect without\n * `previousSecret`.\n */\n migrateCredentialsOnBoot?: boolean;\n /**\n * Bootstrap site-admin bearer token (`STORYSHELF_ADMIN_TOKEN`/`ADMIN_TOKEN`).\n * Grants site-admin API access when no admin user exists yet; never\n * mint sessions from it. Distinct from `secret` (session signing).\n */\n adminToken?: string;\n publishedBaseDomain?: string;\n /**\n * Public base URL of this deployment (e.g. `https://shelf.example.com`).\n * Used as the issuer in the `/.well-known/openid-configuration` relying-party\n * helper document; falls back to the request origin when unset.\n */\n publicBaseUrl?: string;\n captureConcurrency?: number;\n scratchDir?: string;\n purgeTtlDays?: number;\n /** Branch baseline TTL, days; null disables branch GC (default 30). */\n branchTtlDays?: number | null;\n /** Branch GC interval, ms; daily sweep via interval clock (default 86_400_000). */\n branchGcIntervalMs?: number;\n maxUploadBytes?: number;\n /**\n * Emit `Server-Timing` response headers (total + db/storage roll-ups).\n * Opt-in, off by default — some deployments prefer no timing headers.\n */\n serverTiming?: boolean;\n /**\n * Max zip size (bytes) eligible for inline statics extraction at upload.\n * Unset (or 0) disables inline extraction — statics land via capture.\n */\n maxInlineUnzipSize?: number;\n viewports?: ShelfViewport[];\n adapters?: Record<string, AdapterSnapshot>;\n notifications?: NotificationsConfig;\n}\n\nconst viewportSchema: z.ZodType<ShelfViewport> = z.object({\n name: z.string().min(1),\n width: z.number().int().positive(),\n height: z.number().int().positive(),\n});\n\nconst brandThemeSchema: z.ZodType<BrandTheme> = z.object({\n accent: z.string(),\n accentContrast: z.string().optional(),\n ring: z.string().optional(),\n surface: z.object({\n base: z.string(),\n card: z.string(),\n muted: z.string().optional(),\n subtle: z.string().optional(),\n }),\n text: z.object({ primary: z.string(), secondary: z.string(), muted: z.string().optional() }),\n border: z.string(),\n borderSubtle: z.string().optional(),\n status: z.object({ approved: z.string(), new: z.string(), rejected: z.string() }),\n sidebarBg: z.string().optional(),\n topbarBg: z.string().optional(),\n radius: z.string().optional(),\n radiusSm: z.string().optional(),\n shadow: z.string().optional(),\n});\n\nconst adapterSnapshotSchema: z.ZodType<AdapterSnapshot> = z.object({\n name: z.string(),\n version: z.string(),\n description: z.string().optional(),\n kind: z.string(),\n category: z.enum([\n \"database\",\n \"storage\",\n \"capture-runner\",\n \"capture-queue\",\n \"git-host\",\n \"notifier\",\n ]),\n});\n\nconst authUiConfigSchema: z.ZodType<AuthUiConfig> = z.object({\n title: z.string().min(1).optional(),\n subtitle: z.string().optional(),\n passwordLabel: z.string().min(1).optional(),\n passwordPlaceholder: z.string().optional(),\n submitLabel: z.string().min(1).optional(),\n ssoLabelTemplate: z.string().min(1).optional(),\n helpText: z.string().optional(),\n footerText: z.string().optional(),\n});\n\nconst notificationsConfigSchema: z.ZodType<NotificationsConfig> = z.object({\n fromEmail: z.string().min(1).optional(),\n fromName: z.string().min(1).optional(),\n footerText: z.string().min(1).optional(),\n slackUsername: z.string().min(1).optional(),\n});\n\n/** Zod schema validating the shelf-level configuration. */\nexport const shelfConfigSchema: z.ZodType<ShelfConfig> = z\n .object({\n secret: z.string().min(1).optional(),\n previousSecret: z.string().min(1).optional(),\n migrateCredentialsOnBoot: z.boolean().optional(),\n adminToken: z.string().min(1).optional(),\n publishedBaseDomain: z.string().optional(),\n // oxlint-disable-next-line typescript/no-deprecated -- z.string().url() kept for zod v3 API compat\n publicBaseUrl: z.string().url().optional(),\n captureConcurrency: z.number().int().positive().optional(),\n scratchDir: z.string().optional(),\n purgeTtlDays: z.number().int().positive().optional(),\n branchTtlDays: z.number().int().positive().nullable().optional(),\n branchGcIntervalMs: z.number().int().positive().optional(),\n maxUploadBytes: z.number().int().positive().optional(),\n serverTiming: z.boolean().optional(),\n maxInlineUnzipSize: z.number().int().positive().optional(),\n viewports: z.array(viewportSchema).min(1, \"at least one viewport required\").optional(),\n adapters: z.record(z.string(), adapterSnapshotSchema).optional(),\n notifications: notificationsConfigSchema.optional(),\n })\n .strict()\n .superRefine((config, ctx) => {\n if (config.previousSecret !== undefined && config.secret === undefined) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"previousSecret\"],\n message: \"previousSecret requires secret\",\n });\n }\n if (config.previousSecret !== undefined && config.previousSecret === config.secret) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"previousSecret\"],\n message: \"previousSecret must differ from secret\",\n });\n }\n });\n\n/** Zod schema validating the UI branding configuration. */\nexport const uiConfigSchema: z.ZodType<UIConfig> = z\n .object({\n name: z.string().optional(),\n // oxlint-disable-next-line typescript/no-deprecated -- z.string().url() kept for zod v3 API compat\n logo: z.string().url().optional(),\n // Accepted but ignored (see UIConfig.favicon) so existing configs keep\n // validating under .strict().\n // oxlint-disable-next-line typescript/no-deprecated -- z.string().url() kept for zod v3 API compat\n favicon: z.string().url().optional(),\n lightTheme: brandThemeSchema.optional(),\n darkTheme: brandThemeSchema.optional(),\n auth: authUiConfigSchema.optional(),\n })\n .strict();\n\n/**\n * Parse and validate a raw shelf-level configuration object.\n *\n * @param config - Unvalidated configuration record.\n * @returns The validated shelf configuration.\n */\nexport function validateConfig(config: Record<string, unknown>): ShelfConfig {\n const result = shelfConfigSchema.safeParse(config);\n if (!result.success) {\n const issues = result.error.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \");\n throw new Error(`Invalid ShelfConfig: ${issues}`);\n }\n return result.data;\n}\n\n/**\n * Parse and validate a raw UI branding configuration object.\n *\n * @param config - Unvalidated UI configuration record.\n * @returns The validated UI configuration.\n */\nexport function validateUiConfig(config: Record<string, unknown>): UIConfig {\n const result = uiConfigSchema.safeParse(config);\n if (!result.success) {\n const issues = result.error.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \");\n throw new Error(`Invalid UIConfig: ${issues}`);\n }\n return result.data;\n}\n\n/** Adapter and configuration options for creating the shelf router. */\nexport interface ShelfOptions {\n database: DatabaseAdapter;\n storage: StorageAdapter;\n captureRunner?: CaptureRunner;\n captureQueue?: CaptureQueue;\n auth?: Auth;\n gitHosts?: GitHostProvider[];\n notifiers?: NotifierProvider[];\n emailSender?: EmailSender;\n logger?: Logger;\n ui?: UIConfig;\n config?: ShelfConfig;\n /**\n * Externally-managed observability SDK handle (e.g. from\n * `initObservabilityFromEnv`). Structural — core never imports the\n * observability package. Flushed on `app.lifecycle.teardown()`.\n */\n observability?: ObservabilityHandle;\n}\n\n/**\n * Shutdown hook for an externally-managed observability SDK.\n * Structural so core stays dependency-free.\n */\nexport interface ObservabilityHandle {\n /** Flush exporters and release SDK resources. Must be idempotent. */\n shutdown(): Promise<void>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"config.mjs","names":[],"sources":["../src/config.ts"],"sourcesContent":["import type { Logger } from \"pino\";\nimport { z } from \"zod\";\nimport type { CaptureRunner } from \"./adapters/capture-runner.ts\";\nimport type { DatabaseAdapter } from \"./adapters/database.ts\";\nimport type { DesignProvider } from \"./adapters/design.ts\";\nimport type { EmailSender } from \"./adapters/email-sender.ts\";\nimport type { AdapterCategory } from \"./adapters/metadata.ts\";\nimport type { NotifierProvider } from \"./adapters/notifier/provider.ts\";\nimport type { StorageAdapter } from \"./adapters/storage.ts\";\nimport type { Ai } from \"./ai.ts\";\nimport type { Auth } from \"./auth.ts\";\n\n/** Brand color theme for the server-rendered UI. */\nexport interface BrandTheme {\n accent: string;\n accentContrast?: string;\n ring?: string;\n surface: { base: string; card: string; muted?: string; subtle?: string };\n text: { primary: string; secondary: string; muted?: string };\n border: string;\n borderSubtle?: string;\n status: { approved: string; new: string; rejected: string };\n sidebarBg?: string;\n topbarBg?: string;\n radius?: string;\n radiusSm?: string;\n shadow?: string;\n}\n\n/** Text overrides for the auth (login) UI. */\nexport interface AuthUiConfig {\n /** Page title, default \"Sign in\". */\n title?: string;\n /** Optional subtitle under the title. */\n subtitle?: string;\n /** Password field label, default \"Password\". */\n passwordLabel?: string;\n /** Password field placeholder. */\n passwordPlaceholder?: string;\n /** Submit button label, default \"Sign in\". */\n submitLabel?: string;\n /**\n * Template for SSO buttons, default \"Sign in with {label}\".\n * Must contain \"{label}\" which is replaced with the provider label.\n */\n ssoLabelTemplate?: string;\n /** Help text shown under the form. */\n helpText?: string;\n /** Footer text shown at the bottom of the card. */\n footerText?: string;\n}\n\n/** Branding overrides for the server-rendered UI. */\nexport interface UIConfig {\n name?: string;\n logo?: string;\n /**\n * @deprecated Ignored. The favicon is the product's own mark, served by the\n * app itself; set `logo` to rebrand the sidebar instead.\n */\n favicon?: string;\n lightTheme?: BrandTheme;\n darkTheme?: BrandTheme;\n auth?: AuthUiConfig;\n}\n\n/** Default cap for a single Storybook zip upload (1 GiB). */\nexport const DEFAULT_MAX_UPLOAD_BYTES = 1024 * 1024 * 1024;\n\n/** A viewport in which stories are captured. */\nexport interface ShelfViewport {\n name: string;\n width: number;\n height: number;\n}\n\n/** Metadata snapshot of a configured adapter. */\nexport interface AdapterSnapshot {\n name: string;\n version: string;\n description?: string;\n kind: string;\n category: AdapterCategory;\n}\n\n/** Site-wide notification defaults (brand + sender identity for admin alerts). */\nexport interface NotificationsConfig {\n fromEmail?: string;\n fromName?: string;\n footerText?: string;\n slackUsername?: string;\n}\n/** Longest browser-private freshness a signed capture asset may be given, in seconds (1 hour). */\nexport const MAX_CAPTURE_ASSET_CACHE_SECONDS = 3600;\n\n/** Signed Storybook asset serving for remote capture browsers (ADR 0007, decision 5). */\nexport interface CaptureAssetsConfig {\n /**\n * Opt-in browser-private freshness of capture-scoped signed assets, in whole seconds from 0 to\n * {@link MAX_CAPTURE_ASSET_CACHE_SECONDS}. 0 (default) keeps every signed answer `no-store`. A\n * positive value is a cap: the answer's `max-age` never exceeds the grant's remaining lifetime.\n */\n cacheMaxAgeSeconds?: number;\n}\n\n/** Shelf-level configuration (validated by {@link shelfConfigSchema}). */\nexport interface ShelfConfig {\n secret?: string;\n /**\n * The secret `secret` replaced. Used only to decrypt stored credentials\n * (webhook, git-token, and notification secrets) written before a rotation;\n * new writes always use `secret`. Remove once credentials are re-encrypted.\n */\n previousSecret?: string;\n /**\n * Re-encrypt credentials still under `previousSecret` at boot. Default false:\n * site admins can run it from the System page instead. No effect without\n * `previousSecret`.\n */\n migrateCredentialsOnBoot?: boolean;\n /**\n * Bootstrap site-admin bearer token (`STORYSHELF_ADMIN_TOKEN`/`ADMIN_TOKEN`).\n * Grants site-admin API access when no admin user exists yet; never\n * mint sessions from it. Distinct from `secret` (session signing).\n */\n adminToken?: string;\n publishedBaseDomain?: string;\n /**\n * Public base URL of this deployment (e.g. `https://shelf.example.com`).\n * Used as the issuer in the `/.well-known/openid-configuration` relying-party\n * helper document; falls back to the request origin when unset.\n */\n publicBaseUrl?: string;\n /**\n * Working directory for capture and inline statics extraction. Defaults to\n * `<os.tmpdir()>/storyshelf`; publishing and capture extract there.\n */\n scratchDir?: string;\n purgeTtlDays?: number;\n /** Branch baseline TTL, days; null disables branch GC (default 30). */\n branchTtlDays?: number | null;\n /** Branch GC interval, ms; daily sweep via interval clock (default 86_400_000). */\n branchGcIntervalMs?: number;\n maxUploadBytes?: number;\n /**\n * Emit `Server-Timing` response headers (total + db/storage roll-ups).\n * Opt-in, off by default — some deployments prefer no timing headers.\n */\n serverTiming?: boolean;\n /** Persist gzip variants for published Storybook files (default off). */\n publishedCompression?: boolean;\n /** Signed Storybook asset serving for remote capture browsers; see {@link CaptureAssetsConfig}. */\n captureAssets?: CaptureAssetsConfig;\n /**\n * Largest zip (bytes) extracted inline in the upload request; a larger zip is published by a\n * `publish` job (or refused with 413 on a host that runs no consumer). The count is taken\n * while the upload streams, never from `Content-Length`. Default 50 MB; `0` sends every zip to\n * a `publish` job.\n */\n maxInlineUnzipSize?: number;\n /** Most entries an uploaded Storybook zip may hold (default 50 000); more fails the publish. */\n maxZipEntries?: number;\n /**\n * Most uncompressed bytes an uploaded Storybook zip may expand to (default 2 GiB), counted while\n * extracting; more fails the publish. The compressed size is no bound on its own.\n */\n maxUnzippedBytes?: number;\n viewports?: ShelfViewport[];\n adapters?: Record<string, AdapterSnapshot>;\n}\n\nconst viewportSchema: z.ZodType<ShelfViewport> = z.object({\n name: z.string().min(1),\n width: z.number().int().positive(),\n height: z.number().int().positive(),\n});\n\nconst brandThemeSchema: z.ZodType<BrandTheme> = z.object({\n accent: z.string(),\n accentContrast: z.string().optional(),\n ring: z.string().optional(),\n surface: z.object({\n base: z.string(),\n card: z.string(),\n muted: z.string().optional(),\n subtle: z.string().optional(),\n }),\n text: z.object({ primary: z.string(), secondary: z.string(), muted: z.string().optional() }),\n border: z.string(),\n borderSubtle: z.string().optional(),\n status: z.object({ approved: z.string(), new: z.string(), rejected: z.string() }),\n sidebarBg: z.string().optional(),\n topbarBg: z.string().optional(),\n radius: z.string().optional(),\n radiusSm: z.string().optional(),\n shadow: z.string().optional(),\n});\n\nconst adapterSnapshotSchema: z.ZodType<AdapterSnapshot> = z.object({\n name: z.string(),\n version: z.string(),\n description: z.string().optional(),\n kind: z.string(),\n category: z.enum([\n \"database\",\n \"storage\",\n \"capture-runner\",\n \"capture-queue\",\n \"design\",\n \"notifier\",\n ]),\n});\n\nconst authUiConfigSchema: z.ZodType<AuthUiConfig> = z.object({\n title: z.string().min(1).optional(),\n subtitle: z.string().optional(),\n passwordLabel: z.string().min(1).optional(),\n passwordPlaceholder: z.string().optional(),\n submitLabel: z.string().min(1).optional(),\n ssoLabelTemplate: z.string().min(1).optional(),\n helpText: z.string().optional(),\n footerText: z.string().optional(),\n});\n\n/** Zod schema validating `notifications.config`. */\nexport const notificationsConfigSchema: z.ZodType<NotificationsConfig> = z.object({\n fromEmail: z.string().min(1).optional(),\n fromName: z.string().min(1).optional(),\n footerText: z.string().min(1).optional(),\n slackUsername: z.string().min(1).optional(),\n});\n\n/** Zod schema validating the shelf-level configuration. */\nexport const shelfConfigSchema: z.ZodType<ShelfConfig> = z\n .object({\n secret: z.string().min(1).optional(),\n previousSecret: z.string().min(1).optional(),\n migrateCredentialsOnBoot: z.boolean().optional(),\n adminToken: z.string().min(1).optional(),\n publishedBaseDomain: z.string().optional(),\n // oxlint-disable-next-line typescript/no-deprecated -- z.string().url() kept for zod v3 API compat\n publicBaseUrl: z.string().url().optional(),\n scratchDir: z.string().optional(),\n purgeTtlDays: z.number().int().positive().optional(),\n branchTtlDays: z.number().int().positive().nullable().optional(),\n branchGcIntervalMs: z.number().int().positive().optional(),\n maxUploadBytes: z.number().int().positive().optional(),\n serverTiming: z.boolean().optional(),\n publishedCompression: z.boolean().optional(),\n captureAssets: z\n .object({\n cacheMaxAgeSeconds: z.number().int().min(0).max(MAX_CAPTURE_ASSET_CACHE_SECONDS).optional(),\n })\n .strict()\n .optional(),\n maxInlineUnzipSize: z.number().int().min(0).optional(),\n maxZipEntries: z.number().int().positive().optional(),\n maxUnzippedBytes: z.number().int().positive().optional(),\n viewports: z.array(viewportSchema).min(1, \"at least one viewport required\").optional(),\n adapters: z.record(z.string(), adapterSnapshotSchema).optional(),\n })\n .strict()\n .superRefine((config, ctx) => {\n if (config.previousSecret !== undefined && config.secret === undefined) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"previousSecret\"],\n message: \"previousSecret requires secret\",\n });\n }\n if (config.previousSecret !== undefined && config.previousSecret === config.secret) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"previousSecret\"],\n message: \"previousSecret must differ from secret\",\n });\n }\n });\n\n/** Zod schema validating the UI branding configuration. */\nexport const uiConfigSchema: z.ZodType<UIConfig> = z\n .object({\n name: z.string().optional(),\n // oxlint-disable-next-line typescript/no-deprecated -- z.string().url() kept for zod v3 API compat\n logo: z.string().url().optional(),\n // Accepted but ignored (see UIConfig.favicon) so existing configs keep\n // validating under .strict().\n // oxlint-disable-next-line typescript/no-deprecated -- z.string().url() kept for zod v3 API compat\n favicon: z.string().url().optional(),\n lightTheme: brandThemeSchema.optional(),\n darkTheme: brandThemeSchema.optional(),\n auth: authUiConfigSchema.optional(),\n })\n .strict();\n\n/**\n * Parse and validate a raw shelf-level configuration object.\n *\n * @param config - Unvalidated configuration record.\n * @returns The validated shelf configuration.\n */\nexport function validateConfig(config: Record<string, unknown>): ShelfConfig {\n const result = shelfConfigSchema.safeParse(config);\n if (!result.success) {\n const issues = result.error.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \");\n throw new Error(`Invalid ShelfConfig: ${issues}`);\n }\n return result.data;\n}\n\n/**\n * Parse and validate a raw UI branding configuration object.\n *\n * @param config - Unvalidated UI configuration record.\n * @returns The validated UI configuration.\n */\nexport function validateUiConfig(config: Record<string, unknown>): UIConfig {\n const result = uiConfigSchema.safeParse(config);\n if (!result.success) {\n const issues = result.error.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \");\n throw new Error(`Invalid UIConfig: ${issues}`);\n }\n return result.data;\n}\n\n/** Testing options: what renders, how many run at once, and how screenshots are compared. */\nexport interface ShelfTestingOptions {\n /** Pure renderer. Required: `testing` without a `runner` throws. */\n runner: CaptureRunner;\n /** Jobs this instance runs at once; auto-sized from CPU and memory when unset. */\n concurrency?: number;\n /**\n * Retries after a first failed attempt before a capture job fails for good (default 2: three\n * attempts). One limit covers failed attempts, lost leases and forked-child crashes.\n */\n retries?: number;\n /**\n * Lease of a job of the database queue, in seconds (default 300: 5 minutes). A running job\n * renews it on a heartbeat (every `min(30 s, lease / 3)`) and on progress, so a stage that prints\n * nothing is not redelivered while its process lives; a crashed holder's job is claimed by\n * another instance once the lease runs out, so a shorter lease recovers crashes sooner.\n */\n leaseSeconds?: number;\n /**\n * Module run in a forked capture child (it calls `runCaptureChild` from `@storyshelf/core/capture`).\n * The app consumes the queue and pushes each job to the child over IPC. Needs `runner`, which\n * serves as the in-process fallback.\n */\n workerEntry?: string;\n /**\n * Split a big build across the queue: captures (story x viewport x engine) per shard. A build of\n * up to twice this size still renders in one piece. Unset keeps every build in one job. Needs\n * `runner`. With `workerEntry` the forked child plans and renders shards and puts them on the\n * database queue itself.\n */\n shardSize?: number;\n /**\n * Requests per minute one client IP may make to the signed Storybook URL route, `/_s/<token>/*`\n * (ADR 0007, decision 5). Default 6000, enough for a render fetching thousands of assets from one\n * farm IP; a larger farm behind one address raises it. Over the limit the route answers `429`\n * before it looks at the token, so the answer says nothing about a token's validity.\n */\n storybookUrlRateLimit?: number;\n /**\n * Where captures run. `auto` (default) forks when `workerEntry` is set and the host can afford\n * a second process; `in-process` never forks; `fork` forks regardless of the host and fails at\n * boot if it cannot.\n */\n mode?: \"auto\" | \"in-process\" | \"fork\";\n /** Screenshot comparison, shared by capture and the re-diff endpoint. */\n compare?: ShelfCompareOptions;\n /** Image library selection; see {@link ShelfImagesOptions}. */\n images?: ShelfImagesOptions;\n /**\n * Clock and timers of the database job queue. Tests inject a manual clock so lease and poll\n * transitions do not depend on wall time; production leaves it unset (`Date.now` and the global\n * timers).\n */\n queueClock?: {\n now: () => number;\n timers: {\n setTimeout(callback: () => void, ms: number): unknown;\n clearTimeout(handle: unknown): void;\n };\n };\n}\n\n/** Notification options: who can deliver, over which transport, with what branding. */\nexport interface ShelfNotificationsOptions {\n /** Provider adapters (Slack, Teams, email, ...); a channel's `provider` must name one of these. */\n notifiers?: NotifierProvider[];\n /** Email transport. Listed here so its setup/teardown/validation hooks run with the app's. */\n emailSender?: EmailSender;\n /** Site-wide brand and sender settings for outgoing notifications. */\n config?: NotificationsConfig;\n}\n\n/** Comparison options. */\nexport interface ShelfCompareOptions {\n /**\n * Worker threads for pixel diffs: default CPU count minus one (min 1), `0` diffs on the main\n * thread. Takes precedence over `STORYSHELF_DIFF_WORKERS`.\n */\n threads?: number;\n}\n\n/** Image-handling options: which library decodes, encodes and resizes the PNGs. */\nexport interface ShelfImagesOptions {\n /**\n * Image library for diffs, diff overlays and AI thumbnails: `\"pngjs\"` (default, pure JavaScript,\n * runs anywhere) or `\"sharp\"` (native, several times faster on large PNGs; needs the optional\n * `sharp` package installed). Falls back to `STORYSHELF_IMAGE_ENGINE`. The pixel comparison is\n * pixelmatch either way, so verdicts match.\n */\n engine?: \"pngjs\" | \"sharp\";\n}\n\n/** Adapter and configuration options for creating the shelf router. */\nexport interface ShelfOptions {\n database: DatabaseAdapter;\n storage: StorageAdapter;\n /**\n * Testing (render + diff in the background). Absent means Storybook hosting only: no renderer,\n * no queue, and the tuning below is unreachable rather than silently ignored.\n */\n testing?: ShelfTestingOptions;\n auth?: Auth;\n /** AI insights surface (ADR 0016). Set ⇒ AI on site-wide; absent ⇒ off. */\n ai?: Ai;\n /** Design-tool providers (Figma, …) that resolve links, metadata and previews. */\n design?: DesignProvider[];\n /** Notification subsystem: providers, the email transport, and shared brand/sender settings. */\n notifications?: ShelfNotificationsOptions;\n logger?: Logger;\n ui?: UIConfig;\n config?: ShelfConfig;\n /**\n * Externally-managed observability SDK handle (e.g. from\n * `initObservabilityFromEnv`). Structural — core never imports the\n * observability package. Flushed on `app.lifecycle.teardown()`.\n */\n observability?: ObservabilityHandle;\n}\n\n/**\n * Shutdown hook for an externally-managed observability SDK.\n * Structural so core stays dependency-free.\n */\nexport interface ObservabilityHandle {\n /** Flush exporters and release SDK resources. Must be idempotent. */\n shutdown(): Promise<void>;\n}\nexport { DEFAULT_SCRATCH_DIR, resolveShelfOptions } from \"./options.ts\";\nexport { ALLOW_SERVERLESS_ENV, assertServerless, isServerlessHost } from \"./serverless.ts\";\n"],"mappings":"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"}
package/dist/diff.d.mts CHANGED
@@ -1,5 +1,9 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
- import { DEFAULT_DIFF_OPTIONS, DiffOptions, DiffResult } from "./diff/options.mjs";
4
- import { diffImages } from "./diff/engine.mjs";
5
- export { DEFAULT_DIFF_OPTIONS, type DiffOptions, type DiffResult, diffImages };
3
+ import { DEFAULT_DIFF_OPTIONS, DIFF_WORKERS_ENV, DiffOptions, DiffResult, IMAGE_ENGINE_ENV, ImageEngine, configureImages, diffImages, diffImagesAsync, shutdownDiffPool, verifyImageEngine } from "@storyshelf/image";
4
+ /** @deprecated Use `configureImages`, which also takes the image engine. */
5
+ declare function configureDiffPool(options: {
6
+ threads?: number;
7
+ }): void;
8
+ export { DEFAULT_DIFF_OPTIONS, DIFF_WORKERS_ENV, type DiffOptions, type DiffResult, IMAGE_ENGINE_ENV, type ImageEngine, configureDiffPool, configureImages, diffImages, diffImagesAsync, shutdownDiffPool, verifyImageEngine };
9
+ //# sourceMappingURL=diff.d.mts.map
package/dist/diff.mjs CHANGED
@@ -1,6 +1,18 @@
1
1
  import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
- import { diffImages } from "./diff/engine.mjs";
5
- import { DEFAULT_DIFF_OPTIONS } from "./diff/options.mjs";
6
- export { DEFAULT_DIFF_OPTIONS, diffImages };
4
+ import { DEFAULT_DIFF_OPTIONS, DIFF_WORKERS_ENV, IMAGE_ENGINE_ENV, configureImages, configureImages as configureImages$1, diffImages, diffImagesAsync, shutdownDiffPool, verifyImageEngine } from "@storyshelf/image";
5
+ // src/diff/index.ts
6
+ /**
7
+ * Pixel diff engine (re-exported from `@storyshelf/image`, which owns the codecs and worker pool).
8
+ *
9
+ * `diffImages` compares a baseline buffer against a current screenshot; `diffImagesAsync` does
10
+ * the same on a worker-thread pool; `DiffOptions` tunes thresholds (also settable per-project).
11
+ */
12
+ /** @deprecated Use `configureImages`, which also takes the image engine. */
13
+ function configureDiffPool(options) {
14
+ configureImages$1(options);
15
+ }
16
+ export { DEFAULT_DIFF_OPTIONS, DIFF_WORKERS_ENV, IMAGE_ENGINE_ENV, configureDiffPool, configureImages, diffImages, diffImagesAsync, shutdownDiffPool, verifyImageEngine };
17
+
18
+ //# sourceMappingURL=diff.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.mjs","names":[],"sources":["../src/diff/index.ts"],"sourcesContent":["/**\n * Pixel diff engine (re-exported from `@storyshelf/image`, which owns the codecs and worker pool).\n *\n * `diffImages` compares a baseline buffer against a current screenshot; `diffImagesAsync` does\n * the same on a worker-thread pool; `DiffOptions` tunes thresholds (also settable per-project).\n */\nimport { configureImages } from \"@storyshelf/image\";\n\nexport {\n configureImages,\n DEFAULT_DIFF_OPTIONS,\n DIFF_WORKERS_ENV,\n diffImages,\n diffImagesAsync,\n type DiffOptions,\n type DiffResult,\n IMAGE_ENGINE_ENV,\n type ImageEngine,\n shutdownDiffPool,\n verifyImageEngine,\n} from \"@storyshelf/image\";\n\n/** @deprecated Use `configureImages`, which also takes the image engine. */\nexport function configureDiffPool(options: { threads?: number }): void {\n configureImages(options);\n}\n"],"mappings":";;;;;;;;;;;;AAuBA,SAAgB,kBAAkB,SAAqC;CACrE,kBAAgB,OAAO;AACzB"}
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import __tsdown_shims_path from 'node:path';
2
2
  import __tsdown_shims_url from 'node:url';
3
- import { BUILD_STATUSES, BuildStatus, ProjectRole, SNAPSHOT_STATUSES, SiteRole, SnapshotStatus, TERMINAL_BUILD_STATUSES } from "./types.mjs";
4
- import { AdapterSnapshot, BrandTheme, DEFAULT_MAX_UPLOAD_BYTES, ShelfConfig, ShelfOptions, ShelfViewport, UIConfig, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig } from "./config.mjs";
5
3
  import { Logger, LoggerOptions, PinoTransport, createShelfLogger } from "./logger.mjs";
4
+ import { BUILD_STATUSES, BuildStatus, ProjectRole, SNAPSHOT_STATUSES, SiteRole, SnapshotStatus, TERMINAL_BUILD_STATUSES } from "./types.mjs";
5
+ import { AdapterSnapshot, BrandTheme, CaptureAssetsConfig, DEFAULT_MAX_UPLOAD_BYTES, MAX_CAPTURE_ASSET_CACHE_SECONDS, ShelfConfig, ShelfOptions, ShelfViewport, UIConfig, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig } from "./config.mjs";
6
6
  import { BrandPack, brandPack, brandPacks } from "./brand-packs.mjs";
7
- export { type AdapterSnapshot, BUILD_STATUSES, type BrandPack, type BrandTheme, type BuildStatus, DEFAULT_MAX_UPLOAD_BYTES, type Logger, type LoggerOptions, type PinoTransport, type ProjectRole, SNAPSHOT_STATUSES, type ShelfConfig, type ShelfOptions, type ShelfViewport, type SiteRole, type SnapshotStatus, TERMINAL_BUILD_STATUSES, type UIConfig, brandPack, brandPacks, createShelfLogger, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig };
7
+ export { type AdapterSnapshot, BUILD_STATUSES, type BrandPack, type BrandTheme, type BuildStatus, type CaptureAssetsConfig, DEFAULT_MAX_UPLOAD_BYTES, type Logger, type LoggerOptions, MAX_CAPTURE_ASSET_CACHE_SECONDS, type PinoTransport, type ProjectRole, SNAPSHOT_STATUSES, type ShelfConfig, type ShelfOptions, type ShelfViewport, type SiteRole, type SnapshotStatus, TERMINAL_BUILD_STATUSES, type UIConfig, brandPack, brandPacks, createShelfLogger, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig };
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
- import { DEFAULT_MAX_UPLOAD_BYTES, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig } from "./config.mjs";
4
+ import { DEFAULT_MAX_UPLOAD_BYTES, MAX_CAPTURE_ASSET_CACHE_SECONDS, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig } from "./config.mjs";
5
5
  import { brandPack, brandPacks } from "./brand-packs.mjs";
6
6
  import { createShelfLogger } from "./logger.mjs";
7
7
  import { BUILD_STATUSES, SNAPSHOT_STATUSES, TERMINAL_BUILD_STATUSES } from "./types.mjs";
8
- export { BUILD_STATUSES, DEFAULT_MAX_UPLOAD_BYTES, SNAPSHOT_STATUSES, TERMINAL_BUILD_STATUSES, brandPack, brandPacks, createShelfLogger, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig };
8
+ export { BUILD_STATUSES, DEFAULT_MAX_UPLOAD_BYTES, MAX_CAPTURE_ASSET_CACHE_SECONDS, SNAPSHOT_STATUSES, TERMINAL_BUILD_STATUSES, brandPack, brandPacks, createShelfLogger, shelfConfigSchema, uiConfigSchema, validateConfig, validateUiConfig };