livemark 0.7.2 → 0.9.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 +115 -4
- package/package.json +15 -14
- package/source/actions/changelog/build.ts +245 -0
- package/source/actions/changelog/build.unit.ts +69 -0
- package/source/actions/config/define.ts +11 -0
- package/source/actions/config/define.unit.ts +33 -0
- package/source/actions/config/load.ts +22 -0
- package/source/actions/config/load.unit.ts +30 -0
- package/source/commands/build.ts +21 -0
- package/source/commands/escape.ts +77 -0
- package/source/commands/preview.ts +25 -0
- package/source/commands/start.ts +26 -0
- package/{build/website → source}/components/Article.tsx +44 -44
- package/{build/website → source}/components/Callout.tsx +1 -1
- package/{build/website → source}/components/Layout.tsx +3 -14
- package/{build/website → source}/components/LinkButton.tsx +1 -1
- package/{build/website → source}/components/PageToolbar.tsx +21 -8
- package/{build/website → source}/components/Section.tsx +1 -1
- package/{build/website → source}/components/SectionHeader.tsx +1 -1
- package/{build/website/components/MiniSidebar.tsx → source/components/Sidebar.tsx} +21 -5
- package/{build/website/components/Sidebar.tsx → source/components/SidebarArticles.tsx} +22 -55
- package/source/components/SidebarPosts.tsx +129 -0
- package/source/components/SidebarReleases.tsx +85 -0
- package/{build/website → source}/content-collections.ts +12 -3
- package/{build/website → source}/elements/accordion.tsx +1 -1
- package/{build/website → source}/elements/alert-dialog.tsx +1 -1
- package/{build/website → source}/elements/alert.tsx +1 -1
- package/{build/website → source}/elements/aspect-ratio.tsx +1 -1
- package/{build/website → source}/elements/avatar.tsx +1 -1
- package/{build/website → source}/elements/badge.tsx +1 -1
- package/{build/website → source}/elements/breadcrumb.tsx +1 -1
- package/{build/website → source}/elements/button-group.tsx +1 -1
- package/{build/website → source}/elements/button.tsx +1 -1
- package/{build/website → source}/elements/calendar.tsx +1 -1
- package/{build/website → source}/elements/card.tsx +1 -1
- package/{build/website → source}/elements/carousel.tsx +1 -1
- package/{build/website → source}/elements/chart.tsx +1 -1
- package/{build/website → source}/elements/checkbox.tsx +1 -1
- package/{build/website → source}/elements/command.tsx +1 -1
- package/{build/website → source}/elements/context-menu.tsx +1 -1
- package/{build/website → source}/elements/dialog.tsx +1 -1
- package/{build/website → source}/elements/drawer.tsx +1 -1
- package/{build/website → source}/elements/dropdown-menu.tsx +1 -1
- package/{build/website → source}/elements/empty.tsx +1 -1
- package/{build/website → source}/elements/field.tsx +1 -1
- package/{build/website → source}/elements/hover-card.tsx +1 -1
- package/{build/website → source}/elements/input-group.tsx +1 -1
- package/{build/website → source}/elements/input-otp.tsx +1 -1
- package/{build/website → source}/elements/input.tsx +1 -1
- package/{build/website → source}/elements/item.tsx +1 -1
- package/{build/website → source}/elements/kbd.tsx +1 -1
- package/{build/website → source}/elements/label.tsx +1 -1
- package/{build/website → source}/elements/menubar.tsx +1 -1
- package/{build/website → source}/elements/native-select.tsx +1 -1
- package/{build/website → source}/elements/navigation-menu.tsx +1 -1
- package/{build/website → source}/elements/pagination.tsx +1 -1
- package/{build/website → source}/elements/popover.tsx +1 -1
- package/{build/website → source}/elements/progress.tsx +1 -1
- package/{build/website → source}/elements/radio-group.tsx +1 -1
- package/{build/website → source}/elements/resizable.tsx +1 -1
- package/{build/website → source}/elements/scroll-area.tsx +1 -1
- package/{build/website → source}/elements/select.tsx +1 -1
- package/{build/website → source}/elements/separator.tsx +1 -1
- package/{build/website → source}/elements/sheet.tsx +1 -1
- package/{build/website → source}/elements/sidebar.tsx +7 -4
- package/{build/website → source}/elements/skeleton.tsx +1 -1
- package/{build/website → source}/elements/slider.tsx +1 -1
- package/{build/website → source}/elements/spinner.tsx +1 -1
- package/{build/website → source}/elements/switch.tsx +1 -1
- package/{build/website → source}/elements/table.tsx +1 -1
- package/{build/website → source}/elements/tabs.tsx +1 -1
- package/{build/website → source}/elements/textarea.tsx +1 -1
- package/{build/website → source}/elements/toggle-group.tsx +1 -1
- package/{build/website → source}/elements/toggle.tsx +1 -1
- package/{build/website → source}/elements/tooltip.tsx +1 -1
- package/source/entrypoints/main.ts +12 -0
- package/{build/website → source}/env.d.ts +1 -1
- package/source/helpers/program.ts +6 -0
- package/{build/website → source}/helpers/section.ts +1 -1
- package/source/hooks/media.ts +29 -0
- package/source/index.ts +1 -0
- package/{build/website → source}/models/article.ts +5 -0
- package/source/models/config.ts +51 -0
- package/source/models/link.ts +11 -0
- package/source/models/patch.ts +9 -0
- package/source/models/section.ts +45 -0
- package/source/models/theme.ts +74 -0
- package/source/program.ts +18 -0
- package/source/settings.ts +6 -0
- package/{build/website → source}/vite.config.ts +14 -9
- package/{build → target}/actions/changelog/build.d.ts +1 -0
- package/target/actions/changelog/build.js +187 -0
- package/target/actions/changelog/build.unit.js +66 -0
- package/target/actions/config/define.js +8 -0
- package/target/actions/config/define.unit.js +29 -0
- package/target/actions/config/load.js +25 -0
- package/target/actions/config/load.unit.js +23 -0
- package/target/client.d.ts +1 -0
- package/target/client.js +6 -0
- package/target/commands/build.js +14 -0
- package/target/commands/escape.js +56 -0
- package/target/commands/preview.js +18 -0
- package/target/commands/start.js +19 -0
- package/target/components/Abbr.d.ts +5 -0
- package/target/components/Abbr.js +9 -0
- package/target/components/AnsiCode.d.ts +4 -0
- package/target/components/AnsiCode.js +6 -0
- package/target/components/Article.d.ts +5 -0
- package/target/components/Article.js +104 -0
- package/target/components/BackToTop.d.ts +3 -0
- package/target/components/BackToTop.js +19 -0
- package/target/components/Banner.d.ts +2 -0
- package/target/components/Banner.js +12 -0
- package/target/components/BlogIndex.d.ts +4 -0
- package/target/components/BlogIndex.js +62 -0
- package/target/components/Breadcrumbs.d.ts +1 -0
- package/target/components/Breadcrumbs.js +13 -0
- package/target/components/Callout.d.ts +8 -0
- package/target/components/Callout.js +43 -0
- package/target/components/Card.d.ts +7 -0
- package/target/components/Card.js +17 -0
- package/target/components/Cards.d.ts +4 -0
- package/target/components/Cards.js +6 -0
- package/target/components/ChangelogIndex.d.ts +4 -0
- package/target/components/ChangelogIndex.js +57 -0
- package/target/components/CodeBlock.d.ts +1 -0
- package/target/components/CodeBlock.js +47 -0
- package/target/components/CodeTabs.d.ts +6 -0
- package/target/components/CodeTabs.js +49 -0
- package/target/components/Column.d.ts +4 -0
- package/target/components/Column.js +6 -0
- package/target/components/Columns.d.ts +5 -0
- package/target/components/Columns.js +10 -0
- package/target/components/Content.d.ts +3 -0
- package/target/components/Content.js +5 -0
- package/target/components/ContentTab.d.ts +5 -0
- package/target/components/ContentTab.js +6 -0
- package/target/components/ContentTabs.d.ts +5 -0
- package/target/components/ContentTabs.js +47 -0
- package/target/components/DefaultCatchBoundary.d.ts +2 -0
- package/target/components/DefaultCatchBoundary.js +20 -0
- package/target/components/DefinitionList.d.ts +7 -0
- package/target/components/DefinitionList.js +14 -0
- package/target/components/Details.d.ts +5 -0
- package/target/components/Details.js +13 -0
- package/target/components/FileTree.d.ts +4 -0
- package/target/components/FileTree.js +17 -0
- package/target/components/Footer.d.ts +2 -0
- package/target/components/Footer.js +9 -0
- package/target/components/FootnoteRef.d.ts +3 -0
- package/target/components/FootnoteRef.js +31 -0
- package/target/components/Heading.d.ts +8 -0
- package/target/components/Heading.js +18 -0
- package/target/components/InlineBadge.d.ts +5 -0
- package/target/components/InlineBadge.js +7 -0
- package/target/components/InlineIcon.d.ts +5 -0
- package/target/components/InlineIcon.js +10 -0
- package/target/components/InlineToc.d.ts +4 -0
- package/target/components/InlineToc.js +14 -0
- package/target/components/Layout.d.ts +4 -0
- package/target/components/Layout.js +65 -0
- package/target/components/LinkButton.d.ts +7 -0
- package/target/components/LinkButton.js +11 -0
- package/target/components/Mermaid.d.ts +4 -0
- package/target/components/Mermaid.js +8 -0
- package/target/components/MermaidRenderer.d.ts +4 -0
- package/target/components/MermaidRenderer.js +32 -0
- package/target/components/NotFound.d.ts +3 -0
- package/target/components/NotFound.js +10 -0
- package/target/components/PackageTabs.d.ts +9 -0
- package/target/components/PackageTabs.js +28 -0
- package/target/components/PageToolbar.d.ts +7 -0
- package/target/components/PageToolbar.js +34 -0
- package/target/components/PrevNext.d.ts +4 -0
- package/target/components/PrevNext.js +34 -0
- package/target/components/Search.d.ts +2 -0
- package/target/components/Search.js +16 -0
- package/target/components/SearchDialog.d.ts +5 -0
- package/target/components/SearchDialog.js +139 -0
- package/target/components/Section.d.ts +5 -0
- package/target/components/Section.js +8 -0
- package/target/components/SectionHeader.d.ts +7 -0
- package/target/components/SectionHeader.js +7 -0
- package/target/components/Sidebar.d.ts +4 -0
- package/target/components/Sidebar.js +33 -0
- package/target/components/SidebarArticles.d.ts +2 -0
- package/target/components/SidebarArticles.js +45 -0
- package/target/components/SidebarLinks.d.ts +4 -0
- package/target/components/SidebarLinks.js +26 -0
- package/target/components/SidebarPosts.d.ts +2 -0
- package/target/components/SidebarPosts.js +53 -0
- package/target/components/SidebarReleases.d.ts +2 -0
- package/target/components/SidebarReleases.js +35 -0
- package/target/components/SidebarSections.d.ts +4 -0
- package/target/components/SidebarSections.js +36 -0
- package/target/components/SiteTitle.d.ts +2 -0
- package/target/components/SiteTitle.js +12 -0
- package/target/components/SortableTable.d.ts +5 -0
- package/target/components/SortableTable.js +63 -0
- package/target/components/SoundCloud.d.ts +4 -0
- package/target/components/SoundCloud.js +7 -0
- package/target/components/TagIndex.d.ts +5 -0
- package/target/components/TagIndex.js +64 -0
- package/target/components/Theme.d.ts +1 -0
- package/target/components/Theme.js +21 -0
- package/target/components/Toc.d.ts +12 -0
- package/target/components/Toc.js +128 -0
- package/target/components/YouTube.d.ts +4 -0
- package/target/components/YouTube.js +6 -0
- package/target/components/ZoomImage.d.ts +4 -0
- package/target/components/ZoomImage.js +26 -0
- package/target/content/article.d.ts +43 -0
- package/target/content/article.js +54 -0
- package/target/content/tag.d.ts +2 -0
- package/target/content/tag.js +30 -0
- package/target/content-collections.d.ts +2 -0
- package/target/content-collections.js +200 -0
- package/target/elements/accordion.d.ts +6 -0
- package/target/elements/accordion.js +19 -0
- package/target/elements/alert-dialog.d.ts +18 -0
- package/target/elements/alert-dialog.js +44 -0
- package/target/elements/alert.d.ts +9 -0
- package/target/elements/alert.js +28 -0
- package/target/elements/aspect-ratio.d.ts +4 -0
- package/target/elements/aspect-ratio.js +9 -0
- package/target/elements/avatar.d.ts +11 -0
- package/target/elements/avatar.js +23 -0
- package/target/elements/badge.d.ts +7 -0
- package/target/elements/badge.js +34 -0
- package/target/elements/breadcrumb.d.ts +9 -0
- package/target/elements/breadcrumb.js +39 -0
- package/target/elements/button-group.d.ts +10 -0
- package/target/elements/button-group.js +37 -0
- package/target/elements/button.d.ts +8 -0
- package/target/elements/button.js +35 -0
- package/target/elements/calendar.d.ts +10 -0
- package/target/elements/calendar.js +76 -0
- package/target/elements/card.d.ts +11 -0
- package/target/elements/card.js +25 -0
- package/target/elements/carousel.d.ts +28 -0
- package/target/elements/carousel.js +95 -0
- package/target/elements/chart.d.ts +44 -0
- package/target/elements/chart.js +140 -0
- package/target/elements/checkbox.d.ts +3 -0
- package/target/elements/checkbox.js +9 -0
- package/target/elements/collapsible.d.ts +5 -0
- package/target/elements/collapsible.js +13 -0
- package/target/elements/command.d.ts +23 -0
- package/target/elements/command.js +42 -0
- package/target/elements/context-menu.d.ts +29 -0
- package/target/elements/context-menu.js +54 -0
- package/target/elements/dialog.d.ts +16 -0
- package/target/elements/dialog.js +41 -0
- package/target/elements/direction.d.ts +1 -0
- package/target/elements/direction.js +2 -0
- package/target/elements/drawer.d.ts +12 -0
- package/target/elements/drawer.js +38 -0
- package/target/elements/dropdown-menu.d.ts +24 -0
- package/target/elements/dropdown-menu.js +54 -0
- package/target/elements/empty.d.ts +11 -0
- package/target/elements/empty.js +34 -0
- package/target/elements/field.d.ts +24 -0
- package/target/elements/field.js +69 -0
- package/target/elements/hover-card.d.ts +5 -0
- package/target/elements/hover-card.js +14 -0
- package/target/elements/input-group.d.ts +18 -0
- package/target/elements/input-group.js +60 -0
- package/target/elements/input-otp.d.ts +11 -0
- package/target/elements/input-otp.js +21 -0
- package/target/elements/input.d.ts +2 -0
- package/target/elements/input.js +8 -0
- package/target/elements/item.d.ts +21 -0
- package/target/elements/item.js +79 -0
- package/target/elements/kbd.d.ts +3 -0
- package/target/elements/kbd.js +10 -0
- package/target/elements/label.d.ts +2 -0
- package/target/elements/label.js +8 -0
- package/target/elements/menubar.d.ts +29 -0
- package/target/elements/menubar.js +58 -0
- package/target/elements/native-select.d.ts +8 -0
- package/target/elements/native-select.js +16 -0
- package/target/elements/navigation-menu.d.ts +11 -0
- package/target/elements/navigation-menu.js +34 -0
- package/target/elements/pagination.d.ts +17 -0
- package/target/elements/pagination.js +33 -0
- package/target/elements/popover.d.ts +9 -0
- package/target/elements/popover.js +23 -0
- package/target/elements/progress.d.ts +7 -0
- package/target/elements/progress.js +21 -0
- package/target/elements/radio-group.d.ts +5 -0
- package/target/elements/radio-group.js +12 -0
- package/target/elements/resizable.d.ts +7 -0
- package/target/elements/resizable.js +14 -0
- package/target/elements/scroll-area.d.ts +4 -0
- package/target/elements/scroll-area.js +13 -0
- package/target/elements/select.d.ts +15 -0
- package/target/elements/select.js +39 -0
- package/target/elements/separator.d.ts +3 -0
- package/target/elements/separator.js +8 -0
- package/target/elements/sheet.d.ts +13 -0
- package/target/elements/sheet.js +41 -0
- package/target/elements/sidebar.d.ts +63 -0
- package/target/elements/sidebar.js +272 -0
- package/target/elements/skeleton.d.ts +2 -0
- package/target/elements/skeleton.js +7 -0
- package/target/elements/slider.d.ts +3 -0
- package/target/elements/slider.js +15 -0
- package/target/elements/sonner.d.ts +3 -0
- package/target/elements/sonner.js +23 -0
- package/target/elements/spinner.d.ts +2 -0
- package/target/elements/spinner.js +8 -0
- package/target/elements/switch.d.ts +5 -0
- package/target/elements/switch.js +8 -0
- package/target/elements/table.d.ts +9 -0
- package/target/elements/table.js +28 -0
- package/target/elements/tabs.d.ts +10 -0
- package/target/elements/tabs.js +29 -0
- package/target/elements/textarea.d.ts +2 -0
- package/target/elements/textarea.js +7 -0
- package/target/elements/toggle-group.d.ts +10 -0
- package/target/elements/toggle-group.js +24 -0
- package/target/elements/toggle.d.ts +8 -0
- package/target/elements/toggle.js +26 -0
- package/target/elements/tooltip.d.ts +6 -0
- package/target/elements/tooltip.js +18 -0
- package/target/entrypoints/main.js +12 -0
- package/target/helpers/article-icon.d.ts +3 -0
- package/target/helpers/article-icon.js +34 -0
- package/target/helpers/article.d.ts +24 -0
- package/target/helpers/article.js +73 -0
- package/target/helpers/changelog-source.d.ts +7 -0
- package/target/helpers/changelog-source.js +16 -0
- package/target/helpers/changelog-source.unit.d.ts +1 -0
- package/target/helpers/changelog-source.unit.js +33 -0
- package/target/helpers/dynamic-icon-resolver.d.ts +5 -0
- package/target/helpers/dynamic-icon-resolver.js +17 -0
- package/target/helpers/dynamic-icon.d.ts +5 -0
- package/target/helpers/dynamic-icon.js +8 -0
- package/target/helpers/favicon.d.ts +2 -0
- package/target/helpers/favicon.js +11 -0
- package/target/helpers/model.d.ts +3 -0
- package/target/helpers/model.js +4 -0
- package/target/helpers/program.js +5 -0
- package/target/helpers/resolve-asset-path.d.ts +2 -0
- package/target/helpers/resolve-asset-path.js +9 -0
- package/target/helpers/resolve-includes.d.ts +2 -0
- package/target/helpers/resolve-includes.js +113 -0
- package/target/helpers/resolve-includes.unit.d.ts +1 -0
- package/target/helpers/resolve-includes.unit.js +76 -0
- package/target/helpers/search-text.d.ts +2 -0
- package/target/helpers/search-text.js +16 -0
- package/target/helpers/section.d.ts +13 -0
- package/target/helpers/section.js +39 -0
- package/target/helpers/section.unit.d.ts +1 -0
- package/target/helpers/section.unit.js +62 -0
- package/target/helpers/theme.d.ts +5 -0
- package/target/helpers/theme.js +23 -0
- package/target/helpers/toc-context.d.ts +5 -0
- package/target/helpers/toc-context.js +8 -0
- package/target/helpers/toc.d.ts +3 -0
- package/target/helpers/toc.js +41 -0
- package/target/helpers/toc.unit.d.ts +1 -0
- package/target/helpers/toc.unit.js +65 -0
- package/target/hooks/in-view.d.ts +4 -0
- package/target/hooks/in-view.js +23 -0
- package/target/hooks/media.d.ts +6 -0
- package/target/hooks/media.js +25 -0
- package/target/index.js +2 -0
- package/target/models/article.d.ts +58 -0
- package/target/models/article.js +21 -0
- package/{build → target}/models/config.d.ts +10 -0
- package/target/models/config.js +34 -0
- package/target/models/link.js +9 -0
- package/{build → target}/models/patch.d.ts +5 -0
- package/target/models/patch.js +7 -0
- package/target/models/section.js +26 -0
- package/target/models/theme.js +73 -0
- package/target/models/toc.d.ts +5 -0
- package/target/models/toc.js +2 -0
- package/target/plugins/rehype-inline-code.d.ts +19 -0
- package/target/plugins/rehype-inline-code.js +55 -0
- package/target/plugins/rehype-task-list-a11y.d.ts +10 -0
- package/target/plugins/rehype-task-list-a11y.js +29 -0
- package/target/plugins/remark-abbr.d.ts +6 -0
- package/target/plugins/remark-abbr.js +39 -0
- package/target/plugins/remark-abbr.unit.d.ts +1 -0
- package/target/plugins/remark-abbr.unit.js +79 -0
- package/target/plugins/remark-ansi.d.ts +8 -0
- package/target/plugins/remark-ansi.js +239 -0
- package/target/plugins/remark-ansi.unit.d.ts +1 -0
- package/target/plugins/remark-ansi.unit.js +134 -0
- package/target/plugins/remark-badge.d.ts +6 -0
- package/target/plugins/remark-badge.js +43 -0
- package/target/plugins/remark-badge.unit.d.ts +1 -0
- package/target/plugins/remark-badge.unit.js +76 -0
- package/target/plugins/remark-button.d.ts +6 -0
- package/target/plugins/remark-button.js +52 -0
- package/target/plugins/remark-button.unit.d.ts +1 -0
- package/target/plugins/remark-button.unit.js +105 -0
- package/target/plugins/remark-callout.d.ts +4 -0
- package/target/plugins/remark-callout.js +39 -0
- package/target/plugins/remark-card.d.ts +4 -0
- package/target/plugins/remark-card.js +66 -0
- package/target/plugins/remark-code-tabs.d.ts +4 -0
- package/target/plugins/remark-code-tabs.js +72 -0
- package/target/plugins/remark-columns.d.ts +4 -0
- package/target/plugins/remark-columns.js +54 -0
- package/target/plugins/remark-custom-heading-id.d.ts +14 -0
- package/target/plugins/remark-custom-heading-id.js +54 -0
- package/target/plugins/remark-custom-heading-id.unit.d.ts +1 -0
- package/target/plugins/remark-custom-heading-id.unit.js +91 -0
- package/target/plugins/remark-deflist.d.ts +4 -0
- package/target/plugins/remark-deflist.js +31 -0
- package/target/plugins/remark-details.d.ts +4 -0
- package/target/plugins/remark-details.js +33 -0
- package/target/plugins/remark-filetree.d.ts +12 -0
- package/target/plugins/remark-filetree.js +61 -0
- package/target/plugins/remark-filetree.unit.d.ts +1 -0
- package/target/plugins/remark-filetree.unit.js +87 -0
- package/target/plugins/remark-github-callout.d.ts +4 -0
- package/target/plugins/remark-github-callout.js +62 -0
- package/target/plugins/remark-icon.d.ts +4 -0
- package/target/plugins/remark-icon.js +36 -0
- package/target/plugins/remark-image.d.ts +9 -0
- package/target/plugins/remark-image.js +26 -0
- package/target/plugins/remark-media.d.ts +6 -0
- package/target/plugins/remark-media.js +52 -0
- package/target/plugins/remark-media.unit.d.ts +1 -0
- package/target/plugins/remark-media.unit.js +54 -0
- package/target/plugins/remark-mermaid.d.ts +4 -0
- package/target/plugins/remark-mermaid.js +20 -0
- package/target/plugins/remark-npm.d.ts +4 -0
- package/target/plugins/remark-npm.js +32 -0
- package/target/plugins/remark-steps.d.ts +6 -0
- package/target/plugins/remark-steps.js +30 -0
- package/target/plugins/remark-steps.unit.d.ts +1 -0
- package/target/plugins/remark-steps.unit.js +65 -0
- package/target/plugins/remark-tab.d.ts +6 -0
- package/target/plugins/remark-tab.js +76 -0
- package/target/plugins/remark-tab.unit.d.ts +1 -0
- package/target/plugins/remark-tab.unit.js +156 -0
- package/target/plugins/remark-toc.d.ts +6 -0
- package/target/plugins/remark-toc.js +33 -0
- package/target/plugins/remark-toc.unit.d.ts +1 -0
- package/target/plugins/remark-toc.unit.js +57 -0
- package/target/plugins/shiki-icon.d.ts +16 -0
- package/target/plugins/shiki-icon.js +66 -0
- package/target/plugins/shiki-line-highlight.d.ts +27 -0
- package/target/plugins/shiki-line-highlight.js +140 -0
- package/target/plugins/vite-livemark.d.ts +13 -0
- package/target/plugins/vite-livemark.js +76 -0
- package/target/program.js +18 -0
- package/target/routeTree.gen.d.ts +57 -0
- package/target/routeTree.gen.js +27 -0
- package/target/router.d.ts +6 -0
- package/target/router.js +26 -0
- package/target/routes/$.d.ts +1 -0
- package/target/routes/$.js +85 -0
- package/target/routes/__root.d.ts +1 -0
- package/target/routes/__root.js +69 -0
- package/target/server.d.ts +2 -0
- package/target/server.js +7 -0
- package/target/settings.js +7 -0
- package/target/utils/style.d.ts +2 -0
- package/target/utils/style.js +6 -0
- package/target/vite.config.d.ts +2 -0
- package/target/vite.config.js +67 -0
- package/build/actions/changelog/build.js +0 -158
- package/build/actions/changelog/build.unit.js +0 -66
- package/build/actions/config/define.js +0 -8
- package/build/actions/config/define.unit.js +0 -29
- package/build/actions/config/load.js +0 -25
- package/build/actions/config/load.unit.js +0 -23
- package/build/commands/build.js +0 -14
- package/build/commands/escape.js +0 -56
- package/build/commands/preview.js +0 -18
- package/build/commands/start.js +0 -19
- package/build/docs/markdown/includes/example.d.ts +0 -58
- package/build/docs/markdown/includes/example.js +0 -5
- package/build/entrypoints/main.js +0 -12
- package/build/helpers/program.js +0 -5
- package/build/index.js +0 -2
- package/build/livemark.config.d.ts +0 -58
- package/build/livemark.config.js +0 -25
- package/build/models/config.js +0 -34
- package/build/models/link.js +0 -9
- package/build/models/patch.js +0 -7
- package/build/models/section.js +0 -26
- package/build/models/theme.js +0 -73
- package/build/package.json +0 -138
- package/build/program.js +0 -18
- package/build/settings.js +0 -7
- package/build/vite.config.d.ts +0 -2
- package/build/vite.config.js +0 -48
- package/build/website/components/BlogSidebar.tsx +0 -162
- package/build/website/components/ChangelogSidebar.tsx +0 -120
- package/build/website/hooks/media.ts +0 -19
- package/build/website/routeTree.gen.ts +0 -86
- /package/{build/website → source}/assets/logo.svg +0 -0
- /package/{build/website → source}/client.tsx +0 -0
- /package/{build/website → source}/components/Abbr.tsx +0 -0
- /package/{build/website → source}/components/AnsiCode.tsx +0 -0
- /package/{build/website → source}/components/BackToTop.tsx +0 -0
- /package/{build/website → source}/components/Banner.tsx +0 -0
- /package/{build/website → source}/components/BlogIndex.tsx +0 -0
- /package/{build/website → source}/components/Breadcrumbs.tsx +0 -0
- /package/{build/website → source}/components/Card.tsx +0 -0
- /package/{build/website → source}/components/Cards.tsx +0 -0
- /package/{build/website → source}/components/ChangelogIndex.tsx +0 -0
- /package/{build/website → source}/components/CodeBlock.tsx +0 -0
- /package/{build/website → source}/components/CodeTabs.tsx +0 -0
- /package/{build/website → source}/components/Column.tsx +0 -0
- /package/{build/website → source}/components/Columns.tsx +0 -0
- /package/{build/website → source}/components/Content.tsx +0 -0
- /package/{build/website → source}/components/ContentTab.tsx +0 -0
- /package/{build/website → source}/components/ContentTabs.tsx +0 -0
- /package/{build/website → source}/components/DefaultCatchBoundary.tsx +0 -0
- /package/{build/website → source}/components/DefinitionList.tsx +0 -0
- /package/{build/website → source}/components/Details.tsx +0 -0
- /package/{build/website → source}/components/FileTree.tsx +0 -0
- /package/{build/website → source}/components/Footer.tsx +0 -0
- /package/{build/website → source}/components/FootnoteRef.tsx +0 -0
- /package/{build/website → source}/components/Heading.tsx +0 -0
- /package/{build/website → source}/components/InlineBadge.tsx +0 -0
- /package/{build/website → source}/components/InlineIcon.tsx +0 -0
- /package/{build/website → source}/components/InlineToc.tsx +0 -0
- /package/{build/website → source}/components/Mermaid.tsx +0 -0
- /package/{build/website → source}/components/MermaidRenderer.tsx +0 -0
- /package/{build/website → source}/components/NotFound.tsx +0 -0
- /package/{build/website → source}/components/PackageTabs.tsx +0 -0
- /package/{build/website → source}/components/PrevNext.tsx +0 -0
- /package/{build/website → source}/components/Search.tsx +0 -0
- /package/{build/website → source}/components/SearchDialog.tsx +0 -0
- /package/{build/website → source}/components/SidebarLinks.tsx +0 -0
- /package/{build/website → source}/components/SidebarSections.tsx +0 -0
- /package/{build/website → source}/components/SiteTitle.tsx +0 -0
- /package/{build/website → source}/components/SortableTable.tsx +0 -0
- /package/{build/website → source}/components/SoundCloud.tsx +0 -0
- /package/{build/website → source}/components/TagIndex.tsx +0 -0
- /package/{build/website → source}/components/Theme.tsx +0 -0
- /package/{build/website → source}/components/Toc.tsx +0 -0
- /package/{build/website → source}/components/YouTube.tsx +0 -0
- /package/{build/website → source}/components/ZoomImage.tsx +0 -0
- /package/{build/website → source}/content/article.ts +0 -0
- /package/{build/website → source}/content/tag.ts +0 -0
- /package/{build/website → source}/elements/collapsible.tsx +0 -0
- /package/{build/website → source}/elements/direction.tsx +0 -0
- /package/{build/website → source}/elements/sonner.tsx +0 -0
- /package/{build/website → source}/helpers/article-icon.ts +0 -0
- /package/{build/website → source}/helpers/article.ts +0 -0
- /package/{build/website → source}/helpers/changelog-source.ts +0 -0
- /package/{build/website → source}/helpers/changelog-source.unit.ts +0 -0
- /package/{build/website → source}/helpers/dynamic-icon-resolver.tsx +0 -0
- /package/{build/website → source}/helpers/dynamic-icon.tsx +0 -0
- /package/{build/website → source}/helpers/favicon.ts +0 -0
- /package/{build/website → source}/helpers/model.ts +0 -0
- /package/{build/website → source}/helpers/resolve-asset-path.ts +0 -0
- /package/{build/website → source}/helpers/resolve-includes.ts +0 -0
- /package/{build/website → source}/helpers/resolve-includes.unit.ts +0 -0
- /package/{build/website → source}/helpers/search-text.ts +0 -0
- /package/{build/website → source}/helpers/section.unit.ts +0 -0
- /package/{build/website → source}/helpers/theme.ts +0 -0
- /package/{build/website → source}/helpers/toc-context.ts +0 -0
- /package/{build/website → source}/helpers/toc.ts +0 -0
- /package/{build/website → source}/helpers/toc.unit.ts +0 -0
- /package/{build/website → source}/hooks/in-view.ts +0 -0
- /package/{build/website → source}/models/toc.ts +0 -0
- /package/{build/website → source}/plugins/rehype-inline-code.ts +0 -0
- /package/{build/website → source}/plugins/rehype-task-list-a11y.ts +0 -0
- /package/{build/website → source}/plugins/remark-abbr.ts +0 -0
- /package/{build/website → source}/plugins/remark-abbr.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-ansi.ts +0 -0
- /package/{build/website → source}/plugins/remark-ansi.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-badge.ts +0 -0
- /package/{build/website → source}/plugins/remark-badge.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-button.ts +0 -0
- /package/{build/website → source}/plugins/remark-button.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-callout.ts +0 -0
- /package/{build/website → source}/plugins/remark-card.ts +0 -0
- /package/{build/website → source}/plugins/remark-code-tabs.ts +0 -0
- /package/{build/website → source}/plugins/remark-columns.ts +0 -0
- /package/{build/website → source}/plugins/remark-custom-heading-id.ts +0 -0
- /package/{build/website → source}/plugins/remark-custom-heading-id.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-deflist.ts +0 -0
- /package/{build/website → source}/plugins/remark-details.ts +0 -0
- /package/{build/website → source}/plugins/remark-filetree.ts +0 -0
- /package/{build/website → source}/plugins/remark-filetree.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-github-callout.ts +0 -0
- /package/{build/website → source}/plugins/remark-icon.ts +0 -0
- /package/{build/website → source}/plugins/remark-image.ts +0 -0
- /package/{build/website → source}/plugins/remark-media.ts +0 -0
- /package/{build/website → source}/plugins/remark-media.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-mermaid.ts +0 -0
- /package/{build/website → source}/plugins/remark-npm.ts +0 -0
- /package/{build/website → source}/plugins/remark-steps.ts +0 -0
- /package/{build/website → source}/plugins/remark-steps.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-tab.ts +0 -0
- /package/{build/website → source}/plugins/remark-tab.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-toc.ts +0 -0
- /package/{build/website → source}/plugins/remark-toc.unit.ts +0 -0
- /package/{build/website → source}/plugins/shiki-icon.ts +0 -0
- /package/{build/website → source}/plugins/shiki-line-highlight.ts +0 -0
- /package/{build/website → source}/plugins/vite-livemark.ts +0 -0
- /package/{build/website → source}/router.tsx +0 -0
- /package/{build/website → source}/routes/$.tsx +0 -0
- /package/{build/website → source}/routes/__root.tsx +0 -0
- /package/{build/website → source}/server.ts +0 -0
- /package/{build/website → source}/styles/general.css +0 -0
- /package/{build/website → source}/styles/markdown.css +0 -0
- /package/{build/website/helpers → source/utils}/style.ts +0 -0
- /package/{build → target}/actions/changelog/build.unit.d.ts +0 -0
- /package/{build → target}/actions/config/define.d.ts +0 -0
- /package/{build → target}/actions/config/define.unit.d.ts +0 -0
- /package/{build → target}/actions/config/load.d.ts +0 -0
- /package/{build → target}/actions/config/load.unit.d.ts +0 -0
- /package/{build → target}/commands/build.d.ts +0 -0
- /package/{build → target}/commands/escape.d.ts +0 -0
- /package/{build → target}/commands/preview.d.ts +0 -0
- /package/{build → target}/commands/start.d.ts +0 -0
- /package/{build → target}/entrypoints/main.d.ts +0 -0
- /package/{build → target}/helpers/program.d.ts +0 -0
- /package/{build → target}/index.d.ts +0 -0
- /package/{build → target}/models/link.d.ts +0 -0
- /package/{build → target}/models/section.d.ts +0 -0
- /package/{build → target}/models/theme.d.ts +0 -0
- /package/{build → target}/program.d.ts +0 -0
- /package/{build → target}/settings.d.ts +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { visit } from "unist-util-visit";
|
|
2
|
+
/** Remark plugin that converts :icon text directives into InlineIcon JSX elements */
|
|
3
|
+
export const remarkIcon = () => {
|
|
4
|
+
return tree => {
|
|
5
|
+
visit(tree, "textDirective", (node, index, parent) => {
|
|
6
|
+
if (node.name !== "icon" || index === undefined || !parent)
|
|
7
|
+
return;
|
|
8
|
+
const name = node.attributes?.name;
|
|
9
|
+
if (!name)
|
|
10
|
+
return;
|
|
11
|
+
const className = node.attributes?.className;
|
|
12
|
+
const attributes = [
|
|
13
|
+
{ type: "mdxJsxAttribute", name: "name", value: name },
|
|
14
|
+
...(className
|
|
15
|
+
? [
|
|
16
|
+
{
|
|
17
|
+
type: "mdxJsxAttribute",
|
|
18
|
+
name: "className",
|
|
19
|
+
value: className,
|
|
20
|
+
},
|
|
21
|
+
]
|
|
22
|
+
: []),
|
|
23
|
+
];
|
|
24
|
+
const jsxNode = {
|
|
25
|
+
type: "mdxJsxTextElement",
|
|
26
|
+
name: "InlineIcon",
|
|
27
|
+
attributes,
|
|
28
|
+
children: [],
|
|
29
|
+
data: { _mdxExplicitJsx: true },
|
|
30
|
+
};
|
|
31
|
+
// @ts-expect-error mdxJsxTextElement is not in mdast types
|
|
32
|
+
parent.children[index] = jsxNode;
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLWljb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcGx1Z2lucy9yZW1hcmstaWNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFeEMscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBcUIsR0FBRyxFQUFFO0lBQy9DLE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDWixLQUFLLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLElBQW1CLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2xFLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTTtZQUVsRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQTtZQUNsQyxJQUFJLENBQUMsSUFBSTtnQkFBRSxPQUFNO1lBRWpCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFBO1lBRTVDLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixFQUFFLElBQUksRUFBRSxpQkFBMEIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Z0JBQy9ELEdBQUcsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQzt3QkFDRTs0QkFDRSxJQUFJLEVBQUUsaUJBQTBCOzRCQUNoQyxJQUFJLEVBQUUsV0FBVzs0QkFDakIsS0FBSyxFQUFFLFNBQVM7eUJBQ2pCO3FCQUNGO29CQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDUixDQUFBO1lBRUQsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsSUFBSSxFQUFFLG1CQUE0QjtnQkFDbEMsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFVBQVU7Z0JBQ1YsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRTthQUNoQyxDQUFBO1lBRUQsMkRBQTJEO1lBQzNELE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFBO1FBQ2xDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSb290IH0gZnJvbSBcIm1kYXN0XCJcbmltcG9ydCB0eXBlIHsgVGV4dERpcmVjdGl2ZSB9IGZyb20gXCJtZGFzdC11dGlsLWRpcmVjdGl2ZVwiXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gXCJ1bmlmaWVkXCJcbmltcG9ydCB7IHZpc2l0IH0gZnJvbSBcInVuaXN0LXV0aWwtdmlzaXRcIlxuXG4vKiogUmVtYXJrIHBsdWdpbiB0aGF0IGNvbnZlcnRzIDppY29uIHRleHQgZGlyZWN0aXZlcyBpbnRvIElubGluZUljb24gSlNYIGVsZW1lbnRzICovXG5leHBvcnQgY29uc3QgcmVtYXJrSWNvbjogUGx1Z2luPFtdLCBSb290PiA9ICgpID0+IHtcbiAgcmV0dXJuIHRyZWUgPT4ge1xuICAgIHZpc2l0KHRyZWUsIFwidGV4dERpcmVjdGl2ZVwiLCAobm9kZTogVGV4dERpcmVjdGl2ZSwgaW5kZXgsIHBhcmVudCkgPT4ge1xuICAgICAgaWYgKG5vZGUubmFtZSAhPT0gXCJpY29uXCIgfHwgaW5kZXggPT09IHVuZGVmaW5lZCB8fCAhcGFyZW50KSByZXR1cm5cblxuICAgICAgY29uc3QgbmFtZSA9IG5vZGUuYXR0cmlidXRlcz8ubmFtZVxuICAgICAgaWYgKCFuYW1lKSByZXR1cm5cblxuICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9kZS5hdHRyaWJ1dGVzPy5jbGFzc05hbWVcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IFtcbiAgICAgICAgeyB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiIGFzIGNvbnN0LCBuYW1lOiBcIm5hbWVcIiwgdmFsdWU6IG5hbWUgfSxcbiAgICAgICAgLi4uKGNsYXNzTmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJtZHhKc3hBdHRyaWJ1dGVcIiBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNsYXNzTmFtZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXSksXG4gICAgICBdXG5cbiAgICAgIGNvbnN0IGpzeE5vZGUgPSB7XG4gICAgICAgIHR5cGU6IFwibWR4SnN4VGV4dEVsZW1lbnRcIiBhcyBjb25zdCxcbiAgICAgICAgbmFtZTogXCJJbmxpbmVJY29uXCIsXG4gICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgZGF0YTogeyBfbWR4RXhwbGljaXRKc3g6IHRydWUgfSxcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBtZHhKc3hUZXh0RWxlbWVudCBpcyBub3QgaW4gbWRhc3QgdHlwZXNcbiAgICAgIHBhcmVudC5jaGlsZHJlbltpbmRleF0gPSBqc3hOb2RlXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Root } from "mdast";
|
|
2
|
+
import type { Plugin } from "unified";
|
|
3
|
+
/** Remark plugin that resolves relative image paths and unwraps image-only paragraphs */
|
|
4
|
+
export declare const remarkImage: Plugin<[
|
|
5
|
+
{
|
|
6
|
+
filePath: string;
|
|
7
|
+
root: string;
|
|
8
|
+
}
|
|
9
|
+
], Root>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { visit } from "unist-util-visit";
|
|
2
|
+
import { resolveAssetPath } from "../helpers/resolve-asset-path.js";
|
|
3
|
+
/** Remark plugin that resolves relative image paths and unwraps image-only paragraphs */
|
|
4
|
+
export const remarkImage = ({ filePath, root }) => {
|
|
5
|
+
return tree => {
|
|
6
|
+
visit(tree, "image", node => {
|
|
7
|
+
node.url = resolveAssetPath(node.url, filePath, root);
|
|
8
|
+
});
|
|
9
|
+
visit(tree, "paragraph", (node, index, parent) => {
|
|
10
|
+
if (!parent || typeof index !== "number")
|
|
11
|
+
return;
|
|
12
|
+
const isImageOnly = node.children.every(child => child.type === "image" ||
|
|
13
|
+
child.type === "imageReference" ||
|
|
14
|
+
child.type === "break" ||
|
|
15
|
+
(child.type === "text" && child.value.trim() === ""));
|
|
16
|
+
if (!isImageOnly)
|
|
17
|
+
return;
|
|
18
|
+
const images = node.children.filter(child => child.type === "image" || child.type === "imageReference");
|
|
19
|
+
if (images.length === 0)
|
|
20
|
+
return;
|
|
21
|
+
parent.children.splice(index, 1, ...images);
|
|
22
|
+
return index + images.length;
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3BsdWdpbnMvcmVtYXJrLWltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVuRSx5RkFBeUY7QUFDekYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUdwQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDekIsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNaLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDdkQsQ0FBQyxDQUFDLENBQUE7UUFFRixLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLE9BQU07WUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQ3JDLEtBQUssQ0FBQyxFQUFFLENBQ04sS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO2dCQUN0QixLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQjtnQkFDL0IsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO2dCQUN0QixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQ3ZELENBQUE7WUFDRCxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFNO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNqQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQ25FLENBQUE7WUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFNO1lBQy9CLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQTtZQUMzQyxPQUFPLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFBO1FBQzlCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSb290IH0gZnJvbSBcIm1kYXN0XCJcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSBcInVuaWZpZWRcIlxuaW1wb3J0IHsgdmlzaXQgfSBmcm9tIFwidW5pc3QtdXRpbC12aXNpdFwiXG5pbXBvcnQgeyByZXNvbHZlQXNzZXRQYXRoIH0gZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZS1hc3NldC1wYXRoLnRzXCJcblxuLyoqIFJlbWFyayBwbHVnaW4gdGhhdCByZXNvbHZlcyByZWxhdGl2ZSBpbWFnZSBwYXRocyBhbmQgdW53cmFwcyBpbWFnZS1vbmx5IHBhcmFncmFwaHMgKi9cbmV4cG9ydCBjb25zdCByZW1hcmtJbWFnZTogUGx1Z2luPFxuICBbeyBmaWxlUGF0aDogc3RyaW5nOyByb290OiBzdHJpbmcgfV0sXG4gIFJvb3Rcbj4gPSAoeyBmaWxlUGF0aCwgcm9vdCB9KSA9PiB7XG4gIHJldHVybiB0cmVlID0+IHtcbiAgICB2aXNpdCh0cmVlLCBcImltYWdlXCIsIG5vZGUgPT4ge1xuICAgICAgbm9kZS51cmwgPSByZXNvbHZlQXNzZXRQYXRoKG5vZGUudXJsLCBmaWxlUGF0aCwgcm9vdClcbiAgICB9KVxuXG4gICAgdmlzaXQodHJlZSwgXCJwYXJhZ3JhcGhcIiwgKG5vZGUsIGluZGV4LCBwYXJlbnQpID0+IHtcbiAgICAgIGlmICghcGFyZW50IHx8IHR5cGVvZiBpbmRleCAhPT0gXCJudW1iZXJcIikgcmV0dXJuXG4gICAgICBjb25zdCBpc0ltYWdlT25seSA9IG5vZGUuY2hpbGRyZW4uZXZlcnkoXG4gICAgICAgIGNoaWxkID0+XG4gICAgICAgICAgY2hpbGQudHlwZSA9PT0gXCJpbWFnZVwiIHx8XG4gICAgICAgICAgY2hpbGQudHlwZSA9PT0gXCJpbWFnZVJlZmVyZW5jZVwiIHx8XG4gICAgICAgICAgY2hpbGQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgKGNoaWxkLnR5cGUgPT09IFwidGV4dFwiICYmIGNoaWxkLnZhbHVlLnRyaW0oKSA9PT0gXCJcIiksXG4gICAgICApXG4gICAgICBpZiAoIWlzSW1hZ2VPbmx5KSByZXR1cm5cbiAgICAgIGNvbnN0IGltYWdlcyA9IG5vZGUuY2hpbGRyZW4uZmlsdGVyKFxuICAgICAgICBjaGlsZCA9PiBjaGlsZC50eXBlID09PSBcImltYWdlXCIgfHwgY2hpbGQudHlwZSA9PT0gXCJpbWFnZVJlZmVyZW5jZVwiLFxuICAgICAgKVxuICAgICAgaWYgKGltYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSwgLi4uaW1hZ2VzKVxuICAgICAgcmV0dXJuIGluZGV4ICsgaW1hZ2VzLmxlbmd0aFxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Root } from "mdast";
|
|
2
|
+
import type { Plugin } from "unified";
|
|
3
|
+
/** Walk a mdast tree and convert media leaf directives into JSX embed elements */
|
|
4
|
+
export declare function transformMediaDirectives(tree: Root): void;
|
|
5
|
+
/** Remark plugin that converts leaf directives into media embed JSX elements */
|
|
6
|
+
export declare const remarkMedia: Plugin<[], Root>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { visit } from "unist-util-visit";
|
|
2
|
+
/** Walk a mdast tree and convert media leaf directives into JSX embed elements */
|
|
3
|
+
export function transformMediaDirectives(tree) {
|
|
4
|
+
visit(tree, "leafDirective", (node, index, parent) => {
|
|
5
|
+
if ((node.name !== "video" && node.name !== "audio") ||
|
|
6
|
+
index === undefined ||
|
|
7
|
+
!parent)
|
|
8
|
+
return;
|
|
9
|
+
const type = node.attributes?.type;
|
|
10
|
+
if (!type)
|
|
11
|
+
return;
|
|
12
|
+
if (node.name === "video" && type === "youtube") {
|
|
13
|
+
const id = node.attributes?.id;
|
|
14
|
+
if (!id)
|
|
15
|
+
return;
|
|
16
|
+
const jsxNode = {
|
|
17
|
+
type: "mdxJsxFlowElement",
|
|
18
|
+
name: "YouTube",
|
|
19
|
+
attributes: [
|
|
20
|
+
{ type: "mdxJsxAttribute", name: "id", value: id },
|
|
21
|
+
],
|
|
22
|
+
children: [],
|
|
23
|
+
data: { _mdxExplicitJsx: true },
|
|
24
|
+
};
|
|
25
|
+
// @ts-expect-error mdxJsxFlowElement is not in mdast types
|
|
26
|
+
parent.children.splice(index, 1, jsxNode);
|
|
27
|
+
}
|
|
28
|
+
if (node.name === "audio" && type === "soundcloud") {
|
|
29
|
+
const url = node.attributes?.url;
|
|
30
|
+
if (!url)
|
|
31
|
+
return;
|
|
32
|
+
const jsxNode = {
|
|
33
|
+
type: "mdxJsxFlowElement",
|
|
34
|
+
name: "SoundCloud",
|
|
35
|
+
attributes: [
|
|
36
|
+
{ type: "mdxJsxAttribute", name: "url", value: url },
|
|
37
|
+
],
|
|
38
|
+
children: [],
|
|
39
|
+
data: { _mdxExplicitJsx: true },
|
|
40
|
+
};
|
|
41
|
+
// @ts-expect-error mdxJsxFlowElement is not in mdast types
|
|
42
|
+
parent.children.splice(index, 1, jsxNode);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/** Remark plugin that converts leaf directives into media embed JSX elements */
|
|
47
|
+
export const remarkMedia = () => {
|
|
48
|
+
return tree => {
|
|
49
|
+
transformMediaDirectives(tree);
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLW1lZGlhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3BsdWdpbnMvcmVtYXJrLW1lZGlhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV4QyxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLHdCQUF3QixDQUFDLElBQVU7SUFDakQsS0FBSyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxJQUFtQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNsRSxJQUNFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7WUFDaEQsS0FBSyxLQUFLLFNBQVM7WUFDbkIsQ0FBQyxNQUFNO1lBRVAsT0FBTTtRQUVSLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTTtRQUVqQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQTtZQUM5QixJQUFJLENBQUMsRUFBRTtnQkFBRSxPQUFNO1lBRWYsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsSUFBSSxFQUFFLG1CQUE0QjtnQkFDbEMsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsVUFBVSxFQUFFO29CQUNWLEVBQUUsSUFBSSxFQUFFLGlCQUEwQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtpQkFDNUQ7Z0JBQ0QsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRTthQUNoQyxDQUFBO1lBRUQsMkRBQTJEO1lBQzNELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDM0MsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ25ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFBO1lBQ2hDLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU07WUFFaEIsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsSUFBSSxFQUFFLG1CQUE0QjtnQkFDbEMsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFVBQVUsRUFBRTtvQkFDVixFQUFFLElBQUksRUFBRSxpQkFBMEIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7aUJBQzlEO2dCQUNELFFBQVEsRUFBRSxFQUFFO2dCQUNaLElBQUksRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUU7YUFDaEMsQ0FBQTtZQUVELDJEQUEyRDtZQUMzRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFxQixHQUFHLEVBQUU7SUFDaEQsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNaLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2hDLENBQUMsQ0FBQTtBQUNILENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUm9vdCB9IGZyb20gXCJtZGFzdFwiXG5pbXBvcnQgdHlwZSB7IExlYWZEaXJlY3RpdmUgfSBmcm9tIFwibWRhc3QtdXRpbC1kaXJlY3RpdmVcIlxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tIFwidW5pZmllZFwiXG5pbXBvcnQgeyB2aXNpdCB9IGZyb20gXCJ1bmlzdC11dGlsLXZpc2l0XCJcblxuLyoqIFdhbGsgYSBtZGFzdCB0cmVlIGFuZCBjb252ZXJ0IG1lZGlhIGxlYWYgZGlyZWN0aXZlcyBpbnRvIEpTWCBlbWJlZCBlbGVtZW50cyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1lZGlhRGlyZWN0aXZlcyh0cmVlOiBSb290KSB7XG4gIHZpc2l0KHRyZWUsIFwibGVhZkRpcmVjdGl2ZVwiLCAobm9kZTogTGVhZkRpcmVjdGl2ZSwgaW5kZXgsIHBhcmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIChub2RlLm5hbWUgIT09IFwidmlkZW9cIiAmJiBub2RlLm5hbWUgIT09IFwiYXVkaW9cIikgfHxcbiAgICAgIGluZGV4ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICFwYXJlbnRcbiAgICApXG4gICAgICByZXR1cm5cblxuICAgIGNvbnN0IHR5cGUgPSBub2RlLmF0dHJpYnV0ZXM/LnR5cGVcbiAgICBpZiAoIXR5cGUpIHJldHVyblxuXG4gICAgaWYgKG5vZGUubmFtZSA9PT0gXCJ2aWRlb1wiICYmIHR5cGUgPT09IFwieW91dHViZVwiKSB7XG4gICAgICBjb25zdCBpZCA9IG5vZGUuYXR0cmlidXRlcz8uaWRcbiAgICAgIGlmICghaWQpIHJldHVyblxuXG4gICAgICBjb25zdCBqc3hOb2RlID0ge1xuICAgICAgICB0eXBlOiBcIm1keEpzeEZsb3dFbGVtZW50XCIgYXMgY29uc3QsXG4gICAgICAgIG5hbWU6IFwiWW91VHViZVwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgeyB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiIGFzIGNvbnN0LCBuYW1lOiBcImlkXCIsIHZhbHVlOiBpZCB9LFxuICAgICAgICBdLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIGRhdGE6IHsgX21keEV4cGxpY2l0SnN4OiB0cnVlIH0sXG4gICAgICB9XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWR4SnN4Rmxvd0VsZW1lbnQgaXMgbm90IGluIG1kYXN0IHR5cGVzXG4gICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxLCBqc3hOb2RlKVxuICAgIH1cblxuICAgIGlmIChub2RlLm5hbWUgPT09IFwiYXVkaW9cIiAmJiB0eXBlID09PSBcInNvdW5kY2xvdWRcIikge1xuICAgICAgY29uc3QgdXJsID0gbm9kZS5hdHRyaWJ1dGVzPy51cmxcbiAgICAgIGlmICghdXJsKSByZXR1cm5cblxuICAgICAgY29uc3QganN4Tm9kZSA9IHtcbiAgICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiIGFzIGNvbnN0LFxuICAgICAgICBuYW1lOiBcIlNvdW5kQ2xvdWRcIixcbiAgICAgICAgYXR0cmlidXRlczogW1xuICAgICAgICAgIHsgdHlwZTogXCJtZHhKc3hBdHRyaWJ1dGVcIiBhcyBjb25zdCwgbmFtZTogXCJ1cmxcIiwgdmFsdWU6IHVybCB9LFxuICAgICAgICBdLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIGRhdGE6IHsgX21keEV4cGxpY2l0SnN4OiB0cnVlIH0sXG4gICAgICB9XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWR4SnN4Rmxvd0VsZW1lbnQgaXMgbm90IGluIG1kYXN0IHR5cGVzXG4gICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxLCBqc3hOb2RlKVxuICAgIH1cbiAgfSlcbn1cblxuLyoqIFJlbWFyayBwbHVnaW4gdGhhdCBjb252ZXJ0cyBsZWFmIGRpcmVjdGl2ZXMgaW50byBtZWRpYSBlbWJlZCBKU1ggZWxlbWVudHMgKi9cbmV4cG9ydCBjb25zdCByZW1hcmtNZWRpYTogUGx1Z2luPFtdLCBSb290PiA9ICgpID0+IHtcbiAgcmV0dXJuIHRyZWUgPT4ge1xuICAgIHRyYW5zZm9ybU1lZGlhRGlyZWN0aXZlcyh0cmVlKVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, expect, it } from "vite-plus/test";
|
|
2
|
+
import { transformMediaDirectives } from "./remark-media.js";
|
|
3
|
+
function makeLeafDirective(name, attributes) {
|
|
4
|
+
return {
|
|
5
|
+
type: "leafDirective",
|
|
6
|
+
name,
|
|
7
|
+
attributes,
|
|
8
|
+
children: [],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function makeTree(...children) {
|
|
12
|
+
return { type: "root", children };
|
|
13
|
+
}
|
|
14
|
+
function process(tree) {
|
|
15
|
+
transformMediaDirectives(tree);
|
|
16
|
+
return tree;
|
|
17
|
+
}
|
|
18
|
+
describe("transformMediaDirectives", () => {
|
|
19
|
+
it("should convert video youtube directive to YouTube JSX element", () => {
|
|
20
|
+
const tree = process(makeTree(makeLeafDirective("video", { type: "youtube", id: "abc123" })));
|
|
21
|
+
const node = tree.children[0];
|
|
22
|
+
expect(node).toMatchObject({
|
|
23
|
+
type: "mdxJsxFlowElement",
|
|
24
|
+
name: "YouTube",
|
|
25
|
+
attributes: [{ type: "mdxJsxAttribute", name: "id", value: "abc123" }],
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
it("should convert audio soundcloud directive to SoundCloud JSX element", () => {
|
|
29
|
+
const url = "https://soundcloud.com/artist/track";
|
|
30
|
+
const tree = process(makeTree(makeLeafDirective("audio", { type: "soundcloud", url })));
|
|
31
|
+
const node = tree.children[0];
|
|
32
|
+
expect(node).toMatchObject({
|
|
33
|
+
type: "mdxJsxFlowElement",
|
|
34
|
+
name: "SoundCloud",
|
|
35
|
+
attributes: [{ type: "mdxJsxAttribute", name: "url", value: url }],
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
it("should skip video directive without type", () => {
|
|
39
|
+
const tree = process(makeTree(makeLeafDirective("video", { id: "abc123" })));
|
|
40
|
+
const node = tree.children[0];
|
|
41
|
+
expect(node).toMatchObject({ type: "leafDirective", name: "video" });
|
|
42
|
+
});
|
|
43
|
+
it("should skip audio directive without url", () => {
|
|
44
|
+
const tree = process(makeTree(makeLeafDirective("audio", { type: "soundcloud" })));
|
|
45
|
+
const node = tree.children[0];
|
|
46
|
+
expect(node).toMatchObject({ type: "leafDirective", name: "audio" });
|
|
47
|
+
});
|
|
48
|
+
it("should ignore unrelated leaf directives", () => {
|
|
49
|
+
const tree = process(makeTree(makeLeafDirective("include", { file: "test.md" })));
|
|
50
|
+
const node = tree.children[0];
|
|
51
|
+
expect(node).toMatchObject({ type: "leafDirective", name: "include" });
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLW1lZGlhLnVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcGx1Z2lucy9yZW1hcmstbWVkaWEudW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUU1RCxTQUFTLGlCQUFpQixDQUN4QixJQUFZLEVBQ1osVUFBa0M7SUFFbEMsT0FBTztRQUNMLElBQUksRUFBRSxlQUF3QztRQUM5QyxJQUFJO1FBQ0osVUFBVTtRQUNWLFFBQVEsRUFBRSxFQUFFO0tBQ2IsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxHQUFHLFFBQTBCO0lBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFBO0FBQ25DLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxJQUFVO0lBQ3pCLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzlCLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7SUFDeEMsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRTtRQUN2RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQ2xCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQ3hFLENBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDekIsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixJQUFJLEVBQUUsU0FBUztZQUNmLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEdBQUcsRUFBRTtRQUM3RSxNQUFNLEdBQUcsR0FBRyxxQ0FBcUMsQ0FBQTtRQUNqRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQ2xCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FDbEUsQ0FBQTtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUN6QixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLElBQUksRUFBRSxZQUFZO1lBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ25FLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM1RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQ2xCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUM3RCxDQUFBO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUN0RSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7UUFDakQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUNsQixRQUFRLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FDNUQsQ0FBQTtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDeEUsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUm9vdCB9IGZyb20gXCJtZGFzdFwiXG5pbXBvcnQgdHlwZSB7IExlYWZEaXJlY3RpdmUgfSBmcm9tIFwibWRhc3QtdXRpbC1kaXJlY3RpdmVcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZS1wbHVzL3Rlc3RcIlxuaW1wb3J0IHsgdHJhbnNmb3JtTWVkaWFEaXJlY3RpdmVzIH0gZnJvbSBcIi4vcmVtYXJrLW1lZGlhLnRzXCJcblxuZnVuY3Rpb24gbWFrZUxlYWZEaXJlY3RpdmUoXG4gIG5hbWU6IHN0cmluZyxcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IExlYWZEaXJlY3RpdmUge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwibGVhZkRpcmVjdGl2ZVwiIGFzIExlYWZEaXJlY3RpdmVbXCJ0eXBlXCJdLFxuICAgIG5hbWUsXG4gICAgYXR0cmlidXRlcyxcbiAgICBjaGlsZHJlbjogW10sXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZVRyZWUoLi4uY2hpbGRyZW46IFJvb3RbXCJjaGlsZHJlblwiXSk6IFJvb3Qge1xuICByZXR1cm4geyB0eXBlOiBcInJvb3RcIiwgY2hpbGRyZW4gfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzKHRyZWU6IFJvb3QpIHtcbiAgdHJhbnNmb3JtTWVkaWFEaXJlY3RpdmVzKHRyZWUpXG4gIHJldHVybiB0cmVlXG59XG5cbmRlc2NyaWJlKFwidHJhbnNmb3JtTWVkaWFEaXJlY3RpdmVzXCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgY29udmVydCB2aWRlbyB5b3V0dWJlIGRpcmVjdGl2ZSB0byBZb3VUdWJlIEpTWCBlbGVtZW50XCIsICgpID0+IHtcbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhcbiAgICAgIG1ha2VUcmVlKG1ha2VMZWFmRGlyZWN0aXZlKFwidmlkZW9cIiwgeyB0eXBlOiBcInlvdXR1YmVcIiwgaWQ6IFwiYWJjMTIzXCIgfSkpLFxuICAgIClcbiAgICBjb25zdCBub2RlID0gdHJlZS5jaGlsZHJlblswXVxuICAgIGV4cGVjdChub2RlKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6IFwibWR4SnN4Rmxvd0VsZW1lbnRcIixcbiAgICAgIG5hbWU6IFwiWW91VHViZVwiLFxuICAgICAgYXR0cmlidXRlczogW3sgdHlwZTogXCJtZHhKc3hBdHRyaWJ1dGVcIiwgbmFtZTogXCJpZFwiLCB2YWx1ZTogXCJhYmMxMjNcIiB9XSxcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGNvbnZlcnQgYXVkaW8gc291bmRjbG91ZCBkaXJlY3RpdmUgdG8gU291bmRDbG91ZCBKU1ggZWxlbWVudFwiLCAoKSA9PiB7XG4gICAgY29uc3QgdXJsID0gXCJodHRwczovL3NvdW5kY2xvdWQuY29tL2FydGlzdC90cmFja1wiXG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MoXG4gICAgICBtYWtlVHJlZShtYWtlTGVhZkRpcmVjdGl2ZShcImF1ZGlvXCIsIHsgdHlwZTogXCJzb3VuZGNsb3VkXCIsIHVybCB9KSksXG4gICAgKVxuICAgIGNvbnN0IG5vZGUgPSB0cmVlLmNoaWxkcmVuWzBdXG4gICAgZXhwZWN0KG5vZGUpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgbmFtZTogXCJTb3VuZENsb3VkXCIsXG4gICAgICBhdHRyaWJ1dGVzOiBbeyB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiLCBuYW1lOiBcInVybFwiLCB2YWx1ZTogdXJsIH1dLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgc2tpcCB2aWRlbyBkaXJlY3RpdmUgd2l0aG91dCB0eXBlXCIsICgpID0+IHtcbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhtYWtlVHJlZShtYWtlTGVhZkRpcmVjdGl2ZShcInZpZGVvXCIsIHsgaWQ6IFwiYWJjMTIzXCIgfSkpKVxuICAgIGNvbnN0IG5vZGUgPSB0cmVlLmNoaWxkcmVuWzBdXG4gICAgZXhwZWN0KG5vZGUpLnRvTWF0Y2hPYmplY3QoeyB0eXBlOiBcImxlYWZEaXJlY3RpdmVcIiwgbmFtZTogXCJ2aWRlb1wiIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgc2tpcCBhdWRpbyBkaXJlY3RpdmUgd2l0aG91dCB1cmxcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRyZWUgPSBwcm9jZXNzKFxuICAgICAgbWFrZVRyZWUobWFrZUxlYWZEaXJlY3RpdmUoXCJhdWRpb1wiLCB7IHR5cGU6IFwic291bmRjbG91ZFwiIH0pKSxcbiAgICApXG4gICAgY29uc3Qgbm9kZSA9IHRyZWUuY2hpbGRyZW5bMF1cbiAgICBleHBlY3Qobm9kZSkudG9NYXRjaE9iamVjdCh7IHR5cGU6IFwibGVhZkRpcmVjdGl2ZVwiLCBuYW1lOiBcImF1ZGlvXCIgfSlcbiAgfSlcblxuICBpdChcInNob3VsZCBpZ25vcmUgdW5yZWxhdGVkIGxlYWYgZGlyZWN0aXZlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MoXG4gICAgICBtYWtlVHJlZShtYWtlTGVhZkRpcmVjdGl2ZShcImluY2x1ZGVcIiwgeyBmaWxlOiBcInRlc3QubWRcIiB9KSksXG4gICAgKVxuICAgIGNvbnN0IG5vZGUgPSB0cmVlLmNoaWxkcmVuWzBdXG4gICAgZXhwZWN0KG5vZGUpLnRvTWF0Y2hPYmplY3QoeyB0eXBlOiBcImxlYWZEaXJlY3RpdmVcIiwgbmFtZTogXCJpbmNsdWRlXCIgfSlcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Remark plugin that converts mermaid code blocks into Mermaid components */
|
|
2
|
+
export const remarkMermaid = () => {
|
|
3
|
+
return tree => {
|
|
4
|
+
const children = tree.children;
|
|
5
|
+
for (let i = 0; i < children.length; i++) {
|
|
6
|
+
const node = children[i];
|
|
7
|
+
if (node?.type !== "code" || node.lang !== "mermaid")
|
|
8
|
+
continue;
|
|
9
|
+
const jsxNode = {
|
|
10
|
+
type: "mdxJsxFlowElement",
|
|
11
|
+
name: "Mermaid",
|
|
12
|
+
attributes: [],
|
|
13
|
+
children: [{ type: "text", value: node.value }],
|
|
14
|
+
};
|
|
15
|
+
// @ts-expect-error mdxJsxFlowElement is not in mdast types
|
|
16
|
+
children[i] = jsxNode;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLW1lcm1haWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcGx1Z2lucy9yZW1hcmstbWVybWFpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFxQixHQUFHLEVBQUU7SUFDbEQsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNaLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7UUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDeEIsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7Z0JBQUUsU0FBUTtZQUU5RCxNQUFNLE9BQU8sR0FBRztnQkFDZCxJQUFJLEVBQUUsbUJBQTRCO2dCQUNsQyxJQUFJLEVBQUUsU0FBUztnQkFDZixVQUFVLEVBQUUsRUFBRTtnQkFDZCxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUN6RCxDQUFBO1lBRUQsMkRBQTJEO1lBQzNELFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUE7UUFDdkIsQ0FBQztJQUNILENBQUMsQ0FBQTtBQUNILENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUm9vdCB9IGZyb20gXCJtZGFzdFwiXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gXCJ1bmlmaWVkXCJcblxuLyoqIFJlbWFyayBwbHVnaW4gdGhhdCBjb252ZXJ0cyBtZXJtYWlkIGNvZGUgYmxvY2tzIGludG8gTWVybWFpZCBjb21wb25lbnRzICovXG5leHBvcnQgY29uc3QgcmVtYXJrTWVybWFpZDogUGx1Z2luPFtdLCBSb290PiA9ICgpID0+IHtcbiAgcmV0dXJuIHRyZWUgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdHJlZS5jaGlsZHJlblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZHJlbltpXVxuICAgICAgaWYgKG5vZGU/LnR5cGUgIT09IFwiY29kZVwiIHx8IG5vZGUubGFuZyAhPT0gXCJtZXJtYWlkXCIpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IGpzeE5vZGUgPSB7XG4gICAgICAgIHR5cGU6IFwibWR4SnN4Rmxvd0VsZW1lbnRcIiBhcyBjb25zdCxcbiAgICAgICAgbmFtZTogXCJNZXJtYWlkXCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICBjaGlsZHJlbjogW3sgdHlwZTogXCJ0ZXh0XCIgYXMgY29uc3QsIHZhbHVlOiBub2RlLnZhbHVlIH1dLFxuICAgICAgfVxuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG1keEpzeEZsb3dFbGVtZW50IGlzIG5vdCBpbiBtZGFzdCB0eXBlc1xuICAgICAgY2hpbGRyZW5baV0gPSBqc3hOb2RlXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import convert from "npm-to-yarn";
|
|
2
|
+
const managers = ["npm", "pnpm", "yarn", "bun"];
|
|
3
|
+
// @ts-expect-error tsgo does not resolve npm-to-yarn default export correctly
|
|
4
|
+
const convertCommand = convert;
|
|
5
|
+
/** Remark plugin that converts npm code blocks into PackageTabs components */
|
|
6
|
+
export const remarkNpm = () => {
|
|
7
|
+
return tree => {
|
|
8
|
+
const children = tree.children;
|
|
9
|
+
for (let i = 0; i < children.length; i++) {
|
|
10
|
+
const node = children[i];
|
|
11
|
+
if (node?.type !== "code")
|
|
12
|
+
continue;
|
|
13
|
+
if (node.lang !== "npm" && node.lang !== "package-install")
|
|
14
|
+
continue;
|
|
15
|
+
const command = node.value.trim();
|
|
16
|
+
const attributes = managers.map(pm => ({
|
|
17
|
+
type: "mdxJsxAttribute",
|
|
18
|
+
name: pm,
|
|
19
|
+
value: convertCommand(command, pm),
|
|
20
|
+
}));
|
|
21
|
+
const jsxNode = {
|
|
22
|
+
type: "mdxJsxFlowElement",
|
|
23
|
+
name: "PackageTabs",
|
|
24
|
+
attributes,
|
|
25
|
+
children: [],
|
|
26
|
+
};
|
|
27
|
+
// @ts-expect-error mdxJsxFlowElement is not in mdast types
|
|
28
|
+
children[i] = jsxNode;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLW5wbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3JlbWFyay1ucG0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxPQUFPLE1BQU0sYUFBYSxDQUFBO0FBSWpDLE1BQU0sUUFBUSxHQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFlMUQsOEVBQThFO0FBQzlFLE1BQU0sY0FBYyxHQUFzQyxPQUFPLENBQUE7QUFFakUsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBcUIsR0FBRyxFQUFFO0lBQzlDLE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDWixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3hCLElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxNQUFNO2dCQUFFLFNBQVE7WUFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxTQUFRO1lBRXBFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDakMsTUFBTSxVQUFVLEdBQXNCLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLEVBQUUsaUJBQTBCO2dCQUNoQyxJQUFJLEVBQUUsRUFBRTtnQkFDUixLQUFLLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7YUFDbkMsQ0FBQyxDQUFDLENBQUE7WUFFSCxNQUFNLE9BQU8sR0FBc0I7Z0JBQ2pDLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxhQUFhO2dCQUNuQixVQUFVO2dCQUNWLFFBQVEsRUFBRSxFQUFFO2FBQ2IsQ0FBQTtZQUVELDJEQUEyRDtZQUMzRCxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFBO1FBQ3ZCLENBQUM7SUFDSCxDQUFDLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJvb3QgfSBmcm9tIFwibWRhc3RcIlxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tIFwidW5pZmllZFwiXG5pbXBvcnQgY29udmVydCBmcm9tIFwibnBtLXRvLXlhcm5cIlxuXG50eXBlIE1hbmFnZXIgPSBcIm5wbVwiIHwgXCJwbnBtXCIgfCBcInlhcm5cIiB8IFwiYnVuXCJcblxuY29uc3QgbWFuYWdlcnM6IE1hbmFnZXJbXSA9IFtcIm5wbVwiLCBcInBucG1cIiwgXCJ5YXJuXCIsIFwiYnVuXCJdXG5cbmludGVyZmFjZSBNZHhKc3hBdHRyaWJ1dGUge1xuICB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiXG4gIG5hbWU6IHN0cmluZ1xuICB2YWx1ZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBNZHhKc3hGbG93RWxlbWVudCB7XG4gIHR5cGU6IFwibWR4SnN4Rmxvd0VsZW1lbnRcIlxuICBuYW1lOiBzdHJpbmdcbiAgYXR0cmlidXRlczogTWR4SnN4QXR0cmlidXRlW11cbiAgY2hpbGRyZW46IFtdXG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgdHNnbyBkb2VzIG5vdCByZXNvbHZlIG5wbS10by15YXJuIGRlZmF1bHQgZXhwb3J0IGNvcnJlY3RseVxuY29uc3QgY29udmVydENvbW1hbmQ6IChzOiBzdHJpbmcsIHRvOiBzdHJpbmcpID0+IHN0cmluZyA9IGNvbnZlcnRcblxuLyoqIFJlbWFyayBwbHVnaW4gdGhhdCBjb252ZXJ0cyBucG0gY29kZSBibG9ja3MgaW50byBQYWNrYWdlVGFicyBjb21wb25lbnRzICovXG5leHBvcnQgY29uc3QgcmVtYXJrTnBtOiBQbHVnaW48W10sIFJvb3Q+ID0gKCkgPT4ge1xuICByZXR1cm4gdHJlZSA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0cmVlLmNoaWxkcmVuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkcmVuW2ldXG4gICAgICBpZiAobm9kZT8udHlwZSAhPT0gXCJjb2RlXCIpIGNvbnRpbnVlXG4gICAgICBpZiAobm9kZS5sYW5nICE9PSBcIm5wbVwiICYmIG5vZGUubGFuZyAhPT0gXCJwYWNrYWdlLWluc3RhbGxcIikgY29udGludWVcblxuICAgICAgY29uc3QgY29tbWFuZCA9IG5vZGUudmFsdWUudHJpbSgpXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzOiBNZHhKc3hBdHRyaWJ1dGVbXSA9IG1hbmFnZXJzLm1hcChwbSA9PiAoe1xuICAgICAgICB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiIGFzIGNvbnN0LFxuICAgICAgICBuYW1lOiBwbSxcbiAgICAgICAgdmFsdWU6IGNvbnZlcnRDb21tYW5kKGNvbW1hbmQsIHBtKSxcbiAgICAgIH0pKVxuXG4gICAgICBjb25zdCBqc3hOb2RlOiBNZHhKc3hGbG93RWxlbWVudCA9IHtcbiAgICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgICBuYW1lOiBcIlBhY2thZ2VUYWJzXCIsXG4gICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBtZHhKc3hGbG93RWxlbWVudCBpcyBub3QgaW4gbWRhc3QgdHlwZXNcbiAgICAgIGNoaWxkcmVuW2ldID0ganN4Tm9kZVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Root } from "mdast";
|
|
2
|
+
import type { Plugin } from "unified";
|
|
3
|
+
/** Walk a mdast tree, strip `[step]` suffixes from headings, and add a `data-step` attribute */
|
|
4
|
+
export declare function transformStepHeadings(tree: Root): void;
|
|
5
|
+
/** Remark plugin that converts `[step]` heading suffixes into numbered step markers */
|
|
6
|
+
export declare const remarkSteps: Plugin<[], Root>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { visit } from "unist-util-visit";
|
|
2
|
+
const STEP_PATTERN = /\s*\[step\]\s*$/;
|
|
3
|
+
/** Walk a mdast tree, strip `[step]` suffixes from headings, and add a `data-step` attribute */
|
|
4
|
+
export function transformStepHeadings(tree) {
|
|
5
|
+
let stepNumber = 0;
|
|
6
|
+
visit(tree, "heading", (node) => {
|
|
7
|
+
const lastChild = node.children[node.children.length - 1];
|
|
8
|
+
if (!lastChild || lastChild.type !== "text")
|
|
9
|
+
return;
|
|
10
|
+
if (!STEP_PATTERN.test(lastChild.value))
|
|
11
|
+
return;
|
|
12
|
+
stepNumber += 1;
|
|
13
|
+
lastChild.value = lastChild.value.replace(STEP_PATTERN, "");
|
|
14
|
+
if (lastChild.value === "" && node.children.length > 1) {
|
|
15
|
+
node.children.pop();
|
|
16
|
+
}
|
|
17
|
+
node.data = node.data ?? {};
|
|
18
|
+
node.data.hProperties = {
|
|
19
|
+
...node.data.hProperties,
|
|
20
|
+
"data-step": stepNumber,
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/** Remark plugin that converts `[step]` heading suffixes into numbered step markers */
|
|
25
|
+
export const remarkSteps = () => {
|
|
26
|
+
return tree => {
|
|
27
|
+
transformStepHeadings(tree);
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLXN0ZXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3BsdWdpbnMvcmVtYXJrLXN0ZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV4QyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQTtBQUV0QyxnR0FBZ0c7QUFDaEcsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQVU7SUFDOUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFBO0lBRWxCLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBYSxFQUFFLEVBQUU7UUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUN6RCxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTTtZQUFFLE9BQU07UUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU07UUFFL0MsVUFBVSxJQUFJLENBQUMsQ0FBQTtRQUNmLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRTNELElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUN0QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUN4QixXQUFXLEVBQUUsVUFBVTtTQUN4QixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBcUIsR0FBRyxFQUFFO0lBQ2hELE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDWixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM3QixDQUFDLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEhlYWRpbmcsIFJvb3QgfSBmcm9tIFwibWRhc3RcIlxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tIFwidW5pZmllZFwiXG5pbXBvcnQgeyB2aXNpdCB9IGZyb20gXCJ1bmlzdC11dGlsLXZpc2l0XCJcblxuY29uc3QgU1RFUF9QQVRURVJOID0gL1xccypcXFtzdGVwXFxdXFxzKiQvXG5cbi8qKiBXYWxrIGEgbWRhc3QgdHJlZSwgc3RyaXAgYFtzdGVwXWAgc3VmZml4ZXMgZnJvbSBoZWFkaW5ncywgYW5kIGFkZCBhIGBkYXRhLXN0ZXBgIGF0dHJpYnV0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVN0ZXBIZWFkaW5ncyh0cmVlOiBSb290KSB7XG4gIGxldCBzdGVwTnVtYmVyID0gMFxuXG4gIHZpc2l0KHRyZWUsIFwiaGVhZGluZ1wiLCAobm9kZTogSGVhZGluZykgPT4ge1xuICAgIGNvbnN0IGxhc3RDaGlsZCA9IG5vZGUuY2hpbGRyZW5bbm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXVxuICAgIGlmICghbGFzdENoaWxkIHx8IGxhc3RDaGlsZC50eXBlICE9PSBcInRleHRcIikgcmV0dXJuXG4gICAgaWYgKCFTVEVQX1BBVFRFUk4udGVzdChsYXN0Q2hpbGQudmFsdWUpKSByZXR1cm5cblxuICAgIHN0ZXBOdW1iZXIgKz0gMVxuICAgIGxhc3RDaGlsZC52YWx1ZSA9IGxhc3RDaGlsZC52YWx1ZS5yZXBsYWNlKFNURVBfUEFUVEVSTiwgXCJcIilcblxuICAgIGlmIChsYXN0Q2hpbGQudmFsdWUgPT09IFwiXCIgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLnBvcCgpXG4gICAgfVxuXG4gICAgbm9kZS5kYXRhID0gbm9kZS5kYXRhID8/IHt9XG4gICAgbm9kZS5kYXRhLmhQcm9wZXJ0aWVzID0ge1xuICAgICAgLi4ubm9kZS5kYXRhLmhQcm9wZXJ0aWVzLFxuICAgICAgXCJkYXRhLXN0ZXBcIjogc3RlcE51bWJlcixcbiAgICB9XG4gIH0pXG59XG5cbi8qKiBSZW1hcmsgcGx1Z2luIHRoYXQgY29udmVydHMgYFtzdGVwXWAgaGVhZGluZyBzdWZmaXhlcyBpbnRvIG51bWJlcmVkIHN0ZXAgbWFya2VycyAqL1xuZXhwb3J0IGNvbnN0IHJlbWFya1N0ZXBzOiBQbHVnaW48W10sIFJvb3Q+ID0gKCkgPT4ge1xuICByZXR1cm4gdHJlZSA9PiB7XG4gICAgdHJhbnNmb3JtU3RlcEhlYWRpbmdzKHRyZWUpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { describe, expect, it } from "vite-plus/test";
|
|
2
|
+
import { transformStepHeadings } from "./remark-steps.js";
|
|
3
|
+
function makeHeading(depth, text) {
|
|
4
|
+
return { type: "heading", depth, children: [{ type: "text", value: text }] };
|
|
5
|
+
}
|
|
6
|
+
function makeTree(...children) {
|
|
7
|
+
return { type: "root", children };
|
|
8
|
+
}
|
|
9
|
+
function findHeading(tree, index) {
|
|
10
|
+
const node = tree.children[index];
|
|
11
|
+
if (!node || node.type !== "heading")
|
|
12
|
+
throw new Error("No heading at index");
|
|
13
|
+
return node;
|
|
14
|
+
}
|
|
15
|
+
function headingText(heading) {
|
|
16
|
+
return heading.children
|
|
17
|
+
.filter((c) => c.type === "text")
|
|
18
|
+
.map(c => c.value)
|
|
19
|
+
.join("");
|
|
20
|
+
}
|
|
21
|
+
describe("transformStepHeadings", () => {
|
|
22
|
+
function process(tree) {
|
|
23
|
+
transformStepHeadings(tree);
|
|
24
|
+
return tree;
|
|
25
|
+
}
|
|
26
|
+
it("should strip [step] and set data-step attribute", () => {
|
|
27
|
+
const tree = process(makeTree(makeHeading(3, "Install Dependencies [step]")));
|
|
28
|
+
const heading = findHeading(tree, 0);
|
|
29
|
+
expect(heading.data?.hProperties).toEqual({ "data-step": 1 });
|
|
30
|
+
expect(headingText(heading)).toBe("Install Dependencies");
|
|
31
|
+
});
|
|
32
|
+
it("should auto-increment step numbers", () => {
|
|
33
|
+
const tree = process(makeTree(makeHeading(3, "Step One [step]"), makeHeading(3, "Step Two [step]"), makeHeading(3, "Step Three [step]")));
|
|
34
|
+
expect(findHeading(tree, 0).data?.hProperties).toEqual({ "data-step": 1 });
|
|
35
|
+
expect(findHeading(tree, 1).data?.hProperties).toEqual({ "data-step": 2 });
|
|
36
|
+
expect(findHeading(tree, 2).data?.hProperties).toEqual({ "data-step": 3 });
|
|
37
|
+
});
|
|
38
|
+
it("should leave headings without [step] unchanged", () => {
|
|
39
|
+
const tree = process(makeTree(makeHeading(2, "Normal Heading")));
|
|
40
|
+
const heading = findHeading(tree, 0);
|
|
41
|
+
expect(heading.data).toBeUndefined();
|
|
42
|
+
expect(headingText(heading)).toBe("Normal Heading");
|
|
43
|
+
});
|
|
44
|
+
it("should only count [step] headings for numbering", () => {
|
|
45
|
+
const tree = process(makeTree(makeHeading(3, "First [step]"), makeHeading(3, "Not a step"), makeHeading(3, "Second [step]")));
|
|
46
|
+
expect(findHeading(tree, 0).data?.hProperties).toEqual({ "data-step": 1 });
|
|
47
|
+
expect(findHeading(tree, 1).data).toBeUndefined();
|
|
48
|
+
expect(findHeading(tree, 2).data?.hProperties).toEqual({ "data-step": 2 });
|
|
49
|
+
});
|
|
50
|
+
it("should handle different heading depths", () => {
|
|
51
|
+
const tree = process(makeTree(makeHeading(2, "Big Step [step]"), makeHeading(4, "Small Step [step]")));
|
|
52
|
+
expect(findHeading(tree, 0).data?.hProperties).toEqual({ "data-step": 1 });
|
|
53
|
+
expect(findHeading(tree, 1).data?.hProperties).toEqual({ "data-step": 2 });
|
|
54
|
+
});
|
|
55
|
+
it("should preserve existing hProperties", () => {
|
|
56
|
+
const heading = makeHeading(3, "Custom [step]");
|
|
57
|
+
heading.data = { hProperties: { id: "custom-id" } };
|
|
58
|
+
const tree = process(makeTree(heading));
|
|
59
|
+
expect(findHeading(tree, 0).data?.hProperties).toEqual({
|
|
60
|
+
id: "custom-id",
|
|
61
|
+
"data-step": 1,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLXN0ZXBzLnVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcGx1Z2lucy9yZW1hcmstc3RlcHMudW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUV6RCxTQUFTLFdBQVcsQ0FBQyxLQUE0QixFQUFFLElBQVk7SUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFBO0FBQzlFLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxHQUFHLFFBQTBCO0lBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFBO0FBQ25DLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFVLEVBQUUsS0FBYTtJQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2pDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0lBQzVFLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLE9BQWdCO0lBQ25DLE9BQU8sT0FBTyxDQUFDLFFBQVE7U0FDcEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztTQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2pCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUNiLENBQUM7QUFFRCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO0lBQ3JDLFNBQVMsT0FBTyxDQUFDLElBQVU7UUFDekIscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDM0IsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtRQUN6RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQ2xCLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLDZCQUE2QixDQUFDLENBQUMsQ0FDeEQsQ0FBQTtRQUNELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDN0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0lBQzNELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtRQUM1QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQ2xCLFFBQVEsQ0FDTixXQUFXLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLEVBQ2pDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsRUFDakMsV0FBVyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUNwQyxDQUNGLENBQUE7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDMUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM1RSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7UUFDeEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNwQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDckQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1FBQ3pELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FDbEIsUUFBUSxDQUNOLFdBQVcsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQzlCLFdBQVcsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQzVCLFdBQVcsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQ2hDLENBQ0YsQ0FBQTtRQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMxRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNqRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDNUUsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FDbEIsUUFBUSxDQUNOLFdBQVcsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsRUFDakMsV0FBVyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUNwQyxDQUNGLENBQUE7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDMUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzVFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQy9DLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQTtRQUNuRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNyRCxFQUFFLEVBQUUsV0FBVztZQUNmLFdBQVcsRUFBRSxDQUFDO1NBQ2YsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSGVhZGluZywgUm9vdCwgVGV4dCB9IGZyb20gXCJtZGFzdFwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlLXBsdXMvdGVzdFwiXG5pbXBvcnQgeyB0cmFuc2Zvcm1TdGVwSGVhZGluZ3MgfSBmcm9tIFwiLi9yZW1hcmstc3RlcHMudHNcIlxuXG5mdW5jdGlvbiBtYWtlSGVhZGluZyhkZXB0aDogMSB8IDIgfCAzIHwgNCB8IDUgfCA2LCB0ZXh0OiBzdHJpbmcpOiBIZWFkaW5nIHtcbiAgcmV0dXJuIHsgdHlwZTogXCJoZWFkaW5nXCIsIGRlcHRoLCBjaGlsZHJlbjogW3sgdHlwZTogXCJ0ZXh0XCIsIHZhbHVlOiB0ZXh0IH1dIH1cbn1cblxuZnVuY3Rpb24gbWFrZVRyZWUoLi4uY2hpbGRyZW46IFJvb3RbXCJjaGlsZHJlblwiXSk6IFJvb3Qge1xuICByZXR1cm4geyB0eXBlOiBcInJvb3RcIiwgY2hpbGRyZW4gfVxufVxuXG5mdW5jdGlvbiBmaW5kSGVhZGluZyh0cmVlOiBSb290LCBpbmRleDogbnVtYmVyKTogSGVhZGluZyB7XG4gIGNvbnN0IG5vZGUgPSB0cmVlLmNoaWxkcmVuW2luZGV4XVxuICBpZiAoIW5vZGUgfHwgbm9kZS50eXBlICE9PSBcImhlYWRpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiTm8gaGVhZGluZyBhdCBpbmRleFwiKVxuICByZXR1cm4gbm9kZVxufVxuXG5mdW5jdGlvbiBoZWFkaW5nVGV4dChoZWFkaW5nOiBIZWFkaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGhlYWRpbmcuY2hpbGRyZW5cbiAgICAuZmlsdGVyKChjKTogYyBpcyBUZXh0ID0+IGMudHlwZSA9PT0gXCJ0ZXh0XCIpXG4gICAgLm1hcChjID0+IGMudmFsdWUpXG4gICAgLmpvaW4oXCJcIilcbn1cblxuZGVzY3JpYmUoXCJ0cmFuc2Zvcm1TdGVwSGVhZGluZ3NcIiwgKCkgPT4ge1xuICBmdW5jdGlvbiBwcm9jZXNzKHRyZWU6IFJvb3QpIHtcbiAgICB0cmFuc2Zvcm1TdGVwSGVhZGluZ3ModHJlZSlcbiAgICByZXR1cm4gdHJlZVxuICB9XG5cbiAgaXQoXCJzaG91bGQgc3RyaXAgW3N0ZXBdIGFuZCBzZXQgZGF0YS1zdGVwIGF0dHJpYnV0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MoXG4gICAgICBtYWtlVHJlZShtYWtlSGVhZGluZygzLCBcIkluc3RhbGwgRGVwZW5kZW5jaWVzIFtzdGVwXVwiKSksXG4gICAgKVxuICAgIGNvbnN0IGhlYWRpbmcgPSBmaW5kSGVhZGluZyh0cmVlLCAwKVxuICAgIGV4cGVjdChoZWFkaW5nLmRhdGE/LmhQcm9wZXJ0aWVzKS50b0VxdWFsKHsgXCJkYXRhLXN0ZXBcIjogMSB9KVxuICAgIGV4cGVjdChoZWFkaW5nVGV4dChoZWFkaW5nKSkudG9CZShcIkluc3RhbGwgRGVwZW5kZW5jaWVzXCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgYXV0by1pbmNyZW1lbnQgc3RlcCBudW1iZXJzXCIsICgpID0+IHtcbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhcbiAgICAgIG1ha2VUcmVlKFxuICAgICAgICBtYWtlSGVhZGluZygzLCBcIlN0ZXAgT25lIFtzdGVwXVwiKSxcbiAgICAgICAgbWFrZUhlYWRpbmcoMywgXCJTdGVwIFR3byBbc3RlcF1cIiksXG4gICAgICAgIG1ha2VIZWFkaW5nKDMsIFwiU3RlcCBUaHJlZSBbc3RlcF1cIiksXG4gICAgICApLFxuICAgIClcblxuICAgIGV4cGVjdChmaW5kSGVhZGluZyh0cmVlLCAwKS5kYXRhPy5oUHJvcGVydGllcykudG9FcXVhbCh7IFwiZGF0YS1zdGVwXCI6IDEgfSlcbiAgICBleHBlY3QoZmluZEhlYWRpbmcodHJlZSwgMSkuZGF0YT8uaFByb3BlcnRpZXMpLnRvRXF1YWwoeyBcImRhdGEtc3RlcFwiOiAyIH0pXG4gICAgZXhwZWN0KGZpbmRIZWFkaW5nKHRyZWUsIDIpLmRhdGE/LmhQcm9wZXJ0aWVzKS50b0VxdWFsKHsgXCJkYXRhLXN0ZXBcIjogMyB9KVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxlYXZlIGhlYWRpbmdzIHdpdGhvdXQgW3N0ZXBdIHVuY2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MobWFrZVRyZWUobWFrZUhlYWRpbmcoMiwgXCJOb3JtYWwgSGVhZGluZ1wiKSkpXG4gICAgY29uc3QgaGVhZGluZyA9IGZpbmRIZWFkaW5nKHRyZWUsIDApXG4gICAgZXhwZWN0KGhlYWRpbmcuZGF0YSkudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KGhlYWRpbmdUZXh0KGhlYWRpbmcpKS50b0JlKFwiTm9ybWFsIEhlYWRpbmdcIilcbiAgfSlcblxuICBpdChcInNob3VsZCBvbmx5IGNvdW50IFtzdGVwXSBoZWFkaW5ncyBmb3IgbnVtYmVyaW5nXCIsICgpID0+IHtcbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhcbiAgICAgIG1ha2VUcmVlKFxuICAgICAgICBtYWtlSGVhZGluZygzLCBcIkZpcnN0IFtzdGVwXVwiKSxcbiAgICAgICAgbWFrZUhlYWRpbmcoMywgXCJOb3QgYSBzdGVwXCIpLFxuICAgICAgICBtYWtlSGVhZGluZygzLCBcIlNlY29uZCBbc3RlcF1cIiksXG4gICAgICApLFxuICAgIClcblxuICAgIGV4cGVjdChmaW5kSGVhZGluZyh0cmVlLCAwKS5kYXRhPy5oUHJvcGVydGllcykudG9FcXVhbCh7IFwiZGF0YS1zdGVwXCI6IDEgfSlcbiAgICBleHBlY3QoZmluZEhlYWRpbmcodHJlZSwgMSkuZGF0YSkudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KGZpbmRIZWFkaW5nKHRyZWUsIDIpLmRhdGE/LmhQcm9wZXJ0aWVzKS50b0VxdWFsKHsgXCJkYXRhLXN0ZXBcIjogMiB9KVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGhhbmRsZSBkaWZmZXJlbnQgaGVhZGluZyBkZXB0aHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRyZWUgPSBwcm9jZXNzKFxuICAgICAgbWFrZVRyZWUoXG4gICAgICAgIG1ha2VIZWFkaW5nKDIsIFwiQmlnIFN0ZXAgW3N0ZXBdXCIpLFxuICAgICAgICBtYWtlSGVhZGluZyg0LCBcIlNtYWxsIFN0ZXAgW3N0ZXBdXCIpLFxuICAgICAgKSxcbiAgICApXG5cbiAgICBleHBlY3QoZmluZEhlYWRpbmcodHJlZSwgMCkuZGF0YT8uaFByb3BlcnRpZXMpLnRvRXF1YWwoeyBcImRhdGEtc3RlcFwiOiAxIH0pXG4gICAgZXhwZWN0KGZpbmRIZWFkaW5nKHRyZWUsIDEpLmRhdGE/LmhQcm9wZXJ0aWVzKS50b0VxdWFsKHsgXCJkYXRhLXN0ZXBcIjogMiB9KVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHByZXNlcnZlIGV4aXN0aW5nIGhQcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICBjb25zdCBoZWFkaW5nID0gbWFrZUhlYWRpbmcoMywgXCJDdXN0b20gW3N0ZXBdXCIpXG4gICAgaGVhZGluZy5kYXRhID0geyBoUHJvcGVydGllczogeyBpZDogXCJjdXN0b20taWRcIiB9IH1cbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhtYWtlVHJlZShoZWFkaW5nKSlcbiAgICBleHBlY3QoZmluZEhlYWRpbmcodHJlZSwgMCkuZGF0YT8uaFByb3BlcnRpZXMpLnRvRXF1YWwoe1xuICAgICAgaWQ6IFwiY3VzdG9tLWlkXCIsXG4gICAgICBcImRhdGEtc3RlcFwiOiAxLFxuICAgIH0pXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Root } from "mdast";
|
|
2
|
+
import type { Plugin } from "unified";
|
|
3
|
+
/** Walk a mdast tree and convert :::tab directives into ContentTab/ContentTabs JSX elements */
|
|
4
|
+
export declare function transformTabDirectives(tree: Root): void;
|
|
5
|
+
/** Remark plugin that converts :::tab directives into ContentTab/ContentTabs JSX elements */
|
|
6
|
+
export declare const remarkTab: Plugin<[], Root>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { visit, SKIP } from "unist-util-visit";
|
|
2
|
+
/** Walk a mdast tree and convert :::tab directives into ContentTab/ContentTabs JSX elements */
|
|
3
|
+
export function transformTabDirectives(tree) {
|
|
4
|
+
visit(tree, "containerDirective", (node, index, parent) => {
|
|
5
|
+
if (node.name !== "tab" || index === undefined || !parent)
|
|
6
|
+
return;
|
|
7
|
+
const title = node.attributes?.title ?? "";
|
|
8
|
+
const sync = node.attributes?.sync;
|
|
9
|
+
const attrs = [{ type: "mdxJsxAttribute", name: "title", value: title }];
|
|
10
|
+
if (sync) {
|
|
11
|
+
attrs.push({
|
|
12
|
+
type: "mdxJsxAttribute",
|
|
13
|
+
name: "sync",
|
|
14
|
+
value: sync,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const jsxNode = {
|
|
18
|
+
type: "mdxJsxFlowElement",
|
|
19
|
+
name: "ContentTab",
|
|
20
|
+
attributes: attrs,
|
|
21
|
+
children: node.children,
|
|
22
|
+
data: { _mdxExplicitJsx: true },
|
|
23
|
+
};
|
|
24
|
+
// @ts-expect-error mdxJsxFlowElement is not in mdast types
|
|
25
|
+
parent.children[index] = jsxNode;
|
|
26
|
+
return SKIP;
|
|
27
|
+
});
|
|
28
|
+
const children = tree.children;
|
|
29
|
+
let i = 0;
|
|
30
|
+
while (i < children.length) {
|
|
31
|
+
const node = children[i];
|
|
32
|
+
// @ts-expect-error mdxJsxFlowElement is not in mdast types
|
|
33
|
+
if (node?.type !== "mdxJsxFlowElement" || node.name !== "ContentTab") {
|
|
34
|
+
i++;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
let j = i + 1;
|
|
38
|
+
while (j < children.length) {
|
|
39
|
+
const next = children[j];
|
|
40
|
+
// @ts-expect-error mdxJsxFlowElement is not in mdast types
|
|
41
|
+
if (next?.type !== "mdxJsxFlowElement" || next.name !== "ContentTab")
|
|
42
|
+
break;
|
|
43
|
+
j++;
|
|
44
|
+
}
|
|
45
|
+
const group = children.slice(i, j);
|
|
46
|
+
const firstChild = group[0];
|
|
47
|
+
// @ts-expect-error accessing mdxJsx attributes on untyped node
|
|
48
|
+
const syncAttr = firstChild?.attributes?.find((a) => a.name === "sync");
|
|
49
|
+
const wrapperAttrs = syncAttr
|
|
50
|
+
? [
|
|
51
|
+
{
|
|
52
|
+
type: "mdxJsxAttribute",
|
|
53
|
+
name: "sync",
|
|
54
|
+
value: syncAttr.value,
|
|
55
|
+
},
|
|
56
|
+
]
|
|
57
|
+
: [];
|
|
58
|
+
const wrapper = {
|
|
59
|
+
type: "mdxJsxFlowElement",
|
|
60
|
+
name: "ContentTabs",
|
|
61
|
+
attributes: wrapperAttrs,
|
|
62
|
+
children: group,
|
|
63
|
+
data: { _mdxExplicitJsx: true },
|
|
64
|
+
};
|
|
65
|
+
// @ts-expect-error mdxJsxFlowElement is not in mdast types
|
|
66
|
+
children.splice(i, j - i, wrapper);
|
|
67
|
+
i++;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** Remark plugin that converts :::tab directives into ContentTab/ContentTabs JSX elements */
|
|
71
|
+
export const remarkTab = () => {
|
|
72
|
+
return tree => {
|
|
73
|
+
transformTabDirectives(tree);
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLXRhYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3JlbWFyay10YWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUU5QywrRkFBK0Y7QUFDL0YsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQVU7SUFDL0MsS0FBSyxDQUNILElBQUksRUFDSixvQkFBb0IsRUFDcEIsQ0FBQyxJQUF3QixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTTtRQUVqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUE7UUFDMUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUE7UUFFbEMsTUFBTSxLQUFLLEdBQ1QsQ0FBQyxFQUFFLElBQUksRUFBRSxpQkFBMEIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNULElBQUksRUFBRSxpQkFBMEI7Z0JBQ2hDLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLG1CQUE0QjtZQUNsQyxJQUFJLEVBQUUsWUFBWTtZQUNsQixVQUFVLEVBQUUsS0FBSztZQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRTtTQUNoQyxDQUFBO1FBRUQsMkRBQTJEO1FBQzNELE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFBO1FBQ2hDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQyxDQUNGLENBQUE7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNULE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEIsMkRBQTJEO1FBQzNELElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3JFLENBQUMsRUFBRSxDQUFBO1lBQ0gsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2IsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN4QiwyREFBMkQ7WUFDM0QsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLG1CQUFtQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWTtnQkFDbEUsTUFBSztZQUNQLENBQUMsRUFBRSxDQUFBO1FBQ0wsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBRWxDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzQiwrREFBK0Q7UUFDL0QsTUFBTSxRQUFRLEdBQUcsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQzNDLENBQUMsQ0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQzNDLENBQUE7UUFDRCxNQUFNLFlBQVksR0FJWixRQUFRO1lBQ1osQ0FBQyxDQUFDO2dCQUNFO29CQUNFLElBQUksRUFBRSxpQkFBMEI7b0JBQ2hDLElBQUksRUFBRSxNQUFNO29CQUNaLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztpQkFDdEI7YUFDRjtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFTixNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxtQkFBNEI7WUFDbEMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsVUFBVSxFQUFFLFlBQVk7WUFDeEIsUUFBUSxFQUFFLEtBQUs7WUFDZixJQUFJLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFO1NBQ2hDLENBQUE7UUFFRCwyREFBMkQ7UUFDM0QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNsQyxDQUFDLEVBQUUsQ0FBQTtJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQsNkZBQTZGO0FBQzdGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBcUIsR0FBRyxFQUFFO0lBQzlDLE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDWixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM5QixDQUFDLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJvb3QgfSBmcm9tIFwibWRhc3RcIlxuaW1wb3J0IHR5cGUgeyBDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tIFwibWRhc3QtdXRpbC1kaXJlY3RpdmVcIlxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tIFwidW5pZmllZFwiXG5pbXBvcnQgeyB2aXNpdCwgU0tJUCB9IGZyb20gXCJ1bmlzdC11dGlsLXZpc2l0XCJcblxuLyoqIFdhbGsgYSBtZGFzdCB0cmVlIGFuZCBjb252ZXJ0IDo6OnRhYiBkaXJlY3RpdmVzIGludG8gQ29udGVudFRhYi9Db250ZW50VGFicyBKU1ggZWxlbWVudHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1UYWJEaXJlY3RpdmVzKHRyZWU6IFJvb3QpIHtcbiAgdmlzaXQoXG4gICAgdHJlZSxcbiAgICBcImNvbnRhaW5lckRpcmVjdGl2ZVwiLFxuICAgIChub2RlOiBDb250YWluZXJEaXJlY3RpdmUsIGluZGV4LCBwYXJlbnQpID0+IHtcbiAgICAgIGlmIChub2RlLm5hbWUgIT09IFwidGFiXCIgfHwgaW5kZXggPT09IHVuZGVmaW5lZCB8fCAhcGFyZW50KSByZXR1cm5cblxuICAgICAgY29uc3QgdGl0bGUgPSBub2RlLmF0dHJpYnV0ZXM/LnRpdGxlID8/IFwiXCJcbiAgICAgIGNvbnN0IHN5bmMgPSBub2RlLmF0dHJpYnV0ZXM/LnN5bmNcblxuICAgICAgY29uc3QgYXR0cnM6IHsgdHlwZTogXCJtZHhKc3hBdHRyaWJ1dGVcIjsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9XG4gICAgICAgIFt7IHR5cGU6IFwibWR4SnN4QXR0cmlidXRlXCIgYXMgY29uc3QsIG5hbWU6IFwidGl0bGVcIiwgdmFsdWU6IHRpdGxlIH1dXG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBhdHRycy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6IFwic3luY1wiLFxuICAgICAgICAgIHZhbHVlOiBzeW5jLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBqc3hOb2RlID0ge1xuICAgICAgICB0eXBlOiBcIm1keEpzeEZsb3dFbGVtZW50XCIgYXMgY29uc3QsXG4gICAgICAgIG5hbWU6IFwiQ29udGVudFRhYlwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4sXG4gICAgICAgIGRhdGE6IHsgX21keEV4cGxpY2l0SnN4OiB0cnVlIH0sXG4gICAgICB9XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWR4SnN4Rmxvd0VsZW1lbnQgaXMgbm90IGluIG1kYXN0IHR5cGVzXG4gICAgICBwYXJlbnQuY2hpbGRyZW5baW5kZXhdID0ganN4Tm9kZVxuICAgICAgcmV0dXJuIFNLSVBcbiAgICB9LFxuICApXG5cbiAgY29uc3QgY2hpbGRyZW4gPSB0cmVlLmNoaWxkcmVuXG4gIGxldCBpID0gMFxuICB3aGlsZSAoaSA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIGNvbnN0IG5vZGUgPSBjaGlsZHJlbltpXVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWR4SnN4Rmxvd0VsZW1lbnQgaXMgbm90IGluIG1kYXN0IHR5cGVzXG4gICAgaWYgKG5vZGU/LnR5cGUgIT09IFwibWR4SnN4Rmxvd0VsZW1lbnRcIiB8fCBub2RlLm5hbWUgIT09IFwiQ29udGVudFRhYlwiKSB7XG4gICAgICBpKytcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgbGV0IGogPSBpICsgMVxuICAgIHdoaWxlIChqIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0ID0gY2hpbGRyZW5bal1cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWR4SnN4Rmxvd0VsZW1lbnQgaXMgbm90IGluIG1kYXN0IHR5cGVzXG4gICAgICBpZiAobmV4dD8udHlwZSAhPT0gXCJtZHhKc3hGbG93RWxlbWVudFwiIHx8IG5leHQubmFtZSAhPT0gXCJDb250ZW50VGFiXCIpXG4gICAgICAgIGJyZWFrXG4gICAgICBqKytcbiAgICB9XG5cbiAgICBjb25zdCBncm91cCA9IGNoaWxkcmVuLnNsaWNlKGksIGopXG5cbiAgICBjb25zdCBmaXJzdENoaWxkID0gZ3JvdXBbMF1cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBtZHhKc3ggYXR0cmlidXRlcyBvbiB1bnR5cGVkIG5vZGVcbiAgICBjb25zdCBzeW5jQXR0ciA9IGZpcnN0Q2hpbGQ/LmF0dHJpYnV0ZXM/LmZpbmQoXG4gICAgICAoYTogeyBuYW1lOiBzdHJpbmcgfSkgPT4gYS5uYW1lID09PSBcInN5bmNcIixcbiAgICApXG4gICAgY29uc3Qgd3JhcHBlckF0dHJzOiB7XG4gICAgICB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiXG4gICAgICBuYW1lOiBzdHJpbmdcbiAgICAgIHZhbHVlOiBzdHJpbmdcbiAgICB9W10gPSBzeW5jQXR0clxuICAgICAgPyBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJtZHhKc3hBdHRyaWJ1dGVcIiBhcyBjb25zdCxcbiAgICAgICAgICAgIG5hbWU6IFwic3luY1wiLFxuICAgICAgICAgICAgdmFsdWU6IHN5bmNBdHRyLnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIDogW11cblxuICAgIGNvbnN0IHdyYXBwZXIgPSB7XG4gICAgICB0eXBlOiBcIm1keEpzeEZsb3dFbGVtZW50XCIgYXMgY29uc3QsXG4gICAgICBuYW1lOiBcIkNvbnRlbnRUYWJzXCIsXG4gICAgICBhdHRyaWJ1dGVzOiB3cmFwcGVyQXR0cnMsXG4gICAgICBjaGlsZHJlbjogZ3JvdXAsXG4gICAgICBkYXRhOiB7IF9tZHhFeHBsaWNpdEpzeDogdHJ1ZSB9LFxuICAgIH1cblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWR4SnN4Rmxvd0VsZW1lbnQgaXMgbm90IGluIG1kYXN0IHR5cGVzXG4gICAgY2hpbGRyZW4uc3BsaWNlKGksIGogLSBpLCB3cmFwcGVyKVxuICAgIGkrK1xuICB9XG59XG5cbi8qKiBSZW1hcmsgcGx1Z2luIHRoYXQgY29udmVydHMgOjo6dGFiIGRpcmVjdGl2ZXMgaW50byBDb250ZW50VGFiL0NvbnRlbnRUYWJzIEpTWCBlbGVtZW50cyAqL1xuZXhwb3J0IGNvbnN0IHJlbWFya1RhYjogUGx1Z2luPFtdLCBSb290PiA9ICgpID0+IHtcbiAgcmV0dXJuIHRyZWUgPT4ge1xuICAgIHRyYW5zZm9ybVRhYkRpcmVjdGl2ZXModHJlZSlcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|