livemark 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/build/actions/config/define.d.ts +12 -0
- package/build/actions/config/define.unit.js +8 -1
- package/build/actions/escape/copy.d.ts +11 -0
- package/build/actions/escape/copy.js +29 -0
- package/build/actions/escape/copy.unit.d.ts +1 -0
- package/build/actions/escape/copy.unit.js +37 -0
- package/build/actions/escape/list.d.ts +12 -0
- package/build/actions/escape/list.js +27 -0
- package/build/actions/escape/list.unit.d.ts +1 -0
- package/build/actions/escape/list.unit.js +36 -0
- package/build/actions/target/build.d.ts +9 -26
- package/build/actions/target/build.js +50 -71
- package/build/actions/target/build.unit.d.ts +1 -0
- package/build/actions/target/build.unit.js +76 -0
- package/build/actions/target/clear.d.ts +4 -0
- package/build/actions/target/clear.js +14 -0
- package/build/actions/target/clear.unit.d.ts +1 -0
- package/build/actions/target/clear.unit.js +23 -0
- package/build/commands/build.js +1 -2
- package/build/commands/clear.d.ts +5 -0
- package/build/commands/clear.js +15 -0
- package/build/commands/escape.d.ts +4 -3
- package/build/commands/escape.js +45 -48
- package/build/commands/preview.js +1 -2
- package/build/commands/start.js +1 -2
- package/build/components/Abbr.d.ts +1 -1
- package/build/components/Abbr.js +2 -4
- package/build/components/AnsiCode.d.ts +1 -1
- package/build/components/AnsiCode.js +2 -2
- package/build/components/Article.d.ts +2 -1
- package/build/components/Article.js +7 -14
- package/build/components/BackToTop.d.ts +1 -1
- package/build/components/Banner.d.ts +2 -2
- package/build/components/Banner.js +7 -3
- package/build/components/BlogIndex.d.ts +1 -1
- package/build/components/BlogIndex.js +2 -11
- package/build/components/Breadcrumbs.d.ts +1 -1
- package/build/components/Breadcrumbs.js +2 -3
- package/build/components/Callout.d.ts +1 -1
- package/build/components/Callout.js +5 -9
- package/build/components/Card.d.ts +1 -1
- package/build/components/Card.js +2 -3
- package/build/components/Cards.d.ts +1 -1
- package/build/components/ChangelogIndex.d.ts +1 -1
- package/build/components/ChangelogIndex.js +2 -11
- package/build/components/ChoiceList.d.ts +15 -0
- package/build/components/ChoiceList.js +13 -0
- package/build/components/CodeBlock.d.ts +1 -1
- package/build/components/CodeBlock.js +3 -16
- package/build/components/CodeTabs.d.ts +1 -1
- package/build/components/CodeTabs.js +2 -3
- package/build/components/Column.d.ts +1 -1
- package/build/components/Columns.d.ts +1 -1
- package/build/components/Content.d.ts +1 -1
- package/build/components/ContentTab.d.ts +1 -1
- package/build/components/ContentTabs.d.ts +1 -1
- package/build/components/ContentTabs.js +2 -3
- package/build/components/DefaultCatchBoundary.d.ts +1 -1
- package/build/components/DefaultCatchBoundary.js +5 -7
- package/build/components/DefinitionList.d.ts +3 -3
- package/build/components/Details.d.ts +1 -1
- package/build/components/Details.js +2 -5
- package/build/components/FileTree.d.ts +1 -1
- package/build/components/FileTree.js +3 -5
- package/build/components/Footer.d.ts +1 -1
- package/build/components/Footer.js +2 -5
- package/build/components/FootnoteRef.d.ts +1 -1
- package/build/components/FootnoteRef.js +2 -4
- package/build/components/Header.d.ts +6 -0
- package/build/components/Header.js +26 -0
- package/build/components/HeaderMenu.d.ts +2 -0
- package/build/components/HeaderMenu.js +27 -0
- package/build/components/HeaderNav.d.ts +6 -0
- package/build/components/HeaderNav.js +74 -0
- package/build/components/HeaderSearch.d.ts +4 -0
- package/build/components/HeaderSearch.js +33 -0
- package/build/components/Heading.d.ts +6 -6
- package/build/components/InlineBadge.d.ts +2 -2
- package/build/components/InlineBadge.js +1 -1
- package/build/components/InlineIcon.d.ts +1 -1
- package/build/components/InlineToc.d.ts +1 -1
- package/build/components/InlineToc.js +2 -4
- package/build/components/Layout.d.ts +2 -1
- package/build/components/Layout.js +5 -58
- package/build/components/LinkButton.d.ts +2 -2
- package/build/components/LinkButton.js +1 -1
- package/build/components/MenuSheet.d.ts +22 -0
- package/build/components/MenuSheet.js +27 -0
- package/build/components/Mermaid.d.ts +1 -1
- package/build/components/MermaidRenderer.d.ts +1 -1
- package/build/components/MermaidRenderer.js +20 -8
- package/build/components/NotFound.d.ts +1 -1
- package/build/components/NotFound.js +3 -6
- package/build/components/PackageTabs.d.ts +1 -1
- package/build/components/PackageTabs.js +3 -7
- package/build/components/PageToolbar.d.ts +1 -1
- package/build/components/PageToolbar.js +2 -10
- package/build/components/PrevNext.d.ts +1 -1
- package/build/components/PrevNext.js +2 -10
- package/build/components/Root.d.ts +4 -0
- package/build/components/Root.js +8 -0
- package/build/components/Search.d.ts +5 -2
- package/build/components/Search.js +11 -9
- package/build/components/SearchDialog.d.ts +1 -1
- package/build/components/SearchDialog.js +10 -133
- package/build/components/Section.d.ts +1 -1
- package/build/components/SectionHeader.d.ts +1 -1
- package/build/components/SheetPanel.d.ts +12 -0
- package/build/components/SheetPanel.js +19 -0
- package/build/components/Sidebar.d.ts +1 -1
- package/build/components/Sidebar.js +12 -14
- package/build/components/SidebarArticles.d.ts +4 -1
- package/build/components/SidebarArticles.js +5 -9
- package/build/components/SidebarLinks.d.ts +4 -1
- package/build/components/SidebarLinks.js +6 -9
- package/build/components/SidebarPosts.d.ts +4 -1
- package/build/components/SidebarPosts.js +7 -23
- package/build/components/SidebarReleases.d.ts +4 -1
- package/build/components/SidebarReleases.js +5 -15
- package/build/components/SidebarSectionPicker.d.ts +8 -0
- package/build/components/SidebarSectionPicker.js +31 -0
- package/build/components/SidebarSections.d.ts +1 -1
- package/build/components/SidebarSections.js +5 -9
- package/build/components/SiteLink.d.ts +1 -1
- package/build/components/SiteTitle.d.ts +1 -1
- package/build/components/SiteTitle.js +2 -6
- package/build/components/SortableTable.d.ts +1 -1
- package/build/components/SoundCloud.d.ts +1 -1
- package/build/components/SoundCloud.js +2 -2
- package/build/components/TagIndex.d.ts +1 -1
- package/build/components/TagIndex.js +2 -11
- package/build/components/Theme.d.ts +2 -1
- package/build/components/Theme.js +35 -15
- package/build/components/Toc.d.ts +5 -4
- package/build/components/Toc.js +35 -35
- package/build/components/YouTube.d.ts +1 -1
- package/build/components/YouTube.js +2 -2
- package/build/components/ZoomImage.d.ts +1 -1
- package/build/content/article.js +4 -11
- package/build/content-collections.js +6 -4
- package/build/elements/accordion.d.ts +4 -4
- package/build/elements/accordion.js +2 -3
- package/build/elements/alert-dialog.d.ts +12 -12
- package/build/elements/alert-dialog.js +2 -4
- package/build/elements/alert.d.ts +4 -4
- package/build/elements/alert.js +2 -2
- package/build/elements/aspect-ratio.d.ts +1 -1
- package/build/elements/avatar.d.ts +6 -6
- package/build/elements/badge.d.ts +1 -1
- package/build/elements/badge.js +3 -1
- package/build/elements/breadcrumb.d.ts +6 -6
- package/build/elements/breadcrumb.js +2 -4
- package/build/elements/button-group.d.ts +2 -2
- package/build/elements/button-group.js +5 -5
- package/build/elements/button.d.ts +2 -2
- package/build/elements/button.js +9 -7
- package/build/elements/calendar.d.ts +2 -2
- package/build/elements/calendar.js +2 -2
- package/build/elements/card.d.ts +7 -7
- package/build/elements/card.js +4 -4
- package/build/elements/carousel.d.ts +5 -5
- package/build/elements/carousel.js +3 -7
- package/build/elements/chart.d.ts +6 -6
- package/build/elements/chart.js +5 -11
- package/build/elements/checkbox.d.ts +1 -1
- package/build/elements/collapsible.d.ts +3 -3
- package/build/elements/command.d.ts +9 -9
- package/build/elements/command.js +5 -11
- package/build/elements/context-menu.d.ts +15 -15
- package/build/elements/context-menu.js +6 -9
- package/build/elements/dialog.d.ts +10 -10
- package/build/elements/dialog.js +2 -6
- package/build/elements/drawer.d.ts +14 -12
- package/build/elements/drawer.js +14 -15
- package/build/elements/dropdown-menu.d.ts +15 -15
- package/build/elements/dropdown-menu.js +7 -10
- package/build/elements/empty.d.ts +6 -6
- package/build/elements/empty.js +2 -2
- package/build/elements/field.d.ts +10 -10
- package/build/elements/field.js +3 -4
- package/build/elements/hover-card.d.ts +3 -3
- package/build/elements/hover-card.js +2 -2
- package/build/elements/input-group.d.ts +7 -7
- package/build/elements/input-group.js +5 -5
- package/build/elements/input-otp.d.ts +4 -4
- package/build/elements/input.d.ts +1 -1
- package/build/elements/input.js +2 -2
- package/build/elements/item.d.ts +9 -9
- package/build/elements/item.js +2 -2
- package/build/elements/kbd.d.ts +2 -2
- package/build/elements/label.d.ts +1 -1
- package/build/elements/menubar.d.ts +16 -16
- package/build/elements/menubar.js +9 -11
- package/build/elements/native-select.d.ts +3 -3
- package/build/elements/native-select.js +2 -4
- package/build/elements/navigation-menu.d.ts +8 -8
- package/build/elements/navigation-menu.js +3 -5
- package/build/elements/pagination.d.ts +7 -7
- package/build/elements/pagination.js +4 -10
- package/build/elements/popover.d.ts +6 -6
- package/build/elements/popover.js +2 -2
- package/build/elements/progress.d.ts +5 -5
- package/build/elements/progress.js +2 -3
- package/build/elements/radio-group.d.ts +2 -2
- package/build/elements/resizable.d.ts +3 -3
- package/build/elements/scroll-area.d.ts +2 -2
- package/build/elements/scroll-area.js +2 -4
- package/build/elements/select.d.ts +9 -9
- package/build/elements/select.js +4 -9
- package/build/elements/separator.d.ts +1 -1
- package/build/elements/sheet.d.ts +8 -8
- package/build/elements/sheet.js +2 -6
- package/build/elements/sidebar.d.ts +19 -19
- package/build/elements/sidebar.js +15 -37
- package/build/elements/skeleton.d.ts +1 -1
- package/build/elements/slider.d.ts +2 -1
- package/build/elements/slider.js +2 -3
- package/build/elements/sonner.d.ts +1 -1
- package/build/elements/spinner.d.ts +1 -1
- package/build/elements/switch.d.ts +1 -1
- package/build/elements/table.d.ts +8 -8
- package/build/elements/tabs.d.ts +4 -4
- package/build/elements/tabs.js +3 -3
- package/build/elements/textarea.d.ts +1 -1
- package/build/elements/textarea.js +2 -2
- package/build/elements/toggle-group.d.ts +3 -2
- package/build/elements/toggle-group.js +3 -3
- package/build/elements/toggle.d.ts +1 -1
- package/build/elements/toggle.js +2 -2
- package/build/elements/tooltip.d.ts +4 -4
- package/build/elements/tooltip.js +2 -3
- package/build/head.d.ts +4 -0
- package/build/head.js +6 -0
- package/build/helpers/agent-skills.d.ts +22 -0
- package/build/helpers/agent-skills.js +46 -0
- package/build/helpers/agent-skills.unit.d.ts +1 -0
- package/build/helpers/agent-skills.unit.js +49 -0
- package/build/helpers/article-search.d.ts +19 -0
- package/build/helpers/article-search.js +134 -0
- package/build/helpers/article.d.ts +13 -0
- package/build/helpers/article.js +17 -1
- package/build/helpers/dependency-dir.d.ts +5 -0
- package/build/helpers/dependency-dir.js +20 -0
- package/build/helpers/dependency-dir.unit.d.ts +1 -0
- package/build/helpers/dependency-dir.unit.js +25 -0
- package/build/helpers/dynamic-icon-resolver.d.ts +1 -1
- package/build/helpers/dynamic-icon.d.ts +1 -1
- package/build/helpers/head.d.ts +58 -0
- package/build/helpers/head.js +80 -0
- package/build/helpers/head.unit.d.ts +1 -0
- package/build/helpers/head.unit.js +110 -0
- package/build/helpers/llms.d.ts +33 -0
- package/build/helpers/llms.js +72 -0
- package/build/helpers/llms.unit.d.ts +1 -0
- package/build/helpers/llms.unit.js +98 -0
- package/build/helpers/nav-items.d.ts +11 -0
- package/build/helpers/nav-items.js +65 -0
- package/build/helpers/render-inline-markdown.d.ts +1 -0
- package/build/helpers/render-inline-markdown.js +34 -0
- package/build/helpers/render-inline-markdown.unit.d.ts +1 -0
- package/build/helpers/render-inline-markdown.unit.js +20 -0
- package/build/helpers/search-highlight.d.ts +8 -0
- package/build/helpers/search-highlight.js +59 -0
- package/build/helpers/search-highlight.unit.d.ts +1 -0
- package/build/helpers/search-highlight.unit.js +36 -0
- package/build/helpers/target-export.d.ts +9 -0
- package/build/helpers/target-export.js +24 -0
- package/build/helpers/target-export.unit.d.ts +1 -0
- package/build/helpers/target-export.unit.js +25 -0
- package/build/helpers/theme.d.ts +6 -2
- package/build/helpers/theme.js +40 -7
- package/build/helpers/theme.unit.d.ts +1 -0
- package/build/helpers/theme.unit.js +30 -0
- package/build/hooks/hydrated.d.ts +2 -0
- package/build/hooks/hydrated.js +15 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +1 -1
- package/build/models/config.d.ts +52 -6
- package/build/models/config.js +17 -1
- package/build/models/section.d.ts +4 -2
- package/build/models/section.js +1 -1
- package/build/plugins/vite-agents.d.ts +17 -0
- package/build/plugins/vite-agents.js +109 -0
- package/build/plugins/vite-agents.unit.d.ts +1 -0
- package/build/plugins/vite-agents.unit.js +20 -0
- package/build/plugins/vite-livemark.d.ts +4 -5
- package/build/plugins/vite-livemark.js +56 -90
- package/build/plugins/vite-robots.d.ts +4 -2
- package/build/plugins/vite-robots.js +15 -2
- package/build/plugins/vite-robots.unit.js +5 -1
- package/build/program.js +4 -2
- package/build/routes/$.d.ts +4 -1
- package/build/routes/$.js +20 -9
- package/build/routes/__root.js +29 -63
- package/build/settings.js +2 -1
- package/build/vite.config.js +3 -1
- package/package.json +69 -66
- package/{.agents/skills → skills}/livemark-authoring/SKILL.md +2 -2
- package/{.agents/skills → skills}/livemark-configuration/SKILL.md +16 -5
- package/skills/livemark-customization/SKILL.md +146 -0
- package/source/actions/config/define.unit.ts +9 -0
- package/source/actions/escape/copy.ts +35 -0
- package/source/actions/escape/copy.unit.ts +51 -0
- package/source/actions/escape/list.ts +30 -0
- package/source/actions/escape/list.unit.ts +42 -0
- package/source/actions/target/build.ts +49 -69
- package/source/actions/target/build.unit.ts +95 -0
- package/source/actions/target/clear.ts +14 -0
- package/source/actions/target/clear.unit.ts +25 -0
- package/source/commands/build.ts +0 -1
- package/source/commands/clear.ts +15 -0
- package/source/commands/escape.ts +42 -59
- package/source/commands/preview.ts +0 -1
- package/source/commands/start.ts +0 -1
- package/source/components/AnsiCode.tsx +1 -1
- package/source/components/Article.tsx +8 -4
- package/source/components/Banner.tsx +12 -2
- package/source/components/BlogIndex.tsx +1 -1
- package/source/components/Callout.tsx +4 -6
- package/source/components/ChangelogIndex.tsx +1 -1
- package/source/components/ChoiceList.tsx +69 -0
- package/source/components/CodeBlock.tsx +6 -6
- package/source/components/CodeTabs.tsx +1 -1
- package/source/components/ContentTabs.tsx +1 -1
- package/source/components/DefaultCatchBoundary.tsx +4 -6
- package/source/components/Details.tsx +1 -1
- package/source/components/FileTree.tsx +1 -1
- package/source/components/Header.tsx +52 -0
- package/source/components/HeaderMenu.tsx +41 -0
- package/source/components/HeaderNav.tsx +145 -0
- package/source/components/HeaderSearch.tsx +77 -0
- package/source/components/InlineBadge.tsx +1 -1
- package/source/components/InlineToc.tsx +1 -1
- package/source/components/Layout.tsx +16 -160
- package/source/components/LinkButton.tsx +9 -1
- package/source/components/MenuSheet.tsx +92 -0
- package/source/components/MermaidRenderer.tsx +19 -8
- package/source/components/NotFound.tsx +3 -5
- package/source/components/PackageTabs.tsx +2 -2
- package/source/components/PageToolbar.tsx +11 -3
- package/source/components/PrevNext.tsx +2 -2
- package/source/components/Root.tsx +13 -0
- package/source/components/Search.tsx +28 -8
- package/source/components/SearchDialog.tsx +15 -189
- package/source/components/SheetPanel.tsx +69 -0
- package/source/components/Sidebar.tsx +27 -14
- package/source/components/SidebarArticles.tsx +4 -3
- package/source/components/SidebarLinks.tsx +3 -2
- package/source/components/SidebarPosts.tsx +3 -2
- package/source/components/SidebarReleases.tsx +3 -2
- package/source/components/SidebarSectionPicker.tsx +70 -0
- package/source/components/SiteTitle.tsx +5 -5
- package/source/components/SoundCloud.tsx +1 -1
- package/source/components/TagIndex.tsx +1 -1
- package/source/components/Theme.tsx +55 -29
- package/source/components/Toc.tsx +76 -55
- package/source/components/YouTube.tsx +1 -1
- package/source/content/article.ts +8 -13
- package/source/content-collections.ts +5 -4
- package/source/elements/alert-dialog.tsx +1 -1
- package/source/elements/alert.tsx +1 -1
- package/source/elements/badge.tsx +4 -0
- package/source/elements/button-group.tsx +4 -4
- package/source/elements/button.tsx +10 -6
- package/source/elements/calendar.tsx +1 -1
- package/source/elements/card.tsx +3 -3
- package/source/elements/command.tsx +7 -4
- package/source/elements/context-menu.tsx +5 -5
- package/source/elements/dialog.tsx +1 -1
- package/source/elements/drawer.tsx +59 -43
- package/source/elements/dropdown-menu.tsx +6 -6
- package/source/elements/empty.tsx +1 -1
- package/source/elements/field.tsx +1 -1
- package/source/elements/hover-card.tsx +1 -1
- package/source/elements/input-group.tsx +4 -4
- package/source/elements/input.tsx +1 -1
- package/source/elements/item.tsx +1 -1
- package/source/elements/menubar.tsx +8 -8
- package/source/elements/native-select.tsx +1 -1
- package/source/elements/popover.tsx +1 -1
- package/source/elements/select.tsx +3 -3
- package/source/elements/sidebar.tsx +8 -21
- package/source/elements/tabs.tsx +2 -2
- package/source/elements/textarea.tsx +1 -1
- package/source/elements/toggle-group.tsx +2 -2
- package/source/elements/toggle.tsx +1 -1
- package/source/env.d.ts +1 -0
- package/source/head.ts +7 -0
- package/source/helpers/agent-skills.ts +59 -0
- package/source/helpers/agent-skills.unit.ts +56 -0
- package/source/helpers/article-search.tsx +192 -0
- package/source/helpers/article.ts +17 -0
- package/source/helpers/dependency-dir.ts +20 -0
- package/source/helpers/dependency-dir.unit.ts +39 -0
- package/source/helpers/head.ts +105 -0
- package/source/helpers/head.unit.ts +118 -0
- package/source/helpers/llms.ts +109 -0
- package/source/helpers/llms.unit.ts +115 -0
- package/source/helpers/nav-items.tsx +102 -0
- package/source/helpers/render-inline-markdown.ts +44 -0
- package/source/helpers/render-inline-markdown.unit.ts +30 -0
- package/source/helpers/search-highlight.ts +73 -0
- package/source/helpers/search-highlight.unit.ts +42 -0
- package/source/helpers/target-export.ts +28 -0
- package/source/helpers/target-export.unit.ts +37 -0
- package/source/helpers/theme.ts +40 -6
- package/source/helpers/theme.unit.ts +32 -0
- package/source/hooks/hydrated.ts +18 -0
- package/source/index.ts +1 -0
- package/source/models/config.ts +24 -0
- package/source/models/section.ts +3 -0
- package/source/plugins/vite-agents.ts +135 -0
- package/source/plugins/vite-agents.unit.ts +26 -0
- package/source/plugins/vite-livemark.ts +54 -95
- package/source/plugins/vite-robots.ts +18 -3
- package/source/plugins/vite-robots.unit.ts +7 -0
- package/source/program.ts +2 -0
- package/source/routes/$.tsx +27 -9
- package/source/routes/__root.tsx +51 -71
- package/source/settings.ts +1 -0
- package/source/styles/general.css +59 -11
- package/source/styles/markdown.css +13 -7
- package/source/styles/shape.css +14 -0
- package/source/vite.config.ts +2 -0
- package/.agents/skills/change-review/SKILL.md +0 -47
- package/.agents/skills/livemark-customization/SKILL.md +0 -118
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
import { cpSync, existsSync, rmSync } from "node:fs";
|
|
1
|
+
import { cpSync, existsSync, rmSync, statSync } from "node:fs";
|
|
2
2
|
import { join, sep } from "node:path";
|
|
3
|
-
import { watch as chokidarWatch } from "chokidar";
|
|
4
3
|
import { mergeConfig } from "vite";
|
|
4
|
+
import packageJson from "../../package.json" with { type: "json" };
|
|
5
5
|
import { buildTarget } from "../actions/target/build.js";
|
|
6
|
+
import { renderInlineMarkdown } from "../helpers/render-inline-markdown.js";
|
|
7
|
+
import { resolveTargetExport } from "../helpers/target-export.js";
|
|
6
8
|
import { WebsiteConfig } from "../models/config.js";
|
|
7
9
|
import { ESCAPABLE_FILES, ESCAPABLE_FOLDERS } from "../settings.js";
|
|
8
10
|
const SOURCE_DIR = join(import.meta.dirname, "..");
|
|
11
|
+
const IS_INSTALLED = SOURCE_DIR.includes(`${sep}node_modules${sep}`);
|
|
9
12
|
/** Single virtual module exposing livemark's runtime values to consumer
|
|
10
13
|
* override files via named exports:
|
|
11
14
|
*
|
|
12
15
|
* import { config } from "livemark:virtual"
|
|
13
16
|
*
|
|
14
|
-
* Currently exports `config` (validated `WebsiteConfig`)
|
|
17
|
+
* Currently exports `config` (validated `WebsiteConfig`) and `bannerHtml`
|
|
18
|
+
* (`config.banner` rendered from inline Markdown at build time); future
|
|
15
19
|
* additions (e.g. `articles`, `sections`) land here as new named
|
|
16
20
|
* exports without consumers changing their import statements.
|
|
17
21
|
*
|
|
@@ -20,33 +24,36 @@ const SOURCE_DIR = join(import.meta.dirname, "..");
|
|
|
20
24
|
* or load it from disk". */
|
|
21
25
|
const VIRTUAL_ID = "livemark:virtual";
|
|
22
26
|
const VIRTUAL_RESOLVED_ID = `\0${VIRTUAL_ID}`;
|
|
23
|
-
/** Owns the
|
|
27
|
+
/** Owns the project's `.livemark/.target/` mount: synthesizes it via
|
|
24
28
|
* `buildTarget()`, returns the Vite config that anchors there, and
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* redirection, no realpath surprises. */
|
|
29
|
+
* copies `.livemark/` edits (plus livemark's `source/` in its own dev)
|
|
30
|
+
* into the target. Vite watches the target natively, so its own HMR
|
|
31
|
+
* decides between Fast Refresh, CSS updates and a page reload. */
|
|
29
32
|
export function livemark(opts) {
|
|
30
33
|
const overridesRoot = join(opts.config.root, ".livemark");
|
|
34
|
+
const outDir = join(overridesRoot, "build");
|
|
31
35
|
let targetDir = "";
|
|
32
36
|
return {
|
|
33
37
|
name: "livemark",
|
|
34
38
|
enforce: "pre",
|
|
35
39
|
async config(_, env) {
|
|
36
|
-
targetDir = buildTarget(
|
|
40
|
+
targetDir = buildTarget({
|
|
41
|
+
configPath: opts.config.configPath,
|
|
42
|
+
sourceDir: SOURCE_DIR,
|
|
43
|
+
});
|
|
37
44
|
const base = {
|
|
38
45
|
root: targetDir,
|
|
46
|
+
// The default `<root>/node_modules/.vite` would land inside the
|
|
47
|
+
// dependency link, i.e. in livemark's shared install.
|
|
48
|
+
cacheDir: join(targetDir, ".vite"),
|
|
39
49
|
// Mount everything (asset URLs, modulepreloads, dev server) under
|
|
40
50
|
// `config.base` so the same build works at root or at a sub-path
|
|
41
51
|
// (e.g. GitHub Pages `https://user.github.io/repo/`). The router
|
|
42
52
|
// and asset-path resolver mirror this at runtime.
|
|
43
53
|
base: opts.config.base ? `${opts.config.base}/` : "/",
|
|
44
|
-
// outDir lives outside the target root
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
// empty out-of-root directories doesn't apply here because the
|
|
48
|
-
// target/ root is livemark's, not the consumer's.
|
|
49
|
-
build: { outDir: join(overridesRoot, "build"), emptyOutDir: true },
|
|
54
|
+
// outDir lives outside the target root, so Vite's refusal to
|
|
55
|
+
// empty out-of-root directories needs `emptyOutDir`.
|
|
56
|
+
build: { outDir, emptyOutDir: true },
|
|
50
57
|
resolve: { dedupe: ["react", "react-dom"] },
|
|
51
58
|
// For the SSR build only, inline every node_modules dep into
|
|
52
59
|
// server.js. The prerender step (which runs server.js with
|
|
@@ -64,83 +71,59 @@ export function livemark(opts) {
|
|
|
64
71
|
resolveId(id) {
|
|
65
72
|
if (id === VIRTUAL_ID)
|
|
66
73
|
return VIRTUAL_RESOLVED_ID;
|
|
67
|
-
return null;
|
|
74
|
+
return resolveTargetExport({ id, targetDir, exports: packageJson.exports }) ?? null;
|
|
68
75
|
},
|
|
69
76
|
load(id) {
|
|
70
77
|
if (id !== VIRTUAL_RESOLVED_ID)
|
|
71
78
|
return null;
|
|
72
79
|
const config = WebsiteConfig.parse(opts.config);
|
|
73
|
-
|
|
80
|
+
const bannerHtml = config.banner
|
|
81
|
+
? renderInlineMarkdown(config.banner, config.base)
|
|
82
|
+
: undefined;
|
|
83
|
+
return [
|
|
84
|
+
`export const config = ${JSON.stringify(config)}`,
|
|
85
|
+
`export const bannerHtml = ${JSON.stringify(bannerHtml)}`,
|
|
86
|
+
].join("\n");
|
|
74
87
|
},
|
|
75
88
|
configureServer(server) {
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
// A dedicated chokidar 5 watcher set up directly on these paths
|
|
87
|
-
// fires reliably; we forward events into Vite's HMR pipeline below.
|
|
88
|
-
const overlayPaths = [];
|
|
89
|
-
for (const folder of ESCAPABLE_FOLDERS) {
|
|
90
|
-
overlayPaths.push(join(overridesRoot, folder));
|
|
91
|
-
}
|
|
92
|
-
for (const file of ESCAPABLE_FILES) {
|
|
93
|
-
overlayPaths.push(join(overridesRoot, file));
|
|
94
|
-
}
|
|
95
|
-
const watcher = chokidarWatch([opts.config.configPath, ...overlayPaths, SOURCE_DIR], { ignoreInitial: true, ignorePermissionErrors: true });
|
|
96
|
-
watcher.on("change", file => onChange(file, "change"));
|
|
97
|
-
watcher.on("add", file => onChange(file, "add"));
|
|
98
|
-
watcher.on("unlink", file => onChange(file, "unlink"));
|
|
99
|
-
const closeWatcher = () => {
|
|
100
|
-
watcher.close();
|
|
101
|
-
};
|
|
102
|
-
server.httpServer?.once("close", closeWatcher);
|
|
89
|
+
// Vite watches only its root (the target); the files the target is
|
|
90
|
+
// copied from join its watcher here. `.livemark/` always exists
|
|
91
|
+
// because the target lives inside it.
|
|
92
|
+
server.watcher.add([opts.config.configPath, overridesRoot]);
|
|
93
|
+
if (!IS_INSTALLED)
|
|
94
|
+
server.watcher.add(SOURCE_DIR);
|
|
95
|
+
server.watcher.on("change", file => onChange(file, "change"));
|
|
96
|
+
server.watcher.on("add", file => onChange(file, "add"));
|
|
97
|
+
server.watcher.on("unlink", file => onChange(file, "unlink"));
|
|
98
|
+
server.watcher.on("unlinkDir", file => onChange(file, "unlink"));
|
|
103
99
|
function onChange(file, kind) {
|
|
104
100
|
if (file === opts.config.configPath) {
|
|
105
101
|
server.restart();
|
|
106
102
|
return;
|
|
107
103
|
}
|
|
108
|
-
|
|
104
|
+
if (isWithin(file, targetDir) || isWithin(file, outDir))
|
|
105
|
+
return;
|
|
106
|
+
const overlayHit = matchPath(file, overridesRoot);
|
|
109
107
|
if (overlayHit) {
|
|
110
108
|
syncOverlay(overlayHit, kind, targetDir, overridesRoot);
|
|
111
|
-
notifyVite(server, join(targetDir, overlayHit.rel), kind);
|
|
112
|
-
if (kind !== "change")
|
|
113
|
-
fullReload(server);
|
|
114
109
|
return;
|
|
115
110
|
}
|
|
116
|
-
const sourceHit =
|
|
117
|
-
if (sourceHit) {
|
|
111
|
+
const sourceHit = matchPath(file, SOURCE_DIR);
|
|
112
|
+
if (sourceHit && !sourceHit.rel.includes("routeTree.gen.ts")) {
|
|
118
113
|
syncSource(sourceHit, kind, targetDir, overridesRoot);
|
|
119
|
-
notifyVite(server, join(targetDir, sourceHit.rel), kind);
|
|
120
|
-
if (kind !== "change")
|
|
121
|
-
fullReload(server);
|
|
122
114
|
}
|
|
123
115
|
}
|
|
124
116
|
},
|
|
125
117
|
};
|
|
126
118
|
}
|
|
127
|
-
function
|
|
128
|
-
|
|
129
|
-
if (!file.startsWith(prefix))
|
|
119
|
+
function matchPath(file, root) {
|
|
120
|
+
if (!isWithin(file, root) || file === root)
|
|
130
121
|
return null;
|
|
131
|
-
const rel = file.slice(
|
|
122
|
+
const rel = file.slice(root.length + sep.length);
|
|
132
123
|
return { rel, category: classify(rel) };
|
|
133
124
|
}
|
|
134
|
-
function
|
|
135
|
-
|
|
136
|
-
if (!file.startsWith(prefix))
|
|
137
|
-
return null;
|
|
138
|
-
// Skip the targets/ output dir itself (sibling of source/) and any
|
|
139
|
-
// `.gen.ts` files that downstream tools regenerate inside the target.
|
|
140
|
-
const rel = file.slice(prefix.length);
|
|
141
|
-
if (rel === "" || rel.includes("routeTree.gen.ts"))
|
|
142
|
-
return null;
|
|
143
|
-
return { rel, category: classify(rel) };
|
|
125
|
+
function isWithin(file, dir) {
|
|
126
|
+
return file === dir || file.startsWith(`${dir}${sep}`);
|
|
144
127
|
}
|
|
145
128
|
function classify(rel) {
|
|
146
129
|
const [head] = rel.split(sep);
|
|
@@ -158,7 +141,11 @@ function syncOverlay(hit, kind, targetDir, overridesRoot) {
|
|
|
158
141
|
const dest = join(targetDir, hit.rel);
|
|
159
142
|
const source = join(SOURCE_DIR, hit.rel);
|
|
160
143
|
if (kind === "unlink") {
|
|
161
|
-
|
|
144
|
+
// Copy a file's default over the escape in one write: an unlink then
|
|
145
|
+
// an add reaches Vite as two events and costs a page reload.
|
|
146
|
+
if (!existsSync(source) || statSync(source).isDirectory()) {
|
|
147
|
+
rmSync(dest, { force: true, recursive: true });
|
|
148
|
+
}
|
|
162
149
|
if (existsSync(source))
|
|
163
150
|
cpSync(source, dest, { recursive: true, force: true });
|
|
164
151
|
return;
|
|
@@ -181,27 +168,6 @@ function syncSource(hit, kind, targetDir, overridesRoot) {
|
|
|
181
168
|
if (existsSync(source))
|
|
182
169
|
cpSync(source, dest, { recursive: true, force: true });
|
|
183
170
|
}
|
|
184
|
-
function fullReload(server) {
|
|
185
|
-
server.ws.send({ type: "full-reload" });
|
|
186
|
-
}
|
|
187
|
-
/** Drive Vite's HMR pipeline manually for a target file we just synced.
|
|
188
|
-
* Vite's chokidar ignores `**\/node_modules/**` by default and our
|
|
189
|
-
* targetDir lives inside livemark's own node_modules in consumer
|
|
190
|
-
* projects, so cpSync writes there are silently filtered out.
|
|
191
|
-
*
|
|
192
|
-
* Emitting on `server.watcher` runs Vite's HMR analysis per environment
|
|
193
|
-
* (CSS gets `hmr update`, route modules trigger `(ssr) page reload`).
|
|
194
|
-
* But `(ssr) page reload` only sends `full-reload` on the SSR
|
|
195
|
-
* environment's hot channel — the browser is connected to the *client*
|
|
196
|
-
* channel and never sees it. So we also fire `full-reload` on the
|
|
197
|
-
* client hot directly, which is what TanStack Start needs for route
|
|
198
|
-
* edits to actually refresh the page. CSS HMR still works because
|
|
199
|
-
* Vite's analysis runs first and updates already-flushed before our
|
|
200
|
-
* reload. */
|
|
201
|
-
function notifyVite(server, targetFile, kind) {
|
|
202
|
-
server.watcher.emit(kind, targetFile);
|
|
203
|
-
server.environments.client.hot.send({ type: "full-reload" });
|
|
204
|
-
}
|
|
205
171
|
/** Resolve livemark.config.ts's `vite` field — either a config object
|
|
206
172
|
* or a function `(env) => config` (matching Vite's own `defineConfig`).
|
|
207
173
|
* Schema stores it as `unknown`; typing for the consumer's editor
|
|
@@ -218,4 +184,4 @@ async function resolveViteOverride(vite, env) {
|
|
|
218
184
|
function isObject(v) {
|
|
219
185
|
return v !== null && typeof v === "object";
|
|
220
186
|
}
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1saXZlbWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3ZpdGUtbGl2ZW1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLElBQUksYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRWpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRXhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFNbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUVsRDs7Ozs7Ozs7Ozs7NkJBVzZCO0FBQzdCLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFBO0FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQTtBQUU3Qzs7Ozs7MENBSzBDO0FBQzFDLE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBcUI7SUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3pELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQTtJQUNsQixPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHO1lBQ2pCLFNB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QUFTLFVBQVUsQ0FDakIsTUFBcUIsRUFDckIsVUFBa0IsRUFDbEIsSUFBaUM7SUFFakMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBRUQ7OztxQ0FHcUM7QUFDckMsS0FBSyxVQUFVLG1CQUFtQixDQUNoQyxJQUFhLEVBQ2IsR0FBYztJQUVkLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFDdEIsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMvQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDMUQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQ3pDLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDckMsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLENBQVU7SUFDMUIsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQTtBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3BTeW5jLCBleGlzdHNTeW5jLCBybVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgeyBqb2luLCBzZXAgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IHdhdGNoIGFzIGNob2tpZGFyV2F0Y2ggfSBmcm9tIFwiY2hva2lkYXJcIlxuaW1wb3J0IHR5cGUgeyBDb25maWdFbnYsIFBsdWdpbiwgVXNlckNvbmZpZyBhcyBWaXRlVXNlckNvbmZpZywgVml0ZURldlNlcnZlciB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCB7IG1lcmdlQ29uZmlnIH0gZnJvbSBcInZpdGVcIlxuaW1wb3J0IHsgYnVpbGRUYXJnZXQgfSBmcm9tIFwiLi4vYWN0aW9ucy90YXJnZXQvYnVpbGQudHNcIlxuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5pbXBvcnQgeyBXZWJzaXRlQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcudHNcIlxuaW1wb3J0IHsgRVNDQVBBQkxFX0ZJTEVTLCBFU0NBUEFCTEVfRk9MREVSUyB9IGZyb20gXCIuLi9zZXR0aW5ncy50c1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZW1hcmtPcHRpb25zIHtcbiAgY29uZmlnOiBDb25maWdcbn1cblxuY29uc3QgU09VUkNFX0RJUiA9IGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiKVxuXG4vKiogU2luZ2xlIHZpcnR1YWwgbW9kdWxlIGV4cG9zaW5nIGxpdmVtYXJrJ3MgcnVudGltZSB2YWx1ZXMgdG8gY29uc3VtZXJcbiAqICBvdmVycmlkZSBmaWxlcyB2aWEgbmFtZWQgZXhwb3J0czpcbiAqXG4gKiAgICAgIGltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbiAqXG4gKiAgQ3VycmVudGx5IGV4cG9ydHMgYGNvbmZpZ2AgKHZhbGlkYXRlZCBgV2Vic2l0ZUNvbmZpZ2ApOyBmdXR1cmVcbiAqICBhZGRpdGlvbnMgKGUuZy4gYGFydGljbGVzYCwgYHNlY3Rpb25zYCkgbGFuZCBoZXJlIGFzIG5ldyBuYW1lZFxuICogIGV4cG9ydHMgd2l0aG91dCBjb25zdW1lcnMgY2hhbmdpbmcgdGhlaXIgaW1wb3J0IHN0YXRlbWVudHMuXG4gKlxuICogIFRoZSBgXFwwYCBwcmVmaXggb24gdGhlIHJlc29sdmVkIGlkIGlzIFZpdGUncyBjb252ZW50aW9uIHRvIHNpZ25hbFxuICogIFwidGhpcyBpcyBhIHZpcnR1YWwgbW9kdWxlIOKAlCBubyBvdGhlciBwbHVnaW4gc2hvdWxkIHRyeSB0byByZXNvbHZlXG4gKiAgb3IgbG9hZCBpdCBmcm9tIGRpc2tcIi4gKi9cbmNvbnN0IFZJUlRVQUxfSUQgPSBcImxpdmVtYXJrOnZpcnR1YWxcIlxuY29uc3QgVklSVFVBTF9SRVNPTFZFRF9JRCA9IGBcXDAke1ZJUlRVQUxfSUR9YFxuXG4vKiogT3ducyB0aGUgcGVyLWNvbnN1bWVyIGB0YXJnZXRzLzxoYXNoPi9gIG1vdW50OiBzeW50aGVzaXplcyBpdCB2aWFcbiAqICBgYnVpbGRUYXJnZXQoKWAsIHJldHVybnMgdGhlIFZpdGUgY29uZmlnIHRoYXQgYW5jaG9ycyB0aGVyZSwgYW5kXG4gKiAgd2F0Y2hlcyB0aGUgY29uc3VtZXIncyBgLmxpdmVtYXJrL2AgKHBsdXMgbGl2ZW1hcmsncyBgc291cmNlL2AgaW5cbiAqICBkZXYpIGZvciBjaGFuZ2VzIHRoYXQgbmVlZCB0byBiZSByZS1jb3BpZWQgaW50byB0aGUgdGFyZ2V0LiBUaGVcbiAqICBvdmVycmlkZSBtZWNoYW5pc20gaXMgcHVyZSBmaWxlLXN5c3RlbSAoZnVsbCBjb3BpZXMpIOKAlCBubyByZXNvbHZlSWRcbiAqICByZWRpcmVjdGlvbiwgbm8gcmVhbHBhdGggc3VycHJpc2VzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpdmVtYXJrKG9wdHM6IExpdmVtYXJrT3B0aW9ucyk6IFBsdWdpbiB7XG4gIGNvbnN0IG92ZXJyaWRlc1Jvb3QgPSBqb2luKG9wdHMuY29uZmlnLnJvb3QsIFwiLmxpdmVtYXJrXCIpXG4gIGxldCB0YXJnZXREaXIgPSBcIlwiXG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJsaXZlbWFya1wiLFxuICAgIGVuZm9yY2U6IFwicHJlXCIsXG4gICAgYXN5bmMgY29uZmlnKF8sIGVudikge1xuICAgICAgdGFyZ2V0RGlyID0gYnVpbGRUYXJnZXQob3B0cy5jb25maWcuY29uZmlnUGF0aClcbiAgICAgIGNvbnN0IGJhc2U6IFZpdGVVc2VyQ29uZmlnID0ge1xuICAgICAgICByb290OiB0YXJnZXREaXIsXG4gICAgICAgIC8vIE1vdW50IGV2ZXJ5dGhpbmcgKGFzc2V0IFVSTHMsIG1vZHVsZXByZWxvYWRzLCBkZXYgc2VydmVyKSB1bmRlclxuICAgICAgICAvLyBgY29uZmlnLmJhc2VgIHNvIHRoZSBzYW1lIGJ1aWxkIHdvcmtzIGF0IHJvb3Qgb3IgYXQgYSBzdWItcGF0aFxuICAgICAgICAvLyAoZS5nLiBHaXRIdWIgUGFnZXMgYGh0dHBzOi8vdXNlci5naXRodWIuaW8vcmVwby9gKS4gVGhlIHJvdXRlclxuICAgICAgICAvLyBhbmQgYXNzZXQtcGF0aCByZXNvbHZlciBtaXJyb3IgdGhpcyBhdCBydW50aW1lLlxuICAgICAgICBiYXNlOiBvcHRzLmNvbmZpZy5iYXNlID8gYCR7b3B0cy5jb25maWcuYmFzZX0vYCA6IFwiL1wiLFxuICAgICAgICAvLyBvdXREaXIgbGl2ZXMgb3V0c2lkZSB0aGUgdGFyZ2V0IHJvb3QgKGluIHRoZSBjb25zdW1lcidzXG4gICAgICAgIC8vIC5saXZlbWFyay8pIHNvIHRoZSBjb25zdW1lciBjYW4gZmluZCB0aGVpciBkZXBsb3lhYmxlIG91dHB1dFxuICAgICAgICAvLyB3aXRob3V0IGRpZ2dpbmcgaW50byBub2RlX21vZHVsZXMuIFZpdGUncyBkZWZhdWx0IHJlZnVzYWwgdG9cbiAgICAgICAgLy8gZW1wdHkgb3V0LW9mLXJvb3QgZGlyZWN0b3JpZXMgZG9lc24ndCBhcHBseSBoZXJlIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIHRhcmdldC8gcm9vdCBpcyBsaXZlbWFyaydzLCBub3QgdGhlIGNvbnN1bWVyJ3MuXG4gICAgICAgIGJ1aWxkOiB7IG91dERpcjogam9pbihvdmVycmlkZXNSb290LCBcImJ1aWxkXCIpLCBlbXB0eU91dERpcjogdHJ1ZSB9LFxuICAgICAgICByZXNvbHZlOiB7IGRlZHVwZTogW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0gfSxcbiAgICAgICAgLy8gRm9yIHRoZSBTU1IgYnVpbGQgb25seSwgaW5saW5lIGV2ZXJ5IG5vZGVfbW9kdWxlcyBkZXAgaW50b1xuICAgICAgICAvLyBzZXJ2ZXIuanMuIFRoZSBwcmVyZW5kZXIgc3RlcCAod2hpY2ggcnVucyBzZXJ2ZXIuanMgd2l0aFxuICAgICAgICAvLyBOb2RlKSB3YWxrcyBub2RlX21vZHVsZXMgZnJvbSB0aGUgYnVpbGQvIGRpciBhbmQgY2FuJ3QgcmVhY2hcbiAgICAgICAgLy8gcGFja2FnZXMgYnVyaWVkIGluIHBucG0ncyBgLnBucG0vKi9ub2RlX21vZHVsZXMvYCAoZS5nLlxuICAgICAgICAvLyBUYW5TdGFjay1pbnRlcm5hbCBhbGlhc2VzIGxpa2UgYGgzLXYyYCkuIFNlbGYtY29udGFpbmVkXG4gICAgICAgIC8vIGJ1bmRsZSBieXBhc3NlcyB0aGUgaXNzdWUuIERldiBTU1Iga2VlcHMgZXh0ZXJuYWxzIChmYXN0ZXIpLlxuICAgICAgICAuLi4oZW52LmNvbW1hbmQgPT09IFwiYnVpbGRcIiAmJiB7XG4gICAgICAgICAgZW52aXJvbm1lbnRzOiB7IHNzcjogeyByZXNvbHZlOiB7IG5vRXh0ZXJuYWw6IHRydWUgfSB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgfVxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBhd2FpdCByZXNvbHZlVml0ZU92ZXJyaWRlKG9wdHMuY29uZmlnLnZpdGUsIGVudilcbiAgICAgIHJldHVybiBvdmVycmlkZSA/IG1lcmdlQ29uZmlnKGJhc2UsIG92ZXJyaWRlKSA6IGJhc2VcbiAgICB9LFxuICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgaWYgKGlkID09PSBWSVJUVUFMX0lEKSByZXR1cm4gVklSVFVBTF9SRVNPTFZFRF9JRFxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuICAgIGxvYWQoaWQpIHtcbiAgICAgIGlmIChpZCAhPT0gVklSVFVBTF9SRVNPTFZFRF9JRCkgcmV0dXJuIG51bGxcbiAgICAgIGNvbnN0IGNvbmZpZyA9IFdlYnNpdGVDb25maWcucGFyc2Uob3B0cy5jb25maWcpXG4gICAgICByZXR1cm4gYGV4cG9ydCBjb25zdCBjb25maWcgPSAke0pTT04uc3RyaW5naWZ5KGNvbmZpZyl9YFxuICAgIH0sXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikge1xuICAgICAgLy8gVHdvIHJlYXNvbnMgd2UgZG9uJ3QgdXNlIFZpdGUncyBvd24gYHNlcnZlci53YXRjaGVyYDpcbiAgICAgIC8vICAgMS4gVml0ZSA4IGJ1bmRsZXMgY2hva2lkYXIgMyB3aXRoIGBkaXNhYmxlR2xvYmJpbmc6IHRydWVgLCBhbmRcbiAgICAgIC8vICAgICAgcGF0aHMgYWRkZWQgdmlhIGBzZXJ2ZXIud2F0Y2hlci5hZGQoKWAgZm9yIHN1cmZhY2VzIG91dHNpZGVcbiAgICAgIC8vICAgICAgVml0ZSdzIHJvb3QgbmV2ZXIgZmlyZSDigJQgZ2V0V2F0Y2hlZCgpIHJlcG9ydHMgdGhlbSBidXQgbm9cbiAgICAgIC8vICAgICAgZXZlbnRzIGFycml2ZSBmb3IgZXh0ZXJuYWwgZWRpdG9ycy5cbiAgICAgIC8vICAgMi4gVml0ZSdzIGNob2tpZGFyIGlnbm9yZXMgYCoqXFwvbm9kZV9tb2R1bGVzLyoqYCBieSBkZWZhdWx0LCBzb1xuICAgICAgLy8gICAgICBldmVuIGlmICgxKSB3ZXJlIGZpeGVkLCBvdXIgdGFyZ2V0RGlyICh3aGljaCBsaXZlcyBpbnNpZGVcbiAgICAgIC8vICAgICAgbGl2ZW1hcmsncyBvd24gbm9kZV9tb2R1bGVzIGluIGNvbnN1bWVyIHByb2plY3RzKSB3b3VsZCBiZVxuICAgICAgLy8gICAgICBzaWxlbnRseSBmaWx0ZXJlZC4gV2UgZW1pdCB0aGUgY2hhbmdlIGV2ZW50IG1hbnVhbGx5IG9udG9cbiAgICAgIC8vICAgICAgYHNlcnZlci53YXRjaGVyYCBhZnRlciBjcFN5bmMg4oCUIHNlZSB7QGxpbmsgbm90aWZ5Vml0ZX0uXG4gICAgICAvLyBBIGRlZGljYXRlZCBjaG9raWRhciA1IHdhdGNoZXIgc2V0IHVwIGRpcmVjdGx5IG9uIHRoZXNlIHBhdGhzXG4gICAgICAvLyBmaXJlcyByZWxpYWJseTsgd2UgZm9yd2FyZCBldmVudHMgaW50byBWaXRlJ3MgSE1SIHBpcGVsaW5lIGJlbG93LlxuICAgICAgY29uc3Qgb3ZlcmxheVBhdGhzOiBzdHJpbmdbXSA9IFtdXG4gICAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBFU0NBUEFCTEVfRk9MREVSUykge1xuICAgICAgICBvdmVybGF5UGF0aHMucHVzaChqb2luKG92ZXJyaWRlc1Jvb3QsIGZvbGRlcikpXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgRVNDQVBBQkxFX0ZJTEVTKSB7XG4gICAgICAgIG92ZXJsYXlQYXRocy5wdXNoKGpvaW4ob3ZlcnJpZGVzUm9vdCwgZmlsZSkpXG4gICAgICB9XG4gICAgICBjb25zdCB3YXRjaGVyID0gY2hva2lkYXJXYXRjaChcbiAgICAgICAgW29wdHMuY29uZmlnLmNvbmZpZ1BhdGgsIC4uLm92ZXJsYXlQYXRocywgU09VUkNFX0RJUl0sXG4gICAgICAgIHsgaWdub3JlSW5pdGlhbDogdHJ1ZSwgaWdub3JlUGVybWlzc2lvbkVycm9yczogdHJ1ZSB9LFxuICAgICAgKVxuICAgICAgd2F0Y2hlci5vbihcImNoYW5nZVwiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwiY2hhbmdlXCIpKVxuICAgICAgd2F0Y2hlci5vbihcImFkZFwiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwiYWRkXCIpKVxuICAgICAgd2F0Y2hlci5vbihcInVubGlua1wiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwidW5saW5rXCIpKVxuICAgICAgY29uc3QgY2xvc2VXYXRjaGVyID0gKCkgPT4ge1xuICAgICAgICB3YXRjaGVyLmNsb3NlKClcbiAgICAgIH1cbiAgICAgIHNlcnZlci5odHRwU2VydmVyPy5vbmNlKFwiY2xvc2VcIiwgY2xvc2VXYXRjaGVyKVxuXG4gICAgICBmdW5jdGlvbiBvbkNoYW5nZShmaWxlOiBzdHJpbmcsIGtpbmQ6IFwiY2hhbmdlXCIgfCBcImFkZFwiIHwgXCJ1bmxpbmtcIikge1xuICAgICAgICBpZiAoZmlsZSA9PT0gb3B0cy5jb25maWcuY29uZmlnUGF0aCkge1xuICAgICAgICAgIHNlcnZlci5yZXN0YXJ0KClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdmVybGF5SGl0ID0gbWF0Y2hPdmVybGF5KGZpbGUsIG92ZXJyaWRlc1Jvb3QpXG4gICAgICAgIGlmIChvdmVybGF5SGl0KSB7XG4gICAgICAgICAgc3luY092ZXJsYXkob3ZlcmxheUhpdCwga2luZCwgdGFyZ2V0RGlyLCBvdmVycmlkZXNSb290KVxuICAgICAgICAgIG5vdGlmeVZpdGUoc2VydmVyLCBqb2luKHRhcmdldERpciwgb3ZlcmxheUhpdC5yZWwpLCBraW5kKVxuICAgICAgICAgIGlmIChraW5kICE9PSBcImNoYW5nZVwiKSBmdWxsUmVsb2FkKHNlcnZlcilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3VyY2VIaXQgPSBtYXRjaFNvdXJjZShmaWxlKVxuICAgICAgICBpZiAoc291cmNlSGl0KSB7XG4gICAgICAgICAgc3luY1NvdXJjZShzb3VyY2VIaXQsIGtpbmQsIHRhcmdldERpciwgb3ZlcnJpZGVzUm9vdClcbiAgICAgICAgICBub3RpZnlWaXRlKHNlcnZlciwgam9pbih0YXJnZXREaXIsIHNvdXJjZUhpdC5yZWwpLCBraW5kKVxuICAgICAgICAgIGlmIChraW5kICE9PSBcImNoYW5nZVwiKSBmdWxsUmVsb2FkKHNlcnZlcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH1cbn1cblxuaW50ZXJmYWNlIEhpdCB7XG4gIHJlbDogc3RyaW5nXG4gIGNhdGVnb3J5OiBcImZvbGRlclwiIHwgXCJmaWxlXCIgfCBudWxsXG59XG5cbmZ1bmN0aW9uIG1hdGNoT3ZlcmxheShmaWxlOiBzdHJpbmcsIG92ZXJyaWRlc1Jvb3Q6IHN0cmluZyk6IEhpdCB8IG51bGwge1xuICBjb25zdCBwcmVmaXggPSBgJHtvdmVycmlkZXNSb290fSR7c2VwfWBcbiAgaWYgKCFmaWxlLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuIG51bGxcbiAgY29uc3QgcmVsID0gZmlsZS5zbGljZShwcmVmaXgubGVuZ3RoKVxuICByZXR1cm4geyByZWwsIGNhdGVnb3J5OiBjbGFzc2lmeShyZWwpIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hTb3VyY2UoZmlsZTogc3RyaW5nKTogSGl0IHwgbnVsbCB7XG4gIGNvbnN0IHByZWZpeCA9IGAke1NPVVJDRV9ESVJ9JHtzZXB9YFxuICBpZiAoIWZpbGUuc3RhcnRzV2l0aChwcmVmaXgpKSByZXR1cm4gbnVsbFxuICAvLyBTa2lwIHRoZSB0YXJnZXRzLyBvdXRwdXQgZGlyIGl0c2VsZiAoc2libGluZyBvZiBzb3VyY2UvKSBhbmQgYW55XG4gIC8vIGAuZ2VuLnRzYCBmaWxlcyB0aGF0IGRvd25zdHJlYW0gdG9vbHMgcmVnZW5lcmF0ZSBpbnNpZGUgdGhlIHRhcmdldC5cbiAgY29uc3QgcmVsID0gZmlsZS5zbGljZShwcmVmaXgubGVuZ3RoKVxuICBpZiAocmVsID09PSBcIlwiIHx8IHJlbC5pbmNsdWRlcyhcInJvdXRlVHJlZS5nZW4udHNcIikpIHJldHVybiBudWxsXG4gIHJldHVybiB7IHJlbCwgY2F0ZWdvcnk6IGNsYXNzaWZ5KHJlbCkgfVxufVxuXG5mdW5jdGlvbiBjbGFzc2lmeShyZWw6IHN0cmluZyk6IFwiZm9sZGVyXCIgfCBcImZpbGVcIiB8IG51bGwge1xuICBjb25zdCBbaGVhZF0gPSByZWwuc3BsaXQoc2VwKVxuICBpZiAoaGVhZCAmJiBFU0NBUEFCTEVfRk9MREVSUy5pbmNsdWRlcyhoZWFkKSkgcmV0dXJuIFwiZm9sZGVyXCJcbiAgaWYgKEVTQ0FQQUJMRV9GSUxFUy5pbmNsdWRlcyhyZWwpKSByZXR1cm4gXCJmaWxlXCJcbiAgLy8gTm9uLWVzY2FwYWJsZSBzb3VyY2UgZmlsZXMgc3RpbGwgbmVlZCB0byBmbG93IGludG8gdGFyZ2V0IGR1cmluZ1xuICAvLyBsaXZlbWFyaydzIG93biBkZXYg4oCUIHRoZSB1c2VyIGlzIGVkaXRpbmcgdGhlIGNhbm9uaWNhbCBzb3VyY2UuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHN5bmNPdmVybGF5KFxuICBoaXQ6IEhpdCxcbiAga2luZDogXCJjaGFuZ2VcIiB8IFwiYWRkXCIgfCBcInVubGlua1wiLFxuICB0YXJnZXREaXI6IHN0cmluZyxcbiAgb3ZlcnJpZGVzUm9vdDogc3RyaW5nLFxuKSB7XG4gIGlmICghaGl0LmNhdGVnb3J5KSByZXR1cm5cbiAgY29uc3QgZGVzdCA9IGpvaW4odGFyZ2V0RGlyLCBoaXQucmVsKVxuICBjb25zdCBzb3VyY2UgPSBqb2luKFNPVVJDRV9ESVIsIGhpdC5yZWwpXG4gIGlmIChraW5kID09PSBcInVubGlua1wiKSB7XG4gICAgcm1TeW5jKGRlc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIGNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IG92ZXJsYXkgPSBqb2luKG92ZXJyaWRlc1Jvb3QsIGhpdC5yZWwpXG4gIGlmIChleGlzdHNTeW5jKG92ZXJsYXkpKSBjcFN5bmMob3ZlcmxheSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG59XG5cbmZ1bmN0aW9uIHN5bmNTb3VyY2UoXG4gIGhpdDogSGl0LFxuICBraW5kOiBcImNoYW5nZVwiIHwgXCJhZGRcIiB8IFwidW5saW5rXCIsXG4gIHRhcmdldERpcjogc3RyaW5nLFxuICBvdmVycmlkZXNSb290OiBzdHJpbmcsXG4pIHtcbiAgLy8gSWYgdGhlIGNvbnN1bWVyIGhhcyBhbiBvdmVybGF5IGZvciB0aGlzIGZpbGUgKGFuZCBpdCdzIGVzY2FwYWJsZSksXG4gIC8vIHRoZSBvdmVybGF5IHdpbnMg4oCUIGlnbm9yZSBzb3VyY2UgY2hhbmdlcy5cbiAgaWYgKGhpdC5jYXRlZ29yeSAmJiBleGlzdHNTeW5jKGpvaW4ob3ZlcnJpZGVzUm9vdCwgaGl0LnJlbCkpKSByZXR1cm5cbiAgY29uc3QgZGVzdCA9IGpvaW4odGFyZ2V0RGlyLCBoaXQucmVsKVxuICBjb25zdCBzb3VyY2UgPSBqb2luKFNPVVJDRV9ESVIsIGhpdC5yZWwpXG4gIGlmIChraW5kID09PSBcInVubGlua1wiKSB7XG4gICAgcm1TeW5jKGRlc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIGNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG5mdW5jdGlvbiBmdWxsUmVsb2FkKHNlcnZlcjogVml0ZURldlNlcnZlcikge1xuICBzZXJ2ZXIud3Muc2VuZCh7IHR5cGU6IFwiZnVsbC1yZWxvYWRcIiB9KVxufVxuXG4vKiogRHJpdmUgVml0ZSdzIEhNUiBwaXBlbGluZSBtYW51YWxseSBmb3IgYSB0YXJnZXQgZmlsZSB3ZSBqdXN0IHN5bmNlZC5cbiAqICBWaXRlJ3MgY2hva2lkYXIgaWdub3JlcyBgKipcXC9ub2RlX21vZHVsZXMvKipgIGJ5IGRlZmF1bHQgYW5kIG91clxuICogIHRhcmdldERpciBsaXZlcyBpbnNpZGUgbGl2ZW1hcmsncyBvd24gbm9kZV9tb2R1bGVzIGluIGNvbnN1bWVyXG4gKiAgcHJvamVjdHMsIHNvIGNwU3luYyB3cml0ZXMgdGhlcmUgYXJlIHNpbGVudGx5IGZpbHRlcmVkIG91dC5cbiAqXG4gKiAgRW1pdHRpbmcgb24gYHNlcnZlci53YXRjaGVyYCBydW5zIFZpdGUncyBITVIgYW5hbHlzaXMgcGVyIGVudmlyb25tZW50XG4gKiAgKENTUyBnZXRzIGBobXIgdXBkYXRlYCwgcm91dGUgbW9kdWxlcyB0cmlnZ2VyIGAoc3NyKSBwYWdlIHJlbG9hZGApLlxuICogIEJ1dCBgKHNzcikgcGFnZSByZWxvYWRgIG9ubHkgc2VuZHMgYGZ1bGwtcmVsb2FkYCBvbiB0aGUgU1NSXG4gKiAgZW52aXJvbm1lbnQncyBob3QgY2hhbm5lbCDigJQgdGhlIGJyb3dzZXIgaXMgY29ubmVjdGVkIHRvIHRoZSAqY2xpZW50KlxuICogIGNoYW5uZWwgYW5kIG5ldmVyIHNlZXMgaXQuIFNvIHdlIGFsc28gZmlyZSBgZnVsbC1yZWxvYWRgIG9uIHRoZVxuICogIGNsaWVudCBob3QgZGlyZWN0bHksIHdoaWNoIGlzIHdoYXQgVGFuU3RhY2sgU3RhcnQgbmVlZHMgZm9yIHJvdXRlXG4gKiAgZWRpdHMgdG8gYWN0dWFsbHkgcmVmcmVzaCB0aGUgcGFnZS4gQ1NTIEhNUiBzdGlsbCB3b3JrcyBiZWNhdXNlXG4gKiAgVml0ZSdzIGFuYWx5c2lzIHJ1bnMgZmlyc3QgYW5kIHVwZGF0ZXMgYWxyZWFkeS1mbHVzaGVkIGJlZm9yZSBvdXJcbiAqICByZWxvYWQuICovXG5mdW5jdGlvbiBub3RpZnlWaXRlKFxuICBzZXJ2ZXI6IFZpdGVEZXZTZXJ2ZXIsXG4gIHRhcmdldEZpbGU6IHN0cmluZyxcbiAga2luZDogXCJjaGFuZ2VcIiB8IFwiYWRkXCIgfCBcInVubGlua1wiLFxuKSB7XG4gIHNlcnZlci53YXRjaGVyLmVtaXQoa2luZCwgdGFyZ2V0RmlsZSlcbiAgc2VydmVyLmVudmlyb25tZW50cy5jbGllbnQuaG90LnNlbmQoeyB0eXBlOiBcImZ1bGwtcmVsb2FkXCIgfSlcbn1cblxuLyoqIFJlc29sdmUgbGl2ZW1hcmsuY29uZmlnLnRzJ3MgYHZpdGVgIGZpZWxkIOKAlCBlaXRoZXIgYSBjb25maWcgb2JqZWN0XG4gKiAgb3IgYSBmdW5jdGlvbiBgKGVudikgPT4gY29uZmlnYCAobWF0Y2hpbmcgVml0ZSdzIG93biBgZGVmaW5lQ29uZmlnYCkuXG4gKiAgU2NoZW1hIHN0b3JlcyBpdCBhcyBgdW5rbm93bmA7IHR5cGluZyBmb3IgdGhlIGNvbnN1bWVyJ3MgZWRpdG9yXG4gKiAgbGl2ZXMgb24ge0BsaW5rIFZpdGVPdmVycmlkZX0uICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlVml0ZU92ZXJyaWRlKFxuICB2aXRlOiB1bmtub3duLFxuICBlbnY6IENvbmZpZ0Vudixcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsPiB7XG4gIGlmICghdml0ZSkgcmV0dXJuIG51bGxcbiAgaWYgKHR5cGVvZiB2aXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KHZpdGUsIHVuZGVmaW5lZCwgW2Vudl0pXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBudWxsXG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KHZpdGUpID8gdml0ZSA6IG51bGxcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodjogdW5rbm93bik6IHYgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdiAhPT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIlxufVxuIl19
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1saXZlbWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3ZpdGUtbGl2ZW1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ2xDLE9BQU8sV0FBVyxNQUFNLG9CQUFvQixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBTW5FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDbEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBRXBFOzs7Ozs7Ozs7Ozs7NkJBWTZCO0FBQzdCLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFBO0FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQTtBQUU3Qzs7OzttRUFJbUU7QUFDbkUsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFxQjtJQUM1QyxNQUFNLGFBQWEsR0FB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QTtRQUMxRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDekMsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUNyQyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBVTtJQUMxQixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFBO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcFN5bmMsIGV4aXN0c1N5bmMsIHJtU3luYywgc3RhdFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgeyBqb2luLCBzZXAgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB0eXBlIHsgQ29uZmlnRW52LCBQbHVnaW4sIFVzZXJDb25maWcgYXMgVml0ZVVzZXJDb25maWcgfSBmcm9tIFwidml0ZVwiXG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBwYWNrYWdlSnNvbiBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH1cbmltcG9ydCB7IGJ1aWxkVGFyZ2V0IH0gZnJvbSBcIi4uL2FjdGlvbnMvdGFyZ2V0L2J1aWxkLnRzXCJcbmltcG9ydCB7IHJlbmRlcklubGluZU1hcmtkb3duIH0gZnJvbSBcIi4uL2hlbHBlcnMvcmVuZGVyLWlubGluZS1tYXJrZG93bi50c1wiXG5pbXBvcnQgeyByZXNvbHZlVGFyZ2V0RXhwb3J0IH0gZnJvbSBcIi4uL2hlbHBlcnMvdGFyZ2V0LWV4cG9ydC50c1wiXG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvY29uZmlnLnRzXCJcbmltcG9ydCB7IFdlYnNpdGVDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5pbXBvcnQgeyBFU0NBUEFCTEVfRklMRVMsIEVTQ0FQQUJMRV9GT0xERVJTIH0gZnJvbSBcIi4uL3NldHRpbmdzLnRzXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaXZlbWFya09wdGlvbnMge1xuICBjb25maWc6IENvbmZpZ1xufVxuXG5jb25zdCBTT1VSQ0VfRElSID0gam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIpXG5jb25zdCBJU19JTlNUQUxMRUQgPSBTT1VSQ0VfRElSLmluY2x1ZGVzKGAke3NlcH1ub2RlX21vZHVsZXMke3NlcH1gKVxuXG4vKiogU2luZ2xlIHZpcnR1YWwgbW9kdWxlIGV4cG9zaW5nIGxpdmVtYXJrJ3MgcnVudGltZSB2YWx1ZXMgdG8gY29uc3VtZXJcbiAqICBvdmVycmlkZSBmaWxlcyB2aWEgbmFtZWQgZXhwb3J0czpcbiAqXG4gKiAgICAgIGltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbiAqXG4gKiAgQ3VycmVudGx5IGV4cG9ydHMgYGNvbmZpZ2AgKHZhbGlkYXRlZCBgV2Vic2l0ZUNvbmZpZ2ApIGFuZCBgYmFubmVySHRtbGBcbiAqICAoYGNvbmZpZy5iYW5uZXJgIHJlbmRlcmVkIGZyb20gaW5saW5lIE1hcmtkb3duIGF0IGJ1aWxkIHRpbWUpOyBmdXR1cmVcbiAqICBhZGRpdGlvbnMgKGUuZy4gYGFydGljbGVzYCwgYHNlY3Rpb25zYCkgbGFuZCBoZXJlIGFzIG5ldyBuYW1lZFxuICogIGV4cG9ydHMgd2l0aG91dCBjb25zdW1lcnMgY2hhbmdpbmcgdGhlaXIgaW1wb3J0IHN0YXRlbWVudHMuXG4gKlxuICogIFRoZSBgXFwwYCBwcmVmaXggb24gdGhlIHJlc29sdmVkIGlkIGlzIFZpdGUncyBjb252ZW50aW9uIHRvIHNpZ25hbFxuICogIFwidGhpcyBpcyBhIHZpcnR1YWwgbW9kdWxlIOKAlCBubyBvdGhlciBwbHVnaW4gc2hvdWxkIHRyeSB0byByZXNvbHZlXG4gKiAgb3IgbG9hZCBpdCBmcm9tIGRpc2tcIi4gKi9cbmNvbnN0IFZJUlRVQUxfSUQgPSBcImxpdmVtYXJrOnZpcnR1YWxcIlxuY29uc3QgVklSVFVBTF9SRVNPTFZFRF9JRCA9IGBcXDAke1ZJUlRVQUxfSUR9YFxuXG4vKiogT3ducyB0aGUgcHJvamVjdCdzIGAubGl2ZW1hcmsvLnRhcmdldC9gIG1vdW50OiBzeW50aGVzaXplcyBpdCB2aWFcbiAqICBgYnVpbGRUYXJnZXQoKWAsIHJldHVybnMgdGhlIFZpdGUgY29uZmlnIHRoYXQgYW5jaG9ycyB0aGVyZSwgYW5kXG4gKiAgY29waWVzIGAubGl2ZW1hcmsvYCBlZGl0cyAocGx1cyBsaXZlbWFyaydzIGBzb3VyY2UvYCBpbiBpdHMgb3duIGRldilcbiAqICBpbnRvIHRoZSB0YXJnZXQuIFZpdGUgd2F0Y2hlcyB0aGUgdGFyZ2V0IG5hdGl2ZWx5LCBzbyBpdHMgb3duIEhNUlxuICogIGRlY2lkZXMgYmV0d2VlbiBGYXN0IFJlZnJlc2gsIENTUyB1cGRhdGVzIGFuZCBhIHBhZ2UgcmVsb2FkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpdmVtYXJrKG9wdHM6IExpdmVtYXJrT3B0aW9ucyk6IFBsdWdpbiB7XG4gIGNvbnN0IG92ZXJyaWRlc1Jvb3QgPSBqb2luKG9wdHMuY29uZmlnLnJvb3QsIFwiLmxpdmVtYXJrXCIpXG4gIGNvbnN0IG91dERpciA9IGpvaW4ob3ZlcnJpZGVzUm9vdCwgXCJidWlsZFwiKVxuICBsZXQgdGFyZ2V0RGlyID0gXCJcIlxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwibGl2ZW1hcmtcIixcbiAgICBlbmZvcmNlOiBcInByZVwiLFxuICAgIGFzeW5jIGNvbmZpZyhfLCBlbnYpIHtcbiAgICAgIHRhcmdldERpciA9IGJ1aWxkVGFyZ2V0KHtcbiAgICAgICAgY29uZmlnUGF0aDogb3B0cy5jb25maWcuY29uZmlnUGF0aCxcbiAgICAgICAgc291cmNlRGlyOiBTT1VSQ0VfRElSLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGJhc2U6IFZpdGVVc2VyQ29uZmlnID0ge1xuICAgICAgICByb290OiB0YXJnZXREaXIsXG4gICAgICAgIC8vIFRoZSBkZWZhdWx0IGA8cm9vdD4vbm9kZV9tb2R1bGVzLy52aXRlYCB3b3VsZCBsYW5kIGluc2lkZSB0aGVcbiAgICAgICAgLy8gZGVwZW5kZW5jeSBsaW5rLCBpLmUuIGluIGxpdmVtYXJrJ3Mgc2hhcmVkIGluc3RhbGwuXG4gICAgICAgIGNhY2hlRGlyOiBqb2luKHRhcmdldERpciwgXCIudml0ZVwiKSxcbiAgICAgICAgLy8gTW91bnQgZXZlcnl0aGluZyAoYXNzZXQgVVJMcywgbW9kdWxlcHJlbG9hZHMsIGRldiBzZXJ2ZXIpIHVuZGVyXG4gICAgICAgIC8vIGBjb25maWcuYmFzZWAgc28gdGhlIHNhbWUgYnVpbGQgd29ya3MgYXQgcm9vdCBvciBhdCBhIHN1Yi1wYXRoXG4gICAgICAgIC8vIChlLmcuIEdpdEh1YiBQYWdlcyBgaHR0cHM6Ly91c2VyLmdpdGh1Yi5pby9yZXBvL2ApLiBUaGUgcm91dGVyXG4gICAgICAgIC8vIGFuZCBhc3NldC1wYXRoIHJlc29sdmVyIG1pcnJvciB0aGlzIGF0IHJ1bnRpbWUuXG4gICAgICAgIGJhc2U6IG9wdHMuY29uZmlnLmJhc2UgPyBgJHtvcHRzLmNvbmZpZy5iYXNlfS9gIDogXCIvXCIsXG4gICAgICAgIC8vIG91dERpciBsaXZlcyBvdXRzaWRlIHRoZSB0YXJnZXQgcm9vdCwgc28gVml0ZSdzIHJlZnVzYWwgdG9cbiAgICAgICAgLy8gZW1wdHkgb3V0LW9mLXJvb3QgZGlyZWN0b3JpZXMgbmVlZHMgYGVtcHR5T3V0RGlyYC5cbiAgICAgICAgYnVpbGQ6IHsgb3V0RGlyLCBlbXB0eU91dERpcjogdHJ1ZSB9LFxuICAgICAgICByZXNvbHZlOiB7IGRlZHVwZTogW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0gfSxcbiAgICAgICAgLy8gRm9yIHRoZSBTU1IgYnVpbGQgb25seSwgaW5saW5lIGV2ZXJ5IG5vZGVfbW9kdWxlcyBkZXAgaW50b1xuICAgICAgICAvLyBzZXJ2ZXIuanMuIFRoZSBwcmVyZW5kZXIgc3RlcCAod2hpY2ggcnVucyBzZXJ2ZXIuanMgd2l0aFxuICAgICAgICAvLyBOb2RlKSB3YWxrcyBub2RlX21vZHVsZXMgZnJvbSB0aGUgYnVpbGQvIGRpciBhbmQgY2FuJ3QgcmVhY2hcbiAgICAgICAgLy8gcGFja2FnZXMgYnVyaWVkIGluIHBucG0ncyBgLnBucG0vKi9ub2RlX21vZHVsZXMvYCAoZS5nLlxuICAgICAgICAvLyBUYW5TdGFjay1pbnRlcm5hbCBhbGlhc2VzIGxpa2UgYGgzLXYyYCkuIFNlbGYtY29udGFpbmVkXG4gICAgICAgIC8vIGJ1bmRsZSBieXBhc3NlcyB0aGUgaXNzdWUuIERldiBTU1Iga2VlcHMgZXh0ZXJuYWxzIChmYXN0ZXIpLlxuICAgICAgICAuLi4oZW52LmNvbW1hbmQgPT09IFwiYnVpbGRcIiAmJiB7XG4gICAgICAgICAgZW52aXJvbm1lbnRzOiB7IHNzcjogeyByZXNvbHZlOiB7IG5vRXh0ZXJuYWw6IHRydWUgfSB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgfVxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBhd2FpdCByZXNvbHZlVml0ZU92ZXJyaWRlKG9wdHMuY29uZmlnLnZpdGUsIGVudilcbiAgICAgIHJldHVybiBvdmVycmlkZSA/IG1lcmdlQ29uZmlnKGJhc2UsIG92ZXJyaWRlKSA6IGJhc2VcbiAgICB9LFxuICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgaWYgKGlkID09PSBWSVJUVUFMX0lEKSByZXR1cm4gVklSVFVBTF9SRVNPTFZFRF9JRFxuICAgICAgcmV0dXJuIHJlc29sdmVUYXJnZXRFeHBvcnQoeyBpZCwgdGFyZ2V0RGlyLCBleHBvcnRzOiBwYWNrYWdlSnNvbi5leHBvcnRzIH0pID8/IG51bGxcbiAgICB9LFxuICAgIGxvYWQoaWQpIHtcbiAgICAgIGlmIChpZCAhPT0gVklSVFVBTF9SRVNPTFZFRF9JRCkgcmV0dXJuIG51bGxcbiAgICAgIGNvbnN0IGNvbmZpZyA9IFdlYnNpdGVDb25maWcucGFyc2Uob3B0cy5jb25maWcpXG4gICAgICBjb25zdCBiYW5uZXJIdG1sID0gY29uZmlnLmJhbm5lclxuICAgICAgICA/IHJlbmRlcklubGluZU1hcmtkb3duKGNvbmZpZy5iYW5uZXIsIGNvbmZpZy5iYXNlKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYGV4cG9ydCBjb25zdCBjb25maWcgPSAke0pTT04uc3RyaW5naWZ5KGNvbmZpZyl9YCxcbiAgICAgICAgYGV4cG9ydCBjb25zdCBiYW5uZXJIdG1sID0gJHtKU09OLnN0cmluZ2lmeShiYW5uZXJIdG1sKX1gLFxuICAgICAgXS5qb2luKFwiXFxuXCIpXG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7XG4gICAgICAvLyBWaXRlIHdhdGNoZXMgb25seSBpdHMgcm9vdCAodGhlIHRhcmdldCk7IHRoZSBmaWxlcyB0aGUgdGFyZ2V0IGlzXG4gICAgICAvLyBjb3BpZWQgZnJvbSBqb2luIGl0cyB3YXRjaGVyIGhlcmUuIGAubGl2ZW1hcmsvYCBhbHdheXMgZXhpc3RzXG4gICAgICAvLyBiZWNhdXNlIHRoZSB0YXJnZXQgbGl2ZXMgaW5zaWRlIGl0LlxuICAgICAgc2VydmVyLndhdGNoZXIuYWRkKFtvcHRzLmNvbmZpZy5jb25maWdQYXRoLCBvdmVycmlkZXNSb290XSlcbiAgICAgIGlmICghSVNfSU5TVEFMTEVEKSBzZXJ2ZXIud2F0Y2hlci5hZGQoU09VUkNFX0RJUilcbiAgICAgIHNlcnZlci53YXRjaGVyLm9uKFwiY2hhbmdlXCIsIGZpbGUgPT4gb25DaGFuZ2UoZmlsZSwgXCJjaGFuZ2VcIikpXG4gICAgICBzZXJ2ZXIud2F0Y2hlci5vbihcImFkZFwiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwiYWRkXCIpKVxuICAgICAgc2VydmVyLndhdGNoZXIub24oXCJ1bmxpbmtcIiwgZmlsZSA9PiBvbkNoYW5nZShmaWxlLCBcInVubGlua1wiKSlcbiAgICAgIHNlcnZlci53YXRjaGVyLm9uKFwidW5saW5rRGlyXCIsIGZpbGUgPT4gb25DaGFuZ2UoZmlsZSwgXCJ1bmxpbmtcIikpXG5cbiAgICAgIGZ1bmN0aW9uIG9uQ2hhbmdlKGZpbGU6IHN0cmluZywga2luZDogXCJjaGFuZ2VcIiB8IFwiYWRkXCIgfCBcInVubGlua1wiKSB7XG4gICAgICAgIGlmIChmaWxlID09PSBvcHRzLmNvbmZpZy5jb25maWdQYXRoKSB7XG4gICAgICAgICAgc2VydmVyLnJlc3RhcnQoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1dpdGhpbihmaWxlLCB0YXJnZXREaXIpIHx8IGlzV2l0aGluKGZpbGUsIG91dERpcikpIHJldHVyblxuICAgICAgICBjb25zdCBvdmVybGF5SGl0ID0gbWF0Y2hQYXRoKGZpbGUsIG92ZXJyaWRlc1Jvb3QpXG4gICAgICAgIGlmIChvdmVybGF5SGl0KSB7XG4gICAgICAgICAgc3luY092ZXJsYXkob3ZlcmxheUhpdCwga2luZCwgdGFyZ2V0RGlyLCBvdmVycmlkZXNSb290KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZUhpdCA9IG1hdGNoUGF0aChmaWxlLCBTT1VSQ0VfRElSKVxuICAgICAgICBpZiAoc291cmNlSGl0ICYmICFzb3VyY2VIaXQucmVsLmluY2x1ZGVzKFwicm91dGVUcmVlLmdlbi50c1wiKSkge1xuICAgICAgICAgIHN5bmNTb3VyY2Uoc291cmNlSGl0LCBraW5kLCB0YXJnZXREaXIsIG92ZXJyaWRlc1Jvb3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9XG59XG5cbmludGVyZmFjZSBIaXQge1xuICByZWw6IHN0cmluZ1xuICBjYXRlZ29yeTogXCJmb2xkZXJcIiB8IFwiZmlsZVwiIHwgbnVsbFxufVxuXG5mdW5jdGlvbiBtYXRjaFBhdGgoZmlsZTogc3RyaW5nLCByb290OiBzdHJpbmcpOiBIaXQgfCBudWxsIHtcbiAgaWYgKCFpc1dpdGhpbihmaWxlLCByb290KSB8fCBmaWxlID09PSByb290KSByZXR1cm4gbnVsbFxuICBjb25zdCByZWwgPSBmaWxlLnNsaWNlKHJvb3QubGVuZ3RoICsgc2VwLmxlbmd0aClcbiAgcmV0dXJuIHsgcmVsLCBjYXRlZ29yeTogY2xhc3NpZnkocmVsKSB9XG59XG5cbmZ1bmN0aW9uIGlzV2l0aGluKGZpbGU6IHN0cmluZywgZGlyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZpbGUgPT09IGRpciB8fCBmaWxlLnN0YXJ0c1dpdGgoYCR7ZGlyfSR7c2VwfWApXG59XG5cbmZ1bmN0aW9uIGNsYXNzaWZ5KHJlbDogc3RyaW5nKTogXCJmb2xkZXJcIiB8IFwiZmlsZVwiIHwgbnVsbCB7XG4gIGNvbnN0IFtoZWFkXSA9IHJlbC5zcGxpdChzZXApXG4gIGlmIChoZWFkICYmIEVTQ0FQQUJMRV9GT0xERVJTLmluY2x1ZGVzKGhlYWQpKSByZXR1cm4gXCJmb2xkZXJcIlxuICBpZiAoRVNDQVBBQkxFX0ZJTEVTLmluY2x1ZGVzKHJlbCkpIHJldHVybiBcImZpbGVcIlxuICAvLyBOb24tZXNjYXBhYmxlIHNvdXJjZSBmaWxlcyBzdGlsbCBuZWVkIHRvIGZsb3cgaW50byB0YXJnZXQgZHVyaW5nXG4gIC8vIGxpdmVtYXJrJ3Mgb3duIGRldiDigJQgdGhlIHVzZXIgaXMgZWRpdGluZyB0aGUgY2Fub25pY2FsIHNvdXJjZS5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gc3luY092ZXJsYXkoXG4gIGhpdDogSGl0LFxuICBraW5kOiBcImNoYW5nZVwiIHwgXCJhZGRcIiB8IFwidW5saW5rXCIsXG4gIHRhcmdldERpcjogc3RyaW5nLFxuICBvdmVycmlkZXNSb290OiBzdHJpbmcsXG4pIHtcbiAgaWYgKCFoaXQuY2F0ZWdvcnkpIHJldHVyblxuICBjb25zdCBkZXN0ID0gam9pbih0YXJnZXREaXIsIGhpdC5yZWwpXG4gIGNvbnN0IHNvdXJjZSA9IGpvaW4oU09VUkNFX0RJUiwgaGl0LnJlbClcbiAgaWYgKGtpbmQgPT09IFwidW5saW5rXCIpIHtcbiAgICAvLyBDb3B5IGEgZmlsZSdzIGRlZmF1bHQgb3ZlciB0aGUgZXNjYXBlIGluIG9uZSB3cml0ZTogYW4gdW5saW5rIHRoZW5cbiAgICAvLyBhbiBhZGQgcmVhY2hlcyBWaXRlIGFzIHR3byBldmVudHMgYW5kIGNvc3RzIGEgcGFnZSByZWxvYWQuXG4gICAgaWYgKCFleGlzdHNTeW5jKHNvdXJjZSkgfHwgc3RhdFN5bmMoc291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBybVN5bmMoZGVzdCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgfVxuICAgIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIGNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IG92ZXJsYXkgPSBqb2luKG92ZXJyaWRlc1Jvb3QsIGhpdC5yZWwpXG4gIGlmIChleGlzdHNTeW5jKG92ZXJsYXkpKSBjcFN5bmMob3ZlcmxheSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG59XG5cbmZ1bmN0aW9uIHN5bmNTb3VyY2UoXG4gIGhpdDogSGl0LFxuICBraW5kOiBcImNoYW5nZVwiIHwgXCJhZGRcIiB8IFwidW5saW5rXCIsXG4gIHRhcmdldERpcjogc3RyaW5nLFxuICBvdmVycmlkZXNSb290OiBzdHJpbmcsXG4pIHtcbiAgLy8gSWYgdGhlIGNvbnN1bWVyIGhhcyBhbiBvdmVybGF5IGZvciB0aGlzIGZpbGUgKGFuZCBpdCdzIGVzY2FwYWJsZSksXG4gIC8vIHRoZSBvdmVybGF5IHdpbnMg4oCUIGlnbm9yZSBzb3VyY2UgY2hhbmdlcy5cbiAgaWYgKGhpdC5jYXRlZ29yeSAmJiBleGlzdHNTeW5jKGpvaW4ob3ZlcnJpZGVzUm9vdCwgaGl0LnJlbCkpKSByZXR1cm5cbiAgY29uc3QgZGVzdCA9IGpvaW4odGFyZ2V0RGlyLCBoaXQucmVsKVxuICBjb25zdCBzb3VyY2UgPSBqb2luKFNPVVJDRV9ESVIsIGhpdC5yZWwpXG4gIGlmIChraW5kID09PSBcInVubGlua1wiKSB7XG4gICAgcm1TeW5jKGRlc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIGNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG4vKiogUmVzb2x2ZSBsaXZlbWFyay5jb25maWcudHMncyBgdml0ZWAgZmllbGQg4oCUIGVpdGhlciBhIGNvbmZpZyBvYmplY3RcbiAqICBvciBhIGZ1bmN0aW9uIGAoZW52KSA9PiBjb25maWdgIChtYXRjaGluZyBWaXRlJ3Mgb3duIGBkZWZpbmVDb25maWdgKS5cbiAqICBTY2hlbWEgc3RvcmVzIGl0IGFzIGB1bmtub3duYDsgdHlwaW5nIGZvciB0aGUgY29uc3VtZXIncyBlZGl0b3JcbiAqICBsaXZlcyBvbiB7QGxpbmsgVml0ZU92ZXJyaWRlfS4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWaXRlT3ZlcnJpZGUoXG4gIHZpdGU6IHVua25vd24sXG4gIGVudjogQ29uZmlnRW52LFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw+IHtcbiAgaWYgKCF2aXRlKSByZXR1cm4gbnVsbFxuICBpZiAodHlwZW9mIHZpdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFJlZmxlY3QuYXBwbHkodml0ZSwgdW5kZWZpbmVkLCBbZW52XSlcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IG51bGxcbiAgfVxuICByZXR1cm4gaXNPYmplY3Qodml0ZSkgPyB2aXRlIDogbnVsbFxufVxuXG5mdW5jdGlvbiBpc09iamVjdCh2OiB1bmtub3duKTogdiBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2ICE9PSBudWxsICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiXG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Plugin } from "vite";
|
|
2
|
-
import type { Config } from "../models/config.ts";
|
|
2
|
+
import type { Config, ContentSignals } from "../models/config.ts";
|
|
3
3
|
export interface RobotsOptions {
|
|
4
4
|
config: Config;
|
|
5
5
|
}
|
|
@@ -14,4 +14,6 @@ export declare function robots(opts: RobotsOptions): Plugin;
|
|
|
14
14
|
* line is appended only when `site` is set, because the directive
|
|
15
15
|
* requires a fully-qualified URL; `base` is included so the URL matches
|
|
16
16
|
* where the build (and the `sitemap.xml` inside it) is actually mounted. */
|
|
17
|
-
export declare function renderRobots(config: Pick<Config, "site" | "base">
|
|
17
|
+
export declare function renderRobots(config: Pick<Config, "site" | "base"> & {
|
|
18
|
+
contentSignals?: ContentSignals;
|
|
19
|
+
}): string;
|
|
@@ -29,7 +29,11 @@ export function robots(opts) {
|
|
|
29
29
|
* requires a fully-qualified URL; `base` is included so the URL matches
|
|
30
30
|
* where the build (and the `sitemap.xml` inside it) is actually mounted. */
|
|
31
31
|
export function renderRobots(config) {
|
|
32
|
-
const lines = ["User-agent: *"
|
|
32
|
+
const lines = ["User-agent: *"];
|
|
33
|
+
// Agents read the signal as part of a user-agent group, so it must sit inside one.
|
|
34
|
+
if (config.contentSignals)
|
|
35
|
+
lines.push(renderContentSignal(config.contentSignals));
|
|
36
|
+
lines.push("Allow: /");
|
|
33
37
|
if (config.site) {
|
|
34
38
|
const host = config.site.replace(/\/+$/, "");
|
|
35
39
|
const base = config.base ?? "";
|
|
@@ -37,4 +41,13 @@ export function renderRobots(config) {
|
|
|
37
41
|
}
|
|
38
42
|
return `${lines.join("\n")}\n`;
|
|
39
43
|
}
|
|
40
|
-
|
|
44
|
+
function renderContentSignal(signals) {
|
|
45
|
+
const flag = (value) => (value ? "yes" : "no");
|
|
46
|
+
const pairs = [
|
|
47
|
+
`search=${flag(signals.search)}`,
|
|
48
|
+
`ai-input=${flag(signals.aiInput)}`,
|
|
49
|
+
`ai-train=${flag(signals.aiTrain)}`,
|
|
50
|
+
];
|
|
51
|
+
return `Content-Signal: ${pairs.join(", ")}`;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1yb2JvdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcGx1Z2lucy92aXRlLXJvYm90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFRaEM7Ozs7O29FQUtvRTtBQUNwRSxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQW1CO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBQ2hGLE9BQU87UUFDTCxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLGtCQUFrQixDQUFDLEdBQUc7WUFDcEIsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQTtRQUM5QixDQUFDO1FBQ0QsY0FBYztZQUNaLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQztnQkFBRSxPQUFNO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ1osSUFBSSxFQUFFLE9BQU87Z0JBQ2IsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUNsQyxDQUFDLENBQUE7UUFDSixDQUFDO0tBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRDs7OzZFQUc2RTtBQUM3RSxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUEyRTtJQUUzRSxNQUFNLEtBQUssR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQy9CLG1GQUFtRjtJQUNuRixJQUFJLE1BQU0sQ0FBQyxjQUFjO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtJQUNqRixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3RCLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM1QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxZQUFZLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO0FBQ2hDLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLE9BQXVCO0lBQ2xELE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2RCxNQUFNLEtBQUssR0FBRztRQUNaLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNoQyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDbkMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0tBQ3BDLENBQUE7SUFDRCxPQUFPLG1CQUFtQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUE7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCB0eXBlIHsgQ29uZmlnLCBDb250ZW50U2lnbmFscyB9IGZyb20gXCIuLi9tb2RlbHMvY29uZmlnLnRzXCJcblxuZXhwb3J0IGludGVyZmFjZSBSb2JvdHNPcHRpb25zIHtcbiAgY29uZmlnOiBDb25maWdcbn1cblxuLyoqIEVtaXQgYSBkZWZhdWx0IGByb2JvdHMudHh0YCBpbnRvIHRoZSBjbGllbnQgYnVpbGQgb3V0cHV0LCB3aXRoIGFcbiAqICBgU2l0ZW1hcDpgIGxpbmUgcG9pbnRpbmcgYXQgdGhlIFRhblN0YWNrLVN0YXJ0LWdlbmVyYXRlZCBgc2l0ZW1hcC54bWxgXG4gKiAgd2hlbiB7QGxpbmsgQ29uZmlnLnNpdGV9IGlzIHNldC4gU2tpcHBlZCB3aGVuIHRoZSBjb25zdW1lciBzaGlwc1xuICogIHRoZWlyIG93biBgLmxpdmVtYXJrL3B1YmxpYy9yb2JvdHMudHh0YCBzbyB0aGUgc3RhbmRhcmQgcHVibGljRGlyXG4gKiAgb3ZlcmxheSB3aW5zIOKAlCBWaXRlIGNvcGllcyB0aGUgcHVibGljRGlyIGJlZm9yZSB3cml0ZUJ1bmRsZSwgc29cbiAqICB1bmNvbmRpdGlvbmFsIGVtaXRGaWxlIHdvdWxkIHNpbGVudGx5IG92ZXJ3cml0ZSB0aGUgb3ZlcnJpZGUuICovXG5leHBvcnQgZnVuY3Rpb24gcm9ib3RzKG9wdHM6IFJvYm90c09wdGlvbnMpOiBQbHVnaW4ge1xuICBjb25zdCBvdmVycmlkZUZpbGUgPSBqb2luKG9wdHMuY29uZmlnLnJvb3QsIFwiLmxpdmVtYXJrXCIsIFwicHVibGljXCIsIFwicm9ib3RzLnR4dFwiKVxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwibGl2ZW1hcms6cm9ib3RzXCIsXG4gICAgYXBwbHlUb0Vudmlyb25tZW50KGVudikge1xuICAgICAgcmV0dXJuIGVudi5uYW1lID09PSBcImNsaWVudFwiXG4gICAgfSxcbiAgICBnZW5lcmF0ZUJ1bmRsZSgpIHtcbiAgICAgIGlmIChleGlzdHNTeW5jKG92ZXJyaWRlRmlsZSkpIHJldHVyblxuICAgICAgdGhpcy5lbWl0RmlsZSh7XG4gICAgICAgIHR5cGU6IFwiYXNzZXRcIixcbiAgICAgICAgZmlsZU5hbWU6IFwicm9ib3RzLnR4dFwiLFxuICAgICAgICBzb3VyY2U6IHJlbmRlclJvYm90cyhvcHRzLmNvbmZpZyksXG4gICAgICB9KVxuICAgIH0sXG4gIH1cbn1cblxuLyoqIFJlbmRlciB0aGUgYm9keSBvZiBhIHBlcm1pc3NpdmUgZGVmYXVsdCBgcm9ib3RzLnR4dGAuIEEgYFNpdGVtYXA6YFxuICogIGxpbmUgaXMgYXBwZW5kZWQgb25seSB3aGVuIGBzaXRlYCBpcyBzZXQsIGJlY2F1c2UgdGhlIGRpcmVjdGl2ZVxuICogIHJlcXVpcmVzIGEgZnVsbHktcXVhbGlmaWVkIFVSTDsgYGJhc2VgIGlzIGluY2x1ZGVkIHNvIHRoZSBVUkwgbWF0Y2hlc1xuICogIHdoZXJlIHRoZSBidWlsZCAoYW5kIHRoZSBgc2l0ZW1hcC54bWxgIGluc2lkZSBpdCkgaXMgYWN0dWFsbHkgbW91bnRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJSb2JvdHMoXG4gIGNvbmZpZzogUGljazxDb25maWcsIFwic2l0ZVwiIHwgXCJiYXNlXCI+ICYgeyBjb250ZW50U2lnbmFscz86IENvbnRlbnRTaWduYWxzIH0sXG4pIHtcbiAgY29uc3QgbGluZXMgPSBbXCJVc2VyLWFnZW50OiAqXCJdXG4gIC8vIEFnZW50cyByZWFkIHRoZSBzaWduYWwgYXMgcGFydCBvZiBhIHVzZXItYWdlbnQgZ3JvdXAsIHNvIGl0IG11c3Qgc2l0IGluc2lkZSBvbmUuXG4gIGlmIChjb25maWcuY29udGVudFNpZ25hbHMpIGxpbmVzLnB1c2gocmVuZGVyQ29udGVudFNpZ25hbChjb25maWcuY29udGVudFNpZ25hbHMpKVxuICBsaW5lcy5wdXNoKFwiQWxsb3c6IC9cIilcbiAgaWYgKGNvbmZpZy5zaXRlKSB7XG4gICAgY29uc3QgaG9zdCA9IGNvbmZpZy5zaXRlLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICBjb25zdCBiYXNlID0gY29uZmlnLmJhc2UgPz8gXCJcIlxuICAgIGxpbmVzLnB1c2goXCJcIiwgYFNpdGVtYXA6ICR7aG9zdH0ke2Jhc2V9L3NpdGVtYXAueG1sYClcbiAgfVxuICByZXR1cm4gYCR7bGluZXMuam9pbihcIlxcblwiKX1cXG5gXG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbnRlbnRTaWduYWwoc2lnbmFsczogQ29udGVudFNpZ25hbHMpIHtcbiAgY29uc3QgZmxhZyA9ICh2YWx1ZTogYm9vbGVhbikgPT4gKHZhbHVlID8gXCJ5ZXNcIiA6IFwibm9cIilcbiAgY29uc3QgcGFpcnMgPSBbXG4gICAgYHNlYXJjaD0ke2ZsYWcoc2lnbmFscy5zZWFyY2gpfWAsXG4gICAgYGFpLWlucHV0PSR7ZmxhZyhzaWduYWxzLmFpSW5wdXQpfWAsXG4gICAgYGFpLXRyYWluPSR7ZmxhZyhzaWduYWxzLmFpVHJhaW4pfWAsXG4gIF1cbiAgcmV0dXJuIGBDb250ZW50LVNpZ25hbDogJHtwYWlycy5qb2luKFwiLCBcIil9YFxufVxuIl19
|
|
@@ -16,5 +16,9 @@ describe("renderRobots", () => {
|
|
|
16
16
|
it("ignores base when site is not set", () => {
|
|
17
17
|
expect(renderRobots({ base: "/repo" })).toBe("User-agent: *\nAllow: /\n");
|
|
18
18
|
});
|
|
19
|
+
it("puts the content signals inside the wildcard group", () => {
|
|
20
|
+
const contentSignals = { search: true, aiInput: true, aiTrain: false };
|
|
21
|
+
expect(renderRobots({ contentSignals })).toBe("User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no\nAllow: /\n");
|
|
22
|
+
});
|
|
19
23
|
});
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1yb2JvdHMudW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3ZpdGUtcm9ib3RzLnVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRS9DLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7UUFDdEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0lBQzVELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDekQsd0VBQXdFLENBQ3pFLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxHQUFHLEVBQUU7UUFDcEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFELHdFQUF3RSxDQUN6RSxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1FBQ25FLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFFLCtFQUErRSxDQUNoRixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0lBQzNFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLGNBQWMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUE7UUFDdEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzNDLGtGQUFrRixDQUNuRixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGUtcGx1cy90ZXN0XCJcbmltcG9ydCB7IHJlbmRlclJvYm90cyB9IGZyb20gXCIuL3ZpdGUtcm9ib3RzLnRzXCJcblxuZGVzY3JpYmUoXCJyZW5kZXJSb2JvdHNcIiwgKCkgPT4ge1xuICBpdChcImVtaXRzIGFuIGFsbG93LWFsbCBib2R5IHdoZW4gc2l0ZSBpcyBub3Qgc2V0XCIsICgpID0+IHtcbiAgICBleHBlY3QocmVuZGVyUm9ib3RzKHt9KSkudG9CZShcIlVzZXItYWdlbnQ6ICpcXG5BbGxvdzogL1xcblwiKVxuICB9KVxuXG4gIGl0KFwiYXBwZW5kcyBhIFNpdGVtYXAgbGluZSB3aGVuIHNpdGUgaXMgc2V0XCIsICgpID0+IHtcbiAgICBleHBlY3QocmVuZGVyUm9ib3RzKHsgc2l0ZTogXCJodHRwczovL2xpdmVtYXJrLmRldlwiIH0pKS50b0JlKFxuICAgICAgXCJVc2VyLWFnZW50OiAqXFxuQWxsb3c6IC9cXG5cXG5TaXRlbWFwOiBodHRwczovL2xpdmVtYXJrLmRldi9zaXRlbWFwLnhtbFxcblwiLFxuICAgIClcbiAgfSlcblxuICBpdChcInN0cmlwcyBhIHRyYWlsaW5nIHNsYXNoIGZyb20gc2l0ZSBiZWZvcmUgY29tcG9zaW5nIHRoZSBVUkxcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZW5kZXJSb2JvdHMoeyBzaXRlOiBcImh0dHBzOi8vbGl2ZW1hcmsuZGV2L1wiIH0pKS50b0JlKFxuICAgICAgXCJVc2VyLWFnZW50OiAqXFxuQWxsb3c6IC9cXG5cXG5TaXRlbWFwOiBodHRwczovL2xpdmVtYXJrLmRldi9zaXRlbWFwLnhtbFxcblwiLFxuICAgIClcbiAgfSlcblxuICBpdChcImluY2x1ZGVzIHRoZSBiYXNlIHBhdGggc28gdGhlIFVSTCBtYXRjaGVzIHRoZSBidWlsZCBtb3VudFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlbmRlclJvYm90cyh7IHNpdGU6IFwiaHR0cHM6Ly91c2VyLmdpdGh1Yi5pb1wiLCBiYXNlOiBcIi9yZXBvXCIgfSkpLnRvQmUoXG4gICAgICBcIlVzZXItYWdlbnQ6ICpcXG5BbGxvdzogL1xcblxcblNpdGVtYXA6IGh0dHBzOi8vdXNlci5naXRodWIuaW8vcmVwby9zaXRlbWFwLnhtbFxcblwiLFxuICAgIClcbiAgfSlcblxuICBpdChcImlnbm9yZXMgYmFzZSB3aGVuIHNpdGUgaXMgbm90IHNldFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlbmRlclJvYm90cyh7IGJhc2U6IFwiL3JlcG9cIiB9KSkudG9CZShcIlVzZXItYWdlbnQ6ICpcXG5BbGxvdzogL1xcblwiKVxuICB9KVxuXG4gIGl0KFwicHV0cyB0aGUgY29udGVudCBzaWduYWxzIGluc2lkZSB0aGUgd2lsZGNhcmQgZ3JvdXBcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRTaWduYWxzID0geyBzZWFyY2g6IHRydWUsIGFpSW5wdXQ6IHRydWUsIGFpVHJhaW46IGZhbHNlIH1cbiAgICBleHBlY3QocmVuZGVyUm9ib3RzKHsgY29udGVudFNpZ25hbHMgfSkpLnRvQmUoXG4gICAgICBcIlVzZXItYWdlbnQ6ICpcXG5Db250ZW50LVNpZ25hbDogc2VhcmNoPXllcywgYWktaW5wdXQ9eWVzLCBhaS10cmFpbj1ub1xcbkFsbG93OiAvXFxuXCIsXG4gICAgKVxuICB9KVxufSlcbiJdfQ==
|
package/build/program.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { build } from "./commands/build.js";
|
|
3
|
+
import { clear } from "./commands/clear.js";
|
|
3
4
|
import { escape } from "./commands/escape.js";
|
|
4
5
|
import { preview } from "./commands/preview.js";
|
|
5
6
|
import { start } from "./commands/start.js";
|
|
@@ -14,5 +15,6 @@ export const program = new Command()
|
|
|
14
15
|
.addCommand(start)
|
|
15
16
|
.addCommand(build)
|
|
16
17
|
.addCommand(preview)
|
|
17
|
-
.addCommand(escape)
|
|
18
|
-
|
|
18
|
+
.addCommand(escape)
|
|
19
|
+
.addCommand(clear);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9wcm9ncmFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN4RCxPQUFPLFdBQVcsTUFBTSxpQkFBaUIsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQTtBQUUvRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7S0FDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUNoQixXQUFXLENBQUMsZ0NBQWdDLENBQUM7S0FDN0MsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixDQUFDO0tBQzdFLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQztLQUNwRCxhQUFhLENBQUMsaUJBQWlCLENBQUM7S0FDaEMsVUFBVSxDQUFDLEtBQUssQ0FBQztLQUNqQixVQUFVLENBQUMsS0FBSyxDQUFDO0tBQ2pCLFVBQVUsQ0FBQyxPQUFPLENBQUM7S0FDbkIsVUFBVSxDQUFDLE1BQU0sQ0FBQztLQUNsQixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5pbXBvcnQgeyBidWlsZCB9IGZyb20gXCIuL2NvbW1hbmRzL2J1aWxkLnRzXCJcbmltcG9ydCB7IGNsZWFyIH0gZnJvbSBcIi4vY29tbWFuZHMvY2xlYXIudHNcIlxuaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSBcIi4vY29tbWFuZHMvZXNjYXBlLnRzXCJcbmltcG9ydCB7IHByZXZpZXcgfSBmcm9tIFwiLi9jb21tYW5kcy9wcmV2aWV3LnRzXCJcbmltcG9ydCB7IHN0YXJ0IH0gZnJvbSBcIi4vY29tbWFuZHMvc3RhcnQudHNcIlxuaW1wb3J0IHsgaGVscENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9oZWxwZXJzL3Byb2dyYW0udHNcIlxuaW1wb3J0IHBhY2thZ2VKc29uIGZyb20gXCIuLi9wYWNrYWdlLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfVxuXG5leHBvcnQgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJsaXZlbWFya1wiKVxuICAuZGVzY3JpcHRpb24oXCJMaXZlbWFyayBzdGF0aWMgc2l0ZSBnZW5lcmF0b3JcIilcbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbiwgXCItdiwgLS12ZXJzaW9uXCIsIFwiZGlzcGxheSB0aGUgbGl2ZW1hcmsgdmVyc2lvblwiKVxuICAub3B0aW9uKFwiLWMsIC0tY29uZmlnIDxwYXRoPlwiLCBcInBhdGggdG8gY29uZmlnIGZpbGVcIilcbiAgLmNvbmZpZ3VyZUhlbHAoaGVscENvbmZpZ3VyYXRpb24pXG4gIC5hZGRDb21tYW5kKHN0YXJ0KVxuICAuYWRkQ29tbWFuZChidWlsZClcbiAgLmFkZENvbW1hbmQocHJldmlldylcbiAgLmFkZENvbW1hbmQoZXNjYXBlKVxuICAuYWRkQ29tbWFuZChjbGVhcilcbiJdfQ==
|
package/build/routes/$.d.ts
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const Route: import("@tanstack/router-core").Route<import("@tanstack/react-router").Register, any, "/$", "/$", "/$", "/$", z.ZodObject<{
|
|
3
|
+
highlight: z.ZodCatch<z.ZodOptional<z.ZodString>>;
|
|
4
|
+
}, z.core.$loose>, import("@tanstack/react-router").ResolveParams<"/$">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, ({ params }: import("@tanstack/router-core").LoaderFnContext<import("@tanstack/react-router").Register, any, "/$", import("@tanstack/react-router").ResolveParams<"/$">, {}, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, unknown, undefined>) => any, unknown, unknown, unknown, unknown, undefined>;
|
package/build/routes/$.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { config } from "livemark:virtual";
|
|
2
3
|
import { createFileRoute, notFound, redirect } from "@tanstack/react-router";
|
|
4
|
+
import { z } from "zod";
|
|
3
5
|
import { currentSection, firstArticle, homeArticle, sortedArticles, } from "../content/article.js";
|
|
4
6
|
import { sectionTags } from "../content/tag.js";
|
|
7
|
+
import { buildPageHead } from "../helpers/head.js";
|
|
5
8
|
import { Article } from "../components/Article.js";
|
|
6
9
|
import { BlogIndex } from "../components/BlogIndex.js";
|
|
7
10
|
import { ChangelogIndex } from "../components/ChangelogIndex.js";
|
|
11
|
+
import { Layout } from "../components/Layout.js";
|
|
8
12
|
import { TagIndex } from "../components/TagIndex.js";
|
|
9
13
|
export const Route = createFileRoute("/$")({
|
|
14
|
+
// Loose, so keys this route does not own (UTM tags, devtools flags) survive.
|
|
15
|
+
validateSearch: z.looseObject({ highlight: z.string().optional().catch(undefined) }),
|
|
10
16
|
loader: ({ params }) => {
|
|
11
17
|
if (!params._splat) {
|
|
12
18
|
if (homeArticle)
|
|
@@ -57,18 +63,23 @@ export const Route = createFileRoute("/$")({
|
|
|
57
63
|
}
|
|
58
64
|
throw notFound();
|
|
59
65
|
},
|
|
60
|
-
head: ({ loaderData }) => ({
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
head: ({ loaderData, params }) => buildPageHead({
|
|
67
|
+
config,
|
|
68
|
+
path: params._splat ? `/${params._splat}/` : "/",
|
|
69
|
+
title: loaderData?.title,
|
|
70
|
+
description: loaderData && "description" in loaderData ? loaderData.description : undefined,
|
|
71
|
+
image: loaderData && "image" in loaderData ? loaderData.image : undefined,
|
|
72
|
+
isArticle: loaderData && "file" in loaderData,
|
|
67
73
|
}),
|
|
68
74
|
component: Component,
|
|
69
75
|
});
|
|
70
76
|
function Component() {
|
|
71
77
|
const data = Route.useLoaderData();
|
|
78
|
+
return (_jsx(Layout, { withSidebar: data.sidebar, children: _jsx(Page, {}) }));
|
|
79
|
+
}
|
|
80
|
+
function Page() {
|
|
81
|
+
const data = Route.useLoaderData();
|
|
82
|
+
const search = Route.useSearch();
|
|
72
83
|
if ("blogIndex" in data) {
|
|
73
84
|
return _jsx(BlogIndex, { sectionPrefix: data.sectionPrefix });
|
|
74
85
|
}
|
|
@@ -78,6 +89,6 @@ function Component() {
|
|
|
78
89
|
if ("tagPage" in data) {
|
|
79
90
|
return _jsx(TagIndex, { sectionPrefix: data.sectionPrefix, tag: data.tag });
|
|
80
91
|
}
|
|
81
|
-
return _jsx(Article, { article: data });
|
|
92
|
+
return _jsx(Article, { article: data, highlight: search.highlight });
|
|
82
93
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiJC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9yb3V0ZXMvJC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQ3ZCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsWUFBWSxFQUNaLFdBQVcsRUFDWCxjQUFjLEdBQ2YsTUFBTSx1QkFBdUIsQ0FBQTtBQUM5QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMkIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTZCLENBQUE7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBMEIsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTRCLENBQUE7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6Qyw2RUFBNkU7SUFDN0UsY0FBYyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0lBQ3BGLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxD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azp2aXJ0dWFsXCJcbmltcG9ydCB7IGNyZWF0ZUZpbGVSb3V0ZSwgbm90Rm91bmQsIHJlZGlyZWN0IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgY3VycmVudFNlY3Rpb24sXG4gIGZpcnN0QXJ0aWNsZSxcbiAgaG9tZUFydGljbGUsXG4gIHNvcnRlZEFydGljbGVzLFxufSBmcm9tIFwiLi4vY29udGVudC9hcnRpY2xlLnRzXCJcbmltcG9ydCB7IHNlY3Rpb25UYWdzIH0gZnJvbSBcIi4uL2NvbnRlbnQvdGFnLnRzXCJcbmltcG9ydCB7IGJ1aWxkUGFnZUhlYWQgfSBmcm9tIFwiLi4vaGVscGVycy9oZWFkLnRzXCJcbmltcG9ydCB7IEFydGljbGUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9BcnRpY2xlLnRzeFwiXG5pbXBvcnQgeyBCbG9nSW5kZXggfSBmcm9tIFwiLi4vY29tcG9uZW50cy9CbG9nSW5kZXgudHN4XCJcbmltcG9ydCB7IENoYW5nZWxvZ0luZGV4IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvQ2hhbmdlbG9nSW5kZXgudHN4XCJcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuLi9jb21wb25lbnRzL0xheW91dC50c3hcIlxuaW1wb3J0IHsgVGFnSW5kZXggfSBmcm9tIFwiLi4vY29tcG9uZW50cy9UYWdJbmRleC50c3hcIlxuXG5leHBvcnQgY29uc3QgUm91dGUgPSBjcmVhdGVGaWxlUm91dGUoXCIvJFwiKSh7XG4gIC8vIExvb3NlLCBzbyBrZXlzIHRoaXMgcm91dGUgZG9lcyBub3Qgb3duIChVVE0gdGFncywgZGV2dG9vbHMgZmxhZ3MpIHN1cnZpdmUuXG4gIHZhbGlkYXRlU2VhcmNoOiB6Lmxvb3NlT2JqZWN0KHsgaGlnaGxpZ2h0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuY2F0Y2godW5kZWZpbmVkKSB9KSxcbiAgbG9hZGVyOiAoeyBwYXJhbXMgfSkgPT4ge1xuICAgIGlmICghcGFyYW1zLl9zcGxhdCkge1xuICAgICAgaWYgKGhvbWVBcnRpY2xlKSByZXR1cm4geyAuLi5ob21lQXJ0aWNsZSwgc2lkZWJhcjogaG9tZUFydGljbGUuc2lkZWJhciB9XG4gICAgICBpZiAoIWZpcnN0QXJ0aWNsZSkgdGhyb3cgbm90Rm91bmQoKVxuICAgICAgdGhyb3cgcmVkaXJlY3Qoe1xuICAgICAgICB0bzogXCIvJFwiLFxuICAgICAgICBwYXJhbXM6IHsgX3NwbGF0OiBmaXJzdEFydGljbGUucGF0aC5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIikgfSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IHNwbGF0ID0gYC8ke3BhcmFtcy5fc3BsYXR9L2BcbiAgICBjb25zdCBhcnRpY2xlID0gc29ydGVkQXJ0aWNsZXMuZmluZChhID0+IGEucGF0aCA9PT0gc3BsYXQpXG4gICAgaWYgKGFydGljbGUpIHJldHVybiBhcnRpY2xlXG5cbiAgICBjb25zdCBzZWN0aW9uID0gY3VycmVudFNlY3Rpb24oc3BsYXQpXG4gICAgaWYgKHNlY3Rpb24/LnR5cGUgPT09IFwiY2hhbmdlbG9nXCIgJiYgc2VjdGlvbi5wcmVmaXggPT09IHNwbGF0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGFuZ2Vsb2dJbmRleDogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgc2VjdGlvblByZWZpeDogc2VjdGlvbi5wcmVmaXgsXG4gICAgICAgIHRpdGxlOiBzZWN0aW9uLnRpdGxlLFxuICAgICAgICBzaWRlYmFyOiB0cnVlLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2VjdGlvbj8udHlwZSA9PT0gXCJibG9nXCIpIHtcbiAgICAgIGlmIChzZWN0aW9uLnByZWZpeCA9PT0gc3BsYXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBibG9nSW5kZXg6IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgc2VjdGlvblByZWZpeDogc2VjdGlvbi5wcmVmaXgsXG4gICAgICAgICAgdGl0bGU6IHNlY3Rpb24udGl0bGUsXG4gICAgICAgICAgc2lkZWJhcjogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YWdNYXRjaCA9IHNwbGF0Lm1hdGNoKG5ldyBSZWdFeHAoYF4ke3NlY3Rpb24ucHJlZml4fXRhZ3MvKFteL10rKS8kYCkpXG4gICAgICBjb25zdCB0YWcgPSB0YWdNYXRjaD8uWzFdXG4gICAgICBpZiAodGFnKSB7XG4gICAgICAgIGNvbnN0IHRhZ01hcCA9IHNlY3Rpb25UYWdzLmdldChzZWN0aW9uLnByZWZpeClcbiAgICAgICAgaWYgKHRhZ01hcD8uaGFzKHRhZykpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFnUGFnZTogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICAgIHNlY3Rpb25QcmVmaXg6IHNlY3Rpb24ucHJlZml4LFxuICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgdGl0bGU6IGBQb3N0cyB0YWdnZWQgJyR7dGFnfSdgLFxuICAgICAgICAgICAgc2lkZWJhcjogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBub3RGb3VuZCgpXG4gIH0sXG4gIGhlYWQ6ICh7IGxvYWRlckRhdGEsIHBhcmFtcyB9KSA9PlxuICAgIGJ1aWxkUGFnZUhlYWQoe1xuICAgICAgY29uZmlnLFxuICAgICAgcGF0aDogcGFyYW1zLl9zcGxhdCA/IGAvJHtwYXJhbXMuX3NwbGF0fS9gIDogXCIvXCIsXG4gICAgICB0aXRsZTogbG9hZGVyRGF0YT8udGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgbG9hZGVyRGF0YSAmJiBcImRlc2NyaXB0aW9uXCIgaW4gbG9hZGVyRGF0YSA/IGxvYWRlckRhdGEuZGVzY3JpcHRpb24gOiB1bmRlZmluZWQsXG4gICAgICBpbWFnZTogbG9hZGVyRGF0YSAmJiBcImltYWdlXCIgaW4gbG9hZGVyRGF0YSA/IGxvYWRlckRhdGEuaW1hZ2UgOiB1bmRlZmluZWQsXG4gICAgICBpc0FydGljbGU6IGxvYWRlckRhdGEgJiYgXCJmaWxlXCIgaW4gbG9hZGVyRGF0YSxcbiAgICB9KSxcbiAgY29tcG9uZW50OiBDb21wb25lbnQsXG59KVxuXG5mdW5jdGlvbiBDb21wb25lbnQoKSB7XG4gIGNvbnN0IGRhdGEgPSBSb3V0ZS51c2VMb2FkZXJEYXRhKClcbiAgcmV0dXJuIChcbiAgICA8TGF5b3V0IHdpdGhTaWRlYmFyPXtkYXRhLnNpZGViYXJ9PlxuICAgICAgPFBhZ2UgLz5cbiAgICA8L0xheW91dD5cbiAgKVxufVxuXG5mdW5jdGlvbiBQYWdlKCkge1xuICBjb25zdCBkYXRhID0gUm91dGUudXNlTG9hZGVyRGF0YSgpXG4gIGNvbnN0IHNlYXJjaCA9IFJvdXRlLnVzZVNlYXJjaCgpXG4gIGlmIChcImJsb2dJbmRleFwiIGluIGRhdGEpIHtcbiAgICByZXR1cm4gPEJsb2dJbmRleCBzZWN0aW9uUHJlZml4PXtkYXRhLnNlY3Rpb25QcmVmaXh9IC8+XG4gIH1cbiAgaWYgKFwiY2hhbmdlbG9nSW5kZXhcIiBpbiBkYXRhKSB7XG4gICAgcmV0dXJuIDxDaGFuZ2Vsb2dJbmRleCBzZWN0aW9uUHJlZml4PXtkYXRhLnNlY3Rpb25QcmVmaXh9IC8+XG4gIH1cbiAgaWYgKFwidGFnUGFnZVwiIGluIGRhdGEpIHtcbiAgICByZXR1cm4gPFRhZ0luZGV4IHNlY3Rpb25QcmVmaXg9e2RhdGEuc2VjdGlvblByZWZpeH0gdGFnPXtkYXRhLnRhZ30gLz5cbiAgfVxuICByZXR1cm4gPEFydGljbGUgYXJ0aWNsZT17ZGF0YX0gaGlnaGxpZ2h0PXtzZWFyY2guaGlnaGxpZ2h0fSAvPlxufVxuIl19
|