forgebook 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +914 -72
- package/dist/bin/forgebook/agentClient.d.ts +2 -1
- package/dist/bin/forgebook/agentClient.js +13 -6
- package/dist/bin/forgebook/agentGuide.d.ts +59 -0
- package/dist/bin/forgebook/agentGuide.js +203 -0
- package/dist/bin/forgebook/agentLoopCommands.mjs +22 -42
- package/dist/bin/forgebook/agentSetup/agentFiles.d.ts +55 -0
- package/dist/bin/forgebook/agentSetup/agentFiles.js +319 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.d.ts +71 -0
- package/dist/bin/forgebook/agentSetup/assistantHooks.js +125 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.d.ts +23 -0
- package/dist/bin/forgebook/agentSetup/ciWorkflow.js +55 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.d.ts +25 -0
- package/dist/bin/forgebook/agentSetup/drawCandidates.js +116 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.d.ts +28 -0
- package/dist/bin/forgebook/agentSetup/drawDiagnosis.js +134 -0
- package/dist/bin/forgebook/agentSetup/drawRun.d.ts +91 -0
- package/dist/bin/forgebook/agentSetup/drawRun.js +353 -0
- package/dist/bin/forgebook/agentSetup/hookNames.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/hookNames.js +7 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.d.ts +48 -0
- package/dist/bin/forgebook/agentSetup/initAgentSteps.js +104 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.d.ts +17 -0
- package/dist/bin/forgebook/agentSetup/liftedProviders.js +186 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.d.ts +46 -0
- package/dist/bin/forgebook/agentSetup/projectRunner.js +85 -0
- package/dist/bin/forgebook/agentSetup/stopHook.d.ts +65 -0
- package/dist/bin/forgebook/agentSetup/stopHook.js +202 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.d.ts +7 -0
- package/dist/bin/forgebook/agentSetup/uniformPicture.js +98 -0
- package/dist/bin/forgebook/agentSetupCommands.d.mts +14 -0
- package/dist/bin/forgebook/agentSetupCommands.mjs +98 -0
- package/dist/bin/forgebook/agentText.d.ts +23 -3
- package/dist/bin/forgebook/agentText.js +175 -28
- package/dist/bin/forgebook/agents.md +20 -191
- package/dist/bin/forgebook/agentsText.js +2 -1
- package/dist/bin/forgebook/appBuild/appBuild.d.ts +59 -0
- package/dist/bin/forgebook/appBuild/appBuild.js +213 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.d.ts +96 -0
- package/dist/bin/forgebook/appBuild/appViteConfig.js +320 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.d.ts +14 -0
- package/dist/bin/forgebook/appBuild/tsconfigPaths.js +80 -0
- package/dist/bin/forgebook/auditCommand.d.mts +8 -0
- package/dist/bin/forgebook/auditCommand.mjs +75 -0
- package/dist/bin/forgebook/auditRun.d.ts +95 -0
- package/dist/bin/forgebook/auditRun.js +270 -0
- package/dist/bin/forgebook/browserRun.d.ts +21 -0
- package/dist/bin/forgebook/browserRun.js +57 -0
- package/dist/bin/forgebook/buildFailure.d.ts +7 -0
- package/dist/bin/forgebook/buildFailure.js +47 -0
- package/dist/bin/forgebook/buildWatch.d.ts +52 -0
- package/dist/bin/forgebook/buildWatch.js +137 -0
- package/dist/bin/forgebook/builtCatalogue.js +9 -5
- package/dist/bin/forgebook/catalogueCommands.d.ts +9 -0
- package/dist/bin/forgebook/catalogueCommands.js +23 -0
- package/dist/bin/forgebook/catalogueVite.d.ts +5 -1
- package/dist/bin/forgebook/catalogueVite.js +14 -6
- package/dist/bin/forgebook/commandCacheClaim.d.ts +18 -0
- package/dist/bin/forgebook/commandCacheClaim.js +170 -0
- package/dist/bin/forgebook/commandServer.d.ts +8 -0
- package/dist/bin/forgebook/commandServer.js +61 -13
- package/dist/bin/forgebook/forgebookCommands.mjs +105 -28
- package/dist/bin/forgebook/graphCommand.d.mts +8 -0
- package/dist/bin/forgebook/graphCommand.mjs +84 -0
- package/dist/bin/forgebook/guide/commands.md +57 -0
- package/dist/bin/forgebook/guide/devices.md +17 -0
- package/dist/bin/forgebook/guide/docs-pages.md +13 -0
- package/dist/bin/forgebook/guide/frameworks/angular.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/html.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/nextjs.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/nuxt.md +22 -0
- package/dist/bin/forgebook/guide/frameworks/preact.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/react-native-web.md +21 -0
- package/dist/bin/forgebook/guide/frameworks/react.md +16 -0
- package/dist/bin/forgebook/guide/frameworks/solid.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/svelte.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/sveltekit.md +23 -0
- package/dist/bin/forgebook/guide/frameworks/vue.md +18 -0
- package/dist/bin/forgebook/guide/frameworks/web-components.md +21 -0
- package/dist/bin/forgebook/guide/links.md +29 -0
- package/dist/bin/forgebook/guide/setup.md +23 -0
- package/dist/bin/forgebook/guide/stories.md +90 -0
- package/dist/bin/forgebook/guide/switches.md +43 -0
- package/dist/bin/forgebook/guideCommand.d.mts +13 -0
- package/dist/bin/forgebook/guideCommand.mjs +37 -0
- package/dist/bin/forgebook/importers/storybook.d.ts +21 -0
- package/dist/bin/forgebook/importers/storybook.js +11 -5
- package/dist/bin/forgebook/importers/storybookFrameworks.js +1 -1
- package/dist/bin/forgebook/initCommands.d.mts +11 -0
- package/dist/bin/forgebook/initCommands.mjs +51 -78
- package/dist/bin/forgebook/initConfig.d.ts +5 -3
- package/dist/bin/forgebook/initConfig.js +6 -3
- package/dist/bin/forgebook/initInstall.d.ts +15 -0
- package/dist/bin/forgebook/initInstall.js +77 -0
- package/dist/bin/forgebook/initPrint.d.ts +9 -0
- package/dist/bin/forgebook/initPrint.js +60 -0
- package/dist/bin/forgebook/initRefusals.d.ts +45 -0
- package/dist/bin/forgebook/initRefusals.js +91 -0
- package/dist/bin/forgebook/initRun.d.ts +28 -0
- package/dist/bin/forgebook/initRun.js +311 -0
- package/dist/bin/forgebook/mcpCommand.mjs +38 -4
- package/dist/bin/forgebook/mcpGraph.d.ts +13 -0
- package/dist/bin/forgebook/mcpGraph.js +24 -0
- package/dist/bin/forgebook/mcpTokens.d.ts +14 -0
- package/dist/bin/forgebook/mcpTokens.js +58 -0
- package/dist/bin/forgebook/mcpToolParts.d.ts +7 -0
- package/dist/bin/forgebook/mcpToolParts.js +10 -0
- package/dist/bin/forgebook/mcpTools.d.ts +13 -6
- package/dist/bin/forgebook/mcpTools.js +57 -90
- package/dist/bin/forgebook/mcpVerify.d.ts +16 -0
- package/dist/bin/forgebook/mcpVerify.js +36 -0
- package/dist/bin/forgebook/migrate/codemods.d.ts +11 -0
- package/dist/bin/forgebook/migrate/codemods.js +61 -0
- package/dist/bin/forgebook/migrate/migrate.types.d.ts +117 -0
- package/dist/bin/forgebook/migrate/migrate.types.js +5 -0
- package/dist/bin/forgebook/migrate/migrateCommand.d.mts +8 -0
- package/dist/bin/forgebook/migrate/migrateCommand.mjs +76 -0
- package/dist/bin/forgebook/migrate/migrateRun.d.ts +61 -0
- package/dist/bin/forgebook/migrate/migrateRun.js +210 -0
- package/dist/bin/forgebook/migrate/migrateText.d.ts +12 -0
- package/dist/bin/forgebook/migrate/migrateText.js +30 -0
- package/dist/bin/forgebook/migrate/migrateWrite.d.ts +27 -0
- package/dist/bin/forgebook/migrate/migrateWrite.js +66 -0
- package/dist/bin/forgebook/migrate/objectEdits.d.ts +70 -0
- package/dist/bin/forgebook/migrate/objectEdits.js +241 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.d.ts +3 -0
- package/dist/bin/forgebook/migrate/playOnInBuilds.js +86 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.d.ts +5 -0
- package/dist/bin/forgebook/migrate/propGroupStrings.js +81 -0
- package/dist/bin/forgebook/newProject/newProject.d.ts +39 -0
- package/dist/bin/forgebook/newProject/newProject.js +180 -0
- package/dist/bin/forgebook/newProject/newProject.types.d.ts +97 -0
- package/dist/bin/forgebook/newProject/newProject.types.js +6 -0
- package/dist/bin/forgebook/newProject/packageManagers.d.ts +51 -0
- package/dist/bin/forgebook/newProject/packageManagers.js +121 -0
- package/dist/bin/forgebook/newProject/projectEntries.d.ts +62 -0
- package/dist/bin/forgebook/newProject/projectEntries.js +191 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.d.ts +57 -0
- package/dist/bin/forgebook/newProject/projectFrameworks.js +148 -0
- package/dist/bin/forgebook/newProject/projectLook.d.ts +23 -0
- package/dist/bin/forgebook/newProject/projectLook.js +293 -0
- package/dist/bin/forgebook/newProject/projectPackages.d.ts +66 -0
- package/dist/bin/forgebook/newProject/projectPackages.js +178 -0
- package/dist/bin/forgebook/newRepair.d.ts +45 -0
- package/dist/bin/forgebook/newRepair.js +157 -0
- package/dist/bin/forgebook/newRepairRun.d.ts +69 -0
- package/dist/bin/forgebook/newRepairRun.js +148 -0
- package/dist/bin/forgebook/newStories.d.ts +23 -1
- package/dist/bin/forgebook/newStories.js +101 -11
- package/dist/bin/forgebook/newStoriesFile.d.ts +20 -1
- package/dist/bin/forgebook/newStoriesFile.js +43 -4
- package/dist/bin/forgebook/prebundleRun.d.ts +3 -1
- package/dist/bin/forgebook/prebundleRun.js +28 -8
- package/dist/bin/forgebook/proofCommand.d.mts +15 -0
- package/dist/bin/forgebook/proofCommand.mjs +212 -0
- package/dist/bin/forgebook/proofRun.d.ts +63 -0
- package/dist/bin/forgebook/proofRun.js +412 -0
- package/dist/bin/forgebook/proofText.d.ts +36 -0
- package/dist/bin/forgebook/proofText.js +131 -0
- package/dist/bin/forgebook/proofWorkflow.d.ts +29 -0
- package/dist/bin/forgebook/proofWorkflow.js +205 -0
- package/dist/bin/forgebook/setArgsTool.d.ts +8 -0
- package/dist/bin/forgebook/setArgsTool.js +70 -0
- package/dist/bin/forgebook/storyCheckCommands.mjs +42 -3
- package/dist/bin/forgebook/storyCheckRun.d.ts +50 -0
- package/dist/bin/forgebook/storyCheckRun.js +83 -9
- package/dist/bin/forgebook/storyFileIds.d.ts +15 -0
- package/dist/bin/forgebook/storyFileIds.js +14 -0
- package/dist/bin/forgebook/stressCases.d.ts +31 -0
- package/dist/bin/forgebook/stressCases.js +79 -0
- package/dist/bin/forgebook/stressRun.d.ts +12 -0
- package/dist/bin/forgebook/stressRun.js +61 -0
- package/dist/bin/forgebook/stressText.d.ts +27 -0
- package/dist/bin/forgebook/stressText.js +46 -0
- package/dist/bin/forgebook/verifyBase.d.ts +45 -0
- package/dist/bin/forgebook/verifyBase.js +196 -0
- package/dist/bin/forgebook/verifyCommand.d.mts +13 -0
- package/dist/bin/forgebook/verifyCommand.mjs +125 -0
- package/dist/bin/forgebook/verifyRun.d.ts +63 -0
- package/dist/bin/forgebook/verifyRun.js +108 -0
- package/dist/bin/forgebook/verifyVerdict.d.ts +40 -0
- package/dist/bin/forgebook/verifyVerdict.js +297 -0
- package/dist/bin/forgebook/workflowActions.d.ts +23 -0
- package/dist/bin/forgebook/workflowActions.js +23 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js +12 -1
- package/dist/src/addressArgs.d.ts +29 -5
- package/dist/src/addressArgs.js +58 -16
- package/dist/src/addressArgsParam.d.ts +54 -0
- package/dist/src/addressArgsParam.js +51 -0
- package/dist/src/addressTexts.d.ts +14 -0
- package/dist/src/addressTexts.js +28 -21
- package/dist/src/agentIndexFile.d.ts +11 -0
- package/dist/src/agentIndexFile.js +11 -0
- package/dist/src/argConditions.d.ts +52 -0
- package/dist/src/argConditions.js +80 -0
- package/dist/src/argControl.d.ts +100 -0
- package/dist/src/argControl.js +0 -0
- package/dist/src/argExpression.d.ts +21 -0
- package/dist/src/argExpression.js +30 -0
- package/dist/src/argTypes.d.ts +40 -51
- package/dist/src/argTypes.js +66 -184
- package/dist/src/argsProps.d.ts +3 -3
- package/dist/src/argsProps.js +11 -5
- package/dist/src/bundlerErrors.d.ts +29 -0
- package/dist/src/bundlerErrors.js +49 -0
- package/dist/src/catalogue.d.ts +31 -0
- package/dist/src/catalogue.js +13 -2
- package/dist/src/catalogueRefs.d.ts +75 -0
- package/dist/src/catalogueRefs.js +122 -0
- package/dist/src/componentDocs.d.ts +71 -0
- package/dist/src/componentDocs.js +15 -2
- package/dist/src/frame/callValues.d.ts +19 -0
- package/dist/src/frame/callValues.js +58 -0
- package/dist/src/frame/canvasScheme.d.ts +33 -0
- package/dist/src/frame/canvasScheme.js +67 -0
- package/dist/src/frame/frame.css +36 -3
- package/dist/src/frame/frameStatus.d.ts +16 -1
- package/dist/src/frame/frameStatus.js +16 -1
- package/dist/src/frame/frameView.js +4 -3
- package/dist/src/frame/mountFrame.d.ts +7 -1
- package/dist/src/frame/mountFrame.js +153 -46
- package/dist/src/frame/panelValues.d.ts +35 -0
- package/dist/src/frame/panelValues.js +127 -0
- package/dist/src/frame/playActions.d.ts +39 -0
- package/dist/src/frame/playActions.js +98 -0
- package/dist/src/frame/playStepper.d.ts +28 -0
- package/dist/src/frame/playStepper.js +38 -0
- package/dist/src/frame/playStory.d.ts +9 -1
- package/dist/src/frame/playStory.js +49 -3
- package/dist/src/frame/renderer.d.ts +34 -1
- package/dist/src/frame/renderer.js +24 -0
- package/dist/src/frame/shellChannel.d.ts +1 -1
- package/dist/src/frame/shellChannel.js +1 -1
- package/dist/src/frame/shellCheck.d.ts +17 -0
- package/dist/src/frame/shellCheck.js +25 -0
- package/dist/src/frame/shellMessageCheck.d.ts +7 -0
- package/dist/src/frame/shellMessageCheck.js +53 -0
- package/dist/src/frame/storyContent.d.ts +50 -0
- package/dist/src/frame/storyContent.js +73 -0
- package/dist/src/frame/storyModule.d.ts +9 -0
- package/dist/src/frame/storyModule.js +20 -2
- package/dist/src/frame/storyRun.d.ts +15 -7
- package/dist/src/frame/storyRun.js +64 -15
- package/dist/src/frame/valueSheets.d.ts +35 -0
- package/dist/src/frame/valueSheets.js +99 -0
- package/dist/src/hotModules.d.ts +20 -0
- package/dist/src/hotModules.js +23 -0
- package/dist/src/jsxCode.d.ts +1 -14
- package/dist/src/jsxCode.js +46 -10
- package/dist/src/liveErrors.d.ts +30 -4
- package/dist/src/liveErrors.js +18 -3
- package/dist/src/messages.d.ts +77 -27
- package/dist/src/messages.js +58 -100
- package/dist/src/namedValues.d.ts +2 -26
- package/dist/src/namedValues.js +0 -47
- package/dist/src/pageConfig.d.ts +2 -0
- package/dist/src/playTrace.d.ts +19 -2
- package/dist/src/playTrace.js +10 -5
- package/dist/src/plugin.d.ts +10 -3
- package/dist/src/previewRelay.js +9 -1
- package/dist/src/printable.d.ts +12 -0
- package/dist/src/printable.js +22 -0
- package/dist/src/propsSignature.d.ts +37 -0
- package/dist/src/propsSignature.js +40 -0
- package/dist/src/search.d.ts +41 -5
- package/dist/src/search.js +93 -23
- package/dist/src/searchMatch.d.ts +4 -1
- package/dist/src/searchMatch.js +26 -5
- package/dist/src/searchTypos.d.ts +88 -0
- package/dist/src/searchTypos.js +178 -0
- package/dist/src/shapeValues.d.ts +86 -0
- package/dist/src/shapeValues.js +295 -0
- package/dist/src/shell/ApiReference.js +6 -3
- package/dist/src/shell/ApiTableBox.d.ts +15 -0
- package/dist/src/shell/ApiTableBox.js +11 -0
- package/dist/src/shell/AppearanceMenu.d.ts +4 -1
- package/dist/src/shell/AppearanceMenu.js +9 -6
- package/dist/src/shell/CodeTab.d.ts +3 -2
- package/dist/src/shell/CodeTab.js +3 -2
- package/dist/src/shell/CodeText.d.ts +1 -1
- package/dist/src/shell/CodeText.js +2 -3
- package/dist/src/shell/CompareGrid.js +1 -1
- package/dist/src/shell/ComponentPage.d.ts +1 -1
- package/dist/src/shell/ComponentPage.js +5 -1
- package/dist/src/shell/CustomControl.d.ts +34 -0
- package/dist/src/shell/CustomControl.js +132 -0
- package/dist/src/shell/DocContainers.js +1 -1
- package/dist/src/shell/DocPage.js +2 -2
- package/dist/src/shell/DroppedArgsList.d.ts +2 -2
- package/dist/src/shell/DroppedArgsList.js +1 -1
- package/dist/src/shell/EmbedPage.js +30 -12
- package/dist/src/shell/Example.d.ts +5 -1
- package/dist/src/shell/Example.js +16 -8
- package/dist/src/shell/FrameView.d.ts +6 -3
- package/dist/src/shell/FrameView.js +2 -2
- package/dist/src/shell/HomePage.d.ts +3 -1
- package/dist/src/shell/HomePage.js +16 -6
- package/dist/src/shell/InfoTip.js +2 -2
- package/dist/src/shell/InteractionsTab.d.ts +11 -4
- package/dist/src/shell/InteractionsTab.js +18 -2
- package/dist/src/shell/LazyPage.js +1 -1
- package/dist/src/shell/PackageHtml.js +3 -1
- package/dist/src/shell/PinnedControl.js +14 -62
- package/dist/src/shell/PinnedControlMenu.d.ts +44 -0
- package/dist/src/shell/PinnedControlMenu.js +72 -0
- package/dist/src/shell/PropFields.d.ts +3 -1
- package/dist/src/shell/PropFields.js +9 -6
- package/dist/src/shell/PropRows.d.ts +23 -2
- package/dist/src/shell/PropRows.js +58 -19
- package/dist/src/shell/PropsTab.d.ts +12 -5
- package/dist/src/shell/PropsTab.js +9 -21
- package/dist/src/shell/RefStoryPage.d.ts +33 -0
- package/dist/src/shell/RefStoryPage.js +123 -0
- package/dist/src/shell/SearchPanel.js +51 -24
- package/dist/src/shell/Shell.d.ts +18 -0
- package/dist/src/shell/Shell.js +137 -22
- package/dist/src/shell/ShortcutHelp.d.ts +22 -0
- package/dist/src/shell/ShortcutHelp.js +66 -0
- package/dist/src/shell/Sidebar.d.ts +17 -4
- package/dist/src/shell/Sidebar.js +92 -41
- package/dist/src/shell/SidebarDocs.js +2 -2
- package/dist/src/shell/SidebarEntries.js +5 -3
- package/dist/src/shell/SidebarHandle.d.ts +3 -5
- package/dist/src/shell/SidebarHandle.js +4 -4
- package/dist/src/shell/SidebarRefs.d.ts +39 -0
- package/dist/src/shell/SidebarRefs.js +99 -0
- package/dist/src/shell/SidebarSearch.js +37 -9
- package/dist/src/shell/SignatureReference.js +3 -1
- package/dist/src/shell/Stage.d.ts +10 -2
- package/dist/src/shell/Stage.js +29 -49
- package/dist/src/shell/StatusBadges.d.ts +54 -0
- package/dist/src/shell/StatusBadges.js +77 -0
- package/dist/src/shell/StoryCodeBlock.d.ts +8 -19
- package/dist/src/shell/StoryCodeBlock.js +7 -6
- package/dist/src/shell/SwitchGallery.d.ts +36 -0
- package/dist/src/shell/SwitchGallery.js +17 -0
- package/dist/src/shell/SwitchGalleryPanel.d.ts +37 -0
- package/dist/src/shell/SwitchGalleryPanel.js +99 -0
- package/dist/src/shell/TagFilter.d.ts +24 -0
- package/dist/src/shell/TagFilter.js +45 -0
- package/dist/src/shell/TagViews.d.ts +39 -0
- package/dist/src/shell/TagViews.js +20 -0
- package/dist/src/shell/Toolbar.d.ts +4 -1
- package/dist/src/shell/Toolbar.js +17 -7
- package/dist/src/shell/ToolbarControl.d.ts +3 -0
- package/dist/src/shell/ToolbarControl.js +23 -6
- package/dist/src/shell/ViewMenuPanel.js +6 -1
- package/dist/src/shell/argChecks.d.ts +22 -0
- package/dist/src/shell/argChecks.js +20 -0
- package/dist/src/shell/asideStory.js +7 -2
- package/dist/src/shell/audienceSections.css +9 -9
- package/dist/src/shell/catalogueContext.d.ts +1 -1
- package/dist/src/shell/catalogueContext.js +6 -1
- package/dist/src/shell/codeSpans.d.ts +27 -0
- package/dist/src/shell/codeSpans.js +76 -0
- package/dist/src/shell/compareVariants.d.ts +4 -2
- package/dist/src/shell/compareVariants.js +16 -8
- package/dist/src/shell/composition.d.ts +23 -0
- package/dist/src/shell/composition.js +26 -0
- package/dist/src/shell/controlCycle.d.ts +1 -1
- package/dist/src/shell/controlCycle.js +3 -2
- package/dist/src/shell/customControls.d.ts +55 -0
- package/dist/src/shell/customControls.js +70 -0
- package/dist/src/shell/docPage.css +22 -22
- package/dist/src/shell/dockTabs.d.ts +19 -3
- package/dist/src/shell/dockTabs.js +28 -20
- package/dist/src/shell/embed.css +7 -7
- package/dist/src/shell/framesOrigin.d.ts +7 -0
- package/dist/src/shell/framesOrigin.js +1 -1
- package/dist/src/shell/galleryPlace.d.ts +20 -0
- package/dist/src/shell/galleryPlace.js +26 -0
- package/dist/src/shell/icons.d.ts +1 -0
- package/dist/src/shell/icons.js +1 -0
- package/dist/src/shell/keyboard.d.ts +14 -12
- package/dist/src/shell/keyboard.js +21 -6
- package/dist/src/shell/laterStrings.d.ts +29 -0
- package/dist/src/shell/laterStrings.js +42 -3
- package/dist/src/shell/mountShell.js +3 -0
- package/dist/src/shell/pageStrings.d.ts +4 -0
- package/dist/src/shell/pageStrings.js +4 -0
- package/dist/src/shell/pageTagView.d.ts +18 -0
- package/dist/src/shell/pageTagView.js +10 -0
- package/dist/src/shell/playMemory.d.ts +14 -0
- package/dist/src/shell/playMemory.js +8 -0
- package/dist/src/shell/propNotes.d.ts +23 -0
- package/dist/src/shell/propNotes.js +37 -0
- package/dist/src/shell/refIndexLoad.d.ts +17 -0
- package/dist/src/shell/refIndexLoad.js +38 -0
- package/dist/src/shell/refParts.d.ts +34 -0
- package/dist/src/shell/refParts.js +9 -0
- package/dist/src/shell/refStory.css +21 -0
- package/dist/src/shell/refStrings.d.ts +13 -0
- package/dist/src/shell/refStrings.js +21 -0
- package/dist/src/shell/search.css +11 -11
- package/dist/src/shell/shell.css +348 -168
- package/dist/src/shell/shellScheme.js +2 -2
- package/dist/src/shell/shortcutHelp.css +64 -0
- package/dist/src/shell/stageArgs.d.ts +53 -0
- package/dist/src/shell/stageArgs.js +64 -0
- package/dist/src/shell/statusBadges.css +51 -0
- package/dist/src/shell/strings.d.ts +7 -16
- package/dist/src/shell/strings.js +12 -17
- package/dist/src/shell/switchGallery.css +104 -0
- package/dist/src/shell/tagFilter.css +46 -0
- package/dist/src/shell/tagView.d.ts +20 -0
- package/dist/src/shell/tagView.js +10 -0
- package/dist/src/shell/useAddressArgs.d.ts +9 -0
- package/dist/src/shell/useAddressArgs.js +56 -11
- package/dist/src/shell/useControlKeys.js +2 -2
- package/dist/src/shell/useEditedProblems.d.ts +6 -0
- package/dist/src/shell/useEditedProblems.js +40 -0
- package/dist/src/shell/useFrameMessages.js +3 -0
- package/dist/src/shell/useListedTree.d.ts +13 -0
- package/dist/src/shell/useListedTree.js +32 -0
- package/dist/src/shell/usePageFrames.js +2 -2
- package/dist/src/shell/usePopover.d.ts +5 -0
- package/dist/src/shell/usePopover.js +7 -1
- package/dist/src/shell/useRefIndex.d.ts +22 -0
- package/dist/src/shell/useRefIndex.js +36 -0
- package/dist/src/shell/useScrollStops.d.ts +20 -0
- package/dist/src/shell/useScrollStops.js +41 -0
- package/dist/src/shell/useShortcutHelp.d.ts +18 -0
- package/dist/src/shell/useShortcutHelp.js +32 -0
- package/dist/src/shell/useSidebarOverlay.d.ts +2 -1
- package/dist/src/shell/useSidebarOverlay.js +12 -4
- package/dist/src/shell/useStoryCode.d.ts +2 -1
- package/dist/src/shell/useStoryCode.js +12 -7
- package/dist/src/shell/useToolbarLayout.d.ts +5 -1
- package/dist/src/shell/useToolbarLayout.js +2 -2
- package/dist/src/shell/useWorstCase.d.ts +8 -2
- package/dist/src/shell/useWorstCase.js +2 -2
- package/dist/src/shell/valueEditors/FileEditor.d.ts +28 -0
- package/dist/src/shell/valueEditors/FileEditor.js +66 -0
- package/dist/src/shell/valueEditors/JsonEditor.d.ts +14 -0
- package/dist/src/shell/valueEditors/JsonEditor.js +53 -0
- package/dist/src/shell/valueEditors/ListEditor.d.ts +24 -0
- package/dist/src/shell/valueEditors/ListEditor.js +82 -0
- package/dist/src/shell/valueEditors/ObjectEditor.d.ts +32 -0
- package/dist/src/shell/valueEditors/ObjectEditor.js +70 -0
- package/dist/src/shell/valueEditors/PropEditor.d.ts +37 -0
- package/dist/src/shell/valueEditors/PropEditor.js +53 -0
- package/dist/src/shell/valueEditors/RecordEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/RecordEditor.js +84 -0
- package/dist/src/shell/valueEditors/SearchSelect.d.ts +42 -0
- package/dist/src/shell/valueEditors/SearchSelect.js +80 -0
- package/dist/src/shell/valueEditors/TokenEditor.d.ts +49 -0
- package/dist/src/shell/valueEditors/TokenEditor.js +74 -0
- package/dist/src/shell/valueEditors/UnionEditor.d.ts +20 -0
- package/dist/src/shell/valueEditors/UnionEditor.js +64 -0
- package/dist/src/shell/valueEditors/ValueField.d.ts +15 -0
- package/dist/src/shell/valueEditors/ValueField.js +147 -0
- package/dist/src/shell/valueEditors/editorStrings.d.ts +56 -0
- package/dist/src/shell/valueEditors/editorStrings.js +66 -0
- package/dist/src/shell/valueEditors/fieldTypes.d.ts +31 -0
- package/dist/src/shell/valueEditors/fieldTypes.js +0 -0
- package/dist/src/shell/valueEditors/valueEditors.css +153 -0
- package/dist/src/shell/worstArgs.d.ts +8 -5
- package/dist/src/shell/worstArgs.js +14 -7
- package/dist/src/shellTheme.d.ts +1 -1
- package/dist/src/shellTheme.js +15 -1
- package/dist/src/shellTheme.types.d.ts +4 -0
- package/dist/src/shellWord.d.ts +12 -0
- package/dist/src/shellWord.js +15 -0
- package/dist/src/sourceFiles.js +2 -1
- package/dist/src/storyArgTypes.d.ts +57 -0
- package/dist/src/storyArgTypes.js +195 -0
- package/dist/src/storyBackground.js +14 -3
- package/dist/src/storyCheck.d.ts +85 -3
- package/dist/src/storyCheck.js +23 -1
- package/dist/src/storyCodeText.d.ts +46 -0
- package/dist/src/storyCodeText.js +27 -0
- package/dist/src/storyControls.d.ts +100 -0
- package/dist/src/storyControls.js +100 -0
- package/dist/src/storyStatuses.d.ts +55 -0
- package/dist/src/storyStatuses.js +104 -0
- package/dist/src/storyTagNames.d.ts +25 -0
- package/dist/src/storyTagNames.js +25 -0
- package/dist/src/storyTags.d.ts +29 -0
- package/dist/src/storyTags.js +85 -0
- package/dist/src/storyTree.d.ts +13 -0
- package/dist/src/storyTree.js +24 -4
- package/dist/src/storybookArgs.d.ts +24 -0
- package/dist/src/storybookArgs.js +185 -0
- package/dist/src/switches.d.ts +66 -3
- package/dist/src/switches.js +42 -1
- package/dist/src/valueSchema.d.ts +28 -0
- package/dist/src/valueSchema.js +196 -0
- package/dist/src/valueShape.d.ts +94 -0
- package/dist/src/valueShape.js +25 -0
- package/dist/src/viewState.d.ts +8 -3
- package/dist/src/viewState.js +27 -10
- package/dist/src/vite/adapter.d.ts +40 -2
- package/dist/src/vite/adapter.js +1 -0
- package/dist/src/vite/agent.types.d.ts +347 -7
- package/dist/src/vite/agentApi.d.ts +23 -0
- package/dist/src/vite/agentApi.js +90 -17
- package/dist/src/vite/agentIndex.d.ts +0 -2
- package/dist/src/vite/agentIndex.js +5 -6
- package/dist/src/vite/agentRoutes.d.ts +20 -1
- package/dist/src/vite/agentRoutes.js +106 -65
- package/dist/src/vite/agentStatuses.d.ts +42 -0
- package/dist/src/vite/agentStatuses.js +67 -0
- package/dist/src/vite/agentStoryCode.d.ts +48 -0
- package/dist/src/vite/agentStoryCode.js +38 -0
- package/dist/src/vite/agentVisibility.d.ts +47 -0
- package/dist/src/vite/agentVisibility.js +174 -0
- package/dist/src/vite/appAudit.d.ts +134 -0
- package/dist/src/vite/appAudit.js +333 -0
- package/dist/src/vite/appBuildOption.d.ts +53 -0
- package/dist/src/vite/appBuildOption.js +55 -0
- package/dist/src/vite/appTokenFiles.d.ts +92 -0
- package/dist/src/vite/appTokenFiles.js +433 -0
- package/dist/src/vite/appTokens.d.ts +23 -0
- package/dist/src/vite/appTokens.js +275 -0
- package/dist/src/vite/builtTexts.d.ts +10 -0
- package/dist/src/vite/builtTexts.js +59 -22
- package/dist/src/vite/catalogueConfig.d.ts +3 -1
- package/dist/src/vite/catalogueConfig.js +15 -3
- package/dist/src/vite/changeCoverage.d.ts +74 -0
- package/dist/src/vite/changeCoverage.js +120 -0
- package/dist/src/vite/changedRoute.d.ts +30 -0
- package/dist/src/vite/changedRoute.js +197 -0
- package/dist/src/vite/checkCode.d.ts +105 -3
- package/dist/src/vite/checkCode.js +323 -36
- package/dist/src/vite/checkoutWatch.d.ts +97 -0
- package/dist/src/vite/checkoutWatch.js +287 -0
- package/dist/src/vite/closeWatch.d.ts +8 -0
- package/dist/src/vite/closeWatch.js +1 -1
- package/dist/src/vite/componentCache.d.ts +8 -0
- package/dist/src/vite/componentCache.js +66 -0
- package/dist/src/vite/componentGraph.d.ts +71 -0
- package/dist/src/vite/componentGraph.js +133 -0
- package/dist/src/vite/componentRules.d.ts +33 -0
- package/dist/src/vite/componentRules.js +105 -0
- package/dist/src/vite/componentScan.d.ts +69 -0
- package/dist/src/vite/componentScan.js +418 -0
- package/dist/src/vite/compositionCheck.d.ts +15 -0
- package/dist/src/vite/compositionCheck.js +243 -0
- package/dist/src/vite/config.d.ts +32 -1
- package/dist/src/vite/configFile.d.ts +14 -2
- package/dist/src/vite/configFile.js +124 -40
- package/dist/src/vite/configKeys.d.ts +15 -0
- package/dist/src/vite/configKeys.js +171 -0
- package/dist/src/vite/configLoadError.d.ts +23 -0
- package/dist/src/vite/configLoadError.js +71 -0
- package/dist/src/vite/cssDeclarations.d.ts +71 -0
- package/dist/src/vite/cssDeclarations.js +290 -0
- package/dist/src/vite/cssImports.d.ts +14 -0
- package/dist/src/vite/cssImports.js +48 -0
- package/dist/src/vite/cssReferences.d.ts +54 -0
- package/dist/src/vite/cssReferences.js +157 -0
- package/dist/src/vite/cssTokenValues.d.ts +50 -0
- package/dist/src/vite/cssTokenValues.js +233 -0
- package/dist/src/vite/designTokens.d.ts +24 -0
- package/dist/src/vite/designTokens.js +5 -1
- package/dist/src/vite/docsExtractor.d.ts +9 -3
- package/dist/src/vite/docsExtractor.js +11 -3
- package/dist/src/vite/docsProgram.d.ts +17 -4
- package/dist/src/vite/docsProgram.js +52 -11
- package/dist/src/vite/docsWorker.js +7 -2
- package/dist/src/vite/emptyStoryGlobs.d.ts +41 -0
- package/dist/src/vite/emptyStoryGlobs.js +52 -0
- package/dist/src/vite/fileImports.d.ts +17 -0
- package/dist/src/vite/fileImports.js +57 -0
- package/dist/src/vite/findComponent.d.ts +10 -2
- package/dist/src/vite/findComponent.js +27 -22
- package/dist/src/vite/findRoute.js +3 -2
- package/dist/src/vite/forcedStates.d.ts +9 -2
- package/dist/src/vite/forcedStates.js +12 -3
- package/dist/src/vite/forgebookPlugin.d.ts +2 -0
- package/dist/src/vite/forgebookPlugin.js +52 -72
- package/dist/src/vite/frameErrors.d.ts +19 -0
- package/dist/src/vite/frameErrors.js +70 -0
- package/dist/src/vite/framesServer.d.ts +12 -0
- package/dist/src/vite/framesServer.js +21 -4
- package/dist/src/vite/functionComponentDocs.js +81 -12
- package/dist/src/vite/generatedModules.js +4 -2
- package/dist/src/vite/gitChange.d.ts +38 -5
- package/dist/src/vite/gitChange.js +71 -11
- package/dist/src/vite/hiddenStoryFiles.d.ts +23 -0
- package/dist/src/vite/hiddenStoryFiles.js +107 -0
- package/dist/src/vite/hotSnippets.d.ts +38 -14
- package/dist/src/vite/hotSnippets.js +137 -39
- package/dist/src/vite/importedNames.d.ts +37 -0
- package/dist/src/vite/importedNames.js +138 -0
- package/dist/src/vite/indexFields.d.ts +6 -0
- package/dist/src/vite/indexFields.js +21 -0
- package/dist/src/vite/indexStoryFile.d.ts +8 -1
- package/dist/src/vite/indexStoryFile.js +22 -157
- package/dist/src/vite/jsxCallSites.d.ts +33 -0
- package/dist/src/vite/jsxCallSites.js +200 -0
- package/dist/src/vite/jsxInScripts.d.ts +67 -0
- package/dist/src/vite/jsxInScripts.js +138 -0
- package/dist/src/vite/jsxTree.d.ts +20 -0
- package/dist/src/vite/jsxTree.js +163 -0
- package/dist/src/vite/lineAndColumn.d.ts +13 -0
- package/dist/src/vite/lineAndColumn.js +18 -0
- package/dist/src/vite/lookAlikes.d.ts +65 -0
- package/dist/src/vite/lookAlikes.js +228 -0
- package/dist/src/vite/nearestToken.d.ts +17 -0
- package/dist/src/vite/nearestToken.js +9 -2
- package/dist/src/vite/packageEntries.d.ts +42 -0
- package/dist/src/vite/packageEntries.js +127 -0
- package/dist/src/vite/pages.d.ts +9 -1
- package/dist/src/vite/pages.js +108 -4
- package/dist/src/vite/pluginConfig.js +4 -0
- package/dist/src/vite/pluginIds.d.ts +2 -0
- package/dist/src/vite/pluginIds.js +5 -1
- package/dist/src/vite/pluginModules.d.ts +81 -11
- package/dist/src/vite/pluginModules.js +109 -21
- package/dist/src/vite/prebundled.d.ts +57 -15
- package/dist/src/vite/prebundled.js +80 -0
- package/dist/src/vite/previewTags.d.ts +25 -0
- package/dist/src/vite/previewTags.js +56 -0
- package/dist/src/vite/projectFiles.d.ts +54 -0
- package/dist/src/vite/projectFiles.js +116 -0
- package/dist/src/vite/projectPostcss.d.ts +70 -0
- package/dist/src/vite/projectPostcss.js +250 -0
- package/dist/src/vite/propDocs.d.ts +12 -0
- package/dist/src/vite/propDocs.js +130 -58
- package/dist/src/vite/propKind.d.ts +40 -0
- package/dist/src/vite/propKind.js +71 -0
- package/dist/src/vite/propTypeNotes.d.ts +22 -0
- package/dist/src/vite/propTypeNotes.js +51 -0
- package/dist/src/vite/publishedExports.d.ts +27 -0
- package/dist/src/vite/publishedExports.js +298 -0
- package/dist/src/vite/realFolder.d.ts +6 -0
- package/dist/src/vite/realFolder.js +25 -0
- package/dist/src/vite/refsConfig.d.ts +39 -0
- package/dist/src/vite/refsConfig.js +54 -0
- package/dist/src/vite/reuseCheck.d.ts +45 -0
- package/dist/src/vite/reuseCheck.js +260 -0
- package/dist/src/vite/runningVersions.d.ts +33 -0
- package/dist/src/vite/runningVersions.js +25 -0
- package/dist/src/vite/scriptProblems.d.ts +60 -0
- package/dist/src/vite/scriptProblems.js +155 -0
- package/dist/src/vite/searchModule.js +3 -2
- package/dist/src/vite/searchRoute.js +4 -2
- package/dist/src/vite/shapeDocs.d.ts +36 -0
- package/dist/src/vite/shapeDocs.js +177 -0
- package/dist/src/vite/singleFileComponent.d.ts +17 -0
- package/dist/src/vite/singleFileComponent.js +83 -0
- package/dist/src/vite/sourceText.d.ts +34 -0
- package/dist/src/vite/sourceText.js +72 -0
- package/dist/src/vite/sourceTokens.d.ts +7 -0
- package/dist/src/vite/sourceTokens.js +7 -2
- package/dist/src/vite/stackLines.d.ts +49 -0
- package/dist/src/vite/stackLines.js +96 -0
- package/dist/src/vite/storyCode.d.ts +22 -7
- package/dist/src/vite/storyCode.js +263 -37
- package/dist/src/vite/storyCoverage.d.ts +48 -0
- package/dist/src/vite/storyCoverage.js +179 -0
- package/dist/src/vite/storyFilesModule.d.ts +48 -3
- package/dist/src/vite/storyFilesModule.js +105 -15
- package/dist/src/vite/storyPatterns.d.ts +31 -0
- package/dist/src/vite/storyPatterns.js +140 -5
- package/dist/src/vite/storyReach.d.ts +10 -2
- package/dist/src/vite/storyReach.js +15 -11
- package/dist/src/vite/storyTopLevel.d.ts +51 -0
- package/dist/src/vite/storyTopLevel.js +146 -0
- package/dist/src/vite/storylessRoutes.d.ts +4 -3
- package/dist/src/vite/storylessRoutes.js +210 -19
- package/dist/src/vite/switchValuesCheck.d.ts +19 -0
- package/dist/src/vite/switchValuesCheck.js +164 -0
- package/dist/src/vite/switchesDocument.d.ts +15 -0
- package/dist/src/vite/switchesDocument.js +47 -0
- package/dist/src/vite/tailwindConfigTokens.d.ts +41 -0
- package/dist/src/vite/tailwindConfigTokens.js +306 -0
- package/dist/src/vite/textImports.d.ts +15 -0
- package/dist/src/vite/textImports.js +58 -0
- package/dist/src/vite/textModules.d.ts +6 -5
- package/dist/src/vite/textModules.js +13 -8
- package/dist/src/vite/tokenAnswers.d.ts +6 -2
- package/dist/src/vite/tokenAnswers.js +11 -7
- package/dist/src/vite/typeParameters.d.ts +83 -0
- package/dist/src/vite/typeParameters.js +270 -0
- package/dist/src/vite/unionProps.d.ts +37 -0
- package/dist/src/vite/unionProps.js +121 -0
- package/dist/src/vite/unresolvedTokens.d.ts +20 -0
- package/dist/src/vite/unresolvedTokens.js +193 -0
- package/dist/src/vite/usageGraph.js +10 -52
- package/dist/src/vite/usageGuidance.d.ts +9 -2
- package/dist/src/vite/usageGuidance.js +36 -8
- package/dist/src/vite/usageImports.d.ts +35 -0
- package/dist/src/vite/usageImports.js +280 -0
- package/dist/src/vite/visibilityRoute.d.ts +16 -0
- package/dist/src/vite/visibilityRoute.js +320 -0
- package/dist/src/worstCase.d.ts +2 -0
- package/dist/src/worstCase.js +2 -0
- package/package.json +28 -8
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What `forgebook init --draw` runs: draws a story of the project in a real browser, trying components until one draws, and
|
|
3
|
+
* says why each that did not.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Each step is the project's own installed `forgebook`, as a person or an agent would run it, in a process of its own: the
|
|
7
|
+
* command that started this one may be another copy (`npx`), and a catalogue's configuration imports the project's.
|
|
8
|
+
* Stories the project has come first. A file this run wrote stays only if its story drew; the others are removed, so a
|
|
9
|
+
* failed run leaves nothing behind. Starting a catalogue runs the project's code (its `vite.config`, its components), which
|
|
10
|
+
* is why this is asked for by name and `forgebook init` alone never does it. When several components fail alike the
|
|
11
|
+
* reason is not the component, so the run stops early and says so.
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
import { spawn } from "node:child_process";
|
|
16
|
+
import { existsSync, readFileSync, realpathSync, rmSync } from "node:fs";
|
|
17
|
+
import { basename, dirname, join } from "node:path";
|
|
18
|
+
import { isStoryCheckReport, isStoryShotReport } from "../../../src/storyCheck.js";
|
|
19
|
+
import { isStoriesDocument } from "../../../src/vite/agentApi.js";
|
|
20
|
+
import { drawCandidates } from "./drawCandidates.js";
|
|
21
|
+
import { BLANK, diagnosed } from "./drawDiagnosis.js";
|
|
22
|
+
import { isUniformPicture } from "./uniformPicture.js";
|
|
23
|
+
/** How long one step may run, in ms: a first start pre-bundles a whole app's dependencies. */
|
|
24
|
+
const STEP_MS = 240_000;
|
|
25
|
+
/** How long a command's streams may stay open after it ended, in ms. */
|
|
26
|
+
const STREAMS_MS = 2000;
|
|
27
|
+
/** How long the whole run may take, in ms: an unattended command must end. */
|
|
28
|
+
const RUN_MS = 600_000;
|
|
29
|
+
/** How many components may fail alike before the reason is taken not to be theirs. */
|
|
30
|
+
const SAME_FAILURES = 3;
|
|
31
|
+
/**
|
|
32
|
+
* The file of the `forgebook` command a project installed; none when it has not.
|
|
33
|
+
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* Run by Node and not through the package manager, which reads some of the arguments as its own: Yarn 1 takes `--json`.
|
|
36
|
+
*
|
|
37
|
+
* @param dir - the project's folder.
|
|
38
|
+
*/
|
|
39
|
+
export const installedForgebook = (dir) => {
|
|
40
|
+
const folder = join(dir, "node_modules", "forgebook");
|
|
41
|
+
if (existsSync(join(folder, "package.json"))) {
|
|
42
|
+
const real = realpathSync(folder);
|
|
43
|
+
const parsed = JSON.parse(readFileSync(join(real, "package.json"), "utf8"));
|
|
44
|
+
const bin = typeof parsed === "object" && parsed !== null && "bin" in parsed ? parsed.bin : undefined;
|
|
45
|
+
const file = typeof bin === "object" && bin !== null && "forgebook" in bin ? bin.forgebook : undefined;
|
|
46
|
+
return typeof file === "string" ? join(real, file) : undefined;
|
|
47
|
+
}
|
|
48
|
+
const parent = dirname(dir);
|
|
49
|
+
return parent === dir ? undefined : installedForgebook(parent);
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Runs the project's own `forgebook`.
|
|
53
|
+
*
|
|
54
|
+
* @param dir - the project's folder.
|
|
55
|
+
* @param env - the environment.
|
|
56
|
+
*/
|
|
57
|
+
export const projectForgebook = (dir, env) => (args) => new Promise((resolve) => {
|
|
58
|
+
const file = installedForgebook(dir);
|
|
59
|
+
if (file === undefined) {
|
|
60
|
+
resolve({ stdout: "", stderr: "forgebook is not installed in this project", isOk: false });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// ended by the command's own exit: a plugin of the app's may leave a watcher behind that holds these streams open
|
|
64
|
+
const child = spawn(process.execPath, [file, ...args], {
|
|
65
|
+
cwd: dir,
|
|
66
|
+
env: { ...env, NO_COLOR: "1" },
|
|
67
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
68
|
+
});
|
|
69
|
+
const out = [];
|
|
70
|
+
const err = [];
|
|
71
|
+
child.stdout.setEncoding("utf8").on("data", (chunk) => out.push(chunk));
|
|
72
|
+
child.stderr.setEncoding("utf8").on("data", (chunk) => err.push(chunk));
|
|
73
|
+
const timer = setTimeout(() => {
|
|
74
|
+
err.push(`\nThe command took over ${STEP_MS / 1000} s, and was stopped: timed out`);
|
|
75
|
+
child.kill("SIGKILL");
|
|
76
|
+
}, STEP_MS);
|
|
77
|
+
let isFinished = false;
|
|
78
|
+
const finish = (isOk) => {
|
|
79
|
+
if (isFinished)
|
|
80
|
+
return;
|
|
81
|
+
isFinished = true;
|
|
82
|
+
clearTimeout(timer);
|
|
83
|
+
resolve({ stdout: out.join(""), stderr: err.join(""), isOk });
|
|
84
|
+
child.stdout.destroy();
|
|
85
|
+
child.stderr.destroy();
|
|
86
|
+
};
|
|
87
|
+
child.once("error", (error) => {
|
|
88
|
+
err.push(error.message);
|
|
89
|
+
finish(false);
|
|
90
|
+
});
|
|
91
|
+
let exitCode = null;
|
|
92
|
+
child.once("close", (code) => finish(code === 0));
|
|
93
|
+
child.once("exit", (code) => {
|
|
94
|
+
exitCode = code;
|
|
95
|
+
// what it wrote just before it ended is still on its way, until "close"; a watcher a plugin left behind holds its
|
|
96
|
+
// streams open, and "close" then never comes
|
|
97
|
+
setTimeout(() => finish(exitCode === 0), STREAMS_MS);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
/** A framework's generated folder, which its `tsconfig.json` extends, and the command in its package that writes it. */
|
|
101
|
+
const GENERATED_FOLDERS = {
|
|
102
|
+
sveltekit: { folder: ".svelte-kit", bin: "svelte-kit", args: ["sync"] },
|
|
103
|
+
nuxt: { folder: ".nuxt", bin: "nuxt", args: ["prepare"] }
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Writes a framework's generated folder when it is missing: its `prepare` script does on an install, and every module fails
|
|
107
|
+
* to compile without it after one that ran no scripts. A failure is left for the stories to say.
|
|
108
|
+
*
|
|
109
|
+
* @param dir - the project's folder.
|
|
110
|
+
* @param framework - the adapter's name.
|
|
111
|
+
* @param env - the environment.
|
|
112
|
+
*/
|
|
113
|
+
export const prepareGenerated = async (dir, framework, env) => {
|
|
114
|
+
const generated = GENERATED_FOLDERS[framework];
|
|
115
|
+
if (generated === undefined || existsSync(join(dir, generated.folder)))
|
|
116
|
+
return;
|
|
117
|
+
const bin = join(dir, "node_modules", ".bin", generated.bin);
|
|
118
|
+
if (!existsSync(bin))
|
|
119
|
+
return;
|
|
120
|
+
await new Promise((resolve) => {
|
|
121
|
+
const child = spawn(bin, [...generated.args], {
|
|
122
|
+
cwd: dir,
|
|
123
|
+
env: { ...env },
|
|
124
|
+
stdio: "ignore",
|
|
125
|
+
shell: process.platform === "win32"
|
|
126
|
+
});
|
|
127
|
+
const timer = setTimeout(() => child.kill("SIGKILL"), STEP_MS);
|
|
128
|
+
const finish = () => {
|
|
129
|
+
clearTimeout(timer);
|
|
130
|
+
resolve();
|
|
131
|
+
};
|
|
132
|
+
child.once("error", finish);
|
|
133
|
+
child.once("exit", finish);
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
/** A document a step printed; none when it printed something else. */
|
|
137
|
+
const parsedDocument = (text) => {
|
|
138
|
+
try {
|
|
139
|
+
return JSON.parse(text);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
/** Why one story's result does not count as drawn; none when it does. */
|
|
146
|
+
export const resultProblem = (result) => {
|
|
147
|
+
// a request that failed (a font, a picture, an API) says nothing of whether the story drew
|
|
148
|
+
const stopping = result.problems.filter(({ kind, message }) => kind === "frame" || (kind === "error" && !/^Failed to load resource/.test(message)));
|
|
149
|
+
if (stopping.length > 0)
|
|
150
|
+
return diagnosed(stopping.map(({ message }) => message).join("\n"));
|
|
151
|
+
if (result.notVerified !== undefined)
|
|
152
|
+
return diagnosed(result.notVerified);
|
|
153
|
+
return result.isBlank === true ? BLANK : undefined;
|
|
154
|
+
};
|
|
155
|
+
/** What a step said of its failure. */
|
|
156
|
+
const stepFailure = ({ stdout, stderr }) => diagnosed(stderr.trim() || stdout);
|
|
157
|
+
/** The lines of a server's log that name an error, without their stacks. */
|
|
158
|
+
const SERVER_ERROR = /^.*\b(?:Internal server error|Pre-transform error|Error):\s.*$/m;
|
|
159
|
+
/** A diagnosis with what the server said when the page's words name nothing. */
|
|
160
|
+
const diagnosedWithServer = (problem, serverSaid) => {
|
|
161
|
+
const line = serverSaid.match(SERVER_ERROR)?.[0];
|
|
162
|
+
return line === undefined ? problem : diagnosed(line);
|
|
163
|
+
};
|
|
164
|
+
/** Checks one story in the default view: why it did not draw, or none. */
|
|
165
|
+
const checkStory = async ({ run }, id) => {
|
|
166
|
+
const output = await run(["check", id, "--json"]);
|
|
167
|
+
const report = parsedDocument(output.stdout);
|
|
168
|
+
if (!isStoryCheckReport(report))
|
|
169
|
+
return stepFailure(output);
|
|
170
|
+
const [result] = report.results;
|
|
171
|
+
if (result === undefined)
|
|
172
|
+
return diagnosed(`No result for ${id}`);
|
|
173
|
+
const problem = resultProblem(result);
|
|
174
|
+
// a module the server could not compile says only "500" in the page; the server said why, on its own stream
|
|
175
|
+
return problem?.kind === "unknown" ? diagnosedWithServer(problem, output.stderr) : problem;
|
|
176
|
+
};
|
|
177
|
+
/** The picture of a story that drew: its file, or none when it cannot be taken, which does not undo the drawing. */
|
|
178
|
+
const pictureOf = async ({ run }, id) => {
|
|
179
|
+
const report = parsedDocument((await run(["shot", id, "--json"])).stdout);
|
|
180
|
+
return isStoryShotReport(report) ? report.shots[0]?.file : undefined;
|
|
181
|
+
};
|
|
182
|
+
/** The catalogue's stories, or why they cannot be listed. */
|
|
183
|
+
const listedStories = async ({ run }) => {
|
|
184
|
+
const output = await run(["stories", "--json"]);
|
|
185
|
+
const document = parsedDocument(output.stdout);
|
|
186
|
+
return isStoriesDocument(document) ? document : stepFailure(output);
|
|
187
|
+
};
|
|
188
|
+
/** The first story of the component a story file holds. */
|
|
189
|
+
const firstStoryOf = (components, file) => components.find((component) => component.files.some((each) => each.endsWith(file)))?.stories[0]?.id;
|
|
190
|
+
/** What is a component's own however many have it: another may well draw. */
|
|
191
|
+
const OF_THE_COMPONENT = ["no-component", "blank", "needs-props"];
|
|
192
|
+
/** Whether the last failures are all alike: the same kind and the same words. */
|
|
193
|
+
const isSameFailure = (attempts) => {
|
|
194
|
+
const last = attempts.slice(-SAME_FAILURES);
|
|
195
|
+
const [first] = last;
|
|
196
|
+
return (last.length === SAME_FAILURES &&
|
|
197
|
+
first !== undefined &&
|
|
198
|
+
!OF_THE_COMPONENT.includes(first.diagnosis.kind) &&
|
|
199
|
+
last.every(({ diagnosis }) => diagnosis.kind === first.diagnosis.kind && diagnosis.message === first.diagnosis.message));
|
|
200
|
+
};
|
|
201
|
+
/** What a story that passed its checks came to: a run that drew, or a picture of nothing. */
|
|
202
|
+
const drawnOrBlank = async (context, story, storyFile, isWritten, { attempts }) => {
|
|
203
|
+
const picture = await pictureOf(context, story);
|
|
204
|
+
if (picture !== undefined && existsSync(picture) && isUniformPicture(readFileSync(picture))) {
|
|
205
|
+
rmSync(picture, { force: true });
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
return { status: "drawn", story, storyFile, isWritten, picture, attempts, stoppedBecause: undefined };
|
|
209
|
+
};
|
|
210
|
+
/** A run that drew nothing. */
|
|
211
|
+
const notDrawn = (attempts, stoppedBecause) => ({
|
|
212
|
+
status: "failed",
|
|
213
|
+
story: undefined,
|
|
214
|
+
storyFile: undefined,
|
|
215
|
+
isWritten: false,
|
|
216
|
+
picture: undefined,
|
|
217
|
+
attempts,
|
|
218
|
+
stoppedBecause
|
|
219
|
+
});
|
|
220
|
+
/** A run that has no browser to draw in: nothing can pass until there is one. */
|
|
221
|
+
const noBrowser = (attempts) => notDrawn(attempts, "No browser to draw in: nothing can pass until it is installed");
|
|
222
|
+
/** Tries the stories the project has already: one that draws ends the run. */
|
|
223
|
+
const tryExisting = async (context, progress, components) => {
|
|
224
|
+
for (const component of components.slice(0, SAME_FAILURES)) {
|
|
225
|
+
const story = component.stories[0];
|
|
226
|
+
if (story === undefined)
|
|
227
|
+
continue;
|
|
228
|
+
const problem = await checkStory(context, story.id);
|
|
229
|
+
const result = problem === undefined ? await drawnOrBlank(context, story.id, story.file, false, progress) : undefined;
|
|
230
|
+
if (result !== undefined)
|
|
231
|
+
return result;
|
|
232
|
+
progress.attempts.push({ file: story.file, diagnosis: problem ?? BLANK });
|
|
233
|
+
}
|
|
234
|
+
return undefined;
|
|
235
|
+
};
|
|
236
|
+
/** The component to choose in a file of several: its name's, or the first. */
|
|
237
|
+
export const chosenExport = (file, names) => {
|
|
238
|
+
const base = basename(file)
|
|
239
|
+
.replace(/\.[^.]+$/, "")
|
|
240
|
+
.replace(/[^a-z0-9]/gi, "")
|
|
241
|
+
.toLowerCase();
|
|
242
|
+
return names.find((name) => name.toLowerCase() === base) ?? names[0];
|
|
243
|
+
};
|
|
244
|
+
/** Writes a component's first stories, choosing one when the file exports several. */
|
|
245
|
+
const writeStories = async ({ run }, file) => {
|
|
246
|
+
const written = await run(["new", file, "--json"]);
|
|
247
|
+
const several = written.stderr.match(/exports several components \(([^)]*)\)/)?.[1];
|
|
248
|
+
if (several === undefined)
|
|
249
|
+
return written;
|
|
250
|
+
const chosen = chosenExport(file, several.split(", "));
|
|
251
|
+
return chosen === undefined ? written : run(["new", file, "--export", chosen, "--json"]);
|
|
252
|
+
};
|
|
253
|
+
/** Draws the first story of a file just written: its id, and why it did not draw. */
|
|
254
|
+
const drawWritten = async (context, storyFile) => {
|
|
255
|
+
const listed = await listedStories(context);
|
|
256
|
+
if ("kind" in listed)
|
|
257
|
+
return { problem: listed };
|
|
258
|
+
const story = firstStoryOf(listed.components, storyFile);
|
|
259
|
+
if (story === undefined)
|
|
260
|
+
return { problem: diagnosed(`The file ${storyFile} gave no story`) };
|
|
261
|
+
return { story, problem: await checkStory(context, story) };
|
|
262
|
+
};
|
|
263
|
+
/** Writes one component's first stories and draws the first: its file written, or why it did not draw. */
|
|
264
|
+
const tryComponent = async (context, file, progress) => {
|
|
265
|
+
const written = await writeStories(context, file);
|
|
266
|
+
const document = parsedDocument(written.stdout);
|
|
267
|
+
const storyFile = typeof document === "object" &&
|
|
268
|
+
document !== null &&
|
|
269
|
+
"file" in document &&
|
|
270
|
+
typeof document.file === "string"
|
|
271
|
+
? document.file
|
|
272
|
+
: undefined;
|
|
273
|
+
if (storyFile === undefined) {
|
|
274
|
+
progress.attempts.push({ file, diagnosis: stepFailure(written) });
|
|
275
|
+
return undefined;
|
|
276
|
+
}
|
|
277
|
+
const { story, problem } = await drawWritten(context, storyFile);
|
|
278
|
+
const result = problem === undefined && story !== undefined
|
|
279
|
+
? await drawnOrBlank(context, story, storyFile, true, progress)
|
|
280
|
+
: undefined;
|
|
281
|
+
if (result !== undefined)
|
|
282
|
+
return result;
|
|
283
|
+
rmSync(join(context.dir, storyFile), { force: true });
|
|
284
|
+
progress.attempts.push({ file, diagnosis: problem ?? BLANK });
|
|
285
|
+
return undefined;
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* Tries again the components that wanted a provider, with the app's own in the preview; the preview goes back as it was when
|
|
289
|
+
* none draws.
|
|
290
|
+
*/
|
|
291
|
+
const drawnWithProviders = async (context, progress) => {
|
|
292
|
+
const wanting = progress.attempts
|
|
293
|
+
.filter(({ diagnosis }) => diagnosis.kind === "provider")
|
|
294
|
+
.slice(0, SAME_FAILURES);
|
|
295
|
+
if (wanting.length === 0)
|
|
296
|
+
return undefined;
|
|
297
|
+
const lifted = context.liftProviders?.();
|
|
298
|
+
if (lifted === undefined)
|
|
299
|
+
return undefined;
|
|
300
|
+
for (const { file } of wanting) {
|
|
301
|
+
const tried = { attempts: progress.attempts };
|
|
302
|
+
const result = await tryComponent(context, file, tried);
|
|
303
|
+
if (result !== undefined)
|
|
304
|
+
return { ...result, liftedProviders: lifted.names };
|
|
305
|
+
}
|
|
306
|
+
lifted.undo();
|
|
307
|
+
return undefined;
|
|
308
|
+
};
|
|
309
|
+
/** A run that should stop after its last failure; none when another component is worth a try. */
|
|
310
|
+
const stoppedShort = (attempts) => {
|
|
311
|
+
const latest = attempts.at(-1)?.diagnosis;
|
|
312
|
+
if (latest?.kind === "browser")
|
|
313
|
+
return noBrowser(attempts);
|
|
314
|
+
return isSameFailure(attempts)
|
|
315
|
+
? notDrawn(attempts, `${SAME_FAILURES} components failed alike, so the reason is not theirs: ${latest?.nextStep ?? ""}`)
|
|
316
|
+
: undefined;
|
|
317
|
+
};
|
|
318
|
+
/** Tries the components in turn: the first that draws, or what came of them. */
|
|
319
|
+
const tryCandidates = async (context, candidates, progress) => {
|
|
320
|
+
const startedAt = Date.now();
|
|
321
|
+
for (const file of candidates) {
|
|
322
|
+
if (Date.now() - startedAt > RUN_MS)
|
|
323
|
+
return notDrawn(progress.attempts, `Stopped after ${RUN_MS / 60_000} minutes: each try takes long`);
|
|
324
|
+
const result = await tryComponent(context, file, progress);
|
|
325
|
+
if (result !== undefined)
|
|
326
|
+
return result;
|
|
327
|
+
const stopped = stoppedShort(progress.attempts);
|
|
328
|
+
if (stopped !== undefined)
|
|
329
|
+
return (await drawnWithProviders(context, progress)) ?? stopped;
|
|
330
|
+
}
|
|
331
|
+
return (await drawnWithProviders(context, progress)) ?? notDrawn(progress.attempts, undefined);
|
|
332
|
+
};
|
|
333
|
+
/**
|
|
334
|
+
* Draws a story of the project.
|
|
335
|
+
*
|
|
336
|
+
* @param context - where the steps run.
|
|
337
|
+
*/
|
|
338
|
+
export const runDraw = async (context) => {
|
|
339
|
+
const progress = { attempts: [] };
|
|
340
|
+
await context.prepare?.();
|
|
341
|
+
const hasStories = await listedStories(context);
|
|
342
|
+
if (!("kind" in hasStories)) {
|
|
343
|
+
const fromProject = await tryExisting(context, progress, hasStories.components);
|
|
344
|
+
if (fromProject !== undefined)
|
|
345
|
+
return fromProject;
|
|
346
|
+
if (progress.attempts.at(-1)?.diagnosis.kind === "browser")
|
|
347
|
+
return noBrowser(progress.attempts);
|
|
348
|
+
}
|
|
349
|
+
const candidates = drawCandidates(context.dir, context.framework, context.folders);
|
|
350
|
+
if (candidates.length === 0 && progress.attempts.length === 0)
|
|
351
|
+
return notDrawn([], "No component file was found: write a story by hand, or run forgebook new <component file>");
|
|
352
|
+
return tryCandidates(context, candidates, progress);
|
|
353
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ScriptIo } from "@ensiria/cli-kit/io.types";
|
|
2
|
+
import type { InitInstall, PackageManagerName } from "../newProject/newProject.types.ts";
|
|
3
|
+
import { type AgentFiles } from "./agentFiles.ts";
|
|
4
|
+
import { type DrawResult } from "./drawRun.ts";
|
|
5
|
+
/** What came of installing the browser. */
|
|
6
|
+
export type BrowserStep = {
|
|
7
|
+
/** Whether it ran. */
|
|
8
|
+
readonly status: "ran" | "failed";
|
|
9
|
+
/** Why it failed. */
|
|
10
|
+
readonly error: string | undefined;
|
|
11
|
+
};
|
|
12
|
+
/** What the steps were given. */
|
|
13
|
+
export type AgentStepsRequest = {
|
|
14
|
+
/** The project's folder. */
|
|
15
|
+
readonly projectDir: string;
|
|
16
|
+
/** The adapter's name. */
|
|
17
|
+
readonly framework: string;
|
|
18
|
+
/** The package manager. */
|
|
19
|
+
readonly manager: PackageManagerName;
|
|
20
|
+
/** How the install went. */
|
|
21
|
+
readonly install: InitInstall;
|
|
22
|
+
/** `--agents`. */
|
|
23
|
+
readonly isForAgents: boolean;
|
|
24
|
+
/** `--hooks`. */
|
|
25
|
+
readonly hooks: readonly string[] | undefined;
|
|
26
|
+
/** `--browser`. */
|
|
27
|
+
readonly shouldInstallBrowser: boolean;
|
|
28
|
+
/** `--draw`. */
|
|
29
|
+
readonly shouldDraw: boolean;
|
|
30
|
+
/** The story patterns written, so only a component whose stories the catalogue lists is tried; none for a catalogue kept. */
|
|
31
|
+
readonly stories: readonly string[] | undefined;
|
|
32
|
+
};
|
|
33
|
+
/** What came of the steps; a step not asked for is absent. */
|
|
34
|
+
export type AgentSteps = {
|
|
35
|
+
/** The files written for the agents. */
|
|
36
|
+
readonly agents?: AgentFiles;
|
|
37
|
+
/** The browser. */
|
|
38
|
+
readonly browser?: BrowserStep;
|
|
39
|
+
/** The drawing. */
|
|
40
|
+
readonly draw?: DrawResult;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Runs the steps asked for.
|
|
44
|
+
*
|
|
45
|
+
* @param request - what they were given.
|
|
46
|
+
* @param io - the run's streams.
|
|
47
|
+
*/
|
|
48
|
+
export declare const runAgentSteps: (request: AgentStepsRequest, io: ScriptIo) => Promise<AgentSteps>;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What `forgebook init` does after the catalogue's own files, when asked: sets up the project's coding agents, installs the
|
|
3
|
+
* browser, and draws a story.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Each is asked for by name, since each does more than write a catalogue's files: the browser is a large download, and
|
|
7
|
+
* drawing runs the project's code. A step that cannot go on is reported in the document and the next is still tried when
|
|
8
|
+
* it does not depend on it, so one run says everything that is wrong.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { installBrowser } from "../browserRun.js";
|
|
15
|
+
import { writeAgentFiles } from "./agentFiles.js";
|
|
16
|
+
import { storyFolders } from "./drawCandidates.js";
|
|
17
|
+
import { prepareGenerated, projectForgebook, runDraw } from "./drawRun.js";
|
|
18
|
+
import { liftedProviders } from "./liftedProviders.js";
|
|
19
|
+
/** The drawing, when what it needs is not there: the first thing to do about it. */
|
|
20
|
+
const cannotDraw = (reason) => ({
|
|
21
|
+
status: "not-run",
|
|
22
|
+
story: undefined,
|
|
23
|
+
storyFile: undefined,
|
|
24
|
+
isWritten: false,
|
|
25
|
+
picture: undefined,
|
|
26
|
+
attempts: [],
|
|
27
|
+
stoppedBecause: reason
|
|
28
|
+
});
|
|
29
|
+
/** Installs the browser, its lines kept off stdout. */
|
|
30
|
+
const browserStep = async (projectDir, io) => {
|
|
31
|
+
try {
|
|
32
|
+
await installBrowser(projectDir, false, io);
|
|
33
|
+
return { status: "ran", error: undefined };
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return { status: "failed", error: (error instanceof Error ? error.message : String(error)).slice(-400) };
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Writes the providers of a React app's entry into the catalogue's preview.
|
|
41
|
+
*
|
|
42
|
+
* @param projectDir - the project's folder.
|
|
43
|
+
* @returns their names and how to take them out; none when the entry has none a copy can give.
|
|
44
|
+
*/
|
|
45
|
+
const liftEntryProviders = (projectDir) => {
|
|
46
|
+
const entry = ["src/main", "src/index", "src/client", "index"]
|
|
47
|
+
.flatMap((name) => ["tsx", "jsx"].map((extension) => join(projectDir, `${name}.${extension}`)))
|
|
48
|
+
.find((file) => existsSync(file));
|
|
49
|
+
if (entry === undefined)
|
|
50
|
+
return undefined;
|
|
51
|
+
const previewFile = join(projectDir, "forgebook.preview.tsx");
|
|
52
|
+
const before = existsSync(previewFile) ? readFileSync(previewFile, "utf8") : undefined;
|
|
53
|
+
const lifted = liftedProviders(readFileSync(entry, "utf8"), entry, previewFile, before ?? "");
|
|
54
|
+
if (lifted === undefined)
|
|
55
|
+
return undefined;
|
|
56
|
+
writeFileSync(previewFile, lifted.preview);
|
|
57
|
+
return {
|
|
58
|
+
names: lifted.names,
|
|
59
|
+
undo: () => {
|
|
60
|
+
if (before === undefined)
|
|
61
|
+
rmSync(previewFile, { force: true });
|
|
62
|
+
else
|
|
63
|
+
writeFileSync(previewFile, before);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
/** Draws, when what it needs is there. */
|
|
68
|
+
const drawStep = (install, browser, draw) => {
|
|
69
|
+
if (install.status !== "ran" && install.status !== "not-needed")
|
|
70
|
+
return Promise.resolve(cannotDraw(`The packages are not installed: ${install.command ?? "install them"}, or give --install`));
|
|
71
|
+
return browser?.status === "failed" ? Promise.resolve(cannotDraw("The browser did not install")) : draw();
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Runs the steps asked for.
|
|
75
|
+
*
|
|
76
|
+
* @param request - what they were given.
|
|
77
|
+
* @param io - the run's streams.
|
|
78
|
+
*/
|
|
79
|
+
export const runAgentSteps = async (request, io) => {
|
|
80
|
+
const { projectDir, framework, manager, install } = request;
|
|
81
|
+
const run = projectForgebook(projectDir, io.env);
|
|
82
|
+
const agents = request.isForAgents
|
|
83
|
+
? writeAgentFiles({ projectDir, framework, manager, hooks: request.hooks })
|
|
84
|
+
: undefined;
|
|
85
|
+
const isInstalled = install.status === "ran" || install.status === "not-needed";
|
|
86
|
+
const browser = request.shouldInstallBrowser && isInstalled ? await browserStep(projectDir, io) : undefined;
|
|
87
|
+
const draw = request.shouldDraw
|
|
88
|
+
? await drawStep(install, browser, () => runDraw({
|
|
89
|
+
dir: projectDir,
|
|
90
|
+
framework,
|
|
91
|
+
run,
|
|
92
|
+
prepare: () => prepareGenerated(projectDir, framework, io.env),
|
|
93
|
+
...(framework === "react" && request.stories !== undefined
|
|
94
|
+
? { liftProviders: () => liftEntryProviders(projectDir) }
|
|
95
|
+
: {}),
|
|
96
|
+
folders: storyFolders(request.stories ?? [])
|
|
97
|
+
}))
|
|
98
|
+
: undefined;
|
|
99
|
+
return {
|
|
100
|
+
...(agents === undefined ? {} : { agents }),
|
|
101
|
+
...(browser === undefined ? {} : { browser }),
|
|
102
|
+
...(draw === undefined ? {} : { draw })
|
|
103
|
+
};
|
|
104
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** What providers came to. */
|
|
2
|
+
export type LiftedProviders = {
|
|
3
|
+
/** The tags of the wrappers given, outermost first. */
|
|
4
|
+
readonly names: readonly string[];
|
|
5
|
+
/** The preview's text with them. */
|
|
6
|
+
readonly preview: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* The providers of an app's entry, as a preview.
|
|
10
|
+
*
|
|
11
|
+
* @param entry - the entry's text.
|
|
12
|
+
* @param entryFile - its file, absolute.
|
|
13
|
+
* @param previewFile - the preview's file, absolute.
|
|
14
|
+
* @param previewText - what the preview holds now.
|
|
15
|
+
* @returns them; none when the entry wraps the app in nothing a copy can give.
|
|
16
|
+
*/
|
|
17
|
+
export declare const liftedProviders: (entry: string, entryFile: string, previewFile: string, previewText: string) => LiftedProviders | undefined;
|