forgebook 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +136 -2
- package/dist/bin/forgebook/catalogueVite.d.ts +16 -0
- package/dist/bin/forgebook/catalogueVite.d.ts.map +1 -0
- package/dist/bin/forgebook/catalogueVite.js +15 -0
- package/dist/bin/forgebook/catalogueVite.js.map +1 -0
- package/dist/bin/forgebook/forgebook.d.mts +3 -0
- package/dist/bin/forgebook/forgebook.d.mts.map +1 -0
- package/dist/bin/forgebook/forgebook.mjs +93 -0
- package/dist/bin/forgebook/forgebook.mjs.map +1 -0
- package/dist/bin/forgebook-docs/catalogueDocs.types.d.ts +90 -0
- package/dist/bin/forgebook-docs/catalogueDocs.types.d.ts.map +1 -0
- package/dist/bin/forgebook-docs/catalogueDocs.types.js +1 -0
- package/dist/bin/forgebook-docs/catalogueDocs.types.js.map +1 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.d.ts +9 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.d.ts.map +1 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js +132 -0
- package/dist/bin/forgebook-docs/catalogueMarkdown.js.map +1 -0
- package/dist/bin/forgebook-docs/collectDocs.d.ts +17 -0
- package/dist/bin/forgebook-docs/collectDocs.d.ts.map +1 -0
- package/dist/bin/forgebook-docs/collectDocs.js +115 -0
- package/dist/bin/forgebook-docs/collectDocs.js.map +1 -0
- package/dist/bin/forgebook-docs/forgebook-docs.d.mts +3 -0
- package/dist/bin/forgebook-docs/forgebook-docs.d.mts.map +1 -0
- package/dist/bin/forgebook-docs/forgebook-docs.mjs +115 -0
- package/dist/bin/forgebook-docs/forgebook-docs.mjs.map +1 -0
- package/dist/bin/forgebook-docs/moduleDocs.d.ts +9 -0
- package/dist/bin/forgebook-docs/moduleDocs.d.ts.map +1 -0
- package/dist/bin/forgebook-docs/moduleDocs.js +62 -0
- package/dist/bin/forgebook-docs/moduleDocs.js.map +1 -0
- package/dist/bin/forgebook-docs/sassDocs.d.ts +20 -0
- package/dist/bin/forgebook-docs/sassDocs.d.ts.map +1 -0
- package/dist/bin/forgebook-docs/sassDocs.js +77 -0
- package/dist/bin/forgebook-docs/sassDocs.js.map +1 -0
- package/dist/bin/forgebook-texts/forgebook-texts.d.mts +3 -0
- package/dist/bin/forgebook-texts/forgebook-texts.d.mts.map +1 -0
- package/dist/bin/forgebook-texts/forgebook-texts.mjs +94 -0
- package/dist/bin/forgebook-texts/forgebook-texts.mjs.map +1 -0
- package/dist/bin/forgebook-texts/storyTextsReport.d.ts +26 -0
- package/dist/bin/forgebook-texts/storyTextsReport.d.ts.map +1 -0
- package/dist/bin/forgebook-texts/storyTextsReport.js +35 -0
- package/dist/bin/forgebook-texts/storyTextsReport.js.map +1 -0
- package/dist/bin/forgebook-texts/storyTextsReport.types.d.ts +25 -0
- package/dist/bin/forgebook-texts/storyTextsReport.types.d.ts.map +1 -0
- package/dist/bin/forgebook-texts/storyTextsReport.types.js +7 -0
- package/dist/bin/forgebook-texts/storyTextsReport.types.js.map +1 -0
- package/dist/src/a11y.d.ts +28 -0
- package/dist/src/a11y.d.ts.map +1 -0
- package/dist/src/a11y.js +29 -0
- package/dist/src/a11y.js.map +1 -0
- package/dist/src/argTypes.d.ts +114 -0
- package/dist/src/argTypes.d.ts.map +1 -0
- package/dist/src/argTypes.js +254 -0
- package/dist/src/argTypes.js.map +1 -0
- package/dist/src/backdrops.d.ts +88 -0
- package/dist/src/backdrops.d.ts.map +1 -0
- package/dist/src/backdrops.js +202 -0
- package/dist/src/backdrops.js.map +1 -0
- package/dist/src/catalogue.d.ts +120 -0
- package/dist/src/catalogue.d.ts.map +1 -0
- package/dist/src/catalogue.js +80 -0
- package/dist/src/catalogue.js.map +1 -0
- package/dist/src/componentDocs.d.ts +98 -0
- package/dist/src/componentDocs.d.ts.map +1 -0
- package/dist/src/componentDocs.js +47 -0
- package/dist/src/componentDocs.js.map +1 -0
- package/dist/src/frame/checkStory.d.ts +20 -0
- package/dist/src/frame/checkStory.d.ts.map +1 -0
- package/dist/src/frame/checkStory.js +31 -0
- package/dist/src/frame/checkStory.js.map +1 -0
- package/dist/src/frame/frame.css +51 -0
- package/dist/src/frame/frameClock.d.ts +53 -0
- package/dist/src/frame/frameClock.d.ts.map +1 -0
- package/dist/src/frame/frameClock.js +80 -0
- package/dist/src/frame/frameClock.js.map +1 -0
- package/dist/src/frame/frameStatus.d.ts +8 -0
- package/dist/src/frame/frameStatus.d.ts.map +1 -0
- package/dist/src/frame/frameStatus.js +8 -0
- package/dist/src/frame/frameStatus.js.map +1 -0
- package/dist/src/frame/frameView.d.ts +33 -0
- package/dist/src/frame/frameView.d.ts.map +1 -0
- package/dist/src/frame/frameView.js +134 -0
- package/dist/src/frame/frameView.js.map +1 -0
- package/dist/src/frame/matrixLayout.d.ts +36 -0
- package/dist/src/frame/matrixLayout.d.ts.map +1 -0
- package/dist/src/frame/matrixLayout.js +87 -0
- package/dist/src/frame/matrixLayout.js.map +1 -0
- package/dist/src/frame/measureTools.d.ts +24 -0
- package/dist/src/frame/measureTools.d.ts.map +1 -0
- package/dist/src/frame/measureTools.js +141 -0
- package/dist/src/frame/measureTools.js.map +1 -0
- package/dist/src/frame/mountFrame.d.ts +47 -0
- package/dist/src/frame/mountFrame.d.ts.map +1 -0
- package/dist/src/frame/mountFrame.js +229 -0
- package/dist/src/frame/mountFrame.js.map +1 -0
- package/dist/src/frame/playStory.d.ts +40 -0
- package/dist/src/frame/playStory.d.ts.map +1 -0
- package/dist/src/frame/playStory.js +55 -0
- package/dist/src/frame/playStory.js.map +1 -0
- package/dist/src/frame/renderer.d.ts +85 -0
- package/dist/src/frame/renderer.d.ts.map +1 -0
- package/dist/src/frame/renderer.js +18 -0
- package/dist/src/frame/renderer.js.map +1 -0
- package/dist/src/frame/settle.d.ts +24 -0
- package/dist/src/frame/settle.d.ts.map +1 -0
- package/dist/src/frame/settle.js +25 -0
- package/dist/src/frame/settle.js.map +1 -0
- package/dist/src/frame/staleModule.d.ts +40 -0
- package/dist/src/frame/staleModule.d.ts.map +1 -0
- package/dist/src/frame/staleModule.js +74 -0
- package/dist/src/frame/staleModule.js.map +1 -0
- package/dist/src/frame/storyCanvas.d.ts +21 -0
- package/dist/src/frame/storyCanvas.d.ts.map +1 -0
- package/dist/src/frame/storyCanvas.js +30 -0
- package/dist/src/frame/storyCanvas.js.map +1 -0
- package/dist/src/frame/storyHooks.d.ts +31 -0
- package/dist/src/frame/storyHooks.d.ts.map +1 -0
- package/dist/src/frame/storyHooks.js +59 -0
- package/dist/src/frame/storyHooks.js.map +1 -0
- package/dist/src/frame/storyModule.d.ts +104 -0
- package/dist/src/frame/storyModule.d.ts.map +1 -0
- package/dist/src/frame/storyModule.js +205 -0
- package/dist/src/frame/storyModule.js.map +1 -0
- package/dist/src/frame/storyRun.d.ts +96 -0
- package/dist/src/frame/storyRun.d.ts.map +1 -0
- package/dist/src/frame/storyRun.js +318 -0
- package/dist/src/frame/storyRun.js.map +1 -0
- package/dist/src/languages.d.ts +15 -0
- package/dist/src/languages.d.ts.map +1 -0
- package/dist/src/languages.js +8 -0
- package/dist/src/languages.js.map +1 -0
- package/dist/src/matrix.d.ts +56 -0
- package/dist/src/matrix.d.ts.map +1 -0
- package/dist/src/matrix.js +61 -0
- package/dist/src/matrix.js.map +1 -0
- package/dist/src/messages.d.ts +203 -0
- package/dist/src/messages.d.ts.map +1 -0
- package/dist/src/messages.js +193 -0
- package/dist/src/messages.js.map +1 -0
- package/dist/src/namedValues.d.ts +38 -0
- package/dist/src/namedValues.d.ts.map +1 -0
- package/dist/src/namedValues.js +48 -0
- package/dist/src/namedValues.js.map +1 -0
- package/dist/src/pageConfig.d.ts +23 -0
- package/dist/src/pageConfig.d.ts.map +1 -0
- package/dist/src/pageConfig.js +1 -0
- package/dist/src/pageConfig.js.map +1 -0
- package/dist/src/playTrace.d.ts +41 -0
- package/dist/src/playTrace.d.ts.map +1 -0
- package/dist/src/playTrace.js +35 -0
- package/dist/src/playTrace.js.map +1 -0
- package/dist/src/shell/A11yTab.d.ts +44 -0
- package/dist/src/shell/A11yTab.d.ts.map +1 -0
- package/dist/src/shell/A11yTab.js +30 -0
- package/dist/src/shell/A11yTab.js.map +1 -0
- package/dist/src/shell/ApiReference.d.ts +18 -0
- package/dist/src/shell/ApiReference.d.ts.map +1 -0
- package/dist/src/shell/ApiReference.js +41 -0
- package/dist/src/shell/ApiReference.js.map +1 -0
- package/dist/src/shell/ClockControls.d.ts +43 -0
- package/dist/src/shell/ClockControls.d.ts.map +1 -0
- package/dist/src/shell/ClockControls.js +53 -0
- package/dist/src/shell/ClockControls.js.map +1 -0
- package/dist/src/shell/Code.d.ts +16 -0
- package/dist/src/shell/Code.d.ts.map +1 -0
- package/dist/src/shell/Code.js +9 -0
- package/dist/src/shell/Code.js.map +1 -0
- package/dist/src/shell/CodeTab.d.ts +17 -0
- package/dist/src/shell/CodeTab.d.ts.map +1 -0
- package/dist/src/shell/CodeTab.js +17 -0
- package/dist/src/shell/CodeTab.js.map +1 -0
- package/dist/src/shell/CodeText.d.ts +16 -0
- package/dist/src/shell/CodeText.d.ts.map +1 -0
- package/dist/src/shell/CodeText.js +10 -0
- package/dist/src/shell/CodeText.js.map +1 -0
- package/dist/src/shell/ComponentPage.d.ts +38 -0
- package/dist/src/shell/ComponentPage.d.ts.map +1 -0
- package/dist/src/shell/ComponentPage.js +146 -0
- package/dist/src/shell/ComponentPage.js.map +1 -0
- package/dist/src/shell/Dock.d.ts +42 -0
- package/dist/src/shell/Dock.d.ts.map +1 -0
- package/dist/src/shell/Dock.js +90 -0
- package/dist/src/shell/Dock.js.map +1 -0
- package/dist/src/shell/EventsTab.d.ts +25 -0
- package/dist/src/shell/EventsTab.d.ts.map +1 -0
- package/dist/src/shell/EventsTab.js +26 -0
- package/dist/src/shell/EventsTab.js.map +1 -0
- package/dist/src/shell/FrameView.d.ts +49 -0
- package/dist/src/shell/FrameView.d.ts.map +1 -0
- package/dist/src/shell/FrameView.js +29 -0
- package/dist/src/shell/FrameView.js.map +1 -0
- package/dist/src/shell/HomePage.d.ts +39 -0
- package/dist/src/shell/HomePage.d.ts.map +1 -0
- package/dist/src/shell/HomePage.js +85 -0
- package/dist/src/shell/HomePage.js.map +1 -0
- package/dist/src/shell/InteractionsTab.d.ts +28 -0
- package/dist/src/shell/InteractionsTab.d.ts.map +1 -0
- package/dist/src/shell/InteractionsTab.js +17 -0
- package/dist/src/shell/InteractionsTab.js.map +1 -0
- package/dist/src/shell/MatrixPicker.d.ts +24 -0
- package/dist/src/shell/MatrixPicker.d.ts.map +1 -0
- package/dist/src/shell/MatrixPicker.js +29 -0
- package/dist/src/shell/MatrixPicker.js.map +1 -0
- package/dist/src/shell/PackageHtml.d.ts +17 -0
- package/dist/src/shell/PackageHtml.d.ts.map +1 -0
- package/dist/src/shell/PackageHtml.js +13 -0
- package/dist/src/shell/PackageHtml.js.map +1 -0
- package/dist/src/shell/PartsTab.d.ts +23 -0
- package/dist/src/shell/PartsTab.d.ts.map +1 -0
- package/dist/src/shell/PartsTab.js +23 -0
- package/dist/src/shell/PartsTab.js.map +1 -0
- package/dist/src/shell/PropFields.d.ts +31 -0
- package/dist/src/shell/PropFields.d.ts.map +1 -0
- package/dist/src/shell/PropFields.js +81 -0
- package/dist/src/shell/PropFields.js.map +1 -0
- package/dist/src/shell/PropsTab.d.ts +45 -0
- package/dist/src/shell/PropsTab.d.ts.map +1 -0
- package/dist/src/shell/PropsTab.js +81 -0
- package/dist/src/shell/PropsTab.js.map +1 -0
- package/dist/src/shell/SchemeSwitches.d.ts +24 -0
- package/dist/src/shell/SchemeSwitches.d.ts.map +1 -0
- package/dist/src/shell/SchemeSwitches.js +36 -0
- package/dist/src/shell/SchemeSwitches.js.map +1 -0
- package/dist/src/shell/Segmented.d.ts +41 -0
- package/dist/src/shell/Segmented.d.ts.map +1 -0
- package/dist/src/shell/Segmented.js +19 -0
- package/dist/src/shell/Segmented.js.map +1 -0
- package/dist/src/shell/Shell.d.ts +49 -0
- package/dist/src/shell/Shell.d.ts.map +1 -0
- package/dist/src/shell/Shell.js +279 -0
- package/dist/src/shell/Shell.js.map +1 -0
- package/dist/src/shell/Sidebar.d.ts +52 -0
- package/dist/src/shell/Sidebar.d.ts.map +1 -0
- package/dist/src/shell/Sidebar.js +132 -0
- package/dist/src/shell/Sidebar.js.map +1 -0
- package/dist/src/shell/SidebarHandle.d.ts +29 -0
- package/dist/src/shell/SidebarHandle.d.ts.map +1 -0
- package/dist/src/shell/SidebarHandle.js +46 -0
- package/dist/src/shell/SidebarHandle.js.map +1 -0
- package/dist/src/shell/Stage.d.ts +68 -0
- package/dist/src/shell/Stage.d.ts.map +1 -0
- package/dist/src/shell/Stage.js +218 -0
- package/dist/src/shell/Stage.js.map +1 -0
- package/dist/src/shell/StageTools.d.ts +27 -0
- package/dist/src/shell/StageTools.d.ts.map +1 -0
- package/dist/src/shell/StageTools.js +34 -0
- package/dist/src/shell/StageTools.js.map +1 -0
- package/dist/src/shell/StageViewport.d.ts +47 -0
- package/dist/src/shell/StageViewport.d.ts.map +1 -0
- package/dist/src/shell/StageViewport.js +174 -0
- package/dist/src/shell/StageViewport.js.map +1 -0
- package/dist/src/shell/StoryCodeBlock.d.ts +35 -0
- package/dist/src/shell/StoryCodeBlock.d.ts.map +1 -0
- package/dist/src/shell/StoryCodeBlock.js +27 -0
- package/dist/src/shell/StoryCodeBlock.js.map +1 -0
- package/dist/src/shell/StoryPicker.d.ts +26 -0
- package/dist/src/shell/StoryPicker.d.ts.map +1 -0
- package/dist/src/shell/StoryPicker.js +32 -0
- package/dist/src/shell/StoryPicker.js.map +1 -0
- package/dist/src/shell/Toolbar.d.ts +40 -0
- package/dist/src/shell/Toolbar.d.ts.map +1 -0
- package/dist/src/shell/Toolbar.js +125 -0
- package/dist/src/shell/Toolbar.js.map +1 -0
- package/dist/src/shell/WidthField.d.ts +24 -0
- package/dist/src/shell/WidthField.d.ts.map +1 -0
- package/dist/src/shell/WidthField.js +40 -0
- package/dist/src/shell/WidthField.js.map +1 -0
- package/dist/src/shell/catalogueContext.d.ts +6 -0
- package/dist/src/shell/catalogueContext.d.ts.map +1 -0
- package/dist/src/shell/catalogueContext.js +14 -0
- package/dist/src/shell/catalogueContext.js.map +1 -0
- package/dist/src/shell/codeTokens.d.ts +23 -0
- package/dist/src/shell/codeTokens.d.ts.map +1 -0
- package/dist/src/shell/codeTokens.js +48 -0
- package/dist/src/shell/codeTokens.js.map +1 -0
- package/dist/src/shell/codeWriter.d.ts +6 -0
- package/dist/src/shell/codeWriter.d.ts.map +1 -0
- package/dist/src/shell/codeWriter.js +14 -0
- package/dist/src/shell/codeWriter.js.map +1 -0
- package/dist/src/shell/compareVariants.d.ts +35 -0
- package/dist/src/shell/compareVariants.d.ts.map +1 -0
- package/dist/src/shell/compareVariants.js +68 -0
- package/dist/src/shell/compareVariants.js.map +1 -0
- package/dist/src/shell/dockTabs.d.ts +63 -0
- package/dist/src/shell/dockTabs.d.ts.map +1 -0
- package/dist/src/shell/dockTabs.js +140 -0
- package/dist/src/shell/dockTabs.js.map +1 -0
- package/dist/src/shell/icons.d.ts +47 -0
- package/dist/src/shell/icons.d.ts.map +1 -0
- package/dist/src/shell/icons.js +36 -0
- package/dist/src/shell/icons.js.map +1 -0
- package/dist/src/shell/keyboard.d.ts +35 -0
- package/dist/src/shell/keyboard.d.ts.map +1 -0
- package/dist/src/shell/keyboard.js +51 -0
- package/dist/src/shell/keyboard.js.map +1 -0
- package/dist/src/shell/mountShell.d.ts +22 -0
- package/dist/src/shell/mountShell.d.ts.map +1 -0
- package/dist/src/shell/mountShell.js +39 -0
- package/dist/src/shell/mountShell.js.map +1 -0
- package/dist/src/shell/shell.css +1831 -0
- package/dist/src/shell/strings.d.ts +184 -0
- package/dist/src/shell/strings.d.ts.map +1 -0
- package/dist/src/shell/strings.js +188 -0
- package/dist/src/shell/strings.js.map +1 -0
- package/dist/src/shell/switchView.d.ts +23 -0
- package/dist/src/shell/switchView.d.ts.map +1 -0
- package/dist/src/shell/switchView.js +19 -0
- package/dist/src/shell/switchView.js.map +1 -0
- package/dist/src/shell/treeSearch.d.ts +35 -0
- package/dist/src/shell/treeSearch.d.ts.map +1 -0
- package/dist/src/shell/treeSearch.js +60 -0
- package/dist/src/shell/treeSearch.js.map +1 -0
- package/dist/src/shell/useComponentDocs.d.ts +16 -0
- package/dist/src/shell/useComponentDocs.d.ts.map +1 -0
- package/dist/src/shell/useComponentDocs.js +25 -0
- package/dist/src/shell/useComponentDocs.js.map +1 -0
- package/dist/src/shell/useCopy.d.ts +10 -0
- package/dist/src/shell/useCopy.d.ts.map +1 -0
- package/dist/src/shell/useCopy.js +23 -0
- package/dist/src/shell/useCopy.js.map +1 -0
- package/dist/src/shell/useFrameMessages.d.ts +54 -0
- package/dist/src/shell/useFrameMessages.d.ts.map +1 -0
- package/dist/src/shell/useFrameMessages.js +90 -0
- package/dist/src/shell/useFrameMessages.js.map +1 -0
- package/dist/src/shell/useFrameQueue.d.ts +29 -0
- package/dist/src/shell/useFrameQueue.d.ts.map +1 -0
- package/dist/src/shell/useFrameQueue.js +72 -0
- package/dist/src/shell/useFrameQueue.js.map +1 -0
- package/dist/src/shell/useLiveView.d.ts +29 -0
- package/dist/src/shell/useLiveView.d.ts.map +1 -0
- package/dist/src/shell/useLiveView.js +51 -0
- package/dist/src/shell/useLiveView.js.map +1 -0
- package/dist/src/shell/useLoaded.d.ts +20 -0
- package/dist/src/shell/useLoaded.d.ts.map +1 -0
- package/dist/src/shell/useLoaded.js +40 -0
- package/dist/src/shell/useLoaded.js.map +1 -0
- package/dist/src/shell/usePageDoc.d.ts +20 -0
- package/dist/src/shell/usePageDoc.d.ts.map +1 -0
- package/dist/src/shell/usePageDoc.js +21 -0
- package/dist/src/shell/usePageDoc.js.map +1 -0
- package/dist/src/shell/usePopover.d.ts +23 -0
- package/dist/src/shell/usePopover.d.ts.map +1 -0
- package/dist/src/shell/usePopover.js +39 -0
- package/dist/src/shell/usePopover.js.map +1 -0
- package/dist/src/shell/useRecentPages.d.ts +21 -0
- package/dist/src/shell/useRecentPages.d.ts.map +1 -0
- package/dist/src/shell/useRecentPages.js +62 -0
- package/dist/src/shell/useRecentPages.js.map +1 -0
- package/dist/src/shell/useScrollMemory.d.ts +40 -0
- package/dist/src/shell/useScrollMemory.d.ts.map +1 -0
- package/dist/src/shell/useScrollMemory.js +69 -0
- package/dist/src/shell/useScrollMemory.js.map +1 -0
- package/dist/src/shell/useSidebarLayout.d.ts +14 -0
- package/dist/src/shell/useSidebarLayout.d.ts.map +1 -0
- package/dist/src/shell/useSidebarLayout.js +19 -0
- package/dist/src/shell/useSidebarLayout.js.map +1 -0
- package/dist/src/shell/useStored.d.ts +11 -0
- package/dist/src/shell/useStored.d.ts.map +1 -0
- package/dist/src/shell/useStored.js +68 -0
- package/dist/src/shell/useStored.js.map +1 -0
- package/dist/src/shell/useStoryCode.d.ts +14 -0
- package/dist/src/shell/useStoryCode.d.ts.map +1 -0
- package/dist/src/shell/useStoryCode.js +29 -0
- package/dist/src/shell/useStoryCode.js.map +1 -0
- package/dist/src/shell/useStoryHeights.d.ts +9 -0
- package/dist/src/shell/useStoryHeights.d.ts.map +1 -0
- package/dist/src/shell/useStoryHeights.js +31 -0
- package/dist/src/shell/useStoryHeights.js.map +1 -0
- package/dist/src/shell/useStoryIdsElement.d.ts +7 -0
- package/dist/src/shell/useStoryIdsElement.d.ts.map +1 -0
- package/dist/src/shell/useStoryIdsElement.js +29 -0
- package/dist/src/shell/useStoryIdsElement.js.map +1 -0
- package/dist/src/shell/useStoryKeys.d.ts +11 -0
- package/dist/src/shell/useStoryKeys.d.ts.map +1 -0
- package/dist/src/shell/useStoryKeys.js +40 -0
- package/dist/src/shell/useStoryKeys.js.map +1 -0
- package/dist/src/shell/useSystemDark.d.ts +3 -0
- package/dist/src/shell/useSystemDark.d.ts.map +1 -0
- package/dist/src/shell/useSystemDark.js +19 -0
- package/dist/src/shell/useSystemDark.js.map +1 -0
- package/dist/src/sourceFiles.d.ts +18 -0
- package/dist/src/sourceFiles.d.ts.map +1 -0
- package/dist/src/sourceFiles.js +22 -0
- package/dist/src/sourceFiles.js.map +1 -0
- package/dist/src/storyBackground.d.ts +21 -0
- package/dist/src/storyBackground.d.ts.map +1 -0
- package/dist/src/storyBackground.js +27 -0
- package/dist/src/storyBackground.js.map +1 -0
- package/dist/src/storyClock.d.ts +62 -0
- package/dist/src/storyClock.d.ts.map +1 -0
- package/dist/src/storyClock.js +51 -0
- package/dist/src/storyClock.js.map +1 -0
- package/dist/src/storyGlobals.d.ts +60 -0
- package/dist/src/storyGlobals.d.ts.map +1 -0
- package/dist/src/storyGlobals.js +117 -0
- package/dist/src/storyGlobals.js.map +1 -0
- package/dist/src/storyHeights.d.ts +37 -0
- package/dist/src/storyHeights.d.ts.map +1 -0
- package/dist/src/storyHeights.js +53 -0
- package/dist/src/storyHeights.js.map +1 -0
- package/dist/src/storyIdsElement.d.ts +9 -0
- package/dist/src/storyIdsElement.d.ts.map +1 -0
- package/dist/src/storyIdsElement.js +9 -0
- package/dist/src/storyIdsElement.js.map +1 -0
- package/dist/src/storyTexts.d.ts +43 -0
- package/dist/src/storyTexts.d.ts.map +1 -0
- package/dist/src/storyTexts.js +71 -0
- package/dist/src/storyTexts.js.map +1 -0
- package/dist/src/storyTree.d.ts +215 -0
- package/dist/src/storyTree.d.ts.map +1 -0
- package/dist/src/storyTree.js +308 -0
- package/dist/src/storyTree.js.map +1 -0
- package/dist/src/switches.d.ts +156 -0
- package/dist/src/switches.d.ts.map +1 -0
- package/dist/src/switches.js +193 -0
- package/dist/src/switches.js.map +1 -0
- package/dist/src/viewState.d.ts +194 -0
- package/dist/src/viewState.d.ts.map +1 -0
- package/dist/src/viewState.js +303 -0
- package/dist/src/viewState.js.map +1 -0
- package/dist/src/vite/adapter.d.ts +70 -0
- package/dist/src/vite/adapter.d.ts.map +1 -0
- package/dist/src/vite/adapter.js +22 -0
- package/dist/src/vite/adapter.js.map +1 -0
- package/dist/src/vite/autoTitle.d.ts +28 -0
- package/dist/src/vite/autoTitle.d.ts.map +1 -0
- package/dist/src/vite/autoTitle.js +44 -0
- package/dist/src/vite/autoTitle.js.map +1 -0
- package/dist/src/vite/componentPage.d.ts +34 -0
- package/dist/src/vite/componentPage.d.ts.map +1 -0
- package/dist/src/vite/componentPage.js +94 -0
- package/dist/src/vite/componentPage.js.map +1 -0
- package/dist/src/vite/config.d.ts +72 -0
- package/dist/src/vite/config.d.ts.map +1 -0
- package/dist/src/vite/config.js +25 -0
- package/dist/src/vite/config.js.map +1 -0
- package/dist/src/vite/configFile.d.ts +76 -0
- package/dist/src/vite/configFile.d.ts.map +1 -0
- package/dist/src/vite/configFile.js +190 -0
- package/dist/src/vite/configFile.js.map +1 -0
- package/dist/src/vite/docsExtractor.d.ts +46 -0
- package/dist/src/vite/docsExtractor.d.ts.map +1 -0
- package/dist/src/vite/docsExtractor.js +88 -0
- package/dist/src/vite/docsExtractor.js.map +1 -0
- package/dist/src/vite/docsProgram.d.ts +42 -0
- package/dist/src/vite/docsProgram.d.ts.map +1 -0
- package/dist/src/vite/docsProgram.js +144 -0
- package/dist/src/vite/docsProgram.js.map +1 -0
- package/dist/src/vite/docsWorker.d.ts +2 -0
- package/dist/src/vite/docsWorker.d.ts.map +1 -0
- package/dist/src/vite/docsWorker.js +68 -0
- package/dist/src/vite/docsWorker.js.map +1 -0
- package/dist/src/vite/forcedStates.d.ts +27 -0
- package/dist/src/vite/forcedStates.d.ts.map +1 -0
- package/dist/src/vite/forcedStates.js +60 -0
- package/dist/src/vite/forcedStates.js.map +1 -0
- package/dist/src/vite/forgebookPlugin.d.ts +28 -0
- package/dist/src/vite/forgebookPlugin.d.ts.map +1 -0
- package/dist/src/vite/forgebookPlugin.js +375 -0
- package/dist/src/vite/forgebookPlugin.js.map +1 -0
- package/dist/src/vite/highlightCode.d.ts +16 -0
- package/dist/src/vite/highlightCode.d.ts.map +1 -0
- package/dist/src/vite/highlightCode.js +82 -0
- package/dist/src/vite/highlightCode.js.map +1 -0
- package/dist/src/vite/indexStoryFile.d.ts +35 -0
- package/dist/src/vite/indexStoryFile.d.ts.map +1 -0
- package/dist/src/vite/indexStoryFile.js +458 -0
- package/dist/src/vite/indexStoryFile.js.map +1 -0
- package/dist/src/vite/pages.d.ts +49 -0
- package/dist/src/vite/pages.d.ts.map +1 -0
- package/dist/src/vite/pages.js +171 -0
- package/dist/src/vite/pages.js.map +1 -0
- package/dist/src/vite/prebundled.d.ts +30 -0
- package/dist/src/vite/prebundled.d.ts.map +1 -0
- package/dist/src/vite/prebundled.js +81 -0
- package/dist/src/vite/prebundled.js.map +1 -0
- package/dist/src/vite/storyCode.d.ts +28 -0
- package/dist/src/vite/storyCode.d.ts.map +1 -0
- package/dist/src/vite/storyCode.js +80 -0
- package/dist/src/vite/storyCode.js.map +1 -0
- package/dist/src/vite/storyFilesModule.d.ts +17 -0
- package/dist/src/vite/storyFilesModule.d.ts.map +1 -0
- package/dist/src/vite/storyFilesModule.js +64 -0
- package/dist/src/vite/storyFilesModule.js.map +1 -0
- package/dist/src/vite/storyMeta.d.ts +34 -0
- package/dist/src/vite/storyMeta.d.ts.map +1 -0
- package/dist/src/vite/storyMeta.js +74 -0
- package/dist/src/vite/storyMeta.js.map +1 -0
- package/dist/src/vite/typeScriptPieces.d.ts +23 -0
- package/dist/src/vite/typeScriptPieces.d.ts.map +1 -0
- package/dist/src/vite/typeScriptPieces.js +236 -0
- package/dist/src/vite/typeScriptPieces.js.map +1 -0
- package/package.json +202 -3
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What `forgebook-docs` reads from a package: its exports, their TSDoc and types, its stories, its Sass modules and
|
|
3
|
+
* style sheets.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* The package's `exports` (the source map, `./src/…`) say what is public; its `*.stories.tsx` say which components
|
|
7
|
+
* exist and where they sit. Components are read with the catalogue's extractor (the props panel's data), modules with
|
|
8
|
+
* TypeScript 6, Sass modules and style sheets from their text. The development-only `./stories` export is left out.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { globSync, readFileSync } from "node:fs";
|
|
13
|
+
import { join, resolve } from "node:path";
|
|
14
|
+
import { autoTitle, STORY_FILE } from "../../src/vite/autoTitle.js";
|
|
15
|
+
import { indexStoryFile } from "../../src/vite/indexStoryFile.js";
|
|
16
|
+
import { moduleDocs } from "./moduleDocs.js";
|
|
17
|
+
import { sassMembers, styleSheetSummary } from "./sassDocs.js";
|
|
18
|
+
/** The subpath that is never published: the package's stories for a catalogue. */
|
|
19
|
+
const STORIES_SUBPATH = "./stories";
|
|
20
|
+
/** A package's `exports`, as written: subpath → source. */
|
|
21
|
+
const sourceExports = (manifest) => {
|
|
22
|
+
if (typeof manifest !== "object" || manifest === null || !("exports" in manifest))
|
|
23
|
+
return {};
|
|
24
|
+
const exports = manifest.exports;
|
|
25
|
+
if (typeof exports !== "object" || exports === null)
|
|
26
|
+
return {};
|
|
27
|
+
return Object.fromEntries(Object.entries(exports).filter((entry) => typeof entry[1] === "string"));
|
|
28
|
+
};
|
|
29
|
+
/** The components of the package's story files, read by the framework's extractor. */
|
|
30
|
+
const collectComponents = (packageDir, exports, problems, extractStoryComponent) => {
|
|
31
|
+
const components = [];
|
|
32
|
+
const componentFiles = new Set();
|
|
33
|
+
const storyFiles = globSync("**/*.stories.*", { cwd: packageDir })
|
|
34
|
+
.filter((file) => STORY_FILE.test(file))
|
|
35
|
+
.filter((file) => !file.split("/").some((segment) => segment === "node_modules" || segment === "dist"))
|
|
36
|
+
.sort();
|
|
37
|
+
for (const relative of storyFiles) {
|
|
38
|
+
const file = join(packageDir, relative);
|
|
39
|
+
// a meta without a title is placed by its path from the package's folder: the catalogue's patterns are not known
|
|
40
|
+
const title = autoTitle("", relative);
|
|
41
|
+
const options = title === undefined ? {} : { autoTitle: title };
|
|
42
|
+
const index = indexStoryFile(file, readFileSync(file, "utf8"), options);
|
|
43
|
+
const component = extractStoryComponent(file);
|
|
44
|
+
if (typeof index === "string" || typeof component === "string") {
|
|
45
|
+
problems.push(typeof index === "string" ? index : `${relative}: ${String(component)}`);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (!("file" in component))
|
|
49
|
+
continue;
|
|
50
|
+
const subpath = Object.entries(exports).find(([, source]) => resolve(packageDir, source) === component.file)?.[0];
|
|
51
|
+
// a component no subpath exports is a story's own (a foundations page), not part of the package
|
|
52
|
+
if (subpath === undefined)
|
|
53
|
+
continue;
|
|
54
|
+
componentFiles.add(component.file);
|
|
55
|
+
components.push({
|
|
56
|
+
title: index.title,
|
|
57
|
+
subpath,
|
|
58
|
+
docs: component.docs,
|
|
59
|
+
stories: index.stories.map((story) => story.name ?? story.exportName)
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return { components, componentFiles };
|
|
63
|
+
};
|
|
64
|
+
/** Reads one export: a Sass module, a style sheet or a module. */
|
|
65
|
+
const readExport = (subpath, source, file) => {
|
|
66
|
+
if (source.startsWith("./src/scss/")) {
|
|
67
|
+
return { kind: "sass", docs: { subpath, members: sassMembers(readFileSync(file, "utf8")) } };
|
|
68
|
+
}
|
|
69
|
+
if (subpath.endsWith(".css")) {
|
|
70
|
+
return { kind: "sheet", docs: { subpath, summary: styleSheetSummary(readFileSync(file, "utf8")) } };
|
|
71
|
+
}
|
|
72
|
+
if (!/\.tsx?$/.test(source))
|
|
73
|
+
return { kind: "other" };
|
|
74
|
+
const docs = moduleDocs(file);
|
|
75
|
+
return typeof docs === "string"
|
|
76
|
+
? { kind: "problem", message: docs }
|
|
77
|
+
: { kind: "module", docs: { subpath, exports: docs } };
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Reads a package for its catalogue.
|
|
81
|
+
*
|
|
82
|
+
* @param packageDir - the package's folder.
|
|
83
|
+
* @param extractStoryComponent - the framework's reading of a story file's component (its docs module).
|
|
84
|
+
*/
|
|
85
|
+
export const collectDocs = (packageDir, extractStoryComponent) => {
|
|
86
|
+
const manifest = JSON.parse(readFileSync(join(packageDir, "package.json"), "utf8"));
|
|
87
|
+
const packageName = typeof manifest === "object" &&
|
|
88
|
+
manifest !== null &&
|
|
89
|
+
"name" in manifest &&
|
|
90
|
+
typeof manifest.name === "string"
|
|
91
|
+
? manifest.name
|
|
92
|
+
: packageDir;
|
|
93
|
+
const exports = sourceExports(manifest);
|
|
94
|
+
const problems = [];
|
|
95
|
+
const { components, componentFiles } = collectComponents(packageDir, exports, problems, extractStoryComponent);
|
|
96
|
+
const modules = [];
|
|
97
|
+
const sassModules = [];
|
|
98
|
+
const styleSheets = [];
|
|
99
|
+
for (const [subpath, source] of Object.entries(exports)) {
|
|
100
|
+
const file = resolve(packageDir, source);
|
|
101
|
+
if (subpath === STORIES_SUBPATH || componentFiles.has(file))
|
|
102
|
+
continue;
|
|
103
|
+
const entry = readExport(subpath, source, file);
|
|
104
|
+
if (entry.kind === "sass")
|
|
105
|
+
sassModules.push(entry.docs);
|
|
106
|
+
if (entry.kind === "sheet")
|
|
107
|
+
styleSheets.push(entry.docs);
|
|
108
|
+
if (entry.kind === "module")
|
|
109
|
+
modules.push(entry.docs);
|
|
110
|
+
if (entry.kind === "problem")
|
|
111
|
+
problems.push(entry.message);
|
|
112
|
+
}
|
|
113
|
+
return { data: { packageName, components, modules, sassModules, styleSheets }, problems };
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=collectDocs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectDocs.js","sourceRoot":"","sources":["../../../bin/forgebook-docs/collectDocs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forgebook-docs.d.mts","sourceRoot":"","sources":["../../../bin/forgebook-docs/forgebook-docs.mts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
3
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
4
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
5
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
return path;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* The `forgebook-docs` command: writes a package's `CATALOG.md` from its exports, their TSDoc and its stories, or
|
|
12
|
+
* checks that it is up to date.
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* Usage: `forgebook-docs --help` (generated by `@ensiria/cli-kit`). A package with stories declares
|
|
16
|
+
* `forgebook` as a development dependency and runs it on itself (`"catalog": "forgebook-docs --package ."`;
|
|
17
|
+
* D-62, D-67).
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import { createRequire } from "node:module";
|
|
22
|
+
import { join, relative, resolve } from "node:path";
|
|
23
|
+
import { pathToFileURL } from "node:url";
|
|
24
|
+
import { readFileSafe, writeIfChanged } from "@ensiria/cli-kit/files";
|
|
25
|
+
import { plural } from "@ensiria/cli-kit/format";
|
|
26
|
+
import { defineScript, ScriptError } from "@ensiria/cli-kit/script";
|
|
27
|
+
import { isDocsModule } from "../../src/vite/adapter.js";
|
|
28
|
+
import { catalogueMarkdown } from "./catalogueMarkdown.js";
|
|
29
|
+
import { collectDocs } from "./collectDocs.js";
|
|
30
|
+
/** The command, as the hints print it. */
|
|
31
|
+
const COMMAND = "forgebook-docs";
|
|
32
|
+
/**
|
|
33
|
+
* The framework's reading of a story file's component: the docs module of `@forgebook/<framework>`, resolved from the
|
|
34
|
+
* package, which declares that framework package.
|
|
35
|
+
*
|
|
36
|
+
* @param packageDir - the package's folder.
|
|
37
|
+
* @param framework - the framework's name (`react`).
|
|
38
|
+
* @throws a `ScriptError` when the package cannot resolve it or the module is not a docs module.
|
|
39
|
+
*/
|
|
40
|
+
const extractorOf = async (packageDir, framework) => {
|
|
41
|
+
const specifier = `@forgebook/${framework}/docs`;
|
|
42
|
+
let file;
|
|
43
|
+
try {
|
|
44
|
+
file = createRequire(join(packageDir, "package.json")).resolve(specifier);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
throw new ScriptError(`${specifier} is not installed in this package`, {
|
|
48
|
+
hint: `Add @forgebook/${framework} to its devDependencies`
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const module = await import(__rewriteRelativeImportExtension(pathToFileURL(file).href));
|
|
52
|
+
if (!isDocsModule(module))
|
|
53
|
+
throw new ScriptError(`${specifier} exports no extractStoryComponent`);
|
|
54
|
+
return module.extractStoryComponent;
|
|
55
|
+
};
|
|
56
|
+
await defineScript({
|
|
57
|
+
name: "forgebook-docs",
|
|
58
|
+
command: COMMAND,
|
|
59
|
+
summary: "Write a package's CATALOG.md from its exports, their TSDoc and its stories.",
|
|
60
|
+
icon: "docs",
|
|
61
|
+
json: true,
|
|
62
|
+
description: "Reads the package's exports (components from its stories, modules with TypeScript 6, Sass modules and style sheets from their text) and writes CATALOG.md in its folder: one dense line per entry, for agents to read before writing a component, hook or helper.",
|
|
63
|
+
options: {
|
|
64
|
+
package: {
|
|
65
|
+
type: "string",
|
|
66
|
+
required: true,
|
|
67
|
+
valueName: "folder",
|
|
68
|
+
description: "The package's folder (packages/design-system)."
|
|
69
|
+
},
|
|
70
|
+
framework: {
|
|
71
|
+
type: "string",
|
|
72
|
+
default: "react",
|
|
73
|
+
valueName: "name",
|
|
74
|
+
description: "The framework the stories are written for: its package, @forgebook/<name>, reads the components' props."
|
|
75
|
+
},
|
|
76
|
+
check: {
|
|
77
|
+
type: "boolean",
|
|
78
|
+
short: "c",
|
|
79
|
+
description: "Change nothing; fail when CATALOG.md is stale or a file cannot be read (CI)."
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
examples: [
|
|
83
|
+
{ command: `${COMMAND} --package .`, description: "Rewrite the CATALOG.md of the package you are in." },
|
|
84
|
+
{ command: `${COMMAND} --package . --check`, description: "Check it in CI." }
|
|
85
|
+
],
|
|
86
|
+
run: async ({ options, log }) => {
|
|
87
|
+
const packageDir = resolve(options.package);
|
|
88
|
+
const file = join(packageDir, "CATALOG.md");
|
|
89
|
+
const shownFile = relative(process.cwd(), file);
|
|
90
|
+
const { data, problems } = collectDocs(packageDir, await extractorOf(packageDir, options.framework));
|
|
91
|
+
for (const problem of problems)
|
|
92
|
+
log.error(problem);
|
|
93
|
+
const text = catalogueMarkdown(data);
|
|
94
|
+
const counts = {
|
|
95
|
+
components: data.components.length,
|
|
96
|
+
modules: data.modules.length,
|
|
97
|
+
sassModules: data.sassModules.length,
|
|
98
|
+
styleSheets: data.styleSheets.length
|
|
99
|
+
};
|
|
100
|
+
if (options.check) {
|
|
101
|
+
if (problems.length > 0)
|
|
102
|
+
throw new ScriptError(`${plural(problems.length, "file")} could not be read`);
|
|
103
|
+
if (readFileSafe(file) !== text)
|
|
104
|
+
throw new ScriptError(`${shownFile} is stale`, {
|
|
105
|
+
hint: `Run ${COMMAND} --package ${relative(process.cwd(), packageDir)}`
|
|
106
|
+
});
|
|
107
|
+
log.success(`${shownFile} is up to date`);
|
|
108
|
+
return { status: "valid", file: shownFile, counts, problems };
|
|
109
|
+
}
|
|
110
|
+
const isWritten = writeIfChanged(file, text);
|
|
111
|
+
log.success(`${shownFile} ${isWritten ? "written" : "already up to date"}`);
|
|
112
|
+
return { status: isWritten ? "written" : "up-to-date", file: shownFile, counts, problems };
|
|
113
|
+
}
|
|
114
|
+
}).run();
|
|
115
|
+
//# sourceMappingURL=forgebook-docs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forgebook-docs.mjs","sourceRoot":"","sources":["../../../bin/forgebook-docs/forgebook-docs.mts"],"names":[],"mappings":";;;;;;;;;AACA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAA8B,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,0CAA0C;AAC1C,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,KAAK,EAAE,UAAkB,EAAE,SAAiB,EAAkC,EAAE;IAClG,MAAM,SAAS,GAAG,cAAc,SAAS,OAAO,CAAC;IACjD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,GAAG,SAAS,mCAAmC,EAAE;YACrE,IAAI,EAAE,kBAAkB,SAAS,yBAAyB;SAC3D,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAY,MAAM,MAAM,kCAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAC,CAAC;IAC/D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,WAAW,CAAC,GAAG,SAAS,mCAAmC,CAAC,CAAC;IAClG,OAAO,MAAM,CAAC,qBAAqB,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,YAAY,CAAC;IACjB,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,6EAA6E;IACtF,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,IAAI;IACV,WAAW,EACT,mQAAmQ;IACrQ,OAAO,EAAE;QACP,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,gDAAgD;SAC9D;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,MAAM;YACjB,WAAW,EACT,yGAAyG;SAC5G;QACD,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,8EAA8E;SAC5F;KACF;IACD,QAAQ,EAAE;QACR,EAAE,OAAO,EAAE,GAAG,OAAO,cAAc,EAAE,WAAW,EAAE,mDAAmD,EAAE;QACvG,EAAE,OAAO,EAAE,GAAG,OAAO,sBAAsB,EAAE,WAAW,EAAE,iBAAiB,EAAE;KAC9E;IACD,GAAG,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAgC,EAAE;QAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAChD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACrG,KAAK,MAAM,OAAO,IAAI,QAAQ;YAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG;YACb,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;YACpC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;SACrC,CAAC;QACF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,IAAI,WAAW,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACvG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI;gBAC7B,MAAM,IAAI,WAAW,CAAC,GAAG,SAAS,WAAW,EAAE;oBAC7C,IAAI,EAAE,OAAO,OAAO,cAAc,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,EAAE;iBACxE,CAAC,CAAC;YACL,GAAG,CAAC,OAAO,CAAC,GAAG,SAAS,gBAAgB,CAAC,CAAC;YAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAChE,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,GAAG,CAAC,OAAO,CAAC,GAAG,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC7F,CAAC;CACF,CAAC,CAAC,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ExportDocs } from "./catalogueDocs.types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* The exports of a module.
|
|
4
|
+
*
|
|
5
|
+
* @param file - the module's absolute path.
|
|
6
|
+
* @returns its exports in the module's order, or a message saying why it cannot be read.
|
|
7
|
+
*/
|
|
8
|
+
export declare const moduleDocs: (file: string) => ExportDocs[] | string;
|
|
9
|
+
//# sourceMappingURL=moduleDocs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moduleDocs.d.ts","sourceRoot":"","sources":["../../../bin/forgebook-docs/moduleDocs.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAkC3D;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,UAAU,EAAE,GAAG,MAWxD,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A module's exports with their kind, parameters and summary, read with TypeScript 6's compiler API.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import ts from "typescript-6";
|
|
7
|
+
import { programFor, summaryOf } from "../../src/vite/docsProgram.js";
|
|
8
|
+
/**
|
|
9
|
+
* A parameter's own name: a destructured one (`({ name, ...props })`, which TypeScript calls `__0`) takes the name
|
|
10
|
+
* its `@param` tag gives it, or `{…}` without one.
|
|
11
|
+
*/
|
|
12
|
+
const ownName = (parameter, declaration) => {
|
|
13
|
+
if (ts.isIdentifier(declaration.name))
|
|
14
|
+
return parameter.getName();
|
|
15
|
+
const tag = ts.getJSDocParameterTags(declaration)[0];
|
|
16
|
+
return tag === undefined ? "{…}" : tag.name.getText();
|
|
17
|
+
};
|
|
18
|
+
/** A parameter's name as the catalogue writes it: `...rest`, `name?`, `name`. */
|
|
19
|
+
const parameterName = (parameter) => {
|
|
20
|
+
const declaration = parameter.valueDeclaration;
|
|
21
|
+
if (declaration === undefined || !ts.isParameter(declaration))
|
|
22
|
+
return parameter.getName();
|
|
23
|
+
const name = ownName(parameter, declaration);
|
|
24
|
+
if (declaration.dotDotDotToken !== undefined)
|
|
25
|
+
return `...${name}`;
|
|
26
|
+
if (declaration.questionToken !== undefined || declaration.initializer !== undefined)
|
|
27
|
+
return `${name}?`;
|
|
28
|
+
return name;
|
|
29
|
+
};
|
|
30
|
+
/** One export's docs. */
|
|
31
|
+
const exportDocs = (exported, checker, location) => {
|
|
32
|
+
const symbol = exported.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(exported) : exported;
|
|
33
|
+
const name = exported.getName();
|
|
34
|
+
const summary = summaryOf(symbol, checker);
|
|
35
|
+
if (symbol.flags & (ts.SymbolFlags.TypeAlias | ts.SymbolFlags.Interface))
|
|
36
|
+
return { name, kind: "type", summary };
|
|
37
|
+
const [signature] = checker.getTypeOfSymbolAtLocation(symbol, location).getCallSignatures();
|
|
38
|
+
if (signature === undefined)
|
|
39
|
+
return { name, kind: "value", summary };
|
|
40
|
+
return { name, kind: "function", parameters: signature.parameters.map(parameterName), summary };
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* The exports of a module.
|
|
44
|
+
*
|
|
45
|
+
* @param file - the module's absolute path.
|
|
46
|
+
* @returns its exports in the module's order, or a message saying why it cannot be read.
|
|
47
|
+
*/
|
|
48
|
+
export const moduleDocs = (file) => {
|
|
49
|
+
const program = programFor(file);
|
|
50
|
+
if (typeof program === "string")
|
|
51
|
+
return program;
|
|
52
|
+
const source = program.program.getSourceFile(file);
|
|
53
|
+
const moduleSymbol = source === undefined ? undefined : program.checker.getSymbolAtLocation(source);
|
|
54
|
+
if (source === undefined || moduleSymbol === undefined)
|
|
55
|
+
return `${file} has no exports`;
|
|
56
|
+
const position = (symbol) => symbol.declarations?.[0]?.getStart() ?? 0;
|
|
57
|
+
return program.checker
|
|
58
|
+
.getExportsOfModule(moduleSymbol)
|
|
59
|
+
.sort((left, right) => position(left) - position(right))
|
|
60
|
+
.map((symbol) => exportDocs(symbol, program.checker, source));
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=moduleDocs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moduleDocs.js","sourceRoot":"","sources":["../../../bin/forgebook-docs/moduleDocs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The mixins and functions of a public Sass module, with the first line of their `///` comment, and the summary of a
|
|
3
|
+
* style sheet: read from the text, no Sass compiler needed.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import type { SassMemberDocs } from "./catalogueDocs.types.ts";
|
|
8
|
+
/**
|
|
9
|
+
* The documented members of a Sass module.
|
|
10
|
+
*
|
|
11
|
+
* @param text - the module's source.
|
|
12
|
+
*/
|
|
13
|
+
export declare const sassMembers: (text: string) => SassMemberDocs[];
|
|
14
|
+
/**
|
|
15
|
+
* The first sentence of a style sheet's leading `//` comment.
|
|
16
|
+
*
|
|
17
|
+
* @param text - the style sheet's source.
|
|
18
|
+
*/
|
|
19
|
+
export declare const styleSheetSummary: (text: string) => string;
|
|
20
|
+
//# sourceMappingURL=sassDocs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sassDocs.d.ts","sourceRoot":"","sources":["../../../bin/forgebook-docs/sassDocs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK/D;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,cAAc,EA2BxD,CAAC;AAyBF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAShD,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** A mixin or function declaration and its parameter list. */
|
|
2
|
+
const MEMBER = /^@(mixin|function)\s+([\w-]+)\s*(?:\(([^)]*)\))?/;
|
|
3
|
+
/**
|
|
4
|
+
* The documented members of a Sass module.
|
|
5
|
+
*
|
|
6
|
+
* @param text - the module's source.
|
|
7
|
+
*/
|
|
8
|
+
export const sassMembers = (text) => {
|
|
9
|
+
const members = [];
|
|
10
|
+
let comment = [];
|
|
11
|
+
for (const line of text.split("\n")) {
|
|
12
|
+
const trimmed = line.trim();
|
|
13
|
+
if (trimmed.startsWith("///")) {
|
|
14
|
+
comment.push(trimmed.slice(3).trim());
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
// a declaration may span lines: its first line is enough for the name, the parameters come from the whole text
|
|
18
|
+
const match = MEMBER.exec(trimmed);
|
|
19
|
+
if (match !== null) {
|
|
20
|
+
const [, kind = "mixin", name = ""] = match;
|
|
21
|
+
const parameterText = parametersAfter(text, name);
|
|
22
|
+
members.push({
|
|
23
|
+
kind: kind === "function" ? "function" : "mixin",
|
|
24
|
+
name,
|
|
25
|
+
parameters: parameterText
|
|
26
|
+
.split(",")
|
|
27
|
+
.map((parameter) => parameter.split(":")[0]?.trim() ?? "")
|
|
28
|
+
.filter((parameter) => parameter.startsWith("$")),
|
|
29
|
+
summary: summaryOfComment(comment)
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
comment = [];
|
|
33
|
+
}
|
|
34
|
+
return members;
|
|
35
|
+
};
|
|
36
|
+
/** A `///` comment's summary: its lines up to the first blank line or tag, joined. */
|
|
37
|
+
const summaryOfComment = (comment) => {
|
|
38
|
+
const end = comment.findIndex((entry) => entry === "" || entry.startsWith("@"));
|
|
39
|
+
return comment
|
|
40
|
+
.slice(0, end === -1 ? comment.length : end)
|
|
41
|
+
.join(" ")
|
|
42
|
+
.trim();
|
|
43
|
+
};
|
|
44
|
+
/** The parameter list of a declaration, across lines. */
|
|
45
|
+
const parametersAfter = (text, name) => {
|
|
46
|
+
const start = text.search(new RegExp(`@(?:mixin|function)\\s+${name}\\s*\\(`));
|
|
47
|
+
if (start === -1)
|
|
48
|
+
return "";
|
|
49
|
+
const open = text.indexOf("(", start);
|
|
50
|
+
let depth = 0;
|
|
51
|
+
for (let index = open; index < text.length; index++) {
|
|
52
|
+
if (text[index] === "(")
|
|
53
|
+
depth++;
|
|
54
|
+
if (text[index] === ")")
|
|
55
|
+
depth--;
|
|
56
|
+
if (depth === 0)
|
|
57
|
+
return text.slice(open + 1, index);
|
|
58
|
+
}
|
|
59
|
+
return "";
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* The first sentence of a style sheet's leading `//` comment.
|
|
63
|
+
*
|
|
64
|
+
* @param text - the style sheet's source.
|
|
65
|
+
*/
|
|
66
|
+
export const styleSheetSummary = (text) => {
|
|
67
|
+
const lines = [];
|
|
68
|
+
for (const line of text.split("\n")) {
|
|
69
|
+
if (!line.startsWith("//"))
|
|
70
|
+
break;
|
|
71
|
+
lines.push(line.slice(2).trim());
|
|
72
|
+
}
|
|
73
|
+
const comment = lines.join(" ");
|
|
74
|
+
const end = comment.search(/\.(\s|$)/);
|
|
75
|
+
return end === -1 ? comment : comment.slice(0, end + 1);
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=sassDocs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sassDocs.js","sourceRoot":"","sources":["../../../bin/forgebook-docs/sassDocs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forgebook-texts.d.mts","sourceRoot":"","sources":["../../../bin/forgebook-texts/forgebook-texts.mts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* The `forgebook-texts` command: checks a package's story texts against the keys its stories use, and lists what each
|
|
4
|
+
* language still has to translate.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* Usage: `forgebook-texts --help` (generated by `@ensiria/cli-kit`). A package with stories runs it on itself
|
|
8
|
+
* (`"texts": "forgebook-texts --package ."`), with `--check` in CI.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { globSync, readFileSync } from "node:fs";
|
|
13
|
+
import { basename, join, relative, resolve } from "node:path";
|
|
14
|
+
import { plural } from "@ensiria/cli-kit/format";
|
|
15
|
+
import { defineScript, ScriptError } from "@ensiria/cli-kit/script";
|
|
16
|
+
import { storyTextsReport } from "./storyTextsReport.js";
|
|
17
|
+
/** The command, as the hints print it. */
|
|
18
|
+
const COMMAND = "forgebook-texts";
|
|
19
|
+
/** Where a package's story files and fixtures are, relative to it. */
|
|
20
|
+
const SOURCE_PATTERNS = ["src/**/*.stories.tsx", "stories/**/*.{ts,tsx}"];
|
|
21
|
+
/** A locale file's table, read as JSON. */
|
|
22
|
+
const readTable = (file) => {
|
|
23
|
+
const value = JSON.parse(readFileSync(file, "utf8"));
|
|
24
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
25
|
+
throw new ScriptError(`${file} is not an object of texts`);
|
|
26
|
+
}
|
|
27
|
+
const entries = Object.entries(value);
|
|
28
|
+
const bad = entries.find(([, text]) => typeof text !== "string");
|
|
29
|
+
if (bad !== undefined)
|
|
30
|
+
throw new ScriptError(`${file}: "${bad[0]}" is not a text`);
|
|
31
|
+
return Object.fromEntries(entries.map(([key, text]) => [key, String(text)]));
|
|
32
|
+
};
|
|
33
|
+
await defineScript({
|
|
34
|
+
name: "forgebook-texts",
|
|
35
|
+
command: COMMAND,
|
|
36
|
+
summary: "Check a package's story texts and list what each language still has to translate.",
|
|
37
|
+
icon: "check",
|
|
38
|
+
json: true,
|
|
39
|
+
description: 'Reads the keys the stories use (every text("key") in its story files and story fixtures) and the locale files (stories/locales/<id>.json by default, en holding every key), and reports keys missing in English, English keys no story uses, and, for each other language, the texts it lacks with their English, ready to translate.',
|
|
40
|
+
options: {
|
|
41
|
+
package: {
|
|
42
|
+
type: "string",
|
|
43
|
+
required: true,
|
|
44
|
+
valueName: "folder",
|
|
45
|
+
description: "The package's folder (packages/design-system)."
|
|
46
|
+
},
|
|
47
|
+
locales: {
|
|
48
|
+
type: "string",
|
|
49
|
+
default: "stories/locales",
|
|
50
|
+
valueName: "folder",
|
|
51
|
+
description: "The locale files' folder, relative to the package."
|
|
52
|
+
},
|
|
53
|
+
check: {
|
|
54
|
+
type: "boolean",
|
|
55
|
+
short: "c",
|
|
56
|
+
description: "Fail when a key is missing in English or an English key is unused (CI); untranslated texts do not fail."
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
examples: [
|
|
60
|
+
{ command: `${COMMAND} --package .`, description: "Report the package's story texts." },
|
|
61
|
+
{
|
|
62
|
+
command: `${COMMAND} --package . --json`,
|
|
63
|
+
description: "The texts each language lacks, for a translator."
|
|
64
|
+
},
|
|
65
|
+
{ command: `${COMMAND} --package . --check`, description: "Check them in CI." }
|
|
66
|
+
],
|
|
67
|
+
run: ({ options, log }) => {
|
|
68
|
+
const packageDir = resolve(options.package);
|
|
69
|
+
const localesDir = join(packageDir, options.locales);
|
|
70
|
+
const sources = SOURCE_PATTERNS.flatMap((pattern) => globSync(pattern, { cwd: packageDir })).map((file) => readFileSync(join(packageDir, file), "utf8"));
|
|
71
|
+
const locales = Object.fromEntries(globSync("*.json", { cwd: localesDir }).map((file) => [
|
|
72
|
+
basename(file, ".json"),
|
|
73
|
+
readTable(join(localesDir, file))
|
|
74
|
+
]));
|
|
75
|
+
if (locales["en"] === undefined && sources.length > 0) {
|
|
76
|
+
log.warn(`${relative(process.cwd(), localesDir)}/en.json does not exist: no story text is translatable yet`);
|
|
77
|
+
}
|
|
78
|
+
const report = storyTextsReport(sources, locales);
|
|
79
|
+
for (const key of report.missing)
|
|
80
|
+
log.error(`missing in en.json: ${key}`);
|
|
81
|
+
for (const key of report.unused)
|
|
82
|
+
log.warn(`unused in en.json: ${key}`);
|
|
83
|
+
for (const [language, texts] of Object.entries(report.untranslated)) {
|
|
84
|
+
if (texts.length > 0)
|
|
85
|
+
log.info(`${language}: ${plural(texts.length, "text")} to translate`);
|
|
86
|
+
}
|
|
87
|
+
if (options.check && (report.missing.length > 0 || report.unused.length > 0)) {
|
|
88
|
+
throw new ScriptError(`${plural(report.missing.length, "missing key")}, ${plural(report.unused.length, "unused key")}`, { hint: `Fix ${relative(process.cwd(), join(localesDir, "en.json"))} or the stories` });
|
|
89
|
+
}
|
|
90
|
+
log.success(`${plural(report.used, "key")} used, every one in en.json`);
|
|
91
|
+
return report;
|
|
92
|
+
}
|
|
93
|
+
}).run();
|
|
94
|
+
//# sourceMappingURL=forgebook-texts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forgebook-texts.mjs","sourceRoot":"","sources":["../../../bin/forgebook-texts/forgebook-texts.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The logic of `forgebook-texts`: the keys the stories use, read from their source, set against the package's locale
|
|
3
|
+
* files.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* A story names a text with a string literal, `text("key")` (from `useStoryText()` or `context.text`) or
|
|
7
|
+
* `storyText("key")` in its args, so every key is found in the source without running it; a key built at run time is not seen, which the format forbids. Pure:
|
|
8
|
+
* texts in, report out.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import type { StoryTextsReport } from "./storyTextsReport.types.ts";
|
|
13
|
+
/**
|
|
14
|
+
* The keys a source text uses.
|
|
15
|
+
*
|
|
16
|
+
* @param source - a story file's or a fixture's text.
|
|
17
|
+
*/
|
|
18
|
+
export declare const usedKeys: (source: string) => string[];
|
|
19
|
+
/**
|
|
20
|
+
* The report of a package's story texts.
|
|
21
|
+
*
|
|
22
|
+
* @param sources - the text of every story file and fixture.
|
|
23
|
+
* @param locales - the locale files by language id; `en` is the one every key is in.
|
|
24
|
+
*/
|
|
25
|
+
export declare const storyTextsReport: (sources: readonly string[], locales: Readonly<Record<string, Readonly<Record<string, string>>>>) => StoryTextsReport;
|
|
26
|
+
//# sourceMappingURL=storyTextsReport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storyTextsReport.d.ts","sourceRoot":"","sources":["../../../bin/forgebook-texts/storyTextsReport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,6BAA6B,CAAC;AAKtF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,KAAG,MAAM,EACgB,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,SAAS,MAAM,EAAE,EAC1B,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAClE,gBAkBF,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** A call naming a text with a literal key: `text("key")`, `text('key', …)` or an arg's `storyText("key")`. */
|
|
2
|
+
const TEXT_CALL = /\b(?:text|storyText)\(\s*(["'])([^"'\\]+)\1/g;
|
|
3
|
+
/**
|
|
4
|
+
* The keys a source text uses.
|
|
5
|
+
*
|
|
6
|
+
* @param source - a story file's or a fixture's text.
|
|
7
|
+
*/
|
|
8
|
+
export const usedKeys = (source) => [...source.matchAll(TEXT_CALL)].map((match) => match[2] ?? "");
|
|
9
|
+
/**
|
|
10
|
+
* The report of a package's story texts.
|
|
11
|
+
*
|
|
12
|
+
* @param sources - the text of every story file and fixture.
|
|
13
|
+
* @param locales - the locale files by language id; `en` is the one every key is in.
|
|
14
|
+
*/
|
|
15
|
+
export const storyTextsReport = (sources, locales) => {
|
|
16
|
+
const used = new Set(sources.flatMap(usedKeys));
|
|
17
|
+
const base = locales["en"] ?? {};
|
|
18
|
+
const untranslated = {};
|
|
19
|
+
for (const [language, table] of Object.entries(locales)) {
|
|
20
|
+
if (language === "en")
|
|
21
|
+
continue;
|
|
22
|
+
untranslated[language] = Object.entries(base)
|
|
23
|
+
.filter(([key]) => table[key] === undefined)
|
|
24
|
+
.map(([key, text]) => ({ key, text }));
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
used: used.size,
|
|
28
|
+
missing: [...used].filter((key) => base[key] === undefined).sort(),
|
|
29
|
+
unused: Object.keys(base)
|
|
30
|
+
.filter((key) => !used.has(key))
|
|
31
|
+
.sort(),
|
|
32
|
+
untranslated
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=storyTextsReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storyTextsReport.js","sourceRoot":"","sources":["../../../bin/forgebook-texts/storyTextsReport.ts"],"names":[],"mappings":"AAaA,+GAA+G;AAC/G,MAAM,SAAS,GAAG,8CAA8C,CAAC;AAEjE;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAY,EAAE,CACnD,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAA0B,EAC1B,OAAmE,EACjD,EAAE;IACpB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,YAAY,GAAuC,EAAE,CAAC;IAC5D,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,IAAI,QAAQ,KAAK,IAAI;YAAE,SAAS;QAChC,YAAY,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aAC1C,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;aAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,EAAE;QAClE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;aACtB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC/B,IAAI,EAAE;QACT,YAAY;KACb,CAAC;AACJ,CAAC,CAAC"}
|