forgebook 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +917 -74
- package/dist/bin/forgebook/agentClient.d.ts +2 -1
- package/dist/bin/forgebook/agentClient.js +13 -6
- package/dist/bin/forgebook/agentGuide.d.ts +59 -0
- package/dist/bin/forgebook/agentGuide.js +203 -0
- package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
- package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
- package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
- package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
- package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
- package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
- package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
- package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
- package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
- package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
- package/dist/bin/forgebook/agentText.d.ts +23 -3
- package/dist/bin/forgebook/agentText.js +175 -28
- package/dist/bin/forgebook/agents.md +20 -191
- package/dist/bin/forgebook/agentsText.js +2 -1
- package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
- package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
- package/dist/bin/forgebook/auditCommand.d.mts +8 -0
- package/dist/bin/forgebook/auditCommand.mjs +75 -0
- package/dist/bin/forgebook/auditRun.d.ts +95 -0
- package/dist/bin/forgebook/auditRun.js +270 -0
- package/dist/bin/forgebook/browserRun.d.ts +21 -0
- package/dist/bin/forgebook/browserRun.js +57 -0
- package/dist/bin/forgebook/buildFailure.d.ts +7 -0
- package/dist/bin/forgebook/buildFailure.js +47 -0
- package/dist/bin/forgebook/buildWatch.d.ts +52 -0
- package/dist/bin/forgebook/buildWatch.js +137 -0
- package/dist/bin/forgebook/builtCatalogue.js +9 -5
- package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
- package/dist/bin/forgebook/catalogueCommands.js +23 -0
- package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
- package/dist/bin/forgebook/catalogueVite.js +14 -6
- package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
- package/dist/bin/forgebook/commandCacheClaim.js +170 -0
- package/dist/bin/forgebook/commandServer.d.ts +8 -0
- package/dist/bin/forgebook/commandServer.js +61 -13
- package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
- package/dist/bin/forgebook/graphCommand.d.mts +8 -0
- package/dist/bin/forgebook/graphCommand.mjs +84 -0
- package/dist/bin/forgebook/guide/commands.md +57 -0
- package/dist/bin/forgebook/guide/devices.md +17 -0
- package/dist/bin/forgebook/guide/docs-pages.md +13 -0
- package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
- package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
- package/dist/bin/forgebook/guide/links.md +29 -0
- package/dist/bin/forgebook/guide/setup.md +23 -0
- package/dist/bin/forgebook/guide/stories.md +90 -0
- package/dist/bin/forgebook/guide/switches.md +43 -0
- package/dist/bin/forgebook/guideCommand.d.mts +13 -0
- package/dist/bin/forgebook/guideCommand.mjs +37 -0
- package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
- package/dist/bin/forgebook/importers/storybook.js +11 -5
- package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
- package/dist/bin/forgebook/initCommands.d.mts +11 -0
- package/dist/bin/forgebook/initCommands.mjs +51 -78
- package/dist/bin/forgebook/initConfig.d.ts +5 -3
- package/dist/bin/forgebook/initConfig.js +6 -3
- package/dist/bin/forgebook/initInstall.d.ts +15 -0
- package/dist/bin/forgebook/initInstall.js +77 -0
- package/dist/bin/forgebook/initPrint.d.ts +9 -0
- package/dist/bin/forgebook/initPrint.js +60 -0
- package/dist/bin/forgebook/initRefusals.d.ts +45 -0
- package/dist/bin/forgebook/initRefusals.js +91 -0
- package/dist/bin/forgebook/initRun.d.ts +28 -0
- package/dist/bin/forgebook/initRun.js +311 -0
- package/dist/bin/forgebook/mcpCommand.mjs +38 -4
- package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
- package/dist/bin/forgebook/mcpGraph.js +24 -0
- package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
- package/dist/bin/forgebook/mcpTokens.js +58 -0
- package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
- package/dist/bin/forgebook/mcpToolParts.js +10 -0
- package/dist/bin/forgebook/mcpTools.d.ts +13 -6
- package/dist/bin/forgebook/mcpTools.js +57 -90
- package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
- package/dist/bin/forgebook/mcpVerify.js +36 -0
- package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
- package/dist/bin/forgebook/migrate/codemods.js +61 -0
- package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
- package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
- package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
- package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
- package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
- package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
- package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
- package/dist/bin/forgebook/migrate/migrateText.js +30 -0
- package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
- package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
- package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
- package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
- package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
- package/dist/bin/forgebook/newProject/newProject.js +180 -0
- package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
- package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
- package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
- package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
- package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
- package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
- package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
- package/dist/bin/forgebook/newProject/projectLook.js +293 -0
- package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
- package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
- package/dist/bin/forgebook/newRepair.d.ts +45 -0
- package/dist/bin/forgebook/newRepair.js +157 -0
- package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
- package/dist/bin/forgebook/newRepairRun.js +148 -0
- package/dist/bin/forgebook/newStories.d.ts +23 -1
- package/dist/bin/forgebook/newStories.js +101 -11
- package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
- package/dist/bin/forgebook/newStoriesFile.js +43 -4
- package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
- package/dist/bin/forgebook/prebundleRun.js +28 -8
- package/dist/bin/forgebook/proofCommand.d.mts +15 -0
- package/dist/bin/forgebook/proofCommand.mjs +212 -0
- package/dist/bin/forgebook/proofRun.d.ts +63 -0
- package/dist/bin/forgebook/proofRun.js +412 -0
- package/dist/bin/forgebook/proofText.d.ts +36 -0
- package/dist/bin/forgebook/proofText.js +131 -0
- package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
- package/dist/bin/forgebook/proofWorkflow.js +205 -0
- package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
- package/dist/bin/forgebook/setArgsTool.js +70 -0
- package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
- package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
- package/dist/bin/forgebook/storyCheckRun.js +83 -9
- package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
- package/dist/bin/forgebook/storyFileIds.js +14 -0
- package/dist/bin/forgebook/stressCases.d.ts +31 -0
- package/dist/bin/forgebook/stressCases.js +79 -0
- package/dist/bin/forgebook/stressRun.d.ts +12 -0
- package/dist/bin/forgebook/stressRun.js +61 -0
- package/dist/bin/forgebook/stressText.d.ts +27 -0
- package/dist/bin/forgebook/stressText.js +46 -0
- package/dist/bin/forgebook/verifyBase.d.ts +45 -0
- package/dist/bin/forgebook/verifyBase.js +196 -0
- package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
- package/dist/bin/forgebook/verifyCommand.mjs +125 -0
- package/dist/bin/forgebook/verifyRun.d.ts +63 -0
- package/dist/bin/forgebook/verifyRun.js +108 -0
- package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
- package/dist/bin/forgebook/verifyVerdict.js +297 -0
- package/dist/bin/forgebook/workflowActions.d.ts +23 -0
- package/dist/bin/forgebook/workflowActions.js +23 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
- package/dist/src/addressArgs.d.ts +54 -6
- package/dist/src/addressArgs.js +72 -16
- package/dist/src/addressArgsParam.d.ts +54 -0
- package/dist/src/addressArgsParam.js +51 -0
- package/dist/src/addressTexts.d.ts +14 -0
- package/dist/src/addressTexts.js +28 -21
- package/dist/src/agentIndexFile.d.ts +11 -0
- package/dist/src/agentIndexFile.js +11 -0
- package/dist/src/argConditions.d.ts +52 -0
- package/dist/src/argConditions.js +80 -0
- package/dist/src/argControl.d.ts +100 -0
- package/dist/src/argControl.js +0 -0
- package/dist/src/argExpression.d.ts +21 -0
- package/dist/src/argExpression.js +30 -0
- package/dist/src/argTypes.d.ts +40 -51
- package/dist/src/argTypes.js +66 -184
- package/dist/src/argsProps.d.ts +3 -3
- package/dist/src/argsProps.js +11 -5
- package/dist/src/bundlerErrors.d.ts +29 -0
- package/dist/src/bundlerErrors.js +49 -0
- package/dist/src/catalogue.d.ts +31 -0
- package/dist/src/catalogue.js +13 -2
- package/dist/src/catalogueRefs.d.ts +75 -0
- package/dist/src/catalogueRefs.js +122 -0
- package/dist/src/componentDocs.d.ts +71 -0
- package/dist/src/componentDocs.js +15 -2
- package/dist/src/frame/callValues.d.ts +19 -0
- package/dist/src/frame/callValues.js +58 -0
- package/dist/src/frame/canvasScheme.d.ts +33 -0
- package/dist/src/frame/canvasScheme.js +67 -0
- package/dist/src/frame/frame.css +36 -3
- package/dist/src/frame/frameStatus.d.ts +16 -1
- package/dist/src/frame/frameStatus.js +16 -1
- package/dist/src/frame/frameView.js +4 -3
- package/dist/src/frame/mountFrame.d.ts +7 -1
- package/dist/src/frame/mountFrame.js +153 -46
- package/dist/src/frame/panelValues.d.ts +35 -0
- package/dist/src/frame/panelValues.js +127 -0
- package/dist/src/frame/playActions.d.ts +39 -0
- package/dist/src/frame/playActions.js +98 -0
- package/dist/src/frame/playStepper.d.ts +28 -0
- package/dist/src/frame/playStepper.js +38 -0
- package/dist/src/frame/playStory.d.ts +9 -1
- package/dist/src/frame/playStory.js +49 -3
- package/dist/src/frame/renderer.d.ts +34 -1
- package/dist/src/frame/renderer.js +24 -0
- package/dist/src/frame/shellChannel.d.ts +1 -1
- package/dist/src/frame/shellChannel.js +1 -1
- package/dist/src/frame/shellCheck.d.ts +17 -0
- package/dist/src/frame/shellCheck.js +25 -0
- package/dist/src/frame/shellMessageCheck.d.ts +7 -0
- package/dist/src/frame/shellMessageCheck.js +53 -0
- package/dist/src/frame/storyContent.d.ts +50 -0
- package/dist/src/frame/storyContent.js +73 -0
- package/dist/src/frame/storyModule.d.ts +9 -0
- package/dist/src/frame/storyModule.js +20 -2
- package/dist/src/frame/storyRun.d.ts +15 -7
- package/dist/src/frame/storyRun.js +64 -15
- package/dist/src/frame/valueSheets.d.ts +35 -0
- package/dist/src/frame/valueSheets.js +99 -0
- package/dist/src/hotModules.d.ts +20 -0
- package/dist/src/hotModules.js +23 -0
- package/dist/src/jsxCode.d.ts +1 -14
- package/dist/src/jsxCode.js +46 -10
- package/dist/src/liveErrors.d.ts +30 -4
- package/dist/src/liveErrors.js +18 -3
- package/dist/src/messages.d.ts +77 -27
- package/dist/src/messages.js +58 -100
- package/dist/src/namedValues.d.ts +2 -26
- package/dist/src/namedValues.js +0 -47
- package/dist/src/pageConfig.d.ts +2 -0
- package/dist/src/playTrace.d.ts +19 -2
- package/dist/src/playTrace.js +10 -5
- package/dist/src/plugin.d.ts +10 -3
- package/dist/src/previewRelay.js +9 -1
- package/dist/src/printable.d.ts +12 -0
- package/dist/src/printable.js +22 -0
- package/dist/src/propsSignature.d.ts +37 -0
- package/dist/src/propsSignature.js +40 -0
- package/dist/src/search.d.ts +41 -5
- package/dist/src/search.js +93 -23
- package/dist/src/searchMatch.d.ts +4 -1
- package/dist/src/searchMatch.js +26 -5
- package/dist/src/searchTypos.d.ts +88 -0
- package/dist/src/searchTypos.js +178 -0
- package/dist/src/shapeValues.d.ts +86 -0
- package/dist/src/shapeValues.js +295 -0
- package/dist/src/shell/ApiReference.js +6 -3
- package/dist/src/shell/ApiTableBox.d.ts +15 -0
- package/dist/src/shell/ApiTableBox.js +11 -0
- package/dist/src/shell/AppearanceMenu.d.ts +4 -1
- package/dist/src/shell/AppearanceMenu.js +9 -6
- package/dist/src/shell/CodeTab.d.ts +3 -2
- package/dist/src/shell/CodeTab.js +3 -2
- package/dist/src/shell/CodeText.d.ts +1 -1
- package/dist/src/shell/CodeText.js +2 -3
- package/dist/src/shell/CompareGrid.js +1 -1
- package/dist/src/shell/ComponentPage.d.ts +1 -1
- package/dist/src/shell/ComponentPage.js +5 -1
- package/dist/src/shell/CustomControl.d.ts +34 -0
- package/dist/src/shell/CustomControl.js +132 -0
- package/dist/src/shell/DocContainers.js +1 -1
- package/dist/src/shell/DocPage.js +2 -2
- package/dist/src/shell/DroppedArgsList.d.ts +2 -2
- package/dist/src/shell/DroppedArgsList.js +1 -1
- package/dist/src/shell/EmbedPage.js +58 -14
- package/dist/src/shell/Example.d.ts +5 -1
- package/dist/src/shell/Example.js +16 -8
- package/dist/src/shell/FrameView.d.ts +6 -3
- package/dist/src/shell/FrameView.js +2 -2
- package/dist/src/shell/HomePage.d.ts +3 -1
- package/dist/src/shell/HomePage.js +16 -6
- package/dist/src/shell/InfoTip.js +2 -2
- package/dist/src/shell/InteractionsTab.d.ts +11 -4
- package/dist/src/shell/InteractionsTab.js +18 -2
- package/dist/src/shell/LazyPage.js +1 -1
- package/dist/src/shell/PackageHtml.js +3 -1
- package/dist/src/shell/PinnedControl.js +14 -62
- package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
- package/dist/src/shell/PinnedControlMenu.js +72 -0
- package/dist/src/shell/PluginBlockHost.js +2 -1
- package/dist/src/shell/PluginTabHost.js +19 -2
- package/dist/src/shell/PropFields.d.ts +3 -1
- package/dist/src/shell/PropFields.js +9 -6
- package/dist/src/shell/PropRows.d.ts +23 -2
- package/dist/src/shell/PropRows.js +58 -19
- package/dist/src/shell/PropsTab.d.ts +12 -5
- package/dist/src/shell/PropsTab.js +9 -21
- package/dist/src/shell/RefStoryPage.d.ts +33 -0
- package/dist/src/shell/RefStoryPage.js +123 -0
- package/dist/src/shell/SearchPanel.js +51 -24
- package/dist/src/shell/Shell.d.ts +18 -0
- package/dist/src/shell/Shell.js +137 -22
- package/dist/src/shell/ShortcutHelp.d.ts +22 -0
- package/dist/src/shell/ShortcutHelp.js +66 -0
- package/dist/src/shell/Sidebar.d.ts +17 -4
- package/dist/src/shell/Sidebar.js +92 -41
- package/dist/src/shell/SidebarDocs.js +2 -2
- package/dist/src/shell/SidebarEntries.js +5 -3
- package/dist/src/shell/SidebarHandle.d.ts +3 -5
- package/dist/src/shell/SidebarHandle.js +4 -4
- package/dist/src/shell/SidebarRefs.d.ts +39 -0
- package/dist/src/shell/SidebarRefs.js +99 -0
- package/dist/src/shell/SidebarSearch.js +37 -9
- package/dist/src/shell/SignatureReference.js +3 -1
- package/dist/src/shell/Stage.d.ts +10 -2
- package/dist/src/shell/Stage.js +35 -60
- package/dist/src/shell/StatusBadges.d.ts +54 -0
- package/dist/src/shell/StatusBadges.js +77 -0
- package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
- package/dist/src/shell/StoryCodeBlock.js +7 -6
- package/dist/src/shell/SwitchGallery.d.ts +36 -0
- package/dist/src/shell/SwitchGallery.js +17 -0
- package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
- package/dist/src/shell/SwitchGalleryPanel.js +99 -0
- package/dist/src/shell/TagFilter.d.ts +24 -0
- package/dist/src/shell/TagFilter.js +45 -0
- package/dist/src/shell/TagViews.d.ts +39 -0
- package/dist/src/shell/TagViews.js +20 -0
- package/dist/src/shell/Toolbar.d.ts +4 -1
- package/dist/src/shell/Toolbar.js +17 -7
- package/dist/src/shell/ToolbarControl.d.ts +3 -0
- package/dist/src/shell/ToolbarControl.js +23 -6
- package/dist/src/shell/ViewMenuPanel.js +6 -1
- package/dist/src/shell/argChecks.d.ts +22 -0
- package/dist/src/shell/argChecks.js +20 -0
- package/dist/src/shell/asideStory.d.ts +17 -4
- package/dist/src/shell/asideStory.js +21 -4
- package/dist/src/shell/audienceSections.css +9 -9
- package/dist/src/shell/catalogueContext.d.ts +1 -1
- package/dist/src/shell/catalogueContext.js +6 -1
- package/dist/src/shell/codeSpans.d.ts +27 -0
- package/dist/src/shell/codeSpans.js +76 -0
- package/dist/src/shell/compareVariants.d.ts +4 -2
- package/dist/src/shell/compareVariants.js +16 -8
- package/dist/src/shell/composition.d.ts +23 -0
- package/dist/src/shell/composition.js +26 -0
- package/dist/src/shell/controlCycle.d.ts +1 -1
- package/dist/src/shell/controlCycle.js +3 -2
- package/dist/src/shell/customControls.d.ts +55 -0
- package/dist/src/shell/customControls.js +70 -0
- package/dist/src/shell/docPage.css +22 -22
- package/dist/src/shell/dockTabs.d.ts +19 -3
- package/dist/src/shell/dockTabs.js +28 -20
- package/dist/src/shell/embed.css +7 -7
- package/dist/src/shell/framesOrigin.d.ts +7 -0
- package/dist/src/shell/framesOrigin.js +1 -1
- package/dist/src/shell/galleryPlace.d.ts +20 -0
- package/dist/src/shell/galleryPlace.js +26 -0
- package/dist/src/shell/icons.d.ts +1 -0
- package/dist/src/shell/icons.js +1 -0
- package/dist/src/shell/keyboard.d.ts +14 -12
- package/dist/src/shell/keyboard.js +21 -6
- package/dist/src/shell/laterStrings.d.ts +29 -0
- package/dist/src/shell/laterStrings.js +42 -3
- package/dist/src/shell/mountShell.js +3 -0
- package/dist/src/shell/pageStrings.d.ts +4 -0
- package/dist/src/shell/pageStrings.js +4 -0
- package/dist/src/shell/pageTagView.d.ts +18 -0
- package/dist/src/shell/pageTagView.js +10 -0
- package/dist/src/shell/playMemory.d.ts +14 -0
- package/dist/src/shell/playMemory.js +8 -0
- package/dist/src/shell/propNotes.d.ts +23 -0
- package/dist/src/shell/propNotes.js +37 -0
- package/dist/src/shell/refIndexLoad.d.ts +17 -0
- package/dist/src/shell/refIndexLoad.js +38 -0
- package/dist/src/shell/refParts.d.ts +34 -0
- package/dist/src/shell/refParts.js +9 -0
- package/dist/src/shell/refStory.css +21 -0
- package/dist/src/shell/refStrings.d.ts +13 -0
- package/dist/src/shell/refStrings.js +21 -0
- package/dist/src/shell/search.css +11 -11
- package/dist/src/shell/shell.css +348 -168
- package/dist/src/shell/shellScheme.js +2 -2
- package/dist/src/shell/shortcutHelp.css +64 -0
- package/dist/src/shell/stageArgs.d.ts +53 -0
- package/dist/src/shell/stageArgs.js +64 -0
- package/dist/src/shell/statusBadges.css +51 -0
- package/dist/src/shell/strings.d.ts +7 -16
- package/dist/src/shell/strings.js +12 -17
- package/dist/src/shell/switchGallery.css +104 -0
- package/dist/src/shell/tagFilter.css +46 -0
- package/dist/src/shell/tagView.d.ts +20 -0
- package/dist/src/shell/tagView.js +10 -0
- package/dist/src/shell/useAddressArgs.d.ts +27 -2
- package/dist/src/shell/useAddressArgs.js +71 -14
- package/dist/src/shell/useControlKeys.js +2 -2
- package/dist/src/shell/useEditedProblems.d.ts +6 -0
- package/dist/src/shell/useEditedProblems.js +40 -0
- package/dist/src/shell/useFrameMessages.js +3 -0
- package/dist/src/shell/useListedTree.d.ts +13 -0
- package/dist/src/shell/useListedTree.js +32 -0
- package/dist/src/shell/usePageFrames.js +2 -2
- package/dist/src/shell/usePopover.d.ts +5 -0
- package/dist/src/shell/usePopover.js +7 -1
- package/dist/src/shell/useRefIndex.d.ts +22 -0
- package/dist/src/shell/useRefIndex.js +36 -0
- package/dist/src/shell/useScrollStops.d.ts +20 -0
- package/dist/src/shell/useScrollStops.js +41 -0
- package/dist/src/shell/useShortcutHelp.d.ts +18 -0
- package/dist/src/shell/useShortcutHelp.js +32 -0
- package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
- package/dist/src/shell/useSidebarOverlay.js +12 -4
- package/dist/src/shell/useStoryCode.d.ts +2 -1
- package/dist/src/shell/useStoryCode.js +12 -7
- package/dist/src/shell/useToolbarLayout.d.ts +5 -1
- package/dist/src/shell/useToolbarLayout.js +2 -2
- package/dist/src/shell/useWorstCase.d.ts +8 -2
- package/dist/src/shell/useWorstCase.js +2 -2
- package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
- package/dist/src/shell/valueEditors/FileEditor.js +66 -0
- package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
- package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
- package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
- package/dist/src/shell/valueEditors/ListEditor.js +82 -0
- package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
- package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
- package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
- package/dist/src/shell/valueEditors/PropEditor.js +53 -0
- package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
- package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
- package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
- package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
- package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
- package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
- package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
- package/dist/src/shell/valueEditors/ValueField.js +147 -0
- package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
- package/dist/src/shell/valueEditors/editorStrings.js +66 -0
- package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
- package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
- package/dist/src/shell/valueEditors/valueEditors.css +153 -0
- package/dist/src/shell/worstArgs.d.ts +8 -5
- package/dist/src/shell/worstArgs.js +14 -7
- package/dist/src/shellTheme.d.ts +1 -1
- package/dist/src/shellTheme.js +15 -1
- package/dist/src/shellTheme.types.d.ts +4 -0
- package/dist/src/shellWord.d.ts +12 -0
- package/dist/src/shellWord.js +15 -0
- package/dist/src/sourceFiles.js +2 -1
- package/dist/src/storyArgTypes.d.ts +57 -0
- package/dist/src/storyArgTypes.js +195 -0
- package/dist/src/storyBackground.js +14 -3
- package/dist/src/storyCheck.d.ts +85 -3
- package/dist/src/storyCheck.js +23 -1
- package/dist/src/storyCodeText.d.ts +46 -0
- package/dist/src/storyCodeText.js +27 -0
- package/dist/src/storyControls.d.ts +100 -0
- package/dist/src/storyControls.js +100 -0
- package/dist/src/storyStatuses.d.ts +55 -0
- package/dist/src/storyStatuses.js +104 -0
- package/dist/src/storyTagNames.d.ts +25 -0
- package/dist/src/storyTagNames.js +25 -0
- package/dist/src/storyTags.d.ts +29 -0
- package/dist/src/storyTags.js +85 -0
- package/dist/src/storyTree.d.ts +13 -0
- package/dist/src/storyTree.js +24 -4
- package/dist/src/storybookArgs.d.ts +24 -0
- package/dist/src/storybookArgs.js +185 -0
- package/dist/src/switches.d.ts +66 -3
- package/dist/src/switches.js +42 -1
- package/dist/src/valueSchema.d.ts +28 -0
- package/dist/src/valueSchema.js +196 -0
- package/dist/src/valueShape.d.ts +94 -0
- package/dist/src/valueShape.js +25 -0
- package/dist/src/viewState.d.ts +8 -3
- package/dist/src/viewState.js +27 -10
- package/dist/src/vite/adapter.d.ts +40 -2
- package/dist/src/vite/adapter.js +1 -0
- package/dist/src/vite/agent.types.d.ts +347 -7
- package/dist/src/vite/agentApi.d.ts +23 -0
- package/dist/src/vite/agentApi.js +90 -17
- package/dist/src/vite/agentIndex.d.ts +0 -2
- package/dist/src/vite/agentIndex.js +5 -6
- package/dist/src/vite/agentRoutes.d.ts +20 -1
- package/dist/src/vite/agentRoutes.js +106 -65
- package/dist/src/vite/agentStatuses.d.ts +42 -0
- package/dist/src/vite/agentStatuses.js +67 -0
- package/dist/src/vite/agentStoryCode.d.ts +48 -0
- package/dist/src/vite/agentStoryCode.js +38 -0
- package/dist/src/vite/agentVisibility.d.ts +47 -0
- package/dist/src/vite/agentVisibility.js +174 -0
- package/dist/src/vite/appAudit.d.ts +134 -0
- package/dist/src/vite/appAudit.js +333 -0
- package/dist/src/vite/appBuildOption.d.ts +53 -0
- package/dist/src/vite/appBuildOption.js +55 -0
- package/dist/src/vite/appTokenFiles.d.ts +92 -0
- package/dist/src/vite/appTokenFiles.js +433 -0
- package/dist/src/vite/appTokens.d.ts +23 -0
- package/dist/src/vite/appTokens.js +275 -0
- package/dist/src/vite/builtTexts.d.ts +10 -0
- package/dist/src/vite/builtTexts.js +59 -22
- package/dist/src/vite/catalogueConfig.d.ts +3 -1
- package/dist/src/vite/catalogueConfig.js +15 -3
- package/dist/src/vite/changeCoverage.d.ts +74 -0
- package/dist/src/vite/changeCoverage.js +120 -0
- package/dist/src/vite/changedRoute.d.ts +30 -0
- package/dist/src/vite/changedRoute.js +197 -0
- package/dist/src/vite/checkCode.d.ts +105 -3
- package/dist/src/vite/checkCode.js +323 -36
- package/dist/src/vite/checkoutWatch.d.ts +97 -0
- package/dist/src/vite/checkoutWatch.js +287 -0
- package/dist/src/vite/closeWatch.d.ts +8 -0
- package/dist/src/vite/closeWatch.js +1 -1
- package/dist/src/vite/componentCache.d.ts +8 -0
- package/dist/src/vite/componentCache.js +66 -0
- package/dist/src/vite/componentGraph.d.ts +71 -0
- package/dist/src/vite/componentGraph.js +133 -0
- package/dist/src/vite/componentRules.d.ts +33 -0
- package/dist/src/vite/componentRules.js +105 -0
- package/dist/src/vite/componentScan.d.ts +69 -0
- package/dist/src/vite/componentScan.js +418 -0
- package/dist/src/vite/compositionCheck.d.ts +15 -0
- package/dist/src/vite/compositionCheck.js +243 -0
- package/dist/src/vite/config.d.ts +32 -1
- package/dist/src/vite/configFile.d.ts +14 -2
- package/dist/src/vite/configFile.js +124 -40
- package/dist/src/vite/configKeys.d.ts +15 -0
- package/dist/src/vite/configKeys.js +171 -0
- package/dist/src/vite/configLoadError.d.ts +23 -0
- package/dist/src/vite/configLoadError.js +71 -0
- package/dist/src/vite/cssDeclarations.d.ts +71 -0
- package/dist/src/vite/cssDeclarations.js +290 -0
- package/dist/src/vite/cssImports.d.ts +14 -0
- package/dist/src/vite/cssImports.js +48 -0
- package/dist/src/vite/cssReferences.d.ts +54 -0
- package/dist/src/vite/cssReferences.js +157 -0
- package/dist/src/vite/cssTokenValues.d.ts +50 -0
- package/dist/src/vite/cssTokenValues.js +233 -0
- package/dist/src/vite/designTokens.d.ts +24 -0
- package/dist/src/vite/designTokens.js +5 -1
- package/dist/src/vite/docsExtractor.d.ts +9 -3
- package/dist/src/vite/docsExtractor.js +11 -3
- package/dist/src/vite/docsProgram.d.ts +17 -4
- package/dist/src/vite/docsProgram.js +52 -11
- package/dist/src/vite/docsWorker.js +7 -2
- package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
- package/dist/src/vite/emptyStoryGlobs.js +52 -0
- package/dist/src/vite/fileImports.d.ts +17 -0
- package/dist/src/vite/fileImports.js +57 -0
- package/dist/src/vite/findComponent.d.ts +10 -2
- package/dist/src/vite/findComponent.js +27 -22
- package/dist/src/vite/findRoute.js +3 -2
- package/dist/src/vite/forcedStates.d.ts +9 -2
- package/dist/src/vite/forcedStates.js +12 -3
- package/dist/src/vite/forgebookPlugin.d.ts +2 -0
- package/dist/src/vite/forgebookPlugin.js +52 -72
- package/dist/src/vite/frameErrors.d.ts +19 -0
- package/dist/src/vite/frameErrors.js +70 -0
- package/dist/src/vite/framesServer.d.ts +12 -0
- package/dist/src/vite/framesServer.js +21 -4
- package/dist/src/vite/functionComponentDocs.js +81 -12
- package/dist/src/vite/generatedModules.js +4 -2
- package/dist/src/vite/gitChange.d.ts +38 -5
- package/dist/src/vite/gitChange.js +71 -11
- package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
- package/dist/src/vite/hiddenStoryFiles.js +107 -0
- package/dist/src/vite/hotSnippets.d.ts +38 -14
- package/dist/src/vite/hotSnippets.js +137 -39
- package/dist/src/vite/importedNames.d.ts +37 -0
- package/dist/src/vite/importedNames.js +138 -0
- package/dist/src/vite/indexFields.d.ts +6 -0
- package/dist/src/vite/indexFields.js +21 -0
- package/dist/src/vite/indexStoryFile.d.ts +8 -1
- package/dist/src/vite/indexStoryFile.js +22 -157
- package/dist/src/vite/jsxCallSites.d.ts +33 -0
- package/dist/src/vite/jsxCallSites.js +200 -0
- package/dist/src/vite/jsxInScripts.d.ts +67 -0
- package/dist/src/vite/jsxInScripts.js +138 -0
- package/dist/src/vite/jsxTree.d.ts +20 -0
- package/dist/src/vite/jsxTree.js +163 -0
- package/dist/src/vite/lineAndColumn.d.ts +13 -0
- package/dist/src/vite/lineAndColumn.js +18 -0
- package/dist/src/vite/lookAlikes.d.ts +65 -0
- package/dist/src/vite/lookAlikes.js +228 -0
- package/dist/src/vite/nearestToken.d.ts +17 -0
- package/dist/src/vite/nearestToken.js +9 -2
- package/dist/src/vite/packageEntries.d.ts +42 -0
- package/dist/src/vite/packageEntries.js +127 -0
- package/dist/src/vite/pages.d.ts +9 -1
- package/dist/src/vite/pages.js +108 -4
- package/dist/src/vite/pluginConfig.js +4 -0
- package/dist/src/vite/pluginIds.d.ts +2 -0
- package/dist/src/vite/pluginIds.js +5 -1
- package/dist/src/vite/pluginModules.d.ts +81 -11
- package/dist/src/vite/pluginModules.js +109 -21
- package/dist/src/vite/prebundled.d.ts +57 -15
- package/dist/src/vite/prebundled.js +80 -0
- package/dist/src/vite/previewTags.d.ts +25 -0
- package/dist/src/vite/previewTags.js +56 -0
- package/dist/src/vite/projectFiles.d.ts +54 -0
- package/dist/src/vite/projectFiles.js +116 -0
- package/dist/src/vite/projectPostcss.d.ts +70 -0
- package/dist/src/vite/projectPostcss.js +250 -0
- package/dist/src/vite/propDocs.d.ts +12 -0
- package/dist/src/vite/propDocs.js +130 -58
- package/dist/src/vite/propKind.d.ts +40 -0
- package/dist/src/vite/propKind.js +71 -0
- package/dist/src/vite/propTypeNotes.d.ts +22 -0
- package/dist/src/vite/propTypeNotes.js +51 -0
- package/dist/src/vite/publishedExports.d.ts +27 -0
- package/dist/src/vite/publishedExports.js +298 -0
- package/dist/src/vite/realFolder.d.ts +6 -0
- package/dist/src/vite/realFolder.js +25 -0
- package/dist/src/vite/refsConfig.d.ts +39 -0
- package/dist/src/vite/refsConfig.js +54 -0
- package/dist/src/vite/reuseCheck.d.ts +45 -0
- package/dist/src/vite/reuseCheck.js +260 -0
- package/dist/src/vite/runningVersions.d.ts +33 -0
- package/dist/src/vite/runningVersions.js +25 -0
- package/dist/src/vite/scriptProblems.d.ts +60 -0
- package/dist/src/vite/scriptProblems.js +155 -0
- package/dist/src/vite/searchModule.js +3 -2
- package/dist/src/vite/searchRoute.js +4 -2
- package/dist/src/vite/shapeDocs.d.ts +36 -0
- package/dist/src/vite/shapeDocs.js +177 -0
- package/dist/src/vite/singleFileComponent.d.ts +17 -0
- package/dist/src/vite/singleFileComponent.js +83 -0
- package/dist/src/vite/sourceText.d.ts +34 -0
- package/dist/src/vite/sourceText.js +72 -0
- package/dist/src/vite/sourceTokens.d.ts +7 -0
- package/dist/src/vite/sourceTokens.js +7 -2
- package/dist/src/vite/stackLines.d.ts +49 -0
- package/dist/src/vite/stackLines.js +96 -0
- package/dist/src/vite/storyCode.d.ts +22 -7
- package/dist/src/vite/storyCode.js +263 -37
- package/dist/src/vite/storyCoverage.d.ts +48 -0
- package/dist/src/vite/storyCoverage.js +179 -0
- package/dist/src/vite/storyFilesModule.d.ts +48 -3
- package/dist/src/vite/storyFilesModule.js +105 -15
- package/dist/src/vite/storyPatterns.d.ts +31 -0
- package/dist/src/vite/storyPatterns.js +140 -5
- package/dist/src/vite/storyReach.d.ts +10 -2
- package/dist/src/vite/storyReach.js +15 -11
- package/dist/src/vite/storyTopLevel.d.ts +51 -0
- package/dist/src/vite/storyTopLevel.js +146 -0
- package/dist/src/vite/storylessRoutes.d.ts +4 -3
- package/dist/src/vite/storylessRoutes.js +210 -19
- package/dist/src/vite/switchValuesCheck.d.ts +19 -0
- package/dist/src/vite/switchValuesCheck.js +164 -0
- package/dist/src/vite/switchesDocument.d.ts +15 -0
- package/dist/src/vite/switchesDocument.js +47 -0
- package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
- package/dist/src/vite/tailwindConfigTokens.js +306 -0
- package/dist/src/vite/textImports.d.ts +15 -0
- package/dist/src/vite/textImports.js +58 -0
- package/dist/src/vite/textModules.d.ts +6 -5
- package/dist/src/vite/textModules.js +13 -8
- package/dist/src/vite/tokenAnswers.d.ts +6 -2
- package/dist/src/vite/tokenAnswers.js +11 -7
- package/dist/src/vite/typeParameters.d.ts +83 -0
- package/dist/src/vite/typeParameters.js +270 -0
- package/dist/src/vite/unionProps.d.ts +37 -0
- package/dist/src/vite/unionProps.js +121 -0
- package/dist/src/vite/unresolvedTokens.d.ts +20 -0
- package/dist/src/vite/unresolvedTokens.js +193 -0
- package/dist/src/vite/usageGraph.js +10 -52
- package/dist/src/vite/usageGuidance.d.ts +9 -2
- package/dist/src/vite/usageGuidance.js +36 -8
- package/dist/src/vite/usageImports.d.ts +35 -0
- package/dist/src/vite/usageImports.js +280 -0
- package/dist/src/vite/visibilityRoute.d.ts +16 -0
- package/dist/src/vite/visibilityRoute.js +320 -0
- package/dist/src/worstCase.d.ts +2 -0
- package/dist/src/worstCase.js +2 -0
- package/package.json +28 -8
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a story's picture shows one colour and nothing else: what no check of the page can tell, since an input with no
|
|
3
|
+
* look of its own has a size and draws nothing.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Reads PNG as Chromium writes it, 8 bits per channel, with Node's own zlib, so the core adds no decoder. A file it cannot read
|
|
7
|
+
* counts as showing something: this only ever takes a story from "drew" to "try another".
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { inflateSync } from "node:zlib";
|
|
12
|
+
/** A PNG's signature, and where its header's fields sit. */
|
|
13
|
+
const HEADER_START = 8;
|
|
14
|
+
/** The bytes per pixel of the colour types Chromium writes: true colour, and with alpha. */
|
|
15
|
+
const BYTES_PER_PIXEL = { 2: 3, 6: 4 };
|
|
16
|
+
/** The chunks of a PNG: its header's fields, and its image data joined. */
|
|
17
|
+
const readChunks = (file) => {
|
|
18
|
+
const parts = [];
|
|
19
|
+
let position = HEADER_START;
|
|
20
|
+
let width = 0;
|
|
21
|
+
let height = 0;
|
|
22
|
+
let type = -1;
|
|
23
|
+
while (position + 8 <= file.length) {
|
|
24
|
+
const length = file.readUInt32BE(position);
|
|
25
|
+
const name = file.toString("latin1", position + 4, position + 8);
|
|
26
|
+
const start = position + 8;
|
|
27
|
+
if (name === "IHDR") {
|
|
28
|
+
width = file.readUInt32BE(start);
|
|
29
|
+
height = file.readUInt32BE(start + 4);
|
|
30
|
+
type = file.readUInt8(start + 9);
|
|
31
|
+
}
|
|
32
|
+
if (name === "IDAT")
|
|
33
|
+
parts.push(file.subarray(start, start + length));
|
|
34
|
+
position = start + length + 4;
|
|
35
|
+
}
|
|
36
|
+
return { width, height, type, data: inflateSync(Buffer.concat(parts)) };
|
|
37
|
+
};
|
|
38
|
+
/** PNG's Paeth predictor. */
|
|
39
|
+
const paeth = (left, up, corner) => {
|
|
40
|
+
const estimate = left + up - corner;
|
|
41
|
+
const toLeft = Math.abs(estimate - left);
|
|
42
|
+
const toUp = Math.abs(estimate - up);
|
|
43
|
+
const toCorner = Math.abs(estimate - corner);
|
|
44
|
+
if (toLeft <= toUp && toLeft <= toCorner)
|
|
45
|
+
return left;
|
|
46
|
+
return toUp <= toCorner ? up : corner;
|
|
47
|
+
};
|
|
48
|
+
/** A row's byte before its filter: the filter's prediction added back. */
|
|
49
|
+
const predicted = (filter, left, up, corner) => {
|
|
50
|
+
if (filter === 1)
|
|
51
|
+
return left;
|
|
52
|
+
if (filter === 2)
|
|
53
|
+
return up;
|
|
54
|
+
if (filter === 3)
|
|
55
|
+
return Math.floor((left + up) / 2);
|
|
56
|
+
return filter === 4 ? paeth(left, up, corner) : 0;
|
|
57
|
+
};
|
|
58
|
+
/** A row with its filter undone, from the row above and where the row starts in the image data. */
|
|
59
|
+
const unfilteredRow = (data, start, stride, pixel, previous) => {
|
|
60
|
+
const filter = data.readUInt8(start);
|
|
61
|
+
const row = Buffer.alloc(stride);
|
|
62
|
+
for (let index = 0; index < stride; index += 1) {
|
|
63
|
+
const left = index >= pixel ? (row[index - pixel] ?? 0) : 0;
|
|
64
|
+
const corner = index >= pixel ? (previous[index - pixel] ?? 0) : 0;
|
|
65
|
+
const raw = data[start + 1 + index] ?? 0;
|
|
66
|
+
row[index] = (raw + predicted(filter, left, previous[index] ?? 0, corner)) & 255;
|
|
67
|
+
}
|
|
68
|
+
return row;
|
|
69
|
+
};
|
|
70
|
+
/** Whether every pixel of a row is the colour. */
|
|
71
|
+
const isRowOf = (row, colour) => row.every((value, index) => value === colour[index % colour.length]);
|
|
72
|
+
/**
|
|
73
|
+
* Whether a PNG is one colour.
|
|
74
|
+
*
|
|
75
|
+
* @param file - the file's bytes.
|
|
76
|
+
* @returns the answer; `false` for one it cannot read.
|
|
77
|
+
*/
|
|
78
|
+
export const isUniformPicture = (file) => {
|
|
79
|
+
try {
|
|
80
|
+
const { width, height, type, data } = readChunks(file);
|
|
81
|
+
const pixel = BYTES_PER_PIXEL[type];
|
|
82
|
+
if (pixel === undefined || width === 0 || height === 0)
|
|
83
|
+
return false;
|
|
84
|
+
const stride = width * pixel;
|
|
85
|
+
let previous = Buffer.alloc(stride);
|
|
86
|
+
let colour;
|
|
87
|
+
for (let row = 0; row < height; row += 1) {
|
|
88
|
+
previous = unfilteredRow(data, row * (stride + 1), stride, pixel, previous);
|
|
89
|
+
colour ??= previous.subarray(0, pixel);
|
|
90
|
+
if (!isRowOf(previous, colour))
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The commands a project's coding agents are set up with: `hook`, which an assistant runs when it is about to finish, and
|
|
3
|
+
* `browser`, which installs what the stories' checks run on.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import type { CommandNode, CommandScope } from "@ensiria/cli-kit/commands.types";
|
|
8
|
+
import { type ForgebookOptions } from "./catalogueCommands.ts";
|
|
9
|
+
/**
|
|
10
|
+
* The commands.
|
|
11
|
+
*
|
|
12
|
+
* @param forgebook - the scope of the `forgebook` command, whose options every command takes.
|
|
13
|
+
*/
|
|
14
|
+
export declare const agentSetupCommands: (forgebook: CommandScope<ForgebookOptions>) => Readonly<Record<string, CommandNode>>;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { ScriptError } from "@ensiria/cli-kit/script";
|
|
2
|
+
import { emptyStoryGlobsProblems } from "../../src/vite/emptyStoryGlobs.js";
|
|
3
|
+
import { catalogueClient } from "./agentClient.js";
|
|
4
|
+
import { ASSISTANT_NAMES } from "./agentSetup/assistantHooks.js";
|
|
5
|
+
import { allowed, answerToVerdict, isContinuing, isTurnAborted, sayAnswer, touchesUi } from "./agentSetup/stopHook.js";
|
|
6
|
+
import { verifyText } from "./agentText.js";
|
|
7
|
+
import { COMMAND, configOf } from "./catalogueCommands.js";
|
|
8
|
+
import { runStoriesCheck } from "./storyCheckRun.js";
|
|
9
|
+
import { runVerify } from "./verifyRun.js";
|
|
10
|
+
/** What an assistant sent on stdin: empty when nothing is piped in, as when a person runs the command. */
|
|
11
|
+
const hookInput = async () => {
|
|
12
|
+
if (process.stdin.isTTY)
|
|
13
|
+
return "";
|
|
14
|
+
const chunks = [];
|
|
15
|
+
process.stdin.setEncoding("utf8");
|
|
16
|
+
for await (const chunk of process.stdin)
|
|
17
|
+
if (typeof chunk === "string")
|
|
18
|
+
chunks.push(chunk);
|
|
19
|
+
return chunks.join("");
|
|
20
|
+
};
|
|
21
|
+
/** Runs `verify` for a hook; anything but a verdict lets the assistant finish, since it cannot repair a hook. */
|
|
22
|
+
const hookAnswer = async (assistant, input, configFile, url, style) => {
|
|
23
|
+
if (isTurnAborted(input))
|
|
24
|
+
return allowed();
|
|
25
|
+
try {
|
|
26
|
+
// a pattern that matches nothing leaves the verdict not verified, with the rest of it: never no verdict at all
|
|
27
|
+
const config = await configOf(configFile);
|
|
28
|
+
if (!(await touchesUi(config.dir)))
|
|
29
|
+
return allowed();
|
|
30
|
+
const client = await catalogueClient(config, url);
|
|
31
|
+
try {
|
|
32
|
+
const document = await runVerify({ dir: config.dir, ask: client.ask, check: (each) => runStoriesCheck(config, url, each) }, { since: undefined, isQuick: false, configProblems: emptyStoryGlobsProblems(config) });
|
|
33
|
+
if (typeof document === "string")
|
|
34
|
+
return allowed(`forgebook verify could not run: ${document}\n`);
|
|
35
|
+
const text = verifyText(document, style);
|
|
36
|
+
return answerToVerdict(assistant, document, text, config.dir, isContinuing(input));
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
await client.close();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return allowed(`forgebook verify could not run: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* The commands.
|
|
48
|
+
*
|
|
49
|
+
* @param forgebook - the scope of the `forgebook` command, whose options every command takes.
|
|
50
|
+
*/
|
|
51
|
+
export const agentSetupCommands = (forgebook) => ({
|
|
52
|
+
hook: forgebook.command({
|
|
53
|
+
header: false,
|
|
54
|
+
summary: "What an assistant's hook runs when it is about to finish: verify on the change, sending the agent back on red. Written by init --agents.",
|
|
55
|
+
options: {
|
|
56
|
+
url: {
|
|
57
|
+
type: "string",
|
|
58
|
+
env: "FORGEBOOK_URL",
|
|
59
|
+
valueName: "address",
|
|
60
|
+
description: "Where forgebook dev runs, when not at Vite's default address (http://localhost:5173)."
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
positionals: [
|
|
64
|
+
{ name: "assistant", description: `The assistant: ${ASSISTANT_NAMES.join(", ")}.`, required: true }
|
|
65
|
+
],
|
|
66
|
+
examples: [{ command: `${COMMAND} hook claude`, description: "As Claude Code's Stop hook runs it." }],
|
|
67
|
+
run: async ({ args, options, io, style }) => {
|
|
68
|
+
const assistant = ASSISTANT_NAMES.find((name) => name === args.assistant);
|
|
69
|
+
if (assistant === undefined)
|
|
70
|
+
throw new ScriptError(`No hook format for ${args.assistant}`, {
|
|
71
|
+
hint: `It takes ${ASSISTANT_NAMES.join(", ")}`
|
|
72
|
+
});
|
|
73
|
+
const input = await hookInput();
|
|
74
|
+
// what the server logs (a story's errors, in the project's words) would reach the agent as if the hook said it
|
|
75
|
+
const { write } = process.stderr;
|
|
76
|
+
Object.assign(process.stderr, { write: () => true });
|
|
77
|
+
const answer = await hookAnswer(assistant, input, options.config, options.url, style).finally(() => {
|
|
78
|
+
Object.assign(process.stderr, { write });
|
|
79
|
+
});
|
|
80
|
+
sayAnswer(answer, io);
|
|
81
|
+
}
|
|
82
|
+
}),
|
|
83
|
+
browser: forgebook.command({
|
|
84
|
+
summary: "Install the browser the stories' checks run on, with the Playwright that will open it.",
|
|
85
|
+
options: {
|
|
86
|
+
"with-deps": {
|
|
87
|
+
type: "boolean",
|
|
88
|
+
description: "Also install what the browser needs of the system, as CI does."
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
examples: [{ command: `${COMMAND} browser`, description: "Once, after installing @forgebook/testing." }],
|
|
92
|
+
run: async ({ options, io, log }) => {
|
|
93
|
+
const { installBrowser } = await import("./browserRun.js");
|
|
94
|
+
await installBrowser(process.cwd(), options["with-deps"] === true, io);
|
|
95
|
+
log.success("Browser installed");
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
});
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import type { OutputStyle } from "@ensiria/cli-kit/log.types";
|
|
2
2
|
import type { StoryCheckReport, StoryDiffReport, StoryShotReport } from "../../src/storyCheck.ts";
|
|
3
|
-
import type { CheckedCodeDocument, ErrorsDocument, FoundComponentsDocument, NearestTokensDocument, PageDocument, PagesDocument, PluginsDocument, SearchDocument, StoriesDocument, StoryDocument, TokensDocument } from "../../src/vite/agent.types.ts";
|
|
3
|
+
import type { CheckedCodeDocument, ErrorsDocument, FoundComponentsDocument, NearestTokensDocument, PageDocument, PagesDocument, PluginsDocument, SearchDocument, StoriesDocument, StoryDocument, SwitchesDocument, TokensDocument, VerifyDocument, VisibilityDocument } from "../../src/vite/agent.types.ts";
|
|
4
4
|
import type { DesignToken } from "../../src/vite/designTokens.ts";
|
|
5
5
|
import type { TokenClash } from "../../src/vite/tokenClashes.ts";
|
|
6
6
|
/**
|
|
7
7
|
* The stories as a table: one row per story, its id first (what `forgebook story` takes, never cut), then its
|
|
8
|
-
* component's title and its name.
|
|
8
|
+
* component's title and its name, with its statuses in brackets.
|
|
9
9
|
*
|
|
10
10
|
* @param document - the stories document.
|
|
11
11
|
* @param style - colours, glyphs and width.
|
|
12
12
|
*/
|
|
13
13
|
export declare const storiesText: (document: StoriesDocument, style: OutputStyle) => string;
|
|
14
14
|
/**
|
|
15
|
-
* One story's facts: where it is, where it opens, its args, its component's props and those every use must set
|
|
15
|
+
* One story's facts: where it is, where it opens, its args, its component's props and those every use must set, then
|
|
16
|
+
* its code.
|
|
16
17
|
*
|
|
17
18
|
* @param document - the story document.
|
|
18
19
|
* @param style - colours, glyphs and width.
|
|
@@ -97,6 +98,19 @@ export declare const foundComponentsText: (document: FoundComponentsDocument) =>
|
|
|
97
98
|
* @param document - the answer.
|
|
98
99
|
*/
|
|
99
100
|
export declare const checkedCodeText: (document: CheckedCodeDocument) => string;
|
|
101
|
+
/**
|
|
102
|
+
* The published components an agent cannot see, what was not looked at, and how many were.
|
|
103
|
+
*
|
|
104
|
+
* @param document - the answer.
|
|
105
|
+
*/
|
|
106
|
+
export declare const visibilityText: (document: VisibilityDocument) => string;
|
|
107
|
+
/**
|
|
108
|
+
* What `verify` found, each with its fix, and the verdict in one line, last: what a person reads first at a prompt.
|
|
109
|
+
*
|
|
110
|
+
* @param document - the answer.
|
|
111
|
+
* @param style - colours, glyphs and width.
|
|
112
|
+
*/
|
|
113
|
+
export declare const verifyText: (document: VerifyDocument, style: OutputStyle) => string;
|
|
100
114
|
/**
|
|
101
115
|
* The catalogue's plugins, one per line.
|
|
102
116
|
*
|
|
@@ -123,3 +137,9 @@ export declare const pageText: (document: PageDocument) => string;
|
|
|
123
137
|
* @param document - the search's document.
|
|
124
138
|
*/
|
|
125
139
|
export declare const searchText: (document: SearchDocument) => string;
|
|
140
|
+
/**
|
|
141
|
+
* The catalogue's switches, one per line, each with its values and what they bring with them.
|
|
142
|
+
*
|
|
143
|
+
* @param document - the answer.
|
|
144
|
+
*/
|
|
145
|
+
export declare const switchesText: (document: SwitchesDocument) => string;
|
|
@@ -11,19 +11,52 @@ import { formatJson } from "@ensiria/cli-kit/files";
|
|
|
11
11
|
import { keyValue, table } from "@ensiria/cli-kit/layout";
|
|
12
12
|
/** The style with no width to fit, so no cell is cut. */
|
|
13
13
|
const uncut = (style) => ({ ...style, width: Number.POSITIVE_INFINITY });
|
|
14
|
+
/** Statuses in brackets after a name (` [review]`); nothing for none. */
|
|
15
|
+
const statusMark = (status) => status === undefined ? "" : ` [${status.join(", ")}]`;
|
|
16
|
+
/** The words read as others, as the first line of an answer; none when the query was read as typed. */
|
|
17
|
+
const correctionLines = (corrections) => corrections.length === 0
|
|
18
|
+
? []
|
|
19
|
+
: [`Read as: ${corrections.map(({ typed, read }) => `"${read}" for "${typed}"`).join(", ")}`];
|
|
14
20
|
/**
|
|
15
21
|
* The stories as a table: one row per story, its id first (what `forgebook story` takes, never cut), then its
|
|
16
|
-
* component's title and its name.
|
|
22
|
+
* component's title and its name, with its statuses in brackets.
|
|
17
23
|
*
|
|
18
24
|
* @param document - the stories document.
|
|
19
25
|
* @param style - colours, glyphs and width.
|
|
20
26
|
*/
|
|
21
27
|
export const storiesText = (document, style) => table(document.components.flatMap((component) => component.stories.map((story) => [
|
|
22
28
|
story.id,
|
|
23
|
-
`${component.title} › ${story.name}${story.isUnlisted ? " (unlisted)" : ""}`
|
|
29
|
+
`${component.title} › ${story.name}${story.isUnlisted ? " (unlisted)" : ""}${statusMark(story.statuses)}`
|
|
24
30
|
])), { columns: [{ header: "Id" }, { header: "Story", tone: "muted" }] }, uncut(style));
|
|
31
|
+
/** Why a component lists no props, as the `Props` line says it. */
|
|
32
|
+
const PROPS_NOTES = {
|
|
33
|
+
untyped: () => "none: its props are typed any",
|
|
34
|
+
"no-signature": () => "none: its type cannot be called with props",
|
|
35
|
+
"outside-package": (count) => `none: all ${count} come from outside the package`
|
|
36
|
+
};
|
|
37
|
+
/** When a variant's prop applies, as the `Props` line says it (`mode is single, or left out`). */
|
|
38
|
+
const conditionText = ({ prop, values, orOmitted }) => {
|
|
39
|
+
if (values.length === 0)
|
|
40
|
+
return `${prop} is left out`;
|
|
41
|
+
return `${prop} is ${values.map(String).join(" or ")}${orOmitted === true ? ", or left out" : ""}`;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* A component's props in one line: each name, a variant's with when it can be passed, or why there are none.
|
|
45
|
+
*
|
|
46
|
+
* @param docs - the component's docs.
|
|
47
|
+
*/
|
|
48
|
+
const propsLine = (docs) => {
|
|
49
|
+
const { propsNote } = docs;
|
|
50
|
+
if (docs.props.length === 0 && propsNote !== undefined) {
|
|
51
|
+
return PROPS_NOTES[propsNote.reason](propsNote.reason === "outside-package" ? propsNote.count : 0);
|
|
52
|
+
}
|
|
53
|
+
return docs.props
|
|
54
|
+
.map((prop) => prop.onlyWhen === undefined ? prop.name : `${prop.name} (when ${conditionText(prop.onlyWhen)})`)
|
|
55
|
+
.join(", ");
|
|
56
|
+
};
|
|
25
57
|
/**
|
|
26
|
-
* One story's facts: where it is, where it opens, its args, its component's props and those every use must set
|
|
58
|
+
* One story's facts: where it is, where it opens, its args, its component's props and those every use must set, then
|
|
59
|
+
* its code.
|
|
27
60
|
*
|
|
28
61
|
* @param document - the story document.
|
|
29
62
|
* @param style - colours, glyphs and width.
|
|
@@ -37,14 +70,21 @@ export const storyText = (document, style) => {
|
|
|
37
70
|
["Frame", document.story.links.frame],
|
|
38
71
|
["Embed", document.story.links.embed],
|
|
39
72
|
["Args", JSON.stringify(document.args)],
|
|
40
|
-
["Props", document.docs === undefined ? "none" : document.docs
|
|
73
|
+
["Props", document.docs === undefined ? "none" : propsLine(document.docs)],
|
|
41
74
|
["Required", document.requiredProps.length === 0 ? "none" : document.requiredProps.join(", ")]
|
|
42
75
|
];
|
|
43
76
|
if (document.story.description !== undefined)
|
|
44
77
|
entries.push(["About", document.story.description]);
|
|
78
|
+
// the story's own, which may take its meta's away, and the deprecation its component's TSDoc adds
|
|
79
|
+
const fromDocs = document.component.statuses?.includes("deprecated") ? ["deprecated"] : [];
|
|
80
|
+
const statuses = [...new Set([...(document.story.statuses ?? []), ...fromDocs])];
|
|
81
|
+
if (statuses.length > 0)
|
|
82
|
+
entries.push(["Status", statuses.join(", ")]);
|
|
45
83
|
if (document.design !== undefined)
|
|
46
84
|
entries.push(["Design", document.design.figma]);
|
|
47
|
-
|
|
85
|
+
const fields = keyValue(entries, uncut(style));
|
|
86
|
+
// the code spans lines: under the fields, as it is copied
|
|
87
|
+
return document.code === undefined ? fields : `${fields}\n\n${document.code}`;
|
|
48
88
|
};
|
|
49
89
|
/** What a model judged, each line saying it is an opinion. */
|
|
50
90
|
const judgementLines = (result) => {
|
|
@@ -71,8 +111,17 @@ const judgementLines = (result) => {
|
|
|
71
111
|
*/
|
|
72
112
|
export const checkText = (report, style) => (report.a11y === "off" ? "Accessibility is not checked: the catalogue sets a11y: false.\n" : "") +
|
|
73
113
|
table(report.results.flatMap((result) => [
|
|
74
|
-
...(result.
|
|
75
|
-
? [
|
|
114
|
+
...(result.notVerified === undefined
|
|
115
|
+
? []
|
|
116
|
+
: [[result.storyId, result.view || "default", `not verified: ${result.notVerified}`]]),
|
|
117
|
+
...(result.problems.length === 0 && result.notVerified === undefined
|
|
118
|
+
? [
|
|
119
|
+
[
|
|
120
|
+
result.storyId,
|
|
121
|
+
result.view || "default",
|
|
122
|
+
result.isNotAwaited === true ? "passes, as drawn: parameters.suspense.expected" : "passes"
|
|
123
|
+
]
|
|
124
|
+
]
|
|
76
125
|
: result.problems.map((problem) => [
|
|
77
126
|
result.storyId,
|
|
78
127
|
result.view || "default",
|
|
@@ -88,7 +137,11 @@ export const checkText = (report, style) => (report.a11y === "off" ? "Accessibil
|
|
|
88
137
|
*/
|
|
89
138
|
export const errorsText = (document, style) => document.errors.length === 0
|
|
90
139
|
? ""
|
|
91
|
-
: table(document.errors.map((error) => [
|
|
140
|
+
: table(document.errors.map((error) => [
|
|
141
|
+
String(error.n),
|
|
142
|
+
error.storyId,
|
|
143
|
+
`${error.kind}: ${error.place === undefined ? "" : `${error.place}: `}${error.message}`
|
|
144
|
+
]), { columns: [{ header: "#", tone: "muted" }, { header: "Story" }, { header: "Error" }] }, uncut(style));
|
|
92
145
|
/**
|
|
93
146
|
* What `forgebook errors` prints of an answer: its JSON (one line per error while following, so each can be read as it
|
|
94
147
|
* comes), or its table.
|
|
@@ -111,7 +164,19 @@ export const errorsOutput = (document, mode, style) => {
|
|
|
111
164
|
* @param shownFile - how a file is written for the reader (relative to where the command runs).
|
|
112
165
|
* @param style - colours, glyphs and width.
|
|
113
166
|
*/
|
|
114
|
-
export const shotText = (report, shownFile, style) => table(report.shots.map((shot) => [
|
|
167
|
+
export const shotText = (report, shownFile, style) => table(report.shots.map((shot) => [
|
|
168
|
+
shot.storyId,
|
|
169
|
+
shot.view || "default",
|
|
170
|
+
shownFile(shot.file),
|
|
171
|
+
shot.status === undefined ? "" : `not of the story: ${shot.status}`
|
|
172
|
+
]), {
|
|
173
|
+
columns: [
|
|
174
|
+
{ header: "Story" },
|
|
175
|
+
{ header: "View", tone: "muted" },
|
|
176
|
+
{ header: "Picture" },
|
|
177
|
+
{ header: "Status" }
|
|
178
|
+
]
|
|
179
|
+
}, uncut(style));
|
|
115
180
|
/**
|
|
116
181
|
* A comparison with the baselines as a person reads it.
|
|
117
182
|
*
|
|
@@ -141,16 +206,29 @@ export const diffText = (report, shownFile, style) => table(report.results.map((
|
|
|
141
206
|
*/
|
|
142
207
|
export const tokensText = (document) => {
|
|
143
208
|
if (!document.isConfigured)
|
|
144
|
-
return 'No tokens file: name one in forgebook.config.ts (`tokens: ["tokens.json"]`) or on a source.';
|
|
209
|
+
return 'No tokens file, and none found in the application: name one in forgebook.config.ts (`tokens: ["tokens.json"]`) or on a source.';
|
|
145
210
|
if (document.total === 0)
|
|
146
211
|
return "No tokens here.";
|
|
147
212
|
const lines = document.tokens.map((token) => tokenLine(token));
|
|
148
213
|
const more = document.total - document.tokens.length;
|
|
149
214
|
return [
|
|
150
215
|
...lines,
|
|
151
|
-
...(more > 0 ? [`… and ${more} more: narrow it with --category, or raise --limit.`] : [])
|
|
216
|
+
...(more > 0 ? [`… and ${more} more: narrow it with --category, or raise --limit.`] : []),
|
|
217
|
+
...tokenSourceLines(document.sources ?? [], document.notes ?? [])
|
|
152
218
|
].join("\n");
|
|
153
219
|
};
|
|
220
|
+
/** What tokens were read from, on one line, and what could not be, as a person reads them. */
|
|
221
|
+
const tokenSourceLines = (sources, notes) => {
|
|
222
|
+
const read = sources.filter((source) => source.kind !== "tokens-file");
|
|
223
|
+
return [
|
|
224
|
+
...(read.length === 0
|
|
225
|
+
? []
|
|
226
|
+
: [
|
|
227
|
+
`Read from: ${read.map(({ kind, file, tokens }) => `${file} (${kind}, ${tokens ?? 0})`).join(", ")}`
|
|
228
|
+
]),
|
|
229
|
+
...notes.map((note) => `Not read: ${note}`)
|
|
230
|
+
];
|
|
231
|
+
};
|
|
154
232
|
/** A token on one line, its themes and any deprecation beside it. */
|
|
155
233
|
const tokenLine = (token) => {
|
|
156
234
|
const modes = Object.entries(token.modes).map(([mode, value]) => ` ${mode}: ${value}`);
|
|
@@ -198,12 +276,13 @@ export const nearestTokensText = (document) => {
|
|
|
198
276
|
*/
|
|
199
277
|
export const foundComponentsText = (document) => document.components.length === 0
|
|
200
278
|
? `Nothing in this catalogue holds "${document.query}".`
|
|
201
|
-
:
|
|
202
|
-
.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
279
|
+
: [
|
|
280
|
+
...correctionLines(document.corrections),
|
|
281
|
+
...document.components.map((each) => {
|
|
282
|
+
const missed = each.missed.length === 0 ? "" : ` (no "${each.missed.join('", "')}")`;
|
|
283
|
+
return `${each.title}${missed}${each.guidance?.deprecated === undefined ? "" : " deprecated"}`;
|
|
284
|
+
})
|
|
285
|
+
].join("\n");
|
|
207
286
|
/**
|
|
208
287
|
* What a change broke as a person reads it, a line a problem.
|
|
209
288
|
*
|
|
@@ -212,8 +291,61 @@ export const foundComponentsText = (document) => document.components.length ===
|
|
|
212
291
|
export const checkedCodeText = (document) => {
|
|
213
292
|
const lines = document.problems.map((each) => `${each.file}${each.line === undefined ? "" : `:${each.line}`} ${each.message}`);
|
|
214
293
|
return [
|
|
215
|
-
...(lines.length
|
|
216
|
-
|
|
294
|
+
...(lines.length > 0
|
|
295
|
+
? lines
|
|
296
|
+
: [document.skipped.length > 0 ? "Nothing to report in what was checked." : "Nothing to report."]),
|
|
297
|
+
...document.skipped,
|
|
298
|
+
...(document.advice ?? []).map(({ file, line, message }) => `${file}:${line} ${message}`),
|
|
299
|
+
...(document.excused ?? []).map(({ file, line, rule, reason }) => `${file}:${line} ${rule} excused by a comment: ${reason}`),
|
|
300
|
+
...tokenSourceLines(document.tokenSources ?? [], document.tokenNotes ?? [])
|
|
301
|
+
].join("\n");
|
|
302
|
+
};
|
|
303
|
+
/** A published component an agent cannot see, a line for each thing that hides it. */
|
|
304
|
+
const unseenLines = ({ file, reasons }) => reasons.map(({ reason, fix }) => `${file} agents cannot see it: ${reason}. Fix: ${fix}`);
|
|
305
|
+
/**
|
|
306
|
+
* The published components an agent cannot see, what was not looked at, and how many were.
|
|
307
|
+
*
|
|
308
|
+
* @param document - the answer.
|
|
309
|
+
*/
|
|
310
|
+
export const visibilityText = (document) => {
|
|
311
|
+
const scope = document.since === undefined ? "" : ` changed since ${document.since}`;
|
|
312
|
+
const count = `${document.checked} published component file${document.checked === 1 ? "" : "s"}${scope}`;
|
|
313
|
+
const ending = document.packages.length === 0 && document.skipped.length === 0
|
|
314
|
+
? "No package here publishes a component: nothing to hold to this."
|
|
315
|
+
: `${count}, ${document.unseen.length} agents cannot see.`;
|
|
316
|
+
return [...document.unseen.flatMap(unseenLines), ...document.skipped, ending].join("\n");
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* What `verify` found, each with its fix, and the verdict in one line, last: what a person reads first at a prompt.
|
|
320
|
+
*
|
|
321
|
+
* @param document - the answer.
|
|
322
|
+
* @param style - colours, glyphs and width.
|
|
323
|
+
*/
|
|
324
|
+
export const verifyText = (document, style) => {
|
|
325
|
+
const uncovered = document.uiFiles.flatMap((each) => each.coverage === "none"
|
|
326
|
+
? [
|
|
327
|
+
`${each.file} not verified: ${each.reason ?? ""}${each.fix === undefined ? "" : ` Fix: ${each.fix}`}`
|
|
328
|
+
]
|
|
329
|
+
: []);
|
|
330
|
+
const unseen = document.unseen.flatMap(unseenLines);
|
|
331
|
+
const code = document.code.problems.map((each) => `${each.file}${each.line === undefined ? "" : `:${each.line}`} ${each.message}`);
|
|
332
|
+
const outdated = (document.outdated ?? []).map((each) => `${each.file} out of date: written for props ${each.written}, now ${each.current}. Fix: ${each.fix}`);
|
|
333
|
+
const notes = document.code.notes.map((each) => `${each.file}${each.line === undefined ? "" : `:${each.line}`} note: ${each.message}`);
|
|
334
|
+
const advice = (document.code.advice ?? []).map((each) => `${each.file}:${each.line} ${each.message}`);
|
|
335
|
+
const results = [
|
|
336
|
+
...document.failures,
|
|
337
|
+
...document.notVerified.map((each) => ({ ...each, problems: [] }))
|
|
338
|
+
].map((each) => ({ ...each, frame: each.links?.frame ?? "" }));
|
|
339
|
+
const stories = results.length === 0 ? [] : [checkText({ schema: 1, results }, style)];
|
|
340
|
+
return [
|
|
341
|
+
...uncovered,
|
|
342
|
+
...unseen,
|
|
343
|
+
...code,
|
|
344
|
+
...outdated,
|
|
345
|
+
...notes,
|
|
346
|
+
...advice,
|
|
347
|
+
...stories,
|
|
348
|
+
document.summary
|
|
217
349
|
].join("\n");
|
|
218
350
|
};
|
|
219
351
|
/**
|
|
@@ -265,13 +397,28 @@ export const pageText = (document) => [document.page.links.address, "", document
|
|
|
265
397
|
*/
|
|
266
398
|
export const searchText = (document) => document.results.length === 0
|
|
267
399
|
? `Nothing in the catalogue holds "${document.query}".`
|
|
268
|
-
:
|
|
269
|
-
.
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
400
|
+
: [
|
|
401
|
+
...correctionLines(document.corrections),
|
|
402
|
+
...document.results.flatMap((result) => [
|
|
403
|
+
`${result.name} (${result.place})${result.missed.length === 0 ? "" : `, missing: ${result.missed.join(", ")}`}`,
|
|
404
|
+
` ${result.address}`,
|
|
405
|
+
...result.hits.flatMap((hit) => [
|
|
406
|
+
` ${hit.kind}${hit.name === undefined ? "" : ` ${hit.name}`}: ${hit.text}`,
|
|
407
|
+
` ${hit.address}`
|
|
408
|
+
])
|
|
275
409
|
])
|
|
276
|
-
])
|
|
277
|
-
|
|
410
|
+
].join("\n");
|
|
411
|
+
/**
|
|
412
|
+
* The catalogue's switches, one per line, each with its values and what they bring with them.
|
|
413
|
+
*
|
|
414
|
+
* @param document - the answer.
|
|
415
|
+
*/
|
|
416
|
+
export const switchesText = (document) => document.switches
|
|
417
|
+
.map((each) => {
|
|
418
|
+
const values = each.values.map(({ value, implies }) => {
|
|
419
|
+
const implied = Object.entries(implies ?? {}).map(([id, other]) => `${id}=${other}`);
|
|
420
|
+
return implied.length === 0 ? value : `${value} (implies ${implied.join(", ")})`;
|
|
421
|
+
});
|
|
422
|
+
return `${each.id} (${each.control}): ${values.join(", ")}`;
|
|
423
|
+
})
|
|
424
|
+
.join("\n");
|