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
@@ -0,0 +1,320 @@
1
+ /**
2
+ * The app's Vite configuration, as a catalogue reads it: loaded as `vite dev` loads it, then what is about how modules
3
+ * and style sheets resolve and compile is kept, and what is about the app's page, server and output is not.
4
+ *
5
+ * @remarks
6
+ * Loading it runs the project's code, and later its plugins' hooks. That is on purpose: every command that starts a
7
+ * catalogue already runs the project's `forgebook.config.ts` and its components, and this is the file the person runs
8
+ * with `vite dev` every day. `forgebook init` never loads it; `appBuild: false` turns it off.
9
+ *
10
+ * A plugin stays unless it is on one of two lists. The framework's own plugin is the adapter's to give, and two of them
11
+ * compile each file twice. The others build or serve an app, not components: a route table, a service worker, a
12
+ * source-map upload, a certificate, a type checker. A person who needs one back names it in `appBuild.keepPlugins`.
13
+ *
14
+ * The lists go by name in this package rather than through the adapters, so a project whose adapter is a version older
15
+ * than this core still never runs its framework's plugin twice.
16
+ *
17
+ * @module
18
+ */
19
+ import { existsSync, readFileSync } from "node:fs";
20
+ import { isBuiltin } from "node:module";
21
+ import { dirname, join, resolve } from "node:path";
22
+ /** The names a Vite configuration may have, in the order Vite looks for them. */
23
+ const VITE_CONFIG_FILES = [
24
+ "vite.config.js",
25
+ "vite.config.mjs",
26
+ "vite.config.ts",
27
+ "vite.config.cjs",
28
+ "vite.config.mts",
29
+ "vite.config.cts"
30
+ ];
31
+ /** The plugins each framework's adapter gives itself, by the adapter's name. */
32
+ const FRAMEWORK_PLUGINS = {
33
+ react: /^(?:vite:react|@vitejs\/plugin-react|@rolldown\/plugin-babel$)/,
34
+ "react-native-web": /^(?:vite:react|@vitejs\/plugin-react)/,
35
+ preact: /^(?:preact:|vite:preact|prefresh)/,
36
+ vue: /^vite:vue$/,
37
+ svelte: /^vite-plugin-svelte(?:[-:]|$)/,
38
+ solid: /^solid$/
39
+ };
40
+ /** What builds or serves an app and has no part in drawing a component, by its plugin's name. */
41
+ const APP_ONLY_PLUGINS = /^(?:react-router|remix|tanstack|@tanstack|vinext|vike|vite-plugin-ssr|vite-plugin-pwa|vite:legacy|vite-plugin-checker|vite-plugin-inspect|vite-plugin-vue-devtools|vite-plugin-vue-inspector|visualizer|rollup-plugin-visualizer|sentry|@sentry|codecov|vite-plugin-compression|vite-plugin-dts|dts$|unplugin-dts|vite-plugin-electron|electron|laravel|vite-plugin-ruby|@cloudflare|cloudflare|vercel|netlify|nitro|vite-plugin-node|vite:basic-ssl|vite-plugin-mkcert|vite-plugin-eslint|vite-plugin-stylelint|vite-plugin-static-copy|vite-plugin-html|vite-plugin-mock-dev-server|forgebook)/;
42
+ /** What reads a project's `paths` a second way: Vite's own reading takes its place. */
43
+ const TSCONFIG_PATHS_PLUGIN = /^vite-tsconfig-paths$|^vite:tsconfig-paths$/;
44
+ /** What a `vite.config` can import and still give a catalogue nothing: Vite's, and the framework's own plugin. */
45
+ const FRAMEWORK_IMPORTS = new Set([
46
+ "vite",
47
+ "vitest/config",
48
+ "@vitejs/plugin-react",
49
+ "@vitejs/plugin-react-swc",
50
+ "@vitejs/plugin-vue",
51
+ "@sveltejs/vite-plugin-svelte",
52
+ "vite-plugin-solid",
53
+ "@preact/preset-vite"
54
+ ]);
55
+ /** A module a script loads, by `from`, a bare `import`, `import()` or `require()`. */
56
+ const LOADED_MODULE = /(?:\bfrom\s*|\bimport\s*\(?\s*|\brequire\s*\(\s*)["'`]([^"'`\n]+)["'`]/g;
57
+ /** A word naming one of the settings a catalogue takes. */
58
+ const TAKEN_SETTING = /\b(?:resolve|alias|css|define|esbuild|oxc|optimizeDeps|envPrefix|envDir|publicDir|assetsInclude|json|dedupe|conditions|mainFields|extensions|tsconfigPaths|name|transform|load|resolveId|configureServer|enforce|jsxImportSource|babel)\b/;
59
+ /**
60
+ * Whether a `vite.config` can hold nothing for a catalogue, as its text shows: it loads only Vite and the framework's
61
+ * plugin, and names none of the settings taken nor anything a plugin written in the file would hold.
62
+ *
63
+ * @remarks
64
+ * The usual configuration of a new project is exactly this, and loading it means bundling it and starting the module
65
+ * graph it imports, which a project with nothing to read must not pay. The check only ever errs towards loading: a word
66
+ * in a comment loads a file that gives nothing.
67
+ *
68
+ * @param text - the file's text.
69
+ */
70
+ export const holdsNothingForCatalogue = (text) => !TAKEN_SETTING.test(text) &&
71
+ [...text.matchAll(LOADED_MODULE)].every((match) => {
72
+ const name = match[1] ?? "";
73
+ return FRAMEWORK_IMPORTS.has(name) || isBuiltin(name);
74
+ });
75
+ /** Whether a value is a plain object. */
76
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
77
+ /** Whether a value is one of Vite's plugins. */
78
+ const isPlugin = (value) => isRecord(value) && typeof value["name"] === "string";
79
+ /**
80
+ * A configuration's plugins as one list: Vite takes nested lists and promises of plugins.
81
+ *
82
+ * @param plugins - the plugins, as the configuration writes them.
83
+ */
84
+ const flatPlugins = async (plugins) => {
85
+ const value = await plugins;
86
+ if (Array.isArray(value))
87
+ return (await Promise.all(value.map(flatPlugins))).flat();
88
+ return isPlugin(value) ? [value] : [];
89
+ };
90
+ /**
91
+ * The app's Vite configuration file, from the catalogue's folder, or none.
92
+ *
93
+ * @param dir - the catalogue's folder.
94
+ * @param asked - `appBuild.viteConfig`.
95
+ */
96
+ export const viteConfigFile = (dir, asked) => {
97
+ if (asked === false)
98
+ return undefined;
99
+ if (asked !== undefined)
100
+ return asked;
101
+ return VITE_CONFIG_FILES.find((name) => existsSync(join(dir, name)));
102
+ };
103
+ /**
104
+ * Whether the app's Vite configuration is worth loading.
105
+ *
106
+ * @param dir - the catalogue's folder.
107
+ * @param file - the file, from there.
108
+ */
109
+ export const isWorthLoading = (dir, file) => {
110
+ try {
111
+ return !holdsNothingForCatalogue(readFileSync(resolve(dir, file), "utf8"));
112
+ }
113
+ catch {
114
+ // loading it says why it cannot be read, in the words the person is told
115
+ return true;
116
+ }
117
+ };
118
+ /**
119
+ * Whether one of the app's plugins goes into the catalogue.
120
+ *
121
+ * @param name - the plugin's name.
122
+ * @param framework - the adapter's name.
123
+ * @param options - what the catalogue's configuration asks.
124
+ * @param isReadingPaths - whether Vite reads `tsconfig` paths here, which a plugin that does the same is then not needed for.
125
+ */
126
+ export const keepsAppPlugin = (name, framework, options, isReadingPaths = true) => {
127
+ if (options.skipPlugins.includes(name))
128
+ return false;
129
+ if (options.keepPlugins.includes(name))
130
+ return true;
131
+ if (FRAMEWORK_PLUGINS[framework]?.test(name) === true)
132
+ return false;
133
+ return !APP_ONLY_PLUGINS.test(name) && !(isReadingPaths && TSCONFIG_PATHS_PLUGIN.test(name));
134
+ };
135
+ /** What is taken of `resolve`. */
136
+ const resolveFields = (given) => ({
137
+ ...(given.alias === undefined ? {} : { alias: given.alias }),
138
+ ...(given.dedupe === undefined ? {} : { dedupe: given.dedupe }),
139
+ ...(given.conditions === undefined ? {} : { conditions: given.conditions }),
140
+ ...(given.mainFields === undefined ? {} : { mainFields: given.mainFields }),
141
+ ...(given.extensions === undefined ? {} : { extensions: given.extensions }),
142
+ ...(given.tsconfigPaths === undefined ? {} : { tsconfigPaths: given.tsconfigPaths })
143
+ });
144
+ /** Lightning CSS's options but its visitor. */
145
+ const withoutVisitor = ({ visitor: _visitor, ...rest }) => rest;
146
+ /** What is taken of `css`: its visitor stays Forgebook's, since the forced states are a rewrite of the style sheets. */
147
+ const cssFields = (given) => ({
148
+ ...(given.preprocessorOptions === undefined ? {} : { preprocessorOptions: given.preprocessorOptions }),
149
+ ...(given.preprocessorMaxWorkers === undefined
150
+ ? {}
151
+ : { preprocessorMaxWorkers: given.preprocessorMaxWorkers }),
152
+ ...(given.lightningcss === undefined ? {} : { lightningcss: withoutVisitor(given.lightningcss) })
153
+ });
154
+ /** What is taken of `optimizeDeps`. */
155
+ const optimizeFields = (given) => ({
156
+ ...(given.include === undefined ? {} : { include: given.include }),
157
+ ...(given.exclude === undefined ? {} : { exclude: given.exclude })
158
+ });
159
+ /** The `define` names that replace a whole environment. */
160
+ const WHOLE_ENVIRONMENT = new Set(["process.env", "import.meta.env"]);
161
+ /**
162
+ * Whether a `define` value is empty: `process.env: {}` is a common way to keep code that reads it from failing, and holds
163
+ * nothing.
164
+ */
165
+ const isEmptyDefine = (value) => value === "{}" || (typeof value === "object" && value !== null && Object.keys(value).length === 0);
166
+ /**
167
+ * A `define` without a whole environment written out: a catalogue bundles code the app does not (Testing Library reads
168
+ * `process.env`), so what the app kept out of its bundles would reach the catalogue's.
169
+ *
170
+ * @param define - the configuration's.
171
+ */
172
+ export const withoutWholeEnvironment = (define) => Object.fromEntries(Object.entries(define).filter(([name, value]) => !WHOLE_ENVIRONMENT.has(name) || isEmptyDefine(value)));
173
+ /** What is taken of how code compiles and what it reads. */
174
+ const compileFields = (config) => ({
175
+ ...(config.define === undefined ? {} : { define: withoutWholeEnvironment(config.define) }),
176
+ ...(config.assetsInclude === undefined ? {} : { assetsInclude: config.assetsInclude }),
177
+ ...(config.json === undefined ? {} : { json: config.json }),
178
+ ...(config.esbuild === undefined ? {} : { esbuild: config.esbuild }),
179
+ ...(config.oxc === undefined ? {} : { oxc: config.oxc }),
180
+ ...(config.envPrefix === undefined ? {} : { envPrefix: config.envPrefix })
181
+ });
182
+ /** The folders it names, absolute: the catalogue's root is not the one they are written against. */
183
+ const folderFields = ({ envDir, publicDir }, root) => ({
184
+ ...(typeof envDir === "string" ? { envDir: resolve(root, envDir) } : {}),
185
+ ...(typeof publicDir === "string" ? { publicDir: resolve(root, publicDir) } : {}),
186
+ ...(publicDir === false ? { publicDir: false } : {})
187
+ });
188
+ /**
189
+ * What a catalogue takes of the app's configuration besides its plugins: what decides how a module resolves and
190
+ * compiles. `root`, `base`, `build`, `server`, `preview` and `test` are about the app's page and output.
191
+ *
192
+ * @param config - the configuration, loaded.
193
+ * @param dir - the catalogue's folder, which its relative paths are read against when it names no root.
194
+ */
195
+ export const appConfigFields = (config, dir) => {
196
+ const resolved = resolveFields(config.resolve ?? {});
197
+ const css = cssFields(config.css ?? {});
198
+ const optimizeDeps = optimizeFields(config.optimizeDeps ?? {});
199
+ return {
200
+ ...(Object.keys(resolved).length === 0 ? {} : { resolve: resolved }),
201
+ ...(Object.keys(css).length === 0 ? {} : { css }),
202
+ ...(Object.keys(optimizeDeps).length === 0 ? {} : { optimizeDeps }),
203
+ ...compileFields(config),
204
+ ...folderFields(config, resolve(dir, config.root ?? "."))
205
+ };
206
+ };
207
+ /**
208
+ * The PostCSS plugins of a configuration's `css.postcss`, when it writes them there rather than in a file.
209
+ *
210
+ * @param config - the configuration, loaded.
211
+ */
212
+ const inlinePostcssPlugins = (config) => {
213
+ const postcss = config.css?.postcss;
214
+ return isRecord(postcss) && Array.isArray(postcss["plugins"]) ? postcss["plugins"] : undefined;
215
+ };
216
+ /** A hook's function, from the function or the function with its order. */
217
+ const handlerOf = (hook) => typeof hook === "object" && hook !== null && "handler" in hook ? hook.handler : hook;
218
+ /** A hook's order, when it names one. */
219
+ const orderOf = (hook) => {
220
+ const order = typeof hook === "object" && hook !== null && "order" in hook ? hook.order : undefined;
221
+ return order === "pre" || order === "post" ? { order } : {};
222
+ };
223
+ /** A plugin's `config`, what it returns filtered. */
224
+ const guardedConfig = (hook, dir) => {
225
+ const handler = handlerOf(hook);
226
+ return {
227
+ ...orderOf(hook),
228
+ async handler(config, env) {
229
+ const returned = await Reflect.apply(handler, this, [config, env]);
230
+ return returned === null || returned === undefined ? null : appConfigFields(returned, dir);
231
+ }
232
+ };
233
+ };
234
+ /** A plugin's `transformIndexHtml`, for the frames' page alone. */
235
+ const guardedHtml = (hook) => {
236
+ const handler = handlerOf(hook);
237
+ return {
238
+ ...orderOf(hook),
239
+ handler(html, context) {
240
+ return context.path.endsWith("frame.html") ? Reflect.apply(handler, this, [html, context]) : html;
241
+ }
242
+ };
243
+ };
244
+ /**
245
+ * One of the app's plugins, kept from reaching past what a catalogue takes of an app.
246
+ *
247
+ * @remarks
248
+ * What its `config` returns goes through the same filter as the file's, or a plugin could set the host, `fs.strict` or the
249
+ * output. Its `configureServer` runs at the normal time, after the middlewares that keep each origin to itself: `order: "pre"`
250
+ * would answer ahead of them. Its `transformIndexHtml` reaches the frames and not the catalogue's page, whose origin holds the
251
+ * agent API: a story's frame is what the app's page stands for. A one-shot command's server runs no `configureServer` at all:
252
+ * that hook is where a plugin starts a backend or a watcher of its own, whose output on an inherited stdout would break a
253
+ * command's `--json`, and nothing a story asks for in the moment it is checked needs what it sets up for edits.
254
+ *
255
+ * @param plugin - the plugin.
256
+ * @param dir - the folder its relative paths are read against.
257
+ * @param isOneShot - whether the server is a one-shot command's.
258
+ */
259
+ export const guardedAppPlugin = (plugin, dir, isOneShot = false) => {
260
+ const { config, configureServer: serverHook, transformIndexHtml, ...rest } = plugin;
261
+ return {
262
+ ...rest,
263
+ ...(config === undefined ? {} : { config: guardedConfig(config, dir) }),
264
+ ...(serverHook === undefined || isOneShot ? {} : { configureServer: handlerOf(serverHook) }),
265
+ ...(transformIndexHtml === undefined ? {} : { transformIndexHtml: guardedHtml(transformIndexHtml) })
266
+ };
267
+ };
268
+ /**
269
+ * What a configuration sets that a catalogue cannot do: stories would differ from the app without a word otherwise.
270
+ *
271
+ * @param config - the configuration, loaded.
272
+ * @param environment - what it was loaded for.
273
+ * @param text - the file's text.
274
+ */
275
+ const configNotes = (config, environment, text) => [
276
+ ...(config.css?.modules !== undefined && config.css.modules !== false
277
+ ? [
278
+ "css.modules is not read: a catalogue compiles CSS modules with Lightning CSS, so localsConvention and the like do not apply; set css.lightningcss.cssModules"
279
+ ]
280
+ : []),
281
+ ...(/\bjsxImportSource\b/.test(text)
282
+ ? [
283
+ "jsxImportSource is not read from the framework's plugin, which the adapter makes itself: give it to the adapter in the catalogue's configuration (react({ jsxImportSource }))"
284
+ ]
285
+ : []),
286
+ ...(environment.command === "build" &&
287
+ Object.keys(config.define ?? {}).some((name) => WHOLE_ENVIRONMENT.has(name)) &&
288
+ Object.keys(withoutWholeEnvironment(config.define ?? {})).length !== Object.keys(config.define ?? {}).length
289
+ ? ["define writes out a whole environment (process.env), which is left out of the catalogue's build"]
290
+ : [])
291
+ ];
292
+ /**
293
+ * Loads the app's Vite configuration, and takes what a catalogue takes of it.
294
+ *
295
+ * @param dir - the catalogue's folder.
296
+ * @param file - the file, from there.
297
+ * @param environment - the command and the mode it is loaded for: a configuration may be a function of them.
298
+ * @param framework - the adapter's name.
299
+ * @param options - what the catalogue's configuration asks.
300
+ * @param isReadingPaths - whether Vite reads `tsconfig` paths here.
301
+ * @param isOneShot - whether the server is a one-shot command's.
302
+ * @throws what the file throws when it loads.
303
+ */
304
+ export const loadAppViteConfig = async (dir, file, environment, framework, options, isReadingPaths, isOneShot) => {
305
+ const { loadConfigFromFile } = await import("vite");
306
+ const path = resolve(dir, file);
307
+ const loaded = await loadConfigFromFile(environment, path, dir, "silent");
308
+ const config = loaded?.config ?? {};
309
+ const written = await flatPlugins(config.plugins);
310
+ const isKept = (plugin) => keepsAppPlugin(plugin.name, framework, options, isReadingPaths);
311
+ const home = dirname(path);
312
+ return {
313
+ file,
314
+ fields: appConfigFields(config, home),
315
+ plugins: written.filter(isKept).map((plugin) => guardedAppPlugin(plugin, home, isOneShot)),
316
+ leftOut: [...new Set(written.filter((plugin) => !isKept(plugin)).map((plugin) => plugin.name))],
317
+ postcssPlugins: inlinePostcssPlugins(config),
318
+ notes: configNotes(config, environment, readFileSync(path, "utf8"))
319
+ };
320
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The files a `tsconfig`'s text points to: its `extends` and `references`, those a path names (a package's are left out,
3
+ * since a package's shared configuration has no `paths` of the project's).
4
+ *
5
+ * @param text - the file's text.
6
+ * @returns the paths as written.
7
+ */
8
+ export declare const namedTsconfigs: (text: string) => readonly string[];
9
+ /**
10
+ * Whether a project's `tsconfig` files declare `paths`.
11
+ *
12
+ * @param dir - the project's folder.
13
+ */
14
+ export declare const hasTsconfigPaths: (dir: string) => boolean;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Whether a project's `tsconfig.json` declares `paths`, so a catalogue can turn on Vite's reading of them only for a
3
+ * project that has some.
4
+ *
5
+ * @remarks
6
+ * Vite resolves them itself (`resolve.tsconfigPaths`), and asks the resolver to look for a `tsconfig` for every module,
7
+ * so a project with no `paths` is not made to pay. Nothing here runs: the files are searched as text, comments and all,
8
+ * because the compiler is far too slow to load for one question and a false yes only costs that small price. A template
9
+ * often keeps `paths` in a file the main one names under `references` or `extends` (`tsconfig.app.json`,
10
+ * a monorepo's `tsconfig.base.json`), so those are followed.
11
+ *
12
+ * @module
13
+ */
14
+ import { existsSync, readFileSync, statSync } from "node:fs";
15
+ import { dirname, join, resolve } from "node:path";
16
+ /** The files a project's search starts from. */
17
+ const STARTING_FILES = ["tsconfig.json", "tsconfig.app.json"];
18
+ /** How many files a search reads: a chain is short, and the files are the project's to write. */
19
+ const MAX_FILES = 32;
20
+ /** The largest file read, in bytes. */
21
+ const MAX_FILE_SIZE = 1_000_000;
22
+ /** A `paths` key, or a `baseUrl`, which Vite resolves through as well. */
23
+ const PATHS_KEY = /"(?:paths|baseUrl)"\s*:/;
24
+ /** The value of an `extends` key, one path or a list. */
25
+ const EXTENDS_VALUE = /"extends"\s*:\s*("[^"\n]+"|\[[^\]]*\])/;
26
+ /** The list under a `references` key. */
27
+ const REFERENCES_VALUE = /"references"\s*:\s*\[([^\]]*)\]/;
28
+ /** A text in JSON. */
29
+ const QUOTED = /"([^"\n]+)"/g;
30
+ /** A `path` key of a reference. */
31
+ const REFERENCE_PATH = /"path"\s*:\s*"([^"\n]+)"/g;
32
+ /**
33
+ * The files a `tsconfig`'s text points to: its `extends` and `references`, those a path names (a package's are left out,
34
+ * since a package's shared configuration has no `paths` of the project's).
35
+ *
36
+ * @param text - the file's text.
37
+ * @returns the paths as written.
38
+ */
39
+ export const namedTsconfigs = (text) => {
40
+ const extended = [...(text.match(EXTENDS_VALUE)?.[1] ?? "").matchAll(QUOTED)].flatMap((each) => each[1] === undefined ? [] : [each[1]]);
41
+ const referenced = [...(text.match(REFERENCES_VALUE)?.[1] ?? "").matchAll(REFERENCE_PATH)].flatMap((each) => (each[1] === undefined ? [] : [each[1]]));
42
+ // a bare `extends` is a package's; a bare reference is a file beside this one
43
+ return [...extended.filter((path) => path.startsWith(".")), ...referenced];
44
+ };
45
+ /**
46
+ * The file a path in a `tsconfig` names: the path itself, its `.json`, or a folder's `tsconfig.json`.
47
+ *
48
+ * @param from - the folder of the file that names it.
49
+ * @param path - the path as written.
50
+ */
51
+ const namedFile = (from, path) => {
52
+ const named = resolve(from, path);
53
+ return [named, `${named}.json`, join(named, "tsconfig.json")].find((file) => existsSync(file) && statSync(file).isFile());
54
+ };
55
+ /**
56
+ * Whether a project's `tsconfig` files declare `paths`.
57
+ *
58
+ * @param dir - the project's folder.
59
+ */
60
+ export const hasTsconfigPaths = (dir) => {
61
+ const queue = STARTING_FILES.map((name) => join(dir, name)).filter((file) => existsSync(file));
62
+ const seen = new Set(queue);
63
+ for (const file of queue) {
64
+ if (seen.size > MAX_FILES)
65
+ return false;
66
+ if (statSync(file).size > MAX_FILE_SIZE)
67
+ continue;
68
+ const text = readFileSync(file, "utf8");
69
+ if (PATHS_KEY.test(text))
70
+ return true;
71
+ for (const path of namedTsconfigs(text)) {
72
+ const named = namedFile(dirname(file), path);
73
+ if (named !== undefined && !seen.has(named)) {
74
+ seen.add(named);
75
+ queue.push(named);
76
+ }
77
+ }
78
+ }
79
+ return false;
80
+ };
@@ -0,0 +1,8 @@
1
+ import type { CommandNode, CommandScope } from "@ensiria/cli-kit/commands.types";
2
+ import { type ForgebookOptions } from "./catalogueCommands.ts";
3
+ /**
4
+ * The commands.
5
+ *
6
+ * @param forgebook - the scope of the `forgebook` command, whose options every command takes.
7
+ */
8
+ export declare const auditCommands: (forgebook: CommandScope<ForgebookOptions>) => Readonly<Record<string, CommandNode>>;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * `forgebook audit`: the values and components a project actually uses, with no catalogue and no configuration.
3
+ *
4
+ * @module
5
+ */
6
+ import { resolve } from "node:path";
7
+ import { EXIT } from "@ensiria/cli-kit/constants";
8
+ import { formatJson } from "@ensiria/cli-kit/files";
9
+ import { ScriptError } from "@ensiria/cli-kit/script";
10
+ import { parsedColor } from "../../src/vite/nearestToken.js";
11
+ import { auditDocument, auditSitesDocument, auditText, printable } from "./auditRun.js";
12
+ import { COMMAND } from "./catalogueCommands.js";
13
+ /** A list's limit, when it can be one. */
14
+ const checkedLimit = (limit) => {
15
+ if (limit !== undefined && !(Number.isInteger(limit) && limit > 0)) {
16
+ throw new ScriptError("--limit takes a whole number above 0", { exitCode: EXIT.usage });
17
+ }
18
+ return limit;
19
+ };
20
+ /** A value to look for, when it can be read: a word that is neither would answer that it is not there. */
21
+ const checkedValue = (value) => {
22
+ if (parsedColor(value) === undefined && !/^-?\d*\.?\d+(?:px|rem)?$/.test(value)) {
23
+ throw new ScriptError(`Cannot read "${value}" as a colour or a size: write it as code does`, {
24
+ exitCode: EXIT.usage
25
+ });
26
+ }
27
+ return value;
28
+ };
29
+ /**
30
+ * The commands.
31
+ *
32
+ * @param forgebook - the scope of the `forgebook` command, whose options every command takes.
33
+ */
34
+ export const auditCommands = (forgebook) => ({
35
+ audit: forgebook.command({
36
+ summary: "Report the colours, sizes and components a project actually uses, with what to do next.",
37
+ json: true,
38
+ positionals: [{ name: "folder", description: "The project's folder; the current one by default." }],
39
+ options: {
40
+ value: {
41
+ type: "string",
42
+ valueName: "value",
43
+ description: "List where this value is written by hand, instead of the report."
44
+ },
45
+ limit: {
46
+ type: "number",
47
+ valueName: "n",
48
+ description: "How many values each list gives; 10 by default."
49
+ }
50
+ },
51
+ examples: [
52
+ { command: `${COMMAND} audit`, description: "What this project uses." },
53
+ {
54
+ command: `${COMMAND} audit --json`,
55
+ description: "The same with `actions`, the next steps, for an agent."
56
+ },
57
+ {
58
+ command: `${COMMAND} audit --value "#64748b" --json`,
59
+ description: "Every place to edit for one of them."
60
+ }
61
+ ],
62
+ run: ({ positionals, options, io, isJson }) => {
63
+ const dir = resolve(positionals[0] ?? ".");
64
+ if (options.value === undefined) {
65
+ const document = auditDocument(dir, checkedLimit(options.limit), positionals[0] ?? ".");
66
+ io.stdout.write(isJson ? formatJson(document) : `${printable(auditText(document))}\n`);
67
+ return;
68
+ }
69
+ const found = auditSitesDocument(dir, checkedValue(options.value));
70
+ const lines = found.sites.map(({ file, line, text }) => `${file}:${line} ${text}`);
71
+ const text = printable(lines.join("\n")) || `${options.value} is not written by hand.`;
72
+ io.stdout.write(isJson ? formatJson(found) : `${text}\n`);
73
+ }
74
+ })
75
+ });
@@ -0,0 +1,95 @@
1
+ /**
2
+ * What `forgebook audit` does: reads a project's files, with no catalogue and no configuration, and reports the values and
3
+ * components it actually uses, with what to do next.
4
+ *
5
+ * @remarks
6
+ * Nothing of the project runs and nothing is written. It is meant for a project with no design system: the first question
7
+ * there is what the system already is in practice, and that needs no setup. A report is not a verdict, so it exits 0
8
+ * whatever it finds; `check-code` is what fails.
9
+ *
10
+ * @module
11
+ */
12
+ import { type AuditSite, type AuditSystem, type ValueAudit } from "../../src/vite/appAudit.ts";
13
+ import { type LookAlike } from "../../src/vite/lookAlikes.ts";
14
+ import { type CoverageComponent, type StoryCoverage, type UnusedStoriedComponent } from "../../src/vite/storyCoverage.ts";
15
+ /** The next step a report proposes. */
16
+ export type AuditAction = {
17
+ /** What kind of step. */
18
+ readonly kind: "use-token" | "name-value" | "merge-values" | "merge-components" | "write-stories" | "check-unused";
19
+ /** What to do, in a sentence. */
20
+ readonly message: string;
21
+ /** How many places it touches. */
22
+ readonly count: number;
23
+ /** The command that lists them, when one does: to read, since quoting differs between shells. */
24
+ readonly command?: string;
25
+ /** The same command as its words, to run without a shell. */
26
+ readonly args?: readonly string[];
27
+ /** The components it is about, with where they are. */
28
+ readonly members?: readonly CoverageComponent[];
29
+ };
30
+ /** What `forgebook audit` answers. */
31
+ export type AuditDocument = ValueAudit & {
32
+ /** The shape's version. */
33
+ readonly schema: 1;
34
+ /** The system the report read. */
35
+ readonly system: AuditSystem;
36
+ /** The components. */
37
+ readonly components: {
38
+ /** How many were found. */
39
+ readonly count: number;
40
+ /** Those that look like one, the surest first. */
41
+ readonly lookAlikes: readonly LookAlike[];
42
+ /** How many story files were read. */
43
+ readonly storyFileCount: StoryCoverage["storyFileCount"];
44
+ /** How many exported components some story is about. */
45
+ readonly withStories: StoryCoverage["withStories"];
46
+ /** Exported components no story file is about; pages, layouts and routes left out. */
47
+ readonly withoutStories: readonly CoverageComponent[];
48
+ /** Components with stories that no file other than a story or a test imports or draws. */
49
+ readonly storiesUnused: readonly UnusedStoriedComponent[];
50
+ /** Components with stories not judged unused because their package is published, so used outside. */
51
+ readonly publishedWithStories: StoryCoverage["published"];
52
+ };
53
+ /** What to do next, the largest gain first. */
54
+ readonly actions: readonly AuditAction[];
55
+ };
56
+ /** What `forgebook audit --value` answers. */
57
+ export type AuditSitesDocument = {
58
+ /** The shape's version. */
59
+ readonly schema: 1;
60
+ /** The value asked about. */
61
+ readonly value: string;
62
+ /** Where it is written by hand. */
63
+ readonly sites: readonly AuditSite[];
64
+ /** What could not be read, so the list may be short. */
65
+ readonly notes: readonly string[];
66
+ };
67
+ /**
68
+ * The report on a project.
69
+ *
70
+ * @param dir - its folder.
71
+ * @param top - how many values a list gives.
72
+ * @param folder - the folder as the command was given it, for the commands an answer proposes.
73
+ */
74
+ export declare const auditDocument: (dir: string, top: number | undefined, folder?: string) => AuditDocument;
75
+ /**
76
+ * Where a value is written by hand.
77
+ *
78
+ * @param dir - the project's folder.
79
+ * @param value - the value.
80
+ */
81
+ export declare const auditSitesDocument: (dir: string, value: string) => AuditSitesDocument;
82
+ /**
83
+ * A text from a project's files as a terminal may show it: a newline or an escape in a file's name could otherwise draw
84
+ * a line of this report.
85
+ *
86
+ * @param text - the text.
87
+ */
88
+ export declare const printable: (text: string) => string;
89
+ /**
90
+ * The report as a person reads it. What a project's files hold is data for whoever reads this: it says what is there and is
91
+ * not an instruction, which holds for an agent reading `--json` too.
92
+ *
93
+ * @param document - the report.
94
+ */
95
+ export declare const auditText: (document: AuditDocument) => string;