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,260 @@
1
+ import { scannedComponents } from "./componentScan.js";
2
+ import { importsOfFile } from "./fileImports.js";
3
+ import { isBuiltOn, isRebuilt, isShareable, SAME_CODE, signsBetween, stemOf } from "./lookAlikes.js";
4
+ import { plainWords } from "./sourceText.js";
5
+ /** What says a new component is meant: its rule and why, in a comment. */
6
+ const IGNORE_DUPLICATE = /(?:\/\/|\/\*|<!--)\s*forgebook-ignore\s+duplicate-component\s*:\s*([^*\n]{3,120})/;
7
+ /** How far above a component its comment may stand, past its own documentation. */
8
+ const IGNORE_REACH = 20;
9
+ /** A name a fix may give: an agent may act on it, and a tag holds any text. */
10
+ const COMPONENT_NAME = /^[A-Za-z_$][\w$.]{0,80}$/;
11
+ /** How many things to weigh an answer gives. */
12
+ const MOST_ADVICE = 20;
13
+ /** How much of a tag's text an answer repeats. */
14
+ const LONGEST_WORDS = 200;
15
+ /** What a package name's module part is. */
16
+ const PACKAGE_NAME = /^(@[^/]+\/[^/]+|[^@./][^/]*)(?:\/(.*))?$/;
17
+ /** A file's extension and a folder's index, which an import may leave out or write. */
18
+ const modulePath = (file) => file.replace(/\.(?:[cm]?[jt]sx?|vue|svelte|astro)$/, "").replace(/\/index$/, "");
19
+ /** A relative module's path from the repository. */
20
+ const relativeTarget = (from, module) => {
21
+ const parts = from.split("/").slice(0, -1);
22
+ for (const part of module.split("/")) {
23
+ if (part === "..")
24
+ parts.pop();
25
+ else if (part !== ".")
26
+ parts.push(part);
27
+ }
28
+ return parts.join("/");
29
+ };
30
+ /** The folders of a file, nearest first, the repository last. */
31
+ const foldersOf = (file) => {
32
+ const parts = file.split("/").slice(0, -1);
33
+ return [...parts.keys(), parts.length].map((count) => parts.slice(0, count).join("/")).toReversed();
34
+ };
35
+ /**
36
+ * What an import may mean in the project's paths. An alias's folder is not known, but it is one this file sits under, so
37
+ * another application's file of that path is not it; a package's name is the one its manifest says, so a third party's of
38
+ * a similar path is not it either.
39
+ */
40
+ const targetsOf = (from, module, packages) => {
41
+ const written = modulePath(module);
42
+ if (written.startsWith("."))
43
+ return [relativeTarget(from, written)];
44
+ if (/^[@~#]\//.test(written)) {
45
+ const rest = written.slice(2);
46
+ return foldersOf(from).map((folder) => (folder === "" ? rest : `${folder}/${rest}`));
47
+ }
48
+ const [, name = "", rest = ""] = PACKAGE_NAME.exec(written) ?? [];
49
+ const found = packages.find((each) => each.name === name && each.name !== "");
50
+ if (found === undefined)
51
+ return [];
52
+ const inside = (folder) => [found.dir, folder, rest].filter((part) => part !== "").join("/");
53
+ return [inside(""), inside("src")];
54
+ };
55
+ /** Whether a component is what an import of a name means. */
56
+ const isImported = (component, name, targets) => {
57
+ const path = modulePath(component.file);
58
+ if (targets.includes(path))
59
+ return name === "default" ? component.isDefault === true : component.name === name;
60
+ // through a folder's index the file is another; the name has to be that folder's own
61
+ return name === component.name && targets.some((target) => target !== "" && path.startsWith(`${target}/`));
62
+ };
63
+ /** A tag's text as an answer repeats it. */
64
+ const capped = (text) => plainWords(text, LONGEST_WORDS);
65
+ /** What an imported component's own words make of importing it. */
66
+ const wordsOnImport = (file, line, { name, guidance, rules }) => {
67
+ const { deprecated, replacedBy, useWhen, avoidWhen } = guidance ?? {};
68
+ if (deprecated !== undefined || replacedBy !== undefined) {
69
+ const why = deprecated === undefined ? "" : `: ${deprecated}`;
70
+ const use = replacedBy === undefined ? "" : ` Use ${replacedBy}.`;
71
+ return {
72
+ problems: [
73
+ {
74
+ rule: "deprecated-component",
75
+ file,
76
+ line,
77
+ value: name,
78
+ ...(replacedBy !== undefined && COMPONENT_NAME.test(replacedBy) ? { fix: replacedBy } : {}),
79
+ message: `${name} is deprecated${capped(why)}${capped(use)}`
80
+ }
81
+ ],
82
+ advice: [],
83
+ excused: []
84
+ };
85
+ }
86
+ const intents = (rules?.intents ?? []).map(({ id, when }) => `for ${id}${when === undefined ? "" : ` (${when})`}`);
87
+ const parts = [
88
+ ...intents,
89
+ ...(useWhen === undefined ? [] : [`use when ${useWhen.join("; ")}`]),
90
+ ...(avoidWhen === undefined ? [] : [`avoid when ${avoidWhen.join("; ")}`])
91
+ ];
92
+ return {
93
+ problems: [],
94
+ advice: parts.length === 0 ? [] : [{ file, line, message: `${name}: ${capped(parts.join("; "))}.` }],
95
+ excused: []
96
+ };
97
+ };
98
+ /** What fails and what to weigh in one import the change adds, of the names it did not import before. */
99
+ const importFindings = (file, { names, module, lines }, isOld, { components, packages }) => {
100
+ const targets = targetsOf(file, module, packages);
101
+ const found = names
102
+ .filter((name) => !isOld(name))
103
+ .flatMap((name) => {
104
+ const matches = components.filter((each) => each.file !== file &&
105
+ (each.guidance !== undefined || each.rules?.intents !== undefined) &&
106
+ isImported(each, name, targets));
107
+ // two of a name through one folder could be either
108
+ return matches.length === 1 ? matches : [];
109
+ })
110
+ .map((each) => wordsOnImport(file, lines[0], each));
111
+ return {
112
+ problems: found.flatMap((each) => each.problems),
113
+ advice: found.flatMap((each) => each.advice),
114
+ excused: []
115
+ };
116
+ };
117
+ /** Where an existing component is, and when to use it. */
118
+ const existingWords = ({ name, file, line, guidance }) => {
119
+ const when = guidance?.useWhen === undefined ? "" : ` (use when ${capped(guidance.useWhen.join("; "))})`;
120
+ return `${name} in ${file}:${line}${when}`;
121
+ };
122
+ /** The existing component a new one is surely the same as, with why: a copy under any name, or the same name and signs. */
123
+ const sureMatch = (added, existing, alike) => {
124
+ const copied = added.code === undefined
125
+ ? undefined
126
+ : existing.find((other) => other.file !== added.file && other.code === added.code);
127
+ if (copied !== undefined)
128
+ return { other: copied, why: SAME_CODE };
129
+ const sure = alike.find(({ signs }) => signs.length >= 2);
130
+ if (sure !== undefined)
131
+ return { other: sure.other, why: sure.signs.join(", ") };
132
+ const [first] = alike;
133
+ return first !== undefined && isRebuilt(added, stemOf(added.name))
134
+ ? { other: first.other, why: `it renders a plain ${added.root ?? ""} of its own` }
135
+ : undefined;
136
+ };
137
+ /** What a new component is against those that exist. */
138
+ const newComponentFindings = (added, existing) => {
139
+ const stem = stemOf(added.name);
140
+ const isRebuilding = isRebuilt(added, stem);
141
+ const alike = existing.flatMap((other) => {
142
+ if (other.file === added.file || isBuiltOn(added, other) || stemOf(other.name) !== stem)
143
+ return [];
144
+ const signs = signsBetween(added, other);
145
+ return signs.length === 0 && !isRebuilding ? [] : [{ other, signs }];
146
+ });
147
+ const sure = sureMatch(added, existing, alike);
148
+ const { name, file, line } = added;
149
+ if (sure !== undefined) {
150
+ return {
151
+ problems: [
152
+ {
153
+ rule: "duplicate-component",
154
+ file,
155
+ line,
156
+ value: name,
157
+ fix: sure.other.name,
158
+ message: `${name} looks like ${existingWords(sure.other)}: ${sure.why}. Use it, or say why not.`
159
+ }
160
+ ],
161
+ advice: [],
162
+ excused: []
163
+ };
164
+ }
165
+ return {
166
+ problems: [],
167
+ excused: [],
168
+ advice: alike.slice(0, 1).map(({ other, signs }) => ({
169
+ file,
170
+ line,
171
+ message: `${name} may be ${existingWords(other)}: ${signs.join(", ")}.`
172
+ }))
173
+ };
174
+ };
175
+ /** The package a file belongs to: the nearest with a manifest. */
176
+ const packageOf = (file, packages) => packages
177
+ .filter(({ dir }) => dir === "" || file.startsWith(`${dir}/`))
178
+ .toSorted((first, second) => second.dir.length - first.dir.length)[0];
179
+ /** Whether a file could use a component of another: in one package, or one its package depends on. */
180
+ const canUse = (file, other, packages) => {
181
+ const [own, theirs] = [packageOf(file, packages), packageOf(other, packages)];
182
+ return own === theirs || theirs === undefined || (own?.dependsOn.includes(theirs.name) ?? true);
183
+ };
184
+ /** A comment excusing a new component, when one stands within reach above it (anywhere in a single-file component). */
185
+ const excuseOf = ({ name, file, line }, added) => {
186
+ for (const each of added) {
187
+ const reason = each.file === file ? IGNORE_DUPLICATE.exec(each.text)?.[1] : undefined;
188
+ const isNear = line === 1 || (each.line <= line && each.line >= line - IGNORE_REACH);
189
+ if (reason !== undefined && isNear) {
190
+ return { file, line: each.line, rule: "duplicate-component", reason: `${name}: ${reason.trim()}` };
191
+ }
192
+ }
193
+ return undefined;
194
+ };
195
+ /** What the components were before the change: by file, and those of files it deleted, which may only have moved. */
196
+ const before = (previous, changed) => {
197
+ const current = new Set(changed.map(({ file }) => file));
198
+ const scanned = previous.map(({ file, text }) => ({
199
+ file,
200
+ components: scannedComponents(file, text),
201
+ imported: importsOfFile(file, text).flatMap(({ names }) => names)
202
+ }));
203
+ const gone = scanned.filter(({ file }) => !current.has(file));
204
+ return {
205
+ names: new Map(scanned.map(({ file, components }) => [file, new Set(components.map(({ name }) => name))])),
206
+ imports: new Map(scanned.map(({ file, imported }) => [file, new Set(imported)])),
207
+ moved: {
208
+ names: new Set(gone.flatMap(({ components }) => components.map(({ name }) => name))),
209
+ codes: new Set(gone.flatMap(({ components }) => components.flatMap(({ code }) => code ?? []))),
210
+ imports: new Set(gone.flatMap(({ imported }) => imported))
211
+ }
212
+ };
213
+ };
214
+ /**
215
+ * What a change adds against the components the project has. New means new against the commit it starts from: an edit of a
216
+ * line that declares a component is no new component, nor is a file moved, nor a name a file already imported.
217
+ *
218
+ * @param input - the change and the project.
219
+ */
220
+ export const reuseFindings = (input) => {
221
+ const { added, changed, previous, components, packages } = input;
222
+ const lines = new Map();
223
+ for (const { file, line } of added)
224
+ lines.set(file, (lines.get(file) ?? new Set()).add(line));
225
+ const isAdded = (file, from, to) => {
226
+ const own = lines.get(file);
227
+ for (let at = from; own !== undefined && at <= to; at += 1)
228
+ if (own.has(at))
229
+ return true;
230
+ return false;
231
+ };
232
+ const was = before(previous, changed);
233
+ const imports = changed.flatMap(({ file, text }) => {
234
+ const isOld = (name) => was.imports.get(file)?.has(name) === true || was.moved.imports.has(name);
235
+ return importsOfFile(file, text)
236
+ .filter(({ lines: [from, to] }) => isAdded(file, from, to))
237
+ .map((each) => importFindings(file, each, isOld, input));
238
+ });
239
+ const changedFiles = new Set(changed.map(({ file }) => file));
240
+ const isNew = ({ file, name, code }) => changedFiles.has(file) &&
241
+ was.names.get(file)?.has(name) !== true &&
242
+ !was.moved.names.has(name) &&
243
+ !(code !== undefined && was.moved.codes.has(code));
244
+ const usable = components.filter((each) => each.isExported && isShareable(each));
245
+ const fresh = usable.filter(isNew).map((each) => {
246
+ const excuse = excuseOf(each, added);
247
+ if (excuse !== undefined)
248
+ return { problems: [], advice: [], excused: [excuse] };
249
+ const reachable = usable.filter((other) => !isNew(other) && canUse(each.file, other.file, packages));
250
+ return newComponentFindings(each, reachable);
251
+ });
252
+ const all = [...imports, ...fresh];
253
+ return {
254
+ problems: all.flatMap((each) => each.problems),
255
+ advice: [
256
+ ...new Map(all.flatMap((each) => each.advice).map((each) => [JSON.stringify(each), each])).values()
257
+ ].slice(0, MOST_ADVICE),
258
+ excused: all.flatMap((each) => each.excused)
259
+ };
260
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * What a catalogue says when Vite's configuration is read: what is wrong with its theme, and of the Vite it finds itself running on: the command brings its own, and an app that puts the plugin
3
+ * in its own `vite.config` runs it on the app's.
4
+ *
5
+ * @module
6
+ */
7
+ import type { Logger } from "vite";
8
+ /**
9
+ * Stops on a Vite older than the one this runs on, for an app that puts this plugin in its own `vite.config`: the command
10
+ * brings its own Vite, and a project's older one would otherwise fail later, at its first watched file, far from here.
11
+ *
12
+ * @param build - the resolved configuration's `build`, which names Rolldown's options from Vite 8 on.
13
+ * @throws when it is an older Vite's.
14
+ */
15
+ export declare const assertViteEight: (build: object | undefined) => void;
16
+ /** What is read of Vite's resolved configuration. */
17
+ export type ResolvedVite = {
18
+ /** Vite's logger. */
19
+ readonly logger: Logger;
20
+ /** Its cache folder. */
21
+ readonly cacheDir: string;
22
+ /** Its `build`; none in a test's stand-in. */
23
+ readonly build?: object;
24
+ };
25
+ /**
26
+ * Stops on a Vite too old, and warns of what will not work in the shell's theme: a warning, since a theme a reader can still
27
+ * use must not stop a catalogue from building.
28
+ *
29
+ * @param resolved - Vite's resolved configuration.
30
+ * @param themeProblems - what will not work in the theme.
31
+ * @throws when Vite is too old.
32
+ */
33
+ export declare const checkAtStart: (resolved: ResolvedVite, themeProblems: readonly string[]) => void;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Stops on a Vite older than the one this runs on, for an app that puts this plugin in its own `vite.config`: the command
3
+ * brings its own Vite, and a project's older one would otherwise fail later, at its first watched file, far from here.
4
+ *
5
+ * @param build - the resolved configuration's `build`, which names Rolldown's options from Vite 8 on.
6
+ * @throws when it is an older Vite's.
7
+ */
8
+ export const assertViteEight = (build) => {
9
+ if (build === undefined || "rolldownOptions" in build)
10
+ return;
11
+ throw new Error("forgebookPlugin runs on Vite 8.3.4 or later, and this vite.config runs on an older one: run the catalogue with the forgebook command, which brings its own, or upgrade Vite");
12
+ };
13
+ /**
14
+ * Stops on a Vite too old, and warns of what will not work in the shell's theme: a warning, since a theme a reader can still
15
+ * use must not stop a catalogue from building.
16
+ *
17
+ * @param resolved - Vite's resolved configuration.
18
+ * @param themeProblems - what will not work in the theme.
19
+ * @throws when Vite is too old.
20
+ */
21
+ export const checkAtStart = (resolved, themeProblems) => {
22
+ assertViteEight(resolved.build);
23
+ for (const problem of themeProblems)
24
+ resolved.logger.warn(`Forgebook's shell theme: ${problem}`);
25
+ };
@@ -0,0 +1,60 @@
1
+ import { type Logger } from "vite";
2
+ import type { StoryFileRead } from "../hotModules.ts";
3
+ /** A project's script: JavaScript or TypeScript, with or without JSX. */
4
+ export declare const SCRIPT: RegExp;
5
+ /** A file of an installed package, which is not the project's to fix. */
6
+ export declare const INSTALLED: RegExp;
7
+ /** A script parsed: its imports, and why it does not parse. */
8
+ export type ParsedScript = {
9
+ /** The modules it imports statically, as written. */
10
+ readonly imports: readonly string[];
11
+ /** Whether it parses only as JSX (a `.js` file holding JSX). */
12
+ readonly isJsx: boolean;
13
+ /** Why it does not parse, naming the file with its line and column; none when it parses. */
14
+ readonly problem: string | undefined;
15
+ };
16
+ /**
17
+ * A script parsed as its extension says, and as JSX when only that makes a plain `.js` file parse.
18
+ *
19
+ * @param file - the script's path, as the problem names it; its extension decides TypeScript and JSX.
20
+ * @param text - its source.
21
+ */
22
+ export declare const parsedScript: (file: string, text: string) => ParsedScript;
23
+ /**
24
+ * Whether a file is one of the project's scripts this module names: not a story file, not an installed package's.
25
+ *
26
+ * @param file - the file.
27
+ */
28
+ export declare const isNamedScript: (file: string) => boolean;
29
+ /** The project's scripts that do not parse, as a dev server or a dependency scan knows them. */
30
+ export type ScriptProblems = {
31
+ /**
32
+ * Starts once Vite's configuration is resolved: keeps the logger the scan's warnings go to, and the folder the
33
+ * problems are kept in between processes, reading what an earlier scan found there, each file read again.
34
+ *
35
+ * @param logger - Vite's logger.
36
+ * @param folder - Forgebook's cache folder; none keeps nothing (a build).
37
+ */
38
+ readonly start: (logger: Pick<Logger, "warn">, folder: string | undefined) => void;
39
+ /** Writes a warning of the scan, once the logger is known (the scan runs after the configuration is resolved). */
40
+ readonly warn: (line: string) => void;
41
+ /**
42
+ * Notes what a scan found of a script.
43
+ *
44
+ * @param file - the script, absolute.
45
+ * @param problem - why it does not parse; none when it does.
46
+ * @returns whether that is new: a problem not known before.
47
+ */
48
+ readonly scanned: (file: string, problem: string | undefined) => boolean;
49
+ /**
50
+ * Reads an edited script again.
51
+ *
52
+ * @param file - the script, absolute.
53
+ * @returns whether it parses now, when that changed; none when nothing changed.
54
+ */
55
+ readonly edited: (file: string) => StoryFileRead | undefined;
56
+ /** The problems, one per script. */
57
+ readonly list: () => readonly string[];
58
+ };
59
+ /** The project's scripts that do not parse, empty until a scan or an edit finds one. */
60
+ export declare const scriptProblems: () => ScriptProblems;
@@ -0,0 +1,155 @@
1
+ /**
2
+ * The project's scripts that do not parse, other than story files: each one a problem naming its place, among the
3
+ * index's problems, so a component that does not parse is named once, before any frame loads it, to people and agents.
4
+ *
5
+ * @remarks
6
+ * Vite's dependency scan finds them (`prebundled.ts`), and an edit of a script finds them on a dev server, which also
7
+ * recovers on the fix. The scan may run in a process of its own (a first start's pre-bundling), and a later start that
8
+ * keeps the pre-bundled packages does not scan: what it found is kept in Forgebook's cache folder, read when a dev
9
+ * server starts, and each file read again then, so a file fixed in between is not named. A file broken while no server
10
+ * ran is named once it is edited, or by the frames of the stories that import it. Story files are the catalogue's own
11
+ * to name (`storyFilesModule.ts`).
12
+ *
13
+ * @module
14
+ */
15
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
16
+ import { join } from "node:path";
17
+ import { parseSync } from "vite";
18
+ import { STORY_FILE } from "./autoTitle.js";
19
+ import { lineAndColumn } from "./lineAndColumn.js";
20
+ import { VITE_PATHS } from "./vitePaths.js";
21
+ /** A project's script: JavaScript or TypeScript, with or without JSX. */
22
+ export const SCRIPT = /\.[cm]?[jt]sx?$/;
23
+ /** A file of an installed package, which is not the project's to fix. */
24
+ export const INSTALLED = /[\\/]node_modules[\\/]/;
25
+ /** A script whose extension says nothing about JSX: it may hold JSX, as libraries written in JavaScript do. */
26
+ const PLAIN_SCRIPT = /\.[cm]?js$/;
27
+ /** The file the found problems are kept in, in Forgebook's cache folder. */
28
+ const KEPT_FILE = "script-problems.json";
29
+ /**
30
+ * A script parsed as its extension says, and as JSX when only that makes a plain `.js` file parse.
31
+ *
32
+ * @param file - the script's path, as the problem names it; its extension decides TypeScript and JSX.
33
+ * @param text - its source.
34
+ */
35
+ export const parsedScript = (file, text) => {
36
+ const parsed = parseSync(file, text);
37
+ const imports = parsed.module.staticImports.map((each) => each.moduleRequest.value);
38
+ const [error] = parsed.errors;
39
+ if (error === undefined)
40
+ return { imports, isJsx: false, problem: undefined };
41
+ if (PLAIN_SCRIPT.test(file)) {
42
+ const asJsx = parseSync(file, text, { lang: "jsx" });
43
+ if (asJsx.errors.length === 0) {
44
+ return {
45
+ imports: asJsx.module.staticImports.map((each) => each.moduleRequest.value),
46
+ isJsx: true,
47
+ problem: undefined
48
+ };
49
+ }
50
+ }
51
+ const [label] = error.labels;
52
+ const place = label === undefined ? file : `${file}:${lineAndColumn(text, label.start)}`;
53
+ return { imports, isJsx: false, problem: `${place} does not parse: ${error.message}` };
54
+ };
55
+ /**
56
+ * Whether a file is one of the project's scripts this module names: not a story file, not an installed package's.
57
+ *
58
+ * @param file - the file.
59
+ */
60
+ export const isNamedScript = (file) => SCRIPT.test(file) && !INSTALLED.test(file) && !STORY_FILE.test(file);
61
+ /**
62
+ * Why a script on disk does not parse; none when it does, or cannot be read (an editor writes it anew in place).
63
+ *
64
+ * @param file - the script, absolute in Vite's form.
65
+ */
66
+ const problemOnDisk = (file) => {
67
+ if (!existsSync(file))
68
+ return undefined;
69
+ try {
70
+ return parsedScript(file, readFileSync(file, "utf8")).problem;
71
+ }
72
+ catch {
73
+ return undefined;
74
+ }
75
+ };
76
+ /**
77
+ * The problems kept in a folder, each file read again; none when nothing is kept there.
78
+ *
79
+ * @param path - the kept file.
80
+ */
81
+ const keptProblems = (path) => {
82
+ const problems = new Map();
83
+ if (!existsSync(path))
84
+ return problems;
85
+ try {
86
+ const kept = JSON.parse(readFileSync(path, "utf8"));
87
+ if (!Array.isArray(kept))
88
+ return problems;
89
+ for (const file of kept) {
90
+ if (typeof file !== "string")
91
+ continue;
92
+ const problem = problemOnDisk(file);
93
+ if (problem !== undefined)
94
+ problems.set(file, problem);
95
+ }
96
+ }
97
+ catch {
98
+ // a file another version wrote, or half written: the next scan or edit writes it anew
99
+ }
100
+ return problems;
101
+ };
102
+ /** The project's scripts that do not parse, empty until a scan or an edit finds one. */
103
+ export const scriptProblems = () => {
104
+ const problems = new Map();
105
+ let keptPath;
106
+ let logger;
107
+ const keep = () => {
108
+ if (keptPath === undefined)
109
+ return;
110
+ try {
111
+ mkdirSync(VITE_PATHS.dirname(keptPath), { recursive: true });
112
+ writeFileSync(keptPath, JSON.stringify([...problems.keys()]));
113
+ }
114
+ catch {
115
+ // a read-only cache folder: the problems stay this process's
116
+ }
117
+ };
118
+ return {
119
+ start: (started, folder) => {
120
+ logger = started;
121
+ if (folder === undefined)
122
+ return;
123
+ keptPath = join(folder, KEPT_FILE);
124
+ for (const [file, problem] of keptProblems(keptPath))
125
+ problems.set(file, problem);
126
+ },
127
+ warn: (line) => logger?.warn(line),
128
+ scanned: (file, problem) => {
129
+ const key = VITE_PATHS.normalize(file);
130
+ const before = problems.get(key);
131
+ if (problem === undefined)
132
+ problems.delete(key);
133
+ else
134
+ problems.set(key, problem);
135
+ if (before !== problem)
136
+ keep();
137
+ return problem !== undefined && before !== problem;
138
+ },
139
+ edited: (file) => {
140
+ const key = VITE_PATHS.normalize(file);
141
+ if (!isNamedScript(key))
142
+ return undefined;
143
+ const problem = problemOnDisk(key);
144
+ if (problem === problems.get(key))
145
+ return undefined;
146
+ if (problem === undefined)
147
+ problems.delete(key);
148
+ else
149
+ problems.set(key, problem);
150
+ keep();
151
+ return { file: key, ...(problem === undefined ? {} : { problem }) };
152
+ },
153
+ list: () => [...problems.values()]
154
+ };
155
+ };
@@ -14,7 +14,7 @@ import { readFileSync } from "node:fs";
14
14
  import { componentPage } from "./componentPage.js";
15
15
  import { compiledDocPage } from "./docPageMarkdown.js";
16
16
  import { indexedDocPages } from "./docPagesModule.js";
17
- import { EVERY_FILE, indexedStoryFiles } from "./storyFilesModule.js";
17
+ import { EVERY_FILE, readStoryFiles } from "./storyFilesModule.js";
18
18
  /** A heading of the pages' HTML: its anchor, and what is inside it. */
19
19
  const HEADING = /<h[1-6] id="doc-([^"]*)"[^>]*>([\s\S]*?)<\/h[1-6]>/g;
