livemark 0.24.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 +1 -1
- package/build/actions/changelog/build.d.ts +21 -9
- package/build/actions/changelog/build.js +29 -17
- package/build/actions/changelog/build.unit.js +156 -2
- package/build/components/Callout.js +2 -2
- package/build/components/LinkButton.js +2 -2
- package/build/components/Section.js +2 -2
- package/build/components/SectionHeader.js +2 -2
- package/build/content-collections.js +5 -4
- package/build/elements/accordion.js +2 -2
- package/build/elements/alert-dialog.js +2 -2
- package/build/elements/alert.js +2 -2
- package/build/elements/aspect-ratio.js +2 -2
- package/build/elements/avatar.js +2 -2
- package/build/elements/badge.js +2 -2
- package/build/elements/breadcrumb.js +2 -2
- package/build/elements/button-group.js +2 -2
- package/build/elements/button.js +2 -2
- package/build/elements/calendar.js +2 -2
- package/build/elements/card.js +2 -2
- package/build/elements/carousel.js +2 -2
- package/build/elements/chart.js +2 -2
- package/build/elements/checkbox.js +2 -2
- package/build/elements/command.js +2 -2
- package/build/elements/context-menu.js +2 -2
- package/build/elements/dialog.js +2 -2
- package/build/elements/drawer.js +2 -2
- package/build/elements/dropdown-menu.js +2 -2
- package/build/elements/empty.js +2 -2
- package/build/elements/field.js +2 -2
- package/build/elements/hover-card.js +2 -2
- 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 +2 -2
- package/build/elements/popover.js +2 -2
- package/build/elements/progress.js +2 -2
- package/build/elements/radio-group.js +2 -2
- package/build/elements/resizable.js +2 -2
- 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 +2 -2
- 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/package.json +17 -19
- package/source/actions/changelog/build.ts +29 -16
- package/source/actions/changelog/build.unit.ts +191 -1
- package/source/components/Callout.tsx +1 -1
- package/source/components/LinkButton.tsx +1 -1
- package/source/components/Section.tsx +1 -1
- package/source/components/SectionHeader.tsx +1 -1
- package/source/content-collections.ts +4 -3
- package/source/elements/accordion.tsx +1 -1
- package/source/elements/alert-dialog.tsx +1 -1
- package/source/elements/alert.tsx +1 -1
- package/source/elements/aspect-ratio.tsx +1 -1
- package/source/elements/avatar.tsx +1 -1
- package/source/elements/badge.tsx +1 -1
- package/source/elements/breadcrumb.tsx +1 -1
- package/source/elements/button-group.tsx +1 -1
- package/source/elements/button.tsx +1 -1
- package/source/elements/calendar.tsx +1 -1
- package/source/elements/card.tsx +1 -1
- package/source/elements/carousel.tsx +1 -1
- package/source/elements/chart.tsx +1 -1
- package/source/elements/checkbox.tsx +1 -1
- package/source/elements/command.tsx +1 -1
- package/source/elements/context-menu.tsx +1 -1
- package/source/elements/dialog.tsx +1 -1
- package/source/elements/drawer.tsx +1 -1
- package/source/elements/dropdown-menu.tsx +1 -1
- 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 +1 -1
- package/source/elements/input-otp.tsx +1 -1
- package/source/elements/input.tsx +1 -1
- package/source/elements/item.tsx +1 -1
- package/source/elements/kbd.tsx +1 -1
- package/source/elements/label.tsx +1 -1
- package/source/elements/menubar.tsx +1 -1
- package/source/elements/native-select.tsx +1 -1
- package/source/elements/navigation-menu.tsx +1 -1
- package/source/elements/pagination.tsx +1 -1
- package/source/elements/popover.tsx +1 -1
- package/source/elements/progress.tsx +1 -1
- package/source/elements/radio-group.tsx +1 -1
- package/source/elements/resizable.tsx +1 -1
- package/source/elements/scroll-area.tsx +1 -1
- package/source/elements/select.tsx +1 -1
- package/source/elements/separator.tsx +1 -1
- package/source/elements/sheet.tsx +1 -1
- package/source/elements/sidebar.tsx +1 -1
- 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 +1 -1
- package/source/elements/tabs.tsx +1 -1
- package/source/elements/textarea.tsx +1 -1
- package/source/elements/toggle-group.tsx +1 -1
- package/source/elements/toggle.tsx +1 -1
- package/source/elements/tooltip.tsx +1 -1
- 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.
|
|
@@ -69,7 +69,7 @@ export default defineConfig({
|
|
|
69
69
|
|
|
70
70
|
- **Article** (default when `type` is omitted): flat docs with a tree sidebar.
|
|
71
71
|
- **Blog** (`type: "blog"`): auto-generated index at `prefix`, sorts by `date`, exposes `/prefix/tags/<tag>/` pages.
|
|
72
|
-
- **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.
|
|
73
73
|
|
|
74
74
|
Shared fields on every section: `title`, `prefix` (keep trailing-slashed), `type`, `icon` (lucide), `position` (`"header"` default, `"sidebar"` also available).
|
|
75
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,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
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";
|
|
@@ -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
|
}
|
|
@@ -191,4 +203,4 @@ async function exists(path) {
|
|
|
191
203
|
return false;
|
|
192
204
|
}
|
|
193
205
|
}
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvYWN0aW9ucy9jaGFuZ2Vsb2cvYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2xELE9BQU8sT0FBTyxNQUFNLHVCQUF1QixDQUFBO0FBRTNDLE9BQU8sRUFBRSxRQUFRLElBQUksYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDaEUsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sZUFBZSxNQUFNLGtCQUFrQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDakMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBR3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBdUJqRCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQTtBQUV0QyxNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDekMsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRTtJQUNqRCxNQUFNLEVBQUUsR0FBRztJQUNYLE1BQU0sRUFBRSxJQUFJO0lBQ1osUUFBUSxFQUFFLEdBQUc7Q0FDZCxDQUFDLENBQUE7QUFFRjs7b0JBRW9CO0FBQ3BCLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFjO0lBQzdDLE9BQU8sSUFBSSxD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SUFBSSxDQUFDLENBQUE7UUFDbEIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFjY2VzcywgbWtkaXIsIHJlYWRGaWxlLCByZWFkZGlyLCBybSwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHNsdWdpZnkgZnJvbSBcIkBzaW5kcmVzb3JodXMvc2x1Z2lmeVwiXG5pbXBvcnQgdHlwZSB7IFJvb3QsIFJvb3RDb250ZW50IH0gZnJvbSBcIm1kYXN0XCJcbmltcG9ydCB7IHRvU3RyaW5nIGFzIG1kYXN0VG9TdHJpbmcgfSBmcm9tIFwibWRhc3QtdXRpbC10by1zdHJpbmdcIlxuaW1wb3J0IHJlbWFya1BhcnNlIGZyb20gXCJyZW1hcmstcGFyc2VcIlxuaW1wb3J0IHJlbWFya1N0cmluZ2lmeSBmcm9tIFwicmVtYXJrLXN0cmluZ2lmeVwiXG5pbXBvcnQgeyB1bmlmaWVkIH0gZnJvbSBcInVuaWZpZWRcIlxuaW1wb3J0IHsgdmlzaXQgfSBmcm9tIFwidW5pc3QtdXRpbC12aXNpdFwiXG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29uZmlnLnRzXCJcbmltcG9ydCB0eXBlIHsgQ2hhbmdlbG9nU2VjdGlvbiB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VjdGlvbi50c1wiXG5pbXBvcnQgeyBpc0dpdEh1YlVybCwgcGFyc2VHaXRIdWJSZXBvIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvY2hhbmdlbG9nLXNvdXJjZS50c1wiXG5pbXBvcnQgeyB0YXJnZXREaXJGb3IgfSBmcm9tIFwiLi4vdGFyZ2V0L2J1aWxkLnRzXCJcblxuaW50ZXJmYWNlIFJlbGVhc2Uge1xuICB0YWdfbmFtZTogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIHB1Ymxpc2hlZF9hdD86IHN0cmluZyB8IG51bGxcbiAgYm9keT86IHN0cmluZyB8IG51bGxcbiAgaHRtbF91cmw/OiBzdHJpbmcgfCBudWxsXG59XG5cbmludGVyZmFjZSBDYWNoZU1ldGEge1xuICBldGFnOiBzdHJpbmdcbiAgZmV0Y2hlZEF0OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIENoYW5nZWxvZ0VudHJ5IHtcbiAgc2x1Zzogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgZGF0ZT86IHN0cmluZ1xuICBib2R5OiBzdHJpbmdcbiAgc291cmNlVXJsPzogc3RyaW5nXG59XG5cbmNvbnN0IENBQ0hFX1NVQkRJUiA9IFwiY2FjaGUvY2hhbmdlbG9nXCJcblxuY29uc3QgcGFyc2VyID0gdW5pZmllZCgpLnVzZShyZW1hcmtQYXJzZSlcbmNvbnN0IHN0cmluZ2lmaWVyID0gdW5pZmllZCgpLnVzZShyZW1hcmtTdHJpbmdpZnksIHtcbiAgYnVsbGV0OiBcIi1cIixcbiAgZmVuY2VzOiB0cnVlLFxuICBlbXBoYXNpczogXCJfXCIsXG59KVxuXG4vKiogR2xvYiAoYWJzb2x1dGUgcGF0aCkgY292ZXJpbmcgYWxsIGNhY2hlZCBjaGFuZ2Vsb2cgbWFya2Rvd24gZmlsZXMgZm9yXG4gKiAgYSBnaXZlbiBjb25zdW1lci4gVXNlZCBieSBjb250ZW50LWNvbGxlY3Rpb25zIHRvIGluY2x1ZGUgdGhlbSBpbiB0aGVcbiAqICBhcnRpY2xlIHNjYW4uICovXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVJbmNsdWRlR2xvYihjb25maWc6IENvbmZpZykge1xuICByZXR1cm4gam9pbih0YXJnZXREaXJGb3IoY29uZmlnLmNvbmZpZ1BhdGgpLCBDQUNIRV9TVUJESVIsIFwiKipcIiwgXCIqLm1kXCIpXG59XG5cbi8qKiBCdWlsZCB0aGUgcGVyLXZlcnNpb24gY2hhbmdlbG9nIGNhY2hlIGZpbGVzLiBMaXZlbWFyayBhbGxvd3Mgb25lXG4gKiAgY2hhbmdlbG9nIHBlciBwcm9qZWN0LCBzbyBhbGwgY2FjaGUgc3RhdGUgbGl2ZXMgaW4gYSBzaW5nbGVcbiAqICBgY2FjaGUvY2hhbmdlbG9nL2A6IHRoZSByZW5kZXJlZCBgLm1kYCBlbnRyaWVzIHBsdXMgYSBgbWV0YS5qc29uYFxuICogIGhvbGRpbmcgdGhlIGV0YWcgZm9yIGNvbmRpdGlvbmFsIEdFVHMuIE9uIHJlZnJlc2ggd2Ugd2lwZSBvbmx5IHRoZVxuICogIGAubWRgIGZpbGVzLCBsZWF2aW5nIG1ldGEgaW50YWN0LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ2hhbmdlbG9nKHNlY3Rpb246IENoYW5nZWxvZ1NlY3Rpb24sIGNvbmZpZzogQ29uZmlnKSB7XG4gIGNvbnN0IHRhcmdldERpciA9IHRhcmdldERpckZvcihjb25maWcuY29uZmlnUGF0aClcbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKHRhcmdldERpciwgQ0FDSEVfU1VCRElSKVxuICBjb25zdCBtZXRhUGF0aCA9IGpvaW4oY2FjaGVEaXIsIFwibWV0YS5qc29uXCIpXG5cbiAgY29uc3QgZW50cmllcyA9IGlzR2l0SHViVXJsKHNlY3Rpb24uc291cmNlKVxuICAgID8gYXdhaXQgYnVpbGRGcm9tR2l0SHViKHNlY3Rpb24uc291cmNlLCBtZXRhUGF0aCwgY2FjaGVEaXIpXG4gICAgOiBhd2FpdCBidWlsZEZyb21Mb2NhbChzZWN0aW9uLnNvdXJjZSwgY29uZmlnLnJvb3QpXG5cbiAgaWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuXG5cbiAgYXdhaXQgbWtkaXIoY2FjaGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gIGZvciAoY29uc3QgZiBvZiBhd2FpdCByZWFkZGlyKGNhY2hlRGlyKS5jYXRjaCgoKSA9PiBbXSkpIHtcbiAgICBpZiAoZi5lbmRzV2l0aChcIi5tZFwiKSkgYXdhaXQgcm0oam9pbihjYWNoZURpciwgZiksIHsgZm9yY2U6IHRydWUgfSlcbiAgfVxuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG1hcmtkb3duID0gd3JhcEZyb250bWF0dGVyKGVudHJ5LCBzZWN0aW9uKVxuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGNhY2hlRGlyLCBgJHtlbnRyeS5zbHVnfS5tZGApLCBtYXJrZG93biwgXCJ1dGYtOFwiKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkRnJvbUxvY2FsKHNvdXJjZTogc3RyaW5nLCByb290OiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKHJvb3QsIHNvdXJjZSlcbiAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCBcInV0Zi04XCIpXG4gIHJldHVybiBzcGxpdExvY2FsQ2hhbmdlbG9nKGJvZHkpXG59XG5cbi8qKiBQYXJzZSBDSEFOR0VMT0cubWQgaW50byBwZXItdmVyc2lvbiBlbnRyaWVzIHVzaW5nIG1kYXN0ICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRMb2NhbENoYW5nZWxvZyhib2R5OiBzdHJpbmcpOiBDaGFuZ2Vsb2dFbnRyeVtdIHtcbiAgY29uc3QgdHJlZSA9IHBhcnNlci5wYXJzZShib2R5KSBhcyBSb290XG4gIGNvbnN0IGVudHJpZXM6IENoYW5nZWxvZ0VudHJ5W10gPSBbXVxuICBsZXQgY3VycmVudDogeyBoZWFkaW5nOiBzdHJpbmc7IGNoaWxkcmVuOiBSb290Q29udGVudFtdIH0gfCB1bmRlZmluZWRcblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRyZWUuY2hpbGRyZW4pIHtcbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gXCJoZWFkaW5nXCIgJiYgY2hpbGQuZGVwdGggPT09IDIpIHtcbiAgICAgIGlmIChjdXJyZW50KSBlbnRyaWVzLnB1c2goZmluYWxpemVFbnRyeShjdXJyZW50KSlcbiAgICAgIGN1cnJlbnQgPSB7IGhlYWRpbmc6IG1kYXN0VG9TdHJpbmcoY2hpbGQpLCBjaGlsZHJlbjogW10gfVxuICAgIH0gZWxzZSBpZiAoY3VycmVudCkge1xuICAgICAgY3VycmVudC5jaGlsZHJlbi5wdXNoKGNoaWxkKVxuICAgIH1cbiAgfVxuICBpZiAoY3VycmVudCkgZW50cmllcy5wdXNoKGZpbmFsaXplRW50cnkoY3VycmVudCkpXG4gIHJldHVybiBlbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGZpbmFsaXplRW50cnkoaW5wdXQ6IHtcbiAgaGVhZGluZzogc3RyaW5nXG4gIGNoaWxkcmVuOiBSb290Q29udGVudFtdXG59KTogQ2hhbmdlbG9nRW50cnkge1xuICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBpbnB1dC5oZWFkaW5nLm1hdGNoKC9eXFxbPyhbXlxcXVxcc10rKVxcXT8vKVxuICBjb25zdCB2ZXJzaW9uID0gdmVyc2lvbk1hdGNoPy5bMV0gPz8gaW5wdXQuaGVhZGluZ1xuICBjb25zdCBkYXRlTWF0Y2ggPSBpbnB1dC5oZWFkaW5nLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pXG4gIGNvbnN0IGJvZHkgPSByZW5kZXJFbnRyeUJvZHkoaW5wdXQuY2hpbGRyZW4pXG4gIHJldHVybiB7XG4gICAgc2x1Zzogc2x1Z2lmeSh2ZXJzaW9uKSxcbiAgICB0aXRsZTogdmVyc2lvbixcbiAgICBkYXRlOiBkYXRlTWF0Y2g/LlswXSxcbiAgICBib2R5LFxuICB9XG59XG5cbi8qKiBTZXJpYWxpemUgYW4gZW50cnkncyBtZGFzdCBjaGlsZHJlbiBiYWNrIHRvIG1hcmtkb3duICovXG5mdW5jdGlvbiByZW5kZXJFbnRyeUJvZHkoY2hpbGRyZW46IFJvb3RDb250ZW50W10pIHtcbiAgY29uc3Qgcm9vdDogUm9vdCA9IHsgdHlwZTogXCJyb290XCIsIGNoaWxkcmVuIH1cbiAgcmV0dXJuIHN0cmluZ2lmaWVyLnN0cmluZ2lmeShyb290KS50cmltRW5kKClcbn1cblxuLyoqIERyb3AgdGhlIGJvZHkncyBsZWFkaW5nIGgxICh0eXBpY2FsbHkgdGhlIGNvbnZlbnRpb25hbC1jaGFuZ2Vsb2dcbiAqIGAjIDAuNy4yICgyMDI2LTA0LTI1KWAgYm9pbGVycGxhdGUgdGhhdCBkdXBsaWNhdGVzIHRoZSBhcnRpY2xlJ3MgdGl0bGUpLFxuICogc2hpZnQgaDLigJNoNiB1cCBieSBvbmUgc28gc3Vic2VjdGlvbiBoZWFkaW5ncyBiZWNvbWUgaDEgLyBoMiAvIOKApiwgYW5kXG4gKiBlc2NhcGUgc3RyYXkgYDxgIG91dHNpZGUgY29kZSBzbyBNRFggZG9lc24ndCBtaXN0YWtlIHRoZW0gZm9yIEpTWC4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NCb2R5KGJvZHk6IHN0cmluZykge1xuICBjb25zdCB0cmVlID0gcGFyc2VyLnBhcnNlKGJvZHkpIGFzIFJvb3RcbiAgdmlzaXQodHJlZSwgXCJoZWFkaW5nXCIsIG5vZGUgPT4ge1xuICAgIGlmIChub2RlLmRlcHRoID4gMSkgbm9kZS5kZXB0aCA9IChub2RlLmRlcHRoIC0gMSkgYXMgMSB8IDIgfCAzIHwgNCB8IDVcbiAgfSlcbiAgaWYgKHRyZWUuY2hpbGRyZW5bMF0/LnR5cGUgPT09IFwiaGVhZGluZ1wiICYmIHRyZWUuY2hpbGRyZW5bMF0uZGVwdGggPT09IDEpIHtcbiAgICB0cmVlLmNoaWxkcmVuLnNoaWZ0KClcbiAgfVxuICByZXR1cm4gZXNjYXBlTWR4QW5nbGVzKHN0cmluZ2lmaWVyLnN0cmluZ2lmeSh0cmVlKS50cmltRW5kKCkpXG59XG5cbi8qKiBFc2NhcGUgYDxgIHRvIGBcXDxgIG91dHNpZGUgZmVuY2VkIGNvZGUgYmxvY2tzIGFuZCBpbmxpbmUgYmFja3RpY2sgc3BhbnNcbiAqIHNvIGNvbW1pdCBtZXNzYWdlcyB3aXRoIHBsYWNlaG9sZGVycyBsaWtlIGA8c3ViZGlyPmAgZG9uJ3QgZ2V0IHBhcnNlZCBhc1xuICogSlNYIGJ5IE1EWC4gKi9cbmZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlcyhtYXJrZG93bjogc3RyaW5nKSB7XG4gIGxldCBpbkZlbmNlID0gZmFsc2VcbiAgcmV0dXJuIG1hcmtkb3duXG4gICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgLm1hcChsaW5lID0+IHtcbiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCJgYGBcIikpIHtcbiAgICAgICAgaW5GZW5jZSA9ICFpbkZlbmNlXG4gICAgICAgIHJldHVybiBsaW5lXG4gICAgICB9XG4gICAgICBpZiAoaW5GZW5jZSkgcmV0dXJuIGxpbmVcbiAgICAgIHJldHVybiBsaW5lLnJlcGxhY2UoL2BbXmBdKmB8PC9nLCBtYXRjaCA9PiAobWF0Y2ggPT09IFwiPFwiID8gXCJcXFxcPFwiIDogbWF0Y2gpKVxuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIilcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRGcm9tR2l0SHViKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgbWV0YVBhdGg6IHN0cmluZyxcbiAgY2FjaGVEaXI6IHN0cmluZyxcbik6IFByb21pc2U8Q2hhbmdlbG9nRW50cnlbXSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUdpdEh1YlJlcG8oc291cmNlKVxuICBpZiAoIXBhcnNlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIEdpdEh1YiByZXBvIGZyb20gc291cmNlOiAke3NvdXJjZX1gKVxuICB9XG5cbiAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtwYXJzZWQub3duZXJ9LyR7cGFyc2VkLnJlcG99L3JlbGVhc2VzP3Blcl9wYWdlPTEwMGBcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uXCIsXG4gICAgXCJYLUdpdEh1Yi1BcGktVmVyc2lvblwiOiBcIjIwMjItMTEtMjhcIixcbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOXG4gIGlmICh0b2tlbikgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke3Rva2VufWBcblxuICBjb25zdCBtZXRhID0gYXdhaXQgcmVhZE1ldGEobWV0YVBhdGgpXG4gIGNvbnN0IGhhc0NhY2hlID0gYXdhaXQgZXhpc3RzKGNhY2hlRGlyKVxuICBpZiAobWV0YSAmJiBoYXNDYWNoZSkgaGVhZGVyc1tcIklmLU5vbmUtTWF0Y2hcIl0gPSBtZXRhLmV0YWdcblxuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVycyB9KVxuXG4gIGlmIChyZXMuc3RhdHVzID09PSAzMDQpIHJldHVybiB1bmRlZmluZWRcblxuICBpZiAoIXJlcy5vaykge1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHJlcy5oZWFkZXJzLmdldChcIngtcmF0ZWxpbWl0LXJlbWFpbmluZ1wiKVxuICAgIGNvbnN0IHJlc2V0ID0gcmVzLmhlYWRlcnMuZ2V0KFwieC1yYXRlbGltaXQtcmVzZXRcIilcbiAgICBjb25zdCBtc2cgPSBgR2l0SHViIEFQSSAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9IChyYXRlLWxpbWl0IHJlbWFpbmluZzogJHtyZW1haW5pbmcgPz8gXCI/XCJ9LCByZXNldDogJHtyZXNldCA/PyBcIj9cIn0pYFxuICAgIGlmIChoYXNDYWNoZSkge1xuICAgICAgY29uc29sZS53YXJuKGAke21zZ30g4oCUIGZhbGxpbmcgYmFjayB0byBjYWNoZWQgY2hhbmdlbG9nYClcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZylcbiAgfVxuXG4gIGNvbnN0IHJlbGVhc2VzID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFJlbGVhc2VbXVxuICBjb25zdCBldGFnID0gcmVzLmhlYWRlcnMuZ2V0KFwiZXRhZ1wiKVxuICBpZiAoZXRhZykge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobWV0YVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgIG1ldGFQYXRoLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHsgZXRhZywgZmV0Y2hlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfSBzYXRpc2ZpZXMgQ2FjaGVNZXRhLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKSxcbiAgICAgIFwidXRmLThcIixcbiAgICApXG4gIH1cblxuICByZXR1cm4gcmVsZWFzZXMubWFwKHJlbGVhc2UgPT4gKHtcbiAgICBzbHVnOiBzbHVnaWZ5KHJlbGVhc2UudGFnX25hbWUpLFxuICAgIHRpdGxlOiByZWxlYXNlLnRhZ19uYW1lLFxuICAgIGRhdGU6IHJlbGVhc2UucHVibGlzaGVkX2F0ID8/IHVuZGVmaW5lZCxcbiAgICBib2R5OiAocmVsZWFzZS5ib2R5ID8/IFwiXCIpLnRyaW0oKSxcbiAgICBzb3VyY2VVcmw6IHJlbGVhc2UuaHRtbF91cmwgPz8gdW5kZWZpbmVkLFxuICB9KSlcbn1cblxuZnVuY3Rpb24gd3JhcEZyb250bWF0dGVyKGVudHJ5OiBDaGFuZ2Vsb2dFbnRyeSwgc2VjdGlvbjogQ2hhbmdlbG9nU2VjdGlvbikge1xuICBjb25zdCBsaW5lcyA9IFtcIi0tLVwiLCBgdGl0bGU6ICR7ZW50cnkudGl0bGV9YCwgYHBhdGg6ICR7c2VjdGlvbi5wcmVmaXh9JHtlbnRyeS5zbHVnfS9gXVxuICBpZiAoZW50cnkuZGF0ZSkgbGluZXMucHVzaChgZGF0ZTogJHtlbnRyeS5kYXRlfWApXG4gIGlmIChlbnRyeS5zb3VyY2VVcmwpIHtcbiAgICBsaW5lcy5wdXNoKGBzb3VyY2VVcmw6ICR7ZW50cnkuc291cmNlVXJsfWAsIFwic291cmNlQWN0aW9uOiB2aWV3XCIpXG4gIH1cbiAgbGluZXMucHVzaChcIi0tLVwiLCBcIlwiLCBgIyAke2VudHJ5LnRpdGxlfWAsIFwiXCIsIHByb2Nlc3NCb2R5KGVudHJ5LmJvZHkpKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkTWV0YShtZXRhUGF0aDogc3RyaW5nKTogUHJvbWlzZTxDYWNoZU1ldGEgfCB1bmRlZmluZWQ+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==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { AlertTriangle, Flame, Info, Lightbulb } from "lucide-react";
|
|
3
|
-
import { cn } from "
|
|
3
|
+
import { cn } from "cn";
|
|
4
4
|
const configs = {
|
|
5
5
|
note: {
|
|
6
6
|
icon: Info,
|
|
@@ -40,4 +40,4 @@ export function Callout(props) {
|
|
|
40
40
|
] }), _jsx("div", { className: "text-sm [&>p]:my-1 [&>p:first-child]:mt-0 [&>p:last-child]:mb-0", children: props.children })
|
|
41
41
|
] }));
|
|
42
42
|
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsbG91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL0NhbGxvdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFVdkIsTUFBTSxPQUFPLEdBQXVDO0lBQ2xELElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLE1BQU07UUFDYixPQUFPLEVBQ0wsdUZBQXVGO0tBQzFGO0lBQ0QsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLElBQUk7UUFDVixLQUFLLEVBQUUsTUFBTTtRQUNiLE9BQU8sRUFDTCx1RkFBdUY7S0FDMUY7SUFDRCxHQUFHLEVBQUU7UUFDSCxJQUFJLEVBQUUsU0FBUztRQUNmLEtBQUssRUFBRSxLQUFLO1FBQ1osT0FBTyxFQUNMLDRGQUE0RjtLQUMvRjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxhQUFhO1FBQ25CLEtBQUssRUFBRSxTQUFTO1FBQ2hCLE9BQU8sRUFDTCxpR0FBaUc7S0FDcEc7SUFDRCxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUUsS0FBSztRQUNYLEtBQUssRUFBRSxRQUFRO1FBQ2YsT0FBTyxFQUNMLGtGQUFrRjtLQUNyRjtDQUNGLENBQUE7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUl2QjtJQUNDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFBO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFBO0lBQ3hCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQTtJQUV6QyxPQUFPLENBQ0wsaUJBQU8sU0FBUyxFQUFFLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2hGLGVBQUssU0FBUyxFQUFDLG9EQUFvRDtvQkFDakUsS0FBQyxJQUFJLElBQUMsU0FBUyxFQUFDLGlCQUFpQixHQUFHLEVBQ3BDLHlCQUFPLEtBQUssR0FBUTtvQkFDaEIsRUFDTixjQUFLLFNBQVMsRUFBQyxpRUFBaUUsWUFDN0UsS0FBSyxDQUFDLFFBQVEsR0FDWDtZQUNBLENBQ1QsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbGVydFRyaWFuZ2xlLCBGbGFtZSwgSW5mbywgTGlnaHRidWxiIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5pbXBvcnQgeyBjbiB9IGZyb20gXCJjblwiXG5cbnR5cGUgQ2FsbG91dFR5cGUgPSBcIm5vdGVcIiB8IFwidGlwXCIgfCBcImluZm9cIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIlxuXG5pbnRlcmZhY2UgQ2FsbG91dENvbmZpZyB7XG4gIGljb246IFJlYWN0LkVsZW1lbnRUeXBlXG4gIGxhYmVsOiBzdHJpbmdcbiAgY2xhc3Nlczogc3RyaW5nXG59XG5cbmNvbnN0IGNvbmZpZ3M6IFJlY29yZDxDYWxsb3V0VHlwZSwgQ2FsbG91dENvbmZpZz4gPSB7XG4gIG5vdGU6IHtcbiAgICBpY29uOiBJbmZvLFxuICAgIGxhYmVsOiBcIk5vdGVcIixcbiAgICBjbGFzc2VzOlxuICAgICAgXCJib3JkZXItYmx1ZS01MDAvMzAgYmctYmx1ZS01MC81MCB0ZXh0LWJsdWUtOTAwIGRhcms6YmctYmx1ZS05NTAvMzAgZGFyazp0ZXh0LWJsdWUtMjAwXCIsXG4gIH0sXG4gIGluZm86IHtcbiAgICBpY29uOiBJbmZvLFxuICAgIGxhYmVsOiBcIkluZm9cIixcbiAgICBjbGFzc2VzOlxuICAgICAgXCJib3JkZXItYmx1ZS01MDAvMzAgYmctYmx1ZS01MC81MCB0ZXh0LWJsdWUtOTAwIGRhcms6YmctYmx1ZS05NTAvMzAgZGFyazp0ZXh0LWJsdWUtMjAwXCIsXG4gIH0sXG4gIHRpcDoge1xuICAgIGljb246IExpZ2h0YnVsYixcbiAgICBsYWJlbDogXCJUaXBcIixcbiAgICBjbGFzc2VzOlxuICAgICAgXCJib3JkZXItZ3JlZW4tNTAwLzMwIGJnLWdyZWVuLTUwLzUwIHRleHQtZ3JlZW4tOTAwIGRhcms6YmctZ3JlZW4tOTUwLzMwIGRhcms6dGV4dC1ncmVlbi0yMDBcIixcbiAgfSxcbiAgd2FybmluZzoge1xuICAgIGljb246IEFsZXJ0VHJpYW5nbGUsXG4gICAgbGFiZWw6IFwiV2FybmluZ1wiLFxuICAgIGNsYXNzZXM6XG4gICAgICBcImJvcmRlci15ZWxsb3ctNTAwLzMwIGJnLXllbGxvdy01MC81MCB0ZXh0LXllbGxvdy05MDAgZGFyazpiZy15ZWxsb3ctOTUwLzMwIGRhcms6dGV4dC15ZWxsb3ctMjAwXCIsXG4gIH0sXG4gIGRhbmdlcjoge1xuICAgIGljb246IEZsYW1lLFxuICAgIGxhYmVsOiBcIkRhbmdlclwiLFxuICAgIGNsYXNzZXM6XG4gICAgICBcImJvcmRlci1yZWQtNTAwLzMwIGJnLXJlZC01MC81MCB0ZXh0LXJlZC05MDAgZGFyazpiZy1yZWQtOTUwLzMwIGRhcms6dGV4dC1yZWQtMjAwXCIsXG4gIH0sXG59XG5cbi8qKiBTdHlsZWQgY2FsbG91dCBibG9jayBmb3Igbm90ZXMsIHRpcHMsIHdhcm5pbmdzLCBhbmQgb3RoZXIgYWRtb25pdGlvbnMgKi9cbmV4cG9ydCBmdW5jdGlvbiBDYWxsb3V0KHByb3BzOiB7XG4gIHR5cGU/OiBDYWxsb3V0VHlwZVxuICB0aXRsZT86IHN0cmluZ1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59KSB7XG4gIGNvbnN0IHR5cGUgPSBwcm9wcy50eXBlID8/IFwibm90ZVwiXG4gIGNvbnN0IGNvbmZpZyA9IGNvbmZpZ3NbdHlwZV1cbiAgY29uc3QgSWNvbiA9IGNvbmZpZy5pY29uXG4gIGNvbnN0IHRpdGxlID0gcHJvcHMudGl0bGUgPz8gY29uZmlnLmxhYmVsXG5cbiAgcmV0dXJuIChcbiAgICA8YXNpZGUgY2xhc3NOYW1lPXtjbihcIm5vdC1wcm9zZSBteS00IHJvdW5kZWQteGwgYm9yZGVyIHB4LTQgcHktM1wiLCBjb25maWcuY2xhc3Nlcyl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBmb250LXNlbWlib2xkIHRleHQtc20gbWItMlwiPlxuICAgICAgICA8SWNvbiBjbGFzc05hbWU9XCJzaXplLTQgc2hyaW5rLTBcIiAvPlxuICAgICAgICA8c3Bhbj57dGl0bGV9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gWyY+cF06bXktMSBbJj5wOmZpcnN0LWNoaWxkXTptdC0wIFsmPnA6bGFzdC1jaGlsZF06bWItMFwiPlxuICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2FzaWRlPlxuICApXG59XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { buttonVariants } from "../elements/button.js";
|
|
3
|
-
import { cn } from "
|
|
3
|
+
import { cn } from "cn";
|
|
4
4
|
/** Styled link button rendered from ::button leaf directives */
|
|
5
5
|
export function LinkButton(props) {
|
|
6
6
|
return (_jsx("a", { href: props.href, className: cn(buttonVariants({
|
|
@@ -8,4 +8,4 @@ export function LinkButton(props) {
|
|
|
8
8
|
size: props.size,
|
|
9
9
|
}), "no-underline"), children: props.label }));
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGlua0J1dHRvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL0xpbmtCdXR0b24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXdCLENBQUE7QUFDdkQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQTtBQUV2QixnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUsxQjtJQUNDLE9BQU8sQ0FDTCxZQUNFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUNoQixTQUFTLEVBQUUsRUFBRSxDQUNYLGNBQWMsQ0FBQztZQUNiLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FBQyxFQUNGLGNBQWMsQ0FDZixZQUVBLEtBQUssQ0FBQyxLQUFLLEdBQ1YsQ0FDTCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1dHRvblZhcmlhbnRzIH0gZnJvbSBcIi4uL2VsZW1lbnRzL2J1dHRvbi50c3hcIlxuaW1wb3J0IHsgY24gfSBmcm9tIFwiY25cIlxuXG4vKiogU3R5bGVkIGxpbmsgYnV0dG9uIHJlbmRlcmVkIGZyb20gOjpidXR0b24gbGVhZiBkaXJlY3RpdmVzICovXG5leHBvcnQgZnVuY3Rpb24gTGlua0J1dHRvbihwcm9wczoge1xuICBocmVmOiBzdHJpbmdcbiAgbGFiZWw6IHN0cmluZ1xuICB2YXJpYW50PzogXCJkZWZhdWx0XCIgfCBcIm91dGxpbmVcIiB8IFwic2Vjb25kYXJ5XCIgfCBcImdob3N0XCIgfCBcImRlc3RydWN0aXZlXCIgfCBcImxpbmtcIlxuICBzaXplPzogXCJkZWZhdWx0XCIgfCBcInNtXCIgfCBcImxnXCJcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cHJvcHMuaHJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGJ1dHRvblZhcmlhbnRzKHtcbiAgICAgICAgICB2YXJpYW50OiBwcm9wcy52YXJpYW50LFxuICAgICAgICAgIHNpemU6IHByb3BzLnNpemUsXG4gICAgICAgIH0pLFxuICAgICAgICBcIm5vLXVuZGVybGluZVwiLFxuICAgICAgKX1cbiAgICA+XG4gICAgICB7cHJvcHMubGFiZWx9XG4gICAgPC9hPlxuICApXG59XG4iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
2
|
+
import { cn } from "cn";
|
|
3
3
|
import { useInView } from "../hooks/in-view.js";
|
|
4
4
|
export function Section(props) {
|
|
5
5
|
const { ref, isVisible } = useInView();
|
|
6
6
|
return (_jsx("section", { ref: ref, id: props.id, className: cn("py-16 md:py-24 transition-all duration-700", isVisible ? "opacity-100 translate-y-0" : "opacity-0 translate-y-8", props.className), children: props.children }));
|
|
7
7
|
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL1NlY3Rpb24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUUvQyxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBSXZCO0lBQ0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQTtJQUV0QyxPQUFPLENBQ0wsa0JBQ0UsR0FBRyxFQUFFLEdBQUcsRUFDUixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFDWixTQUFTLEVBQUUsRUFBRSxDQUNYLDRDQUE0QyxFQUM1QyxTQUFTLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyx5QkFBeUIsRUFDbkUsS0FBSyxDQUFDLFNBQVMsQ0FDaEIsWUFFQSxLQUFLLENBQUMsUUFBUSxHQUNQLENBQ1gsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbiB9IGZyb20gXCJjblwiXG5pbXBvcnQgeyB1c2VJblZpZXcgfSBmcm9tIFwiLi4vaG9va3MvaW4tdmlldy50c1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBTZWN0aW9uKHByb3BzOiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGlkPzogc3RyaW5nXG59KSB7XG4gIGNvbnN0IHsgcmVmLCBpc1Zpc2libGUgfSA9IHVzZUluVmlldygpXG5cbiAgcmV0dXJuIChcbiAgICA8c2VjdGlvblxuICAgICAgcmVmPXtyZWZ9XG4gICAgICBpZD17cHJvcHMuaWR9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcInB5LTE2IG1kOnB5LTI0IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTcwMFwiLFxuICAgICAgICBpc1Zpc2libGUgPyBcIm9wYWNpdHktMTAwIHRyYW5zbGF0ZS15LTBcIiA6IFwib3BhY2l0eS0wIHRyYW5zbGF0ZS15LThcIixcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgKX1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9zZWN0aW9uPlxuICApXG59XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "
|
|
2
|
+
import { cn } from "cn";
|
|
3
3
|
export function SectionHeader(props) {
|
|
4
4
|
const align = props.align ?? "center";
|
|
5
5
|
return (_jsxs("div", { className: cn(align === "center" && "text-center", "mb-12", props.className), children: [props.label && (_jsx("p", { className: "text-primary text-xs uppercase tracking-[0.2em] font-medium mb-3", children: props.label })), _jsx("h2", { className: "font-serif text-3xl md:text-4xl lg:text-5xl font-semibold italic mb-4", children: props.title }), props.subtitle && (_jsx("p", { className: "text-muted-foreground text-lg max-w-2xl mx-auto", children: props.subtitle }))] }));
|
|
6
6
|
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdGlvbkhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL1NlY3Rpb25IZWFkZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRXZCLE1BQU0sVUFBVSxhQUFhLENBQUMsS0FNN0I7SUFDQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQTtJQUVyQyxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQzlFLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FDZCxZQUFHLFNBQVMsRUFBQyxrRUFBa0UsWUFDNUUsS0FBSyxDQUFDLEtBQUssR0FDVixDQUNMLEVBQ0QsYUFBSSxTQUFTLEVBQUMsdUVBQXVFLFlBQ2xGLEtBQUssQ0FBQyxLQUFLLEdBQ1QsRUFDSixLQUFLLENBQUMsUUFBUSxJQUFJLENBQ2pCLFlBQUcsU0FBUyxFQUFDLGlEQUFpRCxZQUMzRCxLQUFLLENBQUMsUUFBUSxHQUNiLENBQ0wsSUFDRyxDQUNQLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY24gfSBmcm9tIFwiY25cIlxuXG5leHBvcnQgZnVuY3Rpb24gU2VjdGlvbkhlYWRlcihwcm9wczoge1xuICBsYWJlbD86IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIHN1YnRpdGxlPzogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIlxufSkge1xuICBjb25zdCBhbGlnbiA9IHByb3BzLmFsaWduID8/IFwiY2VudGVyXCJcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbihhbGlnbiA9PT0gXCJjZW50ZXJcIiAmJiBcInRleHQtY2VudGVyXCIsIFwibWItMTJcIiwgcHJvcHMuY2xhc3NOYW1lKX0+XG4gICAgICB7cHJvcHMubGFiZWwgJiYgKFxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXByaW1hcnkgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSBmb250LW1lZGl1bSBtYi0zXCI+XG4gICAgICAgICAge3Byb3BzLmxhYmVsfVxuICAgICAgICA8L3A+XG4gICAgICApfVxuICAgICAgPGgyIGNsYXNzTmFtZT1cImZvbnQtc2VyaWYgdGV4dC0zeGwgbWQ6dGV4dC00eGwgbGc6dGV4dC01eGwgZm9udC1zZW1pYm9sZCBpdGFsaWMgbWItNFwiPlxuICAgICAgICB7cHJvcHMudGl0bGV9XG4gICAgICA8L2gyPlxuICAgICAge3Byb3BzLnN1YnRpdGxlICYmIChcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtbGcgbWF4LXctMnhsIG14LWF1dG9cIj5cbiAgICAgICAgICB7cHJvcHMuc3VidGl0bGV9XG4gICAgICAgIDwvcD5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiJdfQ==
|