forgebook 0.3.3 → 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 +914 -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 +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 +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 +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 +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 +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/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 +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/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 +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 +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/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,196 @@
|
|
|
1
|
+
import { isArgList, isArgObject } from "./messages.js";
|
|
2
|
+
/** Whether a value is a plain object. */
|
|
3
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4
|
+
/** The keywords a schema may use. */
|
|
5
|
+
const KEYWORDS = [
|
|
6
|
+
"title",
|
|
7
|
+
"description",
|
|
8
|
+
"default",
|
|
9
|
+
"type",
|
|
10
|
+
"enum",
|
|
11
|
+
"const",
|
|
12
|
+
"minimum",
|
|
13
|
+
"maximum",
|
|
14
|
+
"minLength",
|
|
15
|
+
"maxLength",
|
|
16
|
+
"pattern",
|
|
17
|
+
"items",
|
|
18
|
+
"minItems",
|
|
19
|
+
"maxItems",
|
|
20
|
+
"properties",
|
|
21
|
+
"required",
|
|
22
|
+
"additionalProperties",
|
|
23
|
+
"anyOf"
|
|
24
|
+
];
|
|
25
|
+
/** The types JSON Schema names. */
|
|
26
|
+
const SCHEMA_TYPES = [
|
|
27
|
+
"string",
|
|
28
|
+
"number",
|
|
29
|
+
"integer",
|
|
30
|
+
"boolean",
|
|
31
|
+
"null",
|
|
32
|
+
"object",
|
|
33
|
+
"array"
|
|
34
|
+
];
|
|
35
|
+
/** Whether a keyword holds a number, when it is there: one that holds another thing would refuse nothing. */
|
|
36
|
+
const areNumbers = (schema, keywords) => keywords.every((keyword) => schema[keyword] === undefined || typeof schema[keyword] === "number");
|
|
37
|
+
/** Whether a pattern compiles, and repeats no repeat (`(a+)+`), the form that hangs a page on a short text. */
|
|
38
|
+
const isUsablePattern = (pattern) => {
|
|
39
|
+
if (pattern === undefined)
|
|
40
|
+
return true;
|
|
41
|
+
if (typeof pattern !== "string" || /\([^)]*[+*}][^)]*\)[+*{]/.test(pattern))
|
|
42
|
+
return false;
|
|
43
|
+
try {
|
|
44
|
+
return new RegExp(pattern, "u") !== undefined;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
/** Whether a keyword holding one schema, or several, holds schemas. */
|
|
51
|
+
const areNested = (value) => {
|
|
52
|
+
const { items, properties, additionalProperties, anyOf } = value;
|
|
53
|
+
return ((items === undefined || isValueSchema(items)) &&
|
|
54
|
+
(properties === undefined || (isRecord(properties) && Object.values(properties).every(isValueSchema))) &&
|
|
55
|
+
(additionalProperties === undefined ||
|
|
56
|
+
typeof additionalProperties === "boolean" ||
|
|
57
|
+
isValueSchema(additionalProperties)) &&
|
|
58
|
+
(anyOf === undefined || (Array.isArray(anyOf) && anyOf.every(isValueSchema))));
|
|
59
|
+
};
|
|
60
|
+
/** Whether the keywords of one level hold what they say. */
|
|
61
|
+
const areLeavesRead = (value) => {
|
|
62
|
+
const { type, required } = value;
|
|
63
|
+
const types = type === undefined ? [] : [type].flat();
|
|
64
|
+
return (types.every((each) => SCHEMA_TYPES.includes(each)) &&
|
|
65
|
+
(value["enum"] === undefined || Array.isArray(value["enum"])) &&
|
|
66
|
+
(required === undefined ||
|
|
67
|
+
(Array.isArray(required) && required.every((name) => typeof name === "string"))) &&
|
|
68
|
+
areNumbers(value, ["minimum", "maximum", "minLength", "maxLength", "minItems", "maxItems"]) &&
|
|
69
|
+
isUsablePattern(value["pattern"]));
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Whether a module's `schema` is one this check reads in full, at any depth: a keyword it does not know, or one holding what
|
|
73
|
+
* it cannot use, would let through what the schema seems to refuse.
|
|
74
|
+
*
|
|
75
|
+
* @param value - the module's export.
|
|
76
|
+
*/
|
|
77
|
+
export const isValueSchema = (value) => isRecord(value) &&
|
|
78
|
+
Object.keys(value).every((key) => KEYWORDS.includes(key)) &&
|
|
79
|
+
areLeavesRead(value) &&
|
|
80
|
+
areNested(value);
|
|
81
|
+
/** Whether a value is of one of JSON Schema's types. */
|
|
82
|
+
const isOfType = (type, value) => {
|
|
83
|
+
switch (type) {
|
|
84
|
+
case "string":
|
|
85
|
+
case "boolean":
|
|
86
|
+
return typeof value === type;
|
|
87
|
+
case "number":
|
|
88
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
89
|
+
case "integer":
|
|
90
|
+
return Number.isInteger(value);
|
|
91
|
+
case "null":
|
|
92
|
+
return value === null;
|
|
93
|
+
case "array":
|
|
94
|
+
return isArgList(value);
|
|
95
|
+
case "object":
|
|
96
|
+
return isArgObject(value);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
/** Whether two values are the same JSON, whatever order an object writes its fields in. */
|
|
100
|
+
const isSameValue = (left, right) => {
|
|
101
|
+
if (Array.isArray(left) && Array.isArray(right))
|
|
102
|
+
return left.length === right.length && left.every((each, index) => isSameValue(each, right[index]));
|
|
103
|
+
if (!isRecord(left) || !isRecord(right))
|
|
104
|
+
return left === right;
|
|
105
|
+
const names = Object.keys(left);
|
|
106
|
+
return (names.length === Object.keys(right).length &&
|
|
107
|
+
names.every((name) => Object.hasOwn(right, name) && isSameValue(left[name], right[name])));
|
|
108
|
+
};
|
|
109
|
+
/** What is wrong with a value's own kind: its type and the values it may be. */
|
|
110
|
+
const kindProblem = (schema, value, path) => {
|
|
111
|
+
const types = schema.type === undefined ? [] : [schema.type].flat();
|
|
112
|
+
if (types.length > 0 && !types.some((type) => isOfType(type, value)))
|
|
113
|
+
return `${path} must be of type ${types.join(" or ")}`;
|
|
114
|
+
if (schema.enum !== undefined && !schema.enum.some((each) => isSameValue(each, value)))
|
|
115
|
+
return `${path} must be one of ${JSON.stringify(schema.enum)}`;
|
|
116
|
+
return schema.const !== undefined && !isSameValue(schema.const, value)
|
|
117
|
+
? `${path} must be ${JSON.stringify(schema.const)}`
|
|
118
|
+
: undefined;
|
|
119
|
+
};
|
|
120
|
+
/** What is wrong with a number or a text. */
|
|
121
|
+
const leafProblem = (schema, value, path) => {
|
|
122
|
+
if (typeof value === "number") {
|
|
123
|
+
if (schema.minimum !== undefined && value < schema.minimum)
|
|
124
|
+
return `${path} must be at least ${schema.minimum}`;
|
|
125
|
+
if (schema.maximum !== undefined && value > schema.maximum)
|
|
126
|
+
return `${path} must be at most ${schema.maximum}`;
|
|
127
|
+
}
|
|
128
|
+
if (typeof value !== "string")
|
|
129
|
+
return undefined;
|
|
130
|
+
// in characters, as JSON Schema counts: an emoji is one
|
|
131
|
+
const { length } = [...value];
|
|
132
|
+
if (schema.minLength !== undefined && length < schema.minLength)
|
|
133
|
+
return `${path} must have at least ${schema.minLength} characters`;
|
|
134
|
+
if (schema.maxLength !== undefined && length > schema.maxLength)
|
|
135
|
+
return `${path} must have at most ${schema.maxLength} characters`;
|
|
136
|
+
return schema.pattern !== undefined && !new RegExp(schema.pattern, "u").test(value)
|
|
137
|
+
? `${path} must match ${schema.pattern}`
|
|
138
|
+
: undefined;
|
|
139
|
+
};
|
|
140
|
+
/** What is wrong with a list. */
|
|
141
|
+
const listProblem = (schema, value, path) => {
|
|
142
|
+
if (schema.minItems !== undefined && value.length < schema.minItems)
|
|
143
|
+
return `${path} must have at least ${schema.minItems} items`;
|
|
144
|
+
if (schema.maxItems !== undefined && value.length > schema.maxItems)
|
|
145
|
+
return `${path} must have at most ${schema.maxItems} items`;
|
|
146
|
+
const { items } = schema;
|
|
147
|
+
if (items === undefined)
|
|
148
|
+
return undefined;
|
|
149
|
+
return value
|
|
150
|
+
.map((item, index) => problemAt(items, item, `${path}[${index}]`))
|
|
151
|
+
.find((each) => each !== undefined);
|
|
152
|
+
};
|
|
153
|
+
/** What is wrong with an object. */
|
|
154
|
+
const objectProblem = (schema, value, path) => {
|
|
155
|
+
const missing = (schema.required ?? []).find((name) => !Object.hasOwn(value, name));
|
|
156
|
+
if (missing !== undefined)
|
|
157
|
+
return `${path} must have ${missing}`;
|
|
158
|
+
for (const [name, each] of Object.entries(value)) {
|
|
159
|
+
const fieldPath = `${path}.${name}`;
|
|
160
|
+
const declared = schema.properties !== undefined && Object.hasOwn(schema.properties, name);
|
|
161
|
+
const field = declared ? schema.properties?.[name] : schema.additionalProperties;
|
|
162
|
+
if (field === false)
|
|
163
|
+
return `${fieldPath} is not a field it takes`;
|
|
164
|
+
const problem = isRecord(field) ? problemAt(field, each, fieldPath) : undefined;
|
|
165
|
+
if (problem !== undefined)
|
|
166
|
+
return problem;
|
|
167
|
+
}
|
|
168
|
+
return undefined;
|
|
169
|
+
};
|
|
170
|
+
/** What is wrong with a value, at a place in the whole. */
|
|
171
|
+
const problemAt = (schema, value, path) => {
|
|
172
|
+
const problem = kindProblem(schema, value, path) ?? leafProblem(schema, value, path);
|
|
173
|
+
if (problem !== undefined)
|
|
174
|
+
return problem;
|
|
175
|
+
if (schema.anyOf !== undefined && schema.anyOf.every((each) => problemAt(each, value, path) !== undefined))
|
|
176
|
+
return `${path} fits none of its forms`;
|
|
177
|
+
if (isArgList(value))
|
|
178
|
+
return listProblem(schema, value, path);
|
|
179
|
+
return isArgObject(value) ? objectProblem(schema, value, path) : undefined;
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* What is wrong with a value, in a sentence.
|
|
183
|
+
*
|
|
184
|
+
* @param schema - the control's schema.
|
|
185
|
+
* @param value - the value.
|
|
186
|
+
* @returns the sentence; none when it fits.
|
|
187
|
+
*/
|
|
188
|
+
export const schemaProblem = (schema, value) => {
|
|
189
|
+
try {
|
|
190
|
+
return problemAt(schema, value, "the value");
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
// a pattern that is no regular expression is the control's mistake: no value can be known to fit it
|
|
194
|
+
return error instanceof Error ? error.message : String(error);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a prop's value looks like when it is more than one text or number: an object's fields, a list's items, the
|
|
3
|
+
* members of a mixed union. Read from the component's types (`vite/shapeDocs.ts`) or from a story's own arg, it drives
|
|
4
|
+
* the panel's nested fields, the check on a link's values, the worst case and what agents read of a prop.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* A shape is plain JSON, so it crosses from the plugin to the page and reaches an agent as it is. A value that fits a
|
|
8
|
+
* shape is plain JSON too, so a link can hold it. What JSON cannot hold (a component, a function, a date) is a `named`
|
|
9
|
+
* leaf: only one of the source's `namedValues` can stand for it. `json` is the way out for what cannot be drawn as
|
|
10
|
+
* fields: any JSON value, typed by hand. This module holds what the first screen needs of a shape; what reads a value
|
|
11
|
+
* against one is `shapeValues.ts`, which loads with the first prop that has a shape. Pure.
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
import type { ArgValue } from "./messages.ts";
|
|
16
|
+
import type { NamedValues } from "./namedValues.ts";
|
|
17
|
+
/** One field of an object's shape. */
|
|
18
|
+
export type ShapeField = {
|
|
19
|
+
/** The field's name. */
|
|
20
|
+
readonly name: string;
|
|
21
|
+
/** What it holds. */
|
|
22
|
+
readonly shape: ValueShape;
|
|
23
|
+
/** Whether a value must give it. */
|
|
24
|
+
readonly isRequired: boolean;
|
|
25
|
+
/** Whether it may hold `null`. Left out when not. */
|
|
26
|
+
readonly isNullable?: true;
|
|
27
|
+
/** The first paragraph of its TSDoc; left out when it has none. */
|
|
28
|
+
readonly description?: string;
|
|
29
|
+
};
|
|
30
|
+
/** What a value looks like. */
|
|
31
|
+
export type ValueShape = {
|
|
32
|
+
readonly kind: "text";
|
|
33
|
+
} | {
|
|
34
|
+
readonly kind: "number";
|
|
35
|
+
} | {
|
|
36
|
+
readonly kind: "boolean";
|
|
37
|
+
/** The one value it may hold, for one branch of a discriminated union. Left out when it takes both. */
|
|
38
|
+
readonly only?: boolean;
|
|
39
|
+
} | {
|
|
40
|
+
/** One of these values. */
|
|
41
|
+
readonly kind: "choice";
|
|
42
|
+
/** The values, in the order of the type. */
|
|
43
|
+
readonly values: readonly (string | number)[];
|
|
44
|
+
} | {
|
|
45
|
+
/** Any number of items of one shape. */
|
|
46
|
+
readonly kind: "list";
|
|
47
|
+
/** The items' shape. */
|
|
48
|
+
readonly of: ValueShape;
|
|
49
|
+
} | {
|
|
50
|
+
/** A fixed number of items, each of its own shape (`[number, number]`). */
|
|
51
|
+
readonly kind: "tuple";
|
|
52
|
+
/** Each item's shape, in order. */
|
|
53
|
+
readonly items: readonly ValueShape[];
|
|
54
|
+
} | {
|
|
55
|
+
/** Named fields. */
|
|
56
|
+
readonly kind: "object";
|
|
57
|
+
/** The fields, in the order of the source. */
|
|
58
|
+
readonly fields: readonly ShapeField[];
|
|
59
|
+
} | {
|
|
60
|
+
/** Any names, each holding one shape (`Record<string, number>`). */
|
|
61
|
+
readonly kind: "record";
|
|
62
|
+
/** The values' shape. */
|
|
63
|
+
readonly of: ValueShape;
|
|
64
|
+
} | {
|
|
65
|
+
/** One of several shapes, chosen first (`"sm" | number`). */
|
|
66
|
+
readonly kind: "union";
|
|
67
|
+
/** The shapes, in the order of the type. */
|
|
68
|
+
readonly of: readonly ValueShape[];
|
|
69
|
+
} | {
|
|
70
|
+
/** What JSON cannot hold: one of the source's named values, under the type as the source writes it. */
|
|
71
|
+
readonly kind: "named";
|
|
72
|
+
/** The type, as `namedValues` lists it (`IconComponent`). */
|
|
73
|
+
readonly type: string;
|
|
74
|
+
/** Whether a plain text can be given too (a node). Left out when not. */
|
|
75
|
+
readonly canTakeText?: true;
|
|
76
|
+
} | {
|
|
77
|
+
/** A moment: a `Date`, which the story receives as one (`DateArg`). */
|
|
78
|
+
readonly kind: "date";
|
|
79
|
+
} | {
|
|
80
|
+
/** Any JSON: what fields cannot show. */
|
|
81
|
+
readonly kind: "json";
|
|
82
|
+
} | {
|
|
83
|
+
/** What a story's own arg looks like, for an arg no type describes: read from it when it is needed. */
|
|
84
|
+
readonly kind: "like";
|
|
85
|
+
/** The story's own value. */
|
|
86
|
+
readonly value: ArgValue;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Whether the panel can give a shape a value at all: a required part the source names no value for leaves it no way.
|
|
90
|
+
*
|
|
91
|
+
* @param shape - the shape.
|
|
92
|
+
* @param namedValues - the source's named values.
|
|
93
|
+
*/
|
|
94
|
+
export declare const canSetShape: (shape: ValueShape, namedValues: NamedValues) => boolean;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether the panel can give a shape a value at all: a required part the source names no value for leaves it no way.
|
|
3
|
+
*
|
|
4
|
+
* @param shape - the shape.
|
|
5
|
+
* @param namedValues - the source's named values.
|
|
6
|
+
*/
|
|
7
|
+
export const canSetShape = (shape, namedValues) => {
|
|
8
|
+
switch (shape.kind) {
|
|
9
|
+
case "named":
|
|
10
|
+
return (shape.canTakeText === true ||
|
|
11
|
+
(Object.hasOwn(namedValues, shape.type) && Object.keys(namedValues[shape.type] ?? {}).length > 0));
|
|
12
|
+
case "list":
|
|
13
|
+
return canSetShape(shape.of, namedValues);
|
|
14
|
+
case "record":
|
|
15
|
+
return canSetShape(shape.of, namedValues);
|
|
16
|
+
case "tuple":
|
|
17
|
+
return shape.items.every((item) => canSetShape(item, namedValues));
|
|
18
|
+
case "object":
|
|
19
|
+
return shape.fields.every((field) => !field.isRequired || canSetShape(field.shape, namedValues));
|
|
20
|
+
case "union":
|
|
21
|
+
return shape.of.some((member) => canSetShape(member, namedValues));
|
|
22
|
+
default:
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
};
|
package/dist/src/viewState.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* @module
|
|
14
14
|
*/
|
|
15
15
|
import { type AudienceId } from "./audiences.ts";
|
|
16
|
-
import type { CatalogueSettings } from "./catalogue.ts";
|
|
16
|
+
import type { CatalogueSettings, PlaySwitch } from "./catalogue.ts";
|
|
17
17
|
import { type DeviceChoice, type OrientationChoice } from "./deviceView.ts";
|
|
18
18
|
import { type TouchChoice, type ViewSwitch } from "./switches.ts";
|
|
19
19
|
/**
|
|
@@ -78,6 +78,11 @@ export type ViewState = {
|
|
|
78
78
|
readonly device: DeviceChoice;
|
|
79
79
|
/** How the device is held: the story's own default (`auto`), or one way. */
|
|
80
80
|
readonly orientation: OrientationChoice;
|
|
81
|
+
/**
|
|
82
|
+
* Whether a story's play function runs when its frame opens. A frame's address says only `off`: one with no word plays,
|
|
83
|
+
* so a test, a check or a tool that opens a frame runs its story's play whatever a reader chose.
|
|
84
|
+
*/
|
|
85
|
+
readonly play: PlaySwitch;
|
|
81
86
|
};
|
|
82
87
|
/** The part of the view a frame applies on its root without loading again, so the story keeps its state. */
|
|
83
88
|
export type LiveView = Pick<ViewState, "switches" | "backdrop" | "text">;
|
|
@@ -94,7 +99,7 @@ export declare const isComparing: (view: ViewState) => boolean;
|
|
|
94
99
|
/** Every tool, in the bar's order. */
|
|
95
100
|
export declare const MEASURE_TOOLS: readonly MeasureTool[];
|
|
96
101
|
/** What the view reads of a catalogue: its switches and the lists its values are checked against. */
|
|
97
|
-
export type ViewCatalogue = Pick<CatalogueSettings, "switches" | "widthRange" | "zooms" | "textSizes" | "backdrops" | "tabs" | "ownControls" | "audience">;
|
|
102
|
+
export type ViewCatalogue = Pick<CatalogueSettings, "switches" | "widthRange" | "zooms" | "textSizes" | "backdrops" | "tabs" | "ownControls" | "audience" | "readerPlay">;
|
|
98
103
|
/**
|
|
99
104
|
* A width kept in a catalogue's range, in whole pixels.
|
|
100
105
|
*
|
|
@@ -135,7 +140,7 @@ export declare const defaultView: (catalogue: ViewCatalogue) => ViewState;
|
|
|
135
140
|
* with another, or the link would open that one.
|
|
136
141
|
* @returns the parameters, in a stable order.
|
|
137
142
|
*/
|
|
138
|
-
export declare const viewParams: (view: ViewState, switches: readonly ViewSwitch[], defaultAudience?: AudienceId) => URLSearchParams;
|
|
143
|
+
export declare const viewParams: (view: ViewState, switches: readonly ViewSwitch[], defaultAudience?: AudienceId, defaultPlay?: PlaySwitch) => URLSearchParams;
|
|
139
144
|
/**
|
|
140
145
|
* Whether one of the given controls' values is changed (a switch, the background, the style sheets, the text size;
|
|
141
146
|
* the stage's width is not a view setting): the View menu's button shows a dot for the controls it holds, so a view
|
package/dist/src/viewState.js
CHANGED
|
@@ -14,11 +14,13 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { AUDIENCE_IDS, DEFAULT_AUDIENCE } from "./audiences.js";
|
|
16
16
|
import { DEVICE_PARAMETER, isDeviceId, isDeviceOrientation, ORIENTATION_PARAMETER } from "./deviceView.js";
|
|
17
|
-
import { switchValueOf, switchWithRole } from "./switches.js";
|
|
17
|
+
import { shownSwitches, switchValueOf, switchWithRole } from "./switches.js";
|
|
18
18
|
/** The page's own colour: no backdrop drawn. */
|
|
19
19
|
export const PLAIN_BACKDROP = "plain";
|
|
20
20
|
/** Forgebook's own settings the compare view can set side by side. */
|
|
21
21
|
export const OWN_COMPARE_AXES = ["text", "sheets"];
|
|
22
|
+
/** The values of the play switch. */
|
|
23
|
+
const PLAY_SWITCHES = ["on", "off"];
|
|
22
24
|
/** The view without any change. */
|
|
23
25
|
export const DEFAULT_VIEW = {
|
|
24
26
|
switches: {},
|
|
@@ -34,7 +36,8 @@ export const DEFAULT_VIEW = {
|
|
|
34
36
|
tools: [],
|
|
35
37
|
audience: DEFAULT_AUDIENCE,
|
|
36
38
|
device: "auto",
|
|
37
|
-
orientation: "auto"
|
|
39
|
+
orientation: "auto",
|
|
40
|
+
play: "on"
|
|
38
41
|
};
|
|
39
42
|
/** Every style sheet setting, in the menu's order. */
|
|
40
43
|
export const SHEETS_CHOICES = ["full", "structure", "restyled"];
|
|
@@ -142,7 +145,8 @@ export const parseView = (search, catalogue) => {
|
|
|
142
145
|
tools: toolsOf(params.get("tools")),
|
|
143
146
|
audience: choice(shown("audience"), AUDIENCE_IDS, catalogue.audience),
|
|
144
147
|
device: deviceChoice(params.get(DEVICE_PARAMETER)),
|
|
145
|
-
orientation: orientationChoice(params.get(ORIENTATION_PARAMETER))
|
|
148
|
+
orientation: orientationChoice(params.get(ORIENTATION_PARAMETER)),
|
|
149
|
+
play: choice(params.get("play"), PLAY_SWITCHES, catalogue.readerPlay)
|
|
146
150
|
};
|
|
147
151
|
};
|
|
148
152
|
/**
|
|
@@ -180,6 +184,8 @@ const frameParams = (view, switches) => {
|
|
|
180
184
|
params.set("text", String(view.text));
|
|
181
185
|
if (language !== undefined)
|
|
182
186
|
setSwitch(language);
|
|
187
|
+
if (view.play === "off")
|
|
188
|
+
params.set("play", "off");
|
|
183
189
|
return params;
|
|
184
190
|
};
|
|
185
191
|
/**
|
|
@@ -191,8 +197,13 @@ const frameParams = (view, switches) => {
|
|
|
191
197
|
* with another, or the link would open that one.
|
|
192
198
|
* @returns the parameters, in a stable order.
|
|
193
199
|
*/
|
|
194
|
-
export const viewParams = (view, switches, defaultAudience = DEFAULT_AUDIENCE) => {
|
|
200
|
+
export const viewParams = (view, switches, defaultAudience = DEFAULT_AUDIENCE, defaultPlay = DEFAULT_VIEW.play) => {
|
|
195
201
|
const params = frameParams(view, switches);
|
|
202
|
+
// the address says only what differs from the catalogue's default; the frames still hear `off`
|
|
203
|
+
if (view.play === defaultPlay)
|
|
204
|
+
params.delete("play");
|
|
205
|
+
else
|
|
206
|
+
params.set("play", view.play);
|
|
196
207
|
if (isComparing(view))
|
|
197
208
|
params.set("compare", view.compare.join(","));
|
|
198
209
|
if (view.width !== DEFAULT_VIEW.width)
|
|
@@ -278,7 +289,7 @@ export const schemeOf = (view, switches) => {
|
|
|
278
289
|
const scheme = switchWithRole(switches, "colorScheme");
|
|
279
290
|
if (scheme === undefined)
|
|
280
291
|
return "light";
|
|
281
|
-
return switchValueOf(scheme, view.switches[scheme.id])?.scheme ?? "light";
|
|
292
|
+
return switchValueOf(scheme, shownSwitches(view.switches, switches)[scheme.id])?.scheme ?? "light";
|
|
282
293
|
};
|
|
283
294
|
/**
|
|
284
295
|
* Whether a view draws in the higher contrast: its contrast switch's value says so; never without one.
|
|
@@ -290,7 +301,7 @@ export const isMoreContrastOf = (view, switches) => {
|
|
|
290
301
|
const contrast = switchWithRole(switches, "contrast");
|
|
291
302
|
if (contrast === undefined)
|
|
292
303
|
return false;
|
|
293
|
-
return switchValueOf(contrast, view.switches[contrast.id])?.isMore === true;
|
|
304
|
+
return switchValueOf(contrast, shownSwitches(view.switches, switches)[contrast.id])?.isMore === true;
|
|
294
305
|
};
|
|
295
306
|
/**
|
|
296
307
|
* The language a view shows: the language switch's value, empty for the stories' own text.
|
|
@@ -300,7 +311,9 @@ export const isMoreContrastOf = (view, switches) => {
|
|
|
300
311
|
*/
|
|
301
312
|
export const languageOf = (view, switches) => {
|
|
302
313
|
const language = switchWithRole(switches, "language");
|
|
303
|
-
return language === undefined
|
|
314
|
+
return language === undefined
|
|
315
|
+
? ""
|
|
316
|
+
: (shownSwitches(view.switches, switches)[language.id] ?? language.default);
|
|
304
317
|
};
|
|
305
318
|
/**
|
|
306
319
|
* Whether a view simulates a finger.
|
|
@@ -341,11 +354,15 @@ export const withTouchOf = (view, from, choice) => {
|
|
|
341
354
|
* @param view - the view's switches.
|
|
342
355
|
* @param switches - the catalogue's switches.
|
|
343
356
|
*/
|
|
344
|
-
export const codeGlobalsOf = (view, switches) =>
|
|
345
|
-
|
|
346
|
-
.
|
|
357
|
+
export const codeGlobalsOf = (view, switches) => {
|
|
358
|
+
const shown = shownSwitches(view.switches, switches);
|
|
359
|
+
return Object.fromEntries(switches
|
|
360
|
+
.filter((each) => each.apply.kind === "code" || each.role === "touch")
|
|
361
|
+
.map((each) => [each.id, shown[each.id] ?? each.default]));
|
|
362
|
+
};
|
|
347
363
|
/** The parameters only the shell reads: a frame's address leaves them out. */
|
|
348
364
|
const SHELL_PARAMETERS = [
|
|
365
|
+
"tag",
|
|
349
366
|
"compare",
|
|
350
367
|
"width",
|
|
351
368
|
"height",
|
|
@@ -24,6 +24,8 @@ export type StoryComponent = {
|
|
|
24
24
|
* can renew the docs.
|
|
25
25
|
*/
|
|
26
26
|
readonly sources: readonly string[];
|
|
27
|
+
/** Whether its file exports it as its default, which an import then writes without braces; read for `forgebook new`. */
|
|
28
|
+
readonly isDefaultExport?: boolean;
|
|
27
29
|
};
|
|
28
30
|
/** What a framework reads of a story file: its component, `{ docs: { name: null } }` without one, or why it cannot. */
|
|
29
31
|
export type StoryComponentResult = StoryComponent | {
|
|
@@ -35,6 +37,11 @@ export type StoryComponentResult = StoryComponent | {
|
|
|
35
37
|
* @param storyFile - the story file's absolute path.
|
|
36
38
|
*/
|
|
37
39
|
export type ExtractStoryComponent = (storyFile: string) => StoryComponentResult;
|
|
40
|
+
/** What a catalogue tells an adapter of how much of the app's build it reads. */
|
|
41
|
+
export type AdapterContext = {
|
|
42
|
+
/** Whether it reads the app's build at all: `false` with `appBuild: false`, when no project code of it may run. */
|
|
43
|
+
readonly readsAppBuild: boolean;
|
|
44
|
+
};
|
|
38
45
|
/** A framework, as the plugin uses it. */
|
|
39
46
|
export type FrameworkAdapter = {
|
|
40
47
|
/** The framework's name, as `forgebook-docs --framework` writes it (`react`). */
|
|
@@ -57,8 +64,12 @@ export type FrameworkAdapter = {
|
|
|
57
64
|
* opens, since Vite's scanner cannot read pages that are generated; none by default.
|
|
58
65
|
*/
|
|
59
66
|
readonly browserDependencies?: readonly string[];
|
|
60
|
-
/**
|
|
61
|
-
|
|
67
|
+
/**
|
|
68
|
+
* The Vite plugins the framework needs in a catalogue (React's Fast Refresh); none by default. Given what the catalogue
|
|
69
|
+
* reads of the app's build, for an adapter that reads more of it (Nuxt's modules); called with nothing by an older
|
|
70
|
+
* core.
|
|
71
|
+
*/
|
|
72
|
+
readonly vitePlugins?: (context?: AdapterContext) => Promise<readonly PluginOption[]>;
|
|
62
73
|
/** The framework's own kind of component file, for a framework whose components are not all TypeScript; none by default. */
|
|
63
74
|
readonly componentFiles?: ComponentFiles;
|
|
64
75
|
/**
|
|
@@ -73,6 +84,13 @@ export type FrameworkAdapter = {
|
|
|
73
84
|
* program and leaves out the code Vite's plugins add to it (Angular's): an edit of its story files reloads the pages.
|
|
74
85
|
*/
|
|
75
86
|
readonly redrawsEditedStories?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Whether Forgebook compiles the JSX of the project's `.js` files with Vite's JSX options (`jsxInScripts.ts`), as
|
|
89
|
+
* Storybook's webpack builder lets a library write it: `true` for a framework whose JSX Vite's compiler writes
|
|
90
|
+
* (React's, Preact's). `false` by default: for one whose JSX is another compiler's (Solid's), or whose plugins compile
|
|
91
|
+
* such files themselves (React Native Web's, with Flow types).
|
|
92
|
+
*/
|
|
93
|
+
readonly compilesJsxInScripts?: boolean;
|
|
76
94
|
};
|
|
77
95
|
/**
|
|
78
96
|
* A framework's own kind of component file (Vue's `.vue`): what the plugin must know of a file that is not TypeScript,
|
|
@@ -98,12 +116,32 @@ export type StoryFileShape = {
|
|
|
98
116
|
};
|
|
99
117
|
/** Reads the component a file exports (`forgebook new`): the export named, or the file's only component. */
|
|
100
118
|
export type ExtractFileComponent = (file: string, exportName?: string) => StoryComponentResult;
|
|
119
|
+
/**
|
|
120
|
+
* One place the application draws a component, as `forgebook new` reads it: the props it gives with a value code can
|
|
121
|
+
* hold as it is (a literal, or a list or an object of literals), each written as source code.
|
|
122
|
+
*/
|
|
123
|
+
export type CallSite = {
|
|
124
|
+
/** The file that draws it, absolute. */
|
|
125
|
+
readonly file: string;
|
|
126
|
+
/** Each prop given a literal value, by name, as code (`"danger"`, `3`, `true`, `["a", "b"]`). */
|
|
127
|
+
readonly args: Readonly<Record<string, string>>;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Finds where an application draws a component.
|
|
131
|
+
*
|
|
132
|
+
* @param file - the component's file, absolute.
|
|
133
|
+
* @param name - the name the component is exported by (`default` for a default export).
|
|
134
|
+
* @returns the call sites, in the order of their files; a message when they cannot be read.
|
|
135
|
+
*/
|
|
136
|
+
export type ExtractCallSites = (file: string, name: string) => readonly CallSite[] | string;
|
|
101
137
|
/** A framework's docs module, as the plugin and the commands load it. */
|
|
102
138
|
export type DocsModule = {
|
|
103
139
|
/** Reads a story file's component. */
|
|
104
140
|
readonly extractStoryComponent: ExtractStoryComponent;
|
|
105
141
|
/** Reads a component a file exports; none in a framework package that does not offer it yet. */
|
|
106
142
|
readonly extractFileComponent?: ExtractFileComponent;
|
|
143
|
+
/** Finds where the application draws a component, for the values `forgebook new` writes; none when not offered. */
|
|
144
|
+
readonly extractCallSites?: ExtractCallSites;
|
|
107
145
|
/** The module a story file imports its types from (`@forgebook/react`); none when not given. */
|
|
108
146
|
readonly storyTypesModule?: string;
|
|
109
147
|
/**
|
package/dist/src/vite/adapter.js
CHANGED
|
@@ -21,6 +21,7 @@ export const isDocsModule = (module) => typeof module === "object" &&
|
|
|
21
21
|
"extractStoryComponent" in module &&
|
|
22
22
|
typeof module.extractStoryComponent === "function" &&
|
|
23
23
|
(!("extractFileComponent" in module) || typeof module.extractFileComponent === "function") &&
|
|
24
|
+
(!("extractCallSites" in module) || typeof module.extractCallSites === "function") &&
|
|
24
25
|
(!("storyTypesModule" in module) || typeof module.storyTypesModule === "string") &&
|
|
25
26
|
(!("storyFileShape" in module) || typeof module.storyFileShape === "function") &&
|
|
26
27
|
(!("sourcesChanged" in module) || typeof module.sourcesChanged === "function");
|