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
@@ -13,9 +13,13 @@
13
13
  *
14
14
  * @module
15
15
  */
16
+ import { existsSync, readFileSync, realpathSync } from "node:fs";
17
+ import { STORY_FILE } from "./autoTitle.js";
16
18
  import { PLAY_TOOLS_PACKAGES } from "./configFile.js";
17
19
  import { hasPluginViews, PLUGIN_HOSTS_MODULE, WRITTEN_HOME_MODULE } from "./pages.js";
18
20
  import { pluginModules } from "./pluginConfig.js";
21
+ import { REFS_MODULE } from "./refsConfig.js";
22
+ import { INSTALLED, parsedScript, SCRIPT } from "./scriptProblems.js";
19
23
  import { VITE_PATHS } from "./vitePaths.js";
20
24
  /** What the shell and the frame import in the browser from the project's packages (React is a peer of the core). */
21
25
  const CORE_BROWSER_DEPENDENCIES = [
@@ -40,6 +44,7 @@ export const prebundled = (config, resolve) => {
40
44
  // imported on first use, so the scanner never sees it: named, or the first home would wait for the optimizer
41
45
  ...(config.home === undefined ? [] : [WRITTEN_HOME_MODULE]),
42
46
  ...(hasPluginViews(config) ? [PLUGIN_HOSTS_MODULE] : []),
47
+ ...(config.refs.length === 0 ? [] : [REFS_MODULE]),
43
48
  config.framework.pages.frame,
44
49
  config.framework.pages.code,
45
50
  ...pluginModules(config.plugins, config.framework.name)
@@ -90,3 +95,78 @@ export const scannedEntries = (config, resolve, readText) => {
90
95
  // `!` patterns stay as they are, which Vite's scanner reads as fast-glob does, from the same folder
91
96
  return [...config.stories, ...fromSources, ...config.previews];
92
97
  };
98
+ /**
99
+ * What the scan reads for one of the project's scripts: nothing in its place when it parses (the scan reads it), the
100
+ * same text read as JSX when only JSX makes a `.js` file parse, and its imports alone when it does not parse at all,
101
+ * which the parser still finds, so their packages are pre-bundled with the rest.
102
+ *
103
+ * @param file - the script's path; its extension decides TypeScript and JSX.
104
+ * @param text - its source.
105
+ * @returns the module to scan, or none to let the scan read the file, and why the file does not parse.
106
+ */
107
+ export const scannedScript = (file, text) => {
108
+ const { imports, isJsx, problem } = parsedScript(file, text);
109
+ if (isJsx)
110
+ return { module: { code: text, moduleType: "jsx" }, problem };
111
+ if (problem === undefined)
112
+ return { module: undefined, problem };
113
+ const code = imports.map((name) => `import ${JSON.stringify(name)};`).join("\n");
114
+ return { module: { code, moduleType: "js" }, problem };
115
+ };
116
+ /**
117
+ * Whether the scan reads a script here rather than leave it to the scanner: a quick scan reads the story files alone,
118
+ * whose problems the catalogue names as they are edited, and an id that names no file (a plugin's own module) is not
119
+ * the scan's to answer.
120
+ *
121
+ * @param id - the module's id.
122
+ * @param isQuick - whether the scan is a quick one (`ScanFindings.isQuick`).
123
+ */
124
+ const isReadHere = (id, isQuick) => (!isQuick || STORY_FILE.test(id)) && existsSync(id);
125
+ /**
126
+ * The warnings this process wrote: a first start's pre-bundling scans again after leaving out an import it could not
127
+ * resolve (`prebundleRun.ts`), and a file is named once.
128
+ */
129
+ const WARNED = new Set();
130
+ /**
131
+ * Keeps Vite's dependency scan going past one of the project's scripts that does not parse, a story file or a
132
+ * component, and reads a `.js` file holding JSX as JSX. One such file otherwise stops the scan, and with it the
133
+ * pre-bundling of every other story's packages, and fills the log with the scanner's stack; the pages then reload as
134
+ * each package is found. A script that does not parse is read as its imports alone: a story file is named by the
135
+ * catalogue itself (`storyFilesModule.ts`), any other is kept among the index's problems (`scriptProblems.ts`) and
136
+ * named by one warning with its place. The texts are read here on the scan only: a start that keeps its pre-bundled
137
+ * packages does not scan.
138
+ *
139
+ * @param findings - the catalogue's folder, where warnings and problems go, and whether `.js` is read as JSX.
140
+ */
141
+ export const scanOptions = (findings = {}) => {
142
+ // the scan names files by their real path: a folder reached through a link (`/tmp` on macOS) would not prefix them
143
+ const root = findings.root === undefined || !existsSync(findings.root) ? undefined : realpathSync(findings.root);
144
+ return {
145
+ ...(findings.isJsxInScripts === true ? { moduleTypes: { ".js": "jsx", ".mjs": "jsx" } } : {}),
146
+ plugins: [
147
+ {
148
+ name: "forgebook:scan-scripts",
149
+ load: {
150
+ filter: { id: { include: SCRIPT, exclude: INSTALLED } },
151
+ handler: (id) => {
152
+ if (!isReadHere(id, findings.isQuick === true))
153
+ return null;
154
+ const file = VITE_PATHS.normalize(id);
155
+ const { module, problem } = scannedScript(file, readFileSync(id, "utf8"));
156
+ if (STORY_FILE.test(id))
157
+ return module ?? null;
158
+ findings.scanned?.(file, problem);
159
+ if (problem !== undefined) {
160
+ const shown = root === undefined ? file : VITE_PATHS.relative(root, file);
161
+ const line = `The dependency scan skipped ${problem.replace(file, shown)}`;
162
+ if (!WARNED.has(line))
163
+ findings.warn?.(line);
164
+ WARNED.add(line);
165
+ }
166
+ return module ?? null;
167
+ }
168
+ }
169
+ }
170
+ ]
171
+ };
172
+ };
@@ -0,0 +1,25 @@
1
+ import type { IndexedStoryFile } from "./storyFilesModule.ts";
2
+ /**
3
+ * The tags a preview's text writes: none when it writes none, or none plainly.
4
+ *
5
+ * @param file - the preview's path, for the parser's language.
6
+ * @param text - its text.
7
+ */
8
+ export declare const tagsOfPreviewText: (file: string, text: string) => readonly string[];
9
+ /**
10
+ * The tags of a catalogue's previews, the first preview's under the next's.
11
+ *
12
+ * @param config - the catalogue, with its previews' paths, the presets' first; none has no previews.
13
+ * @param watch - adds a file whose edit renews the module that reads them.
14
+ */
15
+ export declare const previewTagsOf: (config: {
16
+ readonly previews: readonly string[];
17
+ } | undefined, watch: (file: string) => void) => readonly string[];
18
+ /**
19
+ * Story files with a preview's tags under each story's own, and under the meta's: a preview that marks every story
20
+ * marks every component.
21
+ *
22
+ * @param files - the story files, indexed.
23
+ * @param tags - the previews' tags.
24
+ */
25
+ export declare const withPreviewTags: (files: readonly IndexedStoryFile[], tags: readonly string[]) => readonly IndexedStoryFile[];
@@ -0,0 +1,56 @@
1
+ /**
2
+ * The tags a preview gives every story (`tags` in `forgebook.preview.ts`), read from its text as a story file's are, so
3
+ * the list of stories needs no preview run.
4
+ *
5
+ * @remarks
6
+ * CSF puts them under a meta's and a story's, whose `!name` takes one away. The story index is kept between starts per
7
+ * file, so they join each story when the group's module is written, not in the kept index. Only tags written plainly
8
+ * count, as in a story file. Pure, but for reading the files.
9
+ *
10
+ * @module
11
+ */
12
+ import { readFileSync } from "node:fs";
13
+ import { objectFields, stringListOf } from "./indexFields.js";
14
+ import { combinedTags, storyFileMeta } from "./indexStoryFile.js";
15
+ import { parseStoryFile } from "./storyParse.js";
16
+ /**
17
+ * The tags a preview's text writes: none when it writes none, or none plainly.
18
+ *
19
+ * @param file - the preview's path, for the parser's language.
20
+ * @param text - its text.
21
+ */
22
+ export const tagsOfPreviewText = (file, text) => {
23
+ const meta = storyFileMeta(parseStoryFile(file, text).program);
24
+ const tags = meta === undefined ? undefined : stringListOf(objectFields(meta), "tags");
25
+ return tags === undefined || tags instanceof Error ? [] : tags;
26
+ };
27
+ /**
28
+ * The tags of a catalogue's previews, the first preview's under the next's.
29
+ *
30
+ * @param config - the catalogue, with its previews' paths, the presets' first; none has no previews.
31
+ * @param watch - adds a file whose edit renews the module that reads them.
32
+ */
33
+ export const previewTagsOf = (config, watch) => combinedTags((config?.previews ?? []).map((file) => {
34
+ watch(file);
35
+ return tagsOfPreviewText(file, readFileSync(file, "utf8"));
36
+ }));
37
+ /**
38
+ * Story files with a preview's tags under each story's own, and under the meta's: a preview that marks every story
39
+ * marks every component.
40
+ *
41
+ * @param files - the story files, indexed.
42
+ * @param tags - the previews' tags.
43
+ */
44
+ export const withPreviewTags = (files, tags) => tags.length === 0
45
+ ? files
46
+ : files.map((file) => ({
47
+ ...file,
48
+ index: {
49
+ ...file.index,
50
+ tags: combinedTags([tags, file.index.tags]),
51
+ stories: file.index.stories.map((story) => ({
52
+ ...story,
53
+ tags: combinedTags([tags, story.tags])
54
+ }))
55
+ }
56
+ }));
@@ -0,0 +1,54 @@
1
+ /** A file of a project. */
2
+ export type ProjectFile = {
3
+ /** Its path, relative to the folder asked about. */
4
+ readonly file: string;
5
+ /** Its text. */
6
+ readonly text: string;
7
+ };
8
+ /** A package of a repository. */
9
+ export type WorkspacePackage = {
10
+ /** Its name; empty for none. */
11
+ readonly name: string;
12
+ /** Its folder, from the repository; empty for its root. */
13
+ readonly dir: string;
14
+ /** The packages it depends on, by name. */
15
+ readonly dependsOn: readonly string[];
16
+ };
17
+ /** What git is asked for. */
18
+ export declare const UI_PATTERNS: readonly string[];
19
+ /** Past this much text a report stops reading, rather than run out of memory on what no one wrote by hand. */
20
+ export declare const MOST_BYTES = 200000000;
21
+ /**
22
+ * The project's files inside its repository, relative to its folder, without reading them.
23
+ *
24
+ * @param dir - its folder.
25
+ * @param notes - told of what is left out.
26
+ */
27
+ export declare const listedProjectFiles: (dir: string, notes: string[]) => string[];
28
+ /**
29
+ * Reads a project's files.
30
+ *
31
+ * @param dir - its folder.
32
+ * @param notes - told of what is left out.
33
+ */
34
+ export declare const projectFiles: (dir: string, notes: string[]) => ProjectFile[];
35
+ /** A project's files and its scripts, read under one bound of files and bytes. */
36
+ export type FilesAndScripts = {
37
+ /** Its styles and components, as {@link projectFiles} reads them. */
38
+ readonly files: readonly ProjectFile[];
39
+ /** Its scripts, read with what room the files left. */
40
+ readonly scripts: readonly ProjectFile[];
41
+ };
42
+ /**
43
+ * Reads a project's files and then its scripts, the two together held to the bounds {@link projectFiles} keeps alone.
44
+ *
45
+ * @param dir - its folder.
46
+ * @param notes - told of what is left out.
47
+ */
48
+ export declare const projectFilesAndScripts: (dir: string, notes: string[]) => FilesAndScripts;
49
+ /**
50
+ * The packages of a repository, from their manifests, read and not run.
51
+ *
52
+ * @param root - the repository.
53
+ */
54
+ export declare const workspacePackages: (root: string) => WorkspacePackage[];
@@ -0,0 +1,116 @@
1
+ /**
2
+ * The files of a project a static reading takes: its styles and components, what git knows of them, inside the repository.
3
+ *
4
+ * @remarks
5
+ * Shared by what reads a whole project without a catalogue (`forgebook audit`) and by `check-code`; the audit also reads
6
+ * the scripts, which import components and hold stories. A tracked link may lead
7
+ * anywhere, and a repository may hold more than memory, so both are bounded here and said in `notes`.
8
+ *
9
+ * @module
10
+ */
11
+ import { join } from "node:path";
12
+ import { listedFiles, repositoryOf, smallFileText } from "./appTokenFiles.js";
13
+ import { isInside } from "./sourceTokens.js";
14
+ /** What git is asked for. */
15
+ export const UI_PATTERNS = [
16
+ "*.css",
17
+ "*.scss",
18
+ "*.sass",
19
+ "*.less",
20
+ "*.tsx",
21
+ "*.jsx",
22
+ "*.vue",
23
+ "*.svelte",
24
+ "*.astro"
25
+ ];
26
+ /** The same, for a file's name. */
27
+ const UI_FILE = /\.(?:css|scss|sass|less|tsx|jsx|vue|svelte|astro)$/;
28
+ /** What is not the project's own code: copies, generated output and what a package brought. */
29
+ const NOT_ITS_CODE = /(?:^|\/)(?:node_modules|dist|build|out|coverage|vendor|vendors|public|static|\.next|\.nuxt|\.svelte-kit|\.astro|\.turbo|storybook-static)\//;
30
+ /** Past this a project's files are not all read, and the report says so. */
31
+ const MOST_FILES = 5000;
32
+ /** Past this much text a report stops reading, rather than run out of memory on what no one wrote by hand. */
33
+ export const MOST_BYTES = 200_000_000;
34
+ /**
35
+ * The project's files inside its repository, relative to its folder, without reading them.
36
+ *
37
+ * @param dir - its folder.
38
+ * @param notes - told of what is left out.
39
+ */
40
+ export const listedProjectFiles = (dir, notes) => {
41
+ const root = repositoryOf(dir);
42
+ const listed = listedFiles(dir, UI_PATTERNS, UI_FILE, NOT_ITS_CODE).filter((file) => !NOT_ITS_CODE.test(file));
43
+ if (listed.length > MOST_FILES)
44
+ notes.push(`${listed.length - MOST_FILES} files past the first ${MOST_FILES} not read`);
45
+ // a tracked link may lead anywhere
46
+ return listed.slice(0, MOST_FILES).filter((file) => isInside(root, join(dir, file)));
47
+ };
48
+ /** Reads listed files, up to the bytes a report reads, and says when it stops. */
49
+ const readFiles = (dir, listed, notes) => {
50
+ let bytes = 0;
51
+ const read = listed.flatMap((file) => {
52
+ const text = bytes > MOST_BYTES ? undefined : smallFileText(join(dir, file));
53
+ bytes += text?.length ?? 0;
54
+ return text === undefined ? [] : [{ file, text }];
55
+ });
56
+ if (bytes > MOST_BYTES)
57
+ notes.push(`files past the first ${MOST_BYTES} bytes not read`);
58
+ return read;
59
+ };
60
+ /**
61
+ * Reads a project's files.
62
+ *
63
+ * @param dir - its folder.
64
+ * @param notes - told of what is left out.
65
+ */
66
+ export const projectFiles = (dir, notes) => readFiles(dir, listedProjectFiles(dir, notes), notes);
67
+ /** The scripts git is asked for: what may import a component or hold a story, with no markup of its own. */
68
+ const SCRIPT_PATTERNS = ["*.ts", "*.mts", "*.cts", "*.js", "*.mjs", "*.cjs"];
69
+ /** The same, for a file's name; a type declaration imports nothing that runs. */
70
+ const SCRIPT_FILE = /(?<!\.d)\.[cm]?[jt]s$/;
71
+ /**
72
+ * Reads a project's files and then its scripts, the two together held to the bounds {@link projectFiles} keeps alone.
73
+ *
74
+ * @param dir - its folder.
75
+ * @param notes - told of what is left out.
76
+ */
77
+ export const projectFilesAndScripts = (dir, notes) => {
78
+ const root = repositoryOf(dir);
79
+ const ui = listedProjectFiles(dir, notes);
80
+ const listed = listedFiles(dir, SCRIPT_PATTERNS, SCRIPT_FILE, NOT_ITS_CODE).filter((file) => SCRIPT_FILE.test(file) && !NOT_ITS_CODE.test(file));
81
+ const room = Math.max(0, MOST_FILES - ui.length);
82
+ if (listed.length > room)
83
+ notes.push(`${listed.length - room} scripts past the first ${MOST_FILES} files not read`);
84
+ const scripts = new Set(listed.slice(0, room).filter((file) => isInside(root, join(dir, file))));
85
+ const read = readFiles(dir, [...ui, ...scripts], notes);
86
+ return {
87
+ files: read.filter(({ file }) => !scripts.has(file)),
88
+ scripts: read.filter(({ file }) => scripts.has(file))
89
+ };
90
+ };
91
+ /**
92
+ * The packages of a repository, from their manifests, read and not run.
93
+ *
94
+ * @param root - the repository.
95
+ */
96
+ export const workspacePackages = (root) => listedFiles(root, ["package.json", "*/package.json"], /^package\.json$/, NOT_ITS_CODE)
97
+ .filter((file) => !NOT_ITS_CODE.test(file))
98
+ .slice(0, MOST_FILES)
99
+ .flatMap((file) => {
100
+ try {
101
+ const parsed = JSON.parse(smallFileText(join(root, file)) ?? "");
102
+ if (typeof parsed !== "object" || parsed === null)
103
+ return [];
104
+ const fields = new Map(Object.entries(parsed));
105
+ const name = fields.get("name");
106
+ const dependsOn = ["dependencies", "devDependencies", "peerDependencies"].flatMap((key) => {
107
+ const list = fields.get(key);
108
+ return typeof list === "object" && list !== null ? Object.keys(list) : [];
109
+ });
110
+ const dir = file === "package.json" ? "" : file.slice(0, -"/package.json".length);
111
+ return [{ name: typeof name === "string" ? name : "", dir, dependsOn }];
112
+ }
113
+ catch {
114
+ return [];
115
+ }
116
+ });
@@ -0,0 +1,70 @@
1
+ /** What PostCSS's `process` gives, as this module reads it. */
2
+ export type Processed = {
3
+ /** The style sheet. */
4
+ readonly css: string;
5
+ /** What the plugins said: among them, the files they read. */
6
+ readonly messages: readonly unknown[];
7
+ };
8
+ /**
9
+ * The files PostCSS's plugins said they read: each `dependency`, and each file of a `dir-dependency`'s glob.
10
+ *
11
+ * @param messages - the messages of PostCSS's result.
12
+ */
13
+ export declare const watchedFiles: (messages: readonly unknown[]) => string[];
14
+ /** Where a project's configuration is. */
15
+ export type PostcssConfigPlace = {
16
+ /** A file of its own. */
17
+ readonly kind: "file";
18
+ /** Its absolute path. */
19
+ readonly file: string;
20
+ } | {
21
+ /** The `postcss` key of a `package.json`. */
22
+ readonly kind: "package";
23
+ /** That file's absolute path. */
24
+ readonly file: string;
25
+ /** What the key holds. */
26
+ readonly config: unknown;
27
+ };
28
+ /**
29
+ * Where a project's PostCSS configuration is, or none: in its folder, else in the ones above it, up to its repository's
30
+ * root.
31
+ *
32
+ * @param dir - the project's folder.
33
+ */
34
+ export declare const postcssConfigPlace: (dir: string) => PostcssConfigPlace | undefined;
35
+ /**
36
+ * The project's PostCSS configuration file, or none.
37
+ *
38
+ * @param dir - the project's folder.
39
+ */
40
+ export declare const postcssConfigFile: (dir: string) => string | undefined;
41
+ /**
42
+ * The plugins a configuration names, each loaded from the project and given its options; one set to `false` is off.
43
+ *
44
+ * @param plugins - the configuration's `plugins`: an object of names and options, or a list.
45
+ * @param load - loads a plugin's package by name.
46
+ */
47
+ export declare const configuredPlugins: (plugins: unknown, load: (name: string) => Promise<unknown>) => Promise<unknown[]>;
48
+ /**
49
+ * A project's PostCSS configuration that could not be loaded, which is a different thing from a sheet it refuses: every
50
+ * sheet would fail alike, so a catalogue goes on without it and says so once.
51
+ */
52
+ export declare class PostcssConfigError extends Error {
53
+ }
54
+ /** Runs the project's PostCSS on a style sheet. */
55
+ export type PostcssRunner = (css: string, file: string) => Promise<Processed>;
56
+ /** What a project's PostCSS is made from, when it is not read from a configuration of its own. */
57
+ export type PostcssOptions = {
58
+ /** A package of the project that brings its own PostCSS and plugins (Next.js does), looked in after the project. */
59
+ readonly bringsPostcss?: string;
60
+ /** The plugins, already made (Vite's `css.postcss`): no file is looked for. */
61
+ readonly plugins?: readonly unknown[];
62
+ };
63
+ /**
64
+ * The project's PostCSS, ready to run: its configuration and plugins loaded on the first style sheet.
65
+ *
66
+ * @param dir - the project's folder.
67
+ * @param options - where else to look, and plugins already made.
68
+ * @returns the runner, or none for a project without a PostCSS configuration.
69
+ */
70
+ export declare const projectPostcss: (dir: string, options?: PostcssOptions) => PostcssRunner | undefined;
@@ -0,0 +1,250 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ /**
10
+ * A project's PostCSS, as its own build runs it on every style sheet: Tailwind CSS (`@tailwindcss/postcss`, or
11
+ * `tailwindcss` before 4), Autoprefixer or any plugin its configuration names.
12
+ *
13
+ * @remarks
14
+ * A catalogue's style sheets go through Lightning CSS (the forced states are a rewrite of it), which leaves PostCSS's
15
+ * configuration unread: what this module makes runs first, so Lightning CSS receives what the app's build would have
16
+ * produced. A configuration is a file exporting `{ plugins }`, the plugins an object of names and options (`false` turns
17
+ * one off) or a list, as PostCSS's loader reads it. Loading one runs the project's code, as its own build does, and
18
+ * nothing loads until the first style sheet asks. The project's folders are searched up to its repository's root, where
19
+ * a workspace keeps the one its packages share. PostCSS itself is the project's, or Vite's own: the catalogue adds none.
20
+ *
21
+ * @module
22
+ */
23
+ import { existsSync, globSync, readFileSync } from "node:fs";
24
+ import { createRequire } from "node:module";
25
+ import { homedir } from "node:os";
26
+ import { dirname, join, resolve } from "node:path";
27
+ import { pathToFileURL } from "node:url";
28
+ import { inlineCssImports } from "./cssImports.js";
29
+ /** The names of a PostCSS configuration, in the order they are read. */
30
+ const CONFIG_FILES = [
31
+ ".postcssrc.json",
32
+ ".postcssrc",
33
+ "postcss.config.json",
34
+ "postcss.config.js",
35
+ "postcss.config.mjs",
36
+ "postcss.config.cjs",
37
+ "postcss.config.ts",
38
+ "postcss.config.mts",
39
+ "postcss.config.cts",
40
+ ".postcssrc.js",
41
+ ".postcssrc.cjs",
42
+ ".postcssrc.mjs",
43
+ ".postcssrc.ts"
44
+ ];
45
+ /** What marks a repository's root: a project's search for a configuration stops there. */
46
+ const ROOT_MARKS = [".git", "pnpm-workspace.yaml"];
47
+ /** Whether a value is a plain object. */
48
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
49
+ /** Whether a value is PostCSS's function. */
50
+ const isPostCss = (value) => typeof value === "function";
51
+ /**
52
+ * The files PostCSS's plugins said they read: each `dependency`, and each file of a `dir-dependency`'s glob.
53
+ *
54
+ * @param messages - the messages of PostCSS's result.
55
+ */
56
+ export const watchedFiles = (messages) => messages.flatMap((message) => {
57
+ if (!isRecord(message))
58
+ return [];
59
+ if (message["type"] === "dependency" && typeof message["file"] === "string")
60
+ return [message["file"]];
61
+ if (message["type"] !== "dir-dependency" || typeof message["dir"] !== "string")
62
+ return [];
63
+ const { dir } = message;
64
+ const glob = typeof message["glob"] === "string" ? message["glob"] : "**/*";
65
+ return globSync(glob, { cwd: dir, exclude: ["**/node_modules/**"] }).map((file) => resolve(dir, file));
66
+ });
67
+ /** The configuration in `package.json`'s `postcss`, or none. */
68
+ const packageConfig = (dir) => {
69
+ const file = join(dir, "package.json");
70
+ if (!existsSync(file))
71
+ return undefined;
72
+ try {
73
+ const manifest = JSON.parse(readFileSync(file, "utf8"));
74
+ return isRecord(manifest) ? manifest["postcss"] : undefined;
75
+ }
76
+ catch {
77
+ return undefined;
78
+ }
79
+ };
80
+ /**
81
+ * Where a project's PostCSS configuration is, or none: in its folder, else in the ones above it, up to its repository's
82
+ * root.
83
+ *
84
+ * @param dir - the project's folder.
85
+ */
86
+ export const postcssConfigPlace = (dir) => {
87
+ let current = resolve(dir);
88
+ while (true) {
89
+ const file = CONFIG_FILES.map((name) => join(current, name)).find((path) => existsSync(path));
90
+ if (file !== undefined)
91
+ return { kind: "file", file };
92
+ const config = packageConfig(current);
93
+ if (config !== undefined)
94
+ return { kind: "package", file: join(current, "package.json"), config };
95
+ const parent = dirname(current);
96
+ const isLast = current === homedir() || ROOT_MARKS.some((mark) => existsSync(join(current, mark)));
97
+ if (parent === current || isLast)
98
+ return undefined;
99
+ current = parent;
100
+ }
101
+ };
102
+ /**
103
+ * The project's PostCSS configuration file, or none.
104
+ *
105
+ * @param dir - the project's folder.
106
+ */
107
+ export const postcssConfigFile = (dir) => postcssConfigPlace(dir)?.file;
108
+ /**
109
+ * The entries of a configuration's `plugins`: each plugin (a name, or a plugin already made) with its options.
110
+ *
111
+ * @param plugins - an object of names and options, or a list of names, `[name, options]` pairs and plugins.
112
+ */
113
+ const pluginEntries = (plugins) => {
114
+ if (isRecord(plugins))
115
+ return Object.entries(plugins);
116
+ if (!Array.isArray(plugins))
117
+ return [];
118
+ return plugins.map((plugin) => Array.isArray(plugin) ? [plugin[0], plugin[1]] : [plugin, undefined]);
119
+ };
120
+ /**
121
+ * A plugin made from its package: its factory called with its options (none for `true` or nothing).
122
+ *
123
+ * @param module - the package, loaded.
124
+ * @param options - the plugin's options.
125
+ */
126
+ const madePlugin = (module, options) => {
127
+ const factory = isRecord(module) && "default" in module ? module["default"] : module;
128
+ if (typeof factory !== "function")
129
+ return factory;
130
+ return Reflect.apply(factory, undefined, options === undefined || options === true ? [] : [options]);
131
+ };
132
+ /**
133
+ * The plugins a configuration names, each loaded from the project and given its options; one set to `false` is off.
134
+ *
135
+ * @param plugins - the configuration's `plugins`: an object of names and options, or a list.
136
+ * @param load - loads a plugin's package by name.
137
+ */
138
+ export const configuredPlugins = async (plugins, load) => {
139
+ const loaded = [];
140
+ for (const [plugin, options] of pluginEntries(plugins)) {
141
+ if (options === false)
142
+ continue;
143
+ loaded.push(typeof plugin === "string" ? madePlugin(await load(plugin), options) : plugin);
144
+ }
145
+ return loaded;
146
+ };
147
+ /**
148
+ * A module loaded as Node loads it, from the first of the places that has it.
149
+ *
150
+ * @param dirs - the folders to resolve it from, in order.
151
+ * @param name - the package.
152
+ */
153
+ const moduleFrom = async (dirs, name) => {
154
+ let failure;
155
+ for (const dir of dirs) {
156
+ try {
157
+ return await import(__rewriteRelativeImportExtension(pathToFileURL(createRequire(join(dir, "package.json")).resolve(name)).href));
158
+ }
159
+ catch (error) {
160
+ failure ??= error;
161
+ }
162
+ }
163
+ throw failure;
164
+ };
165
+ /**
166
+ * A configuration file, loaded.
167
+ *
168
+ * @param file - its file.
169
+ */
170
+ const loadConfig = async (file) => {
171
+ if (file.endsWith(".json") || file.endsWith(".postcssrc"))
172
+ return JSON.parse(readFileSync(file, "utf8"));
173
+ const module = await import(__rewriteRelativeImportExtension(pathToFileURL(file).href));
174
+ return isRecord(module) && "default" in module ? module["default"] : module;
175
+ };
176
+ /**
177
+ * The folder of a package a project has, to resolve what it brings from there; none when it has none.
178
+ *
179
+ * @param dir - the project's folder.
180
+ * @param name - the package.
181
+ */
182
+ const packageFolder = (dir, name) => {
183
+ try {
184
+ return dirname(createRequire(join(dir, "package.json")).resolve(`${name}/package.json`));
185
+ }
186
+ catch {
187
+ return undefined;
188
+ }
189
+ };
190
+ /** The folder of the Vite this module runs on, whose PostCSS a project without its own uses. */
191
+ const viteFolder = () => packageFolder(import.meta.dirname, "vite");
192
+ /** The `plugins` of a configuration, read from where it is. */
193
+ const pluginsOf = async (place) => {
194
+ if (place === undefined)
195
+ return undefined;
196
+ const loaded = place.kind === "package" ? place.config : await loadConfig(place.file);
197
+ // PostCSS's loader calls a configuration that is a function, with what it runs for
198
+ const config = typeof loaded === "function"
199
+ ? await Reflect.apply(loaded, undefined, [{ cwd: dirname(place.file), env: "development" }])
200
+ : loaded;
201
+ return isRecord(config) ? config["plugins"] : undefined;
202
+ };
203
+ /**
204
+ * A project's PostCSS configuration that could not be loaded, which is a different thing from a sheet it refuses: every
205
+ * sheet would fail alike, so a catalogue goes on without it and says so once.
206
+ */
207
+ export class PostcssConfigError extends Error {
208
+ }
209
+ /**
210
+ * The project's PostCSS, ready to run: its configuration and plugins loaded on the first style sheet.
211
+ *
212
+ * @param dir - the project's folder.
213
+ * @param options - where else to look, and plugins already made.
214
+ * @returns the runner, or none for a project without a PostCSS configuration.
215
+ */
216
+ export const projectPostcss = (dir, options = {}) => {
217
+ const place = options.plugins === undefined ? postcssConfigPlace(dir) : undefined;
218
+ if (options.plugins === undefined && place === undefined)
219
+ return undefined;
220
+ let processor;
221
+ const ready = async () => {
222
+ const brought = options.bringsPostcss === undefined ? undefined : packageFolder(dir, options.bringsPostcss);
223
+ const searched = [
224
+ dir,
225
+ ...(place === undefined ? [] : [dirname(place.file)]),
226
+ ...(brought === undefined ? [] : [brought])
227
+ ];
228
+ const plugins = options.plugins ??
229
+ (await configuredPlugins(await pluginsOf(place), (name) => moduleFrom(searched, name)));
230
+ const vite = viteFolder();
231
+ const module = await moduleFrom([...searched, ...(vite === undefined ? [] : [vite])], "postcss");
232
+ const postcss = isRecord(module) && "default" in module ? module["default"] : module;
233
+ if (!isPostCss(postcss))
234
+ throw new Error(`${place?.file ?? dir} names plugins, and PostCSS could not be loaded to run them`);
235
+ return postcss(plugins);
236
+ };
237
+ return async (css, path) => {
238
+ processor ??= ready().catch((error) => {
239
+ // read again on the next sheet: the configuration may be saved fixed while the server runs
240
+ processor = undefined;
241
+ throw new PostcssConfigError(error instanceof Error ? error.message : String(error));
242
+ });
243
+ const { css: inlined, files } = inlineCssImports(css, path);
244
+ const result = await (await processor).process(inlined, { from: path, to: path });
245
+ return {
246
+ css: result.css,
247
+ messages: [...result.messages, ...files.map((file) => ({ type: "dependency", file }))]
248
+ };
249
+ };
250
+ };