20
20
  /** A tag: `>` inside a quoted attribute does not end it. */
@@ -186,7 +186,8 @@ const entryOf = (file, read, watch) => {
186
186
  * few visits read.
187
187
  */
188
188
  export const storySearchModule = async (root, patterns, watch, extract, isServing, pack, isKept = EVERY_FILE) => {
189
- const files = indexedStoryFiles(root, patterns, watch, undefined, isKept);
189
+ // a file that cannot be indexed has nothing to find: the group's own module names it
190
+ const { files } = readStoryFiles(root, patterns, watch, undefined, isKept);
190
191
  const entries = await Promise.all(files.map(async (file) => ({ file, ...entryOf(file, await extract(file.file), watch) })));
191
192
  const problems = entries.flatMap(({ problem }) => problem ?? []);
192
193
  const index = {
@@ -1,5 +1,6 @@
1
- import { searchables, searchCatalogue } from "../search.js";
1
+ import { searchables } from "../search.js";
2
2
  import { isSearchIndex, mergedSearchIndex } from "../searchIndex.js";
3
+ import { correctedSearch } from "../searchTypos.js";
3
4
  import { sourceSearchLoaders } from "../sourceFiles.js";
4
5
  import { componentAddressOf, docPageAddressOf, storyAddressOf } from "../viewState.js";
5
6
  import { settled } from "./agentRoutes.js";
@@ -64,7 +65,7 @@ export const searchAnswer = async ({ tree, params, pages, view, loaded }) => {
64
65
  return { status: 400, body: { error: "No words to look for" } };
65
66
  const read = await Promise.all(loaded.sources.map(async (source) => ({ id: source.id, ...(await indexOf(source)) })));
66
67
  const indexes = new Map(read.map(({ id, index }) => [id, index]));
67
- const answer = searchCatalogue(searchables(tree, indexes), query, {
68
+ const answer = correctedSearch(searchables(tree, indexes), query, {
68
69
  results: limitOf(params.get("limit")),
69
70
  hits: HITS
70
71
  });
@@ -73,6 +74,7 @@ export const searchAnswer = async ({ tree, params, pages, view, loaded }) => {
73
74
  query,
74
75
  total: answer.total,
75
76
  results: answer.results.map((result) => agentResult(result, pages, view)),
77
+ corrections: answer.corrections,
76
78
  problems: read.flatMap(({ index, problems }) => [...problems, ...(index.problems ?? [])])
77
79
  };
78
80
  return { status: 200, body };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * What a prop's value looks like, read from its type: the fields of an object, a list's items, the members of a mixed
3
+ * union, so the panel can draw them and a link's value can be checked against them.
4
+ *
5
+ * @remarks
6
+ * What JSON cannot hold (a function, a class's instance, a node) is a `named` part, which only the source's named values
7
+ * can fill: whether it offers some is known in the page. Types can be recursive and very wide (`CSSProperties`,
8
+ * `HTMLElement`), and every docs answer carries the shape, so a recursive part, a part too deep and a type too wide are
9
+ * `json`, typed by hand: the answer stays small, and the prop can still be set.
10
+ *
11
+ * @module
12
+ */
13
+ import ts from "typescript-6";
14
+ import type { ValueShape } from "../valueShape.ts";
15
+ /** What reading a shape needs from the docs that ask. */
16
+ export type ShapeReading = {
17
+ /** The program's checker. */
18
+ readonly checker: ts.TypeChecker;
19
+ /** Where the code names the component. */
20
+ readonly node: ts.Node;
21
+ /** A choice's values in the source's order; applied to the prop's own literals. */
22
+ readonly order: (values: readonly (string | number)[]) => readonly (string | number)[];
23
+ /** A member's type as the source writes it. */
24
+ readonly typeText: (member: ts.Symbol) => string | undefined;
25
+ /** A member's TSDoc. */
26
+ readonly description: (member: ts.Symbol) => string;
27
+ };
28
+ /**
29
+ * A prop's shape, when it says more than the prop's kind does.
30
+ *
31
+ * @param type - the prop's type, without `undefined` and `null`.
32
+ * @param canTakeText - whether it takes a plain text: its text field stays, rather than JSON for a type that says nothing.
33
+ * @param reading - what reading a shape needs.
34
+ * @returns the shape; none for a prop no JSON value can fill, whose named values the page looks up by its type.
35
+ */
36
+ export declare const shapeOfProp: (type: ts.Type, canTakeText: boolean, reading: ShapeReading) => ValueShape | undefined;