obsidian-dev-utils 80.0.2 → 81.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/dev/main.js +30208 -0
- package/dist/dev/manifest.json +9 -0
- package/dist/lib/cjs/async-events.cjs +9 -1
- package/dist/lib/cjs/async-events.d.cts +8 -0
- package/dist/lib/cjs/async.cjs +89 -34
- package/dist/lib/cjs/async.d.cts +67 -15
- package/dist/lib/cjs/debug.cjs +26 -9
- package/dist/lib/cjs/debug.d.cts +23 -5
- package/dist/lib/cjs/error.cjs +4 -5
- package/dist/lib/cjs/error.d.cts +19 -4
- package/dist/lib/cjs/html-element.cjs +1 -1
- package/dist/lib/cjs/html-element.d.cts +2 -0
- package/dist/lib/cjs/library.cjs +2 -2
- package/dist/lib/cjs/object-utils.cjs +233 -128
- package/dist/lib/cjs/object-utils.d.cts +19 -4
- package/dist/lib/cjs/obsidian/async-with-notice.cjs +9 -6
- package/dist/lib/cjs/obsidian/async-with-notice.d.cts +9 -0
- package/dist/lib/cjs/obsidian/attachment-path.cjs +45 -13
- package/dist/lib/cjs/obsidian/attachment-path.d.cts +38 -8
- package/dist/lib/cjs/obsidian/backlink.cjs +6 -6
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +53 -16
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +81 -9
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +25 -5
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +35 -1
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +33 -19
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +43 -17
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +33 -19
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +43 -17
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +17 -9
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +48 -8
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +3 -1
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +3 -1
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +24 -8
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +25 -4
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +144 -65
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +3 -0
- package/dist/lib/cjs/obsidian/dataview-link.cjs +7 -2
- package/dist/lib/cjs/obsidian/dataview-link.d.cts +20 -5
- package/dist/lib/cjs/obsidian/dataview.cjs +27 -10
- package/dist/lib/cjs/obsidian/dataview.d.cts +19 -4
- package/dist/lib/cjs/obsidian/file-change.cjs +103 -27
- package/dist/lib/cjs/obsidian/file-change.d.cts +50 -13
- package/dist/lib/cjs/obsidian/file-manager.cjs +61 -32
- package/dist/lib/cjs/obsidian/file-manager.d.cts +63 -13
- package/dist/lib/cjs/obsidian/file-system.cjs +122 -23
- package/dist/lib/cjs/obsidian/file-system.d.cts +168 -39
- package/dist/lib/cjs/obsidian/frontmatter.cjs +7 -2
- package/dist/lib/cjs/obsidian/link.cjs +266 -122
- package/dist/lib/cjs/obsidian/link.d.cts +84 -20
- package/dist/lib/cjs/obsidian/logger.cjs +48 -22
- package/dist/lib/cjs/obsidian/logger.d.cts +26 -5
- package/dist/lib/cjs/obsidian/loop.cjs +14 -4
- package/dist/lib/cjs/obsidian/loop.d.cts +5 -0
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +155 -107
- package/dist/lib/cjs/obsidian/markdown.cjs +40 -11
- package/dist/lib/cjs/obsidian/markdown.d.cts +76 -16
- package/dist/lib/cjs/obsidian/metadata-cache.cjs +28 -14
- package/dist/lib/cjs/obsidian/metadata-cache.d.cts +76 -16
- package/dist/lib/cjs/obsidian/path-settings.cjs +5 -2
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +5 -1
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +4 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +15 -7
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +39 -8
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +3 -2
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +4 -4
- package/dist/lib/cjs/obsidian/queue.cjs +9 -7
- package/dist/lib/cjs/obsidian/resource-url.cjs +7 -2
- package/dist/lib/cjs/obsidian/resource-url.d.cts +19 -4
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +4 -2
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.d.cts +6 -2
- package/dist/lib/cjs/obsidian/vault-delete.cjs +19 -15
- package/dist/lib/cjs/obsidian/vault-delete.d.cts +11 -6
- package/dist/lib/cjs/obsidian/vault.cjs +116 -59
- package/dist/lib/cjs/obsidian/vault.d.cts +178 -41
- package/dist/lib/cjs/path.cjs +12 -5
- package/dist/lib/cjs/path.d.cts +15 -3
- package/dist/lib/cjs/reg-exp.cjs +101 -78
- package/dist/lib/cjs/script-utils/build.cjs +9 -5
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +34 -14
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +20 -5
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +23 -5
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +11 -4
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +6 -2
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +31 -12
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +19 -4
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +7 -7
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +12 -3
- package/dist/lib/cjs/script-utils/cli-utils.cjs +6 -2
- package/dist/lib/cjs/script-utils/exec.cjs +47 -12
- package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -3
- package/dist/lib/cjs/script-utils/json.cjs +9 -5
- package/dist/lib/cjs/script-utils/json.d.cts +38 -8
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +8 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +27 -7
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +7 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +8 -3
- package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -3
- package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +3 -3
- package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +72 -30
- package/dist/lib/cjs/script-utils/npm-publish.cjs +2 -2
- package/dist/lib/cjs/script-utils/npm.cjs +18 -9
- package/dist/lib/cjs/script-utils/root.cjs +20 -5
- package/dist/lib/cjs/script-utils/root.d.cts +45 -9
- package/dist/lib/cjs/script-utils/validate-declarations.cjs +4 -3
- package/dist/lib/cjs/script-utils/version.cjs +36 -19
- package/dist/lib/cjs/strict-proxy.cjs +10 -1
- package/dist/lib/cjs/string.cjs +63 -22
- package/dist/lib/cjs/string.d.cts +188 -40
- package/dist/lib/esm/async-events.d.mts +8 -0
- package/dist/lib/esm/async-events.mjs +9 -1
- package/dist/lib/esm/async.d.mts +67 -15
- package/dist/lib/esm/async.mjs +89 -34
- package/dist/lib/esm/debug.d.mts +23 -5
- package/dist/lib/esm/debug.mjs +26 -9
- package/dist/lib/esm/error.d.mts +19 -4
- package/dist/lib/esm/error.mjs +4 -5
- package/dist/lib/esm/html-element.d.mts +2 -0
- package/dist/lib/esm/html-element.mjs +1 -1
- package/dist/lib/esm/library.mjs +2 -2
- package/dist/lib/esm/object-utils.d.mts +19 -4
- package/dist/lib/esm/object-utils.mjs +233 -128
- package/dist/lib/esm/obsidian/async-with-notice.d.mts +9 -0
- package/dist/lib/esm/obsidian/async-with-notice.mjs +9 -6
- package/dist/lib/esm/obsidian/attachment-path.d.mts +38 -8
- package/dist/lib/esm/obsidian/attachment-path.mjs +45 -13
- package/dist/lib/esm/obsidian/backlink.mjs +6 -6
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +81 -9
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +53 -16
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +35 -1
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +25 -5
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +43 -17
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +33 -19
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +43 -17
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +33 -19
- package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +48 -8
- package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +17 -9
- package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +3 -1
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +3 -1
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +25 -4
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +24 -8
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +3 -0
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +145 -69
- package/dist/lib/esm/obsidian/dataview-link.d.mts +20 -5
- package/dist/lib/esm/obsidian/dataview-link.mjs +7 -2
- package/dist/lib/esm/obsidian/dataview.d.mts +19 -4
- package/dist/lib/esm/obsidian/dataview.mjs +27 -10
- package/dist/lib/esm/obsidian/file-change.d.mts +50 -13
- package/dist/lib/esm/obsidian/file-change.mjs +104 -27
- package/dist/lib/esm/obsidian/file-manager.d.mts +63 -13
- package/dist/lib/esm/obsidian/file-manager.mjs +65 -33
- package/dist/lib/esm/obsidian/file-system.d.mts +168 -39
- package/dist/lib/esm/obsidian/file-system.mjs +122 -23
- package/dist/lib/esm/obsidian/frontmatter.mjs +7 -2
- package/dist/lib/esm/obsidian/link.d.mts +84 -20
- package/dist/lib/esm/obsidian/link.mjs +266 -122
- package/dist/lib/esm/obsidian/logger.d.mts +26 -5
- package/dist/lib/esm/obsidian/logger.mjs +48 -22
- package/dist/lib/esm/obsidian/loop.d.mts +5 -0
- package/dist/lib/esm/obsidian/loop.mjs +14 -4
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +155 -107
- package/dist/lib/esm/obsidian/markdown.d.mts +76 -16
- package/dist/lib/esm/obsidian/markdown.mjs +40 -11
- package/dist/lib/esm/obsidian/metadata-cache.d.mts +76 -16
- package/dist/lib/esm/obsidian/metadata-cache.mjs +28 -14
- package/dist/lib/esm/obsidian/path-settings.mjs +5 -2
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +4 -0
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +5 -1
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +39 -8
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +15 -7
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +4 -4
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +5 -7
- package/dist/lib/esm/obsidian/queue.mjs +9 -7
- package/dist/lib/esm/obsidian/resource-url.d.mts +19 -4
- package/dist/lib/esm/obsidian/resource-url.mjs +7 -2
- package/dist/lib/esm/obsidian/status-bar-item-registrar.d.mts +6 -2
- package/dist/lib/esm/obsidian/status-bar-item-registrar.mjs +4 -2
- package/dist/lib/esm/obsidian/vault-delete.d.mts +11 -6
- package/dist/lib/esm/obsidian/vault-delete.mjs +19 -15
- package/dist/lib/esm/obsidian/vault.d.mts +178 -41
- package/dist/lib/esm/obsidian/vault.mjs +116 -59
- package/dist/lib/esm/path.d.mts +15 -3
- package/dist/lib/esm/path.mjs +12 -5
- package/dist/lib/esm/reg-exp.mjs +101 -78
- package/dist/lib/esm/script-utils/build.mjs +9 -5
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +34 -14
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +23 -5
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +20 -5
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +11 -4
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +6 -2
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +19 -4
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +31 -12
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +7 -7
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +12 -3
- package/dist/lib/esm/script-utils/cli-utils.mjs +6 -2
- package/dist/lib/esm/script-utils/exec.mjs +47 -12
- package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -3
- package/dist/lib/esm/script-utils/json.d.mts +38 -8
- package/dist/lib/esm/script-utils/json.mjs +9 -5
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +8 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +27 -7
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +7 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +8 -3
- package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/markdownlint.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/over-exposure.mjs +72 -30
- package/dist/lib/esm/script-utils/npm-publish.mjs +2 -2
- package/dist/lib/esm/script-utils/npm.mjs +18 -9
- package/dist/lib/esm/script-utils/root.d.mts +45 -9
- package/dist/lib/esm/script-utils/root.mjs +20 -5
- package/dist/lib/esm/script-utils/validate-declarations.mjs +4 -3
- package/dist/lib/esm/script-utils/version.mjs +36 -19
- package/dist/lib/esm/strict-proxy.mjs +10 -1
- package/dist/lib/esm/string.d.mts +188 -40
- package/dist/lib/esm/string.mjs +63 -22
- package/dist/styles.css +5 -1
- package/package.json +9 -9
|
@@ -30,6 +30,7 @@ import { printError } from "../error.mjs";
|
|
|
30
30
|
import {
|
|
31
31
|
deepEqual,
|
|
32
32
|
getNestedPropertyValue,
|
|
33
|
+
normalizeOptionalProperties,
|
|
33
34
|
setNestedPropertyValue
|
|
34
35
|
} from "../object-utils.mjs";
|
|
35
36
|
import { resolveValue } from "../value-provider.mjs";
|
|
@@ -50,30 +51,66 @@ import {
|
|
|
50
51
|
referenceToFileChange
|
|
51
52
|
} from "./reference.mjs";
|
|
52
53
|
import { process } from "./vault.mjs";
|
|
53
|
-
async function applyContentChanges(
|
|
54
|
+
async function applyContentChanges(params) {
|
|
55
|
+
const {
|
|
56
|
+
abortSignal,
|
|
57
|
+
changesProvider,
|
|
58
|
+
content,
|
|
59
|
+
path,
|
|
60
|
+
shouldRetryOnInvalidChanges = true
|
|
61
|
+
} = params;
|
|
54
62
|
abortSignal.throwIfAborted();
|
|
55
63
|
let changes = await resolveValue(changesProvider, { abortSignal, content });
|
|
56
64
|
abortSignal.throwIfAborted();
|
|
57
65
|
if (changes === null) {
|
|
58
66
|
return null;
|
|
59
67
|
}
|
|
60
|
-
const { frontmatter, hasFrontmatterError } = parseFrontmatterSafely(content, path);
|
|
61
|
-
if (!validateChanges(changes, content, frontmatter, path)) {
|
|
68
|
+
const { frontmatter, hasFrontmatterError } = parseFrontmatterSafely({ content, path });
|
|
69
|
+
if (!validateChanges({ changes, content, frontmatter, path })) {
|
|
62
70
|
return shouldRetryOnInvalidChanges ? null : content;
|
|
63
71
|
}
|
|
64
72
|
changes = sortAndFilterChanges(changes);
|
|
65
|
-
const { frontmatterChanged, newContent } = applyContentChangesToText(changes, content, hasFrontmatterError, path);
|
|
66
|
-
await applyFrontmatterChangesWithOffsets(
|
|
73
|
+
const { frontmatterChanged, newContent } = applyContentChangesToText({ changes, content, hasFrontmatterError, path });
|
|
74
|
+
await applyFrontmatterChangesWithOffsets({
|
|
75
|
+
abortSignal,
|
|
76
|
+
frontmatter,
|
|
77
|
+
frontmatterChangesWithOffsetMap: frontmatterChanged,
|
|
78
|
+
path
|
|
79
|
+
});
|
|
67
80
|
abortSignal.throwIfAborted();
|
|
68
|
-
return buildFinalContent(
|
|
81
|
+
return buildFinalContent({ frontmatter, frontmatterChanged, newContent });
|
|
69
82
|
}
|
|
70
|
-
async function applyFileChanges(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
83
|
+
async function applyFileChanges(params) {
|
|
84
|
+
const {
|
|
85
|
+
app,
|
|
86
|
+
changesProvider,
|
|
87
|
+
pathOrFile,
|
|
88
|
+
shouldRetryOnInvalidChanges = true,
|
|
89
|
+
...options
|
|
90
|
+
} = params;
|
|
91
|
+
await process(normalizeOptionalProperties({
|
|
92
|
+
app,
|
|
93
|
+
async newContentProvider({ abortSignal, content }) {
|
|
94
|
+
if (isCanvasFile(pathOrFile)) {
|
|
95
|
+
return await applyCanvasChanges({
|
|
96
|
+
abortSignal,
|
|
97
|
+
changesProvider,
|
|
98
|
+
content,
|
|
99
|
+
path: getPath(app, pathOrFile),
|
|
100
|
+
shouldRetryOnInvalidChanges
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return await applyContentChanges({
|
|
104
|
+
abortSignal,
|
|
105
|
+
changesProvider,
|
|
106
|
+
content,
|
|
107
|
+
path: getPath(app, pathOrFile),
|
|
108
|
+
shouldRetryOnInvalidChanges
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
pathOrFile,
|
|
112
|
+
...options
|
|
113
|
+
}));
|
|
77
114
|
}
|
|
78
115
|
function isCanvasChange(change) {
|
|
79
116
|
return isCanvasReference(change.reference);
|
|
@@ -102,7 +139,14 @@ function toFrontmatterChangeWithOffsets(fileChange) {
|
|
|
102
139
|
reference: toFrontmatterLinkCacheWithOffsets(fileChange.reference)
|
|
103
140
|
};
|
|
104
141
|
}
|
|
105
|
-
async function applyCanvasChanges(
|
|
142
|
+
async function applyCanvasChanges(params) {
|
|
143
|
+
const {
|
|
144
|
+
abortSignal,
|
|
145
|
+
changesProvider,
|
|
146
|
+
content,
|
|
147
|
+
path,
|
|
148
|
+
shouldRetryOnInvalidChanges = true
|
|
149
|
+
} = params;
|
|
106
150
|
const changes = await resolveValue(changesProvider, { abortSignal, content });
|
|
107
151
|
abortSignal.throwIfAborted();
|
|
108
152
|
if (changes === null) {
|
|
@@ -168,17 +212,23 @@ async function applyCanvasChanges(abortSignal, content, path, changesProvider, s
|
|
|
168
212
|
return null;
|
|
169
213
|
}
|
|
170
214
|
const contentChanges = canvasTextChangesForNode.map((change) => referenceToFileChange(change.reference.originalReference, change.newContent));
|
|
171
|
-
node.text = await applyContentChanges(
|
|
215
|
+
node.text = await applyContentChanges({
|
|
172
216
|
abortSignal,
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
217
|
+
changesProvider: contentChanges,
|
|
218
|
+
content: node.text,
|
|
219
|
+
path: `${path}.node${String(nodeIndex)}.VIRTUAL_FILE.md`,
|
|
176
220
|
shouldRetryOnInvalidChanges
|
|
177
|
-
);
|
|
221
|
+
});
|
|
178
222
|
}
|
|
179
223
|
return JSON.stringify(canvasData, null, " ");
|
|
180
224
|
}
|
|
181
|
-
function applyContentChangesToText(
|
|
225
|
+
function applyContentChangesToText(params) {
|
|
226
|
+
const {
|
|
227
|
+
changes,
|
|
228
|
+
content,
|
|
229
|
+
hasFrontmatterError,
|
|
230
|
+
path
|
|
231
|
+
} = params;
|
|
182
232
|
let newContent = "";
|
|
183
233
|
let lastIndex = 0;
|
|
184
234
|
let lastContentChange = {
|
|
@@ -228,7 +278,13 @@ function applyContentChangesToText(changes, content, hasFrontmatterError, path)
|
|
|
228
278
|
newContent += content.slice(lastIndex);
|
|
229
279
|
return { frontmatterChanged: frontmatterChangesWithOffsetMap, newContent };
|
|
230
280
|
}
|
|
231
|
-
async function applyFrontmatterChangesWithOffsets(
|
|
281
|
+
async function applyFrontmatterChangesWithOffsets(params) {
|
|
282
|
+
const {
|
|
283
|
+
abortSignal,
|
|
284
|
+
frontmatter,
|
|
285
|
+
frontmatterChangesWithOffsetMap,
|
|
286
|
+
path
|
|
287
|
+
} = params;
|
|
232
288
|
for (const [key, frontmatterChangesWithOffsets] of frontmatterChangesWithOffsetMap.entries()) {
|
|
233
289
|
const propertyValue = getNestedPropertyValue(frontmatter, key);
|
|
234
290
|
if (typeof propertyValue !== "string") {
|
|
@@ -254,20 +310,35 @@ async function applyFrontmatterChangesWithOffsets(abortSignal, frontmatter, fron
|
|
|
254
310
|
}
|
|
255
311
|
}
|
|
256
312
|
}));
|
|
257
|
-
const newPropertyValue = await applyContentChanges(
|
|
313
|
+
const newPropertyValue = await applyContentChanges({
|
|
314
|
+
abortSignal,
|
|
315
|
+
changesProvider: contentChanges,
|
|
316
|
+
content: propertyValue,
|
|
317
|
+
path: `${path}.frontmatter.${key}.VIRTUAL_FILE.md`
|
|
318
|
+
});
|
|
258
319
|
if (newPropertyValue === null) {
|
|
259
320
|
return;
|
|
260
321
|
}
|
|
261
|
-
setNestedPropertyValue(
|
|
322
|
+
setNestedPropertyValue({
|
|
323
|
+
obj: frontmatter,
|
|
324
|
+
path: key,
|
|
325
|
+
value: newPropertyValue
|
|
326
|
+
});
|
|
262
327
|
}
|
|
263
328
|
}
|
|
264
|
-
function buildFinalContent(
|
|
329
|
+
function buildFinalContent(params) {
|
|
330
|
+
const {
|
|
331
|
+
frontmatter,
|
|
332
|
+
frontmatterChanged,
|
|
333
|
+
newContent
|
|
334
|
+
} = params;
|
|
265
335
|
if (frontmatterChanged.size > 0) {
|
|
266
336
|
return setFrontmatter(newContent, frontmatter);
|
|
267
337
|
}
|
|
268
338
|
return newContent;
|
|
269
339
|
}
|
|
270
|
-
function parseFrontmatterSafely(
|
|
340
|
+
function parseFrontmatterSafely(params) {
|
|
341
|
+
const { content, path } = params;
|
|
271
342
|
let frontmatter = {};
|
|
272
343
|
let hasFrontmatterError = false;
|
|
273
344
|
try {
|
|
@@ -313,7 +384,13 @@ function sortAndFilterChanges(changes) {
|
|
|
313
384
|
return !deepEqual(change, changes[index - 1]);
|
|
314
385
|
});
|
|
315
386
|
}
|
|
316
|
-
function validateChanges(
|
|
387
|
+
function validateChanges(params) {
|
|
388
|
+
const {
|
|
389
|
+
changes,
|
|
390
|
+
content,
|
|
391
|
+
frontmatter,
|
|
392
|
+
path
|
|
393
|
+
} = params;
|
|
317
394
|
const validateChangesDebugger = getLibDebugger("FileChange:validateChanges");
|
|
318
395
|
for (const change of changes) {
|
|
319
396
|
if (isContentChange(change)) {
|
|
@@ -377,4 +454,4 @@ export {
|
|
|
377
454
|
isFrontmatterChangeWithOffsets,
|
|
378
455
|
toFrontmatterChangeWithOffsets
|
|
379
456
|
};
|
|
380
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2ZpbGUtY2hhbmdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBmaWxlIGNoYW5nZXMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZUNhY2hlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQ2FudmFzRGF0YSB9IGZyb20gJ29ic2lkaWFuL2NhbnZhcy5kLnRzJztcblxuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL3ZhbHVlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzIH0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ2FudmFzRmlsZU5vZGVSZWZlcmVuY2UsXG4gIENhbnZhc1JlZmVyZW5jZSxcbiAgQ2FudmFzVGV4dE5vZGVSZWZlcmVuY2Vcbn0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb250ZW50QXJncyxcbiAgUHJvY2Vzc09wdGlvbnNcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uL2Vycm9yLnRzJztcbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9vYmplY3QtdXRpbHMudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vdmFsdWUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHtcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLFxuICB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHNcbn0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQge1xuICBwYXJzZUZyb250bWF0dGVyLFxuICBzZXRGcm9udG1hdHRlclxufSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB7XG4gIGlzQ2FudmFzUmVmZXJlbmNlLFxuICByZWZlcmVuY2VUb0ZpbGVDaGFuZ2Vcbn0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vdmF1bHQudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBhcHBseUZpbGVDaGFuZ2VzfS5cbiAqL1xuZXhwb3J0IHR5cGUgQXBwbHlGaWxlQ2hhbmdlc09wdGlvbnMgPSBQcm9jZXNzT3B0aW9ucztcbi8qKlxuICogQSBmaWxlIGNoYW5nZSBpbiB0aGUgdmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBBIG5ldyBjb250ZW50IHRvIHJlcGxhY2UgdGhlIG9sZCBjb250ZW50LlxuICAgKi9cbiAgbmV3Q29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBvbGQgY29udGVudCB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuXG4gICAqL1xuICBvbGRDb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRoYXQgY2F1c2VkIHRoZSBjaGFuZ2UuXG4gICAqL1xuICByZWZlcmVuY2U6IFJlZmVyZW5jZTtcbn1cbmludGVyZmFjZSBBcHBseUNvbnRlbnRDaGFuZ2VzVG9UZXh0UmVzdWx0IHtcbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXJDaGFuZ2VkOiBNYXA8c3RyaW5nLCBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzW10+O1xuICByZWFkb25seSBuZXdDb250ZW50OiBzdHJpbmc7XG59XG5cbnR5cGUgQ2FudmFzQ2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8Q2FudmFzUmVmZXJlbmNlPjtcbnR5cGUgQ2FudmFzRmlsZU5vZGVDaGFuZ2UgPSBGaWxlQ2hhbmdlICYgV2l0aFJlZmVyZW5jZTxDYW52YXNGaWxlTm9kZVJlZmVyZW5jZT47XG50eXBlIENhbnZhc1RleHROb2RlQ2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8Q2FudmFzVGV4dE5vZGVSZWZlcmVuY2U+O1xudHlwZSBDb250ZW50Q2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8UmVmZXJlbmNlQ2FjaGU+O1xudHlwZSBGcm9udG1hdHRlckNoYW5nZSA9IEZpbGVDaGFuZ2UgJiBXaXRoUmVmZXJlbmNlPEZyb250bWF0dGVyTGlua0NhY2hlPjtcblxudHlwZSBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8RnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cz47XG5cbmludGVyZmFjZSBQYXJzZUZyb250bWF0dGVyU2FmZWx5UmVzdWx0IHtcbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8dW5rbm93bj47XG4gIHJlYWRvbmx5IGhhc0Zyb250bWF0dGVyRXJyb3I6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBXaXRoUmVmZXJlbmNlPFIgZXh0ZW5kcyBSZWZlcmVuY2U+IHtcbiAgcmVmZXJlbmNlOiBSO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBzZXJpZXMgb2YgY29udGVudCBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBjb250ZW50IHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBjaGFuZ2VzUHJvdmlkZXIgLSBBIHByb3ZpZGVyIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBjb250ZW50IGNoYW5nZXMgdG8gYXBwbHkuXG4gKiBAcGFyYW0gc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzIC0gV2hldGhlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmIHRoZSBjaGFuZ2VzIGFyZSBpbnZhbGlkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgdXBkYXRlZCBjb250ZW50IG9yIHRvIGBudWxsYCBpZiB1cGRhdGUgZGlkbid0IHN1Y2NlZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseUNvbnRlbnRDaGFuZ2VzKFxuICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdIHwgbnVsbCwgQ29udGVudEFyZ3M+LFxuICBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXMgPSB0cnVlXG4pOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyLCB7IGFib3J0U2lnbmFsLCBjb250ZW50IH0pO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBpZiAoY2hhbmdlcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBmcm9udG1hdHRlciwgaGFzRnJvbnRtYXR0ZXJFcnJvciB9ID0gcGFyc2VGcm9udG1hdHRlclNhZmVseShjb250ZW50LCBwYXRoKTtcblxuICBpZiAoIXZhbGlkYXRlQ2hhbmdlcyhjaGFuZ2VzLCBjb250ZW50LCBmcm9udG1hdHRlciwgcGF0aCkpIHtcbiAgICByZXR1cm4gc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID8gbnVsbCA6IGNvbnRlbnQ7XG4gIH1cblxuICBjaGFuZ2VzID0gc29ydEFuZEZpbHRlckNoYW5nZXMoY2hhbmdlcyk7XG5cbiAgY29uc3QgeyBmcm9udG1hdHRlckNoYW5nZWQsIG5ld0NvbnRlbnQgfSA9IGFwcGx5Q29udGVudENoYW5nZXNUb1RleHQoY2hhbmdlcywgY29udGVudCwgaGFzRnJvbnRtYXR0ZXJFcnJvciwgcGF0aCk7XG5cbiAgYXdhaXQgYXBwbHlGcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyhhYm9ydFNpZ25hbCwgZnJvbnRtYXR0ZXIsIGZyb250bWF0dGVyQ2hhbmdlZCwgcGF0aCk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgcmV0dXJuIGJ1aWxkRmluYWxDb250ZW50KG5ld0NvbnRlbnQsIGZyb250bWF0dGVyLCBmcm9udG1hdHRlckNoYW5nZWQpO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBzZXJpZXMgb2YgZmlsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBvciBwYXRoIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aGVyZSB0aGUgZmlsZSBjaGFuZ2VzIHdpbGwgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBjaGFuZ2VzUHJvdmlkZXIgLSBBIHByb3ZpZGVyIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBmaWxlIGNoYW5nZXMgdG8gYXBwbHkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgZm9yIHByb2Nlc3NpbmcvcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXMgLSBXaGV0aGVyIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24gaWYgdGhlIGNoYW5nZXMgYXJlIGludmFsaWQuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGNoYW5nZXMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBhcHBsaWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlGaWxlQ2hhbmdlcyhcbiAgYXBwOiBBcHAsXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10gfCBudWxsLCBDb250ZW50QXJncz4sXG4gIG9wdGlvbnM6IEFwcGx5RmlsZUNoYW5nZXNPcHRpb25zID0ge30sXG4gIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyA9IHRydWVcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwcm9jZXNzKGFwcCwgcGF0aE9yRmlsZSwgYXN5bmMgKHsgYWJvcnRTaWduYWwsIGNvbnRlbnQgfSkgPT4ge1xuICAgIGlmIChpc0NhbnZhc0ZpbGUocGF0aE9yRmlsZSkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBseUNhbnZhc0NoYW5nZXMoYWJvcnRTaWduYWwsIGNvbnRlbnQsIGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSwgY2hhbmdlc1Byb3ZpZGVyLCBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBhcHBseUNvbnRlbnRDaGFuZ2VzKGFib3J0U2lnbmFsLCBjb250ZW50LCBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSksIGNoYW5nZXNQcm92aWRlciwgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzKTtcbiAgfSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBjaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNhbnZhcyBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhc0NoYW5nZShjaGFuZ2U6IEZpbGVDaGFuZ2UpOiBjaGFuZ2UgaXMgQ2FudmFzQ2hhbmdlIHtcbiAgcmV0dXJuIGlzQ2FudmFzUmVmZXJlbmNlKGNoYW5nZS5yZWZlcmVuY2UpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIGZpbGUgbm9kZSBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIGZpbGUgbm9kZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhc0ZpbGVOb2RlQ2hhbmdlKGNoYW5nZTogRmlsZUNoYW5nZSk6IGNoYW5nZSBpcyBDYW52YXNGaWxlTm9kZUNoYW5nZSB7XG4gIHJldHVybiBpc0NhbnZhc0NoYW5nZShjaGFuZ2UpICYmIGNoYW5nZS5yZWZlcmVuY2UudHlwZSA9PT0gJ2ZpbGUnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIHRleHQgbm9kZSBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIHRleHQgbm9kZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhc1RleHROb2RlQ2hhbmdlKGNoYW5nZTogRmlsZUNoYW5nZSk6IGNoYW5nZSBpcyBDYW52YXNUZXh0Tm9kZUNoYW5nZSB7XG4gIHJldHVybiBpc0NhbnZhc0NoYW5nZShjaGFuZ2UpICYmIGNoYW5nZS5yZWZlcmVuY2UudHlwZSA9PT0gJ3RleHQnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNvbnRlbnQgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIENvbnRlbnRDaGFuZ2Uge1xuICByZXR1cm4gaXNSZWZlcmVuY2VDYWNoZShmaWxlQ2hhbmdlLnJlZmVyZW5jZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgRnJvbnRtYXR0ZXJDaGFuZ2Uge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZShmaWxlQ2hhbmdlLnJlZmVyZW5jZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2Ugd2l0aCBvZmZzZXRzLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2Ugd2l0aCBvZmZzZXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2UucmVmZXJlbmNlKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZyb250bWF0dGVyIGNoYW5nZSB0byBhIGZyb250bWF0dGVyIGNoYW5nZSB3aXRoIG9mZnNldHMuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgZmlsZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoZmlsZUNoYW5nZTogRnJvbnRtYXR0ZXJDaGFuZ2UpOiBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzIHtcbiAgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhmaWxlQ2hhbmdlKSkge1xuICAgIHJldHVybiBmaWxlQ2hhbmdlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5maWxlQ2hhbmdlLFxuICAgIHJlZmVyZW5jZTogdG9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2UucmVmZXJlbmNlKVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUNhbnZhc0NoYW5nZXMoXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgY29udGVudDogc3RyaW5nLFxuICBwYXRoOiBzdHJpbmcsXG4gIGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10gfCBudWxsLCBDb250ZW50QXJncz4sXG4gIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyA9IHRydWVcbik6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBjaGFuZ2VzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNoYW5nZXNQcm92aWRlciwgeyBhYm9ydFNpZ25hbCwgY29udGVudCB9KTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgaWYgKGNoYW5nZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNhbnZhc0RhdGEgPSBwYXJzZUpzb25TYWZlKGNvbnRlbnQpIGFzIEdlbmVyaWNPYmplY3Q8Q2FudmFzRGF0YT47XG5cbiAgY29uc3QgY2FudmFzVGV4dENoYW5nZXMgPSBuZXcgTWFwPG51bWJlciwgQ2FudmFzVGV4dE5vZGVDaGFuZ2VbXT4oKTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgaWYgKCFpc0NhbnZhc0NoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ09ubHkgY2FudmFzIGNoYW5nZXMgYXJlIHN1cHBvcnRlZCBmb3IgY2FudmFzIGZpbGVzJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGNhbnZhc0RhdGEubm9kZXNbY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXhdO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdOb2RlIG5vdCBmb3VuZCc7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIHtcbiAgICAgICAgbm9kZUluZGV4OiBjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaXNDYW52YXNGaWxlTm9kZUNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBpZiAobm9kZS5maWxlICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICBnZXRMaWJEZWJ1Z2dlcignRmlsZUNoYW5nZTphcHBseUNhbnZhc0NoYW5nZXMnKSgnQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50OiBub2RlLmZpbGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgbm9kZUluZGV4OiBjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHR5cGU6ICdmaWxlJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG5vZGUuZmlsZSA9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBmYWxzZSBicmFuY2ggb2YgdGhlIGVsc2UtaWYgaXMgdW5yZWFjaGFibGU7IG9ubHkgJ2ZpbGUnIGFuZCAndGV4dCcgY2FudmFzIG5vZGUgdHlwZXMgZXhpc3QuICovXG4gICAgfSBlbHNlIGlmIChpc0NhbnZhc1RleHROb2RlQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBsZXQgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlID0gY2FudmFzVGV4dENoYW5nZXMuZ2V0KGNoYW5nZS5yZWZlcmVuY2Uubm9kZUluZGV4KTtcbiAgICAgIGlmICghY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlKSB7XG4gICAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IFtdO1xuICAgICAgICBjYW52YXNUZXh0Q2hhbmdlcy5zZXQoY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXgsIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZS5wdXNoKGNoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbbm9kZUluZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGVdIG9mIGNhbnZhc1RleHRDaGFuZ2VzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW25vZGVJbmRleF07XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIE5vZGUgZXhpc3RlbmNlIGlzIGFscmVhZHkgdmVyaWZpZWQgaW4gdGhlIGZpcnN0IGxvb3AgYWJvdmUuICovXG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ05vZGUgbm90IGZvdW5kJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICAgIGlmICh0eXBlb2Ygbm9kZS50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdOb2RlIHRleHQgaXMgbm90IGEgc3RyaW5nJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50Q2hhbmdlcyA9IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZS5tYXAoKGNoYW5nZSkgPT4gcmVmZXJlbmNlVG9GaWxlQ2hhbmdlKGNoYW5nZS5yZWZlcmVuY2Uub3JpZ2luYWxSZWZlcmVuY2UsIGNoYW5nZS5uZXdDb250ZW50KSk7XG4gICAgbm9kZS50ZXh0ID0gYXdhaXQgYXBwbHlDb250ZW50Q2hhbmdlcyhcbiAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgbm9kZS50ZXh0LFxuICAgICAgYCR7cGF0aH0ubm9kZSR7U3RyaW5nKG5vZGVJbmRleCl9LlZJUlRVQUxfRklMRS5tZGAsXG4gICAgICBjb250ZW50Q2hhbmdlcyxcbiAgICAgIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlc1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2FudmFzRGF0YSwgbnVsbCwgJ1xcdCcpO1xufVxuXG5mdW5jdGlvbiBhcHBseUNvbnRlbnRDaGFuZ2VzVG9UZXh0KFxuICBjaGFuZ2VzOiBGaWxlQ2hhbmdlW10sXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgaGFzRnJvbnRtYXR0ZXJFcnJvcjogYm9vbGVhbixcbiAgcGF0aDogc3RyaW5nXG4pOiBBcHBseUNvbnRlbnRDaGFuZ2VzVG9UZXh0UmVzdWx0IHtcbiAgbGV0IG5ld0NvbnRlbnQgPSAnJztcbiAgbGV0IGxhc3RJbmRleCA9IDA7XG4gIGxldCBsYXN0Q29udGVudENoYW5nZTogQ29udGVudENoYW5nZSA9IHtcbiAgICBuZXdDb250ZW50OiAnJyxcbiAgICBvbGRDb250ZW50OiAnJyxcbiAgICByZWZlcmVuY2U6IHtcbiAgICAgIGxpbms6ICcnLFxuICAgICAgb3JpZ2luYWw6ICcnLFxuICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgZW5kOiB7IGNvbDogMCwgbGluZTogMCwgb2Zmc2V0OiAwIH0sXG4gICAgICAgIHN0YXJ0OiB7IGNvbDogMCwgbGluZTogMCwgb2Zmc2V0OiAwIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAgPSBuZXcgTWFwPHN0cmluZywgRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0c1tdPigpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGNoYW5nZSB0eXBlcyBhcmUgaGFuZGxlZDsgdGhlIGZhbHNlIGJyYW5jaCBsZWFkcyB0byBvdGhlciBlbHNlLWlmIGNoZWNrcy4gKi9cbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBpZiAobGFzdEluZGV4IDw9IGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0KSB7XG4gICAgICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgsIGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0KTtcbiAgICAgICAgbmV3Q29udGVudCArPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgICAgbGFzdEluZGV4ID0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5lbmQub2Zmc2V0O1xuICAgICAgICBsYXN0Q29udGVudENoYW5nZSA9IGNoYW5nZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXBwaW5nU3RhcnRPZmZzZXQgPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCAtIGxhc3RDb250ZW50Q2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IG92ZXJsYXBwaW5nRW5kT2Zmc2V0ID0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5lbmQub2Zmc2V0IC0gbGFzdENvbnRlbnRDaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldDtcbiAgICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdDb250ZW50ID0gbGFzdENvbnRlbnRDaGFuZ2UubmV3Q29udGVudC5zbGljZShvdmVybGFwcGluZ1N0YXJ0T2Zmc2V0LCBvdmVybGFwcGluZ0VuZE9mZnNldCk7XG4gICAgICAgIGlmIChvdmVybGFwcGluZ0NvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdPdmVybGFwcGluZyBjaGFuZ2VzJztcbiAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIHsgY2hhbmdlLCBsYXN0Q29udGVudENoYW5nZSB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuc2xpY2UoMCwgbmV3Q29udGVudC5sZW5ndGggLSBsYXN0Q29udGVudENoYW5nZS5uZXdDb250ZW50Lmxlbmd0aClcbiAgICAgICAgICArIGxhc3RDb250ZW50Q2hhbmdlLm5ld0NvbnRlbnQuc2xpY2UoMCwgb3ZlcmxhcHBpbmdTdGFydE9mZnNldClcbiAgICAgICAgICArIGNoYW5nZS5uZXdDb250ZW50XG4gICAgICAgICAgKyBsYXN0Q29udGVudENoYW5nZS5uZXdDb250ZW50LnNsaWNlKG92ZXJsYXBwaW5nRW5kT2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgY2hhbmdlIHR5cGVzIGFyZSBoYW5kbGVkIGFib3ZlOyBubyB1bmtub3duIGNoYW5nZSB0eXBlcyBpbiBwcmFjdGljZS4gKi9cbiAgICB9IGVsc2UgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBWYWxpZGF0aW9uIHJlamVjdHMgZnJvbnRtYXR0ZXIgY2hhbmdlcyB3aGVuIHBhcnNpbmcgZmFpbHMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlLiAqL1xuICAgICAgaWYgKGhhc0Zyb250bWF0dGVyRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGFwcGx5IGZyb250bWF0dGVyIGNoYW5nZSBpbiAke3BhdGh9LCBiZWNhdXNlIGZyb250bWF0dGVyIHBhcnNpbmcgZmFpbGVkYCwgeyBjaGFuZ2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBsZXQgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMgPSBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwLmdldChjaGFuZ2UucmVmZXJlbmNlLmtleSk7XG4gICAgICAgIGlmICghZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMpIHtcbiAgICAgICAgICBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyA9IFtdO1xuICAgICAgICAgIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAuc2V0KGNoYW5nZS5yZWZlcmVuY2Uua2V5LCBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMucHVzaCh0b0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoY2hhbmdlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmV3Q29udGVudCArPSBjb250ZW50LnNsaWNlKGxhc3RJbmRleCk7XG5cbiAgcmV0dXJuIHsgZnJvbnRtYXR0ZXJDaGFuZ2VkOiBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwLCBuZXdDb250ZW50IH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5RnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMoXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8dW5rbm93bj4sXG4gIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXA6IE1hcDxzdHJpbmcsIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHNbXT4sXG4gIHBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciAoY29uc3QgW2tleSwgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHNdIG9mIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAuZW50cmllcygpKSB7XG4gICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGtleSk7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFZhbGlkYXRpb24gZW5zdXJlcyB0aGUgcHJvcGVydHkgaXMgYSBzdHJpbmcgYmVmb3JlIHJlYWNoaW5nIHRoaXMgcG9pbnQuICovXG4gICAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuXG4gICAgY29uc3QgY29udGVudENoYW5nZXM6IENvbnRlbnRDaGFuZ2VbXSA9IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzLm1hcCgoY2hhbmdlKSA9PiAoe1xuICAgICAgbmV3Q29udGVudDogY2hhbmdlLm5ld0NvbnRlbnQsXG4gICAgICBvbGRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgb3JpZ2luYWw6ICcnLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgY29sOiBjaGFuZ2UucmVmZXJlbmNlLmVuZE9mZnNldCxcbiAgICAgICAgICAgIGxpbmU6IDAsXG4gICAgICAgICAgICBvZmZzZXQ6IGNoYW5nZS5yZWZlcmVuY2UuZW5kT2Zmc2V0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgY29sOiBjaGFuZ2UucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgbGluZTogMCxcbiAgICAgICAgICAgIG9mZnNldDogY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKTtcblxuICAgIGNvbnN0IG5ld1Byb3BlcnR5VmFsdWUgPSBhd2FpdCBhcHBseUNvbnRlbnRDaGFuZ2VzKGFib3J0U2lnbmFsLCBwcm9wZXJ0eVZhbHVlLCBgJHtwYXRofS5mcm9udG1hdHRlci4ke2tleX0uVklSVFVBTF9GSUxFLm1kYCwgY29udGVudENoYW5nZXMpO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbm5lciBhcHBseUNvbnRlbnRDaGFuZ2VzIHVzZXMgdmFsaWRhdGVkIG9mZnNldHMsIHNvIG51bGwgaXMgbm90IGV4cGVjdGVkLiAqL1xuICAgIGlmIChuZXdQcm9wZXJ0eVZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgICBzZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBrZXksIG5ld1Byb3BlcnR5VmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmluYWxDb250ZW50KFxuICBuZXdDb250ZW50OiBzdHJpbmcsXG4gIGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+LFxuICBmcm9udG1hdHRlckNoYW5nZWQ6IE1hcDxzdHJpbmcsIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHNbXT5cbik6IHN0cmluZyB7XG4gIGlmIChmcm9udG1hdHRlckNoYW5nZWQuc2l6ZSA+IDApIHtcbiAgICByZXR1cm4gc2V0RnJvbnRtYXR0ZXIobmV3Q29udGVudCwgZnJvbnRtYXR0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdDb250ZW50O1xufVxuXG5mdW5jdGlvbiBwYXJzZUZyb250bWF0dGVyU2FmZWx5KGNvbnRlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nKTogUGFyc2VGcm9udG1hdHRlclNhZmVseVJlc3VsdCB7XG4gIGxldCBmcm9udG1hdHRlcjogQ29tYmluZWRGcm9udG1hdHRlcjx1bmtub3duPiA9IHt9O1xuICBsZXQgaGFzRnJvbnRtYXR0ZXJFcnJvciA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBGcm9udG1hdHRlciBwYXJzaW5nIGZhaWxlZCBpbiAke3BhdGh9YCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgIGhhc0Zyb250bWF0dGVyRXJyb3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHsgZnJvbnRtYXR0ZXIsIGhhc0Zyb250bWF0dGVyRXJyb3IgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKc29uU2FmZShjb250ZW50OiBzdHJpbmcpOiBHZW5lcmljT2JqZWN0IHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9IGNhdGNoIHtcbiAgICBwYXJzZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0Jykge1xuICAgIHBhcnNlZCA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBHZW5lcmljT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBzb3J0QW5kRmlsdGVyQ2hhbmdlcyhjaGFuZ2VzOiBGaWxlQ2hhbmdlW10pOiBGaWxlQ2hhbmdlW10ge1xuICAvLyBTb3J0IGNoYW5nZXMgYnkgdHlwZSBhbmQgcG9zaXRpb25cbiAgY2hhbmdlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGlzQ29udGVudENoYW5nZShhKSAmJiBpc0NvbnRlbnRDaGFuZ2UoYikpIHtcbiAgICAgIHJldHVybiBhLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQgLSBiLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoYikpIHtcbiAgICAgIHJldHVybiBhLnJlZmVyZW5jZS5rZXkubG9jYWxlQ29tcGFyZShiLnJlZmVyZW5jZS5rZXkpIHx8IGEucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0IC0gYi5yZWZlcmVuY2Uuc3RhcnRPZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2UoYSkgJiYgaXNGcm9udG1hdHRlckNoYW5nZShiKSkge1xuICAgICAgcmV0dXJuIGEucmVmZXJlbmNlLmtleS5sb2NhbGVDb21wYXJlKGIucmVmZXJlbmNlLmtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQ29udGVudENoYW5nZShhKSA/IC0xIDogMTtcbiAgfSk7XG5cbiAgLy8gRmlsdGVyIG91dCBkdXBsaWNhdGUgYW5kIG5vLW9wIGNoYW5nZXNcbiAgcmV0dXJuIGNoYW5nZXMuZmlsdGVyKChjaGFuZ2UsIGluZGV4KSA9PiB7XG4gICAgaWYgKGNoYW5nZS5vbGRDb250ZW50ID09PSBjaGFuZ2UubmV3Q29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIWRlZXBFcXVhbChjaGFuZ2UsIGNoYW5nZXNbaW5kZXggLSAxXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoYW5nZXMoY2hhbmdlczogRmlsZUNoYW5nZVtdLCBjb250ZW50OiBzdHJpbmcsIGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+LCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdmFsaWRhdGVDaGFuZ2VzRGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignRmlsZUNoYW5nZTp2YWxpZGF0ZUNoYW5nZXMnKTtcbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgY2hhbmdlIHR5cGVzIGFyZSBoYW5kbGVkOyB0aGUgZmFsc2UgYnJhbmNoIGxlYWRzIHRvIG90aGVyIGVsc2UtaWYgY2hlY2tzLiAqL1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLmVuZC5vZmZzZXQ7XG4gICAgICBjb25zdCBhY3R1YWxDb250ZW50ID0gY29udGVudC5zbGljZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTtcbiAgICAgIGlmIChhY3R1YWxDb250ZW50ICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICB2YWxpZGF0ZUNoYW5nZXNEZWJ1Z2dlcignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGVuZE9mZnNldCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgc3RhcnRPZmZzZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsbCBjaGFuZ2UgdHlwZXMgYXJlIGhhbmRsZWQ7IG5vIHVua25vd24gY2hhbmdlIHR5cGVzIGluIHByYWN0aWNlLiAqL1xuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgY2hhbmdlLnJlZmVyZW5jZS5rZXkpO1xuICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB2YWxpZGF0ZUNoYW5nZXNEZWJ1Z2dlcignUHJvcGVydHkgdmFsdWUgaXMgbm90IGEgc3RyaW5nJywge1xuICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UucmVmZXJlbmNlLmtleSxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHByb3BlcnR5VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IHByb3BlcnR5VmFsdWUuc2xpY2UoY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldCwgY2hhbmdlLnJlZmVyZW5jZS5lbmRPZmZzZXQpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIHZhbGlkYXRlQ2hhbmdlc0RlYnVnZ2VyKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLnJlZmVyZW5jZS5rZXksXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBzdGFydE9mZnNldDogY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGNoYW5nZSB0eXBlcyBhcmUgaGFuZGxlZCBhYm92ZTsgbm8gdW5rbm93biBjaGFuZ2UgdHlwZXMgaW4gcHJhY3RpY2UuICovXG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBjb25zdCBhY3R1YWxDb250ZW50ID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgY2hhbmdlLnJlZmVyZW5jZS5rZXkpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIHZhbGlkYXRlQ2hhbmdlc0RlYnVnZ2VyKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLnJlZmVyZW5jZS5rZXksXG4gICAgICAgICAgcGF0aFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7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
|
|
457
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2ZpbGUtY2hhbmdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBmaWxlIGNoYW5nZXMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZUNhY2hlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQ2FudmFzRGF0YSB9IGZyb20gJ29ic2lkaWFuL2NhbnZhcy5kLnRzJztcblxuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL3ZhbHVlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzIH0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ2FudmFzRmlsZU5vZGVSZWZlcmVuY2UsXG4gIENhbnZhc1JlZmVyZW5jZSxcbiAgQ2FudmFzVGV4dE5vZGVSZWZlcmVuY2Vcbn0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb250ZW50QXJncyxcbiAgUHJvY2Vzc09wdGlvbnMsXG4gIFByb2Nlc3NQYXJhbXNcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uL2Vycm9yLnRzJztcbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzLFxuICBzZXROZXN0ZWRQcm9wZXJ0eVZhbHVlXG59IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi92YWx1ZS1wcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGVcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMsXG4gIHRvRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0c1xufSBmcm9tICcuL2Zyb250bWF0dGVyLWxpbmstY2FjaGUtd2l0aC1vZmZzZXRzLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHtcbiAgaXNDYW52YXNSZWZlcmVuY2UsXG4gIHJlZmVyZW5jZVRvRmlsZUNoYW5nZVxufSBmcm9tICcuL3JlZmVyZW5jZS50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi92YXVsdC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGFwcGx5Q29udGVudENoYW5nZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGx5Q29udGVudENoYW5nZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBBIHByb3ZpZGVyIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBjb250ZW50IGNoYW5nZXMgdG8gYXBwbHkuXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdIHwgbnVsbCwgQ29udGVudEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcz86IGJvb2xlYW47XG59XG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBhcHBseUZpbGVDaGFuZ2VzfS5cbiAqL1xuZXhwb3J0IHR5cGUgQXBwbHlGaWxlQ2hhbmdlc09wdGlvbnMgPSBQcm9jZXNzT3B0aW9ucztcbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGFwcGx5RmlsZUNoYW5nZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGx5RmlsZUNoYW5nZXNQYXJhbXMgZXh0ZW5kcyBBcHBseUZpbGVDaGFuZ2VzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugd2hlcmUgdGhlIGZpbGUgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgZmlsZSBjaGFuZ2VzIHRvIGFwcGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXSB8IG51bGwsIENvbnRlbnRBcmdzPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcz86IGJvb2xlYW47XG59XG4vKipcbiAqIEEgZmlsZSBjaGFuZ2UgaW4gdGhlIHZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogQSBuZXcgY29udGVudCB0byByZXBsYWNlIHRoZSBvbGQgY29udGVudC5cbiAgICovXG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gb2xkIGNvbnRlbnQgdGhhdCB3aWxsIGJlIHJlcGxhY2VkLlxuICAgKi9cbiAgb2xkQ29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0aGF0IGNhdXNlZCB0aGUgY2hhbmdlLlxuICAgKi9cbiAgcmVmZXJlbmNlOiBSZWZlcmVuY2U7XG59XG5pbnRlcmZhY2UgQXBwbHlDYW52YXNDaGFuZ2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgZmlsZSBjaGFuZ2VzIHRvIGFwcGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXSB8IG51bGwsIENvbnRlbnRBcmdzPjtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24gaWYgdGhlIGNoYW5nZXMgYXJlIGludmFsaWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQXBwbHlDb250ZW50Q2hhbmdlc1RvVGV4dFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBjaGFuZ2VzIHRvIGFwcGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlczogRmlsZUNoYW5nZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBwYXJzaW5nIHRoZSBmcm9udG1hdHRlciBmYWlsZWQuXG4gICAqL1xuICByZWFkb25seSBoYXNGcm9udG1hdHRlckVycm9yOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFwcGx5Q29udGVudENoYW5nZXNUb1RleHRSZXN1bHQge1xuICByZWFkb25seSBmcm9udG1hdHRlckNoYW5nZWQ6IE1hcDxzdHJpbmcsIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHNbXT47XG4gIHJlYWRvbmx5IG5ld0NvbnRlbnQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFwcGx5RnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBUaGUgZnJvbnRtYXR0ZXIgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBmcm9udG1hdHRlcjogQ29tYmluZWRGcm9udG1hdHRlcjx1bmtub3duPjtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZnJvbnRtYXR0ZXIga2V5cyB0byB0aGUgZnJvbnRtYXR0ZXIgY2hhbmdlcyB3aXRoIG9mZnNldHMgdG8gYXBwbHkuXG4gICAqL1xuICByZWFkb25seSBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwOiBNYXA8c3RyaW5nLCBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzW10+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJ1aWxkRmluYWxDb250ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmcm9udG1hdHRlciB0byB3cml0ZSBpbnRvIHRoZSBmaW5hbCBjb250ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIGZyb250bWF0dGVyIGtleXMgdG8gdGhlIGZyb250bWF0dGVyIGNoYW5nZXMgd2l0aCBvZmZzZXRzIHRoYXQgd2VyZSBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRtYXR0ZXJDaGFuZ2VkOiBNYXA8c3RyaW5nLCBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzW10+O1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB0byB3aGljaCB0aGUgZnJvbnRtYXR0ZXIgc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBuZXdDb250ZW50OiBzdHJpbmc7XG59XG5cbnR5cGUgQ2FudmFzQ2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8Q2FudmFzUmVmZXJlbmNlPjtcbnR5cGUgQ2FudmFzRmlsZU5vZGVDaGFuZ2UgPSBGaWxlQ2hhbmdlICYgV2l0aFJlZmVyZW5jZTxDYW52YXNGaWxlTm9kZVJlZmVyZW5jZT47XG50eXBlIENhbnZhc1RleHROb2RlQ2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8Q2FudmFzVGV4dE5vZGVSZWZlcmVuY2U+O1xudHlwZSBDb250ZW50Q2hhbmdlID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8UmVmZXJlbmNlQ2FjaGU+O1xudHlwZSBGcm9udG1hdHRlckNoYW5nZSA9IEZpbGVDaGFuZ2UgJiBXaXRoUmVmZXJlbmNlPEZyb250bWF0dGVyTGlua0NhY2hlPjtcblxudHlwZSBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzID0gRmlsZUNoYW5nZSAmIFdpdGhSZWZlcmVuY2U8RnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cz47XG5cbmludGVyZmFjZSBQYXJzZUZyb250bWF0dGVyU2FmZWx5UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRvIHBhcnNlIHRoZSBmcm9udG1hdHRlciBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0aGUgY29udGVudCBiZWxvbmdzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGFyc2VGcm9udG1hdHRlclNhZmVseVJlc3VsdCB7XG4gIHJlYWRvbmx5IGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+O1xuICByZWFkb25seSBoYXNGcm9udG1hdHRlckVycm9yOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgVmFsaWRhdGVDaGFuZ2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IGNoYW5nZXMgdG8gdmFsaWRhdGUuXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VzOiBGaWxlQ2hhbmdlW107XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IHRoZSBjaGFuZ2VzIHNob3VsZCBiZSB2YWxpZGF0ZWQgYWdhaW5zdC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZyb250bWF0dGVyIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSB2YWxpZGF0ZWQgYWdhaW5zdC5cbiAgICovXG4gIHJlYWRvbmx5IGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgdmFsaWRhdGVkIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXaXRoUmVmZXJlbmNlPFIgZXh0ZW5kcyBSZWZlcmVuY2U+IHtcbiAgcmVmZXJlbmNlOiBSO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBzZXJpZXMgb2YgY29udGVudCBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGFwcGx5aW5nIHRoZSBjb250ZW50IGNoYW5nZXMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSB1cGRhdGVkIGNvbnRlbnQgb3IgdG8gYG51bGxgIGlmIHVwZGF0ZSBkaWRuJ3Qgc3VjY2VlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5Q29udGVudENoYW5nZXMocGFyYW1zOiBBcHBseUNvbnRlbnRDaGFuZ2VzUGFyYW1zKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhYm9ydFNpZ25hbCxcbiAgICBjaGFuZ2VzUHJvdmlkZXIsXG4gICAgY29udGVudCxcbiAgICBwYXRoLFxuICAgIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyA9IHRydWVcbiAgfSA9IHBhcmFtcztcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgbGV0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyLCB7IGFib3J0U2lnbmFsLCBjb250ZW50IH0pO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBpZiAoY2hhbmdlcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBmcm9udG1hdHRlciwgaGFzRnJvbnRtYXR0ZXJFcnJvciB9ID0gcGFyc2VGcm9udG1hdHRlclNhZmVseSh7IGNvbnRlbnQsIHBhdGggfSk7XG5cbiAgaWYgKCF2YWxpZGF0ZUNoYW5nZXMoeyBjaGFuZ2VzLCBjb250ZW50LCBmcm9udG1hdHRlciwgcGF0aCB9KSkge1xuICAgIHJldHVybiBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXMgPyBudWxsIDogY29udGVudDtcbiAgfVxuXG4gIGNoYW5nZXMgPSBzb3J0QW5kRmlsdGVyQ2hhbmdlcyhjaGFuZ2VzKTtcblxuICBjb25zdCB7IGZyb250bWF0dGVyQ2hhbmdlZCwgbmV3Q29udGVudCB9ID0gYXBwbHlDb250ZW50Q2hhbmdlc1RvVGV4dCh7IGNoYW5nZXMsIGNvbnRlbnQsIGhhc0Zyb250bWF0dGVyRXJyb3IsIHBhdGggfSk7XG5cbiAgYXdhaXQgYXBwbHlGcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyh7XG4gICAgYWJvcnRTaWduYWwsXG4gICAgZnJvbnRtYXR0ZXIsXG4gICAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcDogZnJvbnRtYXR0ZXJDaGFuZ2VkLFxuICAgIHBhdGhcbiAgfSk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgcmV0dXJuIGJ1aWxkRmluYWxDb250ZW50KHsgZnJvbnRtYXR0ZXIsIGZyb250bWF0dGVyQ2hhbmdlZCwgbmV3Q29udGVudCB9KTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGZpbGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgcGF0aCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgYXBwbHlpbmcgdGhlIGZpbGUgY2hhbmdlcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5RmlsZUNoYW5nZXMocGFyYW1zOiBBcHBseUZpbGVDaGFuZ2VzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgY2hhbmdlc1Byb3ZpZGVyLFxuICAgIHBhdGhPckZpbGUsXG4gICAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID0gdHJ1ZSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHByb2Nlc3Mobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFByb2Nlc3NQYXJhbXM+KHtcbiAgICBhcHAsXG4gICAgYXN5bmMgbmV3Q29udGVudFByb3ZpZGVyKHsgYWJvcnRTaWduYWwsIGNvbnRlbnQgfSkge1xuICAgICAgaWYgKGlzQ2FudmFzRmlsZShwYXRoT3JGaWxlKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgYXBwbHlDYW52YXNDaGFuZ2VzKHtcbiAgICAgICAgICBhYm9ydFNpZ25hbCxcbiAgICAgICAgICBjaGFuZ2VzUHJvdmlkZXIsXG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSksXG4gICAgICAgICAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgYXBwbHlDb250ZW50Q2hhbmdlcyh7XG4gICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICBjaGFuZ2VzUHJvdmlkZXIsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHBhdGg6IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSxcbiAgICAgICAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHBhdGhPckZpbGUsXG4gICAgLi4ub3B0aW9uc1xuICB9KSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBjaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNhbnZhcyBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhc0NoYW5nZShjaGFuZ2U6IEZpbGVDaGFuZ2UpOiBjaGFuZ2UgaXMgQ2FudmFzQ2hhbmdlIHtcbiAgcmV0dXJuIGlzQ2FudmFzUmVmZXJlbmNlKGNoYW5nZS5yZWZlcmVuY2UpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIGZpbGUgbm9kZSBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIGZpbGUgbm9kZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhc0ZpbGVOb2RlQ2hhbmdlKGNoYW5nZTogRmlsZUNoYW5nZSk6IGNoYW5nZSBpcyBDYW52YXNGaWxlTm9kZUNoYW5nZSB7XG4gIHJldHVybiBpc0NhbnZhc0NoYW5nZShjaGFuZ2UpICYmIGNoYW5nZS5yZWZlcmVuY2UudHlwZSA9PT0gJ2ZpbGUnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIHRleHQgbm9kZSBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIHRleHQgbm9kZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhc1RleHROb2RlQ2hhbmdlKGNoYW5nZTogRmlsZUNoYW5nZSk6IGNoYW5nZSBpcyBDYW52YXNUZXh0Tm9kZUNoYW5nZSB7XG4gIHJldHVybiBpc0NhbnZhc0NoYW5nZShjaGFuZ2UpICYmIGNoYW5nZS5yZWZlcmVuY2UudHlwZSA9PT0gJ3RleHQnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNvbnRlbnQgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIENvbnRlbnRDaGFuZ2Uge1xuICByZXR1cm4gaXNSZWZlcmVuY2VDYWNoZShmaWxlQ2hhbmdlLnJlZmVyZW5jZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgRnJvbnRtYXR0ZXJDaGFuZ2Uge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZShmaWxlQ2hhbmdlLnJlZmVyZW5jZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2Ugd2l0aCBvZmZzZXRzLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2Ugd2l0aCBvZmZzZXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2UucmVmZXJlbmNlKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZyb250bWF0dGVyIGNoYW5nZSB0byBhIGZyb250bWF0dGVyIGNoYW5nZSB3aXRoIG9mZnNldHMuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgZmlsZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoZmlsZUNoYW5nZTogRnJvbnRtYXR0ZXJDaGFuZ2UpOiBGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzIHtcbiAgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhmaWxlQ2hhbmdlKSkge1xuICAgIHJldHVybiBmaWxlQ2hhbmdlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5maWxlQ2hhbmdlLFxuICAgIHJlZmVyZW5jZTogdG9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2UucmVmZXJlbmNlKVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUNhbnZhc0NoYW5nZXMocGFyYW1zOiBBcHBseUNhbnZhc0NoYW5nZXNQYXJhbXMpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFib3J0U2lnbmFsLFxuICAgIGNoYW5nZXNQcm92aWRlcixcbiAgICBjb250ZW50LFxuICAgIHBhdGgsXG4gICAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID0gdHJ1ZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBjaGFuZ2VzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNoYW5nZXNQcm92aWRlciwgeyBhYm9ydFNpZ25hbCwgY29udGVudCB9KTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgaWYgKGNoYW5nZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNhbnZhc0RhdGEgPSBwYXJzZUpzb25TYWZlKGNvbnRlbnQpIGFzIEdlbmVyaWNPYmplY3Q8Q2FudmFzRGF0YT47XG5cbiAgY29uc3QgY2FudmFzVGV4dENoYW5nZXMgPSBuZXcgTWFwPG51bWJlciwgQ2FudmFzVGV4dE5vZGVDaGFuZ2VbXT4oKTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgaWYgKCFpc0NhbnZhc0NoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ09ubHkgY2FudmFzIGNoYW5nZXMgYXJlIHN1cHBvcnRlZCBmb3IgY2FudmFzIGZpbGVzJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGNhbnZhc0RhdGEubm9kZXNbY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXhdO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdOb2RlIG5vdCBmb3VuZCc7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIHtcbiAgICAgICAgbm9kZUluZGV4OiBjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaXNDYW52YXNGaWxlTm9kZUNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBpZiAobm9kZS5maWxlICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICBnZXRMaWJEZWJ1Z2dlcignRmlsZUNoYW5nZTphcHBseUNhbnZhc0NoYW5nZXMnKSgnQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50OiBub2RlLmZpbGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgbm9kZUluZGV4OiBjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHR5cGU6ICdmaWxlJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG5vZGUuZmlsZSA9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBmYWxzZSBicmFuY2ggb2YgdGhlIGVsc2UtaWYgaXMgdW5yZWFjaGFibGU7IG9ubHkgJ2ZpbGUnIGFuZCAndGV4dCcgY2FudmFzIG5vZGUgdHlwZXMgZXhpc3QuICovXG4gICAgfSBlbHNlIGlmIChpc0NhbnZhc1RleHROb2RlQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBsZXQgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlID0gY2FudmFzVGV4dENoYW5nZXMuZ2V0KGNoYW5nZS5yZWZlcmVuY2Uubm9kZUluZGV4KTtcbiAgICAgIGlmICghY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlKSB7XG4gICAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IFtdO1xuICAgICAgICBjYW52YXNUZXh0Q2hhbmdlcy5zZXQoY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXgsIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZS5wdXNoKGNoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbbm9kZUluZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGVdIG9mIGNhbnZhc1RleHRDaGFuZ2VzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW25vZGVJbmRleF07XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIE5vZGUgZXhpc3RlbmNlIGlzIGFscmVhZHkgdmVyaWZpZWQgaW4gdGhlIGZpcnN0IGxvb3AgYWJvdmUuICovXG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gJ05vZGUgbm90IGZvdW5kJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICAgIGlmICh0eXBlb2Ygbm9kZS50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdOb2RlIHRleHQgaXMgbm90IGEgc3RyaW5nJztcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSwge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50Q2hhbmdlcyA9IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZS5tYXAoKGNoYW5nZSkgPT4gcmVmZXJlbmNlVG9GaWxlQ2hhbmdlKGNoYW5nZS5yZWZlcmVuY2Uub3JpZ2luYWxSZWZlcmVuY2UsIGNoYW5nZS5uZXdDb250ZW50KSk7XG4gICAgbm9kZS50ZXh0ID0gYXdhaXQgYXBwbHlDb250ZW50Q2hhbmdlcyh7XG4gICAgICBhYm9ydFNpZ25hbCxcbiAgICAgIGNoYW5nZXNQcm92aWRlcjogY29udGVudENoYW5nZXMsXG4gICAgICBjb250ZW50OiBub2RlLnRleHQsXG4gICAgICBwYXRoOiBgJHtwYXRofS5ub2RlJHtTdHJpbmcobm9kZUluZGV4KX0uVklSVFVBTF9GSUxFLm1kYCxcbiAgICAgIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlc1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNhbnZhc0RhdGEsIG51bGwsICdcXHQnKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlDb250ZW50Q2hhbmdlc1RvVGV4dChwYXJhbXM6IEFwcGx5Q29udGVudENoYW5nZXNUb1RleHRQYXJhbXMpOiBBcHBseUNvbnRlbnRDaGFuZ2VzVG9UZXh0UmVzdWx0IHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgY29udGVudCxcbiAgICBoYXNGcm9udG1hdHRlckVycm9yLFxuICAgIHBhdGhcbiAgfSA9IHBhcmFtcztcbiAgbGV0IG5ld0NvbnRlbnQgPSAnJztcbiAgbGV0IGxhc3RJbmRleCA9IDA7XG4gIGxldCBsYXN0Q29udGVudENoYW5nZTogQ29udGVudENoYW5nZSA9IHtcbiAgICBuZXdDb250ZW50OiAnJyxcbiAgICBvbGRDb250ZW50OiAnJyxcbiAgICByZWZlcmVuY2U6IHtcbiAgICAgIGxpbms6ICcnLFxuICAgICAgb3JpZ2luYWw6ICcnLFxuICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgZW5kOiB7IGNvbDogMCwgbGluZTogMCwgb2Zmc2V0OiAwIH0sXG4gICAgICAgIHN0YXJ0OiB7IGNvbDogMCwgbGluZTogMCwgb2Zmc2V0OiAwIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAgPSBuZXcgTWFwPHN0cmluZywgRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0c1tdPigpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGNoYW5nZSB0eXBlcyBhcmUgaGFuZGxlZDsgdGhlIGZhbHNlIGJyYW5jaCBsZWFkcyB0byBvdGhlciBlbHNlLWlmIGNoZWNrcy4gKi9cbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBpZiAobGFzdEluZGV4IDw9IGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0KSB7XG4gICAgICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgsIGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0KTtcbiAgICAgICAgbmV3Q29udGVudCArPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgICAgbGFzdEluZGV4ID0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5lbmQub2Zmc2V0O1xuICAgICAgICBsYXN0Q29udGVudENoYW5nZSA9IGNoYW5nZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXBwaW5nU3RhcnRPZmZzZXQgPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCAtIGxhc3RDb250ZW50Q2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IG92ZXJsYXBwaW5nRW5kT2Zmc2V0ID0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5lbmQub2Zmc2V0IC0gbGFzdENvbnRlbnRDaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldDtcbiAgICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdDb250ZW50ID0gbGFzdENvbnRlbnRDaGFuZ2UubmV3Q29udGVudC5zbGljZShvdmVybGFwcGluZ1N0YXJ0T2Zmc2V0LCBvdmVybGFwcGluZ0VuZE9mZnNldCk7XG4gICAgICAgIGlmIChvdmVybGFwcGluZ0NvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdPdmVybGFwcGluZyBjaGFuZ2VzJztcbiAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIHsgY2hhbmdlLCBsYXN0Q29udGVudENoYW5nZSB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuc2xpY2UoMCwgbmV3Q29udGVudC5sZW5ndGggLSBsYXN0Q29udGVudENoYW5nZS5uZXdDb250ZW50Lmxlbmd0aClcbiAgICAgICAgICArIGxhc3RDb250ZW50Q2hhbmdlLm5ld0NvbnRlbnQuc2xpY2UoMCwgb3ZlcmxhcHBpbmdTdGFydE9mZnNldClcbiAgICAgICAgICArIGNoYW5nZS5uZXdDb250ZW50XG4gICAgICAgICAgKyBsYXN0Q29udGVudENoYW5nZS5uZXdDb250ZW50LnNsaWNlKG92ZXJsYXBwaW5nRW5kT2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgY2hhbmdlIHR5cGVzIGFyZSBoYW5kbGVkIGFib3ZlOyBubyB1bmtub3duIGNoYW5nZSB0eXBlcyBpbiBwcmFjdGljZS4gKi9cbiAgICB9IGVsc2UgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBWYWxpZGF0aW9uIHJlamVjdHMgZnJvbnRtYXR0ZXIgY2hhbmdlcyB3aGVuIHBhcnNpbmcgZmFpbHMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlLiAqL1xuICAgICAgaWYgKGhhc0Zyb250bWF0dGVyRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGFwcGx5IGZyb250bWF0dGVyIGNoYW5nZSBpbiAke3BhdGh9LCBiZWNhdXNlIGZyb250bWF0dGVyIHBhcnNpbmcgZmFpbGVkYCwgeyBjaGFuZ2UgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBsZXQgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMgPSBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwLmdldChjaGFuZ2UucmVmZXJlbmNlLmtleSk7XG4gICAgICAgIGlmICghZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMpIHtcbiAgICAgICAgICBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyA9IFtdO1xuICAgICAgICAgIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAuc2V0KGNoYW5nZS5yZWZlcmVuY2Uua2V5LCBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMucHVzaCh0b0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoY2hhbmdlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmV3Q29udGVudCArPSBjb250ZW50LnNsaWNlKGxhc3RJbmRleCk7XG5cbiAgcmV0dXJuIHsgZnJvbnRtYXR0ZXJDaGFuZ2VkOiBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwLCBuZXdDb250ZW50IH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5RnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMocGFyYW1zOiBBcHBseUZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhYm9ydFNpZ25hbCxcbiAgICBmcm9udG1hdHRlcixcbiAgICBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwLFxuICAgIHBhdGhcbiAgfSA9IHBhcmFtcztcbiAgZm9yIChjb25zdCBba2V5LCBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0c10gb2YgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcC5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwga2V5KTtcbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVmFsaWRhdGlvbiBlbnN1cmVzIHRoZSBwcm9wZXJ0eSBpcyBhIHN0cmluZyBiZWZvcmUgcmVhY2hpbmcgdGhpcyBwb2ludC4gKi9cbiAgICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgICBjb25zdCBjb250ZW50Q2hhbmdlczogQ29udGVudENoYW5nZVtdID0gZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMubWFwKChjaGFuZ2UpID0+ICh7XG4gICAgICBuZXdDb250ZW50OiBjaGFuZ2UubmV3Q29udGVudCxcbiAgICAgIG9sZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgIGxpbms6ICcnLFxuICAgICAgICBvcmlnaW5hbDogJycsXG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICBjb2w6IGNoYW5nZS5yZWZlcmVuY2UuZW5kT2Zmc2V0LFxuICAgICAgICAgICAgbGluZTogMCxcbiAgICAgICAgICAgIG9mZnNldDogY2hhbmdlLnJlZmVyZW5jZS5lbmRPZmZzZXRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBjb2w6IGNoYW5nZS5yZWZlcmVuY2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICBsaW5lOiAwLFxuICAgICAgICAgICAgb2Zmc2V0OiBjaGFuZ2UucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgY29uc3QgbmV3UHJvcGVydHlWYWx1ZSA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoe1xuICAgICAgYWJvcnRTaWduYWwsXG4gICAgICBjaGFuZ2VzUHJvdmlkZXI6IGNvbnRlbnRDaGFuZ2VzLFxuICAgICAgY29udGVudDogcHJvcGVydHlWYWx1ZSxcbiAgICAgIHBhdGg6IGAke3BhdGh9LmZyb250bWF0dGVyLiR7a2V5fS5WSVJUVUFMX0ZJTEUubWRgXG4gICAgfSk7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIElubmVyIGFwcGx5Q29udGVudENoYW5nZXMgdXNlcyB2YWxpZGF0ZWQgb2Zmc2V0cywgc28gbnVsbCBpcyBub3QgZXhwZWN0ZWQuICovXG4gICAgaWYgKG5ld1Byb3BlcnR5VmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICAgIHNldE5lc3RlZFByb3BlcnR5VmFsdWUoe1xuICAgICAgb2JqOiBmcm9udG1hdHRlcixcbiAgICAgIHBhdGg6IGtleSxcbiAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRGaW5hbENvbnRlbnQocGFyYW1zOiBCdWlsZEZpbmFsQ29udGVudFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBmcm9udG1hdHRlcixcbiAgICBmcm9udG1hdHRlckNoYW5nZWQsXG4gICAgbmV3Q29udGVudFxuICB9ID0gcGFyYW1zO1xuICBpZiAoZnJvbnRtYXR0ZXJDaGFuZ2VkLnNpemUgPiAwKSB7XG4gICAgcmV0dXJuIHNldEZyb250bWF0dGVyKG5ld0NvbnRlbnQsIGZyb250bWF0dGVyKTtcbiAgfVxuICByZXR1cm4gbmV3Q29udGVudDtcbn1cblxuZnVuY3Rpb24gcGFyc2VGcm9udG1hdHRlclNhZmVseShwYXJhbXM6IFBhcnNlRnJvbnRtYXR0ZXJTYWZlbHlQYXJhbXMpOiBQYXJzZUZyb250bWF0dGVyU2FmZWx5UmVzdWx0IHtcbiAgY29uc3QgeyBjb250ZW50LCBwYXRoIH0gPSBwYXJhbXM7XG4gIGxldCBmcm9udG1hdHRlcjogQ29tYmluZWRGcm9udG1hdHRlcjx1bmtub3duPiA9IHt9O1xuICBsZXQgaGFzRnJvbnRtYXR0ZXJFcnJvciA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBGcm9udG1hdHRlciBwYXJzaW5nIGZhaWxlZCBpbiAke3BhdGh9YCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgIGhhc0Zyb250bWF0dGVyRXJyb3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHsgZnJvbnRtYXR0ZXIsIGhhc0Zyb250bWF0dGVyRXJyb3IgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKc29uU2FmZShjb250ZW50OiBzdHJpbmcpOiBHZW5lcmljT2JqZWN0IHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9IGNhdGNoIHtcbiAgICBwYXJzZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0Jykge1xuICAgIHBhcnNlZCA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBHZW5lcmljT2JqZWN0O1xufVxuXG5mdW5jdGlvbiBzb3J0QW5kRmlsdGVyQ2hhbmdlcyhjaGFuZ2VzOiBGaWxlQ2hhbmdlW10pOiBGaWxlQ2hhbmdlW10ge1xuICAvLyBTb3J0IGNoYW5nZXMgYnkgdHlwZSBhbmQgcG9zaXRpb25cbiAgY2hhbmdlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGlzQ29udGVudENoYW5nZShhKSAmJiBpc0NvbnRlbnRDaGFuZ2UoYikpIHtcbiAgICAgIHJldHVybiBhLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQgLSBiLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoYikpIHtcbiAgICAgIHJldHVybiBhLnJlZmVyZW5jZS5rZXkubG9jYWxlQ29tcGFyZShiLnJlZmVyZW5jZS5rZXkpIHx8IGEucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0IC0gYi5yZWZlcmVuY2Uuc3RhcnRPZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2UoYSkgJiYgaXNGcm9udG1hdHRlckNoYW5nZShiKSkge1xuICAgICAgcmV0dXJuIGEucmVmZXJlbmNlLmtleS5sb2NhbGVDb21wYXJlKGIucmVmZXJlbmNlLmtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQ29udGVudENoYW5nZShhKSA/IC0xIDogMTtcbiAgfSk7XG5cbiAgLy8gRmlsdGVyIG91dCBkdXBsaWNhdGUgYW5kIG5vLW9wIGNoYW5nZXNcbiAgcmV0dXJuIGNoYW5nZXMuZmlsdGVyKChjaGFuZ2UsIGluZGV4KSA9PiB7XG4gICAgaWYgKGNoYW5nZS5vbGRDb250ZW50ID09PSBjaGFuZ2UubmV3Q29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIWRlZXBFcXVhbChjaGFuZ2UsIGNoYW5nZXNbaW5kZXggLSAxXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoYW5nZXMocGFyYW1zOiBWYWxpZGF0ZUNoYW5nZXNQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgY29udGVudCxcbiAgICBmcm9udG1hdHRlcixcbiAgICBwYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZhbGlkYXRlQ2hhbmdlc0RlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0ZpbGVDaGFuZ2U6dmFsaWRhdGVDaGFuZ2VzJyk7XG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGNoYW5nZSB0eXBlcyBhcmUgaGFuZGxlZDsgdGhlIGZhbHNlIGJyYW5jaCBsZWFkcyB0byBvdGhlciBlbHNlLWlmIGNoZWNrcy4gKi9cbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBjb25zdCBzdGFydE9mZnNldCA9IGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0O1xuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5lbmQub2Zmc2V0O1xuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IGNvbnRlbnQuc2xpY2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgdmFsaWRhdGVDaGFuZ2VzRGVidWdnZXIoJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgYWN0dWFsQ29udGVudCxcbiAgICAgICAgICBlbmRPZmZzZXQsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHN0YXJ0T2Zmc2V0XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgY2hhbmdlIHR5cGVzIGFyZSBoYW5kbGVkOyBubyB1bmtub3duIGNoYW5nZSB0eXBlcyBpbiBwcmFjdGljZS4gKi9cbiAgICB9IGVsc2UgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhjaGFuZ2UpKSB7XG4gICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGNoYW5nZS5yZWZlcmVuY2Uua2V5KTtcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsaWRhdGVDaGFuZ2VzRGVidWdnZXIoJ1Byb3BlcnR5IHZhbHVlIGlzIG5vdCBhIHN0cmluZycsIHtcbiAgICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLnJlZmVyZW5jZS5rZXksXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBwcm9wZXJ0eVZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBwcm9wZXJ0eVZhbHVlLnNsaWNlKGNoYW5nZS5yZWZlcmVuY2Uuc3RhcnRPZmZzZXQsIGNoYW5nZS5yZWZlcmVuY2UuZW5kT2Zmc2V0KTtcbiAgICAgIGlmIChhY3R1YWxDb250ZW50ICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICB2YWxpZGF0ZUNoYW5nZXNEZWJ1Z2dlcignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5yZWZlcmVuY2Uua2V5LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgc3RhcnRPZmZzZXQ6IGNoYW5nZS5yZWZlcmVuY2Uuc3RhcnRPZmZzZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsbCBjaGFuZ2UgdHlwZXMgYXJlIGhhbmRsZWQgYWJvdmU7IG5vIHVua25vd24gY2hhbmdlIHR5cGVzIGluIHByYWN0aWNlLiAqL1xuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IGdldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGNoYW5nZS5yZWZlcmVuY2Uua2V5KTtcbiAgICAgIGlmIChhY3R1YWxDb250ZW50ICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICB2YWxpZGF0ZUNoYW5nZXNEZWJ1Z2dlcignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5yZWZlcmVuY2Uua2V5LFxuICAgICAgICAgIHBhdGhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQWtCUCxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGtCQUFrQjtBQUMzQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxvQkFBb0I7QUFDN0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGVBQWU7QUFvT3hCLGVBQXNCLG9CQUFvQixRQUEyRDtBQUNuRyxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsOEJBQThCO0FBQUEsRUFDaEMsSUFBSTtBQUNKLGNBQVksZUFBZTtBQUMzQixNQUFJLFVBQVUsTUFBTSxhQUFhLGlCQUFpQixFQUFFLGFBQWEsUUFBUSxDQUFDO0FBQzFFLGNBQVksZUFB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
|
|
@@ -10,36 +10,86 @@ import type { MaybeReturn } from '../type.mjs';
|
|
|
10
10
|
import type { PathOrFile } from './file-system.mjs';
|
|
11
11
|
import type { CombinedFrontmatter } from './frontmatter.mjs';
|
|
12
12
|
import type { ProcessOptions } from './vault.mjs';
|
|
13
|
+
/**
|
|
14
|
+
* Parameters for {@link addAlias}.
|
|
15
|
+
*/
|
|
16
|
+
export interface AddAliasParams {
|
|
17
|
+
/**
|
|
18
|
+
* The alias to add.
|
|
19
|
+
*/
|
|
20
|
+
readonly alias?: string;
|
|
21
|
+
/**
|
|
22
|
+
* The Obsidian app instance.
|
|
23
|
+
*/
|
|
24
|
+
readonly app: App;
|
|
25
|
+
/**
|
|
26
|
+
* The path or TFile object representing the note.
|
|
27
|
+
*/
|
|
28
|
+
readonly pathOrFile: PathOrFile;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Parameters for {@link deleteAlias}.
|
|
32
|
+
*/
|
|
33
|
+
export interface DeleteAliasParams {
|
|
34
|
+
/**
|
|
35
|
+
* The alias to delete.
|
|
36
|
+
*/
|
|
37
|
+
readonly alias?: string;
|
|
38
|
+
/**
|
|
39
|
+
* The Obsidian app instance.
|
|
40
|
+
*/
|
|
41
|
+
readonly app: App;
|
|
42
|
+
/**
|
|
43
|
+
* The path or TFile object representing the note.
|
|
44
|
+
*/
|
|
45
|
+
readonly pathOrFile: PathOrFile;
|
|
46
|
+
}
|
|
13
47
|
/**
|
|
14
48
|
* Options for {@link processFrontmatter}.
|
|
15
49
|
*/
|
|
16
50
|
export type ProcessFrontmatterOptions = ProcessOptions;
|
|
51
|
+
/**
|
|
52
|
+
* Parameters for {@link processFrontmatter}.
|
|
53
|
+
*
|
|
54
|
+
* @typeParam CustomFrontmatter - The type of custom front matter.
|
|
55
|
+
*/
|
|
56
|
+
export interface ProcessFrontmatterParams<CustomFrontmatter = unknown> extends ProcessFrontmatterOptions {
|
|
57
|
+
/**
|
|
58
|
+
* The Obsidian app instance.
|
|
59
|
+
*/
|
|
60
|
+
readonly app: App;
|
|
61
|
+
/**
|
|
62
|
+
* A function that modifies the front matter.
|
|
63
|
+
*
|
|
64
|
+
* @param frontmatter - The front matter to modify.
|
|
65
|
+
* @param abortSignal - The abort signal to listen to.
|
|
66
|
+
* @returns A value that may be `null` to abort the process.
|
|
67
|
+
*/
|
|
68
|
+
frontmatterFn(this: void, frontmatter: CombinedFrontmatter<CustomFrontmatter>, abortSignal: AbortSignal): Promisable<MaybeReturn<null>>;
|
|
69
|
+
/**
|
|
70
|
+
* The path or TFile object representing the note.
|
|
71
|
+
*/
|
|
72
|
+
readonly pathOrFile: PathOrFile;
|
|
73
|
+
}
|
|
17
74
|
/**
|
|
18
75
|
* Adds an alias to the front matter of a given file if it does not already exist.
|
|
19
76
|
*
|
|
20
|
-
* @param
|
|
21
|
-
* @param pathOrFile - The path or TFile object representing the note.
|
|
22
|
-
* @param alias - The alias to add.
|
|
77
|
+
* @param params - The parameters for adding the alias.
|
|
23
78
|
* @returns A {@link Promise} that resolves when the alias has been added.
|
|
24
79
|
*/
|
|
25
|
-
export declare function addAlias(
|
|
80
|
+
export declare function addAlias(params: AddAliasParams): Promise<void>;
|
|
26
81
|
/**
|
|
27
82
|
* Deletes an alias from the front matter of a given file if it exists.
|
|
28
83
|
*
|
|
29
|
-
* @param
|
|
30
|
-
* @param pathOrFile - The path or TFile object representing the note.
|
|
31
|
-
* @param alias - The alias to delete.
|
|
84
|
+
* @param params - The parameters for deleting the alias.
|
|
32
85
|
* @returns A {@link Promise} that resolves when the alias has been deleted.
|
|
33
86
|
*/
|
|
34
|
-
export declare function deleteAlias(
|
|
87
|
+
export declare function deleteAlias(params: DeleteAliasParams): Promise<void>;
|
|
35
88
|
/**
|
|
36
89
|
* Processes the front matter of a given file, allowing modifications via a provided function.
|
|
37
90
|
*
|
|
38
91
|
* @typeParam CustomFrontmatter - The type of custom front matter.
|
|
39
|
-
* @param
|
|
40
|
-
* @param pathOrFile - The path or TFile object representing the note.
|
|
41
|
-
* @param frontmatterFn - A function that modifies the front matter.
|
|
42
|
-
* @param options - Optional. Configuration options for retrying the process. If not provided, default options will be used.
|
|
92
|
+
* @param params - The parameters for processing the front matter.
|
|
43
93
|
* @returns A {@link Promise} that resolves when the front matter has been processed and saved.
|
|
44
94
|
*/
|
|
45
|
-
export declare function processFrontmatter<CustomFrontmatter = unknown>(
|
|
95
|
+
export declare function processFrontmatter<CustomFrontmatter = unknown>(params: ProcessFrontmatterParams<CustomFrontmatter>): Promise<void>;
|