forgebook 0.3.3 → 0.4.1
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 +994 -72
- 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 +182 -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 +62 -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 +95 -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 +204 -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 +323 -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 +29 -5
- package/dist/src/addressArgs.js +58 -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 +148 -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 +69 -185
- 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 +83 -0
- package/dist/src/componentDocs.js +20 -3
- package/dist/src/controlCode.d.ts +27 -0
- package/dist/src/controlCode.js +41 -0
- 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/controlValues.d.ts +39 -0
- package/dist/src/frame/controlValues.js +143 -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 +10 -1
- package/dist/src/frame/mountFrame.js +160 -55
- package/dist/src/frame/panelControls.d.ts +67 -0
- package/dist/src/frame/panelControls.js +110 -0
- 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/AuthoredHome.js +3 -1
- package/dist/src/shell/CodeTab.d.ts +12 -6
- package/dist/src/shell/CodeTab.js +47 -3
- 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 +6 -6
- package/dist/src/shell/ComponentPage.js +8 -2
- package/dist/src/shell/CustomControl.d.ts +34 -0
- package/dist/src/shell/CustomControl.js +125 -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 +30 -12
- 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 +18 -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/PageWidth.d.ts +29 -0
- package/dist/src/shell/PageWidth.js +18 -0
- 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/PropFields.d.ts +3 -1
- package/dist/src/shell/PropFields.js +9 -6
- package/dist/src/shell/PropRows.d.ts +22 -11
- package/dist/src/shell/PropRows.js +62 -24
- package/dist/src/shell/PropsTab.d.ts +12 -5
- package/dist/src/shell/PropsTab.js +9 -22
- 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 +141 -23
- 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 +29 -49
- 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/StoryPicker.d.ts +4 -2
- package/dist/src/shell/StoryPicker.js +3 -3
- package/dist/src/shell/Switch.d.ts +29 -0
- package/dist/src/shell/Switch.js +11 -0
- 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.js +7 -2
- 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 +62 -0
- package/dist/src/shell/customControls.js +81 -0
- package/dist/src/shell/docPage.css +22 -22
- package/dist/src/shell/dockTabs.d.ts +19 -3
- package/dist/src/shell/dockTabs.js +29 -20
- package/dist/src/shell/embed.css +7 -7
- package/dist/src/shell/frameOrder.d.ts +35 -0
- package/dist/src/shell/frameOrder.js +45 -0
- 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 +30 -0
- package/dist/src/shell/laterStrings.js +43 -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 +376 -169
- 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 +9 -0
- package/dist/src/shell/useAddressArgs.js +56 -11
- 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/useFrameQueue.d.ts +8 -3
- package/dist/src/shell/useFrameQueue.js +42 -12
- 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/useScrollSettled.d.ts +18 -0
- package/dist/src/shell/useScrollSettled.js +56 -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 +148 -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 +99 -3
- package/dist/src/storyCheck.js +39 -1
- package/dist/src/storyCodeText.d.ts +52 -0
- package/dist/src/storyCodeText.js +30 -0
- package/dist/src/storyControls.d.ts +103 -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 +354 -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 +135 -66
- package/dist/src/vite/agentStatuses.d.ts +42 -0
- package/dist/src/vite/agentStatuses.js +67 -0
- package/dist/src/vite/agentStoryCode.d.ts +51 -0
- package/dist/src/vite/agentStoryCode.js +44 -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/argControlsConfig.d.ts +30 -0
- package/dist/src/vite/argControlsConfig.js +176 -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 +21 -4
- 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 +67 -1
- package/dist/src/vite/configFile.d.ts +15 -2
- package/dist/src/vite/configFile.js +109 -40
- package/dist/src/vite/configKeys.d.ts +15 -0
- package/dist/src/vite/configKeys.js +172 -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 +55 -73
- 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 +119 -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 +187 -60
- 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/typedControls.d.ts +31 -0
- package/dist/src/vite/typedControls.js +66 -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,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
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import ts from "typescript-6";
|
|
2
2
|
import type { PropDocs } from "../componentDocs.ts";
|
|
3
|
+
import { type Bindings } from "./typeParameters.ts";
|
|
3
4
|
/**
|
|
4
5
|
* A symbol, through an import to what it names.
|
|
5
6
|
*
|
|
@@ -40,6 +41,17 @@ export type PropReading = {
|
|
|
40
41
|
* capital by default.
|
|
41
42
|
*/
|
|
42
43
|
readonly eventName?: RegExp | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* The same prop as the other variants of a union of props declare it (`selected?: Date` beside `selected?: Date[]`):
|
|
46
|
+
* their written types join its own. When their types differ, what only one of them would say (an event's signature,
|
|
47
|
+
* a value's shape, an object's members) is left out, and its kind is `other` unless all share one.
|
|
48
|
+
*/
|
|
49
|
+
readonly variants?: readonly ts.Symbol[] | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* What the props type's type parameters stand for in the component (`typeParameters.ts`), so a type parameter left
|
|
52
|
+
* open is shown by the component's constraint; none reads each by its own.
|
|
53
|
+
*/
|
|
54
|
+
readonly bindings?: Bindings | undefined;
|
|
43
55
|
};
|
|
44
56
|
/**
|
|
45
57
|
* One prop's docs.
|
|
@@ -12,18 +12,11 @@
|
|
|
12
12
|
import { dirname } from "node:path";
|
|
13
13
|
import ts from "typescript-6";
|
|
14
14
|
import { summaryOf, tagOf } from "./docsProgram.js";
|
|
15
|
+
import { literalValues, typeAndKind } from "./propKind.js";
|
|
16
|
+
import { propTypeNotes } from "./propTypeNotes.js";
|
|
17
|
+
import { shapeOfProp } from "./shapeDocs.js";
|
|
15
18
|
import { unwrapped } from "./storyMeta.js";
|
|
16
|
-
|
|
17
|
-
const EVENT_NAME = /^on[A-Z]/;
|
|
18
|
-
/** Whether a type is a union of string or number literals (a choice). */
|
|
19
|
-
const literalValues = (type) => {
|
|
20
|
-
if (!type.isUnion())
|
|
21
|
-
return undefined;
|
|
22
|
-
const values = type.types.map((member) => member.isStringLiteral() || member.isNumberLiteral() ? member.value : undefined);
|
|
23
|
-
return values.every((value) => value !== undefined)
|
|
24
|
-
? values.filter((value) => value !== undefined)
|
|
25
|
-
: undefined;
|
|
26
|
-
};
|
|
19
|
+
import { genericFreeText, usesTypeParameter } from "./typeParameters.js";
|
|
27
20
|
/** A literal value an expression writes (`"md"`, `3`, `-1`), or none for anything else. */
|
|
28
21
|
const literalOfExpression = (expression) => {
|
|
29
22
|
if (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression))
|
|
@@ -131,25 +124,48 @@ const writtenLiterals = (node, checker, seen) => {
|
|
|
131
124
|
return [...fromArguments, ...(alias === undefined ? [] : writtenLiterals(alias.type, checker, seen))];
|
|
132
125
|
};
|
|
133
126
|
/**
|
|
134
|
-
*
|
|
135
|
-
* the types in, which a program kept between reads changes from one read to the next.
|
|
127
|
+
* What puts a choice's values in the order the source writes them: the checker's order follows the order it happened to
|
|
128
|
+
* meet the types in, which a program kept between reads changes from one read to the next.
|
|
129
|
+
*
|
|
130
|
+
* @remarks
|
|
131
|
+
* A prop's shape asks for the order of every union inside it, and a library's unions can hold hundreds of values (an
|
|
132
|
+
* icon's name): the declared values are read once per prop, on the first ask, and each value's place is looked up, not
|
|
133
|
+
* searched for.
|
|
136
134
|
*
|
|
137
|
-
* @param values - the values, in the checker's order.
|
|
138
135
|
* @param declared - the prop's declared type nodes.
|
|
139
136
|
* @param checker - the type checker.
|
|
140
|
-
* @returns the values, those the source writes in its order first, any other
|
|
137
|
+
* @returns the sorter: given values in the checker's order, those the source writes in its order first, any other
|
|
138
|
+
* after them in the checker's order.
|
|
141
139
|
*/
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
140
|
+
const writtenOrderOf = (declared, checker) => {
|
|
141
|
+
let places;
|
|
142
|
+
let unwritten = 0;
|
|
143
|
+
return (values) => {
|
|
144
|
+
if (places === undefined) {
|
|
145
|
+
const seen = new Set();
|
|
146
|
+
const written = declared.flatMap((node) => ts.isMethodSignature(node) ? [] : writtenLiterals(node, checker, seen));
|
|
147
|
+
places = new Map();
|
|
148
|
+
unwritten = written.length;
|
|
149
|
+
// a value written twice keeps its first place, as a search from the start would find it
|
|
150
|
+
for (const [index, value] of written.entries())
|
|
151
|
+
if (!places.has(value))
|
|
152
|
+
places.set(value, index);
|
|
153
|
+
}
|
|
154
|
+
const known = places;
|
|
155
|
+
const rank = (value) => known.get(value) ?? unwritten;
|
|
156
|
+
return [...values].sort((left, right) => rank(left) - rank(right));
|
|
148
157
|
};
|
|
149
|
-
return [...values].sort((left, right) => rank(left) - rank(right));
|
|
150
158
|
};
|
|
151
159
|
/** A choice's type as TypeScript writes it, its members in the given order (`"md" | "sm"`). */
|
|
152
160
|
const choiceTypeText = (values) => values.map((value) => (typeof value === "string" ? JSON.stringify(value) : String(value))).join(" | ");
|
|
161
|
+
/**
|
|
162
|
+
* Declarations by file and position: a prop several variants declare comes with them in the order the checker met
|
|
163
|
+
* the variants, which a program kept between reads changes.
|
|
164
|
+
*
|
|
165
|
+
* @param declarations - the declarations.
|
|
166
|
+
*/
|
|
167
|
+
const byPosition = (declarations) => [...declarations].sort((left, right) => left.getSourceFile().fileName.localeCompare(right.getSourceFile().fileName) ||
|
|
168
|
+
left.getStart() - right.getStart());
|
|
153
169
|
/**
|
|
154
170
|
* The props in the order the source declares them: those declared in the component's own folder first, then the
|
|
155
171
|
* ones it takes from elsewhere, each by file and position. The checker's order follows the types it met first (an
|
|
@@ -160,7 +176,7 @@ const choiceTypeText = (values) => values.map((value) => (typeof value === "stri
|
|
|
160
176
|
*/
|
|
161
177
|
export const declarationOrder = (props, componentFolder) => {
|
|
162
178
|
const keyOf = (prop) => {
|
|
163
|
-
const [declaration] = prop.declarations ?? [];
|
|
179
|
+
const [declaration] = byPosition(prop.declarations ?? []);
|
|
164
180
|
if (declaration === undefined)
|
|
165
181
|
return [2, "", 0];
|
|
166
182
|
const file = declaration.getSourceFile().fileName;
|
|
@@ -172,8 +188,15 @@ export const declarationOrder = (props, componentFolder) => {
|
|
|
172
188
|
return leftOwn - rightOwn || leftFile.localeCompare(rightFile) || leftAt - rightAt;
|
|
173
189
|
});
|
|
174
190
|
};
|
|
175
|
-
/**
|
|
176
|
-
|
|
191
|
+
/**
|
|
192
|
+
* A type node's text as the source writes it, on one line; given a checker, each generic type parameter it uses
|
|
193
|
+
* replaced by what it is shown as (`typeParameters.ts`).
|
|
194
|
+
*/
|
|
195
|
+
const nodeText = (node, generic) => (generic === undefined ? node.getText() : genericFreeText(node, generic))
|
|
196
|
+
// an inline object's TSDoc is the docs' to read, not part of its type
|
|
197
|
+
.replace(/\/\*[\s\S]*?\*\//g, "")
|
|
198
|
+
.replace(/\s+/g, " ")
|
|
199
|
+
.trim();
|
|
177
200
|
/**
|
|
178
201
|
* Whether a type node adds nothing a prop can take: `undefined` and `null` (left out as the checker's `NonNullable`
|
|
179
202
|
* did) and `never` (a branch of the props where the prop is not allowed).
|
|
@@ -193,6 +216,57 @@ const declaredMembers = (node) => {
|
|
|
193
216
|
const bare = bareType(node);
|
|
194
217
|
return (ts.isUnionTypeNode(bare) ? bare.types : [bare]).filter((member) => !isNothing(member));
|
|
195
218
|
};
|
|
219
|
+
/**
|
|
220
|
+
* The names a type node goes by: a plain reference's name as written, the name it was declared with (an import may
|
|
221
|
+
* rename it), and the names of the aliases it is declared through (`type ButtonIcon = IconComponent`); for a union, the
|
|
222
|
+
* names every member goes by, without `undefined`, `null` and `never`. A generic's reference (`ComponentType<Props>`) and a
|
|
223
|
+
* type parameter name no type of their own, so they end the walk.
|
|
224
|
+
*
|
|
225
|
+
* @param node - the type node.
|
|
226
|
+
* @param checker - the type checker, to follow a name to its declaration.
|
|
227
|
+
* @param seen - the nodes already walked, so a recursive alias ends.
|
|
228
|
+
*/
|
|
229
|
+
const typeNamesOf = (node, checker, seen) => {
|
|
230
|
+
const bare = bareType(node);
|
|
231
|
+
if (seen.has(bare))
|
|
232
|
+
return [];
|
|
233
|
+
const walked = new Set([...seen, bare]);
|
|
234
|
+
if (ts.isUnionTypeNode(bare))
|
|
235
|
+
return sharedNames(declaredMembers(bare), checker, walked);
|
|
236
|
+
if (!ts.isTypeReferenceNode(bare) || bare.typeArguments !== undefined)
|
|
237
|
+
return [];
|
|
238
|
+
const symbol = declaredSymbol(checker.getSymbolAtLocation(bare.typeName), checker);
|
|
239
|
+
if (symbol === undefined || symbol.flags & ts.SymbolFlags.TypeParameter)
|
|
240
|
+
return [];
|
|
241
|
+
// a default export's symbol is named `default`: its declaration keeps the name it was written with
|
|
242
|
+
const declared = ts.getNameOfDeclaration(symbol.declarations?.[0])?.getText() ?? bare.typeName.getText();
|
|
243
|
+
const alias = symbol.declarations?.find(ts.isTypeAliasDeclaration);
|
|
244
|
+
const through = alias !== undefined && !alias.typeParameters ? typeNamesOf(alias.type, checker, walked) : [];
|
|
245
|
+
return [...new Set([bare.typeName.getText(), declared, ...through])];
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* The names every one of several type nodes goes by, in the first one's order.
|
|
249
|
+
*
|
|
250
|
+
* @param nodes - the type nodes: a union's members, or a prop's declarations.
|
|
251
|
+
* @param checker - the type checker.
|
|
252
|
+
* @param seen - the nodes already walked.
|
|
253
|
+
*/
|
|
254
|
+
const sharedNames = (nodes, checker, seen) => {
|
|
255
|
+
const [first, ...others] = nodes.map((node) => typeNamesOf(node, checker, seen));
|
|
256
|
+
return (first ?? []).filter((name) => others.every((names) => names.includes(name)));
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* The names a prop's declared types all go by: what a custom control's `matches` reads. A branch of the props where the
|
|
260
|
+
* prop is `never` takes no value, so it names no type; a method names none.
|
|
261
|
+
*
|
|
262
|
+
* @param declared - the prop's declared types.
|
|
263
|
+
* @param checker - the program's checker.
|
|
264
|
+
*/
|
|
265
|
+
const writtenTypeNames = (declared, checker) => {
|
|
266
|
+
const taking = declared.filter((node) => ts.isMethodSignature(node) || declaredMembers(node).length > 0);
|
|
267
|
+
const nodes = taking.flatMap((node) => (ts.isMethodSignature(node) ? [] : [node]));
|
|
268
|
+
return nodes.length === taking.length ? sharedNames(nodes, checker, new Set()) : [];
|
|
269
|
+
};
|
|
196
270
|
/**
|
|
197
271
|
* A prop's declared type nodes: a property's type (in a type or a class) or a method's whole signature, once per
|
|
198
272
|
* declaration. A prop of props written as alternatives (`{ indicator?: never } | { indicator?: "dot" | "spinner" }`)
|
|
@@ -200,7 +274,7 @@ const declaredMembers = (node) => {
|
|
|
200
274
|
*
|
|
201
275
|
* @param symbol - the prop.
|
|
202
276
|
*/
|
|
203
|
-
const declaredTypesOf = (symbol) => (symbol.declarations ?? []).flatMap((declaration) => {
|
|
277
|
+
const declaredTypesOf = (symbol) => byPosition(symbol.declarations ?? []).flatMap((declaration) => {
|
|
204
278
|
if (ts.isMethodSignature(declaration))
|
|
205
279
|
return [declaration];
|
|
206
280
|
return (ts.isPropertySignature(declaration) || ts.isPropertyDeclaration(declaration)) &&
|
|
@@ -214,36 +288,51 @@ const declaredTypesOf = (symbol) => (symbol.declarations ?? []).flatMap((declara
|
|
|
214
288
|
* between reads changes from one read to the next.
|
|
215
289
|
*
|
|
216
290
|
* @param declaredTypes - the prop's declared type nodes.
|
|
291
|
+
* @param generic - the checker and the bindings when the prop's type is still generic, to replace the type parameters
|
|
292
|
+
* its text uses; none to write it as it is.
|
|
217
293
|
* @returns the text, or none when the prop writes no type (the caller falls back to the checker's).
|
|
218
294
|
*/
|
|
219
|
-
const writtenTypeText = (declaredTypes) => {
|
|
295
|
+
const writtenTypeText = (declaredTypes, generic) => {
|
|
296
|
+
const text = (node) => nodeText(node, generic);
|
|
220
297
|
const texts = declaredTypes.flatMap((declared) => {
|
|
221
298
|
if (!ts.isMethodSignature(declared))
|
|
222
|
-
return declaredMembers(declared).map(
|
|
223
|
-
const parameters = declared.parameters.map(
|
|
224
|
-
return [`(${parameters}) => ${declared.type === undefined ? "void" :
|
|
299
|
+
return declaredMembers(declared).map(text);
|
|
300
|
+
const parameters = declared.parameters.map(text).join(", ");
|
|
301
|
+
return [`(${parameters}) => ${declared.type === undefined ? "void" : text(declared.type)}`];
|
|
225
302
|
});
|
|
226
303
|
// each branch's members once, in the order the branches write them
|
|
227
304
|
const unique = [...new Set(texts)];
|
|
228
305
|
return unique.length === 0 ? undefined : unique.join(" | ");
|
|
229
306
|
};
|
|
307
|
+
/**
|
|
308
|
+
* A prop's type as the source writes it, or none for the checker's: a text naming a type parameter the component
|
|
309
|
+
* instantiates (`value: TValue` in `BaseProps<string>`) says less than the checker's `string`.
|
|
310
|
+
*
|
|
311
|
+
* @param declared - the prop's declared types.
|
|
312
|
+
* @param generic - the checker and the bindings when the prop's type is still generic.
|
|
313
|
+
* @param checker - the program's checker.
|
|
314
|
+
*/
|
|
315
|
+
const writtenText = (declared, generic, checker) => generic === undefined && usesTypeParameter(declared, checker)
|
|
316
|
+
? undefined
|
|
317
|
+
: writtenTypeText(declared, generic);
|
|
230
318
|
/**
|
|
231
319
|
* An event's signature as the source writes it: a function type among the prop's declared members, or a method.
|
|
232
320
|
*
|
|
233
321
|
* @param declaredTypes - the event prop's declared type nodes.
|
|
322
|
+
* @param generic - the checker and the bindings when the event's type is still generic, as `writtenTypeText` takes them.
|
|
234
323
|
* @returns the signature, or none when the source writes none in place (a named handler type).
|
|
235
324
|
*/
|
|
236
|
-
const writtenSignature = (declaredTypes) => {
|
|
325
|
+
const writtenSignature = (declaredTypes, generic) => {
|
|
237
326
|
const nodes = declaredTypes.flatMap((declared) => ts.isMethodSignature(declared) ? [declared] : declaredMembers(declared));
|
|
238
327
|
const fn = nodes.find((node) => ts.isMethodSignature(node) || ts.isFunctionTypeNode(node));
|
|
239
328
|
if (fn === undefined)
|
|
240
329
|
return undefined;
|
|
241
330
|
return {
|
|
242
331
|
parameters: fn.parameters.map((parameter) => ({
|
|
243
|
-
name: nodeText(parameter.name),
|
|
244
|
-
type: parameter.type === undefined ? "unknown" : nodeText(parameter.type)
|
|
332
|
+
name: nodeText(parameter.name, undefined),
|
|
333
|
+
type: parameter.type === undefined ? "unknown" : nodeText(parameter.type, generic)
|
|
245
334
|
})),
|
|
246
|
-
returns: fn.type === undefined ? "void" : nodeText(fn.type)
|
|
335
|
+
returns: fn.type === undefined ? "void" : nodeText(fn.type, generic)
|
|
247
336
|
};
|
|
248
337
|
};
|
|
249
338
|
/** An event's signature. */
|
|
@@ -259,20 +348,6 @@ const signatureOf = (type, checker, node) => {
|
|
|
259
348
|
returns: checker.typeToString(signature.getReturnType())
|
|
260
349
|
};
|
|
261
350
|
};
|
|
262
|
-
/** A prop's kind, from its name and its type without `undefined`. */
|
|
263
|
-
const kindOf = (name, type, eventName) => {
|
|
264
|
-
if (eventName.test(name) && type.getCallSignatures().length > 0)
|
|
265
|
-
return "event";
|
|
266
|
-
if (type.flags & ts.TypeFlags.Boolean || type.flags & ts.TypeFlags.BooleanLiteral)
|
|
267
|
-
return "toggle";
|
|
268
|
-
if (literalValues(type) !== undefined)
|
|
269
|
-
return "choice";
|
|
270
|
-
if (type.flags & ts.TypeFlags.String)
|
|
271
|
-
return "text";
|
|
272
|
-
if (type.flags & ts.TypeFlags.Number)
|
|
273
|
-
return "number";
|
|
274
|
-
return "other";
|
|
275
|
-
};
|
|
276
351
|
/** Whether a symbol is declared outside the package (a DOM attribute from React's types). */
|
|
277
352
|
export const isForeign = (symbol) => (symbol.declarations ?? []).every((declaration) => declaration.getSourceFile().fileName.includes("/node_modules/"));
|
|
278
353
|
/**
|
|
@@ -334,6 +409,22 @@ const groupingOf = (symbol, kind, type, checker, node) => {
|
|
|
334
409
|
...(members === undefined ? {} : { members })
|
|
335
410
|
};
|
|
336
411
|
};
|
|
412
|
+
/**
|
|
413
|
+
* A choice's values across the variants' types that declare it, each once, in the order the source writes them.
|
|
414
|
+
*
|
|
415
|
+
* @param kind - the prop's kind: only a choice has values.
|
|
416
|
+
* @param types - its type in each variant, its own first.
|
|
417
|
+
* @param declared - its declared types, for their order.
|
|
418
|
+
* @param checker - the program's checker.
|
|
419
|
+
*/
|
|
420
|
+
const choicesOf = (kind, types, declared, checker) => {
|
|
421
|
+
if (kind !== "choice")
|
|
422
|
+
return undefined;
|
|
423
|
+
const lists = types.map(literalValues);
|
|
424
|
+
return lists.every((list) => list !== undefined)
|
|
425
|
+
? writtenOrderOf(declared, checker)([...new Set(lists.flat())])
|
|
426
|
+
: undefined;
|
|
427
|
+
};
|
|
337
428
|
/**
|
|
338
429
|
* One prop's docs.
|
|
339
430
|
*
|
|
@@ -343,31 +434,67 @@ const groupingOf = (symbol, kind, type, checker, node) => {
|
|
|
343
434
|
* @param reading - how the framework's props differ from a plain function's; none for a plain prop.
|
|
344
435
|
*/
|
|
345
436
|
export const propDocs = (symbol, checker, node, reading = {}) => {
|
|
346
|
-
const { taken,
|
|
347
|
-
const type = checker.getNonNullableType(taken?.type ?? checker.getTypeOfSymbolAtLocation(symbol, node));
|
|
437
|
+
const { taken, variants = [] } = reading;
|
|
348
438
|
const takenNodes = taken?.typeNode === undefined ? [] : [taken.typeNode];
|
|
349
|
-
const declared = taken === undefined ? declaredTypesOf
|
|
439
|
+
const declared = taken === undefined ? [symbol, ...variants].flatMap(declaredTypesOf) : takenNodes;
|
|
440
|
+
const { type, variantTypes, isMixed, kind, generic } = typeAndKind(symbol, reading, checker, node);
|
|
350
441
|
const name = symbol.getName();
|
|
351
|
-
const kind = kindOf(name, type, eventName);
|
|
352
442
|
const defaultValue = tagOf(symbol, checker, "defaultValue");
|
|
353
|
-
const
|
|
354
|
-
|
|
355
|
-
const signature = kind === "event"
|
|
443
|
+
const choices = choicesOf(kind, [type, ...variantTypes], declared, checker);
|
|
444
|
+
// what one variant's type says of its values is not true of the others'
|
|
445
|
+
const signature = kind === "event" && !isMixed
|
|
446
|
+
? (writtenSignature(declared, generic) ?? signatureOf(type, checker, node))
|
|
447
|
+
: undefined;
|
|
356
448
|
// a node takes a text: the panel can set it as one, which covers labels, titles and children
|
|
357
|
-
const canTakeText = kind === "other" &&
|
|
449
|
+
const canTakeText = kind === "other" &&
|
|
450
|
+
[type, ...variantTypes].every((each) => checker.isTypeAssignableTo(checker.getStringType(), each));
|
|
451
|
+
const notes = propTypeNotes(declared, type, checker, generic);
|
|
452
|
+
const typeText = choices === undefined
|
|
453
|
+
? (writtenText(declared, generic, checker) ?? checker.typeToString(type))
|
|
454
|
+
: choiceTypeText(choices);
|
|
455
|
+
const typeNames = writtenTypeNames(declared, checker);
|
|
358
456
|
return {
|
|
359
457
|
name,
|
|
360
458
|
kind,
|
|
361
|
-
type:
|
|
362
|
-
|
|
363
|
-
|
|
459
|
+
type: typeText,
|
|
460
|
+
// only when they say more than the type's text
|
|
461
|
+
...(typeNames.some((each) => each !== typeText) ? { typeNames } : {}),
|
|
364
462
|
description: summaryOf(symbol, checker),
|
|
365
463
|
isRequired: (symbol.flags & ts.SymbolFlags.Optional) === 0,
|
|
366
464
|
...(defaultValue === undefined ? {} : { defaultValue }),
|
|
367
465
|
...(choices === undefined ? {} : { choices }),
|
|
368
466
|
...(signature === undefined ? {} : { signature }),
|
|
369
467
|
...(canTakeText ? { canTakeText } : {}),
|
|
370
|
-
...
|
|
468
|
+
...(isMixed
|
|
469
|
+
? {}
|
|
470
|
+
: {
|
|
471
|
+
...editingOf(symbol, { kind, type, canTakeText, declared, checker, node }),
|
|
472
|
+
...groupingOf(symbol, kind, type, checker, node)
|
|
473
|
+
}),
|
|
474
|
+
...(notes.length === 0 ? {} : { notes })
|
|
475
|
+
};
|
|
476
|
+
};
|
|
477
|
+
/**
|
|
478
|
+
* How a prop's value is edited, beyond its kind: what it looks like, and the tokens its TSDoc asks for.
|
|
479
|
+
*
|
|
480
|
+
* @param symbol - the prop.
|
|
481
|
+
* @param prop - what is known of it.
|
|
482
|
+
*/
|
|
483
|
+
const editingOf = (symbol, prop) => {
|
|
484
|
+
const { kind, type, canTakeText, declared, checker, node } = prop;
|
|
485
|
+
const shape = kind === "other"
|
|
486
|
+
? shapeOfProp(type, canTakeText, {
|
|
487
|
+
checker,
|
|
488
|
+
node,
|
|
489
|
+
order: writtenOrderOf(declared, checker),
|
|
490
|
+
typeText: (member) => writtenTypeText(declaredTypesOf(member)),
|
|
491
|
+
description: (member) => summaryOf(member, checker)
|
|
492
|
+
})
|
|
493
|
+
: undefined;
|
|
494
|
+
const token = tagOf(symbol, checker, "token");
|
|
495
|
+
return {
|
|
496
|
+
...(shape === undefined ? {} : { shape }),
|
|
497
|
+
...(token === undefined || token === "" ? {} : { token })
|
|
371
498
|
};
|
|
372
499
|
};
|
|
373
500
|
/** The props whose keys are the component's parts. */
|