forgebook 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +917 -74
- package/dist/bin/forgebook/agentClient.d.ts +2 -1
- package/dist/bin/forgebook/agentClient.js +13 -6
- package/dist/bin/forgebook/agentGuide.d.ts +59 -0
- package/dist/bin/forgebook/agentGuide.js +203 -0
- package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
- package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
- package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
- package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
- package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
- package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
- package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
- package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
- package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
- package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
- package/dist/bin/forgebook/agentText.d.ts +23 -3
- package/dist/bin/forgebook/agentText.js +175 -28
- package/dist/bin/forgebook/agents.md +20 -191
- package/dist/bin/forgebook/agentsText.js +2 -1
- package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
- package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
- package/dist/bin/forgebook/auditCommand.d.mts +8 -0
- package/dist/bin/forgebook/auditCommand.mjs +75 -0
- package/dist/bin/forgebook/auditRun.d.ts +95 -0
- package/dist/bin/forgebook/auditRun.js +270 -0
- package/dist/bin/forgebook/browserRun.d.ts +21 -0
- package/dist/bin/forgebook/browserRun.js +57 -0
- package/dist/bin/forgebook/buildFailure.d.ts +7 -0
- package/dist/bin/forgebook/buildFailure.js +47 -0
- package/dist/bin/forgebook/buildWatch.d.ts +52 -0
- package/dist/bin/forgebook/buildWatch.js +137 -0
- package/dist/bin/forgebook/builtCatalogue.js +9 -5
- package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
- package/dist/bin/forgebook/catalogueCommands.js +23 -0
- package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
- package/dist/bin/forgebook/catalogueVite.js +14 -6
- package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
- package/dist/bin/forgebook/commandCacheClaim.js +170 -0
- package/dist/bin/forgebook/commandServer.d.ts +8 -0
- package/dist/bin/forgebook/commandServer.js +61 -13
- package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
- package/dist/bin/forgebook/graphCommand.d.mts +8 -0
- package/dist/bin/forgebook/graphCommand.mjs +84 -0
- package/dist/bin/forgebook/guide/commands.md +57 -0
- package/dist/bin/forgebook/guide/devices.md +17 -0
- package/dist/bin/forgebook/guide/docs-pages.md +13 -0
- package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
- package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
- package/dist/bin/forgebook/guide/links.md +29 -0
- package/dist/bin/forgebook/guide/setup.md +23 -0
- package/dist/bin/forgebook/guide/stories.md +90 -0
- package/dist/bin/forgebook/guide/switches.md +43 -0
- package/dist/bin/forgebook/guideCommand.d.mts +13 -0
- package/dist/bin/forgebook/guideCommand.mjs +37 -0
- package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
- package/dist/bin/forgebook/importers/storybook.js +11 -5
- package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
- package/dist/bin/forgebook/initCommands.d.mts +11 -0
- package/dist/bin/forgebook/initCommands.mjs +51 -78
- package/dist/bin/forgebook/initConfig.d.ts +5 -3
- package/dist/bin/forgebook/initConfig.js +6 -3
- package/dist/bin/forgebook/initInstall.d.ts +15 -0
- package/dist/bin/forgebook/initInstall.js +77 -0
- package/dist/bin/forgebook/initPrint.d.ts +9 -0
- package/dist/bin/forgebook/initPrint.js +60 -0
- package/dist/bin/forgebook/initRefusals.d.ts +45 -0
- package/dist/bin/forgebook/initRefusals.js +91 -0
- package/dist/bin/forgebook/initRun.d.ts +28 -0
- package/dist/bin/forgebook/initRun.js +311 -0
- package/dist/bin/forgebook/mcpCommand.mjs +38 -4
- package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
- package/dist/bin/forgebook/mcpGraph.js +24 -0
- package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
- package/dist/bin/forgebook/mcpTokens.js +58 -0
- package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
- package/dist/bin/forgebook/mcpToolParts.js +10 -0
- package/dist/bin/forgebook/mcpTools.d.ts +13 -6
- package/dist/bin/forgebook/mcpTools.js +57 -90
- package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
- package/dist/bin/forgebook/mcpVerify.js +36 -0
- package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
- package/dist/bin/forgebook/migrate/codemods.js +61 -0
- package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
- package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
- package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
- package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
- package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
- package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
- package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
- package/dist/bin/forgebook/migrate/migrateText.js +30 -0
- package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
- package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
- package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
- package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
- package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
- package/dist/bin/forgebook/newProject/newProject.js +180 -0
- package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
- package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
- package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
- package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
- package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
- package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
- package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
- package/dist/bin/forgebook/newProject/projectLook.js +293 -0
- package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
- package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
- package/dist/bin/forgebook/newRepair.d.ts +45 -0
- package/dist/bin/forgebook/newRepair.js +157 -0
- package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
- package/dist/bin/forgebook/newRepairRun.js +148 -0
- package/dist/bin/forgebook/newStories.d.ts +23 -1
- package/dist/bin/forgebook/newStories.js +101 -11
- package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
- package/dist/bin/forgebook/newStoriesFile.js +43 -4
- package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
- package/dist/bin/forgebook/prebundleRun.js +28 -8
- package/dist/bin/forgebook/proofCommand.d.mts +15 -0
- package/dist/bin/forgebook/proofCommand.mjs +212 -0
- package/dist/bin/forgebook/proofRun.d.ts +63 -0
- package/dist/bin/forgebook/proofRun.js +412 -0
- package/dist/bin/forgebook/proofText.d.ts +36 -0
- package/dist/bin/forgebook/proofText.js +131 -0
- package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
- package/dist/bin/forgebook/proofWorkflow.js +205 -0
- package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
- package/dist/bin/forgebook/setArgsTool.js +70 -0
- package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
- package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
- package/dist/bin/forgebook/storyCheckRun.js +83 -9
- package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
- package/dist/bin/forgebook/storyFileIds.js +14 -0
- package/dist/bin/forgebook/stressCases.d.ts +31 -0
- package/dist/bin/forgebook/stressCases.js +79 -0
- package/dist/bin/forgebook/stressRun.d.ts +12 -0
- package/dist/bin/forgebook/stressRun.js +61 -0
- package/dist/bin/forgebook/stressText.d.ts +27 -0
- package/dist/bin/forgebook/stressText.js +46 -0
- package/dist/bin/forgebook/verifyBase.d.ts +45 -0
- package/dist/bin/forgebook/verifyBase.js +196 -0
- package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
- package/dist/bin/forgebook/verifyCommand.mjs +125 -0
- package/dist/bin/forgebook/verifyRun.d.ts +63 -0
- package/dist/bin/forgebook/verifyRun.js +108 -0
- package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
- package/dist/bin/forgebook/verifyVerdict.js +297 -0
- package/dist/bin/forgebook/workflowActions.d.ts +23 -0
- package/dist/bin/forgebook/workflowActions.js +23 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
- package/dist/src/addressArgs.d.ts +54 -6
- package/dist/src/addressArgs.js +72 -16
- package/dist/src/addressArgsParam.d.ts +54 -0
- package/dist/src/addressArgsParam.js +51 -0
- package/dist/src/addressTexts.d.ts +14 -0
- package/dist/src/addressTexts.js +28 -21
- package/dist/src/agentIndexFile.d.ts +11 -0
- package/dist/src/agentIndexFile.js +11 -0
- package/dist/src/argConditions.d.ts +52 -0
- package/dist/src/argConditions.js +80 -0
- package/dist/src/argControl.d.ts +100 -0
- package/dist/src/argControl.js +0 -0
- package/dist/src/argExpression.d.ts +21 -0
- package/dist/src/argExpression.js +30 -0
- package/dist/src/argTypes.d.ts +40 -51
- package/dist/src/argTypes.js +66 -184
- package/dist/src/argsProps.d.ts +3 -3
- package/dist/src/argsProps.js +11 -5
- package/dist/src/bundlerErrors.d.ts +29 -0
- package/dist/src/bundlerErrors.js +49 -0
- package/dist/src/catalogue.d.ts +31 -0
- package/dist/src/catalogue.js +13 -2
- package/dist/src/catalogueRefs.d.ts +75 -0
- package/dist/src/catalogueRefs.js +122 -0
- package/dist/src/componentDocs.d.ts +71 -0
- package/dist/src/componentDocs.js +15 -2
- package/dist/src/frame/callValues.d.ts +19 -0
- package/dist/src/frame/callValues.js +58 -0
- package/dist/src/frame/canvasScheme.d.ts +33 -0
- package/dist/src/frame/canvasScheme.js +67 -0
- package/dist/src/frame/frame.css +36 -3
- package/dist/src/frame/frameStatus.d.ts +16 -1
- package/dist/src/frame/frameStatus.js +16 -1
- package/dist/src/frame/frameView.js +4 -3
- package/dist/src/frame/mountFrame.d.ts +7 -1
- package/dist/src/frame/mountFrame.js +153 -46
- package/dist/src/frame/panelValues.d.ts +35 -0
- package/dist/src/frame/panelValues.js +127 -0
- package/dist/src/frame/playActions.d.ts +39 -0
- package/dist/src/frame/playActions.js +98 -0
- package/dist/src/frame/playStepper.d.ts +28 -0
- package/dist/src/frame/playStepper.js +38 -0
- package/dist/src/frame/playStory.d.ts +9 -1
- package/dist/src/frame/playStory.js +49 -3
- package/dist/src/frame/renderer.d.ts +34 -1
- package/dist/src/frame/renderer.js +24 -0
- package/dist/src/frame/shellChannel.d.ts +1 -1
- package/dist/src/frame/shellChannel.js +1 -1
- package/dist/src/frame/shellCheck.d.ts +17 -0
- package/dist/src/frame/shellCheck.js +25 -0
- package/dist/src/frame/shellMessageCheck.d.ts +7 -0
- package/dist/src/frame/shellMessageCheck.js +53 -0
- package/dist/src/frame/storyContent.d.ts +50 -0
- package/dist/src/frame/storyContent.js +73 -0
- package/dist/src/frame/storyModule.d.ts +9 -0
- package/dist/src/frame/storyModule.js +20 -2
- package/dist/src/frame/storyRun.d.ts +15 -7
- package/dist/src/frame/storyRun.js +64 -15
- package/dist/src/frame/valueSheets.d.ts +35 -0
- package/dist/src/frame/valueSheets.js +99 -0
- package/dist/src/hotModules.d.ts +20 -0
- package/dist/src/hotModules.js +23 -0
- package/dist/src/jsxCode.d.ts +1 -14
- package/dist/src/jsxCode.js +46 -10
- package/dist/src/liveErrors.d.ts +30 -4
- package/dist/src/liveErrors.js +18 -3
- package/dist/src/messages.d.ts +77 -27
- package/dist/src/messages.js +58 -100
- package/dist/src/namedValues.d.ts +2 -26
- package/dist/src/namedValues.js +0 -47
- package/dist/src/pageConfig.d.ts +2 -0
- package/dist/src/playTrace.d.ts +19 -2
- package/dist/src/playTrace.js +10 -5
- package/dist/src/plugin.d.ts +10 -3
- package/dist/src/previewRelay.js +9 -1
- package/dist/src/printable.d.ts +12 -0
- package/dist/src/printable.js +22 -0
- package/dist/src/propsSignature.d.ts +37 -0
- package/dist/src/propsSignature.js +40 -0
- package/dist/src/search.d.ts +41 -5
- package/dist/src/search.js +93 -23
- package/dist/src/searchMatch.d.ts +4 -1
- package/dist/src/searchMatch.js +26 -5
- package/dist/src/searchTypos.d.ts +88 -0
- package/dist/src/searchTypos.js +178 -0
- package/dist/src/shapeValues.d.ts +86 -0
- package/dist/src/shapeValues.js +295 -0
- package/dist/src/shell/ApiReference.js +6 -3
- package/dist/src/shell/ApiTableBox.d.ts +15 -0
- package/dist/src/shell/ApiTableBox.js +11 -0
- package/dist/src/shell/AppearanceMenu.d.ts +4 -1
- package/dist/src/shell/AppearanceMenu.js +9 -6
- package/dist/src/shell/CodeTab.d.ts +3 -2
- package/dist/src/shell/CodeTab.js +3 -2
- package/dist/src/shell/CodeText.d.ts +1 -1
- package/dist/src/shell/CodeText.js +2 -3
- package/dist/src/shell/CompareGrid.js +1 -1
- package/dist/src/shell/ComponentPage.d.ts +1 -1
- package/dist/src/shell/ComponentPage.js +5 -1
- package/dist/src/shell/CustomControl.d.ts +34 -0
- package/dist/src/shell/CustomControl.js +132 -0
- package/dist/src/shell/DocContainers.js +1 -1
- package/dist/src/shell/DocPage.js +2 -2
- package/dist/src/shell/DroppedArgsList.d.ts +2 -2
- package/dist/src/shell/DroppedArgsList.js +1 -1
- package/dist/src/shell/EmbedPage.js +58 -14
- package/dist/src/shell/Example.d.ts +5 -1
- package/dist/src/shell/Example.js +16 -8
- package/dist/src/shell/FrameView.d.ts +6 -3
- package/dist/src/shell/FrameView.js +2 -2
- package/dist/src/shell/HomePage.d.ts +3 -1
- package/dist/src/shell/HomePage.js +16 -6
- package/dist/src/shell/InfoTip.js +2 -2
- package/dist/src/shell/InteractionsTab.d.ts +11 -4
- package/dist/src/shell/InteractionsTab.js +18 -2
- package/dist/src/shell/LazyPage.js +1 -1
- package/dist/src/shell/PackageHtml.js +3 -1
- package/dist/src/shell/PinnedControl.js +14 -62
- package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
- package/dist/src/shell/PinnedControlMenu.js +72 -0
- package/dist/src/shell/PluginBlockHost.js +2 -1
- package/dist/src/shell/PluginTabHost.js +19 -2
- package/dist/src/shell/PropFields.d.ts +3 -1
- package/dist/src/shell/PropFields.js +9 -6
- package/dist/src/shell/PropRows.d.ts +23 -2
- package/dist/src/shell/PropRows.js +58 -19
- package/dist/src/shell/PropsTab.d.ts +12 -5
- package/dist/src/shell/PropsTab.js +9 -21
- package/dist/src/shell/RefStoryPage.d.ts +33 -0
- package/dist/src/shell/RefStoryPage.js +123 -0
- package/dist/src/shell/SearchPanel.js +51 -24
- package/dist/src/shell/Shell.d.ts +18 -0
- package/dist/src/shell/Shell.js +137 -22
- package/dist/src/shell/ShortcutHelp.d.ts +22 -0
- package/dist/src/shell/ShortcutHelp.js +66 -0
- package/dist/src/shell/Sidebar.d.ts +17 -4
- package/dist/src/shell/Sidebar.js +92 -41
- package/dist/src/shell/SidebarDocs.js +2 -2
- package/dist/src/shell/SidebarEntries.js +5 -3
- package/dist/src/shell/SidebarHandle.d.ts +3 -5
- package/dist/src/shell/SidebarHandle.js +4 -4
- package/dist/src/shell/SidebarRefs.d.ts +39 -0
- package/dist/src/shell/SidebarRefs.js +99 -0
- package/dist/src/shell/SidebarSearch.js +37 -9
- package/dist/src/shell/SignatureReference.js +3 -1
- package/dist/src/shell/Stage.d.ts +10 -2
- package/dist/src/shell/Stage.js +35 -60
- package/dist/src/shell/StatusBadges.d.ts +54 -0
- package/dist/src/shell/StatusBadges.js +77 -0
- package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
- package/dist/src/shell/StoryCodeBlock.js +7 -6
- package/dist/src/shell/SwitchGallery.d.ts +36 -0
- package/dist/src/shell/SwitchGallery.js +17 -0
- package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
- package/dist/src/shell/SwitchGalleryPanel.js +99 -0
- package/dist/src/shell/TagFilter.d.ts +24 -0
- package/dist/src/shell/TagFilter.js +45 -0
- package/dist/src/shell/TagViews.d.ts +39 -0
- package/dist/src/shell/TagViews.js +20 -0
- package/dist/src/shell/Toolbar.d.ts +4 -1
- package/dist/src/shell/Toolbar.js +17 -7
- package/dist/src/shell/ToolbarControl.d.ts +3 -0
- package/dist/src/shell/ToolbarControl.js +23 -6
- package/dist/src/shell/ViewMenuPanel.js +6 -1
- package/dist/src/shell/argChecks.d.ts +22 -0
- package/dist/src/shell/argChecks.js +20 -0
- package/dist/src/shell/asideStory.d.ts +17 -4
- package/dist/src/shell/asideStory.js +21 -4
- package/dist/src/shell/audienceSections.css +9 -9
- package/dist/src/shell/catalogueContext.d.ts +1 -1
- package/dist/src/shell/catalogueContext.js +6 -1
- package/dist/src/shell/codeSpans.d.ts +27 -0
- package/dist/src/shell/codeSpans.js +76 -0
- package/dist/src/shell/compareVariants.d.ts +4 -2
- package/dist/src/shell/compareVariants.js +16 -8
- package/dist/src/shell/composition.d.ts +23 -0
- package/dist/src/shell/composition.js +26 -0
- package/dist/src/shell/controlCycle.d.ts +1 -1
- package/dist/src/shell/controlCycle.js +3 -2
- package/dist/src/shell/customControls.d.ts +55 -0
- package/dist/src/shell/customControls.js +70 -0
- package/dist/src/shell/docPage.css +22 -22
- package/dist/src/shell/dockTabs.d.ts +19 -3
- package/dist/src/shell/dockTabs.js +28 -20
- package/dist/src/shell/embed.css +7 -7
- package/dist/src/shell/framesOrigin.d.ts +7 -0
- package/dist/src/shell/framesOrigin.js +1 -1
- package/dist/src/shell/galleryPlace.d.ts +20 -0
- package/dist/src/shell/galleryPlace.js +26 -0
- package/dist/src/shell/icons.d.ts +1 -0
- package/dist/src/shell/icons.js +1 -0
- package/dist/src/shell/keyboard.d.ts +14 -12
- package/dist/src/shell/keyboard.js +21 -6
- package/dist/src/shell/laterStrings.d.ts +29 -0
- package/dist/src/shell/laterStrings.js +42 -3
- package/dist/src/shell/mountShell.js +3 -0
- package/dist/src/shell/pageStrings.d.ts +4 -0
- package/dist/src/shell/pageStrings.js +4 -0
- package/dist/src/shell/pageTagView.d.ts +18 -0
- package/dist/src/shell/pageTagView.js +10 -0
- package/dist/src/shell/playMemory.d.ts +14 -0
- package/dist/src/shell/playMemory.js +8 -0
- package/dist/src/shell/propNotes.d.ts +23 -0
- package/dist/src/shell/propNotes.js +37 -0
- package/dist/src/shell/refIndexLoad.d.ts +17 -0
- package/dist/src/shell/refIndexLoad.js +38 -0
- package/dist/src/shell/refParts.d.ts +34 -0
- package/dist/src/shell/refParts.js +9 -0
- package/dist/src/shell/refStory.css +21 -0
- package/dist/src/shell/refStrings.d.ts +13 -0
- package/dist/src/shell/refStrings.js +21 -0
- package/dist/src/shell/search.css +11 -11
- package/dist/src/shell/shell.css +348 -168
- package/dist/src/shell/shellScheme.js +2 -2
- package/dist/src/shell/shortcutHelp.css +64 -0
- package/dist/src/shell/stageArgs.d.ts +53 -0
- package/dist/src/shell/stageArgs.js +64 -0
- package/dist/src/shell/statusBadges.css +51 -0
- package/dist/src/shell/strings.d.ts +7 -16
- package/dist/src/shell/strings.js +12 -17
- package/dist/src/shell/switchGallery.css +104 -0
- package/dist/src/shell/tagFilter.css +46 -0
- package/dist/src/shell/tagView.d.ts +20 -0
- package/dist/src/shell/tagView.js +10 -0
- package/dist/src/shell/useAddressArgs.d.ts +27 -2
- package/dist/src/shell/useAddressArgs.js +71 -14
- package/dist/src/shell/useControlKeys.js +2 -2
- package/dist/src/shell/useEditedProblems.d.ts +6 -0
- package/dist/src/shell/useEditedProblems.js +40 -0
- package/dist/src/shell/useFrameMessages.js +3 -0
- package/dist/src/shell/useListedTree.d.ts +13 -0
- package/dist/src/shell/useListedTree.js +32 -0
- package/dist/src/shell/usePageFrames.js +2 -2
- package/dist/src/shell/usePopover.d.ts +5 -0
- package/dist/src/shell/usePopover.js +7 -1
- package/dist/src/shell/useRefIndex.d.ts +22 -0
- package/dist/src/shell/useRefIndex.js +36 -0
- package/dist/src/shell/useScrollStops.d.ts +20 -0
- package/dist/src/shell/useScrollStops.js +41 -0
- package/dist/src/shell/useShortcutHelp.d.ts +18 -0
- package/dist/src/shell/useShortcutHelp.js +32 -0
- package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
- package/dist/src/shell/useSidebarOverlay.js +12 -4
- package/dist/src/shell/useStoryCode.d.ts +2 -1
- package/dist/src/shell/useStoryCode.js +12 -7
- package/dist/src/shell/useToolbarLayout.d.ts +5 -1
- package/dist/src/shell/useToolbarLayout.js +2 -2
- package/dist/src/shell/useWorstCase.d.ts +8 -2
- package/dist/src/shell/useWorstCase.js +2 -2
- package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
- package/dist/src/shell/valueEditors/FileEditor.js +66 -0
- package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
- package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
- package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
- package/dist/src/shell/valueEditors/ListEditor.js +82 -0
- package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
- package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
- package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
- package/dist/src/shell/valueEditors/PropEditor.js +53 -0
- package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
- package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
- package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
- package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
- package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
- package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
- package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
- package/dist/src/shell/valueEditors/ValueField.js +147 -0
- package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
- package/dist/src/shell/valueEditors/editorStrings.js +66 -0
- package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
- package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
- package/dist/src/shell/valueEditors/valueEditors.css +153 -0
- package/dist/src/shell/worstArgs.d.ts +8 -5
- package/dist/src/shell/worstArgs.js +14 -7
- package/dist/src/shellTheme.d.ts +1 -1
- package/dist/src/shellTheme.js +15 -1
- package/dist/src/shellTheme.types.d.ts +4 -0
- package/dist/src/shellWord.d.ts +12 -0
- package/dist/src/shellWord.js +15 -0
- package/dist/src/sourceFiles.js +2 -1
- package/dist/src/storyArgTypes.d.ts +57 -0
- package/dist/src/storyArgTypes.js +195 -0
- package/dist/src/storyBackground.js +14 -3
- package/dist/src/storyCheck.d.ts +85 -3
- package/dist/src/storyCheck.js +23 -1
- package/dist/src/storyCodeText.d.ts +46 -0
- package/dist/src/storyCodeText.js +27 -0
- package/dist/src/storyControls.d.ts +100 -0
- package/dist/src/storyControls.js +100 -0
- package/dist/src/storyStatuses.d.ts +55 -0
- package/dist/src/storyStatuses.js +104 -0
- package/dist/src/storyTagNames.d.ts +25 -0
- package/dist/src/storyTagNames.js +25 -0
- package/dist/src/storyTags.d.ts +29 -0
- package/dist/src/storyTags.js +85 -0
- package/dist/src/storyTree.d.ts +13 -0
- package/dist/src/storyTree.js +24 -4
- package/dist/src/storybookArgs.d.ts +24 -0
- package/dist/src/storybookArgs.js +185 -0
- package/dist/src/switches.d.ts +66 -3
- package/dist/src/switches.js +42 -1
- package/dist/src/valueSchema.d.ts +28 -0
- package/dist/src/valueSchema.js +196 -0
- package/dist/src/valueShape.d.ts +94 -0
- package/dist/src/valueShape.js +25 -0
- package/dist/src/viewState.d.ts +8 -3
- package/dist/src/viewState.js +27 -10
- package/dist/src/vite/adapter.d.ts +40 -2
- package/dist/src/vite/adapter.js +1 -0
- package/dist/src/vite/agent.types.d.ts +347 -7
- package/dist/src/vite/agentApi.d.ts +23 -0
- package/dist/src/vite/agentApi.js +90 -17
- package/dist/src/vite/agentIndex.d.ts +0 -2
- package/dist/src/vite/agentIndex.js +5 -6
- package/dist/src/vite/agentRoutes.d.ts +20 -1
- package/dist/src/vite/agentRoutes.js +106 -65
- package/dist/src/vite/agentStatuses.d.ts +42 -0
- package/dist/src/vite/agentStatuses.js +67 -0
- package/dist/src/vite/agentStoryCode.d.ts +48 -0
- package/dist/src/vite/agentStoryCode.js +38 -0
- package/dist/src/vite/agentVisibility.d.ts +47 -0
- package/dist/src/vite/agentVisibility.js +174 -0
- package/dist/src/vite/appAudit.d.ts +134 -0
- package/dist/src/vite/appAudit.js +333 -0
- package/dist/src/vite/appBuildOption.d.ts +53 -0
- package/dist/src/vite/appBuildOption.js +55 -0
- package/dist/src/vite/appTokenFiles.d.ts +92 -0
- package/dist/src/vite/appTokenFiles.js +433 -0
- package/dist/src/vite/appTokens.d.ts +23 -0
- package/dist/src/vite/appTokens.js +275 -0
- package/dist/src/vite/builtTexts.d.ts +10 -0
- package/dist/src/vite/builtTexts.js +59 -22
- package/dist/src/vite/catalogueConfig.d.ts +3 -1
- package/dist/src/vite/catalogueConfig.js +15 -3
- package/dist/src/vite/changeCoverage.d.ts +74 -0
- package/dist/src/vite/changeCoverage.js +120 -0
- package/dist/src/vite/changedRoute.d.ts +30 -0
- package/dist/src/vite/changedRoute.js +197 -0
- package/dist/src/vite/checkCode.d.ts +105 -3
- package/dist/src/vite/checkCode.js +323 -36
- package/dist/src/vite/checkoutWatch.d.ts +97 -0
- package/dist/src/vite/checkoutWatch.js +287 -0
- package/dist/src/vite/closeWatch.d.ts +8 -0
- package/dist/src/vite/closeWatch.js +1 -1
- package/dist/src/vite/componentCache.d.ts +8 -0
- package/dist/src/vite/componentCache.js +66 -0
- package/dist/src/vite/componentGraph.d.ts +71 -0
- package/dist/src/vite/componentGraph.js +133 -0
- package/dist/src/vite/componentRules.d.ts +33 -0
- package/dist/src/vite/componentRules.js +105 -0
- package/dist/src/vite/componentScan.d.ts +69 -0
- package/dist/src/vite/componentScan.js +418 -0
- package/dist/src/vite/compositionCheck.d.ts +15 -0
- package/dist/src/vite/compositionCheck.js +243 -0
- package/dist/src/vite/config.d.ts +32 -1
- package/dist/src/vite/configFile.d.ts +14 -2
- package/dist/src/vite/configFile.js +124 -40
- package/dist/src/vite/configKeys.d.ts +15 -0
- package/dist/src/vite/configKeys.js +171 -0
- package/dist/src/vite/configLoadError.d.ts +23 -0
- package/dist/src/vite/configLoadError.js +71 -0
- package/dist/src/vite/cssDeclarations.d.ts +71 -0
- package/dist/src/vite/cssDeclarations.js +290 -0
- package/dist/src/vite/cssImports.d.ts +14 -0
- package/dist/src/vite/cssImports.js +48 -0
- package/dist/src/vite/cssReferences.d.ts +54 -0
- package/dist/src/vite/cssReferences.js +157 -0
- package/dist/src/vite/cssTokenValues.d.ts +50 -0
- package/dist/src/vite/cssTokenValues.js +233 -0
- package/dist/src/vite/designTokens.d.ts +24 -0
- package/dist/src/vite/designTokens.js +5 -1
- package/dist/src/vite/docsExtractor.d.ts +9 -3
- package/dist/src/vite/docsExtractor.js +11 -3
- package/dist/src/vite/docsProgram.d.ts +17 -4
- package/dist/src/vite/docsProgram.js +52 -11
- package/dist/src/vite/docsWorker.js +7 -2
- package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
- package/dist/src/vite/emptyStoryGlobs.js +52 -0
- package/dist/src/vite/fileImports.d.ts +17 -0
- package/dist/src/vite/fileImports.js +57 -0
- package/dist/src/vite/findComponent.d.ts +10 -2
- package/dist/src/vite/findComponent.js +27 -22
- package/dist/src/vite/findRoute.js +3 -2
- package/dist/src/vite/forcedStates.d.ts +9 -2
- package/dist/src/vite/forcedStates.js +12 -3
- package/dist/src/vite/forgebookPlugin.d.ts +2 -0
- package/dist/src/vite/forgebookPlugin.js +52 -72
- package/dist/src/vite/frameErrors.d.ts +19 -0
- package/dist/src/vite/frameErrors.js +70 -0
- package/dist/src/vite/framesServer.d.ts +12 -0
- package/dist/src/vite/framesServer.js +21 -4
- package/dist/src/vite/functionComponentDocs.js +81 -12
- package/dist/src/vite/generatedModules.js +4 -2
- package/dist/src/vite/gitChange.d.ts +38 -5
- package/dist/src/vite/gitChange.js +71 -11
- package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
- package/dist/src/vite/hiddenStoryFiles.js +107 -0
- package/dist/src/vite/hotSnippets.d.ts +38 -14
- package/dist/src/vite/hotSnippets.js +137 -39
- package/dist/src/vite/importedNames.d.ts +37 -0
- package/dist/src/vite/importedNames.js +138 -0
- package/dist/src/vite/indexFields.d.ts +6 -0
- package/dist/src/vite/indexFields.js +21 -0
- package/dist/src/vite/indexStoryFile.d.ts +8 -1
- package/dist/src/vite/indexStoryFile.js +22 -157
- package/dist/src/vite/jsxCallSites.d.ts +33 -0
- package/dist/src/vite/jsxCallSites.js +200 -0
- package/dist/src/vite/jsxInScripts.d.ts +67 -0
- package/dist/src/vite/jsxInScripts.js +138 -0
- package/dist/src/vite/jsxTree.d.ts +20 -0
- package/dist/src/vite/jsxTree.js +163 -0
- package/dist/src/vite/lineAndColumn.d.ts +13 -0
- package/dist/src/vite/lineAndColumn.js +18 -0
- package/dist/src/vite/lookAlikes.d.ts +65 -0
- package/dist/src/vite/lookAlikes.js +228 -0
- package/dist/src/vite/nearestToken.d.ts +17 -0
- package/dist/src/vite/nearestToken.js +9 -2
- package/dist/src/vite/packageEntries.d.ts +42 -0
- package/dist/src/vite/packageEntries.js +127 -0
- package/dist/src/vite/pages.d.ts +9 -1
- package/dist/src/vite/pages.js +108 -4
- package/dist/src/vite/pluginConfig.js +4 -0
- package/dist/src/vite/pluginIds.d.ts +2 -0
- package/dist/src/vite/pluginIds.js +5 -1
- package/dist/src/vite/pluginModules.d.ts +81 -11
- package/dist/src/vite/pluginModules.js +109 -21
- package/dist/src/vite/prebundled.d.ts +57 -15
- package/dist/src/vite/prebundled.js +80 -0
- package/dist/src/vite/previewTags.d.ts +25 -0
- package/dist/src/vite/previewTags.js +56 -0
- package/dist/src/vite/projectFiles.d.ts +54 -0
- package/dist/src/vite/projectFiles.js +116 -0
- package/dist/src/vite/projectPostcss.d.ts +70 -0
- package/dist/src/vite/projectPostcss.js +250 -0
- package/dist/src/vite/propDocs.d.ts +12 -0
- package/dist/src/vite/propDocs.js +130 -58
- package/dist/src/vite/propKind.d.ts +40 -0
- package/dist/src/vite/propKind.js +71 -0
- package/dist/src/vite/propTypeNotes.d.ts +22 -0
- package/dist/src/vite/propTypeNotes.js +51 -0
- package/dist/src/vite/publishedExports.d.ts +27 -0
- package/dist/src/vite/publishedExports.js +298 -0
- package/dist/src/vite/realFolder.d.ts +6 -0
- package/dist/src/vite/realFolder.js +25 -0
- package/dist/src/vite/refsConfig.d.ts +39 -0
- package/dist/src/vite/refsConfig.js +54 -0
- package/dist/src/vite/reuseCheck.d.ts +45 -0
- package/dist/src/vite/reuseCheck.js +260 -0
- package/dist/src/vite/runningVersions.d.ts +33 -0
- package/dist/src/vite/runningVersions.js +25 -0
- package/dist/src/vite/scriptProblems.d.ts +60 -0
- package/dist/src/vite/scriptProblems.js +155 -0
- package/dist/src/vite/searchModule.js +3 -2
- package/dist/src/vite/searchRoute.js +4 -2
- package/dist/src/vite/shapeDocs.d.ts +36 -0
- package/dist/src/vite/shapeDocs.js +177 -0
- package/dist/src/vite/singleFileComponent.d.ts +17 -0
- package/dist/src/vite/singleFileComponent.js +83 -0
- package/dist/src/vite/sourceText.d.ts +34 -0
- package/dist/src/vite/sourceText.js +72 -0
- package/dist/src/vite/sourceTokens.d.ts +7 -0
- package/dist/src/vite/sourceTokens.js +7 -2
- package/dist/src/vite/stackLines.d.ts +49 -0
- package/dist/src/vite/stackLines.js +96 -0
- package/dist/src/vite/storyCode.d.ts +22 -7
- package/dist/src/vite/storyCode.js +263 -37
- package/dist/src/vite/storyCoverage.d.ts +48 -0
- package/dist/src/vite/storyCoverage.js +179 -0
- package/dist/src/vite/storyFilesModule.d.ts +48 -3
- package/dist/src/vite/storyFilesModule.js +105 -15
- package/dist/src/vite/storyPatterns.d.ts +31 -0
- package/dist/src/vite/storyPatterns.js +140 -5
- package/dist/src/vite/storyReach.d.ts +10 -2
- package/dist/src/vite/storyReach.js +15 -11
- package/dist/src/vite/storyTopLevel.d.ts +51 -0
- package/dist/src/vite/storyTopLevel.js +146 -0
- package/dist/src/vite/storylessRoutes.d.ts +4 -3
- package/dist/src/vite/storylessRoutes.js +210 -19
- package/dist/src/vite/switchValuesCheck.d.ts +19 -0
- package/dist/src/vite/switchValuesCheck.js +164 -0
- package/dist/src/vite/switchesDocument.d.ts +15 -0
- package/dist/src/vite/switchesDocument.js +47 -0
- package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
- package/dist/src/vite/tailwindConfigTokens.js +306 -0
- package/dist/src/vite/textImports.d.ts +15 -0
- package/dist/src/vite/textImports.js +58 -0
- package/dist/src/vite/textModules.d.ts +6 -5
- package/dist/src/vite/textModules.js +13 -8
- package/dist/src/vite/tokenAnswers.d.ts +6 -2
- package/dist/src/vite/tokenAnswers.js +11 -7
- package/dist/src/vite/typeParameters.d.ts +83 -0
- package/dist/src/vite/typeParameters.js +270 -0
- package/dist/src/vite/unionProps.d.ts +37 -0
- package/dist/src/vite/unionProps.js +121 -0
- package/dist/src/vite/unresolvedTokens.d.ts +20 -0
- package/dist/src/vite/unresolvedTokens.js +193 -0
- package/dist/src/vite/usageGraph.js +10 -52
- package/dist/src/vite/usageGuidance.d.ts +9 -2
- package/dist/src/vite/usageGuidance.js +36 -8
- package/dist/src/vite/usageImports.d.ts +35 -0
- package/dist/src/vite/usageImports.js +280 -0
- package/dist/src/vite/visibilityRoute.d.ts +16 -0
- package/dist/src/vite/visibilityRoute.js +320 -0
- package/dist/src/worstCase.d.ts +2 -0
- package/dist/src/worstCase.js +2 -0
- package/package.json +28 -8
package/dist/src/playTrace.d.ts
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
-
/** Where a play or one of its steps is. */
|
|
12
|
-
export type PlayStatus = "running" | "passed" | "failed";
|
|
11
|
+
/** Where a play or one of its steps is; `off`: the reader's switch kept it from running when the story opened. */
|
|
12
|
+
export type PlayStatus = "running" | "passed" | "failed" | "off";
|
|
13
13
|
/** One step a play named. */
|
|
14
14
|
export type PlayStep = {
|
|
15
15
|
/** What the step does, as the play named it. */
|
|
@@ -21,12 +21,29 @@ export type PlayStep = {
|
|
|
21
21
|
/** Why it failed. */
|
|
22
22
|
readonly error?: string;
|
|
23
23
|
};
|
|
24
|
+
/** One thing a play did through the tools its context hands it, in the Interactions tab's log. */
|
|
25
|
+
export type PlayAction = {
|
|
26
|
+
/** What it did, as a call: `userEvent.click(<button> "Save")`. */
|
|
27
|
+
readonly label: string;
|
|
28
|
+
/** Where it is. */
|
|
29
|
+
readonly status: PlayStatus;
|
|
30
|
+
/** How long it took, in ms, once over. */
|
|
31
|
+
readonly ms?: number;
|
|
32
|
+
/** Why it failed. */
|
|
33
|
+
readonly error?: string;
|
|
34
|
+
/** The named step it ran in, its place in `steps`; none outside one. */
|
|
35
|
+
readonly step?: number;
|
|
36
|
+
};
|
|
24
37
|
/** A play's trace. */
|
|
25
38
|
export type PlayTrace = {
|
|
26
39
|
/** Where the play is. */
|
|
27
40
|
readonly status: PlayStatus;
|
|
28
41
|
/** Its named steps, in order. */
|
|
29
42
|
readonly steps: readonly PlayStep[];
|
|
43
|
+
/** What it did through its context's tools, in order; none when it did nothing through them. */
|
|
44
|
+
readonly actions?: readonly PlayAction[];
|
|
45
|
+
/** What it waits to do next, while it is stepped through; none otherwise. */
|
|
46
|
+
readonly pausedAt?: string;
|
|
30
47
|
/** How long it took, in ms, once over. */
|
|
31
48
|
readonly ms?: number;
|
|
32
49
|
/** Why it failed. */
|
package/dist/src/playTrace.js
CHANGED
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
11
|
/** Whether a value is a status. */
|
|
12
|
-
const isStatus = (value) => value === "running" || value === "passed" || value === "failed";
|
|
13
|
-
/** Whether a record's optional `ms` and `
|
|
12
|
+
const isStatus = (value) => value === "running" || value === "passed" || value === "failed" || value === "off";
|
|
13
|
+
/** Whether a record's optional `ms`, `error` and `pausedAt` have their types. */
|
|
14
14
|
const hasOptionalEnd = (record) => (record["ms"] === undefined || typeof record["ms"] === "number") &&
|
|
15
|
-
(record["error"] === undefined || typeof record["error"] === "string")
|
|
15
|
+
(record["error"] === undefined || typeof record["error"] === "string") &&
|
|
16
|
+
(record["pausedAt"] === undefined || typeof record["pausedAt"] === "string");
|
|
16
17
|
/** Whether a value is a step, as it arrives in a message. */
|
|
17
18
|
const isStep = (value) => {
|
|
18
19
|
if (typeof value !== "object" || value === null)
|
|
@@ -20,6 +21,8 @@ const isStep = (value) => {
|
|
|
20
21
|
const record = { ...value };
|
|
21
22
|
return typeof record["label"] === "string" && isStatus(record["status"]) && hasOptionalEnd(record);
|
|
22
23
|
};
|
|
24
|
+
/** Whether a value is a list of steps or actions, which share their shape. */
|
|
25
|
+
const isStepList = (value) => Array.isArray(value) && value.every(isStep);
|
|
23
26
|
/**
|
|
24
27
|
* Whether a value is a play's trace, as it arrives in a message.
|
|
25
28
|
*
|
|
@@ -29,6 +32,8 @@ export const isPlayTrace = (value) => {
|
|
|
29
32
|
if (typeof value !== "object" || value === null)
|
|
30
33
|
return false;
|
|
31
34
|
const record = { ...value };
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
return (isStatus(record["status"]) &&
|
|
36
|
+
isStepList(record["steps"]) &&
|
|
37
|
+
(record["actions"] === undefined || isStepList(record["actions"])) &&
|
|
38
|
+
hasOptionalEnd(record));
|
|
34
39
|
};
|
package/dist/src/plugin.d.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import type { FigmaLink } from "@forgebook/story-format/source";
|
|
21
21
|
import type { LoadedBeforeEach, LoadedDecorator } from "./frame/storyModule.ts";
|
|
22
|
-
import type { ViewSwitch } from "./switches.ts";
|
|
22
|
+
import type { SwitchValue, ViewSwitch } from "./switches.ts";
|
|
23
23
|
/**
|
|
24
24
|
* A version of this contract. A plugin writes the number itself, not a constant of this package: a constant would read
|
|
25
25
|
* as whichever Forgebook is installed, and no plugin could ever be refused.
|
|
@@ -62,8 +62,15 @@ export type PluginDocBlock = {
|
|
|
62
62
|
/** The module that draws it, as a specifier the catalogue's folder resolves: it exports a `PluginView` as `view`. */
|
|
63
63
|
readonly view: string;
|
|
64
64
|
};
|
|
65
|
-
/**
|
|
66
|
-
|
|
65
|
+
/**
|
|
66
|
+
* A switch a plugin adds: a catalogue's, without the roles the catalogue itself reads, which stay the catalogue's. So do a
|
|
67
|
+
* value's `implies`, which would take another switch from the catalogue, and its `preview` and `sheet`, whose paths are read
|
|
68
|
+
* from the catalogue's folder.
|
|
69
|
+
*/
|
|
70
|
+
export type PluginSwitch = Omit<ViewSwitch, "role" | "values"> & {
|
|
71
|
+
/** Its values, in their order. */
|
|
72
|
+
readonly values: readonly Omit<SwitchValue, "implies" | "preview" | "sheet">[];
|
|
73
|
+
};
|
|
67
74
|
/** What a package gives a catalogue. */
|
|
68
75
|
export type ForgebookPlugin = {
|
|
69
76
|
/** The contract it is written for: the number, written out. */
|
package/dist/src/previewRelay.js
CHANGED
|
@@ -32,7 +32,7 @@ export const previewRelay = (frameAddress, title) => {
|
|
|
32
32
|
const framesOrigin = new URL(frameAddress, window.location.href).origin;
|
|
33
33
|
const frame = document.createElement("iframe");
|
|
34
34
|
frame.title = title;
|
|
35
|
-
frame.style.cssText = "display:block;width:100%;height:100vh;border:0";
|
|
35
|
+
frame.style.cssText = "display:block;width:100%;height:100vh;border:0;color-scheme:light";
|
|
36
36
|
const tell = (message) => {
|
|
37
37
|
window.parent.postMessage(message, "*");
|
|
38
38
|
};
|
|
@@ -46,6 +46,13 @@ export const previewRelay = (frameAddress, title) => {
|
|
|
46
46
|
frame.src = frameAddress;
|
|
47
47
|
}, reloadAfterMs);
|
|
48
48
|
});
|
|
49
|
+
// the frame element takes the scheme the story's document draws in, or the browser paints an opaque canvas behind it
|
|
50
|
+
const followScheme = (data) => {
|
|
51
|
+
if (!("type" in data) || data.type !== "forgebook:scheme" || !("scheme" in data))
|
|
52
|
+
return;
|
|
53
|
+
if (data.scheme === "light" || data.scheme === "dark")
|
|
54
|
+
frame.style.colorScheme = data.scheme;
|
|
55
|
+
};
|
|
49
56
|
window.addEventListener("message", (event) => {
|
|
50
57
|
if (event.origin !== framesOrigin || event.source !== frame.contentWindow)
|
|
51
58
|
return;
|
|
@@ -53,6 +60,7 @@ export const previewRelay = (frameAddress, title) => {
|
|
|
53
60
|
if (typeof data !== "object" || data === null || !("type" in data))
|
|
54
61
|
return;
|
|
55
62
|
hasHeard = true;
|
|
63
|
+
followScheme(data);
|
|
56
64
|
if (data.type === "forgebook:ready" || data.type === "forgebook:error")
|
|
57
65
|
tell({ type: "forgebook:preview-ready" });
|
|
58
66
|
if (data.type === "forgebook:size" &&
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A text from a project's files made safe to print or to hand an agent. Pure.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* A text from a project's files made safe to print: no control characters, which could rewrite a terminal's lines, and
|
|
8
|
+
* of a bounded length.
|
|
9
|
+
*
|
|
10
|
+
* @param text - the text.
|
|
11
|
+
*/
|
|
12
|
+
export declare const printable: (text: string) => string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A text from a project's files made safe to print or to hand an agent. Pure.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/** The longest text taken from a project into a report, so a planted file cannot flood an agent's context. */
|
|
7
|
+
const PRINTABLE_LENGTH = 500;
|
|
8
|
+
/**
|
|
9
|
+
* A text from a project's files made safe to print: no control characters, which could rewrite a terminal's lines, and
|
|
10
|
+
* of a bounded length.
|
|
11
|
+
*
|
|
12
|
+
* @param text - the text.
|
|
13
|
+
*/
|
|
14
|
+
export const printable = (text) => {
|
|
15
|
+
const kept = [...text]
|
|
16
|
+
.filter((character) => {
|
|
17
|
+
const code = character.codePointAt(0) ?? 0;
|
|
18
|
+
return code >= 32 && (code < 127 || code > 159);
|
|
19
|
+
})
|
|
20
|
+
.join("");
|
|
21
|
+
return kept.length > PRINTABLE_LENGTH ? `${kept.slice(0, PRINTABLE_LENGTH)}…` : kept;
|
|
22
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The props a story file was written for, as a short signature `forgebook new` writes in the file and `changed` reads back:
|
|
3
|
+
* when the component's props no longer give the same signature, the file's args may pass a prop that is gone or miss one
|
|
4
|
+
* that is now required, and nothing else would say so (a framework ignores an unknown prop, and a new optional one is
|
|
5
|
+
* simply never shown).
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* Pure, and the same on every system: the props' names, whether each is required, and their types as the docs extractor
|
|
9
|
+
* writes them, sorted by name, hashed with FNV-1a. A change of description or default leaves it alone, since the file's
|
|
10
|
+
* args do not depend on them. The type is the extractor's text: a change inside a named type a prop uses is not seen, and
|
|
11
|
+
* a version of the extractor that writes a type differently changes the signature, which `verify` then asks to confirm.
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
import type { PropDocs } from "./componentDocs.ts";
|
|
16
|
+
/** The comment's word, followed by `: ` and the signature. */
|
|
17
|
+
export declare const PROPS_MARKER = "forgebook-props";
|
|
18
|
+
/**
|
|
19
|
+
* The signature of a component's props.
|
|
20
|
+
*
|
|
21
|
+
* @param props - the props, as the docs extractor reads them.
|
|
22
|
+
* @returns eight hexadecimal digits.
|
|
23
|
+
*/
|
|
24
|
+
export declare const propsSignature: (props: readonly PropDocs[]) => string;
|
|
25
|
+
/**
|
|
26
|
+
* The line `forgebook new` writes in a story file.
|
|
27
|
+
*
|
|
28
|
+
* @param signature - the props' signature.
|
|
29
|
+
*/
|
|
30
|
+
export declare const propsMarkerLine: (signature: string) => string;
|
|
31
|
+
/**
|
|
32
|
+
* The signature a story file says it was written for.
|
|
33
|
+
*
|
|
34
|
+
* @param text - the story file's text.
|
|
35
|
+
* @returns the signature; none when the file has no marker line.
|
|
36
|
+
*/
|
|
37
|
+
export declare const writtenSignature: (text: string) => string | undefined;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** The comment's word, followed by `: ` and the signature. */
|
|
2
|
+
export const PROPS_MARKER = "forgebook-props";
|
|
3
|
+
/** The marker line as `forgebook new` writes it, one per file, read back by its first words. */
|
|
4
|
+
const MARKER_LINE = new RegExp(`^// ${PROPS_MARKER}: ([0-9a-f]{8})\\b`, "m");
|
|
5
|
+
/**
|
|
6
|
+
* The FNV-1a hash of a text, as eight hexadecimal digits.
|
|
7
|
+
*
|
|
8
|
+
* @param text - the text.
|
|
9
|
+
*/
|
|
10
|
+
const fnv1a = (text) => {
|
|
11
|
+
let hash = 0x811c9dc5;
|
|
12
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
13
|
+
hash ^= text.charCodeAt(index);
|
|
14
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
15
|
+
}
|
|
16
|
+
return hash.toString(16).padStart(8, "0");
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* The signature of a component's props.
|
|
20
|
+
*
|
|
21
|
+
* @param props - the props, as the docs extractor reads them.
|
|
22
|
+
* @returns eight hexadecimal digits.
|
|
23
|
+
*/
|
|
24
|
+
export const propsSignature = (props) => fnv1a(props
|
|
25
|
+
.map((prop) => `${prop.name}${prop.isRequired ? "" : "?"}:${prop.type}`)
|
|
26
|
+
.sort()
|
|
27
|
+
.join("\n"));
|
|
28
|
+
/**
|
|
29
|
+
* The line `forgebook new` writes in a story file.
|
|
30
|
+
*
|
|
31
|
+
* @param signature - the props' signature.
|
|
32
|
+
*/
|
|
33
|
+
export const propsMarkerLine = (signature) => `// ${PROPS_MARKER}: ${signature} (the props these stories were written for; verify says when they change)`;
|
|
34
|
+
/**
|
|
35
|
+
* The signature a story file says it was written for.
|
|
36
|
+
*
|
|
37
|
+
* @param text - the story file's text.
|
|
38
|
+
* @returns the signature; none when the file has no marker line.
|
|
39
|
+
*/
|
|
40
|
+
export const writtenSignature = (text) => MARKER_LINE.exec(text)?.[1];
|
package/dist/src/search.d.ts
CHANGED
|
@@ -8,12 +8,13 @@
|
|
|
8
8
|
* half ones. A word is worth what it is worth where it counts most in the result (`searchMatch.ts`), so the ranking is
|
|
9
9
|
* `findComponents`' with more places. A result that holds every word comes before one that does not, which says what it
|
|
10
10
|
* missed. Everything is read from the tree and the index (`searchIndex.ts`), with no server, so the same code answers
|
|
11
|
-
* in the page and on the dev server.
|
|
11
|
+
* in the page and on the dev server; the dev server also reads typos (`searchTypos.ts`), which the page leaves out to
|
|
12
|
+
* stay light. Pure.
|
|
12
13
|
*
|
|
13
14
|
* @module
|
|
14
15
|
*/
|
|
15
16
|
import type { SearchIndex } from "./searchIndex.ts";
|
|
16
|
-
import { type MarkedText } from "./searchMarks.ts";
|
|
17
|
+
import { type MarkedQuery, type MarkedText } from "./searchMarks.ts";
|
|
17
18
|
import { type SearchPlace } from "./searchMatch.ts";
|
|
18
19
|
import { type StoryTree } from "./storyTree.ts";
|
|
19
20
|
/** Where a result or a hit goes: a page of the catalogue, at a heading or a prop when it has one. */
|
|
@@ -110,8 +111,6 @@ type Field = {
|
|
|
110
111
|
readonly labelWords: readonly string[];
|
|
111
112
|
/** Its text's words. */
|
|
112
113
|
readonly textWords: readonly string[];
|
|
113
|
-
/** Its name's and its text's words in order, each between spaces, as the words of a query are looked for in them. */
|
|
114
|
-
readonly sentences: readonly string[];
|
|
115
114
|
/** Where it goes. */
|
|
116
115
|
readonly target: SearchTarget;
|
|
117
116
|
};
|
|
@@ -137,15 +136,52 @@ export type Searchable = {
|
|
|
137
136
|
* @param indexes - each source's index, by its id: what it adds is found once it is there.
|
|
138
137
|
*/
|
|
139
138
|
export declare const searchables: (tree: StoryTree, indexes: ReadonlyMap<string, SearchIndex>) => readonly Searchable[];
|
|
139
|
+
/** The query, read. */
|
|
140
|
+
export type Query = MarkedQuery & {
|
|
141
|
+
/** Its words as a sentence (`sentenceOf`), when there are several: copied from a page, it finds that page first. */
|
|
142
|
+
readonly sentence: string | undefined;
|
|
143
|
+
};
|
|
140
144
|
/** The most of a query that is read: a page pasted by mistake must not hold the tab for seconds. */
|
|
141
145
|
export declare const MAX_QUERY = 200;
|
|
142
146
|
/**
|
|
143
|
-
*
|
|
147
|
+
* A query's words and phrase.
|
|
148
|
+
*
|
|
149
|
+
* @param typed - what was typed.
|
|
150
|
+
*/
|
|
151
|
+
export declare const queryOf: (typed: string) => Query;
|
|
152
|
+
/** A found thing, before its hits are worked out. */
|
|
153
|
+
export type Scored = {
|
|
154
|
+
/** The thing. */
|
|
155
|
+
readonly found: Searchable;
|
|
156
|
+
/** Its score. */
|
|
157
|
+
readonly score: number;
|
|
158
|
+
/** The words it holds. */
|
|
159
|
+
readonly matched: readonly string[];
|
|
160
|
+
/** The words it does not. */
|
|
161
|
+
readonly missed: readonly string[];
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Everything that holds a word of the query, the result holding most of it first.
|
|
165
|
+
*
|
|
166
|
+
* @param all - everything that can be found (`searchables`).
|
|
167
|
+
* @param read - the query, read (`queryOf`).
|
|
168
|
+
*/
|
|
169
|
+
export declare const scoredAll: (all: readonly Searchable[], read: Query) => Scored[];
|
|
170
|
+
/**
|
|
171
|
+
* The answer from what was found.
|
|
144
172
|
*
|
|
145
173
|
* @remarks
|
|
146
174
|
* Where something holds every word, what holds much less is left out: `the` must not bring the whole catalogue along
|
|
147
175
|
* with a sentence copied from a page. Nothing holding every word, the nearest are given, each saying what it missed.
|
|
148
176
|
*
|
|
177
|
+
* @param found - what holds a word of the query, best first (`scoredAll`).
|
|
178
|
+
* @param read - the query, read.
|
|
179
|
+
* @param limits - how much of the answer to give.
|
|
180
|
+
*/
|
|
181
|
+
export declare const answerOf: (found: readonly Scored[], read: Query, limits: SearchLimits) => SearchAnswer;
|
|
182
|
+
/**
|
|
183
|
+
* What a query finds, each word read as typed: `searchTypos.ts` reads a word nothing holds as a near name.
|
|
184
|
+
*
|
|
149
185
|
* @param all - everything that can be found (`searchables`).
|
|
150
186
|
* @param query - what was typed.
|
|
151
187
|
* @param limits - how much of the answer to give.
|
package/dist/src/search.js
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
* half ones. A word is worth what it is worth where it counts most in the result (`searchMatch.ts`), so the ranking is
|
|
9
9
|
* `findComponents`' with more places. A result that holds every word comes before one that does not, which says what it
|
|
10
10
|
* missed. Everything is read from the tree and the index (`searchIndex.ts`), with no server, so the same code answers
|
|
11
|
-
* in the page and on the dev server.
|
|
11
|
+
* in the page and on the dev server; the dev server also reads typos (`searchTypos.ts`), which the page leaves out to
|
|
12
|
+
* stay light. Pure.
|
|
12
13
|
*
|
|
13
14
|
* @module
|
|
14
15
|
*/
|
|
@@ -51,7 +52,6 @@ const fieldOf = (kind, label, written, target) => {
|
|
|
51
52
|
text,
|
|
52
53
|
labelWords: label === undefined ? [] : labelWordsOf(label),
|
|
53
54
|
textWords: [...new Set(wordsOf(text))],
|
|
54
|
-
sentences: [sentenceOf(label ?? ""), sentenceOf(text)],
|
|
55
55
|
target
|
|
56
56
|
};
|
|
57
57
|
};
|
|
@@ -75,16 +75,52 @@ const sectionField = (section, target) => {
|
|
|
75
75
|
const opened = section.anchor === undefined ? target : { ...target, anchor: section.anchor };
|
|
76
76
|
return fieldOf(section.heading === undefined ? "text" : "heading", section.heading, section.text, opened);
|
|
77
77
|
};
|
|
78
|
-
/**
|
|
79
|
-
|
|
78
|
+
/**
|
|
79
|
+
* What the search reads of each component from the tree, and of each component's index, kept as long as they are: the
|
|
80
|
+
* tree is read once, and the index's groups arrive one after another, which must not read the tree again each time.
|
|
81
|
+
*/
|
|
82
|
+
const TREE_FIELDS = new WeakMap();
|
|
83
|
+
const INDEX_FIELDS = new WeakMap();
|
|
84
|
+
/** A value made once per key and owner, kept while the owner is. */
|
|
85
|
+
const cachedIn = (cache, owner, key, make) => {
|
|
86
|
+
const byKey = cache.get(owner) ?? new Map();
|
|
87
|
+
cache.set(owner, byKey);
|
|
88
|
+
const known = byKey.get(key);
|
|
89
|
+
if (known !== undefined)
|
|
90
|
+
return known;
|
|
91
|
+
const made = make();
|
|
92
|
+
byKey.set(key, made);
|
|
93
|
+
return made;
|
|
94
|
+
};
|
|
95
|
+
/** What the search reads of a component in the tree: its name, its place, its search words and its stories. */
|
|
96
|
+
const treeFields = (component, target) => cachedIn(TREE_FIELDS, component, target.id, () => [
|
|
80
97
|
fieldOf("name", component.name, "", target),
|
|
81
98
|
fieldOf("title", component.title.split("/").slice(0, -1).join(" "), "", target),
|
|
82
|
-
...component.keywords.map((keyword) => fieldOf("keyword", keyword, "", target))
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
99
|
+
...component.keywords.map((keyword) => fieldOf("keyword", keyword, "", target))
|
|
100
|
+
]);
|
|
101
|
+
/** What the search reads of a component's stories. */
|
|
102
|
+
const storyFields = (component, target) => cachedIn(TREE_FIELDS, component, `${target.id}\nstories`, () => component.stories.map((story) => fieldOf("story", story.name, story.description ?? "", { kind: "story", id: story.id })));
|
|
103
|
+
/** What a component's index adds: its lead and props, and the sections of its docs. */
|
|
104
|
+
const indexFields = (index, target) => cachedIn(INDEX_FIELDS, index, target.id, () => ({
|
|
105
|
+
lead: [
|
|
106
|
+
...(index.lead === undefined ? [] : [fieldOf("description", undefined, index.lead, target)]),
|
|
107
|
+
...(index.props ?? []).map(({ name, text, part, isEvent }) => fieldOf(isEvent === true ? "event" : "prop", name, text, {
|
|
108
|
+
...target,
|
|
109
|
+
anchor: propAnchor(name, part)
|
|
110
|
+
}))
|
|
111
|
+
],
|
|
112
|
+
sections: (index.sections ?? []).map((section) => sectionField(section, target))
|
|
113
|
+
}));
|
|
114
|
+
/** What the search reads of a component. */
|
|
115
|
+
const componentFields = (component, target, index) => {
|
|
116
|
+
const added = index === undefined ? undefined : indexFields(index, target);
|
|
117
|
+
return [
|
|
118
|
+
...treeFields(component, target),
|
|
119
|
+
...(added?.lead ?? []),
|
|
120
|
+
...storyFields(component, target),
|
|
121
|
+
...(added?.sections ?? [])
|
|
122
|
+
];
|
|
123
|
+
};
|
|
88
124
|
/** A component, read for the search. */
|
|
89
125
|
const searchableComponent = (source, familyName, groupName, component, index) => {
|
|
90
126
|
const target = { kind: "component", id: componentId(source.id, component.title) };
|
|
@@ -134,8 +170,12 @@ export const searchables = (tree, indexes) => tree.sources.flatMap((source) => {
|
|
|
134
170
|
const NEAR_SHARE = 0.75;
|
|
135
171
|
/** The most of a query that is read: a page pasted by mistake must not hold the tab for seconds. */
|
|
136
172
|
export const MAX_QUERY = 200;
|
|
137
|
-
/**
|
|
138
|
-
|
|
173
|
+
/**
|
|
174
|
+
* A query's words and phrase.
|
|
175
|
+
*
|
|
176
|
+
* @param typed - what was typed.
|
|
177
|
+
*/
|
|
178
|
+
export const queryOf = (typed) => {
|
|
139
179
|
const query = typed.slice(0, MAX_QUERY);
|
|
140
180
|
const words = wordsOf(query);
|
|
141
181
|
const isSeveral = words.length > 1;
|
|
@@ -150,8 +190,22 @@ const isHeldIn = (words, word) => {
|
|
|
150
190
|
const meanings = meaningsOf(word);
|
|
151
191
|
return words.some((held) => wordMatch(held, word, meanings) !== undefined);
|
|
152
192
|
};
|
|
193
|
+
/**
|
|
194
|
+
* Each field's name and text as sentences (`sentenceOf`), made the first time a query of several words asks: most
|
|
195
|
+
* queries are one word, and making them for every field of a large catalogue is most of the first search's time.
|
|
196
|
+
*/
|
|
197
|
+
const SENTENCES = new WeakMap();
|
|
153
198
|
/** Whether a field holds a query's sentence, in its name or its text. */
|
|
154
|
-
const holdsSentence = (field, sentence) =>
|
|
199
|
+
const holdsSentence = (field, sentence) => {
|
|
200
|
+
if (sentence === undefined)
|
|
201
|
+
return false;
|
|
202
|
+
let sentences = SENTENCES.get(field);
|
|
203
|
+
if (sentences === undefined) {
|
|
204
|
+
sentences = [sentenceOf(field.label ?? ""), sentenceOf(field.text)];
|
|
205
|
+
SENTENCES.set(field, sentences);
|
|
206
|
+
}
|
|
207
|
+
return sentences.some((each) => each.includes(sentence));
|
|
208
|
+
};
|
|
155
209
|
/** How a thing answers the query; none when it holds no word of it. */
|
|
156
210
|
const scored = (found, { words, sentence }) => {
|
|
157
211
|
const worths = words.map((word) => ({ word, worth: worthOf(found.parts, word) }));
|
|
@@ -239,23 +293,28 @@ const resultOf = ({ found, score, matched, missed }, query, limit) => {
|
|
|
239
293
|
};
|
|
240
294
|
};
|
|
241
295
|
/**
|
|
242
|
-
*
|
|
296
|
+
* Everything that holds a word of the query, the result holding most of it first.
|
|
297
|
+
*
|
|
298
|
+
* @param all - everything that can be found (`searchables`).
|
|
299
|
+
* @param read - the query, read (`queryOf`).
|
|
300
|
+
*/
|
|
301
|
+
export const scoredAll = (all, read) => all
|
|
302
|
+
.flatMap((each) => scored(each, read) ?? [])
|
|
303
|
+
.toSorted((first, second) => first.missed.length - second.missed.length ||
|
|
304
|
+
second.score - first.score ||
|
|
305
|
+
first.found.name.localeCompare(second.found.name));
|
|
306
|
+
/**
|
|
307
|
+
* The answer from what was found.
|
|
243
308
|
*
|
|
244
309
|
* @remarks
|
|
245
310
|
* Where something holds every word, what holds much less is left out: `the` must not bring the whole catalogue along
|
|
246
311
|
* with a sentence copied from a page. Nothing holding every word, the nearest are given, each saying what it missed.
|
|
247
312
|
*
|
|
248
|
-
* @param
|
|
249
|
-
* @param
|
|
313
|
+
* @param found - what holds a word of the query, best first (`scoredAll`).
|
|
314
|
+
* @param read - the query, read.
|
|
250
315
|
* @param limits - how much of the answer to give.
|
|
251
316
|
*/
|
|
252
|
-
export const
|
|
253
|
-
const read = queryOf(query);
|
|
254
|
-
const found = all
|
|
255
|
-
.flatMap((each) => scored(each, read) ?? [])
|
|
256
|
-
.toSorted((first, second) => first.missed.length - second.missed.length ||
|
|
257
|
-
second.score - first.score ||
|
|
258
|
-
first.found.name.localeCompare(second.found.name));
|
|
317
|
+
export const answerOf = (found, read, limits) => {
|
|
259
318
|
const hasWhole = found.some((each) => each.missed.length === 0);
|
|
260
319
|
const kept = found.filter((each) => !hasWhole || each.matched.length >= read.words.length * NEAR_SHARE);
|
|
261
320
|
return {
|
|
@@ -263,3 +322,14 @@ export const searchCatalogue = (all, query, limits) => {
|
|
|
263
322
|
total: kept.length
|
|
264
323
|
};
|
|
265
324
|
};
|
|
325
|
+
/**
|
|
326
|
+
* What a query finds, each word read as typed: `searchTypos.ts` reads a word nothing holds as a near name.
|
|
327
|
+
*
|
|
328
|
+
* @param all - everything that can be found (`searchables`).
|
|
329
|
+
* @param query - what was typed.
|
|
330
|
+
* @param limits - how much of the answer to give.
|
|
331
|
+
*/
|
|
332
|
+
export const searchCatalogue = (all, query, limits) => {
|
|
333
|
+
const read = queryOf(query);
|
|
334
|
+
return answerOf(scoredAll(all, read), read, limits);
|
|
335
|
+
};
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* The one place both searches take this from, so a person and an agent asking the same words get the same answer:
|
|
7
7
|
* `forgebook find` ranks components with it (`vite/findComponent.ts`), the shell's search and `forgebook search` rank
|
|
8
8
|
* everything else (`search.ts`). Pure, with no model: a lexical ranking is instant, works offline and gives the same
|
|
9
|
-
* answer twice. Case and accents never count. Pure apart from a cache of what a word means.
|
|
9
|
+
* answer twice. Case and accents never count. Pure apart from a cache of what a word means. Reading a word nothing
|
|
10
|
+
* holds as a near name is `searchTypos.ts`'s, which the page's search leaves out.
|
|
10
11
|
*
|
|
11
12
|
* @module
|
|
12
13
|
*/
|
|
@@ -23,6 +24,8 @@ export declare const WEIGHTS: {
|
|
|
23
24
|
};
|
|
24
25
|
/** The places a word can be found in. */
|
|
25
26
|
export type SearchPlace = keyof typeof WEIGHTS;
|
|
27
|
+
/** Words designers and code use for the same thing, each group read as one. */
|
|
28
|
+
export declare const SYNONYMS: readonly (readonly string[])[];
|
|
26
29
|
/**
|
|
27
30
|
* A text as the searches compare it: lower case, without accents.
|
|
28
31
|
*
|
package/dist/src/searchMatch.js
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* The one place both searches take this from, so a person and an agent asking the same words get the same answer:
|
|
7
7
|
* `forgebook find` ranks components with it (`vite/findComponent.ts`), the shell's search and `forgebook search` rank
|
|
8
8
|
* everything else (`search.ts`). Pure, with no model: a lexical ranking is instant, works offline and gives the same
|
|
9
|
-
* answer twice. Case and accents never count. Pure apart from a cache of what a word means.
|
|
9
|
+
* answer twice. Case and accents never count. Pure apart from a cache of what a word means. Reading a word nothing
|
|
10
|
+
* holds as a near name is `searchTypos.ts`'s, which the page's search leaves out.
|
|
10
11
|
*
|
|
11
12
|
* @module
|
|
12
13
|
*/
|
|
@@ -37,7 +38,7 @@ const STARTING_COST = 0.5;
|
|
|
37
38
|
/** The shortest word that matches by its start: shorter ones match too much. */
|
|
38
39
|
const MIN_PREFIX = 3;
|
|
39
40
|
/** Words designers and code use for the same thing, each group read as one. */
|
|
40
|
-
const SYNONYMS = [
|
|
41
|
+
export const SYNONYMS = [
|
|
41
42
|
["dialog", "modal", "popup", "lightbox"],
|
|
42
43
|
["select", "dropdown", "picker", "combobox"],
|
|
43
44
|
["button", "cta"],
|
|
@@ -61,14 +62,34 @@ export const foldedText = (text) => text
|
|
|
61
62
|
.normalize("NFD")
|
|
62
63
|
.replace(/\p{Diacritic}/gu, "")
|
|
63
64
|
.toLowerCase();
|
|
65
|
+
/**
|
|
66
|
+
* The words of short texts read so far: names, story names and search words come back many times in a catalogue
|
|
67
|
+
* (`Primary`, `Default`), and reading each is most of what the first search does. Long texts are read once anyway.
|
|
68
|
+
*/
|
|
69
|
+
const WORDS = new Map();
|
|
70
|
+
/** The longest text whose words are kept: a name or a title, not a page. */
|
|
71
|
+
const MAX_KEPT_TEXT = 80;
|
|
72
|
+
/** The most texts kept: past that the cache starts again, so a long session holds a bounded amount. */
|
|
73
|
+
const MAX_KEPT_TEXTS = 20_000;
|
|
64
74
|
/**
|
|
65
75
|
* A text's words, lower case and without accents, a camel-case name split into its words.
|
|
66
76
|
*
|
|
67
77
|
* @param text - any text.
|
|
68
78
|
*/
|
|
69
|
-
export const wordsOf = (text) =>
|
|
70
|
-
.
|
|
71
|
-
|
|
79
|
+
export const wordsOf = (text) => {
|
|
80
|
+
const known = WORDS.get(text);
|
|
81
|
+
if (known !== undefined)
|
|
82
|
+
return [...known];
|
|
83
|
+
const words = foldedText(text.replace(/(\p{Ll})(\p{Lu})/gu, "$1 $2"))
|
|
84
|
+
.split(/[^\p{L}\p{N}]+/u)
|
|
85
|
+
.filter((word) => word !== "");
|
|
86
|
+
if (text.length <= MAX_KEPT_TEXT) {
|
|
87
|
+
if (WORDS.size >= MAX_KEPT_TEXTS)
|
|
88
|
+
WORDS.clear();
|
|
89
|
+
WORDS.set(text, words);
|
|
90
|
+
}
|
|
91
|
+
return [...words];
|
|
92
|
+
};
|
|
72
93
|
/** A word without its plural. */
|
|
73
94
|
const singularOf = (word) => word.length > MIN_PREFIX && word.endsWith("s") ? word.slice(0, -1) : word;
|
|
74
95
|
/** The meanings worked out so far: a search asks for them for every word of every text it marks. */
|