livemark 0.7.2 → 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/source/program.ts +18 -0
- package/source/settings.ts +6 -0
- package/{build/website → source}/vite.config.ts +3 -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.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/package.json +0 -138
- package/build/program.js +0 -18
- package/build/settings.js +0 -7
- package/build/vite.config.d.ts +0 -2
- package/build/vite.config.js +0 -48
- package/build/website/components/BlogSidebar.tsx +0 -162
- package/build/website/components/ChangelogSidebar.tsx +0 -120
- package/build/website/hooks/media.ts +0 -19
- /package/{build/website → source}/assets/logo.svg +0 -0
- /package/{build/website → source}/client.tsx +0 -0
- /package/{build/website → source}/components/Abbr.tsx +0 -0
- /package/{build/website → source}/components/AnsiCode.tsx +0 -0
- /package/{build/website → source}/components/BackToTop.tsx +0 -0
- /package/{build/website → source}/components/Banner.tsx +0 -0
- /package/{build/website → source}/components/BlogIndex.tsx +0 -0
- /package/{build/website → source}/components/Breadcrumbs.tsx +0 -0
- /package/{build/website → source}/components/Card.tsx +0 -0
- /package/{build/website → source}/components/Cards.tsx +0 -0
- /package/{build/website → source}/components/ChangelogIndex.tsx +0 -0
- /package/{build/website → source}/components/CodeBlock.tsx +0 -0
- /package/{build/website → source}/components/CodeTabs.tsx +0 -0
- /package/{build/website → source}/components/Column.tsx +0 -0
- /package/{build/website → source}/components/Columns.tsx +0 -0
- /package/{build/website → source}/components/Content.tsx +0 -0
- /package/{build/website → source}/components/ContentTab.tsx +0 -0
- /package/{build/website → source}/components/ContentTabs.tsx +0 -0
- /package/{build/website → source}/components/DefaultCatchBoundary.tsx +0 -0
- /package/{build/website → source}/components/DefinitionList.tsx +0 -0
- /package/{build/website → source}/components/Details.tsx +0 -0
- /package/{build/website → source}/components/FileTree.tsx +0 -0
- /package/{build/website → source}/components/Footer.tsx +0 -0
- /package/{build/website → source}/components/FootnoteRef.tsx +0 -0
- /package/{build/website → source}/components/Heading.tsx +0 -0
- /package/{build/website → source}/components/InlineBadge.tsx +0 -0
- /package/{build/website → source}/components/InlineIcon.tsx +0 -0
- /package/{build/website → source}/components/InlineToc.tsx +0 -0
- /package/{build/website → source}/components/Mermaid.tsx +0 -0
- /package/{build/website → source}/components/MermaidRenderer.tsx +0 -0
- /package/{build/website → source}/components/NotFound.tsx +0 -0
- /package/{build/website → source}/components/PackageTabs.tsx +0 -0
- /package/{build/website → source}/components/PrevNext.tsx +0 -0
- /package/{build/website → source}/components/Search.tsx +0 -0
- /package/{build/website → source}/components/SearchDialog.tsx +0 -0
- /package/{build/website → source}/components/SidebarLinks.tsx +0 -0
- /package/{build/website → source}/components/SidebarSections.tsx +0 -0
- /package/{build/website → source}/components/SiteTitle.tsx +0 -0
- /package/{build/website → source}/components/SortableTable.tsx +0 -0
- /package/{build/website → source}/components/SoundCloud.tsx +0 -0
- /package/{build/website → source}/components/TagIndex.tsx +0 -0
- /package/{build/website → source}/components/Theme.tsx +0 -0
- /package/{build/website → source}/components/Toc.tsx +0 -0
- /package/{build/website → source}/components/YouTube.tsx +0 -0
- /package/{build/website → source}/components/ZoomImage.tsx +0 -0
- /package/{build/website → source}/content/article.ts +0 -0
- /package/{build/website → source}/content/tag.ts +0 -0
- /package/{build/website → source}/elements/collapsible.tsx +0 -0
- /package/{build/website → source}/elements/direction.tsx +0 -0
- /package/{build/website → source}/elements/sonner.tsx +0 -0
- /package/{build/website → source}/helpers/article-icon.ts +0 -0
- /package/{build/website → source}/helpers/article.ts +0 -0
- /package/{build/website → source}/helpers/changelog-source.ts +0 -0
- /package/{build/website → source}/helpers/changelog-source.unit.ts +0 -0
- /package/{build/website → source}/helpers/dynamic-icon-resolver.tsx +0 -0
- /package/{build/website → source}/helpers/dynamic-icon.tsx +0 -0
- /package/{build/website → source}/helpers/favicon.ts +0 -0
- /package/{build/website → source}/helpers/model.ts +0 -0
- /package/{build/website → source}/helpers/resolve-asset-path.ts +0 -0
- /package/{build/website → source}/helpers/resolve-includes.ts +0 -0
- /package/{build/website → source}/helpers/resolve-includes.unit.ts +0 -0
- /package/{build/website → source}/helpers/search-text.ts +0 -0
- /package/{build/website → source}/helpers/section.unit.ts +0 -0
- /package/{build/website → source}/helpers/theme.ts +0 -0
- /package/{build/website → source}/helpers/toc-context.ts +0 -0
- /package/{build/website → source}/helpers/toc.ts +0 -0
- /package/{build/website → source}/helpers/toc.unit.ts +0 -0
- /package/{build/website → source}/hooks/in-view.ts +0 -0
- /package/{build/website → source}/models/toc.ts +0 -0
- /package/{build/website → source}/plugins/rehype-inline-code.ts +0 -0
- /package/{build/website → source}/plugins/rehype-task-list-a11y.ts +0 -0
- /package/{build/website → source}/plugins/remark-abbr.ts +0 -0
- /package/{build/website → source}/plugins/remark-abbr.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-ansi.ts +0 -0
- /package/{build/website → source}/plugins/remark-ansi.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-badge.ts +0 -0
- /package/{build/website → source}/plugins/remark-badge.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-button.ts +0 -0
- /package/{build/website → source}/plugins/remark-button.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-callout.ts +0 -0
- /package/{build/website → source}/plugins/remark-card.ts +0 -0
- /package/{build/website → source}/plugins/remark-code-tabs.ts +0 -0
- /package/{build/website → source}/plugins/remark-columns.ts +0 -0
- /package/{build/website → source}/plugins/remark-custom-heading-id.ts +0 -0
- /package/{build/website → source}/plugins/remark-custom-heading-id.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-deflist.ts +0 -0
- /package/{build/website → source}/plugins/remark-details.ts +0 -0
- /package/{build/website → source}/plugins/remark-filetree.ts +0 -0
- /package/{build/website → source}/plugins/remark-filetree.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-github-callout.ts +0 -0
- /package/{build/website → source}/plugins/remark-icon.ts +0 -0
- /package/{build/website → source}/plugins/remark-image.ts +0 -0
- /package/{build/website → source}/plugins/remark-media.ts +0 -0
- /package/{build/website → source}/plugins/remark-media.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-mermaid.ts +0 -0
- /package/{build/website → source}/plugins/remark-npm.ts +0 -0
- /package/{build/website → source}/plugins/remark-steps.ts +0 -0
- /package/{build/website → source}/plugins/remark-steps.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-tab.ts +0 -0
- /package/{build/website → source}/plugins/remark-tab.unit.ts +0 -0
- /package/{build/website → source}/plugins/remark-toc.ts +0 -0
- /package/{build/website → source}/plugins/remark-toc.unit.ts +0 -0
- /package/{build/website → source}/plugins/shiki-icon.ts +0 -0
- /package/{build/website → source}/plugins/shiki-line-highlight.ts +0 -0
- /package/{build/website → source}/plugins/vite-livemark.ts +0 -0
- /package/{build/website → source}/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
- /package/{build → target}/settings.d.ts +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command } from "commander"
|
|
2
|
+
import { build } from "./commands/build.ts"
|
|
3
|
+
import { escape } from "./commands/escape.ts"
|
|
4
|
+
import { preview } from "./commands/preview.ts"
|
|
5
|
+
import { start } from "./commands/start.ts"
|
|
6
|
+
import { helpConfiguration } from "./helpers/program.ts"
|
|
7
|
+
import packageJson from "../package.json" with { type: "json" }
|
|
8
|
+
|
|
9
|
+
export const program = new Command()
|
|
10
|
+
.name("livemark")
|
|
11
|
+
.description("Livemark static site generator")
|
|
12
|
+
.version(packageJson.version, "-v, --version", "display the livemark version")
|
|
13
|
+
.option("-c, --config <path>", "path to config file")
|
|
14
|
+
.configureHelp(helpConfiguration)
|
|
15
|
+
.addCommand(start)
|
|
16
|
+
.addCommand(build)
|
|
17
|
+
.addCommand(preview)
|
|
18
|
+
.addCommand(escape)
|
|
@@ -13,9 +13,9 @@ import {
|
|
|
13
13
|
import react from "@vitejs/plugin-react"
|
|
14
14
|
import { defineConfig } from "vite"
|
|
15
15
|
import svgr from "vite-plugin-svgr"
|
|
16
|
-
import { loadConfig } from "
|
|
17
|
-
import { WebsiteConfig } from "
|
|
18
|
-
import { OVERRIDE_SUBDIRS } from "
|
|
16
|
+
import { loadConfig } from "./actions/config/load.ts"
|
|
17
|
+
import { WebsiteConfig } from "./models/config.ts"
|
|
18
|
+
import { OVERRIDE_SUBDIRS } from "./settings.ts"
|
|
19
19
|
import { livemark } from "./plugins/vite-livemark.ts"
|
|
20
20
|
|
|
21
21
|
const config = await loadConfig()
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { access, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import slugify from "@sindresorhus/slugify";
|
|
4
|
+
import { toString as mdastToString } from "mdast-util-to-string";
|
|
5
|
+
import remarkParse from "remark-parse";
|
|
6
|
+
import remarkStringify from "remark-stringify";
|
|
7
|
+
import { unified } from "unified";
|
|
8
|
+
import { visit } from "unist-util-visit";
|
|
9
|
+
import { isGitHubUrl, parseGitHubRepo } from "../../helpers/changelog-source.js";
|
|
10
|
+
const CACHE_DIR = ".livemark/cache/changelog";
|
|
11
|
+
const META_FILE = ".livemark/cache/changelog.meta.json";
|
|
12
|
+
const parser = unified().use(remarkParse);
|
|
13
|
+
const stringifier = unified().use(remarkStringify, {
|
|
14
|
+
bullet: "-",
|
|
15
|
+
fences: true,
|
|
16
|
+
emphasis: "_",
|
|
17
|
+
});
|
|
18
|
+
export function cacheIncludeGlob() {
|
|
19
|
+
return `${CACHE_DIR}/**/*.md`;
|
|
20
|
+
}
|
|
21
|
+
/** Build the per-version changelog cache files for a changelog section */
|
|
22
|
+
export async function buildChangelog(section, config) {
|
|
23
|
+
const cacheDir = join(config.root, CACHE_DIR);
|
|
24
|
+
const metaPath = join(config.root, META_FILE);
|
|
25
|
+
const entries = isGitHubUrl(section.source)
|
|
26
|
+
? await buildFromGitHub(section.source, metaPath, cacheDir)
|
|
27
|
+
: await buildFromLocal(section.source, config.root);
|
|
28
|
+
if (entries === undefined)
|
|
29
|
+
return;
|
|
30
|
+
await rm(cacheDir, { recursive: true, force: true });
|
|
31
|
+
await mkdir(cacheDir, { recursive: true });
|
|
32
|
+
for (const entry of entries) {
|
|
33
|
+
const markdown = wrapFrontmatter(entry, section);
|
|
34
|
+
await writeFile(join(cacheDir, `${entry.slug}.md`), markdown, "utf-8");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function buildFromLocal(source, root) {
|
|
38
|
+
const filePath = resolve(root, source);
|
|
39
|
+
const body = await readFile(filePath, "utf-8");
|
|
40
|
+
return splitLocalChangelog(body);
|
|
41
|
+
}
|
|
42
|
+
/** Parse CHANGELOG.md into per-version entries using mdast */
|
|
43
|
+
export function splitLocalChangelog(body) {
|
|
44
|
+
const tree = parser.parse(body);
|
|
45
|
+
const entries = [];
|
|
46
|
+
let current;
|
|
47
|
+
for (const child of tree.children) {
|
|
48
|
+
if (child.type === "heading" && child.depth === 2) {
|
|
49
|
+
if (current)
|
|
50
|
+
entries.push(finalizeEntry(current));
|
|
51
|
+
current = { heading: mdastToString(child), children: [] };
|
|
52
|
+
}
|
|
53
|
+
else if (current) {
|
|
54
|
+
current.children.push(child);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (current)
|
|
58
|
+
entries.push(finalizeEntry(current));
|
|
59
|
+
return entries;
|
|
60
|
+
}
|
|
61
|
+
function finalizeEntry(input) {
|
|
62
|
+
const versionMatch = input.heading.match(/^\[?([^\]\s]+)\]?/);
|
|
63
|
+
const version = versionMatch?.[1] ?? input.heading;
|
|
64
|
+
const dateMatch = input.heading.match(/\d{4}-\d{2}-\d{2}/);
|
|
65
|
+
const body = renderEntryBody(input.children);
|
|
66
|
+
return {
|
|
67
|
+
slug: slugify(version),
|
|
68
|
+
title: version,
|
|
69
|
+
date: dateMatch?.[0],
|
|
70
|
+
body,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** Serialize an entry's mdast children back to markdown */
|
|
74
|
+
function renderEntryBody(children) {
|
|
75
|
+
const root = { type: "root", children };
|
|
76
|
+
return stringifier.stringify(root).trimEnd();
|
|
77
|
+
}
|
|
78
|
+
/** Drop the body's leading h1 (typically the conventional-changelog
|
|
79
|
+
* `# 0.7.2 (2026-04-25)` boilerplate that duplicates the article's title),
|
|
80
|
+
* shift h2–h6 up by one so subsection headings become h1 / h2 / …, and
|
|
81
|
+
* escape stray `<` outside code so MDX doesn't mistake them for JSX. */
|
|
82
|
+
function processBody(body) {
|
|
83
|
+
const tree = parser.parse(body);
|
|
84
|
+
visit(tree, "heading", node => {
|
|
85
|
+
if (node.depth > 1)
|
|
86
|
+
node.depth = (node.depth - 1);
|
|
87
|
+
});
|
|
88
|
+
if (tree.children[0]?.type === "heading" && tree.children[0].depth === 1) {
|
|
89
|
+
tree.children.shift();
|
|
90
|
+
}
|
|
91
|
+
return escapeMdxAngles(stringifier.stringify(tree).trimEnd());
|
|
92
|
+
}
|
|
93
|
+
/** Escape `<` to `\<` outside fenced code blocks and inline backtick spans
|
|
94
|
+
* so commit messages with placeholders like `<subdir>` don't get parsed as
|
|
95
|
+
* JSX by MDX. */
|
|
96
|
+
function escapeMdxAngles(markdown) {
|
|
97
|
+
let inFence = false;
|
|
98
|
+
return markdown
|
|
99
|
+
.split("\n")
|
|
100
|
+
.map(line => {
|
|
101
|
+
if (line.startsWith("```")) {
|
|
102
|
+
inFence = !inFence;
|
|
103
|
+
return line;
|
|
104
|
+
}
|
|
105
|
+
if (inFence)
|
|
106
|
+
return line;
|
|
107
|
+
return line.replace(/`[^`]*`|</g, match => match === "<" ? "\\<" : match);
|
|
108
|
+
})
|
|
109
|
+
.join("\n");
|
|
110
|
+
}
|
|
111
|
+
async function buildFromGitHub(source, metaPath, cacheDir) {
|
|
112
|
+
const parsed = parseGitHubRepo(source);
|
|
113
|
+
if (!parsed) {
|
|
114
|
+
throw new Error(`Could not parse GitHub repo from source: ${source}`);
|
|
115
|
+
}
|
|
116
|
+
const url = `https://api.github.com/repos/${parsed.owner}/${parsed.repo}/releases?per_page=100`;
|
|
117
|
+
const headers = {
|
|
118
|
+
Accept: "application/vnd.github+json",
|
|
119
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
120
|
+
};
|
|
121
|
+
const token = process.env.GITHUB_TOKEN;
|
|
122
|
+
if (token)
|
|
123
|
+
headers.Authorization = `Bearer ${token}`;
|
|
124
|
+
const meta = await readMeta(metaPath);
|
|
125
|
+
const hasCache = await exists(cacheDir);
|
|
126
|
+
if (meta && hasCache)
|
|
127
|
+
headers["If-None-Match"] = meta.etag;
|
|
128
|
+
const res = await fetch(url, { headers });
|
|
129
|
+
if (res.status === 304)
|
|
130
|
+
return undefined;
|
|
131
|
+
if (!res.ok) {
|
|
132
|
+
const remaining = res.headers.get("x-ratelimit-remaining");
|
|
133
|
+
const reset = res.headers.get("x-ratelimit-reset");
|
|
134
|
+
const msg = `GitHub API ${res.status} ${res.statusText} (rate-limit remaining: ${remaining ?? "?"}, reset: ${reset ?? "?"})`;
|
|
135
|
+
if (hasCache) {
|
|
136
|
+
console.warn(`${msg} — falling back to cached changelog`);
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
throw new Error(msg);
|
|
140
|
+
}
|
|
141
|
+
const releases = (await res.json());
|
|
142
|
+
const etag = res.headers.get("etag");
|
|
143
|
+
if (etag) {
|
|
144
|
+
await mkdir(dirname(metaPath), { recursive: true });
|
|
145
|
+
await writeFile(metaPath, JSON.stringify({ etag, fetchedAt: new Date().toISOString() }, null, 2), "utf-8");
|
|
146
|
+
}
|
|
147
|
+
return releases.map(release => ({
|
|
148
|
+
slug: slugify(release.tag_name),
|
|
149
|
+
title: release.tag_name,
|
|
150
|
+
date: release.published_at ?? undefined,
|
|
151
|
+
body: (release.body ?? "").trim(),
|
|
152
|
+
sourceUrl: release.html_url ?? undefined,
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
function wrapFrontmatter(entry, section) {
|
|
156
|
+
const lines = [
|
|
157
|
+
"---",
|
|
158
|
+
`title: ${entry.title}`,
|
|
159
|
+
`path: ${section.prefix}${entry.slug}/`,
|
|
160
|
+
];
|
|
161
|
+
if (entry.date)
|
|
162
|
+
lines.push(`date: ${entry.date}`);
|
|
163
|
+
if (entry.sourceUrl) {
|
|
164
|
+
lines.push(`sourceUrl: ${entry.sourceUrl}`, "sourceAction: view");
|
|
165
|
+
}
|
|
166
|
+
lines.push("---", "", `# ${entry.title}`, "", processBody(entry.body));
|
|
167
|
+
return lines.join("\n");
|
|
168
|
+
}
|
|
169
|
+
async function readMeta(metaPath) {
|
|
170
|
+
try {
|
|
171
|
+
const raw = await readFile(metaPath, "utf-8");
|
|
172
|
+
return JSON.parse(raw);
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async function exists(path) {
|
|
179
|
+
try {
|
|
180
|
+
await access(path);
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvYWN0aW9ucy9jaGFuZ2Vsb2cvYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbEQsT0FBTyxPQUFPLE1BQU0sdUJBQXVCLENBQUE7QUFFM0MsT0FBTyxFQUFFLFFBQVEsSUFBSSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNoRSxPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxlQUFlLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFHeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQXVCaEYsTUFBTSxTQUFTLEdBQUcsMkJBQTJCLENBQUE7QUFDN0MsTUFBTSxTQUFTLEdBQUcscUNBQXFDLENBQUE7QUFFdkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBQ3pDLE1BQU0sV0FBVyxHQUFHLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUU7SUFDakQsTUFBTSxFQUFFLEdBQUc7SUFDWCxNQUFNLEVBQUUsSUFBSTtJQUNaLFFBQVEsRUFBRSxHQUFHO0NBQ2QsQ0FBQyxDQUFBO0FBRUYsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixPQUFPLEdBQUcsU0FBUyxVQUFVLENBQUE7QUFDL0IsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxN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LENBQUE7SUFDakQsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN0RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDekIsQ0FBQztBQUVELEtBQUssVUFBVSxRQUFRLENBQUMsUUFBZ0I7SUFDdEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQWMsQ0FBQTtJQUNyQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQVk7SUFDaEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFjY2VzcywgbWtkaXIsIHJlYWRGaWxlLCBybSwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHNsdWdpZnkgZnJvbSBcIkBzaW5kcmVzb3JodXMvc2x1Z2lmeVwiXG5pbXBvcnQgdHlwZSB7IFJvb3QsIFJvb3RDb250ZW50IH0gZnJvbSBcIm1kYXN0XCJcbmltcG9ydCB7IHRvU3RyaW5nIGFzIG1kYXN0VG9TdHJpbmcgfSBmcm9tIFwibWRhc3QtdXRpbC10by1zdHJpbmdcIlxuaW1wb3J0IHJlbWFya1BhcnNlIGZyb20gXCJyZW1hcmstcGFyc2VcIlxuaW1wb3J0IHJlbWFya1N0cmluZ2lmeSBmcm9tIFwicmVtYXJrLXN0cmluZ2lmeVwiXG5pbXBvcnQgeyB1bmlmaWVkIH0gZnJvbSBcInVuaWZpZWRcIlxuaW1wb3J0IHsgdmlzaXQgfSBmcm9tIFwidW5pc3QtdXRpbC12aXNpdFwiXG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uZmlnLnRzXCJcbmltcG9ydCB0eXBlIHsgQ2hhbmdlbG9nU2VjdGlvbiB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VjdGlvbi50c1wiXG5pbXBvcnQgeyBpc0dpdEh1YlVybCwgcGFyc2VHaXRIdWJSZXBvIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvY2hhbmdlbG9nLXNvdXJjZS50c1wiXG5cbmludGVyZmFjZSBSZWxlYXNlIHtcbiAgdGFnX25hbWU6IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICBwdWJsaXNoZWRfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIGJvZHk/OiBzdHJpbmcgfCBudWxsXG4gIGh0bWxfdXJsPzogc3RyaW5nIHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgQ2FjaGVNZXRhIHtcbiAgZXRhZzogc3RyaW5nXG4gIGZldGNoZWRBdDogc3RyaW5nXG59XG5cbmludGVyZmFjZSBDaGFuZ2Vsb2dFbnRyeSB7XG4gIHNsdWc6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIGRhdGU/OiBzdHJpbmdcbiAgYm9keTogc3RyaW5nXG4gIHNvdXJjZVVybD86IHN0cmluZ1xufVxuXG5jb25zdCBDQUNIRV9ESVIgPSBcIi5saXZlbWFyay9jYWNoZS9jaGFuZ2Vsb2dcIlxuY29uc3QgTUVUQV9GSUxFID0gXCIubGl2ZW1hcmsvY2FjaGUvY2hhbmdlbG9nLm1ldGEuanNvblwiXG5cbmNvbnN0IHBhcnNlciA9IHVuaWZpZWQoKS51c2UocmVtYXJrUGFyc2UpXG5jb25zdCBzdHJpbmdpZmllciA9IHVuaWZpZWQoKS51c2UocmVtYXJrU3RyaW5naWZ5LCB7XG4gIGJ1bGxldDogXCItXCIsXG4gIGZlbmNlczogdHJ1ZSxcbiAgZW1waGFzaXM6IFwiX1wiLFxufSlcblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlSW5jbHVkZUdsb2IoKSB7XG4gIHJldHVybiBgJHtDQUNIRV9ESVJ9LyoqLyoubWRgXG59XG5cbi8qKiBCdWlsZCB0aGUgcGVyLXZlcnNpb24gY2hhbmdlbG9nIGNhY2hlIGZpbGVzIGZvciBhIGNoYW5nZWxvZyBzZWN0aW9uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDaGFuZ2Vsb2coXG4gIHNlY3Rpb246IENoYW5nZWxvZ1NlY3Rpb24sXG4gIGNvbmZpZzogQ29uZmlnLFxuKSB7XG4gIGNvbnN0IGNhY2hlRGlyID0gam9pbihjb25maWcucm9vdCwgQ0FDSEVfRElSKVxuICBjb25zdCBtZXRhUGF0aCA9IGpvaW4oY29uZmlnLnJvb3QsIE1FVEFfRklMRSlcblxuICBjb25zdCBlbnRyaWVzID0gaXNHaXRIdWJVcmwoc2VjdGlvbi5zb3VyY2UpXG4gICAgPyBhd2FpdCBidWlsZEZyb21HaXRIdWIoc2VjdGlvbi5zb3VyY2UsIG1ldGFQYXRoLCBjYWNoZURpcilcbiAgICA6IGF3YWl0IGJ1aWxkRnJvbUxvY2FsKHNlY3Rpb24uc291cmNlLCBjb25maWcucm9vdClcblxuICBpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKSByZXR1cm5cblxuICBhd2FpdCBybShjYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gIGF3YWl0IG1rZGlyKGNhY2hlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG1hcmtkb3duID0gd3JhcEZyb250bWF0dGVyKGVudHJ5LCBzZWN0aW9uKVxuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGNhY2hlRGlyLCBgJHtlbnRyeS5zbHVnfS5tZGApLCBtYXJrZG93biwgXCJ1dGYtOFwiKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkRnJvbUxvY2FsKHNvdXJjZTogc3RyaW5nLCByb290OiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKHJvb3QsIHNvdXJjZSlcbiAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCBcInV0Zi04XCIpXG4gIHJldHVybiBzcGxpdExvY2FsQ2hhbmdlbG9nKGJvZHkpXG59XG5cbi8qKiBQYXJzZSBDSEFOR0VMT0cubWQgaW50byBwZXItdmVyc2lvbiBlbnRyaWVzIHVzaW5nIG1kYXN0ICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRMb2NhbENoYW5nZWxvZyhib2R5OiBzdHJpbmcpOiBDaGFuZ2Vsb2dFbnRyeVtdIHtcbiAgY29uc3QgdHJlZSA9IHBhcnNlci5wYXJzZShib2R5KSBhcyBSb290XG4gIGNvbnN0IGVudHJpZXM6IENoYW5nZWxvZ0VudHJ5W10gPSBbXVxuICBsZXQgY3VycmVudDogeyBoZWFkaW5nOiBzdHJpbmc7IGNoaWxkcmVuOiBSb290Q29udGVudFtdIH0gfCB1bmRlZmluZWRcblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRyZWUuY2hpbGRyZW4pIHtcbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gXCJoZWFkaW5nXCIgJiYgY2hpbGQuZGVwdGggPT09IDIpIHtcbiAgICAgIGlmIChjdXJyZW50KSBlbnRyaWVzLnB1c2goZmluYWxpemVFbnRyeShjdXJyZW50KSlcbiAgICAgIGN1cnJlbnQgPSB7IGhlYWRpbmc6IG1kYXN0VG9TdHJpbmcoY2hpbGQpLCBjaGlsZHJlbjogW10gfVxuICAgIH0gZWxzZSBpZiAoY3VycmVudCkge1xuICAgICAgY3VycmVudC5jaGlsZHJlbi5wdXNoKGNoaWxkKVxuICAgIH1cbiAgfVxuICBpZiAoY3VycmVudCkgZW50cmllcy5wdXNoKGZpbmFsaXplRW50cnkoY3VycmVudCkpXG4gIHJldHVybiBlbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGZpbmFsaXplRW50cnkoaW5wdXQ6IHtcbiAgaGVhZGluZzogc3RyaW5nXG4gIGNoaWxkcmVuOiBSb290Q29udGVudFtdXG59KTogQ2hhbmdlbG9nRW50cnkge1xuICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBpbnB1dC5oZWFkaW5nLm1hdGNoKC9eXFxbPyhbXlxcXVxcc10rKVxcXT8vKVxuICBjb25zdCB2ZXJzaW9uID0gdmVyc2lvbk1hdGNoPy5bMV0gPz8gaW5wdXQuaGVhZGluZ1xuICBjb25zdCBkYXRlTWF0Y2ggPSBpbnB1dC5oZWFkaW5nLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pXG4gIGNvbnN0IGJvZHkgPSByZW5kZXJFbnRyeUJvZHkoaW5wdXQuY2hpbGRyZW4pXG4gIHJldHVybiB7XG4gICAgc2x1Zzogc2x1Z2lmeSh2ZXJzaW9uKSxcbiAgICB0aXRsZTogdmVyc2lvbixcbiAgICBkYXRlOiBkYXRlTWF0Y2g/LlswXSxcbiAgICBib2R5LFxuICB9XG59XG5cbi8qKiBTZXJpYWxpemUgYW4gZW50cnkncyBtZGFzdCBjaGlsZHJlbiBiYWNrIHRvIG1hcmtkb3duICovXG5mdW5jdGlvbiByZW5kZXJFbnRyeUJvZHkoY2hpbGRyZW46IFJvb3RDb250ZW50W10pIHtcbiAgY29uc3Qgcm9vdDogUm9vdCA9IHsgdHlwZTogXCJyb290XCIsIGNoaWxkcmVuIH1cbiAgcmV0dXJuIHN0cmluZ2lmaWVyLnN0cmluZ2lmeShyb290KS50cmltRW5kKClcbn1cblxuLyoqIERyb3AgdGhlIGJvZHkncyBsZWFkaW5nIGgxICh0eXBpY2FsbHkgdGhlIGNvbnZlbnRpb25hbC1jaGFuZ2Vsb2dcbiAqIGAjIDAuNy4yICgyMDI2LTA0LTI1KWAgYm9pbGVycGxhdGUgdGhhdCBkdXBsaWNhdGVzIHRoZSBhcnRpY2xlJ3MgdGl0bGUpLFxuICogc2hpZnQgaDLigJNoNiB1cCBieSBvbmUgc28gc3Vic2VjdGlvbiBoZWFkaW5ncyBiZWNvbWUgaDEgLyBoMiAvIOKApiwgYW5kXG4gKiBlc2NhcGUgc3RyYXkgYDxgIG91dHNpZGUgY29kZSBzbyBNRFggZG9lc24ndCBtaXN0YWtlIHRoZW0gZm9yIEpTWC4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NCb2R5KGJvZHk6IHN0cmluZykge1xuICBjb25zdCB0cmVlID0gcGFyc2VyLnBhcnNlKGJvZHkpIGFzIFJvb3RcbiAgdmlzaXQodHJlZSwgXCJoZWFkaW5nXCIsIG5vZGUgPT4ge1xuICAgIGlmIChub2RlLmRlcHRoID4gMSkgbm9kZS5kZXB0aCA9IChub2RlLmRlcHRoIC0gMSkgYXMgMSB8IDIgfCAzIHwgNCB8IDVcbiAgfSlcbiAgaWYgKHRyZWUuY2hpbGRyZW5bMF0/LnR5cGUgPT09IFwiaGVhZGluZ1wiICYmIHRyZWUuY2hpbGRyZW5bMF0uZGVwdGggPT09IDEpIHtcbiAgICB0cmVlLmNoaWxkcmVuLnNoaWZ0KClcbiAgfVxuICByZXR1cm4gZXNjYXBlTWR4QW5nbGVzKHN0cmluZ2lmaWVyLnN0cmluZ2lmeSh0cmVlKS50cmltRW5kKCkpXG59XG5cbi8qKiBFc2NhcGUgYDxgIHRvIGBcXDxgIG91dHNpZGUgZmVuY2VkIGNvZGUgYmxvY2tzIGFuZCBpbmxpbmUgYmFja3RpY2sgc3BhbnNcbiAqIHNvIGNvbW1pdCBtZXNzYWdlcyB3aXRoIHBsYWNlaG9sZGVycyBsaWtlIGA8c3ViZGlyPmAgZG9uJ3QgZ2V0IHBhcnNlZCBhc1xuICogSlNYIGJ5IE1EWC4gKi9cbmZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlcyhtYXJrZG93bjogc3RyaW5nKSB7XG4gIGxldCBpbkZlbmNlID0gZmFsc2VcbiAgcmV0dXJuIG1hcmtkb3duXG4gICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgLm1hcChsaW5lID0+IHtcbiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCJgYGBcIikpIHtcbiAgICAgICAgaW5GZW5jZSA9ICFpbkZlbmNlXG4gICAgICAgIHJldHVybiBsaW5lXG4gICAgICB9XG4gICAgICBpZiAoaW5GZW5jZSkgcmV0dXJuIGxpbmVcbiAgICAgIHJldHVybiBsaW5lLnJlcGxhY2UoL2BbXmBdKmB8PC9nLCBtYXRjaCA9PlxuICAgICAgICBtYXRjaCA9PT0gXCI8XCIgPyBcIlxcXFw8XCIgOiBtYXRjaCxcbiAgICAgIClcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXCIpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkRnJvbUdpdEh1YihcbiAgc291cmNlOiBzdHJpbmcsXG4gIG1ldGFQYXRoOiBzdHJpbmcsXG4gIGNhY2hlRGlyOiBzdHJpbmcsXG4pOiBQcm9taXNlPENoYW5nZWxvZ0VudHJ5W10gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VHaXRIdWJSZXBvKHNvdXJjZSlcbiAgaWYgKCFwYXJzZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBHaXRIdWIgcmVwbyBmcm9tIHNvdXJjZTogJHtzb3VyY2V9YClcbiAgfVxuXG4gIGNvbnN0IHVybCA9IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cGFyc2VkLm93bmVyfS8ke3BhcnNlZC5yZXBvfS9yZWxlYXNlcz9wZXJfcGFnZT0xMDBgXG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvblwiLFxuICAgIFwiWC1HaXRIdWItQXBpLVZlcnNpb25cIjogXCIyMDIyLTExLTI4XCIsXG4gIH1cblxuICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTlxuICBpZiAodG9rZW4pIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt0b2tlbn1gXG5cbiAgY29uc3QgbWV0YSA9IGF3YWl0IHJlYWRNZXRhKG1ldGFQYXRoKVxuICBjb25zdCBoYXNDYWNoZSA9IGF3YWl0IGV4aXN0cyhjYWNoZURpcilcbiAgaWYgKG1ldGEgJiYgaGFzQ2FjaGUpIGhlYWRlcnNbXCJJZi1Ob25lLU1hdGNoXCJdID0gbWV0YS5ldGFnXG5cbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnMgfSlcblxuICBpZiAocmVzLnN0YXR1cyA9PT0gMzA0KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgaWYgKCFyZXMub2spIHtcbiAgICBjb25zdCByZW1haW5pbmcgPSByZXMuaGVhZGVycy5nZXQoXCJ4LXJhdGVsaW1pdC1yZW1haW5pbmdcIilcbiAgICBjb25zdCByZXNldCA9IHJlcy5oZWFkZXJzLmdldChcIngtcmF0ZWxpbWl0LXJlc2V0XCIpXG4gICAgY29uc3QgbXNnID0gYEdpdEh1YiBBUEkgJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fSAocmF0ZS1saW1pdCByZW1haW5pbmc6ICR7cmVtYWluaW5nID8/IFwiP1wifSwgcmVzZXQ6ICR7cmVzZXQgPz8gXCI/XCJ9KWBcbiAgICBpZiAoaGFzQ2FjaGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHttc2d9IOKAlCBmYWxsaW5nIGJhY2sgdG8gY2FjaGVkIGNoYW5nZWxvZ2ApXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cpXG4gIH1cblxuICBjb25zdCByZWxlYXNlcyA9IChhd2FpdCByZXMuanNvbigpKSBhcyBSZWxlYXNlW11cbiAgY29uc3QgZXRhZyA9IHJlcy5oZWFkZXJzLmdldChcImV0YWdcIilcbiAgaWYgKGV0YWcpIHtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKG1ldGFQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBtZXRhUGF0aCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICB7IGV0YWcsIGZldGNoZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0gc2F0aXNmaWVzIENhY2hlTWV0YSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICksXG4gICAgICBcInV0Zi04XCIsXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VzLm1hcChyZWxlYXNlID0+ICh7XG4gICAgc2x1Zzogc2x1Z2lmeShyZWxlYXNlLnRhZ19uYW1lKSxcbiAgICB0aXRsZTogcmVsZWFzZS50YWdfbmFtZSxcbiAgICBkYXRlOiByZWxlYXNlLnB1Ymxpc2hlZF9hdCA/PyB1bmRlZmluZWQsXG4gICAgYm9keTogKHJlbGVhc2UuYm9keSA/PyBcIlwiKS50cmltKCksXG4gICAgc291cmNlVXJsOiByZWxlYXNlLmh0bWxfdXJsID8/IHVuZGVmaW5lZCxcbiAgfSkpXG59XG5cbmZ1bmN0aW9uIHdyYXBGcm9udG1hdHRlcihlbnRyeTogQ2hhbmdlbG9nRW50cnksIHNlY3Rpb246IENoYW5nZWxvZ1NlY3Rpb24pIHtcbiAgY29uc3QgbGluZXMgPSBbXG4gICAgXCItLS1cIixcbiAgICBgdGl0bGU6ICR7ZW50cnkudGl0bGV9YCxcbiAgICBgcGF0aDogJHtzZWN0aW9uLnByZWZpeH0ke2VudHJ5LnNsdWd9L2AsXG4gIF1cbiAgaWYgKGVudHJ5LmRhdGUpIGxpbmVzLnB1c2goYGRhdGU6ICR7ZW50cnkuZGF0ZX1gKVxuICBpZiAoZW50cnkuc291cmNlVXJsKSB7XG4gICAgbGluZXMucHVzaChgc291cmNlVXJsOiAke2VudHJ5LnNvdXJjZVVybH1gLCBcInNvdXJjZUFjdGlvbjogdmlld1wiKVxuICB9XG4gIGxpbmVzLnB1c2goXCItLS1cIiwgXCJcIiwgYCMgJHtlbnRyeS50aXRsZX1gLCBcIlwiLCBwcm9jZXNzQm9keShlbnRyeS5ib2R5KSlcbiAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIilcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZE1ldGEobWV0YVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVNZXRhIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUobWV0YVBhdGgsIFwidXRmLThcIilcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIENhY2hlTWV0YVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhpc3RzKHBhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIGF3YWl0IGFjY2VzcyhwYXRoKVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { describe, expect, it } from "vite-plus/test";
|
|
2
|
+
import { splitLocalChangelog } from "./build.js";
|
|
3
|
+
describe("splitLocalChangelog", () => {
|
|
4
|
+
it("splits by h2 headings", () => {
|
|
5
|
+
const input = `# Changelog
|
|
6
|
+
|
|
7
|
+
## [0.2.0] - 2026-04-15
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Foo
|
|
12
|
+
|
|
13
|
+
## [0.1.0] - 2026-04-10
|
|
14
|
+
|
|
15
|
+
Initial release.
|
|
16
|
+
`;
|
|
17
|
+
const entries = splitLocalChangelog(input);
|
|
18
|
+
expect(entries).toHaveLength(2);
|
|
19
|
+
expect(entries[0]?.title).toBe("0.2.0");
|
|
20
|
+
expect(entries[0]?.date).toBe("2026-04-15");
|
|
21
|
+
expect(entries[0]?.slug).toBe("0-2-0");
|
|
22
|
+
expect(entries[1]?.title).toBe("0.1.0");
|
|
23
|
+
expect(entries[1]?.date).toBe("2026-04-10");
|
|
24
|
+
});
|
|
25
|
+
it("preserves h3 heading structure in body", () => {
|
|
26
|
+
const input = `## 1.0.0
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- Thing one
|
|
31
|
+
`;
|
|
32
|
+
const entries = splitLocalChangelog(input);
|
|
33
|
+
expect(entries[0]?.body).toContain("### Added");
|
|
34
|
+
expect(entries[0]?.body).toContain("- Thing one");
|
|
35
|
+
});
|
|
36
|
+
it("ignores ## inside fenced code blocks", () => {
|
|
37
|
+
const input = `## 1.0.0
|
|
38
|
+
|
|
39
|
+
Some prose.
|
|
40
|
+
|
|
41
|
+
\`\`\`md
|
|
42
|
+
## Not a real version heading
|
|
43
|
+
\`\`\`
|
|
44
|
+
|
|
45
|
+
## 0.9.0
|
|
46
|
+
|
|
47
|
+
Older.
|
|
48
|
+
`;
|
|
49
|
+
const entries = splitLocalChangelog(input);
|
|
50
|
+
expect(entries).toHaveLength(2);
|
|
51
|
+
expect(entries[0]?.title).toBe("1.0.0");
|
|
52
|
+
expect(entries[0]?.body).toContain("Not a real version heading");
|
|
53
|
+
expect(entries[1]?.title).toBe("0.9.0");
|
|
54
|
+
});
|
|
55
|
+
it("handles bare version headings without brackets or date", () => {
|
|
56
|
+
const input = `## v1.2.3
|
|
57
|
+
|
|
58
|
+
Release notes.
|
|
59
|
+
`;
|
|
60
|
+
const entries = splitLocalChangelog(input);
|
|
61
|
+
expect(entries[0]?.title).toBe("v1.2.3");
|
|
62
|
+
expect(entries[0]?.slug).toBe("v1-2-3");
|
|
63
|
+
expect(entries[0]?.date).toBeUndefined();
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQudW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NvdXJjZS9hY3Rpb25zL2NoYW5nZWxvZy9idWlsZC51bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVoRCxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQ25DLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7UUFDL0IsTUFBTSxLQUFLLEdBQUc7Ozs7Ozs7Ozs7O0NBV2pCLENBQUE7UUFDRyxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzNDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQzdDLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLEtBQUssR0FBRzs7Ozs7Q0FLakIsQ0FBQTtRQUNHLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQy9DLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ25ELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLEtBQUssR0FBRzs7Ozs7Ozs7Ozs7Q0FXakIsQ0FBQTtRQUNHLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtRQUNoRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN6QyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7UUFDaEUsTUFBTSxLQUFLLEdBQUc7OztDQUdqQixDQUFBO1FBQ0csTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUMxQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZS1wbHVzL3Rlc3RcIlxuaW1wb3J0IHsgc3BsaXRMb2NhbENoYW5nZWxvZyB9IGZyb20gXCIuL2J1aWxkLnRzXCJcblxuZGVzY3JpYmUoXCJzcGxpdExvY2FsQ2hhbmdlbG9nXCIsICgpID0+IHtcbiAgaXQoXCJzcGxpdHMgYnkgaDIgaGVhZGluZ3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gYCMgQ2hhbmdlbG9nXG5cbiMjIFswLjIuMF0gLSAyMDI2LTA0LTE1XG5cbiMjIyBBZGRlZFxuXG4tIEZvb1xuXG4jIyBbMC4xLjBdIC0gMjAyNi0wNC0xMFxuXG5Jbml0aWFsIHJlbGVhc2UuXG5gXG4gICAgY29uc3QgZW50cmllcyA9IHNwbGl0TG9jYWxDaGFuZ2Vsb2coaW5wdXQpXG4gICAgZXhwZWN0KGVudHJpZXMpLnRvSGF2ZUxlbmd0aCgyKVxuICAgIGV4cGVjdChlbnRyaWVzWzBdPy50aXRsZSkudG9CZShcIjAuMi4wXCIpXG4gICAgZXhwZWN0KGVudHJpZXNbMF0/LmRhdGUpLnRvQmUoXCIyMDI2LTA0LTE1XCIpXG4gICAgZXhwZWN0KGVudHJpZXNbMF0/LnNsdWcpLnRvQmUoXCIwLTItMFwiKVxuICAgIGV4cGVjdChlbnRyaWVzWzFdPy50aXRsZSkudG9CZShcIjAuMS4wXCIpXG4gICAgZXhwZWN0KGVudHJpZXNbMV0/LmRhdGUpLnRvQmUoXCIyMDI2LTA0LTEwXCIpXG4gIH0pXG5cbiAgaXQoXCJwcmVzZXJ2ZXMgaDMgaGVhZGluZyBzdHJ1Y3R1cmUgaW4gYm9keVwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBgIyMgMS4wLjBcblxuIyMjIEFkZGVkXG5cbi0gVGhpbmcgb25lXG5gXG4gICAgY29uc3QgZW50cmllcyA9IHNwbGl0TG9jYWxDaGFuZ2Vsb2coaW5wdXQpXG4gICAgZXhwZWN0KGVudHJpZXNbMF0/LmJvZHkpLnRvQ29udGFpbihcIiMjIyBBZGRlZFwiKVxuICAgIGV4cGVjdChlbnRyaWVzWzBdPy5ib2R5KS50b0NvbnRhaW4oXCItIFRoaW5nIG9uZVwiKVxuICB9KVxuXG4gIGl0KFwiaWdub3JlcyAjIyBpbnNpZGUgZmVuY2VkIGNvZGUgYmxvY2tzXCIsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IGAjIyAxLjAuMFxuXG5Tb21lIHByb3NlLlxuXG5cXGBcXGBcXGBtZFxuIyMgTm90IGEgcmVhbCB2ZXJzaW9uIGhlYWRpbmdcblxcYFxcYFxcYFxuXG4jIyAwLjkuMFxuXG5PbGRlci5cbmBcbiAgICBjb25zdCBlbnRyaWVzID0gc3BsaXRMb2NhbENoYW5nZWxvZyhpbnB1dClcbiAgICBleHBlY3QoZW50cmllcykudG9IYXZlTGVuZ3RoKDIpXG4gICAgZXhwZWN0KGVudHJpZXNbMF0/LnRpdGxlKS50b0JlKFwiMS4wLjBcIilcbiAgICBleHBlY3QoZW50cmllc1swXT8uYm9keSkudG9Db250YWluKFwiTm90IGEgcmVhbCB2ZXJzaW9uIGhlYWRpbmdcIilcbiAgICBleHBlY3QoZW50cmllc1sxXT8udGl0bGUpLnRvQmUoXCIwLjkuMFwiKVxuICB9KVxuXG4gIGl0KFwiaGFuZGxlcyBiYXJlIHZlcnNpb24gaGVhZGluZ3Mgd2l0aG91dCBicmFja2V0cyBvciBkYXRlXCIsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IGAjIyB2MS4yLjNcblxuUmVsZWFzZSBub3Rlcy5cbmBcbiAgICBjb25zdCBlbnRyaWVzID0gc3BsaXRMb2NhbENoYW5nZWxvZyhpbnB1dClcbiAgICBleHBlY3QoZW50cmllc1swXT8udGl0bGUpLnRvQmUoXCJ2MS4yLjNcIilcbiAgICBleHBlY3QoZW50cmllc1swXT8uc2x1ZykudG9CZShcInYxLTItM1wiKVxuICAgIGV4cGVjdChlbnRyaWVzWzBdPy5kYXRlKS50b0JlVW5kZWZpbmVkKClcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { UserConfig } from "../../models/config.js";
|
|
2
|
+
/**
|
|
3
|
+
* Validate and fill defaults for a partial config object.
|
|
4
|
+
*/
|
|
5
|
+
export function defineConfig(input) {
|
|
6
|
+
return UserConfig.parse(input);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc291cmNlL2FjdGlvbnMvY29uZmlnL2RlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixLQUFpQztJQUVqQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgVXNlckNvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uZmlnLnRzXCJcblxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgZmlsbCBkZWZhdWx0cyBmb3IgYSBwYXJ0aWFsIGNvbmZpZyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoXG4gIGlucHV0OiB6LmlucHV0PHR5cGVvZiBVc2VyQ29uZmlnPixcbik6IHoub3V0cHV0PHR5cGVvZiBVc2VyQ29uZmlnPiB7XG4gIHJldHVybiBVc2VyQ29uZmlnLnBhcnNlKGlucHV0KVxufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it } from "vite-plus/test";
|
|
2
|
+
import { defineConfig } from "./define.js";
|
|
3
|
+
describe("defineConfig", () => {
|
|
4
|
+
it("should accept include as a string", () => {
|
|
5
|
+
const config = defineConfig({ include: "articles/**/*.mdx" });
|
|
6
|
+
expect(config.include).toBe("articles/**/*.mdx");
|
|
7
|
+
});
|
|
8
|
+
it("should accept include as an array", () => {
|
|
9
|
+
const config = defineConfig({
|
|
10
|
+
include: ["articles/**/*.mdx", "guides/**/*.mdx"],
|
|
11
|
+
});
|
|
12
|
+
expect(config.include).toEqual(["articles/**/*.mdx", "guides/**/*.mdx"]);
|
|
13
|
+
});
|
|
14
|
+
it("should accept optional exclude", () => {
|
|
15
|
+
const config = defineConfig({
|
|
16
|
+
include: "**/*.mdx",
|
|
17
|
+
exclude: "drafts/**",
|
|
18
|
+
});
|
|
19
|
+
expect(config.exclude).toBe("drafts/**");
|
|
20
|
+
});
|
|
21
|
+
it("should allow omitting exclude", () => {
|
|
22
|
+
const config = defineConfig({ include: "**/*.mdx" });
|
|
23
|
+
expect(config.exclude).toBeUndefined();
|
|
24
|
+
});
|
|
25
|
+
it("should reject missing include", () => {
|
|
26
|
+
expect(() => defineConfig({})).toThrow();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLnVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvYWN0aW9ucy9jb25maWcvZGVmaW5lLnVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUxQyxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtJQUM1QixFQUFFLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUE7UUFDN0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNsRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDO1lBQzFCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDO1NBQ2xELENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFBO0lBQzFFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtRQUN4QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFDMUIsT0FBTyxFQUFFLFVBQVU7WUFDbkIsT0FBTyxFQUFFLFdBQVc7U0FDckIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDMUMsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDeEMsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNqRCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZS1wbHVzL3Rlc3RcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcIi4vZGVmaW5lLnRzXCJcblxuZGVzY3JpYmUoXCJkZWZpbmVDb25maWdcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBhY2NlcHQgaW5jbHVkZSBhcyBhIHN0cmluZ1wiLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gZGVmaW5lQ29uZmlnKHsgaW5jbHVkZTogXCJhcnRpY2xlcy8qKi8qLm1keFwiIH0pXG4gICAgZXhwZWN0KGNvbmZpZy5pbmNsdWRlKS50b0JlKFwiYXJ0aWNsZXMvKiovKi5tZHhcIilcbiAgfSlcblxuICBpdChcInNob3VsZCBhY2NlcHQgaW5jbHVkZSBhcyBhbiBhcnJheVwiLCAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gZGVmaW5lQ29uZmlnKHtcbiAgICAgIGluY2x1ZGU6IFtcImFydGljbGVzLyoqLyoubWR4XCIsIFwiZ3VpZGVzLyoqLyoubWR4XCJdLFxuICAgIH0pXG4gICAgZXhwZWN0KGNvbmZpZy5pbmNsdWRlKS50b0VxdWFsKFtcImFydGljbGVzLyoqLyoubWR4XCIsIFwiZ3VpZGVzLyoqLyoubWR4XCJdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGFjY2VwdCBvcHRpb25hbCBleGNsdWRlXCIsICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBkZWZpbmVDb25maWcoe1xuICAgICAgaW5jbHVkZTogXCIqKi8qLm1keFwiLFxuICAgICAgZXhjbHVkZTogXCJkcmFmdHMvKipcIixcbiAgICB9KVxuICAgIGV4cGVjdChjb25maWcuZXhjbHVkZSkudG9CZShcImRyYWZ0cy8qKlwiKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGFsbG93IG9taXR0aW5nIGV4Y2x1ZGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGRlZmluZUNvbmZpZyh7IGluY2x1ZGU6IFwiKiovKi5tZHhcIiB9KVxuICAgIGV4cGVjdChjb25maWcuZXhjbHVkZSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmVqZWN0IG1pc3NpbmcgaW5jbHVkZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IGRlZmluZUNvbmZpZyh7fSBhcyBhbnkpKS50b1Rocm93KClcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import { dirname, resolve } from "node:path";
|
|
10
|
+
import { pathToFileURL } from "node:url";
|
|
11
|
+
import { defineConfig } from "./define.js";
|
|
12
|
+
/**
|
|
13
|
+
* Load and validate a config file, checking --config/-c CLI arg, then cwd.
|
|
14
|
+
*/
|
|
15
|
+
export async function loadConfig(path) {
|
|
16
|
+
const configIndex = process.argv.findIndex(a => a === "-c" || a === "--config");
|
|
17
|
+
const cliPath = configIndex !== -1 ? process.argv[configIndex + 1] : undefined;
|
|
18
|
+
const resolved = resolve(path ?? cliPath ?? "livemark.config.ts");
|
|
19
|
+
// Cache-bust the ESM import so dev-server restart reloads edits on disk.
|
|
20
|
+
const url = `${pathToFileURL(resolved).href}?t=${Date.now()}`;
|
|
21
|
+
const module = await import(__rewriteRelativeImportExtension(url));
|
|
22
|
+
const input = defineConfig(module.default);
|
|
23
|
+
return { ...input, root: dirname(resolved), configPath: resolved };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NvdXJjZS9hY3Rpb25zL2NvbmZpZy9sb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUl4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTFDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQUMsSUFBYTtJQUM1QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxVQUFVLENBQ3BDLENBQUE7SUFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDOUUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksb0JBQW9CLENBQUMsQ0FBQTtJQUNqRSx5RUFBeUU7SUFDekUsTUFBTSxHQUFHLEdBQUcsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFBO0lBQzdELE1BQU0sTUFBTSxHQUE0QixNQUFNLE1BQU0sa0NBQUMsR0FBRyxFQUFDLENBQUE7SUFDekQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFxQyxDQUFDLENBQUE7SUFDeEUsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFBO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCJcbmltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5pbXBvcnQgeyBVc2VyQ29uZmlnIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25maWcudHNcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcIi4vZGVmaW5lLnRzXCJcblxuLyoqXG4gKiBMb2FkIGFuZCB2YWxpZGF0ZSBhIGNvbmZpZyBmaWxlLCBjaGVja2luZyAtLWNvbmZpZy8tYyBDTEkgYXJnLCB0aGVuIGN3ZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDb25maWcocGF0aD86IHN0cmluZyk6IFByb21pc2U8Q29uZmlnPiB7XG4gIGNvbnN0IGNvbmZpZ0luZGV4ID0gcHJvY2Vzcy5hcmd2LmZpbmRJbmRleChcbiAgICBhID0+IGEgPT09IFwiLWNcIiB8fCBhID09PSBcIi0tY29uZmlnXCIsXG4gIClcbiAgY29uc3QgY2xpUGF0aCA9IGNvbmZpZ0luZGV4ICE9PSAtMSA/IHByb2Nlc3MuYXJndltjb25maWdJbmRleCArIDFdIDogdW5kZWZpbmVkXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShwYXRoID8/IGNsaVBhdGggPz8gXCJsaXZlbWFyay5jb25maWcudHNcIilcbiAgLy8gQ2FjaGUtYnVzdCB0aGUgRVNNIGltcG9ydCBzbyBkZXYtc2VydmVyIHJlc3RhcnQgcmVsb2FkcyBlZGl0cyBvbiBkaXNrLlxuICBjb25zdCB1cmwgPSBgJHtwYXRoVG9GaWxlVVJMKHJlc29sdmVkKS5ocmVmfT90PSR7RGF0ZS5ub3coKX1gXG4gIGNvbnN0IG1vZHVsZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBhd2FpdCBpbXBvcnQodXJsKVxuICBjb25zdCBpbnB1dCA9IGRlZmluZUNvbmZpZyhtb2R1bGUuZGVmYXVsdCBhcyB6LmlucHV0PHR5cGVvZiBVc2VyQ29uZmlnPilcbiAgcmV0dXJuIHsgLi4uaW5wdXQsIHJvb3Q6IGRpcm5hbWUocmVzb2x2ZWQpLCBjb25maWdQYXRoOiByZXNvbHZlZCB9XG59XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { temporaryDirectoryTask } from "tempy";
|
|
4
|
+
import { describe, expect, it } from "vite-plus/test";
|
|
5
|
+
import { loadConfig } from "./load.js";
|
|
6
|
+
describe("loadConfig", () => {
|
|
7
|
+
it("should throw when no config file exists", async () => {
|
|
8
|
+
await expect(loadConfig("/nonexistent/config.ts")).rejects.toThrow();
|
|
9
|
+
});
|
|
10
|
+
it("should load config from explicit path", () => temporaryDirectoryTask(async (tmpDir) => {
|
|
11
|
+
const configPath = join(tmpDir, "livemark.config.ts");
|
|
12
|
+
fs.writeFileSync(configPath, 'export default { include: "articles/**/*.mdx" }\n');
|
|
13
|
+
const config = await loadConfig(configPath);
|
|
14
|
+
expect(config.include).toBe("articles/**/*.mdx");
|
|
15
|
+
expect(config.root).toBe(tmpDir);
|
|
16
|
+
}));
|
|
17
|
+
it("should validate loaded config", () => temporaryDirectoryTask(async (tmpDir) => {
|
|
18
|
+
const configPath = join(tmpDir, "livemark.config.ts");
|
|
19
|
+
fs.writeFileSync(configPath, "export default {}\n");
|
|
20
|
+
await expect(loadConfig(configPath)).rejects.toThrow();
|
|
21
|
+
}));
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC51bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc291cmNlL2FjdGlvbnMvY29uZmlnL2xvYWQudW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV0QyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUMxQixFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdkQsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDdEUsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFLENBQy9DLHNCQUFzQixDQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsRUFBRTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUE7UUFDckQsRUFBRSxDQUFDLGFBQWEsQ0FDZCxVQUFVLEVBQ1YsbURBQW1ELENBQ3BELENBQUE7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBQ2hELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFTCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFLENBQ3ZDLHNCQUFzQixDQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsRUFBRTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUE7UUFDckQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLENBQUMsQ0FBQTtRQUNuRCxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDeEQsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNQLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IHRlbXBvcmFyeURpcmVjdG9yeVRhc2sgfSBmcm9tIFwidGVtcHlcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZS1wbHVzL3Rlc3RcIlxuaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gXCIuL2xvYWQudHNcIlxuXG5kZXNjcmliZShcImxvYWRDb25maWdcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCB0aHJvdyB3aGVuIG5vIGNvbmZpZyBmaWxlIGV4aXN0c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KGxvYWRDb25maWcoXCIvbm9uZXhpc3RlbnQvY29uZmlnLnRzXCIpKS5yZWplY3RzLnRvVGhyb3coKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgY29uZmlnIGZyb20gZXhwbGljaXQgcGF0aFwiLCAoKSA9PlxuICAgIHRlbXBvcmFyeURpcmVjdG9yeVRhc2soYXN5bmMgdG1wRGlyID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKHRtcERpciwgXCJsaXZlbWFyay5jb25maWcudHNcIilcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgIGNvbmZpZ1BhdGgsXG4gICAgICAgICdleHBvcnQgZGVmYXVsdCB7IGluY2x1ZGU6IFwiYXJ0aWNsZXMvKiovKi5tZHhcIiB9XFxuJyxcbiAgICAgIClcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWcoY29uZmlnUGF0aClcbiAgICAgIGV4cGVjdChjb25maWcuaW5jbHVkZSkudG9CZShcImFydGljbGVzLyoqLyoubWR4XCIpXG4gICAgICBleHBlY3QoY29uZmlnLnJvb3QpLnRvQmUodG1wRGlyKVxuICAgIH0pKVxuXG4gIGl0KFwic2hvdWxkIHZhbGlkYXRlIGxvYWRlZCBjb25maWdcIiwgKCkgPT5cbiAgICB0ZW1wb3JhcnlEaXJlY3RvcnlUYXNrKGFzeW5jIHRtcERpciA9PiB7XG4gICAgICBjb25zdCBjb25maWdQYXRoID0gam9pbih0bXBEaXIsIFwibGl2ZW1hcmsuY29uZmlnLnRzXCIpXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIFwiZXhwb3J0IGRlZmF1bHQge31cXG5cIilcbiAgICAgIGF3YWl0IGV4cGVjdChsb2FkQ29uZmlnKGNvbmZpZ1BhdGgpKS5yZWplY3RzLnRvVGhyb3coKVxuICAgIH0pKVxufSlcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/target/client.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { StartClient } from "@tanstack/react-start/client";
|
|
3
|
+
import { StrictMode } from "react";
|
|
4
|
+
import { hydrateRoot } from "react-dom/client";
|
|
5
|
+
hydrateRoot(document, _jsx(StrictMode, { children: _jsx(StartClient, {}) }));
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL2NsaWVudC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUU5QyxXQUFXLENBQ1QsUUFBUSxFQUNSLEtBQUMsVUFBVSxjQUNULEtBQUMsV0FBVyxLQUFHLEdBQ0osQ0FDZCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhcnRDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXN0YXJ0L2NsaWVudFwiXG5pbXBvcnQgeyBTdHJpY3RNb2RlIH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IGh5ZHJhdGVSb290IH0gZnJvbSBcInJlYWN0LWRvbS9jbGllbnRcIlxuXG5oeWRyYXRlUm9vdChcbiAgZG9jdW1lbnQsXG4gIDxTdHJpY3RNb2RlPlxuICAgIDxTdGFydENsaWVudCAvPlxuICA8L1N0cmljdE1vZGU+LFxuKVxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { createBuilder } from "vite";
|
|
4
|
+
const configFile = join(import.meta.dirname, "..", "..", "source", "vite.config.ts");
|
|
5
|
+
/**
|
|
6
|
+
* Build the site for production.
|
|
7
|
+
*/
|
|
8
|
+
export const build = new Command("build")
|
|
9
|
+
.description("Build the site for production")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
const builder = await createBuilder({ configFile });
|
|
12
|
+
await builder.buildApp();
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tbWFuZHMvYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUNyQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQ25CLElBQUksRUFDSixJQUFJLEVBQ0osUUFBUSxFQUNSLGdCQUFnQixDQUNqQixDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ3RDLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQztLQUM1QyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDakIsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBQ25ELE1BQU0sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQzFCLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIlxuaW1wb3J0IHsgY3JlYXRlQnVpbGRlciB9IGZyb20gXCJ2aXRlXCJcblxuY29uc3QgY29uZmlnRmlsZSA9IGpvaW4oXG4gIGltcG9ydC5tZXRhLmRpcm5hbWUsXG4gIFwiLi5cIixcbiAgXCIuLlwiLFxuICBcInNvdXJjZVwiLFxuICBcInZpdGUuY29uZmlnLnRzXCIsXG4pXG5cbi8qKlxuICogQnVpbGQgdGhlIHNpdGUgZm9yIHByb2R1Y3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZCA9IG5ldyBDb21tYW5kKFwiYnVpbGRcIilcbiAgLmRlc2NyaXB0aW9uKFwiQnVpbGQgdGhlIHNpdGUgZm9yIHByb2R1Y3Rpb25cIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIoeyBjb25maWdGaWxlIH0pXG4gICAgYXdhaXQgYnVpbGRlci5idWlsZEFwcCgpXG4gIH0pXG4iXX0=
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import pc from "picocolors";
|
|
5
|
+
import { OVERRIDE_SUBDIRS } from "../settings.js";
|
|
6
|
+
const defaultsRoot = join(import.meta.dirname, "..", "..", "source");
|
|
7
|
+
/**
|
|
8
|
+
* List or copy overridable livemark files into `.livemark/`.
|
|
9
|
+
*
|
|
10
|
+
* Without an argument, prints every file you can shadow. With a path, copies
|
|
11
|
+
* the default from the livemark package into `.livemark/<path>`; fails if the
|
|
12
|
+
* destination already exists.
|
|
13
|
+
*/
|
|
14
|
+
export const escape = new Command("escape")
|
|
15
|
+
.description("List or copy overridable livemark files into .livemark/")
|
|
16
|
+
.argument("[path]", "path relative to .livemark/ (e.g. components/Footer.tsx)")
|
|
17
|
+
.action((relPath) => {
|
|
18
|
+
if (!relPath) {
|
|
19
|
+
for (const file of listOverridable())
|
|
20
|
+
console.log(file);
|
|
21
|
+
console.log(pc.dim("\nRun 'livemark escape <path>' to copy a file into .livemark/"));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const [first] = relPath.split("/");
|
|
25
|
+
if (!first || !OVERRIDE_SUBDIRS.includes(first) || relPath.includes("..")) {
|
|
26
|
+
console.error(pc.red(`Error: '${relPath}' is not under an overridable subdir (${OVERRIDE_SUBDIRS.join(", ")})`));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
const src = join(defaultsRoot, relPath);
|
|
30
|
+
if (!existsSync(src) || !statSync(src).isFile()) {
|
|
31
|
+
console.error(pc.red(`Error: '${relPath}' is not a livemark file`));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const dest = join(process.cwd(), ".livemark", relPath);
|
|
35
|
+
if (existsSync(dest)) {
|
|
36
|
+
console.error(pc.red(`Error: .livemark/${relPath} already exists`));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
40
|
+
writeFileSync(dest, readFileSync(src));
|
|
41
|
+
console.log(`Copied ${pc.dim(relPath)} → ${pc.green(`.livemark/${relPath}`)}`);
|
|
42
|
+
});
|
|
43
|
+
function listOverridable() {
|
|
44
|
+
const files = [];
|
|
45
|
+
for (const subdir of OVERRIDE_SUBDIRS) {
|
|
46
|
+
const dir = join(defaultsRoot, subdir);
|
|
47
|
+
if (!existsSync(dir))
|
|
48
|
+
continue;
|
|
49
|
+
for (const entry of readdirSync(dir)) {
|
|
50
|
+
if (statSync(join(dir, entry)).isFile())
|
|
51
|
+
files.push(`${subdir}/${entry}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return files.sort();
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbW1hbmRzL2VzY2FwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFFBQVEsRUFDUixhQUFhLEdBQ2QsTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDM0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFakQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBRXBFOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDeEMsV0FBVyxDQUFDLHlEQUF5RCxDQUFDO0tBQ3RFLFFBQVEsQ0FDUCxRQUFRLEVBQ1IsMERBQTBELENBQzNEO0tBQ0EsTUFBTSxDQUFDLENBQUMsT0FBZ0IsRUFBRSxFQUFFO0lBQzNCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLEtBQUssTUFBTSxJQUFJLElBQUksZUFBZSxFQUFFO1lBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN2RCxPQUFPLENBQUMsR0FBRyxDQUNULEVBQUUsQ0FBQyxHQUFHLENBQUMsK0RBQStELENBQUMsQ0FDeEUsQ0FBQTtRQUNELE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDMUUsT0FBTyxDQUFDLEtBQUssQ0FDWCxFQUFFLENBQUMsR0FBRyxDQUNKLFdBQVcsT0FBTyx5Q0FBeUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQzFGLENBQ0YsQ0FBQTtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLE9BQU8sMEJBQTBCLENBQUMsQ0FBQyxDQUFBO1FBQ25FLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3RELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLG9CQUFvQixPQUFPLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtRQUNuRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDN0MsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUN0QyxPQUFPLENBQUMsR0FBRyxDQUNULFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUNsRSxDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUE7QUFFSixTQUFTLGVBQWU7SUFDdEIsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFBO0lBQzFCLEtBQUssTUFBTSxNQUFNLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUTtRQUM5QixLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGV4aXN0c1N5bmMsXG4gIG1rZGlyU3luYyxcbiAgcmVhZGRpclN5bmMsXG4gIHJlYWRGaWxlU3luYyxcbiAgc3RhdFN5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG59IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcbmltcG9ydCBwYyBmcm9tIFwicGljb2NvbG9yc1wiXG5pbXBvcnQgeyBPVkVSUklERV9TVUJESVJTIH0gZnJvbSBcIi4uL3NldHRpbmdzLnRzXCJcblxuY29uc3QgZGVmYXVsdHNSb290ID0gam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCJzb3VyY2VcIilcblxuLyoqXG4gKiBMaXN0IG9yIGNvcHkgb3ZlcnJpZGFibGUgbGl2ZW1hcmsgZmlsZXMgaW50byBgLmxpdmVtYXJrL2AuXG4gKlxuICogV2l0aG91dCBhbiBhcmd1bWVudCwgcHJpbnRzIGV2ZXJ5IGZpbGUgeW91IGNhbiBzaGFkb3cuIFdpdGggYSBwYXRoLCBjb3BpZXNcbiAqIHRoZSBkZWZhdWx0IGZyb20gdGhlIGxpdmVtYXJrIHBhY2thZ2UgaW50byBgLmxpdmVtYXJrLzxwYXRoPmA7IGZhaWxzIGlmIHRoZVxuICogZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBlc2NhcGUgPSBuZXcgQ29tbWFuZChcImVzY2FwZVwiKVxuICAuZGVzY3JpcHRpb24oXCJMaXN0IG9yIGNvcHkgb3ZlcnJpZGFibGUgbGl2ZW1hcmsgZmlsZXMgaW50byAubGl2ZW1hcmsvXCIpXG4gIC5hcmd1bWVudChcbiAgICBcIltwYXRoXVwiLFxuICAgIFwicGF0aCByZWxhdGl2ZSB0byAubGl2ZW1hcmsvIChlLmcuIGNvbXBvbmVudHMvRm9vdGVyLnRzeClcIixcbiAgKVxuICAuYWN0aW9uKChyZWxQYXRoPzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFyZWxQYXRoKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgbGlzdE92ZXJyaWRhYmxlKCkpIGNvbnNvbGUubG9nKGZpbGUpXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgcGMuZGltKFwiXFxuUnVuICdsaXZlbWFyayBlc2NhcGUgPHBhdGg+JyB0byBjb3B5IGEgZmlsZSBpbnRvIC5saXZlbWFyay9cIiksXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBbZmlyc3RdID0gcmVsUGF0aC5zcGxpdChcIi9cIilcbiAgICBpZiAoIWZpcnN0IHx8ICFPVkVSUklERV9TVUJESVJTLmluY2x1ZGVzKGZpcnN0KSB8fCByZWxQYXRoLmluY2x1ZGVzKFwiLi5cIikpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIHBjLnJlZChcbiAgICAgICAgICBgRXJyb3I6ICcke3JlbFBhdGh9JyBpcyBub3QgdW5kZXIgYW4gb3ZlcnJpZGFibGUgc3ViZGlyICgke09WRVJSSURFX1NVQkRJUlMuam9pbihcIiwgXCIpfSlgLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfVxuXG4gICAgY29uc3Qgc3JjID0gam9pbihkZWZhdWx0c1Jvb3QsIHJlbFBhdGgpXG4gICAgaWYgKCFleGlzdHNTeW5jKHNyYykgfHwgIXN0YXRTeW5jKHNyYykuaXNGaWxlKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocGMucmVkKGBFcnJvcjogJyR7cmVsUGF0aH0nIGlzIG5vdCBhIGxpdmVtYXJrIGZpbGVgKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cblxuICAgIGNvbnN0IGRlc3QgPSBqb2luKHByb2Nlc3MuY3dkKCksIFwiLmxpdmVtYXJrXCIsIHJlbFBhdGgpXG4gICAgaWYgKGV4aXN0c1N5bmMoZGVzdCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocGMucmVkKGBFcnJvcjogLmxpdmVtYXJrLyR7cmVsUGF0aH0gYWxyZWFkeSBleGlzdHNgKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cblxuICAgIG1rZGlyU3luYyhkaXJuYW1lKGRlc3QpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIHdyaXRlRmlsZVN5bmMoZGVzdCwgcmVhZEZpbGVTeW5jKHNyYykpXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ29waWVkICR7cGMuZGltKHJlbFBhdGgpfSDihpIgJHtwYy5ncmVlbihgLmxpdmVtYXJrLyR7cmVsUGF0aH1gKX1gLFxuICAgIClcbiAgfSlcblxuZnVuY3Rpb24gbGlzdE92ZXJyaWRhYmxlKCkge1xuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXVxuICBmb3IgKGNvbnN0IHN1YmRpciBvZiBPVkVSUklERV9TVUJESVJTKSB7XG4gICAgY29uc3QgZGlyID0gam9pbihkZWZhdWx0c1Jvb3QsIHN1YmRpcilcbiAgICBpZiAoIWV4aXN0c1N5bmMoZGlyKSkgY29udGludWVcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRkaXJTeW5jKGRpcikpIHtcbiAgICAgIGlmIChzdGF0U3luYyhqb2luKGRpciwgZW50cnkpKS5pc0ZpbGUoKSkgZmlsZXMucHVzaChgJHtzdWJkaXJ9LyR7ZW50cnl9YClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGVzLnNvcnQoKVxufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { preview as vitePreview } from "vite";
|
|
4
|
+
const configFile = join(import.meta.dirname, "..", "..", "source", "vite.config.ts");
|
|
5
|
+
/**
|
|
6
|
+
* Preview the production build locally.
|
|
7
|
+
*/
|
|
8
|
+
export const preview = new Command("preview")
|
|
9
|
+
.description("Preview the production build locally")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
const server = await vitePreview({
|
|
12
|
+
configFile,
|
|
13
|
+
preview: { port: 8000, host: true },
|
|
14
|
+
});
|
|
15
|
+
server.printUrls();
|
|
16
|
+
server.bindCLIShortcuts({ print: true });
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21tYW5kcy9wcmV2aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUU3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFDbkIsSUFBSSxFQUNKLElBQUksRUFDSixRQUFRLEVBQ1IsZ0JBQWdCLENBQ2pCLENBQUE7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUM7S0FDMUMsV0FBVyxDQUFDLHNDQUFzQyxDQUFDO0tBQ25ELE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNqQixNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQztRQUMvQixVQUFVO1FBQ1YsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0tBQ3BDLENBQUMsQ0FBQTtJQUNGLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNsQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUMxQyxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcbmltcG9ydCB7IHByZXZpZXcgYXMgdml0ZVByZXZpZXcgfSBmcm9tIFwidml0ZVwiXG5cbmNvbnN0IGNvbmZpZ0ZpbGUgPSBqb2luKFxuICBpbXBvcnQubWV0YS5kaXJuYW1lLFxuICBcIi4uXCIsXG4gIFwiLi5cIixcbiAgXCJzb3VyY2VcIixcbiAgXCJ2aXRlLmNvbmZpZy50c1wiLFxuKVxuXG4vKipcbiAqIFByZXZpZXcgdGhlIHByb2R1Y3Rpb24gYnVpbGQgbG9jYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXZpZXcgPSBuZXcgQ29tbWFuZChcInByZXZpZXdcIilcbiAgLmRlc2NyaXB0aW9uKFwiUHJldmlldyB0aGUgcHJvZHVjdGlvbiBidWlsZCBsb2NhbGx5XCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IHZpdGVQcmV2aWV3KHtcbiAgICAgIGNvbmZpZ0ZpbGUsXG4gICAgICBwcmV2aWV3OiB7IHBvcnQ6IDgwMDAsIGhvc3Q6IHRydWUgfSxcbiAgICB9KVxuICAgIHNlcnZlci5wcmludFVybHMoKVxuICAgIHNlcnZlci5iaW5kQ0xJU2hvcnRjdXRzKHsgcHJpbnQ6IHRydWUgfSlcbiAgfSlcbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { createServer } from "vite";
|
|
4
|
+
const configFile = join(import.meta.dirname, "..", "..", "source", "vite.config.ts");
|
|
5
|
+
/**
|
|
6
|
+
* Start a development server.
|
|
7
|
+
*/
|
|
8
|
+
export const start = new Command("start")
|
|
9
|
+
.description("Start a live server")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
const server = await createServer({
|
|
12
|
+
configFile,
|
|
13
|
+
server: { port: 8000, host: true },
|
|
14
|
+
});
|
|
15
|
+
await server.listen();
|
|
16
|
+
server.printUrls();
|
|
17
|
+
server.bindCLIShortcuts({ print: true });
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tbWFuZHMvc3RhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUNyQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQ25CLElBQUksRUFDSixJQUFJLEVBQ0osUUFBUSxFQUNSLGdCQUFnQixDQUNqQixDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ3RDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQztLQUNsQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDakIsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUM7UUFDaEMsVUFBVTtRQUNWLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtLQUNuQyxDQUFDLENBQUE7SUFDRixNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNyQixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDbEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7QUFDMUMsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5pbXBvcnQgeyBjcmVhdGVTZXJ2ZXIgfSBmcm9tIFwidml0ZVwiXG5cbmNvbnN0IGNvbmZpZ0ZpbGUgPSBqb2luKFxuICBpbXBvcnQubWV0YS5kaXJuYW1lLFxuICBcIi4uXCIsXG4gIFwiLi5cIixcbiAgXCJzb3VyY2VcIixcbiAgXCJ2aXRlLmNvbmZpZy50c1wiLFxuKVxuXG4vKipcbiAqIFN0YXJ0IGEgZGV2ZWxvcG1lbnQgc2VydmVyLlxuICovXG5leHBvcnQgY29uc3Qgc3RhcnQgPSBuZXcgQ29tbWFuZChcInN0YXJ0XCIpXG4gIC5kZXNjcmlwdGlvbihcIlN0YXJ0IGEgbGl2ZSBzZXJ2ZXJcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgY3JlYXRlU2VydmVyKHtcbiAgICAgIGNvbmZpZ0ZpbGUsXG4gICAgICBzZXJ2ZXI6IHsgcG9ydDogODAwMCwgaG9zdDogdHJ1ZSB9LFxuICAgIH0pXG4gICAgYXdhaXQgc2VydmVyLmxpc3RlbigpXG4gICAgc2VydmVyLnByaW50VXJscygpXG4gICAgc2VydmVyLmJpbmRDTElTaG9ydGN1dHMoeyBwcmludDogdHJ1ZSB9KVxuICB9KVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip, TooltipContent, TooltipTrigger, } from "../elements/tooltip.js";
|
|
3
|
+
/** Renders an abbreviation with a shadcn tooltip showing its full form */
|
|
4
|
+
export function Abbr(props) {
|
|
5
|
+
return (_jsxs(Tooltip, { children: [
|
|
6
|
+
_jsx(TooltipTrigger, { className: "border-b border-dotted border-muted-foreground cursor-help", children: props.text }), _jsx(TooltipContent, { children: props.title })
|
|
7
|
+
] }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJici5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL0FiYnIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLGNBQWMsRUFDZCxjQUFjLEdBQ2YsTUFBTSx3QkFBeUIsQ0FBQTtBQUVoQywwRUFBMEU7QUFDMUUsTUFBTSxVQUFVLElBQUksQ0FBQyxLQUFzQztJQUN6RCxPQUFPLENBQ0wsTUFBQyxPQUFPO1lBQ04sS0FBQyxjQUFjLElBQUMsU0FBUyxFQUFDLDREQUE0RCxZQUNuRixLQUFLLENBQUMsSUFBSSxHQUNJLEVBQ2pCLEtBQUMsY0FBYyxjQUFFLEtBQUssQ0FBQyxLQUFLLEdBQWtCO1lBQ3RDLENBQ1gsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBUb29sdGlwLFxuICBUb29sdGlwQ29udGVudCxcbiAgVG9vbHRpcFRyaWdnZXIsXG59IGZyb20gXCIuLi9lbGVtZW50cy90b29sdGlwLnRzeFwiXG5cbi8qKiBSZW5kZXJzIGFuIGFiYnJldmlhdGlvbiB3aXRoIGEgc2hhZGNuIHRvb2x0aXAgc2hvd2luZyBpdHMgZnVsbCBmb3JtICovXG5leHBvcnQgZnVuY3Rpb24gQWJicihwcm9wczogeyB0ZXh0OiBzdHJpbmc7IHRpdGxlOiBzdHJpbmcgfSkge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwPlxuICAgICAgPFRvb2x0aXBUcmlnZ2VyIGNsYXNzTmFtZT1cImJvcmRlci1iIGJvcmRlci1kb3R0ZWQgYm9yZGVyLW11dGVkLWZvcmVncm91bmQgY3Vyc29yLWhlbHBcIj5cbiAgICAgICAge3Byb3BzLnRleHR9XG4gICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgPFRvb2x0aXBDb250ZW50Pntwcm9wcy50aXRsZX08L1Rvb2x0aXBDb250ZW50PlxuICAgIDwvVG9vbHRpcD5cbiAgKVxufVxuIl19
|