forgebook 0.3.3 → 0.4.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 (690) hide show
  1. package/README.md +914 -72
  2. package/dist/bin/forgebook/agentClient.d.ts +2 -1
  3. package/dist/bin/forgebook/agentClient.js +13 -6
  4. package/dist/bin/forgebook/agentGuide.d.ts +59 -0
  5. package/dist/bin/forgebook/agentGuide.js +203 -0
  6. package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
  7. package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
  8. package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
  9. package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
  10. package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
  11. package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
  12. package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
  13. package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
  14. package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
  15. package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
  16. package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
  17. package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
  18. package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
  19. package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
  20. package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
  21. package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
  22. package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
  23. package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
  24. package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
  25. package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
  26. package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
  27. package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
  28. package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
  29. package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
  30. package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
  31. package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
  32. package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
  33. package/dist/bin/forgebook/agentText.d.ts +23 -3
  34. package/dist/bin/forgebook/agentText.js +175 -28
  35. package/dist/bin/forgebook/agents.md +20 -191
  36. package/dist/bin/forgebook/agentsText.js +2 -1
  37. package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
  38. package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
  39. package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
  40. package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
  41. package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
  42. package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
  43. package/dist/bin/forgebook/auditCommand.d.mts +8 -0
  44. package/dist/bin/forgebook/auditCommand.mjs +75 -0
  45. package/dist/bin/forgebook/auditRun.d.ts +95 -0
  46. package/dist/bin/forgebook/auditRun.js +270 -0
  47. package/dist/bin/forgebook/browserRun.d.ts +21 -0
  48. package/dist/bin/forgebook/browserRun.js +57 -0
  49. package/dist/bin/forgebook/buildFailure.d.ts +7 -0
  50. package/dist/bin/forgebook/buildFailure.js +47 -0
  51. package/dist/bin/forgebook/buildWatch.d.ts +52 -0
  52. package/dist/bin/forgebook/buildWatch.js +137 -0
  53. package/dist/bin/forgebook/builtCatalogue.js +9 -5
  54. package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
  55. package/dist/bin/forgebook/catalogueCommands.js +23 -0
  56. package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
  57. package/dist/bin/forgebook/catalogueVite.js +14 -6
  58. package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
  59. package/dist/bin/forgebook/commandCacheClaim.js +170 -0
  60. package/dist/bin/forgebook/commandServer.d.ts +8 -0
  61. package/dist/bin/forgebook/commandServer.js +61 -13
  62. package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
  63. package/dist/bin/forgebook/graphCommand.d.mts +8 -0
  64. package/dist/bin/forgebook/graphCommand.mjs +84 -0
  65. package/dist/bin/forgebook/guide/commands.md +57 -0
  66. package/dist/bin/forgebook/guide/devices.md +17 -0
  67. package/dist/bin/forgebook/guide/docs-pages.md +13 -0
  68. package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
  69. package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
  70. package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
  71. package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
  72. package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
  73. package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
  74. package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
  75. package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
  76. package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
  77. package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
  78. package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
  79. package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
  80. package/dist/bin/forgebook/guide/links.md +29 -0
  81. package/dist/bin/forgebook/guide/setup.md +23 -0
  82. package/dist/bin/forgebook/guide/stories.md +90 -0
  83. package/dist/bin/forgebook/guide/switches.md +43 -0
  84. package/dist/bin/forgebook/guideCommand.d.mts +13 -0
  85. package/dist/bin/forgebook/guideCommand.mjs +37 -0
  86. package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
  87. package/dist/bin/forgebook/importers/storybook.js +11 -5
  88. package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
  89. package/dist/bin/forgebook/initCommands.d.mts +11 -0
  90. package/dist/bin/forgebook/initCommands.mjs +51 -78
  91. package/dist/bin/forgebook/initConfig.d.ts +5 -3
  92. package/dist/bin/forgebook/initConfig.js +6 -3
  93. package/dist/bin/forgebook/initInstall.d.ts +15 -0
  94. package/dist/bin/forgebook/initInstall.js +77 -0
  95. package/dist/bin/forgebook/initPrint.d.ts +9 -0
  96. package/dist/bin/forgebook/initPrint.js +60 -0
  97. package/dist/bin/forgebook/initRefusals.d.ts +45 -0
  98. package/dist/bin/forgebook/initRefusals.js +91 -0
  99. package/dist/bin/forgebook/initRun.d.ts +28 -0
  100. package/dist/bin/forgebook/initRun.js +311 -0
  101. package/dist/bin/forgebook/mcpCommand.mjs +38 -4
  102. package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
  103. package/dist/bin/forgebook/mcpGraph.js +24 -0
  104. package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
  105. package/dist/bin/forgebook/mcpTokens.js +58 -0
  106. package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
  107. package/dist/bin/forgebook/mcpToolParts.js +10 -0
  108. package/dist/bin/forgebook/mcpTools.d.ts +13 -6
  109. package/dist/bin/forgebook/mcpTools.js +57 -90
  110. package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
  111. package/dist/bin/forgebook/mcpVerify.js +36 -0
  112. package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
  113. package/dist/bin/forgebook/migrate/codemods.js +61 -0
  114. package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
  115. package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
  116. package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
  117. package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
  118. package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
  119. package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
  120. package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
  121. package/dist/bin/forgebook/migrate/migrateText.js +30 -0
  122. package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
  123. package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
  124. package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
  125. package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
  126. package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
  127. package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
  128. package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
  129. package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
  130. package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
  131. package/dist/bin/forgebook/newProject/newProject.js +180 -0
  132. package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
  133. package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
  134. package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
  135. package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
  136. package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
  137. package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
  138. package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
  139. package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
  140. package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
  141. package/dist/bin/forgebook/newProject/projectLook.js +293 -0
  142. package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
  143. package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
  144. package/dist/bin/forgebook/newRepair.d.ts +45 -0
  145. package/dist/bin/forgebook/newRepair.js +157 -0
  146. package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
  147. package/dist/bin/forgebook/newRepairRun.js +148 -0
  148. package/dist/bin/forgebook/newStories.d.ts +23 -1
  149. package/dist/bin/forgebook/newStories.js +101 -11
  150. package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
  151. package/dist/bin/forgebook/newStoriesFile.js +43 -4
  152. package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
  153. package/dist/bin/forgebook/prebundleRun.js +28 -8
  154. package/dist/bin/forgebook/proofCommand.d.mts +15 -0
  155. package/dist/bin/forgebook/proofCommand.mjs +212 -0
  156. package/dist/bin/forgebook/proofRun.d.ts +63 -0
  157. package/dist/bin/forgebook/proofRun.js +412 -0
  158. package/dist/bin/forgebook/proofText.d.ts +36 -0
  159. package/dist/bin/forgebook/proofText.js +131 -0
  160. package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
  161. package/dist/bin/forgebook/proofWorkflow.js +205 -0
  162. package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
  163. package/dist/bin/forgebook/setArgsTool.js +70 -0
  164. package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
  165. package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
  166. package/dist/bin/forgebook/storyCheckRun.js +83 -9
  167. package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
  168. package/dist/bin/forgebook/storyFileIds.js +14 -0
  169. package/dist/bin/forgebook/stressCases.d.ts +31 -0
  170. package/dist/bin/forgebook/stressCases.js +79 -0
  171. package/dist/bin/forgebook/stressRun.d.ts +12 -0
  172. package/dist/bin/forgebook/stressRun.js +61 -0
  173. package/dist/bin/forgebook/stressText.d.ts +27 -0
  174. package/dist/bin/forgebook/stressText.js +46 -0
  175. package/dist/bin/forgebook/verifyBase.d.ts +45 -0
  176. package/dist/bin/forgebook/verifyBase.js +196 -0
  177. package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
  178. package/dist/bin/forgebook/verifyCommand.mjs +125 -0
  179. package/dist/bin/forgebook/verifyRun.d.ts +63 -0
  180. package/dist/bin/forgebook/verifyRun.js +108 -0
  181. package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
  182. package/dist/bin/forgebook/verifyVerdict.js +297 -0
  183. package/dist/bin/forgebook/workflowActions.d.ts +23 -0
  184. package/dist/bin/forgebook/workflowActions.js +23 -0
  185. package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
  186. package/dist/src/addressArgs.d.ts +29 -5
  187. package/dist/src/addressArgs.js +58 -16
  188. package/dist/src/addressArgsParam.d.ts +54 -0
  189. package/dist/src/addressArgsParam.js +51 -0
  190. package/dist/src/addressTexts.d.ts +14 -0
  191. package/dist/src/addressTexts.js +28 -21
  192. package/dist/src/agentIndexFile.d.ts +11 -0
  193. package/dist/src/agentIndexFile.js +11 -0
  194. package/dist/src/argConditions.d.ts +52 -0
  195. package/dist/src/argConditions.js +80 -0
  196. package/dist/src/argControl.d.ts +100 -0
  197. package/dist/src/argControl.js +0 -0
  198. package/dist/src/argExpression.d.ts +21 -0
  199. package/dist/src/argExpression.js +30 -0
  200. package/dist/src/argTypes.d.ts +40 -51
  201. package/dist/src/argTypes.js +66 -184
  202. package/dist/src/argsProps.d.ts +3 -3
  203. package/dist/src/argsProps.js +11 -5
  204. package/dist/src/bundlerErrors.d.ts +29 -0
  205. package/dist/src/bundlerErrors.js +49 -0
  206. package/dist/src/catalogue.d.ts +31 -0
  207. package/dist/src/catalogue.js +13 -2
  208. package/dist/src/catalogueRefs.d.ts +75 -0
  209. package/dist/src/catalogueRefs.js +122 -0
  210. package/dist/src/componentDocs.d.ts +71 -0
  211. package/dist/src/componentDocs.js +15 -2
  212. package/dist/src/frame/callValues.d.ts +19 -0
  213. package/dist/src/frame/callValues.js +58 -0
  214. package/dist/src/frame/canvasScheme.d.ts +33 -0
  215. package/dist/src/frame/canvasScheme.js +67 -0
  216. package/dist/src/frame/frame.css +36 -3
  217. package/dist/src/frame/frameStatus.d.ts +16 -1
  218. package/dist/src/frame/frameStatus.js +16 -1
  219. package/dist/src/frame/frameView.js +4 -3
  220. package/dist/src/frame/mountFrame.d.ts +7 -1
  221. package/dist/src/frame/mountFrame.js +153 -46
  222. package/dist/src/frame/panelValues.d.ts +35 -0
  223. package/dist/src/frame/panelValues.js +127 -0
  224. package/dist/src/frame/playActions.d.ts +39 -0
  225. package/dist/src/frame/playActions.js +98 -0
  226. package/dist/src/frame/playStepper.d.ts +28 -0
  227. package/dist/src/frame/playStepper.js +38 -0
  228. package/dist/src/frame/playStory.d.ts +9 -1
  229. package/dist/src/frame/playStory.js +49 -3
  230. package/dist/src/frame/renderer.d.ts +34 -1
  231. package/dist/src/frame/renderer.js +24 -0
  232. package/dist/src/frame/shellChannel.d.ts +1 -1
  233. package/dist/src/frame/shellChannel.js +1 -1
  234. package/dist/src/frame/shellCheck.d.ts +17 -0
  235. package/dist/src/frame/shellCheck.js +25 -0
  236. package/dist/src/frame/shellMessageCheck.d.ts +7 -0
  237. package/dist/src/frame/shellMessageCheck.js +53 -0
  238. package/dist/src/frame/storyContent.d.ts +50 -0
  239. package/dist/src/frame/storyContent.js +73 -0
  240. package/dist/src/frame/storyModule.d.ts +9 -0
  241. package/dist/src/frame/storyModule.js +20 -2
  242. package/dist/src/frame/storyRun.d.ts +15 -7
  243. package/dist/src/frame/storyRun.js +64 -15
  244. package/dist/src/frame/valueSheets.d.ts +35 -0
  245. package/dist/src/frame/valueSheets.js +99 -0
  246. package/dist/src/hotModules.d.ts +20 -0
  247. package/dist/src/hotModules.js +23 -0
  248. package/dist/src/jsxCode.d.ts +1 -14
  249. package/dist/src/jsxCode.js +46 -10
  250. package/dist/src/liveErrors.d.ts +30 -4
  251. package/dist/src/liveErrors.js +18 -3
  252. package/dist/src/messages.d.ts +77 -27
  253. package/dist/src/messages.js +58 -100
  254. package/dist/src/namedValues.d.ts +2 -26
  255. package/dist/src/namedValues.js +0 -47
  256. package/dist/src/pageConfig.d.ts +2 -0
  257. package/dist/src/playTrace.d.ts +19 -2
  258. package/dist/src/playTrace.js +10 -5
  259. package/dist/src/plugin.d.ts +10 -3
  260. package/dist/src/previewRelay.js +9 -1
  261. package/dist/src/printable.d.ts +12 -0
  262. package/dist/src/printable.js +22 -0
  263. package/dist/src/propsSignature.d.ts +37 -0
  264. package/dist/src/propsSignature.js +40 -0
  265. package/dist/src/search.d.ts +41 -5
  266. package/dist/src/search.js +93 -23
  267. package/dist/src/searchMatch.d.ts +4 -1
  268. package/dist/src/searchMatch.js +26 -5
  269. package/dist/src/searchTypos.d.ts +88 -0
  270. package/dist/src/searchTypos.js +178 -0
  271. package/dist/src/shapeValues.d.ts +86 -0
  272. package/dist/src/shapeValues.js +295 -0
  273. package/dist/src/shell/ApiReference.js +6 -3
  274. package/dist/src/shell/ApiTableBox.d.ts +15 -0
  275. package/dist/src/shell/ApiTableBox.js +11 -0
  276. package/dist/src/shell/AppearanceMenu.d.ts +4 -1
  277. package/dist/src/shell/AppearanceMenu.js +9 -6
  278. package/dist/src/shell/CodeTab.d.ts +3 -2
  279. package/dist/src/shell/CodeTab.js +3 -2
  280. package/dist/src/shell/CodeText.d.ts +1 -1
  281. package/dist/src/shell/CodeText.js +2 -3
  282. package/dist/src/shell/CompareGrid.js +1 -1
  283. package/dist/src/shell/ComponentPage.d.ts +1 -1
  284. package/dist/src/shell/ComponentPage.js +5 -1
  285. package/dist/src/shell/CustomControl.d.ts +34 -0
  286. package/dist/src/shell/CustomControl.js +132 -0
  287. package/dist/src/shell/DocContainers.js +1 -1
  288. package/dist/src/shell/DocPage.js +2 -2
  289. package/dist/src/shell/DroppedArgsList.d.ts +2 -2
  290. package/dist/src/shell/DroppedArgsList.js +1 -1
  291. package/dist/src/shell/EmbedPage.js +30 -12
  292. package/dist/src/shell/Example.d.ts +5 -1
  293. package/dist/src/shell/Example.js +16 -8
  294. package/dist/src/shell/FrameView.d.ts +6 -3
  295. package/dist/src/shell/FrameView.js +2 -2
  296. package/dist/src/shell/HomePage.d.ts +3 -1
  297. package/dist/src/shell/HomePage.js +16 -6
  298. package/dist/src/shell/InfoTip.js +2 -2
  299. package/dist/src/shell/InteractionsTab.d.ts +11 -4
  300. package/dist/src/shell/InteractionsTab.js +18 -2
  301. package/dist/src/shell/LazyPage.js +1 -1
  302. package/dist/src/shell/PackageHtml.js +3 -1
  303. package/dist/src/shell/PinnedControl.js +14 -62
  304. package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
  305. package/dist/src/shell/PinnedControlMenu.js +72 -0
  306. package/dist/src/shell/PropFields.d.ts +3 -1
  307. package/dist/src/shell/PropFields.js +9 -6
  308. package/dist/src/shell/PropRows.d.ts +23 -2
  309. package/dist/src/shell/PropRows.js +58 -19
  310. package/dist/src/shell/PropsTab.d.ts +12 -5
  311. package/dist/src/shell/PropsTab.js +9 -21
  312. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  313. package/dist/src/shell/RefStoryPage.js +123 -0
  314. package/dist/src/shell/SearchPanel.js +51 -24
  315. package/dist/src/shell/Shell.d.ts +18 -0
  316. package/dist/src/shell/Shell.js +137 -22
  317. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  318. package/dist/src/shell/ShortcutHelp.js +66 -0
  319. package/dist/src/shell/Sidebar.d.ts +17 -4
  320. package/dist/src/shell/Sidebar.js +92 -41
  321. package/dist/src/shell/SidebarDocs.js +2 -2
  322. package/dist/src/shell/SidebarEntries.js +5 -3
  323. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  324. package/dist/src/shell/SidebarHandle.js +4 -4
  325. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  326. package/dist/src/shell/SidebarRefs.js +99 -0
  327. package/dist/src/shell/SidebarSearch.js +37 -9
  328. package/dist/src/shell/SignatureReference.js +3 -1
  329. package/dist/src/shell/Stage.d.ts +10 -2
  330. package/dist/src/shell/Stage.js +29 -49
  331. package/dist/src/shell/StatusBadges.d.ts +54 -0
  332. package/dist/src/shell/StatusBadges.js +77 -0
  333. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  334. package/dist/src/shell/StoryCodeBlock.js +7 -6
  335. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  336. package/dist/src/shell/SwitchGallery.js +17 -0
  337. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  338. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  339. package/dist/src/shell/TagFilter.d.ts +24 -0
  340. package/dist/src/shell/TagFilter.js +45 -0
  341. package/dist/src/shell/TagViews.d.ts +39 -0
  342. package/dist/src/shell/TagViews.js +20 -0
  343. package/dist/src/shell/Toolbar.d.ts +4 -1
  344. package/dist/src/shell/Toolbar.js +17 -7
  345. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  346. package/dist/src/shell/ToolbarControl.js +23 -6
  347. package/dist/src/shell/ViewMenuPanel.js +6 -1
  348. package/dist/src/shell/argChecks.d.ts +22 -0
  349. package/dist/src/shell/argChecks.js +20 -0
  350. package/dist/src/shell/asideStory.js +7 -2
  351. package/dist/src/shell/audienceSections.css +9 -9
  352. package/dist/src/shell/catalogueContext.d.ts +1 -1
  353. package/dist/src/shell/catalogueContext.js +6 -1
  354. package/dist/src/shell/codeSpans.d.ts +27 -0
  355. package/dist/src/shell/codeSpans.js +76 -0
  356. package/dist/src/shell/compareVariants.d.ts +4 -2
  357. package/dist/src/shell/compareVariants.js +16 -8
  358. package/dist/src/shell/composition.d.ts +23 -0
  359. package/dist/src/shell/composition.js +26 -0
  360. package/dist/src/shell/controlCycle.d.ts +1 -1
  361. package/dist/src/shell/controlCycle.js +3 -2
  362. package/dist/src/shell/customControls.d.ts +55 -0
  363. package/dist/src/shell/customControls.js +70 -0
  364. package/dist/src/shell/docPage.css +22 -22
  365. package/dist/src/shell/dockTabs.d.ts +19 -3
  366. package/dist/src/shell/dockTabs.js +28 -20
  367. package/dist/src/shell/embed.css +7 -7
  368. package/dist/src/shell/framesOrigin.d.ts +7 -0
  369. package/dist/src/shell/framesOrigin.js +1 -1
  370. package/dist/src/shell/galleryPlace.d.ts +20 -0
  371. package/dist/src/shell/galleryPlace.js +26 -0
  372. package/dist/src/shell/icons.d.ts +1 -0
  373. package/dist/src/shell/icons.js +1 -0
  374. package/dist/src/shell/keyboard.d.ts +14 -12
  375. package/dist/src/shell/keyboard.js +21 -6
  376. package/dist/src/shell/laterStrings.d.ts +29 -0
  377. package/dist/src/shell/laterStrings.js +42 -3
  378. package/dist/src/shell/mountShell.js +3 -0
  379. package/dist/src/shell/pageStrings.d.ts +4 -0
  380. package/dist/src/shell/pageStrings.js +4 -0
  381. package/dist/src/shell/pageTagView.d.ts +18 -0
  382. package/dist/src/shell/pageTagView.js +10 -0
  383. package/dist/src/shell/playMemory.d.ts +14 -0
  384. package/dist/src/shell/playMemory.js +8 -0
  385. package/dist/src/shell/propNotes.d.ts +23 -0
  386. package/dist/src/shell/propNotes.js +37 -0
  387. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  388. package/dist/src/shell/refIndexLoad.js +38 -0
  389. package/dist/src/shell/refParts.d.ts +34 -0
  390. package/dist/src/shell/refParts.js +9 -0
  391. package/dist/src/shell/refStory.css +21 -0
  392. package/dist/src/shell/refStrings.d.ts +13 -0
  393. package/dist/src/shell/refStrings.js +21 -0
  394. package/dist/src/shell/search.css +11 -11
  395. package/dist/src/shell/shell.css +348 -168
  396. package/dist/src/shell/shellScheme.js +2 -2
  397. package/dist/src/shell/shortcutHelp.css +64 -0
  398. package/dist/src/shell/stageArgs.d.ts +53 -0
  399. package/dist/src/shell/stageArgs.js +64 -0
  400. package/dist/src/shell/statusBadges.css +51 -0
  401. package/dist/src/shell/strings.d.ts +7 -16
  402. package/dist/src/shell/strings.js +12 -17
  403. package/dist/src/shell/switchGallery.css +104 -0
  404. package/dist/src/shell/tagFilter.css +46 -0
  405. package/dist/src/shell/tagView.d.ts +20 -0
  406. package/dist/src/shell/tagView.js +10 -0
  407. package/dist/src/shell/useAddressArgs.d.ts +9 -0
  408. package/dist/src/shell/useAddressArgs.js +56 -11
  409. package/dist/src/shell/useControlKeys.js +2 -2
  410. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  411. package/dist/src/shell/useEditedProblems.js +40 -0
  412. package/dist/src/shell/useFrameMessages.js +3 -0
  413. package/dist/src/shell/useListedTree.d.ts +13 -0
  414. package/dist/src/shell/useListedTree.js +32 -0
  415. package/dist/src/shell/usePageFrames.js +2 -2
  416. package/dist/src/shell/usePopover.d.ts +5 -0
  417. package/dist/src/shell/usePopover.js +7 -1
  418. package/dist/src/shell/useRefIndex.d.ts +22 -0
  419. package/dist/src/shell/useRefIndex.js +36 -0
  420. package/dist/src/shell/useScrollStops.d.ts +20 -0
  421. package/dist/src/shell/useScrollStops.js +41 -0
  422. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  423. package/dist/src/shell/useShortcutHelp.js +32 -0
  424. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  425. package/dist/src/shell/useSidebarOverlay.js +12 -4
  426. package/dist/src/shell/useStoryCode.d.ts +2 -1
  427. package/dist/src/shell/useStoryCode.js +12 -7
  428. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  429. package/dist/src/shell/useToolbarLayout.js +2 -2
  430. package/dist/src/shell/useWorstCase.d.ts +8 -2
  431. package/dist/src/shell/useWorstCase.js +2 -2
  432. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  433. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  434. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  435. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  436. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  437. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  438. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  439. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  440. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  441. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  442. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  443. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  444. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  445. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  446. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  447. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  448. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  449. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  450. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  451. package/dist/src/shell/valueEditors/ValueField.js +147 -0
  452. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  453. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  454. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  455. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  456. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  457. package/dist/src/shell/worstArgs.d.ts +8 -5
  458. package/dist/src/shell/worstArgs.js +14 -7
  459. package/dist/src/shellTheme.d.ts +1 -1
  460. package/dist/src/shellTheme.js +15 -1
  461. package/dist/src/shellTheme.types.d.ts +4 -0
  462. package/dist/src/shellWord.d.ts +12 -0
  463. package/dist/src/shellWord.js +15 -0
  464. package/dist/src/sourceFiles.js +2 -1
  465. package/dist/src/storyArgTypes.d.ts +57 -0
  466. package/dist/src/storyArgTypes.js +195 -0
  467. package/dist/src/storyBackground.js +14 -3
  468. package/dist/src/storyCheck.d.ts +85 -3
  469. package/dist/src/storyCheck.js +23 -1
  470. package/dist/src/storyCodeText.d.ts +46 -0
  471. package/dist/src/storyCodeText.js +27 -0
  472. package/dist/src/storyControls.d.ts +100 -0
  473. package/dist/src/storyControls.js +100 -0
  474. package/dist/src/storyStatuses.d.ts +55 -0
  475. package/dist/src/storyStatuses.js +104 -0
  476. package/dist/src/storyTagNames.d.ts +25 -0
  477. package/dist/src/storyTagNames.js +25 -0
  478. package/dist/src/storyTags.d.ts +29 -0
  479. package/dist/src/storyTags.js +85 -0
  480. package/dist/src/storyTree.d.ts +13 -0
  481. package/dist/src/storyTree.js +24 -4
  482. package/dist/src/storybookArgs.d.ts +24 -0
  483. package/dist/src/storybookArgs.js +185 -0
  484. package/dist/src/switches.d.ts +66 -3
  485. package/dist/src/switches.js +42 -1
  486. package/dist/src/valueSchema.d.ts +28 -0
  487. package/dist/src/valueSchema.js +196 -0
  488. package/dist/src/valueShape.d.ts +94 -0
  489. package/dist/src/valueShape.js +25 -0
  490. package/dist/src/viewState.d.ts +8 -3
  491. package/dist/src/viewState.js +27 -10
  492. package/dist/src/vite/adapter.d.ts +40 -2
  493. package/dist/src/vite/adapter.js +1 -0
  494. package/dist/src/vite/agent.types.d.ts +347 -7
  495. package/dist/src/vite/agentApi.d.ts +23 -0
  496. package/dist/src/vite/agentApi.js +90 -17
  497. package/dist/src/vite/agentIndex.d.ts +0 -2
  498. package/dist/src/vite/agentIndex.js +5 -6
  499. package/dist/src/vite/agentRoutes.d.ts +20 -1
  500. package/dist/src/vite/agentRoutes.js +106 -65
  501. package/dist/src/vite/agentStatuses.d.ts +42 -0
  502. package/dist/src/vite/agentStatuses.js +67 -0
  503. package/dist/src/vite/agentStoryCode.d.ts +48 -0
  504. package/dist/src/vite/agentStoryCode.js +38 -0
  505. package/dist/src/vite/agentVisibility.d.ts +47 -0
  506. package/dist/src/vite/agentVisibility.js +174 -0
  507. package/dist/src/vite/appAudit.d.ts +134 -0
  508. package/dist/src/vite/appAudit.js +333 -0
  509. package/dist/src/vite/appBuildOption.d.ts +53 -0
  510. package/dist/src/vite/appBuildOption.js +55 -0
  511. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  512. package/dist/src/vite/appTokenFiles.js +433 -0
  513. package/dist/src/vite/appTokens.d.ts +23 -0
  514. package/dist/src/vite/appTokens.js +275 -0
  515. package/dist/src/vite/builtTexts.d.ts +10 -0
  516. package/dist/src/vite/builtTexts.js +59 -22
  517. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  518. package/dist/src/vite/catalogueConfig.js +15 -3
  519. package/dist/src/vite/changeCoverage.d.ts +74 -0
  520. package/dist/src/vite/changeCoverage.js +120 -0
  521. package/dist/src/vite/changedRoute.d.ts +30 -0
  522. package/dist/src/vite/changedRoute.js +197 -0
  523. package/dist/src/vite/checkCode.d.ts +105 -3
  524. package/dist/src/vite/checkCode.js +323 -36
  525. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  526. package/dist/src/vite/checkoutWatch.js +287 -0
  527. package/dist/src/vite/closeWatch.d.ts +8 -0
  528. package/dist/src/vite/closeWatch.js +1 -1
  529. package/dist/src/vite/componentCache.d.ts +8 -0
  530. package/dist/src/vite/componentCache.js +66 -0
  531. package/dist/src/vite/componentGraph.d.ts +71 -0
  532. package/dist/src/vite/componentGraph.js +133 -0
  533. package/dist/src/vite/componentRules.d.ts +33 -0
  534. package/dist/src/vite/componentRules.js +105 -0
  535. package/dist/src/vite/componentScan.d.ts +69 -0
  536. package/dist/src/vite/componentScan.js +418 -0
  537. package/dist/src/vite/compositionCheck.d.ts +15 -0
  538. package/dist/src/vite/compositionCheck.js +243 -0
  539. package/dist/src/vite/config.d.ts +32 -1
  540. package/dist/src/vite/configFile.d.ts +14 -2
  541. package/dist/src/vite/configFile.js +124 -40
  542. package/dist/src/vite/configKeys.d.ts +15 -0
  543. package/dist/src/vite/configKeys.js +171 -0
  544. package/dist/src/vite/configLoadError.d.ts +23 -0
  545. package/dist/src/vite/configLoadError.js +71 -0
  546. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  547. package/dist/src/vite/cssDeclarations.js +290 -0
  548. package/dist/src/vite/cssImports.d.ts +14 -0
  549. package/dist/src/vite/cssImports.js +48 -0
  550. package/dist/src/vite/cssReferences.d.ts +54 -0
  551. package/dist/src/vite/cssReferences.js +157 -0
  552. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  553. package/dist/src/vite/cssTokenValues.js +233 -0
  554. package/dist/src/vite/designTokens.d.ts +24 -0
  555. package/dist/src/vite/designTokens.js +5 -1
  556. package/dist/src/vite/docsExtractor.d.ts +9 -3
  557. package/dist/src/vite/docsExtractor.js +11 -3
  558. package/dist/src/vite/docsProgram.d.ts +17 -4
  559. package/dist/src/vite/docsProgram.js +52 -11
  560. package/dist/src/vite/docsWorker.js +7 -2
  561. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  562. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  563. package/dist/src/vite/fileImports.d.ts +17 -0
  564. package/dist/src/vite/fileImports.js +57 -0
  565. package/dist/src/vite/findComponent.d.ts +10 -2
  566. package/dist/src/vite/findComponent.js +27 -22
  567. package/dist/src/vite/findRoute.js +3 -2
  568. package/dist/src/vite/forcedStates.d.ts +9 -2
  569. package/dist/src/vite/forcedStates.js +12 -3
  570. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  571. package/dist/src/vite/forgebookPlugin.js +52 -72
  572. package/dist/src/vite/frameErrors.d.ts +19 -0
  573. package/dist/src/vite/frameErrors.js +70 -0
  574. package/dist/src/vite/framesServer.d.ts +12 -0
  575. package/dist/src/vite/framesServer.js +21 -4
  576. package/dist/src/vite/functionComponentDocs.js +81 -12
  577. package/dist/src/vite/generatedModules.js +4 -2
  578. package/dist/src/vite/gitChange.d.ts +38 -5
  579. package/dist/src/vite/gitChange.js +71 -11
  580. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  581. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  582. package/dist/src/vite/hotSnippets.d.ts +38 -14
  583. package/dist/src/vite/hotSnippets.js +137 -39
  584. package/dist/src/vite/importedNames.d.ts +37 -0
  585. package/dist/src/vite/importedNames.js +138 -0
  586. package/dist/src/vite/indexFields.d.ts +6 -0
  587. package/dist/src/vite/indexFields.js +21 -0
  588. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  589. package/dist/src/vite/indexStoryFile.js +22 -157
  590. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  591. package/dist/src/vite/jsxCallSites.js +200 -0
  592. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  593. package/dist/src/vite/jsxInScripts.js +138 -0
  594. package/dist/src/vite/jsxTree.d.ts +20 -0
  595. package/dist/src/vite/jsxTree.js +163 -0
  596. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  597. package/dist/src/vite/lineAndColumn.js +18 -0
  598. package/dist/src/vite/lookAlikes.d.ts +65 -0
  599. package/dist/src/vite/lookAlikes.js +228 -0
  600. package/dist/src/vite/nearestToken.d.ts +17 -0
  601. package/dist/src/vite/nearestToken.js +9 -2
  602. package/dist/src/vite/packageEntries.d.ts +42 -0
  603. package/dist/src/vite/packageEntries.js +127 -0
  604. package/dist/src/vite/pages.d.ts +9 -1
  605. package/dist/src/vite/pages.js +108 -4
  606. package/dist/src/vite/pluginConfig.js +4 -0
  607. package/dist/src/vite/pluginIds.d.ts +2 -0
  608. package/dist/src/vite/pluginIds.js +5 -1
  609. package/dist/src/vite/pluginModules.d.ts +81 -11
  610. package/dist/src/vite/pluginModules.js +109 -21
  611. package/dist/src/vite/prebundled.d.ts +57 -15
  612. package/dist/src/vite/prebundled.js +80 -0
  613. package/dist/src/vite/previewTags.d.ts +25 -0
  614. package/dist/src/vite/previewTags.js +56 -0
  615. package/dist/src/vite/projectFiles.d.ts +54 -0
  616. package/dist/src/vite/projectFiles.js +116 -0
  617. package/dist/src/vite/projectPostcss.d.ts +70 -0
  618. package/dist/src/vite/projectPostcss.js +250 -0
  619. package/dist/src/vite/propDocs.d.ts +12 -0
  620. package/dist/src/vite/propDocs.js +130 -58
  621. package/dist/src/vite/propKind.d.ts +40 -0
  622. package/dist/src/vite/propKind.js +71 -0
  623. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  624. package/dist/src/vite/propTypeNotes.js +51 -0
  625. package/dist/src/vite/publishedExports.d.ts +27 -0
  626. package/dist/src/vite/publishedExports.js +298 -0
  627. package/dist/src/vite/realFolder.d.ts +6 -0
  628. package/dist/src/vite/realFolder.js +25 -0
  629. package/dist/src/vite/refsConfig.d.ts +39 -0
  630. package/dist/src/vite/refsConfig.js +54 -0
  631. package/dist/src/vite/reuseCheck.d.ts +45 -0
  632. package/dist/src/vite/reuseCheck.js +260 -0
  633. package/dist/src/vite/runningVersions.d.ts +33 -0
  634. package/dist/src/vite/runningVersions.js +25 -0
  635. package/dist/src/vite/scriptProblems.d.ts +60 -0
  636. package/dist/src/vite/scriptProblems.js +155 -0
  637. package/dist/src/vite/searchModule.js +3 -2
  638. package/dist/src/vite/searchRoute.js +4 -2
  639. package/dist/src/vite/shapeDocs.d.ts +36 -0
  640. package/dist/src/vite/shapeDocs.js +177 -0
  641. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  642. package/dist/src/vite/singleFileComponent.js +83 -0
  643. package/dist/src/vite/sourceText.d.ts +34 -0
  644. package/dist/src/vite/sourceText.js +72 -0
  645. package/dist/src/vite/sourceTokens.d.ts +7 -0
  646. package/dist/src/vite/sourceTokens.js +7 -2
  647. package/dist/src/vite/stackLines.d.ts +49 -0
  648. package/dist/src/vite/stackLines.js +96 -0
  649. package/dist/src/vite/storyCode.d.ts +22 -7
  650. package/dist/src/vite/storyCode.js +263 -37
  651. package/dist/src/vite/storyCoverage.d.ts +48 -0
  652. package/dist/src/vite/storyCoverage.js +179 -0
  653. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  654. package/dist/src/vite/storyFilesModule.js +105 -15
  655. package/dist/src/vite/storyPatterns.d.ts +31 -0
  656. package/dist/src/vite/storyPatterns.js +140 -5
  657. package/dist/src/vite/storyReach.d.ts +10 -2
  658. package/dist/src/vite/storyReach.js +15 -11
  659. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  660. package/dist/src/vite/storyTopLevel.js +146 -0
  661. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  662. package/dist/src/vite/storylessRoutes.js +210 -19
  663. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  664. package/dist/src/vite/switchValuesCheck.js +164 -0
  665. package/dist/src/vite/switchesDocument.d.ts +15 -0
  666. package/dist/src/vite/switchesDocument.js +47 -0
  667. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  668. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  669. package/dist/src/vite/textImports.d.ts +15 -0
  670. package/dist/src/vite/textImports.js +58 -0
  671. package/dist/src/vite/textModules.d.ts +6 -5
  672. package/dist/src/vite/textModules.js +13 -8
  673. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  674. package/dist/src/vite/tokenAnswers.js +11 -7
  675. package/dist/src/vite/typeParameters.d.ts +83 -0
  676. package/dist/src/vite/typeParameters.js +270 -0
  677. package/dist/src/vite/unionProps.d.ts +37 -0
  678. package/dist/src/vite/unionProps.js +121 -0
  679. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  680. package/dist/src/vite/unresolvedTokens.js +193 -0
  681. package/dist/src/vite/usageGraph.js +10 -52
  682. package/dist/src/vite/usageGuidance.d.ts +9 -2
  683. package/dist/src/vite/usageGuidance.js +36 -8
  684. package/dist/src/vite/usageImports.d.ts +35 -0
  685. package/dist/src/vite/usageImports.js +280 -0
  686. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  687. package/dist/src/vite/visibilityRoute.js +320 -0
  688. package/dist/src/worstCase.d.ts +2 -0
  689. package/dist/src/worstCase.js +2 -0
  690. package/package.json +28 -8
