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,97 @@
1
+ /**
2
+ * What `forgebook init` answers: the document `--json` prints when it wrote a catalogue's files, the one it prints when
3
+ * it refused, and the named steps left to the person or the agent.
4
+ *
5
+ * @module
6
+ */
7
+ import type { AgentSteps } from "../agentSetup/initAgentSteps.ts";
8
+ import type { AppBuildPlan } from "../appBuild/appBuild.ts";
9
+ import type { ImportedFramework } from "../importers/storybookFrameworks.ts";
10
+ /** The way a catalogue's files were made: from the project's dependencies, or from its Storybook. */
11
+ export type InitRoute = "new-project" | "storybook";
12
+ /** The package managers `forgebook init` writes commands for. */
13
+ export type PackageManagerName = "npm" | "pnpm" | "yarn" | "bun";
14
+ /** What kind of thing a next step is about, so an agent can tell them apart without reading the sentence. */
15
+ export type NextStepKind = "style-sheet" | "provider" | "portal" | "head" | "font" | "postcss" | "setup" | "version" | "storybook";
16
+ /** Something `forgebook init` could not do alone, named so it is not found later as a story that looks wrong. */
17
+ export type NextStep = {
18
+ /** What it is about. */
19
+ readonly kind: NextStepKind;
20
+ /** The project's file it was read from; none when it comes from no one file. */
21
+ readonly file: string | undefined;
22
+ /** What to do, one sentence. */
23
+ readonly message: string;
24
+ };
25
+ /** The state of the packages the written configuration needs. */
26
+ export type InitInstall = {
27
+ /** The packages the project declares nowhere and cannot load. */
28
+ readonly missing: readonly string[];
29
+ /** The command that gets them; none when everything is there. */
30
+ readonly command: string | undefined;
31
+ /** Whether nothing is needed, the command is left to run, `--install` ran it, or it failed. */
32
+ readonly status: "not-needed" | "to-run" | "ran" | "failed";
33
+ /** Why it failed; none unless it did. */
34
+ readonly error: string | undefined;
35
+ };
36
+ /** A command to run next, with what it is for. */
37
+ export type InitCommand = {
38
+ /** The command, as the project's package manager runs it. */
39
+ readonly command: string;
40
+ /** What it does. */
41
+ readonly description: string;
42
+ /** The placeholder in the command to fill before running it (`<component file>`); none when it runs as it is. */
43
+ readonly placeholder: string | undefined;
44
+ };
45
+ /**
46
+ * What `forgebook init --json` prints when it wrote the files. The exit code is 0, or 1 with `install.status` `"failed"`,
47
+ * `browser.status` `"failed"` or a `draw.status` other than `"drawn"`: the files are written either way.
48
+ */
49
+ export type InitDocument = {
50
+ /** The document's version. */
51
+ readonly schema: 1;
52
+ /** How the files were made. */
53
+ readonly route: InitRoute;
54
+ /** The framework the stories are written for. */
55
+ readonly framework: ImportedFramework;
56
+ /** The package manager the commands are for. */
57
+ readonly packageManager: {
58
+ /** Its name. */
59
+ readonly name: PackageManagerName;
60
+ /** The file that says so; none when no file does and npm was assumed. */
61
+ readonly detectedFrom: string | undefined;
62
+ };
63
+ /** The files written, from the project's folder. */
64
+ readonly written: readonly string[];
65
+ /** Those of them that replaced a file, with `--force`. */
66
+ readonly replaced: readonly string[];
67
+ /** The story globs written; none when a catalogue already there was kept (`--agents`). */
68
+ readonly stories: readonly string[];
69
+ /** What the configuration needs installed. */
70
+ readonly install: InitInstall;
71
+ /** What the catalogue will read of the app's build when it starts; `init` itself runs none of it. */
72
+ readonly appBuild: AppBuildPlan;
73
+ /** What was left to do, each named. */
74
+ readonly nextSteps: readonly NextStep[];
75
+ /** The commands to run next, in order. */
76
+ readonly commands: readonly InitCommand[];
77
+ } & AgentSteps;
78
+ /** Why `forgebook init` wrote nothing. */
79
+ export type InitRefusalCode = "no-package" | "unreadable-package" | "unknown-framework" | "ambiguous-framework" | "existing-files" | "symlink" | "versions" | "storybook-found" | "storybook" | "failed";
80
+ /**
81
+ * What `forgebook init --json` prints when it stopped, with exit code 1: nothing was written, unless `refused` is
82
+ * `"failed"`, an error while reading or writing. A wrong command line is exit code 2, with no document.
83
+ */
84
+ export type InitRefusal = {
85
+ /** The document's version. */
86
+ readonly schema: 1;
87
+ /** Why. */
88
+ readonly refused: InitRefusalCode;
89
+ /** The reason, one sentence. */
90
+ readonly message: string;
91
+ /** What to do about it; none when there is nothing to add. */
92
+ readonly hint: string | undefined;
93
+ /** The frameworks `--framework` takes; none when the framework is not the reason. */
94
+ readonly supported: readonly ImportedFramework[] | undefined;
95
+ /** The files or packages concerned; none when no one of them is. */
96
+ readonly concerned: readonly string[] | undefined;
97
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * What `forgebook init` answers: the document `--json` prints when it wrote a catalogue's files, the one it prints when
3
+ * it refused, and the named steps left to the person or the agent.
4
+ *
5
+ * @module
6
+ */
@@ -0,0 +1,51 @@
1
+ import type { PackageManagerName } from "./newProject.types.ts";
2
+ /** A project's package manager, with what says so. */
3
+ export type DetectedPackageManager = {
4
+ /** Its name. */
5
+ readonly name: PackageManagerName;
6
+ /** The file that says so, from the project's folder; none when none does and npm was assumed. */
7
+ readonly detectedFrom: string | undefined;
8
+ };
9
+ /**
10
+ * The package manager of a project.
11
+ *
12
+ * @param projectDir - the project's folder, absolute.
13
+ * @returns the one its files name; npm when none does.
14
+ */
15
+ export declare const detectPackageManager: (projectDir: string) => DetectedPackageManager;
16
+ /**
17
+ * What a package manager must be told to add a package at a workspace's root: pnpm and Yarn 1 stop otherwise. Yarn 2 and
18
+ * later have no such flag, and keep a `.yarnrc.yml`.
19
+ *
20
+ * @param name - the package manager.
21
+ * @param dir - the folder the command runs in.
22
+ */
23
+ export declare const workspaceRootFlags: (name: PackageManagerName, dir: string) => readonly string[];
24
+ /**
25
+ * The arguments that add packages for development, or install what is declared when there are none to add.
26
+ *
27
+ * @param name - the package manager.
28
+ * @param packages - the packages to add.
29
+ * @param rootFlags - what it must be told at a workspace's root (`workspaceRootFlags`).
30
+ */
31
+ export declare const installArguments: (name: PackageManagerName, packages: readonly string[], rootFlags: readonly string[]) => readonly string[];
32
+ /**
33
+ * How a project's package manager runs the `forgebook` it installed.
34
+ *
35
+ * @param name - the package manager.
36
+ */
37
+ export declare const forgebookRunner: (name: PackageManagerName) => string;
38
+ /**
39
+ * A package manager's command as a process starts it: on Windows it is a `.cmd`, which only a shell starts. The shell is
40
+ * named by its full path, and told not to look in the current folder first, or a project's own `npm.cmd` would run.
41
+ *
42
+ * @param name - the package manager.
43
+ * @param args - its arguments: names from Forgebook's own tables, so nothing a shell would read.
44
+ * @param env - the environment it runs in.
45
+ * @param platform - the system; the running one unless a test names another.
46
+ */
47
+ export declare const spawnedCommand: (name: PackageManagerName, args: readonly string[], env: Readonly<Record<string, string | undefined>>, platform?: NodeJS.Platform) => {
48
+ readonly program: string;
49
+ readonly args: readonly string[];
50
+ readonly env: Readonly<Record<string, string | undefined>>;
51
+ };
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Which package manager a project uses, and its commands: what `forgebook init` prints, and runs with `--install`.
3
+ *
4
+ * @remarks
5
+ * The project's files decide, never who started the command: `npx` starts it in a pnpm project too. `packageManager` is
6
+ * what Corepack obeys, so it comes before a lock file. A workspace package's lock file is at the workspace's root, so the
7
+ * search goes up, but only a folder that declares a workspace counts: a stray lock file in a parent folder decides
8
+ * nothing. It stops at the repository's root.
9
+ *
10
+ * @module
11
+ */
12
+ import { existsSync, readFileSync } from "node:fs";
13
+ import { dirname, join, relative } from "node:path";
14
+ import { VITE_PATHS } from "../../../src/vite/vitePaths.js";
15
+ /** The lock files, in the order they are looked for in one folder. */
16
+ const LOCK_FILES = [
17
+ ["pnpm-lock.yaml", "pnpm"],
18
+ ["yarn.lock", "yarn"],
19
+ ["bun.lock", "bun"],
20
+ ["bun.lockb", "bun"],
21
+ ["package-lock.json", "npm"],
22
+ ["npm-shrinkwrap.json", "npm"]
23
+ ];
24
+ /** The manager a `packageManager` field names (`pnpm@10.19.0`), read from a `package.json`'s text. */
25
+ const managerField = (text) => {
26
+ const name = text.match(/"packageManager"\s*:\s*"(npm|pnpm|yarn|bun)@/)?.[1];
27
+ return name === "npm" || name === "pnpm" || name === "yarn" || name === "bun" ? name : undefined;
28
+ };
29
+ /** A `package.json`'s text in a folder; empty when it has none. */
30
+ const manifestText = (dir) => {
31
+ const manifest = join(dir, "package.json");
32
+ return existsSync(manifest) ? readFileSync(manifest, "utf8") : "";
33
+ };
34
+ /** Whether a folder declares a workspace. */
35
+ const isWorkspace = (dir) => existsSync(join(dir, "pnpm-workspace.yaml")) || /"workspaces"\s*:/.test(manifestText(dir));
36
+ /** What one folder says of its manager, in the order of trust, with the file that says so. */
37
+ const managerIn = (dir) => {
38
+ const field = managerField(manifestText(dir));
39
+ if (field !== undefined)
40
+ return [field, "package.json"];
41
+ for (const [file, name] of LOCK_FILES)
42
+ if (existsSync(join(dir, file)))
43
+ return [name, file];
44
+ if (existsSync(join(dir, "pnpm-workspace.yaml")))
45
+ return ["pnpm", "pnpm-workspace.yaml"];
46
+ return existsSync(join(dir, ".yarnrc.yml")) ? ["yarn", ".yarnrc.yml"] : undefined;
47
+ };
48
+ /**
49
+ * The package manager of a project.
50
+ *
51
+ * @param projectDir - the project's folder, absolute.
52
+ * @returns the one its files name; npm when none does.
53
+ */
54
+ export const detectPackageManager = (projectDir) => {
55
+ let dir = projectDir;
56
+ while (true) {
57
+ const found = dir === projectDir || isWorkspace(dir) ? managerIn(dir) : undefined;
58
+ if (found !== undefined)
59
+ return {
60
+ name: found[0],
61
+ detectedFrom: VITE_PATHS.normalize(relative(projectDir, join(dir, found[1])))
62
+ };
63
+ const parent = dirname(dir);
64
+ if (parent === dir || existsSync(join(dir, ".git")))
65
+ return { name: "npm", detectedFrom: undefined };
66
+ dir = parent;
67
+ }
68
+ };
69
+ /**
70
+ * What a package manager must be told to add a package at a workspace's root: pnpm and Yarn 1 stop otherwise. Yarn 2 and
71
+ * later have no such flag, and keep a `.yarnrc.yml`.
72
+ *
73
+ * @param name - the package manager.
74
+ * @param dir - the folder the command runs in.
75
+ */
76
+ export const workspaceRootFlags = (name, dir) => {
77
+ if (!isWorkspace(dir))
78
+ return [];
79
+ if (name === "pnpm")
80
+ return ["--workspace-root"];
81
+ const isClassicYarn = name === "yarn" &&
82
+ !existsSync(join(dir, ".yarnrc.yml")) &&
83
+ !/"packageManager"\s*:\s*"yarn@[2-9]/.test(manifestText(dir));
84
+ return isClassicYarn ? ["-W"] : [];
85
+ };
86
+ /**
87
+ * The arguments that add packages for development, or install what is declared when there are none to add.
88
+ *
89
+ * @param name - the package manager.
90
+ * @param packages - the packages to add.
91
+ * @param rootFlags - what it must be told at a workspace's root (`workspaceRootFlags`).
92
+ */
93
+ export const installArguments = (name, packages, rootFlags) => {
94
+ if (packages.length === 0)
95
+ return ["install"];
96
+ if (name === "npm")
97
+ return ["install", "--save-dev", ...packages];
98
+ return ["add", name === "pnpm" ? "--save-dev" : "--dev", ...rootFlags, ...packages];
99
+ };
100
+ /**
101
+ * How a project's package manager runs the `forgebook` it installed.
102
+ *
103
+ * @param name - the package manager.
104
+ */
105
+ export const forgebookRunner = (name) => ({ npm: "npx forgebook", pnpm: "pnpm exec forgebook", yarn: "yarn forgebook", bun: "bunx forgebook" })[name];
106
+ /**
107
+ * A package manager's command as a process starts it: on Windows it is a `.cmd`, which only a shell starts. The shell is
108
+ * named by its full path, and told not to look in the current folder first, or a project's own `npm.cmd` would run.
109
+ *
110
+ * @param name - the package manager.
111
+ * @param args - its arguments: names from Forgebook's own tables, so nothing a shell would read.
112
+ * @param env - the environment it runs in.
113
+ * @param platform - the system; the running one unless a test names another.
114
+ */
115
+ export const spawnedCommand = (name, args, env, platform = process.platform) => platform === "win32"
116
+ ? {
117
+ program: env["ComSpec"] ?? "cmd.exe",
118
+ args: ["/d", "/s", "/c", name, ...args],
119
+ env: { ...env, NoDefaultCurrentDirectoryInExePath: "1" }
120
+ }
121
+ : { program: name, args, env };
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Whether a path or a specifier names a style sheet: what a page or `angular.json` says is one is not taken on trust, as
3
+ * a preview's import of it would run a script.
4
+ *
5
+ * @param specifier - the path or the specifier.
6
+ */
7
+ export declare const isStyleSheet: (specifier: string) => boolean;
8
+ /**
9
+ * The style sheets a script loads for everything it draws: `import "./x.css"`, not `import styles from "./x.module.css"`,
10
+ * whose classes belong to that file.
11
+ *
12
+ * @param text - the script, or the script block of a `.svelte` or `.vue` file.
13
+ */
14
+ export declare const styleSheetImports: (text: string) => readonly string[];
15
+ /**
16
+ * The components an entry's markup wraps the app in, in JSX or in a Svelte file: the tags that close.
17
+ *
18
+ * @param text - the file's text.
19
+ */
20
+ export declare const markupWrappers: (text: string) => readonly string[];
21
+ /**
22
+ * What a Vue entry installs on the app: `app.use(router)`, `createApp(App).use(createPinia())`.
23
+ *
24
+ * @param text - the file's text.
25
+ */
26
+ export declare const vueInstalls: (text: string) => readonly string[];
27
+ /**
28
+ * What an Angular entry or its `app.config` provides: `provideRouter(routes)`.
29
+ *
30
+ * @param text - the file's text.
31
+ */
32
+ export declare const angularProviders: (text: string) => readonly string[];
33
+ /** What a page's HTML says. */
34
+ export type PageFacts = {
35
+ /** The local scripts it starts, as written. */
36
+ readonly scripts: readonly string[];
37
+ /** The local style sheets it links, as written. */
38
+ readonly styleSheets: readonly string[];
39
+ /** The remote addresses its links load (a font's, a CDN's style sheet). */
40
+ readonly remoteLinks: readonly string[];
41
+ /** The ids in its body. */
42
+ readonly bodyIds: readonly string[];
43
+ };
44
+ /**
45
+ * The ids in a page's body, or in all of a text that has none (a layout's markup with no `<body>` of its own).
46
+ *
47
+ * @param html - the page or the markup.
48
+ */
49
+ export declare const bodyIds: (html: string) => readonly string[];
50
+ /**
51
+ * What a page's HTML says about the app it starts.
52
+ *
53
+ * @param html - the page.
54
+ */
55
+ export declare const pageFacts: (page: string) => PageFacts;
56
+ /**
57
+ * The global style sheets of an Angular project: the first project's build `styles` in `angular.json`, those that are
58
+ * injected only. The builder's option is the one place Angular names them.
59
+ *
60
+ * @param parsed - `angular.json`, parsed.
61
+ */
62
+ export declare const angularStyles: (parsed: unknown) => readonly string[];
@@ -0,0 +1,191 @@
1
+ /**
2
+ * What an application's entry files say about how it is drawn, read from their text: the global style sheets, what wraps
3
+ * the app, the elements beside its root and what its page's head links to.
4
+ *
5
+ * @remarks
6
+ * Pure: text in, names out. Regular expressions instead of a parser because the entries are TSX, Vue, Svelte, HTML and
7
+ * JSON alike, and a name missed here costs one line less in a report the person reads, never a wrong file: only a style
8
+ * sheet is acted on, and `projectLook.ts` checks it before it is written. A wrapper is told from a leaf by its closing tag, so a layout's
9
+ * `<Header />` is not reported as something a story needs.
10
+ *
11
+ * @module
12
+ */
13
+ /** The extensions of a style sheet Vite compiles. */
14
+ const STYLE_SHEET = /\.(?:css|scss|sass|less|styl|stylus|pcss|postcss)$/;
15
+ /**
16
+ * Whether a path or a specifier names a style sheet: what a page or `angular.json` says is one is not taken on trust, as
17
+ * a preview's import of it would run a script.
18
+ *
19
+ * @param specifier - the path or the specifier.
20
+ */
21
+ export const isStyleSheet = (specifier) => STYLE_SHEET.test(specifier);
22
+ /**
23
+ * A script's lines outside block comments that start their line, so a commented-out import is not read as a live one. A
24
+ * `/*` inside a line is left alone: it is as likely a glob in a string.
25
+ */
26
+ const liveLines = (text) => {
27
+ let isInComment = false;
28
+ const lines = [];
29
+ for (const line of text.split("\n")) {
30
+ const trimmed = line.trimStart();
31
+ if (isInComment)
32
+ isInComment = !line.includes("*/") && !line.includes("-->");
33
+ else if (trimmed.startsWith("/*"))
34
+ isInComment = !line.includes("*/");
35
+ else if (trimmed.startsWith("<!--"))
36
+ isInComment = !line.includes("-->");
37
+ else
38
+ lines.push(line);
39
+ }
40
+ return lines.join("\n");
41
+ };
42
+ /** A page without its comments: found by position, so an unclosed one costs one pass. */
43
+ const withoutHtmlComments = (html) => {
44
+ let kept = "";
45
+ let position = 0;
46
+ while (position < html.length) {
47
+ const start = html.indexOf("<!--", position);
48
+ if (start === -1)
49
+ return kept + html.slice(position);
50
+ kept += html.slice(position, start);
51
+ const end = html.indexOf("-->", start + 4);
52
+ if (end === -1)
53
+ return kept;
54
+ position = end + 3;
55
+ }
56
+ return kept;
57
+ };
58
+ /** A statement that only loads a module: `import "./index.css";`, at the start of a line so a comment's is left out. */
59
+ const BARE_IMPORT = /^[ \t]*import\s+["']([^"'\n]+)["']/gm;
60
+ /** The wrappers that change nothing a story needs: React's and Solid's own, and the app itself. */
61
+ const NEUTRAL_WRAPPERS = new Set([
62
+ "App",
63
+ "StrictMode",
64
+ "Suspense",
65
+ "Fragment",
66
+ "React.StrictMode",
67
+ "React.Suspense",
68
+ "React.Fragment"
69
+ ]);
70
+ /** What Angular's bootstrap provides that a story gets anyway or does not notice. */
71
+ const NEUTRAL_PROVIDERS = new Set([
72
+ "provideBrowserGlobalErrorListeners",
73
+ "provideClientHydration",
74
+ "provideZoneChangeDetection",
75
+ "provideZonelessChangeDetection"
76
+ ]);
77
+ /**
78
+ * The style sheets a script loads for everything it draws: `import "./x.css"`, not `import styles from "./x.module.css"`,
79
+ * whose classes belong to that file.
80
+ *
81
+ * @param text - the script, or the script block of a `.svelte` or `.vue` file.
82
+ */
83
+ export const styleSheetImports = (text) => [...liveLines(text).matchAll(BARE_IMPORT)].flatMap((match) => {
84
+ const specifier = match[1] ?? "";
85
+ return STYLE_SHEET.test(specifier) ? [specifier] : [];
86
+ });
87
+ /**
88
+ * The components an entry's markup wraps the app in, in JSX or in a Svelte file: the tags that close.
89
+ *
90
+ * @param text - the file's text.
91
+ */
92
+ export const markupWrappers = (text) => [
93
+ ...new Set([...text.matchAll(/<\/([A-Z][\w.]*)\s*>/g)]
94
+ .map((match) => match[1] ?? "")
95
+ .filter((name) => !NEUTRAL_WRAPPERS.has(name)))
96
+ ];
97
+ /**
98
+ * What a Vue entry installs on the app: `app.use(router)`, `createApp(App).use(createPinia())`.
99
+ *
100
+ * @param text - the file's text.
101
+ */
102
+ export const vueInstalls = (text) => [
103
+ ...new Set([...text.matchAll(/\.use\(\s*([A-Za-z_$][\w$.]*)/g)].map((match) => match[1] ?? ""))
104
+ ];
105
+ /**
106
+ * What an Angular entry or its `app.config` provides: `provideRouter(routes)`.
107
+ *
108
+ * @param text - the file's text.
109
+ */
110
+ export const angularProviders = (text) => [
111
+ ...new Set([...text.matchAll(/\b(provide[A-Z]\w*)\(/g)]
112
+ .map((match) => match[1] ?? "")
113
+ .filter((name) => !NEUTRAL_PROVIDERS.has(name)))
114
+ ];
115
+ /** One attribute of a tag's text. */
116
+ const attribute = (tag, name) => tag.match(new RegExp(`\\b${name}=["']([^"']*)["']`))?.[1];
117
+ /** A page's `<link>` and `<script>` tags as text. */
118
+ const tags = (html, name) =>
119
+ // no `<` inside a tag, so a page full of unclosed tags stays linear
120
+ [...html.matchAll(new RegExp(`<${name}\\b[^<>]*>`, "g"))].map((match) => match[0]);
121
+ /** Whether an address leaves the project (`https://…`, `//…`, `data:…`). */
122
+ const isRemote = (address) => /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i.test(address);
123
+ /** An address fit to name in a report: a web address, with nothing a sentence could hide in it. */
124
+ const isWebAddress = (address) => /^(?:https?:)?\/\/[^\s<>"'`]+$/i.test(address);
125
+ /**
126
+ * The ids in a page's body, or in all of a text that has none (a layout's markup with no `<body>` of its own).
127
+ *
128
+ * @param html - the page or the markup.
129
+ */
130
+ export const bodyIds = (html) => {
131
+ const start = html.search(/<body\b/i);
132
+ const ids = [...(start === -1 ? html : html.slice(start)).matchAll(/\bid=["']([\w-]+)["']/g)];
133
+ return ids.map((match) => match[1] ?? "");
134
+ };
135
+ /**
136
+ * What a page's HTML says about the app it starts.
137
+ *
138
+ * @param html - the page.
139
+ */
140
+ export const pageFacts = (page) => {
141
+ const html = withoutHtmlComments(page);
142
+ const links = tags(html, "link");
143
+ const addresses = links.flatMap((tag) => {
144
+ const href = attribute(tag, "href");
145
+ return href === undefined ? [] : [{ href, rel: attribute(tag, "rel") ?? "" }];
146
+ });
147
+ return {
148
+ scripts: tags(html, "script").flatMap((tag) => {
149
+ const source = attribute(tag, "src");
150
+ return source === undefined || isRemote(source) ? [] : [source];
151
+ }),
152
+ styleSheets: addresses.flatMap(({ href, rel }) => rel === "stylesheet" && !isRemote(href) ? [href] : []),
153
+ remoteLinks: addresses.flatMap(({ href, rel }) => isWebAddress(href) && (rel === "stylesheet" || rel === "preload") ? [href] : []),
154
+ bodyIds: bodyIds(html)
155
+ };
156
+ };
157
+ /**
158
+ * The global style sheets of an Angular project: the first project's build `styles` in `angular.json`, those that are
159
+ * injected only. The builder's option is the one place Angular names them.
160
+ *
161
+ * @param parsed - `angular.json`, parsed.
162
+ */
163
+ export const angularStyles = (parsed) => {
164
+ const projects = recordAt(parsed, "projects");
165
+ const all = Object.values(projects ?? {});
166
+ // a workspace may list a library first: the app's styles are the ones its stories miss
167
+ const project = all.find((each) => recordField(each, "projectType") === "application") ?? all[0];
168
+ const targets = recordAt(project, "architect") ?? recordAt(project, "targets");
169
+ const styles = recordAt(recordAt(targets, "build"), "options")?.["styles"];
170
+ if (!Array.isArray(styles))
171
+ return [];
172
+ return styles.flatMap((style) => {
173
+ if (typeof style === "string")
174
+ return [style];
175
+ const input = recordAt({ style }, "style");
176
+ return input?.["inject"] !== false && typeof input?.["input"] === "string" ? [input["input"]] : [];
177
+ });
178
+ };
179
+ /** A field of a value, whatever it holds. */
180
+ const recordField = (value, name) => typeof value === "object" && value !== null
181
+ ? Object.entries(value).find(([key]) => key === name)?.[1]
182
+ : undefined;
183
+ /** A field of a value, when both are plain objects. */
184
+ const recordAt = (value, name) => {
185
+ if (typeof value !== "object" || value === null || !(name in value))
186
+ return undefined;
187
+ const field = Object.entries(value).find(([key]) => key === name)?.[1];
188
+ if (typeof field !== "object" || field === null || Array.isArray(field))
189
+ return undefined;
190
+ return Object.fromEntries(Object.entries(field));
191
+ };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The frameworks `forgebook init` can start a catalogue for, and which one a project's `package.json` says it is on.
3
+ *
4
+ * @remarks
5
+ * Detection reads declared packages only, never the code: a design system lists its framework as a peer, so peers count
6
+ * too. A framework built on another (Next.js on React) takes its place, so a Next.js project is never asked to choose;
7
+ * two that stand on their own (React and Lit) are a question only the project can answer, so the command stops and
8
+ * names both instead of guessing. An adapter already declared settles it first: Forgebook's shell makes every project
9
+ * declare React beside Vue, say, once the install command has run, and that must not read as two frameworks. The peer floors repeat the adapters' `package.json` because the adapter is usually not
10
+ * installed yet when they are read; a test keeps the two equal.
11
+ *
12
+ * @module
13
+ */
14
+ import type { ImportedFramework } from "../importers/storybookFrameworks.ts";
15
+ /** What `forgebook init` knows of a framework. */
16
+ export type ProjectFramework = {
17
+ /** Its name, for a person. */
18
+ readonly label: string;
19
+ /** The packages whose presence says a project is on it; none for a framework never detected. */
20
+ readonly markers: readonly string[];
21
+ /** The frameworks it is built on, which it takes the place of. */
22
+ readonly builtOn: readonly ImportedFramework[];
23
+ /** The packages its adapter asks the project for, each with the lowest version it takes. */
24
+ readonly peers: Readonly<Record<string, string>>;
25
+ /** The extension of the story files `forgebook new` writes for it. */
26
+ readonly storyExtension: "ts" | "tsx";
27
+ /** The folders components are usually in, in the order a title is best made from. */
28
+ readonly sourceFolders: readonly string[];
29
+ };
30
+ /** The packages `forgebook` itself asks the project for: its shell is React. Vite is its own. */
31
+ export declare const FORGEBOOK_PEERS: Readonly<Record<string, string>>;
32
+ /** The names `--framework` takes, the order of the supported list. */
33
+ export declare const FRAMEWORK_NAMES: readonly ImportedFramework[];
34
+ /** Every framework, by its adapter's name. */
35
+ export declare const PROJECT_FRAMEWORKS: Readonly<Record<ImportedFramework, ProjectFramework>>;
36
+ /** What a project's dependencies say about its framework. */
37
+ export type FrameworkDetection =
38
+ /** One framework. */
39
+ {
40
+ readonly kind: "found";
41
+ readonly framework: ImportedFramework;
42
+ }
43
+ /** None Forgebook knows. */
44
+ | {
45
+ readonly kind: "unknown";
46
+ }
47
+ /** Several that stand on their own. */
48
+ | {
49
+ readonly kind: "ambiguous";
50
+ readonly candidates: readonly ImportedFramework[];
51
+ };
52
+ /**
53
+ * The framework a project is on.
54
+ *
55
+ * @param declared - the packages it declares, with their versions as written.
56
+ */
57
+ export declare const detectFramework: (declared: ReadonlyMap<string, string>) => FrameworkDetection;