forgebook 0.3.2 → 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 (693) hide show
  1. package/README.md +917 -74
  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 +54 -6
  187. package/dist/src/addressArgs.js +72 -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 +58 -14
  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/PluginBlockHost.js +2 -1
  307. package/dist/src/shell/PluginTabHost.js +19 -2
  308. package/dist/src/shell/PropFields.d.ts +3 -1
  309. package/dist/src/shell/PropFields.js +9 -6
  310. package/dist/src/shell/PropRows.d.ts +23 -2
  311. package/dist/src/shell/PropRows.js +58 -19
  312. package/dist/src/shell/PropsTab.d.ts +12 -5
  313. package/dist/src/shell/PropsTab.js +9 -21
  314. package/dist/src/shell/RefStoryPage.d.ts +33 -0
  315. package/dist/src/shell/RefStoryPage.js +123 -0
  316. package/dist/src/shell/SearchPanel.js +51 -24
  317. package/dist/src/shell/Shell.d.ts +18 -0
  318. package/dist/src/shell/Shell.js +137 -22
  319. package/dist/src/shell/ShortcutHelp.d.ts +22 -0
  320. package/dist/src/shell/ShortcutHelp.js +66 -0
  321. package/dist/src/shell/Sidebar.d.ts +17 -4
  322. package/dist/src/shell/Sidebar.js +92 -41
  323. package/dist/src/shell/SidebarDocs.js +2 -2
  324. package/dist/src/shell/SidebarEntries.js +5 -3
  325. package/dist/src/shell/SidebarHandle.d.ts +3 -5
  326. package/dist/src/shell/SidebarHandle.js +4 -4
  327. package/dist/src/shell/SidebarRefs.d.ts +39 -0
  328. package/dist/src/shell/SidebarRefs.js +99 -0
  329. package/dist/src/shell/SidebarSearch.js +37 -9
  330. package/dist/src/shell/SignatureReference.js +3 -1
  331. package/dist/src/shell/Stage.d.ts +10 -2
  332. package/dist/src/shell/Stage.js +35 -60
  333. package/dist/src/shell/StatusBadges.d.ts +54 -0
  334. package/dist/src/shell/StatusBadges.js +77 -0
  335. package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
  336. package/dist/src/shell/StoryCodeBlock.js +7 -6
  337. package/dist/src/shell/SwitchGallery.d.ts +36 -0
  338. package/dist/src/shell/SwitchGallery.js +17 -0
  339. package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
  340. package/dist/src/shell/SwitchGalleryPanel.js +99 -0
  341. package/dist/src/shell/TagFilter.d.ts +24 -0
  342. package/dist/src/shell/TagFilter.js +45 -0
  343. package/dist/src/shell/TagViews.d.ts +39 -0
  344. package/dist/src/shell/TagViews.js +20 -0
  345. package/dist/src/shell/Toolbar.d.ts +4 -1
  346. package/dist/src/shell/Toolbar.js +17 -7
  347. package/dist/src/shell/ToolbarControl.d.ts +3 -0
  348. package/dist/src/shell/ToolbarControl.js +23 -6
  349. package/dist/src/shell/ViewMenuPanel.js +6 -1
  350. package/dist/src/shell/argChecks.d.ts +22 -0
  351. package/dist/src/shell/argChecks.js +20 -0
  352. package/dist/src/shell/asideStory.d.ts +17 -4
  353. package/dist/src/shell/asideStory.js +21 -4
  354. package/dist/src/shell/audienceSections.css +9 -9
  355. package/dist/src/shell/catalogueContext.d.ts +1 -1
  356. package/dist/src/shell/catalogueContext.js +6 -1
  357. package/dist/src/shell/codeSpans.d.ts +27 -0
  358. package/dist/src/shell/codeSpans.js +76 -0
  359. package/dist/src/shell/compareVariants.d.ts +4 -2
  360. package/dist/src/shell/compareVariants.js +16 -8
  361. package/dist/src/shell/composition.d.ts +23 -0
  362. package/dist/src/shell/composition.js +26 -0
  363. package/dist/src/shell/controlCycle.d.ts +1 -1
  364. package/dist/src/shell/controlCycle.js +3 -2
  365. package/dist/src/shell/customControls.d.ts +55 -0
  366. package/dist/src/shell/customControls.js +70 -0
  367. package/dist/src/shell/docPage.css +22 -22
  368. package/dist/src/shell/dockTabs.d.ts +19 -3
  369. package/dist/src/shell/dockTabs.js +28 -20
  370. package/dist/src/shell/embed.css +7 -7
  371. package/dist/src/shell/framesOrigin.d.ts +7 -0
  372. package/dist/src/shell/framesOrigin.js +1 -1
  373. package/dist/src/shell/galleryPlace.d.ts +20 -0
  374. package/dist/src/shell/galleryPlace.js +26 -0
  375. package/dist/src/shell/icons.d.ts +1 -0
  376. package/dist/src/shell/icons.js +1 -0
  377. package/dist/src/shell/keyboard.d.ts +14 -12
  378. package/dist/src/shell/keyboard.js +21 -6
  379. package/dist/src/shell/laterStrings.d.ts +29 -0
  380. package/dist/src/shell/laterStrings.js +42 -3
  381. package/dist/src/shell/mountShell.js +3 -0
  382. package/dist/src/shell/pageStrings.d.ts +4 -0
  383. package/dist/src/shell/pageStrings.js +4 -0
  384. package/dist/src/shell/pageTagView.d.ts +18 -0
  385. package/dist/src/shell/pageTagView.js +10 -0
  386. package/dist/src/shell/playMemory.d.ts +14 -0
  387. package/dist/src/shell/playMemory.js +8 -0
  388. package/dist/src/shell/propNotes.d.ts +23 -0
  389. package/dist/src/shell/propNotes.js +37 -0
  390. package/dist/src/shell/refIndexLoad.d.ts +17 -0
  391. package/dist/src/shell/refIndexLoad.js +38 -0
  392. package/dist/src/shell/refParts.d.ts +34 -0
  393. package/dist/src/shell/refParts.js +9 -0
  394. package/dist/src/shell/refStory.css +21 -0
  395. package/dist/src/shell/refStrings.d.ts +13 -0
  396. package/dist/src/shell/refStrings.js +21 -0
  397. package/dist/src/shell/search.css +11 -11
  398. package/dist/src/shell/shell.css +348 -168
  399. package/dist/src/shell/shellScheme.js +2 -2
  400. package/dist/src/shell/shortcutHelp.css +64 -0
  401. package/dist/src/shell/stageArgs.d.ts +53 -0
  402. package/dist/src/shell/stageArgs.js +64 -0
  403. package/dist/src/shell/statusBadges.css +51 -0
  404. package/dist/src/shell/strings.d.ts +7 -16
  405. package/dist/src/shell/strings.js +12 -17
  406. package/dist/src/shell/switchGallery.css +104 -0
  407. package/dist/src/shell/tagFilter.css +46 -0
  408. package/dist/src/shell/tagView.d.ts +20 -0
  409. package/dist/src/shell/tagView.js +10 -0
  410. package/dist/src/shell/useAddressArgs.d.ts +27 -2
  411. package/dist/src/shell/useAddressArgs.js +71 -14
  412. package/dist/src/shell/useControlKeys.js +2 -2
  413. package/dist/src/shell/useEditedProblems.d.ts +6 -0
  414. package/dist/src/shell/useEditedProblems.js +40 -0
  415. package/dist/src/shell/useFrameMessages.js +3 -0
  416. package/dist/src/shell/useListedTree.d.ts +13 -0
  417. package/dist/src/shell/useListedTree.js +32 -0
  418. package/dist/src/shell/usePageFrames.js +2 -2
  419. package/dist/src/shell/usePopover.d.ts +5 -0
  420. package/dist/src/shell/usePopover.js +7 -1
  421. package/dist/src/shell/useRefIndex.d.ts +22 -0
  422. package/dist/src/shell/useRefIndex.js +36 -0
  423. package/dist/src/shell/useScrollStops.d.ts +20 -0
  424. package/dist/src/shell/useScrollStops.js +41 -0
  425. package/dist/src/shell/useShortcutHelp.d.ts +18 -0
  426. package/dist/src/shell/useShortcutHelp.js +32 -0
  427. package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
  428. package/dist/src/shell/useSidebarOverlay.js +12 -4
  429. package/dist/src/shell/useStoryCode.d.ts +2 -1
  430. package/dist/src/shell/useStoryCode.js +12 -7
  431. package/dist/src/shell/useToolbarLayout.d.ts +5 -1
  432. package/dist/src/shell/useToolbarLayout.js +2 -2
  433. package/dist/src/shell/useWorstCase.d.ts +8 -2
  434. package/dist/src/shell/useWorstCase.js +2 -2
  435. package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
  436. package/dist/src/shell/valueEditors/FileEditor.js +66 -0
  437. package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
  438. package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
  439. package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
  440. package/dist/src/shell/valueEditors/ListEditor.js +82 -0
  441. package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
  442. package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
  443. package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
  444. package/dist/src/shell/valueEditors/PropEditor.js +53 -0
  445. package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
  446. package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
  447. package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
  448. package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
  449. package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
  450. package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
  451. package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
  452. package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
  453. package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
  454. package/dist/src/shell/valueEditors/ValueField.js +147 -0
  455. package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
  456. package/dist/src/shell/valueEditors/editorStrings.js +66 -0
  457. package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
  458. package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
  459. package/dist/src/shell/valueEditors/valueEditors.css +153 -0
  460. package/dist/src/shell/worstArgs.d.ts +8 -5
  461. package/dist/src/shell/worstArgs.js +14 -7
  462. package/dist/src/shellTheme.d.ts +1 -1
  463. package/dist/src/shellTheme.js +15 -1
  464. package/dist/src/shellTheme.types.d.ts +4 -0
  465. package/dist/src/shellWord.d.ts +12 -0
  466. package/dist/src/shellWord.js +15 -0
  467. package/dist/src/sourceFiles.js +2 -1
  468. package/dist/src/storyArgTypes.d.ts +57 -0
  469. package/dist/src/storyArgTypes.js +195 -0
  470. package/dist/src/storyBackground.js +14 -3
  471. package/dist/src/storyCheck.d.ts +85 -3
  472. package/dist/src/storyCheck.js +23 -1
  473. package/dist/src/storyCodeText.d.ts +46 -0
  474. package/dist/src/storyCodeText.js +27 -0
  475. package/dist/src/storyControls.d.ts +100 -0
  476. package/dist/src/storyControls.js +100 -0
  477. package/dist/src/storyStatuses.d.ts +55 -0
  478. package/dist/src/storyStatuses.js +104 -0
  479. package/dist/src/storyTagNames.d.ts +25 -0
  480. package/dist/src/storyTagNames.js +25 -0
  481. package/dist/src/storyTags.d.ts +29 -0
  482. package/dist/src/storyTags.js +85 -0
  483. package/dist/src/storyTree.d.ts +13 -0
  484. package/dist/src/storyTree.js +24 -4
  485. package/dist/src/storybookArgs.d.ts +24 -0
  486. package/dist/src/storybookArgs.js +185 -0
  487. package/dist/src/switches.d.ts +66 -3
  488. package/dist/src/switches.js +42 -1
  489. package/dist/src/valueSchema.d.ts +28 -0
  490. package/dist/src/valueSchema.js +196 -0
  491. package/dist/src/valueShape.d.ts +94 -0
  492. package/dist/src/valueShape.js +25 -0
  493. package/dist/src/viewState.d.ts +8 -3
  494. package/dist/src/viewState.js +27 -10
  495. package/dist/src/vite/adapter.d.ts +40 -2
  496. package/dist/src/vite/adapter.js +1 -0
  497. package/dist/src/vite/agent.types.d.ts +347 -7
  498. package/dist/src/vite/agentApi.d.ts +23 -0
  499. package/dist/src/vite/agentApi.js +90 -17
  500. package/dist/src/vite/agentIndex.d.ts +0 -2
  501. package/dist/src/vite/agentIndex.js +5 -6
  502. package/dist/src/vite/agentRoutes.d.ts +20 -1
  503. package/dist/src/vite/agentRoutes.js +106 -65
  504. package/dist/src/vite/agentStatuses.d.ts +42 -0
  505. package/dist/src/vite/agentStatuses.js +67 -0
  506. package/dist/src/vite/agentStoryCode.d.ts +48 -0
  507. package/dist/src/vite/agentStoryCode.js +38 -0
  508. package/dist/src/vite/agentVisibility.d.ts +47 -0
  509. package/dist/src/vite/agentVisibility.js +174 -0
  510. package/dist/src/vite/appAudit.d.ts +134 -0
  511. package/dist/src/vite/appAudit.js +333 -0
  512. package/dist/src/vite/appBuildOption.d.ts +53 -0
  513. package/dist/src/vite/appBuildOption.js +55 -0
  514. package/dist/src/vite/appTokenFiles.d.ts +92 -0
  515. package/dist/src/vite/appTokenFiles.js +433 -0
  516. package/dist/src/vite/appTokens.d.ts +23 -0
  517. package/dist/src/vite/appTokens.js +275 -0
  518. package/dist/src/vite/builtTexts.d.ts +10 -0
  519. package/dist/src/vite/builtTexts.js +59 -22
  520. package/dist/src/vite/catalogueConfig.d.ts +3 -1
  521. package/dist/src/vite/catalogueConfig.js +15 -3
  522. package/dist/src/vite/changeCoverage.d.ts +74 -0
  523. package/dist/src/vite/changeCoverage.js +120 -0
  524. package/dist/src/vite/changedRoute.d.ts +30 -0
  525. package/dist/src/vite/changedRoute.js +197 -0
  526. package/dist/src/vite/checkCode.d.ts +105 -3
  527. package/dist/src/vite/checkCode.js +323 -36
  528. package/dist/src/vite/checkoutWatch.d.ts +97 -0
  529. package/dist/src/vite/checkoutWatch.js +287 -0
  530. package/dist/src/vite/closeWatch.d.ts +8 -0
  531. package/dist/src/vite/closeWatch.js +1 -1
  532. package/dist/src/vite/componentCache.d.ts +8 -0
  533. package/dist/src/vite/componentCache.js +66 -0
  534. package/dist/src/vite/componentGraph.d.ts +71 -0
  535. package/dist/src/vite/componentGraph.js +133 -0
  536. package/dist/src/vite/componentRules.d.ts +33 -0
  537. package/dist/src/vite/componentRules.js +105 -0
  538. package/dist/src/vite/componentScan.d.ts +69 -0
  539. package/dist/src/vite/componentScan.js +418 -0
  540. package/dist/src/vite/compositionCheck.d.ts +15 -0
  541. package/dist/src/vite/compositionCheck.js +243 -0
  542. package/dist/src/vite/config.d.ts +32 -1
  543. package/dist/src/vite/configFile.d.ts +14 -2
  544. package/dist/src/vite/configFile.js +124 -40
  545. package/dist/src/vite/configKeys.d.ts +15 -0
  546. package/dist/src/vite/configKeys.js +171 -0
  547. package/dist/src/vite/configLoadError.d.ts +23 -0
  548. package/dist/src/vite/configLoadError.js +71 -0
  549. package/dist/src/vite/cssDeclarations.d.ts +71 -0
  550. package/dist/src/vite/cssDeclarations.js +290 -0
  551. package/dist/src/vite/cssImports.d.ts +14 -0
  552. package/dist/src/vite/cssImports.js +48 -0
  553. package/dist/src/vite/cssReferences.d.ts +54 -0
  554. package/dist/src/vite/cssReferences.js +157 -0
  555. package/dist/src/vite/cssTokenValues.d.ts +50 -0
  556. package/dist/src/vite/cssTokenValues.js +233 -0
  557. package/dist/src/vite/designTokens.d.ts +24 -0
  558. package/dist/src/vite/designTokens.js +5 -1
  559. package/dist/src/vite/docsExtractor.d.ts +9 -3
  560. package/dist/src/vite/docsExtractor.js +11 -3
  561. package/dist/src/vite/docsProgram.d.ts +17 -4
  562. package/dist/src/vite/docsProgram.js +52 -11
  563. package/dist/src/vite/docsWorker.js +7 -2
  564. package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
  565. package/dist/src/vite/emptyStoryGlobs.js +52 -0
  566. package/dist/src/vite/fileImports.d.ts +17 -0
  567. package/dist/src/vite/fileImports.js +57 -0
  568. package/dist/src/vite/findComponent.d.ts +10 -2
  569. package/dist/src/vite/findComponent.js +27 -22
  570. package/dist/src/vite/findRoute.js +3 -2
  571. package/dist/src/vite/forcedStates.d.ts +9 -2
  572. package/dist/src/vite/forcedStates.js +12 -3
  573. package/dist/src/vite/forgebookPlugin.d.ts +2 -0
  574. package/dist/src/vite/forgebookPlugin.js +52 -72
  575. package/dist/src/vite/frameErrors.d.ts +19 -0
  576. package/dist/src/vite/frameErrors.js +70 -0
  577. package/dist/src/vite/framesServer.d.ts +12 -0
  578. package/dist/src/vite/framesServer.js +21 -4
  579. package/dist/src/vite/functionComponentDocs.js +81 -12
  580. package/dist/src/vite/generatedModules.js +4 -2
  581. package/dist/src/vite/gitChange.d.ts +38 -5
  582. package/dist/src/vite/gitChange.js +71 -11
  583. package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
  584. package/dist/src/vite/hiddenStoryFiles.js +107 -0
  585. package/dist/src/vite/hotSnippets.d.ts +38 -14
  586. package/dist/src/vite/hotSnippets.js +137 -39
  587. package/dist/src/vite/importedNames.d.ts +37 -0
  588. package/dist/src/vite/importedNames.js +138 -0
  589. package/dist/src/vite/indexFields.d.ts +6 -0
  590. package/dist/src/vite/indexFields.js +21 -0
  591. package/dist/src/vite/indexStoryFile.d.ts +8 -1
  592. package/dist/src/vite/indexStoryFile.js +22 -157
  593. package/dist/src/vite/jsxCallSites.d.ts +33 -0
  594. package/dist/src/vite/jsxCallSites.js +200 -0
  595. package/dist/src/vite/jsxInScripts.d.ts +67 -0
  596. package/dist/src/vite/jsxInScripts.js +138 -0
  597. package/dist/src/vite/jsxTree.d.ts +20 -0
  598. package/dist/src/vite/jsxTree.js +163 -0
  599. package/dist/src/vite/lineAndColumn.d.ts +13 -0
  600. package/dist/src/vite/lineAndColumn.js +18 -0
  601. package/dist/src/vite/lookAlikes.d.ts +65 -0
  602. package/dist/src/vite/lookAlikes.js +228 -0
  603. package/dist/src/vite/nearestToken.d.ts +17 -0
  604. package/dist/src/vite/nearestToken.js +9 -2
  605. package/dist/src/vite/packageEntries.d.ts +42 -0
  606. package/dist/src/vite/packageEntries.js +127 -0
  607. package/dist/src/vite/pages.d.ts +9 -1
  608. package/dist/src/vite/pages.js +108 -4
  609. package/dist/src/vite/pluginConfig.js +4 -0
  610. package/dist/src/vite/pluginIds.d.ts +2 -0
  611. package/dist/src/vite/pluginIds.js +5 -1
  612. package/dist/src/vite/pluginModules.d.ts +81 -11
  613. package/dist/src/vite/pluginModules.js +109 -21
  614. package/dist/src/vite/prebundled.d.ts +57 -15
  615. package/dist/src/vite/prebundled.js +80 -0
  616. package/dist/src/vite/previewTags.d.ts +25 -0
  617. package/dist/src/vite/previewTags.js +56 -0
  618. package/dist/src/vite/projectFiles.d.ts +54 -0
  619. package/dist/src/vite/projectFiles.js +116 -0
  620. package/dist/src/vite/projectPostcss.d.ts +70 -0
  621. package/dist/src/vite/projectPostcss.js +250 -0
  622. package/dist/src/vite/propDocs.d.ts +12 -0
  623. package/dist/src/vite/propDocs.js +130 -58
  624. package/dist/src/vite/propKind.d.ts +40 -0
  625. package/dist/src/vite/propKind.js +71 -0
  626. package/dist/src/vite/propTypeNotes.d.ts +22 -0
  627. package/dist/src/vite/propTypeNotes.js +51 -0
  628. package/dist/src/vite/publishedExports.d.ts +27 -0
  629. package/dist/src/vite/publishedExports.js +298 -0
  630. package/dist/src/vite/realFolder.d.ts +6 -0
  631. package/dist/src/vite/realFolder.js +25 -0
  632. package/dist/src/vite/refsConfig.d.ts +39 -0
  633. package/dist/src/vite/refsConfig.js +54 -0
  634. package/dist/src/vite/reuseCheck.d.ts +45 -0
  635. package/dist/src/vite/reuseCheck.js +260 -0
  636. package/dist/src/vite/runningVersions.d.ts +33 -0
  637. package/dist/src/vite/runningVersions.js +25 -0
  638. package/dist/src/vite/scriptProblems.d.ts +60 -0
  639. package/dist/src/vite/scriptProblems.js +155 -0
  640. package/dist/src/vite/searchModule.js +3 -2
  641. package/dist/src/vite/searchRoute.js +4 -2
  642. package/dist/src/vite/shapeDocs.d.ts +36 -0
  643. package/dist/src/vite/shapeDocs.js +177 -0
  644. package/dist/src/vite/singleFileComponent.d.ts +17 -0
  645. package/dist/src/vite/singleFileComponent.js +83 -0
  646. package/dist/src/vite/sourceText.d.ts +34 -0
  647. package/dist/src/vite/sourceText.js +72 -0
  648. package/dist/src/vite/sourceTokens.d.ts +7 -0
  649. package/dist/src/vite/sourceTokens.js +7 -2
  650. package/dist/src/vite/stackLines.d.ts +49 -0
  651. package/dist/src/vite/stackLines.js +96 -0
  652. package/dist/src/vite/storyCode.d.ts +22 -7
  653. package/dist/src/vite/storyCode.js +263 -37
  654. package/dist/src/vite/storyCoverage.d.ts +48 -0
  655. package/dist/src/vite/storyCoverage.js +179 -0
  656. package/dist/src/vite/storyFilesModule.d.ts +48 -3
  657. package/dist/src/vite/storyFilesModule.js +105 -15
  658. package/dist/src/vite/storyPatterns.d.ts +31 -0
  659. package/dist/src/vite/storyPatterns.js +140 -5
  660. package/dist/src/vite/storyReach.d.ts +10 -2
  661. package/dist/src/vite/storyReach.js +15 -11
  662. package/dist/src/vite/storyTopLevel.d.ts +51 -0
  663. package/dist/src/vite/storyTopLevel.js +146 -0
  664. package/dist/src/vite/storylessRoutes.d.ts +4 -3
  665. package/dist/src/vite/storylessRoutes.js +210 -19
  666. package/dist/src/vite/switchValuesCheck.d.ts +19 -0
  667. package/dist/src/vite/switchValuesCheck.js +164 -0
  668. package/dist/src/vite/switchesDocument.d.ts +15 -0
  669. package/dist/src/vite/switchesDocument.js +47 -0
  670. package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
  671. package/dist/src/vite/tailwindConfigTokens.js +306 -0
  672. package/dist/src/vite/textImports.d.ts +15 -0
  673. package/dist/src/vite/textImports.js +58 -0
  674. package/dist/src/vite/textModules.d.ts +6 -5
  675. package/dist/src/vite/textModules.js +13 -8
  676. package/dist/src/vite/tokenAnswers.d.ts +6 -2
  677. package/dist/src/vite/tokenAnswers.js +11 -7
  678. package/dist/src/vite/typeParameters.d.ts +83 -0
  679. package/dist/src/vite/typeParameters.js +270 -0
  680. package/dist/src/vite/unionProps.d.ts +37 -0
  681. package/dist/src/vite/unionProps.js +121 -0
  682. package/dist/src/vite/unresolvedTokens.d.ts +20 -0
  683. package/dist/src/vite/unresolvedTokens.js +193 -0
  684. package/dist/src/vite/usageGraph.js +10 -52
  685. package/dist/src/vite/usageGuidance.d.ts +9 -2
  686. package/dist/src/vite/usageGuidance.js +36 -8
  687. package/dist/src/vite/usageImports.d.ts +35 -0
  688. package/dist/src/vite/usageImports.js +280 -0
  689. package/dist/src/vite/visibilityRoute.d.ts +16 -0
  690. package/dist/src/vite/visibilityRoute.js +320 -0
  691. package/dist/src/worstCase.d.ts +2 -0
  692. package/dist/src/worstCase.js +2 -0
  693. package/package.json +28 -8