@@ -0,0 +1,63 @@
1
+ /**
2
+ * What `forgebook verify` and its MCP tool run: asks the catalogue what the change is and adds, runs the stories that
3
+ * reach it on one browser, and concludes (`verifyVerdict.ts`).
4
+ *
5
+ * @remarks
6
+ * A check that cannot run does not stop the answer: the coverage and the code check still say what they found, and the
7
+ * stories that did not run cover nothing, so a project with no browser is told it is not verified rather than given only
8
+ * an error. Tokens files it cannot read leave the code unchecked, which the verdict says. Only a commit that names nothing
9
+ * ends it, since then there is no change to speak of.
10
+ *
11
+ * @module
12
+ */
13
+ import type { StoryCheckReport } from "../../src/storyCheck.ts";
14
+ import type { VerifyDocument } from "../../src/vite/agent.types.ts";
15
+ import type { Ask } from "./mcpToolParts.ts";
16
+ import type { StoriesCheckInput } from "./storyCheckRun.ts";
17
+ import type { BaseRun } from "./verifyBase.ts";
18
+ /** What a verification reaches the catalogue through. */
19
+ export type VerifyReach = {
20
+ /** The catalogue's folder, in the repository. */
21
+ readonly dir: string;
22
+ /** Asks the catalogue. */
23
+ readonly ask: Ask;
24
+ /** Runs the checks on stories: the report, or why it could not run. */
25
+ readonly check: (input: StoriesCheckInput) => Promise<StoryCheckReport | string>;
26
+ /** Runs stories on the base commit, for the problems that were there before; none to count every problem. */
27
+ readonly checkBase?: (base: string, input: StoriesCheckInput) => Promise<BaseRun>;
28
+ };
29
+ /** What a verification is asked. */
30
+ export type VerifyInput = {
31
+ /** The commit to compare with; the default branch when none. */
32
+ readonly since: string | undefined;
33
+ /** Only the default view of each story. */
34
+ readonly isQuick: boolean;
35
+ /** Count every problem the stories have, not only those the change brought (`--all-problems`). */
36
+ readonly isAllProblems?: boolean;
37
+ /**
38
+ * What is wrong with the catalogue's configuration that leaves the answer not verified, said with it: a story pattern
39
+ * that matches nothing. None by default.
40
+ */
41
+ readonly configProblems?: readonly string[];
42
+ };
43
+ /**
44
+ * The message of an answer that is an error.
45
+ *
46
+ * @param body - the answer's body.
47
+ * @param status - its status.
48
+ */
49
+ export declare const errorOf: (body: unknown, status: number) => string;
50
+ /**
51
+ * Whether an answer means the change is not done: what `verify` exits non-zero on.
52
+ *
53
+ * @param document - the answer.
54
+ */
55
+ export declare const isVerifyFailure: (document: VerifyDocument) => boolean;
56
+ /**
57
+ * Answers whether a change is verified.
58
+ *
59
+ * @param reach - what it reaches the catalogue through.
60
+ * @param input - what to compare with, and how much to run.
61
+ * @returns the answer, or why there can be none.
62
+ */
63
+ export declare const runVerify: (reach: VerifyReach, { since, isQuick, isAllProblems, configProblems }: VerifyInput) => Promise<VerifyDocument | string>;
@@ -0,0 +1,108 @@
1
+ import { isChangedStoriesDocument, isCheckedCodeDocument } from "../../src/vite/agentApi.js";
2
+ import { isVisibilityDocument } from "../../src/vite/agentVisibility.js";
3
+ import { branchStart, changeBase, noBaseReason } from "../../src/vite/gitChange.js";
4
+ import { verifyDocument } from "./verifyVerdict.js";
5
+ /** What a catalogue answers when it runs an older version than this command. */
6
+ const UNEXPECTED_SHAPE = "The catalogue's answer has an unexpected shape: restart forgebook dev if it runs another version";
7
+ /**
8
+ * The message of an answer that is an error.
9
+ *
10
+ * @param body - the answer's body.
11
+ * @param status - its status.
12
+ */
13
+ export const errorOf = (body, status) => typeof body === "object" && body !== null && "error" in body && typeof body.error === "string"
14
+ ? body.error
15
+ : `The catalogue answered ${status}`;
16
+ /**
17
+ * Whether an answer means the change is not done: what `verify` exits non-zero on.
18
+ *
19
+ * @param document - the answer.
20
+ */
21
+ export const isVerifyFailure = (document) => document.verdict === "failed" || document.verdict === "not-verified";
22
+ /** The stories with a problem in a report, each once. */
23
+ const failingIds = (report) => [
24
+ ...new Set(report.results.filter((result) => result.problems.length > 0).map((result) => result.storyId))
25
+ ];
26
+ /** Runs the stories' check, a thrown failure (a browser that will not start) being a reason as any other. */
27
+ const checked = async (reach, input) => {
28
+ try {
29
+ return await reach.check(input);
30
+ }
31
+ catch (error) {
32
+ return error instanceof Error ? error.message : String(error);
33
+ }
34
+ };
35
+ /**
36
+ * The stories that found something run again on the base: a change with none needs no base.
37
+ *
38
+ * @param reach - what it reaches the catalogue through.
39
+ * @param base - the base commit.
40
+ * @param run - the stories' check on the change.
41
+ * @param isAllVariants - whether every variant runs, as on the change.
42
+ */
43
+ const baseRunOf = async (reach, base, run, isAllVariants) => {
44
+ const failing = typeof run === "object" ? failingIds(run) : [];
45
+ return failing.length === 0 || reach.checkBase === undefined
46
+ ? undefined
47
+ : reach.checkBase(base, { ids: failing, isAllVariants });
48
+ };
49
+ /**
50
+ * Answers whether a change is verified.
51
+ *
52
+ * @param reach - what it reaches the catalogue through.
53
+ * @param input - what to compare with, and how much to run.
54
+ * @returns the answer, or why there can be none.
55
+ */
56
+ export const runVerify = async (reach, { since, isQuick, isAllProblems = false, configProblems = [] }) => {
57
+ const named = since ?? (await branchStart(reach.dir));
58
+ const base = await changeBase(reach.dir, named);
59
+ if (base === undefined)
60
+ return noBaseReason(reach.dir, named);
61
+ const params = new URLSearchParams({ since: named });
62
+ const code = await reach.ask("check-code", params);
63
+ if (code.status === 200 && !isCheckedCodeDocument(code.body))
64
+ return UNEXPECTED_SHAPE;
65
+ const changed = await reach.ask("changed", params);
66
+ if (changed.status !== 200)
67
+ return errorOf(changed.body, changed.status);
68
+ if (!isChangedStoriesDocument(changed.body))
69
+ return UNEXPECTED_SHAPE;
70
+ const seen = await reach.ask("visibility", params);
71
+ if (seen.status === 200 && !isVisibilityDocument(seen.body))
72
+ return UNEXPECTED_SHAPE;
73
+ const ids = changed.body.stories.map((story) => story.id);
74
+ const run = ids.length === 0 ? undefined : await checked(reach, { ids, isAllVariants: !isQuick });
75
+ const baseRun = isAllProblems ? undefined : await baseRunOf(reach, base, run, !isQuick);
76
+ // tokens that cannot be read leave the code unchecked, which the verdict says, and do not stop the rest
77
+ const codeBody = isCheckedCodeDocument(code.body)
78
+ ? code.body
79
+ : {
80
+ schema: 1,
81
+ since: named,
82
+ checked: [],
83
+ skipped: [`colours, sizes and turned-off checks not checked: ${errorOf(code.body, code.status)}`],
84
+ problems: []
85
+ };
86
+ return verifyDocument({
87
+ since: named,
88
+ base,
89
+ changed: changed.body,
90
+ code: codeBody,
91
+ // what cannot be told of agents does not stop the rest, and the verdict says it
92
+ visibility: isVisibilityDocument(seen.body)
93
+ ? seen.body
94
+ : {
95
+ schema: 1,
96
+ packages: [],
97
+ checked: 0,
98
+ unseen: [],
99
+ skipped: [`what agents see not checked: ${errorOf(seen.body, seen.status)}`]
100
+ },
101
+ report: typeof run === "object" ? run : undefined,
102
+ notRun: typeof run === "string" ? run : undefined,
103
+ isQuick,
104
+ isSinceNamed: since !== undefined,
105
+ configProblems,
106
+ ...(baseRun === undefined ? {} : { baseRun: { base, run: baseRun } })
107
+ });
108
+ };
@@ -0,0 +1,40 @@
1
+ import type { StoryCheckReport } from "../../src/storyCheck.ts";
2
+ import type { ChangedStoriesDocument, CheckedCodeDocument, VerifyDocument, VisibilityDocument } from "../../src/vite/agent.types.ts";
3
+ import { type BaseRun } from "./verifyBase.ts";
4
+ /** What `verifyDocument` reads. */
5
+ export type VerifyFindings = {
6
+ /** What the change is measured from, as named. */
7
+ readonly since: string;
8
+ /** The commit that is. */
9
+ readonly base: string;
10
+ /** The catalogue's answer on the change. */
11
+ readonly changed: ChangedStoriesDocument;
12
+ /** The catalogue's answer on what the change adds. */
13
+ readonly code: CheckedCodeDocument;
14
+ /** The catalogue's answer on the published components the change touches. */
15
+ readonly visibility: VisibilityDocument;
16
+ /** The stories' report; none when none ran. */
17
+ readonly report: StoryCheckReport | undefined;
18
+ /** Why they did not run, when they were to. */
19
+ readonly notRun: string | undefined;
20
+ /** Only the default view was asked for. */
21
+ readonly isQuick: boolean;
22
+ /** Whether a commit was named: with none, an empty change may only mean the work is where this cannot look. */
23
+ readonly isSinceNamed: boolean;
24
+ /** The failing stories run again on the base, when they were: what the base had too is not the change's. */
25
+ readonly baseRun?: {
26
+ readonly base: string;
27
+ readonly run: BaseRun;
28
+ };
29
+ /**
30
+ * What is wrong with the catalogue's configuration: the answer is not verified when the change has a UI file, whatever
31
+ * else it found, and only says it when the change has none.
32
+ */
33
+ readonly configProblems?: readonly string[];
34
+ };
35
+ /**
36
+ * The answer to whether a change is verified.
37
+ *
38
+ * @param input - what was found.
39
+ */
40
+ export declare const verifyDocument: (input: VerifyFindings) => VerifyDocument;
@@ -0,0 +1,297 @@
1
+ /**
2
+ * What `verify` concludes from the change, its code check and its stories' run: the document, and the one line that says
3
+ * it.
4
+ *
5
+ * @remarks
6
+ * Pure, so the rule the whole command exists for can be read and tested apart: a change is verified only if every changed
7
+ * UI file reached a story that actually ran, and what was not checked is never counted as passed. A story that was
8
+ * listed and did not run covers nothing, so the coverage is read from the results and not from the graph, and a story
9
+ * whose frame gave up on what it loads did not run: no check saw it in its final state. A changed file
10
+ * that no one sees does not fail, whatever it reaches; what `check-code` finds in it (a turned-off check, a deleted test)
11
+ * is said as a note. A published component the change touches that an agent cannot find or read (`unseen`,
12
+ * `agentVisibility.ts`) leaves it not verified: what is checked but cannot be found gets rebuilt. An empty change passes only against a commit someone named: with none, the work may simply be
13
+ * committed where this cannot look (a shallow clone, a default branch it does not know).
14
+ *
15
+ * @module
16
+ */
17
+ import { shellWord } from "../../src/shellWord.js";
18
+ import { splitByBase } from "./verifyBase.js";
19
+ /** A sheet, whose fix is not a story of its own. */
20
+ const SHEET_FILE = /\.(?:css|scss|sass|less)$/;
21
+ /** A story file, whose stories have to load. */
22
+ const STORY_FILE = /\.stories\.[^/]+$/;
23
+ /** A template, which has no props to write a story from. */
24
+ const TEMPLATE_FILE = /\.html$/;
25
+ /** How many stories an answer lists. */
26
+ const STORIES_LISTED = 20;
27
+ /** What to do about a file no story reaches. */
28
+ const fixOf = (file) => {
29
+ if (STORY_FILE.test(file.file))
30
+ return `npx forgebook stories --json says why it does not load; add it to the catalogue's stories if it is not listed`;
31
+ if (SHEET_FILE.test(file.file) || TEMPLATE_FILE.test(file.file))
32
+ return "use it from a component that has stories, or import the sheet in forgebook.preview.ts";
33
+ return `npx forgebook new ${shellWord(file.path)}`;
34
+ };
35
+ /** A UI file, by the stories that ran. */
36
+ const verifiedFile = (file, ran, notRun) => {
37
+ const stories = file.stories.filter((id) => ran.has(id)).length;
38
+ if (stories > 0)
39
+ return { file: file.file, coverage: file.coverage, stories };
40
+ return {
41
+ file: file.file,
42
+ coverage: "none",
43
+ stories: 0,
44
+ ...(file.stories.length > 0
45
+ ? {
46
+ reason: `its stories did not run: ${notRun ?? "the check left them out, or never saw them in their final state"}`
47
+ }
48
+ : { reason: "no story reaches it.", fix: fixOf(file) })
49
+ };
50
+ };
51
+ /** A count with its noun. */
52
+ const counted = (count, noun) => `${count} ${noun}${count === 1 ? "" : "s"}`;
53
+ /** What a line's first part says of the UI files. */
54
+ const coverageWords = (files) => {
55
+ const covered = files.filter((each) => each.coverage !== "none").length;
56
+ const through = files.filter((each) => each.coverage === "through").length;
57
+ const parts = through === 0 ? "" : ` (${through} through another component's)`;
58
+ return `${counted(files.length, "changed UI file")}, ${covered} with stories${parts}`;
59
+ };
60
+ /** The verdict, the worst that holds. */
61
+ const verdictOf = (files, problems, skipped, catalogueProblems, isBlind, notVerified) => {
62
+ if (problems > 0)
63
+ return "failed";
64
+ if (notVerified > 0 || files.some((each) => each.coverage === "none"))
65
+ return "not-verified";
66
+ if (isBlind || catalogueProblems.length > 0)
67
+ return "not-verified";
68
+ if (files.length === 0)
69
+ return "nothing-to-verify";
70
+ return skipped.length > 0 ? "partly-verified" : "verified";
71
+ };
72
+ /** A changed file the stories do reach, whose values were compared with nothing: outside the catalogue's folder. */
73
+ const notComparedLine = ({ changed, code }) => {
74
+ const compared = new Set(code.notCompared);
75
+ return changed.uiFiles.some((file) => compared.has(file.file))
76
+ ? ["colours and sizes of a file outside this catalogue's folder not checked"]
77
+ : [];
78
+ };
79
+ /** What was not checked, in the words a person reads. */
80
+ const skippedOf = (input, notRun) => {
81
+ const { changed, code, report, isQuick, isSinceNamed, since } = input;
82
+ const hasUi = changed.uiFiles.length > 0;
83
+ const hasStories = changed.stories.length > 0;
84
+ const notAwaited = new Set((report?.results ?? []).filter((each) => each.isNotAwaited === true).map((each) => each.storyId));
85
+ return [
86
+ // a story may mean it, and a preview that sets it for all of them turns the wait off: either way, said
87
+ ...(notAwaited.size === 0
88
+ ? []
89
+ : [
90
+ `${notAwaited.size === 1 ? "1 story" : `${notAwaited.size} stories`} checked without waiting for what it loads: parameters.suspense.expected`
91
+ ]),
92
+ // nothing a token names was touched when no UI file changed, so its absence said nothing about the change
93
+ ...(hasUi ? code.skipped : []),
94
+ ...notComparedLine(input),
95
+ ...(report?.a11y === "off" && hasStories
96
+ ? ["accessibility not checked: the catalogue sets a11y: false"]
97
+ : []),
98
+ ...(isQuick && hasStories ? ["only the default view checked: --quick"] : []),
99
+ ...(!hasUi && hasStories && notRun !== undefined ? [`stories not run: ${notRun}`] : []),
100
+ ...(!hasUi ? changed.problems.filter((problem) => !changed.unread?.includes(problem)) : []),
101
+ // committed work on a branch would not show: compared with the commit itself, only what is not committed does
102
+ ...(!isSinceNamed && since === "HEAD" && changed.files.length > 0
103
+ ? ["committed work not compared: no default branch found here, give --since"]
104
+ : []),
105
+ ...(changed.outside.length > 0
106
+ ? [
107
+ `${counted(changed.outside.length, "UI file")} of another catalogue not checked: ${changed.outside.join(", ")}`
108
+ ]
109
+ : [])
110
+ ];
111
+ };
112
+ /** A base run that found no story of the change's: every problem is the change's, as with a base that has none. */
113
+ const NO_STORY = /^No story or component /;
114
+ /**
115
+ * The report on the change with the problems the base had too taken out, and those problems; the report as it is when
116
+ * no base ran or it could not, with why.
117
+ */
118
+ const comparedWithBase = (report, baseRun) => {
119
+ if (report === undefined || baseRun === undefined)
120
+ return { report, existing: [], isCompared: false, unseen: 0 };
121
+ const { run } = baseRun;
122
+ if (typeof run === "string" && !NO_STORY.test(run))
123
+ return {
124
+ report,
125
+ existing: [],
126
+ isCompared: false,
127
+ unseen: 0,
128
+ notCompared: `not compared with ${baseRun.base.slice(0, 12)}: ${run}`
129
+ };
130
+ if (typeof run === "string")
131
+ return { report, existing: [], isCompared: true, unseen: 0 };
132
+ return { ...splitByBase(report, run.report, [run.root, run.folder]), isCompared: true };
133
+ };
134
+ /** What a line says of a change with no UI file. */
135
+ const noUiWords = ({ files, ran, problems, notVerified, unseen }) => {
136
+ const stories = ran === 0 ? "" : `, ${ran} checks of the stories they reach`;
137
+ const found = [
138
+ ...(problems === 0 ? [] : [counted(problems, "problem")]),
139
+ ...(notVerified.length === 0 ? [] : [`${notVerified.length} not verified`]),
140
+ ...(unseen.length === 0 ? [] : [`${counted(unseen.length, "published component")} agents cannot see`])
141
+ ].join(", ");
142
+ return `No changed UI file (${counted(files.length, "other file")}${stories})${found === "" ? "" : `: ${found}`}`;
143
+ };
144
+ /** What a line says after the coverage. */
145
+ const outcomeWords = ({ verdict, uiFiles, problems, variants, ran, notVerified: unseen, outdated, unseen: cannotBeSeen }, catalogueProblems) => {
146
+ const notVerified = unseen.length > 0 ||
147
+ cannotBeSeen.length > 0 ||
148
+ uiFiles.some((each) => each.coverage === "none") ||
149
+ catalogueProblems.length > 0;
150
+ const where = variants === "all" ? "in every variant" : "in the default view";
151
+ return [
152
+ ...(notVerified ? ["not verified"] : []),
153
+ ...(unseen.length > 0 ? [`${unseen.length} not seen in its final state: the frame gave up`] : []),
154
+ ...(cannotBeSeen.length > 0
155
+ ? [`${counted(cannotBeSeen.length, "published component")} agents cannot see`]
156
+ : []),
157
+ ...(problems > 0 ? [counted(problems, "problem")] : []),
158
+ ...(outdated === undefined ? [] : [`${counted(outdated.length, "story file")} written for other props`]),
159
+ ...(verdict === "verified" || verdict === "partly-verified"
160
+ ? [`verified ${where} (${counted(ran, "check")})`]
161
+ : [])
162
+ ].join(", ");
163
+ };
164
+ /**
165
+ * The verdict's line.
166
+ *
167
+ * @param document - the document so far.
168
+ * @param catalogueProblems - what the catalogue could not read.
169
+ */
170
+ const summaryOf = (document, catalogueProblems) => {
171
+ const { verdict, uiFiles, files, since, code, skipped } = document;
172
+ const isBlind = files.length === 0 && catalogueProblems.length === 0;
173
+ const notes = code.notes.length === 0 ? [] : [`${counted(code.notes.length, "note")} from check-code`];
174
+ const said = [...skipped, ...notes];
175
+ const tail = said.length === 0 ? "" : `; ${said.join("; ")}`;
176
+ if (files.length === 0) {
177
+ const notVerified = isBlind
178
+ ? "not verified. If your work is committed, give --since <ref>"
179
+ : "not verified";
180
+ const ending = verdict === "not-verified" ? notVerified : "nothing to verify";
181
+ return `Nothing changed since ${since}: ${ending}${tail}`;
182
+ }
183
+ if (uiFiles.length === 0) {
184
+ const ending = catalogueProblems.length === 0 ? "" : ": not verified";
185
+ return `${noUiWords(document)}${ending}${tail}`;
186
+ }
187
+ return `${coverageWords(uiFiles)}: ${outcomeWords(document, catalogueProblems)}${tail}`;
188
+ };
189
+ /**
190
+ * The pairs that found a problem, each with the links that open its story.
191
+ *
192
+ * @param results - the pairs that ran.
193
+ * @param links - the links of the change's stories, by id.
194
+ */
195
+ const failuresOf = (results, links) => results
196
+ .filter((result) => result.problems.length > 0)
197
+ .map(({ storyId, view, problems: found }) => {
198
+ const storyLinks = links.get(storyId);
199
+ return { storyId, view, problems: found, ...(storyLinks === undefined ? {} : { links: storyLinks }) };
200
+ });
201
+ /** What the comparison with the base leaves unchecked: a base that could not run, stories it never saw. */
202
+ const baseSkips = (compared) => [
203
+ ...(compared.notCompared === undefined
204
+ ? []
205
+ : [`${compared.notCompared}; every problem the stories have is counted`]),
206
+ ...(compared.unseen === 0
207
+ ? []
208
+ : [
209
+ `${counted(compared.unseen, "story")} not seen on the base in its final state: every problem of it counted`
210
+ ])
211
+ ];
212
+ /**
213
+ * The answer to whether a change is verified.
214
+ *
215
+ * @param input - what was found.
216
+ */
217
+ export const verifyDocument = (input) => {
218
+ const { since, base, changed, code, visibility, notRun, isQuick, isSinceNamed } = input;
219
+ const compared = comparedWithBase(input.report, input.baseRun);
220
+ const { report } = compared;
221
+ const results = report?.results ?? [];
222
+ // a story not seen in a view is left out of what ran there; seen in another it still covers its file, and the verdict
223
+ // says not verified from `notVerified` either way
224
+ const seenResults = results.filter((result) => result.notVerified === undefined);
225
+ const ran = new Set(seenResults.map((result) => result.storyId));
226
+ const uiFiles = changed.uiFiles.map((file) => verifiedFile(file, ran, notRun));
227
+ const links = new Map(changed.stories.map((story) => [story.id, story.links]));
228
+ const failures = failuresOf(results, links);
229
+ const notVerified = results.flatMap(({ storyId, view, notVerified: reason }) => {
230
+ if (reason === undefined)
231
+ return [];
232
+ const storyLinks = links.get(storyId);
233
+ return [
234
+ { storyId, view, notVerified: reason, ...(storyLinks === undefined ? {} : { links: storyLinks }) }
235
+ ];
236
+ });
237
+ // a change no one sees does not fail; what the code check found in it is still said
238
+ const seen = new Set(changed.uiFiles.map((file) => file.file));
239
+ const codeProblems = code.problems.filter((problem) => seen.has(problem.file));
240
+ const outside = new Set(changed.outside);
241
+ const notes = code.problems.filter((problem) => !seen.has(problem.file) && !outside.has(problem.file));
242
+ // stories written for props the component no longer has pass a check they no longer mean: each is a problem
243
+ const outdated = changed.outdated ?? [];
244
+ const problems = failures.reduce((sum, each) => sum + each.problems.length, codeProblems.length + outdated.length);
245
+ const existingProblems = compared.existing.reduce((sum, each) => sum + each.problems.length, 0);
246
+ const hasUiFiles = changed.uiFiles.length > 0;
247
+ // a change with no UI file is not the gate's business: a configuration problem, a story pattern that matches nothing
248
+ // in a catalogue with no story yet, is said and does not stop it; a story file the pattern misses is a UI file itself
249
+ const configProblems = input.configProblems ?? [];
250
+ const skipped = [
251
+ ...skippedOf(input, notRun),
252
+ ...baseSkips(compared),
253
+ ...(hasUiFiles ? [] : configProblems)
254
+ ];
255
+ // a story file that cannot be read may be the change, whatever else changed
256
+ const catalogueProblems = hasUiFiles
257
+ ? [...configProblems, ...changed.problems]
258
+ : [...(changed.unread ?? [])];
259
+ const isBlind = changed.files.length === 0 && !isSinceNamed;
260
+ const { unseen } = visibility;
261
+ const verdict = verdictOf(uiFiles, problems, [...skipped, ...visibility.skipped], catalogueProblems, isBlind, notVerified.length + unseen.length);
262
+ const allSkipped = [...skipped, ...catalogueProblems, ...visibility.skipped];
263
+ const variants = isQuick ? "default" : "all";
264
+ const body = {
265
+ since,
266
+ base,
267
+ variants,
268
+ files: changed.files,
269
+ uiFiles,
270
+ storyCount: changed.stories.length,
271
+ stories: changed.stories.slice(0, STORIES_LISTED),
272
+ ran: seenResults.length,
273
+ failures,
274
+ notVerified,
275
+ code: {
276
+ checked: code.checked,
277
+ problems: codeProblems,
278
+ notes,
279
+ ...(code.tokenSources === undefined ? {} : { tokenSources: code.tokenSources }),
280
+ ...(code.tokenNotes === undefined ? {} : { tokenNotes: code.tokenNotes }),
281
+ ...(code.excused === undefined ? {} : { excused: code.excused }),
282
+ ...(code.advice === undefined ? {} : { advice: code.advice })
283
+ },
284
+ ...(outdated.length === 0 ? {} : { outdated }),
285
+ problems,
286
+ ...(compared.isCompared
287
+ ? { existing: { problems: existingProblems, failures: failuresOf(compared.existing, links) } }
288
+ : {}),
289
+ unseen
290
+ };
291
+ // problems the base had too are not a check left undone: said in the line, never in skipped
292
+ const old = existingProblems === 0
293
+ ? ""
294
+ : `; ${counted(existingProblems, "problem")} the stories had before the change not counted (existing; --all-problems counts them)`;
295
+ const summary = `${summaryOf({ ...body, verdict, skipped: allSkipped }, catalogueProblems)}${old}`;
296
+ return { schema: 2, verdict, summary, skipped: allSkipped, ...body };
297
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The GitHub Actions the workflows Forgebook writes in a project use: `init --agents`' verify workflow and
3
+ * `proof --write-workflow`'s.
4
+ *
5
+ * @remarks
6
+ * Each is pinned to the commit of its newest release, with the release in a comment, as Dependabot reads and moves it: a
7
+ * tag can be moved under a workflow, and an old major runs on a Node that GitHub's runners no longer support. One place, so
8
+ * both workflows move together.
9
+ *
10
+ * @module
11
+ */
12
+ /** Checks the repository out. */
13
+ export declare const CHECKOUT = "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1";
14
+ /** Installs Node. */
15
+ export declare const SETUP_NODE = "actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0";
16
+ /** Keeps a run's files as an artefact. */
17
+ export declare const UPLOAD = "actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2";
18
+ /** Fetches an artefact in another job. */
19
+ export declare const DOWNLOAD = "actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2";
20
+ /** Installs pnpm. */
21
+ export declare const SETUP_PNPM = "pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1";
22
+ /** Installs Bun. */
23
+ export declare const SETUP_BUN = "oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0";
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The GitHub Actions the workflows Forgebook writes in a project use: `init --agents`' verify workflow and
3
+ * `proof --write-workflow`'s.
4
+ *
5
+ * @remarks
6
+ * Each is pinned to the commit of its newest release, with the release in a comment, as Dependabot reads and moves it: a
7
+ * tag can be moved under a workflow, and an old major runs on a Node that GitHub's runners no longer support. One place, so
8
+ * both workflows move together.
9
+ *
10
+ * @module
11
+ */
12
+ /** Checks the repository out. */
13
+ export const CHECKOUT = "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1";
14
+ /** Installs Node. */
15
+ export const SETUP_NODE = "actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0";
16
+ /** Keeps a run's files as an artefact. */
17
+ export const UPLOAD = "actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2";
18
+ /** Fetches an artefact in another job. */
19
+ export const DOWNLOAD = "actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2";
20
+ /** Installs pnpm. */
21
+ export const SETUP_PNPM = "pnpm/action-setup@73e46992e05b19abd31f2f3c20e0e7370d762115 # v6.1.1";
22
+ /** Installs Bun. */
23
+ export const SETUP_BUN = "oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0";
@@ -1,8 +1,19 @@
1
1
  import { pageSlug } from "../../src/pageAddress.js";
2
2
  /** The props whose keys are the parts. */
3
3
  const PART_MAPS = ["classNames", "styles", "refs"];
4
- /** A prop in short. */
4
+ /**
5
+ * A prop in short, ending with when it can be passed for a variant's prop (`href:string[kind=link]`), a `?` after the
6
+ * discriminant when the prop also applies with it left out (`onPick[mode?=single]`).
7
+ */
5
8
  const shortProp = (prop) => {
9
+ const { onlyWhen } = prop;
10
+ const condition = onlyWhen === undefined
11
+ ? ""
12
+ : `[${onlyWhen.prop}${onlyWhen.orOmitted === true ? "?" : ""}=${onlyWhen.values.map(String).join("|")}]`;
13
+ return `${propText(prop)}${condition}`;
14
+ };
15
+ /** A prop in short, without its condition. */
16
+ const propText = (prop) => {
6
17
  const required = prop.isRequired ? "!" : "";
7
18
  switch (prop.kind) {
8
19
  case "choice":
@@ -10,7 +10,9 @@
10
10
  * have set it: a prop the panel lets the person set (the component's props with the story's `argTypes` laid over them,
11
11
  * or an arg only the `argTypes` or the story's own args name), with a value of that prop's type. Everything else is
12
12
  * left out and reported. A value that is code never comes from an address: a named value is looked up among the
13
- * source's own entries only, never through an object's prototype (`constructor`). Pure.
13
+ * source's own entries only, never through an object's prototype (`constructor`). An object's names are checked the
14
+ * same way, against its type (`valueShape.ts`). The panel's "no value" (`UnsetArg`) passes for any prop the panel sets:
15
+ * the story receives `undefined`, which any prop may. Pure.
14
16
  *
15
17
  * A frame takes values from one kind of message only, whichever frame it is (the stage's, an embed's, a plugin's aside),
16
18
  * so `checkedArgsMessage` builds it, from nothing but what this check sealed (`AcceptedArgs`): a page that skipped the
@@ -36,8 +38,11 @@ export type ArgDeclaration = {
36
38
  /** The values the source names for types the panel cannot write. */
37
39
  readonly namedValues: NamedValues;
38
40
  };
39
- /** Why a value of the address was left out: its name is not one the panel sets, or its value is not of the prop's type. */
40
- export type DroppedArgReason = "undeclared" | "type";
41
+ /**
42
+ * Why a value of the address was left out: its name is not one the panel sets, its value is not of the prop's type, its
43
+ * text could not be read as a value at all, or its custom control refuses it or cannot load.
44
+ */
45
+ export type DroppedArgReason = "undeclared" | "type" | "unreadable" | "control" | "markup";
41
46
  /** A value of the address left out. */
42
47
  export type DroppedArg = {
43
48
  /** The arg's name, as the address wrote it. */
@@ -51,6 +56,8 @@ export type CheckedArgs = {
51
56
  readonly accepted: PanelArgs;
52
57
  /** The values left out, in the address's order. */
53
58
  readonly dropped: readonly DroppedArg[];
59
+ /** Whether a value waits for what checks it: it is neither taken nor left out yet. */
60
+ readonly isWaiting: boolean;
54
61
  /** The values the story receives, as a frame can be told them. */
55
62
  readonly sealed: AcceptedArgs;
56
63
  };
@@ -73,6 +80,19 @@ export declare const NO_ACCEPTED_ARGS: AcceptedArgs;
73
80
  * @param declaration - what the story declares.
74
81
  */
75
82
  export declare const declaredArgProps: (declaration: ArgDeclaration) => readonly PanelProp[];
83
+ /** What checks a custom control's value, by control: gives what is wrong with it. A control missing here refuses all. */
84
+ export type CustomChecks = Readonly<Record<string, (value: ArgValue) => string | undefined>>;
85
+ /** What checks a structured value: `shapeValues.ts` and each control's schema, loaded with the first prop that needs them. */
86
+ export type ArgChecks = Pick<typeof import("./shapeValues.ts"), "isValueOfShape" | "isFileList"> & {
87
+ /** What checks a custom control's value; none refuses them all. */
88
+ readonly custom?: CustomChecks;
89
+ };
90
+ /**
91
+ * Whether a prop's values are checked by `shapeValues.ts`.
92
+ *
93
+ * @param prop - a prop the panel sets.
94
+ */
95
+ export declare const needsShapeChecks: (prop: PanelProp) => boolean;
76
96
  /**
77
97
  * Whether a value is one the panel could set for a prop: of the control the `argTypes` name, otherwise of the prop's
78
98
  * kind.
@@ -80,15 +100,19 @@ export declare const declaredArgProps: (declaration: ArgDeclaration) => readonly
80
100
  * @param prop - a prop the panel sets.
81
101
  * @param value - the address's value.
82
102
  * @param namedValues - the source's named values.
103
+ * @param shapes - what checks a value against a shape; none refuses a prop that needs it.
83
104
  */
84
- export declare const isValueOfProp: (prop: PanelProp, value: ArgValue, namedValues: NamedValues) => boolean;
105
+ export declare const isValueOfProp: (prop: PanelProp, value: ArgValue, namedValues: NamedValues, shapes?: ArgChecks) => boolean;
85
106
  /**
86
107
  * The address's values the story receives, and those left out with the reason.
87
108
  *
88
109
  * @param args - the values the address names.
89
110
  * @param declaration - what the story declares.
111
+ * @param typeValue - types a value for its prop, for a link whose form does not say (`storybookArgs.ts`); none takes each
112
+ * as written.
113
+ * @param checks - what checks a structured value, a custom control's among them; none leaves such a value waiting.
90
114
  */
91
- export declare const checkedAddressArgs: (args: PanelArgs, declaration: ArgDeclaration) => CheckedArgs;
115
+ export declare const checkedAddressArgs: (args: PanelArgs, declaration: ArgDeclaration, typeValue?: (prop: PanelProp, value: ArgValue) => ArgValue, checks?: ArgChecks) => CheckedArgs;
92
116
  /**
93
117
  * The message that gives a frame its values.
94
118
  *