@mnaoumov/typescript-dev-toolkit 5.2.0 → 5.4.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/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/link-check-skip.cjs +166 -0
- package/dist/lib/cjs/link-check-skip.d.cts +109 -0
- package/dist/lib/cjs/linters/eslint-rules/prefer-dedent.cjs +46 -3
- package/dist/lib/cjs/linters/eslint-rules/prefer-dedent.d.cts +11 -0
- package/dist/lib/cjs/linters/markdownlint.cjs +42 -13
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/link-check-skip.d.mts +109 -0
- package/dist/lib/esm/link-check-skip.mjs +125 -0
- package/dist/lib/esm/linters/eslint-rules/prefer-dedent.d.mts +11 -0
- package/dist/lib/esm/linters/eslint-rules/prefer-dedent.mjs +46 -3
- package/dist/lib/esm/linters/markdownlint.mjs +54 -15
- package/package.json +1 -1
|
@@ -64,9 +64,11 @@ var import_debug = require('@mnaoumov/typescript-lib/debug');
|
|
|
64
64
|
var import_path = require('@mnaoumov/typescript-lib/path');
|
|
65
65
|
var import_node_fs = require('node:fs');
|
|
66
66
|
var import_promises = require('node:fs/promises');
|
|
67
|
+
var import_node_os = require('node:os');
|
|
67
68
|
var import_node_path = require('node:path');
|
|
68
69
|
var import_bulk_concurrency = require('../bulk-concurrency.cjs');
|
|
69
70
|
var import_git = require('../git.cjs');
|
|
71
|
+
var import_link_check_skip = require('../link-check-skip.cjs');
|
|
70
72
|
var import_package_manager = require('../package-manager.cjs');
|
|
71
73
|
var import_repo_paths = require('../repo-paths.cjs');
|
|
72
74
|
var import_root = require('../root.cjs');
|
|
@@ -101,6 +103,31 @@ async function lint(options) {
|
|
|
101
103
|
if (linkCheckFiles.length === 0) {
|
|
102
104
|
return;
|
|
103
105
|
}
|
|
106
|
+
const skipEntries = (0, import_link_check_skip.readLinkCheckSkipEntries)();
|
|
107
|
+
const skipConfigFolder = skipEntries.length > 0 ? await writeSkipConfig(skipEntries, linkCheckFiles, rootFolder) : null;
|
|
108
|
+
try {
|
|
109
|
+
await runLinkinator(linkCheckFiles, skipConfigFolder);
|
|
110
|
+
} finally {
|
|
111
|
+
if (skipConfigFolder !== null) {
|
|
112
|
+
await (0, import_promises.rm)(skipConfigFolder, { force: true, recursive: true });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const MARKDOWN_PATHSPEC = "*.md";
|
|
117
|
+
const LINK_CHECK_CONCURRENCY = 100;
|
|
118
|
+
const LINK_CHECK_TIMEOUT_IN_MILLISECONDS = 3e4;
|
|
119
|
+
const LINKINATOR_CONFIG_FILE_NAME = "linkinator.config.json";
|
|
120
|
+
async function getMarkdownFiles() {
|
|
121
|
+
const nonIgnoredFiles = await (0, import_git.getNonIgnoredFiles)({ patterns: [MARKDOWN_PATHSPEC] });
|
|
122
|
+
return nonIgnoredFiles ? nonIgnoredFiles.filter((path) => !(0, import_markdownlint_ignores.checkIsInNodeModules)(path)) : await (0, import_async.toArray)((0, import_promises.glob)(["**/*.md"], {
|
|
123
|
+
exclude: [
|
|
124
|
+
".git/**",
|
|
125
|
+
"dist/**",
|
|
126
|
+
import_markdownlint_ignores.NODE_MODULES_IGNORE_GLOB
|
|
127
|
+
]
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
async function runLinkinator(linkCheckFiles, skipConfigFolder) {
|
|
104
131
|
await (0, import_root.execFromRoot)([
|
|
105
132
|
...(0, import_package_manager.resolveToolCommand)({ tool: "linkinator" }),
|
|
106
133
|
"--concurrency",
|
|
@@ -118,24 +145,26 @@ async function lint(options) {
|
|
|
118
145
|
String.raw`https://www\.npmjs\.com/package/`,
|
|
119
146
|
"--url-rewrite-replace",
|
|
120
147
|
"https://registry.npmjs.org/",
|
|
148
|
+
...skipConfigFolder === null ? [] : ["--config", (0, import_node_path.join)(skipConfigFolder, LINKINATOR_CONFIG_FILE_NAME)],
|
|
121
149
|
{ batchedArguments: linkCheckFiles }
|
|
122
150
|
]);
|
|
123
151
|
}
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
152
|
+
async function writeSkipConfig(skipEntries, linkCheckFiles, rootFolder) {
|
|
153
|
+
const sourceFiles = await Promise.all(linkCheckFiles.map(async (path) => ({
|
|
154
|
+
content: await (0, import_promises.readFile)((0, import_node_path.resolve)(rootFolder, path), "utf-8"),
|
|
155
|
+
path
|
|
156
|
+
})));
|
|
157
|
+
for (const warning of (0, import_link_check_skip.getLinkCheckSkipWarnings)(skipEntries, sourceFiles)) {
|
|
158
|
+
console.warn(warning);
|
|
159
|
+
}
|
|
160
|
+
const projectConfigPath = (0, import_node_path.resolve)(rootFolder, LINKINATOR_CONFIG_FILE_NAME);
|
|
161
|
+
const projectConfig = (0, import_node_fs.existsSync)(projectConfigPath) ? JSON.parse(await (0, import_promises.readFile)(projectConfigPath, "utf-8")) : void 0;
|
|
162
|
+
const skipConfigFolder = await (0, import_promises.mkdtemp)((0, import_node_path.join)((0, import_node_os.tmpdir)(), "link-check-skip-"));
|
|
163
|
+
await (0, import_promises.writeFile)((0, import_node_path.join)(skipConfigFolder, LINKINATOR_CONFIG_FILE_NAME), JSON.stringify((0, import_link_check_skip.mergeLinkinatorSkipConfig)(projectConfig, skipEntries)));
|
|
164
|
+
return skipConfigFolder;
|
|
136
165
|
}
|
|
137
166
|
// Annotate the CommonJS export names for ESM import in node:
|
|
138
167
|
0 && (module.exports = {
|
|
139
168
|
lint
|
|
140
169
|
});
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2Jcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgZ2V0QnVsa0NvbmN1cnJlbmN5IH0gZnJvbSAnLi4vYnVsay1jb25jdXJyZW5jeS50cyc7XG5pbXBvcnQgeyBnZXROb25JZ25vcmVkRmlsZXMgfSBmcm9tICcuLi9naXQudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGNoZWNrSXNJbk5vZGVNb2R1bGVzLFxuICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0Jcbn0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBsaW50fSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGNvcGllZCB0byB0aGUgcHJvamVjdCByb290IHdoZW4gdGhlIHByb2plY3QgaGFzIG5vbmUuIFdpdGhvdXQgaXQsXG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgcnVucyB3aXRoIGl0cyBvd24gZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdsb2JzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIsIG9mIG1hcmtkb3duIGZpbGVzIHRvIGxlYXZlIG91dCBvZiB0aGUgYGxpbmtpbmF0b3JgIHBhc3Mgb25seTtcbiAgICogYG1hcmtkb3dubGludC1jbGkyYCBzdGlsbCBsaW50cyB0aGVtLlxuICAgKlxuICAgKiBGb3IgYSBkb2N1bWVudGF0aW9uIHNpdGUgd2hvc2UgcGFnZXMgbGluayB0byBlYWNoIG90aGVyIGJhc2UtYWJzb2x1dGVseSAoYC88c2l0ZS1iYXNlPi9ndWlkZXMvLi4uYCk6IHRob3NlXG4gICAqIGxpbmtzIHJlc29sdmUgb25seSBhZ2FpbnN0IHRoZSBCVUlMVCBzaXRlLCBzbyBgbGlua2luYXRvcmAgcmVwb3J0cyBlYWNoIG9uZSBhcyBhIDQwNCwgYW5kIHRoZSBzaXRlJ3Mgb3duXG4gICAqIGJ1aWxkIGlzIHdoYXQgY2hlY2tzIHRoZW0uXG4gICAqXG4gICAqIEBleGFtcGxlIGBbJ2RvY3MvKionXWBcbiAgICovXG4gIHJlYWRvbmx5IGxpbmtDaGVja0V4Y2x1ZGVHbG9icz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIGxpbmtDaGVja0V4Y2x1ZGVHbG9icyA9IFtdLCBwYXRocywgc2hvdWxkRml4ID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdZYW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdKc29uYyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ21hcmtkb3dubGludDpsaW50JykoJ21hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoZXMgYXJlIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ21hcmtkb3dubGludC1jbGkyJyB9KSwgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3QgbGlua0NoZWNrRmlsZXMgPSBtZEZpbGVzLmZpbHRlcigobWRGaWxlKSA9PiBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMuZXZlcnkoKGV4Y2x1ZGVHbG9iKSA9PiAhbWF0Y2hlc0dsb2IobWRGaWxlLCBleGNsdWRlR2xvYikpKTtcbiAgLy8gYGxpbmtpbmF0b3JgIHdpdGggbm8gTE9DQVRJT04gcHJpbnRzIGl0cyB1c2FnZSBhbmQgZXhpdHMgbm9uLXplcm8sIHNvIGEgbGlzdCBlbXB0aWVkIGJ5IHRoZSBleGNsdXNpb25zIGhhcyBub3RoaW5nIHRvIGNoZWNrLlxuICBpZiAobGlua0NoZWNrRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIEVycm9yIHJldHJpZXMgdXNlIG1pbGxpc2Vjb25kIGppdHRlci4gT21pdCAtLXJldHJ5OiBpdHMgc2VwYXJhdGUgUmV0cnktQWZ0ZXIgbW9kZSBjYW4gc2xlZXAgZm9yIHRob3VzYW5kc1xuICAvLyBvZiBzZWNvbmRzIG9uIGEgNDI5IHdlIGFscmVhZHkgYWNjZXB0IGFzIGEgd2FybmluZy4gUmVxdWVzdCB0aW1lb3V0cyByZW1haW4gZXJyb3JzIGFuZCBrZWVwIHRoZWlyIHJldHJpZXMuXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2xpbmtpbmF0b3InIH0pLFxuICAgICctLWNvbmN1cnJlbmN5JyxcbiAgICBTdHJpbmcoZ2V0QnVsa0NvbmN1cnJlbmN5KExJTktfQ0hFQ0tfQ09OQ1VSUkVOQ1kpKSxcbiAgICAnLS10aW1lb3V0JyxcbiAgICBTdHJpbmcoTElOS19DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyksXG4gICAgJy0tcmV0cnktZXJyb3JzJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtY291bnQnLFxuICAgICczJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtaml0dGVyJyxcbiAgICAnNTAwMCcsXG4gICAgJy0tc3RhdHVzLWNvZGUnLFxuICAgICc0Mjk6d2FybicsXG4gICAgJy0tdXJsLXJld3JpdGUtc2VhcmNoJyxcbiAgICBTdHJpbmcucmF3YGh0dHBzOi8vd3d3XFwubnBtanNcXC5jb20vcGFja2FnZS9gLFxuICAgICctLXVybC1yZXdyaXRlLXJlcGxhY2UnLFxuICAgICdodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8nLFxuICAgIHsgYmF0Y2hlZEFyZ3VtZW50czogbGlua0NoZWNrRmlsZXMgfVxuICBdKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2l0IHBhdGhzcGVjIG1hdGNoaW5nIGV2ZXJ5IG1hcmtkb3duIGZpbGUgaW4gdGhlIHJlcG9zaXRvcnksIGF0IGFueSBkZXB0aC5cbiAqL1xuY29uc3QgTUFSS0RPV05fUEFUSFNQRUMgPSAnKi5tZCc7XG5jb25zdCBMSU5LX0NIRUNLX0NPTkNVUlJFTkNZID0gMTAwO1xuY29uc3QgTElOS19DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwXzAwMDtcblxuLyoqXG4gKiBMaXN0cyB0aGUgbWFya2Rvd24gZmlsZXMgdG8gaGFuZCB0byBgbGlua2luYXRvcmAuXG4gKlxuICogYGxpbmtpbmF0b3JgIHRha2VzIGEgZmlsZSBsaXN0IHJhdGhlciB0aGFuIGFuIGlnbm9yZSBjb25maWd1cmF0aW9uLCBzbyB0aGUgZ2l0aWdub3JlZCBmaWxlcyBoYXZlIHRvIGJlXG4gKiBkcm9wcGVkIGJlZm9yZSBpdCBpcyBpbnZva2VkLiBHaXQgaXRzZWxmIGFuc3dlcnMgdGhhdCAobmVzdGVkIGlnbm9yZSBmaWxlcywgYCFgIG5lZ2F0aW9ucyBhbmQgYWxsKTsgdGhlXG4gKiBoYW5kLW1haW50YWluZWQgZ2xvYiBleGNsdXNpb25zIGJlbG93IGFyZSBvbmx5IHRoZSBmYWxsYmFjayBmb3IgYSBjaGVja291dCB3aXRob3V0IGdpdCwgYW5kIHRoZXkgYXJlIHRoZVxuICogdmVyeSBsaXN0cyB0aGlzIGluZGlyZWN0aW9uIGV4aXN0cyB0byBzdG9wIGZyb20gZHJpZnRpbmcuXG4gKlxuICogVGhlIGBub2RlX21vZHVsZXNgIGZpbHRlciBpcyBhcHBsaWVkIHRvIHRoZSBnaXQtZGVyaXZlZCBsaXN0IHRvbywgYW5kIGRlbGliZXJhdGVseSBzbzogZ2l0IG9ubHkgc2tpcHNcbiAqIHdoYXQgdGhlIHJlcG9zaXRvcnkgYXNrZWQgaXQgdG8gc2tpcCwgYW5kIGEgcmVwb3NpdG9yeSBjYW4gZGVsaWJlcmF0ZWx5IFRSQUNLIGEgdmVuZG9yZWQgYG5vZGVfbW9kdWxlc2BcbiAqIHRyZWUuIFRoYXQgaXMgdGhlIG9uZSBleGNsdXNpb24gYC5naXRpZ25vcmVgIGNhbm5vdCBhbnN3ZXIg4oCUIHNlZSBgbWFya2Rvd25saW50LWlnbm9yZXMudHNgLiBBcHBseWluZyBpdFxuICogaGVyZSBrZWVwcyBgbGlua2luYXRvcmAgaW4gc3RlcCB3aXRoIHRoZSBtYXJrZG93bmxpbnQgaGFsZiwgd2hpY2ggaWdub3JlcyB0aGUgc2FtZSBwYXRocyBieSBnbG9iLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbWFya2Rvd24gZmlsZSBwYXRocywgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZm9sZGVyLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRNYXJrZG93bkZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgbm9uSWdub3JlZEZpbGVzID0gYXdhaXQgZ2V0Tm9uSWdub3JlZEZpbGVzKHsgcGF0dGVybnM6IFtNQVJLRE9XTl9QQVRIU1BFQ10gfSk7XG4gIHJldHVybiBub25JZ25vcmVkRmlsZXNcbiAgICA/IG5vbklnbm9yZWRGaWxlcy5maWx0ZXIoKHBhdGgpID0+ICFjaGVja0lzSW5Ob2RlTW9kdWxlcyhwYXRoKSlcbiAgICA6IChhd2FpdCB0b0FycmF5KGdsb2IoWycqKi8qLm1kJ10sIHtcbiAgICAgIGV4Y2x1ZGU6IFtcbiAgICAgICAgJy5naXQvKionLFxuICAgICAgICAnZGlzdC8qKicsXG4gICAgICAgIE5PREVfTU9EVUxFU19JR05PUkVfR0xPQlxuICAgICAgXVxuICAgIH0pKSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLG1CQUF3QjtBQUN4QixtQkFBK0I7QUFDL0Isa0JBQXlCO0FBQ3pCLHFCQUEyQjtBQUMzQixzQkFHTztBQUNQLHVCQUdPO0FBRVAsOEJBQW1DO0FBQ25DLGlCQUFtQztBQUNuQyw2QkFBbUM7QUFDbkMsd0JBQTBCO0FBQzFCLGtCQUlPO0FBQ1Asa0NBR087QUEwQ1AsZUFBc0IsS0FBSyxTQUFzQztBQUMvRCxRQUFNLEVBQUUsdUJBQXVCLHdCQUF3QixDQUFDLEdBQUcsT0FBTyxZQUFZLE1BQU0sSUFBSSxXQUFXLENBQUM7QUFDcEcsUUFBTSxjQUFjO0FBQUEsSUFDbEIsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxFQUNaO0FBRUEsUUFBTSxzQkFBc0IsWUFBWSxLQUFLLENBQUMsZUFBZTtBQUMzRCxVQUFNLHFCQUFpQixxQ0FBd0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRSxlQUFPLDJCQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLHVCQUF1Qix1QkFBdUI7QUFDakQscUNBQWUsbUJBQW1CLEVBQUUsdUVBQXVFO0FBQzNHLGNBQU0sb0JBQUcsMkJBQXVCLHFDQUF3QixFQUFFLFVBQU0sc0JBQVMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFDcEc7QUFHQSxRQUFNLFVBQVUsT0FBTyxTQUFTLFFBQVEsQ0FBQyw0QkFBVSxhQUFhO0FBRWhFLFlBQU0sMEJBQWEsQ0FBQyxPQUFHLDJDQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUMsR0FBRyxHQUFJLFlBQVksQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFJLEVBQUUsa0JBQWtCLFFBQVEsQ0FBQyxDQUFDO0FBR3pJLFFBQU0saUJBQWEsMkJBQWMsS0FBSyxRQUFRLElBQUk7QUFDbEQsUUFBTSxVQUFVLE9BQU8sU0FDbkIsTUFBTSxJQUFJLENBQUMsVUFBTSwyQkFBUyxZQUFZLENBQUMsRUFBRSxXQUFXLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFDbkUsTUFBTSxpQkFBaUI7QUFFM0IsUUFBTSxpQkFBaUIsUUFBUSxPQUFPLENBQUMsV0FBVyxzQkFBc0IsTUFBTSxDQUFDLGdCQUFnQixLQUFDLDhCQUFZLFFBQVEsV0FBVyxDQUFDLENBQUM7QUFFakksTUFBSSxlQUFlLFdBQVcsR0FBRztBQUMvQjtBQUFBLEVBQ0Y7QUFHQSxZQUFNLDBCQUFhO0FBQUEsSUFDakIsT0FBRywyQ0FBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUFBLElBQzVDO0FBQUEsSUFDQSxXQUFPLDRDQUFtQixzQkFBc0IsQ0FBQztBQUFBLElBQ2pEO0FBQUEsSUFDQSxPQUFPLGtDQUFrQztBQUFBLElBQ3pDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFDQSxFQUFFLGtCQUFrQixlQUFlO0FBQUEsRUFDckMsQ0FBQztBQUNIO0FBS0EsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSxxQ0FBcUM7QUFpQjNDLGVBQWUsbUJBQXNDO0FBQ25ELFFBQU0sa0JBQWtCLFVBQU0sK0JBQW1CLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDbEYsU0FBTyxrQkFDSCxnQkFBZ0IsT0FBTyxDQUFDLFNBQVMsS0FBQyxrREFBcUIsSUFBSSxDQUFDLElBQzNELFVBQU0sMEJBQVEsc0JBQUssQ0FBQyxTQUFTLEdBQUc7QUFBQSxJQUNqQyxTQUFTO0FBQUEsTUFDUDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQyxDQUFDO0FBQ047IiwibmFtZXMiOltdfQ==
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2IsXG4gIG1rZHRlbXAsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBqb2luLFxuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBMaW5rQ2hlY2tTa2lwRW50cnkgfSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuXG5pbXBvcnQgeyBnZXRCdWxrQ29uY3VycmVuY3kgfSBmcm9tICcuLi9idWxrLWNvbmN1cnJlbmN5LnRzJztcbmltcG9ydCB7IGdldE5vbklnbm9yZWRGaWxlcyB9IGZyb20gJy4uL2dpdC50cyc7XG5pbXBvcnQge1xuICBnZXRMaW5rQ2hlY2tTa2lwV2FybmluZ3MsXG4gIG1lcmdlTGlua2luYXRvclNraXBDb25maWcsXG4gIHJlYWRMaW5rQ2hlY2tTa2lwRW50cmllc1xufSBmcm9tICcuLi9saW5rLWNoZWNrLXNraXAudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGNoZWNrSXNJbk5vZGVNb2R1bGVzLFxuICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0Jcbn0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBsaW50fSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGNvcGllZCB0byB0aGUgcHJvamVjdCByb290IHdoZW4gdGhlIHByb2plY3QgaGFzIG5vbmUuIFdpdGhvdXQgaXQsXG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgcnVucyB3aXRoIGl0cyBvd24gZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdsb2JzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIsIG9mIG1hcmtkb3duIGZpbGVzIHRvIGxlYXZlIG91dCBvZiB0aGUgYGxpbmtpbmF0b3JgIHBhc3Mgb25seTtcbiAgICogYG1hcmtkb3dubGludC1jbGkyYCBzdGlsbCBsaW50cyB0aGVtLlxuICAgKlxuICAgKiBGb3IgYSBkb2N1bWVudGF0aW9uIHNpdGUgd2hvc2UgcGFnZXMgbGluayB0byBlYWNoIG90aGVyIGJhc2UtYWJzb2x1dGVseSAoYC88c2l0ZS1iYXNlPi9ndWlkZXMvLi4uYCk6IHRob3NlXG4gICAqIGxpbmtzIHJlc29sdmUgb25seSBhZ2FpbnN0IHRoZSBCVUlMVCBzaXRlLCBzbyBgbGlua2luYXRvcmAgcmVwb3J0cyBlYWNoIG9uZSBhcyBhIDQwNCwgYW5kIHRoZSBzaXRlJ3Mgb3duXG4gICAqIGJ1aWxkIGlzIHdoYXQgY2hlY2tzIHRoZW0uXG4gICAqXG4gICAqIEBleGFtcGxlIGBbJ2RvY3MvKionXWBcbiAgICovXG4gIHJlYWRvbmx5IGxpbmtDaGVja0V4Y2x1ZGVHbG9icz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIGxpbmtDaGVja0V4Y2x1ZGVHbG9icyA9IFtdLCBwYXRocywgc2hvdWxkRml4ID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdZYW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdKc29uYyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ21hcmtkb3dubGludDpsaW50JykoJ21hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoZXMgYXJlIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ21hcmtkb3dubGludC1jbGkyJyB9KSwgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3QgbGlua0NoZWNrRmlsZXMgPSBtZEZpbGVzLmZpbHRlcigobWRGaWxlKSA9PiBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMuZXZlcnkoKGV4Y2x1ZGVHbG9iKSA9PiAhbWF0Y2hlc0dsb2IobWRGaWxlLCBleGNsdWRlR2xvYikpKTtcbiAgLy8gYGxpbmtpbmF0b3JgIHdpdGggbm8gTE9DQVRJT04gcHJpbnRzIGl0cyB1c2FnZSBhbmQgZXhpdHMgbm9uLXplcm8sIHNvIGEgbGlzdCBlbXB0aWVkIGJ5IHRoZSBleGNsdXNpb25zIGhhcyBub3RoaW5nIHRvIGNoZWNrLlxuICBpZiAobGlua0NoZWNrRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNraXBFbnRyaWVzID0gcmVhZExpbmtDaGVja1NraXBFbnRyaWVzKCk7XG4gIGNvbnN0IHNraXBDb25maWdGb2xkZXIgPSBza2lwRW50cmllcy5sZW5ndGggPiAwID8gYXdhaXQgd3JpdGVTa2lwQ29uZmlnKHNraXBFbnRyaWVzLCBsaW5rQ2hlY2tGaWxlcywgcm9vdEZvbGRlcikgOiBudWxsO1xuICB0cnkge1xuICAgIGF3YWl0IHJ1bkxpbmtpbmF0b3IobGlua0NoZWNrRmlsZXMsIHNraXBDb25maWdGb2xkZXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChza2lwQ29uZmlnRm9sZGVyICE9PSBudWxsKSB7XG4gICAgICBhd2FpdCBybShza2lwQ29uZmlnRm9sZGVyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIGdpdCBwYXRoc3BlYyBtYXRjaGluZyBldmVyeSBtYXJrZG93biBmaWxlIGluIHRoZSByZXBvc2l0b3J5LCBhdCBhbnkgZGVwdGguXG4gKi9cbmNvbnN0IE1BUktET1dOX1BBVEhTUEVDID0gJyoubWQnO1xuY29uc3QgTElOS19DSEVDS19DT05DVVJSRU5DWSA9IDEwMDtcbmNvbnN0IExJTktfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5jb25zdCBMSU5LSU5BVE9SX0NPTkZJR19GSUxFX05BTUUgPSAnbGlua2luYXRvci5jb25maWcuanNvbic7XG5cbi8qKlxuICogTGlzdHMgdGhlIG1hcmtkb3duIGZpbGVzIHRvIGhhbmQgdG8gYGxpbmtpbmF0b3JgLlxuICpcbiAqIGBsaW5raW5hdG9yYCB0YWtlcyBhIGZpbGUgbGlzdCByYXRoZXIgdGhhbiBhbiBpZ25vcmUgY29uZmlndXJhdGlvbiwgc28gdGhlIGdpdGlnbm9yZWQgZmlsZXMgaGF2ZSB0byBiZVxuICogZHJvcHBlZCBiZWZvcmUgaXQgaXMgaW52b2tlZC4gR2l0IGl0c2VsZiBhbnN3ZXJzIHRoYXQgKG5lc3RlZCBpZ25vcmUgZmlsZXMsIGAhYCBuZWdhdGlvbnMgYW5kIGFsbCk7IHRoZVxuICogaGFuZC1tYWludGFpbmVkIGdsb2IgZXhjbHVzaW9ucyBiZWxvdyBhcmUgb25seSB0aGUgZmFsbGJhY2sgZm9yIGEgY2hlY2tvdXQgd2l0aG91dCBnaXQsIGFuZCB0aGV5IGFyZSB0aGVcbiAqIHZlcnkgbGlzdHMgdGhpcyBpbmRpcmVjdGlvbiBleGlzdHMgdG8gc3RvcCBmcm9tIGRyaWZ0aW5nLlxuICpcbiAqIFRoZSBgbm9kZV9tb2R1bGVzYCBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgZ2l0LWRlcml2ZWQgbGlzdCB0b28sIGFuZCBkZWxpYmVyYXRlbHkgc286IGdpdCBvbmx5IHNraXBzXG4gKiB3aGF0IHRoZSByZXBvc2l0b3J5IGFza2VkIGl0IHRvIHNraXAsIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhIHZlbmRvcmVkIGBub2RlX21vZHVsZXNgXG4gKiB0cmVlLiBUaGF0IGlzIHRoZSBvbmUgZXhjbHVzaW9uIGAuZ2l0aWdub3JlYCBjYW5ub3QgYW5zd2VyIOKAlCBzZWUgYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC4gQXBwbHlpbmcgaXRcbiAqIGhlcmUga2VlcHMgYGxpbmtpbmF0b3JgIGluIHN0ZXAgd2l0aCB0aGUgbWFya2Rvd25saW50IGhhbGYsIHdoaWNoIGlnbm9yZXMgdGhlIHNhbWUgcGF0aHMgYnkgZ2xvYi5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hcmtkb3duIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vbklnbm9yZWRGaWxlcyA9IGF3YWl0IGdldE5vbklnbm9yZWRGaWxlcyh7IHBhdHRlcm5zOiBbTUFSS0RPV05fUEFUSFNQRUNdIH0pO1xuICByZXR1cm4gbm9uSWdub3JlZEZpbGVzXG4gICAgPyBub25JZ25vcmVkRmlsZXMuZmlsdGVyKChwYXRoKSA9PiAhY2hlY2tJc0luTm9kZU1vZHVsZXMocGF0aCkpXG4gICAgOiAoYXdhaXQgdG9BcnJheShnbG9iKFsnKiovKi5tZCddLCB7XG4gICAgICBleGNsdWRlOiBbXG4gICAgICAgICcuZ2l0LyoqJyxcbiAgICAgICAgJ2Rpc3QvKionLFxuICAgICAgICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0JcbiAgICAgIF1cbiAgICB9KSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5MaW5raW5hdG9yKGxpbmtDaGVja0ZpbGVzOiBzdHJpbmdbXSwgc2tpcENvbmZpZ0ZvbGRlcjogbnVsbCB8IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBFcnJvciByZXRyaWVzIHVzZSBtaWxsaXNlY29uZCBqaXR0ZXIuIE9taXQgLS1yZXRyeTogaXRzIHNlcGFyYXRlIFJldHJ5LUFmdGVyIG1vZGUgY2FuIHNsZWVwIGZvciB0aG91c2FuZHNcbiAgLy8gb2Ygc2Vjb25kcyBvbiBhIDQyOSB3ZSBhbHJlYWR5IGFjY2VwdCBhcyBhIHdhcm5pbmcuIFJlcXVlc3QgdGltZW91dHMgcmVtYWluIGVycm9ycyBhbmQga2VlcCB0aGVpciByZXRyaWVzLlxuICBhd2FpdCBleGVjRnJvbVJvb3QoW1xuICAgIC4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdsaW5raW5hdG9yJyB9KSxcbiAgICAnLS1jb25jdXJyZW5jeScsXG4gICAgU3RyaW5nKGdldEJ1bGtDb25jdXJyZW5jeShMSU5LX0NIRUNLX0NPTkNVUlJFTkNZKSksXG4gICAgJy0tdGltZW91dCcsXG4gICAgU3RyaW5nKExJTktfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpLFxuICAgICctLXJldHJ5LWVycm9ycycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWNvdW50JyxcbiAgICAnMycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWppdHRlcicsXG4gICAgJzUwMDAnLFxuICAgICctLXN0YXR1cy1jb2RlJyxcbiAgICAnNDI5Ondhcm4nLFxuICAgICctLXVybC1yZXdyaXRlLXNlYXJjaCcsXG4gICAgU3RyaW5nLnJhd2BodHRwczovL3d3d1xcLm5wbWpzXFwuY29tL3BhY2thZ2UvYCxcbiAgICAnLS11cmwtcmV3cml0ZS1yZXBsYWNlJyxcbiAgICAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJyxcbiAgICAuLi4oc2tpcENvbmZpZ0ZvbGRlciA9PT0gbnVsbCA/IFtdIDogWyctLWNvbmZpZycsIGpvaW4oc2tpcENvbmZpZ0ZvbGRlciwgTElOS0lOQVRPUl9DT05GSUdfRklMRV9OQU1FKV0pLFxuICAgIHsgYmF0Y2hlZEFyZ3VtZW50czogbGlua0NoZWNrRmlsZXMgfVxuICBdKTtcbn1cblxuLyoqXG4gKiBXYXJucyBhYm91dCBldmVyeSBsaW5rIHRoZSBza2lwIGVudHJpZXMgdGFrZSBvdXQgb2YgdGhlIGNoZWNrLCBhbmQgd3JpdGVzIHRoZSBgbGlua2luYXRvcmAgY29uZmlnIHRoYXQgc2tpcHMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gc2tpcEVudHJpZXMgLSBUaGUgc2tpcCBlbnRyaWVzLlxuICogQHBhcmFtIGxpbmtDaGVja0ZpbGVzIC0gVGhlIG1hcmtkb3duIGZpbGVzIGhhbmRlZCB0byBgbGlua2luYXRvcmAsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqIEBwYXJhbSByb290Rm9sZGVyIC0gVGhlIHJvb3QgZm9sZGVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0ZW1wb3JhcnkgZm9sZGVyIGhvbGRpbmcgdGhlIGNvbmZpZzsgdGhlIGNhbGxlciByZW1vdmVzIGl0LlxuICovXG5hc3luYyBmdW5jdGlvbiB3cml0ZVNraXBDb25maWcoc2tpcEVudHJpZXM6IHJlYWRvbmx5IExpbmtDaGVja1NraXBFbnRyeVtdLCBsaW5rQ2hlY2tGaWxlczogcmVhZG9ubHkgc3RyaW5nW10sIHJvb3RGb2xkZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHNvdXJjZUZpbGVzID0gYXdhaXQgUHJvbWlzZS5hbGwobGlua0NoZWNrRmlsZXMubWFwKGFzeW5jIChwYXRoKSA9PiAoe1xuICAgIGNvbnRlbnQ6IGF3YWl0IHJlYWRGaWxlKHJlc29sdmUocm9vdEZvbGRlciwgcGF0aCksICd1dGYtOCcpLFxuICAgIHBhdGhcbiAgfSkpKTtcbiAgZm9yIChjb25zdCB3YXJuaW5nIG9mIGdldExpbmtDaGVja1NraXBXYXJuaW5ncyhza2lwRW50cmllcywgc291cmNlRmlsZXMpKSB7XG4gICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSByZXNvbHZlKHJvb3RGb2xkZXIsIExJTktJTkFUT1JfQ09ORklHX0ZJTEVfTkFNRSk7XG4gIGNvbnN0IHByb2plY3RDb25maWc6IHVua25vd24gPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoKSA/IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUocHJvamVjdENvbmZpZ1BhdGgsICd1dGYtOCcpKSA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2tpcENvbmZpZ0ZvbGRlciA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ2xpbmstY2hlY2stc2tpcC0nKSk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKHNraXBDb25maWdGb2xkZXIsIExJTktJTkFUT1JfQ09ORklHX0ZJTEVfTkFNRSksIEpTT04uc3RyaW5naWZ5KG1lcmdlTGlua2luYXRvclNraXBDb25maWcocHJvamVjdENvbmZpZywgc2tpcEVudHJpZXMpKSk7XG4gIHJldHVybiBza2lwQ29uZmlnRm9sZGVyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7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
|
package/dist/lib/esm/index.d.mts
CHANGED
|
@@ -23,6 +23,7 @@ export * as 'gate' from './gate.mjs';
|
|
|
23
23
|
export * as 'git' from './git.mjs';
|
|
24
24
|
export * as 'json' from './json.mjs';
|
|
25
25
|
export * as 'library-build' from './library-build.mjs';
|
|
26
|
+
export * as 'link-check-skip' from './link-check-skip.mjs';
|
|
26
27
|
export * as 'linters' from './linters/index.mjs';
|
|
27
28
|
export * as 'nano-staged-config' from './nano-staged-config.mjs';
|
|
28
29
|
export * as 'npm-publish' from './npm-publish.mjs';
|
package/dist/lib/esm/index.mjs
CHANGED
|
@@ -23,6 +23,7 @@ import * as gate from "./gate.mjs";
|
|
|
23
23
|
import * as git from "./git.mjs";
|
|
24
24
|
import * as json from "./json.mjs";
|
|
25
25
|
import * as library_build from "./library-build.mjs";
|
|
26
|
+
import * as link_check_skip from "./link-check-skip.mjs";
|
|
26
27
|
import * as linters from "./linters/index.mjs";
|
|
27
28
|
import * as nano_staged_config from "./nano-staged-config.mjs";
|
|
28
29
|
import * as npm_publish from "./npm-publish.mjs";
|
|
@@ -61,6 +62,7 @@ export {
|
|
|
61
62
|
git,
|
|
62
63
|
json,
|
|
63
64
|
library_build as "library-build",
|
|
65
|
+
link_check_skip as "link-check-skip",
|
|
64
66
|
linters,
|
|
65
67
|
nano_staged_config as "nano-staged-config",
|
|
66
68
|
npm,
|
|
@@ -79,4 +81,4 @@ export {
|
|
|
79
81
|
validate_dependencies as "validate-dependencies",
|
|
80
82
|
version
|
|
81
83
|
};
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidWxrLWNvbmN1cnJlbmN5JyBmcm9tICcuL2J1bGstY29uY3VycmVuY3kudHMnO1xuZXhwb3J0ICogYXMgJ2J1bmRsZXJzJyBmcm9tICcuL2J1bmRsZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjaGVjay1wcm9qZWN0LXR5cGVzJyBmcm9tICcuL2NoZWNrLXByb2plY3QtdHlwZXMudHMnO1xuZXhwb3J0ICogYXMgJ2NsaS11dGlscycgZnJvbSAnLi9jbGktdXRpbHMudHMnO1xuZXhwb3J0ICogYXMgJ2NvZGUtZ2VuZXJhdG9yJyBmcm9tICcuL2NvZGUtZ2VuZXJhdG9yLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LWNvbmZpZycgZnJvbSAnLi9jb21taXRsaW50LWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1mb3JiaWRkZW4tcGF0dGVybnMnIGZyb20gJy4vY29tbWl0bGludC1mb3JiaWRkZW4tcGF0dGVybnMudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtbGludC1tZC1oZWFkZXInIGZyb20gJy4vY29tbWl0bGludC1saW50LW1kLWhlYWRlci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1zcGVsbGNoZWNrLWhlYWRlcicgZnJvbSAnLi9jb21taXRsaW50LXNwZWxsY2hlY2staGVhZGVyLnRzJztcbmV4cG9ydCAqIGFzICdkb2NzLXNpdGUnIGZyb20gJy4vZG9jcy1zaXRlL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdlbnYtdG9nZ2xlJyBmcm9tICcuL2Vudi10b2dnbGUudHMnO1xuZXhwb3J0ICogYXMgJ2V4ZWMnIGZyb20gJy4vZXhlYy50cyc7XG5leHBvcnQgKiBhcyAnZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2ZvcmJpZGRlbi1wYXR0ZXJucy50cyc7XG5leHBvcnQgKiBhcyAnZm9ybWF0dGVycycgZnJvbSAnLi9mb3JtYXR0ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdmcycgZnJvbSAnLi9mcy50cyc7XG5leHBvcnQgKiBhcyAnZ2F0ZScgZnJvbSAnLi9nYXRlLnRzJztcbmV4cG9ydCAqIGFzICdnaXQnIGZyb20gJy4vZ2l0LnRzJztcbmV4cG9ydCAqIGFzICdqc29uJyBmcm9tICcuL2pzb24udHMnO1xuZXhwb3J0ICogYXMgJ2xpYnJhcnktYnVpbGQnIGZyb20gJy4vbGlicmFyeS1idWlsZC50cyc7XG5leHBvcnQgKiBhcyAnbGluay1jaGVjay1za2lwJyBmcm9tICcuL2xpbmstY2hlY2stc2tpcC50cyc7XG5leHBvcnQgKiBhcyAnbGludGVycycgZnJvbSAnLi9saW50ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICduYW5vLXN0YWdlZC1jb25maWcnIGZyb20gJy4vbmFuby1zdGFnZWQtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICducG0tcHVibGlzaCcgZnJvbSAnLi9ucG0tcHVibGlzaC50cyc7XG5leHBvcnQgKiBhcyAnbnBtLXJ1bicgZnJvbSAnLi9ucG0tcnVuLnRzJztcbmV4cG9ydCAqIGFzICducG0nIGZyb20gJy4vbnBtLnRzJztcbmV4cG9ydCAqIGFzICdwYWNrYWdlLWxvY2staW50ZWdyaXR5JyBmcm9tICcuL3BhY2thZ2UtbG9jay1pbnRlZ3JpdHkudHMnO1xuZXhwb3J0ICogYXMgJ3BhY2thZ2UtbWFuYWdlcicgZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuZXhwb3J0ICogYXMgJ3JlbGVhc2VkLWlzc3VlcycgZnJvbSAnLi9yZWxlYXNlZC1pc3N1ZXMudHMnO1xuZXhwb3J0ICogYXMgJ3JlcG8tcGF0aHMnIGZyb20gJy4vcmVwby1wYXRocy50cyc7XG5leHBvcnQgKiBhcyAncm9vdCcgZnJvbSAnLi9yb290LnRzJztcbmV4cG9ydCAqIGFzICdzaGFyZWQtY29uZmlnLWZpbGVzJyBmcm9tICcuL3NoYXJlZC1jb25maWctZmlsZXMudHMnO1xuZXhwb3J0ICogYXMgJ3Rlc3QtcnVubmVycycgZnJvbSAnLi90ZXN0LXJ1bm5lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3Vwc3RyZWFtLXN5bmMtY2xpJyBmcm9tICcuL3Vwc3RyZWFtLXN5bmMtY2xpLnRzJztcbmV4cG9ydCAqIGFzICd1cHN0cmVhbS1zeW5jJyBmcm9tICcuL3Vwc3RyZWFtLXN5bmMudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlY2xhcmF0aW9ucycgZnJvbSAnLi92YWxpZGF0ZS1kZWNsYXJhdGlvbnMudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlcGVuZGVuY2llcycgZnJvbSAnLi92YWxpZGF0ZS1kZXBlbmRlbmNpZXMudHMnO1xuZXhwb3J0ICogYXMgJ3ZlcnNpb24nIGZyb20gJy4vdmVyc2lvbi50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVksV0FBYTtBQUN6QixZQUFZQSxzQkFBd0I7QUFDcEMsWUFBWSxjQUFnQjtBQUM1QixZQUFZQyx5QkFBMkI7QUFDdkMsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsb0JBQXNCO0FBQ2xDLFlBQVlDLHVCQUF5QjtBQUNyQyxZQUFZQyxtQ0FBcUM7QUFDakQsWUFBWUMsK0JBQWlDO0FBQzdDLFlBQVlDLGtDQUFvQztBQUNoRCxZQUFZQyxlQUFpQjtBQUM3QixZQUFZQyxnQkFBa0I7QUFDOUIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZLGdCQUFrQjtBQUM5QixZQUFZLFFBQVU7QUFDdEIsWUFBWSxVQUFZO0FBQ3hCLFlBQVksU0FBVztBQUN2QixZQUFZLFVBQVk7QUFDeEIsWUFBWUMsbUJBQXFCO0FBQ2pDLFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZLGFBQWU7QUFDM0IsWUFBWUMsd0JBQTBCO0FBQ3RDLFlBQVlDLGlCQUFtQjtBQUMvQixZQUFZQyxhQUFlO0FBQzNCLFlBQVksU0FBVztBQUN2QixZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMscUJBQXVCO0FBQ25DLFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZQyxnQkFBa0I7QUFDOUIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLHlCQUEyQjtBQUN2QyxZQUFZQyxrQkFBb0I7QUFDaEMsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZQywyQkFBNkI7QUFDekMsWUFBWUMsMkJBQTZCO0FBQ3pDLFlBQVksYUFBZTsiLAogICJuYW1lcyI6IFsiYnVsay1jb25jdXJyZW5jeSIsICJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJjb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucyIsICJjb21taXRsaW50LWxpbnQtbWQtaGVhZGVyIiwgImNvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIiLCAiZG9jcy1zaXRlIiwgImVudi10b2dnbGUiLCAiZm9yYmlkZGVuLXBhdHRlcm5zIiwgImxpYnJhcnktYnVpbGQiLCAibGluay1jaGVjay1za2lwIiwgIm5hbm8tc3RhZ2VkLWNvbmZpZyIsICJucG0tcHVibGlzaCIsICJucG0tcnVuIiwgInBhY2thZ2UtbG9jay1pbnRlZ3JpdHkiLCAicGFja2FnZS1tYW5hZ2VyIiwgInJlbGVhc2VkLWlzc3VlcyIsICJyZXBvLXBhdGhzIiwgInNoYXJlZC1jb25maWctZmlsZXMiLCAidGVzdC1ydW5uZXJzIiwgInVwc3RyZWFtLXN5bmMtY2xpIiwgInVwc3RyZWFtLXN5bmMiLCAidmFsaWRhdGUtZGVjbGFyYXRpb25zIiwgInZhbGlkYXRlLWRlcGVuZGVuY2llcyJdCn0K
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Links the markdown link check leaves unchecked for one run, named by the {@link LINK_CHECK_SKIP_ENV_VARIABLE}
|
|
6
|
+
* environment variable.
|
|
7
|
+
*
|
|
8
|
+
* Two cases need it: a host the current network cannot reach although it is up (a provider blocking it), and a
|
|
9
|
+
* release whose documentation links to something only that same release pushes. Both are temporary, so the
|
|
10
|
+
* variable belongs on the one command that needs it, never in `.env`: a skip left in place lets a link go stale
|
|
11
|
+
* with nothing to say so. It is read like every other variable here, `.env` included, and every skipped link,
|
|
12
|
+
* like every entry that skipped nothing, prints a warning, so a skip is never silent.
|
|
13
|
+
*
|
|
14
|
+
* Entries are comma-separated. An entry holding `://` is a URL prefix and matches every link starting with it; any
|
|
15
|
+
* other entry is a host and matches the links to exactly that host (`mail.tm` does not match `docs.mail.tm`).
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The environment variable naming the links to skip.
|
|
19
|
+
*/
|
|
20
|
+
export declare const LINK_CHECK_SKIP_ENV_VARIABLE = "LINK_CHECK_SKIP";
|
|
21
|
+
/**
|
|
22
|
+
* One entry of {@link LINK_CHECK_SKIP_ENV_VARIABLE}.
|
|
23
|
+
*/
|
|
24
|
+
export interface LinkCheckSkipEntry {
|
|
25
|
+
/**
|
|
26
|
+
* `host` matches links to exactly that host; `prefix` matches links starting with {@link value}.
|
|
27
|
+
*/
|
|
28
|
+
readonly kind: 'host' | 'prefix';
|
|
29
|
+
/**
|
|
30
|
+
* The entry as written, a host lowercased.
|
|
31
|
+
*/
|
|
32
|
+
readonly value: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The text of one markdown file the link check reads.
|
|
36
|
+
*/
|
|
37
|
+
export interface LinkCheckSourceFile {
|
|
38
|
+
/**
|
|
39
|
+
* The file's content.
|
|
40
|
+
*/
|
|
41
|
+
readonly content: string;
|
|
42
|
+
/**
|
|
43
|
+
* The file's path, as the warnings name it.
|
|
44
|
+
*/
|
|
45
|
+
readonly path: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Tells whether an entry matches a URL.
|
|
49
|
+
*
|
|
50
|
+
* @param url - The URL.
|
|
51
|
+
* @param entry - The entry.
|
|
52
|
+
* @returns `true` when a `prefix` entry starts the URL, or a `host` entry is exactly the URL's host.
|
|
53
|
+
*/
|
|
54
|
+
export declare function doesLinkCheckSkipEntryMatch(url: string, entry: LinkCheckSkipEntry): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Finds the absolute `http`/`https` URLs written in a text.
|
|
57
|
+
*
|
|
58
|
+
* It is a textual scan, so it also finds a URL inside a code span, which `linkinator` does not check.
|
|
59
|
+
*
|
|
60
|
+
* @param text - The text to scan.
|
|
61
|
+
* @returns The URLs, in order of appearance, trailing punctuation dropped.
|
|
62
|
+
*/
|
|
63
|
+
export declare function extractUrls(text: string): string[];
|
|
64
|
+
/**
|
|
65
|
+
* Builds the warnings for a run with skip entries: one per distinct link each file loses to an entry, and one per
|
|
66
|
+
* entry that matched no link at all.
|
|
67
|
+
*
|
|
68
|
+
* @param entries - The entries, as {@link parseLinkCheckSkipEntries} returned them.
|
|
69
|
+
* @param files - The markdown files the link check is handed.
|
|
70
|
+
* @returns The warning lines, without a trailing newline.
|
|
71
|
+
*/
|
|
72
|
+
export declare function getLinkCheckSkipWarnings(entries: readonly LinkCheckSkipEntry[], files: readonly LinkCheckSourceFile[]): string[];
|
|
73
|
+
/**
|
|
74
|
+
* Adds the entries to a `linkinator` config, keeping whatever the project's own config already skips.
|
|
75
|
+
*
|
|
76
|
+
* The skip list goes to `linkinator` as a config file because `--config` replaces the project's
|
|
77
|
+
* `linkinator.config.json` rather than adding to it, so the project's settings have to be carried over.
|
|
78
|
+
*
|
|
79
|
+
* @param projectConfig - The parsed project `linkinator.config.json`, or `undefined` when there is none.
|
|
80
|
+
* @param entries - The entries.
|
|
81
|
+
* @returns The config to write.
|
|
82
|
+
* @throws If the project config is not a JSON object.
|
|
83
|
+
*/
|
|
84
|
+
export declare function mergeLinkinatorSkipConfig(projectConfig: unknown, entries: readonly LinkCheckSkipEntry[]): Record<string, unknown>;
|
|
85
|
+
/**
|
|
86
|
+
* Parses the value of {@link LINK_CHECK_SKIP_ENV_VARIABLE}.
|
|
87
|
+
*
|
|
88
|
+
* @param value - The comma-separated value; blank entries are ignored.
|
|
89
|
+
* @returns The entries.
|
|
90
|
+
* @throws If an entry is neither a URL prefix nor a host name.
|
|
91
|
+
*/
|
|
92
|
+
export declare function parseLinkCheckSkipEntries(value: string): LinkCheckSkipEntry[];
|
|
93
|
+
/**
|
|
94
|
+
* Reads the entries of {@link LINK_CHECK_SKIP_ENV_VARIABLE}, loading the optional `.env` first.
|
|
95
|
+
*
|
|
96
|
+
* @returns The entries; none when the variable is unset or blank.
|
|
97
|
+
*/
|
|
98
|
+
export declare function readLinkCheckSkipEntries(): LinkCheckSkipEntry[];
|
|
99
|
+
/**
|
|
100
|
+
* Converts an entry into a regular expression for the `skip` list of a `linkinator` config file.
|
|
101
|
+
*
|
|
102
|
+
* Never pass it as a `--skip` argument: on Windows the command line passes through the `npx` and `.bin` shims,
|
|
103
|
+
* which re-expand it unquoted, so the `|` in it pipes into a command named by what follows.
|
|
104
|
+
*
|
|
105
|
+
* @param entry - The entry.
|
|
106
|
+
* @returns The regular expression source: an anchored prefix, or the scheme, optional credentials, the host and an
|
|
107
|
+
* optional port followed by the end of the authority.
|
|
108
|
+
*/
|
|
109
|
+
export declare function toLinkinatorSkipPattern(entry: LinkCheckSkipEntry): string;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return '/';
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: 'android'
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const existingProcess = globalThis.process;
|
|
17
|
+
|
|
18
|
+
if (!existingProcess) {
|
|
19
|
+
globalThis.process = browserProcess;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (existingProcess.versions?.node) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const existingProcessRecord = existingProcess;
|
|
28
|
+
|
|
29
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
30
|
+
existingProcessRecord[key] ??= value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
existingProcessRecord['browser'] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ensureBrowserProcess();
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
import { escapeRegExp } from "@mnaoumov/typescript-lib/reg-exp";
|
|
40
|
+
import process from "node:process";
|
|
41
|
+
import { loadEnvFileIfExists } from "./env-toggle.mjs";
|
|
42
|
+
const LINK_CHECK_SKIP_ENV_VARIABLE = "LINK_CHECK_SKIP";
|
|
43
|
+
const HOST_REG_EXP = /^[a-z\d-]+(?:\.[a-z\d-]+)*$/i;
|
|
44
|
+
const URL_REG_EXP = /\bhttps?:\/\/[^\s<>()[\]{}"'`]+/gi;
|
|
45
|
+
const URL_TRAILING_PUNCTUATION_REG_EXP = /[.,;:!?*_~]+$/;
|
|
46
|
+
function doesLinkCheckSkipEntryMatch(url, entry) {
|
|
47
|
+
return entry.kind === "prefix" ? url.startsWith(entry.value) : URL.parse(url)?.hostname === entry.value;
|
|
48
|
+
}
|
|
49
|
+
function extractUrls(text) {
|
|
50
|
+
return Array.from(text.matchAll(URL_REG_EXP), (match) => match[0].replace(URL_TRAILING_PUNCTUATION_REG_EXP, ""));
|
|
51
|
+
}
|
|
52
|
+
function getLinkCheckSkipWarnings(entries, files) {
|
|
53
|
+
const warnings = [];
|
|
54
|
+
const usedEntries = /* @__PURE__ */ new Set();
|
|
55
|
+
for (const file of files) {
|
|
56
|
+
for (const url of new Set(extractUrls(file.content))) {
|
|
57
|
+
const entry = entries.find((candidate) => doesLinkCheckSkipEntryMatch(url, candidate));
|
|
58
|
+
if (!entry) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
usedEntries.add(entry);
|
|
62
|
+
warnings.push(`WARNING: ${LINK_CHECK_SKIP_ENV_VARIABLE} skips ${url} in ${file.path} (entry ${entry.value}).`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
if (!usedEntries.has(entry)) {
|
|
67
|
+
warnings.push(`WARNING: ${LINK_CHECK_SKIP_ENV_VARIABLE} entry ${entry.value} matched no link; remove it.`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (entries.length > 0) {
|
|
71
|
+
warnings.push(
|
|
72
|
+
`WARNING: ${LINK_CHECK_SKIP_ENV_VARIABLE} is set. Set it for one command only, never in .env: a lasting skip lets links go stale unnoticed.`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return warnings;
|
|
76
|
+
}
|
|
77
|
+
function mergeLinkinatorSkipConfig(projectConfig, entries) {
|
|
78
|
+
const config = projectConfig ?? {};
|
|
79
|
+
if (typeof config !== "object" || Array.isArray(config)) {
|
|
80
|
+
throw new TypeError("The project linkinator.config.json is not a JSON object.");
|
|
81
|
+
}
|
|
82
|
+
const record = config;
|
|
83
|
+
const projectSkip = record["skip"];
|
|
84
|
+
const existingSkip = projectSkip === void 0 ? [] : [projectSkip].flat();
|
|
85
|
+
return { ...record, skip: [...existingSkip, ...entries.map((entry) => toLinkinatorSkipPattern(entry))] };
|
|
86
|
+
}
|
|
87
|
+
function parseLinkCheckSkipEntries(value) {
|
|
88
|
+
const entries = [];
|
|
89
|
+
for (const rawEntry of value.split(",")) {
|
|
90
|
+
const entry = rawEntry.trim();
|
|
91
|
+
if (entry === "") {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (entry.includes("://")) {
|
|
95
|
+
entries.push({ kind: "prefix", value: entry });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (!HOST_REG_EXP.test(entry)) {
|
|
99
|
+
throw new Error(`${LINK_CHECK_SKIP_ENV_VARIABLE} entry ${entry} is neither a host name nor a URL prefix (one holding ://).`);
|
|
100
|
+
}
|
|
101
|
+
entries.push({ kind: "host", value: entry.toLowerCase() });
|
|
102
|
+
}
|
|
103
|
+
return entries;
|
|
104
|
+
}
|
|
105
|
+
function readLinkCheckSkipEntries() {
|
|
106
|
+
loadEnvFileIfExists();
|
|
107
|
+
return parseLinkCheckSkipEntries(process.env[LINK_CHECK_SKIP_ENV_VARIABLE] ?? "");
|
|
108
|
+
}
|
|
109
|
+
function toLinkinatorSkipPattern(entry) {
|
|
110
|
+
if (entry.kind === "prefix") {
|
|
111
|
+
return `^${escapeRegExp(entry.value)}`;
|
|
112
|
+
}
|
|
113
|
+
return String.raw`^https?://(?:[^/?#@]*@)?${escapeRegExp(entry.value)}(?::\d+)?(?:[/?#]|$)`;
|
|
114
|
+
}
|
|
115
|
+
export {
|
|
116
|
+
LINK_CHECK_SKIP_ENV_VARIABLE,
|
|
117
|
+
doesLinkCheckSkipEntryMatch,
|
|
118
|
+
extractUrls,
|
|
119
|
+
getLinkCheckSkipWarnings,
|
|
120
|
+
mergeLinkinatorSkipConfig,
|
|
121
|
+
parseLinkCheckSkipEntries,
|
|
122
|
+
readLinkCheckSkipEntries,
|
|
123
|
+
toLinkinatorSkipPattern
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saW5rLWNoZWNrLXNraXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbmtzIHRoZSBtYXJrZG93biBsaW5rIGNoZWNrIGxlYXZlcyB1bmNoZWNrZWQgZm9yIG9uZSBydW4sIG5hbWVkIGJ5IHRoZSB7QGxpbmsgTElOS19DSEVDS19TS0lQX0VOVl9WQVJJQUJMRX1cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICpcbiAqIFR3byBjYXNlcyBuZWVkIGl0OiBhIGhvc3QgdGhlIGN1cnJlbnQgbmV0d29yayBjYW5ub3QgcmVhY2ggYWx0aG91Z2ggaXQgaXMgdXAgKGEgcHJvdmlkZXIgYmxvY2tpbmcgaXQpLCBhbmQgYVxuICogcmVsZWFzZSB3aG9zZSBkb2N1bWVudGF0aW9uIGxpbmtzIHRvIHNvbWV0aGluZyBvbmx5IHRoYXQgc2FtZSByZWxlYXNlIHB1c2hlcy4gQm90aCBhcmUgdGVtcG9yYXJ5LCBzbyB0aGVcbiAqIHZhcmlhYmxlIGJlbG9uZ3Mgb24gdGhlIG9uZSBjb21tYW5kIHRoYXQgbmVlZHMgaXQsIG5ldmVyIGluIGAuZW52YDogYSBza2lwIGxlZnQgaW4gcGxhY2UgbGV0cyBhIGxpbmsgZ28gc3RhbGVcbiAqIHdpdGggbm90aGluZyB0byBzYXkgc28uIEl0IGlzIHJlYWQgbGlrZSBldmVyeSBvdGhlciB2YXJpYWJsZSBoZXJlLCBgLmVudmAgaW5jbHVkZWQsIGFuZCBldmVyeSBza2lwcGVkIGxpbmssXG4gKiBsaWtlIGV2ZXJ5IGVudHJ5IHRoYXQgc2tpcHBlZCBub3RoaW5nLCBwcmludHMgYSB3YXJuaW5nLCBzbyBhIHNraXAgaXMgbmV2ZXIgc2lsZW50LlxuICpcbiAqIEVudHJpZXMgYXJlIGNvbW1hLXNlcGFyYXRlZC4gQW4gZW50cnkgaG9sZGluZyBgOi8vYCBpcyBhIFVSTCBwcmVmaXggYW5kIG1hdGNoZXMgZXZlcnkgbGluayBzdGFydGluZyB3aXRoIGl0OyBhbnlcbiAqIG90aGVyIGVudHJ5IGlzIGEgaG9zdCBhbmQgbWF0Y2hlcyB0aGUgbGlua3MgdG8gZXhhY3RseSB0aGF0IGhvc3QgKGBtYWlsLnRtYCBkb2VzIG5vdCBtYXRjaCBgZG9jcy5tYWlsLnRtYCkuXG4gKi9cblxuaW1wb3J0IHsgZXNjYXBlUmVnRXhwIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3JlZy1leHAnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHsgbG9hZEVudkZpbGVJZkV4aXN0cyB9IGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5cbi8qKlxuICogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWluZyB0aGUgbGlua3MgdG8gc2tpcC5cbiAqL1xuZXhwb3J0IGNvbnN0IExJTktfQ0hFQ0tfU0tJUF9FTlZfVkFSSUFCTEUgPSAnTElOS19DSEVDS19TS0lQJztcblxuLyoqXG4gKiBPbmUgZW50cnkgb2Yge0BsaW5rIExJTktfQ0hFQ0tfU0tJUF9FTlZfVkFSSUFCTEV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmtDaGVja1NraXBFbnRyeSB7XG4gIC8qKlxuICAgKiBgaG9zdGAgbWF0Y2hlcyBsaW5rcyB0byBleGFjdGx5IHRoYXQgaG9zdDsgYHByZWZpeGAgbWF0Y2hlcyBsaW5rcyBzdGFydGluZyB3aXRoIHtAbGluayB2YWx1ZX0uXG4gICAqL1xuICByZWFkb25seSBraW5kOiAnaG9zdCcgfCAncHJlZml4JztcblxuICAvKipcbiAgICogVGhlIGVudHJ5IGFzIHdyaXR0ZW4sIGEgaG9zdCBsb3dlcmNhc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgdGV4dCBvZiBvbmUgbWFya2Rvd24gZmlsZSB0aGUgbGluayBjaGVjayByZWFkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rQ2hlY2tTb3VyY2VGaWxlIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlJ3MgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZpbGUncyBwYXRoLCBhcyB0aGUgd2FybmluZ3MgbmFtZSBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuY29uc3QgSE9TVF9SRUdfRVhQID0gL15bYS16XFxkLV0rKD86XFwuW2EtelxcZC1dKykqJC9pO1xuY29uc3QgVVJMX1JFR19FWFAgPSAvXFxiaHR0cHM/OlxcL1xcL1teXFxzPD4oKVtcXF17fVwiJ2BdKy9naTtcbmNvbnN0IFVSTF9UUkFJTElOR19QVU5DVFVBVElPTl9SRUdfRVhQID0gL1suLDs6IT8qX35dKyQvO1xuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgYW4gZW50cnkgbWF0Y2hlcyBhIFVSTC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTC5cbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIGEgYHByZWZpeGAgZW50cnkgc3RhcnRzIHRoZSBVUkwsIG9yIGEgYGhvc3RgIGVudHJ5IGlzIGV4YWN0bHkgdGhlIFVSTCdzIGhvc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2VzTGlua0NoZWNrU2tpcEVudHJ5TWF0Y2godXJsOiBzdHJpbmcsIGVudHJ5OiBMaW5rQ2hlY2tTa2lwRW50cnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVudHJ5LmtpbmQgPT09ICdwcmVmaXgnID8gdXJsLnN0YXJ0c1dpdGgoZW50cnkudmFsdWUpIDogVVJMLnBhcnNlKHVybCk/Lmhvc3RuYW1lID09PSBlbnRyeS52YWx1ZTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgYWJzb2x1dGUgYGh0dHBgL2BodHRwc2AgVVJMcyB3cml0dGVuIGluIGEgdGV4dC5cbiAqXG4gKiBJdCBpcyBhIHRleHR1YWwgc2Nhbiwgc28gaXQgYWxzbyBmaW5kcyBhIFVSTCBpbnNpZGUgYSBjb2RlIHNwYW4sIHdoaWNoIGBsaW5raW5hdG9yYCBkb2VzIG5vdCBjaGVjay5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgVVJMcywgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSwgdHJhaWxpbmcgcHVuY3R1YXRpb24gZHJvcHBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RVcmxzKHRleHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGV4dC5tYXRjaEFsbChVUkxfUkVHX0VYUCksIChtYXRjaCkgPT4gbWF0Y2hbMF0ucmVwbGFjZShVUkxfVFJBSUxJTkdfUFVOQ1RVQVRJT05fUkVHX0VYUCwgJycpKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHdhcm5pbmdzIGZvciBhIHJ1biB3aXRoIHNraXAgZW50cmllczogb25lIHBlciBkaXN0aW5jdCBsaW5rIGVhY2ggZmlsZSBsb3NlcyB0byBhbiBlbnRyeSwgYW5kIG9uZSBwZXJcbiAqIGVudHJ5IHRoYXQgbWF0Y2hlZCBubyBsaW5rIGF0IGFsbC5cbiAqXG4gKiBAcGFyYW0gZW50cmllcyAtIFRoZSBlbnRyaWVzLCBhcyB7QGxpbmsgcGFyc2VMaW5rQ2hlY2tTa2lwRW50cmllc30gcmV0dXJuZWQgdGhlbS5cbiAqIEBwYXJhbSBmaWxlcyAtIFRoZSBtYXJrZG93biBmaWxlcyB0aGUgbGluayBjaGVjayBpcyBoYW5kZWQuXG4gKiBAcmV0dXJucyBUaGUgd2FybmluZyBsaW5lcywgd2l0aG91dCBhIHRyYWlsaW5nIG5ld2xpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5rQ2hlY2tTa2lwV2FybmluZ3MoZW50cmllczogcmVhZG9ubHkgTGlua0NoZWNrU2tpcEVudHJ5W10sIGZpbGVzOiByZWFkb25seSBMaW5rQ2hlY2tTb3VyY2VGaWxlW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCB1c2VkRW50cmllcyA9IG5ldyBTZXQ8TGlua0NoZWNrU2tpcEVudHJ5PigpO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGZvciAoY29uc3QgdXJsIG9mIG5ldyBTZXQoZXh0cmFjdFVybHMoZmlsZS5jb250ZW50KSkpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllcy5maW5kKChjYW5kaWRhdGUpID0+IGRvZXNMaW5rQ2hlY2tTa2lwRW50cnlNYXRjaCh1cmwsIGNhbmRpZGF0ZSkpO1xuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdXNlZEVudHJpZXMuYWRkKGVudHJ5KTtcbiAgICAgIHdhcm5pbmdzLnB1c2goYFdBUk5JTkc6ICR7TElOS19DSEVDS19TS0lQX0VOVl9WQVJJQUJMRX0gc2tpcHMgJHt1cmx9IGluICR7ZmlsZS5wYXRofSAoZW50cnkgJHtlbnRyeS52YWx1ZX0pLmApO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghdXNlZEVudHJpZXMuaGFzKGVudHJ5KSkge1xuICAgICAgd2FybmluZ3MucHVzaChgV0FSTklORzogJHtMSU5LX0NIRUNLX1NLSVBfRU5WX1ZBUklBQkxFfSBlbnRyeSAke2VudHJ5LnZhbHVlfSBtYXRjaGVkIG5vIGxpbms7IHJlbW92ZSBpdC5gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgd2FybmluZ3MucHVzaChcbiAgICAgIGBXQVJOSU5HOiAke0xJTktfQ0hFQ0tfU0tJUF9FTlZfVkFSSUFCTEV9IGlzIHNldC4gU2V0IGl0IGZvciBvbmUgY29tbWFuZCBvbmx5LCBuZXZlciBpbiAuZW52OiBhIGxhc3Rpbmcgc2tpcCBsZXRzIGxpbmtzIGdvIHN0YWxlIHVubm90aWNlZC5gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB3YXJuaW5ncztcbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBlbnRyaWVzIHRvIGEgYGxpbmtpbmF0b3JgIGNvbmZpZywga2VlcGluZyB3aGF0ZXZlciB0aGUgcHJvamVjdCdzIG93biBjb25maWcgYWxyZWFkeSBza2lwcy5cbiAqXG4gKiBUaGUgc2tpcCBsaXN0IGdvZXMgdG8gYGxpbmtpbmF0b3JgIGFzIGEgY29uZmlnIGZpbGUgYmVjYXVzZSBgLS1jb25maWdgIHJlcGxhY2VzIHRoZSBwcm9qZWN0J3NcbiAqIGBsaW5raW5hdG9yLmNvbmZpZy5qc29uYCByYXRoZXIgdGhhbiBhZGRpbmcgdG8gaXQsIHNvIHRoZSBwcm9qZWN0J3Mgc2V0dGluZ3MgaGF2ZSB0byBiZSBjYXJyaWVkIG92ZXIuXG4gKlxuICogQHBhcmFtIHByb2plY3RDb25maWcgLSBUaGUgcGFyc2VkIHByb2plY3QgYGxpbmtpbmF0b3IuY29uZmlnLmpzb25gLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vbmUuXG4gKiBAcGFyYW0gZW50cmllcyAtIFRoZSBlbnRyaWVzLlxuICogQHJldHVybnMgVGhlIGNvbmZpZyB0byB3cml0ZS5cbiAqIEB0aHJvd3MgSWYgdGhlIHByb2plY3QgY29uZmlnIGlzIG5vdCBhIEpTT04gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMaW5raW5hdG9yU2tpcENvbmZpZyhwcm9qZWN0Q29uZmlnOiB1bmtub3duLCBlbnRyaWVzOiByZWFkb25seSBMaW5rQ2hlY2tTa2lwRW50cnlbXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgY29uZmlnID0gcHJvamVjdENvbmZpZyA/PyB7fTtcbiAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoY29uZmlnKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBwcm9qZWN0IGxpbmtpbmF0b3IuY29uZmlnLmpzb24gaXMgbm90IGEgSlNPTiBvYmplY3QuJyk7XG4gIH1cblxuICBjb25zdCByZWNvcmQgPSBjb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHByb2plY3RTa2lwID0gcmVjb3JkWydza2lwJ107XG4gIGNvbnN0IGV4aXN0aW5nU2tpcCA9IHByb2plY3RTa2lwID09PSB1bmRlZmluZWQgPyBbXSA6IFtwcm9qZWN0U2tpcF0uZmxhdCgpO1xuICByZXR1cm4geyAuLi5yZWNvcmQsIHNraXA6IFsuLi5leGlzdGluZ1NraXAsIC4uLmVudHJpZXMubWFwKChlbnRyeSkgPT4gdG9MaW5raW5hdG9yU2tpcFBhdHRlcm4oZW50cnkpKV0gfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHZhbHVlIG9mIHtAbGluayBMSU5LX0NIRUNLX1NLSVBfRU5WX1ZBUklBQkxFfS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgY29tbWEtc2VwYXJhdGVkIHZhbHVlOyBibGFuayBlbnRyaWVzIGFyZSBpZ25vcmVkLlxuICogQHJldHVybnMgVGhlIGVudHJpZXMuXG4gKiBAdGhyb3dzIElmIGFuIGVudHJ5IGlzIG5laXRoZXIgYSBVUkwgcHJlZml4IG5vciBhIGhvc3QgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGlua0NoZWNrU2tpcEVudHJpZXModmFsdWU6IHN0cmluZyk6IExpbmtDaGVja1NraXBFbnRyeVtdIHtcbiAgY29uc3QgZW50cmllczogTGlua0NoZWNrU2tpcEVudHJ5W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJhd0VudHJ5IG9mIHZhbHVlLnNwbGl0KCcsJykpIHtcbiAgICBjb25zdCBlbnRyeSA9IHJhd0VudHJ5LnRyaW0oKTtcbiAgICBpZiAoZW50cnkgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkuaW5jbHVkZXMoJzovLycpKSB7XG4gICAgICBlbnRyaWVzLnB1c2goeyBraW5kOiAncHJlZml4JywgdmFsdWU6IGVudHJ5IH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFIT1NUX1JFR19FWFAudGVzdChlbnRyeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtMSU5LX0NIRUNLX1NLSVBfRU5WX1ZBUklBQkxFfSBlbnRyeSAke2VudHJ5fSBpcyBuZWl0aGVyIGEgaG9zdCBuYW1lIG5vciBhIFVSTCBwcmVmaXggKG9uZSBob2xkaW5nIDovLykuYCk7XG4gICAgfVxuXG4gICAgZW50cmllcy5wdXNoKHsga2luZDogJ2hvc3QnLCB2YWx1ZTogZW50cnkudG9Mb3dlckNhc2UoKSB9KTtcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBlbnRyaWVzIG9mIHtAbGluayBMSU5LX0NIRUNLX1NLSVBfRU5WX1ZBUklBQkxFfSwgbG9hZGluZyB0aGUgb3B0aW9uYWwgYC5lbnZgIGZpcnN0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBlbnRyaWVzOyBub25lIHdoZW4gdGhlIHZhcmlhYmxlIGlzIHVuc2V0IG9yIGJsYW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpbmtDaGVja1NraXBFbnRyaWVzKCk6IExpbmtDaGVja1NraXBFbnRyeVtdIHtcbiAgbG9hZEVudkZpbGVJZkV4aXN0cygpO1xuICByZXR1cm4gcGFyc2VMaW5rQ2hlY2tTa2lwRW50cmllcyhwcm9jZXNzLmVudltMSU5LX0NIRUNLX1NLSVBfRU5WX1ZBUklBQkxFXSA/PyAnJyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZW50cnkgaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdGhlIGBza2lwYCBsaXN0IG9mIGEgYGxpbmtpbmF0b3JgIGNvbmZpZyBmaWxlLlxuICpcbiAqIE5ldmVyIHBhc3MgaXQgYXMgYSBgLS1za2lwYCBhcmd1bWVudDogb24gV2luZG93cyB0aGUgY29tbWFuZCBsaW5lIHBhc3NlcyB0aHJvdWdoIHRoZSBgbnB4YCBhbmQgYC5iaW5gIHNoaW1zLFxuICogd2hpY2ggcmUtZXhwYW5kIGl0IHVucXVvdGVkLCBzbyB0aGUgYHxgIGluIGl0IHBpcGVzIGludG8gYSBjb21tYW5kIG5hbWVkIGJ5IHdoYXQgZm9sbG93cy5cbiAqXG4gKiBAcGFyYW0gZW50cnkgLSBUaGUgZW50cnkuXG4gKiBAcmV0dXJucyBUaGUgcmVndWxhciBleHByZXNzaW9uIHNvdXJjZTogYW4gYW5jaG9yZWQgcHJlZml4LCBvciB0aGUgc2NoZW1lLCBvcHRpb25hbCBjcmVkZW50aWFscywgdGhlIGhvc3QgYW5kIGFuXG4gKiBvcHRpb25hbCBwb3J0IGZvbGxvd2VkIGJ5IHRoZSBlbmQgb2YgdGhlIGF1dGhvcml0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTGlua2luYXRvclNraXBQYXR0ZXJuKGVudHJ5OiBMaW5rQ2hlY2tTa2lwRW50cnkpOiBzdHJpbmcge1xuICBpZiAoZW50cnkua2luZCA9PT0gJ3ByZWZpeCcpIHtcbiAgICByZXR1cm4gYF4ke2VzY2FwZVJlZ0V4cChlbnRyeS52YWx1ZSl9YDtcbiAgfVxuXG4gIC8vIGBsaW5raW5hdG9yYCBtYXRjaGVzIHRoZSBVUkwgaXQgaGFzIG5vcm1hbGl6ZWQsIHdob3NlIHNjaGVtZSBhbmQgaG9zdCBhcmUgbG93ZXJjYXNlIGFscmVhZHkuXG4gIHJldHVybiBTdHJpbmcucmF3YF5odHRwcz86Ly8oPzpbXi8/I0BdKkApPyR7ZXNjYXBlUmVnRXhwKGVudHJ5LnZhbHVlKX0oPzo6XFxkKyk/KD86Wy8/I118JClgO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQSxTQUFTLG9CQUFvQjtBQUM3QixPQUFPLGFBQWE7QUFFcEIsU0FBUywyQkFBMkI7QUFLN0IsTUFBTSwrQkFBK0I7QUFnQzVDLE1BQU0sZUFBZTtBQUNyQixNQUFNLGNBQWM7QUFDcEIsTUFBTSxtQ0FBbUM7QUFTbEMsU0FBUyw0QkFBNEIsS0FBYSxPQUFvQztBQUMzRixTQUFPLE1BQU0sU0FBUyxXQUFXLElBQUksV0FBVyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sR0FBRyxHQUFHLGFBQWEsTUFBTTtBQUNwRztBQVVPLFNBQVMsWUFBWSxNQUF3QjtBQUNsRCxTQUFPLE1BQU0sS0FB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
|
|
@@ -8,3 +8,14 @@ export declare const MESSAGE_ID = "preferDedent";
|
|
|
8
8
|
* ESLint rule preferring a `dedent` template over an array of string literals joined with a newline.
|
|
9
9
|
*/
|
|
10
10
|
export declare const preferDedent: Rule.RuleModule;
|
|
11
|
+
/**
|
|
12
|
+
* Options of the `prefer-dedent` rule.
|
|
13
|
+
*/
|
|
14
|
+
export interface PreferDedentOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Names of functions whose callback arguments run where the module's imports are not in scope. A join inside a
|
|
17
|
+
* function nested in the arguments of a call to one of them is not reported. A name matches a bare callee
|
|
18
|
+
* (`evalInObsidian(...)`) and the property of a member callee (`helpers.evalInObsidian(...)`).
|
|
19
|
+
*/
|
|
20
|
+
readonly ignoreInsideCallsTo?: readonly string[];
|
|
21
|
+
}
|
|
@@ -45,17 +45,24 @@ import {
|
|
|
45
45
|
} from "./import-fix.mjs";
|
|
46
46
|
import { toTSESTreeNode } from "./ts-estree-node.mjs";
|
|
47
47
|
const DEDENT_MODULE = "dedent";
|
|
48
|
+
const FUNCTION_NODE_TYPES = /* @__PURE__ */ new Set([
|
|
49
|
+
AST_NODE_TYPES.ArrowFunctionExpression,
|
|
50
|
+
AST_NODE_TYPES.FunctionDeclaration,
|
|
51
|
+
AST_NODE_TYPES.FunctionExpression
|
|
52
|
+
]);
|
|
48
53
|
const INDENT = " ";
|
|
49
54
|
const LINE_BREAK_SEPARATORS = /* @__PURE__ */ new Set(["\n", "\r\n"]);
|
|
50
55
|
const MINIMUM_ELEMENTS_WITH_A_LINE_BREAK = 2;
|
|
51
56
|
const MESSAGE_ID = "preferDedent";
|
|
52
57
|
const preferDedent = {
|
|
53
58
|
create(context) {
|
|
59
|
+
const options = context.options[0] ?? {};
|
|
60
|
+
const ignoredCalleeNames = new Set(options.ignoreInsideCallsTo);
|
|
54
61
|
return {
|
|
55
62
|
"CallExpression"(node) {
|
|
56
63
|
const callNode = toTSESTreeNode(node);
|
|
57
64
|
const joined = getJoinedStringElements(callNode);
|
|
58
|
-
if (!joined) {
|
|
65
|
+
if (!joined || isInsideIgnoredCallback(callNode, ignoredCalleeNames)) {
|
|
59
66
|
return;
|
|
60
67
|
}
|
|
61
68
|
context.report({
|
|
@@ -100,7 +107,19 @@ ${lineIndent}\``));
|
|
|
100
107
|
messages: {
|
|
101
108
|
[MESSAGE_ID]: "Write this multiline string as a `dedent` template instead of joining an array of string literals with a newline."
|
|
102
109
|
},
|
|
103
|
-
schema: [
|
|
110
|
+
schema: [
|
|
111
|
+
{
|
|
112
|
+
additionalProperties: false,
|
|
113
|
+
properties: {
|
|
114
|
+
ignoreInsideCallsTo: {
|
|
115
|
+
items: { type: "string" },
|
|
116
|
+
type: "array",
|
|
117
|
+
uniqueItems: true
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
type: "object"
|
|
121
|
+
}
|
|
122
|
+
],
|
|
104
123
|
type: "suggestion"
|
|
105
124
|
}
|
|
106
125
|
};
|
|
@@ -110,6 +129,12 @@ function escapeLineBreaks(text) {
|
|
|
110
129
|
function escapeTemplateText(text) {
|
|
111
130
|
return text.replaceAll("`", "\\`").replaceAll("${", "\\${").replaceAll("\r", String.raw`\r`);
|
|
112
131
|
}
|
|
132
|
+
function getCalleeName(callee) {
|
|
133
|
+
if (callee.type === AST_NODE_TYPES.Identifier) {
|
|
134
|
+
return callee.name;
|
|
135
|
+
}
|
|
136
|
+
return callee.type === AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === AST_NODE_TYPES.Identifier ? callee.property.name : null;
|
|
137
|
+
}
|
|
113
138
|
function getJoinedStringElements(node) {
|
|
114
139
|
const callee = node.callee;
|
|
115
140
|
if (node.optional || node.arguments.length !== 1 || callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional || callee.computed || callee.property.type !== AST_NODE_TYPES.Identifier || callee.property.name !== "join" || callee.object.type !== AST_NODE_TYPES.ArrayExpression) {
|
|
@@ -145,6 +170,24 @@ function getStaticString(node) {
|
|
|
145
170
|
}
|
|
146
171
|
return node.type === AST_NODE_TYPES.TemplateLiteral && node.expressions.length === 0 ? ensureNonNullable(node.quasis[0]).value.cooked : null;
|
|
147
172
|
}
|
|
173
|
+
function isInsideIgnoredCallback(node, ignoredCalleeNames) {
|
|
174
|
+
if (ignoredCalleeNames.size === 0) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
let isInsideFunction = false;
|
|
178
|
+
let child = node;
|
|
179
|
+
for (let parent = node.parent; parent; child = parent, parent = parent.parent) {
|
|
180
|
+
if (FUNCTION_NODE_TYPES.has(parent.type)) {
|
|
181
|
+
isInsideFunction = true;
|
|
182
|
+
} else if (isInsideFunction && parent.type === AST_NODE_TYPES.CallExpression && parent.callee !== child) {
|
|
183
|
+
const name = getCalleeName(parent.callee);
|
|
184
|
+
if (name !== null && ignoredCalleeNames.has(name)) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
148
191
|
function isStringElement(element) {
|
|
149
192
|
return element?.type === AST_NODE_TYPES.TemplateLiteral || element?.type === AST_NODE_TYPES.Literal && typeof element.value === "string";
|
|
150
193
|
}
|
|
@@ -165,4 +208,4 @@ export {
|
|
|
165
208
|
MESSAGE_ID,
|
|
166
209
|
preferDedent
|
|
167
210
|
};
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItZGVkZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcHJlZmVyLWRlZGVudFxuICpcbiAqIFJlcG9ydHMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSAoYFsnYScsICdiJ10uam9pbignXFxuJylgKSBhbmQgZml4ZXMgaXQgdG8gYSBgZGVkZW50YFxuICogdGVtcGxhdGUuIEFuIGFycmF5IGhvbGRpbmcgYW55dGhpbmcgYnV0IHN0cmluZyBhbmQgdGVtcGxhdGUgbGl0ZXJhbHMgaXMgbGVmdCBhbG9uZTogaXQgYnVpbGRzIGEgc3RyaW5nIGF0IHJ1bnRpbWUuXG4gKlxuICogVGhlIGZpeCByZXdyaXRlcyB0aGUgam9pbmVkIHRleHQgc28gdGhhdCBgZGVkZW50YCAoMS54LCB1c2VkIGFzIGEgdGFnKSByZXR1cm5zIGV4YWN0bHkgdGhlIHNhbWUgc3RyaW5nLiBJdCBydW5zIHRoZVxuICogc2FtZSBzdGVwcyBgZGVkZW50YCBkb2VzIGluIHJldmVyc2U6IGEgbGVhZGluZyBvciB0cmFpbGluZyBydW4gb2YgbGluZSBicmVha3MgYW5kIGV2ZXJ5IGNhcnJpYWdlIHJldHVybiBiZWNvbWVcbiAqIGBcXG5gIC8gYFxccmAgZXNjYXBlcywgd2hpY2ggYGRlZGVudGAgZGVjb2RlcyBvbmx5IGFmdGVyIGl0IHRyaW1zLCBhbmQgYmFja3RpY2tzIGFuZCBgJHtgIGFyZSBlc2NhcGVkLiBUZXh0IGl0IGNhbm5vdFxuICogcmVwcmVzZW50IHRoYXQgd2F5IGtlZXBzIHRoZSBkaWFnbm9zdGljIHdpdGhvdXQgYSBmaXg6IGEgYmFja3NsYXNoLCB3aGljaCBgZGVkZW50YCBwYXNzZXMgb24gcmF3OyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gKiB3aGl0ZXNwYWNlIHRoYXQgYGRlZGVudGAgd291bGQgdHJpbTsgYSB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGggZXhwcmVzc2lvbnMsIHdob3NlIHZhbHVlcyBhcmUgdW5rbm93bjsgYW5kIGNvbW1lbnRzXG4gKiBpbnNpZGUgdGhlIGNhbGwuIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSBkZWZhdWx0IGltcG9ydCBvZiBgZGVkZW50YCwgb3IgYWRkcyBvbmUgdW5kZXIgYSBmcmVlIG5hbWUuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBmaW5kVmlzaWJsZUltcG9ydE5hbWUsXG4gIGdldFVudXNlZE5hbWUsXG4gIGluc2VydEltcG9ydFxufSBmcm9tICcuL2ltcG9ydC1maXgudHMnO1xuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcblxuY29uc3QgREVERU5UX01PRFVMRSA9ICdkZWRlbnQnO1xuY29uc3QgSU5ERU5UID0gJyAgJztcbmNvbnN0IExJTkVfQlJFQUtfU0VQQVJBVE9SUyA9IG5ldyBTZXQoWydcXG4nLCAnXFxyXFxuJ10pO1xuY29uc3QgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA9IDI7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyBpcyBqb2luZWQgd2l0aCBhIG5ld2xpbmUgaW5zdGVhZCBvZiB3cml0dGVuIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3ByZWZlckRlZGVudCc7XG5cbnR5cGUgU3RyaW5nRWxlbWVudCA9IFRTRVNUcmVlLlN0cmluZ0xpdGVyYWwgfCBUU0VTVHJlZS5UZW1wbGF0ZUxpdGVyYWw7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcHJlZmVycmluZyBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZWZlckRlZGVudDogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICAnQ2FsbEV4cHJlc3Npb24nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxsTm9kZSA9IHRvVFNFU1RyZWVOb2RlKG5vZGUpIGFzIFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uO1xuICAgICAgICBjb25zdCBqb2luZWQgPSBnZXRKb2luZWRTdHJpbmdFbGVtZW50cyhjYWxsTm9kZSk7XG4gICAgICAgIGlmICgham9pbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGZpeChmaXhlcikge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuc291cmNlQ29kZTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlLmdldENvbW1lbnRzSW5zaWRlKG5vZGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0Sm9pbmVkVGV4dChqb2luZWQuZWxlbWVudHMsIGpvaW5lZC5zZXBhcmF0b3IpO1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSB0ZXh0ID09PSBudWxsID8gbnVsbCA6IHRvRGVkZW50TGluZXModGV4dCk7XG4gICAgICAgICAgICBpZiAobGluZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpeGVzOiBSdWxlLkZpeFtdID0gW107XG4gICAgICAgICAgICBsZXQgbmFtZSA9IGZpbmRWaXNpYmxlSW1wb3J0TmFtZSh7IGltcG9ydGVkTmFtZTogJ2RlZmF1bHQnLCBtb2R1bGVOYW1lOiBERURFTlRfTU9EVUxFLCBub2RlLCBzb3VyY2VDb2RlIH0pO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gQSBzY3JpcHQgY2Fubm90IGFjY2VwdCBhbiBFU00gaW1wb3J0LiBMZWF2ZSBpdHMgZGlhZ25vc3RpYyBmb3IgYSBtYW51YWwgZWRpdC5cbiAgICAgICAgICAgICAgaWYgKHNvdXJjZUNvZGUuYXN0LnNvdXJjZVR5cGUgIT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmFtZSA9IGdldFVudXNlZE5hbWUoc291cmNlQ29kZSwgJ2RlZGVudCcpO1xuICAgICAgICAgICAgICBmaXhlcy5wdXNoKGluc2VydEltcG9ydChmaXhlciwgc291cmNlQ29kZSwgYGltcG9ydCAke25hbWV9IGZyb20gJyR7REVERU5UX01PRFVMRX0nO2ApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGluZVByZWZpeCA9IHNvdXJjZUNvZGUudGV4dC5zbGljZShzb3VyY2VDb2RlLmdldEluZGV4RnJvbUxvYyh7IGNvbHVtbjogMCwgbGluZTogY2FsbE5vZGUubG9jLnN0YXJ0LmxpbmUgfSksIGNhbGxOb2RlLnJhbmdlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVJbmRlbnQgPSBsaW5lUHJlZml4LnNsaWNlKDAsIGxpbmVQcmVmaXgubGVuZ3RoIC0gbGluZVByZWZpeC50cmltU3RhcnQoKS5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGxpbmVzLm1hcCgobGluZSkgPT4gbGluZSA9PT0gJycgPyAnJyA6IGAke2xpbmVJbmRlbnR9JHtJTkRFTlR9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZXBsYWNlVGV4dChub2RlLCBgJHtuYW1lfVxcYFxcbiR7Ym9keX1cXG4ke2xpbmVJbmRlbnR9XFxgYCkpO1xuICAgICAgICAgICAgcmV0dXJuIGZpeGVzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJlZmVyIGEgYGRlZGVudGAgdGVtcGxhdGUgb3ZlciBhbiBhcnJheSBvZiBzdHJpbmcgbGl0ZXJhbHMgam9pbmVkIHdpdGggYSBuZXdsaW5lJ1xuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdXcml0ZSB0aGlzIG11bHRpbGluZSBzdHJpbmcgYXMgYSBgZGVkZW50YCB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIGpvaW5pbmcgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIHdpdGggYSBuZXdsaW5lLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbmludGVyZmFjZSBKb2luZWRTdHJpbmdFbGVtZW50cyB7XG4gIHJlYWRvbmx5IGVsZW1lbnRzOiByZWFkb25seSBTdHJpbmdFbGVtZW50W107XG4gIHJlYWRvbmx5IHNlcGFyYXRvcjogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVMaW5lQnJlYWtzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ1xccicsIFN0cmluZy5yYXdgXFxyYCkucmVwbGFjZUFsbCgnXFxuJywgU3RyaW5nLnJhd2BcXG5gKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlVGVtcGxhdGVUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ2AnLCAnXFxcXGAnKS5yZXBsYWNlQWxsKCckeycsICdcXFxcJHsnKS5yZXBsYWNlQWxsKCdcXHInLCBTdHJpbmcucmF3YFxccmApO1xufVxuXG5mdW5jdGlvbiBnZXRKb2luZWRTdHJpbmdFbGVtZW50cyhub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IEpvaW5lZFN0cmluZ0VsZW1lbnRzIHwgbnVsbCB7XG4gIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICBpZiAoXG4gICAgbm9kZS5vcHRpb25hbCB8fCBub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDFcbiAgICB8fCBjYWxsZWUudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuTWVtYmVyRXhwcmVzc2lvbiB8fCBjYWxsZWUub3B0aW9uYWwgfHwgY2FsbGVlLmNvbXB1dGVkXG4gICAgfHwgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT09ICdqb2luJ1xuICAgIHx8IGNhbGxlZS5vYmplY3QudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuQXJyYXlFeHByZXNzaW9uXG4gICkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VwYXJhdG9yID0gZ2V0U3RhdGljU3RyaW5nKGVuc3VyZU5vbk51bGxhYmxlKG5vZGUuYXJndW1lbnRzWzBdKSk7XG4gIGlmIChzZXBhcmF0b3IgPT09IG51bGwgfHwgIUxJTkVfQlJFQUtfU0VQQVJBVE9SUy5oYXMoc2VwYXJhdG9yKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudHM6IFN0cmluZ0VsZW1lbnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2FsbGVlLm9iamVjdC5lbGVtZW50cykge1xuICAgIGlmICghaXNTdHJpbmdFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgfVxuICAvLyBBIHNpbmdsZSBlbGVtZW50IGpvaW5zIHRvIGl0c2VsZjsgdGhlcmUgaXMgbm8gbGluZSBicmVhayB0byByZXdyaXRlLlxuICByZXR1cm4gZWxlbWVudHMubGVuZ3RoIDwgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA/IG51bGwgOiB7IGVsZW1lbnRzLCBzZXBhcmF0b3IgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Sm9pbmVkVGV4dChlbGVtZW50czogcmVhZG9ubHkgU3RyaW5nRWxlbWVudFtdLCBzZXBhcmF0b3I6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0U3RhdGljU3RyaW5nKGVsZW1lbnQpO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWVzLmpvaW4oc2VwYXJhdG9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGljU3RyaW5nKG5vZGU6IFRTRVNUcmVlLk5vZGUpOiBudWxsIHwgc3RyaW5nIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ3N0cmluZycgPyBub2RlLnZhbHVlIDogbnVsbDtcbiAgfVxuICAvLyBBbiB1bnRhZ2dlZCB0ZW1wbGF0ZSB3aXRoIGFuIGludmFsaWQgZXNjYXBlIGlzIGEgc3ludGF4IGVycm9yLCBzbyBpdHMgY29va2VkIHRleHQgYWx3YXlzIGV4aXN0cy5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVGVtcGxhdGVMaXRlcmFsICYmIG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwID8gZW5zdXJlTm9uTnVsbGFibGUobm9kZS5xdWFzaXNbMF0pLnZhbHVlLmNvb2tlZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nRWxlbWVudChlbGVtZW50OiBudWxsIHwgVFNFU1RyZWUuTm9kZSk6IGVsZW1lbnQgaXMgU3RyaW5nRWxlbWVudCB7XG4gIHJldHVybiBlbGVtZW50Py50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UZW1wbGF0ZUxpdGVyYWxcbiAgICB8fCAoZWxlbWVudD8udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCAmJiB0eXBlb2YgZWxlbWVudC52YWx1ZSA9PT0gJ3N0cmluZycpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGV4dCBhcyB0aGUgbGluZXMgb2YgYSBgZGVkZW50YCB0ZW1wbGF0ZSBib2R5LCBiZWZvcmUgaW5kZW50YXRpb24uXG4gKlxuICogYGRlZGVudGAgdHJpbXMgdGhlIHdob2xlIHJlc3VsdCBhbmQgb25seSB0aGVuIGRlY29kZXMgYFxcbmAgYW5kIGBcXHJgIGVzY2FwZXMsIHNvIGFuIGVkZ2UgcnVuIG9mIGxpbmUgYnJlYWtzIHN1cnZpdmVzXG4gKiB3aGVuIHdyaXR0ZW4gYXMgZXNjYXBlcywgYW5kIGFueSBvdGhlciBlZGdlIHdoaXRlc3BhY2UgZG9lcyBub3Qgc3Vydml2ZSBhdCBhbGwuIEl0IHN0cmlwcyB0aGUgc21hbGxlc3QgaW5kZW50YXRpb25cbiAqIG9mIHRoZSBsaW5lcywgYW5kIHRoZSBmaXJzdCBsaW5lIGhlcmUgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbm9uLWJsYW5rIGNoYXJhY3Rlciwgc28gZXZlcnkgbGluZSBrZWVwcyBpdHMgb3duLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdGhlIHRlbXBsYXRlIG11c3QgcHJvZHVjZS5cbiAqIEByZXR1cm5zIFRoZSBib2R5IGxpbmVzLCBvciBgbnVsbGAgd2hlbiBgZGVkZW50YCBjYW5ub3QgcHJvZHVjZSB0aGUgdGV4dCBmcm9tIGEgcGxhaW4gdGVtcGxhdGUuXG4gKi9cbmZ1bmN0aW9uIHRvRGVkZW50TGluZXModGV4dDogc3RyaW5nKTogbnVsbCB8IHN0cmluZ1tdIHtcbiAgaWYgKHRleHQuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlc3QgPSB0ZXh0LnJlcGxhY2UoL15bXFxyXFxuXSsvLCAnJyk7XG4gIGNvbnN0IGxlYWRpbmcgPSB0ZXh0LnNsaWNlKDAsIHRleHQubGVuZ3RoIC0gcmVzdC5sZW5ndGgpO1xuICBjb25zdCBjb3JlID0gcmVzdC5yZXBsYWNlKC9bXFxyXFxuXSskLywgJycpO1xuICBjb25zdCB0cmFpbGluZyA9IHJlc3Quc2xpY2UoY29yZS5sZW5ndGgpO1xuICBpZiAoY29yZSA9PT0gJycgfHwgKGxlYWRpbmcgPT09ICcnICYmIC9eXFxzLy50ZXN0KGNvcmUpKSB8fCAodHJhaWxpbmcgPT09ICcnICYmIC9cXHMkLy50ZXN0KGNvcmUpKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gVGhlIGVzY2FwZXMgaG9sZCBubyBsaW5lIGJyZWFrLCBzbyBzcGxpdHRpbmcgYWZ0ZXIgZXNjYXBpbmcgc3BsaXRzIG9ubHkgdGhlIGxpbmUgYnJlYWtzIG9mIHRoZSBjb3JlLlxuICByZXR1cm4gYCR7ZXNjYXBlTGluZUJyZWFrcyhsZWFkaW5nKX0ke2VzY2FwZVRlbXBsYXRlVGV4dChjb3JlKX0ke2VzY2FwZUxpbmVCcmVha3ModHJhaWxpbmcpfWAuc3BsaXQoJ1xcbicpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxTQUFTLHlCQUF5QjtBQUNsQyxTQUFT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
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItZGVkZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcHJlZmVyLWRlZGVudFxuICpcbiAqIFJlcG9ydHMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSAoYFsnYScsICdiJ10uam9pbignXFxuJylgKSBhbmQgZml4ZXMgaXQgdG8gYSBgZGVkZW50YFxuICogdGVtcGxhdGUuIEFuIGFycmF5IGhvbGRpbmcgYW55dGhpbmcgYnV0IHN0cmluZyBhbmQgdGVtcGxhdGUgbGl0ZXJhbHMgaXMgbGVmdCBhbG9uZTogaXQgYnVpbGRzIGEgc3RyaW5nIGF0IHJ1bnRpbWUuXG4gKlxuICogVGhlIGZpeCByZXdyaXRlcyB0aGUgam9pbmVkIHRleHQgc28gdGhhdCBgZGVkZW50YCAoMS54LCB1c2VkIGFzIGEgdGFnKSByZXR1cm5zIGV4YWN0bHkgdGhlIHNhbWUgc3RyaW5nLiBJdCBydW5zIHRoZVxuICogc2FtZSBzdGVwcyBgZGVkZW50YCBkb2VzIGluIHJldmVyc2U6IGEgbGVhZGluZyBvciB0cmFpbGluZyBydW4gb2YgbGluZSBicmVha3MgYW5kIGV2ZXJ5IGNhcnJpYWdlIHJldHVybiBiZWNvbWVcbiAqIGBcXG5gIC8gYFxccmAgZXNjYXBlcywgd2hpY2ggYGRlZGVudGAgZGVjb2RlcyBvbmx5IGFmdGVyIGl0IHRyaW1zLCBhbmQgYmFja3RpY2tzIGFuZCBgJHtgIGFyZSBlc2NhcGVkLiBUZXh0IGl0IGNhbm5vdFxuICogcmVwcmVzZW50IHRoYXQgd2F5IGtlZXBzIHRoZSBkaWFnbm9zdGljIHdpdGhvdXQgYSBmaXg6IGEgYmFja3NsYXNoLCB3aGljaCBgZGVkZW50YCBwYXNzZXMgb24gcmF3OyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gKiB3aGl0ZXNwYWNlIHRoYXQgYGRlZGVudGAgd291bGQgdHJpbTsgYSB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGggZXhwcmVzc2lvbnMsIHdob3NlIHZhbHVlcyBhcmUgdW5rbm93bjsgYW5kIGNvbW1lbnRzXG4gKiBpbnNpZGUgdGhlIGNhbGwuIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSBkZWZhdWx0IGltcG9ydCBvZiBgZGVkZW50YCwgb3IgYWRkcyBvbmUgdW5kZXIgYSBmcmVlIG5hbWUuXG4gKlxuICogVGhlIGBpZ25vcmVJbnNpZGVDYWxsc1RvYCBvcHRpb24gbmFtZXMgZnVuY3Rpb25zIHdob3NlIGNhbGxiYWNrIGFyZ3VtZW50cyBhcmUgc2VyaWFsaXplZCBhbmQgcnVuIGVsc2V3aGVyZSAoYW5cbiAqIE9ic2lkaWFuIHRlc3QncyBgZXZhbEluT2JzaWRpYW5gKSwgd2hlcmUgdGhlIG1vZHVsZSdzIGltcG9ydHMgYXJlIG5vdCBpbiBzY29wZS4gQSBqb2luIGluc2lkZSBhIGZ1bmN0aW9uIG5lc3RlZCBpblxuICogdGhlIGFyZ3VtZW50cyBvZiBzdWNoIGEgY2FsbCBpcyBub3QgcmVwb3J0ZWQsIGJlY2F1c2UgYGRlZGVudGAgY2Fubm90IGJlIHVzZWQgdGhlcmUuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBmaW5kVmlzaWJsZUltcG9ydE5hbWUsXG4gIGdldFVudXNlZE5hbWUsXG4gIGluc2VydEltcG9ydFxufSBmcm9tICcuL2ltcG9ydC1maXgudHMnO1xuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcblxuY29uc3QgREVERU5UX01PRFVMRSA9ICdkZWRlbnQnO1xuY29uc3QgRlVOQ1RJT05fTk9ERV9UWVBFUzogUmVhZG9ubHlTZXQ8QVNUX05PREVfVFlQRVM+ID0gbmV3IFNldChbXG4gIEFTVF9OT0RFX1RZUEVTLkFycm93RnVuY3Rpb25FeHByZXNzaW9uLFxuICBBU1RfTk9ERV9UWVBFUy5GdW5jdGlvbkRlY2xhcmF0aW9uLFxuICBBU1RfTk9ERV9UWVBFUy5GdW5jdGlvbkV4cHJlc3Npb25cbl0pO1xuY29uc3QgSU5ERU5UID0gJyAgJztcbmNvbnN0IExJTkVfQlJFQUtfU0VQQVJBVE9SUyA9IG5ldyBTZXQoWydcXG4nLCAnXFxyXFxuJ10pO1xuY29uc3QgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA9IDI7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyBpcyBqb2luZWQgd2l0aCBhIG5ld2xpbmUgaW5zdGVhZCBvZiB3cml0dGVuIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3ByZWZlckRlZGVudCc7XG5cbnR5cGUgU3RyaW5nRWxlbWVudCA9IFRTRVNUcmVlLlN0cmluZ0xpdGVyYWwgfCBUU0VTVHJlZS5UZW1wbGF0ZUxpdGVyYWw7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcHJlZmVycmluZyBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZWZlckRlZGVudDogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSAoY29udGV4dC5vcHRpb25zWzBdID8/IHt9KSBhcyBQcmVmZXJEZWRlbnRPcHRpb25zO1xuICAgIGNvbnN0IGlnbm9yZWRDYWxsZWVOYW1lcyA9IG5ldyBTZXQob3B0aW9ucy5pZ25vcmVJbnNpZGVDYWxsc1RvKTtcbiAgICByZXR1cm4ge1xuICAgICAgJ0NhbGxFeHByZXNzaW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FsbE5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgY29uc3Qgam9pbmVkID0gZ2V0Sm9pbmVkU3RyaW5nRWxlbWVudHMoY2FsbE5vZGUpO1xuICAgICAgICBpZiAoIWpvaW5lZCB8fCBpc0luc2lkZUlnbm9yZWRDYWxsYmFjayhjYWxsTm9kZSwgaWdub3JlZENhbGxlZU5hbWVzKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LnNvdXJjZUNvZGU7XG4gICAgICAgICAgICBpZiAoc291cmNlQ29kZS5nZXRDb21tZW50c0luc2lkZShub2RlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGdldEpvaW5lZFRleHQoam9pbmVkLmVsZW1lbnRzLCBqb2luZWQuc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGV4dCA9PT0gbnVsbCA/IG51bGwgOiB0b0RlZGVudExpbmVzKHRleHQpO1xuICAgICAgICAgICAgaWYgKGxpbmVzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaXhlczogUnVsZS5GaXhbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IG5hbWUgPSBmaW5kVmlzaWJsZUltcG9ydE5hbWUoeyBpbXBvcnRlZE5hbWU6ICdkZWZhdWx0JywgbW9kdWxlTmFtZTogREVERU5UX01PRFVMRSwgbm9kZSwgc291cmNlQ29kZSB9KTtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIEEgc2NyaXB0IGNhbm5vdCBhY2NlcHQgYW4gRVNNIGltcG9ydC4gTGVhdmUgaXRzIGRpYWdub3N0aWMgZm9yIGEgbWFudWFsIGVkaXQuXG4gICAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlLmFzdC5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG5hbWUgPSBnZXRVbnVzZWROYW1lKHNvdXJjZUNvZGUsICdkZWRlbnQnKTtcbiAgICAgICAgICAgICAgZml4ZXMucHVzaChpbnNlcnRJbXBvcnQoZml4ZXIsIHNvdXJjZUNvZGUsIGBpbXBvcnQgJHtuYW1lfSBmcm9tICcke0RFREVOVF9NT0RVTEV9JztgKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmVQcmVmaXggPSBzb3VyY2VDb2RlLnRleHQuc2xpY2Uoc291cmNlQ29kZS5nZXRJbmRleEZyb21Mb2MoeyBjb2x1bW46IDAsIGxpbmU6IGNhbGxOb2RlLmxvYy5zdGFydC5saW5lIH0pLCBjYWxsTm9kZS5yYW5nZVswXSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lSW5kZW50ID0gbGluZVByZWZpeC5zbGljZSgwLCBsaW5lUHJlZml4Lmxlbmd0aCAtIGxpbmVQcmVmaXgudHJpbVN0YXJ0KCkubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBsaW5lcy5tYXAoKGxpbmUpID0+IGxpbmUgPT09ICcnID8gJycgOiBgJHtsaW5lSW5kZW50fSR7SU5ERU5UfSR7bGluZX1gKS5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHQobm9kZSwgYCR7bmFtZX1cXGBcXG4ke2JvZHl9XFxuJHtsaW5lSW5kZW50fVxcYGApKTtcbiAgICAgICAgICAgIHJldHVybiBmaXhlcztcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICAgICAgICBub2RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ByZWZlciBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSdcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnV3JpdGUgdGhpcyBtdWx0aWxpbmUgc3RyaW5nIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUgaW5zdGVhZCBvZiBqb2luaW5nIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyB3aXRoIGEgbmV3bGluZS4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaWdub3JlSW5zaWRlQ2FsbHNUbzoge1xuICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ29iamVjdCdcbiAgICAgIH1cbiAgICBdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgb2YgdGhlIGBwcmVmZXItZGVkZW50YCBydWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZWZlckRlZGVudE9wdGlvbnMge1xuICAvKipcbiAgICogTmFtZXMgb2YgZnVuY3Rpb25zIHdob3NlIGNhbGxiYWNrIGFyZ3VtZW50cyBydW4gd2hlcmUgdGhlIG1vZHVsZSdzIGltcG9ydHMgYXJlIG5vdCBpbiBzY29wZS4gQSBqb2luIGluc2lkZSBhXG4gICAqIGZ1bmN0aW9uIG5lc3RlZCBpbiB0aGUgYXJndW1lbnRzIG9mIGEgY2FsbCB0byBvbmUgb2YgdGhlbSBpcyBub3QgcmVwb3J0ZWQuIEEgbmFtZSBtYXRjaGVzIGEgYmFyZSBjYWxsZWVcbiAgICogKGBldmFsSW5PYnNpZGlhbiguLi4pYCkgYW5kIHRoZSBwcm9wZXJ0eSBvZiBhIG1lbWJlciBjYWxsZWUgKGBoZWxwZXJzLmV2YWxJbk9ic2lkaWFuKC4uLilgKS5cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUluc2lkZUNhbGxzVG8/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEpvaW5lZFN0cmluZ0VsZW1lbnRzIHtcbiAgcmVhZG9ubHkgZWxlbWVudHM6IHJlYWRvbmx5IFN0cmluZ0VsZW1lbnRbXTtcbiAgcmVhZG9ubHkgc2VwYXJhdG9yOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUxpbmVCcmVha3ModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxyJywgU3RyaW5nLnJhd2BcXHJgKS5yZXBsYWNlQWxsKCdcXG4nLCBTdHJpbmcucmF3YFxcbmApO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVUZW1wbGF0ZVRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnYCcsICdcXFxcYCcpLnJlcGxhY2VBbGwoJyR7JywgJ1xcXFwkeycpLnJlcGxhY2VBbGwoJ1xccicsIFN0cmluZy5yYXdgXFxyYCk7XG59XG5cbmZ1bmN0aW9uIGdldENhbGxlZU5hbWUoY2FsbGVlOiBUU0VTVHJlZS5FeHByZXNzaW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGlmIChjYWxsZWUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllcikge1xuICAgIHJldHVybiBjYWxsZWUubmFtZTtcbiAgfVxuICByZXR1cm4gY2FsbGVlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLk1lbWJlckV4cHJlc3Npb24gJiYgIWNhbGxlZS5jb21wdXRlZCAmJiBjYWxsZWUucHJvcGVydHkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllclxuICAgID8gY2FsbGVlLnByb3BlcnR5Lm5hbWVcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEpvaW5lZFN0cmluZ0VsZW1lbnRzKG5vZGU6IFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uKTogSm9pbmVkU3RyaW5nRWxlbWVudHMgfCBudWxsIHtcbiAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gIGlmIChcbiAgICBub2RlLm9wdGlvbmFsIHx8IG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPT0gMVxuICAgIHx8IGNhbGxlZS50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5NZW1iZXJFeHByZXNzaW9uIHx8IGNhbGxlZS5vcHRpb25hbCB8fCBjYWxsZWUuY29tcHV0ZWRcbiAgICB8fCBjYWxsZWUucHJvcGVydHkudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllciB8fCBjYWxsZWUucHJvcGVydHkubmFtZSAhPT0gJ2pvaW4nXG4gICAgfHwgY2FsbGVlLm9iamVjdC50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5BcnJheUV4cHJlc3Npb25cbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzZXBhcmF0b3IgPSBnZXRTdGF0aWNTdHJpbmcoZW5zdXJlTm9uTnVsbGFibGUobm9kZS5hcmd1bWVudHNbMF0pKTtcbiAgaWYgKHNlcGFyYXRvciA9PT0gbnVsbCB8fCAhTElORV9CUkVBS19TRVBBUkFUT1JTLmhhcyhzZXBhcmF0b3IpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBlbGVtZW50czogU3RyaW5nRWxlbWVudFtdID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBjYWxsZWUub2JqZWN0LmVsZW1lbnRzKSB7XG4gICAgaWYgKCFpc1N0cmluZ0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICB9XG4gIC8vIEEgc2luZ2xlIGVsZW1lbnQgam9pbnMgdG8gaXRzZWxmOyB0aGVyZSBpcyBubyBsaW5lIGJyZWFrIHRvIHJld3JpdGUuXG4gIHJldHVybiBlbGVtZW50cy5sZW5ndGggPCBNSU5JTVVNX0VMRU1FTlRTX1dJVEhfQV9MSU5FX0JSRUFLID8gbnVsbCA6IHsgZWxlbWVudHMsIHNlcGFyYXRvciB9O1xufVxuXG5mdW5jdGlvbiBnZXRKb2luZWRUZXh0KGVsZW1lbnRzOiByZWFkb25seSBTdHJpbmdFbGVtZW50W10sIHNlcGFyYXRvcjogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRTdGF0aWNTdHJpbmcoZWxlbWVudCk7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0aWNTdHJpbmcobm9kZTogVFNFU1RyZWUuTm9kZSk6IG51bGwgfCBzdHJpbmcge1xuICBpZiAobm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5MaXRlcmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBub2RlLnZhbHVlID09PSAnc3RyaW5nJyA/IG5vZGUudmFsdWUgOiBudWxsO1xuICB9XG4gIC8vIEFuIHVudGFnZ2VkIHRlbXBsYXRlIHdpdGggYW4gaW52YWxpZCBlc2NhcGUgaXMgYSBzeW50YXggZXJyb3IsIHNvIGl0cyBjb29rZWQgdGV4dCBhbHdheXMgZXhpc3RzLlxuICByZXR1cm4gbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UZW1wbGF0ZUxpdGVyYWwgJiYgbm9kZS5leHByZXNzaW9ucy5sZW5ndGggPT09IDAgPyBlbnN1cmVOb25OdWxsYWJsZShub2RlLnF1YXNpc1swXSkudmFsdWUuY29va2VkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNJbnNpZGVJZ25vcmVkQ2FsbGJhY2sobm9kZTogVFNFU1RyZWUuTm9kZSwgaWdub3JlZENhbGxlZU5hbWVzOiBSZWFkb25seVNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gIGlmIChpZ25vcmVkQ2FsbGVlTmFtZXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBsZXQgaXNJbnNpZGVGdW5jdGlvbiA9IGZhbHNlO1xuICBsZXQgY2hpbGQgPSBub2RlO1xuICBmb3IgKGxldCBwYXJlbnQgPSBub2RlLnBhcmVudDsgcGFyZW50OyBjaGlsZCA9IHBhcmVudCwgcGFyZW50ID0gcGFyZW50LnBhcmVudCkge1xuICAgIGlmIChGVU5DVElPTl9OT0RFX1RZUEVTLmhhcyhwYXJlbnQudHlwZSkpIHtcbiAgICAgIGlzSW5zaWRlRnVuY3Rpb24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXNJbnNpZGVGdW5jdGlvbiAmJiBwYXJlbnQudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuQ2FsbEV4cHJlc3Npb24gJiYgcGFyZW50LmNhbGxlZSAhPT0gY2hpbGQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBnZXRDYWxsZWVOYW1lKHBhcmVudC5jYWxsZWUpO1xuICAgICAgaWYgKG5hbWUgIT09IG51bGwgJiYgaWdub3JlZENhbGxlZU5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZ0VsZW1lbnQoZWxlbWVudDogbnVsbCB8IFRTRVNUcmVlLk5vZGUpOiBlbGVtZW50IGlzIFN0cmluZ0VsZW1lbnQge1xuICByZXR1cm4gZWxlbWVudD8udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVGVtcGxhdGVMaXRlcmFsXG4gICAgfHwgKGVsZW1lbnQ/LnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkxpdGVyYWwgJiYgdHlwZW9mIGVsZW1lbnQudmFsdWUgPT09ICdzdHJpbmcnKTtcbn1cblxuLyoqXG4gKiBFbmNvZGVzIHRleHQgYXMgdGhlIGxpbmVzIG9mIGEgYGRlZGVudGAgdGVtcGxhdGUgYm9keSwgYmVmb3JlIGluZGVudGF0aW9uLlxuICpcbiAqIGBkZWRlbnRgIHRyaW1zIHRoZSB3aG9sZSByZXN1bHQgYW5kIG9ubHkgdGhlbiBkZWNvZGVzIGBcXG5gIGFuZCBgXFxyYCBlc2NhcGVzLCBzbyBhbiBlZGdlIHJ1biBvZiBsaW5lIGJyZWFrcyBzdXJ2aXZlc1xuICogd2hlbiB3cml0dGVuIGFzIGVzY2FwZXMsIGFuZCBhbnkgb3RoZXIgZWRnZSB3aGl0ZXNwYWNlIGRvZXMgbm90IHN1cnZpdmUgYXQgYWxsLiBJdCBzdHJpcHMgdGhlIHNtYWxsZXN0IGluZGVudGF0aW9uXG4gKiBvZiB0aGUgbGluZXMsIGFuZCB0aGUgZmlyc3QgbGluZSBoZXJlIGFsd2F5cyBzdGFydHMgd2l0aCBhIG5vbi1ibGFuayBjaGFyYWN0ZXIsIHNvIGV2ZXJ5IGxpbmUga2VlcHMgaXRzIG93bi5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRoZSB0ZW1wbGF0ZSBtdXN0IHByb2R1Y2UuXG4gKiBAcmV0dXJucyBUaGUgYm9keSBsaW5lcywgb3IgYG51bGxgIHdoZW4gYGRlZGVudGAgY2Fubm90IHByb2R1Y2UgdGhlIHRleHQgZnJvbSBhIHBsYWluIHRlbXBsYXRlLlxuICovXG5mdW5jdGlvbiB0b0RlZGVudExpbmVzKHRleHQ6IHN0cmluZyk6IG51bGwgfCBzdHJpbmdbXSB7XG4gIGlmICh0ZXh0LmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZXN0ID0gdGV4dC5yZXBsYWNlKC9eW1xcclxcbl0rLywgJycpO1xuICBjb25zdCBsZWFkaW5nID0gdGV4dC5zbGljZSgwLCB0ZXh0Lmxlbmd0aCAtIHJlc3QubGVuZ3RoKTtcbiAgY29uc3QgY29yZSA9IHJlc3QucmVwbGFjZSgvW1xcclxcbl0rJC8sICcnKTtcbiAgY29uc3QgdHJhaWxpbmcgPSByZXN0LnNsaWNlKGNvcmUubGVuZ3RoKTtcbiAgaWYgKGNvcmUgPT09ICcnIHx8IChsZWFkaW5nID09PSAnJyAmJiAvXlxccy8udGVzdChjb3JlKSkgfHwgKHRyYWlsaW5nID09PSAnJyAmJiAvXFxzJC8udGVzdChjb3JlKSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFRoZSBlc2NhcGVzIGhvbGQgbm8gbGluZSBicmVhaywgc28gc3BsaXR0aW5nIGFmdGVyIGVzY2FwaW5nIHNwbGl0cyBvbmx5IHRoZSBsaW5lIGJyZWFrcyBvZiB0aGUgY29yZS5cbiAgcmV0dXJuIGAke2VzY2FwZUxpbmVCcmVha3MobGVhZGluZyl9JHtlc2NhcGVUZW1wbGF0ZVRleHQoY29yZSl9JHtlc2NhcGVMaW5lQnJlYWtzKHRyYWlsaW5nKX1gLnNwbGl0KCdcXG4nKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkEsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxzQkFBc0I7QUFFL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxzQkFBc0I7QUFFL0IsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxzQkFBbUQsb0JBQUksSUFBSTtBQUFBLEVBQy9ELGVBQWU7QUFBQSxFQUNmLGVBQWU7QUFBQSxFQUNmLGVBQWU7QUFDakIsQ0FBQztBQUNELE1BQU0sU0FBUztBQUNmLE1BQU0sd0JBQXdCLG9CQUFJLElBQUksQ0FB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
|