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.
- package/README.md +917 -74
- package/dist/bin/forgebook/agentClient.d.ts +2 -1
- package/dist/bin/forgebook/agentClient.js +13 -6
- package/dist/bin/forgebook/agentGuide.d.ts +59 -0
- package/dist/bin/forgebook/agentGuide.js +203 -0
- package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
- package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
- package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
- package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
- package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
- package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
- package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
- package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
- package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
- package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
- package/dist/bin/forgebook/agentText.d.ts +23 -3
- package/dist/bin/forgebook/agentText.js +175 -28
- package/dist/bin/forgebook/agents.md +20 -191
- package/dist/bin/forgebook/agentsText.js +2 -1
- package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
- package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
- package/dist/bin/forgebook/auditCommand.d.mts +8 -0
- package/dist/bin/forgebook/auditCommand.mjs +75 -0
- package/dist/bin/forgebook/auditRun.d.ts +95 -0
- package/dist/bin/forgebook/auditRun.js +270 -0
- package/dist/bin/forgebook/browserRun.d.ts +21 -0
- package/dist/bin/forgebook/browserRun.js +57 -0
- package/dist/bin/forgebook/buildFailure.d.ts +7 -0
- package/dist/bin/forgebook/buildFailure.js +47 -0
- package/dist/bin/forgebook/buildWatch.d.ts +52 -0
- package/dist/bin/forgebook/buildWatch.js +137 -0
- package/dist/bin/forgebook/builtCatalogue.js +9 -5
- package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
- package/dist/bin/forgebook/catalogueCommands.js +23 -0
- package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
- package/dist/bin/forgebook/catalogueVite.js +14 -6
- package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
- package/dist/bin/forgebook/commandCacheClaim.js +170 -0
- package/dist/bin/forgebook/commandServer.d.ts +8 -0
- package/dist/bin/forgebook/commandServer.js +61 -13
- package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
- package/dist/bin/forgebook/graphCommand.d.mts +8 -0
- package/dist/bin/forgebook/graphCommand.mjs +84 -0
- package/dist/bin/forgebook/guide/commands.md +57 -0
- package/dist/bin/forgebook/guide/devices.md +17 -0
- package/dist/bin/forgebook/guide/docs-pages.md +13 -0
- package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
- package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
- package/dist/bin/forgebook/guide/links.md +29 -0
- package/dist/bin/forgebook/guide/setup.md +23 -0
- package/dist/bin/forgebook/guide/stories.md +90 -0
- package/dist/bin/forgebook/guide/switches.md +43 -0
- package/dist/bin/forgebook/guideCommand.d.mts +13 -0
- package/dist/bin/forgebook/guideCommand.mjs +37 -0
- package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
- package/dist/bin/forgebook/importers/storybook.js +11 -5
- package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
- package/dist/bin/forgebook/initCommands.d.mts +11 -0
- package/dist/bin/forgebook/initCommands.mjs +51 -78
- package/dist/bin/forgebook/initConfig.d.ts +5 -3
- package/dist/bin/forgebook/initConfig.js +6 -3
- package/dist/bin/forgebook/initInstall.d.ts +15 -0
- package/dist/bin/forgebook/initInstall.js +77 -0
- package/dist/bin/forgebook/initPrint.d.ts +9 -0
- package/dist/bin/forgebook/initPrint.js +60 -0
- package/dist/bin/forgebook/initRefusals.d.ts +45 -0
- package/dist/bin/forgebook/initRefusals.js +91 -0
- package/dist/bin/forgebook/initRun.d.ts +28 -0
- package/dist/bin/forgebook/initRun.js +311 -0
- package/dist/bin/forgebook/mcpCommand.mjs +38 -4
- package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
- package/dist/bin/forgebook/mcpGraph.js +24 -0
- package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
- package/dist/bin/forgebook/mcpTokens.js +58 -0
- package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
- package/dist/bin/forgebook/mcpToolParts.js +10 -0
- package/dist/bin/forgebook/mcpTools.d.ts +13 -6
- package/dist/bin/forgebook/mcpTools.js +57 -90
- package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
- package/dist/bin/forgebook/mcpVerify.js +36 -0
- package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
- package/dist/bin/forgebook/migrate/codemods.js +61 -0
- package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
- package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
- package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
- package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
- package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
- package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
- package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
- package/dist/bin/forgebook/migrate/migrateText.js +30 -0
- package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
- package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
- package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
- package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
- package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
- package/dist/bin/forgebook/newProject/newProject.js +180 -0
- package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
- package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
- package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
- package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
- package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
- package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
- package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
- package/dist/bin/forgebook/newProject/projectLook.js +293 -0
- package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
- package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
- package/dist/bin/forgebook/newRepair.d.ts +45 -0
- package/dist/bin/forgebook/newRepair.js +157 -0
- package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
- package/dist/bin/forgebook/newRepairRun.js +148 -0
- package/dist/bin/forgebook/newStories.d.ts +23 -1
- package/dist/bin/forgebook/newStories.js +101 -11
- package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
- package/dist/bin/forgebook/newStoriesFile.js +43 -4
- package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
- package/dist/bin/forgebook/prebundleRun.js +28 -8
- package/dist/bin/forgebook/proofCommand.d.mts +15 -0
- package/dist/bin/forgebook/proofCommand.mjs +212 -0
- package/dist/bin/forgebook/proofRun.d.ts +63 -0
- package/dist/bin/forgebook/proofRun.js +412 -0
- package/dist/bin/forgebook/proofText.d.ts +36 -0
- package/dist/bin/forgebook/proofText.js +131 -0
- package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
- package/dist/bin/forgebook/proofWorkflow.js +205 -0
- package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
- package/dist/bin/forgebook/setArgsTool.js +70 -0
- package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
- package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
- package/dist/bin/forgebook/storyCheckRun.js +83 -9
- package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
- package/dist/bin/forgebook/storyFileIds.js +14 -0
- package/dist/bin/forgebook/stressCases.d.ts +31 -0
- package/dist/bin/forgebook/stressCases.js +79 -0
- package/dist/bin/forgebook/stressRun.d.ts +12 -0
- package/dist/bin/forgebook/stressRun.js +61 -0
- package/dist/bin/forgebook/stressText.d.ts +27 -0
- package/dist/bin/forgebook/stressText.js +46 -0
- package/dist/bin/forgebook/verifyBase.d.ts +45 -0
- package/dist/bin/forgebook/verifyBase.js +196 -0
- package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
- package/dist/bin/forgebook/verifyCommand.mjs +125 -0
- package/dist/bin/forgebook/verifyRun.d.ts +63 -0
- package/dist/bin/forgebook/verifyRun.js +108 -0
- package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
- package/dist/bin/forgebook/verifyVerdict.js +297 -0
- package/dist/bin/forgebook/workflowActions.d.ts +23 -0
- package/dist/bin/forgebook/workflowActions.js +23 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
- package/dist/src/addressArgs.d.ts +54 -6
- package/dist/src/addressArgs.js +72 -16
- package/dist/src/addressArgsParam.d.ts +54 -0
- package/dist/src/addressArgsParam.js +51 -0
- package/dist/src/addressTexts.d.ts +14 -0
- package/dist/src/addressTexts.js +28 -21
- package/dist/src/agentIndexFile.d.ts +11 -0
- package/dist/src/agentIndexFile.js +11 -0
- package/dist/src/argConditions.d.ts +52 -0
- package/dist/src/argConditions.js +80 -0
- package/dist/src/argControl.d.ts +100 -0
- package/dist/src/argControl.js +0 -0
- package/dist/src/argExpression.d.ts +21 -0
- package/dist/src/argExpression.js +30 -0
- package/dist/src/argTypes.d.ts +40 -51
- package/dist/src/argTypes.js +66 -184
- package/dist/src/argsProps.d.ts +3 -3
- package/dist/src/argsProps.js +11 -5
- package/dist/src/bundlerErrors.d.ts +29 -0
- package/dist/src/bundlerErrors.js +49 -0
- package/dist/src/catalogue.d.ts +31 -0
- package/dist/src/catalogue.js +13 -2
- package/dist/src/catalogueRefs.d.ts +75 -0
- package/dist/src/catalogueRefs.js +122 -0
- package/dist/src/componentDocs.d.ts +71 -0
- package/dist/src/componentDocs.js +15 -2
- package/dist/src/frame/callValues.d.ts +19 -0
- package/dist/src/frame/callValues.js +58 -0
- package/dist/src/frame/canvasScheme.d.ts +33 -0
- package/dist/src/frame/canvasScheme.js +67 -0
- package/dist/src/frame/frame.css +36 -3
- package/dist/src/frame/frameStatus.d.ts +16 -1
- package/dist/src/frame/frameStatus.js +16 -1
- package/dist/src/frame/frameView.js +4 -3
- package/dist/src/frame/mountFrame.d.ts +7 -1
- package/dist/src/frame/mountFrame.js +153 -46
- package/dist/src/frame/panelValues.d.ts +35 -0
- package/dist/src/frame/panelValues.js +127 -0
- package/dist/src/frame/playActions.d.ts +39 -0
- package/dist/src/frame/playActions.js +98 -0
- package/dist/src/frame/playStepper.d.ts +28 -0
- package/dist/src/frame/playStepper.js +38 -0
- package/dist/src/frame/playStory.d.ts +9 -1
- package/dist/src/frame/playStory.js +49 -3
- package/dist/src/frame/renderer.d.ts +34 -1
- package/dist/src/frame/renderer.js +24 -0
- package/dist/src/frame/shellChannel.d.ts +1 -1
- package/dist/src/frame/shellChannel.js +1 -1
- package/dist/src/frame/shellCheck.d.ts +17 -0
- package/dist/src/frame/shellCheck.js +25 -0
- package/dist/src/frame/shellMessageCheck.d.ts +7 -0
- package/dist/src/frame/shellMessageCheck.js +53 -0
- package/dist/src/frame/storyContent.d.ts +50 -0
- package/dist/src/frame/storyContent.js +73 -0
- package/dist/src/frame/storyModule.d.ts +9 -0
- package/dist/src/frame/storyModule.js +20 -2
- package/dist/src/frame/storyRun.d.ts +15 -7
- package/dist/src/frame/storyRun.js +64 -15
- package/dist/src/frame/valueSheets.d.ts +35 -0
- package/dist/src/frame/valueSheets.js +99 -0
- package/dist/src/hotModules.d.ts +20 -0
- package/dist/src/hotModules.js +23 -0
- package/dist/src/jsxCode.d.ts +1 -14
- package/dist/src/jsxCode.js +46 -10
- package/dist/src/liveErrors.d.ts +30 -4
- package/dist/src/liveErrors.js +18 -3
- package/dist/src/messages.d.ts +77 -27
- package/dist/src/messages.js +58 -100
- package/dist/src/namedValues.d.ts +2 -26
- package/dist/src/namedValues.js +0 -47
- package/dist/src/pageConfig.d.ts +2 -0
- package/dist/src/playTrace.d.ts +19 -2
- package/dist/src/playTrace.js +10 -5
- package/dist/src/plugin.d.ts +10 -3
- package/dist/src/previewRelay.js +9 -1
- package/dist/src/printable.d.ts +12 -0
- package/dist/src/printable.js +22 -0
- package/dist/src/propsSignature.d.ts +37 -0
- package/dist/src/propsSignature.js +40 -0
- package/dist/src/search.d.ts +41 -5
- package/dist/src/search.js +93 -23
- package/dist/src/searchMatch.d.ts +4 -1
- package/dist/src/searchMatch.js +26 -5
- package/dist/src/searchTypos.d.ts +88 -0
- package/dist/src/searchTypos.js +178 -0
- package/dist/src/shapeValues.d.ts +86 -0
- package/dist/src/shapeValues.js +295 -0
- package/dist/src/shell/ApiReference.js +6 -3
- package/dist/src/shell/ApiTableBox.d.ts +15 -0
- package/dist/src/shell/ApiTableBox.js +11 -0
- package/dist/src/shell/AppearanceMenu.d.ts +4 -1
- package/dist/src/shell/AppearanceMenu.js +9 -6
- package/dist/src/shell/CodeTab.d.ts +3 -2
- package/dist/src/shell/CodeTab.js +3 -2
- package/dist/src/shell/CodeText.d.ts +1 -1
- package/dist/src/shell/CodeText.js +2 -3
- package/dist/src/shell/CompareGrid.js +1 -1
- package/dist/src/shell/ComponentPage.d.ts +1 -1
- package/dist/src/shell/ComponentPage.js +5 -1
- package/dist/src/shell/CustomControl.d.ts +34 -0
- package/dist/src/shell/CustomControl.js +132 -0
- package/dist/src/shell/DocContainers.js +1 -1
- package/dist/src/shell/DocPage.js +2 -2
- package/dist/src/shell/DroppedArgsList.d.ts +2 -2
- package/dist/src/shell/DroppedArgsList.js +1 -1
- package/dist/src/shell/EmbedPage.js +58 -14
- package/dist/src/shell/Example.d.ts +5 -1
- package/dist/src/shell/Example.js +16 -8
- package/dist/src/shell/FrameView.d.ts +6 -3
- package/dist/src/shell/FrameView.js +2 -2
- package/dist/src/shell/HomePage.d.ts +3 -1
- package/dist/src/shell/HomePage.js +16 -6
- package/dist/src/shell/InfoTip.js +2 -2
- package/dist/src/shell/InteractionsTab.d.ts +11 -4
- package/dist/src/shell/InteractionsTab.js +18 -2
- package/dist/src/shell/LazyPage.js +1 -1
- package/dist/src/shell/PackageHtml.js +3 -1
- package/dist/src/shell/PinnedControl.js +14 -62
- package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
- package/dist/src/shell/PinnedControlMenu.js +72 -0
- package/dist/src/shell/PluginBlockHost.js +2 -1
- package/dist/src/shell/PluginTabHost.js +19 -2
- package/dist/src/shell/PropFields.d.ts +3 -1
- package/dist/src/shell/PropFields.js +9 -6
- package/dist/src/shell/PropRows.d.ts +23 -2
- package/dist/src/shell/PropRows.js +58 -19
- package/dist/src/shell/PropsTab.d.ts +12 -5
- package/dist/src/shell/PropsTab.js +9 -21
- package/dist/src/shell/RefStoryPage.d.ts +33 -0
- package/dist/src/shell/RefStoryPage.js +123 -0
- package/dist/src/shell/SearchPanel.js +51 -24
- package/dist/src/shell/Shell.d.ts +18 -0
- package/dist/src/shell/Shell.js +137 -22
- package/dist/src/shell/ShortcutHelp.d.ts +22 -0
- package/dist/src/shell/ShortcutHelp.js +66 -0
- package/dist/src/shell/Sidebar.d.ts +17 -4
- package/dist/src/shell/Sidebar.js +92 -41
- package/dist/src/shell/SidebarDocs.js +2 -2
- package/dist/src/shell/SidebarEntries.js +5 -3
- package/dist/src/shell/SidebarHandle.d.ts +3 -5
- package/dist/src/shell/SidebarHandle.js +4 -4
- package/dist/src/shell/SidebarRefs.d.ts +39 -0
- package/dist/src/shell/SidebarRefs.js +99 -0
- package/dist/src/shell/SidebarSearch.js +37 -9
- package/dist/src/shell/SignatureReference.js +3 -1
- package/dist/src/shell/Stage.d.ts +10 -2
- package/dist/src/shell/Stage.js +35 -60
- package/dist/src/shell/StatusBadges.d.ts +54 -0
- package/dist/src/shell/StatusBadges.js +77 -0
- package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
- package/dist/src/shell/StoryCodeBlock.js +7 -6
- package/dist/src/shell/SwitchGallery.d.ts +36 -0
- package/dist/src/shell/SwitchGallery.js +17 -0
- package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
- package/dist/src/shell/SwitchGalleryPanel.js +99 -0
- package/dist/src/shell/TagFilter.d.ts +24 -0
- package/dist/src/shell/TagFilter.js +45 -0
- package/dist/src/shell/TagViews.d.ts +39 -0
- package/dist/src/shell/TagViews.js +20 -0
- package/dist/src/shell/Toolbar.d.ts +4 -1
- package/dist/src/shell/Toolbar.js +17 -7
- package/dist/src/shell/ToolbarControl.d.ts +3 -0
- package/dist/src/shell/ToolbarControl.js +23 -6
- package/dist/src/shell/ViewMenuPanel.js +6 -1
- package/dist/src/shell/argChecks.d.ts +22 -0
- package/dist/src/shell/argChecks.js +20 -0
- package/dist/src/shell/asideStory.d.ts +17 -4
- package/dist/src/shell/asideStory.js +21 -4
- package/dist/src/shell/audienceSections.css +9 -9
- package/dist/src/shell/catalogueContext.d.ts +1 -1
- package/dist/src/shell/catalogueContext.js +6 -1
- package/dist/src/shell/codeSpans.d.ts +27 -0
- package/dist/src/shell/codeSpans.js +76 -0
- package/dist/src/shell/compareVariants.d.ts +4 -2
- package/dist/src/shell/compareVariants.js +16 -8
- package/dist/src/shell/composition.d.ts +23 -0
- package/dist/src/shell/composition.js +26 -0
- package/dist/src/shell/controlCycle.d.ts +1 -1
- package/dist/src/shell/controlCycle.js +3 -2
- package/dist/src/shell/customControls.d.ts +55 -0
- package/dist/src/shell/customControls.js +70 -0
- package/dist/src/shell/docPage.css +22 -22
- package/dist/src/shell/dockTabs.d.ts +19 -3
- package/dist/src/shell/dockTabs.js +28 -20
- package/dist/src/shell/embed.css +7 -7
- package/dist/src/shell/framesOrigin.d.ts +7 -0
- package/dist/src/shell/framesOrigin.js +1 -1
- package/dist/src/shell/galleryPlace.d.ts +20 -0
- package/dist/src/shell/galleryPlace.js +26 -0
- package/dist/src/shell/icons.d.ts +1 -0
- package/dist/src/shell/icons.js +1 -0
- package/dist/src/shell/keyboard.d.ts +14 -12
- package/dist/src/shell/keyboard.js +21 -6
- package/dist/src/shell/laterStrings.d.ts +29 -0
- package/dist/src/shell/laterStrings.js +42 -3
- package/dist/src/shell/mountShell.js +3 -0
- package/dist/src/shell/pageStrings.d.ts +4 -0
- package/dist/src/shell/pageStrings.js +4 -0
- package/dist/src/shell/pageTagView.d.ts +18 -0
- package/dist/src/shell/pageTagView.js +10 -0
- package/dist/src/shell/playMemory.d.ts +14 -0
- package/dist/src/shell/playMemory.js +8 -0
- package/dist/src/shell/propNotes.d.ts +23 -0
- package/dist/src/shell/propNotes.js +37 -0
- package/dist/src/shell/refIndexLoad.d.ts +17 -0
- package/dist/src/shell/refIndexLoad.js +38 -0
- package/dist/src/shell/refParts.d.ts +34 -0
- package/dist/src/shell/refParts.js +9 -0
- package/dist/src/shell/refStory.css +21 -0
- package/dist/src/shell/refStrings.d.ts +13 -0
- package/dist/src/shell/refStrings.js +21 -0
- package/dist/src/shell/search.css +11 -11
- package/dist/src/shell/shell.css +348 -168
- package/dist/src/shell/shellScheme.js +2 -2
- package/dist/src/shell/shortcutHelp.css +64 -0
- package/dist/src/shell/stageArgs.d.ts +53 -0
- package/dist/src/shell/stageArgs.js +64 -0
- package/dist/src/shell/statusBadges.css +51 -0
- package/dist/src/shell/strings.d.ts +7 -16
- package/dist/src/shell/strings.js +12 -17
- package/dist/src/shell/switchGallery.css +104 -0
- package/dist/src/shell/tagFilter.css +46 -0
- package/dist/src/shell/tagView.d.ts +20 -0
- package/dist/src/shell/tagView.js +10 -0
- package/dist/src/shell/useAddressArgs.d.ts +27 -2
- package/dist/src/shell/useAddressArgs.js +71 -14
- package/dist/src/shell/useControlKeys.js +2 -2
- package/dist/src/shell/useEditedProblems.d.ts +6 -0
- package/dist/src/shell/useEditedProblems.js +40 -0
- package/dist/src/shell/useFrameMessages.js +3 -0
- package/dist/src/shell/useListedTree.d.ts +13 -0
- package/dist/src/shell/useListedTree.js +32 -0
- package/dist/src/shell/usePageFrames.js +2 -2
- package/dist/src/shell/usePopover.d.ts +5 -0
- package/dist/src/shell/usePopover.js +7 -1
- package/dist/src/shell/useRefIndex.d.ts +22 -0
- package/dist/src/shell/useRefIndex.js +36 -0
- package/dist/src/shell/useScrollStops.d.ts +20 -0
- package/dist/src/shell/useScrollStops.js +41 -0
- package/dist/src/shell/useShortcutHelp.d.ts +18 -0
- package/dist/src/shell/useShortcutHelp.js +32 -0
- package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
- package/dist/src/shell/useSidebarOverlay.js +12 -4
- package/dist/src/shell/useStoryCode.d.ts +2 -1
- package/dist/src/shell/useStoryCode.js +12 -7
- package/dist/src/shell/useToolbarLayout.d.ts +5 -1
- package/dist/src/shell/useToolbarLayout.js +2 -2
- package/dist/src/shell/useWorstCase.d.ts +8 -2
- package/dist/src/shell/useWorstCase.js +2 -2
- package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
- package/dist/src/shell/valueEditors/FileEditor.js +66 -0
- package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
- package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
- package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
- package/dist/src/shell/valueEditors/ListEditor.js +82 -0
- package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
- package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
- package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
- package/dist/src/shell/valueEditors/PropEditor.js +53 -0
- package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
- package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
- package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
- package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
- package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
- package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
- package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
- package/dist/src/shell/valueEditors/ValueField.js +147 -0
- package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
- package/dist/src/shell/valueEditors/editorStrings.js +66 -0
- package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
- package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
- package/dist/src/shell/valueEditors/valueEditors.css +153 -0
- package/dist/src/shell/worstArgs.d.ts +8 -5
- package/dist/src/shell/worstArgs.js +14 -7
- package/dist/src/shellTheme.d.ts +1 -1
- package/dist/src/shellTheme.js +15 -1
- package/dist/src/shellTheme.types.d.ts +4 -0
- package/dist/src/shellWord.d.ts +12 -0
- package/dist/src/shellWord.js +15 -0
- package/dist/src/sourceFiles.js +2 -1
- package/dist/src/storyArgTypes.d.ts +57 -0
- package/dist/src/storyArgTypes.js +195 -0
- package/dist/src/storyBackground.js +14 -3
- package/dist/src/storyCheck.d.ts +85 -3
- package/dist/src/storyCheck.js +23 -1
- package/dist/src/storyCodeText.d.ts +46 -0
- package/dist/src/storyCodeText.js +27 -0
- package/dist/src/storyControls.d.ts +100 -0
- package/dist/src/storyControls.js +100 -0
- package/dist/src/storyStatuses.d.ts +55 -0
- package/dist/src/storyStatuses.js +104 -0
- package/dist/src/storyTagNames.d.ts +25 -0
- package/dist/src/storyTagNames.js +25 -0
- package/dist/src/storyTags.d.ts +29 -0
- package/dist/src/storyTags.js +85 -0
- package/dist/src/storyTree.d.ts +13 -0
- package/dist/src/storyTree.js +24 -4
- package/dist/src/storybookArgs.d.ts +24 -0
- package/dist/src/storybookArgs.js +185 -0
- package/dist/src/switches.d.ts +66 -3
- package/dist/src/switches.js +42 -1
- package/dist/src/valueSchema.d.ts +28 -0
- package/dist/src/valueSchema.js +196 -0
- package/dist/src/valueShape.d.ts +94 -0
- package/dist/src/valueShape.js +25 -0
- package/dist/src/viewState.d.ts +8 -3
- package/dist/src/viewState.js +27 -10
- package/dist/src/vite/adapter.d.ts +40 -2
- package/dist/src/vite/adapter.js +1 -0
- package/dist/src/vite/agent.types.d.ts +347 -7
- package/dist/src/vite/agentApi.d.ts +23 -0
- package/dist/src/vite/agentApi.js +90 -17
- package/dist/src/vite/agentIndex.d.ts +0 -2
- package/dist/src/vite/agentIndex.js +5 -6
- package/dist/src/vite/agentRoutes.d.ts +20 -1
- package/dist/src/vite/agentRoutes.js +106 -65
- package/dist/src/vite/agentStatuses.d.ts +42 -0
- package/dist/src/vite/agentStatuses.js +67 -0
- package/dist/src/vite/agentStoryCode.d.ts +48 -0
- package/dist/src/vite/agentStoryCode.js +38 -0
- package/dist/src/vite/agentVisibility.d.ts +47 -0
- package/dist/src/vite/agentVisibility.js +174 -0
- package/dist/src/vite/appAudit.d.ts +134 -0
- package/dist/src/vite/appAudit.js +333 -0
- package/dist/src/vite/appBuildOption.d.ts +53 -0
- package/dist/src/vite/appBuildOption.js +55 -0
- package/dist/src/vite/appTokenFiles.d.ts +92 -0
- package/dist/src/vite/appTokenFiles.js +433 -0
- package/dist/src/vite/appTokens.d.ts +23 -0
- package/dist/src/vite/appTokens.js +275 -0
- package/dist/src/vite/builtTexts.d.ts +10 -0
- package/dist/src/vite/builtTexts.js +59 -22
- package/dist/src/vite/catalogueConfig.d.ts +3 -1
- package/dist/src/vite/catalogueConfig.js +15 -3
- package/dist/src/vite/changeCoverage.d.ts +74 -0
- package/dist/src/vite/changeCoverage.js +120 -0
- package/dist/src/vite/changedRoute.d.ts +30 -0
- package/dist/src/vite/changedRoute.js +197 -0
- package/dist/src/vite/checkCode.d.ts +105 -3
- package/dist/src/vite/checkCode.js +323 -36
- package/dist/src/vite/checkoutWatch.d.ts +97 -0
- package/dist/src/vite/checkoutWatch.js +287 -0
- package/dist/src/vite/closeWatch.d.ts +8 -0
- package/dist/src/vite/closeWatch.js +1 -1
- package/dist/src/vite/componentCache.d.ts +8 -0
- package/dist/src/vite/componentCache.js +66 -0
- package/dist/src/vite/componentGraph.d.ts +71 -0
- package/dist/src/vite/componentGraph.js +133 -0
- package/dist/src/vite/componentRules.d.ts +33 -0
- package/dist/src/vite/componentRules.js +105 -0
- package/dist/src/vite/componentScan.d.ts +69 -0
- package/dist/src/vite/componentScan.js +418 -0
- package/dist/src/vite/compositionCheck.d.ts +15 -0
- package/dist/src/vite/compositionCheck.js +243 -0
- package/dist/src/vite/config.d.ts +32 -1
- package/dist/src/vite/configFile.d.ts +14 -2
- package/dist/src/vite/configFile.js +124 -40
- package/dist/src/vite/configKeys.d.ts +15 -0
- package/dist/src/vite/configKeys.js +171 -0
- package/dist/src/vite/configLoadError.d.ts +23 -0
- package/dist/src/vite/configLoadError.js +71 -0
- package/dist/src/vite/cssDeclarations.d.ts +71 -0
- package/dist/src/vite/cssDeclarations.js +290 -0
- package/dist/src/vite/cssImports.d.ts +14 -0
- package/dist/src/vite/cssImports.js +48 -0
- package/dist/src/vite/cssReferences.d.ts +54 -0
- package/dist/src/vite/cssReferences.js +157 -0
- package/dist/src/vite/cssTokenValues.d.ts +50 -0
- package/dist/src/vite/cssTokenValues.js +233 -0
- package/dist/src/vite/designTokens.d.ts +24 -0
- package/dist/src/vite/designTokens.js +5 -1
- package/dist/src/vite/docsExtractor.d.ts +9 -3
- package/dist/src/vite/docsExtractor.js +11 -3
- package/dist/src/vite/docsProgram.d.ts +17 -4
- package/dist/src/vite/docsProgram.js +52 -11
- package/dist/src/vite/docsWorker.js +7 -2
- package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
- package/dist/src/vite/emptyStoryGlobs.js +52 -0
- package/dist/src/vite/fileImports.d.ts +17 -0
- package/dist/src/vite/fileImports.js +57 -0
- package/dist/src/vite/findComponent.d.ts +10 -2
- package/dist/src/vite/findComponent.js +27 -22
- package/dist/src/vite/findRoute.js +3 -2
- package/dist/src/vite/forcedStates.d.ts +9 -2
- package/dist/src/vite/forcedStates.js +12 -3
- package/dist/src/vite/forgebookPlugin.d.ts +2 -0
- package/dist/src/vite/forgebookPlugin.js +52 -72
- package/dist/src/vite/frameErrors.d.ts +19 -0
- package/dist/src/vite/frameErrors.js +70 -0
- package/dist/src/vite/framesServer.d.ts +12 -0
- package/dist/src/vite/framesServer.js +21 -4
- package/dist/src/vite/functionComponentDocs.js +81 -12
- package/dist/src/vite/generatedModules.js +4 -2
- package/dist/src/vite/gitChange.d.ts +38 -5
- package/dist/src/vite/gitChange.js +71 -11
- package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
- package/dist/src/vite/hiddenStoryFiles.js +107 -0
- package/dist/src/vite/hotSnippets.d.ts +38 -14
- package/dist/src/vite/hotSnippets.js +137 -39
- package/dist/src/vite/importedNames.d.ts +37 -0
- package/dist/src/vite/importedNames.js +138 -0
- package/dist/src/vite/indexFields.d.ts +6 -0
- package/dist/src/vite/indexFields.js +21 -0
- package/dist/src/vite/indexStoryFile.d.ts +8 -1
- package/dist/src/vite/indexStoryFile.js +22 -157
- package/dist/src/vite/jsxCallSites.d.ts +33 -0
- package/dist/src/vite/jsxCallSites.js +200 -0
- package/dist/src/vite/jsxInScripts.d.ts +67 -0
- package/dist/src/vite/jsxInScripts.js +138 -0
- package/dist/src/vite/jsxTree.d.ts +20 -0
- package/dist/src/vite/jsxTree.js +163 -0
- package/dist/src/vite/lineAndColumn.d.ts +13 -0
- package/dist/src/vite/lineAndColumn.js +18 -0
- package/dist/src/vite/lookAlikes.d.ts +65 -0
- package/dist/src/vite/lookAlikes.js +228 -0
- package/dist/src/vite/nearestToken.d.ts +17 -0
- package/dist/src/vite/nearestToken.js +9 -2
- package/dist/src/vite/packageEntries.d.ts +42 -0
- package/dist/src/vite/packageEntries.js +127 -0
- package/dist/src/vite/pages.d.ts +9 -1
- package/dist/src/vite/pages.js +108 -4
- package/dist/src/vite/pluginConfig.js +4 -0
- package/dist/src/vite/pluginIds.d.ts +2 -0
- package/dist/src/vite/pluginIds.js +5 -1
- package/dist/src/vite/pluginModules.d.ts +81 -11
- package/dist/src/vite/pluginModules.js +109 -21
- package/dist/src/vite/prebundled.d.ts +57 -15
- package/dist/src/vite/prebundled.js +80 -0
- package/dist/src/vite/previewTags.d.ts +25 -0
- package/dist/src/vite/previewTags.js +56 -0
- package/dist/src/vite/projectFiles.d.ts +54 -0
- package/dist/src/vite/projectFiles.js +116 -0
- package/dist/src/vite/projectPostcss.d.ts +70 -0
- package/dist/src/vite/projectPostcss.js +250 -0
- package/dist/src/vite/propDocs.d.ts +12 -0
- package/dist/src/vite/propDocs.js +130 -58
- package/dist/src/vite/propKind.d.ts +40 -0
- package/dist/src/vite/propKind.js +71 -0
- package/dist/src/vite/propTypeNotes.d.ts +22 -0
- package/dist/src/vite/propTypeNotes.js +51 -0
- package/dist/src/vite/publishedExports.d.ts +27 -0
- package/dist/src/vite/publishedExports.js +298 -0
- package/dist/src/vite/realFolder.d.ts +6 -0
- package/dist/src/vite/realFolder.js +25 -0
- package/dist/src/vite/refsConfig.d.ts +39 -0
- package/dist/src/vite/refsConfig.js +54 -0
- package/dist/src/vite/reuseCheck.d.ts +45 -0
- package/dist/src/vite/reuseCheck.js +260 -0
- package/dist/src/vite/runningVersions.d.ts +33 -0
- package/dist/src/vite/runningVersions.js +25 -0
- package/dist/src/vite/scriptProblems.d.ts +60 -0
- package/dist/src/vite/scriptProblems.js +155 -0
- package/dist/src/vite/searchModule.js +3 -2
- package/dist/src/vite/searchRoute.js +4 -2
- package/dist/src/vite/shapeDocs.d.ts +36 -0
- package/dist/src/vite/shapeDocs.js +177 -0
- package/dist/src/vite/singleFileComponent.d.ts +17 -0
- package/dist/src/vite/singleFileComponent.js +83 -0
- package/dist/src/vite/sourceText.d.ts +34 -0
- package/dist/src/vite/sourceText.js +72 -0
- package/dist/src/vite/sourceTokens.d.ts +7 -0
- package/dist/src/vite/sourceTokens.js +7 -2
- package/dist/src/vite/stackLines.d.ts +49 -0
- package/dist/src/vite/stackLines.js +96 -0
- package/dist/src/vite/storyCode.d.ts +22 -7
- package/dist/src/vite/storyCode.js +263 -37
- package/dist/src/vite/storyCoverage.d.ts +48 -0
- package/dist/src/vite/storyCoverage.js +179 -0
- package/dist/src/vite/storyFilesModule.d.ts +48 -3
- package/dist/src/vite/storyFilesModule.js +105 -15
- package/dist/src/vite/storyPatterns.d.ts +31 -0
- package/dist/src/vite/storyPatterns.js +140 -5
- package/dist/src/vite/storyReach.d.ts +10 -2
- package/dist/src/vite/storyReach.js +15 -11
- package/dist/src/vite/storyTopLevel.d.ts +51 -0
- package/dist/src/vite/storyTopLevel.js +146 -0
- package/dist/src/vite/storylessRoutes.d.ts +4 -3
- package/dist/src/vite/storylessRoutes.js +210 -19
- package/dist/src/vite/switchValuesCheck.d.ts +19 -0
- package/dist/src/vite/switchValuesCheck.js +164 -0
- package/dist/src/vite/switchesDocument.d.ts +15 -0
- package/dist/src/vite/switchesDocument.js +47 -0
- package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
- package/dist/src/vite/tailwindConfigTokens.js +306 -0
- package/dist/src/vite/textImports.d.ts +15 -0
- package/dist/src/vite/textImports.js +58 -0
- package/dist/src/vite/textModules.d.ts +6 -5
- package/dist/src/vite/textModules.js +13 -8
- package/dist/src/vite/tokenAnswers.d.ts +6 -2
- package/dist/src/vite/tokenAnswers.js +11 -7
- package/dist/src/vite/typeParameters.d.ts +83 -0
- package/dist/src/vite/typeParameters.js +270 -0
- package/dist/src/vite/unionProps.d.ts +37 -0
- package/dist/src/vite/unionProps.js +121 -0
- package/dist/src/vite/unresolvedTokens.d.ts +20 -0
- package/dist/src/vite/unresolvedTokens.js +193 -0
- package/dist/src/vite/usageGraph.js +10 -52
- package/dist/src/vite/usageGuidance.d.ts +9 -2
- package/dist/src/vite/usageGuidance.js +36 -8
- package/dist/src/vite/usageImports.d.ts +35 -0
- package/dist/src/vite/usageImports.js +280 -0
- package/dist/src/vite/visibilityRoute.d.ts +16 -0
- package/dist/src/vite/visibilityRoute.js +320 -0
- package/dist/src/worstCase.d.ts +2 -0
- package/dist/src/worstCase.js +2 -0
- package/package.json +28 -8
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tokens a Tailwind configuration file writes, read from its text and never run.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Pure. Running a project's configuration would run its code, which a read-only question must not do, so what is written
|
|
6
|
+
* plainly is read (objects, strings, a constant of the same file) and what needs code to know (a spread of something
|
|
7
|
+
* imported, a function, a plugin) is named in `unread`: a token this cannot see is a value that reads as hand-written.
|
|
8
|
+
* Each theme key is named as Tailwind 4 names it (`colors.primary.DEFAULT` is `--color-primary`), so one project reads
|
|
9
|
+
* the same in either version and a token's utility comes from its name alike.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { parseSync } from "vite";
|
|
14
|
+
import { keyName, propertyValue, unwrapped } from "./indexFields.js";
|
|
15
|
+
import { isTooDeep } from "./sourceText.js";
|
|
16
|
+
/** The theme keys that hold tokens, with their namespace and type. */
|
|
17
|
+
const THEME_KEYS = {
|
|
18
|
+
colors: { prefix: "--color-", type: "color" },
|
|
19
|
+
backgroundColor: { prefix: "--color-", type: "color" },
|
|
20
|
+
textColor: { prefix: "--color-", type: "color" },
|
|
21
|
+
borderColor: { prefix: "--color-", type: "color" },
|
|
22
|
+
spacing: { prefix: "--spacing-", type: "dimension" },
|
|
23
|
+
borderRadius: { prefix: "--radius-", type: "dimension" },
|
|
24
|
+
fontSize: { prefix: "--text-", type: "dimension" },
|
|
25
|
+
fontFamily: { prefix: "--font-", type: "fontFamily" },
|
|
26
|
+
fontWeight: { prefix: "--font-weight-", type: "fontWeight" },
|
|
27
|
+
lineHeight: { prefix: "--leading-", type: "number" },
|
|
28
|
+
letterSpacing: { prefix: "--tracking-", type: "tracking" },
|
|
29
|
+
boxShadow: { prefix: "--shadow-", type: "shadow" },
|
|
30
|
+
screens: { prefix: "--breakpoint-", type: "breakpoint" }
|
|
31
|
+
};
|
|
32
|
+
/** Words the values of a palette are never given as, in `tailwindcss/colors`. */
|
|
33
|
+
const NOT_A_TOKEN = new Set(["inherit", "currentColor", "current"]);
|
|
34
|
+
/** A string's text, a template with nothing in it included. */
|
|
35
|
+
const stringOf = (node) => {
|
|
36
|
+
if (node.type === "Literal")
|
|
37
|
+
return typeof node.value === "string" ? node.value : undefined;
|
|
38
|
+
if (node.type === "TemplateLiteral" && node.expressions.length === 0)
|
|
39
|
+
return node.quasis[0]?.value.cooked ?? undefined;
|
|
40
|
+
return undefined;
|
|
41
|
+
};
|
|
42
|
+
/** A leaf's text: a string, a number, or a list's first (`fontSize: ["1rem", { lineHeight: … }]`) or all (a font stack). */
|
|
43
|
+
const leafOf = (node, type) => {
|
|
44
|
+
const text = stringOf(node);
|
|
45
|
+
if (text !== undefined)
|
|
46
|
+
return text;
|
|
47
|
+
if (node.type === "Literal" && typeof node.value === "number")
|
|
48
|
+
return String(node.value);
|
|
49
|
+
if (node.type !== "ArrayExpression")
|
|
50
|
+
return undefined;
|
|
51
|
+
const parts = node.elements.flatMap((element) => element === null || element.type === "SpreadElement" ? [] : (stringOf(unwrapped(element)) ?? []));
|
|
52
|
+
return type === "fontFamily" ? parts.join(", ") : parts[0];
|
|
53
|
+
};
|
|
54
|
+
/** The palette a member expression names (`colors.blue`, `colors.blue[500]`), when its object is `tailwindcss/colors`. */
|
|
55
|
+
const paletteOf = (value, walk) => {
|
|
56
|
+
if (value.type !== "MemberExpression")
|
|
57
|
+
return undefined;
|
|
58
|
+
const { object, property, computed } = value;
|
|
59
|
+
if (computed) {
|
|
60
|
+
const inner = paletteOf(object, walk);
|
|
61
|
+
return inner !== undefined && property.type === "Literal"
|
|
62
|
+
? `${inner}-${String(property.value)}`
|
|
63
|
+
: undefined;
|
|
64
|
+
}
|
|
65
|
+
return object.type === "Identifier" && walk.palettes.has(object.name) && property.type === "Identifier"
|
|
66
|
+
? property.name
|
|
67
|
+
: undefined;
|
|
68
|
+
};
|
|
69
|
+
/** Reads each key of an object under a name; `DEFAULT` is the name itself. */
|
|
70
|
+
const walkObject = (object, name, { type, label }, walk) => {
|
|
71
|
+
for (const property of object.properties) {
|
|
72
|
+
const key = property.type !== "Property" || property.computed ? undefined : keyName(property.key);
|
|
73
|
+
if (property.type !== "Property" || key === undefined) {
|
|
74
|
+
walk.unread.push(`${label}: a part is built by code`);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const child = key === "DEFAULT" ? name : `${name}-${key}`;
|
|
78
|
+
walkValue(property.value, child, { type, label: `${label}.${key}` }, walk);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
/** Reads a theme value under a name: an object of more names, a leaf, or something that needs running. */
|
|
82
|
+
const walkValue = (node, name, place, walk) => {
|
|
83
|
+
const value = unwrapped(node);
|
|
84
|
+
const constant = value.type === "Identifier" ? walk.constants.get(value.name) : undefined;
|
|
85
|
+
if (constant !== undefined) {
|
|
86
|
+
walkValue(constant, name, place, walk);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const palette = paletteOf(value, walk);
|
|
90
|
+
if (palette !== undefined) {
|
|
91
|
+
walk.paletteAliases.push({ name, palette });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (value.type === "ObjectExpression") {
|
|
95
|
+
walkObject(value, name, place, walk);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const leaf = leafOf(value, place.type);
|
|
99
|
+
if (leaf === undefined)
|
|
100
|
+
walk.unread.push(`${place.label}: built by code`);
|
|
101
|
+
else if (!NOT_A_TOKEN.has(leaf))
|
|
102
|
+
walk.tokens.push({ name, value: leaf, type: place.type });
|
|
103
|
+
};
|
|
104
|
+
/** Reads one `theme` or `theme.extend` object, naming the keys it holds. */
|
|
105
|
+
const walkTheme = (theme, label, walk) => {
|
|
106
|
+
const held = [];
|
|
107
|
+
for (const property of theme.properties) {
|
|
108
|
+
if (property.type !== "Property" || property.computed) {
|
|
109
|
+
walk.unread.push(`${label}: a part is built by code`);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const key = keyName(property.key);
|
|
113
|
+
const known = key === undefined ? undefined : THEME_KEYS[key];
|
|
114
|
+
if (key === undefined || key === "extend")
|
|
115
|
+
continue;
|
|
116
|
+
held.push(key);
|
|
117
|
+
if (known === undefined)
|
|
118
|
+
continue;
|
|
119
|
+
const value = unwrapped(property.value);
|
|
120
|
+
const prefix = known.prefix.slice(0, -1);
|
|
121
|
+
if (value.type === "ObjectExpression" || value.type === "Identifier") {
|
|
122
|
+
walkEntries(value, prefix, { type: known.type, label: `${label}.${key}` }, walk);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
walk.unread.push(`${label}.${key}: built by code`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return held;
|
|
129
|
+
};
|
|
130
|
+
/** Reads a theme key's object: each of its keys under the namespace. */
|
|
131
|
+
const walkEntries = (node, prefix, place, walk) => {
|
|
132
|
+
const value = node.type === "Identifier" ? (walk.constants.get(node.name) ?? node) : node;
|
|
133
|
+
if (value.type === "ObjectExpression")
|
|
134
|
+
walkObject(value, prefix, place, walk);
|
|
135
|
+
else
|
|
136
|
+
walk.unread.push(`${place.label}: built by code`);
|
|
137
|
+
};
|
|
138
|
+
/** A top-level `const x = …`'s name and value. */
|
|
139
|
+
const constantsOf = (program) => {
|
|
140
|
+
const constants = new Map();
|
|
141
|
+
for (const statement of program.body) {
|
|
142
|
+
const declaration = statement.type === "ExportNamedDeclaration" ? statement.declaration : statement;
|
|
143
|
+
if (declaration?.type !== "VariableDeclaration")
|
|
144
|
+
continue;
|
|
145
|
+
for (const { id, init } of declaration.declarations) {
|
|
146
|
+
if (id.type === "Identifier" && init !== null)
|
|
147
|
+
constants.set(id.name, unwrapped(init));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return constants;
|
|
151
|
+
};
|
|
152
|
+
/** The module a `require("x")` names, when the expression is one. */
|
|
153
|
+
const requiredModule = (node) => {
|
|
154
|
+
const call = unwrapped(node);
|
|
155
|
+
if (call.type !== "CallExpression" || call.callee.type !== "Identifier" || call.callee.name !== "require")
|
|
156
|
+
return undefined;
|
|
157
|
+
const [first] = call.arguments;
|
|
158
|
+
return first === undefined || first.type === "SpreadElement" ? undefined : stringOf(unwrapped(first));
|
|
159
|
+
};
|
|
160
|
+
/** Each name's module, from the file's imports and `require`s. */
|
|
161
|
+
const importsOf = (program, constants) => {
|
|
162
|
+
const imports = new Map();
|
|
163
|
+
for (const statement of program.body) {
|
|
164
|
+
if (statement.type !== "ImportDeclaration")
|
|
165
|
+
continue;
|
|
166
|
+
for (const specifier of statement.specifiers) {
|
|
167
|
+
if (specifier.type !== "ImportSpecifier")
|
|
168
|
+
imports.set(specifier.local.name, String(statement.source.value));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
for (const [name, value] of constants) {
|
|
172
|
+
const module = requiredModule(value);
|
|
173
|
+
if (module !== undefined)
|
|
174
|
+
imports.set(name, module);
|
|
175
|
+
}
|
|
176
|
+
return imports;
|
|
177
|
+
};
|
|
178
|
+
/** The object a file exports, through a helper's call (`defineConfig({…})`) and a constant. */
|
|
179
|
+
const exportedObject = (program, constants) => {
|
|
180
|
+
const plain = (node) => {
|
|
181
|
+
const value = unwrapped(node);
|
|
182
|
+
if (value.type === "ObjectExpression")
|
|
183
|
+
return value;
|
|
184
|
+
if (value.type === "Identifier") {
|
|
185
|
+
const constant = constants.get(value.name);
|
|
186
|
+
return constant === undefined ? undefined : plain(constant);
|
|
187
|
+
}
|
|
188
|
+
if (value.type === "CallExpression") {
|
|
189
|
+
const [first] = value.arguments;
|
|
190
|
+
return first === undefined || first.type === "SpreadElement" ? undefined : plain(first);
|
|
191
|
+
}
|
|
192
|
+
return undefined;
|
|
193
|
+
};
|
|
194
|
+
for (const statement of program.body) {
|
|
195
|
+
if (statement.type === "ExportDefaultDeclaration") {
|
|
196
|
+
const { declaration } = statement;
|
|
197
|
+
return declaration.type === "FunctionDeclaration" ||
|
|
198
|
+
declaration.type === "ClassDeclaration" ||
|
|
199
|
+
declaration.type === "TSInterfaceDeclaration"
|
|
200
|
+
? undefined
|
|
201
|
+
: plain(declaration);
|
|
202
|
+
}
|
|
203
|
+
if (statement.type === "ExpressionStatement" &&
|
|
204
|
+
statement.expression.type === "AssignmentExpression" &&
|
|
205
|
+
statement.expression.left.type === "MemberExpression" &&
|
|
206
|
+
statement.expression.left.object.type === "Identifier" &&
|
|
207
|
+
statement.expression.left.object.name === "module") {
|
|
208
|
+
return plain(statement.expression.right);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return undefined;
|
|
212
|
+
};
|
|
213
|
+
/** The modules a `presets` list names. */
|
|
214
|
+
const presetsOf = (object, imports, unread) => {
|
|
215
|
+
const list = propertyValue(object, "presets");
|
|
216
|
+
if (list === undefined)
|
|
217
|
+
return [];
|
|
218
|
+
if (list.type !== "ArrayExpression") {
|
|
219
|
+
unread.push("presets: built by code");
|
|
220
|
+
return [];
|
|
221
|
+
}
|
|
222
|
+
return list.elements.flatMap((element) => {
|
|
223
|
+
if (element === null || element.type === "SpreadElement") {
|
|
224
|
+
unread.push("presets: a part is built by code");
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
const value = unwrapped(element);
|
|
228
|
+
const module = requiredModule(value) ?? (value.type === "Identifier" ? imports.get(value.name) : undefined);
|
|
229
|
+
if (module === undefined)
|
|
230
|
+
unread.push("presets: a part is built by code");
|
|
231
|
+
return module === undefined ? [] : [module];
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* Reads a Tailwind configuration's text.
|
|
236
|
+
*
|
|
237
|
+
* @param file - its path, for the parser (its extension says TypeScript).
|
|
238
|
+
* @param text - its text.
|
|
239
|
+
*/
|
|
240
|
+
export const readTailwindConfig = (file, text) => {
|
|
241
|
+
const empty = { tokens: [], presets: [], replaced: [], paletteAliases: [] };
|
|
242
|
+
if (isTooDeep(text))
|
|
243
|
+
return { ...empty, unread: ["it nests too deep to read"] };
|
|
244
|
+
const { program, errors } = parseSync(file, text);
|
|
245
|
+
if (errors.length > 0)
|
|
246
|
+
return { ...empty, unread: [`it cannot be parsed: ${errors[0]?.message ?? ""}`] };
|
|
247
|
+
const constants = constantsOf(program);
|
|
248
|
+
const object = exportedObject(program, constants);
|
|
249
|
+
if (object === undefined)
|
|
250
|
+
return { ...empty, unread: ["what it exports is built by code"] };
|
|
251
|
+
const imports = importsOf(program, constants);
|
|
252
|
+
const palettes = new Set([...imports].flatMap(([name, module]) => (module === "tailwindcss/colors" ? [name] : [])));
|
|
253
|
+
const walk = { tokens: [], unread: [], paletteAliases: [], constants, palettes };
|
|
254
|
+
const presets = presetsOf(object, imports, walk.unread);
|
|
255
|
+
const written = propertyValue(object, "theme");
|
|
256
|
+
// `{ theme }`, with a constant of the file above it
|
|
257
|
+
const theme = written?.type === "Identifier" ? (constants.get(written.name) ?? written) : written;
|
|
258
|
+
if (theme === undefined)
|
|
259
|
+
return { ...empty, presets, unread: walk.unread };
|
|
260
|
+
if (theme.type !== "ObjectExpression") {
|
|
261
|
+
return { ...empty, presets, unread: [...walk.unread, "theme: built by code"] };
|
|
262
|
+
}
|
|
263
|
+
const replaced = walkTheme(theme, "theme", walk);
|
|
264
|
+
const writtenExtend = propertyValue(theme, "extend");
|
|
265
|
+
const extend = writtenExtend?.type === "Identifier"
|
|
266
|
+
? (constants.get(writtenExtend.name) ?? writtenExtend)
|
|
267
|
+
: writtenExtend;
|
|
268
|
+
if (extend?.type === "ObjectExpression")
|
|
269
|
+
walkTheme(extend, "theme.extend", walk);
|
|
270
|
+
else if (extend !== undefined)
|
|
271
|
+
walk.unread.push("theme.extend: built by code");
|
|
272
|
+
return {
|
|
273
|
+
tokens: walk.tokens,
|
|
274
|
+
unread: walk.unread,
|
|
275
|
+
presets,
|
|
276
|
+
replaced,
|
|
277
|
+
paletteAliases: walk.paletteAliases
|
|
278
|
+
};
|
|
279
|
+
};
|
|
280
|
+
/**
|
|
281
|
+
* The colours of Tailwind's default palette, from the text of `tailwindcss/lib/public/colors.js`: only an object of
|
|
282
|
+
* plain strings, read and not run, as any other file here.
|
|
283
|
+
*
|
|
284
|
+
* @param file - its path.
|
|
285
|
+
* @param text - its text.
|
|
286
|
+
* @returns each colour's name as Tailwind 4 names it, with its value.
|
|
287
|
+
*/
|
|
288
|
+
export const readTailwindPalette = (file, text) => {
|
|
289
|
+
if (isTooDeep(text))
|
|
290
|
+
return [];
|
|
291
|
+
const { program, errors } = parseSync(file, text);
|
|
292
|
+
if (errors.length > 0)
|
|
293
|
+
return [];
|
|
294
|
+
const palette = constantsOf(program).get("_default");
|
|
295
|
+
if (palette?.type !== "ObjectExpression")
|
|
296
|
+
return [];
|
|
297
|
+
const walk = {
|
|
298
|
+
tokens: [],
|
|
299
|
+
unread: [],
|
|
300
|
+
paletteAliases: [],
|
|
301
|
+
constants: new Map(),
|
|
302
|
+
palettes: new Set()
|
|
303
|
+
};
|
|
304
|
+
walkEntries(palette, "--color", { type: "color", label: "palette" }, walk);
|
|
305
|
+
return walk.tokens;
|
|
306
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The files a style sheet's text imports: its own folder's, a package's and an address are not this package's.
|
|
3
|
+
*
|
|
4
|
+
* @param file - the sheet, absolute.
|
|
5
|
+
* @param text - its text.
|
|
6
|
+
* @param exists - whether a file exists.
|
|
7
|
+
*/
|
|
8
|
+
export declare const sheetImports: (file: string, text: string, exists?: (path: string) => boolean) => string[];
|
|
9
|
+
/**
|
|
10
|
+
* Every relative asset a module's text names as a string.
|
|
11
|
+
*
|
|
12
|
+
* @param file - the module, absolute.
|
|
13
|
+
* @param text - its text.
|
|
14
|
+
*/
|
|
15
|
+
export declare const assetImports: (file: string, text: string) => string[];
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a file's text says it imports, where no compiler can tell: a style sheet's own imports, and the sheets, templates
|
|
3
|
+
* and single-file components a module names as strings.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Apart from `usageImports.ts`, which needs the compiler: the dev server's thread reads these too, for the sheets every
|
|
7
|
+
* story shows, and it must start without one.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync } from "node:fs";
|
|
12
|
+
import { VITE_PATHS } from "./vitePaths.js";
|
|
13
|
+
/** A relative path to a file TypeScript does not read, standing as a string, with any query Vite takes. */
|
|
14
|
+
const ASSET_PATH = /["'`](\.{1,2}\/[^"'`\n?]+\.(?:css|scss|sass|less|vue|svelte|astro|html))(?:\?[^"'`\n]*)?["'`]/g;
|
|
15
|
+
/** A style sheet's own imports. */
|
|
16
|
+
const SHEET_USE = /@(?:use|forward)\s+["']([^"']+)["']/g;
|
|
17
|
+
/** A sheet's `@import`, which may list several, or set Less's options first. */
|
|
18
|
+
const SHEET_IMPORT = /@import\s+([^;\n]{1,2000})/g;
|
|
19
|
+
/** A quoted name in an `@import`. */
|
|
20
|
+
const QUOTED = /["']([^"']+)["']/g;
|
|
21
|
+
/** Where a style sheet's import may be, from the name it writes: Sass omits the extension and the partial's `_`. */
|
|
22
|
+
const sheetCandidates = (path) => {
|
|
23
|
+
const folder = VITE_PATHS.dirname(path);
|
|
24
|
+
const name = path.slice(folder.length + 1);
|
|
25
|
+
return [
|
|
26
|
+
path,
|
|
27
|
+
...["scss", "sass", "css", "less"].flatMap((extension) => [
|
|
28
|
+
`${path}.${extension}`,
|
|
29
|
+
VITE_PATHS.join(folder, `_${name}.${extension}`),
|
|
30
|
+
VITE_PATHS.join(path, `_index.${extension}`),
|
|
31
|
+
VITE_PATHS.join(path, `index.${extension}`)
|
|
32
|
+
]),
|
|
33
|
+
VITE_PATHS.join(folder, `_${name}`)
|
|
34
|
+
];
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* The files a style sheet's text imports: its own folder's, a package's and an address are not this package's.
|
|
38
|
+
*
|
|
39
|
+
* @param file - the sheet, absolute.
|
|
40
|
+
* @param text - its text.
|
|
41
|
+
* @param exists - whether a file exists.
|
|
42
|
+
*/
|
|
43
|
+
export const sheetImports = (file, text, exists = existsSync) => [
|
|
44
|
+
...[...text.matchAll(SHEET_USE)].map((match) => match[1] ?? ""),
|
|
45
|
+
...[...text.matchAll(SHEET_IMPORT)].flatMap((statement) => [...(statement[1] ?? "").matchAll(QUOTED)].map((match) => match[1] ?? ""))
|
|
46
|
+
].flatMap((name) => {
|
|
47
|
+
if (name.includes(":"))
|
|
48
|
+
return [];
|
|
49
|
+
const path = VITE_PATHS.join(VITE_PATHS.dirname(file), name);
|
|
50
|
+
return [sheetCandidates(path).find(exists) ?? path];
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* Every relative asset a module's text names as a string.
|
|
54
|
+
*
|
|
55
|
+
* @param file - the module, absolute.
|
|
56
|
+
* @param text - its text.
|
|
57
|
+
*/
|
|
58
|
+
export const assetImports = (file, text) => [...text.matchAll(ASSET_PATH)].map((match) => VITE_PATHS.join(VITE_PATHS.dirname(file), match[1] ?? ""));
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { StoryFileCode } from "@forgebook/story-format/source";
|
|
1
2
|
import type { ComponentFiles } from "./adapter.ts";
|
|
2
3
|
import { type DiskCache } from "./diskCache.ts";
|
|
3
4
|
/** A module the plugin answers. */
|
|
@@ -5,13 +6,13 @@ type AnsweredModule = {
|
|
|
5
6
|
code: string;
|
|
6
7
|
moduleType: "js";
|
|
7
8
|
};
|
|
8
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* A story file's code as the Code tab reads it: each story's `render` text and its coloured HTML, or the args it writes
|
|
11
|
+
* as code, or why it cannot.
|
|
12
|
+
*/
|
|
9
13
|
export type KeptCode = {
|
|
10
14
|
readonly error: string;
|
|
11
|
-
} |
|
|
12
|
-
readonly text: string;
|
|
13
|
-
readonly html: string;
|
|
14
|
-
}>>;
|
|
15
|
+
} | StoryFileCode;
|
|
15
16
|
/** Whether what a cache file holds is a story file's code. */
|
|
16
17
|
export declare const isKeptCode: (value: unknown) => value is KeptCode;
|
|
17
18
|
/**
|
|
@@ -28,22 +28,27 @@ const valueModule = (value) => ({
|
|
|
28
28
|
/** Whether what a cache file holds is a story file's code. */
|
|
29
29
|
export const isKeptCode = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
30
30
|
/**
|
|
31
|
-
* Each story's `render` text with its coloured HTML.
|
|
31
|
+
* Each story's `render` text with its coloured HTML, and each args story's args as written.
|
|
32
32
|
*
|
|
33
33
|
* @remarks
|
|
34
34
|
* The colouring loads the TypeScript compiler, tens of megabytes the server then holds for as long as it runs: only a
|
|
35
35
|
* file with a `render` to colour loads it. A file whose stories are all args has none, and its Code tab writes them
|
|
36
|
-
* from the args (the framework's code writer), so a story's page of a library
|
|
37
|
-
* the docs worker; a component's page or a Markdown page still loads it, to
|
|
36
|
+
* from the args (the framework's code writer, with the args the file writes as code), so a story's page of a library
|
|
37
|
+
* written that way leaves the compiler to the docs worker; a component's page or a Markdown page still loads it, to
|
|
38
|
+
* colour their examples.
|
|
38
39
|
*
|
|
39
|
-
* @param code - each story's `render` text, by export name.
|
|
40
|
+
* @param code - each story's `render` text and written args, by export name.
|
|
40
41
|
*/
|
|
41
|
-
const colouredCode = async (
|
|
42
|
-
const
|
|
42
|
+
const colouredCode = async ({ renders, args }) => {
|
|
43
|
+
const written = Object.entries(args).map(([name, each]) => [name, { args: each }]);
|
|
44
|
+
const entries = Object.entries(renders);
|
|
43
45
|
if (entries.length === 0)
|
|
44
|
-
return
|
|
46
|
+
return Object.fromEntries(written);
|
|
45
47
|
const { highlightCode } = await import("./highlightCode.js");
|
|
46
|
-
return Object.fromEntries(
|
|
48
|
+
return Object.fromEntries([
|
|
49
|
+
...written,
|
|
50
|
+
...entries.map(([name, text]) => [name, { text, html: highlightCode(text, "tsx") }])
|
|
51
|
+
]);
|
|
47
52
|
};
|
|
48
53
|
/**
|
|
49
54
|
* A story file's code as the Code tab reads it, what a `?forgebook-code` import answers: each story's `render` text and
|
|
@@ -6,13 +6,17 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { AgentTokenSummary } from "./agent.types.ts";
|
|
8
8
|
import type { AgentAnswer } from "./agentRoutes.ts";
|
|
9
|
-
import { type DesignToken, type ParsedTokens } from "./designTokens.ts";
|
|
9
|
+
import { type DesignToken, type ParsedTokens, type TokenSource } from "./designTokens.ts";
|
|
10
10
|
/** The tokens read, with whether anything names some: a file that cannot be read is named, which is not "no tokens". */
|
|
11
11
|
export type TokenReading = ParsedTokens & {
|
|
12
|
-
/** Whether
|
|
12
|
+
/** Whether there is a system to ask about: a tokens file named, or tokens read from the application. */
|
|
13
13
|
readonly isConfigured: boolean;
|
|
14
14
|
/** The sources whose modules could not be read: whether they hold tokens is not known. */
|
|
15
15
|
readonly unread: readonly string[];
|
|
16
|
+
/** What the tokens were read from. */
|
|
17
|
+
readonly sources: readonly TokenSource[];
|
|
18
|
+
/** What the application's files hold that could not be read without running them. Unlike a problem, it fails nothing. */
|
|
19
|
+
readonly notes: readonly string[];
|
|
16
20
|
};
|
|
17
21
|
/** A token as a list gives it: no description, and no empty fields, since each one costs an agent's context. */
|
|
18
22
|
export declare const tokenSummary: (token: DesignToken) => AgentTokenSummary;
|
|
@@ -6,7 +6,7 @@ const TOKENS_LIMIT = 100;
|
|
|
6
6
|
const NO_TOKENS_FILE = {
|
|
7
7
|
status: 404,
|
|
8
8
|
body: {
|
|
9
|
-
error: 'This catalogue names no tokens file: `tokens: ["tokens.json"]` in forgebook.config.ts, or on a source it shows'
|
|
9
|
+
error: 'This catalogue names no tokens file and has none to read: an application with no system of its own (custom properties at the root, Tailwind, components.json), or `tokens: []`. Name a file with `tokens: ["tokens.json"]` in forgebook.config.ts, or on a source it shows'
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
12
|
/** How many tokens of each type. */
|
|
@@ -18,18 +18,19 @@ const typeCounts = (tokens) => {
|
|
|
18
18
|
};
|
|
19
19
|
/** A token as a list gives it: no description, and no empty fields, since each one costs an agent's context. */
|
|
20
20
|
export const tokenSummary = (token) => {
|
|
21
|
-
const { name, type, value, modes, deprecated, isThemeOnly } = token;
|
|
21
|
+
const { name, type, value, modes, deprecated, isThemeOnly, utility } = token;
|
|
22
22
|
return {
|
|
23
23
|
name,
|
|
24
24
|
type,
|
|
25
25
|
value,
|
|
26
26
|
modes,
|
|
27
27
|
...(deprecated === undefined ? {} : { deprecated }),
|
|
28
|
-
...(isThemeOnly === undefined ? {} : { isThemeOnly })
|
|
28
|
+
...(isThemeOnly === undefined ? {} : { isThemeOnly }),
|
|
29
|
+
...(utility === undefined ? {} : { utility })
|
|
29
30
|
};
|
|
30
31
|
};
|
|
31
32
|
/** The tokens, of a category when one is asked for, up to a limit, with how many there are. */
|
|
32
|
-
const tokensAnswer = ({ tokens, problems, unread, clashes, isConfigured }, params) => {
|
|
33
|
+
const tokensAnswer = ({ tokens, problems, unread, clashes, isConfigured, sources, notes }, params) => {
|
|
33
34
|
const chosen = filteredTokens(tokens, params.get("category") || undefined);
|
|
34
35
|
const limit = Number(params.get("limit") || TOKENS_LIMIT);
|
|
35
36
|
const listed = chosen.slice(0, Number.isFinite(limit) ? limit : TOKENS_LIMIT);
|
|
@@ -41,7 +42,9 @@ const tokensAnswer = ({ tokens, problems, unread, clashes, isConfigured }, param
|
|
|
41
42
|
types: typeCounts(chosen),
|
|
42
43
|
tokens: listed.map(tokenSummary),
|
|
43
44
|
problems: [...unread, ...problems],
|
|
44
|
-
clashes: clashes.filter((clash) => names.has(clash.name))
|
|
45
|
+
clashes: clashes.filter((clash) => names.has(clash.name)),
|
|
46
|
+
sources: sources ?? [],
|
|
47
|
+
notes: notes ?? []
|
|
45
48
|
};
|
|
46
49
|
return { status: 200, body };
|
|
47
50
|
};
|
|
@@ -52,7 +55,8 @@ const tokenAnswer = (reading, params) => {
|
|
|
52
55
|
const { tokens, clashes } = reading;
|
|
53
56
|
const problems = [...reading.unread, ...reading.problems];
|
|
54
57
|
const name = params.get("name") ?? "";
|
|
55
|
-
|
|
58
|
+
// a custom property's dashes read as an option on a command line, so its name holds without them
|
|
59
|
+
const token = tokens.find((each) => each.name === name || each.name === `--${name}`);
|
|
56
60
|
if (token === undefined) {
|
|
57
61
|
const read = problems.length === 0 ? "" : ` (and the tokens files have problems: ${problems.join("; ")})`;
|
|
58
62
|
return { status: 404, body: { error: `No token "${name}"${read}` } };
|
|
@@ -61,7 +65,7 @@ const tokenAnswer = (reading, params) => {
|
|
|
61
65
|
schema: 1,
|
|
62
66
|
token,
|
|
63
67
|
problems,
|
|
64
|
-
clashes: clashes.filter((clash) => clash.name === name)
|
|
68
|
+
clashes: clashes.filter((clash) => clash.name === token.name)
|
|
65
69
|
};
|
|
66
70
|
return { status: 200, body };
|
|
67
71
|
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A generic component's props, written without the type parameters it leaves open: each one shown as its constraint,
|
|
3
|
+
* else its default, else `unknown`. Used by `propDocs.ts` and `propTypeNotes.ts`.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* A prop's text is the one its props type writes (`items: readonly T[]` in `ListProps<T>`), whose `T` is the props
|
|
7
|
+
* type's parameter, while what bounds it is the component's (`<TItem extends string>(props: ListProps<TItem>)`). The
|
|
8
|
+
* props type's parameters are followed to the types the component passes (`bindingsOf`), so the constraint shown is
|
|
9
|
+
* the component's. The replacement is made in the source's text, since the checker's instantiation is not public API.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import ts from "typescript-6";
|
|
14
|
+
import type { PropTypeNote } from "../componentDocs.ts";
|
|
15
|
+
/** A prop's type as declared: a type node, or a method's whole signature. */
|
|
16
|
+
export type DeclaredType = ts.TypeNode | ts.MethodSignature;
|
|
17
|
+
/** What the props type's parameters stand for in one component: the types it passes them (`ListProps<TItem>`). */
|
|
18
|
+
export type Bindings = ReadonlyMap<ts.TypeParameterDeclaration, ts.Type>;
|
|
19
|
+
/** What replacing a component's type parameters needs: the checker, and what the props type's parameters stand for. */
|
|
20
|
+
export type Generics = {
|
|
21
|
+
/** The program's checker. */
|
|
22
|
+
readonly checker: ts.TypeChecker;
|
|
23
|
+
/** The props type's parameters, bound to what the component passes. */
|
|
24
|
+
readonly bindings: Bindings;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* What each type parameter of a props type stands for in this component: an alias's (`type P<T>`) and an interface's,
|
|
28
|
+
* its bases' included, through unions and intersections.
|
|
29
|
+
*
|
|
30
|
+
* @param propsType - the component's props type, as its signature takes it.
|
|
31
|
+
* @param checker - the program's checker.
|
|
32
|
+
*/
|
|
33
|
+
export declare const bindingsOf: (propsType: ts.Type, checker: ts.TypeChecker) => Bindings;
|
|
34
|
+
/**
|
|
35
|
+
* Every type reference a node writes, in source order.
|
|
36
|
+
*
|
|
37
|
+
* @param node - the node.
|
|
38
|
+
*/
|
|
39
|
+
export declare const referencesIn: (node: ts.Node) => ts.TypeReferenceNode[];
|
|
40
|
+
/**
|
|
41
|
+
* Whether a prop's declared types name a type parameter of the props type: their text then says `TValue` where a props
|
|
42
|
+
* type the component instantiates (`BaseProps<string>`) means `string`.
|
|
43
|
+
*
|
|
44
|
+
* @param declared - the prop's declared types.
|
|
45
|
+
* @param checker - the program's checker.
|
|
46
|
+
*/
|
|
47
|
+
export declare const usesTypeParameter: (declared: readonly DeclaredType[], checker: ts.TypeChecker) => boolean;
|
|
48
|
+
/**
|
|
49
|
+
* A node's source text with each type parameter it uses replaced by what it is shown as.
|
|
50
|
+
*
|
|
51
|
+
* @param node - the prop's declared type (or one member of it), or a constraint.
|
|
52
|
+
* @param generics - the checker and the bindings.
|
|
53
|
+
* @param seen - the type parameters being replaced.
|
|
54
|
+
* @returns the text, as `getText()` would give it with the replacements made.
|
|
55
|
+
*/
|
|
56
|
+
export declare const genericFreeText: (node: ts.Node, generics: Generics, seen?: ReadonlySet<ts.TypeParameterDeclaration>) => string;
|
|
57
|
+
/**
|
|
58
|
+
* The type a prop typed by a type parameter is shown as (`selected?: TKey`): what decides its kind and control. Read
|
|
59
|
+
* from the checker's type, whose parameter is the component's own.
|
|
60
|
+
*
|
|
61
|
+
* @param type - the prop's type, as the component takes it.
|
|
62
|
+
* @param checker - the program's checker.
|
|
63
|
+
* @param depth - how many defaults naming another parameter are followed.
|
|
64
|
+
* @returns the type, or none when the prop's type is not a type parameter.
|
|
65
|
+
*/
|
|
66
|
+
export declare const genericShownType: (type: ts.Type, checker: ts.TypeChecker, depth?: number) => ts.Type | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Whether a type, as the component takes it, still holds a type parameter: `readonly TItem[]` in a generic component,
|
|
69
|
+
* not the `readonly string[]` of a props type it instantiates (`BaseProps<string>`). Through unions, intersections, a
|
|
70
|
+
* generic's arguments and a function's parameters and result.
|
|
71
|
+
*
|
|
72
|
+
* @param type - the prop's type.
|
|
73
|
+
* @param checker - the program's checker.
|
|
74
|
+
* @param depth - how many levels are left to look into.
|
|
75
|
+
*/
|
|
76
|
+
export declare const hasTypeParameter: (type: ts.Type, checker: ts.TypeChecker, depth?: number) => boolean;
|
|
77
|
+
/**
|
|
78
|
+
* The notes of the type parameters a prop's declared types leave open, each once, by the component's name for it.
|
|
79
|
+
*
|
|
80
|
+
* @param declared - the prop's declared types.
|
|
81
|
+
* @param generics - the checker and the bindings.
|
|
82
|
+
*/
|
|
83
|
+
export declare const genericNotes: (declared: readonly DeclaredType[], generics: Generics) => PropTypeNote[];
|