livemark 0.23.0 → 0.24.1
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/.agents/skills/change-review/SKILL.md +47 -0
- package/{skills/configuration → .agents/skills/livemark-configuration}/SKILL.md +2 -4
- package/build/actions/changelog/build.d.ts +21 -9
- package/build/actions/changelog/build.js +31 -23
- package/build/actions/changelog/build.unit.js +156 -2
- package/build/actions/config/load.js +1 -1
- package/build/actions/config/load.unit.js +1 -1
- package/build/actions/target/build.js +2 -5
- package/build/commands/build.js +1 -1
- package/build/commands/escape.js +1 -1
- package/build/commands/preview.js +1 -1
- package/build/commands/start.js +1 -1
- package/build/components/Abbr.js +2 -2
- package/build/components/Article.js +2 -2
- package/build/components/BlogIndex.js +2 -4
- package/build/components/Callout.js +2 -2
- package/build/components/ChangelogIndex.js +1 -1
- package/build/components/CodeBlock.js +3 -5
- package/build/components/CodeTabs.js +1 -1
- package/build/components/Columns.js +2 -4
- package/build/components/Content.js +2 -2
- package/build/components/ContentTab.js +1 -1
- package/build/components/ContentTabs.js +1 -1
- package/build/components/DefinitionList.js +1 -1
- package/build/components/FileTree.js +1 -1
- package/build/components/FootnoteRef.js +2 -2
- package/build/components/InlineToc.js +1 -1
- package/build/components/Layout.js +1 -1
- package/build/components/LinkButton.js +2 -2
- package/build/components/Mermaid.js +1 -1
- package/build/components/PackageTabs.js +2 -2
- package/build/components/PageToolbar.js +2 -2
- package/build/components/PrevNext.js +3 -7
- package/build/components/SearchDialog.js +1 -1
- package/build/components/Section.js +2 -2
- package/build/components/SectionHeader.js +2 -2
- package/build/components/Sidebar.js +2 -2
- package/build/components/SidebarArticles.js +2 -2
- package/build/components/SidebarLinks.js +2 -2
- package/build/components/TagIndex.js +2 -4
- package/build/components/Toc.js +1 -1
- package/build/content/article.js +1 -1
- package/build/content-collections.js +6 -7
- package/build/elements/accordion.js +2 -2
- package/build/elements/alert-dialog.js +5 -5
- package/build/elements/alert.js +2 -2
- package/build/elements/aspect-ratio.js +2 -2
- package/build/elements/avatar.d.ts +1 -1
- package/build/elements/avatar.js +3 -3
- package/build/elements/badge.js +2 -2
- package/build/elements/breadcrumb.js +2 -2
- package/build/elements/button-group.d.ts +1 -1
- package/build/elements/button-group.js +3 -3
- package/build/elements/button.js +2 -2
- package/build/elements/calendar.js +5 -5
- package/build/elements/card.js +2 -2
- package/build/elements/carousel.js +2 -2
- package/build/elements/chart.js +5 -15
- package/build/elements/checkbox.js +2 -2
- package/build/elements/collapsible.js +3 -3
- package/build/elements/command.js +2 -2
- package/build/elements/context-menu.js +5 -5
- package/build/elements/dialog.js +2 -2
- package/build/elements/direction.d.ts +1 -1
- package/build/elements/direction.js +2 -2
- package/build/elements/drawer.js +2 -2
- package/build/elements/dropdown-menu.js +3 -3
- package/build/elements/empty.d.ts +1 -1
- package/build/elements/empty.js +3 -3
- package/build/elements/field.js +2 -2
- package/build/elements/hover-card.js +3 -3
- package/build/elements/input-group.js +2 -2
- package/build/elements/input-otp.js +2 -2
- package/build/elements/input.js +2 -2
- package/build/elements/item.js +2 -2
- package/build/elements/kbd.js +2 -2
- package/build/elements/label.js +2 -2
- package/build/elements/menubar.js +2 -2
- package/build/elements/native-select.js +2 -2
- package/build/elements/navigation-menu.js +2 -2
- package/build/elements/pagination.js +3 -3
- package/build/elements/popover.js +2 -2
- package/build/elements/progress.d.ts +1 -1
- package/build/elements/progress.js +3 -3
- package/build/elements/radio-group.js +2 -2
- package/build/elements/resizable.js +3 -3
- package/build/elements/scroll-area.js +2 -2
- package/build/elements/select.js +2 -2
- package/build/elements/separator.js +2 -2
- package/build/elements/sheet.js +2 -2
- package/build/elements/sidebar.js +3 -4
- package/build/elements/skeleton.js +2 -2
- package/build/elements/slider.js +2 -2
- package/build/elements/spinner.js +2 -2
- package/build/elements/switch.js +2 -2
- package/build/elements/table.js +2 -2
- package/build/elements/tabs.js +2 -2
- package/build/elements/textarea.js +2 -2
- package/build/elements/toggle-group.js +2 -2
- package/build/elements/toggle.js +2 -2
- package/build/elements/tooltip.js +2 -2
- package/build/helpers/changelog-source.js +1 -1
- package/build/helpers/dynamic-icon-resolver.js +1 -1
- package/build/helpers/resolve-asset-path.unit.js +1 -1
- package/build/helpers/resolve-base.unit.js +2 -2
- package/build/helpers/resolve-includes.js +2 -2
- package/build/helpers/resolve-includes.unit.js +1 -1
- package/build/helpers/rss.js +2 -4
- package/build/helpers/rss.unit.js +1 -1
- package/build/helpers/section.js +2 -3
- package/build/helpers/section.unit.js +4 -13
- package/build/helpers/toc.unit.js +2 -4
- package/build/plugins/rehype-inline-code.js +2 -2
- package/build/plugins/rehype-task-list-a11y.js +1 -1
- package/build/plugins/remark-abbr.js +2 -4
- package/build/plugins/remark-ansi.js +2 -4
- package/build/plugins/remark-ansi.unit.js +1 -1
- package/build/plugins/remark-badge.js +2 -4
- package/build/plugins/remark-button.unit.js +1 -1
- package/build/plugins/remark-callout.js +1 -1
- package/build/plugins/remark-card.js +1 -1
- package/build/plugins/remark-code-tabs.js +4 -8
- package/build/plugins/remark-columns.js +1 -1
- package/build/plugins/remark-custom-heading-id.unit.js +1 -1
- package/build/plugins/remark-deflist.js +1 -1
- package/build/plugins/remark-details.js +2 -4
- package/build/plugins/remark-filetree.js +1 -1
- package/build/plugins/remark-filetree.unit.js +1 -1
- package/build/plugins/remark-media.js +3 -7
- package/build/plugins/remark-media.unit.js +1 -1
- package/build/plugins/remark-steps.unit.js +1 -1
- package/build/plugins/remark-tab.js +4 -2
- package/build/plugins/remark-tab.unit.js +3 -7
- package/build/plugins/remark-toc.unit.js +1 -1
- package/build/plugins/shiki-icon.js +1 -1
- package/build/plugins/shiki-line-highlight.js +1 -1
- package/build/plugins/vite-livemark.js +1 -1
- package/build/plugins/vite-robots.js +1 -1
- package/build/plugins/vite-robots.unit.js +1 -1
- package/build/routes/$.js +1 -1
- package/build/vite.config.js +3 -8
- package/package.json +17 -19
- package/source/actions/changelog/build.ts +32 -35
- package/source/actions/changelog/build.unit.ts +191 -1
- package/source/actions/config/load.ts +1 -3
- package/source/actions/config/load.unit.ts +2 -7
- package/source/actions/target/build.ts +1 -4
- package/source/commands/build.ts +1 -7
- package/source/commands/escape.ts +3 -8
- package/source/commands/preview.ts +1 -7
- package/source/commands/start.ts +1 -7
- package/source/components/Abbr.tsx +1 -5
- package/source/components/Article.tsx +1 -5
- package/source/components/BlogIndex.tsx +3 -9
- package/source/components/Callout.tsx +2 -7
- package/source/components/ChangelogIndex.tsx +1 -3
- package/source/components/CodeBlock.tsx +4 -14
- package/source/components/CodeTabs.tsx +1 -3
- package/source/components/Columns.tsx +1 -3
- package/source/components/Content.tsx +1 -5
- package/source/components/ContentTab.tsx +1 -4
- package/source/components/ContentTabs.tsx +3 -10
- package/source/components/DefinitionList.tsx +1 -4
- package/source/components/FileTree.tsx +1 -5
- package/source/components/FootnoteRef.tsx +1 -5
- package/source/components/InlineToc.tsx +1 -4
- package/source/components/Layout.tsx +3 -10
- package/source/components/LinkButton.tsx +2 -8
- package/source/components/Mermaid.tsx +1 -3
- package/source/components/PackageTabs.tsx +1 -5
- package/source/components/PageToolbar.tsx +1 -5
- package/source/components/PrevNext.tsx +2 -6
- package/source/components/SearchDialog.tsx +2 -6
- package/source/components/Section.tsx +1 -1
- package/source/components/SectionHeader.tsx +2 -8
- package/source/components/Sidebar.tsx +2 -7
- package/source/components/SidebarArticles.tsx +4 -20
- package/source/components/SidebarLinks.tsx +2 -6
- package/source/components/TagIndex.tsx +3 -9
- package/source/components/Toc.tsx +2 -7
- package/source/content/article.ts +1 -2
- package/source/content-collections.ts +6 -8
- package/source/elements/accordion.tsx +1 -1
- package/source/elements/alert-dialog.tsx +8 -30
- package/source/elements/alert.tsx +2 -5
- package/source/elements/aspect-ratio.tsx +1 -1
- package/source/elements/avatar.tsx +5 -21
- package/source/elements/badge.tsx +3 -5
- package/source/elements/breadcrumb.tsx +4 -14
- package/source/elements/button-group.tsx +2 -7
- package/source/elements/button.tsx +1 -1
- package/source/elements/calendar.tsx +7 -24
- package/source/elements/card.tsx +1 -1
- package/source/elements/carousel.tsx +4 -11
- package/source/elements/chart.tsx +9 -34
- package/source/elements/checkbox.tsx +1 -1
- package/source/elements/collapsible.tsx +2 -6
- package/source/elements/command.tsx +4 -13
- package/source/elements/context-menu.tsx +8 -25
- package/source/elements/dialog.tsx +4 -14
- package/source/elements/direction.tsx +1 -4
- package/source/elements/drawer.tsx +4 -10
- package/source/elements/dropdown-menu.tsx +5 -19
- package/source/elements/empty.tsx +3 -13
- package/source/elements/field.tsx +3 -7
- package/source/elements/hover-card.tsx +2 -4
- package/source/elements/input-group.tsx +15 -28
- package/source/elements/input-otp.tsx +1 -1
- package/source/elements/input.tsx +1 -1
- package/source/elements/item.tsx +4 -13
- package/source/elements/kbd.tsx +1 -1
- package/source/elements/label.tsx +1 -1
- package/source/elements/menubar.tsx +5 -14
- package/source/elements/native-select.tsx +4 -15
- package/source/elements/navigation-menu.tsx +2 -5
- package/source/elements/pagination.tsx +4 -14
- package/source/elements/popover.tsx +2 -5
- package/source/elements/progress.tsx +4 -16
- package/source/elements/radio-group.tsx +1 -1
- package/source/elements/resizable.tsx +4 -12
- package/source/elements/scroll-area.tsx +2 -6
- package/source/elements/select.tsx +4 -14
- package/source/elements/separator.tsx +1 -1
- package/source/elements/sheet.tsx +3 -10
- package/source/elements/sidebar.tsx +7 -25
- package/source/elements/skeleton.tsx +1 -1
- package/source/elements/slider.tsx +1 -1
- package/source/elements/spinner.tsx +1 -1
- package/source/elements/switch.tsx +1 -1
- package/source/elements/table.tsx +4 -13
- package/source/elements/tabs.tsx +1 -1
- package/source/elements/textarea.tsx +1 -1
- package/source/elements/toggle-group.tsx +2 -4
- package/source/elements/toggle.tsx +1 -1
- package/source/elements/tooltip.tsx +3 -10
- package/source/helpers/changelog-source.ts +1 -3
- package/source/helpers/dynamic-icon-resolver.tsx +1 -4
- package/source/helpers/resolve-asset-path.unit.ts +6 -12
- package/source/helpers/resolve-base.unit.ts +1 -2
- package/source/helpers/resolve-includes.ts +2 -8
- package/source/helpers/resolve-includes.unit.ts +9 -36
- package/source/helpers/rss.ts +3 -9
- package/source/helpers/rss.unit.ts +1 -3
- package/source/helpers/section.ts +1 -4
- package/source/helpers/section.unit.ts +5 -18
- package/source/helpers/toc.unit.ts +1 -3
- package/source/plugins/rehype-inline-code.ts +5 -21
- package/source/plugins/rehype-task-list-a11y.ts +1 -2
- package/source/plugins/remark-abbr.ts +1 -3
- package/source/plugins/remark-ansi.ts +2 -5
- package/source/plugins/remark-ansi.unit.ts +6 -18
- package/source/plugins/remark-badge.ts +1 -3
- package/source/plugins/remark-button.unit.ts +3 -9
- package/source/plugins/remark-callout.ts +35 -40
- package/source/plugins/remark-card.ts +25 -29
- package/source/plugins/remark-code-tabs.ts +3 -7
- package/source/plugins/remark-columns.ts +13 -17
- package/source/plugins/remark-custom-heading-id.unit.ts +2 -6
- package/source/plugins/remark-deflist.ts +1 -2
- package/source/plugins/remark-details.ts +28 -34
- package/source/plugins/remark-filetree.ts +28 -34
- package/source/plugins/remark-filetree.unit.ts +1 -4
- package/source/plugins/remark-media.ts +2 -6
- package/source/plugins/remark-media.unit.ts +2 -6
- package/source/plugins/remark-steps.unit.ts +2 -7
- package/source/plugins/remark-tab.ts +26 -30
- package/source/plugins/remark-tab.unit.ts +2 -6
- package/source/plugins/remark-toc.unit.ts +1 -3
- package/source/plugins/shiki-icon.ts +1 -4
- package/source/plugins/shiki-line-highlight.ts +4 -11
- package/source/plugins/vite-livemark.ts +3 -10
- package/source/plugins/vite-robots.ts +1 -6
- package/source/plugins/vite-robots.unit.ts +1 -3
- package/source/routes/$.tsx +1 -3
- package/source/styles/general.css +1 -5
- package/source/vite.config.ts +2 -7
- package/build/utils/style.d.ts +0 -2
- package/build/utils/style.js +0 -6
- package/source/utils/style.ts +0 -6
- /package/{skills/authoring → .agents/skills/livemark-authoring}/SKILL.md +0 -0
- /package/{skills/customization → .agents/skills/livemark-customization}/SKILL.md +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: change-review
|
|
3
|
+
description: Review a pull request for correctness, security and repo conventions, posting findings as inline comments. Invoked by the review workflow and by a person; never fires on its own.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Review a pull request
|
|
8
|
+
|
|
9
|
+
Read the diff, judge it, post findings as inline comments. Be useful, not thorough-looking:
|
|
10
|
+
a review that flags twenty things teaches nothing, and the twenty-first — the real one — is lost
|
|
11
|
+
in it.
|
|
12
|
+
|
|
13
|
+
## What to look for
|
|
14
|
+
|
|
15
|
+
**Correctness**
|
|
16
|
+
|
|
17
|
+
- Logic that is wrong for an input the change makes reachable, not merely unusual.
|
|
18
|
+
- Error handling that swallows a failure or reports success on a partial write.
|
|
19
|
+
- Concurrency: two requests, two sessions, a retry, a replay.
|
|
20
|
+
- Performance where the change makes it structurally worse (a query in a loop, an unbounded
|
|
21
|
+
scan), not where it is merely not optimal.
|
|
22
|
+
|
|
23
|
+
**Security — OWASP-shaped, but reported only when reachable**
|
|
24
|
+
|
|
25
|
+
- Injection (SQL and otherwise), XSS, SSRF, XXE, unsafe deserialisation.
|
|
26
|
+
- Broken authentication or access control: a route that skips the permission it needs, a scope
|
|
27
|
+
resolved from user input, an id trusted because it came from the client.
|
|
28
|
+
- Sensitive data exposure: secrets in code or logs, PII widening, a credential recoverable from
|
|
29
|
+
the database.
|
|
30
|
+
- Insecure cryptography, race conditions and TOCTOU, missing logging on a security-relevant
|
|
31
|
+
action.
|
|
32
|
+
|
|
33
|
+
**This repo's own conventions** — these are where a generic reviewer is blind, and they matter
|
|
34
|
+
more than the generic checklist. Read `AGENTS.md` and the sibling skills before judging: a
|
|
35
|
+
change that violates a documented invariant is a finding even when the code is otherwise
|
|
36
|
+
correct.
|
|
37
|
+
|
|
38
|
+
## How to report
|
|
39
|
+
|
|
40
|
+
Rate each finding **CRITICAL / HIGH / MEDIUM / LOW**, and say what input or sequence produces
|
|
41
|
+
the failure. A finding that cannot name the case that breaks is a hunch: either verify it or
|
|
42
|
+
leave it out.
|
|
43
|
+
|
|
44
|
+
Post specific issues as inline comments on the lines they concern. Keep the summary short.
|
|
45
|
+
Silence on the parts that are fine is not laziness — it is what makes the flagged parts legible.
|
|
46
|
+
|
|
47
|
+
If the change is good, say so briefly and stop. Do not manufacture findings to justify the run.
|
|
@@ -59,9 +59,7 @@ export default defineConfig({
|
|
|
59
59
|
],
|
|
60
60
|
|
|
61
61
|
// Optional: per-file frontmatter overrides
|
|
62
|
-
patches: [
|
|
63
|
-
{ file: "README.md", article: { title: "Overview", icon: "sparkles" } },
|
|
64
|
-
],
|
|
62
|
+
patches: [{ file: "README.md", article: { title: "Overview", icon: "sparkles" } }],
|
|
65
63
|
})
|
|
66
64
|
```
|
|
67
65
|
|
|
@@ -71,7 +69,7 @@ export default defineConfig({
|
|
|
71
69
|
|
|
72
70
|
- **Article** (default when `type` is omitted): flat docs with a tree sidebar.
|
|
73
71
|
- **Blog** (`type: "blog"`): auto-generated index at `prefix`, sorts by `date`, exposes `/prefix/tags/<tag>/` pages.
|
|
74
|
-
- **Changelog** (`type: "changelog"`): reads `source` file; with `version: true`, splits on semver headings into per-version articles.
|
|
72
|
+
- **Changelog** (`type: "changelog"`): reads `source` file; with `version: true`, splits on semver headings into per-version articles. Several changelog sections may coexist as long as their prefixes differ — each is cached in its own `cache/changelog/<slug-of-prefix>-<hash-of-prefix>/` directory (the hash keeps prefixes that slugify alike, like `/python/changelog/` and `/python-changelog/`, apart), so a version shared by two changelogs never collides. The `(version)` suffix only renders for `position: "header"` sections.
|
|
75
73
|
|
|
76
74
|
Shared fields on every section: `title`, `prefix` (keep trailing-slashed), `type`, `icon` (lucide), `position` (`"header"` default, `"sidebar"` also available).
|
|
77
75
|
|
|
@@ -7,16 +7,28 @@ interface ChangelogEntry {
|
|
|
7
7
|
body: string;
|
|
8
8
|
sourceUrl?: string;
|
|
9
9
|
}
|
|
10
|
-
/** Glob (absolute path) covering
|
|
11
|
-
*
|
|
12
|
-
* article scan. */
|
|
13
|
-
export declare function cacheIncludeGlob(config: Config): string;
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
10
|
+
/** Glob (absolute path) covering the cached changelog markdown files of
|
|
11
|
+
* one changelog section. Used by content-collections to include them in
|
|
12
|
+
* the article scan. */
|
|
13
|
+
export declare function cacheIncludeGlob(section: ChangelogSection, config: Config): string;
|
|
14
|
+
/** Directory holding one changelog section's cache state: the rendered
|
|
15
|
+
* `.md` entries plus a `meta.json` holding the etag for conditional
|
|
16
|
+
* GETs. Each section gets its own subdirectory of `cache/changelog/`,
|
|
17
|
+
* keyed by its prefix's slug plus a hash of the raw prefix
|
|
18
|
+
* (`/python/changelog/` → `python-changelog-<hash>`), so several
|
|
19
|
+
* changelogs never overwrite each other's entries even when their
|
|
20
|
+
* prefixes slugify alike. */
|
|
21
|
+
export declare function changelogCacheDir(section: ChangelogSection, config: Config): string;
|
|
22
|
+
/** Build the per-version changelog cache files of one changelog section
|
|
23
|
+
* into its own cache directory. On refresh we wipe only that
|
|
24
|
+
* directory's `.md` files, leaving meta intact. */
|
|
19
25
|
export declare function buildChangelog(section: ChangelogSection, config: Config): Promise<void>;
|
|
20
26
|
/** Parse CHANGELOG.md into per-version entries using mdast */
|
|
21
27
|
export declare function splitLocalChangelog(body: string): ChangelogEntry[];
|
|
28
|
+
/** Escape `<` to `<` outside fenced code blocks and inline backtick spans
|
|
29
|
+
* so commit messages with placeholders like `<subdir>` don't get parsed as
|
|
30
|
+
* JSX by MDX. The entity is used rather than a `\<` backslash escape because
|
|
31
|
+
* MDX's JSX-aware parser does not honour the backslash and still reads
|
|
32
|
+
* `\<name>` as an unclosed tag. */
|
|
33
|
+
export declare function escapeMdxAngles(markdown: string): string;
|
|
22
34
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { access, mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
|
|
2
3
|
import { dirname, join, resolve } from "node:path";
|
|
3
4
|
import slugify from "@sindresorhus/slugify";
|
|
4
5
|
import { toString as mdastToString } from "mdast-util-to-string";
|
|
@@ -15,20 +16,29 @@ const stringifier = unified().use(remarkStringify, {
|
|
|
15
16
|
fences: true,
|
|
16
17
|
emphasis: "_",
|
|
17
18
|
});
|
|
18
|
-
/** Glob (absolute path) covering
|
|
19
|
-
*
|
|
20
|
-
* article scan. */
|
|
21
|
-
export function cacheIncludeGlob(config) {
|
|
22
|
-
return join(
|
|
19
|
+
/** Glob (absolute path) covering the cached changelog markdown files of
|
|
20
|
+
* one changelog section. Used by content-collections to include them in
|
|
21
|
+
* the article scan. */
|
|
22
|
+
export function cacheIncludeGlob(section, config) {
|
|
23
|
+
return join(changelogCacheDir(section, config), "*.md");
|
|
23
24
|
}
|
|
24
|
-
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
25
|
+
/** Directory holding one changelog section's cache state: the rendered
|
|
26
|
+
* `.md` entries plus a `meta.json` holding the etag for conditional
|
|
27
|
+
* GETs. Each section gets its own subdirectory of `cache/changelog/`,
|
|
28
|
+
* keyed by its prefix's slug plus a hash of the raw prefix
|
|
29
|
+
* (`/python/changelog/` → `python-changelog-<hash>`), so several
|
|
30
|
+
* changelogs never overwrite each other's entries even when their
|
|
31
|
+
* prefixes slugify alike. */
|
|
32
|
+
export function changelogCacheDir(section, config) {
|
|
33
|
+
const slug = slugify(section.prefix) || "index";
|
|
34
|
+
const hash = createHash("sha256").update(section.prefix).digest("hex").slice(0, 8);
|
|
35
|
+
return join(targetDirFor(config.configPath), CACHE_SUBDIR, `${slug}-${hash}`);
|
|
36
|
+
}
|
|
37
|
+
/** Build the per-version changelog cache files of one changelog section
|
|
38
|
+
* into its own cache directory. On refresh we wipe only that
|
|
39
|
+
* directory's `.md` files, leaving meta intact. */
|
|
29
40
|
export async function buildChangelog(section, config) {
|
|
30
|
-
const
|
|
31
|
-
const cacheDir = join(targetDir, CACHE_SUBDIR);
|
|
41
|
+
const cacheDir = changelogCacheDir(section, config);
|
|
32
42
|
const metaPath = join(cacheDir, "meta.json");
|
|
33
43
|
const entries = isGitHubUrl(section.source)
|
|
34
44
|
? await buildFromGitHub(section.source, metaPath, cacheDir)
|
|
@@ -101,10 +111,12 @@ function processBody(body) {
|
|
|
101
111
|
}
|
|
102
112
|
return escapeMdxAngles(stringifier.stringify(tree).trimEnd());
|
|
103
113
|
}
|
|
104
|
-
/** Escape `<` to
|
|
114
|
+
/** Escape `<` to `<` outside fenced code blocks and inline backtick spans
|
|
105
115
|
* so commit messages with placeholders like `<subdir>` don't get parsed as
|
|
106
|
-
* JSX by MDX.
|
|
107
|
-
|
|
116
|
+
* JSX by MDX. The entity is used rather than a `\<` backslash escape because
|
|
117
|
+
* MDX's JSX-aware parser does not honour the backslash and still reads
|
|
118
|
+
* `\<name>` as an unclosed tag. */
|
|
119
|
+
export function escapeMdxAngles(markdown) {
|
|
108
120
|
let inFence = false;
|
|
109
121
|
return markdown
|
|
110
122
|
.split("\n")
|
|
@@ -115,7 +127,7 @@ function escapeMdxAngles(markdown) {
|
|
|
115
127
|
}
|
|
116
128
|
if (inFence)
|
|
117
129
|
return line;
|
|
118
|
-
return line.replace(/`[^`]*`|</g, match => match === "<" ? "
|
|
130
|
+
return line.replace(/`[^`]*`|</g, match => (match === "<" ? "<" : match));
|
|
119
131
|
})
|
|
120
132
|
.join("\n");
|
|
121
133
|
}
|
|
@@ -164,11 +176,7 @@ async function buildFromGitHub(source, metaPath, cacheDir) {
|
|
|
164
176
|
}));
|
|
165
177
|
}
|
|
166
178
|
function wrapFrontmatter(entry, section) {
|
|
167
|
-
const lines = [
|
|
168
|
-
"---",
|
|
169
|
-
`title: ${entry.title}`,
|
|
170
|
-
`path: ${section.prefix}${entry.slug}/`,
|
|
171
|
-
];
|
|
179
|
+
const lines = ["---", `title: ${entry.title}`, `path: ${section.prefix}${entry.slug}/`];
|
|
172
180
|
if (entry.date)
|
|
173
181
|
lines.push(`date: ${entry.date}`);
|
|
174
182
|
if (entry.sourceUrl) {
|
|
@@ -195,4 +203,4 @@ async function exists(path) {
|
|
|
195
203
|
return false;
|
|
196
204
|
}
|
|
197
205
|
}
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvYWN0aW9ucy9jaGFuZ2Vsb2cvYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE9BQU8sRUFDUCxFQUFFLEVBQ0YsU0FBUyxHQUNWLE1BQU0sa0JBQWtCLENBQUE7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2xELE9BQU8sT0FBTyxNQUFNLHVCQUF1QixDQUFBO0FBRTNDLE9BQU8sRUFBRSxRQUFRLElBQUksYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDaEUsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sZUFBZSxNQUFNLGtCQUFrQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDakMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBR3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBdUJqRCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQTtBQUV0QyxNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDekMsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRTtJQUNqRCxNQUFNLEVBQUUsR0FBRztJQUNYLE1BQU0sRUFBRSxJQUFJO0lBQ1osUUFBUSxFQUFFLEdBQUc7Q0FDZCxDQUFDLENBQUE7QUFFRjs7b0JBRW9CO0FBQ3BCLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFjO0lBQzdDLE9BQU8sSUFBSSxD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QUMsQ0FBQTtRQUNsQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYWNjZXNzLFxuICBta2RpcixcbiAgcmVhZEZpbGUsXG4gIHJlYWRkaXIsXG4gIHJtLFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCBzbHVnaWZ5IGZyb20gXCJAc2luZHJlc29yaHVzL3NsdWdpZnlcIlxuaW1wb3J0IHR5cGUgeyBSb290LCBSb290Q29udGVudCB9IGZyb20gXCJtZGFzdFwiXG5pbXBvcnQgeyB0b1N0cmluZyBhcyBtZGFzdFRvU3RyaW5nIH0gZnJvbSBcIm1kYXN0LXV0aWwtdG8tc3RyaW5nXCJcbmltcG9ydCByZW1hcmtQYXJzZSBmcm9tIFwicmVtYXJrLXBhcnNlXCJcbmltcG9ydCByZW1hcmtTdHJpbmdpZnkgZnJvbSBcInJlbWFyay1zdHJpbmdpZnlcIlxuaW1wb3J0IHsgdW5pZmllZCB9IGZyb20gXCJ1bmlmaWVkXCJcbmltcG9ydCB7IHZpc2l0IH0gZnJvbSBcInVuaXN0LXV0aWwtdmlzaXRcIlxuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5pbXBvcnQgdHlwZSB7IENoYW5nZWxvZ1NlY3Rpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlY3Rpb24udHNcIlxuaW1wb3J0IHsgaXNHaXRIdWJVcmwsIHBhcnNlR2l0SHViUmVwbyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL2NoYW5nZWxvZy1zb3VyY2UudHNcIlxuaW1wb3J0IHsgdGFyZ2V0RGlyRm9yIH0gZnJvbSBcIi4uL3RhcmdldC9idWlsZC50c1wiXG5cbmludGVyZmFjZSBSZWxlYXNlIHtcbiAgdGFnX25hbWU6IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICBwdWJsaXNoZWRfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIGJvZHk/OiBzdHJpbmcgfCBudWxsXG4gIGh0bWxfdXJsPzogc3RyaW5nIHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgQ2FjaGVNZXRhIHtcbiAgZXRhZzogc3RyaW5nXG4gIGZldGNoZWRBdDogc3RyaW5nXG59XG5cbmludGVyZmFjZSBDaGFuZ2Vsb2dFbnRyeSB7XG4gIHNsdWc6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIGRhdGU/OiBzdHJpbmdcbiAgYm9keTogc3RyaW5nXG4gIHNvdXJjZVVybD86IHN0cmluZ1xufVxuXG5jb25zdCBDQUNIRV9TVUJESVIgPSBcImNhY2hlL2NoYW5nZWxvZ1wiXG5cbmNvbnN0IHBhcnNlciA9IHVuaWZpZWQoKS51c2UocmVtYXJrUGFyc2UpXG5jb25zdCBzdHJpbmdpZmllciA9IHVuaWZpZWQoKS51c2UocmVtYXJrU3RyaW5naWZ5LCB7XG4gIGJ1bGxldDogXCItXCIsXG4gIGZlbmNlczogdHJ1ZSxcbiAgZW1waGFzaXM6IFwiX1wiLFxufSlcblxuLyoqIEdsb2IgKGFic29sdXRlIHBhdGgpIGNvdmVyaW5nIGFsbCBjYWNoZWQgY2hhbmdlbG9nIG1hcmtkb3duIGZpbGVzIGZvclxuICogIGEgZ2l2ZW4gY29uc3VtZXIuIFVzZWQgYnkgY29udGVudC1jb2xsZWN0aW9ucyB0byBpbmNsdWRlIHRoZW0gaW4gdGhlXG4gKiAgYXJ0aWNsZSBzY2FuLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlSW5jbHVkZUdsb2IoY29uZmlnOiBDb25maWcpIHtcbiAgcmV0dXJuIGpvaW4odGFyZ2V0RGlyRm9yKGNvbmZpZy5jb25maWdQYXRoKSwgQ0FDSEVfU1VCRElSLCBcIioqXCIsIFwiKi5tZFwiKVxufVxuXG4vKiogQnVpbGQgdGhlIHBlci12ZXJzaW9uIGNoYW5nZWxvZyBjYWNoZSBmaWxlcy4gTGl2ZW1hcmsgYWxsb3dzIG9uZVxuICogIGNoYW5nZWxvZyBwZXIgcHJvamVjdCwgc28gYWxsIGNhY2hlIHN0YXRlIGxpdmVzIGluIGEgc2luZ2xlXG4gKiAgYGNhY2hlL2NoYW5nZWxvZy9gOiB0aGUgcmVuZGVyZWQgYC5tZGAgZW50cmllcyBwbHVzIGEgYG1ldGEuanNvbmBcbiAqICBob2xkaW5nIHRoZSBldGFnIGZvciBjb25kaXRpb25hbCBHRVRzLiBPbiByZWZyZXNoIHdlIHdpcGUgb25seSB0aGVcbiAqICBgLm1kYCBmaWxlcywgbGVhdmluZyBtZXRhIGludGFjdC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENoYW5nZWxvZyhcbiAgc2VjdGlvbjogQ2hhbmdlbG9nU2VjdGlvbixcbiAgY29uZmlnOiBDb25maWcsXG4pIHtcbiAgY29uc3QgdGFyZ2V0RGlyID0gdGFyZ2V0RGlyRm9yKGNvbmZpZy5jb25maWdQYXRoKVxuICBjb25zdCBjYWNoZURpciA9IGpvaW4odGFyZ2V0RGlyLCBDQUNIRV9TVUJESVIpXG4gIGNvbnN0IG1ldGFQYXRoID0gam9pbihjYWNoZURpciwgXCJtZXRhLmpzb25cIilcblxuICBjb25zdCBlbnRyaWVzID0gaXNHaXRIdWJVcmwoc2VjdGlvbi5zb3VyY2UpXG4gICAgPyBhd2FpdCBidWlsZEZyb21HaXRIdWIoc2VjdGlvbi5zb3VyY2UsIG1ldGFQYXRoLCBjYWNoZURpcilcbiAgICA6IGF3YWl0IGJ1aWxkRnJvbUxvY2FsKHNlY3Rpb24uc291cmNlLCBjb25maWcucm9vdClcblxuICBpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKSByZXR1cm5cblxuICBhd2FpdCBta2RpcihjYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgZm9yIChjb25zdCBmIG9mIGF3YWl0IHJlYWRkaXIoY2FjaGVEaXIpLmNhdGNoKCgpID0+IFtdKSkge1xuICAgIGlmIChmLmVuZHNXaXRoKFwiLm1kXCIpKSBhd2FpdCBybShqb2luKGNhY2hlRGlyLCBmKSwgeyBmb3JjZTogdHJ1ZSB9KVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbWFya2Rvd24gPSB3cmFwRnJvbnRtYXR0ZXIoZW50cnksIHNlY3Rpb24pXG4gICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oY2FjaGVEaXIsIGAke2VudHJ5LnNsdWd9Lm1kYCksIG1hcmtkb3duLCBcInV0Zi04XCIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRGcm9tTG9jYWwoc291cmNlOiBzdHJpbmcsIHJvb3Q6IHN0cmluZykge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUocm9vdCwgc291cmNlKVxuICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsIFwidXRmLThcIilcbiAgcmV0dXJuIHNwbGl0TG9jYWxDaGFuZ2Vsb2coYm9keSlcbn1cblxuLyoqIFBhcnNlIENIQU5HRUxPRy5tZCBpbnRvIHBlci12ZXJzaW9uIGVudHJpZXMgdXNpbmcgbWRhc3QgKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdExvY2FsQ2hhbmdlbG9nKGJvZHk6IHN0cmluZyk6IENoYW5nZWxvZ0VudHJ5W10ge1xuICBjb25zdCB0cmVlID0gcGFyc2VyLnBhcnNlKGJvZHkpIGFzIFJvb3RcbiAgY29uc3QgZW50cmllczogQ2hhbmdlbG9nRW50cnlbXSA9IFtdXG4gIGxldCBjdXJyZW50OiB7IGhlYWRpbmc6IHN0cmluZzsgY2hpbGRyZW46IFJvb3RDb250ZW50W10gfSB8IHVuZGVmaW5lZFxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgdHJlZS5jaGlsZHJlbikge1xuICAgIGlmIChjaGlsZC50eXBlID09PSBcImhlYWRpbmdcIiAmJiBjaGlsZC5kZXB0aCA9PT0gMikge1xuICAgICAgaWYgKGN1cnJlbnQpIGVudHJpZXMucHVzaChmaW5hbGl6ZUVudHJ5KGN1cnJlbnQpKVxuICAgICAgY3VycmVudCA9IHsgaGVhZGluZzogbWRhc3RUb1N0cmluZyhjaGlsZCksIGNoaWxkcmVuOiBbXSB9XG4gICAgfSBlbHNlIGlmIChjdXJyZW50KSB7XG4gICAgICBjdXJyZW50LmNoaWxkcmVuLnB1c2goY2hpbGQpXG4gICAgfVxuICB9XG4gIGlmIChjdXJyZW50KSBlbnRyaWVzLnB1c2goZmluYWxpemVFbnRyeShjdXJyZW50KSlcbiAgcmV0dXJuIGVudHJpZXNcbn1cblxuZnVuY3Rpb24gZmluYWxpemVFbnRyeShpbnB1dDoge1xuICBoZWFkaW5nOiBzdHJpbmdcbiAgY2hpbGRyZW46IFJvb3RDb250ZW50W11cbn0pOiBDaGFuZ2Vsb2dFbnRyeSB7XG4gIGNvbnN0IHZlcnNpb25NYXRjaCA9IGlucHV0LmhlYWRpbmcubWF0Y2goL15cXFs/KFteXFxdXFxzXSspXFxdPy8pXG4gIGNvbnN0IHZlcnNpb24gPSB2ZXJzaW9uTWF0Y2g/LlsxXSA/PyBpbnB1dC5oZWFkaW5nXG4gIGNvbnN0IGRhdGVNYXRjaCA9IGlucHV0LmhlYWRpbmcubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9LylcbiAgY29uc3QgYm9keSA9IHJlbmRlckVudHJ5Qm9keShpbnB1dC5jaGlsZHJlbilcbiAgcmV0dXJuIHtcbiAgICBzbHVnOiBzbHVnaWZ5KHZlcnNpb24pLFxuICAgIHRpdGxlOiB2ZXJzaW9uLFxuICAgIGRhdGU6IGRhdGVNYXRjaD8uWzBdLFxuICAgIGJvZHksXG4gIH1cbn1cblxuLyoqIFNlcmlhbGl6ZSBhbiBlbnRyeSdzIG1kYXN0IGNoaWxkcmVuIGJhY2sgdG8gbWFya2Rvd24gKi9cbmZ1bmN0aW9uIHJlbmRlckVudHJ5Qm9keShjaGlsZHJlbjogUm9vdENvbnRlbnRbXSkge1xuICBjb25zdCByb290OiBSb290ID0geyB0eXBlOiBcInJvb3RcIiwgY2hpbGRyZW4gfVxuICByZXR1cm4gc3RyaW5naWZpZXIuc3RyaW5naWZ5KHJvb3QpLnRyaW1FbmQoKVxufVxuXG4vKiogRHJvcCB0aGUgYm9keSdzIGxlYWRpbmcgaDEgKHR5cGljYWxseSB0aGUgY29udmVudGlvbmFsLWNoYW5nZWxvZ1xuICogYCMgMC43LjIgKDIwMjYtMDQtMjUpYCBib2lsZXJwbGF0ZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIGFydGljbGUncyB0aXRsZSksXG4gKiBzaGlmdCBoMuKAk2g2IHVwIGJ5IG9uZSBzbyBzdWJzZWN0aW9uIGhlYWRpbmdzIGJlY29tZSBoMSAvIGgyIC8g4oCmLCBhbmRcbiAqIGVzY2FwZSBzdHJheSBgPGAgb3V0c2lkZSBjb2RlIHNvIE1EWCBkb2Vzbid0IG1pc3Rha2UgdGhlbSBmb3IgSlNYLiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0JvZHkoYm9keTogc3RyaW5nKSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2UoYm9keSkgYXMgUm9vdFxuICB2aXNpdCh0cmVlLCBcImhlYWRpbmdcIiwgbm9kZSA9PiB7XG4gICAgaWYgKG5vZGUuZGVwdGggPiAxKSBub2RlLmRlcHRoID0gKG5vZGUuZGVwdGggLSAxKSBhcyAxIHwgMiB8IDMgfCA0IHwgNVxuICB9KVxuICBpZiAodHJlZS5jaGlsZHJlblswXT8udHlwZSA9PT0gXCJoZWFkaW5nXCIgJiYgdHJlZS5jaGlsZHJlblswXS5kZXB0aCA9PT0gMSkge1xuICAgIHRyZWUuY2hpbGRyZW4uc2hpZnQoKVxuICB9XG4gIHJldHVybiBlc2NhcGVNZHhBbmdsZXMoc3RyaW5naWZpZXIuc3RyaW5naWZ5KHRyZWUpLnRyaW1FbmQoKSlcbn1cblxuLyoqIEVzY2FwZSBgPGAgdG8gYFxcPGAgb3V0c2lkZSBmZW5jZWQgY29kZSBibG9ja3MgYW5kIGlubGluZSBiYWNrdGljayBzcGFuc1xuICogc28gY29tbWl0IG1lc3NhZ2VzIHdpdGggcGxhY2Vob2xkZXJzIGxpa2UgYDxzdWJkaXI+YCBkb24ndCBnZXQgcGFyc2VkIGFzXG4gKiBKU1ggYnkgTURYLiAqL1xuZnVuY3Rpb24gZXNjYXBlTWR4QW5nbGVzKG1hcmtkb3duOiBzdHJpbmcpIHtcbiAgbGV0IGluRmVuY2UgPSBmYWxzZVxuICByZXR1cm4gbWFya2Rvd25cbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKGxpbmUgPT4ge1xuICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcImBgYFwiKSkge1xuICAgICAgICBpbkZlbmNlID0gIWluRmVuY2VcbiAgICAgICAgcmV0dXJuIGxpbmVcbiAgICAgIH1cbiAgICAgIGlmIChpbkZlbmNlKSByZXR1cm4gbGluZVxuICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZSgvYFteYF0qYHw8L2csIG1hdGNoID0+XG4gICAgICAgIG1hdGNoID09PSBcIjxcIiA/IFwiXFxcXDxcIiA6IG1hdGNoLFxuICAgICAgKVxuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIilcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRGcm9tR2l0SHViKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgbWV0YVBhdGg6IHN0cmluZyxcbiAgY2FjaGVEaXI6IHN0cmluZyxcbik6IFByb21pc2U8Q2hhbmdlbG9nRW50cnlbXSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUdpdEh1YlJlcG8oc291cmNlKVxuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIEdpdEh1YiByZXBvIGZyb20gc291cmNlOiAke3NvdXJjZX1gKVxuICB9XG5cbiAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtwYXJzZWQub3duZXJ9LyR7cGFyc2VkLnJlcG99L3JlbGVhc2VzP3Blcl9wYWdlPTEwMGBcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uXCIsXG4gICAgXCJYLUdpdEh1Yi1BcGktVmVyc2lvblwiOiBcIjIwMjItMTEtMjhcIixcbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOXG4gIGlmICh0b2tlbikgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke3Rva2VufWBcblxuICBjb25zdCBtZXRhID0gYXdhaXQgcmVhZE1ldGEobWV0YVBhdGgpXG4gIGNvbnN0IGhhc0NhY2hlID0gYXdhaXQgZXhpc3RzKGNhY2hlRGlyKVxuICBpZiAobWV0YSAmJiBoYXNDYWNoZSkgaGVhZGVyc1tcIklmLU5vbmUtTWF0Y2hcIl0gPSBtZXRhLmV0YWdcblxuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVycyB9KVxuXG4gIGlmIChyZXMuc3RhdHVzID09PSAzMDQpIHJldHVybiB1bmRlZmluZWRcblxuICBpZiAoIXJlcy5vaykge1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHJlcy5oZWFkZXJzLmdldChcIngtcmF0ZWxpbWl0LXJlbWFpbmluZ1wiKVxuICAgIGNvbnN0IHJlc2V0ID0gcmVzLmhlYWRlcnMuZ2V0KFwieC1yYXRlbGltaXQtcmVzZXRcIilcbiAgICBjb25zdCBtc2cgPSBgR2l0SHViIEFQSSAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9IChyYXRlLWxpbWl0IHJlbWFpbmluZzogJHtyZW1haW5pbmcgPz8gXCI/XCJ9LCByZXNldDogJHtyZXNldCA/PyBcIj9cIn0pYFxuICAgIGlmIChoYXNDYWNoZSkge1xuICAgICAgY29uc29sZS53YXJuKGAke21zZ30g4oCUIGZhbGxpbmcgYmFjayB0byBjYWNoZWQgY2hhbmdlbG9nYClcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZylcbiAgfVxuXG4gIGNvbnN0IHJlbGVhc2VzID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFJlbGVhc2VbXVxuICBjb25zdCBldGFnID0gcmVzLmhlYWRlcnMuZ2V0KFwiZXRhZ1wiKVxuICBpZiAoZXRhZykge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobWV0YVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgIG1ldGFQYXRoLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHsgZXRhZywgZmV0Y2hlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfSBzYXRpc2ZpZXMgQ2FjaGVNZXRhLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKSxcbiAgICAgIFwidXRmLThcIixcbiAgICApXG4gIH1cblxuICByZXR1cm4gcmVsZWFzZXMubWFwKHJlbGVhc2UgPT4gKHtcbiAgICBzbHVnOiBzbHVnaWZ5KHJlbGVhc2UudGFnX25hbWUpLFxuICAgIHRpdGxlOiByZWxlYXNlLnRhZ19uYW1lLFxuICAgIGRhdGU6IHJlbGVhc2UucHVibGlzaGVkX2F0ID8/IHVuZGVmaW5lZCxcbiAgICBib2R5OiAocmVsZWFzZS5ib2R5ID8/IFwiXCIpLnRyaW0oKSxcbiAgICBzb3VyY2VVcmw6IHJlbGVhc2UuaHRtbF91cmwgPz8gdW5kZWZpbmVkLFxuICB9KSlcbn1cblxuZnVuY3Rpb24gd3JhcEZyb250bWF0dGVyKGVudHJ5OiBDaGFuZ2Vsb2dFbnRyeSwgc2VjdGlvbjogQ2hhbmdlbG9nU2VjdGlvbikge1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBcIi0tLVwiLFxuICAgIGB0aXRsZTogJHtlbnRyeS50aXRsZX1gLFxuICAgIGBwYXRoOiAke3NlY3Rpb24ucHJlZml4fSR7ZW50cnkuc2x1Z30vYCxcbiAgXVxuICBpZiAoZW50cnkuZGF0ZSkgbGluZXMucHVzaChgZGF0ZTogJHtlbnRyeS5kYXRlfWApXG4gIGlmIChlbnRyeS5zb3VyY2VVcmwpIHtcbiAgICBsaW5lcy5wdXNoKGBzb3VyY2VVcmw6ICR7ZW50cnkuc291cmNlVXJsfWAsIFwic291cmNlQWN0aW9uOiB2aWV3XCIpXG4gIH1cbiAgbGluZXMucHVzaChcIi0tLVwiLCBcIlwiLCBgIyAke2VudHJ5LnRpdGxlfWAsIFwiXCIsIHByb2Nlc3NCb2R5KGVudHJ5LmJvZHkpKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkTWV0YShtZXRhUGF0aDogc3RyaW5nKTogUHJvbWlzZTxDYWNoZU1ldGEgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShtZXRhUGF0aCwgXCJ1dGYtOFwiKVxuICAgIHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgQ2FjaGVNZXRhXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleGlzdHMocGF0aDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWNjZXNzKHBhdGgpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiJdfQ==
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvYWN0aW9ucy9jaGFuZ2Vsb2cvYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbEQsT0FBTyxPQUFPLE1BQU0sdUJBQXVCLENBQUE7QUFFM0MsT0FBTyxFQUFFLFFBQVEsSUFBSSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNoRSxPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxlQUFlLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFHeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUF1QmpELE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFBO0FBRXRDLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUN6QyxNQUFNLFdBQVcsR0FBRyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFO0lBQ2pELE1BQU0sRUFBRSxHQUFHO0lBQ1gsTUFBTSxFQUFFLElBQUk7SUFDWixRQUFRLEVBQUUsR0FBRztDQUNkLENBQUMsQ0FBQTtBQUVGOzt3QkFFd0I7QUFDeEIsTUFB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QyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3RFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN6QixDQUFDO0FBRUQsS0FBSyxVQUFVLFFBQVEsQ0FBQyxRQUFnQjtJQUN0QyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBYyxDQUFBO0lBQ3JDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxNQUFNLENBQUMsSUFBWTtJQUNoQyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNsQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiXG5pbXBvcnQgeyBhY2Nlc3MsIG1rZGlyLCByZWFkRmlsZSwgcmVhZGRpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCJcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCBzbHVnaWZ5IGZyb20gXCJAc2luZHJlc29yaHVzL3NsdWdpZnlcIlxuaW1wb3J0IHR5cGUgeyBSb290LCBSb290Q29udGVudCB9IGZyb20gXCJtZGFzdFwiXG5pbXBvcnQgeyB0b1N0cmluZyBhcyBtZGFzdFRvU3RyaW5nIH0gZnJvbSBcIm1kYXN0LXV0aWwtdG8tc3RyaW5nXCJcbmltcG9ydCByZW1hcmtQYXJzZSBmcm9tIFwicmVtYXJrLXBhcnNlXCJcbmltcG9ydCByZW1hcmtTdHJpbmdpZnkgZnJvbSBcInJlbWFyay1zdHJpbmdpZnlcIlxuaW1wb3J0IHsgdW5pZmllZCB9IGZyb20gXCJ1bmlmaWVkXCJcbmltcG9ydCB7IHZpc2l0IH0gZnJvbSBcInVuaXN0LXV0aWwtdmlzaXRcIlxuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5pbXBvcnQgdHlwZSB7IENoYW5nZWxvZ1NlY3Rpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlY3Rpb24udHNcIlxuaW1wb3J0IHsgaXNHaXRIdWJVcmwsIHBhcnNlR2l0SHViUmVwbyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL2NoYW5nZWxvZy1zb3VyY2UudHNcIlxuaW1wb3J0IHsgdGFyZ2V0RGlyRm9yIH0gZnJvbSBcIi4uL3RhcmdldC9idWlsZC50c1wiXG5cbmludGVyZmFjZSBSZWxlYXNlIHtcbiAgdGFnX25hbWU6IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICBwdWJsaXNoZWRfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIGJvZHk/OiBzdHJpbmcgfCBudWxsXG4gIGh0bWxfdXJsPzogc3RyaW5nIHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgQ2FjaGVNZXRhIHtcbiAgZXRhZzogc3RyaW5nXG4gIGZldGNoZWRBdDogc3RyaW5nXG59XG5cbmludGVyZmFjZSBDaGFuZ2Vsb2dFbnRyeSB7XG4gIHNsdWc6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIGRhdGU/OiBzdHJpbmdcbiAgYm9keTogc3RyaW5nXG4gIHNvdXJjZVVybD86IHN0cmluZ1xufVxuXG5jb25zdCBDQUNIRV9TVUJESVIgPSBcImNhY2hlL2NoYW5nZWxvZ1wiXG5cbmNvbnN0IHBhcnNlciA9IHVuaWZpZWQoKS51c2UocmVtYXJrUGFyc2UpXG5jb25zdCBzdHJpbmdpZmllciA9IHVuaWZpZWQoKS51c2UocmVtYXJrU3RyaW5naWZ5LCB7XG4gIGJ1bGxldDogXCItXCIsXG4gIGZlbmNlczogdHJ1ZSxcbiAgZW1waGFzaXM6IFwiX1wiLFxufSlcblxuLyoqIEdsb2IgKGFic29sdXRlIHBhdGgpIGNvdmVyaW5nIHRoZSBjYWNoZWQgY2hhbmdlbG9nIG1hcmtkb3duIGZpbGVzIG9mXG4gKiAgb25lIGNoYW5nZWxvZyBzZWN0aW9uLiBVc2VkIGJ5IGNvbnRlbnQtY29sbGVjdGlvbnMgdG8gaW5jbHVkZSB0aGVtIGluXG4gKiAgdGhlIGFydGljbGUgc2Nhbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUluY2x1ZGVHbG9iKHNlY3Rpb246IENoYW5nZWxvZ1NlY3Rpb24sIGNvbmZpZzogQ29uZmlnKSB7XG4gIHJldHVybiBqb2luKGNoYW5nZWxvZ0NhY2hlRGlyKHNlY3Rpb24sIGNvbmZpZyksIFwiKi5tZFwiKVxufVxuXG4vKiogRGlyZWN0b3J5IGhvbGRpbmcgb25lIGNoYW5nZWxvZyBzZWN0aW9uJ3MgY2FjaGUgc3RhdGU6IHRoZSByZW5kZXJlZFxuICogIGAubWRgIGVudHJpZXMgcGx1cyBhIGBtZXRhLmpzb25gIGhvbGRpbmcgdGhlIGV0YWcgZm9yIGNvbmRpdGlvbmFsXG4gKiAgR0VUcy4gRWFjaCBzZWN0aW9uIGdldHMgaXRzIG93biBzdWJkaXJlY3Rvcnkgb2YgYGNhY2hlL2NoYW5nZWxvZy9gLFxuICogIGtleWVkIGJ5IGl0cyBwcmVmaXgncyBzbHVnIHBsdXMgYSBoYXNoIG9mIHRoZSByYXcgcHJlZml4XG4gKiAgKGAvcHl0aG9uL2NoYW5nZWxvZy9gIOKGkiBgcHl0aG9uLWNoYW5nZWxvZy08aGFzaD5gKSwgc28gc2V2ZXJhbFxuICogIGNoYW5nZWxvZ3MgbmV2ZXIgb3ZlcndyaXRlIGVhY2ggb3RoZXIncyBlbnRyaWVzIGV2ZW4gd2hlbiB0aGVpclxuICogIHByZWZpeGVzIHNsdWdpZnkgYWxpa2UuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlbG9nQ2FjaGVEaXIoc2VjdGlvbjogQ2hhbmdlbG9nU2VjdGlvbiwgY29uZmlnOiBDb25maWcpIHtcbiAgY29uc3Qgc2x1ZyA9IHNsdWdpZnkoc2VjdGlvbi5wcmVmaXgpIHx8IFwiaW5kZXhcIlxuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoc2VjdGlvbi5wcmVmaXgpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCA4KVxuICByZXR1cm4gam9pbih0YXJnZXREaXJGb3IoY29uZmlnLmNvbmZpZ1BhdGgpLCBDQUNIRV9TVUJESVIsIGAke3NsdWd9LSR7aGFzaH1gKVxufVxuXG4vKiogQnVpbGQgdGhlIHBlci12ZXJzaW9uIGNoYW5nZWxvZyBjYWNoZSBmaWxlcyBvZiBvbmUgY2hhbmdlbG9nIHNlY3Rpb25cbiAqICBpbnRvIGl0cyBvd24gY2FjaGUgZGlyZWN0b3J5LiBPbiByZWZyZXNoIHdlIHdpcGUgb25seSB0aGF0XG4gKiAgZGlyZWN0b3J5J3MgYC5tZGAgZmlsZXMsIGxlYXZpbmcgbWV0YSBpbnRhY3QuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRDaGFuZ2Vsb2coc2VjdGlvbjogQ2hhbmdlbG9nU2VjdGlvbiwgY29uZmlnOiBDb25maWcpIHtcbiAgY29uc3QgY2FjaGVEaXIgPSBjaGFuZ2Vsb2dDYWNoZURpcihzZWN0aW9uLCBjb25maWcpXG4gIGNvbnN0IG1ldGFQYXRoID0gam9pbihjYWNoZURpciwgXCJtZXRhLmpzb25cIilcblxuICBjb25zdCBlbnRyaWVzID0gaXNHaXRIdWJVcmwoc2VjdGlvbi5zb3VyY2UpXG4gICAgPyBhd2FpdCBidWlsZEZyb21HaXRIdWIoc2VjdGlvbi5zb3VyY2UsIG1ldGFQYXRoLCBjYWNoZURpcilcbiAgICA6IGF3YWl0IGJ1aWxkRnJvbUxvY2FsKHNlY3Rpb24uc291cmNlLCBjb25maWcucm9vdClcblxuICBpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKSByZXR1cm5cblxuICBhd2FpdCBta2RpcihjYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgZm9yIChjb25zdCBmIG9mIGF3YWl0IHJlYWRkaXIoY2FjaGVEaXIpLmNhdGNoKCgpID0+IFtdKSkge1xuICAgIGlmIChmLmVuZHNXaXRoKFwiLm1kXCIpKSBhd2FpdCBybShqb2luKGNhY2hlRGlyLCBmKSwgeyBmb3JjZTogdHJ1ZSB9KVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbWFya2Rvd24gPSB3cmFwRnJvbnRtYXR0ZXIoZW50cnksIHNlY3Rpb24pXG4gICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oY2FjaGVEaXIsIGAke2VudHJ5LnNsdWd9Lm1kYCksIG1hcmtkb3duLCBcInV0Zi04XCIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRGcm9tTG9jYWwoc291cmNlOiBzdHJpbmcsIHJvb3Q6IHN0cmluZykge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUocm9vdCwgc291cmNlKVxuICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsIFwidXRmLThcIilcbiAgcmV0dXJuIHNwbGl0TG9jYWxDaGFuZ2Vsb2coYm9keSlcbn1cblxuLyoqIFBhcnNlIENIQU5HRUxPRy5tZCBpbnRvIHBlci12ZXJzaW9uIGVudHJpZXMgdXNpbmcgbWRhc3QgKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdExvY2FsQ2hhbmdlbG9nKGJvZHk6IHN0cmluZyk6IENoYW5nZWxvZ0VudHJ5W10ge1xuICBjb25zdCB0cmVlID0gcGFyc2VyLnBhcnNlKGJvZHkpIGFzIFJvb3RcbiAgY29uc3QgZW50cmllczogQ2hhbmdlbG9nRW50cnlbXSA9IFtdXG4gIGxldCBjdXJyZW50OiB7IGhlYWRpbmc6IHN0cmluZzsgY2hpbGRyZW46IFJvb3RDb250ZW50W10gfSB8IHVuZGVmaW5lZFxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgdHJlZS5jaGlsZHJlbikge1xuICAgIGlmIChjaGlsZC50eXBlID09PSBcImhlYWRpbmdcIiAmJiBjaGlsZC5kZXB0aCA9PT0gMikge1xuICAgICAgaWYgKGN1cnJlbnQpIGVudHJpZXMucHVzaChmaW5hbGl6ZUVudHJ5KGN1cnJlbnQpKVxuICAgICAgY3VycmVudCA9IHsgaGVhZGluZzogbWRhc3RUb1N0cmluZyhjaGlsZCksIGNoaWxkcmVuOiBbXSB9XG4gICAgfSBlbHNlIGlmIChjdXJyZW50KSB7XG4gICAgICBjdXJyZW50LmNoaWxkcmVuLnB1c2goY2hpbGQpXG4gICAgfVxuICB9XG4gIGlmIChjdXJyZW50KSBlbnRyaWVzLnB1c2goZmluYWxpemVFbnRyeShjdXJyZW50KSlcbiAgcmV0dXJuIGVudHJpZXNcbn1cblxuZnVuY3Rpb24gZmluYWxpemVFbnRyeShpbnB1dDoge1xuICBoZWFkaW5nOiBzdHJpbmdcbiAgY2hpbGRyZW46IFJvb3RDb250ZW50W11cbn0pOiBDaGFuZ2Vsb2dFbnRyeSB7XG4gIGNvbnN0IHZlcnNpb25NYXRjaCA9IGlucHV0LmhlYWRpbmcubWF0Y2goL15cXFs/KFteXFxdXFxzXSspXFxdPy8pXG4gIGNvbnN0IHZlcnNpb24gPSB2ZXJzaW9uTWF0Y2g/LlsxXSA/PyBpbnB1dC5oZWFkaW5nXG4gIGNvbnN0IGRhdGVNYXRjaCA9IGlucHV0LmhlYWRpbmcubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9LylcbiAgY29uc3QgYm9keSA9IHJlbmRlckVudHJ5Qm9keShpbnB1dC5jaGlsZHJlbilcbiAgcmV0dXJuIHtcbiAgICBzbHVnOiBzbHVnaWZ5KHZlcnNpb24pLFxuICAgIHRpdGxlOiB2ZXJzaW9uLFxuICAgIGRhdGU6IGRhdGVNYXRjaD8uWzBdLFxuICAgIGJvZHksXG4gIH1cbn1cblxuLyoqIFNlcmlhbGl6ZSBhbiBlbnRyeSdzIG1kYXN0IGNoaWxkcmVuIGJhY2sgdG8gbWFya2Rvd24gKi9cbmZ1bmN0aW9uIHJlbmRlckVudHJ5Qm9keShjaGlsZHJlbjogUm9vdENvbnRlbnRbXSkge1xuICBjb25zdCByb290OiBSb290ID0geyB0eXBlOiBcInJvb3RcIiwgY2hpbGRyZW4gfVxuICByZXR1cm4gc3RyaW5naWZpZXIuc3RyaW5naWZ5KHJvb3QpLnRyaW1FbmQoKVxufVxuXG4vKiogRHJvcCB0aGUgYm9keSdzIGxlYWRpbmcgaDEgKHR5cGljYWxseSB0aGUgY29udmVudGlvbmFsLWNoYW5nZWxvZ1xuICogYCMgMC43LjIgKDIwMjYtMDQtMjUpYCBib2lsZXJwbGF0ZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIGFydGljbGUncyB0aXRsZSksXG4gKiBzaGlmdCBoMuKAk2g2IHVwIGJ5IG9uZSBzbyBzdWJzZWN0aW9uIGhlYWRpbmdzIGJlY29tZSBoMSAvIGgyIC8g4oCmLCBhbmRcbiAqIGVzY2FwZSBzdHJheSBgPGAgb3V0c2lkZSBjb2RlIHNvIE1EWCBkb2Vzbid0IG1pc3Rha2UgdGhlbSBmb3IgSlNYLiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0JvZHkoYm9keTogc3RyaW5nKSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2UoYm9keSkgYXMgUm9vdFxuICB2aXNpdCh0cmVlLCBcImhlYWRpbmdcIiwgbm9kZSA9PiB7XG4gICAgaWYgKG5vZGUuZGVwdGggPiAxKSBub2RlLmRlcHRoID0gKG5vZGUuZGVwdGggLSAxKSBhcyAxIHwgMiB8IDMgfCA0IHwgNVxuICB9KVxuICBpZiAodHJlZS5jaGlsZHJlblswXT8udHlwZSA9PT0gXCJoZWFkaW5nXCIgJiYgdHJlZS5jaGlsZHJlblswXS5kZXB0aCA9PT0gMSkge1xuICAgIHRyZWUuY2hpbGRyZW4uc2hpZnQoKVxuICB9XG4gIHJldHVybiBlc2NhcGVNZHhBbmdsZXMoc3RyaW5naWZpZXIuc3RyaW5naWZ5KHRyZWUpLnRyaW1FbmQoKSlcbn1cblxuLyoqIEVzY2FwZSBgPGAgdG8gYCZsdDtgIG91dHNpZGUgZmVuY2VkIGNvZGUgYmxvY2tzIGFuZCBpbmxpbmUgYmFja3RpY2sgc3BhbnNcbiAqIHNvIGNvbW1pdCBtZXNzYWdlcyB3aXRoIHBsYWNlaG9sZGVycyBsaWtlIGA8c3ViZGlyPmAgZG9uJ3QgZ2V0IHBhcnNlZCBhc1xuICogSlNYIGJ5IE1EWC4gVGhlIGVudGl0eSBpcyB1c2VkIHJhdGhlciB0aGFuIGEgYFxcPGAgYmFja3NsYXNoIGVzY2FwZSBiZWNhdXNlXG4gKiBNRFgncyBKU1gtYXdhcmUgcGFyc2VyIGRvZXMgbm90IGhvbm91ciB0aGUgYmFja3NsYXNoIGFuZCBzdGlsbCByZWFkc1xuICogYFxcPG5hbWU+YCBhcyBhbiB1bmNsb3NlZCB0YWcuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlTWR4QW5nbGVzKG1hcmtkb3duOiBzdHJpbmcpIHtcbiAgbGV0IGluRmVuY2UgPSBmYWxzZVxuICByZXR1cm4gbWFya2Rvd25cbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKGxpbmUgPT4ge1xuICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcImBgYFwiKSkge1xuICAgICAgICBpbkZlbmNlID0gIWluRmVuY2VcbiAgICAgICAgcmV0dXJuIGxpbmVcbiAgICAgIH1cbiAgICAgIGlmIChpbkZlbmNlKSByZXR1cm4gbGluZVxuICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZSgvYFteYF0qYHw8L2csIG1hdGNoID0+IChtYXRjaCA9PT0gXCI8XCIgPyBcIiZsdDtcIiA6IG1hdGNoKSlcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXCIpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkRnJvbUdpdEh1YihcbiAgc291cmNlOiBzdHJpbmcsXG4gIG1ldGFQYXRoOiBzdHJpbmcsXG4gIGNhY2hlRGlyOiBzdHJpbmcsXG4pOiBQcm9taXNlPENoYW5nZWxvZ0VudHJ5W10gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VHaXRIdWJSZXBvKHNvdXJjZSlcbiAgaWYgKCFwYXJzZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBHaXRIdWIgcmVwbyBmcm9tIHNvdXJjZTogJHtzb3VyY2V9YClcbiAgfVxuXG4gIGNvbnN0IHVybCA9IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cGFyc2VkLm93bmVyfS8ke3BhcnNlZC5yZXBvfS9yZWxlYXNlcz9wZXJfcGFnZT0xMDBgXG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvblwiLFxuICAgIFwiWC1HaXRIdWItQXBpLVZlcnNpb25cIjogXCIyMDIyLTExLTI4XCIsXG4gIH1cblxuICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTlxuICBpZiAodG9rZW4pIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt0b2tlbn1gXG5cbiAgY29uc3QgbWV0YSA9IGF3YWl0IHJlYWRNZXRhKG1ldGFQYXRoKVxuICBjb25zdCBoYXNDYWNoZSA9IGF3YWl0IGV4aXN0cyhjYWNoZURpcilcbiAgaWYgKG1ldGEgJiYgaGFzQ2FjaGUpIGhlYWRlcnNbXCJJZi1Ob25lLU1hdGNoXCJdID0gbWV0YS5ldGFnXG5cbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnMgfSlcblxuICBpZiAocmVzLnN0YXR1cyA9PT0gMzA0KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgaWYgKCFyZXMub2spIHtcbiAgICBjb25zdCByZW1haW5pbmcgPSByZXMuaGVhZGVycy5nZXQoXCJ4LXJhdGVsaW1pdC1yZW1haW5pbmdcIilcbiAgICBjb25zdCByZXNldCA9IHJlcy5oZWFkZXJzLmdldChcIngtcmF0ZWxpbWl0LXJlc2V0XCIpXG4gICAgY29uc3QgbXNnID0gYEdpdEh1YiBBUEkgJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fSAocmF0ZS1saW1pdCByZW1haW5pbmc6ICR7cmVtYWluaW5nID8/IFwiP1wifSwgcmVzZXQ6ICR7cmVzZXQgPz8gXCI/XCJ9KWBcbiAgICBpZiAoaGFzQ2FjaGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHttc2d9IOKAlCBmYWxsaW5nIGJhY2sgdG8gY2FjaGVkIGNoYW5nZWxvZ2ApXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cpXG4gIH1cblxuICBjb25zdCByZWxlYXNlcyA9IChhd2FpdCByZXMuanNvbigpKSBhcyBSZWxlYXNlW11cbiAgY29uc3QgZXRhZyA9IHJlcy5oZWFkZXJzLmdldChcImV0YWdcIilcbiAgaWYgKGV0YWcpIHtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKG1ldGFQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBtZXRhUGF0aCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICB7IGV0YWcsIGZldGNoZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0gc2F0aXNmaWVzIENhY2hlTWV0YSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICksXG4gICAgICBcInV0Zi04XCIsXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VzLm1hcChyZWxlYXNlID0+ICh7XG4gICAgc2x1Zzogc2x1Z2lmeShyZWxlYXNlLnRhZ19uYW1lKSxcbiAgICB0aXRsZTogcmVsZWFzZS50YWdfbmFtZSxcbiAgICBkYXRlOiByZWxlYXNlLnB1Ymxpc2hlZF9hdCA/PyB1bmRlZmluZWQsXG4gICAgYm9keTogKHJlbGVhc2UuYm9keSA/PyBcIlwiKS50cmltKCksXG4gICAgc291cmNlVXJsOiByZWxlYXNlLmh0bWxfdXJsID8/IHVuZGVmaW5lZCxcbiAgfSkpXG59XG5cbmZ1bmN0aW9uIHdyYXBGcm9udG1hdHRlcihlbnRyeTogQ2hhbmdlbG9nRW50cnksIHNlY3Rpb246IENoYW5nZWxvZ1NlY3Rpb24pIHtcbiAgY29uc3QgbGluZXMgPSBbXCItLS1cIiwgYHRpdGxlOiAke2VudHJ5LnRpdGxlfWAsIGBwYXRoOiAke3NlY3Rpb24ucHJlZml4fSR7ZW50cnkuc2x1Z30vYF1cbiAgaWYgKGVudHJ5LmRhdGUpIGxpbmVzLnB1c2goYGRhdGU6ICR7ZW50cnkuZGF0ZX1gKVxuICBpZiAoZW50cnkuc291cmNlVXJsKSB7XG4gICAgbGluZXMucHVzaChgc291cmNlVXJsOiAke2VudHJ5LnNvdXJjZVVybH1gLCBcInNvdXJjZUFjdGlvbjogdmlld1wiKVxuICB9XG4gIGxpbmVzLnB1c2goXCItLS1cIiwgXCJcIiwgYCMgJHtlbnRyeS50aXRsZX1gLCBcIlwiLCBwcm9jZXNzQm9keShlbnRyeS5ib2R5KSlcbiAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIilcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZE1ldGEobWV0YVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVNZXRhIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUobWV0YVBhdGgsIFwidXRmLThcIilcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIENhY2hlTWV0YVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhpc3RzKHBhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIGF3YWl0IGFjY2VzcyhwYXRoKVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,133 @@
|
|
|
1
|
+
import { mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { basename, dirname, join } from "node:path";
|
|
3
|
+
import { temporaryDirectoryTask } from "tempy";
|
|
1
4
|
import { describe, expect, it } from "vite-plus/test";
|
|
2
|
-
import {
|
|
5
|
+
import { partitionBySection } from "../../helpers/section.js";
|
|
6
|
+
import { Config } from "../../models/config.js";
|
|
7
|
+
import { targetDirFor } from "../target/build.js";
|
|
8
|
+
import { buildChangelog, cacheIncludeGlob, changelogCacheDir, escapeMdxAngles, splitLocalChangelog, } from "./build.js";
|
|
9
|
+
describe("buildChangelog", () => {
|
|
10
|
+
it("keeps several changelog sections apart when they share a version", () => temporaryDirectoryTask(async (root) => {
|
|
11
|
+
const configPath = join(root, "livemark.config.ts");
|
|
12
|
+
const standard = {
|
|
13
|
+
type: "changelog",
|
|
14
|
+
title: "Changelog",
|
|
15
|
+
prefix: "/changelog/",
|
|
16
|
+
source: "standard/CHANGELOG.md",
|
|
17
|
+
version: true,
|
|
18
|
+
position: "sidebar",
|
|
19
|
+
};
|
|
20
|
+
const python = {
|
|
21
|
+
type: "changelog",
|
|
22
|
+
title: "Changelog",
|
|
23
|
+
prefix: "/python/changelog/",
|
|
24
|
+
source: "python/CHANGELOG.md",
|
|
25
|
+
version: true,
|
|
26
|
+
position: "sidebar",
|
|
27
|
+
};
|
|
28
|
+
const config = makeConfig(root, [standard, python]);
|
|
29
|
+
await writeChangelog(root, "standard", "## 0.2.0\n\nStandard two.\n\n## 0.1.0\n\nStandard one.\n");
|
|
30
|
+
await writeChangelog(root, "python", "## 0.2.0\n\nPython two.\n");
|
|
31
|
+
try {
|
|
32
|
+
await buildChangelog(standard, config);
|
|
33
|
+
await buildChangelog(python, config);
|
|
34
|
+
const standardDir = changelogCacheDir(standard, config);
|
|
35
|
+
const pythonDir = changelogCacheDir(python, config);
|
|
36
|
+
const cacheRoot = join(targetDirFor(configPath), "cache/changelog");
|
|
37
|
+
expect(dirname(standardDir)).toBe(cacheRoot);
|
|
38
|
+
expect(dirname(pythonDir)).toBe(cacheRoot);
|
|
39
|
+
expect(basename(standardDir)).toMatch(/^changelog-[0-9a-f]{8}$/);
|
|
40
|
+
expect(basename(pythonDir)).toMatch(/^python-changelog-[0-9a-f]{8}$/);
|
|
41
|
+
expect(cacheIncludeGlob(python, config)).toBe(join(pythonDir, "*.md"));
|
|
42
|
+
expect((await readdir(standardDir)).sort()).toEqual(["0-1-0.md", "0-2-0.md"]);
|
|
43
|
+
expect(await readdir(pythonDir)).toEqual(["0-2-0.md"]);
|
|
44
|
+
const standardEntry = await readFile(join(standardDir, "0-2-0.md"), "utf-8");
|
|
45
|
+
const pythonEntry = await readFile(join(pythonDir, "0-2-0.md"), "utf-8");
|
|
46
|
+
expect(standardEntry).toContain("path: /changelog/0-2-0/");
|
|
47
|
+
expect(standardEntry).toContain("Standard two.");
|
|
48
|
+
expect(pythonEntry).toContain("path: /python/changelog/0-2-0/");
|
|
49
|
+
expect(pythonEntry).toContain("Python two.");
|
|
50
|
+
const olderEntry = await readFile(join(standardDir, "0-1-0.md"), "utf-8");
|
|
51
|
+
const articles = [standardEntry, olderEntry, pythonEntry].map(markdown => ({
|
|
52
|
+
path: markdown.match(/^path: (.+)$/m)?.[1] ?? "",
|
|
53
|
+
}));
|
|
54
|
+
const buckets = partitionBySection(articles, [standard, python]);
|
|
55
|
+
expect(buckets.get("/changelog/")?.map(a => a.path)).toEqual([
|
|
56
|
+
"/changelog/0-2-0/",
|
|
57
|
+
"/changelog/0-1-0/",
|
|
58
|
+
]);
|
|
59
|
+
expect(buckets.get("/python/changelog/")?.map(a => a.path)).toEqual([
|
|
60
|
+
"/python/changelog/0-2-0/",
|
|
61
|
+
]);
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
await rm(targetDirFor(configPath), { recursive: true, force: true });
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
it("cleans only its own cache directory on rebuild", () => temporaryDirectoryTask(async (root) => {
|
|
68
|
+
const configPath = join(root, "livemark.config.ts");
|
|
69
|
+
const standard = {
|
|
70
|
+
type: "changelog",
|
|
71
|
+
title: "Changelog",
|
|
72
|
+
prefix: "/changelog/",
|
|
73
|
+
source: "standard/CHANGELOG.md",
|
|
74
|
+
position: "sidebar",
|
|
75
|
+
};
|
|
76
|
+
const python = {
|
|
77
|
+
type: "changelog",
|
|
78
|
+
title: "Changelog",
|
|
79
|
+
prefix: "/python/changelog/",
|
|
80
|
+
source: "python/CHANGELOG.md",
|
|
81
|
+
position: "sidebar",
|
|
82
|
+
};
|
|
83
|
+
const config = makeConfig(root, [standard, python]);
|
|
84
|
+
await writeChangelog(root, "standard", "## 0.2.0\n\nStandard two.\n");
|
|
85
|
+
await writeChangelog(root, "python", "## 0.3.0\n\nPython three.\n");
|
|
86
|
+
try {
|
|
87
|
+
await buildChangelog(standard, config);
|
|
88
|
+
await buildChangelog(python, config);
|
|
89
|
+
await writeChangelog(root, "standard", "## 0.4.0\n\nStandard four.\n");
|
|
90
|
+
await buildChangelog(standard, config);
|
|
91
|
+
expect(await readdir(changelogCacheDir(standard, config))).toEqual(["0-4-0.md"]);
|
|
92
|
+
expect(await readdir(changelogCacheDir(python, config))).toEqual(["0-3-0.md"]);
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
await rm(targetDirFor(configPath), { recursive: true, force: true });
|
|
96
|
+
}
|
|
97
|
+
}));
|
|
98
|
+
it("keeps sections apart when their prefixes slugify to the same key", () => temporaryDirectoryTask(async (root) => {
|
|
99
|
+
const configPath = join(root, "livemark.config.ts");
|
|
100
|
+
const nested = {
|
|
101
|
+
type: "changelog",
|
|
102
|
+
title: "Changelog",
|
|
103
|
+
prefix: "/python/changelog/",
|
|
104
|
+
source: "nested/CHANGELOG.md",
|
|
105
|
+
position: "sidebar",
|
|
106
|
+
};
|
|
107
|
+
const flat = {
|
|
108
|
+
type: "changelog",
|
|
109
|
+
title: "Changelog",
|
|
110
|
+
prefix: "/python-changelog/",
|
|
111
|
+
source: "flat/CHANGELOG.md",
|
|
112
|
+
position: "sidebar",
|
|
113
|
+
};
|
|
114
|
+
const config = makeConfig(root, [nested, flat]);
|
|
115
|
+
await writeChangelog(root, "nested", "## 0.1.0\n\nNested one.\n");
|
|
116
|
+
await writeChangelog(root, "flat", "## 0.2.0\n\nFlat two.\n");
|
|
117
|
+
try {
|
|
118
|
+
await buildChangelog(nested, config);
|
|
119
|
+
await buildChangelog(flat, config);
|
|
120
|
+
const nestedDir = changelogCacheDir(nested, config);
|
|
121
|
+
const flatDir = changelogCacheDir(flat, config);
|
|
122
|
+
expect(nestedDir).not.toBe(flatDir);
|
|
123
|
+
expect(await readdir(nestedDir)).toEqual(["0-1-0.md"]);
|
|
124
|
+
expect(await readdir(flatDir)).toEqual(["0-2-0.md"]);
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
await rm(targetDirFor(configPath), { recursive: true, force: true });
|
|
128
|
+
}
|
|
129
|
+
}));
|
|
130
|
+
});
|
|
3
131
|
describe("splitLocalChangelog", () => {
|
|
4
132
|
it("splits by h2 headings", () => {
|
|
5
133
|
const input = `# Changelog
|
|
@@ -63,4 +191,30 @@ Release notes.
|
|
|
63
191
|
expect(entries[0]?.date).toBeUndefined();
|
|
64
192
|
});
|
|
65
193
|
});
|
|
66
|
-
|
|
194
|
+
describe("escapeMdxAngles", () => {
|
|
195
|
+
it("escapes a bare angle placeholder as an HTML entity", () => {
|
|
196
|
+
// `\<` is honoured by remark but NOT by MDX's JSX-aware parser, which still
|
|
197
|
+
// reads `\<name>` as an unclosed tag. Only the entity survives both.
|
|
198
|
+
expect(escapeMdxAngles("a <name> b")).toBe("a <name> b");
|
|
199
|
+
});
|
|
200
|
+
it("escapes a placeholder that follows a bare URL", () => {
|
|
201
|
+
const input = "See https://fairspec.org/profiles/latest/<name>.json, ok.";
|
|
202
|
+
expect(escapeMdxAngles(input)).toBe("See https://fairspec.org/profiles/latest/<name>.json, ok.");
|
|
203
|
+
});
|
|
204
|
+
it("leaves inline code spans alone", () => {
|
|
205
|
+
expect(escapeMdxAngles("use `--resource <name>` here")).toBe("use `--resource <name>` here");
|
|
206
|
+
});
|
|
207
|
+
it("leaves fenced code blocks alone", () => {
|
|
208
|
+
const input = "```sh\nfoo <bar>\n```";
|
|
209
|
+
expect(escapeMdxAngles(input)).toBe(input);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
function makeConfig(root, sections) {
|
|
213
|
+
const configPath = join(root, "livemark.config.ts");
|
|
214
|
+
return { ...Config.parse({ root, configPath, sections }), base: undefined };
|
|
215
|
+
}
|
|
216
|
+
async function writeChangelog(root, dir, body) {
|
|
217
|
+
await mkdir(join(root, dir), { recursive: true });
|
|
218
|
+
await writeFile(join(root, dir, "CHANGELOG.md"), body, "utf-8");
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQudW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NvdXJjZS9hY3Rpb25zL2NoYW5nZWxvZy9idWlsZC51bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDMUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2pELE9BQU8sRUFDTCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsbUJBQW1CLEdBQ3BCLE1BQU0sWUFBWSxDQUFBO0FBRW5CLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7SUFDOUIsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRSxDQUMxRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO1FBQ25ELE1BQU0sUUFBUSxHQUFxQjtZQUNqQyxJQUFJLEVBQUUsV0FBVztZQUNqQixLQUFLLEVBQUUsV0FBVztZQUNsQixNQUFNLEVBQUUsYUFBYTtZQUNyQixNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLE9B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Q0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRCw4QkFBOEIsQ0FDL0IsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtRQUN6QyxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQTtRQUNyQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUE7QUFFRixTQUFTLFVBQVUsQ0FBQyxJQUFZLEVBQUUsUUFBNEI7SUFDNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO0lBQ25ELE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFBO0FBQzdFLENBQUM7QUFFRCxLQUFLLFVBQVUsY0FBYyxDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsSUFBWTtJQUNuRSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDakQsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2RpciwgcmVhZEZpbGUsIHJlYWRkaXIsIHJtLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgdGVtcG9yYXJ5RGlyZWN0b3J5VGFzayB9IGZyb20gXCJ0ZW1weVwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlLXBsdXMvdGVzdFwiXG5pbXBvcnQgeyBwYXJ0aXRpb25CeVNlY3Rpb24gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9zZWN0aW9uLnRzXCJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uZmlnLnRzXCJcbmltcG9ydCB0eXBlIHsgQ2hhbmdlbG9nU2VjdGlvbiB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VjdGlvbi50c1wiXG5pbXBvcnQgeyB0YXJnZXREaXJGb3IgfSBmcm9tIFwiLi4vdGFyZ2V0L2J1aWxkLnRzXCJcbmltcG9ydCB7XG4gIGJ1aWxkQ2hhbmdlbG9nLFxuICBjYWNoZUluY2x1ZGVHbG9iLFxuICBjaGFuZ2Vsb2dDYWNoZURpcixcbiAgZXNjYXBlTWR4QW5nbGVzLFxuICBzcGxpdExvY2FsQ2hhbmdlbG9nLFxufSBmcm9tIFwiLi9idWlsZC50c1wiXG5cbmRlc2NyaWJlKFwiYnVpbGRDaGFuZ2Vsb2dcIiwgKCkgPT4ge1xuICBpdChcImtlZXBzIHNldmVyYWwgY2hhbmdlbG9nIHNlY3Rpb25zIGFwYXJ0IHdoZW4gdGhleSBzaGFyZSBhIHZlcnNpb25cIiwgKCkgPT5cbiAgICB0ZW1wb3JhcnlEaXJlY3RvcnlUYXNrKGFzeW5jIHJvb3QgPT4ge1xuICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4ocm9vdCwgXCJsaXZlbWFyay5jb25maWcudHNcIilcbiAgICAgIGNvbnN0IHN0YW5kYXJkOiBDaGFuZ2Vsb2dTZWN0aW9uID0ge1xuICAgICAgICB0eXBlOiBcImNoYW5nZWxvZ1wiLFxuICAgICAgICB0aXRsZTogXCJDaGFuZ2Vsb2dcIixcbiAgICAgICAgcHJlZml4OiBcIi9jaGFuZ2Vsb2cvXCIsXG4gICAgICAgIHNvdXJjZTogXCJzdGFuZGFyZC9DSEFOR0VMT0cubWRcIixcbiAgICAgICAgdmVyc2lvbjogdHJ1ZSxcbiAgICAgICAgcG9zaXRpb246IFwic2lkZWJhclwiLFxuICAgICAgfVxuICAgICAgY29uc3QgcHl0aG9uOiBDaGFuZ2Vsb2dTZWN0aW9uID0ge1xuICAgICAgICB0eXBlOiBcImNoYW5nZWxvZ1wiLFxuICAgICAgICB0aXRsZTogXCJDaGFuZ2Vsb2dcIixcbiAgICAgICAgcHJlZml4OiBcIi9weXRob24vY2hhbmdlbG9nL1wiLFxuICAgICAgICBzb3VyY2U6IFwicHl0aG9uL0NIQU5HRUxPRy5tZFwiLFxuICAgICAgICB2ZXJzaW9uOiB0cnVlLFxuICAgICAgICBwb3NpdGlvbjogXCJzaWRlYmFyXCIsXG4gICAgICB9XG4gICAgICBjb25zdCBjb25maWcgPSBtYWtlQ29uZmlnKHJvb3QsIFtzdGFuZGFyZCwgcHl0aG9uXSlcblxuICAgICAgYXdhaXQgd3JpdGVDaGFuZ2Vsb2coXG4gICAgICAgIHJvb3QsXG4gICAgICAgIFwic3RhbmRhcmRcIixcbiAgICAgICAgXCIjIyAwLjIuMFxcblxcblN0YW5kYXJkIHR3by5cXG5cXG4jIyAwLjEuMFxcblxcblN0YW5kYXJkIG9uZS5cXG5cIixcbiAgICAgIClcbiAgICAgIGF3YWl0IHdyaXRlQ2hhbmdlbG9nKHJvb3QsIFwicHl0aG9uXCIsIFwiIyMgMC4yLjBcXG5cXG5QeXRob24gdHdvLlxcblwiKVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBidWlsZENoYW5nZWxvZyhzdGFuZGFyZCwgY29uZmlnKVxuICAgICAgICBhd2FpdCBidWlsZENoYW5nZWxvZyhweXRob24sIGNvbmZpZylcblxuICAgICAgICBjb25zdCBzdGFuZGFyZERpciA9IGNoYW5nZWxvZ0NhY2hlRGlyKHN0YW5kYXJkLCBjb25maWcpXG4gICAgICAgIGNvbnN0IHB5dGhvbkRpciA9IGNoYW5nZWxvZ0NhY2hlRGlyKHB5dGhvbiwgY29uZmlnKVxuICAgICAgICBjb25zdCBjYWNoZVJvb3QgPSBqb2luKHRhcmdldERpckZvcihjb25maWdQYXRoKSwgXCJjYWNoZS9jaGFuZ2Vsb2dcIilcbiAgICAgICAgZXhwZWN0KGRpcm5hbWUoc3RhbmRhcmREaXIpKS50b0JlKGNhY2hlUm9vdClcbiAgICAgICAgZXhwZWN0KGRpcm5hbWUocHl0aG9uRGlyKSkudG9CZShjYWNoZVJvb3QpXG4gICAgICAgIGV4cGVjdChiYXNlbmFtZShzdGFuZGFyZERpcikpLnRvTWF0Y2goL15jaGFuZ2Vsb2ctWzAtOWEtZl17OH0kLylcbiAgICAgICAgZXhwZWN0KGJhc2VuYW1lKHB5dGhvbkRpcikpLnRvTWF0Y2goL15weXRob24tY2hhbmdlbG9nLVswLTlhLWZdezh9JC8pXG4gICAgICAgIGV4cGVjdChjYWNoZUluY2x1ZGVHbG9iKHB5dGhvbiwgY29uZmlnKSkudG9CZShqb2luKHB5dGhvbkRpciwgXCIqLm1kXCIpKVxuXG4gICAgICAgIGV4cGVjdCgoYXdhaXQgcmVhZGRpcihzdGFuZGFyZERpcikpLnNvcnQoKSkudG9FcXVhbChbXCIwLTEtMC5tZFwiLCBcIjAtMi0wLm1kXCJdKVxuICAgICAgICBleHBlY3QoYXdhaXQgcmVhZGRpcihweXRob25EaXIpKS50b0VxdWFsKFtcIjAtMi0wLm1kXCJdKVxuXG4gICAgICAgIGNvbnN0IHN0YW5kYXJkRW50cnkgPSBhd2FpdCByZWFkRmlsZShqb2luKHN0YW5kYXJkRGlyLCBcIjAtMi0wLm1kXCIpLCBcInV0Zi04XCIpXG4gICAgICAgIGNvbnN0IHB5dGhvbkVudHJ5ID0gYXdhaXQgcmVhZEZpbGUoam9pbihweXRob25EaXIsIFwiMC0yLTAubWRcIiksIFwidXRmLThcIilcbiAgICAgICAgZXhwZWN0KHN0YW5kYXJkRW50cnkpLnRvQ29udGFpbihcInBhdGg6IC9jaGFuZ2Vsb2cvMC0yLTAvXCIpXG4gICAgICAgIGV4cGVjdChzdGFuZGFyZEVudHJ5KS50b0NvbnRhaW4oXCJTdGFuZGFyZCB0d28uXCIpXG4gICAgICAgIGV4cGVjdChweXRob25FbnRyeSkudG9Db250YWluKFwicGF0aDogL3B5dGhvbi9jaGFuZ2Vsb2cvMC0yLTAvXCIpXG4gICAgICAgIGV4cGVjdChweXRob25FbnRyeSkudG9Db250YWluKFwiUHl0aG9uIHR3by5cIilcblxuICAgICAgICBjb25zdCBvbGRlckVudHJ5ID0gYXdhaXQgcmVhZEZpbGUoam9pbihzdGFuZGFyZERpciwgXCIwLTEtMC5tZFwiKSwgXCJ1dGYtOFwiKVxuICAgICAgICBjb25zdCBhcnRpY2xlcyA9IFtzdGFuZGFyZEVudHJ5LCBvbGRlckVudHJ5LCBweXRob25FbnRyeV0ubWFwKG1hcmtkb3duID0+ICh7XG4gICAgICAgICAgcGF0aDogbWFya2Rvd24ubWF0Y2goL15wYXRoOiAoLispJC9tKT8uWzFdID8/IFwiXCIsXG4gICAgICAgIH0pKVxuICAgICAgICBjb25zdCBidWNrZXRzID0gcGFydGl0aW9uQnlTZWN0aW9uKGFydGljbGVzLCBbc3RhbmRhcmQsIHB5dGhvbl0pXG4gICAgICAgIGV4cGVjdChidWNrZXRzLmdldChcIi9jaGFuZ2Vsb2cvXCIpPy5tYXAoYSA9PiBhLnBhdGgpKS50b0VxdWFsKFtcbiAgICAgICAgICBcIi9jaGFuZ2Vsb2cvMC0yLTAvXCIsXG4gICAgICAgICAgXCIvY2hhbmdlbG9nLzAtMS0wL1wiLFxuICAgICAgICBdKVxuICAgICAgICBleHBlY3QoYnVja2V0cy5nZXQoXCIvcHl0aG9uL2NoYW5nZWxvZy9cIik/Lm1hcChhID0+IGEucGF0aCkpLnRvRXF1YWwoW1xuICAgICAgICAgIFwiL3B5dGhvbi9jaGFuZ2Vsb2cvMC0yLTAvXCIsXG4gICAgICAgIF0pXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBybSh0YXJnZXREaXJGb3IoY29uZmlnUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0pKVxuXG4gIGl0KFwiY2xlYW5zIG9ubHkgaXRzIG93biBjYWNoZSBkaXJlY3Rvcnkgb24gcmVidWlsZFwiLCAoKSA9PlxuICAgIHRlbXBvcmFyeURpcmVjdG9yeVRhc2soYXN5bmMgcm9vdCA9PiB7XG4gICAgICBjb25zdCBjb25maWdQYXRoID0gam9pbihyb290LCBcImxpdmVtYXJrLmNvbmZpZy50c1wiKVxuICAgICAgY29uc3Qgc3RhbmRhcmQ6IENoYW5nZWxvZ1NlY3Rpb24gPSB7XG4gICAgICAgIHR5cGU6IFwiY2hhbmdlbG9nXCIsXG4gICAgICAgIHRpdGxlOiBcIkNoYW5nZWxvZ1wiLFxuICAgICAgICBwcmVmaXg6IFwiL2NoYW5nZWxvZy9cIixcbiAgICAgICAgc291cmNlOiBcInN0YW5kYXJkL0NIQU5HRUxPRy5tZFwiLFxuICAgICAgICBwb3NpdGlvbjogXCJzaWRlYmFyXCIsXG4gICAgICB9XG4gICAgICBjb25zdCBweXRob246IENoYW5nZWxvZ1NlY3Rpb24gPSB7XG4gICAgICAgIHR5cGU6IFwiY2hhbmdlbG9nXCIsXG4gICAgICAgIHRpdGxlOiBcIkNoYW5nZWxvZ1wiLFxuICAgICAgICBwcmVmaXg6IFwiL3B5dGhvbi9jaGFuZ2Vsb2cvXCIsXG4gICAgICAgIHNvdXJjZTogXCJweXRob24vQ0hBTkdFTE9HLm1kXCIsXG4gICAgICAgIHBvc2l0aW9uOiBcInNpZGViYXJcIixcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbmZpZyA9IG1ha2VDb25maWcocm9vdCwgW3N0YW5kYXJkLCBweXRob25dKVxuXG4gICAgICBhd2FpdCB3cml0ZUNoYW5nZWxvZyhyb290LCBcInN0YW5kYXJkXCIsIFwiIyMgMC4yLjBcXG5cXG5TdGFuZGFyZCB0d28uXFxuXCIpXG4gICAgICBhd2FpdCB3cml0ZUNoYW5nZWxvZyhyb290LCBcInB5dGhvblwiLCBcIiMjIDAuMy4wXFxuXFxuUHl0aG9uIHRocmVlLlxcblwiKVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBidWlsZENoYW5nZWxvZyhzdGFuZGFyZCwgY29uZmlnKVxuICAgICAgICBhd2FpdCBidWlsZENoYW5nZWxvZyhweXRob24sIGNvbmZpZylcbiAgICAgICAgYXdhaXQgd3JpdGVDaGFuZ2Vsb2cocm9vdCwgXCJzdGFuZGFyZFwiLCBcIiMjIDAuNC4wXFxuXFxuU3RhbmRhcmQgZm91ci5cXG5cIilcbiAgICAgICAgYXdhaXQgYnVpbGRDaGFuZ2Vsb2coc3RhbmRhcmQsIGNvbmZpZylcblxuICAgICAgICBleHBlY3QoYXdhaXQgcmVhZGRpcihjaGFuZ2Vsb2dDYWNoZURpcihzdGFuZGFyZCwgY29uZmlnKSkpLnRvRXF1YWwoW1wiMC00LTAubWRcIl0pXG4gICAgICAgIGV4cGVjdChhd2FpdCByZWFkZGlyKGNoYW5nZWxvZ0NhY2hlRGlyKHB5dGhvbiwgY29uZmlnKSkpLnRvRXF1YWwoW1wiMC0zLTAubWRcIl0pXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBybSh0YXJnZXREaXJGb3IoY29uZmlnUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0pKVxuXG4gIGl0KFwia2VlcHMgc2VjdGlvbnMgYXBhcnQgd2hlbiB0aGVpciBwcmVmaXhlcyBzbHVnaWZ5IHRvIHRoZSBzYW1lIGtleVwiLCAoKSA9PlxuICAgIHRlbXBvcmFyeURpcmVjdG9yeVRhc2soYXN5bmMgcm9vdCA9PiB7XG4gICAgICBjb25zdCBjb25maWdQYXRoID0gam9pbihyb290LCBcImxpdmVtYXJrLmNvbmZpZy50c1wiKVxuICAgICAgY29uc3QgbmVzdGVkOiBDaGFuZ2Vsb2dTZWN0aW9uID0ge1xuICAgICAgICB0eXBlOiBcImNoYW5nZWxvZ1wiLFxuICAgICAgICB0aXRsZTogXCJDaGFuZ2Vsb2dcIixcbiAgICAgICAgcHJlZml4OiBcIi9weXRob24vY2hhbmdlbG9nL1wiLFxuICAgICAgICBzb3VyY2U6IFwibmVzdGVkL0NIQU5HRUxPRy5tZFwiLFxuICAgICAgICBwb3NpdGlvbjogXCJzaWRlYmFyXCIsXG4gICAgICB9XG4gICAgICBjb25zdCBmbGF0OiBDaGFuZ2Vsb2dTZWN0aW9uID0ge1xuICAgICAgICB0eXBlOiBcImNoYW5nZWxvZ1wiLFxuICAgICAgICB0aXRsZTogXCJDaGFuZ2Vsb2dcIixcbiAgICAgICAgcHJlZml4OiBcIi9weXRob24tY2hhbmdlbG9nL1wiLFxuICAgICAgICBzb3VyY2U6IFwiZmxhdC9DSEFOR0VMT0cubWRcIixcbiAgICAgICAgcG9zaXRpb246IFwic2lkZWJhclwiLFxuICAgICAgfVxuICAgICAgY29uc3QgY29uZmlnID0gbWFrZUNvbmZpZyhyb290LCBbbmVzdGVkLCBmbGF0XSlcblxuICAgICAgYXdhaXQgd3JpdGVDaGFuZ2Vsb2cocm9vdCwgXCJuZXN0ZWRcIiwgXCIjIyAwLjEuMFxcblxcbk5lc3RlZCBvbmUuXFxuXCIpXG4gICAgICBhd2FpdCB3cml0ZUNoYW5nZWxvZyhyb290LCBcImZsYXRcIiwgXCIjIyAwLjIuMFxcblxcbkZsYXQgdHdvLlxcblwiKVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBidWlsZENoYW5nZWxvZyhuZXN0ZWQsIGNvbmZpZylcbiAgICAgICAgYXdhaXQgYnVpbGRDaGFuZ2Vsb2coZmxhdCwgY29uZmlnKVxuXG4gICAgICAgIGNvbnN0IG5lc3RlZERpciA9IGNoYW5nZWxvZ0NhY2hlRGlyKG5lc3RlZCwgY29uZmlnKVxuICAgICAgICBjb25zdCBmbGF0RGlyID0gY2hhbmdlbG9nQ2FjaGVEaXIoZmxhdCwgY29uZmlnKVxuICAgICAgICBleHBlY3QobmVzdGVkRGlyKS5ub3QudG9CZShmbGF0RGlyKVxuICAgICAgICBleHBlY3QoYXdhaXQgcmVhZGRpcihuZXN0ZWREaXIpKS50b0VxdWFsKFtcIjAtMS0wLm1kXCJdKVxuICAgICAgICBleHBlY3QoYXdhaXQgcmVhZGRpcihmbGF0RGlyKSkudG9FcXVhbChbXCIwLTItMC5tZFwiXSlcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHJtKHRhcmdldERpckZvcihjb25maWdQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gICAgICB9XG4gICAgfSkpXG59KVxuXG5kZXNjcmliZShcInNwbGl0TG9jYWxDaGFuZ2Vsb2dcIiwgKCkgPT4ge1xuICBpdChcInNwbGl0cyBieSBoMiBoZWFkaW5nc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBgIyBDaGFuZ2Vsb2dcblxuIyMgWzAuMi4wXSAtIDIwMjYtMDQtMTVcblxuIyMjIEFkZGVkXG5cbi0gRm9vXG5cbiMjIFswLjEuMF0gLSAyMDI2LTA0LTEwXG5cbkluaXRpYWwgcmVsZWFzZS5cbmBcbiAgICBjb25zdCBlbnRyaWVzID0gc3BsaXRMb2NhbENoYW5nZWxvZyhpbnB1dClcbiAgICBleHBlY3QoZW50cmllcykudG9IYXZlTGVuZ3RoKDIpXG4gICAgZXhwZWN0KGVudHJpZXNbMF0/LnRpdGxlKS50b0JlKFwiMC4yLjBcIilcbiAgICBleHBlY3QoZW50cmllc1swXT8uZGF0ZSkudG9CZShcIjIwMjYtMDQtMTVcIilcbiAgICBleHBlY3QoZW50cmllc1swXT8uc2x1ZykudG9CZShcIjAtMi0wXCIpXG4gICAgZXhwZWN0KGVudHJpZXNbMV0/LnRpdGxlKS50b0JlKFwiMC4xLjBcIilcbiAgICBleHBlY3QoZW50cmllc1sxXT8uZGF0ZSkudG9CZShcIjIwMjYtMDQtMTBcIilcbiAgfSlcblxuICBpdChcInByZXNlcnZlcyBoMyBoZWFkaW5nIHN0cnVjdHVyZSBpbiBib2R5XCIsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IGAjIyAxLjAuMFxuXG4jIyMgQWRkZWRcblxuLSBUaGluZyBvbmVcbmBcbiAgICBjb25zdCBlbnRyaWVzID0gc3BsaXRMb2NhbENoYW5nZWxvZyhpbnB1dClcbiAgICBleHBlY3QoZW50cmllc1swXT8uYm9keSkudG9Db250YWluKFwiIyMjIEFkZGVkXCIpXG4gICAgZXhwZWN0KGVudHJpZXNbMF0/LmJvZHkpLnRvQ29udGFpbihcIi0gVGhpbmcgb25lXCIpXG4gIH0pXG5cbiAgaXQoXCJpZ25vcmVzICMjIGluc2lkZSBmZW5jZWQgY29kZSBibG9ja3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gYCMjIDEuMC4wXG5cblNvbWUgcHJvc2UuXG5cblxcYFxcYFxcYG1kXG4jIyBOb3QgYSByZWFsIHZlcnNpb24gaGVhZGluZ1xuXFxgXFxgXFxgXG5cbiMjIDAuOS4wXG5cbk9sZGVyLlxuYFxuICAgIGNvbnN0IGVudHJpZXMgPSBzcGxpdExvY2FsQ2hhbmdlbG9nKGlucHV0KVxuICAgIGV4cGVjdChlbnRyaWVzKS50b0hhdmVMZW5ndGgoMilcbiAgICBleHBlY3QoZW50cmllc1swXT8udGl0bGUpLnRvQmUoXCIxLjAuMFwiKVxuICAgIGV4cGVjdChlbnRyaWVzWzBdPy5ib2R5KS50b0NvbnRhaW4oXCJOb3QgYSByZWFsIHZlcnNpb24gaGVhZGluZ1wiKVxuICAgIGV4cGVjdChlbnRyaWVzWzFdPy50aXRsZSkudG9CZShcIjAuOS4wXCIpXG4gIH0pXG5cbiAgaXQoXCJoYW5kbGVzIGJhcmUgdmVyc2lvbiBoZWFkaW5ncyB3aXRob3V0IGJyYWNrZXRzIG9yIGRhdGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gYCMjIHYxLjIuM1xuXG5SZWxlYXNlIG5vdGVzLlxuYFxuICAgIGNvbnN0IGVudHJpZXMgPSBzcGxpdExvY2FsQ2hhbmdlbG9nKGlucHV0KVxuICAgIGV4cGVjdChlbnRyaWVzWzBdPy50aXRsZSkudG9CZShcInYxLjIuM1wiKVxuICAgIGV4cGVjdChlbnRyaWVzWzBdPy5zbHVnKS50b0JlKFwidjEtMi0zXCIpXG4gICAgZXhwZWN0KGVudHJpZXNbMF0/LmRhdGUpLnRvQmVVbmRlZmluZWQoKVxuICB9KVxufSlcblxuZGVzY3JpYmUoXCJlc2NhcGVNZHhBbmdsZXNcIiwgKCkgPT4ge1xuICBpdChcImVzY2FwZXMgYSBiYXJlIGFuZ2xlIHBsYWNlaG9sZGVyIGFzIGFuIEhUTUwgZW50aXR5XCIsICgpID0+IHtcbiAgICAvLyBgXFw8YCBpcyBob25vdXJlZCBieSByZW1hcmsgYnV0IE5PVCBieSBNRFgncyBKU1gtYXdhcmUgcGFyc2VyLCB3aGljaCBzdGlsbFxuICAgIC8vIHJlYWRzIGBcXDxuYW1lPmAgYXMgYW4gdW5jbG9zZWQgdGFnLiBPbmx5IHRoZSBlbnRpdHkgc3Vydml2ZXMgYm90aC5cbiAgICBleHBlY3QoZXNjYXBlTWR4QW5nbGVzKFwiYSA8bmFtZT4gYlwiKSkudG9CZShcImEgJmx0O25hbWU+IGJcIilcbiAgfSlcblxuICBpdChcImVzY2FwZXMgYSBwbGFjZWhvbGRlciB0aGF0IGZvbGxvd3MgYSBiYXJlIFVSTFwiLCAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBcIlNlZSBodHRwczovL2ZhaXJzcGVjLm9yZy9wcm9maWxlcy9sYXRlc3QvPG5hbWU+Lmpzb24sIG9rLlwiXG4gICAgZXhwZWN0KGVzY2FwZU1keEFuZ2xlcyhpbnB1dCkpLnRvQmUoXG4gICAgICBcIlNlZSBodHRwczovL2ZhaXJzcGVjLm9yZy9wcm9maWxlcy9sYXRlc3QvJmx0O25hbWU+Lmpzb24sIG9rLlwiLFxuICAgIClcbiAgfSlcblxuICBpdChcImxlYXZlcyBpbmxpbmUgY29kZSBzcGFucyBhbG9uZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGVzY2FwZU1keEFuZ2xlcyhcInVzZSBgLS1yZXNvdXJjZSA8bmFtZT5gIGhlcmVcIikpLnRvQmUoXG4gICAgICBcInVzZSBgLS1yZXNvdXJjZSA8bmFtZT5gIGhlcmVcIixcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJsZWF2ZXMgZmVuY2VkIGNvZGUgYmxvY2tzIGFsb25lXCIsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IFwiYGBgc2hcXG5mb28gPGJhcj5cXG5gYGBcIlxuICAgIGV4cGVjdChlc2NhcGVNZHhBbmdsZXMoaW5wdXQpKS50b0JlKGlucHV0KVxuICB9KVxufSlcblxuZnVuY3Rpb24gbWFrZUNvbmZpZyhyb290OiBzdHJpbmcsIHNlY3Rpb25zOiBDaGFuZ2Vsb2dTZWN0aW9uW10pIHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4ocm9vdCwgXCJsaXZlbWFyay5jb25maWcudHNcIilcbiAgcmV0dXJuIHsgLi4uQ29uZmlnLnBhcnNlKHsgcm9vdCwgY29uZmlnUGF0aCwgc2VjdGlvbnMgfSksIGJhc2U6IHVuZGVmaW5lZCB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ2hhbmdlbG9nKHJvb3Q6IHN0cmluZywgZGlyOiBzdHJpbmcsIGJvZHk6IHN0cmluZykge1xuICBhd2FpdCBta2Rpcihqb2luKHJvb3QsIGRpciksIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKHJvb3QsIGRpciwgXCJDSEFOR0VMT0cubWRcIiksIGJvZHksIFwidXRmLThcIilcbn1cbiJdfQ==
|
|
@@ -59,4 +59,4 @@ export async function loadConfig(path) {
|
|
|
59
59
|
const base = resolveBase(validated.base, detectCommand());
|
|
60
60
|
return { ...validated, base, root: dirname(resolved), configPath: resolved };
|
|
61
61
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NvdXJjZS9hY3Rpb25zL2NvbmZpZy9sb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXhDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTFDOzs7NkVBRzZFO0FBQzdFLE1BQU0sZUFBZSxHQUFzQztJQUN6RCxLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0lBQ2QsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQTtBQUVELFNBQVMsYUFBYTtJQUNwQixLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEMsSUFBSSxHQUFHLElBQUksZUFBZTtZQUFFLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBRSxDQUFBO0lBQzFELENBQUM7SUFDRCxPQUFPLE9BQWdCLENBQUE7QUFDekIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQWE7SUFDNUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQTtJQUMvRSxNQUFNLE9BQU8sR0FBRyxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDOUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLE9BQU8sQ0FBQTtJQUNoQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLG9CQUFvQixDQUFDLENBQUE7SUFDMUQsSUFBSSxLQUFLLEdBQWUsRUFBRSxDQUFBO0lBQzFCLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDekIseUVBQXlFO1FBQ3pFLE1BQU0sR0FBRyxHQUFHLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQTtRQUM3RCxNQUFNLE1BQU0sR0FBNEIsTUFBTSxNQUFNLGtDQUFDLEdBQUcsRUFBQyxDQUFBO1FBQ3pELEtBQUssR0FBSSxNQUFNLENBQUMsT0FBc0IsSUFBSSxFQUFFLENBQUE7SUFDOUMsQ0FBQztTQUFNLElBQUksUUFBUSxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3JDLHFFQUFxRTtJQUNyRSxvRUFBb0U7SUFDcEUsb0VBQW9FO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUE7SUFDekQsT0FBTyxFQUFFLEdBQUcsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQTtBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGRpcm5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIlxuaW1wb3J0IHR5cGUgeyBDb25maWcsIFVzZXJDb25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5pbXBvcnQgeyByZXNvbHZlQmFzZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL3Jlc29sdmUtYmFzZS50c1wiXG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwiLi9kZWZpbmUudHNcIlxuXG4vKiogTWFwIGxpdmVtYXJrIENMSSB2ZXJicyB0byB0aGUgVml0ZS1lcXVpdmFsZW50IGBjb21tYW5kYCBzdHJpbmcgdXNlZCBieVxuICogIGByZXNvbHZlQmFzZSgpYC4gYHByZXZpZXdgIHNlcnZlcyB0aGUgcHJvZHVjdGlvbiBidWlsZCdzIGFydGlmYWN0cyBzb1xuICogIGl0IHVzZXMgdGhlIGJ1aWxkLW1vZGUgYmFzZS4gRGVmYXVsdCB0byBgXCJidWlsZFwiYCBmb3Igc2FmZXR5IHdoZW4gbm9cbiAqICByZWNvZ25pc2VkIHZlcmIgaXMgaW4gYXJndiAodGhlIGNvbW1vbiBwYXRoIGlzIGBsaXZlbWFyayA8dmVyYj4gLi4uYCkuICovXG5jb25zdCBDT01NQU5EX0JZX1ZFUkI6IFJlY29yZDxzdHJpbmcsIFwiYnVpbGRcIiB8IFwic2VydmVcIj4gPSB7XG4gIHN0YXJ0OiBcInNlcnZlXCIsXG4gIGJ1aWxkOiBcImJ1aWxkXCIsXG4gIHByZXZpZXc6IFwiYnVpbGRcIixcbn1cblxuZnVuY3Rpb24gZGV0ZWN0Q29tbWFuZCgpIHtcbiAgZm9yIChjb25zdCBhcmcgb2YgcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gICAgaWYgKGFyZyBpbiBDT01NQU5EX0JZX1ZFUkIpIHJldHVybiBDT01NQU5EX0JZX1ZFUkJbYXJnXSFcbiAgfVxuICByZXR1cm4gXCJidWlsZFwiIGFzIGNvbnN0XG59XG5cbi8qKlxuICogTG9hZCBhbmQgdmFsaWRhdGUgYSBjb25maWcgZmlsZSwgY2hlY2tpbmcgLS1jb25maWcvLWMgQ0xJIGFyZywgdGhlbiBjd2QuXG4gKlxuICogSWYgYSBwYXRoIGlzIHByb3ZpZGVkIGV4cGxpY2l0bHkgKGFyZyBvciBgLS1jb25maWdgL2AtY2ApIGFuZCB0aGVcbiAqIGZpbGUgaXMgbWlzc2luZywgdGhyb3dzIOKAlCB0aGUgdXNlciBhc2tlZCBmb3IgYSBzcGVjaWZpYyBjb25maWcgYW5kXG4gKiBpdCBpc24ndCB0aGVyZS4gSWYgbm8gcGF0aCBpcyBwcm92aWRlZCBhbmQgbm8gYGxpdmVtYXJrLmNvbmZpZy50c2BcbiAqIGV4aXN0cyBpbiBjd2QsIGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQgY29uZmlnIHdpdGggYSBzeW50aGVzaXplZFxuICogYGNvbmZpZ1BhdGggPSA8Y3dkPi9saXZlbWFyay5jb25maWcudHNgIHNvIGRvd25zdHJlYW0gY29kZSAodGFyZ2V0XG4gKiBoYXNoLCB3YXRjaGVyKSBzdGlsbCBoYXMgYSBzdGFibGUgcGVyLXByb2plY3Qga2V5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZyhwYXRoPzogc3RyaW5nKTogUHJvbWlzZTxDb25maWc+IHtcbiAgY29uc3QgY29uZmlnSW5kZXggPSBwcm9jZXNzLmFyZ3YuZmluZEluZGV4KGEgPT4gYSA9PT0gXCItY1wiIHx8IGEgPT09IFwiLS1jb25maWdcIilcbiAgY29uc3QgY2xpUGF0aCA9IGNvbmZpZ0luZGV4ICE9PSAtMSA/IHByb2Nlc3MuYXJndltjb25maWdJbmRleCArIDFdIDogdW5kZWZpbmVkXG4gIGNvbnN0IGV4cGxpY2l0ID0gcGF0aCA/PyBjbGlQYXRoXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShleHBsaWNpdCA/PyBcImxpdmVtYXJrLmNvbmZpZy50c1wiKVxuICBsZXQgaW5wdXQ6IFVzZXJDb25maWcgPSB7fVxuICBpZiAoZXhpc3RzU3luYyhyZXNvbHZlZCkpIHtcbiAgICAvLyBDYWNoZS1idXN0IHRoZSBFU00gaW1wb3J0IHNvIGRldi1zZXJ2ZXIgcmVzdGFydCByZWxvYWRzIGVkaXRzIG9uIGRpc2suXG4gICAgY29uc3QgdXJsID0gYCR7cGF0aFRvRmlsZVVSTChyZXNvbHZlZCkuaHJlZn0/dD0ke0RhdGUubm93KCl9YFxuICAgIGNvbnN0IG1vZHVsZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBhd2FpdCBpbXBvcnQodXJsKVxuICAgIGlucHV0ID0gKG1vZHVsZS5kZWZhdWx0IGFzIFVzZXJDb25maWcpID8/IHt9XG4gIH0gZWxzZSBpZiAoZXhwbGljaXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZyBmaWxlIG5vdCBmb3VuZDogJHtyZXNvbHZlZH1gKVxuICB9XG4gIGNvbnN0IHZhbGlkYXRlZCA9IGRlZmluZUNvbmZpZyhpbnB1dClcbiAgLy8gUmVzb2x2ZSB0aGUgZnVuY3Rpb24gZm9ybSBvZiBgYmFzZWAgb25jZSwgaGVyZSwgdXNpbmcgdGhlIGxpdmVtYXJrXG4gIC8vIENMSSB2ZXJiLiBEb3duc3RyZWFtIGNvbnN1bWVycyAoVml0ZSBwbHVnaW4sIGNvbnRlbnQtY29sbGVjdGlvbnMsXG4gIC8vIHJ1bnRpbWUpIGdldCBhIHBsYWluIHN0cmluZ3x1bmRlZmluZWQgYW5kIG5ldmVyIHNlZSB0aGUgZnVuY3Rpb24uXG4gIGNvbnN0IGJhc2UgPSByZXNvbHZlQmFzZSh2YWxpZGF0ZWQuYmFzZSwgZGV0ZWN0Q29tbWFuZCgpKVxuICByZXR1cm4geyAuLi52YWxpZGF0ZWQsIGJhc2UsIHJvb3Q6IGRpcm5hbWUocmVzb2x2ZWQpLCBjb25maWdQYXRoOiByZXNvbHZlZCB9XG59XG4iXX0=
|
|
@@ -36,4 +36,4 @@ describe("loadConfig", () => {
|
|
|
36
36
|
expect(config.title).toBe("Livemark");
|
|
37
37
|
}));
|
|
38
38
|
});
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC51bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc291cmNlL2FjdGlvbnMvY29uZmlnL2xvYWQudW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV0QyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUMxQixFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0UsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2pGLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEdBQUcsRUFBRSxDQUM1RSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLEVBQUU7UUFDcEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLElBQUksQ0FBQztZQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQTtZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQTtRQUNwRSxDQUFDO2dCQUFTLENBQUM7WUFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRUwsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRSxDQUMvQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLEVBQUU7UUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO1FBQ3JELEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLG1EQUFtRCxDQUFDLENBQUE7UUFDakYsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRUwsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRSxDQUN2RCxzQkFBc0IsQ0FBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLEVBQUU7UUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO1FBQ3JELEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLENBQUE7UUFDbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNQLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IHRlbXBvcmFyeURpcmVjdG9yeVRhc2sgfSBmcm9tIFwidGVtcHlcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZS1wbHVzL3Rlc3RcIlxuaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gXCIuL2xvYWQudHNcIlxuXG5kZXNjcmliZShcImxvYWRDb25maWdcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCB0aHJvdyB3aGVuIGFuIGV4cGxpY2l0IHBhdGggcG9pbnRzIGF0IGEgbWlzc2luZyBmaWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBleHBlY3QobG9hZENvbmZpZyhcIi9ub25leGlzdGVudC9jb25maWcudHNcIikpLnJlamVjdHMudG9UaHJvdygvbm90IGZvdW5kLylcbiAgfSlcblxuICBpdChcInNob3VsZCByZXR1cm4gZGVmYXVsdHMgd2hlbiBubyBwYXRoIGlzIGdpdmVuIGFuZCBjd2QgaGFzIG5vIGNvbmZpZ1wiLCAoKSA9PlxuICAgIHRlbXBvcmFyeURpcmVjdG9yeVRhc2soYXN5bmMgdG1wRGlyID0+IHtcbiAgICAgIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKClcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3MuY2hkaXIodG1wRGlyKVxuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKClcbiAgICAgICAgZXhwZWN0KGNvbmZpZy50aXRsZSkudG9CZShcIkxpdmVtYXJrXCIpXG4gICAgICAgIGV4cGVjdChjb25maWcuaW5jbHVkZSkudG9CZShcIioqLyoubWRcIilcbiAgICAgICAgZXhwZWN0KGNvbmZpZy5yb290KS50b0JlKHRtcERpcilcbiAgICAgICAgZXhwZWN0KGNvbmZpZy5jb25maWdQYXRoKS50b0JlKGpvaW4odG1wRGlyLCBcImxpdmVtYXJrLmNvbmZpZy50c1wiKSlcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHByb2Nlc3MuY2hkaXIoY3dkKVxuICAgICAgfVxuICAgIH0pKVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgY29uZmlnIGZyb20gZXhwbGljaXQgcGF0aFwiLCAoKSA9PlxuICAgIHRlbXBvcmFyeURpcmVjdG9yeVRhc2soYXN5bmMgdG1wRGlyID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKHRtcERpciwgXCJsaXZlbWFyay5jb25maWcudHNcIilcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgJ2V4cG9ydCBkZWZhdWx0IHsgaW5jbHVkZTogXCJhcnRpY2xlcy8qKi8qLm1keFwiIH1cXG4nKVxuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyhjb25maWdQYXRoKVxuICAgICAgZXhwZWN0KGNvbmZpZy5pbmNsdWRlKS50b0JlKFwiYXJ0aWNsZXMvKiovKi5tZHhcIilcbiAgICAgIGV4cGVjdChjb25maWcucm9vdCkudG9CZSh0bXBEaXIpXG4gICAgfSkpXG5cbiAgaXQoXCJzaG91bGQgYXBwbHkgZGVmYXVsdHMgd2hlbiBmaWVsZHMgYXJlIG9taXR0ZWRcIiwgKCkgPT5cbiAgICB0ZW1wb3JhcnlEaXJlY3RvcnlUYXNrKGFzeW5jIHRtcERpciA9PiB7XG4gICAgICBjb25zdCBjb25maWdQYXRoID0gam9pbih0bXBEaXIsIFwibGl2ZW1hcmsuY29uZmlnLnRzXCIpXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIFwiZXhwb3J0IGRlZmF1bHQge31cXG5cIilcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWcoY29uZmlnUGF0aClcbiAgICAgIGV4cGVjdChjb25maWcuaW5jbHVkZSkudG9CZShcIioqLyoubWRcIilcbiAgICAgIGV4cGVjdChjb25maWcudGl0bGUpLnRvQmUoXCJMaXZlbWFya1wiKVxuICAgIH0pKVxufSlcbiJdfQ==
|