livemark 0.7.1 → 0.8.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/package.json +14 -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 +12 -2
- 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 +2 -2
- 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 +4 -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/{build/website → source}/plugins/vite-livemark.ts +0 -7
- package/source/program.ts +18 -0
- package/source/settings.ts +6 -0
- package/{build/website → source}/vite.config.ts +4 -3
- 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 +105 -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 +192 -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 +57 -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.d.ts +2 -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 +64 -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/program.js +0 -16
- 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 → 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}/routeTree.gen.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
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { describe, expect, it } from "vite-plus/test";
|
|
2
|
+
import { transformAbbrDirectives } from "./remark-abbr.js";
|
|
3
|
+
function makeTextDirective(name, text, attributes) {
|
|
4
|
+
return {
|
|
5
|
+
type: "textDirective",
|
|
6
|
+
name,
|
|
7
|
+
attributes: attributes ?? {},
|
|
8
|
+
children: [{ type: "text", value: text }],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function makeTree(...children) {
|
|
12
|
+
return { type: "root", children };
|
|
13
|
+
}
|
|
14
|
+
describe("transformAbbrDirectives", () => {
|
|
15
|
+
function process(tree) {
|
|
16
|
+
transformAbbrDirectives(tree);
|
|
17
|
+
return tree;
|
|
18
|
+
}
|
|
19
|
+
it("should convert :abbr directive to Abbr JSX element", () => {
|
|
20
|
+
const directive = makeTextDirective("abbr", "HTML", {
|
|
21
|
+
title: "HyperText Markup Language",
|
|
22
|
+
});
|
|
23
|
+
const tree = process(makeTree({
|
|
24
|
+
type: "paragraph",
|
|
25
|
+
children: [directive],
|
|
26
|
+
}));
|
|
27
|
+
const paragraph = tree.children[0];
|
|
28
|
+
if (!paragraph || paragraph.type !== "paragraph")
|
|
29
|
+
throw new Error("Expected paragraph");
|
|
30
|
+
const node = paragraph.children[0];
|
|
31
|
+
expect(node).toMatchObject({
|
|
32
|
+
type: "mdxJsxTextElement",
|
|
33
|
+
name: "Abbr",
|
|
34
|
+
attributes: [
|
|
35
|
+
{ type: "mdxJsxAttribute", name: "text", value: "HTML" },
|
|
36
|
+
{
|
|
37
|
+
type: "mdxJsxAttribute",
|
|
38
|
+
name: "title",
|
|
39
|
+
value: "HyperText Markup Language",
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
children: [],
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
it("should use empty string when title is not provided", () => {
|
|
46
|
+
const directive = makeTextDirective("abbr", "CSS");
|
|
47
|
+
const tree = process(makeTree({
|
|
48
|
+
type: "paragraph",
|
|
49
|
+
children: [directive],
|
|
50
|
+
}));
|
|
51
|
+
const paragraph = tree.children[0];
|
|
52
|
+
if (!paragraph || paragraph.type !== "paragraph")
|
|
53
|
+
throw new Error("Expected paragraph");
|
|
54
|
+
const node = paragraph.children[0];
|
|
55
|
+
expect(node).toMatchObject({
|
|
56
|
+
type: "mdxJsxTextElement",
|
|
57
|
+
name: "Abbr",
|
|
58
|
+
attributes: [
|
|
59
|
+
{ type: "mdxJsxAttribute", name: "text", value: "CSS" },
|
|
60
|
+
{ type: "mdxJsxAttribute", name: "title", value: "" },
|
|
61
|
+
],
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
it("should ignore non-abbr text directives", () => {
|
|
65
|
+
const directive = makeTextDirective("other", "Text");
|
|
66
|
+
const tree = process(makeTree({
|
|
67
|
+
type: "paragraph",
|
|
68
|
+
children: [directive],
|
|
69
|
+
}));
|
|
70
|
+
const paragraph = tree.children[0];
|
|
71
|
+
if (!paragraph || paragraph.type !== "paragraph")
|
|
72
|
+
throw new Error("Expected paragraph");
|
|
73
|
+
expect(paragraph.children[0]).toMatchObject({
|
|
74
|
+
type: "textDirective",
|
|
75
|
+
name: "other",
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLWFiYnIudW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3JlbWFyay1hYmJyLnVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFMUQsU0FBUyxpQkFBaUIsQ0FDeEIsSUFBWSxFQUNaLElBQVksRUFDWixVQUFtQztJQUVuQyxPQUFPO1FBQ0wsSUFBSSxFQUFFLGVBQWU7UUFDckIsSUFBSTtRQUNKLFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRTtRQUM1QixRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0tBQzFDLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsR0FBRyxRQUEwQjtJQUM3QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxTQUFTLE9BQU8sQ0FBQyxJQUFVO1FBQ3pCLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7UUFDNUQsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUNsRCxLQUFLLEVBQUUsMkJBQTJCO1NBQ25DLENBQUMsQ0FBQTtRQUNGLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FDbEIsUUFBUSxDQUFDO1lBQ1AsSUFBSSxFQUFFLFdBQVc7WUFDakIsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDO1NB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IH0gZnJvbSBcIm1kYXN0XCJcbmltcG9ydCB0eXBlIHsgVGV4dERpcmVjdGl2ZSB9IGZyb20gXCJtZGFzdC11dGlsLWRpcmVjdGl2ZVwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlLXBsdXMvdGVzdFwiXG5pbXBvcnQgeyB0cmFuc2Zvcm1BYmJyRGlyZWN0aXZlcyB9IGZyb20gXCIuL3JlbWFyay1hYmJyLnRzXCJcblxuZnVuY3Rpb24gbWFrZVRleHREaXJlY3RpdmUoXG4gIG5hbWU6IHN0cmluZyxcbiAgdGV4dDogc3RyaW5nLFxuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IFRleHREaXJlY3RpdmUge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidGV4dERpcmVjdGl2ZVwiLFxuICAgIG5hbWUsXG4gICAgYXR0cmlidXRlczogYXR0cmlidXRlcyA/PyB7fSxcbiAgICBjaGlsZHJlbjogW3sgdHlwZTogXCJ0ZXh0XCIsIHZhbHVlOiB0ZXh0IH1dLFxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VUcmVlKC4uLmNoaWxkcmVuOiBSb290W1wiY2hpbGRyZW5cIl0pOiBSb290IHtcbiAgcmV0dXJuIHsgdHlwZTogXCJyb290XCIsIGNoaWxkcmVuIH1cbn1cblxuZGVzY3JpYmUoXCJ0cmFuc2Zvcm1BYmJyRGlyZWN0aXZlc1wiLCAoKSA9PiB7XG4gIGZ1bmN0aW9uIHByb2Nlc3ModHJlZTogUm9vdCkge1xuICAgIHRyYW5zZm9ybUFiYnJEaXJlY3RpdmVzKHRyZWUpXG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuXG4gIGl0KFwic2hvdWxkIGNvbnZlcnQgOmFiYnIgZGlyZWN0aXZlIHRvIEFiYnIgSlNYIGVsZW1lbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGRpcmVjdGl2ZSA9IG1ha2VUZXh0RGlyZWN0aXZlKFwiYWJiclwiLCBcIkhUTUxcIiwge1xuICAgICAgdGl0bGU6IFwiSHlwZXJUZXh0IE1hcmt1cCBMYW5ndWFnZVwiLFxuICAgIH0pXG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MoXG4gICAgICBtYWtlVHJlZSh7XG4gICAgICAgIHR5cGU6IFwicGFyYWdyYXBoXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbZGlyZWN0aXZlXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIGNvbnN0IHBhcmFncmFwaCA9IHRyZWUuY2hpbGRyZW5bMF1cbiAgICBpZiAoIXBhcmFncmFwaCB8fCBwYXJhZ3JhcGgudHlwZSAhPT0gXCJwYXJhZ3JhcGhcIilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBhcmFncmFwaFwiKVxuICAgIGNvbnN0IG5vZGUgPSBwYXJhZ3JhcGguY2hpbGRyZW5bMF1cbiAgICBleHBlY3Qobm9kZSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiBcIm1keEpzeFRleHRFbGVtZW50XCIsXG4gICAgICBuYW1lOiBcIkFiYnJcIixcbiAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgeyB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiLCBuYW1lOiBcInRleHRcIiwgdmFsdWU6IFwiSFRNTFwiIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiLFxuICAgICAgICAgIG5hbWU6IFwidGl0bGVcIixcbiAgICAgICAgICB2YWx1ZTogXCJIeXBlclRleHQgTWFya3VwIExhbmd1YWdlXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgdXNlIGVtcHR5IHN0cmluZyB3aGVuIHRpdGxlIGlzIG5vdCBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZGlyZWN0aXZlID0gbWFrZVRleHREaXJlY3RpdmUoXCJhYmJyXCIsIFwiQ1NTXCIpXG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MoXG4gICAgICBtYWtlVHJlZSh7XG4gICAgICAgIHR5cGU6IFwicGFyYWdyYXBoXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbZGlyZWN0aXZlXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIGNvbnN0IHBhcmFncmFwaCA9IHRyZWUuY2hpbGRyZW5bMF1cbiAgICBpZiAoIXBhcmFncmFwaCB8fCBwYXJhZ3JhcGgudHlwZSAhPT0gXCJwYXJhZ3JhcGhcIilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBhcmFncmFwaFwiKVxuICAgIGNvbnN0IG5vZGUgPSBwYXJhZ3JhcGguY2hpbGRyZW5bMF1cbiAgICBleHBlY3Qobm9kZSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiBcIm1keEpzeFRleHRFbGVtZW50XCIsXG4gICAgICBuYW1lOiBcIkFiYnJcIixcbiAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgeyB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiLCBuYW1lOiBcInRleHRcIiwgdmFsdWU6IFwiQ1NTXCIgfSxcbiAgICAgICAgeyB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiLCBuYW1lOiBcInRpdGxlXCIsIHZhbHVlOiBcIlwiIH0sXG4gICAgICBdLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaWdub3JlIG5vbi1hYmJyIHRleHQgZGlyZWN0aXZlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZGlyZWN0aXZlID0gbWFrZVRleHREaXJlY3RpdmUoXCJvdGhlclwiLCBcIlRleHRcIilcbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhcbiAgICAgIG1ha2VUcmVlKHtcbiAgICAgICAgdHlwZTogXCJwYXJhZ3JhcGhcIixcbiAgICAgICAgY2hpbGRyZW46IFtkaXJlY3RpdmVdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgY29uc3QgcGFyYWdyYXBoID0gdHJlZS5jaGlsZHJlblswXVxuICAgIGlmICghcGFyYWdyYXBoIHx8IHBhcmFncmFwaC50eXBlICE9PSBcInBhcmFncmFwaFwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGFyYWdyYXBoXCIpXG4gICAgZXhwZWN0KHBhcmFncmFwaC5jaGlsZHJlblswXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiBcInRleHREaXJlY3RpdmVcIixcbiAgICAgIG5hbWU6IFwib3RoZXJcIixcbiAgICB9KVxuICB9KVxufSlcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Root } from "mdast";
|
|
2
|
+
import type { Plugin } from "unified";
|
|
3
|
+
/** Convert a string containing ANSI escape sequences into HTML with inline styles */
|
|
4
|
+
export declare function ansiToHtml(input: string): string;
|
|
5
|
+
/** Walk a mdast tree and convert ansi code blocks into AnsiCode JSX elements */
|
|
6
|
+
export declare function transformAnsiCodeBlocks(tree: Root): void;
|
|
7
|
+
/** Remark plugin that converts ansi code blocks into colored HTML output */
|
|
8
|
+
export declare const remarkAnsi: Plugin<[], Root>;
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
const STANDARD_COLORS = [
|
|
2
|
+
"#4f5b66", // 0 black
|
|
3
|
+
"#bf616a", // 1 red
|
|
4
|
+
"#a3be8c", // 2 green
|
|
5
|
+
"#ebcb8b", // 3 yellow
|
|
6
|
+
"#8fa1b3", // 4 blue
|
|
7
|
+
"#b48ead", // 5 magenta
|
|
8
|
+
"#96b5b4", // 6 cyan
|
|
9
|
+
"#c0c5ce", // 7 white
|
|
10
|
+
];
|
|
11
|
+
const BRIGHT_COLORS = [
|
|
12
|
+
"#65737e", // 8 bright black
|
|
13
|
+
"#bf616a", // 9 bright red
|
|
14
|
+
"#a3be8c", // 10 bright green
|
|
15
|
+
"#ebcb8b", // 11 bright yellow
|
|
16
|
+
"#8fa1b3", // 12 bright blue
|
|
17
|
+
"#b48ead", // 13 bright magenta
|
|
18
|
+
"#96b5b4", // 14 bright cyan
|
|
19
|
+
"#eff1f5", // 15 bright white
|
|
20
|
+
];
|
|
21
|
+
function color256(n) {
|
|
22
|
+
if (n < 8)
|
|
23
|
+
return STANDARD_COLORS[n];
|
|
24
|
+
if (n < 16)
|
|
25
|
+
return BRIGHT_COLORS[n - 8];
|
|
26
|
+
if (n < 232) {
|
|
27
|
+
const idx = n - 16;
|
|
28
|
+
const r = Math.floor(idx / 36);
|
|
29
|
+
const g = Math.floor((idx % 36) / 6);
|
|
30
|
+
const b = idx % 6;
|
|
31
|
+
const toHex = (v) => (v === 0 ? 0 : 55 + v * 40).toString(16).padStart(2, "0");
|
|
32
|
+
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
33
|
+
}
|
|
34
|
+
if (n < 256) {
|
|
35
|
+
const v = (8 + (n - 232) * 10).toString(16).padStart(2, "0");
|
|
36
|
+
return `#${v}${v}${v}`;
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
function escapeHtml(text) {
|
|
41
|
+
return text
|
|
42
|
+
.replace(/&/g, "&")
|
|
43
|
+
.replace(/</g, "<")
|
|
44
|
+
.replace(/>/g, ">")
|
|
45
|
+
.replace(/"/g, """);
|
|
46
|
+
}
|
|
47
|
+
function buildStyle(state) {
|
|
48
|
+
const parts = [];
|
|
49
|
+
if (state.fg)
|
|
50
|
+
parts.push(`color:${state.fg}`);
|
|
51
|
+
if (state.bg)
|
|
52
|
+
parts.push(`background-color:${state.bg}`);
|
|
53
|
+
if (state.bold)
|
|
54
|
+
parts.push("font-weight:bold");
|
|
55
|
+
if (state.dim)
|
|
56
|
+
parts.push("opacity:0.7");
|
|
57
|
+
if (state.italic)
|
|
58
|
+
parts.push("font-style:italic");
|
|
59
|
+
if (state.underline)
|
|
60
|
+
parts.push("text-decoration:underline");
|
|
61
|
+
if (state.strikethrough)
|
|
62
|
+
parts.push("text-decoration:line-through");
|
|
63
|
+
return parts.join(";");
|
|
64
|
+
}
|
|
65
|
+
function makeDefaultState() {
|
|
66
|
+
return {
|
|
67
|
+
bold: false,
|
|
68
|
+
dim: false,
|
|
69
|
+
italic: false,
|
|
70
|
+
underline: false,
|
|
71
|
+
strikethrough: false,
|
|
72
|
+
fg: undefined,
|
|
73
|
+
bg: undefined,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function applyParams(state, params) {
|
|
77
|
+
let i = 0;
|
|
78
|
+
while (i < params.length) {
|
|
79
|
+
const code = params[i];
|
|
80
|
+
switch (code) {
|
|
81
|
+
case 0: {
|
|
82
|
+
const reset = makeDefaultState();
|
|
83
|
+
state.bold = reset.bold;
|
|
84
|
+
state.dim = reset.dim;
|
|
85
|
+
state.italic = reset.italic;
|
|
86
|
+
state.underline = reset.underline;
|
|
87
|
+
state.strikethrough = reset.strikethrough;
|
|
88
|
+
state.fg = reset.fg;
|
|
89
|
+
state.bg = reset.bg;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case 1:
|
|
93
|
+
state.bold = true;
|
|
94
|
+
break;
|
|
95
|
+
case 2:
|
|
96
|
+
state.dim = true;
|
|
97
|
+
break;
|
|
98
|
+
case 3:
|
|
99
|
+
state.italic = true;
|
|
100
|
+
break;
|
|
101
|
+
case 4:
|
|
102
|
+
state.underline = true;
|
|
103
|
+
break;
|
|
104
|
+
case 9:
|
|
105
|
+
state.strikethrough = true;
|
|
106
|
+
break;
|
|
107
|
+
case 22:
|
|
108
|
+
state.bold = false;
|
|
109
|
+
state.dim = false;
|
|
110
|
+
break;
|
|
111
|
+
case 23:
|
|
112
|
+
state.italic = false;
|
|
113
|
+
break;
|
|
114
|
+
case 24:
|
|
115
|
+
state.underline = false;
|
|
116
|
+
break;
|
|
117
|
+
case 29:
|
|
118
|
+
state.strikethrough = false;
|
|
119
|
+
break;
|
|
120
|
+
case 39:
|
|
121
|
+
state.fg = undefined;
|
|
122
|
+
break;
|
|
123
|
+
case 49:
|
|
124
|
+
state.bg = undefined;
|
|
125
|
+
break;
|
|
126
|
+
default:
|
|
127
|
+
if (code >= 30 && code <= 37) {
|
|
128
|
+
state.fg = STANDARD_COLORS[code - 30];
|
|
129
|
+
}
|
|
130
|
+
else if (code >= 40 && code <= 47) {
|
|
131
|
+
state.bg = STANDARD_COLORS[code - 40];
|
|
132
|
+
}
|
|
133
|
+
else if (code >= 90 && code <= 97) {
|
|
134
|
+
state.fg = BRIGHT_COLORS[code - 90];
|
|
135
|
+
}
|
|
136
|
+
else if (code >= 100 && code <= 107) {
|
|
137
|
+
state.bg = BRIGHT_COLORS[code - 100];
|
|
138
|
+
}
|
|
139
|
+
else if (code === 38 || code === 48) {
|
|
140
|
+
const kind = params[i + 1];
|
|
141
|
+
if (kind === 5) {
|
|
142
|
+
const colorIdx = params[i + 2];
|
|
143
|
+
if (colorIdx !== undefined) {
|
|
144
|
+
const c = color256(colorIdx);
|
|
145
|
+
if (code === 38)
|
|
146
|
+
state.fg = c;
|
|
147
|
+
else
|
|
148
|
+
state.bg = c;
|
|
149
|
+
}
|
|
150
|
+
i += 2;
|
|
151
|
+
}
|
|
152
|
+
else if (kind === 2) {
|
|
153
|
+
const r = params[i + 2] ?? 0;
|
|
154
|
+
const g = params[i + 3] ?? 0;
|
|
155
|
+
const b = params[i + 4] ?? 0;
|
|
156
|
+
const toHex = (v) => v.toString(16).padStart(2, "0");
|
|
157
|
+
const c = `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
158
|
+
if (code === 38)
|
|
159
|
+
state.fg = c;
|
|
160
|
+
else
|
|
161
|
+
state.bg = c;
|
|
162
|
+
i += 4;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
i++;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/** Convert a string containing ANSI escape sequences into HTML with inline styles */
|
|
171
|
+
export function ansiToHtml(input) {
|
|
172
|
+
// oxlint-disable-next-line no-control-regex -- ANSI escape sequences start with U+001B
|
|
173
|
+
const sgr = /\u001b\[([0-9;]*)m/g;
|
|
174
|
+
const state = makeDefaultState();
|
|
175
|
+
const parts = [];
|
|
176
|
+
let lastIndex = 0;
|
|
177
|
+
let match = sgr.exec(input);
|
|
178
|
+
while (match !== null) {
|
|
179
|
+
const textBefore = input.slice(lastIndex, match.index);
|
|
180
|
+
if (textBefore) {
|
|
181
|
+
const style = buildStyle(state);
|
|
182
|
+
if (style) {
|
|
183
|
+
parts.push(`<span style="${style}">${escapeHtml(textBefore)}</span>`);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
parts.push(escapeHtml(textBefore));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const rawParams = match[1];
|
|
190
|
+
const params = rawParams === ""
|
|
191
|
+
? [0]
|
|
192
|
+
: rawParams.split(";").map(s => Number.parseInt(s, 10));
|
|
193
|
+
applyParams(state, params);
|
|
194
|
+
lastIndex = match.index + match[0].length;
|
|
195
|
+
match = sgr.exec(input);
|
|
196
|
+
}
|
|
197
|
+
const trailing = input.slice(lastIndex);
|
|
198
|
+
if (trailing) {
|
|
199
|
+
const style = buildStyle(state);
|
|
200
|
+
if (style) {
|
|
201
|
+
parts.push(`<span style="${style}">${escapeHtml(trailing)}</span>`);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
parts.push(escapeHtml(trailing));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return parts.join("");
|
|
208
|
+
}
|
|
209
|
+
/** Walk a mdast tree and convert ansi code blocks into AnsiCode JSX elements */
|
|
210
|
+
export function transformAnsiCodeBlocks(tree) {
|
|
211
|
+
const children = tree.children;
|
|
212
|
+
for (let i = 0; i < children.length; i++) {
|
|
213
|
+
const node = children[i];
|
|
214
|
+
if (node?.type !== "code" || node.lang !== "ansi")
|
|
215
|
+
continue;
|
|
216
|
+
const html = ansiToHtml(node.value);
|
|
217
|
+
const jsxNode = {
|
|
218
|
+
type: "mdxJsxFlowElement",
|
|
219
|
+
name: "AnsiCode",
|
|
220
|
+
attributes: [
|
|
221
|
+
{
|
|
222
|
+
type: "mdxJsxAttribute",
|
|
223
|
+
name: "html",
|
|
224
|
+
value: html,
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
children: [],
|
|
228
|
+
};
|
|
229
|
+
// @ts-expect-error mdxJsxFlowElement is not in mdast types
|
|
230
|
+
children[i] = jsxNode;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/** Remark plugin that converts ansi code blocks into colored HTML output */
|
|
234
|
+
export const remarkAnsi = () => {
|
|
235
|
+
return tree => {
|
|
236
|
+
transformAnsiCodeBlocks(tree);
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLWFuc2kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcGx1Z2lucy9yZW1hcmstYW5zaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFhQSxNQUFNLGVBQWUsR0FBMEI7SUFDN0MsU0FBUyxFQUFFLFVBQVU7SUFDckIsU0FBUyxFQUFFLFFBQVE7SUFDbkIsU0FBUyxFQUFFLFVBQVU7SUFDckIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsU0FBUyxFQUFFLFlBQVk7SUFDdkIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsU0FBUyxFQUFFLFVBQVU7Q0FDdEIsQ0FBQTtBQUVELE1BQU0sYUFBYSxHQUEwQjtJQUMzQyxTQUFTLEVBQUUsaUJBQWlCO0lBQzVCLFNBQVMsRUFBRSxlQUFlO0lBQzFCLFNBQVMsRUFBRSxrQkFBa0I7SUFDN0IsU0FBUyxFQUFFLG1CQUFtQjtJQUM5QixTQUFTLEVBQUUsaUJBQWlCO0lBQzVCLFNBQVMsRUFBRSxvQkFBb0I7SUFDL0IsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixTQUFTLEVBQUUsa0JBQWtCO0NBQzlCLENBQUE7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFTO0lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQUUsT0FBTyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1osTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNsQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUM5QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3BDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDakIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUMxQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUMzRCxPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUM3QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDWixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUM1RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQVk7SUFDOUIsT0FBTyxJQUFJO1NBQ1IsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7U0FDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7U0FDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7U0FDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUM1QixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBZ0I7SUFDbEMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFBO0lBQzFCLElBQUksS0FBSyxDQUFDLEVBQUU7UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDN0MsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hELElBQUksS0FBSyxDQUFDLElBQUk7UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDOUMsSUFBSSxLQUFLLENBQUMsR0FBRztRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDeEMsSUFBSSxLQUFLLENBQUMsTUFBTTtRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNqRCxJQUFJLEtBQUssQ0FBQyxTQUFTO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0lBQzVELElBQUksS0FBSyxDQUFDLGFBQWE7UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUE7SUFDbkUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3hCLENBQUM7QUFFRCxTQUFTLGdCQUFnQjtJQUN2QixPQUFPO1FBQ0wsSUFBSSxFQUFFLEtBQUs7UUFDWCxHQUFHLEVBQUUsS0FBSztRQUNWLE1BQU0sRUFBRSxLQUFLO1FBQ2IsU0FBUyxFQUFFLEtBQUs7UUFDaEIsYUFBYSxFQUFFLEtBQUs7UUFDcEIsRUFBRSxFQUFFLFNBQVM7UUFDYixFQUFFLEVBQUUsU0FBUztLQUNkLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBZ0IsRUFBRSxNQUE2QjtJQUNsRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDVCxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBRSxDQUFBO1FBQ3ZCLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNQLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixFQUFFLENBQUE7Z0JBQ2hDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtnQkFDdkIsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFBO2dCQUNyQixLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUE7Z0JBQzNCLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQTtnQkFDakMsS0FBSyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFBO2dCQUN6QyxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUE7Z0JBQ25CLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQTtnQkFDbkIsTUFBSztZQUNQLENBQUM7WUFDRCxLQUFLLENBQUM7Z0JBQ0osS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7Z0JBQ2pCLE1BQUs7WUFDUCxLQUFLLENBQUM7Z0JBQ0osS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUE7Z0JBQ2hCLE1BQUs7WUFDUCxLQUFLLENBQUM7Z0JBQ0osS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7Z0JBQ25CLE1BQUs7WUFDUCxLQUFLLENBQUM7Z0JBQ0osS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7Z0JBQ3RCLE1BQUs7WUFDUCxLQUFLLENBQUM7Z0JBQ0osS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7Z0JBQzFCLE1BQUs7WUFDUCxLQUFLLEVBQUU7Z0JBQ0wsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUE7Z0JBQ2xCLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFBO2dCQUNqQixNQUFLO1lBQ1AsS0FBSyxFQUFFO2dCQUNMLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO2dCQUNwQixNQUFLO1lBQ1AsS0FBSyxFQUFFO2dCQUNMLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO2dCQUN2QixNQUFLO1lBQ1AsS0FBSyxFQUFFO2dCQUNMLEtBQUssQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFBO2dCQUMzQixNQUFLO1lBQ1AsS0FBSyxFQUFFO2dCQUNMLEtBQUssQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFBO2dCQUNwQixNQUFLO1lBQ1AsS0FBSyxFQUFFO2dCQUNMLEtBQUssQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFBO2dCQUNwQixNQUFLO1lBQ1A7Z0JBQ0UsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDN0IsS0FBSyxDQUFDLEVBQUUsR0FBRyxlQUFlLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFBO2dCQUN2QyxDQUFDO3FCQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3BDLEtBQUssQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQTtnQkFDdkMsQ0FBQztxQkFBTSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUNwQyxLQUFLLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7Z0JBQ3JDLENBQUM7cUJBQU0sSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDdEMsS0FBSyxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFBO2dCQUN0QyxDQUFDO3FCQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7b0JBQzFCLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNmLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7d0JBQzlCLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDOzRCQUMzQixNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7NEJBQzVCLElBQUksSUFBSSxLQUFLLEVBQUU7Z0NBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7O2dDQUN4QixLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTt3QkFDbkIsQ0FBQzt3QkFDRCxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUNSLENBQUM7eUJBQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3RCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO3dCQUM1QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFDNUIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7d0JBQzVCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7d0JBQzVELE1BQU0sQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTt3QkFDOUMsSUFBSSxJQUFJLEtBQUssRUFBRTs0QkFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTs7NEJBQ3hCLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO3dCQUNqQixDQUFDLElBQUksQ0FBQyxDQUFBO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxNQUFLO1FBQ1QsQ0FBQztRQUNELENBQUMsRUFBRSxDQUFBO0lBQ0wsQ0FBQztBQUNILENBQUM7QUFFRCxxRkFBcUY7QUFDckYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLHVGQUF1RjtJQUN2RixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQTtJQUNqQyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ2hDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQTtJQUMxQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUE7SUFFakIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQixPQUFPLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN0QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMvQixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3ZFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1lBQ3BDLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBRSxDQUFBO1FBQzNCLE1BQU0sTUFBTSxHQUNWLFNBQVMsS0FBSyxFQUFFO1lBQ2QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUMzRCxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzFCLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDekMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDdkMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMvQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDckUsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZCLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBQVU7SUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtJQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN4QixJQUFJLElBQUksRUFBRSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtZQUFFLFNBQVE7UUFFM0QsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVuQyxNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxtQkFBNEI7WUFDbEMsSUFBSSxFQUFFLFVBQVU7WUFDaEIsVUFBVSxFQUFFO2dCQUNWO29CQUNFLElBQUksRUFBRSxpQkFBMEI7b0JBQ2hDLElBQUksRUFBRSxNQUFNO29CQUNaLEtBQUssRUFBRSxJQUFJO2lCQUNaO2FBQ0Y7WUFDRCxRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUE7UUFFRCwyREFBMkQ7UUFDM0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0FBQ0gsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQXFCLEdBQUcsRUFBRTtJQUMvQyxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ1osdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDL0IsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSb290IH0gZnJvbSBcIm1kYXN0XCJcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSBcInVuaWZpZWRcIlxuXG5pbnRlcmZhY2UgQW5zaVN0YXRlIHtcbiAgYm9sZDogYm9vbGVhblxuICBkaW06IGJvb2xlYW5cbiAgaXRhbGljOiBib29sZWFuXG4gIHVuZGVybGluZTogYm9vbGVhblxuICBzdHJpa2V0aHJvdWdoOiBib29sZWFuXG4gIGZnOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgYmc6IHN0cmluZyB8IHVuZGVmaW5lZFxufVxuXG5jb25zdCBTVEFOREFSRF9DT0xPUlM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiA9IFtcbiAgXCIjNGY1YjY2XCIsIC8vIDAgYmxhY2tcbiAgXCIjYmY2MTZhXCIsIC8vIDEgcmVkXG4gIFwiI2EzYmU4Y1wiLCAvLyAyIGdyZWVuXG4gIFwiI2ViY2I4YlwiLCAvLyAzIHllbGxvd1xuICBcIiM4ZmExYjNcIiwgLy8gNCBibHVlXG4gIFwiI2I0OGVhZFwiLCAvLyA1IG1hZ2VudGFcbiAgXCIjOTZiNWI0XCIsIC8vIDYgY3lhblxuICBcIiNjMGM1Y2VcIiwgLy8gNyB3aGl0ZVxuXVxuXG5jb25zdCBCUklHSFRfQ09MT1JTOiBSZWFkb25seUFycmF5PHN0cmluZz4gPSBbXG4gIFwiIzY1NzM3ZVwiLCAvLyA4IGJyaWdodCBibGFja1xuICBcIiNiZjYxNmFcIiwgLy8gOSBicmlnaHQgcmVkXG4gIFwiI2EzYmU4Y1wiLCAvLyAxMCBicmlnaHQgZ3JlZW5cbiAgXCIjZWJjYjhiXCIsIC8vIDExIGJyaWdodCB5ZWxsb3dcbiAgXCIjOGZhMWIzXCIsIC8vIDEyIGJyaWdodCBibHVlXG4gIFwiI2I0OGVhZFwiLCAvLyAxMyBicmlnaHQgbWFnZW50YVxuICBcIiM5NmI1YjRcIiwgLy8gMTQgYnJpZ2h0IGN5YW5cbiAgXCIjZWZmMWY1XCIsIC8vIDE1IGJyaWdodCB3aGl0ZVxuXVxuXG5mdW5jdGlvbiBjb2xvcjI1NihuOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAobiA8IDgpIHJldHVybiBTVEFOREFSRF9DT0xPUlNbbl1cbiAgaWYgKG4gPCAxNikgcmV0dXJuIEJSSUdIVF9DT0xPUlNbbiAtIDhdXG4gIGlmIChuIDwgMjMyKSB7XG4gICAgY29uc3QgaWR4ID0gbiAtIDE2XG4gICAgY29uc3QgciA9IE1hdGguZmxvb3IoaWR4IC8gMzYpXG4gICAgY29uc3QgZyA9IE1hdGguZmxvb3IoKGlkeCAlIDM2KSAvIDYpXG4gICAgY29uc3QgYiA9IGlkeCAlIDZcbiAgICBjb25zdCB0b0hleCA9ICh2OiBudW1iZXIpID0+XG4gICAgICAodiA9PT0gMCA/IDAgOiA1NSArIHYgKiA0MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKVxuICAgIHJldHVybiBgIyR7dG9IZXgocil9JHt0b0hleChnKX0ke3RvSGV4KGIpfWBcbiAgfVxuICBpZiAobiA8IDI1Nikge1xuICAgIGNvbnN0IHYgPSAoOCArIChuIC0gMjMyKSAqIDEwKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpXG4gICAgcmV0dXJuIGAjJHt2fSR7dn0ke3Z9YFxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gZXNjYXBlSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcbiAgICAucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcbiAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcbiAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcbn1cblxuZnVuY3Rpb24gYnVpbGRTdHlsZShzdGF0ZTogQW5zaVN0YXRlKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW11cbiAgaWYgKHN0YXRlLmZnKSBwYXJ0cy5wdXNoKGBjb2xvcjoke3N0YXRlLmZnfWApXG4gIGlmIChzdGF0ZS5iZykgcGFydHMucHVzaChgYmFja2dyb3VuZC1jb2xvcjoke3N0YXRlLmJnfWApXG4gIGlmIChzdGF0ZS5ib2xkKSBwYXJ0cy5wdXNoKFwiZm9udC13ZWlnaHQ6Ym9sZFwiKVxuICBpZiAoc3RhdGUuZGltKSBwYXJ0cy5wdXNoKFwib3BhY2l0eTowLjdcIilcbiAgaWYgKHN0YXRlLml0YWxpYykgcGFydHMucHVzaChcImZvbnQtc3R5bGU6aXRhbGljXCIpXG4gIGlmIChzdGF0ZS51bmRlcmxpbmUpIHBhcnRzLnB1c2goXCJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lXCIpXG4gIGlmIChzdGF0ZS5zdHJpa2V0aHJvdWdoKSBwYXJ0cy5wdXNoKFwidGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaFwiKVxuICByZXR1cm4gcGFydHMuam9pbihcIjtcIilcbn1cblxuZnVuY3Rpb24gbWFrZURlZmF1bHRTdGF0ZSgpOiBBbnNpU3RhdGUge1xuICByZXR1cm4ge1xuICAgIGJvbGQ6IGZhbHNlLFxuICAgIGRpbTogZmFsc2UsXG4gICAgaXRhbGljOiBmYWxzZSxcbiAgICB1bmRlcmxpbmU6IGZhbHNlLFxuICAgIHN0cmlrZXRocm91Z2g6IGZhbHNlLFxuICAgIGZnOiB1bmRlZmluZWQsXG4gICAgYmc6IHVuZGVmaW5lZCxcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVBhcmFtcyhzdGF0ZTogQW5zaVN0YXRlLCBwYXJhbXM6IFJlYWRvbmx5QXJyYXk8bnVtYmVyPikge1xuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBwYXJhbXMubGVuZ3RoKSB7XG4gICAgY29uc3QgY29kZSA9IHBhcmFtc1tpXSFcbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgMDoge1xuICAgICAgICBjb25zdCByZXNldCA9IG1ha2VEZWZhdWx0U3RhdGUoKVxuICAgICAgICBzdGF0ZS5ib2xkID0gcmVzZXQuYm9sZFxuICAgICAgICBzdGF0ZS5kaW0gPSByZXNldC5kaW1cbiAgICAgICAgc3RhdGUuaXRhbGljID0gcmVzZXQuaXRhbGljXG4gICAgICAgIHN0YXRlLnVuZGVybGluZSA9IHJlc2V0LnVuZGVybGluZVxuICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gcmVzZXQuc3RyaWtldGhyb3VnaFxuICAgICAgICBzdGF0ZS5mZyA9IHJlc2V0LmZnXG4gICAgICAgIHN0YXRlLmJnID0gcmVzZXQuYmdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgc3RhdGUuYm9sZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgc3RhdGUuZGltID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAzOlxuICAgICAgICBzdGF0ZS5pdGFsaWMgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHN0YXRlLnVuZGVybGluZSA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgOTpcbiAgICAgICAgc3RhdGUuc3RyaWtldGhyb3VnaCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjI6XG4gICAgICAgIHN0YXRlLmJvbGQgPSBmYWxzZVxuICAgICAgICBzdGF0ZS5kaW0gPSBmYWxzZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyMzpcbiAgICAgICAgc3RhdGUuaXRhbGljID0gZmFsc2VcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjQ6XG4gICAgICAgIHN0YXRlLnVuZGVybGluZSA9IGZhbHNlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI5OlxuICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2VcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMzk6XG4gICAgICAgIHN0YXRlLmZnID0gdW5kZWZpbmVkXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDQ5OlxuICAgICAgICBzdGF0ZS5iZyA9IHVuZGVmaW5lZFxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGNvZGUgPj0gMzAgJiYgY29kZSA8PSAzNykge1xuICAgICAgICAgIHN0YXRlLmZnID0gU1RBTkRBUkRfQ09MT1JTW2NvZGUgLSAzMF1cbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID49IDQwICYmIGNvZGUgPD0gNDcpIHtcbiAgICAgICAgICBzdGF0ZS5iZyA9IFNUQU5EQVJEX0NPTE9SU1tjb2RlIC0gNDBdXG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA+PSA5MCAmJiBjb2RlIDw9IDk3KSB7XG4gICAgICAgICAgc3RhdGUuZmcgPSBCUklHSFRfQ09MT1JTW2NvZGUgLSA5MF1cbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID49IDEwMCAmJiBjb2RlIDw9IDEwNykge1xuICAgICAgICAgIHN0YXRlLmJnID0gQlJJR0hUX0NPTE9SU1tjb2RlIC0gMTAwXVxuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDM4IHx8IGNvZGUgPT09IDQ4KSB7XG4gICAgICAgICAgY29uc3Qga2luZCA9IHBhcmFtc1tpICsgMV1cbiAgICAgICAgICBpZiAoa2luZCA9PT0gNSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JJZHggPSBwYXJhbXNbaSArIDJdXG4gICAgICAgICAgICBpZiAoY29sb3JJZHggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zdCBjID0gY29sb3IyNTYoY29sb3JJZHgpXG4gICAgICAgICAgICAgIGlmIChjb2RlID09PSAzOCkgc3RhdGUuZmcgPSBjXG4gICAgICAgICAgICAgIGVsc2Ugc3RhdGUuYmcgPSBjXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDJcbiAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBwYXJhbXNbaSArIDJdID8/IDBcbiAgICAgICAgICAgIGNvbnN0IGcgPSBwYXJhbXNbaSArIDNdID8/IDBcbiAgICAgICAgICAgIGNvbnN0IGIgPSBwYXJhbXNbaSArIDRdID8/IDBcbiAgICAgICAgICAgIGNvbnN0IHRvSGV4ID0gKHY6IG51bWJlcikgPT4gdi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpXG4gICAgICAgICAgICBjb25zdCBjID0gYCMke3RvSGV4KHIpfSR7dG9IZXgoZyl9JHt0b0hleChiKX1gXG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gMzgpIHN0YXRlLmZnID0gY1xuICAgICAgICAgICAgZWxzZSBzdGF0ZS5iZyA9IGNcbiAgICAgICAgICAgIGkgKz0gNFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgIH1cbiAgICBpKytcbiAgfVxufVxuXG4vKiogQ29udmVydCBhIHN0cmluZyBjb250YWluaW5nIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBpbnRvIEhUTUwgd2l0aCBpbmxpbmUgc3R5bGVzICovXG5leHBvcnQgZnVuY3Rpb24gYW5zaVRvSHRtbChpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXggLS0gQU5TSSBlc2NhcGUgc2VxdWVuY2VzIHN0YXJ0IHdpdGggVSswMDFCXG4gIGNvbnN0IHNnciA9IC9cXHUwMDFiXFxbKFswLTk7XSopbS9nXG4gIGNvbnN0IHN0YXRlID0gbWFrZURlZmF1bHRTdGF0ZSgpXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdXG4gIGxldCBsYXN0SW5kZXggPSAwXG5cbiAgbGV0IG1hdGNoID0gc2dyLmV4ZWMoaW5wdXQpXG4gIHdoaWxlIChtYXRjaCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRleHRCZWZvcmUgPSBpbnB1dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KVxuICAgIGlmICh0ZXh0QmVmb3JlKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IGJ1aWxkU3R5bGUoc3RhdGUpXG4gICAgICBpZiAoc3R5bGUpIHtcbiAgICAgICAgcGFydHMucHVzaChgPHNwYW4gc3R5bGU9XCIke3N0eWxlfVwiPiR7ZXNjYXBlSHRtbCh0ZXh0QmVmb3JlKX08L3NwYW4+YClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnB1c2goZXNjYXBlSHRtbCh0ZXh0QmVmb3JlKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByYXdQYXJhbXMgPSBtYXRjaFsxXSFcbiAgICBjb25zdCBwYXJhbXMgPVxuICAgICAgcmF3UGFyYW1zID09PSBcIlwiXG4gICAgICAgID8gWzBdXG4gICAgICAgIDogcmF3UGFyYW1zLnNwbGl0KFwiO1wiKS5tYXAocyA9PiBOdW1iZXIucGFyc2VJbnQocywgMTApKVxuICAgIGFwcGx5UGFyYW1zKHN0YXRlLCBwYXJhbXMpXG4gICAgbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICBtYXRjaCA9IHNnci5leGVjKGlucHV0KVxuICB9XG5cbiAgY29uc3QgdHJhaWxpbmcgPSBpbnB1dC5zbGljZShsYXN0SW5kZXgpXG4gIGlmICh0cmFpbGluZykge1xuICAgIGNvbnN0IHN0eWxlID0gYnVpbGRTdHlsZShzdGF0ZSlcbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHBhcnRzLnB1c2goYDxzcGFuIHN0eWxlPVwiJHtzdHlsZX1cIj4ke2VzY2FwZUh0bWwodHJhaWxpbmcpfTwvc3Bhbj5gKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0cy5wdXNoKGVzY2FwZUh0bWwodHJhaWxpbmcpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpXG59XG5cbi8qKiBXYWxrIGEgbWRhc3QgdHJlZSBhbmQgY29udmVydCBhbnNpIGNvZGUgYmxvY2tzIGludG8gQW5zaUNvZGUgSlNYIGVsZW1lbnRzICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtQW5zaUNvZGVCbG9ja3ModHJlZTogUm9vdCkge1xuICBjb25zdCBjaGlsZHJlbiA9IHRyZWUuY2hpbGRyZW5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG5vZGUgPSBjaGlsZHJlbltpXVxuICAgIGlmIChub2RlPy50eXBlICE9PSBcImNvZGVcIiB8fCBub2RlLmxhbmcgIT09IFwiYW5zaVwiKSBjb250aW51ZVxuXG4gICAgY29uc3QgaHRtbCA9IGFuc2lUb0h0bWwobm9kZS52YWx1ZSlcblxuICAgIGNvbnN0IGpzeE5vZGUgPSB7XG4gICAgICB0eXBlOiBcIm1keEpzeEZsb3dFbGVtZW50XCIgYXMgY29uc3QsXG4gICAgICBuYW1lOiBcIkFuc2lDb2RlXCIsXG4gICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiIGFzIGNvbnN0LFxuICAgICAgICAgIG5hbWU6IFwiaHRtbFwiLFxuICAgICAgICAgIHZhbHVlOiBodG1sLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG1keEpzeEZsb3dFbGVtZW50IGlzIG5vdCBpbiBtZGFzdCB0eXBlc1xuICAgIGNoaWxkcmVuW2ldID0ganN4Tm9kZVxuICB9XG59XG5cbi8qKiBSZW1hcmsgcGx1Z2luIHRoYXQgY29udmVydHMgYW5zaSBjb2RlIGJsb2NrcyBpbnRvIGNvbG9yZWQgSFRNTCBvdXRwdXQgKi9cbmV4cG9ydCBjb25zdCByZW1hcmtBbnNpOiBQbHVnaW48W10sIFJvb3Q+ID0gKCkgPT4ge1xuICByZXR1cm4gdHJlZSA9PiB7XG4gICAgdHJhbnNmb3JtQW5zaUNvZGVCbG9ja3ModHJlZSlcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { describe, expect, it } from "vite-plus/test";
|
|
2
|
+
import { ansiToHtml, transformAnsiCodeBlocks } from "./remark-ansi.js";
|
|
3
|
+
function makeTree(...children) {
|
|
4
|
+
return { type: "root", children };
|
|
5
|
+
}
|
|
6
|
+
describe("ansiToHtml", () => {
|
|
7
|
+
it("should return plain text unchanged", () => {
|
|
8
|
+
expect(ansiToHtml("hello world")).toBe("hello world");
|
|
9
|
+
});
|
|
10
|
+
it("should escape HTML characters", () => {
|
|
11
|
+
expect(ansiToHtml("<div>&</div>")).toBe("<div>&</div>");
|
|
12
|
+
});
|
|
13
|
+
it("should render standard foreground colors", () => {
|
|
14
|
+
const input = "\x1b[31mred text\x1b[0m";
|
|
15
|
+
expect(ansiToHtml(input)).toBe('<span style="color:#bf616a">red text</span>');
|
|
16
|
+
});
|
|
17
|
+
it("should render bold text", () => {
|
|
18
|
+
const input = "\x1b[1mbold\x1b[0m";
|
|
19
|
+
expect(ansiToHtml(input)).toBe('<span style="font-weight:bold">bold</span>');
|
|
20
|
+
});
|
|
21
|
+
it("should render italic text", () => {
|
|
22
|
+
const input = "\x1b[3mitalic\x1b[0m";
|
|
23
|
+
expect(ansiToHtml(input)).toBe('<span style="font-style:italic">italic</span>');
|
|
24
|
+
});
|
|
25
|
+
it("should render underline text", () => {
|
|
26
|
+
const input = "\x1b[4munderline\x1b[0m";
|
|
27
|
+
expect(ansiToHtml(input)).toBe('<span style="text-decoration:underline">underline</span>');
|
|
28
|
+
});
|
|
29
|
+
it("should render dim text", () => {
|
|
30
|
+
const input = "\x1b[2mdim\x1b[0m";
|
|
31
|
+
expect(ansiToHtml(input)).toBe('<span style="opacity:0.7">dim</span>');
|
|
32
|
+
});
|
|
33
|
+
it("should render strikethrough text", () => {
|
|
34
|
+
const input = "\x1b[9mstruck\x1b[0m";
|
|
35
|
+
expect(ansiToHtml(input)).toBe('<span style="text-decoration:line-through">struck</span>');
|
|
36
|
+
});
|
|
37
|
+
it("should render background colors", () => {
|
|
38
|
+
const input = "\x1b[42mgreen bg\x1b[0m";
|
|
39
|
+
expect(ansiToHtml(input)).toBe('<span style="background-color:#a3be8c">green bg</span>');
|
|
40
|
+
});
|
|
41
|
+
it("should combine foreground and background", () => {
|
|
42
|
+
const input = "\x1b[31;42mred on green\x1b[0m";
|
|
43
|
+
expect(ansiToHtml(input)).toBe('<span style="color:#bf616a;background-color:#a3be8c">red on green</span>');
|
|
44
|
+
});
|
|
45
|
+
it("should handle bright foreground colors", () => {
|
|
46
|
+
const input = "\x1b[91mbright red\x1b[0m";
|
|
47
|
+
expect(ansiToHtml(input)).toBe('<span style="color:#bf616a">bright red</span>');
|
|
48
|
+
});
|
|
49
|
+
it("should handle bright background colors", () => {
|
|
50
|
+
const input = "\x1b[102mbright green bg\x1b[0m";
|
|
51
|
+
expect(ansiToHtml(input)).toBe('<span style="background-color:#a3be8c">bright green bg</span>');
|
|
52
|
+
});
|
|
53
|
+
it("should handle 256-color foreground", () => {
|
|
54
|
+
const input = "\x1b[38;5;196mcolor\x1b[0m";
|
|
55
|
+
expect(ansiToHtml(input)).toBe('<span style="color:#ff0000">color</span>');
|
|
56
|
+
});
|
|
57
|
+
it("should handle 256-color background", () => {
|
|
58
|
+
const input = "\x1b[48;5;21mbg\x1b[0m";
|
|
59
|
+
expect(ansiToHtml(input)).toBe('<span style="background-color:#0000ff">bg</span>');
|
|
60
|
+
});
|
|
61
|
+
it("should handle 24-bit RGB foreground", () => {
|
|
62
|
+
const input = "\x1b[38;2;255;128;0mrgb\x1b[0m";
|
|
63
|
+
expect(ansiToHtml(input)).toBe('<span style="color:#ff8000">rgb</span>');
|
|
64
|
+
});
|
|
65
|
+
it("should handle 24-bit RGB background", () => {
|
|
66
|
+
const input = "\x1b[48;2;0;128;255mbg\x1b[0m";
|
|
67
|
+
expect(ansiToHtml(input)).toBe('<span style="background-color:#0080ff">bg</span>');
|
|
68
|
+
});
|
|
69
|
+
it("should handle reset via empty escape", () => {
|
|
70
|
+
const input = "\x1b[31mred\x1b[mnormal";
|
|
71
|
+
expect(ansiToHtml(input)).toBe('<span style="color:#bf616a">red</span>normal');
|
|
72
|
+
});
|
|
73
|
+
it("should handle multiple segments", () => {
|
|
74
|
+
const input = "start \x1b[32mgreen\x1b[0m middle \x1b[34mblue\x1b[0m end";
|
|
75
|
+
expect(ansiToHtml(input)).toBe('start <span style="color:#a3be8c">green</span> middle <span style="color:#8fa1b3">blue</span> end');
|
|
76
|
+
});
|
|
77
|
+
it("should handle combined bold and color", () => {
|
|
78
|
+
const input = "\x1b[1;33mbold yellow\x1b[0m";
|
|
79
|
+
expect(ansiToHtml(input)).toBe('<span style="color:#ebcb8b;font-weight:bold">bold yellow</span>');
|
|
80
|
+
});
|
|
81
|
+
it("should handle 256-color grayscale", () => {
|
|
82
|
+
const input = "\x1b[38;5;232mblack\x1b[0m";
|
|
83
|
+
expect(ansiToHtml(input)).toBe('<span style="color:#080808">black</span>');
|
|
84
|
+
});
|
|
85
|
+
it("should reset individual attributes", () => {
|
|
86
|
+
const input = "\x1b[1;3mbold italic\x1b[23mnot italic\x1b[0m";
|
|
87
|
+
expect(ansiToHtml(input)).toBe('<span style="font-weight:bold;font-style:italic">bold italic</span><span style="font-weight:bold">not italic</span>');
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe("transformAnsiCodeBlocks", () => {
|
|
91
|
+
function process(tree) {
|
|
92
|
+
transformAnsiCodeBlocks(tree);
|
|
93
|
+
return tree;
|
|
94
|
+
}
|
|
95
|
+
it("should convert ansi code block to AnsiCode JSX element", () => {
|
|
96
|
+
const tree = process(makeTree({ type: "code", lang: "ansi", value: "\x1b[31mhello\x1b[0m" }));
|
|
97
|
+
const node = tree.children[0];
|
|
98
|
+
expect(node).toMatchObject({
|
|
99
|
+
type: "mdxJsxFlowElement",
|
|
100
|
+
name: "AnsiCode",
|
|
101
|
+
attributes: [
|
|
102
|
+
{
|
|
103
|
+
type: "mdxJsxAttribute",
|
|
104
|
+
name: "html",
|
|
105
|
+
value: '<span style="color:#bf616a">hello</span>',
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
it("should ignore non-ansi code blocks", () => {
|
|
111
|
+
const tree = process(makeTree({ type: "code", lang: "javascript", value: "const x = 1" }));
|
|
112
|
+
const node = tree.children[0];
|
|
113
|
+
expect(node).toMatchObject({
|
|
114
|
+
type: "code",
|
|
115
|
+
lang: "javascript",
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
it("should handle plain text in ansi code block", () => {
|
|
119
|
+
const tree = process(makeTree({ type: "code", lang: "ansi", value: "no escapes here" }));
|
|
120
|
+
const node = tree.children[0];
|
|
121
|
+
expect(node).toMatchObject({
|
|
122
|
+
type: "mdxJsxFlowElement",
|
|
123
|
+
name: "AnsiCode",
|
|
124
|
+
attributes: [
|
|
125
|
+
{
|
|
126
|
+
type: "mdxJsxAttribute",
|
|
127
|
+
name: "html",
|
|
128
|
+
value: "no escapes here",
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLWFuc2kudW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3JlbWFyay1hbnNpLnVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRXRFLFNBQVMsUUFBUSxDQUFDLEdBQUcsUUFBMEI7SUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUE7QUFDbkMsQ0FBQztBQUVELFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO0lBQzFCLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7UUFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUN2RCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDdkMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBQ3pFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxNQUFNLEtBQUssR0FBRyx5QkFBeUIsQ0FBQTtRQUN2QyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM1Qiw2Q0FBNkMsQ0FDOUMsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtRQUNqQyxNQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FBQTtRQUNsQyxNQUFNLENBQUMsVUFBVSxD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QUUsQ0FBQyxDQUNyRSxDQUFBO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ3pCLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1FBQ3JELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FDbEIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQ25FLENBQUE7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDekIsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixJQUFJLEVBQUUsVUFBVTtZQUNoQixVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsSUFBSSxFQUFFLGlCQUFpQjtvQkFDdkIsSUFBSSxFQUFFLE1BQU07b0JBQ1osS0FBSyxFQUFFLGlCQUFpQjtpQkFDekI7YUFDRjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJvb3QgfSBmcm9tIFwibWRhc3RcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZS1wbHVzL3Rlc3RcIlxuaW1wb3J0IHsgYW5zaVRvSHRtbCwgdHJhbnNmb3JtQW5zaUNvZGVCbG9ja3MgfSBmcm9tIFwiLi9yZW1hcmstYW5zaS50c1wiXG5cbmZ1bmN0aW9uIG1ha2VUcmVlKC4uLmNoaWxkcmVuOiBSb290W1wiY2hpbGRyZW5cIl0pOiBSb290IHtcbiAgcmV0dXJuIHsgdHlwZTogXCJyb290XCIsIGNoaWxkcmVuIH1cbn1cblxuZGVzY3JpYmUoXCJhbnNpVG9IdG1sXCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgcmV0dXJuIHBsYWluIHRleHQgdW5jaGFuZ2VkXCIsICgpID0+IHtcbiAgICBleHBlY3QoYW5zaVRvSHRtbChcImhlbGxvIHdvcmxkXCIpKS50b0JlKFwiaGVsbG8gd29ybGRcIilcbiAgfSlcblxuICBpdChcInNob3VsZCBlc2NhcGUgSFRNTCBjaGFyYWN0ZXJzXCIsICgpID0+IHtcbiAgICBleHBlY3QoYW5zaVRvSHRtbChcIjxkaXY+JjwvZGl2PlwiKSkudG9CZShcIiZsdDtkaXYmZ3Q7JmFtcDsmbHQ7L2RpdiZndDtcIilcbiAgfSlcblxuICBpdChcInNob3VsZCByZW5kZXIgc3RhbmRhcmQgZm9yZWdyb3VuZCBjb2xvcnNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gXCJcXHgxYlszMW1yZWQgdGV4dFxceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoXG4gICAgICAnPHNwYW4gc3R5bGU9XCJjb2xvcjojYmY2MTZhXCI+cmVkIHRleHQ8L3NwYW4+JyxcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmVuZGVyIGJvbGQgdGV4dFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBcIlxceDFiWzFtYm9sZFxceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoJzxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6Ym9sZFwiPmJvbGQ8L3NwYW4+JylcbiAgfSlcblxuICBpdChcInNob3VsZCByZW5kZXIgaXRhbGljIHRleHRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gXCJcXHgxYlszbWl0YWxpY1xceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoXG4gICAgICAnPHNwYW4gc3R5bGU9XCJmb250LXN0eWxlOml0YWxpY1wiPml0YWxpYzwvc3Bhbj4nLFxuICAgIClcbiAgfSlcblxuICBpdChcInNob3VsZCByZW5kZXIgdW5kZXJsaW5lIHRleHRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gXCJcXHgxYls0bXVuZGVybGluZVxceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoXG4gICAgICAnPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lXCI+dW5kZXJsaW5lPC9zcGFuPicsXG4gICAgKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHJlbmRlciBkaW0gdGV4dFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBcIlxceDFiWzJtZGltXFx4MWJbMG1cIlxuICAgIGV4cGVjdChhbnNpVG9IdG1sKGlucHV0KSkudG9CZSgnPHNwYW4gc3R5bGU9XCJvcGFjaXR5OjAuN1wiPmRpbTwvc3Bhbj4nKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHJlbmRlciBzdHJpa2V0aHJvdWdoIHRleHRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gXCJcXHgxYls5bXN0cnVja1xceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoXG4gICAgICAnPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdoXCI+c3RydWNrPC9zcGFuPicsXG4gICAgKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHJlbmRlciBiYWNrZ3JvdW5kIGNvbG9yc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBcIlxceDFiWzQybWdyZWVuIGJnXFx4MWJbMG1cIlxuICAgIGV4cGVjdChhbnNpVG9IdG1sKGlucHV0KSkudG9CZShcbiAgICAgICc8c3BhbiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6I2EzYmU4Y1wiPmdyZWVuIGJnPC9zcGFuPicsXG4gICAgKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGNvbWJpbmUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBcIlxceDFiWzMxOzQybXJlZCBvbiBncmVlblxceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoXG4gICAgICAnPHNwYW4gc3R5bGU9XCJjb2xvcjojYmY2MTZhO2JhY2tncm91bmQtY29sb3I6I2EzYmU4Y1wiPnJlZCBvbiBncmVlbjwvc3Bhbj4nLFxuICAgIClcbiAgfSlcblxuICBpdChcInNob3VsZCBoYW5kbGUgYnJpZ2h0IGZvcmVncm91bmQgY29sb3JzXCIsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IFwiXFx4MWJbOTFtYnJpZ2h0IHJlZFxceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoXG4gICAgICAnPHNwYW4gc3R5bGU9XCJjb2xvcjojYmY2MTZhXCI+YnJpZ2h0IHJlZDwvc3Bhbj4nLFxuICAgIClcbiAgfSlcblxuICBpdChcInNob3VsZCBoYW5kbGUgYnJpZ2h0IGJhY2tncm91bmQgY29sb3JzXCIsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IFwiXFx4MWJbMTAybWJyaWdodCBncmVlbiBiZ1xceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoXG4gICAgICAnPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiNhM2JlOGNcIj5icmlnaHQgZ3JlZW4gYmc8L3NwYW4+JyxcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIDI1Ni1jb2xvciBmb3JlZ3JvdW5kXCIsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IFwiXFx4MWJbMzg7NTsxOTZtY29sb3JcXHgxYlswbVwiXG4gICAgZXhwZWN0KGFuc2lUb0h0bWwoaW5wdXQpKS50b0JlKCc8c3BhbiBzdHlsZT1cImNvbG9yOiNmZjAwMDBcIj5jb2xvcjwvc3Bhbj4nKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGhhbmRsZSAyNTYtY29sb3IgYmFja2dyb3VuZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBcIlxceDFiWzQ4OzU7MjFtYmdcXHgxYlswbVwiXG4gICAgZXhwZWN0KGFuc2lUb0h0bWwoaW5wdXQpKS50b0JlKFxuICAgICAgJzxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojMDAwMGZmXCI+Ymc8L3NwYW4+JyxcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIDI0LWJpdCBSR0IgZm9yZWdyb3VuZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBcIlxceDFiWzM4OzI7MjU1OzEyODswbXJnYlxceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoJzxzcGFuIHN0eWxlPVwiY29sb3I6I2ZmODAwMFwiPnJnYjwvc3Bhbj4nKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGhhbmRsZSAyNC1iaXQgUkdCIGJhY2tncm91bmRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gXCJcXHgxYls0ODsyOzA7MTI4OzI1NW1iZ1xceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoXG4gICAgICAnPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiMwMDgwZmZcIj5iZzwvc3Bhbj4nLFxuICAgIClcbiAgfSlcblxuICBpdChcInNob3VsZCBoYW5kbGUgcmVzZXQgdmlhIGVtcHR5IGVzY2FwZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBcIlxceDFiWzMxbXJlZFxceDFiW21ub3JtYWxcIlxuICAgIGV4cGVjdChhbnNpVG9IdG1sKGlucHV0KSkudG9CZShcbiAgICAgICc8c3BhbiBzdHlsZT1cImNvbG9yOiNiZjYxNmFcIj5yZWQ8L3NwYW4+bm9ybWFsJyxcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIG11bHRpcGxlIHNlZ21lbnRzXCIsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IFwic3RhcnQgXFx4MWJbMzJtZ3JlZW5cXHgxYlswbSBtaWRkbGUgXFx4MWJbMzRtYmx1ZVxceDFiWzBtIGVuZFwiXG4gICAgZXhwZWN0KGFuc2lUb0h0bWwoaW5wdXQpKS50b0JlKFxuICAgICAgJ3N0YXJ0IDxzcGFuIHN0eWxlPVwiY29sb3I6I2EzYmU4Y1wiPmdyZWVuPC9zcGFuPiBtaWRkbGUgPHNwYW4gc3R5bGU9XCJjb2xvcjojOGZhMWIzXCI+Ymx1ZTwvc3Bhbj4gZW5kJyxcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIGNvbWJpbmVkIGJvbGQgYW5kIGNvbG9yXCIsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IFwiXFx4MWJbMTszM21ib2xkIHllbGxvd1xceDFiWzBtXCJcbiAgICBleHBlY3QoYW5zaVRvSHRtbChpbnB1dCkpLnRvQmUoXG4gICAgICAnPHNwYW4gc3R5bGU9XCJjb2xvcjojZWJjYjhiO2ZvbnQtd2VpZ2h0OmJvbGRcIj5ib2xkIHllbGxvdzwvc3Bhbj4nLFxuICAgIClcbiAgfSlcblxuICBpdChcInNob3VsZCBoYW5kbGUgMjU2LWNvbG9yIGdyYXlzY2FsZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBcIlxceDFiWzM4OzU7MjMybWJsYWNrXFx4MWJbMG1cIlxuICAgIGV4cGVjdChhbnNpVG9IdG1sKGlucHV0KSkudG9CZSgnPHNwYW4gc3R5bGU9XCJjb2xvcjojMDgwODA4XCI+YmxhY2s8L3NwYW4+JylcbiAgfSlcblxuICBpdChcInNob3VsZCByZXNldCBpbmRpdmlkdWFsIGF0dHJpYnV0ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gXCJcXHgxYlsxOzNtYm9sZCBpdGFsaWNcXHgxYlsyM21ub3QgaXRhbGljXFx4MWJbMG1cIlxuICAgIGV4cGVjdChhbnNpVG9IdG1sKGlucHV0KSkudG9CZShcbiAgICAgICc8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHlsZTppdGFsaWNcIj5ib2xkIGl0YWxpYzwvc3Bhbj48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OmJvbGRcIj5ub3QgaXRhbGljPC9zcGFuPicsXG4gICAgKVxuICB9KVxufSlcblxuZGVzY3JpYmUoXCJ0cmFuc2Zvcm1BbnNpQ29kZUJsb2Nrc1wiLCAoKSA9PiB7XG4gIGZ1bmN0aW9uIHByb2Nlc3ModHJlZTogUm9vdCkge1xuICAgIHRyYW5zZm9ybUFuc2lDb2RlQmxvY2tzKHRyZWUpXG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuXG4gIGl0KFwic2hvdWxkIGNvbnZlcnQgYW5zaSBjb2RlIGJsb2NrIHRvIEFuc2lDb2RlIEpTWCBlbGVtZW50XCIsICgpID0+IHtcbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhcbiAgICAgIG1ha2VUcmVlKHsgdHlwZTogXCJjb2RlXCIsIGxhbmc6IFwiYW5zaVwiLCB2YWx1ZTogXCJcXHgxYlszMW1oZWxsb1xceDFiWzBtXCIgfSksXG4gICAgKVxuXG4gICAgY29uc3Qgbm9kZSA9IHRyZWUuY2hpbGRyZW5bMF1cbiAgICBleHBlY3Qobm9kZSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiBcIm1keEpzeEZsb3dFbGVtZW50XCIsXG4gICAgICBuYW1lOiBcIkFuc2lDb2RlXCIsXG4gICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiLFxuICAgICAgICAgIG5hbWU6IFwiaHRtbFwiLFxuICAgICAgICAgIHZhbHVlOiAnPHNwYW4gc3R5bGU9XCJjb2xvcjojYmY2MTZhXCI+aGVsbG88L3NwYW4+JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgfSlcblxuICBpdChcInNob3VsZCBpZ25vcmUgbm9uLWFuc2kgY29kZSBibG9ja3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRyZWUgPSBwcm9jZXNzKFxuICAgICAgbWFrZVRyZWUoeyB0eXBlOiBcImNvZGVcIiwgbGFuZzogXCJqYXZhc2NyaXB0XCIsIHZhbHVlOiBcImNvbnN0IHggPSAxXCIgfSksXG4gICAgKVxuXG4gICAgY29uc3Qgbm9kZSA9IHRyZWUuY2hpbGRyZW5bMF1cbiAgICBleHBlY3Qobm9kZSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiBcImNvZGVcIixcbiAgICAgIGxhbmc6IFwiamF2YXNjcmlwdFwiLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIHBsYWluIHRleHQgaW4gYW5zaSBjb2RlIGJsb2NrXCIsICgpID0+IHtcbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhcbiAgICAgIG1ha2VUcmVlKHsgdHlwZTogXCJjb2RlXCIsIGxhbmc6IFwiYW5zaVwiLCB2YWx1ZTogXCJubyBlc2NhcGVzIGhlcmVcIiB9KSxcbiAgICApXG5cbiAgICBjb25zdCBub2RlID0gdHJlZS5jaGlsZHJlblswXVxuICAgIGV4cGVjdChub2RlKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6IFwibWR4SnN4Rmxvd0VsZW1lbnRcIixcbiAgICAgIG5hbWU6IFwiQW5zaUNvZGVcIixcbiAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwibWR4SnN4QXR0cmlidXRlXCIsXG4gICAgICAgICAgbmFtZTogXCJodG1sXCIsXG4gICAgICAgICAgdmFsdWU6IFwibm8gZXNjYXBlcyBoZXJlXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Root } from "mdast";
|
|
2
|
+
import type { Plugin } from "unified";
|
|
3
|
+
/** Walk a mdast tree and convert :badge text directives into InlineBadge JSX elements */
|
|
4
|
+
export declare function transformBadgeDirectives(tree: Root): void;
|
|
5
|
+
/** Remark plugin that converts :badge text directives into InlineBadge JSX elements */
|
|
6
|
+
export declare const remarkBadge: Plugin<[], Root>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { visit } from "unist-util-visit";
|
|
2
|
+
/** Walk a mdast tree and convert :badge text directives into InlineBadge JSX elements */
|
|
3
|
+
export function transformBadgeDirectives(tree) {
|
|
4
|
+
visit(tree, "textDirective", (node, index, parent) => {
|
|
5
|
+
if (node.name !== "badge" || index === undefined || !parent)
|
|
6
|
+
return;
|
|
7
|
+
const label = node.children
|
|
8
|
+
.map(c => ("value" in c ? String(c.value) : ""))
|
|
9
|
+
.join("");
|
|
10
|
+
const variant = node.attributes?.variant;
|
|
11
|
+
const jsxNode = {
|
|
12
|
+
type: "mdxJsxTextElement",
|
|
13
|
+
name: "InlineBadge",
|
|
14
|
+
attributes: [
|
|
15
|
+
{
|
|
16
|
+
type: "mdxJsxAttribute",
|
|
17
|
+
name: "label",
|
|
18
|
+
value: label,
|
|
19
|
+
},
|
|
20
|
+
...(variant
|
|
21
|
+
? [
|
|
22
|
+
{
|
|
23
|
+
type: "mdxJsxAttribute",
|
|
24
|
+
name: "variant",
|
|
25
|
+
value: variant,
|
|
26
|
+
},
|
|
27
|
+
]
|
|
28
|
+
: []),
|
|
29
|
+
],
|
|
30
|
+
children: [],
|
|
31
|
+
data: { _mdxExplicitJsx: true },
|
|
32
|
+
};
|
|
33
|
+
// @ts-expect-error mdxJsxTextElement is not in mdast types
|
|
34
|
+
parent.children.splice(index, 1, jsxNode);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Remark plugin that converts :badge text directives into InlineBadge JSX elements */
|
|
38
|
+
export const remarkBadge = () => {
|
|
39
|
+
return tree => {
|
|
40
|
+
transformBadgeDirectives(tree);
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLWJhZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3BsdWdpbnMvcmVtYXJrLWJhZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV4Qyx5RkFBeUY7QUFDekYsTUFBTSxVQUFVLHdCQUF3QixDQUFDLElBQVU7SUFDakQsS0FBSyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxJQUFtQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNsRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTTtRQUVuRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUTthQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQy9DLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUVYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFBO1FBRXhDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLG1CQUE0QjtZQUNsQyxJQUFJLEVBQUUsYUFBYTtZQUNuQixVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsSUFBSSxFQUFFLGlCQUEwQjtvQkFDaEMsSUFBSSxFQUFFLE9BQU87b0JBQ2IsS0FBSyxFQUFFLEtBQUs7aUJBQ2I7Z0JBQ0QsR0FBRyxDQUFDLE9BQU87b0JBQ1QsQ0FBQyxDQUFDO3dCQUNFOzRCQUNFLElBQUksRUFBRSxpQkFBMEI7NEJBQ2hDLElBQUksRUFBRSxTQUFTOzRCQUNmLEtBQUssRUFBRSxPQUFPO3lCQUNmO3FCQUNGO29CQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDUjtZQUNELFFBQVEsRUFBRSxFQUFFO1lBQ1osSUFBSSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRTtTQUNoQyxDQUFBO1FBRUQsMkRBQTJEO1FBQzNELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDM0MsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBcUIsR0FBRyxFQUFFO0lBQ2hELE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDWix3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoQyxDQUFDLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJvb3QgfSBmcm9tIFwibWRhc3RcIlxuaW1wb3J0IHR5cGUgeyBUZXh0RGlyZWN0aXZlIH0gZnJvbSBcIm1kYXN0LXV0aWwtZGlyZWN0aXZlXCJcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSBcInVuaWZpZWRcIlxuaW1wb3J0IHsgdmlzaXQgfSBmcm9tIFwidW5pc3QtdXRpbC12aXNpdFwiXG5cbi8qKiBXYWxrIGEgbWRhc3QgdHJlZSBhbmQgY29udmVydCA6YmFkZ2UgdGV4dCBkaXJlY3RpdmVzIGludG8gSW5saW5lQmFkZ2UgSlNYIGVsZW1lbnRzICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtQmFkZ2VEaXJlY3RpdmVzKHRyZWU6IFJvb3QpIHtcbiAgdmlzaXQodHJlZSwgXCJ0ZXh0RGlyZWN0aXZlXCIsIChub2RlOiBUZXh0RGlyZWN0aXZlLCBpbmRleCwgcGFyZW50KSA9PiB7XG4gICAgaWYgKG5vZGUubmFtZSAhPT0gXCJiYWRnZVwiIHx8IGluZGV4ID09PSB1bmRlZmluZWQgfHwgIXBhcmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBsYWJlbCA9IG5vZGUuY2hpbGRyZW5cbiAgICAgIC5tYXAoYyA9PiAoXCJ2YWx1ZVwiIGluIGMgPyBTdHJpbmcoYy52YWx1ZSkgOiBcIlwiKSlcbiAgICAgIC5qb2luKFwiXCIpXG5cbiAgICBjb25zdCB2YXJpYW50ID0gbm9kZS5hdHRyaWJ1dGVzPy52YXJpYW50XG5cbiAgICBjb25zdCBqc3hOb2RlID0ge1xuICAgICAgdHlwZTogXCJtZHhKc3hUZXh0RWxlbWVudFwiIGFzIGNvbnN0LFxuICAgICAgbmFtZTogXCJJbmxpbmVCYWRnZVwiLFxuICAgICAgYXR0cmlidXRlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJtZHhKc3hBdHRyaWJ1dGVcIiBhcyBjb25zdCxcbiAgICAgICAgICBuYW1lOiBcImxhYmVsXCIsXG4gICAgICAgICAgdmFsdWU6IGxhYmVsLFxuICAgICAgICB9LFxuICAgICAgICAuLi4odmFyaWFudFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJtZHhKc3hBdHRyaWJ1dGVcIiBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICBuYW1lOiBcInZhcmlhbnRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFyaWFudCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdKSxcbiAgICAgIF0sXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgICBkYXRhOiB7IF9tZHhFeHBsaWNpdEpzeDogdHJ1ZSB9LFxuICAgIH1cblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWR4SnN4VGV4dEVsZW1lbnQgaXMgbm90IGluIG1kYXN0IHR5cGVzXG4gICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSwganN4Tm9kZSlcbiAgfSlcbn1cblxuLyoqIFJlbWFyayBwbHVnaW4gdGhhdCBjb252ZXJ0cyA6YmFkZ2UgdGV4dCBkaXJlY3RpdmVzIGludG8gSW5saW5lQmFkZ2UgSlNYIGVsZW1lbnRzICovXG5leHBvcnQgY29uc3QgcmVtYXJrQmFkZ2U6IFBsdWdpbjxbXSwgUm9vdD4gPSAoKSA9PiB7XG4gIHJldHVybiB0cmVlID0+IHtcbiAgICB0cmFuc2Zvcm1CYWRnZURpcmVjdGl2ZXModHJlZSlcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|