@@ -1,6 +1,8 @@
1
1
  import { type VitePaths } from "./vitePaths.ts";
2
2
  /** A change. */
3
3
  export type GitChange = {
4
+ /** The commit it is measured from. */
5
+ readonly base: string;
4
6
  /** Its unified diff, with no context. */
5
7
  readonly diff: string;
6
8
  /** The files it deletes, relative to the repository. */
@@ -16,6 +18,15 @@ export type GitChange = {
16
18
  * @returns what it wrote.
17
19
  */
18
20
  export declare const gitOutput: (dir: string, ...args: readonly string[]) => Promise<string>;
21
+ /**
22
+ * Runs git in a folder, in the environment given rather than this process's.
23
+ *
24
+ * @param dir - a folder of the repository.
25
+ * @param env - the environment git gets.
26
+ * @param args - its arguments.
27
+ * @returns what it wrote.
28
+ */
29
+ export declare const gitOutputIn: (dir: string, env: NodeJS.ProcessEnv, ...args: readonly string[]) => Promise<string>;
19
30
  /**
20
31
  * The commit a change starts from.
21
32
  *
@@ -25,16 +36,38 @@ export declare const gitOutput: (dir: string, ...args: readonly string[]) => Pro
25
36
  */
26
37
  export declare const changeBase: (dir: string, since: string) => Promise<string | undefined>;
27
38
  /**
28
- * The files a change touches, tracked or new.
39
+ * Why a change has no start, in words that say what to do: a shallow clone, which is CI's default, knows the commit and
40
+ * not what it shares with this one.
29
41
  *
30
42
  * @param dir - a folder of the repository.
31
- * @param base - the commit it starts from.
32
- * @returns the repository's folder, and the files relative to it.
43
+ * @param since - a commit, as asked.
33
44
  */
34
- export declare const changedFiles: (dir: string, base: string) => Promise<{
45
+ export declare const noBaseReason: (dir: string, since: string) => Promise<string>;
46
+ /**
47
+ * Where a branch's work starts when nobody says: the default branch, or `HEAD` when there is none to start from. On the
48
+ * default branch itself that is what is not pushed.
49
+ *
50
+ * @param dir - a folder of the repository.
51
+ * @returns the name to compare with.
52
+ */
53
+ export declare const branchStart: (dir: string) => Promise<string>;
54
+ /** The files a change touches. */
55
+ export type ChangedFiles = {
56
+ /** The repository's folder. */
35
57
  readonly root: string;
58
+ /** The files, tracked or new, relative to it. */
36
59
  readonly files: readonly string[];
37
- }>;
60
+ /** Those it deletes. */
61
+ readonly deleted: readonly string[];
62
+ };
63
+ /**
64
+ * The files a change touches, tracked or new.
65
+ *
66
+ * @param dir - a folder of the repository.
67
+ * @param base - the commit it starts from.
68
+ * @returns the repository's folder, the files relative to it, and which of them it deletes.
69
+ */
70
+ export declare const changedFiles: (dir: string, base: string) => Promise<ChangedFiles>;
38
71
  /**
39
72
  * The changed files as the catalogue's graph names them: absolute, under the catalogue's folder as configured, in Vite's
40
73
  * form. Git names real paths (with forward slashes on Windows too), and a folder reached through a link has another.
@@ -6,7 +6,9 @@
6
6
  * `--output=…` for an option and overwrites a file. The diff asks for one fixed form whatever the user's git settings,
7
7
  * since colours, external diff tools and other prefixes all read as an empty change, which is a check passing with
8
8
  * nothing checked. A change starts where the branch left `since`, or what `since` gained afterwards is read as this
9
- * change's.
9
+ * change's. A branch's committed work counts as its change, so a check run after a commit does not find nothing and
10
+ * pass: `branchStart` names the default branch to start from, and a clone with no history to find the start in is told
11
+ * apart from a name that means nothing.
10
12
  *
11
13
  * @module
12
14
  */
@@ -24,8 +26,23 @@ const run = promisify(execFile);
24
26
  * @returns what it wrote.
25
27
  */
26
28
  export const gitOutput = async (dir, ...args) => (await run("git", ["-c", "core.quotePath=false", ...args], { cwd: dir, maxBuffer: MAX_OUTPUT })).stdout;
27
- /** The lines of a list git wrote. */
28
- const listed = (text) => text.split("\n").filter((line) => line !== "");
29
+ /**
30
+ * Runs git in a folder, in the environment given rather than this process's.
31
+ *
32
+ * @param dir - a folder of the repository.
33
+ * @param env - the environment git gets.
34
+ * @param args - its arguments.
35
+ * @returns what it wrote.
36
+ */
37
+ export const gitOutputIn = async (dir, env, ...args) => (await run("git", ["-c", "core.quotePath=false", ...args], { cwd: dir, env, maxBuffer: MAX_OUTPUT }))
38
+ .stdout;
39
+ /**
40
+ * The names of a list git wrote with `-z`: otherwise it quotes a name that holds a quotation mark or a tab, which then
41
+ * matches no file and no rule.
42
+ */
43
+ const listed = (text) => text.split("\0").filter((name) => name !== "");
44
+ /** The new files git does not track, in the whole repository: from a subfolder it would list that folder's only. */
45
+ const untrackedFiles = async (root) => listed(await gitOutput(root, "ls-files", "-z", "--others", "--exclude-standard", "--full-name"));
29
46
  /**
30
47
  * The commit a change starts from.
31
48
  *
@@ -42,18 +59,52 @@ export const changeBase = async (dir, since) => {
42
59
  return undefined;
43
60
  }
44
61
  };
62
+ /**
63
+ * Why a change has no start, in words that say what to do: a shallow clone, which is CI's default, knows the commit and
64
+ * not what it shares with this one.
65
+ *
66
+ * @param dir - a folder of the repository.
67
+ * @param since - a commit, as asked.
68
+ */
69
+ export const noBaseReason = async (dir, since) => {
70
+ try {
71
+ await gitOutput(dir, "rev-parse", "--verify", "--quiet", "--end-of-options", `${since}^{commit}`);
72
+ return `"${since}" shares no history with this commit here: in a shallow clone, fetch the whole history (fetch-depth: 0)`;
73
+ }
74
+ catch {
75
+ return `"${since}" names no commit here`;
76
+ }
77
+ };
78
+ /** The branches a repository's work usually starts from, when its remote names none. */
79
+ const USUAL_DEFAULT_BRANCHES = ["origin/main", "origin/master", "main", "master"];
80
+ /**
81
+ * Where a branch's work starts when nobody says: the default branch, or `HEAD` when there is none to start from. On the
82
+ * default branch itself that is what is not pushed.
83
+ *
84
+ * @param dir - a folder of the repository.
85
+ * @returns the name to compare with.
86
+ */
87
+ export const branchStart = async (dir) => {
88
+ const named = await gitOutput(dir, "symbolic-ref", "--quiet", "--short", "refs/remotes/origin/HEAD").catch(() => "");
89
+ for (const branch of [named.trim(), ...USUAL_DEFAULT_BRANCHES]) {
90
+ if (branch !== "" && (await changeBase(dir, branch)) !== undefined)
91
+ return branch;
92
+ }
93
+ return "HEAD";
94
+ };
45
95
  /**
46
96
  * The files a change touches, tracked or new.
47
97
  *
48
98
  * @param dir - a folder of the repository.
49
99
  * @param base - the commit it starts from.
50
- * @returns the repository's folder, and the files relative to it.
100
+ * @returns the repository's folder, the files relative to it, and which of them it deletes.
51
101
  */
52
102
  export const changedFiles = async (dir, base) => {
53
103
  const root = (await gitOutput(dir, "rev-parse", "--show-toplevel")).trim();
54
- const tracked = listed(await gitOutput(dir, "diff", "--no-ext-diff", "--name-only", base, "--"));
55
- const untracked = listed(await gitOutput(dir, "ls-files", "--others", "--exclude-standard", "--full-name"));
56
- return { root, files: [...new Set([...tracked, ...untracked])] };
104
+ const names = ["--no-ext-diff", "--no-relative", "--name-only", "-z"];
105
+ const tracked = listed(await gitOutput(dir, "diff", ...names, base, "--"));
106
+ const deleted = listed(await gitOutput(dir, "diff", ...names, "--diff-filter=D", base, "--"));
107
+ return { root, files: [...new Set([...tracked, ...(await untrackedFiles(root))])], deleted };
57
108
  };
58
109
  /**
59
110
  * The changed files as the catalogue's graph names them: absolute, under the catalogue's folder as configured, in Vite's
@@ -76,11 +127,20 @@ export const catalogueChangedFiles = (dir, realDir, root, files, paths = VITE_PA
76
127
  export const gitChange = async (dir, since) => {
77
128
  const base = await changeBase(dir, since);
78
129
  if (base === undefined)
79
- return `"${since}" names no commit here`;
80
- const form = ["--no-ext-diff", "--no-textconv", "--no-color", "--src-prefix=a/", "--dst-prefix=b/"];
130
+ return noBaseReason(dir, since);
131
+ const form = [
132
+ "--no-ext-diff",
133
+ "--no-textconv",
134
+ "--no-color",
135
+ "--no-relative",
136
+ "--src-prefix=a/",
137
+ "--dst-prefix=b/"
138
+ ];
139
+ const root = (await gitOutput(dir, "rev-parse", "--show-toplevel")).trim();
81
140
  return {
141
+ base,
82
142
  diff: await gitOutput(dir, "diff", ...form, "--unified=0", base, "--"),
83
- deleted: listed(await gitOutput(dir, "diff", ...form, "--name-only", "--diff-filter=D", base, "--")),
84
- untracked: listed(await gitOutput(dir, "ls-files", "--others", "--exclude-standard", "--full-name"))
143
+ deleted: listed(await gitOutput(dir, "diff", ...form, "--name-only", "-z", "--diff-filter=D", base, "--")),
144
+ untracked: await untrackedFiles(root)
85
145
  };
86
146
  };
@@ -0,0 +1,23 @@
1
+ /** A hidden folder a file sits in, and the pattern that lists that folder's story files. */
2
+ type HiddenFolder = {
3
+ readonly folder: string;
4
+ readonly pattern: string;
5
+ readonly files: readonly string[];
6
+ };
7
+ /**
8
+ * The story files the patterns pass over in hidden folders, grouped by the first hidden folder each sits in, with the
9
+ * pattern that lists them.
10
+ *
11
+ * @param config - the catalogue's folder and its stories' patterns.
12
+ */
13
+ export declare const hiddenStoryFolders: (config: {
14
+ readonly dir: string;
15
+ readonly stories: readonly string[];
16
+ }) => HiddenFolder[];
17
+ /**
18
+ * What to say of the folders of `hiddenStoryFolders`: how many files, where, and the patterns that list them.
19
+ *
20
+ * @param folders - the folders, at least one.
21
+ */
22
+ export declare const hiddenStoryFoldersMessage: (folders: readonly HiddenFolder[]) => string;
23
+ export {};
@@ -0,0 +1,107 @@
1
+ /**
2
+ * The story files a catalogue's patterns pass over because they sit in a hidden folder (`docs/.vitepress/…`): a glob's
3
+ * `**` does not enter a folder whose name starts with a dot, so such files are never listed, and nothing said why. The
4
+ * stories answer, the dev server and the commands that stop on an empty pattern name them, with a pattern that lists
5
+ * them.
6
+ *
7
+ * @remarks
8
+ * For each pattern with a `**`, the hidden folders under its static start are found (folders only, at most
9
+ * `MAX_FOLDERS`, leaving out `.git` and `node_modules`), and the pattern's file name is globbed in each by its name
10
+ * (`docs/.vitepress/**\/*.stories.ts`), as the catalogue's own listing globs (Node's `globSync`, which reads a hidden
11
+ * folder named in a pattern on every version). A file another pattern lists,
12
+ * or a `!` pattern leaves out (its hidden folders read as plain ones), is not named: writing `!docs/.vitepress/**` says
13
+ * the folder is left out on purpose and ends the notice.
14
+ *
15
+ * @module
16
+ */
17
+ import { globSync, readdirSync } from "node:fs";
18
+ import { matchesGlob } from "node:path";
19
+ import { patternBase } from "./autoTitle.js";
20
+ import { isNegated } from "./storyPatterns.js";
21
+ import { VITE_PATHS } from "./vitePaths.js";
22
+ /** Folders never entered: they hold no story, and can hold very many files. */
23
+ const NOT_ENTERED = /(^|[\\/])(\.git|node_modules)$/;
24
+ /** How many folders are read at most to find the hidden ones: a pattern starting at the project's root reads many. */
25
+ const MAX_FOLDERS = 20_000;
26
+ /** A folder's sub-folders; none when it cannot be read. */
27
+ const foldersIn = (dir) => {
28
+ try {
29
+ return readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isDirectory());
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ };
35
+ /**
36
+ * The topmost hidden folders under a folder, relative to the root.
37
+ *
38
+ * @param root - the catalogue's folder.
39
+ * @param base - the folder to look under, relative to the root.
40
+ */
41
+ const hiddenFoldersUnder = (root, base) => {
42
+ const found = [];
43
+ const queue = [base];
44
+ let read = 0;
45
+ while (queue.length > 0 && read < MAX_FOLDERS) {
46
+ const folder = queue.pop() ?? "";
47
+ for (const entry of foldersIn(VITE_PATHS.resolve(root, folder))) {
48
+ read += 1;
49
+ if (NOT_ENTERED.test(entry.name))
50
+ continue;
51
+ const path = folder === "" ? entry.name : `${folder}/${entry.name}`;
52
+ if (entry.name.startsWith("."))
53
+ found.push(path);
54
+ else
55
+ queue.push(path);
56
+ }
57
+ }
58
+ return found;
59
+ };
60
+ /** A path or a pattern with each segment's leading dot taken off, so a glob reads it as an ordinary folder. */
61
+ const undotted = (path) => path.replace(/(^|\/)\.(?=[^./])/g, "$1");
62
+ /**
63
+ * The story files the patterns pass over in hidden folders, grouped by the first hidden folder each sits in, with the
64
+ * pattern that lists them.
65
+ *
66
+ * @param config - the catalogue's folder and its stories' patterns.
67
+ */
68
+ export const hiddenStoryFolders = (config) => {
69
+ const plain = (pattern) => pattern.replace(/^\.\//, "");
70
+ const listed = config.stories.filter((each) => !isNegated(each)).map(plain);
71
+ const leftOut = config.stories.filter(isNegated).map((each) => undotted(plain(each.slice(1))));
72
+ // a file in one, as the pattern would match it with the folder's dot taken off, that nothing lists or leaves out
73
+ const isPassedOver = (file, pattern) => matchesGlob(undotted(file), undotted(pattern)) &&
74
+ !listed.some((each) => matchesGlob(file, each)) &&
75
+ !leftOut.some((each) => matchesGlob(undotted(file), each));
76
+ const folders = new Map();
77
+ for (const pattern of listed.filter((each) => each.includes("**"))) {
78
+ const last = pattern.split("/").pop() ?? "*";
79
+ for (const folder of hiddenFoldersUnder(config.dir, patternBase(pattern).replace(/^\.\/?/, ""))) {
80
+ const named = `${folder}/**/${last}`;
81
+ const files = globSync(named, { cwd: config.dir })
82
+ .map((found) => VITE_PATHS.normalize(found))
83
+ .filter((file) => isPassedOver(file, pattern));
84
+ if (files.length === 0)
85
+ continue;
86
+ const entry = folders.get(folder) ?? { pattern: named, files: [] };
87
+ entry.files.push(...files);
88
+ folders.set(folder, entry);
89
+ }
90
+ }
91
+ return [...folders]
92
+ .map(([folder, entry]) => ({ folder, pattern: entry.pattern, files: [...new Set(entry.files)].sort() }))
93
+ .sort((a, b) => a.folder.localeCompare(b.folder));
94
+ };
95
+ /** How many hidden folders a message names before it says how many more there are. */
96
+ const NAMED_FOLDERS = 3;
97
+ /**
98
+ * What to say of the folders of `hiddenStoryFolders`: how many files, where, and the patterns that list them.
99
+ *
100
+ * @param folders - the folders, at least one.
101
+ */
102
+ export const hiddenStoryFoldersMessage = (folders) => {
103
+ const files = folders.reduce((sum, each) => sum + each.files.length, 0);
104
+ const named = folders.slice(0, NAMED_FOLDERS).map((each) => `\`${each.pattern}\``);
105
+ const more = folders.length > NAMED_FOLDERS ? `, and ${folders.length - NAMED_FOLDERS} more folders` : "";
106
+ return `${files === 1 ? "1 story file sits" : `${files} story files sit`} in a hidden folder the stories' patterns do not enter: list ${files === 1 ? "it" : "them"} with ${named.join(", ")}${more}, or write a \`!\` pattern for the folder to leave it out`;
107
+ };
@@ -11,8 +11,10 @@
11
11
  * @module
12
12
  */
13
13
  import type { Plugin } from "vite";
14
+ import { type StoryFileRead } from "../hotModules.ts";
14
15
  import type { CloseWatch } from "./closeWatch.ts";
15
- import { type IndexedStoryFile } from "./storyFilesModule.ts";
16
+ import type { ScriptProblems } from "./scriptProblems.ts";
17
+ import { type RefusedStoryFile, type StoryFilesRead } from "./storyFilesModule.ts";
16
18
  /**
17
19
  * What a story file runs to accept its edit: the frame that draws its stories cancels the event and draws them anew;
18
20
  * when none does, the files that import it take the edit (one that re-exports its stories draws them). The exports the
@@ -49,38 +51,60 @@ export declare const renewedModule: <TModule extends {
49
51
  readonly code: string;
50
52
  }>(id: string, module: TModule, queries: readonly string[], isServing: boolean) => TModule;
51
53
  /**
52
- * What a pattern's files module runs: it takes the edits its story files hand on, which change nothing it holds. An
53
- * edit that changes its list reloads the pages from the server, and its pages keep the module they read.
54
+ * What a pattern's files module runs: it takes the edits its story files hand on, which change nothing it holds, as
55
+ * an edit that changes its list reloads the pages from the server. What an edit says of a file that cannot be read
56
+ * goes on to the page, unless it is the fix of a file the page was served without: it has no story to redraw, so it
57
+ * reloads to list them. Those files are kept in the module's hot data, so a version served after the page's first does not count.
58
+ *
59
+ * @param refused - the story files the module was served without.
54
60
  */
55
- export declare const FILES_MODULE_HOT = "if (import.meta.hot) import.meta.hot.accept();";
61
+ export declare const filesModuleHot: (refused: readonly RefusedStoryFile[]) => string;
62
+ /** What an edit of a story file changed. */
63
+ export type StoryFileEdit = {
64
+ /** The patterns' modules it changed (a story added or renamed, a title), which the open pages read once. */
65
+ readonly changed: readonly string[];
66
+ /** The patterns' modules that say the file can or cannot be read, which a page opened from now on must read anew. */
67
+ readonly renewed: readonly string[];
68
+ /** Whether the file can be read, when that changed. */
69
+ readonly read?: StoryFileRead;
70
+ };
56
71
  /** The patterns' modules a dev server served, with their story files indexed as it served them. */
57
72
  export type ServedPatterns = {
58
73
  /**
59
74
  * Keeps a pattern's module as it was served.
60
75
  *
61
76
  * @param id - the module's id.
62
- * @param files - its story files, indexed.
77
+ * @param read - its story files.
63
78
  */
64
- readonly keep: (id: string, files: readonly IndexedStoryFile[]) => void;
79
+ readonly keep: (id: string, read: StoryFilesRead) => void;
65
80
  /**
66
- * The patterns' modules an edit of a story file changed (a story added or renamed, a title), which the open pages
67
- * read once: the file alone is indexed again, not the pattern's every file. One that cannot be read yet (an edit
68
- * half typed) changes nothing: its module shows the error, and the next edit is read again.
81
+ * What an edit of a story file changed; the file alone is indexed again, not the pattern's every file. An edit that
82
+ * leaves it unreadable (half typed) changes no list, so the frame that draws it keeps its story and draws the fix in
83
+ * place, whose index is then compared with the last one that could be read.
69
84
  *
70
85
  * @param file - the edited story file.
71
86
  */
72
- readonly changedBy: (file: string) => readonly string[];
87
+ readonly edited: (file: string) => StoryFileEdit;
88
+ /**
89
+ * The patterns' modules that list a story file.
90
+ *
91
+ * @param file - the story file.
92
+ */
93
+ readonly listing: (file: string) => readonly string[];
73
94
  };
74
95
  /** The patterns' modules a dev server serves, kept to tell an edit that changes a list. */
75
96
  export declare const servedPatterns: () => ServedPatterns;
76
97
  /**
77
- * The plugin's hooks for a story file's edit: the file accepts it on a dev server, and an edit that changes a pattern's
78
- * list (a story added, renamed, a title) reloads the pages, which read the list once. A story file a frame loads is
98
+ * The plugin's hooks for a story file's edit: the file accepts it on a dev server, an edit that changes a pattern's
99
+ * list (a story added, renamed, a title) reloads the pages, which read the list once, and one that changes whether the
100
+ * file can be read tells them. A story file a frame loads is
79
101
  * followed closely (`closeWatch.ts`), and the late report of an edit of any file the close watch handed on already is
80
102
  * dropped, so an edit is drawn once.
81
103
  *
82
104
  * @param isServing - whether a dev server runs whose framework draws an edited story file in place.
83
- * @param changedFilesModules - the patterns' modules the edit changed.
105
+ * @param served - what the edit changed, and the modules that list the file.
84
106
  * @param watching - the dev server's close watch.
107
+ * @param scripts - the project's other scripts that do not parse: an edit that breaks or fixes one renews every
108
+ * pattern's module, which names them, and tells the pages as a story file's does.
85
109
  */
86
- export declare const storyFileHotHooks: (isServing: () => boolean, changedFilesModules: (file: string) => readonly string[], watching: Pick<CloseWatch, "follow" | "isLateReport">) => Pick<Plugin, "transform" | "hotUpdate">;
110
+ export declare const storyFileHotHooks: (isServing: () => boolean, served: Pick<ServedPatterns, "edited" | "listing">, watching: Pick<CloseWatch, "follow" | "isLateReport">, scripts?: Pick<ScriptProblems, "edited">) => Pick<Plugin, "transform" | "hotUpdate">;
@@ -1,5 +1,5 @@
1
1
  import { codeLiteral } from "../codeLiteral.js";
2
- import { RENEWED_MODULE_EVENT, STORY_FILE_EVENT } from "../hotModules.js";
2
+ import { RENEWED_MODULE_EVENT, STORY_FILE_EVENT, STORY_FILE_READ_EVENT } from "../hotModules.js";
3
3
  import { STORY_FILE } from "./autoTitle.js";
4
4
  import { FILES_PREFIX } from "./pluginModules.js";
5
5
  import { storyFileIndex, storyFilesGroupOf } from "./storyFilesModule.js";
@@ -84,60 +84,151 @@ export const renewedModule = (id, module, queries, isServing) => isServing && qu
84
84
  ? { ...module, code: `${module.code}\n${renewedModuleHot(id)}` }
85
85
  : module;
86
86
  /**
87
- * What a pattern's files module runs: it takes the edits its story files hand on, which change nothing it holds. An
88
- * edit that changes its list reloads the pages from the server, and its pages keep the module they read.
87
+ * What a pattern's files module runs: it takes the edits its story files hand on, which change nothing it holds, as
88
+ * an edit that changes its list reloads the pages from the server. What an edit says of a file that cannot be read
89
+ * goes on to the page, unless it is the fix of a file the page was served without: it has no story to redraw, so it
90
+ * reloads to list them. Those files are kept in the module's hot data, so a version served after the page's first does not count.
91
+ *
92
+ * @param refused - the story files the module was served without.
89
93
  */
90
- export const FILES_MODULE_HOT = "if (import.meta.hot) import.meta.hot.accept();";
94
+ export const filesModuleHot = (refused) => [
95
+ "if (import.meta.hot) {",
96
+ " import.meta.hot.accept();",
97
+ ` import.meta.hot.data.forgebookRefused ??= ${codeLiteral(refused.map(({ file }) => file))};`,
98
+ ` import.meta.hot.on(${codeLiteral(STORY_FILE_READ_EVENT)}, (read) => {`,
99
+ " if (read.problem === undefined && import.meta.hot.data.forgebookRefused.includes(read.file)) window.location.reload();",
100
+ ` else window.dispatchEvent(new CustomEvent(${codeLiteral(STORY_FILE_READ_EVENT)}, { detail: read }));`,
101
+ " });",
102
+ "}"
103
+ ].join("\n");
91
104
  /**
92
- * A story file's index as an edit left it; a message when it cannot be read (an editor writes it anew in place).
105
+ * A story file's index as an edit left it, or why it cannot be read; none when its text cannot be had (an editor writes
106
+ * it anew in place), which says nothing yet.
93
107
  *
94
108
  * @param root - the declaring module's folder.
95
- * @param pattern - the pattern.
96
- * @param key - the file's path relative to the declaring module.
109
+ * @param served - the file.
97
110
  */
98
- const readIndex = (root, pattern, key) => {
111
+ const readIndex = (root, served) => {
99
112
  try {
100
- return storyFileIndex(root, pattern, key);
113
+ return storyFileIndex(root, served.pattern, served.key);
101
114
  }
102
- catch (error) {
103
- return error instanceof Error ? error.message : String(error);
115
+ catch {
116
+ return undefined;
104
117
  }
105
118
  };
119
+ /**
120
+ * What a pattern's module keeps of its story files: as read now, a problem known before staying until an edit changes it
121
+ * (`edited` tells the pages), and a file that cannot be read keeping the index of its last good read.
122
+ *
123
+ * @param read - the story files.
124
+ * @param before - the files as last known.
125
+ */
126
+ const servedFiles = ({ files, refused }, before) => {
127
+ const served = new Map();
128
+ for (const { key, pattern, file, index } of files) {
129
+ const problem = before?.get(file)?.problem;
130
+ served.set(file, { key, pattern, index: JSON.stringify(index), problem });
131
+ }
132
+ for (const { key, pattern, file, problem } of refused) {
133
+ const known = before?.get(file);
134
+ served.set(file, {
135
+ key,
136
+ pattern,
137
+ index: known?.index,
138
+ problem: known === undefined ? problem : known.problem
139
+ });
140
+ }
141
+ return served;
142
+ };
143
+ /**
144
+ * What an edit of a story file changed in one pattern's module, noted in what the module keeps.
145
+ *
146
+ * @param id - the module's id.
147
+ * @param files - what it keeps.
148
+ * @param file - the edited file, in Vite's form.
149
+ */
150
+ const editedIn = (id, files, file) => {
151
+ const kept = files.get(file);
152
+ if (kept === undefined)
153
+ return { isChanged: false };
154
+ const index = readIndex(storyFilesGroupOf(id.slice(FILES_PREFIX.length)).root, kept);
155
+ if (index === undefined)
156
+ return { isChanged: false };
157
+ const problem = typeof index === "string" ? index : undefined;
158
+ const isChanged = typeof index !== "string" && JSON.stringify(index) !== kept.index;
159
+ if (problem === kept.problem)
160
+ return { isChanged };
161
+ files.set(file, { ...kept, problem });
162
+ return { isChanged, read: { file, ...(problem === undefined ? {} : { problem }) } };
163
+ };
106
164
  /** The patterns' modules a dev server serves, kept to tell an edit that changes a list. */
107
165
  export const servedPatterns = () => {
108
- // by group, each story file as served: its key, the pattern that lists it, its index
166
+ // by group, each story file as last known
109
167
  const served = new Map();
110
168
  return {
111
- keep: (id, files) => {
112
- served.set(id, new Map(files.map((file) => [
113
- file.file,
114
- { key: file.key, pattern: file.pattern, index: JSON.stringify(file.index) }
115
- ])));
169
+ keep: (id, read) => {
170
+ served.set(id, servedFiles(read, served.get(id)));
116
171
  },
117
- changedBy: (file) => [...served]
118
- .filter(([id, files]) => {
172
+ edited: (file) => {
119
173
  // in Vite's form, as the served files are kept: a Windows path reaches here either way
120
- const kept = files.get(VITE_PATHS.normalize(file));
121
- if (kept === undefined)
122
- return false;
123
- const { root } = storyFilesGroupOf(id.slice(FILES_PREFIX.length));
124
- const index = readIndex(root, kept.pattern, kept.key);
125
- return typeof index !== "string" && JSON.stringify(index) !== kept.index;
126
- })
127
- .map(([id]) => id)
174
+ const edited = VITE_PATHS.normalize(file);
175
+ const reads = [...served].map(([id, files]) => ({ id, ...editedIn(id, files, edited) }));
176
+ const read = reads.find((each) => each.read !== undefined)?.read;
177
+ return {
178
+ changed: reads.filter((each) => each.isChanged).map(({ id }) => id),
179
+ renewed: reads.filter((each) => each.read !== undefined).map(({ id }) => id),
180
+ ...(read === undefined ? {} : { read })
181
+ };
182
+ },
183
+ listing: (file) => {
184
+ const listed = VITE_PATHS.normalize(file);
185
+ return [...served].filter(([, files]) => files.has(listed)).map(([id]) => id);
186
+ }
128
187
  };
129
188
  };
130
189
  /**
131
- * The plugin's hooks for a story file's edit: the file accepts it on a dev server, and an edit that changes a pattern's
132
- * list (a story added, renamed, a title) reloads the pages, which read the list once. A story file a frame loads is
190
+ * Renews modules, so the next page that imports them reads them anew: Vite stops at a story file that takes its own
191
+ * edit, and the modules that import it stay as they were served.
192
+ *
193
+ * @param environment - the client's environment.
194
+ * @param ids - the modules.
195
+ */
196
+ const invalidated = (environment, ids) => {
197
+ for (const id of ids) {
198
+ const module = environment.moduleGraph.getModuleById(id);
199
+ if (module !== undefined)
200
+ environment.moduleGraph.invalidateModule(module);
201
+ }
202
+ };
203
+ /**
204
+ * Tells the environments a script now parses or no longer does: every pattern's module, which names it among the
205
+ * catalogue's problems, is renewed for the next page and the next answer to a tool, and the open pages name it or stop.
206
+ *
207
+ * @param environments - the dev server's environments.
208
+ * @param read - whether the script parses now.
209
+ */
210
+ const scriptRead = (environments, read) => {
211
+ for (const environment of environments) {
212
+ const patterns = [...environment.moduleGraph.idToModuleMap.keys()].filter((id) => id.startsWith(FILES_PREFIX));
213
+ invalidated(environment, patterns);
214
+ if (environment.name === "client")
215
+ environment.hot.send({ type: "custom", event: STORY_FILE_READ_EVENT, data: read });
216
+ }
217
+ };
218
+ /**
219
+ * The plugin's hooks for a story file's edit: the file accepts it on a dev server, an edit that changes a pattern's
220
+ * list (a story added, renamed, a title) reloads the pages, which read the list once, and one that changes whether the
221
+ * file can be read tells them. A story file a frame loads is
133
222
  * followed closely (`closeWatch.ts`), and the late report of an edit of any file the close watch handed on already is
134
223
  * dropped, so an edit is drawn once.
135
224
  *
136
225
  * @param isServing - whether a dev server runs whose framework draws an edited story file in place.
137
- * @param changedFilesModules - the patterns' modules the edit changed.
226
+ * @param served - what the edit changed, and the modules that list the file.
138
227
  * @param watching - the dev server's close watch.
228
+ * @param scripts - the project's other scripts that do not parse: an edit that breaks or fixes one renews every
229
+ * pattern's module, which names them, and tells the pages as a story file's does.
139
230
  */
140
- export const storyFileHotHooks = (isServing, changedFilesModules, watching) => ({
231
+ export const storyFileHotHooks = (isServing, served, watching, scripts) => ({
141
232
  transform: {
142
233
  // a pattern's module is named after its pattern, which may end like a story file
143
234
  filter: { id: { include: STORY_FILE, exclude: VIRTUAL_ID } },
@@ -155,17 +246,24 @@ export const storyFileHotHooks = (isServing, changedFilesModules, watching) => (
155
246
  // the system's late report of an edit the close watch handed on already
156
247
  if (watching.isLateReport(this.environment.name, options.file))
157
248
  return [];
158
- if (this.environment.name !== "client" || !STORY_FILE.test(options.file))
249
+ if (!STORY_FILE.test(options.file)) {
250
+ // read once for every environment: the first to hear of the edit renews them all
251
+ const read = scripts?.edited(options.file);
252
+ if (read !== undefined)
253
+ scriptRead(Object.values(options.server.environments), read);
159
254
  return undefined;
160
- const changed = changedFilesModules(options.file);
161
- if (changed.length === 0)
255
+ }
256
+ if (this.environment.name !== "client") {
257
+ // the server's modules answer tools and agents, each answer anew: they have no page to keep
258
+ invalidated(this.environment, served.listing(options.file));
162
259
  return undefined;
163
- const graph = this.environment.moduleGraph;
164
- for (const id of changed) {
165
- const module = graph.getModuleById(id);
166
- if (module !== undefined)
167
- graph.invalidateModule(module);
168
260
  }
261
+ const { changed, renewed, read } = served.edited(options.file);
262
+ invalidated(this.environment, [...changed, ...renewed]);
263
+ if (read !== undefined)
264
+ this.environment.hot.send({ type: "custom", event: STORY_FILE_READ_EVENT, data: read });
265
+ if (changed.length === 0)
266
+ return undefined;
169
267
  this.environment.hot.send({ type: "full-reload" });
170
268
  return [];
171
269
  }