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
package/dist/lib/cjs/string.cjs
CHANGED
|
@@ -165,13 +165,15 @@ const UNESCAPE_MAP = {};
|
|
|
165
165
|
for (const [key, value] of Object.entries(ESCAPE_MAP)) {
|
|
166
166
|
UNESCAPE_MAP[value] = key;
|
|
167
167
|
}
|
|
168
|
-
function ensureEndsWith(
|
|
168
|
+
function ensureEndsWith(params) {
|
|
169
|
+
const { str, suffix } = params;
|
|
169
170
|
return str.endsWith(suffix) ? str : str + suffix;
|
|
170
171
|
}
|
|
171
172
|
function ensureLfEndings(str) {
|
|
172
173
|
return str.replaceAll(/\r\n?/g, "\n");
|
|
173
174
|
}
|
|
174
|
-
function ensureStartsWith(
|
|
175
|
+
function ensureStartsWith(params) {
|
|
176
|
+
const { prefix, str } = params;
|
|
175
177
|
return str.startsWith(prefix) ? str : prefix + str;
|
|
176
178
|
}
|
|
177
179
|
function escape(str) {
|
|
@@ -198,29 +200,51 @@ function getLfNormalizedOffsetToOriginalOffsetMapper(str) {
|
|
|
198
200
|
return lfOffsetToOriginalOffsetMap[lfOffset];
|
|
199
201
|
};
|
|
200
202
|
}
|
|
201
|
-
function hasSingleOccurrence(
|
|
203
|
+
function hasSingleOccurrence(params) {
|
|
204
|
+
const { searchValue, str } = params;
|
|
202
205
|
const firstIndex = str.indexOf(searchValue);
|
|
203
206
|
const lastIndex = str.lastIndexOf(searchValue);
|
|
204
207
|
return firstIndex !== NOT_FOUND_INDEX && firstIndex === lastIndex;
|
|
205
208
|
}
|
|
206
|
-
function indent(
|
|
209
|
+
function indent(params) {
|
|
210
|
+
const { prefix, text } = params;
|
|
207
211
|
return text.split("\n").map((line) => `${prefix}${line}`).join("\n");
|
|
208
212
|
}
|
|
209
|
-
function insertAt(
|
|
210
|
-
|
|
211
|
-
|
|
213
|
+
function insertAt(params) {
|
|
214
|
+
const {
|
|
215
|
+
endIndex,
|
|
216
|
+
startIndex,
|
|
217
|
+
str,
|
|
218
|
+
substring
|
|
219
|
+
} = params;
|
|
220
|
+
const effectiveEndIndex = endIndex ?? startIndex;
|
|
221
|
+
return str.slice(0, startIndex) + substring + str.slice(effectiveEndIndex);
|
|
212
222
|
}
|
|
213
223
|
function makeValidVariableName(str) {
|
|
214
|
-
return replaceAll(
|
|
224
|
+
return replaceAll({
|
|
225
|
+
replacer: "_",
|
|
226
|
+
searchValue: /[^a-zA-Z0-9_]/g,
|
|
227
|
+
str
|
|
228
|
+
});
|
|
215
229
|
}
|
|
216
230
|
function normalize(str) {
|
|
217
|
-
return replaceAll(
|
|
231
|
+
return replaceAll({
|
|
232
|
+
replacer: " ",
|
|
233
|
+
searchValue: /\u00A0|\u202F/g,
|
|
234
|
+
str
|
|
235
|
+
}).normalize("NFC");
|
|
218
236
|
}
|
|
219
237
|
function replace(str, replacementsMap) {
|
|
220
238
|
const regExp = new RegExp(Object.keys(replacementsMap).map((source) => (0, import_reg_exp.escapeRegExp)(source)).join("|"), "g");
|
|
221
|
-
return replaceAll(
|
|
239
|
+
return replaceAll({
|
|
240
|
+
replacer: ({ substring: source }) => (0, import_type_guards.ensureNonNullable)(replacementsMap[source]),
|
|
241
|
+
searchValue: regExp,
|
|
242
|
+
str
|
|
243
|
+
});
|
|
222
244
|
}
|
|
223
|
-
function replaceAll(
|
|
245
|
+
function replaceAll(params) {
|
|
246
|
+
const { replacer, str } = params;
|
|
247
|
+
let { searchValue } = params;
|
|
224
248
|
if (typeof replacer === "undefined") {
|
|
225
249
|
return str;
|
|
226
250
|
}
|
|
@@ -254,16 +278,26 @@ function replaceAll(str, searchValue, replacer) {
|
|
|
254
278
|
return replacer(replaceArgs) ?? replaceArgs.substring;
|
|
255
279
|
});
|
|
256
280
|
}
|
|
257
|
-
async function replaceAllAsync(
|
|
281
|
+
async function replaceAllAsync(params) {
|
|
282
|
+
const { replacer, searchValue, str } = params;
|
|
283
|
+
let { abortSignal } = params;
|
|
258
284
|
abortSignal ??= (0, import_abort_controller.abortSignalNever)();
|
|
259
285
|
abortSignal.throwIfAborted();
|
|
260
286
|
if (typeof replacer === "string") {
|
|
261
|
-
return replaceAll(
|
|
287
|
+
return replaceAll({
|
|
288
|
+
replacer,
|
|
289
|
+
searchValue,
|
|
290
|
+
str
|
|
291
|
+
});
|
|
262
292
|
}
|
|
263
293
|
const replacementAsyncFns = [];
|
|
264
|
-
replaceAll(
|
|
265
|
-
|
|
266
|
-
|
|
294
|
+
replaceAll({
|
|
295
|
+
replacer: (args) => {
|
|
296
|
+
replacementAsyncFns.push(() => (0, import_value_provider.resolveValue)(replacer, { abortSignal, ...args }));
|
|
297
|
+
return "";
|
|
298
|
+
},
|
|
299
|
+
searchValue,
|
|
300
|
+
str
|
|
267
301
|
});
|
|
268
302
|
const replacements = [];
|
|
269
303
|
for (const asyncFn of replacementAsyncFns) {
|
|
@@ -271,9 +305,14 @@ async function replaceAllAsync(str, searchValue, replacer, abortSignal) {
|
|
|
271
305
|
replacements.push(await asyncFn());
|
|
272
306
|
}
|
|
273
307
|
abortSignal.throwIfAborted();
|
|
274
|
-
return replaceAll(
|
|
308
|
+
return replaceAll({
|
|
309
|
+
replacer: (args) => replacements.shift() ?? args.substring,
|
|
310
|
+
searchValue,
|
|
311
|
+
str
|
|
312
|
+
});
|
|
275
313
|
}
|
|
276
|
-
function trimEnd(
|
|
314
|
+
function trimEnd(params) {
|
|
315
|
+
const { shouldValidate, str, suffix } = params;
|
|
277
316
|
if (str.endsWith(suffix)) {
|
|
278
317
|
return str.slice(0, -suffix.length);
|
|
279
318
|
}
|
|
@@ -282,11 +321,12 @@ function trimEnd(str, suffix, shouldValidate) {
|
|
|
282
321
|
}
|
|
283
322
|
return str;
|
|
284
323
|
}
|
|
285
|
-
function trimStart(
|
|
324
|
+
function trimStart(params) {
|
|
325
|
+
const { prefix, shouldValidate, str } = params;
|
|
286
326
|
if (str.startsWith(prefix)) {
|
|
287
327
|
return str.slice(prefix.length);
|
|
288
328
|
}
|
|
289
|
-
if (
|
|
329
|
+
if (shouldValidate) {
|
|
290
330
|
throw new Error(`String ${str} does not start with prefix ${prefix}`);
|
|
291
331
|
}
|
|
292
332
|
return str;
|
|
@@ -294,7 +334,8 @@ function trimStart(str, prefix, validate) {
|
|
|
294
334
|
function unescape(str) {
|
|
295
335
|
return replace(str, UNESCAPE_MAP);
|
|
296
336
|
}
|
|
297
|
-
function unindent(
|
|
337
|
+
function unindent(params) {
|
|
338
|
+
const { prefix, shouldThrowIfNotIndented = false, text } = params;
|
|
298
339
|
return text.split("\n").map((line) => {
|
|
299
340
|
if (line.startsWith(prefix)) {
|
|
300
341
|
return line.slice(prefix.length);
|
|
@@ -325,4 +366,4 @@ function unindent(text, prefix, shouldThrowIfNotIndented = false) {
|
|
|
325
366
|
unescape,
|
|
326
367
|
unindent
|
|
327
368
|
});
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N0cmluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBzdHJpbmcgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBhYm9ydFNpZ25hbE5ldmVyIH0gZnJvbSAnLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGVzY2FwZVJlZ0V4cCB9IGZyb20gJy4vcmVnLWV4cC50cyc7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIGVuc3VyZU5vbk51bGxhYmxlXG59IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi92YWx1ZS1wcm92aWRlci50cyc7XG5cbi8qKlxuICogQSBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncywgb3IgYSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoLlxuICpcbiAqIEB0eXBlUGFyYW0gQ2FwdHVyZWRHcm91cEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGNhcHR1cmVkIGdyb3VwIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgQXN5bmNSZXBsYWNlcjxDYXB0dXJlZEdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPiA9IFZhbHVlUHJvdmlkZXI8U3RyaW5nUmVwbGFjZW1lbnQsIFJlcGxhY2VBcmdzPENhcHR1cmVkR3JvdXBBcmdzPj47XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBmb3IgdGhlIGByZXBsYWNlQWxsYC9gcmVwbGFjZUFsbEFzeW5jYCBmdW5jdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxhY2VBcmdzPENhcHR1cmVkR3JvdXBBcmdzIGV4dGVuZHMgc3RyaW5nW10+IHtcbiAgLyoqXG4gICAqIENhcHR1cmVkIGdyb3VwIGFyZ3VtZW50cy5cbiAgICovXG4gIGNhcHR1cmVkR3JvdXBBcmdzOiBDYXB0dXJlZEdyb3VwQXJncztcblxuICAvKipcbiAgICogR3JvdXBzIG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIGdyb3VwczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNlcyBvZiB0aGUgZ3JvdXBzIHRoYXQgd2VyZSBub3QgZm91bmQgaW4gdGhlIG1hdGNoLlxuICAgKi9cbiAgbWlzc2luZ0dyb3VwSW5kaWNlczogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIEFuIG9mZnNldCBvZiB0aGUgbWF0Y2guXG4gICAqL1xuICBvZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBzb3VyY2Ugb2YgdGhlIG1hdGNoLlxuICAgKi9cbiAgc291cmNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3Vic3RyaW5nIG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIHN1YnN0cmluZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncywgb3IgYSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoLlxuICpcbiAqIEB0eXBlUGFyYW0gQ2FwdHVyZWRHcm91cEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGNhcHR1cmVkIGdyb3VwIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgUmVwbGFjZXI8Q2FwdHVyZWRHcm91cEFyZ3MgZXh0ZW5kcyBzdHJpbmdbXT4gPSAoKGFyZ3M6IFJlcGxhY2VBcmdzPENhcHR1cmVkR3JvdXBBcmdzPikgPT4gU3RyaW5nUmVwbGFjZW1lbnQpIHwgU3RyaW5nUmVwbGFjZW1lbnQ7XG5cbnR5cGUgU3RyaW5nUmVwbGFjZW1lbnQgPSBNYXliZVJldHVybjxzdHJpbmc+O1xuXG4vKipcbiAqIE1hcHBpbmcgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHRoZWlyIGVzY2FwZWQgY291bnRlcnBhcnRzLlxuICovXG5jb25zdCBFU0NBUEVfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnXFxuJzogJ1xcXFxuJyxcbiAgJ1xccic6ICdcXFxccicsXG4gICdcXHQnOiAnXFxcXHQnLFxuICAnXFxiJzogJ1xcXFxiJyxcbiAgJ1xcZic6ICdcXFxcZicsXG4gICdcXCcnOiAnXFxcXFxcJycsXG4gICdcIic6ICdcXFxcXCInLFxuICAnXFxcXCc6ICdcXFxcXFxcXCdcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IENSID0gJ1xccic7XG5jb25zdCBMRiA9ICdcXG4nO1xuY29uc3QgTk9UX0ZPVU5EX0lOREVYID0gLTE7XG5cbi8qKlxuICogTWFwcGluZyBvZiBlc2NhcGVkIHNwZWNpYWwgY2hhcmFjdGVycyB0byB0aGVpciB1bmVzY2FwZWQgY291bnRlcnBhcnRzLlxuICovXG5jb25zdCBVTkVTQ0FQRV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbmZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKEVTQ0FQRV9NQVApKSB7XG4gIFVORVNDQVBFX01BUFt2YWx1ZV0gPSBrZXk7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkIHN1ZmZpeCwgYWRkaW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBjaGVjay5cbiAqIEBwYXJhbSBzdWZmaXggLSBUaGUgc3VmZml4IHRvIGVuc3VyZS5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgdGhhdCBlbmRzIHdpdGggdGhlIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUVuZHNXaXRoKHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIuZW5kc1dpdGgoc3VmZml4KSA/IHN0ciA6IHN0ciArIHN1ZmZpeDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSBzdHJpbmcgaGFzIGBMRmAgbGluZSBlbmRpbmdzLlxuICpcbiAqIEl0IHJlcGxhY2VzIGBDUkxGYCBsaW5lIGVuZGluZ3Mgd2l0aCBgTEZgLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIGBMRmAgbGluZSBlbmRpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTGZFbmRpbmdzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlQWxsKC9cXHJcXG4/L2csICdcXG4nKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIGFkZGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gKiBAcGFyYW0gcHJlZml4IC0gVGhlIHByZWZpeCB0byBlbnN1cmUuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggdGhlIHByZWZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVN0YXJ0c1dpdGgoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5zdGFydHNXaXRoKHByZWZpeCkgPyBzdHIgOiBwcmVmaXggKyBzdHI7XG59XG5cbi8qKlxuICogRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2Uoc3RyLCBFU0NBUEVfTUFQKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXBzIExGLW5vcm1hbGl6ZWQgb2Zmc2V0cyB0byBvcmlnaW5hbCBvZmZzZXRzLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGdldCB0aGUgTEYtbm9ybWFsaXplZCBpbmRpY2VzIGZyb20uXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgbWFwcyBMRi1ub3JtYWxpemVkIG9mZnNldHMgdG8gb3JpZ2luYWwgb2Zmc2V0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExmTm9ybWFsaXplZE9mZnNldFRvT3JpZ2luYWxPZmZzZXRNYXBwZXIoc3RyOiBzdHJpbmcpOiAobGZPZmZzZXQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgY29uc3QgbGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0cltpXSA9PT0gQ1IgJiYgc3RyW2kgKyAxXSA9PT0gTEYpIHtcbiAgICAgIGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcC5wdXNoKGkgKyAxKTtcbiAgICAgIGkrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwLnB1c2goaSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChsZk9mZnNldDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICBpZiAobGZPZmZzZXQgPCAwKSB7XG4gICAgICByZXR1cm4gbGZPZmZzZXQ7XG4gICAgfVxuICAgIGlmIChsZk9mZnNldCA+PSBsZk9mZnNldFRvT3JpZ2luYWxPZmZzZXRNYXAubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbGZPZmZzZXQgLSBsZk9mZnNldFRvT3JpZ2luYWxPZmZzZXRNYXAubGVuZ3RoICsgc3RyLmxlbmd0aDtcbiAgICB9XG5cbiAgICBhc3NlcnQobGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwW2xmT2Zmc2V0XSAhPT0gdW5kZWZpbmVkLCAnQ291bGQgbm90IG1hcCBvZmZzZXQnKTtcbiAgICByZXR1cm4gbGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwW2xmT2Zmc2V0XTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzdHJpbmcgaGFzIGEgc2luZ2xlIG9jY3VycmVuY2Ugb2YgYSBzZWFyY2ggdmFsdWUuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gKiBAcGFyYW0gc2VhcmNoVmFsdWUgLSBUaGUgc2VhcmNoIHZhbHVlIHRvIGNoZWNrIGZvci5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RyaW5nIGhhcyBhIHNpbmdsZSBvY2N1cnJlbmNlIG9mIHRoZSBzZWFyY2ggdmFsdWUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzU2luZ2xlT2NjdXJyZW5jZShzdHI6IHN0cmluZywgc2VhcmNoVmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBmaXJzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoVmFsdWUpO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIubGFzdEluZGV4T2Yoc2VhcmNoVmFsdWUpO1xuICByZXR1cm4gZmlyc3RJbmRleCAhPT0gTk9UX0ZPVU5EX0lOREVYICYmIGZpcnN0SW5kZXggPT09IGxhc3RJbmRleDtcbn1cblxuLyoqXG4gKiBJbmRlbnRzIGEgc3RyaW5nIGJ5IGFkZGluZyBhIHByZWZpeCB0byBlYWNoIGxpbmUuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgc3RyaW5nIHRvIGluZGVudC5cbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgcHJlZml4IHRvIGFkZCB0byBlYWNoIGxpbmUuXG4gKiBAcmV0dXJucyBUaGUgaW5kZW50ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZW50KHRleHQ6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBgJHtwcmVmaXh9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEluc2VydHMgYSBzdWJzdHJpbmcgYXQgYSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gaW5zZXJ0IHRoZSBzdWJzdHJpbmcgaW50by5cbiAqIEBwYXJhbSBzdWJzdHJpbmcgLSBUaGUgc3Vic3RyaW5nIHRvIGluc2VydC5cbiAqIEBwYXJhbSBzdGFydEluZGV4IC0gVGhlIGluZGV4IHRvIGluc2VydCB0aGUgc3Vic3RyaW5nIGF0LlxuICogQHBhcmFtIGVuZEluZGV4IC0gVGhlIGluZGV4IHRvIGVuZCB0aGUgc3Vic3RyaW5nIGF0LlxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIHN0cmluZyB3aXRoIHRoZSBzdWJzdHJpbmcgaW5zZXJ0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRBdChzdHI6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg/OiBudW1iZXIpOiBzdHJpbmcge1xuICBlbmRJbmRleCA/Pz0gc3RhcnRJbmRleDtcbiAgcmV0dXJuIHN0ci5zbGljZSgwLCBzdGFydEluZGV4KSArIHN1YnN0cmluZyArIHN0ci5zbGljZShlbmRJbmRleCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgaW50byBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUgbmFtZSBieSByZXBsYWNpbmcgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGggdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSB2YWxpZCB2YXJpYWJsZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVZhbGlkVmFyaWFibGVOYW1lKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoc3RyLCAvW15hLXpBLVowLTlfXS9nLCAnXycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzdHJpbmcgYnkgY29udmVydGluZyBpdCB0byB0aGUgTkZDIGZvcm0gYW5kIHJlcGxhY2luZyBub24tYnJlYWtpbmcgc3BhY2VzIHdpdGggcmVndWxhciBzcGFjZXMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoc3RyLCAvXFx1MDBBMHxcXHUyMDJGL2csICcgJykubm9ybWFsaXplKCdORkMnKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBvY2N1cnJlbmNlcyBvZiBzdHJpbmdzIGluIGEgZ2l2ZW4gc3RyaW5nIGJhc2VkIG9uIGEgcmVwbGFjZW1lbnRzIG1hcC5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBvbi5cbiAqIEBwYXJhbSByZXBsYWNlbWVudHNNYXAgLSBBbiBvYmplY3QgbWFwcGluZyBzdHJpbmdzIHRvIHRoZWlyIHJlcGxhY2VtZW50IHZhbHVlcy5cbiAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBzdHJpbmcgd2l0aCByZXBsYWNlbWVudHMgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2Uoc3RyOiBzdHJpbmcsIHJlcGxhY2VtZW50c01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzTWFwKS5tYXAoKHNvdXJjZSkgPT4gZXNjYXBlUmVnRXhwKHNvdXJjZSkpLmpvaW4oJ3wnKSwgJ2cnKTtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoc3RyLCByZWdFeHAsICh7IHN1YnN0cmluZzogc291cmNlIH0pID0+IGVuc3VyZU5vbk51bGxhYmxlKHJlcGxhY2VtZW50c01hcFtzb3VyY2VdKSk7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIGEgc2VhcmNoIHN0cmluZyBvciBwYXR0ZXJuIHdpdGggdGhlIHJlc3VsdHMgb2YgYW4gcmVwbGFjZXIgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgaW4gd2hpY2ggdG8gcGVyZm9ybSByZXBsYWNlbWVudHMuXG4gKiBAcGFyYW0gc2VhcmNoVmFsdWUgLSBUaGUgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQSByZXBsYWNlciBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHdpdGggYWxsIHJlcGxhY2VtZW50cyBtYWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUFsbDxDYXB0dXJlZEdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPihcbiAgc3RyOiBzdHJpbmcsXG4gIHNlYXJjaFZhbHVlOiBSZWdFeHAgfCBzdHJpbmcsXG4gIHJlcGxhY2VyOiBSZXBsYWNlcjxDYXB0dXJlZEdyb3VwQXJncz5cbik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmIChzZWFyY2hWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhc2VhcmNoVmFsdWUuZ2xvYmFsKSB7XG4gICAgc2VhcmNoVmFsdWUgPSBuZXcgUmVnRXhwKHNlYXJjaFZhbHVlLnNvdXJjZSwgYCR7c2VhcmNoVmFsdWUuZmxhZ3N9Z2ApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoc2VhcmNoVmFsdWUsIHJlcGxhY2VyKTtcbiAgfVxuXG4gIHJldHVybiBzdHIucmVwbGFjZUFsbChzZWFyY2hWYWx1ZSwgKHN1YnN0cmluZzogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCBTT1VSQ0VfSU5ERVhfT0ZGU0VUX0ZPUl9HUk9VUF9BUkcgPSAyO1xuICAgIGNvbnN0IGhhc0dyb3Vwc0FyZyA9IHR5cGVvZiBhcmdzLmF0KC0xKSA9PT0gJ29iamVjdCc7XG4gICAgY29uc3Qgc291cmNlSW5kZXggPSBoYXNHcm91cHNBcmcgPyBhcmdzLmxlbmd0aCAtIFNPVVJDRV9JTkRFWF9PRkZTRVRfRk9SX0dST1VQX0FSRyA6IGFyZ3MubGVuZ3RoIC0gMTtcblxuICAgIGNvbnN0IHJlcGxhY2VBcmdzOiBSZXBsYWNlQXJnczxDYXB0dXJlZEdyb3VwQXJncz4gPSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQ2FuJ3QgYXZvaWQuXG4gICAgICBjYXB0dXJlZEdyb3VwQXJnczogW10gYXMgdW5rbm93bltdIGFzIENhcHR1cmVkR3JvdXBBcmdzLFxuICAgICAgZ3JvdXBzOiBoYXNHcm91cHNBcmcgPyBhcmdzLmF0KC0xKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IDogdW5kZWZpbmVkLFxuICAgICAgbWlzc2luZ0dyb3VwSW5kaWNlczogW10sXG4gICAgICBvZmZzZXQ6IGFyZ3MuYXQoc291cmNlSW5kZXggLSAxKSBhcyBudW1iZXIsXG4gICAgICBzb3VyY2U6IGFyZ3MuYXQoc291cmNlSW5kZXgpIGFzIHN0cmluZyxcbiAgICAgIHN1YnN0cmluZ1xuICAgIH07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZUluZGV4IC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gYXJnc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVwbGFjZUFyZ3MuY2FwdHVyZWRHcm91cEFyZ3MucHVzaChpdGVtKTtcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIHY4IHRyYWNrcyB0aGUgaW1wbGljaXQgZWxzZSBicmFuY2ggdGhhdCBuZXZlciBoYXBwZW5zLiAqL1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmVwbGFjZUFyZ3MubWlzc2luZ0dyb3VwSW5kaWNlcy5wdXNoKGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAocmVwbGFjZXIocmVwbGFjZUFyZ3MpIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gcmVwbGFjZUFyZ3Muc3Vic3RyaW5nO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSByZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2YgYSBzZWFyY2ggc3RyaW5nIG9yIHBhdHRlcm4gd2l0aCB0aGUgcmVzdWx0cyBvZiBhbiBhc3luY2hyb25vdXMgcmVwbGFjZXIgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBSZXBsYWNlR3JvdXBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyBpbiB3aGljaCB0byBwZXJmb3JtIHJlcGxhY2VtZW50cy5cbiAqIEBwYXJhbSBzZWFyY2hWYWx1ZSAtIFRoZSBzdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0gcmVwbGFjZXIgLSBBIHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdHJpbmcgd2l0aCBhbGwgcmVwbGFjZW1lbnRzIG1hZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQWxsQXN5bmM8UmVwbGFjZUdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPihcbiAgc3RyOiBzdHJpbmcsXG4gIHNlYXJjaFZhbHVlOiBSZWdFeHAgfCBzdHJpbmcsXG4gIHJlcGxhY2VyOiBBc3luY1JlcGxhY2VyPFJlcGxhY2VHcm91cEFyZ3M+LFxuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBhYm9ydFNpZ25hbCA/Pz0gYWJvcnRTaWduYWxOZXZlcigpO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiByZXBsYWNlQWxsKHN0ciwgc2VhcmNoVmFsdWUsIHJlcGxhY2VyKTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxhY2VtZW50QXN5bmNGbnM6ICgoKSA9PiBQcm9taXNlPFN0cmluZ1JlcGxhY2VtZW50PilbXSA9IFtdO1xuXG4gIHJlcGxhY2VBbGw8UmVwbGFjZUdyb3VwQXJncz4oc3RyLCBzZWFyY2hWYWx1ZSwgKGFyZ3MpID0+IHtcbiAgICByZXBsYWNlbWVudEFzeW5jRm5zLnB1c2goKCkgPT4gcmVzb2x2ZVZhbHVlKHJlcGxhY2VyLCB7IGFib3J0U2lnbmFsLCAuLi5hcmdzIH0pKTtcbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuXG4gIGNvbnN0IHJlcGxhY2VtZW50czogU3RyaW5nUmVwbGFjZW1lbnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYXN5bmNGbiBvZiByZXBsYWNlbWVudEFzeW5jRm5zKSB7XG4gICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICByZXBsYWNlbWVudHMucHVzaChhd2FpdCBhc3luY0ZuKCkpO1xuICB9XG5cbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoc3RyLCBzZWFyY2hWYWx1ZSwgKGFyZ3MpOiBzdHJpbmcgPT4gcmVwbGFjZW1lbnRzLnNoaWZ0KCkgPz8gYXJncy5zdWJzdHJpbmcpO1xufVxuXG4vKipcbiAqIFRyaW1zIHRoZSBzcGVjaWZpZWQgc3VmZml4IGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB0cmltLlxuICogQHBhcmFtIHN1ZmZpeCAtIFRoZSBzdWZmaXggdG8gcmVtb3ZlIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHNob3VsZFZhbGlkYXRlIC0gSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBlbmQgd2l0aCB0aGUgc3VmZml4LlxuICogQHJldHVybnMgVGhlIHRyaW1tZWQgc3RyaW5nLlxuICogQHRocm93cyBJZiBgdmFsaWRhdGVgIGlzIGB0cnVlYCBhbmQgdGhlIHN0cmluZyBkb2VzIG5vdCBlbmQgd2l0aCB0aGUgc3VmZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbUVuZChzdHI6IHN0cmluZywgc3VmZml4OiBzdHJpbmcsIHNob3VsZFZhbGlkYXRlPzogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmIChzdHIuZW5kc1dpdGgoc3VmZml4KSkge1xuICAgIHJldHVybiBzdHIuc2xpY2UoMCwgLXN1ZmZpeC5sZW5ndGgpO1xuICB9XG5cbiAgaWYgKHNob3VsZFZhbGlkYXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgJHtzdHJ9IGRvZXMgbm90IGVuZCB3aXRoIHN1ZmZpeCAke3N1ZmZpeH1gKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogVHJpbXMgdGhlIHNwZWNpZmllZCBwcmVmaXggZnJvbSB0aGUgc3RhcnQgb2YgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgcHJlZml4IHRvIHJlbW92ZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHZhbGlkYXRlIC0gSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gKiBAcmV0dXJucyBUaGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAdGhyb3dzIElmIGB2YWxpZGF0ZWAgaXMgYHRydWVgIGFuZCB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHByZWZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1TdGFydChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHZhbGlkYXRlPzogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmIChzdHIuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgcmV0dXJuIHN0ci5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgfVxuXG4gIGlmICh2YWxpZGF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7c3RyfSBkb2VzIG5vdCBzdGFydCB3aXRoIHByZWZpeCAke3ByZWZpeH1gKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogVW5lc2NhcGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBlc2NhcGUgc2VxdWVuY2VzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHVuZXNjYXBlLlxuICogQHJldHVybnMgVGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlKHN0ciwgVU5FU0NBUEVfTUFQKTtcbn1cblxuLyoqXG4gKiBVbmluZGVudHMgYSBzdHJpbmcgYnkgcmVtb3ZpbmcgYSBwcmVmaXggZnJvbSBlYWNoIGxpbmUuXG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgc3RyaW5nIHRvIHVuaW5kZW50LlxuICogQHBhcmFtIHByZWZpeCAtIFRoZSBwcmVmaXggdG8gcmVtb3ZlIGZyb20gZWFjaCBsaW5lLlxuICogQHBhcmFtIHNob3VsZFRocm93SWZOb3RJbmRlbnRlZCAtIElmIGB0cnVlYCwgdGhyb3dzIGFuIGVycm9yIGlmIGEgbGluZSBpcyBub3QgaW5kZW50ZWQgd2l0aCB0aGUgcHJlZml4LlxuICogQHJldHVybnMgVGhlIHVuaW5kZW50ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pbmRlbnQodGV4dDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZywgc2hvdWxkVGhyb3dJZk5vdEluZGVudGVkID0gZmFsc2UpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiB7XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICByZXR1cm4gbGluZS5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKHNob3VsZFRocm93SWZOb3RJbmRlbnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMaW5lIFwiJHtsaW5lfVwiIGlzIG5vdCBpbmRlbnRlZCB3aXRoIFwiJHtwcmVmaXh9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmU7XG4gIH0pLmpvaW4oJ1xcbicpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSw4QkFBaUM7QUFDakMscUJBQTZCO0FBQzdCLHlCQUdPO0FBQ1AsNEJBQTZCO0FBMEQ3QixNQUFNLGFBQXFDO0FBQUEsRUFDekMsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sS0FBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sS0FBTTtBQUFBLEVBQ04sS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUNSO0FBRUEsTUFBTSxLQUFLO0FBQ1gsTUFBTSxLQUFLO0FBQ1gsTUFBTSxrQkFBa0I7QUFLeEIsTUFBTSxlQUF1QyxDQUFDO0FBQzlDLFdBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxPQUFPLFFBQVEsVUFBVSxHQUFHO0FBQ3JELGVBQWEsS0FBSyxJQUFJO0FBQ3hCO0FBU08sU0FBUyxlQUFlLEtBQWEsUUFBd0I7QUFDbEUsU0FBTyxJQUFJLFNBQVMsTUFBTSxJQUFJLE1BQU0sTUFBTTtBQUM1QztBQVVPLFNBQVMsZ0JBQWdCLEtBQXFCO0FBQ25ELFNBQU8sSUFBSSxXQUFXLFVBQVUsSUFBSTtBQUN0QztBQVNPLFNBQVMsaUJBQWlCLEtBQWEsUUFBd0I7QUFDcEUsU0FBTyxJQUFJLFdB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
|
|
369
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N0cmluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBzdHJpbmcgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBhYm9ydFNpZ25hbE5ldmVyIH0gZnJvbSAnLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGVzY2FwZVJlZ0V4cCB9IGZyb20gJy4vcmVnLWV4cC50cyc7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIGVuc3VyZU5vbk51bGxhYmxlXG59IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi92YWx1ZS1wcm92aWRlci50cyc7XG5cbi8qKlxuICogQSBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncywgb3IgYSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoLlxuICpcbiAqIEB0eXBlUGFyYW0gQ2FwdHVyZWRHcm91cEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGNhcHR1cmVkIGdyb3VwIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgQXN5bmNSZXBsYWNlcjxDYXB0dXJlZEdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPiA9IFZhbHVlUHJvdmlkZXI8U3RyaW5nUmVwbGFjZW1lbnQsIFJlcGxhY2VBcmdzPENhcHR1cmVkR3JvdXBBcmdzPj47XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBmb3IgdGhlIGByZXBsYWNlQWxsYC9gcmVwbGFjZUFsbEFzeW5jYCBmdW5jdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxhY2VBcmdzPENhcHR1cmVkR3JvdXBBcmdzIGV4dGVuZHMgc3RyaW5nW10+IHtcbiAgLyoqXG4gICAqIENhcHR1cmVkIGdyb3VwIGFyZ3VtZW50cy5cbiAgICovXG4gIGNhcHR1cmVkR3JvdXBBcmdzOiBDYXB0dXJlZEdyb3VwQXJncztcblxuICAvKipcbiAgICogR3JvdXBzIG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIGdyb3VwczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNlcyBvZiB0aGUgZ3JvdXBzIHRoYXQgd2VyZSBub3QgZm91bmQgaW4gdGhlIG1hdGNoLlxuICAgKi9cbiAgbWlzc2luZ0dyb3VwSW5kaWNlczogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIEFuIG9mZnNldCBvZiB0aGUgbWF0Y2guXG4gICAqL1xuICBvZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBzb3VyY2Ugb2YgdGhlIG1hdGNoLlxuICAgKi9cbiAgc291cmNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3Vic3RyaW5nIG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIHN1YnN0cmluZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncywgb3IgYSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoLlxuICpcbiAqIEB0eXBlUGFyYW0gQ2FwdHVyZWRHcm91cEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGNhcHR1cmVkIGdyb3VwIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgUmVwbGFjZXI8Q2FwdHVyZWRHcm91cEFyZ3MgZXh0ZW5kcyBzdHJpbmdbXT4gPSAoKGFyZ3M6IFJlcGxhY2VBcmdzPENhcHR1cmVkR3JvdXBBcmdzPikgPT4gU3RyaW5nUmVwbGFjZW1lbnQpIHwgU3RyaW5nUmVwbGFjZW1lbnQ7XG5cbnR5cGUgU3RyaW5nUmVwbGFjZW1lbnQgPSBNYXliZVJldHVybjxzdHJpbmc+O1xuXG4vKipcbiAqIE1hcHBpbmcgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHRoZWlyIGVzY2FwZWQgY291bnRlcnBhcnRzLlxuICovXG5jb25zdCBFU0NBUEVfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnXFxuJzogJ1xcXFxuJyxcbiAgJ1xccic6ICdcXFxccicsXG4gICdcXHQnOiAnXFxcXHQnLFxuICAnXFxiJzogJ1xcXFxiJyxcbiAgJ1xcZic6ICdcXFxcZicsXG4gICdcXCcnOiAnXFxcXFxcJycsXG4gICdcIic6ICdcXFxcXCInLFxuICAnXFxcXCc6ICdcXFxcXFxcXCdcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IENSID0gJ1xccic7XG5jb25zdCBMRiA9ICdcXG4nO1xuY29uc3QgTk9UX0ZPVU5EX0lOREVYID0gLTE7XG5cbi8qKlxuICogTWFwcGluZyBvZiBlc2NhcGVkIHNwZWNpYWwgY2hhcmFjdGVycyB0byB0aGVpciB1bmVzY2FwZWQgY291bnRlcnBhcnRzLlxuICovXG5jb25zdCBVTkVTQ0FQRV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbmZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKEVTQ0FQRV9NQVApKSB7XG4gIFVORVNDQVBFX01BUFt2YWx1ZV0gPSBrZXk7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuc3VyZUVuZHNXaXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnN1cmVFbmRzV2l0aFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIGNoZWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWZmaXggdG8gZW5zdXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VmZml4OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVuc3VyZVN0YXJ0c1dpdGh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuc3VyZVN0YXJ0c1dpdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHByZWZpeCB0byBlbnN1cmUuXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmluZyB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBoYXNTaW5nbGVPY2N1cnJlbmNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYXNTaW5nbGVPY2N1cnJlbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzZWFyY2ggdmFsdWUgdG8gY2hlY2sgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoVmFsdWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmluZyB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbmRlbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRvIGFkZCB0byBlYWNoIGxpbmUuXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmluZyB0byBpbmRlbnQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluc2VydEF0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnNlcnRBdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggdG8gZW5kIHRoZSBzdWJzdHJpbmcgYXQuXG4gICAqL1xuICByZWFkb25seSBlbmRJbmRleD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGluZGV4IHRvIGluc2VydCB0aGUgc3Vic3RyaW5nIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIGluc2VydCB0aGUgc3Vic3RyaW5nIGludG8uXG4gICAqL1xuICByZWFkb25seSBzdHI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1YnN0cmluZyB0byBpbnNlcnQuXG4gICAqL1xuICByZWFkb25seSBzdWJzdHJpbmc6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVwbGFjZUFsbEFzeW5jfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlcGxhY2VHcm91cEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGNhcHR1cmVkIGdyb3VwIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsYWNlQWxsQXN5bmNQYXJhbXM8UmVwbGFjZUdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPiB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBBIHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gICAqL1xuICByZWFkb25seSByZXBsYWNlcjogQXN5bmNSZXBsYWNlcjxSZXBsYWNlR3JvdXBBcmdzPjtcblxuICAvKipcbiAgICogVGhlIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHNlYXJjaFZhbHVlOiBSZWdFeHAgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgaW4gd2hpY2ggdG8gcGVyZm9ybSByZXBsYWNlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBzdHI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVwbGFjZUFsbH0uXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxhY2VBbGxQYXJhbXM8Q2FwdHVyZWRHcm91cEFyZ3MgZXh0ZW5kcyBzdHJpbmdbXT4ge1xuICAvKipcbiAgICogQSByZXBsYWNlciBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gICAqL1xuICByZWFkb25seSByZXBsYWNlcjogUmVwbGFjZXI8Q2FwdHVyZWRHcm91cEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoVmFsdWU6IFJlZ0V4cCB8IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmluZyBpbiB3aGljaCB0byBwZXJmb3JtIHJlcGxhY2VtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0cmltRW5kfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmltRW5kUGFyYW1zIHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QgZW5kIHdpdGggdGhlIHN1ZmZpeC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFZhbGlkYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHN0cmluZyB0byB0cmltLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWZmaXggdG8gcmVtb3ZlIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VmZml4OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyaW1TdGFydH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJpbVN0YXJ0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdG8gcmVtb3ZlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gICAqL1xuICByZWFkb25seSBzaG91bGRWYWxpZGF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICovXG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB1bmluZGVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pbmRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHByZWZpeCB0byByZW1vdmUgZnJvbSBlYWNoIGxpbmUuXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgYSBsaW5lIGlzIG5vdCBpbmRlbnRlZCB3aXRoIHRoZSBwcmVmaXguXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd0lmTm90SW5kZW50ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIHVuaW5kZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCBzdWZmaXgsIGFkZGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB0aGF0IGVuZHMgd2l0aCB0aGUgc3VmZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRW5kc1dpdGgocGFyYW1zOiBFbnN1cmVFbmRzV2l0aFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgc3RyLCBzdWZmaXggfSA9IHBhcmFtcztcbiAgcmV0dXJuIHN0ci5lbmRzV2l0aChzdWZmaXgpID8gc3RyIDogc3RyICsgc3VmZml4O1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIHN0cmluZyBoYXMgYExGYCBsaW5lIGVuZGluZ3MuXG4gKlxuICogSXQgcmVwbGFjZXMgYENSTEZgIGxpbmUgZW5kaW5ncyB3aXRoIGBMRmAuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHdpdGggYExGYCBsaW5lIGVuZGluZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVMZkVuZGluZ3Moc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoL1xcclxcbj8vZywgJ1xcbicpO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeCwgYWRkaW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggdGhlIHByZWZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVN0YXJ0c1dpdGgocGFyYW1zOiBFbnN1cmVTdGFydHNXaXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBwcmVmaXgsIHN0ciB9ID0gcGFyYW1zO1xuICByZXR1cm4gc3RyLnN0YXJ0c1dpdGgocHJlZml4KSA/IHN0ciA6IHByZWZpeCArIHN0cjtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZShzdHIsIEVTQ0FQRV9NQVApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1hcHMgTEYtbm9ybWFsaXplZCBvZmZzZXRzIHRvIG9yaWdpbmFsIG9mZnNldHMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gZ2V0IHRoZSBMRi1ub3JtYWxpemVkIGluZGljZXMgZnJvbS5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBtYXBzIExGLW5vcm1hbGl6ZWQgb2Zmc2V0cyB0byBvcmlnaW5hbCBvZmZzZXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGZOb3JtYWxpemVkT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcHBlcihzdHI6IHN0cmluZyk6IChsZk9mZnNldDogbnVtYmVyKSA9PiBudW1iZXIge1xuICBjb25zdCBsZk9mZnNldFRvT3JpZ2luYWxPZmZzZXRNYXA6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RyW2ldID09PSBDUiAmJiBzdHJbaSArIDFdID09PSBMRikge1xuICAgICAgbGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwLnB1c2goaSArIDEpO1xuICAgICAgaSsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZk9mZnNldFRvT3JpZ2luYWxPZmZzZXRNYXAucHVzaChpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGxmT2Zmc2V0OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGlmIChsZk9mZnNldCA8IDApIHtcbiAgICAgIHJldHVybiBsZk9mZnNldDtcbiAgICB9XG4gICAgaWYgKGxmT2Zmc2V0ID49IGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBsZk9mZnNldCAtIGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcC5sZW5ndGggKyBzdHIubGVuZ3RoO1xuICAgIH1cblxuICAgIGFzc2VydChsZk9mZnNldFRvT3JpZ2luYWxPZmZzZXRNYXBbbGZPZmZzZXRdICE9PSB1bmRlZmluZWQsICdDb3VsZCBub3QgbWFwIG9mZnNldCcpO1xuICAgIHJldHVybiBsZk9mZnNldFRvT3JpZ2luYWxPZmZzZXRNYXBbbGZPZmZzZXRdO1xuICB9O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHN0cmluZyBoYXMgYSBzaW5nbGUgb2NjdXJyZW5jZSBvZiBhIHNlYXJjaCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0cmluZyBoYXMgYSBzaW5nbGUgb2NjdXJyZW5jZSBvZiB0aGUgc2VhcmNoIHZhbHVlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1NpbmdsZU9jY3VycmVuY2UocGFyYW1zOiBIYXNTaW5nbGVPY2N1cnJlbmNlUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgc2VhcmNoVmFsdWUsIHN0ciB9ID0gcGFyYW1zO1xuICBjb25zdCBmaXJzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoVmFsdWUpO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIubGFzdEluZGV4T2Yoc2VhcmNoVmFsdWUpO1xuICByZXR1cm4gZmlyc3RJbmRleCAhPT0gTk9UX0ZPVU5EX0lOREVYICYmIGZpcnN0SW5kZXggPT09IGxhc3RJbmRleDtcbn1cblxuLyoqXG4gKiBJbmRlbnRzIGEgc3RyaW5nIGJ5IGFkZGluZyBhIHByZWZpeCB0byBlYWNoIGxpbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIGluZGVudGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGVudChwYXJhbXM6IEluZGVudFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcHJlZml4LCB0ZXh0IH0gPSBwYXJhbXM7XG4gIHJldHVybiB0ZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IGAke3ByZWZpeH0ke2xpbmV9YCkuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBhIHN1YnN0cmluZyBhdCBhIHNwZWNpZmllZCBwb3NpdGlvbiBpbiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgc3RyaW5nIHdpdGggdGhlIHN1YnN0cmluZyBpbnNlcnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEF0KHBhcmFtczogSW5zZXJ0QXRQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgZW5kSW5kZXgsXG4gICAgc3RhcnRJbmRleCxcbiAgICBzdHIsXG4gICAgc3Vic3RyaW5nXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVmZmVjdGl2ZUVuZEluZGV4ID0gZW5kSW5kZXggPz8gc3RhcnRJbmRleDtcbiAgcmV0dXJuIHN0ci5zbGljZSgwLCBzdGFydEluZGV4KSArIHN1YnN0cmluZyArIHN0ci5zbGljZShlZmZlY3RpdmVFbmRJbmRleCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgaW50byBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUgbmFtZSBieSByZXBsYWNpbmcgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGggdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSB2YWxpZCB2YXJpYWJsZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVZhbGlkVmFyaWFibGVOYW1lKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgIHJlcGxhY2VyOiAnXycsXG4gICAgc2VhcmNoVmFsdWU6IC9bXmEtekEtWjAtOV9dL2csXG4gICAgc3RyXG4gIH0pO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzdHJpbmcgYnkgY29udmVydGluZyBpdCB0byB0aGUgTkZDIGZvcm0gYW5kIHJlcGxhY2luZyBub24tYnJlYWtpbmcgc3BhY2VzIHdpdGggcmVndWxhciBzcGFjZXMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgIHJlcGxhY2VyOiAnICcsXG4gICAgc2VhcmNoVmFsdWU6IC9cXHUwMEEwfFxcdTIwMkYvZyxcbiAgICBzdHJcbiAgfSkubm9ybWFsaXplKCdORkMnKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBvY2N1cnJlbmNlcyBvZiBzdHJpbmdzIGluIGEgZ2l2ZW4gc3RyaW5nIGJhc2VkIG9uIGEgcmVwbGFjZW1lbnRzIG1hcC5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBvbi5cbiAqIEBwYXJhbSByZXBsYWNlbWVudHNNYXAgLSBBbiBvYmplY3QgbWFwcGluZyBzdHJpbmdzIHRvIHRoZWlyIHJlcGxhY2VtZW50IHZhbHVlcy5cbiAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBzdHJpbmcgd2l0aCByZXBsYWNlbWVudHMgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2Uoc3RyOiBzdHJpbmcsIHJlcGxhY2VtZW50c01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzTWFwKS5tYXAoKHNvdXJjZSkgPT4gZXNjYXBlUmVnRXhwKHNvdXJjZSkpLmpvaW4oJ3wnKSwgJ2cnKTtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgIHJlcGxhY2VyOiAoeyBzdWJzdHJpbmc6IHNvdXJjZSB9KSA9PiBlbnN1cmVOb25OdWxsYWJsZShyZXBsYWNlbWVudHNNYXBbc291cmNlXSksXG4gICAgc2VhcmNoVmFsdWU6IHJlZ0V4cCxcbiAgICBzdHJcbiAgfSk7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIGEgc2VhcmNoIHN0cmluZyBvciBwYXR0ZXJuIHdpdGggdGhlIHJlc3VsdHMgb2YgYW4gcmVwbGFjZXIgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIGFsbCByZXBsYWNlbWVudHMgbWFkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VBbGw8Q2FwdHVyZWRHcm91cEFyZ3MgZXh0ZW5kcyBzdHJpbmdbXT4ocGFyYW1zOiBSZXBsYWNlQWxsUGFyYW1zPENhcHR1cmVkR3JvdXBBcmdzPik6IHN0cmluZyB7XG4gIGNvbnN0IHsgcmVwbGFjZXIsIHN0ciB9ID0gcGFyYW1zO1xuICBsZXQgeyBzZWFyY2hWYWx1ZSB9ID0gcGFyYW1zO1xuICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAoc2VhcmNoVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgJiYgIXNlYXJjaFZhbHVlLmdsb2JhbCkge1xuICAgIHNlYXJjaFZhbHVlID0gbmV3IFJlZ0V4cChzZWFyY2hWYWx1ZS5zb3VyY2UsIGAke3NlYXJjaFZhbHVlLmZsYWdzfWdgKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlQWxsKHNlYXJjaFZhbHVlLCByZXBsYWNlcik7XG4gIH1cblxuICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoc2VhcmNoVmFsdWUsIChzdWJzdHJpbmc6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgU09VUkNFX0lOREVYX09GRlNFVF9GT1JfR1JPVVBfQVJHID0gMjtcbiAgICBjb25zdCBoYXNHcm91cHNBcmcgPSB0eXBlb2YgYXJncy5hdCgtMSkgPT09ICdvYmplY3QnO1xuICAgIGNvbnN0IHNvdXJjZUluZGV4ID0gaGFzR3JvdXBzQXJnID8gYXJncy5sZW5ndGggLSBTT1VSQ0VfSU5ERVhfT0ZGU0VUX0ZPUl9HUk9VUF9BUkcgOiBhcmdzLmxlbmd0aCAtIDE7XG5cbiAgICBjb25zdCByZXBsYWNlQXJnczogUmVwbGFjZUFyZ3M8Q2FwdHVyZWRHcm91cEFyZ3M+ID0ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIENhbid0IGF2b2lkLlxuICAgICAgY2FwdHVyZWRHcm91cEFyZ3M6IFtdIGFzIHVua25vd25bXSBhcyBDYXB0dXJlZEdyb3VwQXJncyxcbiAgICAgIGdyb3VwczogaGFzR3JvdXBzQXJnID8gYXJncy5hdCgtMSkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiA6IHVuZGVmaW5lZCxcbiAgICAgIG1pc3NpbmdHcm91cEluZGljZXM6IFtdLFxuICAgICAgb2Zmc2V0OiBhcmdzLmF0KHNvdXJjZUluZGV4IC0gMSkgYXMgbnVtYmVyLFxuICAgICAgc291cmNlOiBhcmdzLmF0KHNvdXJjZUluZGV4KSBhcyBzdHJpbmcsXG4gICAgICBzdWJzdHJpbmdcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2VJbmRleCAtIDE7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGFyZ3NbaV07XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlcGxhY2VBcmdzLmNhcHR1cmVkR3JvdXBBcmdzLnB1c2goaXRlbSk7XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSB2OCB0cmFja3MgdGhlIGltcGxpY2l0IGVsc2UgYnJhbmNoIHRoYXQgbmV2ZXIgaGFwcGVucy4gKi9cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJlcGxhY2VBcmdzLm1pc3NpbmdHcm91cEluZGljZXMucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKHJlcGxhY2VyKHJlcGxhY2VBcmdzKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IHJlcGxhY2VBcmdzLnN1YnN0cmluZztcbiAgfSk7XG59XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgcmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIGEgc2VhcmNoIHN0cmluZyBvciBwYXR0ZXJuIHdpdGggdGhlIHJlc3VsdHMgb2YgYW4gYXN5bmNocm9ub3VzIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gUmVwbGFjZUdyb3VwQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgc3RyaW5nIHdpdGggYWxsIHJlcGxhY2VtZW50cyBtYWRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUFsbEFzeW5jPFJlcGxhY2VHcm91cEFyZ3MgZXh0ZW5kcyBzdHJpbmdbXT4ocGFyYW1zOiBSZXBsYWNlQWxsQXN5bmNQYXJhbXM8UmVwbGFjZUdyb3VwQXJncz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgc3RyIH0gPSBwYXJhbXM7XG4gIGxldCB7IGFib3J0U2lnbmFsIH0gPSBwYXJhbXM7XG4gIGFib3J0U2lnbmFsID8/PSBhYm9ydFNpZ25hbE5ldmVyKCk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICAgcmVwbGFjZXIsXG4gICAgICBzZWFyY2hWYWx1ZSxcbiAgICAgIHN0clxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgcmVwbGFjZW1lbnRBc3luY0ZuczogKCgpID0+IFByb21pc2U8U3RyaW5nUmVwbGFjZW1lbnQ+KVtdID0gW107XG5cbiAgcmVwbGFjZUFsbDxSZXBsYWNlR3JvdXBBcmdzPih7XG4gICAgcmVwbGFjZXI6IChhcmdzKSA9PiB7XG4gICAgICByZXBsYWNlbWVudEFzeW5jRm5zLnB1c2goKCkgPT4gcmVzb2x2ZVZhbHVlKHJlcGxhY2VyLCB7IGFib3J0U2lnbmFsLCAuLi5hcmdzIH0pKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIHN0clxuICB9KTtcblxuICBjb25zdCByZXBsYWNlbWVudHM6IFN0cmluZ1JlcGxhY2VtZW50W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFzeW5jRm4gb2YgcmVwbGFjZW1lbnRBc3luY0Zucykge1xuICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgcmVwbGFjZW1lbnRzLnB1c2goYXdhaXQgYXN5bmNGbigpKTtcbiAgfVxuXG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICByZXBsYWNlcjogKGFyZ3MpOiBzdHJpbmcgPT4gcmVwbGFjZW1lbnRzLnNoaWZ0KCkgPz8gYXJncy5zdWJzdHJpbmcsXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgc3RyXG4gIH0pO1xufVxuXG4vKipcbiAqIFRyaW1zIHRoZSBzcGVjaWZpZWQgc3VmZml4IGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAdGhyb3dzIElmIGBzaG91bGRWYWxpZGF0ZWAgaXMgYHRydWVgIGFuZCB0aGUgc3RyaW5nIGRvZXMgbm90IGVuZCB3aXRoIHRoZSBzdWZmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltRW5kKHBhcmFtczogVHJpbUVuZFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgc2hvdWxkVmFsaWRhdGUsIHN0ciwgc3VmZml4IH0gPSBwYXJhbXM7XG4gIGlmIChzdHIuZW5kc1dpdGgoc3VmZml4KSkge1xuICAgIHJldHVybiBzdHIuc2xpY2UoMCwgLXN1ZmZpeC5sZW5ndGgpO1xuICB9XG5cbiAgaWYgKHNob3VsZFZhbGlkYXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgJHtzdHJ9IGRvZXMgbm90IGVuZCB3aXRoIHN1ZmZpeCAke3N1ZmZpeH1gKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogVHJpbXMgdGhlIHNwZWNpZmllZCBwcmVmaXggZnJvbSB0aGUgc3RhcnQgb2YgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHRyaW1tZWQgc3RyaW5nLlxuICogQHRocm93cyBJZiBgc2hvdWxkVmFsaWRhdGVgIGlzIGB0cnVlYCBhbmQgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltU3RhcnQocGFyYW1zOiBUcmltU3RhcnRQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IHByZWZpeCwgc2hvdWxkVmFsaWRhdGUsIHN0ciB9ID0gcGFyYW1zO1xuICBpZiAoc3RyLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgIHJldHVybiBzdHIuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAoc2hvdWxkVmFsaWRhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyAke3N0cn0gZG9lcyBub3Qgc3RhcnQgd2l0aCBwcmVmaXggJHtwcmVmaXh9YCk7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIFVuZXNjYXBlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgZXNjYXBlIHNlcXVlbmNlcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSB1bmVzY2FwZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZShzdHIsIFVORVNDQVBFX01BUCk7XG59XG5cbi8qKlxuICogVW5pbmRlbnRzIGEgc3RyaW5nIGJ5IHJlbW92aW5nIGEgcHJlZml4IGZyb20gZWFjaCBsaW5lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSB1bmluZGVudGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW5kZW50KHBhcmFtczogVW5pbmRlbnRQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IHByZWZpeCwgc2hvdWxkVGhyb3dJZk5vdEluZGVudGVkID0gZmFsc2UsIHRleHQgfSA9IHBhcmFtcztcbiAgcmV0dXJuIHRleHQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4ge1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgcmV0dXJuIGxpbmUuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gICAgfVxuICAgIGlmIChzaG91bGRUaHJvd0lmTm90SW5kZW50ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGluZSBcIiR7bGluZX1cIiBpcyBub3QgaW5kZW50ZWQgd2l0aCBcIiR7cHJlZml4fVwiYCk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lO1xuICB9KS5qb2luKCdcXG4nKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0EsOEJBQWlDO0FBQ2pDLHFCQUE2QjtBQUM3Qix5QkFHTztBQUNQLDRCQUE2QjtBQTBEN0IsTUFBTSxhQUFxQztBQUFBLEVBQ3pDLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLEtBQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLEtBQU07QUFBQSxFQUNOLEtBQUs7QUFBQSxFQUNMLE1BQU07QUFDUjtBQUVBLE1BQU0sS0FBSztBQUNYLE1BQU0sS0FB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
|
|
@@ -50,14 +50,179 @@ export interface ReplaceArgs<CapturedGroupArgs extends string[]> {
|
|
|
50
50
|
*/
|
|
51
51
|
export type Replacer<CapturedGroupArgs extends string[]> = ((args: ReplaceArgs<CapturedGroupArgs>) => StringReplacement) | StringReplacement;
|
|
52
52
|
type StringReplacement = MaybeReturn<string>;
|
|
53
|
+
/**
|
|
54
|
+
* Parameters for {@link ensureEndsWith}.
|
|
55
|
+
*/
|
|
56
|
+
export interface EnsureEndsWithParams {
|
|
57
|
+
/**
|
|
58
|
+
* The string to check.
|
|
59
|
+
*/
|
|
60
|
+
readonly str: string;
|
|
61
|
+
/**
|
|
62
|
+
* The suffix to ensure.
|
|
63
|
+
*/
|
|
64
|
+
readonly suffix: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parameters for {@link ensureStartsWith}.
|
|
68
|
+
*/
|
|
69
|
+
export interface EnsureStartsWithParams {
|
|
70
|
+
/**
|
|
71
|
+
* The prefix to ensure.
|
|
72
|
+
*/
|
|
73
|
+
readonly prefix: string;
|
|
74
|
+
/**
|
|
75
|
+
* The string to check.
|
|
76
|
+
*/
|
|
77
|
+
readonly str: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Parameters for {@link hasSingleOccurrence}.
|
|
81
|
+
*/
|
|
82
|
+
export interface HasSingleOccurrenceParams {
|
|
83
|
+
/**
|
|
84
|
+
* The search value to check for.
|
|
85
|
+
*/
|
|
86
|
+
readonly searchValue: string;
|
|
87
|
+
/**
|
|
88
|
+
* The string to check.
|
|
89
|
+
*/
|
|
90
|
+
readonly str: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Parameters for {@link indent}.
|
|
94
|
+
*/
|
|
95
|
+
export interface IndentParams {
|
|
96
|
+
/**
|
|
97
|
+
* The prefix to add to each line.
|
|
98
|
+
*/
|
|
99
|
+
readonly prefix: string;
|
|
100
|
+
/**
|
|
101
|
+
* The string to indent.
|
|
102
|
+
*/
|
|
103
|
+
readonly text: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Parameters for {@link insertAt}.
|
|
107
|
+
*/
|
|
108
|
+
export interface InsertAtParams {
|
|
109
|
+
/**
|
|
110
|
+
* The index to end the substring at.
|
|
111
|
+
*/
|
|
112
|
+
readonly endIndex?: number;
|
|
113
|
+
/**
|
|
114
|
+
* The index to insert the substring at.
|
|
115
|
+
*/
|
|
116
|
+
readonly startIndex: number;
|
|
117
|
+
/**
|
|
118
|
+
* The string to insert the substring into.
|
|
119
|
+
*/
|
|
120
|
+
readonly str: string;
|
|
121
|
+
/**
|
|
122
|
+
* The substring to insert.
|
|
123
|
+
*/
|
|
124
|
+
readonly substring: string;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Parameters for {@link replaceAllAsync}.
|
|
128
|
+
*
|
|
129
|
+
* @typeParam ReplaceGroupArgs - The types of the captured group arguments.
|
|
130
|
+
*/
|
|
131
|
+
export interface ReplaceAllAsyncParams<ReplaceGroupArgs extends string[]> {
|
|
132
|
+
/**
|
|
133
|
+
* The abort signal to control the execution of the function.
|
|
134
|
+
*/
|
|
135
|
+
readonly abortSignal?: AbortSignal;
|
|
136
|
+
/**
|
|
137
|
+
* A synchronous/asynchronous function that generates replacement strings, or a string to replace with.
|
|
138
|
+
*/
|
|
139
|
+
readonly replacer: AsyncReplacer<ReplaceGroupArgs>;
|
|
140
|
+
/**
|
|
141
|
+
* The string or regular expression to search for.
|
|
142
|
+
*/
|
|
143
|
+
readonly searchValue: RegExp | string;
|
|
144
|
+
/**
|
|
145
|
+
* The string in which to perform replacements.
|
|
146
|
+
*/
|
|
147
|
+
readonly str: string;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Parameters for {@link replaceAll}.
|
|
151
|
+
*
|
|
152
|
+
* @typeParam CapturedGroupArgs - The types of the captured group arguments.
|
|
153
|
+
*/
|
|
154
|
+
export interface ReplaceAllParams<CapturedGroupArgs extends string[]> {
|
|
155
|
+
/**
|
|
156
|
+
* A replacer function that generates replacement strings, or a string to replace with.
|
|
157
|
+
*/
|
|
158
|
+
readonly replacer: Replacer<CapturedGroupArgs>;
|
|
159
|
+
/**
|
|
160
|
+
* The string or regular expression to search for.
|
|
161
|
+
*/
|
|
162
|
+
readonly searchValue: RegExp | string;
|
|
163
|
+
/**
|
|
164
|
+
* The string in which to perform replacements.
|
|
165
|
+
*/
|
|
166
|
+
readonly str: string;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Parameters for {@link trimEnd}.
|
|
170
|
+
*/
|
|
171
|
+
export interface TrimEndParams {
|
|
172
|
+
/**
|
|
173
|
+
* If `true`, throws an error if the string does not end with the suffix.
|
|
174
|
+
*/
|
|
175
|
+
readonly shouldValidate?: boolean;
|
|
176
|
+
/**
|
|
177
|
+
* The string to trim.
|
|
178
|
+
*/
|
|
179
|
+
readonly str: string;
|
|
180
|
+
/**
|
|
181
|
+
* The suffix to remove from the end of the string.
|
|
182
|
+
*/
|
|
183
|
+
readonly suffix: string;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Parameters for {@link trimStart}.
|
|
187
|
+
*/
|
|
188
|
+
export interface TrimStartParams {
|
|
189
|
+
/**
|
|
190
|
+
* The prefix to remove from the start of the string.
|
|
191
|
+
*/
|
|
192
|
+
readonly prefix: string;
|
|
193
|
+
/**
|
|
194
|
+
* If `true`, throws an error if the string does not start with the prefix.
|
|
195
|
+
*/
|
|
196
|
+
readonly shouldValidate?: boolean;
|
|
197
|
+
/**
|
|
198
|
+
* The string to trim.
|
|
199
|
+
*/
|
|
200
|
+
readonly str: string;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Parameters for {@link unindent}.
|
|
204
|
+
*/
|
|
205
|
+
export interface UnindentParams {
|
|
206
|
+
/**
|
|
207
|
+
* The prefix to remove from each line.
|
|
208
|
+
*/
|
|
209
|
+
readonly prefix: string;
|
|
210
|
+
/**
|
|
211
|
+
* If `true`, throws an error if a line is not indented with the prefix.
|
|
212
|
+
*/
|
|
213
|
+
readonly shouldThrowIfNotIndented?: boolean;
|
|
214
|
+
/**
|
|
215
|
+
* The string to unindent.
|
|
216
|
+
*/
|
|
217
|
+
readonly text: string;
|
|
218
|
+
}
|
|
53
219
|
/**
|
|
54
220
|
* Ensures that a string ends with the specified suffix, adding it if necessary.
|
|
55
221
|
*
|
|
56
|
-
* @param
|
|
57
|
-
* @param suffix - The suffix to ensure.
|
|
222
|
+
* @param params - The parameters.
|
|
58
223
|
* @returns The string that ends with the suffix.
|
|
59
224
|
*/
|
|
60
|
-
export declare function ensureEndsWith(
|
|
225
|
+
export declare function ensureEndsWith(params: EnsureEndsWithParams): string;
|
|
61
226
|
/**
|
|
62
227
|
* Ensures that a string has `LF` line endings.
|
|
63
228
|
*
|
|
@@ -70,11 +235,10 @@ export declare function ensureLfEndings(str: string): string;
|
|
|
70
235
|
/**
|
|
71
236
|
* Ensures that a string starts with the specified prefix, adding it if necessary.
|
|
72
237
|
*
|
|
73
|
-
* @param
|
|
74
|
-
* @param prefix - The prefix to ensure.
|
|
238
|
+
* @param params - The parameters.
|
|
75
239
|
* @returns The string that starts with the prefix.
|
|
76
240
|
*/
|
|
77
|
-
export declare function ensureStartsWith(
|
|
241
|
+
export declare function ensureStartsWith(params: EnsureStartsWithParams): string;
|
|
78
242
|
/**
|
|
79
243
|
* Escapes special characters in a string.
|
|
80
244
|
*
|
|
@@ -92,29 +256,24 @@ export declare function getLfNormalizedOffsetToOriginalOffsetMapper(str: string)
|
|
|
92
256
|
/**
|
|
93
257
|
* Checks if a string has a single occurrence of a search value.
|
|
94
258
|
*
|
|
95
|
-
* @param
|
|
96
|
-
* @param searchValue - The search value to check for.
|
|
259
|
+
* @param params - The parameters.
|
|
97
260
|
* @returns `true` if the string has a single occurrence of the search value, `false` otherwise.
|
|
98
261
|
*/
|
|
99
|
-
export declare function hasSingleOccurrence(
|
|
262
|
+
export declare function hasSingleOccurrence(params: HasSingleOccurrenceParams): boolean;
|
|
100
263
|
/**
|
|
101
264
|
* Indents a string by adding a prefix to each line.
|
|
102
265
|
*
|
|
103
|
-
* @param
|
|
104
|
-
* @param prefix - The prefix to add to each line.
|
|
266
|
+
* @param params - The parameters.
|
|
105
267
|
* @returns The indented string.
|
|
106
268
|
*/
|
|
107
|
-
export declare function indent(
|
|
269
|
+
export declare function indent(params: IndentParams): string;
|
|
108
270
|
/**
|
|
109
271
|
* Inserts a substring at a specified position in a string.
|
|
110
272
|
*
|
|
111
|
-
* @param
|
|
112
|
-
* @param substring - The substring to insert.
|
|
113
|
-
* @param startIndex - The index to insert the substring at.
|
|
114
|
-
* @param endIndex - The index to end the substring at.
|
|
273
|
+
* @param params - The parameters.
|
|
115
274
|
* @returns The modified string with the substring inserted.
|
|
116
275
|
*/
|
|
117
|
-
export declare function insertAt(
|
|
276
|
+
export declare function insertAt(params: InsertAtParams): string;
|
|
118
277
|
/**
|
|
119
278
|
* Converts a string into a valid JavaScript variable name by replacing invalid characters with underscores.
|
|
120
279
|
*
|
|
@@ -141,43 +300,34 @@ export declare function replace(str: string, replacementsMap: Record<string, str
|
|
|
141
300
|
* Replaces all occurrences of a search string or pattern with the results of an replacer function.
|
|
142
301
|
*
|
|
143
302
|
* @typeParam CapturedGroupArgs - The types of the captured group arguments.
|
|
144
|
-
* @param
|
|
145
|
-
* @param searchValue - The string or regular expression to search for.
|
|
146
|
-
* @param replacer - A replacer function that generates replacement strings, or a string to replace with.
|
|
303
|
+
* @param params - The parameters.
|
|
147
304
|
* @returns The string with all replacements made.
|
|
148
305
|
*/
|
|
149
|
-
export declare function replaceAll<CapturedGroupArgs extends string[]>(
|
|
306
|
+
export declare function replaceAll<CapturedGroupArgs extends string[]>(params: ReplaceAllParams<CapturedGroupArgs>): string;
|
|
150
307
|
/**
|
|
151
308
|
* Asynchronously replaces all occurrences of a search string or pattern with the results of an asynchronous replacer function.
|
|
152
309
|
*
|
|
153
310
|
* @typeParam ReplaceGroupArgs - The types of the captured group arguments.
|
|
154
|
-
* @param
|
|
155
|
-
* @param searchValue - The string or regular expression to search for.
|
|
156
|
-
* @param replacer - A synchronous/asynchronous function that generates replacement strings, or a string to replace with.
|
|
157
|
-
* @param abortSignal - The abort signal to control the execution of the function.
|
|
311
|
+
* @param params - The parameters.
|
|
158
312
|
* @returns A {@link Promise} that resolves to the string with all replacements made.
|
|
159
313
|
*/
|
|
160
|
-
export declare function replaceAllAsync<ReplaceGroupArgs extends string[]>(
|
|
314
|
+
export declare function replaceAllAsync<ReplaceGroupArgs extends string[]>(params: ReplaceAllAsyncParams<ReplaceGroupArgs>): Promise<string>;
|
|
161
315
|
/**
|
|
162
316
|
* Trims the specified suffix from the end of a string.
|
|
163
317
|
*
|
|
164
|
-
* @param
|
|
165
|
-
* @param suffix - The suffix to remove from the end of the string.
|
|
166
|
-
* @param shouldValidate - If `true`, throws an error if the string does not end with the suffix.
|
|
318
|
+
* @param params - The parameters.
|
|
167
319
|
* @returns The trimmed string.
|
|
168
|
-
* @throws If `
|
|
320
|
+
* @throws If `shouldValidate` is `true` and the string does not end with the suffix.
|
|
169
321
|
*/
|
|
170
|
-
export declare function trimEnd(
|
|
322
|
+
export declare function trimEnd(params: TrimEndParams): string;
|
|
171
323
|
/**
|
|
172
324
|
* Trims the specified prefix from the start of a string.
|
|
173
325
|
*
|
|
174
|
-
* @param
|
|
175
|
-
* @param prefix - The prefix to remove from the start of the string.
|
|
176
|
-
* @param validate - If `true`, throws an error if the string does not start with the prefix.
|
|
326
|
+
* @param params - The parameters.
|
|
177
327
|
* @returns The trimmed string.
|
|
178
|
-
* @throws If `
|
|
328
|
+
* @throws If `shouldValidate` is `true` and the string does not start with the prefix.
|
|
179
329
|
*/
|
|
180
|
-
export declare function trimStart(
|
|
330
|
+
export declare function trimStart(params: TrimStartParams): string;
|
|
181
331
|
/**
|
|
182
332
|
* Unescapes a string by replacing escape sequences with their corresponding characters.
|
|
183
333
|
*
|
|
@@ -188,10 +338,8 @@ export declare function unescape(str: string): string;
|
|
|
188
338
|
/**
|
|
189
339
|
* Unindents a string by removing a prefix from each line.
|
|
190
340
|
*
|
|
191
|
-
* @param
|
|
192
|
-
* @param prefix - The prefix to remove from each line.
|
|
193
|
-
* @param shouldThrowIfNotIndented - If `true`, throws an error if a line is not indented with the prefix.
|
|
341
|
+
* @param params - The parameters.
|
|
194
342
|
* @returns The unindented string.
|
|
195
343
|
*/
|
|
196
|
-
export declare function unindent(
|
|
344
|
+
export declare function unindent(params: UnindentParams): string;
|
|
197
345
|
export {};
|
|
@@ -77,6 +77,8 @@ export interface AsyncEventSource<EventMap extends EventMapConstraint<EventMap>
|
|
|
77
77
|
* @param thisArg - The context passed as `this` to the `callback`.
|
|
78
78
|
* @returns A reference to the event listener.
|
|
79
79
|
*
|
|
80
|
+
* @remarks Not refactored to parameter-object pattern, to keep the parity with {@link obsidian#Events#on} (or once, correspondingly).
|
|
81
|
+
*
|
|
80
82
|
* @example
|
|
81
83
|
* ```ts
|
|
82
84
|
* events.on('my-event', async (arg1, arg2) => {
|
|
@@ -95,6 +97,8 @@ export interface AsyncEventSource<EventMap extends EventMapConstraint<EventMap>
|
|
|
95
97
|
* @param thisArg - The context passed as `this` to the `callback`.
|
|
96
98
|
* @returns A reference to the event listener.
|
|
97
99
|
*
|
|
100
|
+
* @remarks Not refactored to parameter-object pattern, to keep the parity with {@link obsidian#Events#on} (or once, correspondingly).
|
|
101
|
+
*
|
|
98
102
|
* @example
|
|
99
103
|
* ```ts
|
|
100
104
|
* events.once('my-event', async (arg1, arg2) => {
|
|
@@ -240,6 +244,8 @@ export declare abstract class AsyncEventsBase<EventMap extends EventMapConstrain
|
|
|
240
244
|
* @param thisArg - The context passed as `this` to the `callback`.
|
|
241
245
|
* @returns A reference to the event listener.
|
|
242
246
|
*
|
|
247
|
+
* @remarks Not refactored to parameter-object pattern, to keep the parity with {@link obsidian#Events#on} (or once, correspondingly).
|
|
248
|
+
*
|
|
243
249
|
* @example
|
|
244
250
|
* ```ts
|
|
245
251
|
* events.on('my-event', async (arg1, arg2) => {
|
|
@@ -259,6 +265,8 @@ export declare abstract class AsyncEventsBase<EventMap extends EventMapConstrain
|
|
|
259
265
|
* @param thisArg - The context passed as `this` to the `callback`.
|
|
260
266
|
* @returns A reference to the event listener.
|
|
261
267
|
*
|
|
268
|
+
* @remarks Not refactored to parameter-object pattern, to keep the parity with {@link obsidian#Events#on} (or once, correspondingly).
|
|
269
|
+
*
|
|
262
270
|
* @example
|
|
263
271
|
* ```ts
|
|
264
272
|
* events.once('my-event', async (arg1, arg2) => {
|