livemark 0.24.1 → 0.26.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 +6 -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-collections.js +5 -1
- 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/article-search.d.ts +19 -0
- package/build/helpers/article-search.js +134 -0
- 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 +53 -0
- package/build/helpers/head.js +69 -0
- package/build/helpers/head.unit.d.ts +1 -0
- package/build/helpers/head.unit.js +108 -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 +32 -6
- package/build/models/config.js +10 -1
- package/build/models/section.d.ts +4 -2
- package/build/models/section.js +1 -1
- package/build/plugins/vite-livemark.d.ts +4 -5
- package/build/plugins/vite-livemark.js +56 -90
- 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/package.json +68 -66
- package/{.agents/skills → skills}/livemark-authoring/SKILL.md +2 -2
- package/{.agents/skills → skills}/livemark-configuration/SKILL.md +12 -5
- package/skills/livemark-customization/SKILL.md +145 -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-collections.ts +4 -0
- 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/article-search.tsx +192 -0
- package/source/helpers/dependency-dir.ts +20 -0
- package/source/helpers/dependency-dir.unit.ts +39 -0
- package/source/helpers/head.ts +94 -0
- package/source/helpers/head.unit.ts +116 -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 +13 -0
- package/source/models/section.ts +3 -0
- package/source/plugins/vite-livemark.ts +54 -95
- 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/.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1saXZlbWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3ZpdGUtbGl2ZW1hcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ2xDLE9BQU8sV0FBVyxNQUFNLG9CQUFvQixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBTW5FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDbEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBRXBFOzs7Ozs7Ozs7Ozs7NkJBWTZCO0FBQzdCLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFBO0FBQ3JDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQTtBQUU3Qzs7OzttRUFJbUU7QUFDbkUsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFxQjtJQUM1QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUMzQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFDbEIsT0FBTztRQUNMLElBQUksRUFBRSxVQUFVO1FBQ2hCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRztZQUNqQixTQUFTLEdBQUcsV0FBVyxDQUFDO2dCQUN0QixVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO2dCQUNsQyxTQUFTLEVBQUUsVUFBVTthQUN0QixDQUFDLENBQUE7WUFDRixNQUFNLElBQUksR0FBbUI7Z0JBQzNCLElBQUksRUFBRSxTQUFTO2dCQUNmLGdFQUFnRTtnQkFDaEUsc0RBQXNEO2dCQUN0RCxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7Z0JBQ2xDLGtFQUFrRTtnQkFDbEUsaUVBQWlFO2dCQUNqRSxpRUFBaUU7Z0JBQ2pFLGtEQUFrRDtnQkFDbEQsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUc7Z0JBQ3JELDZEQUE2RDtnQkFDN0QscURBQXFEO2dCQUNyRCxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFDcEMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFO2dCQUMzQyw2REFBNkQ7Z0JBQzdELDJEQUEyRDtnQkFDM0QsK0RBQStEO2dCQUMvRCwwREFBMEQ7Z0JBQzFELDBEQUEwRDtnQkFDMUQsK0RBQStEO2dCQUMvRCxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSyxPQUFPLElBQUk7b0JBQzdCLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO2lCQUN6RCxDQUFDO2FBQ0gsQ0FBQTtZQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDakUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUN0RCxDQUFDO1FBQ0QsU0FBUyxDQUFDLEVBQUU7WUFDVixJQUFJLEVBQUUsS0FBSyxVQUFVO2dCQUFFLE9BQU8sbUJBQW1CLENBQUE7WUFDakQsT0FBTyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQTtRQUNyRixDQUFDO1FBQ0QsSUFBSSxDQUFDLEVBQUU7WUFDTCxJQUFJLEVBQUUsS0FBSyxtQkFBbUI7Z0JBQUUsT0FBTyxJQUFJLENBQUE7WUFDM0MsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU07Z0JBQzlCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxTQUFTLENBQUE7WUFDYixPQUFPO2dCQUNMLHlCQUF5QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqRCw2QkFBNkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTthQUMxRCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNkLENBQUM7UUFDRCxlQUFlLENBQUMsTUFBTTtZQUNwQixtRUFBbUU7WUFDbkUsZ0VBQWdFO1lBQ2hFLHNDQUFzQztZQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7WUFDM0QsSUFBSSxDQUFDLFlBQVk7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDakQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQzdELE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUN2RCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDN0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBRWhFLFNBQVMsUUFBUSxDQUFDLElBQVksRUFBRSxJQUFpQztnQkFDL0QsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO29CQUNoQixPQUFNO2dCQUNSLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO29CQUFFLE9BQU07Z0JBQy9ELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7Z0JBQ2pELElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2YsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFBO29CQUN2RCxPQUFNO2dCQUNSLENBQUM7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQTtnQkFDN0MsSUFBSSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7b0JBQzdELFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQTtnQkFDdkQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQTtBQUNILENBQUM7QUFPRCxTQUFTLFNBQVMsQ0FBQyxJQUFZLEVBQUUsSUFBWTtJQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7QUFDekMsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLElBQVksRUFBRSxHQUFXO0lBQ3pDLE9BQU8sSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUE7QUFDeEQsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLEdBQVc7SUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDN0IsSUFBSSxJQUFJLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sUUFBUSxDQUFBO0lBQzdELElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQTtJQUNoRCxtRUFBbUU7SUFDbkUsaUVBQWlFO0lBQ2pFLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUNsQixHQUFRLEVBQ1IsSUFBaUMsRUFDakMsU0FBaUIsRUFDakIsYUFBcUI7SUFFckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRO1FBQUUsT0FBTTtJQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QyxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QixxRUFBcUU7UUFDckUsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDMUQsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDaEQsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM5RSxPQUFNO0lBQ1IsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzVDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUNsRixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2pCLEdBQVEsRUFDUixJQUFpQyxFQUNqQyxTQUFpQixFQUNqQixhQUFxQjtJQUVyQixxRUFBcUU7SUFDckUsNENBQTRDO0lBQzVDLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFBRSxPQUFNO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzlDLE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQ2hGLENBQUM7QUFFRDs7O3FDQUdxQztBQUNyQyxLQUFLLFVBQVUsbUJBQW1CLENBQ2hDLElBQWEsRUFDYixHQUFjO0lBRWQsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUMxRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDekMsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUNyQyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBVTtJQUMxQixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFBO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcFN5bmMsIGV4aXN0c1N5bmMsIHJtU3luYywgc3RhdFN5bmMgfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgeyBqb2luLCBzZXAgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB0eXBlIHsgQ29uZmlnRW52LCBQbHVnaW4sIFVzZXJDb25maWcgYXMgVml0ZVVzZXJDb25maWcgfSBmcm9tIFwidml0ZVwiXG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBwYWNrYWdlSnNvbiBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH1cbmltcG9ydCB7IGJ1aWxkVGFyZ2V0IH0gZnJvbSBcIi4uL2FjdGlvbnMvdGFyZ2V0L2J1aWxkLnRzXCJcbmltcG9ydCB7IHJlbmRlcklubGluZU1hcmtkb3duIH0gZnJvbSBcIi4uL2hlbHBlcnMvcmVuZGVyLWlubGluZS1tYXJrZG93bi50c1wiXG5pbXBvcnQgeyByZXNvbHZlVGFyZ2V0RXhwb3J0IH0gZnJvbSBcIi4uL2hlbHBlcnMvdGFyZ2V0LWV4cG9ydC50c1wiXG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvY29uZmlnLnRzXCJcbmltcG9ydCB7IFdlYnNpdGVDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5pbXBvcnQgeyBFU0NBUEFCTEVfRklMRVMsIEVTQ0FQQUJMRV9GT0xERVJTIH0gZnJvbSBcIi4uL3NldHRpbmdzLnRzXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaXZlbWFya09wdGlvbnMge1xuICBjb25maWc6IENvbmZpZ1xufVxuXG5jb25zdCBTT1VSQ0VfRElSID0gam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIpXG5jb25zdCBJU19JTlNUQUxMRUQgPSBTT1VSQ0VfRElSLmluY2x1ZGVzKGAke3NlcH1ub2RlX21vZHVsZXMke3NlcH1gKVxuXG4vKiogU2luZ2xlIHZpcnR1YWwgbW9kdWxlIGV4cG9zaW5nIGxpdmVtYXJrJ3MgcnVudGltZSB2YWx1ZXMgdG8gY29uc3VtZXJcbiAqICBvdmVycmlkZSBmaWxlcyB2aWEgbmFtZWQgZXhwb3J0czpcbiAqXG4gKiAgICAgIGltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbiAqXG4gKiAgQ3VycmVudGx5IGV4cG9ydHMgYGNvbmZpZ2AgKHZhbGlkYXRlZCBgV2Vic2l0ZUNvbmZpZ2ApIGFuZCBgYmFubmVySHRtbGBcbiAqICAoYGNvbmZpZy5iYW5uZXJgIHJlbmRlcmVkIGZyb20gaW5saW5lIE1hcmtkb3duIGF0IGJ1aWxkIHRpbWUpOyBmdXR1cmVcbiAqICBhZGRpdGlvbnMgKGUuZy4gYGFydGljbGVzYCwgYHNlY3Rpb25zYCkgbGFuZCBoZXJlIGFzIG5ldyBuYW1lZFxuICogIGV4cG9ydHMgd2l0aG91dCBjb25zdW1lcnMgY2hhbmdpbmcgdGhlaXIgaW1wb3J0IHN0YXRlbWVudHMuXG4gKlxuICogIFRoZSBgXFwwYCBwcmVmaXggb24gdGhlIHJlc29sdmVkIGlkIGlzIFZpdGUncyBjb252ZW50aW9uIHRvIHNpZ25hbFxuICogIFwidGhpcyBpcyBhIHZpcnR1YWwgbW9kdWxlIOKAlCBubyBvdGhlciBwbHVnaW4gc2hvdWxkIHRyeSB0byByZXNvbHZlXG4gKiAgb3IgbG9hZCBpdCBmcm9tIGRpc2tcIi4gKi9cbmNvbnN0IFZJUlRVQUxfSUQgPSBcImxpdmVtYXJrOnZpcnR1YWxcIlxuY29uc3QgVklSVFVBTF9SRVNPTFZFRF9JRCA9IGBcXDAke1ZJUlRVQUxfSUR9YFxuXG4vKiogT3ducyB0aGUgcHJvamVjdCdzIGAubGl2ZW1hcmsvLnRhcmdldC9gIG1vdW50OiBzeW50aGVzaXplcyBpdCB2aWFcbiAqICBgYnVpbGRUYXJnZXQoKWAsIHJldHVybnMgdGhlIFZpdGUgY29uZmlnIHRoYXQgYW5jaG9ycyB0aGVyZSwgYW5kXG4gKiAgY29waWVzIGAubGl2ZW1hcmsvYCBlZGl0cyAocGx1cyBsaXZlbWFyaydzIGBzb3VyY2UvYCBpbiBpdHMgb3duIGRldilcbiAqICBpbnRvIHRoZSB0YXJnZXQuIFZpdGUgd2F0Y2hlcyB0aGUgdGFyZ2V0IG5hdGl2ZWx5LCBzbyBpdHMgb3duIEhNUlxuICogIGRlY2lkZXMgYmV0d2VlbiBGYXN0IFJlZnJlc2gsIENTUyB1cGRhdGVzIGFuZCBhIHBhZ2UgcmVsb2FkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpdmVtYXJrKG9wdHM6IExpdmVtYXJrT3B0aW9ucyk6IFBsdWdpbiB7XG4gIGNvbnN0IG92ZXJyaWRlc1Jvb3QgPSBqb2luKG9wdHMuY29uZmlnLnJvb3QsIFwiLmxpdmVtYXJrXCIpXG4gIGNvbnN0IG91dERpciA9IGpvaW4ob3ZlcnJpZGVzUm9vdCwgXCJidWlsZFwiKVxuICBsZXQgdGFyZ2V0RGlyID0gXCJcIlxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwibGl2ZW1hcmtcIixcbiAgICBlbmZvcmNlOiBcInByZVwiLFxuICAgIGFzeW5jIGNvbmZpZyhfLCBlbnYpIHtcbiAgICAgIHRhcmdldERpciA9IGJ1aWxkVGFyZ2V0KHtcbiAgICAgICAgY29uZmlnUGF0aDogb3B0cy5jb25maWcuY29uZmlnUGF0aCxcbiAgICAgICAgc291cmNlRGlyOiBTT1VSQ0VfRElSLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGJhc2U6IFZpdGVVc2VyQ29uZmlnID0ge1xuICAgICAgICByb290OiB0YXJnZXREaXIsXG4gICAgICAgIC8vIFRoZSBkZWZhdWx0IGA8cm9vdD4vbm9kZV9tb2R1bGVzLy52aXRlYCB3b3VsZCBsYW5kIGluc2lkZSB0aGVcbiAgICAgICAgLy8gZGVwZW5kZW5jeSBsaW5rLCBpLmUuIGluIGxpdmVtYXJrJ3Mgc2hhcmVkIGluc3RhbGwuXG4gICAgICAgIGNhY2hlRGlyOiBqb2luKHRhcmdldERpciwgXCIudml0ZVwiKSxcbiAgICAgICAgLy8gTW91bnQgZXZlcnl0aGluZyAoYXNzZXQgVVJMcywgbW9kdWxlcHJlbG9hZHMsIGRldiBzZXJ2ZXIpIHVuZGVyXG4gICAgICAgIC8vIGBjb25maWcuYmFzZWAgc28gdGhlIHNhbWUgYnVpbGQgd29ya3MgYXQgcm9vdCBvciBhdCBhIHN1Yi1wYXRoXG4gICAgICAgIC8vIChlLmcuIEdpdEh1YiBQYWdlcyBgaHR0cHM6Ly91c2VyLmdpdGh1Yi5pby9yZXBvL2ApLiBUaGUgcm91dGVyXG4gICAgICAgIC8vIGFuZCBhc3NldC1wYXRoIHJlc29sdmVyIG1pcnJvciB0aGlzIGF0IHJ1bnRpbWUuXG4gICAgICAgIGJhc2U6IG9wdHMuY29uZmlnLmJhc2UgPyBgJHtvcHRzLmNvbmZpZy5iYXNlfS9gIDogXCIvXCIsXG4gICAgICAgIC8vIG91dERpciBsaXZlcyBvdXRzaWRlIHRoZSB0YXJnZXQgcm9vdCwgc28gVml0ZSdzIHJlZnVzYWwgdG9cbiAgICAgICAgLy8gZW1wdHkgb3V0LW9mLXJvb3QgZGlyZWN0b3JpZXMgbmVlZHMgYGVtcHR5T3V0RGlyYC5cbiAgICAgICAgYnVpbGQ6IHsgb3V0RGlyLCBlbXB0eU91dERpcjogdHJ1ZSB9LFxuICAgICAgICByZXNvbHZlOiB7IGRlZHVwZTogW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIl0gfSxcbiAgICAgICAgLy8gRm9yIHRoZSBTU1IgYnVpbGQgb25seSwgaW5saW5lIGV2ZXJ5IG5vZGVfbW9kdWxlcyBkZXAgaW50b1xuICAgICAgICAvLyBzZXJ2ZXIuanMuIFRoZSBwcmVyZW5kZXIgc3RlcCAod2hpY2ggcnVucyBzZXJ2ZXIuanMgd2l0aFxuICAgICAgICAvLyBOb2RlKSB3YWxrcyBub2RlX21vZHVsZXMgZnJvbSB0aGUgYnVpbGQvIGRpciBhbmQgY2FuJ3QgcmVhY2hcbiAgICAgICAgLy8gcGFja2FnZXMgYnVyaWVkIGluIHBucG0ncyBgLnBucG0vKi9ub2RlX21vZHVsZXMvYCAoZS5nLlxuICAgICAgICAvLyBUYW5TdGFjay1pbnRlcm5hbCBhbGlhc2VzIGxpa2UgYGgzLXYyYCkuIFNlbGYtY29udGFpbmVkXG4gICAgICAgIC8vIGJ1bmRsZSBieXBhc3NlcyB0aGUgaXNzdWUuIERldiBTU1Iga2VlcHMgZXh0ZXJuYWxzIChmYXN0ZXIpLlxuICAgICAgICAuLi4oZW52LmNvbW1hbmQgPT09IFwiYnVpbGRcIiAmJiB7XG4gICAgICAgICAgZW52aXJvbm1lbnRzOiB7IHNzcjogeyByZXNvbHZlOiB7IG5vRXh0ZXJuYWw6IHRydWUgfSB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgfVxuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBhd2FpdCByZXNvbHZlVml0ZU92ZXJyaWRlKG9wdHMuY29uZmlnLnZpdGUsIGVudilcbiAgICAgIHJldHVybiBvdmVycmlkZSA/IG1lcmdlQ29uZmlnKGJhc2UsIG92ZXJyaWRlKSA6IGJhc2VcbiAgICB9LFxuICAgIHJlc29sdmVJZChpZCkge1xuICAgICAgaWYgKGlkID09PSBWSVJUVUFMX0lEKSByZXR1cm4gVklSVFVBTF9SRVNPTFZFRF9JRFxuICAgICAgcmV0dXJuIHJlc29sdmVUYXJnZXRFeHBvcnQoeyBpZCwgdGFyZ2V0RGlyLCBleHBvcnRzOiBwYWNrYWdlSnNvbi5leHBvcnRzIH0pID8/IG51bGxcbiAgICB9LFxuICAgIGxvYWQoaWQpIHtcbiAgICAgIGlmIChpZCAhPT0gVklSVFVBTF9SRVNPTFZFRF9JRCkgcmV0dXJuIG51bGxcbiAgICAgIGNvbnN0IGNvbmZpZyA9IFdlYnNpdGVDb25maWcucGFyc2Uob3B0cy5jb25maWcpXG4gICAgICBjb25zdCBiYW5uZXJIdG1sID0gY29uZmlnLmJhbm5lclxuICAgICAgICA/IHJlbmRlcklubGluZU1hcmtkb3duKGNvbmZpZy5iYW5uZXIsIGNvbmZpZy5iYXNlKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYGV4cG9ydCBjb25zdCBjb25maWcgPSAke0pTT04uc3RyaW5naWZ5KGNvbmZpZyl9YCxcbiAgICAgICAgYGV4cG9ydCBjb25zdCBiYW5uZXJIdG1sID0gJHtKU09OLnN0cmluZ2lmeShiYW5uZXJIdG1sKX1gLFxuICAgICAgXS5qb2luKFwiXFxuXCIpXG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7XG4gICAgICAvLyBWaXRlIHdhdGNoZXMgb25seSBpdHMgcm9vdCAodGhlIHRhcmdldCk7IHRoZSBmaWxlcyB0aGUgdGFyZ2V0IGlzXG4gICAgICAvLyBjb3BpZWQgZnJvbSBqb2luIGl0cyB3YXRjaGVyIGhlcmUuIGAubGl2ZW1hcmsvYCBhbHdheXMgZXhpc3RzXG4gICAgICAvLyBiZWNhdXNlIHRoZSB0YXJnZXQgbGl2ZXMgaW5zaWRlIGl0LlxuICAgICAgc2VydmVyLndhdGNoZXIuYWRkKFtvcHRzLmNvbmZpZy5jb25maWdQYXRoLCBvdmVycmlkZXNSb290XSlcbiAgICAgIGlmICghSVNfSU5TVEFMTEVEKSBzZXJ2ZXIud2F0Y2hlci5hZGQoU09VUkNFX0RJUilcbiAgICAgIHNlcnZlci53YXRjaGVyLm9uKFwiY2hhbmdlXCIsIGZpbGUgPT4gb25DaGFuZ2UoZmlsZSwgXCJjaGFuZ2VcIikpXG4gICAgICBzZXJ2ZXIud2F0Y2hlci5vbihcImFkZFwiLCBmaWxlID0+IG9uQ2hhbmdlKGZpbGUsIFwiYWRkXCIpKVxuICAgICAgc2VydmVyLndhdGNoZXIub24oXCJ1bmxpbmtcIiwgZmlsZSA9PiBvbkNoYW5nZShmaWxlLCBcInVubGlua1wiKSlcbiAgICAgIHNlcnZlci53YXRjaGVyLm9uKFwidW5saW5rRGlyXCIsIGZpbGUgPT4gb25DaGFuZ2UoZmlsZSwgXCJ1bmxpbmtcIikpXG5cbiAgICAgIGZ1bmN0aW9uIG9uQ2hhbmdlKGZpbGU6IHN0cmluZywga2luZDogXCJjaGFuZ2VcIiB8IFwiYWRkXCIgfCBcInVubGlua1wiKSB7XG4gICAgICAgIGlmIChmaWxlID09PSBvcHRzLmNvbmZpZy5jb25maWdQYXRoKSB7XG4gICAgICAgICAgc2VydmVyLnJlc3RhcnQoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1dpdGhpbihmaWxlLCB0YXJnZXREaXIpIHx8IGlzV2l0aGluKGZpbGUsIG91dERpcikpIHJldHVyblxuICAgICAgICBjb25zdCBvdmVybGF5SGl0ID0gbWF0Y2hQYXRoKGZpbGUsIG92ZXJyaWRlc1Jvb3QpXG4gICAgICAgIGlmIChvdmVybGF5SGl0KSB7XG4gICAgICAgICAgc3luY092ZXJsYXkob3ZlcmxheUhpdCwga2luZCwgdGFyZ2V0RGlyLCBvdmVycmlkZXNSb290KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZUhpdCA9IG1hdGNoUGF0aChmaWxlLCBTT1VSQ0VfRElSKVxuICAgICAgICBpZiAoc291cmNlSGl0ICYmICFzb3VyY2VIaXQucmVsLmluY2x1ZGVzKFwicm91dGVUcmVlLmdlbi50c1wiKSkge1xuICAgICAgICAgIHN5bmNTb3VyY2Uoc291cmNlSGl0LCBraW5kLCB0YXJnZXREaXIsIG92ZXJyaWRlc1Jvb3QpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9XG59XG5cbmludGVyZmFjZSBIaXQge1xuICByZWw6IHN0cmluZ1xuICBjYXRlZ29yeTogXCJmb2xkZXJcIiB8IFwiZmlsZVwiIHwgbnVsbFxufVxuXG5mdW5jdGlvbiBtYXRjaFBhdGgoZmlsZTogc3RyaW5nLCByb290OiBzdHJpbmcpOiBIaXQgfCBudWxsIHtcbiAgaWYgKCFpc1dpdGhpbihmaWxlLCByb290KSB8fCBmaWxlID09PSByb290KSByZXR1cm4gbnVsbFxuICBjb25zdCByZWwgPSBmaWxlLnNsaWNlKHJvb3QubGVuZ3RoICsgc2VwLmxlbmd0aClcbiAgcmV0dXJuIHsgcmVsLCBjYXRlZ29yeTogY2xhc3NpZnkocmVsKSB9XG59XG5cbmZ1bmN0aW9uIGlzV2l0aGluKGZpbGU6IHN0cmluZywgZGlyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZpbGUgPT09IGRpciB8fCBmaWxlLnN0YXJ0c1dpdGgoYCR7ZGlyfSR7c2VwfWApXG59XG5cbmZ1bmN0aW9uIGNsYXNzaWZ5KHJlbDogc3RyaW5nKTogXCJmb2xkZXJcIiB8IFwiZmlsZVwiIHwgbnVsbCB7XG4gIGNvbnN0IFtoZWFkXSA9IHJlbC5zcGxpdChzZXApXG4gIGlmIChoZWFkICYmIEVTQ0FQQUJMRV9GT0xERVJTLmluY2x1ZGVzKGhlYWQpKSByZXR1cm4gXCJmb2xkZXJcIlxuICBpZiAoRVNDQVBBQkxFX0ZJTEVTLmluY2x1ZGVzKHJlbCkpIHJldHVybiBcImZpbGVcIlxuICAvLyBOb24tZXNjYXBhYmxlIHNvdXJjZSBmaWxlcyBzdGlsbCBuZWVkIHRvIGZsb3cgaW50byB0YXJnZXQgZHVyaW5nXG4gIC8vIGxpdmVtYXJrJ3Mgb3duIGRldiDigJQgdGhlIHVzZXIgaXMgZWRpdGluZyB0aGUgY2Fub25pY2FsIHNvdXJjZS5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gc3luY092ZXJsYXkoXG4gIGhpdDogSGl0LFxuICBraW5kOiBcImNoYW5nZVwiIHwgXCJhZGRcIiB8IFwidW5saW5rXCIsXG4gIHRhcmdldERpcjogc3RyaW5nLFxuICBvdmVycmlkZXNSb290OiBzdHJpbmcsXG4pIHtcbiAgaWYgKCFoaXQuY2F0ZWdvcnkpIHJldHVyblxuICBjb25zdCBkZXN0ID0gam9pbih0YXJnZXREaXIsIGhpdC5yZWwpXG4gIGNvbnN0IHNvdXJjZSA9IGpvaW4oU09VUkNFX0RJUiwgaGl0LnJlbClcbiAgaWYgKGtpbmQgPT09IFwidW5saW5rXCIpIHtcbiAgICAvLyBDb3B5IGEgZmlsZSdzIGRlZmF1bHQgb3ZlciB0aGUgZXNjYXBlIGluIG9uZSB3cml0ZTogYW4gdW5saW5rIHRoZW5cbiAgICAvLyBhbiBhZGQgcmVhY2hlcyBWaXRlIGFzIHR3byBldmVudHMgYW5kIGNvc3RzIGEgcGFnZSByZWxvYWQuXG4gICAgaWYgKCFleGlzdHNTeW5jKHNvdXJjZSkgfHwgc3RhdFN5bmMoc291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBybVN5bmMoZGVzdCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgfVxuICAgIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIGNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IG92ZXJsYXkgPSBqb2luKG92ZXJyaWRlc1Jvb3QsIGhpdC5yZWwpXG4gIGlmIChleGlzdHNTeW5jKG92ZXJsYXkpKSBjcFN5bmMob3ZlcmxheSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG59XG5cbmZ1bmN0aW9uIHN5bmNTb3VyY2UoXG4gIGhpdDogSGl0LFxuICBraW5kOiBcImNoYW5nZVwiIHwgXCJhZGRcIiB8IFwidW5saW5rXCIsXG4gIHRhcmdldERpcjogc3RyaW5nLFxuICBvdmVycmlkZXNSb290OiBzdHJpbmcsXG4pIHtcbiAgLy8gSWYgdGhlIGNvbnN1bWVyIGhhcyBhbiBvdmVybGF5IGZvciB0aGlzIGZpbGUgKGFuZCBpdCdzIGVzY2FwYWJsZSksXG4gIC8vIHRoZSBvdmVybGF5IHdpbnMg4oCUIGlnbm9yZSBzb3VyY2UgY2hhbmdlcy5cbiAgaWYgKGhpdC5jYXRlZ29yeSAmJiBleGlzdHNTeW5jKGpvaW4ob3ZlcnJpZGVzUm9vdCwgaGl0LnJlbCkpKSByZXR1cm5cbiAgY29uc3QgZGVzdCA9IGpvaW4odGFyZ2V0RGlyLCBoaXQucmVsKVxuICBjb25zdCBzb3VyY2UgPSBqb2luKFNPVVJDRV9ESVIsIGhpdC5yZWwpXG4gIGlmIChraW5kID09PSBcInVubGlua1wiKSB7XG4gICAgcm1TeW5jKGRlc3QsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleGlzdHNTeW5jKHNvdXJjZSkpIGNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG4vKiogUmVzb2x2ZSBsaXZlbWFyay5jb25maWcudHMncyBgdml0ZWAgZmllbGQg4oCUIGVpdGhlciBhIGNvbmZpZyBvYmplY3RcbiAqICBvciBhIGZ1bmN0aW9uIGAoZW52KSA9PiBjb25maWdgIChtYXRjaGluZyBWaXRlJ3Mgb3duIGBkZWZpbmVDb25maWdgKS5cbiAqICBTY2hlbWEgc3RvcmVzIGl0IGFzIGB1bmtub3duYDsgdHlwaW5nIGZvciB0aGUgY29uc3VtZXIncyBlZGl0b3JcbiAqICBsaXZlcyBvbiB7QGxpbmsgVml0ZU92ZXJyaWRlfS4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWaXRlT3ZlcnJpZGUoXG4gIHZpdGU6IHVua25vd24sXG4gIGVudjogQ29uZmlnRW52LFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw+IHtcbiAgaWYgKCF2aXRlKSByZXR1cm4gbnVsbFxuICBpZiAodHlwZW9mIHZpdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFJlZmxlY3QuYXBwbHkodml0ZSwgdW5kZWZpbmVkLCBbZW52XSlcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IG51bGxcbiAgfVxuICByZXR1cm4gaXNPYmplY3Qodml0ZSkgPyB2aXRlIDogbnVsbFxufVxuXG5mdW5jdGlvbiBpc09iamVjdCh2OiB1bmtub3duKTogdiBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2ICE9PSBudWxsICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiXG59XG4iXX0=
|
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
|
package/build/routes/__root.js
CHANGED
|
@@ -1,83 +1,49 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { config } from "livemark:virtual";
|
|
3
3
|
import { TanStackDevtools } from "@tanstack/react-devtools";
|
|
4
4
|
import { ReactQueryDevtoolsPanel } from "@tanstack/react-query-devtools";
|
|
5
|
-
import { createRootRoute, HeadContent, Outlet, Scripts
|
|
5
|
+
import { createRootRoute, HeadContent, Outlet, Scripts } from "@tanstack/react-router";
|
|
6
6
|
import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools";
|
|
7
|
+
import { useEffect } from "react";
|
|
7
8
|
import { Layout } from "../components/Layout.js";
|
|
9
|
+
import { Root } from "../components/Root.js";
|
|
8
10
|
import { DefaultCatchBoundary } from "../components/DefaultCatchBoundary.js";
|
|
9
11
|
import { NotFound } from "../components/NotFound.js";
|
|
12
|
+
import { useHydrated } from "../hooks/hydrated.js";
|
|
10
13
|
import { Toaster } from "../elements/sonner.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
14
|
+
import { buildRootHead } from "../helpers/head.js";
|
|
15
|
+
import { startTheme } from "../helpers/theme.js";
|
|
16
|
+
import { customizeHead } from "../head.js";
|
|
13
17
|
import defaultFavicon from "../assets/logo.svg";
|
|
14
18
|
import generalCss from "../styles/general.css?url";
|
|
15
19
|
import markdownCss from "../styles/markdown.css?url";
|
|
16
20
|
export const Route = createRootRoute({
|
|
17
|
-
head: () => {
|
|
18
|
-
|
|
19
|
-
const feedLinks = config.site
|
|
20
|
-
? (config.sections ?? [])
|
|
21
|
-
.filter(s => s.type === "blog")
|
|
22
|
-
.map(s => ({
|
|
23
|
-
rel: "alternate",
|
|
24
|
-
type: "application/rss+xml",
|
|
25
|
-
title: `${s.siteTitle ?? s.title} RSS Feed`,
|
|
26
|
-
href: prefixUrl(`${s.prefix}rss.xml`, config.base),
|
|
27
|
-
}))
|
|
28
|
-
: [];
|
|
29
|
-
return {
|
|
30
|
-
meta: [
|
|
31
|
-
{ charSet: "utf-8" },
|
|
32
|
-
{ title: config.title },
|
|
33
|
-
{ name: "description", content: config.description },
|
|
34
|
-
{ property: "og:title", content: config.title },
|
|
35
|
-
{
|
|
36
|
-
property: "og:description",
|
|
37
|
-
content: config.description,
|
|
38
|
-
},
|
|
39
|
-
{ property: "og:site_name", content: config.title },
|
|
40
|
-
{ property: "og:type", content: "website" },
|
|
41
|
-
{
|
|
42
|
-
name: "viewport",
|
|
43
|
-
content: "width=device-width, initial-scale=1",
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
links: [
|
|
47
|
-
{ rel: "icon", href: favicon, type: faviconType(favicon) },
|
|
48
|
-
{ rel: "shortcut icon", href: favicon, type: faviconType(favicon) },
|
|
49
|
-
{ rel: "stylesheet", href: generalCss },
|
|
50
|
-
{ rel: "stylesheet", href: markdownCss },
|
|
51
|
-
...feedLinks,
|
|
52
|
-
],
|
|
53
|
-
};
|
|
54
|
-
},
|
|
55
|
-
notFoundComponent: () => _jsx(NotFound, {}),
|
|
21
|
+
head: () => customizeHead(buildRootHead({ config, defaultFavicon, stylesheets: [generalCss, markdownCss] })),
|
|
22
|
+
notFoundComponent: () => (_jsx(Layout, { children: _jsx(NotFound, {}) })),
|
|
56
23
|
errorComponent: props => {
|
|
57
|
-
return (_jsx(Document, { children: _jsx(DefaultCatchBoundary, { ...props }) }));
|
|
24
|
+
return (_jsx(Document, { children: _jsx(Layout, { children: _jsx(DefaultCatchBoundary, { ...props }) }) }));
|
|
58
25
|
},
|
|
59
26
|
component: () => {
|
|
60
27
|
return (_jsx(Document, { children: _jsx(Outlet, {}) }));
|
|
61
28
|
},
|
|
62
29
|
});
|
|
63
30
|
function Document(props) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
] }));
|
|
31
|
+
// Off the raw URL, not the router's parsed search: a route whose validateSearch
|
|
32
|
+
// does not declare this key strips it.
|
|
33
|
+
const hydrated = useHydrated();
|
|
34
|
+
const devtools = hydrated && window.location.search.includes("tanstack-devtools");
|
|
35
|
+
useEffect(startTheme, []);
|
|
36
|
+
return (_jsxs("html", { lang: "en", suppressHydrationWarning: true, children: [_jsx("head", { children: _jsx(HeadContent, {}) }), _jsxs("body", { children: [_jsx(Root, { children: props.children }), _jsx(Toaster, { position: "top-center" }), devtools && (_jsx(_Fragment, { children: _jsx(TanStackDevtools, { config: { requireUrlFlag: true, position: "bottom-left" }, plugins: [
|
|
37
|
+
{
|
|
38
|
+
name: "TanStack Query",
|
|
39
|
+
render: _jsx(ReactQueryDevtoolsPanel, {}),
|
|
40
|
+
defaultOpen: true,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "TanStack Router",
|
|
44
|
+
render: _jsx(TanStackRouterDevtoolsPanel, {}),
|
|
45
|
+
defaultOpen: false,
|
|
46
|
+
},
|
|
47
|
+
] }) })), _jsx(Scripts, {})] })] }));
|
|
82
48
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX19yb290LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3JvdXRlcy9fX3Jvb3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3RGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBRTdFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUEwQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBd0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBd0MsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTRCLENBQUE7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBd0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDMUMsT0FBTyxjQUFjLE1BQU0sb0JBQW9CLENBQUE7QUFDL0MsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUE7QUFDbEQsT0FBTyxXQUFXLE1BQU0sNEJBQTRCLENBQUE7QUFFcEQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQztJQUNuQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQ1QsYUFBYSxDQUNYLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FDbEY7SUFDSCxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUN2QixLQUFDLE1BQU0sY0FDTCxLQUFDLFFBQVEsS0FBRyxHQUNMLENBQ1Y7SUFDRCxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUNMLEtBQUMsUUFBUSxjQUNQLEtBQUMsTUFBTSxjQUNMLEtBQUMsb0JBQW9CLE9BQUssS0FBSyxHQUFJLEdBQzVCLEdBQ0EsQ0FDWixDQUFBO0lBQ0gsQ0FBQztJQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDZCxPQUFPLENBQ0wsS0FBQyxRQUFRLGNBQ1AsS0FBQyxNQUFNLEtBQUcsR0FDRCxDQUNaLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQyxDQUFBO0FBRUYsU0FBUyxRQUFRLENBQUMsS0FBb0M7SUFDcEQsZ0ZBQWdGO0lBQ2hGLHVDQUF1QztJQUN2QyxNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQTtJQUM5QixNQUFNLFFBQVEsR0FBRyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFFakYsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUV6QixPQUFPLENBQ0wsZ0JBQU0sSUFBSSxFQUFDLElBQUksRUFBQyx3QkFBd0IsbUJBQ3RDLHlCQUNFLEtBQUMsV0FBVyxLQUFHLEdBQ1YsRUFDUCwyQkFDRSxLQUFDLElBQUksY0FBRSxLQUFLLENBQUMsUUFBUSxHQUFRLEVBQzdCLEtBQUMsT0FBTyxJQUFDLFFBQVEsRUFBQyxZQUFZLEdBQUcsRUFNaEMsUUFBUSxJQUFJLENBQ1gsNEJBQ0UsS0FBQyxnQkFBZ0IsSUFDZixNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsRUFDekQsT0FBTyxFQUFFO2dDQUNQO29DQUNFLElBQUksRUFBRSxnQkFBZ0I7b0NBQ3RCLE1BQU0sRUFBRSxLQUFDLHVCQUF1QixLQUFHO29DQUNuQyxXQUFXLEVBQUUsSUFBSTtpQ0FDbEI7Z0NBQ0Q7b0NBQ0UsSUFBSSxFQUFFLGlCQUFpQjtvQ0FDdkIsTUFBTSxFQUFFLEtBQUMsMkJBQTJCLEtBQUc7b0NBQ3ZDLFdBQVcsRUFBRSxLQUFLO2lDQUNuQjs2QkFDRixHQUNELEdBQ0QsQ0FDSixFQUNELEtBQUMsT0FBTyxLQUFHLElBQ04sSUFDRixDQUNSLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcImxpdmVtYXJrOnZpcnR1YWxcIlxuaW1wb3J0IHsgVGFuU3RhY2tEZXZ0b29scyB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtZGV2dG9vbHNcIlxuaW1wb3J0IHsgUmVhY3RRdWVyeURldnRvb2xzUGFuZWwgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5LWRldnRvb2xzXCJcbmltcG9ydCB7IGNyZWF0ZVJvb3RSb3V0ZSwgSGVhZENvbnRlbnQsIE91dGxldCwgU2NyaXB0cyB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCJcbmltcG9ydCB7IFRhblN0YWNrUm91dGVyRGV2dG9vbHNQYW5lbCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyLWRldnRvb2xzXCJcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9MYXlvdXQudHN4XCJcbmltcG9ydCB7IFJvb3QgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9Sb290LnRzeFwiXG5pbXBvcnQgeyBEZWZhdWx0Q2F0Y2hCb3VuZGFyeSB9IGZyb20gXCIuLi9jb21wb25lbnRzL0RlZmF1bHRDYXRjaEJvdW5kYXJ5LnRzeFwiXG5pbXBvcnQgeyBOb3RGb3VuZCB9IGZyb20gXCIuLi9jb21wb25lbnRzL05vdEZvdW5kLnRzeFwiXG5pbXBvcnQgeyB1c2VIeWRyYXRlZCB9IGZyb20gXCIuLi9ob29rcy9oeWRyYXRlZC50c1wiXG5pbXBvcnQgeyBUb2FzdGVyIH0gZnJvbSBcIi4uL2VsZW1lbnRzL3Nvbm5lci50c3hcIlxuaW1wb3J0IHsgYnVpbGRSb290SGVhZCB9IGZyb20gXCIuLi9oZWxwZXJzL2hlYWQudHNcIlxuaW1wb3J0IHsgc3RhcnRUaGVtZSB9IGZyb20gXCIuLi9oZWxwZXJzL3RoZW1lLnRzXCJcbmltcG9ydCB7IGN1c3RvbWl6ZUhlYWQgfSBmcm9tIFwiLi4vaGVhZC50c1wiXG5pbXBvcnQgZGVmYXVsdEZhdmljb24gZnJvbSBcIi4uL2Fzc2V0cy9sb2dvLnN2Z1wiXG5pbXBvcnQgZ2VuZXJhbENzcyBmcm9tIFwiLi4vc3R5bGVzL2dlbmVyYWwuY3NzP3VybFwiXG5pbXBvcnQgbWFya2Rvd25Dc3MgZnJvbSBcIi4uL3N0eWxlcy9tYXJrZG93bi5jc3M/dXJsXCJcblxuZXhwb3J0IGNvbnN0IFJvdXRlID0gY3JlYXRlUm9vdFJvdXRlKHtcbiAgaGVhZDogKCkgPT5cbiAgICBjdXN0b21pemVIZWFkKFxuICAgICAgYnVpbGRSb290SGVhZCh7IGNvbmZpZywgZGVmYXVsdEZhdmljb24sIHN0eWxlc2hlZXRzOiBbZ2VuZXJhbENzcywgbWFya2Rvd25Dc3NdIH0pLFxuICAgICksXG4gIG5vdEZvdW5kQ29tcG9uZW50OiAoKSA9PiAoXG4gICAgPExheW91dD5cbiAgICAgIDxOb3RGb3VuZCAvPlxuICAgIDwvTGF5b3V0PlxuICApLFxuICBlcnJvckNvbXBvbmVudDogcHJvcHMgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RG9jdW1lbnQ+XG4gICAgICAgIDxMYXlvdXQ+XG4gICAgICAgICAgPERlZmF1bHRDYXRjaEJvdW5kYXJ5IHsuLi5wcm9wc30gLz5cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L0RvY3VtZW50PlxuICAgIClcbiAgfSxcbiAgY29tcG9uZW50OiAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEb2N1bWVudD5cbiAgICAgICAgPE91dGxldCAvPlxuICAgICAgPC9Eb2N1bWVudD5cbiAgICApXG4gIH0sXG59KVxuXG5mdW5jdGlvbiBEb2N1bWVudChwcm9wczogeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0pIHtcbiAgLy8gT2ZmIHRoZSByYXcgVVJMLCBub3QgdGhlIHJvdXRlcidzIHBhcnNlZCBzZWFyY2g6IGEgcm91dGUgd2hvc2UgdmFsaWRhdGVTZWFyY2hcbiAgLy8gZG9lcyBub3QgZGVjbGFyZSB0aGlzIGtleSBzdHJpcHMgaXQuXG4gIGNvbnN0IGh5ZHJhdGVkID0gdXNlSHlkcmF0ZWQoKVxuICBjb25zdCBkZXZ0b29scyA9IGh5ZHJhdGVkICYmIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guaW5jbHVkZXMoXCJ0YW5zdGFjay1kZXZ0b29sc1wiKVxuXG4gIHVzZUVmZmVjdChzdGFydFRoZW1lLCBbXSlcblxuICByZXR1cm4gKFxuICAgIDxodG1sIGxhbmc9XCJlblwiIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZz5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8SGVhZENvbnRlbnQgLz5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8Um9vdD57cHJvcHMuY2hpbGRyZW59PC9Sb290PlxuICAgICAgICA8VG9hc3RlciBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIiAvPlxuICAgICAgICB7LyogR2F0ZWQgaGVyZSwgbm90IGJ5IHRoZSBkZXZ0b29scycgb3duIGByZXF1aXJlVXJsRmxhZ2A6IHRoYXQgc2V0dGluZyBzZWVkc1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlIG9uIGEgYnJvd3NlcidzIGZpcnN0IHJ1biBhbmQgaXMgcmVhZCBmcm9tIHRoZXJlIGFmdGVyd2FyZHMsXG4gICAgICAgICAgICBzbyBhIGJyb3dzZXIgdGhhdCBsb2FkZWQgdGhlIHNpdGUgYmVmb3JlIGl0IHdhcyBzZXQga2VlcHMgdGhlIHRyaWdnZXIuICovfVxuICAgICAgICB7LyogVGhlIGJ1aWxkIHN0cmlwcyB0aGUgZGV2dG9vbHMgZWxlbWVudCBhbG9uZTsgdGhlIGZyYWdtZW50IGtlZXBzXG4gICAgICAgICAgICBgZGV2dG9vbHMgJiYgKDw+PC8+KWAgdmFsaWQgaW5zdGVhZCBvZiB0aGUgc3ludGF4IGVycm9yIGAmJiAoKWAuICovfVxuICAgICAgICB7ZGV2dG9vbHMgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8VGFuU3RhY2tEZXZ0b29sc1xuICAgICAgICAgICAgICBjb25maWc9e3sgcmVxdWlyZVVybEZsYWc6IHRydWUsIHBvc2l0aW9uOiBcImJvdHRvbS1sZWZ0XCIgfX1cbiAgICAgICAgICAgICAgcGx1Z2lucz17W1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGFuU3RhY2sgUXVlcnlcIixcbiAgICAgICAgICAgICAgICAgIHJlbmRlcjogPFJlYWN0UXVlcnlEZXZ0b29sc1BhbmVsIC8+LFxuICAgICAgICAgICAgICAgICAgZGVmYXVsdE9wZW46IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIlRhblN0YWNrIFJvdXRlclwiLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyOiA8VGFuU3RhY2tSb3V0ZXJEZXZ0b29sc1BhbmVsIC8+LFxuICAgICAgICAgICAgICAgICAgZGVmYXVsdE9wZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICA8U2NyaXB0cyAvPlxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKVxufVxuIl19
|