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
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type VitePaths } from "./vitePaths.ts";
|
|
2
2
|
/** A change. */
|
|
3
3
|
export type GitChange = {
|
|
4
|
+
/** The commit it is measured from. */
|
|
5
|
+
readonly base: string;
|
|
4
6
|
/** Its unified diff, with no context. */
|
|
5
7
|
readonly diff: string;
|
|
6
8
|
/** The files it deletes, relative to the repository. */
|
|
@@ -16,6 +18,15 @@ export type GitChange = {
|
|
|
16
18
|
* @returns what it wrote.
|
|
17
19
|
*/
|
|
18
20
|
export declare const gitOutput: (dir: string, ...args: readonly string[]) => Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Runs git in a folder, in the environment given rather than this process's.
|
|
23
|
+
*
|
|
24
|
+
* @param dir - a folder of the repository.
|
|
25
|
+
* @param env - the environment git gets.
|
|
26
|
+
* @param args - its arguments.
|
|
27
|
+
* @returns what it wrote.
|
|
28
|
+
*/
|
|
29
|
+
export declare const gitOutputIn: (dir: string, env: NodeJS.ProcessEnv, ...args: readonly string[]) => Promise<string>;
|
|
19
30
|
/**
|
|
20
31
|
* The commit a change starts from.
|
|
21
32
|
*
|
|
@@ -25,16 +36,38 @@ export declare const gitOutput: (dir: string, ...args: readonly string[]) => Pro
|
|
|
25
36
|
*/
|
|
26
37
|
export declare const changeBase: (dir: string, since: string) => Promise<string | undefined>;
|
|
27
38
|
/**
|
|
28
|
-
*
|
|
39
|
+
* Why a change has no start, in words that say what to do: a shallow clone, which is CI's default, knows the commit and
|
|
40
|
+
* not what it shares with this one.
|
|
29
41
|
*
|
|
30
42
|
* @param dir - a folder of the repository.
|
|
31
|
-
* @param
|
|
32
|
-
* @returns the repository's folder, and the files relative to it.
|
|
43
|
+
* @param since - a commit, as asked.
|
|
33
44
|
*/
|
|
34
|
-
export declare const
|
|
45
|
+
export declare const noBaseReason: (dir: string, since: string) => Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Where a branch's work starts when nobody says: the default branch, or `HEAD` when there is none to start from. On the
|
|
48
|
+
* default branch itself that is what is not pushed.
|
|
49
|
+
*
|
|
50
|
+
* @param dir - a folder of the repository.
|
|
51
|
+
* @returns the name to compare with.
|
|
52
|
+
*/
|
|
53
|
+
export declare const branchStart: (dir: string) => Promise<string>;
|
|
54
|
+
/** The files a change touches. */
|
|
55
|
+
export type ChangedFiles = {
|
|
56
|
+
/** The repository's folder. */
|
|
35
57
|
readonly root: string;
|
|
58
|
+
/** The files, tracked or new, relative to it. */
|
|
36
59
|
readonly files: readonly string[];
|
|
37
|
-
|
|
60
|
+
/** Those it deletes. */
|
|
61
|
+
readonly deleted: readonly string[];
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* The files a change touches, tracked or new.
|
|
65
|
+
*
|
|
66
|
+
* @param dir - a folder of the repository.
|
|
67
|
+
* @param base - the commit it starts from.
|
|
68
|
+
* @returns the repository's folder, the files relative to it, and which of them it deletes.
|
|
69
|
+
*/
|
|
70
|
+
export declare const changedFiles: (dir: string, base: string) => Promise<ChangedFiles>;
|
|
38
71
|
/**
|
|
39
72
|
* The changed files as the catalogue's graph names them: absolute, under the catalogue's folder as configured, in Vite's
|
|
40
73
|
* form. Git names real paths (with forward slashes on Windows too), and a folder reached through a link has another.
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
* `--output=…` for an option and overwrites a file. The diff asks for one fixed form whatever the user's git settings,
|
|
7
7
|
* since colours, external diff tools and other prefixes all read as an empty change, which is a check passing with
|
|
8
8
|
* nothing checked. A change starts where the branch left `since`, or what `since` gained afterwards is read as this
|
|
9
|
-
* change's.
|
|
9
|
+
* change's. A branch's committed work counts as its change, so a check run after a commit does not find nothing and
|
|
10
|
+
* pass: `branchStart` names the default branch to start from, and a clone with no history to find the start in is told
|
|
11
|
+
* apart from a name that means nothing.
|
|
10
12
|
*
|
|
11
13
|
* @module
|
|
12
14
|
*/
|
|
@@ -24,8 +26,23 @@ const run = promisify(execFile);
|
|
|
24
26
|
* @returns what it wrote.
|
|
25
27
|
*/
|
|
26
28
|
export const gitOutput = async (dir, ...args) => (await run("git", ["-c", "core.quotePath=false", ...args], { cwd: dir, maxBuffer: MAX_OUTPUT })).stdout;
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Runs git in a folder, in the environment given rather than this process's.
|
|
31
|
+
*
|
|
32
|
+
* @param dir - a folder of the repository.
|
|
33
|
+
* @param env - the environment git gets.
|
|
34
|
+
* @param args - its arguments.
|
|
35
|
+
* @returns what it wrote.
|
|
36
|
+
*/
|
|
37
|
+
export const gitOutputIn = async (dir, env, ...args) => (await run("git", ["-c", "core.quotePath=false", ...args], { cwd: dir, env, maxBuffer: MAX_OUTPUT }))
|
|
38
|
+
.stdout;
|
|
39
|
+
/**
|
|
40
|
+
* The names of a list git wrote with `-z`: otherwise it quotes a name that holds a quotation mark or a tab, which then
|
|
41
|
+
* matches no file and no rule.
|
|
42
|
+
*/
|
|
43
|
+
const listed = (text) => text.split("\0").filter((name) => name !== "");
|
|
44
|
+
/** The new files git does not track, in the whole repository: from a subfolder it would list that folder's only. */
|
|
45
|
+
const untrackedFiles = async (root) => listed(await gitOutput(root, "ls-files", "-z", "--others", "--exclude-standard", "--full-name"));
|
|
29
46
|
/**
|
|
30
47
|
* The commit a change starts from.
|
|
31
48
|
*
|
|
@@ -42,18 +59,52 @@ export const changeBase = async (dir, since) => {
|
|
|
42
59
|
return undefined;
|
|
43
60
|
}
|
|
44
61
|
};
|
|
62
|
+
/**
|
|
63
|
+
* Why a change has no start, in words that say what to do: a shallow clone, which is CI's default, knows the commit and
|
|
64
|
+
* not what it shares with this one.
|
|
65
|
+
*
|
|
66
|
+
* @param dir - a folder of the repository.
|
|
67
|
+
* @param since - a commit, as asked.
|
|
68
|
+
*/
|
|
69
|
+
export const noBaseReason = async (dir, since) => {
|
|
70
|
+
try {
|
|
71
|
+
await gitOutput(dir, "rev-parse", "--verify", "--quiet", "--end-of-options", `${since}^{commit}`);
|
|
72
|
+
return `"${since}" shares no history with this commit here: in a shallow clone, fetch the whole history (fetch-depth: 0)`;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return `"${since}" names no commit here`;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
/** The branches a repository's work usually starts from, when its remote names none. */
|
|
79
|
+
const USUAL_DEFAULT_BRANCHES = ["origin/main", "origin/master", "main", "master"];
|
|
80
|
+
/**
|
|
81
|
+
* Where a branch's work starts when nobody says: the default branch, or `HEAD` when there is none to start from. On the
|
|
82
|
+
* default branch itself that is what is not pushed.
|
|
83
|
+
*
|
|
84
|
+
* @param dir - a folder of the repository.
|
|
85
|
+
* @returns the name to compare with.
|
|
86
|
+
*/
|
|
87
|
+
export const branchStart = async (dir) => {
|
|
88
|
+
const named = await gitOutput(dir, "symbolic-ref", "--quiet", "--short", "refs/remotes/origin/HEAD").catch(() => "");
|
|
89
|
+
for (const branch of [named.trim(), ...USUAL_DEFAULT_BRANCHES]) {
|
|
90
|
+
if (branch !== "" && (await changeBase(dir, branch)) !== undefined)
|
|
91
|
+
return branch;
|
|
92
|
+
}
|
|
93
|
+
return "HEAD";
|
|
94
|
+
};
|
|
45
95
|
/**
|
|
46
96
|
* The files a change touches, tracked or new.
|
|
47
97
|
*
|
|
48
98
|
* @param dir - a folder of the repository.
|
|
49
99
|
* @param base - the commit it starts from.
|
|
50
|
-
* @returns the repository's folder,
|
|
100
|
+
* @returns the repository's folder, the files relative to it, and which of them it deletes.
|
|
51
101
|
*/
|
|
52
102
|
export const changedFiles = async (dir, base) => {
|
|
53
103
|
const root = (await gitOutput(dir, "rev-parse", "--show-toplevel")).trim();
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
104
|
+
const names = ["--no-ext-diff", "--no-relative", "--name-only", "-z"];
|
|
105
|
+
const tracked = listed(await gitOutput(dir, "diff", ...names, base, "--"));
|
|
106
|
+
const deleted = listed(await gitOutput(dir, "diff", ...names, "--diff-filter=D", base, "--"));
|
|
107
|
+
return { root, files: [...new Set([...tracked, ...(await untrackedFiles(root))])], deleted };
|
|
57
108
|
};
|
|
58
109
|
/**
|
|
59
110
|
* The changed files as the catalogue's graph names them: absolute, under the catalogue's folder as configured, in Vite's
|
|
@@ -76,11 +127,20 @@ export const catalogueChangedFiles = (dir, realDir, root, files, paths = VITE_PA
|
|
|
76
127
|
export const gitChange = async (dir, since) => {
|
|
77
128
|
const base = await changeBase(dir, since);
|
|
78
129
|
if (base === undefined)
|
|
79
|
-
return
|
|
80
|
-
const form = [
|
|
130
|
+
return noBaseReason(dir, since);
|
|
131
|
+
const form = [
|
|
132
|
+
"--no-ext-diff",
|
|
133
|
+
"--no-textconv",
|
|
134
|
+
"--no-color",
|
|
135
|
+
"--no-relative",
|
|
136
|
+
"--src-prefix=a/",
|
|
137
|
+
"--dst-prefix=b/"
|
|
138
|
+
];
|
|
139
|
+
const root = (await gitOutput(dir, "rev-parse", "--show-toplevel")).trim();
|
|
81
140
|
return {
|
|
141
|
+
base,
|
|
82
142
|
diff: await gitOutput(dir, "diff", ...form, "--unified=0", base, "--"),
|
|
83
|
-
deleted: listed(await gitOutput(dir, "diff", ...form, "--name-only", "--diff-filter=D", base, "--")),
|
|
84
|
-
untracked:
|
|
143
|
+
deleted: listed(await gitOutput(dir, "diff", ...form, "--name-only", "-z", "--diff-filter=D", base, "--")),
|
|
144
|
+
untracked: await untrackedFiles(root)
|
|
85
145
|
};
|
|
86
146
|
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** A hidden folder a file sits in, and the pattern that lists that folder's story files. */
|
|
2
|
+
type HiddenFolder = {
|
|
3
|
+
readonly folder: string;
|
|
4
|
+
readonly pattern: string;
|
|
5
|
+
readonly files: readonly string[];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* The story files the patterns pass over in hidden folders, grouped by the first hidden folder each sits in, with the
|
|
9
|
+
* pattern that lists them.
|
|
10
|
+
*
|
|
11
|
+
* @param config - the catalogue's folder and its stories' patterns.
|
|
12
|
+
*/
|
|
13
|
+
export declare const hiddenStoryFolders: (config: {
|
|
14
|
+
readonly dir: string;
|
|
15
|
+
readonly stories: readonly string[];
|
|
16
|
+
}) => HiddenFolder[];
|
|
17
|
+
/**
|
|
18
|
+
* What to say of the folders of `hiddenStoryFolders`: how many files, where, and the patterns that list them.
|
|
19
|
+
*
|
|
20
|
+
* @param folders - the folders, at least one.
|
|
21
|
+
*/
|
|
22
|
+
export declare const hiddenStoryFoldersMessage: (folders: readonly HiddenFolder[]) => string;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The story files a catalogue's patterns pass over because they sit in a hidden folder (`docs/.vitepress/…`): a glob's
|
|
3
|
+
* `**` does not enter a folder whose name starts with a dot, so such files are never listed, and nothing said why. The
|
|
4
|
+
* stories answer, the dev server and the commands that stop on an empty pattern name them, with a pattern that lists
|
|
5
|
+
* them.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* For each pattern with a `**`, the hidden folders under its static start are found (folders only, at most
|
|
9
|
+
* `MAX_FOLDERS`, leaving out `.git` and `node_modules`), and the pattern's file name is globbed in each by its name
|
|
10
|
+
* (`docs/.vitepress/**\/*.stories.ts`), as the catalogue's own listing globs (Node's `globSync`, which reads a hidden
|
|
11
|
+
* folder named in a pattern on every version). A file another pattern lists,
|
|
12
|
+
* or a `!` pattern leaves out (its hidden folders read as plain ones), is not named: writing `!docs/.vitepress/**` says
|
|
13
|
+
* the folder is left out on purpose and ends the notice.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { globSync, readdirSync } from "node:fs";
|
|
18
|
+
import { matchesGlob } from "node:path";
|
|
19
|
+
import { patternBase } from "./autoTitle.js";
|
|
20
|
+
import { isNegated } from "./storyPatterns.js";
|
|
21
|
+
import { VITE_PATHS } from "./vitePaths.js";
|
|
22
|
+
/** Folders never entered: they hold no story, and can hold very many files. */
|
|
23
|
+
const NOT_ENTERED = /(^|[\\/])(\.git|node_modules)$/;
|
|
24
|
+
/** How many folders are read at most to find the hidden ones: a pattern starting at the project's root reads many. */
|
|
25
|
+
const MAX_FOLDERS = 20_000;
|
|
26
|
+
/** A folder's sub-folders; none when it cannot be read. */
|
|
27
|
+
const foldersIn = (dir) => {
|
|
28
|
+
try {
|
|
29
|
+
return readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isDirectory());
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* The topmost hidden folders under a folder, relative to the root.
|
|
37
|
+
*
|
|
38
|
+
* @param root - the catalogue's folder.
|
|
39
|
+
* @param base - the folder to look under, relative to the root.
|
|
40
|
+
*/
|
|
41
|
+
const hiddenFoldersUnder = (root, base) => {
|
|
42
|
+
const found = [];
|
|
43
|
+
const queue = [base];
|
|
44
|
+
let read = 0;
|
|
45
|
+
while (queue.length > 0 && read < MAX_FOLDERS) {
|
|
46
|
+
const folder = queue.pop() ?? "";
|
|
47
|
+
for (const entry of foldersIn(VITE_PATHS.resolve(root, folder))) {
|
|
48
|
+
read += 1;
|
|
49
|
+
if (NOT_ENTERED.test(entry.name))
|
|
50
|
+
continue;
|
|
51
|
+
const path = folder === "" ? entry.name : `${folder}/${entry.name}`;
|
|
52
|
+
if (entry.name.startsWith("."))
|
|
53
|
+
found.push(path);
|
|
54
|
+
else
|
|
55
|
+
queue.push(path);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return found;
|
|
59
|
+
};
|
|
60
|
+
/** A path or a pattern with each segment's leading dot taken off, so a glob reads it as an ordinary folder. */
|
|
61
|
+
const undotted = (path) => path.replace(/(^|\/)\.(?=[^./])/g, "$1");
|
|
62
|
+
/**
|
|
63
|
+
* The story files the patterns pass over in hidden folders, grouped by the first hidden folder each sits in, with the
|
|
64
|
+
* pattern that lists them.
|
|
65
|
+
*
|
|
66
|
+
* @param config - the catalogue's folder and its stories' patterns.
|
|
67
|
+
*/
|
|
68
|
+
export const hiddenStoryFolders = (config) => {
|
|
69
|
+
const plain = (pattern) => pattern.replace(/^\.\//, "");
|
|
70
|
+
const listed = config.stories.filter((each) => !isNegated(each)).map(plain);
|
|
71
|
+
const leftOut = config.stories.filter(isNegated).map((each) => undotted(plain(each.slice(1))));
|
|
72
|
+
// a file in one, as the pattern would match it with the folder's dot taken off, that nothing lists or leaves out
|
|
73
|
+
const isPassedOver = (file, pattern) => matchesGlob(undotted(file), undotted(pattern)) &&
|
|
74
|
+
!listed.some((each) => matchesGlob(file, each)) &&
|
|
75
|
+
!leftOut.some((each) => matchesGlob(undotted(file), each));
|
|
76
|
+
const folders = new Map();
|
|
77
|
+
for (const pattern of listed.filter((each) => each.includes("**"))) {
|
|
78
|
+
const last = pattern.split("/").pop() ?? "*";
|
|
79
|
+
for (const folder of hiddenFoldersUnder(config.dir, patternBase(pattern).replace(/^\.\/?/, ""))) {
|
|
80
|
+
const named = `${folder}/**/${last}`;
|
|
81
|
+
const files = globSync(named, { cwd: config.dir })
|
|
82
|
+
.map((found) => VITE_PATHS.normalize(found))
|
|
83
|
+
.filter((file) => isPassedOver(file, pattern));
|
|
84
|
+
if (files.length === 0)
|
|
85
|
+
continue;
|
|
86
|
+
const entry = folders.get(folder) ?? { pattern: named, files: [] };
|
|
87
|
+
entry.files.push(...files);
|
|
88
|
+
folders.set(folder, entry);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return [...folders]
|
|
92
|
+
.map(([folder, entry]) => ({ folder, pattern: entry.pattern, files: [...new Set(entry.files)].sort() }))
|
|
93
|
+
.sort((a, b) => a.folder.localeCompare(b.folder));
|
|
94
|
+
};
|
|
95
|
+
/** How many hidden folders a message names before it says how many more there are. */
|
|
96
|
+
const NAMED_FOLDERS = 3;
|
|
97
|
+
/**
|
|
98
|
+
* What to say of the folders of `hiddenStoryFolders`: how many files, where, and the patterns that list them.
|
|
99
|
+
*
|
|
100
|
+
* @param folders - the folders, at least one.
|
|
101
|
+
*/
|
|
102
|
+
export const hiddenStoryFoldersMessage = (folders) => {
|
|
103
|
+
const files = folders.reduce((sum, each) => sum + each.files.length, 0);
|
|
104
|
+
const named = folders.slice(0, NAMED_FOLDERS).map((each) => `\`${each.pattern}\``);
|
|
105
|
+
const more = folders.length > NAMED_FOLDERS ? `, and ${folders.length - NAMED_FOLDERS} more folders` : "";
|
|
106
|
+
return `${files === 1 ? "1 story file sits" : `${files} story files sit`} in a hidden folder the stories' patterns do not enter: list ${files === 1 ? "it" : "them"} with ${named.join(", ")}${more}, or write a \`!\` pattern for the folder to leave it out`;
|
|
107
|
+
};
|
|
@@ -11,8 +11,10 @@
|
|
|
11
11
|
* @module
|
|
12
12
|
*/
|
|
13
13
|
import type { Plugin } from "vite";
|
|
14
|
+
import { type StoryFileRead } from "../hotModules.ts";
|
|
14
15
|
import type { CloseWatch } from "./closeWatch.ts";
|
|
15
|
-
import {
|
|
16
|
+
import type { ScriptProblems } from "./scriptProblems.ts";
|
|
17
|
+
import { type RefusedStoryFile, type StoryFilesRead } from "./storyFilesModule.ts";
|
|
16
18
|
/**
|
|
17
19
|
* What a story file runs to accept its edit: the frame that draws its stories cancels the event and draws them anew;
|
|
18
20
|
* when none does, the files that import it take the edit (one that re-exports its stories draws them). The exports the
|
|
@@ -49,38 +51,60 @@ export declare const renewedModule: <TModule extends {
|
|
|
49
51
|
readonly code: string;
|
|
50
52
|
}>(id: string, module: TModule, queries: readonly string[], isServing: boolean) => TModule;
|
|
51
53
|
/**
|
|
52
|
-
* What a pattern's files module runs: it takes the edits its story files hand on, which change nothing it holds
|
|
53
|
-
* edit that changes its list reloads the pages from the server
|
|
54
|
+
* What a pattern's files module runs: it takes the edits its story files hand on, which change nothing it holds, as
|
|
55
|
+
* an edit that changes its list reloads the pages from the server. What an edit says of a file that cannot be read
|
|
56
|
+
* goes on to the page, unless it is the fix of a file the page was served without: it has no story to redraw, so it
|
|
57
|
+
* reloads to list them. Those files are kept in the module's hot data, so a version served after the page's first does not count.
|
|
58
|
+
*
|
|
59
|
+
* @param refused - the story files the module was served without.
|
|
54
60
|
*/
|
|
55
|
-
export declare const
|
|
61
|
+
export declare const filesModuleHot: (refused: readonly RefusedStoryFile[]) => string;
|
|
62
|
+
/** What an edit of a story file changed. */
|
|
63
|
+
export type StoryFileEdit = {
|
|
64
|
+
/** The patterns' modules it changed (a story added or renamed, a title), which the open pages read once. */
|
|
65
|
+
readonly changed: readonly string[];
|
|
66
|
+
/** The patterns' modules that say the file can or cannot be read, which a page opened from now on must read anew. */
|
|
67
|
+
readonly renewed: readonly string[];
|
|
68
|
+
/** Whether the file can be read, when that changed. */
|
|
69
|
+
readonly read?: StoryFileRead;
|
|
70
|
+
};
|
|
56
71
|
/** The patterns' modules a dev server served, with their story files indexed as it served them. */
|
|
57
72
|
export type ServedPatterns = {
|
|
58
73
|
/**
|
|
59
74
|
* Keeps a pattern's module as it was served.
|
|
60
75
|
*
|
|
61
76
|
* @param id - the module's id.
|
|
62
|
-
* @param
|
|
77
|
+
* @param read - its story files.
|
|
63
78
|
*/
|
|
64
|
-
readonly keep: (id: string,
|
|
79
|
+
readonly keep: (id: string, read: StoryFilesRead) => void;
|
|
65
80
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
81
|
+
* What an edit of a story file changed; the file alone is indexed again, not the pattern's every file. An edit that
|
|
82
|
+
* leaves it unreadable (half typed) changes no list, so the frame that draws it keeps its story and draws the fix in
|
|
83
|
+
* place, whose index is then compared with the last one that could be read.
|
|
69
84
|
*
|
|
70
85
|
* @param file - the edited story file.
|
|
71
86
|
*/
|
|
72
|
-
readonly
|
|
87
|
+
readonly edited: (file: string) => StoryFileEdit;
|
|
88
|
+
/**
|
|
89
|
+
* The patterns' modules that list a story file.
|
|
90
|
+
*
|
|
91
|
+
* @param file - the story file.
|
|
92
|
+
*/
|
|
93
|
+
readonly listing: (file: string) => readonly string[];
|
|
73
94
|
};
|
|
74
95
|
/** The patterns' modules a dev server serves, kept to tell an edit that changes a list. */
|
|
75
96
|
export declare const servedPatterns: () => ServedPatterns;
|
|
76
97
|
/**
|
|
77
|
-
* The plugin's hooks for a story file's edit: the file accepts it on a dev server,
|
|
78
|
-
* list (a story added, renamed, a title) reloads the pages, which read the list once
|
|
98
|
+
* The plugin's hooks for a story file's edit: the file accepts it on a dev server, an edit that changes a pattern's
|
|
99
|
+
* list (a story added, renamed, a title) reloads the pages, which read the list once, and one that changes whether the
|
|
100
|
+
* file can be read tells them. A story file a frame loads is
|
|
79
101
|
* followed closely (`closeWatch.ts`), and the late report of an edit of any file the close watch handed on already is
|
|
80
102
|
* dropped, so an edit is drawn once.
|
|
81
103
|
*
|
|
82
104
|
* @param isServing - whether a dev server runs whose framework draws an edited story file in place.
|
|
83
|
-
* @param
|
|
105
|
+
* @param served - what the edit changed, and the modules that list the file.
|
|
84
106
|
* @param watching - the dev server's close watch.
|
|
107
|
+
* @param scripts - the project's other scripts that do not parse: an edit that breaks or fixes one renews every
|
|
108
|
+
* pattern's module, which names them, and tells the pages as a story file's does.
|
|
85
109
|
*/
|
|
86
|
-
export declare const storyFileHotHooks: (isServing: () => boolean,
|
|
110
|
+
export declare const storyFileHotHooks: (isServing: () => boolean, served: Pick<ServedPatterns, "edited" | "listing">, watching: Pick<CloseWatch, "follow" | "isLateReport">, scripts?: Pick<ScriptProblems, "edited">) => Pick<Plugin, "transform" | "hotUpdate">;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { codeLiteral } from "../codeLiteral.js";
|
|
2
|
-
import { RENEWED_MODULE_EVENT, STORY_FILE_EVENT } from "../hotModules.js";
|
|
2
|
+
import { RENEWED_MODULE_EVENT, STORY_FILE_EVENT, STORY_FILE_READ_EVENT } from "../hotModules.js";
|
|
3
3
|
import { STORY_FILE } from "./autoTitle.js";
|
|
4
4
|
import { FILES_PREFIX } from "./pluginModules.js";
|
|
5
5
|
import { storyFileIndex, storyFilesGroupOf } from "./storyFilesModule.js";
|
|
@@ -84,60 +84,151 @@ export const renewedModule = (id, module, queries, isServing) => isServing && qu
|
|
|
84
84
|
? { ...module, code: `${module.code}\n${renewedModuleHot(id)}` }
|
|
85
85
|
: module;
|
|
86
86
|
/**
|
|
87
|
-
* What a pattern's files module runs: it takes the edits its story files hand on, which change nothing it holds
|
|
88
|
-
* edit that changes its list reloads the pages from the server
|
|
87
|
+
* What a pattern's files module runs: it takes the edits its story files hand on, which change nothing it holds, as
|
|
88
|
+
* an edit that changes its list reloads the pages from the server. What an edit says of a file that cannot be read
|
|
89
|
+
* goes on to the page, unless it is the fix of a file the page was served without: it has no story to redraw, so it
|
|
90
|
+
* reloads to list them. Those files are kept in the module's hot data, so a version served after the page's first does not count.
|
|
91
|
+
*
|
|
92
|
+
* @param refused - the story files the module was served without.
|
|
89
93
|
*/
|
|
90
|
-
export const
|
|
94
|
+
export const filesModuleHot = (refused) => [
|
|
95
|
+
"if (import.meta.hot) {",
|
|
96
|
+
" import.meta.hot.accept();",
|
|
97
|
+
` import.meta.hot.data.forgebookRefused ??= ${codeLiteral(refused.map(({ file }) => file))};`,
|
|
98
|
+
` import.meta.hot.on(${codeLiteral(STORY_FILE_READ_EVENT)}, (read) => {`,
|
|
99
|
+
" if (read.problem === undefined && import.meta.hot.data.forgebookRefused.includes(read.file)) window.location.reload();",
|
|
100
|
+
` else window.dispatchEvent(new CustomEvent(${codeLiteral(STORY_FILE_READ_EVENT)}, { detail: read }));`,
|
|
101
|
+
" });",
|
|
102
|
+
"}"
|
|
103
|
+
].join("\n");
|
|
91
104
|
/**
|
|
92
|
-
* A story file's index as an edit left it
|
|
105
|
+
* A story file's index as an edit left it, or why it cannot be read; none when its text cannot be had (an editor writes
|
|
106
|
+
* it anew in place), which says nothing yet.
|
|
93
107
|
*
|
|
94
108
|
* @param root - the declaring module's folder.
|
|
95
|
-
* @param
|
|
96
|
-
* @param key - the file's path relative to the declaring module.
|
|
109
|
+
* @param served - the file.
|
|
97
110
|
*/
|
|
98
|
-
const readIndex = (root,
|
|
111
|
+
const readIndex = (root, served) => {
|
|
99
112
|
try {
|
|
100
|
-
return storyFileIndex(root, pattern, key);
|
|
113
|
+
return storyFileIndex(root, served.pattern, served.key);
|
|
101
114
|
}
|
|
102
|
-
catch
|
|
103
|
-
return
|
|
115
|
+
catch {
|
|
116
|
+
return undefined;
|
|
104
117
|
}
|
|
105
118
|
};
|
|
119
|
+
/**
|
|
120
|
+
* What a pattern's module keeps of its story files: as read now, a problem known before staying until an edit changes it
|
|
121
|
+
* (`edited` tells the pages), and a file that cannot be read keeping the index of its last good read.
|
|
122
|
+
*
|
|
123
|
+
* @param read - the story files.
|
|
124
|
+
* @param before - the files as last known.
|
|
125
|
+
*/
|
|
126
|
+
const servedFiles = ({ files, refused }, before) => {
|
|
127
|
+
const served = new Map();
|
|
128
|
+
for (const { key, pattern, file, index } of files) {
|
|
129
|
+
const problem = before?.get(file)?.problem;
|
|
130
|
+
served.set(file, { key, pattern, index: JSON.stringify(index), problem });
|
|
131
|
+
}
|
|
132
|
+
for (const { key, pattern, file, problem } of refused) {
|
|
133
|
+
const known = before?.get(file);
|
|
134
|
+
served.set(file, {
|
|
135
|
+
key,
|
|
136
|
+
pattern,
|
|
137
|
+
index: known?.index,
|
|
138
|
+
problem: known === undefined ? problem : known.problem
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return served;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* What an edit of a story file changed in one pattern's module, noted in what the module keeps.
|
|
145
|
+
*
|
|
146
|
+
* @param id - the module's id.
|
|
147
|
+
* @param files - what it keeps.
|
|
148
|
+
* @param file - the edited file, in Vite's form.
|
|
149
|
+
*/
|
|
150
|
+
const editedIn = (id, files, file) => {
|
|
151
|
+
const kept = files.get(file);
|
|
152
|
+
if (kept === undefined)
|
|
153
|
+
return { isChanged: false };
|
|
154
|
+
const index = readIndex(storyFilesGroupOf(id.slice(FILES_PREFIX.length)).root, kept);
|
|
155
|
+
if (index === undefined)
|
|
156
|
+
return { isChanged: false };
|
|
157
|
+
const problem = typeof index === "string" ? index : undefined;
|
|
158
|
+
const isChanged = typeof index !== "string" && JSON.stringify(index) !== kept.index;
|
|
159
|
+
if (problem === kept.problem)
|
|
160
|
+
return { isChanged };
|
|
161
|
+
files.set(file, { ...kept, problem });
|
|
162
|
+
return { isChanged, read: { file, ...(problem === undefined ? {} : { problem }) } };
|
|
163
|
+
};
|
|
106
164
|
/** The patterns' modules a dev server serves, kept to tell an edit that changes a list. */
|
|
107
165
|
export const servedPatterns = () => {
|
|
108
|
-
// by group, each story file as
|
|
166
|
+
// by group, each story file as last known
|
|
109
167
|
const served = new Map();
|
|
110
168
|
return {
|
|
111
|
-
keep: (id,
|
|
112
|
-
served.set(id,
|
|
113
|
-
file.file,
|
|
114
|
-
{ key: file.key, pattern: file.pattern, index: JSON.stringify(file.index) }
|
|
115
|
-
])));
|
|
169
|
+
keep: (id, read) => {
|
|
170
|
+
served.set(id, servedFiles(read, served.get(id)));
|
|
116
171
|
},
|
|
117
|
-
|
|
118
|
-
.filter(([id, files]) => {
|
|
172
|
+
edited: (file) => {
|
|
119
173
|
// in Vite's form, as the served files are kept: a Windows path reaches here either way
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
174
|
+
const edited = VITE_PATHS.normalize(file);
|
|
175
|
+
const reads = [...served].map(([id, files]) => ({ id, ...editedIn(id, files, edited) }));
|
|
176
|
+
const read = reads.find((each) => each.read !== undefined)?.read;
|
|
177
|
+
return {
|
|
178
|
+
changed: reads.filter((each) => each.isChanged).map(({ id }) => id),
|
|
179
|
+
renewed: reads.filter((each) => each.read !== undefined).map(({ id }) => id),
|
|
180
|
+
...(read === undefined ? {} : { read })
|
|
181
|
+
};
|
|
182
|
+
},
|
|
183
|
+
listing: (file) => {
|
|
184
|
+
const listed = VITE_PATHS.normalize(file);
|
|
185
|
+
return [...served].filter(([, files]) => files.has(listed)).map(([id]) => id);
|
|
186
|
+
}
|
|
128
187
|
};
|
|
129
188
|
};
|
|
130
189
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
190
|
+
* Renews modules, so the next page that imports them reads them anew: Vite stops at a story file that takes its own
|
|
191
|
+
* edit, and the modules that import it stay as they were served.
|
|
192
|
+
*
|
|
193
|
+
* @param environment - the client's environment.
|
|
194
|
+
* @param ids - the modules.
|
|
195
|
+
*/
|
|
196
|
+
const invalidated = (environment, ids) => {
|
|
197
|
+
for (const id of ids) {
|
|
198
|
+
const module = environment.moduleGraph.getModuleById(id);
|
|
199
|
+
if (module !== undefined)
|
|
200
|
+
environment.moduleGraph.invalidateModule(module);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Tells the environments a script now parses or no longer does: every pattern's module, which names it among the
|
|
205
|
+
* catalogue's problems, is renewed for the next page and the next answer to a tool, and the open pages name it or stop.
|
|
206
|
+
*
|
|
207
|
+
* @param environments - the dev server's environments.
|
|
208
|
+
* @param read - whether the script parses now.
|
|
209
|
+
*/
|
|
210
|
+
const scriptRead = (environments, read) => {
|
|
211
|
+
for (const environment of environments) {
|
|
212
|
+
const patterns = [...environment.moduleGraph.idToModuleMap.keys()].filter((id) => id.startsWith(FILES_PREFIX));
|
|
213
|
+
invalidated(environment, patterns);
|
|
214
|
+
if (environment.name === "client")
|
|
215
|
+
environment.hot.send({ type: "custom", event: STORY_FILE_READ_EVENT, data: read });
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* The plugin's hooks for a story file's edit: the file accepts it on a dev server, an edit that changes a pattern's
|
|
220
|
+
* list (a story added, renamed, a title) reloads the pages, which read the list once, and one that changes whether the
|
|
221
|
+
* file can be read tells them. A story file a frame loads is
|
|
133
222
|
* followed closely (`closeWatch.ts`), and the late report of an edit of any file the close watch handed on already is
|
|
134
223
|
* dropped, so an edit is drawn once.
|
|
135
224
|
*
|
|
136
225
|
* @param isServing - whether a dev server runs whose framework draws an edited story file in place.
|
|
137
|
-
* @param
|
|
226
|
+
* @param served - what the edit changed, and the modules that list the file.
|
|
138
227
|
* @param watching - the dev server's close watch.
|
|
228
|
+
* @param scripts - the project's other scripts that do not parse: an edit that breaks or fixes one renews every
|
|
229
|
+
* pattern's module, which names them, and tells the pages as a story file's does.
|
|
139
230
|
*/
|
|
140
|
-
export const storyFileHotHooks = (isServing,
|
|
231
|
+
export const storyFileHotHooks = (isServing, served, watching, scripts) => ({
|
|
141
232
|
transform: {
|
|
142
233
|
// a pattern's module is named after its pattern, which may end like a story file
|
|
143
234
|
filter: { id: { include: STORY_FILE, exclude: VIRTUAL_ID } },
|
|
@@ -155,17 +246,24 @@ export const storyFileHotHooks = (isServing, changedFilesModules, watching) => (
|
|
|
155
246
|
// the system's late report of an edit the close watch handed on already
|
|
156
247
|
if (watching.isLateReport(this.environment.name, options.file))
|
|
157
248
|
return [];
|
|
158
|
-
if (
|
|
249
|
+
if (!STORY_FILE.test(options.file)) {
|
|
250
|
+
// read once for every environment: the first to hear of the edit renews them all
|
|
251
|
+
const read = scripts?.edited(options.file);
|
|
252
|
+
if (read !== undefined)
|
|
253
|
+
scriptRead(Object.values(options.server.environments), read);
|
|
159
254
|
return undefined;
|
|
160
|
-
|
|
161
|
-
if (
|
|
255
|
+
}
|
|
256
|
+
if (this.environment.name !== "client") {
|
|
257
|
+
// the server's modules answer tools and agents, each answer anew: they have no page to keep
|
|
258
|
+
invalidated(this.environment, served.listing(options.file));
|
|
162
259
|
return undefined;
|
|
163
|
-
const graph = this.environment.moduleGraph;
|
|
164
|
-
for (const id of changed) {
|
|
165
|
-
const module = graph.getModuleById(id);
|
|
166
|
-
if (module !== undefined)
|
|
167
|
-
graph.invalidateModule(module);
|
|
168
260
|
}
|
|
261
|
+
const { changed, renewed, read } = served.edited(options.file);
|
|
262
|
+
invalidated(this.environment, [...changed, ...renewed]);
|
|
263
|
+
if (read !== undefined)
|
|
264
|
+
this.environment.hot.send({ type: "custom", event: STORY_FILE_READ_EVENT, data: read });
|
|
265
|
+
if (changed.length === 0)
|
|
266
|
+
return undefined;
|
|
169
267
|
this.environment.hot.send({ type: "full-reload" });
|
|
170
268
|
return [];
|
|
171
269
|
}
|