livemark 0.10.3 → 0.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +7 -3
- package/source/vite.config.ts +24 -9
- package/target/content/article.d.ts +5 -5
- package/target/vite.config.js +19 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livemark",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.5",
|
|
4
4
|
"description": "Livemark description",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Evgeny Karev",
|
|
@@ -64,9 +64,7 @@
|
|
|
64
64
|
"mermaid": "^11.14.0",
|
|
65
65
|
"npm-to-yarn": "^3.0.1",
|
|
66
66
|
"picocolors": "1.1.1",
|
|
67
|
-
"react": "19.2.4",
|
|
68
67
|
"react-day-picker": "9.14.0",
|
|
69
|
-
"react-dom": "19.2.4",
|
|
70
68
|
"react-medium-image-zoom": "^5.4.2",
|
|
71
69
|
"react-resizable-panels": "4.9.0",
|
|
72
70
|
"recharts": "3.8.1",
|
|
@@ -103,12 +101,18 @@
|
|
|
103
101
|
"is-ci": "4.1.0",
|
|
104
102
|
"lefthook": "2.1.1",
|
|
105
103
|
"npm-check-updates": "18.0.1",
|
|
104
|
+
"react": "19.2.4",
|
|
105
|
+
"react-dom": "19.2.4",
|
|
106
106
|
"semantic-release": "24.2.9",
|
|
107
107
|
"tempy": "3.2.0",
|
|
108
108
|
"vite-plus": "0.1.19",
|
|
109
109
|
"vitest-polly": "2.1.0",
|
|
110
110
|
"wrangler": "4.85.0"
|
|
111
111
|
},
|
|
112
|
+
"peerDependencies": {
|
|
113
|
+
"react": "^19.0.0",
|
|
114
|
+
"react-dom": "^19.0.0"
|
|
115
|
+
},
|
|
112
116
|
"engines": {
|
|
113
117
|
"node": "^24.0.0",
|
|
114
118
|
"pnpm": "^10.0.0"
|
package/source/vite.config.ts
CHANGED
|
@@ -23,12 +23,32 @@ const sourceDir = import.meta.dirname
|
|
|
23
23
|
const sourceRelative = relative(config.root, sourceDir)
|
|
24
24
|
const overridesRoot = join(config.root, ".livemark")
|
|
25
25
|
|
|
26
|
-
// Seed `.livemark/.gitignore` on first run so Vite's build/cache
|
|
27
|
-
// never get committed by accident.
|
|
26
|
+
// Seed `.livemark/.gitignore` on first run so Vite's build/cache
|
|
27
|
+
// artifacts never get committed by accident. On the same first-run
|
|
28
|
+
// trigger, also seed an `.npmrc` when pnpm is in use: pnpm's strict
|
|
29
|
+
// isolation hides livemark's transitive deps (react, @tanstack/*) from
|
|
30
|
+
// Vite's optimizer, which walks from config.root rather than livemark's
|
|
31
|
+
// subtree. The public-hoist-pattern entries make those deps reachable
|
|
32
|
+
// from the consumer's top-level node_modules. Skip when the consumer
|
|
33
|
+
// already authored their own `.npmrc` — never overwrite user config.
|
|
28
34
|
const gitignorePath = join(overridesRoot, ".gitignore")
|
|
29
35
|
if (!existsSync(gitignorePath)) {
|
|
30
36
|
mkdirSync(overridesRoot, { recursive: true })
|
|
31
37
|
writeFileSync(gitignorePath, "/build\n/cache\n")
|
|
38
|
+
|
|
39
|
+
const npmrcPath = join(config.root, ".npmrc")
|
|
40
|
+
const usingPnpm = existsSync(join(config.root, "pnpm-lock.yaml"))
|
|
41
|
+
if (usingPnpm && !existsSync(npmrcPath)) {
|
|
42
|
+
writeFileSync(
|
|
43
|
+
npmrcPath,
|
|
44
|
+
"public-hoist-pattern[]=react\n" +
|
|
45
|
+
"public-hoist-pattern[]=react-*\n" +
|
|
46
|
+
"public-hoist-pattern[]=@tanstack/*\n",
|
|
47
|
+
)
|
|
48
|
+
console.log(
|
|
49
|
+
"Created .npmrc with hoist patterns for pnpm. Run `pnpm install` to apply.",
|
|
50
|
+
)
|
|
51
|
+
}
|
|
32
52
|
}
|
|
33
53
|
|
|
34
54
|
const routeChildren: VirtualRouteNode[] = [route("/$", "$.tsx")]
|
|
@@ -51,13 +71,8 @@ export default defineConfig({
|
|
|
51
71
|
define: {
|
|
52
72
|
"import.meta.env.CONFIG": JSON.stringify(WebsiteConfig.parse(config)),
|
|
53
73
|
},
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
// .livemark/ overrides, and any transitive package that re-resolves React
|
|
57
|
-
// through its own peer-dep chain all share one instance. Without this,
|
|
58
|
-
// pnpm's isolated layout can land different importers on different copies
|
|
59
|
-
// of React, breaking single-instance invariants (useSyncExternalStore
|
|
60
|
-
// returns null, hooks see wrong stores).
|
|
74
|
+
// peerDependencies guarantee one canonical react/react-dom in the pnpm
|
|
75
|
+
// store. dedupe collapses any transitive resolutions to that copy.
|
|
61
76
|
resolve: {
|
|
62
77
|
dedupe: ["react", "react-dom"],
|
|
63
78
|
},
|
|
@@ -25,19 +25,19 @@ export declare function currentSection(path: string): {
|
|
|
25
25
|
title: string;
|
|
26
26
|
prefix: string;
|
|
27
27
|
position: "header" | "sidebar";
|
|
28
|
-
type: "
|
|
28
|
+
type: "changelog";
|
|
29
|
+
source: string;
|
|
30
|
+
version?: boolean | undefined;
|
|
29
31
|
} | {
|
|
30
32
|
icon?: string | undefined;
|
|
31
33
|
title: string;
|
|
32
34
|
prefix: string;
|
|
33
35
|
position: "header" | "sidebar";
|
|
34
|
-
type: "
|
|
36
|
+
type: "article";
|
|
35
37
|
} | {
|
|
36
38
|
icon?: string | undefined;
|
|
37
39
|
title: string;
|
|
38
40
|
prefix: string;
|
|
39
41
|
position: "header" | "sidebar";
|
|
40
|
-
type: "
|
|
41
|
-
source: string;
|
|
42
|
-
version?: boolean | undefined;
|
|
42
|
+
type: "blog";
|
|
43
43
|
} | undefined;
|
package/target/vite.config.js
CHANGED
|
@@ -16,12 +16,26 @@ const config = await loadConfig();
|
|
|
16
16
|
const sourceDir = import.meta.dirname;
|
|
17
17
|
const sourceRelative = relative(config.root, sourceDir);
|
|
18
18
|
const overridesRoot = join(config.root, ".livemark");
|
|
19
|
-
// Seed `.livemark/.gitignore` on first run so Vite's build/cache
|
|
20
|
-
// never get committed by accident.
|
|
19
|
+
// Seed `.livemark/.gitignore` on first run so Vite's build/cache
|
|
20
|
+
// artifacts never get committed by accident. On the same first-run
|
|
21
|
+
// trigger, also seed an `.npmrc` when pnpm is in use: pnpm's strict
|
|
22
|
+
// isolation hides livemark's transitive deps (react, @tanstack/*) from
|
|
23
|
+
// Vite's optimizer, which walks from config.root rather than livemark's
|
|
24
|
+
// subtree. The public-hoist-pattern entries make those deps reachable
|
|
25
|
+
// from the consumer's top-level node_modules. Skip when the consumer
|
|
26
|
+
// already authored their own `.npmrc` — never overwrite user config.
|
|
21
27
|
const gitignorePath = join(overridesRoot, ".gitignore");
|
|
22
28
|
if (!existsSync(gitignorePath)) {
|
|
23
29
|
mkdirSync(overridesRoot, { recursive: true });
|
|
24
30
|
writeFileSync(gitignorePath, "/build\n/cache\n");
|
|
31
|
+
const npmrcPath = join(config.root, ".npmrc");
|
|
32
|
+
const usingPnpm = existsSync(join(config.root, "pnpm-lock.yaml"));
|
|
33
|
+
if (usingPnpm && !existsSync(npmrcPath)) {
|
|
34
|
+
writeFileSync(npmrcPath, "public-hoist-pattern[]=react\n" +
|
|
35
|
+
"public-hoist-pattern[]=react-*\n" +
|
|
36
|
+
"public-hoist-pattern[]=@tanstack/*\n");
|
|
37
|
+
console.log("Created .npmrc with hoist patterns for pnpm. Run `pnpm install` to apply.");
|
|
38
|
+
}
|
|
25
39
|
}
|
|
26
40
|
const routeChildren = [route("/$", "$.tsx")];
|
|
27
41
|
if (existsSync(join(overridesRoot, "routes"))) {
|
|
@@ -40,13 +54,8 @@ export default defineConfig({
|
|
|
40
54
|
define: {
|
|
41
55
|
"import.meta.env.CONFIG": JSON.stringify(WebsiteConfig.parse(config)),
|
|
42
56
|
},
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
// .livemark/ overrides, and any transitive package that re-resolves React
|
|
46
|
-
// through its own peer-dep chain all share one instance. Without this,
|
|
47
|
-
// pnpm's isolated layout can land different importers on different copies
|
|
48
|
-
// of React, breaking single-instance invariants (useSyncExternalStore
|
|
49
|
-
// returns null, hooks see wrong stores).
|
|
57
|
+
// peerDependencies guarantee one canonical react/react-dom in the pnpm
|
|
58
|
+
// store. dedupe collapses any transitive resolutions to that copy.
|
|
50
59
|
resolve: {
|
|
51
60
|
dedupe: ["react", "react-dom"],
|
|
52
61
|
},
|
|
@@ -77,4 +86,4 @@ export default defineConfig({
|
|
|
77
86
|
svgr(),
|
|
78
87
|
],
|
|
79
88
|
});
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2Uvdml0ZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzlELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sa0JBQWtCLE1BQU0sMkJBQTJCLENBQUE7QUFDMUQsT0FBTyxRQUFRLE1BQU0sbUJBQW1CLENBQUE7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNqRSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxLQUFLLEdBRU4sTUFBTSwrQkFBK0IsQ0FBQTtBQUN0QyxPQUFPLEtBQUssTUFBTSxzQkFBc0IsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ25DLE9BQU8sSUFBSSxNQUFNLGtCQUFrQixDQUFBO0FBQ25DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUVyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFBO0FBQ2pDLE1BQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtBQUNyQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQTtBQUVwRCxpRUFBaUU7QUFDakUsbUVBQW1FO0FBQ25FLG9FQUFvRTtBQUNwRSx1RUFBdUU7QUFDdkUsd0VBQXdFO0FBQ3hFLHNFQUFzRTtBQUN0RSxxRUFBcUU7QUFDckUscUVBQXFFO0FBQ3JFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUE7QUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO0lBQy9CLFNBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM3QyxhQUFhLENBQUMsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFFaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDN0MsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtJQUNqRSxJQUFJLFNBQVMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3hDLGFBQWEsQ0FDWCxTQUFTLEVBQ1QsZ0NBQWdDO1lBQzlCLGtDQUFrQztZQUNsQyxzQ0FBc0MsQ0FDekMsQ0FBQTtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQ1QsMkVBQTJFLENBQzVFLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sYUFBYSxHQUF1QixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUNoRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5QyxnRUFBZ0U7SUFDaEUscUVBQXFFO0lBQ3JFLG9FQUFvRTtJQUNwRSxvRUFBb0U7SUFDcEUsMERBQTBEO0lBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDM0MsYUFBYSxDQUFDLElBQUksQ0FDaEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQzdELENBQUE7QUFDSCxDQUFDO0FBRUQsZUFBZSxZQUFZLENBQUM7SUFDMUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0lBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDO0lBQ25ELEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtJQUNwQyxNQUFNLEVBQUU7UUFDTix3QkFBd0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdEU7SUFDRCx1RUFBdUU7SUFDdkUsbUVBQW1FO0lBQ25FLE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7S0FDL0I7SUFDRCxPQUFPLEVBQUU7UUFDUCxRQUFRLENBQUM7WUFDUCxZQUFZLEVBQUUsU0FBUztZQUN2QixhQUFhO1lBQ2IsT0FBTyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztZQUM5QixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7U0FDOUIsQ0FBQztRQUNGLFFBQVEsRUFBRTtRQUNWLFFBQVEsRUFBRTtRQUNWLGtCQUFrQixDQUFDO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLHdCQUF3QixDQUFDO1NBQzNELENBQUM7UUFDRixhQUFhLENBQUM7WUFDWixZQUFZLEVBQUUsY0FBYztZQUM1QixLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN0QixTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7WUFDOUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNsQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUN0QyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQ3RCLE1BQU0sRUFBRTtnQkFDTixrQkFBa0IsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQzthQUMzRDtTQUNGLENBQUM7UUFDRixLQUFLLEVBQUU7UUFDUCxJQUFJLEVBQUU7S0FDUDtDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGpvaW4sIHJlbGF0aXZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgY29udGVudENvbGxlY3Rpb25zIGZyb20gXCJAY29udGVudC1jb2xsZWN0aW9ucy92aXRlXCJcbmltcG9ydCB0YWlsd2luZCBmcm9tIFwiQHRhaWx3aW5kY3NzL3ZpdGVcIlxuaW1wb3J0IHsgZGV2dG9vbHMgfSBmcm9tIFwiQHRhbnN0YWNrL2RldnRvb2xzLXZpdGVcIlxuaW1wb3J0IHsgdGFuc3RhY2tTdGFydCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtc3RhcnQvcGx1Z2luL3ZpdGVcIlxuaW1wb3J0IHtcbiAgcGh5c2ljYWwsXG4gIHJvb3RSb3V0ZSxcbiAgcm91dGUsXG4gIHR5cGUgVmlydHVhbFJvdXRlTm9kZSxcbn0gZnJvbSBcIkB0YW5zdGFjay92aXJ0dWFsLWZpbGUtcm91dGVzXCJcbmltcG9ydCByZWFjdCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tcmVhY3RcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVcIlxuaW1wb3J0IHN2Z3IgZnJvbSBcInZpdGUtcGx1Z2luLXN2Z3JcIlxuaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gXCIuL2FjdGlvbnMvY29uZmlnL2xvYWQudHNcIlxuaW1wb3J0IHsgV2Vic2l0ZUNvbmZpZyB9IGZyb20gXCIuL21vZGVscy9jb25maWcudHNcIlxuaW1wb3J0IHsgT1ZFUlJJREVfU1VCRElSUyB9IGZyb20gXCIuL3NldHRpbmdzLnRzXCJcbmltcG9ydCB7IGxpdmVtYXJrIH0gZnJvbSBcIi4vcGx1Z2lucy92aXRlLWxpdmVtYXJrLnRzXCJcblxuY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZygpXG5jb25zdCBzb3VyY2VEaXIgPSBpbXBvcnQubWV0YS5kaXJuYW1lXG5jb25zdCBzb3VyY2VSZWxhdGl2ZSA9IHJlbGF0aXZlKGNvbmZpZy5yb290LCBzb3VyY2VEaXIpXG5jb25zdCBvdmVycmlkZXNSb290ID0gam9pbihjb25maWcucm9vdCwgXCIubGl2ZW1hcmtcIilcblxuLy8gU2VlZCBgLmxpdmVtYXJrLy5naXRpZ25vcmVgIG9uIGZpcnN0IHJ1biBzbyBWaXRlJ3MgYnVpbGQvY2FjaGVcbi8vIGFydGlmYWN0cyBuZXZlciBnZXQgY29tbWl0dGVkIGJ5IGFjY2lkZW50LiBPbiB0aGUgc2FtZSBmaXJzdC1ydW5cbi8vIHRyaWdnZXIsIGFsc28gc2VlZCBhbiBgLm5wbXJjYCB3aGVuIHBucG0gaXMgaW4gdXNlOiBwbnBtJ3Mgc3RyaWN0XG4vLyBpc29sYXRpb24gaGlkZXMgbGl2ZW1hcmsncyB0cmFuc2l0aXZlIGRlcHMgKHJlYWN0LCBAdGFuc3RhY2svKikgZnJvbVxuLy8gVml0ZSdzIG9wdGltaXplciwgd2hpY2ggd2Fsa3MgZnJvbSBjb25maWcucm9vdCByYXRoZXIgdGhhbiBsaXZlbWFyaydzXG4vLyBzdWJ0cmVlLiBUaGUgcHVibGljLWhvaXN0LXBhdHRlcm4gZW50cmllcyBtYWtlIHRob3NlIGRlcHMgcmVhY2hhYmxlXG4vLyBmcm9tIHRoZSBjb25zdW1lcidzIHRvcC1sZXZlbCBub2RlX21vZHVsZXMuIFNraXAgd2hlbiB0aGUgY29uc3VtZXJcbi8vIGFscmVhZHkgYXV0aG9yZWQgdGhlaXIgb3duIGAubnBtcmNgIOKAlCBuZXZlciBvdmVyd3JpdGUgdXNlciBjb25maWcuXG5jb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihvdmVycmlkZXNSb290LCBcIi5naXRpZ25vcmVcIilcbmlmICghZXhpc3RzU3luYyhnaXRpZ25vcmVQYXRoKSkge1xuICBta2RpclN5bmMob3ZlcnJpZGVzUm9vdCwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgd3JpdGVGaWxlU3luYyhnaXRpZ25vcmVQYXRoLCBcIi9idWlsZFxcbi9jYWNoZVxcblwiKVxuXG4gIGNvbnN0IG5wbXJjUGF0aCA9IGpvaW4oY29uZmlnLnJvb3QsIFwiLm5wbXJjXCIpXG4gIGNvbnN0IHVzaW5nUG5wbSA9IGV4aXN0c1N5bmMoam9pbihjb25maWcucm9vdCwgXCJwbnBtLWxvY2sueWFtbFwiKSlcbiAgaWYgKHVzaW5nUG5wbSAmJiAhZXhpc3RzU3luYyhucG1yY1BhdGgpKSB7XG4gICAgd3JpdGVGaWxlU3luYyhcbiAgICAgIG5wbXJjUGF0aCxcbiAgICAgIFwicHVibGljLWhvaXN0LXBhdHRlcm5bXT1yZWFjdFxcblwiICtcbiAgICAgICAgXCJwdWJsaWMtaG9pc3QtcGF0dGVybltdPXJlYWN0LSpcXG5cIiArXG4gICAgICAgIFwicHVibGljLWhvaXN0LXBhdHRlcm5bXT1AdGFuc3RhY2svKlxcblwiLFxuICAgIClcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiQ3JlYXRlZCAubnBtcmMgd2l0aCBob2lzdCBwYXR0ZXJucyBmb3IgcG5wbS4gUnVuIGBwbnBtIGluc3RhbGxgIHRvIGFwcGx5LlwiLFxuICAgIClcbiAgfVxufVxuXG5jb25zdCByb3V0ZUNoaWxkcmVuOiBWaXJ0dWFsUm91dGVOb2RlW10gPSBbcm91dGUoXCIvJFwiLCBcIiQudHN4XCIpXVxuaWYgKGV4aXN0c1N5bmMoam9pbihvdmVycmlkZXNSb290LCBcInJvdXRlc1wiKSkpIHtcbiAgLy8gcGh5c2ljYWwoZGlyKSByZXNvbHZlcyBgZGlyYCByZWxhdGl2ZSB0byB0aGUgcm91dGVzIGRpcmVjdG9yeVxuICAvLyAoYHNyY0RpcmVjdG9yeS9yb3V0ZXNgKS4gQSBoYXJkY29kZWQgXCIuLi8uLi8ubGl2ZW1hcmsvcm91dGVzXCIgb25seVxuICAvLyB3b3JrcyB3aGVuIHNvdXJjZS8gc2l0cyBvbmUgbGV2ZWwgdW5kZXIgY29uZmlnLnJvb3Qg4oCUIGl0IGxhbmRzIGF0XG4gIC8vIG5vZGVfbW9kdWxlcy8ubGl2ZW1hcmsvcm91dGVzIG9uY2UgbGl2ZW1hcmsgaXMgaW5zdGFsbGVkLiBDb21wdXRlXG4gIC8vIHRoZSBwYXRoIGR5bmFtaWNhbGx5IGZyb20gdGhlIGNvbnN1bWVyJ3MgYWN0dWFsIGxheW91dC5cbiAgY29uc3Qgcm91dGVzRGlyID0gam9pbihzb3VyY2VEaXIsIFwicm91dGVzXCIpXG4gIHJvdXRlQ2hpbGRyZW4ucHVzaChcbiAgICBwaHlzaWNhbChyZWxhdGl2ZShyb3V0ZXNEaXIsIGpvaW4ob3ZlcnJpZGVzUm9vdCwgXCJyb3V0ZXNcIikpKSxcbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICByb290OiBjb25maWcucm9vdCxcbiAgcHVibGljRGlyOiBqb2luKGNvbmZpZy5yb290LCBcIi5saXZlbWFya1wiLCBcInB1YmxpY1wiKSxcbiAgYnVpbGQ6IHsgb3V0RGlyOiBcIi5saXZlbWFyay9idWlsZFwiIH0sXG4gIGRlZmluZToge1xuICAgIFwiaW1wb3J0Lm1ldGEuZW52LkNPTkZJR1wiOiBKU09OLnN0cmluZ2lmeShXZWJzaXRlQ29uZmlnLnBhcnNlKGNvbmZpZykpLFxuICB9LFxuICAvLyBwZWVyRGVwZW5kZW5jaWVzIGd1YXJhbnRlZSBvbmUgY2Fub25pY2FsIHJlYWN0L3JlYWN0LWRvbSBpbiB0aGUgcG5wbVxuICAvLyBzdG9yZS4gZGVkdXBlIGNvbGxhcHNlcyBhbnkgdHJhbnNpdGl2ZSByZXNvbHV0aW9ucyB0byB0aGF0IGNvcHkuXG4gIHJlc29sdmU6IHtcbiAgICBkZWR1cGU6IFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCJdLFxuICB9LFxuICBwbHVnaW5zOiBbXG4gICAgbGl2ZW1hcmsoe1xuICAgICAgZGVmYXVsdHNSb290OiBzb3VyY2VEaXIsXG4gICAgICBvdmVycmlkZXNSb290LFxuICAgICAgc3ViZGlyczogWy4uLk9WRVJSSURFX1NVQkRJUlNdLFxuICAgICAgY29uZmlnUGF0aDogY29uZmlnLmNvbmZpZ1BhdGgsXG4gICAgfSksXG4gICAgZGV2dG9vbHMoKSxcbiAgICB0YWlsd2luZCgpLFxuICAgIGNvbnRlbnRDb2xsZWN0aW9ucyh7XG4gICAgICBjb25maWdQYXRoOiBqb2luKHNvdXJjZVJlbGF0aXZlLCBcImNvbnRlbnQtY29sbGVjdGlvbnMudHNcIiksXG4gICAgfSksXG4gICAgdGFuc3RhY2tTdGFydCh7XG4gICAgICBzcmNEaXJlY3Rvcnk6IHNvdXJjZVJlbGF0aXZlLFxuICAgICAgcGFnZXM6IFt7IHBhdGg6IFwiL1wiIH1dLFxuICAgICAgcHJlcmVuZGVyOiB7IGVuYWJsZWQ6IHRydWUsIGNyYXdsTGlua3M6IHRydWUgfSxcbiAgICAgIHNpdGVtYXA6IGNvbmZpZy5zaXRlXG4gICAgICAgID8geyBlbmFibGVkOiB0cnVlLCBob3N0OiBjb25maWcuc2l0ZSB9XG4gICAgICAgIDogeyBlbmFibGVkOiBmYWxzZSB9LFxuICAgICAgcm91dGVyOiB7XG4gICAgICAgIHZpcnR1YWxSb3V0ZUNvbmZpZzogcm9vdFJvdXRlKFwiX19yb290LnRzeFwiLCByb3V0ZUNoaWxkcmVuKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVhY3QoKSxcbiAgICBzdmdyKCksXG4gIF0sXG59KVxuIl19
|