obsidian-dev-utils 1.7.7 → 2.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 +10 -0
- package/dist/lib/@types/compare-versions.d.ts +37 -0
- package/dist/lib/JSON.cjs +2 -5
- package/dist/lib/Npm.cjs +1 -1
- package/dist/lib/Npm.d.ts +1 -0
- package/dist/lib/Root.cjs +4 -13
- package/dist/lib/Root.d.ts +0 -9
- package/dist/lib/_dependencies.cjs +49643 -0
- package/dist/lib/_dependencies.d.ts +6 -0
- package/dist/lib/bin/ESLint/@types/@stylistic__eslint-plugin.d.ts +16 -0
- package/dist/lib/bin/ESLint/@types/@typescript-eslint__eslint-plugin.d.ts +27 -0
- package/dist/lib/bin/ESLint/@types/@typescript-eslint__parser.d.ts +16 -0
- package/dist/lib/bin/ESLint/@types/eslint-plugin-deprecation.d.ts +17 -0
- package/dist/lib/bin/ESLint/@types/eslint-plugin-import.d.ts +15 -0
- package/dist/lib/bin/ESLint/@types/eslint-plugin-modules-newlines.d.ts +15 -0
- package/dist/lib/bin/ESLint/@types/globals.d.ts +22 -0
- package/dist/lib/bin/ESLint/ESLint.cjs +5 -6
- package/dist/lib/bin/ESLint/eslint.config.cjs +4 -2
- package/dist/lib/bin/ObsidianDevUtilsRepoPaths.cjs +2 -1
- package/dist/lib/bin/ObsidianDevUtilsRepoPaths.d.ts +2 -0
- package/dist/lib/bin/cli.cjs +2 -2
- package/dist/lib/bin/esbuild/Dependency.cjs +125 -0
- package/dist/lib/bin/esbuild/Dependency.d.ts +18 -0
- package/dist/lib/bin/esbuild/ObsidianPluginBuilder.cjs +1 -1
- package/dist/lib/bin/esbuild/index.cjs +4 -1
- package/dist/lib/bin/esbuild/index.d.ts +1 -0
- package/dist/lib/bin/esbuild/renameToCjsPlugin.cjs +15 -3
- package/dist/lib/bin/esbuild/renameToCjsPlugin.d.ts +2 -1
- package/dist/lib/bin/spellcheck.cjs +3 -4
- package/dist/lib/bin/version.cjs +13 -1
- package/dist/lib/obsidian/@types/Dataview/api/data-array.d.ts +134 -0
- package/dist/lib/obsidian/@types/Dataview/api/extensions.d.ts +15 -0
- package/dist/lib/obsidian/@types/Dataview/api/inline-api.d.ts +165 -0
- package/dist/lib/obsidian/@types/Dataview/api/plugin-api.d.ts +192 -0
- package/dist/lib/obsidian/@types/Dataview/api/result.d.ts +38 -0
- package/dist/lib/obsidian/@types/Dataview/data-import/common.d.ts +3 -0
- package/dist/lib/obsidian/@types/Dataview/data-import/csv.d.ts +3 -0
- package/dist/lib/obsidian/@types/Dataview/data-import/inline-field.d.ts +42 -0
- package/dist/lib/obsidian/@types/Dataview/data-import/markdown-file.d.ts +36 -0
- package/dist/lib/obsidian/@types/Dataview/data-import/persister.d.ts +32 -0
- package/dist/lib/obsidian/@types/Dataview/data-import/web-worker/import-entry.d.ts +1 -0
- package/dist/lib/obsidian/@types/Dataview/data-import/web-worker/import-impl.d.ts +3 -0
- package/dist/lib/obsidian/@types/Dataview/data-import/web-worker/import-manager.d.ts +32 -0
- package/dist/lib/obsidian/@types/Dataview/data-index/index.d.ts +179 -0
- package/dist/lib/obsidian/@types/Dataview/data-index/resolver.d.ts +20 -0
- package/dist/lib/obsidian/@types/Dataview/data-index/source.d.ts +71 -0
- package/dist/lib/obsidian/@types/Dataview/data-model/markdown.d.ts +109 -0
- package/dist/lib/obsidian/@types/Dataview/data-model/serialized/markdown.d.ts +103 -0
- package/dist/lib/obsidian/@types/Dataview/data-model/transferable.d.ts +7 -0
- package/dist/lib/obsidian/@types/Dataview/data-model/value.d.ts +148 -0
- package/dist/lib/obsidian/@types/Dataview/expression/binaryop.d.ts +29 -0
- package/dist/lib/obsidian/@types/Dataview/expression/context.d.ts +43 -0
- package/dist/lib/obsidian/@types/Dataview/expression/field.d.ts +82 -0
- package/dist/lib/obsidian/@types/Dataview/expression/functions.d.ts +137 -0
- package/dist/lib/obsidian/@types/Dataview/expression/parse.d.ts +143 -0
- package/dist/lib/obsidian/@types/Dataview/index.d.ts +21 -0
- package/dist/lib/obsidian/@types/Dataview/main.d.ts +44 -0
- package/dist/lib/obsidian/@types/Dataview/query/engine.d.ts +87 -0
- package/dist/lib/obsidian/@types/Dataview/query/parse.d.ts +31 -0
- package/dist/lib/obsidian/@types/Dataview/query/query.d.ts +95 -0
- package/dist/lib/obsidian/@types/Dataview/settings.d.ts +60 -0
- package/dist/lib/obsidian/@types/Dataview/typings/obsidian-ex.d.ts +28 -0
- package/dist/lib/obsidian/@types/Dataview/typings/workers.d.ts +4 -0
- package/dist/lib/obsidian/@types/Dataview/ui/export/markdown.d.ts +9 -0
- package/dist/lib/obsidian/@types/Dataview/ui/lp-render.d.ts +24 -0
- package/dist/lib/obsidian/@types/Dataview/ui/markdown.d.ts +73 -0
- package/dist/lib/obsidian/@types/Dataview/ui/refreshable-view.d.ts +15 -0
- package/dist/lib/obsidian/@types/Dataview/ui/render.d.ts +12 -0
- package/dist/lib/obsidian/@types/Dataview/ui/views/calendar-view.d.ts +17 -0
- package/dist/lib/obsidian/@types/Dataview/ui/views/inline-field-live-preview.d.ts +29 -0
- package/dist/lib/obsidian/@types/Dataview/ui/views/inline-view.d.ts +19 -0
- package/dist/lib/obsidian/@types/Dataview/ui/views/js-view.d.ts +23 -0
- package/dist/lib/obsidian/@types/Dataview/ui/views/list-view.d.ts +25 -0
- package/dist/lib/obsidian/@types/Dataview/ui/views/table-view.d.ts +28 -0
- package/dist/lib/obsidian/@types/Dataview/ui/views/task-view.d.ts +39 -0
- package/dist/lib/obsidian/@types/Dataview/util/hash.d.ts +1 -0
- package/dist/lib/obsidian/@types/Dataview/util/locale.d.ts +2 -0
- package/dist/lib/obsidian/@types/Dataview/util/media.d.ts +6 -0
- package/dist/lib/obsidian/@types/Dataview/util/normalize.d.ts +41 -0
- package/dist/lib/obsidian/Dataview.cjs +1 -1
- package/dist/lib/obsidian/Dataview.d.ts +2 -2
- package/package.json +156 -14
|
@@ -27,13 +27,18 @@ __export(renameToCjsPlugin_exports, {
|
|
|
27
27
|
});
|
|
28
28
|
module.exports = __toCommonJS(renameToCjsPlugin_exports);
|
|
29
29
|
var import_promises = require("node:fs/promises");
|
|
30
|
+
var import_String = require("../../String.cjs");
|
|
31
|
+
var import_Path = require("../../Path.cjs");
|
|
32
|
+
var import_Root = require("../../Root.cjs");
|
|
33
|
+
var import_ObsidianDevUtilsRepoPaths = require("../ObsidianDevUtilsRepoPaths.cjs");
|
|
30
34
|
var __import_meta_url = globalThis["import.meta.url"] ?? (() => require("node:url").pathToFileURL(__filename))();
|
|
31
35
|
var __process = globalThis["process"] ?? {
|
|
32
36
|
"cwd": () => "/",
|
|
33
37
|
"env": {},
|
|
34
38
|
"platform": "android"
|
|
35
39
|
};
|
|
36
|
-
function renameToCjsPlugin() {
|
|
40
|
+
function renameToCjsPlugin(dependenciesToSkip) {
|
|
41
|
+
const dependenciesPath = (0, import_Root.resolvePathFromRoot)(import_ObsidianDevUtilsRepoPaths.ObsidianDevUtilsRepoPaths.DistLibDependenciesCjs);
|
|
37
42
|
return {
|
|
38
43
|
name: "rename-to-cjs",
|
|
39
44
|
setup(build) {
|
|
@@ -44,8 +49,15 @@ function renameToCjsPlugin() {
|
|
|
44
49
|
}
|
|
45
50
|
const newPath = file.path.replaceAll(/\.js$/g, ".cjs");
|
|
46
51
|
const newText = file.text.replaceAll(/require\("(.+?)"\)/g, (_, importPath) => {
|
|
52
|
+
const importPath1 = (0, import_String.trimStart)(importPath, "node:");
|
|
53
|
+
const importPath2 = importPath1.split("/")[0];
|
|
54
|
+
if (importPath[0] !== "." && !dependenciesToSkip.has(importPath1) && !dependenciesToSkip.has(importPath2)) {
|
|
55
|
+
const relativeDependenciesPath = (0, import_Path.normalizeIfRelative)((0, import_Path.relative)((0, import_Path.dirname)((0, import_Path.toPosixPath)(file.path)), dependenciesPath));
|
|
56
|
+
const importPathVariable = (0, import_String.makeValidVariableName)(importPath);
|
|
57
|
+
return `require("./../../_dependencies.cjs").__relativeDependenciesPath_.default ?? require("./../../_dependencies.cjs").__relativeDependenciesPath_.${importPathVariable}.default ?? require("./../../_dependencies.cjs").__relativeDependenciesPath_.default ?? require("./../../_dependencies.cjs").__relativeDependenciesPath_.${importPathVariable}`;
|
|
58
|
+
}
|
|
47
59
|
const cjsImportPath = importPath.replaceAll(/\.ts$/g, ".cjs");
|
|
48
|
-
return `require("
|
|
60
|
+
return `require("./../../_dependencies.cjs").__cjsImportPath_.default ?? require("./../../_dependencies.cjs").__cjsImportPath_`;
|
|
49
61
|
});
|
|
50
62
|
await (0, import_promises.writeFile)(newPath, newText);
|
|
51
63
|
}
|
|
@@ -57,4 +69,4 @@ function renameToCjsPlugin() {
|
|
|
57
69
|
0 && (module.exports = {
|
|
58
70
|
renameToCjsPlugin
|
|
59
71
|
});
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2Jpbi9lc2J1aWxkL3JlbmFtZVRvQ2pzUGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzW1wiaW1wb3J0Lm1ldGEudXJsXCJdID8/ICgoKT0+cmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkpKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2Jpbi9lc2J1aWxkL3JlbmFtZVRvQ2pzUGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzW1wiaW1wb3J0Lm1ldGEudXJsXCJdID8/ICgoKT0+cmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkpKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAZmlsZVxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IHJlbmFtZXMgSmF2YVNjcmlwdCBmaWxlcyB0byBDb21tb25KUyAoYC5janNgKSBmaWxlcyBhZnRlciB0aGUgYnVpbGQgcHJvY2Vzcy5cbiAqIEl0IGFsc28gYWRqdXN0cyB0aGUgYHJlcXVpcmVgIHN0YXRlbWVudHMgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgQ29tbW9uSlMgZm9ybWF0LCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nXG4gKiB3aXRoIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgdG8gYmUgc2tpcHBlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gXCJlc2J1aWxkXCI7XG5pbXBvcnQgeyB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHtcbiAgbWFrZVZhbGlkVmFyaWFibGVOYW1lLFxuICB0cmltU3RhcnRcbn0gZnJvbSBcIi4uLy4uL1N0cmluZy50c1wiO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgbm9ybWFsaXplSWZSZWxhdGl2ZSxcbiAgcmVsYXRpdmUsXG4gIHRvUG9zaXhQYXRoXG59IGZyb20gXCIuLi8uLi9QYXRoLnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290IH0gZnJvbSBcIi4uLy4uL1Jvb3QudHNcIjtcbmltcG9ydCB7IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMgfSBmcm9tIFwiLi4vT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy50c1wiO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXNidWlsZCBwbHVnaW4gdGhhdCByZW5hbWVzIEphdmFTY3JpcHQgZmlsZXMgdG8gQ29tbW9uSlMgKGAuY2pzYCkgZmlsZXNcbiAqIGFuZCBtb2RpZmllcyBgcmVxdWlyZWAgc3RhdGVtZW50cyB0byBlbnN1cmUgcHJvcGVyIG1vZHVsZSByZXNvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXNUb1NraXAgLSBBIHNldCBvZiBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgbm90IGJlIGJ1bmRsZWQuXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGBQbHVnaW5gIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhlIHJlbmFtaW5nIGFuZCBtb2RpZmljYXRpb24gb2Ygb3V0cHV0IGZpbGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lVG9DanNQbHVnaW4oZGVwZW5kZW5jaWVzVG9Ta2lwOiBTZXQ8c3RyaW5nPik6IFBsdWdpbiB7XG4gIGNvbnN0IGRlcGVuZGVuY2llc1BhdGggPSByZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdExpYkRlcGVuZGVuY2llc0Nqcyk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJyZW5hbWUtdG8tY2pzXCIsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLm9uRW5kKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHJlc3VsdC5vdXRwdXRGaWxlcyA/PyBbXSkge1xuICAgICAgICAgIGlmICghZmlsZS5wYXRoLmVuZHNXaXRoKFwiLmpzXCIpIHx8IGZpbGUucGF0aC5lbmRzV2l0aChcIi5kLmpzXCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBuZXdQYXRoID0gZmlsZS5wYXRoLnJlcGxhY2VBbGwoL1xcLmpzJC9nLCBcIi5janNcIik7XG5cbiAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gZmlsZS50ZXh0LnJlcGxhY2VBbGwoL3JlcXVpcmVcXChcIiguKz8pXCJcXCkvZywgKF8sIGltcG9ydFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0UGF0aDEgPSB0cmltU3RhcnQoaW1wb3J0UGF0aCwgXCJub2RlOlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydFBhdGgyID0gaW1wb3J0UGF0aDEuc3BsaXQoXCIvXCIpWzBdITtcblxuICAgICAgICAgICAgaWYgKGltcG9ydFBhdGhbMF0gIT09IFwiLlwiICYmICFkZXBlbmRlbmNpZXNUb1NraXAuaGFzKGltcG9ydFBhdGgxKSAmJiAhZGVwZW5kZW5jaWVzVG9Ta2lwLmhhcyhpbXBvcnRQYXRoMikpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVEZXBlbmRlbmNpZXNQYXRoID0gbm9ybWFsaXplSWZSZWxhdGl2ZShyZWxhdGl2ZShkaXJuYW1lKHRvUG9zaXhQYXRoKGZpbGUucGF0aCkpLCBkZXBlbmRlbmNpZXNQYXRoKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGltcG9ydFBhdGhWYXJpYWJsZSA9IG1ha2VWYWxpZFZhcmlhYmxlTmFtZShpbXBvcnRQYXRoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGByZXF1aXJlKFwiJHtyZWxhdGl2ZURlcGVuZGVuY2llc1BhdGh9XCIpLiR7aW1wb3J0UGF0aFZhcmlhYmxlfS5kZWZhdWx0ID8/IHJlcXVpcmUoXCIke3JlbGF0aXZlRGVwZW5kZW5jaWVzUGF0aH1cIikuJHtpbXBvcnRQYXRoVmFyaWFibGV9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2pzSW1wb3J0UGF0aCA9IGltcG9ydFBhdGgucmVwbGFjZUFsbCgvXFwudHMkL2csIFwiLmNqc1wiKTtcbiAgICAgICAgICAgIHJldHVybiBgcmVxdWlyZShcIiR7Y2pzSW1wb3J0UGF0aH1cIilgO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKG5ld1BhdGgsIG5ld1RleHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSxzQkFBMEI7QUFDMUIsb0JBR087QUFDUCxrQkFLTztBQUNQLGtCQUFvQztBQUNwQyx1Q0FBMEM7QUExQjFDLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBSSxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVUsR0FBRztBQUM3RyxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBOEJPLFNBQVMsa0JBQWtCLG9CQUF5QztBQUN6RSxRQUFNLHVCQUFtQixpQ0FBb0IsMkRBQTBCLHNCQUFzQjtBQUM3RixTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNLE9BQWE7QUFDakIsWUFBTSxNQUFNLE9BQU8sV0FBVztBQUM1QixtQkFBVyxRQUFRLE9BQU8sZUFBZSxDQUFDLEdBQUc7QUFDM0MsY0FBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEtBQUssS0FBSyxLQUFLLEtBQUssU0FBUyxPQUFPLEdBQUc7QUFDN0Q7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sVUFBVSxLQUFLLEtBQUssV0FBVyxVQUFVLE1BQU07QUFFckQsZ0JBQU0sVUFBVSxLQUFLLEtBQUssV0FBVyx1QkFBdUIsQ0FBQyxHQUFHLGVBQXVCO0FBQ3JGLGtCQUFNLGtCQUFjLHlCQUFVLFlBQVksT0FBTztBQUNqRCxrQkFBTSxjQUFjLFlBQVksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUU1QyxnQkFBSSxXQUFXLENBQUMsTUFBTSxPQUFPLENBQUMsbUJBQW1CLElBQUksV0FBVyxLQUFLLENBQUMsbUJBQW1CLElBQUksV0FBVyxHQUFHO0FBQ3pHLG9CQUFNLCtCQUEyQixxQ0FBb0IsMEJBQVMseUJBQVEseUJBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUNoSCxvQkFBTSx5QkFBcUIscUNBQXNCLFVBQVU7QUFDM0QscUJBQU8sWUFBWSx3QkFBd0IsTUFBTSxrQkFBa0Isd0JBQXdCLHdCQUF3QixNQUFNLGtCQUFrQjtBQUFBLFlBQzdJO0FBRUEsa0JBQU0sZ0JBQWdCLFdBQVcsV0FBVyxVQUFVLE1BQU07QUFDNUQsbUJBQU8sWUFBWSxhQUFhO0FBQUEsVUFDbEMsQ0FBQztBQUVELG9CQUFNLDJCQUFVLFNBQVMsT0FBTztBQUFBLFFBQ2xDO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -9,6 +9,7 @@ import type { Plugin } from "esbuild";
|
|
|
9
9
|
* Creates an esbuild plugin that renames JavaScript files to CommonJS (`.cjs`) files
|
|
10
10
|
* and modifies `require` statements to ensure proper module resolution.
|
|
11
11
|
*
|
|
12
|
+
* @param dependenciesToSkip - A set of dependencies that should not be bundled.
|
|
12
13
|
* @returns An esbuild `Plugin` object that handles the renaming and modification of output files.
|
|
13
14
|
*/
|
|
14
|
-
export declare function renameToCjsPlugin(): Plugin;
|
|
15
|
+
export declare function renameToCjsPlugin(dependenciesToSkip: Set<string>): Plugin;
|
|
@@ -26,11 +26,10 @@ __export(spellcheck_exports, {
|
|
|
26
26
|
spellcheck: () => spellcheck
|
|
27
27
|
});
|
|
28
28
|
module.exports = __toCommonJS(spellcheck_exports);
|
|
29
|
-
var import_cspell = require("cspell");
|
|
29
|
+
var import_cspell = require("./../_dependencies.cjs").cspell.default ?? require("./../_dependencies.cjs").cspell;
|
|
30
30
|
var import_Root = require("../Root.cjs");
|
|
31
31
|
var import_node_url = require("node:url");
|
|
32
32
|
var import_TaskResult = require("../TaskResult.cjs");
|
|
33
|
-
var import_Error = require("../Error.cjs");
|
|
34
33
|
var __import_meta_url = globalThis["import.meta.url"] ?? (() => require("node:url").pathToFileURL(__filename))();
|
|
35
34
|
var __process = globalThis["process"] ?? {
|
|
36
35
|
"cwd": () => "/",
|
|
@@ -46,7 +45,7 @@ async function spellcheck() {
|
|
|
46
45
|
}
|
|
47
46
|
const path = (0, import_node_url.fileURLToPath)(issue.uri);
|
|
48
47
|
const relativePath = (0, import_Root.toRelativeFromRoot)(path);
|
|
49
|
-
|
|
48
|
+
console.log(`${relativePath}:${issue.row}:${issue.col} - ${issue.text}`);
|
|
50
49
|
isSuccess = false;
|
|
51
50
|
}
|
|
52
51
|
});
|
|
@@ -56,4 +55,4 @@ async function spellcheck() {
|
|
|
56
55
|
0 && (module.exports = {
|
|
57
56
|
spellcheck
|
|
58
57
|
});
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Jpbi9zcGVsbGNoZWNrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzW1wiaW1wb3J0Lm1ldGEudXJsXCJdID8/ICgoKT0+cmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkpKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Jpbi9zcGVsbGNoZWNrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzW1wiaW1wb3J0Lm1ldGEudXJsXCJdID8/ICgoKT0+cmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkpKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAZmlsZVxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiBmb3IgcnVubmluZyBhIHNwZWxsY2hlY2sgb24gdGhlIGNvZGViYXNlIHVzaW5nIHRoZSBgY3NwZWxsYCBsaWJyYXJ5LlxuICogSXQgcmVwb3J0cyBhbnkgc3BlbGxpbmcgaXNzdWVzIGZvdW5kIGluIHRoZSBjb2RlIGFuZCByZXR1cm5zIGEgYFRhc2tSZXN1bHRgIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3BlbGxjaGVjayB3YXMgc3VjY2Vzc2Z1bC5cbiAqL1xuXG5pbXBvcnQgeyBsaW50IH0gZnJvbSBcImNzcGVsbFwiO1xuaW1wb3J0IHsgdG9SZWxhdGl2ZUZyb21Sb290IH0gZnJvbSBcIi4uL1Jvb3QudHNcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IFRhc2tSZXN1bHQgfSBmcm9tIFwiLi4vVGFza1Jlc3VsdC50c1wiO1xuXG4vKipcbiAqIFJ1bnMgYSBzcGVsbGNoZWNrIG9uIHRoZSBlbnRpcmUgY29kZWJhc2UgdXNpbmcgYGNzcGVsbGAuXG4gKlxuICogVGhlIGZ1bmN0aW9uIGNoZWNrcyBhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMgZm9yIHNwZWxsaW5nIGlzc3Vlcy5cbiAqIElmIGlzc3VlcyBhcmUgZm91bmQsIHRoZXkgYXJlIGxvZ2dlZCB0byB0aGUgY29uc29sZSB3aXRoIHRoZWlyIGZpbGUgcGF0aCwgbGluZSwgYW5kIGNvbHVtbiBudW1iZXIuXG4gKlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIGBUYXNrUmVzdWx0YCwgaW5kaWNhdGluZyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBzcGVsbGNoZWNrLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3BlbGxjaGVjaygpOiBQcm9taXNlPFRhc2tSZXN1bHQ+IHtcbiAgbGV0IGlzU3VjY2VzcyA9IHRydWU7XG5cbiAgYXdhaXQgbGludChbXCIuXCJdLCB7fSwge1xuICAgIGlzc3VlOiAoaXNzdWUpID0+IHtcbiAgICAgIGlmICghaXNzdWUudXJpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0aCA9IGZpbGVVUkxUb1BhdGgoaXNzdWUudXJpKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHRvUmVsYXRpdmVGcm9tUm9vdChwYXRoKTtcbiAgICAgIGNvbnNvbGUubG9nKGAke3JlbGF0aXZlUGF0aH06JHtpc3N1ZS5yb3d9OiR7aXNzdWUuY29sfSAtICR7aXNzdWUudGV4dH1gKTtcbiAgICAgIGlzU3VjY2VzcyA9IGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIFRhc2tSZXN1bHQuQ3JlYXRlU3VjY2Vzc1Jlc3VsdChpc1N1Y2Nlc3MpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsb0JBQXFCO0FBQ3JCLGtCQUFtQztBQUNuQyxzQkFBOEI7QUFDOUIsd0JBQTJCO0FBZjNCLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBSSxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVUsR0FBRztBQUM3RyxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBb0JBLGVBQXNCLGFBQWtDO0FBQ3RELE1BQUksWUFBWTtBQUVoQixZQUFNLG9CQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRztBQUFBLElBQ3BCLE9BQU8sQ0FBQyxVQUFVO0FBQ2hCLFVBQUksQ0FBQyxNQUFNLEtBQUs7QUFDZDtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFdBQU8sK0JBQWMsTUFBTSxHQUFHO0FBQ3BDLFlBQU0sbUJBQWUsZ0NBQW1CLElBQUk7QUFDNUMsY0FBUSxJQUFJLEdBQUcsWUFBWSxJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sR0FBRyxNQUFNLE1BQU0sSUFBSSxFQUFFO0FBQ3ZFLGtCQUFZO0FBQUEsSUFDZDtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU8sNkJBQVcsb0JBQW9CLFNBQVM7QUFDakQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist/lib/bin/version.cjs
CHANGED
|
@@ -71,6 +71,14 @@ var __process = globalThis["process"] ?? {
|
|
|
71
71
|
"platform": "android"
|
|
72
72
|
};
|
|
73
73
|
async function updateVersion(versionUpdateType) {
|
|
74
|
+
if (!versionUpdateType) {
|
|
75
|
+
const npmOldVersion = __process.env["npm_old_version"];
|
|
76
|
+
const npmNewVersion = __process.env["npm_new_version"];
|
|
77
|
+
if (npmOldVersion && npmNewVersion) {
|
|
78
|
+
await updateVersionInFiles(npmOldVersion, false);
|
|
79
|
+
return updateVersion(npmNewVersion);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
74
82
|
const isObsidianPlugin = (0, import_node_fs.existsSync)((0, import_Root.resolvePathFromRoot)(import_ObsidianPluginRepoPaths.ObsidianPluginRepoPaths.ManifestJson));
|
|
75
83
|
return await import_TaskResult.TaskResult.chain([
|
|
76
84
|
async () => {
|
|
@@ -148,6 +156,10 @@ async function updateVersionInFiles(newVersion, isObsidianPlugin) {
|
|
|
148
156
|
});
|
|
149
157
|
await (0, import_Npm.editNpmPackageLock)((npmPackageLock) => {
|
|
150
158
|
npmPackageLock.version = newVersion;
|
|
159
|
+
const defaultPackage = npmPackageLock.packages?.[""];
|
|
160
|
+
if (defaultPackage) {
|
|
161
|
+
defaultPackage.version = newVersion;
|
|
162
|
+
}
|
|
151
163
|
}, { skipIfMissing: true });
|
|
152
164
|
if (isObsidianPlugin) {
|
|
153
165
|
const latestObsidianVersion = await getLatestObsidianVersion();
|
|
@@ -326,4 +338,4 @@ async function publishGitHubRelease(newVersion, isObsidianPlugin) {
|
|
|
326
338
|
updateVersionInFiles,
|
|
327
339
|
validate
|
|
328
340
|
});
|
|
329
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Jpbi92ZXJzaW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzW1wiaW1wb3J0Lm1ldGEudXJsXCJdID8/ICgoKT0+cmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkpKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAZmlsZVxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB2ZXJzaW9uIHVwZGF0ZXMgaW4gYSBwcm9qZWN0LlxuICogSXQgaW5jbHVkZXMgdGFza3Mgc3VjaCBhcyB2YWxpZGF0aW5nIHZlcnNpb24gdXBkYXRlIHR5cGVzLCBjaGVja2luZyB0aGUgc3RhdGVcbiAqIG9mIEdpdCBhbmQgR2l0SHViIENMSSwgdXBkYXRpbmcgdmVyc2lvbiBudW1iZXJzIGluIGZpbGVzLCBhbmQgcGVyZm9ybWluZ1xuICogR2l0IG9wZXJhdGlvbnMgc3VjaCBhcyB0YWdnaW5nIGFuZCBwdXNoaW5nLlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9uLCBgdXBkYXRlVmVyc2lvbmAsIGNvb3JkaW5hdGVzIHRoZXNlIHRhc2tzIHRvIGVuc3VyZSB0aGF0XG4gKiB2ZXJzaW9uIHVwZGF0ZXMgYXJlIGhhbmRsZWQgY29uc2lzdGVudGx5IGFuZCBjb3JyZWN0bHkuIEl0IGFsc28gaW50ZWdyYXRlc1xuICogd2l0aCBPYnNpZGlhbiBwbHVnaW5zLCBpZiBhcHBsaWNhYmxlLCBieSB1cGRhdGluZyByZWxldmFudCBmaWxlcyBhbmQgcmVsZWFzaW5nXG4gKiBuZXcgdmVyc2lvbnMgb24gR2l0SHViLlxuICovXG5cbmltcG9ydCB7IFRhc2tSZXN1bHQgfSBmcm9tIFwiLi4vVGFza1Jlc3VsdC50c1wiO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICByZXNvbHZlUGF0aEZyb21Sb290XG59IGZyb20gXCIuLi9Sb290LnRzXCI7XG5pbXBvcnQgeyBzcGVsbGNoZWNrIH0gZnJvbSBcIi4vc3BlbGxjaGVjay50c1wiO1xuaW1wb3J0IHsgbGludCB9IGZyb20gXCIuL0VTTGludC9FU0xpbnQudHNcIjtcbmltcG9ydCB7XG4gIGVkaXROcG1QYWNrYWdlLFxuICBlZGl0TnBtUGFja2FnZUxvY2ssXG4gIHJlYWROcG1QYWNrYWdlXG59IGZyb20gXCIuLi9OcG0udHNcIjtcbmltcG9ydCB7IGVkaXRKc29uIH0gZnJvbSBcIi4uL0pTT04udHNcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHtcbiAgY3AsXG4gIHJlYWRGaWxlLFxuICB3cml0ZUZpbGVcbn0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUludGVyZmFjZSB9IGZyb20gXCJub2RlOnJlYWRsaW5lL3Byb21pc2VzXCI7XG5pbXBvcnQgeyByZWFkZGlyUG9zaXggfSBmcm9tIFwiLi4vRnMudHNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwiLi4vUGF0aC50c1wiO1xuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tIFwiLi4vb2JzaWRpYW4vUGx1Z2luL09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLnRzXCI7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSBcIi4vT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy50c1wiO1xuaW1wb3J0IEFkbVppcCBmcm9tIFwiYWRtLXppcFwiO1xuXG4vKipcbiAqIEVudW0gcmVwcmVzZW50aW5nIGRpZmZlcmVudCB0eXBlcyBvZiB2ZXJzaW9uIHVwZGF0ZXMuXG4gKi9cbmVudW0gVmVyc2lvblVwZGF0ZVR5cGUge1xuICBNYWpvciA9IFwibWFqb3JcIixcbiAgTWlub3IgPSBcIm1pbm9yXCIsXG4gIFBhdGNoID0gXCJwYXRjaFwiLFxuICBCZXRhID0gXCJiZXRhXCIsXG4gIE1hbnVhbCA9IFwibWFudWFsXCIsXG4gIEludmFsaWQgPSBcImludmFsaWRcIlxufVxuXG4vKipcbiAqIFR5cGUgcmVwcmVzZW50aW5nIHRoZSBtYW5pZmVzdCBmaWxlIGZvcm1hdCBmb3IgT2JzaWRpYW4gcGx1Z2lucy5cbiAqL1xudHlwZSBNYW5pZmVzdCA9IHtcbiAgbWluQXBwVmVyc2lvbjogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFR5cGUgcmVwcmVzZW50aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgT2JzaWRpYW4gcmVsZWFzZXMgSlNPTi5cbiAqL1xudHlwZSBPYnNpZGlhblJlbGVhc2VzSnNvbiA9IHtcbiAgbmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgdXBkYXRlIHR5cGUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIHNlcmllcyBvZiB0YXNrcyB0byBoYW5kbGUgdmVyc2lvbiB1cGRhdGVzOlxuICogMS4gVmFsaWRhdGVzIHRoZSB2ZXJzaW9uIHVwZGF0ZSB0eXBlLlxuICogMi4gQ2hlY2tzIGlmIEdpdCBhbmQgR2l0SHViIENMSSBhcmUgaW5zdGFsbGVkLlxuICogMy4gVmVyaWZpZXMgdGhhdCB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgY2xlYW4uXG4gKiA0LiBSdW5zIHNwZWxsY2hlY2sgYW5kIGxpbnRpbmcuXG4gKiA1LiBCdWlsZHMgdGhlIHByb2plY3QuXG4gKiA2LiBVcGRhdGVzIHZlcnNpb24gaW4gZmlsZXMgYW5kIGNoYW5nZWxvZy5cbiAqIDcuIEFkZHMgdXBkYXRlZCBmaWxlcyB0byBHaXQsIHRhZ3MgdGhlIGNvbW1pdCwgYW5kIHB1c2hlcyB0byB0aGUgcmVwb3NpdG9yeS5cbiAqIDguIElmIGFuIE9ic2lkaWFuIHBsdWdpbiwgY29waWVzIHRoZSB1cGRhdGVkIG1hbmlmZXN0IGFuZCBwdWJsaXNoZXMgYSBHaXRIdWIgcmVsZWFzZS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvblVwZGF0ZVR5cGUgLSBUaGUgdHlwZSBvZiB2ZXJzaW9uIHVwZGF0ZSB0byBwZXJmb3JtIChtYWpvciwgbWlub3IsIHBhdGNoLCBiZXRhLCBvciBtYW51YWwpLlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIGBUYXNrUmVzdWx0YCBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHZlcnNpb24gdXBkYXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlVmVyc2lvbih2ZXJzaW9uVXBkYXRlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxUYXNrUmVzdWx0IHwgdm9pZD4ge1xuICBjb25zdCBpc09ic2lkaWFuUGx1Z2luID0gZXhpc3RzU3luYyhyZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbikpO1xuICByZXR1cm4gYXdhaXQgVGFza1Jlc3VsdC5jaGFpbihbXG4gICAgYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgdmFsaWRhdGUodmVyc2lvblVwZGF0ZVR5cGUpO1xuICAgICAgYXdhaXQgY2hlY2tHaXRJbnN0YWxsZWQoKTtcbiAgICAgIGF3YWl0IGNoZWNrR2l0UmVwb0NsZWFuKCk7XG4gICAgICBhd2FpdCBjaGVja0dpdEh1YkNsaUluc3RhbGxlZCgpO1xuICAgIH0sXG4gICAgKCk6IFByb21pc2U8VGFza1Jlc3VsdD4gPT4gc3BlbGxjaGVjaygpLFxuICAgIGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGF3YWl0IGV4ZWNGcm9tUm9vdChcIm5wbSBydW4gYnVpbGRcIik7XG4gICAgfSxcbiAgICAoKTogUHJvbWlzZTxUYXNrUmVzdWx0PiA9PiBsaW50KCksXG4gICAgYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgbmV3VmVyc2lvbiA9IGF3YWl0IGdldE5ld1ZlcnNpb24odmVyc2lvblVwZGF0ZVR5cGUpO1xuICAgICAgYXdhaXQgdXBkYXRlVmVyc2lvbkluRmlsZXMobmV3VmVyc2lvbiwgaXNPYnNpZGlhblBsdWdpbik7XG4gICAgICBhd2FpdCB1cGRhdGVDaGFuZ2Vsb2cobmV3VmVyc2lvbik7XG4gICAgICBhd2FpdCBhZGRVcGRhdGVkRmlsZXNUb0dpdChuZXdWZXJzaW9uKTtcbiAgICAgIGF3YWl0IGFkZEdpdFRhZyhuZXdWZXJzaW9uKTtcbiAgICAgIGF3YWl0IGdpdFB1c2goKTtcbiAgICAgIGlmIChpc09ic2lkaWFuUGx1Z2luKSB7XG4gICAgICAgIGF3YWl0IGNvcHlVcGRhdGVkTWFuaWZlc3QoKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHB1Ymxpc2hHaXRIdWJSZWxlYXNlKG5ld1ZlcnNpb24sIGlzT2JzaWRpYW5QbHVnaW4pO1xuICAgIH1cbiAgXSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSB2ZXJzaW9uIHVwZGF0ZSB0eXBlIHRvIGVuc3VyZSBpdCBpcyBlaXRoZXIgYSByZWNvZ25pemVkIHR5cGVcbiAqIG9yIGEgdmFsaWQgbWFudWFsIHZlcnNpb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uVXBkYXRlVHlwZSAtIFRoZSB2ZXJzaW9uIHVwZGF0ZSB0eXBlIHRvIHZhbGlkYXRlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgdmVyc2lvbiB1cGRhdGUgdHlwZSBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUodmVyc2lvblVwZGF0ZVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZ2V0VmVyc2lvblVwZGF0ZVR5cGUodmVyc2lvblVwZGF0ZVR5cGUpID09PSBWZXJzaW9uVXBkYXRlVHlwZS5JbnZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB2ZXJzaW9uIHVwZGF0ZSB0eXBlLiBQbGVhc2UgdXNlICdtYWpvcicsICdtaW5vcicsICdwYXRjaCcsIG9yICd4Lnkuelstc3VmZml4XScgZm9ybWF0LlwiKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBHaXQgaXMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uXG4gKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIEdpdCBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEB0aHJvd3MgRXJyb3IgaWYgR2l0IGlzIG5vdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0dpdEluc3RhbGxlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjRnJvbVJvb3QoXCJnaXQgLS12ZXJzaW9uXCIsIHsgcXVpZXQ6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdpdCBpcyBub3QgaW5zdGFsbGVkLiBQbGVhc2UgaW5zdGFsbCBpdCBmcm9tIGh0dHBzOi8vZ2l0LXNjbS5jb20vXCIpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBHaXRIdWIgQ0xJIGlzIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLlxuICpcbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgR2l0SHViIENMSSBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIEdpdEh1YiBDTEkgaXMgbm90IGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrR2l0SHViQ2xpSW5zdGFsbGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNGcm9tUm9vdChcImdoIC0tdmVyc2lvblwiLCB7IHF1aWV0OiB0cnVlIH0pO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHaXRIdWIgQ0xJIGlzIG5vdCBpbnN0YWxsZWQuIFBsZWFzZSBpbnN0YWxsIGl0IGZyb20gaHR0cHM6Ly9jbGkuZ2l0aHViLmNvbS9cIik7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIEdpdCByZXBvc2l0b3J5IGlzIGNsZWFuLCBtZWFuaW5nIHRoZXJlIGFyZSBubyB1bmNvbW1pdHRlZCBjaGFuZ2VzLlxuICpcbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgbm90IGNsZWFuLlxuICpcbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIEdpdCByZXBvc2l0b3J5IGlzIG5vdCBjbGVhbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrR2l0UmVwb0NsZWFuKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWNGcm9tUm9vdChcImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS11bnRyYWNrZWQtZmlsZXM9YWxsXCIsIHsgcXVpZXQ6IHRydWUgfSk7XG4gICAgaWYgKHN0ZG91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHaXQgcmVwb3NpdG9yeSBpcyBub3QgY2xlYW4uIFBsZWFzZSBjb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGJlZm9yZSByZWxlYXNpbmcgYSBuZXcgdmVyc2lvbi5cIik7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHZlcnNpb24gdXBkYXRlIGJhc2VkIG9uIHRoZSBpbnB1dCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZlcnNpb25VcGRhdGVUeXBlIC0gVGhlIGlucHV0IHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24gdXBkYXRlIHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBgVmVyc2lvblVwZGF0ZVR5cGVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVyc2lvblVwZGF0ZVR5cGUodmVyc2lvblVwZGF0ZVR5cGU6IHN0cmluZyk6IFZlcnNpb25VcGRhdGVUeXBlIHtcbiAgY29uc3QgdmVyc2lvblVwZGF0ZVR5cGVFbnVtID0gdmVyc2lvblVwZGF0ZVR5cGUgYXMgVmVyc2lvblVwZGF0ZVR5cGU7XG4gIHN3aXRjaCAodmVyc2lvblVwZGF0ZVR5cGVFbnVtKSB7XG4gICAgY2FzZSBWZXJzaW9uVXBkYXRlVHlwZS5NYWpvcjpcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLk1pbm9yOlxuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuUGF0Y2g6XG4gICAgY2FzZSBWZXJzaW9uVXBkYXRlVHlwZS5CZXRhOlxuICAgICAgcmV0dXJuIHZlcnNpb25VcGRhdGVUeXBlRW51bTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoL15cXGQrXFwuXFxkK1xcLlxcZCsoLVtcXHdcXGQuLV0rKT8kLy50ZXN0KHZlcnNpb25VcGRhdGVUeXBlKSkge1xuICAgICAgICByZXR1cm4gVmVyc2lvblVwZGF0ZVR5cGUuTWFudWFsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gVmVyc2lvblVwZGF0ZVR5cGUuSW52YWxpZDtcbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHZlcnNpb24gaW4gdmFyaW91cyBmaWxlcywgaW5jbHVkaW5nIGBwYWNrYWdlLmpzb25gLCBgcGFja2FnZS1sb2NrLmpzb25gLFxuICogYW5kIE9ic2lkaWFuIHBsdWdpbiBtYW5pZmVzdHMgaWYgYXBwbGljYWJsZS5cbiAqXG4gKiBAcGFyYW0gbmV3VmVyc2lvbiAtIFRoZSBuZXcgdmVyc2lvbiBzdHJpbmcgdG8gdXBkYXRlIGluIHRoZSBmaWxlcy5cbiAqIEBwYXJhbSBpc09ic2lkaWFuUGx1Z2luIC0gV2hldGhlciB0aGUgcHJvamVjdCBpcyBhbiBPYnNpZGlhbiBwbHVnaW4uXG4gKiBAcmV0dXJucyBBIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVZlcnNpb25JbkZpbGVzKG5ld1ZlcnNpb246IHN0cmluZywgaXNPYnNpZGlhblBsdWdpbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBlZGl0TnBtUGFja2FnZSgobnBtUGFja2FnZSkgPT4ge1xuICAgIG5wbVBhY2thZ2UudmVyc2lvbiA9IG5ld1ZlcnNpb247XG4gIH0pO1xuXG4gIGF3YWl0IGVkaXROcG1QYWNrYWdlTG9jaygobnBtUGFja2FnZUxvY2spID0+IHtcbiAgICBucG1QYWNrYWdlTG9jay52ZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgfSwgeyBza2lwSWZNaXNzaW5nOiB0cnVlIH0pO1xuXG4gIGlmIChpc09ic2lkaWFuUGx1Z2luKSB7XG4gICAgY29uc3QgbGF0ZXN0T2JzaWRpYW5WZXJzaW9uID0gYXdhaXQgZ2V0TGF0ZXN0T2JzaWRpYW5WZXJzaW9uKCk7XG5cbiAgICBhd2FpdCBlZGl0SnNvbjxNYW5pZmVzdD4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFuaWZlc3RKc29uLCAobWFuaWZlc3QpID0+IHtcbiAgICAgIG1hbmlmZXN0Lm1pbkFwcFZlcnNpb24gPSBsYXRlc3RPYnNpZGlhblZlcnNpb247XG4gICAgICBtYW5pZmVzdC52ZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgICB9KTtcblxuICAgIGF3YWl0IGVkaXRKc29uPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlZlcnNpb25zSnNvbiwgKHZlcnNpb25zKSA9PiB7XG4gICAgICB2ZXJzaW9uc1tuZXdWZXJzaW9uXSA9IGxhdGVzdE9ic2lkaWFuVmVyc2lvbjtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG5ldyB2ZXJzaW9uIHN0cmluZyBiYXNlZCBvbiB0aGUgY3VycmVudCB2ZXJzaW9uIGFuZCB0aGUgc3BlY2lmaWVkIHVwZGF0ZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uVXBkYXRlVHlwZSAtIFRoZSB0eXBlIG9mIHZlcnNpb24gdXBkYXRlIChtYWpvciwgbWlub3IsIHBhdGNoLCBiZXRhLCBvciBtYW51YWwpLlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byB0aGUgbmV3IHZlcnNpb24gc3RyaW5nLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgY3VycmVudCB2ZXJzaW9uIGZvcm1hdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TmV3VmVyc2lvbih2ZXJzaW9uVXBkYXRlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgdmVyc2lvblR5cGUgPSBnZXRWZXJzaW9uVXBkYXRlVHlwZSh2ZXJzaW9uVXBkYXRlVHlwZSk7XG4gIGlmICh2ZXJzaW9uVHlwZSA9PT0gVmVyc2lvblVwZGF0ZVR5cGUuTWFudWFsKSB7XG4gICAgcmV0dXJuIHZlcnNpb25VcGRhdGVUeXBlO1xuICB9XG5cbiAgY29uc3QgbnBtUGFja2FnZSA9IGF3YWl0IHJlYWROcG1QYWNrYWdlKCk7XG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gbnBtUGFja2FnZS52ZXJzaW9uO1xuXG4gIGNvbnN0IG1hdGNoID0gY3VycmVudFZlcnNpb24ubWF0Y2goL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLWJldGEuKFxcZCspKT8vKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjdXJyZW50IHZlcnNpb24gZm9ybWF0OiAke2N1cnJlbnRWZXJzaW9ufWApO1xuICB9XG5cbiAgbGV0IG1ham9yID0gTnVtYmVyKG1hdGNoWzFdKTtcbiAgbGV0IG1pbm9yID0gTnVtYmVyKG1hdGNoWzJdKTtcbiAgbGV0IHBhdGNoID0gTnVtYmVyKG1hdGNoWzNdKTtcbiAgbGV0IGJldGEgPSBtYXRjaFs1XSA/IE51bWJlcihtYXRjaFs1XSkgOiAwO1xuXG4gIHN3aXRjaCAodmVyc2lvblR5cGUpIHtcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLk1ham9yOlxuICAgICAgbWFqb3IrKztcbiAgICAgIG1pbm9yID0gMDtcbiAgICAgIHBhdGNoID0gMDtcbiAgICAgIGJldGEgPSAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWZXJzaW9uVXBkYXRlVHlwZS5NaW5vcjpcbiAgICAgIG1pbm9yKys7XG4gICAgICBwYXRjaCA9IDA7XG4gICAgICBiZXRhID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuUGF0Y2g6XG4gICAgICBwYXRjaCsrO1xuICAgICAgYmV0YSA9IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLkJldGE6XG4gICAgICBiZXRhKys7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0ke2JldGEgPiAwID8gYC1iZXRhLiR7YmV0YX1gIDogXCJcIn1gO1xufVxuXG4vKipcbiAqIEZldGNoZXMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE9ic2lkaWFuIGZyb20gdGhlIEdpdEh1YiByZWxlYXNlcyBBUEkuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE9ic2lkaWFuLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RPYnNpZGlhblZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9yZWxlYXNlcy9sYXRlc3RcIik7XG4gIGNvbnN0IG9ic2lkaWFuUmVsZWFzZXNKc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIE9ic2lkaWFuUmVsZWFzZXNKc29uO1xuICByZXR1cm4gb2JzaWRpYW5SZWxlYXNlc0pzb24ubmFtZTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBjaGFuZ2Vsb2cgZmlsZSB3aXRoIG5ldyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBjb21taXQgbWVzc2FnZXMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgY3VycmVudCBjaGFuZ2Vsb2csIGFwcGVuZHMgbmV3IGVudHJpZXMgZm9yIHRoZSBsYXRlc3QgdmVyc2lvbixcbiAqIGFuZCBwcm9tcHRzIHRoZSB1c2VyIHRvIHJldmlldyB0aGUgY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gbmV3VmVyc2lvbiAtIFRoZSBuZXcgdmVyc2lvbiBudW1iZXIgdG8gYmUgYWRkZWQgdG8gdGhlIGNoYW5nZWxvZy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNoYW5nZWxvZyB1cGRhdGUgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVDaGFuZ2Vsb2cobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNoYW5nZWxvZ1BhdGggPSByZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkNoYW5nZWxvZ01kKTtcbiAgbGV0IHByZXZpb3VzQ2hhbmdlbG9nTGluZXM6IHN0cmluZ1tdO1xuICBpZiAoIWV4aXN0c1N5bmMoY2hhbmdlbG9nUGF0aCkpIHtcbiAgICBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzID0gW107XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGNoYW5nZWxvZ1BhdGgsIFwidXRmLThcIik7XG4gICAgcHJldmlvdXNDaGFuZ2Vsb2dMaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIikuc2xpY2UoMik7XG4gICAgaWYgKHByZXZpb3VzQ2hhbmdlbG9nTGluZXMuYXQoLTEpID09PSBcIlwiKSB7XG4gICAgICBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxhc3RUYWcgPSBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzWzBdPy5yZXBsYWNlKFwiIyMgXCIsIFwiXCIpO1xuICBjb25zdCBjb21taXRSYW5nZSA9IGxhc3RUYWcgPyBgJHtsYXN0VGFnfS4uSEVBRGAgOiBcIkhFQURcIjtcbiAgY29uc3QgY29tbWl0TWVzc2FnZXMgPSAoYXdhaXQgZXhlY0Zyb21Sb290KGBnaXQgbG9nICR7Y29tbWl0UmFuZ2V9IC0tZm9ybWF0PSVzIC0tZmlyc3QtcGFyZW50YCwgeyBxdWlldDogdHJ1ZSB9KSkuc3BsaXQoL1xccj9cXG4vKTtcblxuICBsZXQgbmV3Q2hhbmdlTG9nID0gYCMgQ0hBTkdFTE9HXFxuXFxuIyMgJHtuZXdWZXJzaW9ufVxcblxcbmA7XG5cbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIGNvbW1pdE1lc3NhZ2VzKSB7XG4gICAgbmV3Q2hhbmdlTG9nICs9IGAtICR7bWVzc2FnZX1cXG5gO1xuICB9XG5cbiAgaWYgKHByZXZpb3VzQ2hhbmdlbG9nTGluZXMubGVuZ3RoID4gMCkge1xuICAgIG5ld0NoYW5nZUxvZyArPSBcIlxcblwiO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzKSB7XG4gICAgICBuZXdDaGFuZ2VMb2cgKz0gYCR7bGluZX1cXG5gO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHdyaXRlRmlsZShjaGFuZ2Vsb2dQYXRoLCBuZXdDaGFuZ2VMb2csIFwidXRmLThcIik7XG5cbiAgYXdhaXQgY3JlYXRlSW50ZXJmYWNlKHByb2Nlc3Muc3RkaW4sIHByb2Nlc3Muc3Rkb3V0KS5xdWVzdGlvbihgUGxlYXNlIHVwZGF0ZSB0aGUgJHtPYnNpZGlhblBsdWdpblJlcG9QYXRocy5DaGFuZ2Vsb2dNZH0gZmlsZS4gUHJlc3MgRW50ZXIgd2hlbiB5b3UgYXJlIGRvbmUuLi5gKTtcbn1cblxuLyoqXG4gKiBBZGRzIHVwZGF0ZWQgZmlsZXMgdG8gdGhlIEdpdCBzdGFnaW5nIGFyZWEgYW5kIGNvbW1pdHMgdGhlbSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBuZXdWZXJzaW9uIC0gVGhlIG5ldyB2ZXJzaW9uIG51bWJlciB1c2VkIGFzIHRoZSBjb21taXQgbWVzc2FnZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGVzIGhhdmUgYmVlbiBhZGRlZCBhbmQgY29tbWl0dGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVXBkYXRlZEZpbGVzVG9HaXQobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGVzID0gW1xuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QYWNrYWdlSnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QYWNrYWdlTG9ja0pzb24sXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuVmVyc2lvbnNKc29uLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkNoYW5nZWxvZ01kXG4gIF0uZmlsdGVyKGZpbGUgPT4gZXhpc3RzU3luYyhyZXNvbHZlUGF0aEZyb21Sb290KGZpbGUpKSk7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXCJnaXRcIiwgXCJhZGRcIiwgLi4uZmlsZXNdLCB7IHF1aWV0OiB0cnVlIH0pO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoYGdpdCBjb21taXQgLW0gJHtuZXdWZXJzaW9ufWAsIHsgcXVpZXQ6IHRydWUgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIEdpdCB0YWcgZm9yIHRoZSBuZXcgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gbmV3VmVyc2lvbiAtIFRoZSBuZXcgdmVyc2lvbiBudW1iZXIgdG8gdXNlIGZvciB0aGUgdGFnLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGFnIGhhcyBiZWVuIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRHaXRUYWcobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChgZ2l0IHRhZyAtYSAke25ld1ZlcnNpb259IC1tICR7bmV3VmVyc2lvbn1gLCB7IHF1aWV0OiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIFB1c2hlcyBjb21taXRzIGFuZCB0YWdzIHRvIHRoZSByZW1vdGUgR2l0IHJlcG9zaXRvcnkuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcHVzaCBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaXRQdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoXCJnaXQgcHVzaCAtLWZvbGxvdy10YWdzXCIsIHsgcXVpZXQ6IHRydWUgfSk7XG59XG5cbi8qKlxuICogQ29waWVzIHRoZSB1cGRhdGVkIG1hbmlmZXN0IGZpbGUgdG8gdGhlIGRpc3RyaWJ1dGlvbiBidWlsZCBkaXJlY3RvcnkuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29weSBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5VXBkYXRlZE1hbmlmZXN0KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBjcChyZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbiksIHJlc29sdmVQYXRoRnJvbVJvb3Qoam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EaXN0QnVpbGQsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbikpLCB7IGZvcmNlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgYSBzcGVjaWZpYyB2ZXJzaW9uIGZyb20gdGhlIGNoYW5nZWxvZy5cbiAqXG4gKiBAcGFyYW0gbmV3VmVyc2lvbiAtIFRoZSBuZXcgdmVyc2lvbiBudW1iZXIgZm9yIHdoaWNoIHRvIGdldCB0aGUgcmVsZWFzZSBub3Rlcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgc3BlY2lmaWVkIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZWxlYXNlTm90ZXMobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgY2hhbmdlbG9nUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3QoT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ2hhbmdlbG9nTWQpO1xuICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoY2hhbmdlbG9nUGF0aCwgXCJ1dGYtOFwiKTtcbiAgY29uc3QgbmV3VmVyc2lvbkVzY2FwZWQgPSBuZXdWZXJzaW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiXFxcXC5cIik7XG4gIGNvbnN0IG1hdGNoID0gY29udGVudC5tYXRjaChuZXcgUmVnRXhwKGBcXG4jIyAke25ld1ZlcnNpb25Fc2NhcGVkfVxcblxcbigoLnxcXG4pKz8pXFxuXFxuIyNgKSk7XG4gIGxldCByZWxlYXNlTm90ZXMgPSBtYXRjaCA/IG1hdGNoWzFdICsgXCJcXG5cXG5cIiA6IFwiXCI7XG5cbiAgY29uc3QgdGFncyA9IChhd2FpdCBleGVjRnJvbVJvb3QoXCJnaXQgdGFnIC0tc29ydD0tY3JlYXRvcmRhdGVcIiwgeyBxdWlldDogdHJ1ZSB9KSkuc3BsaXQoL1xccj9cXG4vKTtcbiAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gdGFnc1sxXTtcbiAgbGV0IGNoYW5nZXNVcmwgPSBcIlwiO1xuXG4gIGNvbnN0IHJlcG9VcmwgPSBhd2FpdCBleGVjRnJvbVJvb3QoXCJnaCByZXBvIHZpZXcgLS1qc29uIHVybCAtcSAudXJsXCIsIHsgcXVpZXQ6IHRydWUgfSk7XG5cbiAgaWYgKHByZXZpb3VzVmVyc2lvbikge1xuICAgIGNoYW5nZXNVcmwgPSBgJHtyZXBvVXJsfS9jb21wYXJlLyR7cHJldmlvdXNWZXJzaW9ufS4uLiR7bmV3VmVyc2lvbn1gO1xuICB9IGVsc2Uge1xuICAgIGNoYW5nZXNVcmwgPSBgJHtyZXBvVXJsfS9jb21taXRzLyR7bmV3VmVyc2lvbn1gO1xuICB9XG5cbiAgcmVsZWFzZU5vdGVzICs9IGAqKkZ1bGwgQ2hhbmdlbG9nKio6ICR7Y2hhbmdlc1VybH1gO1xuICByZXR1cm4gcmVsZWFzZU5vdGVzO1xufVxuXG4vKipcbiAqIFB1Ymxpc2hlcyBhIEdpdEh1YiByZWxlYXNlIGZvciB0aGUgbmV3IHZlcnNpb24uXG4gKlxuICogSGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgYSByZWxlYXNlIGFuZCB1cGxvYWRpbmcgZmlsZXMgZm9yIGVpdGhlciBhbiBPYnNpZGlhbiBwbHVnaW4gb3IgYW5vdGhlciBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBuZXdWZXJzaW9uIC0gVGhlIG5ldyB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIHJlbGVhc2UuXG4gKiBAcGFyYW0gaXNPYnNpZGlhblBsdWdpbiAtIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBwcm9qZWN0IGlzIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlbGVhc2UgaGFzIGJlZW4gcHVibGlzaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaEdpdEh1YlJlbGVhc2UobmV3VmVyc2lvbjogc3RyaW5nLCBpc09ic2lkaWFuUGx1Z2luOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBmaWxlUGF0aHM6IHN0cmluZ1tdO1xuXG4gIGlmIChpc09ic2lkaWFuUGx1Z2luKSB7XG4gICAgY29uc3QgYnVpbGREaXIgPSByZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCk7XG4gICAgY29uc3QgZmlsZU5hbWVzID0gYXdhaXQgcmVhZGRpclBvc2l4KGJ1aWxkRGlyKTtcbiAgICBmaWxlUGF0aHMgPSBmaWxlTmFtZXMubWFwKGZpbGVOYW1lID0+IGpvaW4oYnVpbGREaXIsIGZpbGVOYW1lKSk7XG4gIH0gZWxzZSB7XG5cbiAgICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKCk7XG4gICAgemlwLmFkZExvY2FsRm9sZGVyKHJlc29sdmVQYXRoRnJvbVJvb3QoT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0KSwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0LCAoZmlsZW5hbWUpID0+ICFmaWxlbmFtZS5lbmRzV2l0aChcIi56aXBcIikpO1xuXG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkNoYW5nZWxvZ01kLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5MaWNlbnNlLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5SZWFkbWVNZCxcbiAgICAgIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUpzb25cbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICB6aXAuYWRkTG9jYWxGaWxlKHJlc29sdmVQYXRoRnJvbVJvb3QoZmlsZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5wbVBhY2thZ2UgPSBhd2FpdCByZWFkTnBtUGFja2FnZSgpO1xuICAgIGNvbnN0IGRpc3RaaXBQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdChqb2luKE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdCwgYCR7bnBtUGFja2FnZS5uYW1lfS0ke25ld1ZlcnNpb259LnppcGApKTtcbiAgICB6aXAud3JpdGVaaXAoZGlzdFppcFBhdGgpO1xuICAgIGZpbGVQYXRocyA9IFtkaXN0WmlwUGF0aF07XG4gIH1cblxuICBhd2FpdCBleGVjRnJvbVJvb3QoW1wiZ2hcIiwgXCJyZWxlYXNlXCIsIFwiY3JlYXRlXCIsIG5ld1ZlcnNpb24sIC4uLmZpbGVQYXRocywgXCItLXRpdGxlXCIsIGB2JHtuZXdWZXJzaW9ufWAsIFwiLS1ub3Rlcy1maWxlXCIsIFwiLVwiXSwge1xuICAgIHF1aWV0OiB0cnVlLFxuICAgIHN0ZGluOiBhd2FpdCBnZXRSZWxlYXNlTm90ZXMobmV3VmVyc2lvbilcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSx3QkFBMkI7QUFDM0Isa0JBR087QUFDUCx3QkFBMkI7QUFDM0Isb0JBQXFCO0FBQ3JCLGlCQUlPO0FBQ1Asa0JBQXlCO0FBQ3pCLHFCQUEyQjtBQUMzQixzQkFJTztBQUNQLElBQUFBLG1CQUFnQztBQUNoQyxnQkFBNkI7QUFDN0Isa0JBQXFCO0FBQ3JCLHFDQUF3QztBQUN4Qyx1Q0FBMEM7QUFDMUMscUJBQW1CO0FBM0NuQixJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUksUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVLEdBQUc7QUFDN0csSUFBSSxZQUFZLFdBQVcsU0FBUyxLQUFLO0FBQUEsRUFDdkMsT0FBTyxNQUFJO0FBQUEsRUFDWCxPQUFPLENBQUM7QUFBQSxFQUNSLFlBQVk7QUFDZDtBQW1GQSxlQUFzQixjQUFjLG1CQUF1RDtBQUN6RixRQUFNLHVCQUFtQiwrQkFBVyxpQ0FBb0IsdURBQXdCLFlBQVksQ0FBQztBQUM3RixTQUFPLE1BQU0sNkJBQVcsTUFBTTtBQUFBLElBQzVCLFlBQTJCO0FBQ3pCLGVBQVMsaUJBQWlCO0FBQzFCLFlBQU0sa0JBQWtCO0FBQ3hCLFlBQU0sa0JBQWtCO0FBQ3hCLFlBQU0sd0JBQXdCO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQTJCLDhCQUFXO0FBQUEsSUFDdEMsWUFBMkI7QUFDekIsZ0JBQU0sMEJBQWEsZUFBZTtBQUFBLElBQ3BDO0FBQUEsSUFDQSxVQUEyQixvQkFBSztBQUFBLElBQ2hDLFlBQTJCO0FBQ3pCLFlBQU0sYUFBYSxNQUFNLGNBQWMsaUJBQWlCO0FBQ3hELFlBQU0scUJBQXFCLFlBQVksZ0JBQWdCO0FBQ3ZELFlBQU0sZ0JBQWdCLFVBQVU7QUFDaEMsWUFBTSxxQkFBcUIsVUFBVTtBQUNyQyxZQUFNLFVBQVUsVUFBVTtBQUMxQixZQUFNLFFBQVE7QUFDZCxVQUFJLGtCQUFrQjtBQUNwQixjQUFNLG9CQUFvQjtBQUFBLE1BQzVCO0FBQ0EsWUFBTSxxQkFBcUIsWUFBWSxnQkFBZ0I7QUFBQSxJQUN6RDtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBU08sU0FBUyxTQUFTLG1CQUFpQztBQUN4RCxNQUFJLHFCQUFxQixpQkFBaUIsTUFBTSx5QkFBMkI7QUFDekUsVUFBTSxJQUFJLE1BQU0sZ0dBQWdHO0FBQUEsRUFDbEg7QUFDRjtBQVNBLGVBQXNCLG9CQUFtQztBQUN2RCxNQUFJO0FBQ0YsY0FBTSwwQkFBYSxpQkFBaUIsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUFBLEVBQ3JELFFBQVE7QUFDTixVQUFNLElBQUksTUFBTSxtRUFBbUU7QUFBQSxFQUNyRjtBQUNGO0FBU0EsZUFBc0IsMEJBQXlDO0FBQzdELE1BQUk7QUFDRixjQUFNLDBCQUFhLGdCQUFnQixFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDcEQsUUFBUTtBQUNOLFVBQU0sSUFBSSxNQUFNLDZFQUE2RTtBQUFBLEVBQy9GO0FBQ0Y7QUFTQSxlQUFzQixvQkFBbUM7QUFDdkQsTUFBSTtBQUNGLFVBQU0sU0FBUyxVQUFNLDBCQUFhLGdEQUFnRCxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2pHLFFBQUksUUFBUTtBQUNWLFlBQU0sSUFBSSxNQUFNO0FBQUEsSUFDbEI7QUFBQSxFQUNGLFFBQVE7QUFDTixVQUFNLElBQUksTUFBTSxrR0FBa0c7QUFBQSxFQUNwSDtBQUNGO0FBUU8sU0FBUyxxQkFBcUIsbUJBQThDO0FBQ2pGLFFBQU0sd0JBQXdCO0FBQzlCLFVBQVEsdUJBQXVCO0FBQUEsSUFDN0IsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUNILGFBQU87QUFBQSxJQUVUO0FBQ0UsVUFBSSwrQkFBK0IsS0FBSyxpQkFBaUIsR0FBRztBQUMxRCxlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU87QUFBQSxFQUNYO0FBQ0Y7QUFVQSxlQUFzQixxQkFBcUIsWUFBb0Isa0JBQTBDO0FBQ3ZHLFlBQU0sMkJBQWUsQ0FBQyxlQUFlO0FBQ25DLGVBQVcsVUFBVTtBQUFBLEVBQ3ZCLENBQUM7QUFFRCxZQUFNLCtCQUFtQixDQUFDLG1CQUFtQjtBQUMzQyxtQkFBZSxVQUFVO0FBQUEsRUFDM0IsR0FBRyxFQUFFLGVBQWUsS0FBSyxDQUFDO0FBRTFCLE1BQUksa0JBQWtCO0FBQ3BCLFVBQU0sd0JBQXdCLE1BQU0seUJBQXlCO0FBRTdELGNBQU0sc0JBQW1CLHVEQUF3QixjQUFjLENBQUMsYUFBYTtBQUMzRSxlQUFTLGdCQUFnQjtBQUN6QixlQUFTLFVBQVU7QUFBQSxJQUNyQixDQUFDO0FBRUQsY0FBTSxzQkFBaUMsdURBQXdCLGNBQWMsQ0FBQyxhQUFhO0FBQ3pGLGVBQVMsVUFBVSxJQUFJO0FBQUEsSUFDekIsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQVNBLGVBQXNCLGNBQWMsbUJBQTRDO0FBQzlFLFFBQU0sY0FBYyxxQkFBcUIsaUJBQWlCO0FBQzFELE1BQUksZ0JBQWdCLHVCQUEwQjtBQUM1QyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sYUFBYSxVQUFNLDJCQUFlO0FBQ3hDLFFBQU0saUJBQWlCLFdBQVc7QUFFbEMsUUFBTSxRQUFRLGVBQWUsTUFBTSxvQ0FBb0M7QUFDdkUsTUFBSSxDQUFDLE9BQU87QUFDVixVQUFNLElBQUksTUFBTSxtQ0FBbUMsY0FBYyxFQUFFO0FBQUEsRUFDckU7QUFFQSxNQUFJLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQztBQUMzQixNQUFJLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQztBQUMzQixNQUFJLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQztBQUMzQixNQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxJQUFJO0FBRXpDLFVBQVEsYUFBYTtBQUFBLElBQ25CLEtBQUs7QUFDSDtBQUNBLGNBQVE7QUFDUixjQUFRO0FBQ1IsYUFBTztBQUNQO0FBQUEsSUFDRixLQUFLO0FBQ0g7QUFDQSxjQUFRO0FBQ1IsYUFBTztBQUNQO0FBQUEsSUFDRixLQUFLO0FBQ0g7QUFDQSxhQUFPO0FBQ1A7QUFBQSxJQUNGLEtBQUs7QUFDSDtBQUNBO0FBQUEsRUFDSjtBQUVBLFNBQU8sR0FBRyxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxPQUFPLElBQUksU0FBUyxJQUFJLEtBQUssRUFBRTtBQUNyRTtBQU9BLGVBQWUsMkJBQTRDO0FBQ3pELFFBQU0sV0FBVyxNQUFNLE1BQU0sMkVBQTJFO0FBQ3hHLFFBQU0sdUJBQXVCLE1BQU0sU0FBUyxLQUFLO0FBQ2pELFNBQU8scUJBQXFCO0FBQzlCO0FBV0EsZUFBc0IsZ0JBQWdCLFlBQW1DO0FBQ3ZFLFFBQU0sb0JBQWdCLGlDQUFvQix1REFBd0IsV0FBVztBQUM3RSxNQUFJO0FBQ0osTUFBSSxLQUFDLDJCQUFXLGFBQWEsR0FBRztBQUM5Qiw2QkFBeUIsQ0FBQztBQUFBLEVBQzVCLE9BQU87QUFDTCxVQUFNLFVBQVUsVUFBTSwwQkFBUyxlQUFlLE9BQU87QUFDckQsNkJBQXlCLFFBQVEsTUFBTSxJQUFJLEVBQUUsTUFBTSxDQUFDO0FBQ3BELFFBQUksdUJBQXVCLEdBQUcsRUFBRSxNQUFNLElBQUk7QUFDeEMsNkJBQXVCLElBQUk7QUFBQSxJQUM3QjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFVBQVUsdUJBQXVCLENBQUMsR0FBRyxRQUFRLE9BQU8sRUFBRTtBQUM1RCxRQUFNLGNBQWMsVUFBVSxHQUFHLE9BQU8sV0FBVztBQUNuRCxRQUFNLGtCQUFrQixVQUFNLDBCQUFhLFdBQVcsV0FBVywrQkFBK0IsRUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTztBQUUvSCxNQUFJLGVBQWU7QUFBQTtBQUFBLEtBQXFCLFVBQVU7QUFBQTtBQUFBO0FBRWxELGFBQVcsV0FBVyxnQkFBZ0I7QUFDcEMsb0JBQWdCLEtBQUssT0FBTztBQUFBO0FBQUEsRUFDOUI7QUFFQSxNQUFJLHVCQUF1QixTQUFTLEdBQUc7QUFDckMsb0JBQWdCO0FBQ2hCLGVBQVcsUUFBUSx3QkFBd0I7QUFDekMsc0JBQWdCLEdBQUcsSUFBSTtBQUFBO0FBQUEsSUFDekI7QUFBQSxFQUNGO0FBRUEsWUFBTSwyQkFBVSxlQUFlLGNBQWMsT0FBTztBQUVwRCxZQUFNLGtDQUFnQixVQUFRLE9BQU8sVUFBUSxNQUFNLEVBQUUsU0FBUyxxQkFBcUIsdURBQXdCLFdBQVcseUNBQXlDO0FBQ2pLO0FBUUEsZUFBc0IscUJBQXFCLFlBQW1DO0FBQzVFLFFBQU0sUUFBUTtBQUFBLElBQ1osdURBQXdCO0FBQUEsSUFDeEIsdURBQXdCO0FBQUEsSUFDeEIsdURBQXdCO0FBQUEsSUFDeEIsdURBQXdCO0FBQUEsSUFDeEIsdURBQXdCO0FBQUEsRUFDMUIsRUFBRSxPQUFPLGNBQVEsK0JBQVcsaUNBQW9CLElBQUksQ0FBQyxDQUFDO0FBQ3RELFlBQU0sMEJBQWEsQ0FBQyxPQUFPLE9BQU8sR0FBRyxLQUFLLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUM1RCxZQUFNLDBCQUFhLGlCQUFpQixVQUFVLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNuRTtBQVFBLGVBQXNCLFVBQVUsWUFBbUM7QUFDakUsWUFBTSwwQkFBYSxjQUFjLFVBQVUsT0FBTyxVQUFVLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNqRjtBQU9BLGVBQXNCLFVBQXlCO0FBQzdDLFlBQU0sMEJBQWEsMEJBQTBCLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDOUQ7QUFPQSxlQUFzQixzQkFBcUM7QUFDekQsWUFBTSx3QkFBRyxpQ0FBb0IsdURBQXdCLFlBQVksT0FBRyxxQ0FBb0Isa0JBQUssdURBQXdCLFdBQVcsdURBQXdCLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDekw7QUFRQSxlQUFzQixnQkFBZ0IsWUFBcUM7QUFDekUsUUFBTSxvQkFBZ0IsaUNBQW9CLHVEQUF3QixXQUFXO0FBQzdFLFFBQU0sVUFBVSxVQUFNLDBCQUFTLGVBQWUsT0FBTztBQUNyRCxRQUFNLG9CQUFvQixXQUFXLFdBQVcsS0FBSyxLQUFLO0FBQzFELFFBQU0sUUFBUSxRQUFRLE1BQU0sSUFBSSxPQUFPO0FBQUEsS0FBUSxpQkFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQXNCLENBQUM7QUFDdkYsTUFBSSxlQUFlLFFBQVEsTUFBTSxDQUFDLElBQUksU0FBUztBQUUvQyxRQUFNLFFBQVEsVUFBTSwwQkFBYSwrQkFBK0IsRUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTztBQUMvRixRQUFNLGtCQUFrQixLQUFLLENBQUM7QUFDOUIsTUFBSSxhQUFhO0FBRWpCLFFBQU0sVUFBVSxVQUFNLDBCQUFhLG1DQUFtQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBRXJGLE1BQUksaUJBQWlCO0FBQ25CLGlCQUFhLEdBQUcsT0FBTyxZQUFZLGVBQWUsTUFBTSxVQUFVO0FBQUEsRUFDcEUsT0FBTztBQUNMLGlCQUFhLEdBQUcsT0FBTyxZQUFZLFVBQVU7QUFBQSxFQUMvQztBQUVBLGtCQUFnQix1QkFBdUIsVUFBVTtBQUNqRCxTQUFPO0FBQ1Q7QUFXQSxlQUFzQixxQkFBcUIsWUFBb0Isa0JBQTBDO0FBQ3ZHLE1BQUk7QUFFSixNQUFJLGtCQUFrQjtBQUNwQixVQUFNLGVBQVcsaUNBQW9CLHVEQUF3QixTQUFTO0FBQ3RFLFVBQU0sWUFBWSxVQUFNLHdCQUFhLFFBQVE7QUFDN0MsZ0JBQVksVUFBVSxJQUFJLGtCQUFZLGtCQUFLLFVBQVUsUUFBUSxDQUFDO0FBQUEsRUFDaEUsT0FBTztBQUVMLFVBQU0sTUFBTSxJQUFJLGVBQUFDLFFBQU87QUFDdkIsUUFBSSxtQkFBZSxpQ0FBb0IsMkRBQTBCLElBQUksR0FBRywyREFBMEIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLFNBQVMsTUFBTSxDQUFDO0FBRWhKLFVBQU0sUUFBUTtBQUFBLE1BQ1osMkRBQTBCO0FBQUEsTUFDMUIsMkRBQTBCO0FBQUEsTUFDMUIsMkRBQTBCO0FBQUEsTUFDMUIsMkRBQTBCO0FBQUEsSUFDNUI7QUFFQSxlQUFXLFFBQVEsT0FBTztBQUN4QixVQUFJLGlCQUFhLGlDQUFvQixJQUFJLENBQUM7QUFBQSxJQUM1QztBQUVBLFVBQU0sYUFBYSxVQUFNLDJCQUFlO0FBQ3hDLFVBQU0sa0JBQWMscUNBQW9CLGtCQUFLLDJEQUEwQixNQUFNLEdBQUcsV0FBVyxJQUFJLElBQUksVUFBVSxNQUFNLENBQUM7QUFDcEgsUUFBSSxTQUFTLFdBQVc7QUFDeEIsZ0JBQVksQ0FBQyxXQUFXO0FBQUEsRUFDMUI7QUFFQSxZQUFNLDBCQUFhLENBQUMsTUFBTSxXQUFXLFVBQVUsWUFBWSxHQUFHLFdBQVcsV0FBVyxJQUFJLFVBQVUsSUFBSSxnQkFBZ0IsR0FBRyxHQUFHO0FBQUEsSUFDMUgsT0FBTztBQUFBLElBQ1AsT0FBTyxNQUFNLGdCQUFnQixVQUFVO0FBQUEsRUFDekMsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfcHJvbWlzZXMiLCAiQWRtWmlwIl0KfQo=
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Jpbi92ZXJzaW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzW1wiaW1wb3J0Lm1ldGEudXJsXCJdID8/ICgoKT0+cmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkpKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAZmlsZVxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB2ZXJzaW9uIHVwZGF0ZXMgaW4gYSBwcm9qZWN0LlxuICogSXQgaW5jbHVkZXMgdGFza3Mgc3VjaCBhcyB2YWxpZGF0aW5nIHZlcnNpb24gdXBkYXRlIHR5cGVzLCBjaGVja2luZyB0aGUgc3RhdGVcbiAqIG9mIEdpdCBhbmQgR2l0SHViIENMSSwgdXBkYXRpbmcgdmVyc2lvbiBudW1iZXJzIGluIGZpbGVzLCBhbmQgcGVyZm9ybWluZ1xuICogR2l0IG9wZXJhdGlvbnMgc3VjaCBhcyB0YWdnaW5nIGFuZCBwdXNoaW5nLlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9uLCBgdXBkYXRlVmVyc2lvbmAsIGNvb3JkaW5hdGVzIHRoZXNlIHRhc2tzIHRvIGVuc3VyZSB0aGF0XG4gKiB2ZXJzaW9uIHVwZGF0ZXMgYXJlIGhhbmRsZWQgY29uc2lzdGVudGx5IGFuZCBjb3JyZWN0bHkuIEl0IGFsc28gaW50ZWdyYXRlc1xuICogd2l0aCBPYnNpZGlhbiBwbHVnaW5zLCBpZiBhcHBsaWNhYmxlLCBieSB1cGRhdGluZyByZWxldmFudCBmaWxlcyBhbmQgcmVsZWFzaW5nXG4gKiBuZXcgdmVyc2lvbnMgb24gR2l0SHViLlxuICovXG5cbmltcG9ydCB7IFRhc2tSZXN1bHQgfSBmcm9tIFwiLi4vVGFza1Jlc3VsdC50c1wiO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICByZXNvbHZlUGF0aEZyb21Sb290XG59IGZyb20gXCIuLi9Sb290LnRzXCI7XG5pbXBvcnQgeyBzcGVsbGNoZWNrIH0gZnJvbSBcIi4vc3BlbGxjaGVjay50c1wiO1xuaW1wb3J0IHsgbGludCB9IGZyb20gXCIuL0VTTGludC9FU0xpbnQudHNcIjtcbmltcG9ydCB7XG4gIGVkaXROcG1QYWNrYWdlLFxuICBlZGl0TnBtUGFja2FnZUxvY2ssXG4gIHJlYWROcG1QYWNrYWdlXG59IGZyb20gXCIuLi9OcG0udHNcIjtcbmltcG9ydCB7IGVkaXRKc29uIH0gZnJvbSBcIi4uL0pTT04udHNcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHtcbiAgY3AsXG4gIHJlYWRGaWxlLFxuICB3cml0ZUZpbGVcbn0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUludGVyZmFjZSB9IGZyb20gXCJub2RlOnJlYWRsaW5lL3Byb21pc2VzXCI7XG5pbXBvcnQgeyByZWFkZGlyUG9zaXggfSBmcm9tIFwiLi4vRnMudHNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwiLi4vUGF0aC50c1wiO1xuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tIFwiLi4vb2JzaWRpYW4vUGx1Z2luL09ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLnRzXCI7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSBcIi4vT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy50c1wiO1xuaW1wb3J0IEFkbVppcCBmcm9tIFwiYWRtLXppcFwiO1xuXG4vKipcbiAqIEVudW0gcmVwcmVzZW50aW5nIGRpZmZlcmVudCB0eXBlcyBvZiB2ZXJzaW9uIHVwZGF0ZXMuXG4gKi9cbmVudW0gVmVyc2lvblVwZGF0ZVR5cGUge1xuICBNYWpvciA9IFwibWFqb3JcIixcbiAgTWlub3IgPSBcIm1pbm9yXCIsXG4gIFBhdGNoID0gXCJwYXRjaFwiLFxuICBCZXRhID0gXCJiZXRhXCIsXG4gIE1hbnVhbCA9IFwibWFudWFsXCIsXG4gIEludmFsaWQgPSBcImludmFsaWRcIlxufVxuXG4vKipcbiAqIFR5cGUgcmVwcmVzZW50aW5nIHRoZSBtYW5pZmVzdCBmaWxlIGZvcm1hdCBmb3IgT2JzaWRpYW4gcGx1Z2lucy5cbiAqL1xudHlwZSBNYW5pZmVzdCA9IHtcbiAgbWluQXBwVmVyc2lvbjogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFR5cGUgcmVwcmVzZW50aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgT2JzaWRpYW4gcmVsZWFzZXMgSlNPTi5cbiAqL1xudHlwZSBPYnNpZGlhblJlbGVhc2VzSnNvbiA9IHtcbiAgbmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgdXBkYXRlIHR5cGUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIHNlcmllcyBvZiB0YXNrcyB0byBoYW5kbGUgdmVyc2lvbiB1cGRhdGVzOlxuICogMS4gVmFsaWRhdGVzIHRoZSB2ZXJzaW9uIHVwZGF0ZSB0eXBlLlxuICogMi4gQ2hlY2tzIGlmIEdpdCBhbmQgR2l0SHViIENMSSBhcmUgaW5zdGFsbGVkLlxuICogMy4gVmVyaWZpZXMgdGhhdCB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgY2xlYW4uXG4gKiA0LiBSdW5zIHNwZWxsY2hlY2sgYW5kIGxpbnRpbmcuXG4gKiA1LiBCdWlsZHMgdGhlIHByb2plY3QuXG4gKiA2LiBVcGRhdGVzIHZlcnNpb24gaW4gZmlsZXMgYW5kIGNoYW5nZWxvZy5cbiAqIDcuIEFkZHMgdXBkYXRlZCBmaWxlcyB0byBHaXQsIHRhZ3MgdGhlIGNvbW1pdCwgYW5kIHB1c2hlcyB0byB0aGUgcmVwb3NpdG9yeS5cbiAqIDguIElmIGFuIE9ic2lkaWFuIHBsdWdpbiwgY29waWVzIHRoZSB1cGRhdGVkIG1hbmlmZXN0IGFuZCBwdWJsaXNoZXMgYSBHaXRIdWIgcmVsZWFzZS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvblVwZGF0ZVR5cGUgLSBUaGUgdHlwZSBvZiB2ZXJzaW9uIHVwZGF0ZSB0byBwZXJmb3JtIChtYWpvciwgbWlub3IsIHBhdGNoLCBiZXRhLCBvciBtYW51YWwpLlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIGBUYXNrUmVzdWx0YCBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHZlcnNpb24gdXBkYXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlVmVyc2lvbih2ZXJzaW9uVXBkYXRlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxUYXNrUmVzdWx0IHwgdm9pZD4ge1xuICBpZiAoIXZlcnNpb25VcGRhdGVUeXBlKSB7XG4gICAgY29uc3QgbnBtT2xkVmVyc2lvbiA9IHByb2Nlc3MuZW52W1wibnBtX29sZF92ZXJzaW9uXCJdO1xuICAgIGNvbnN0IG5wbU5ld1ZlcnNpb24gPSBwcm9jZXNzLmVudltcIm5wbV9uZXdfdmVyc2lvblwiXTtcblxuICAgIGlmIChucG1PbGRWZXJzaW9uICYmIG5wbU5ld1ZlcnNpb24pIHtcbiAgICAgIGF3YWl0IHVwZGF0ZVZlcnNpb25JbkZpbGVzKG5wbU9sZFZlcnNpb24sIGZhbHNlKTtcbiAgICAgIHJldHVybiB1cGRhdGVWZXJzaW9uKG5wbU5ld1ZlcnNpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzT2JzaWRpYW5QbHVnaW4gPSBleGlzdHNTeW5jKHJlc29sdmVQYXRoRnJvbVJvb3QoT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFuaWZlc3RKc29uKSk7XG4gIHJldHVybiBhd2FpdCBUYXNrUmVzdWx0LmNoYWluKFtcbiAgICBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICB2YWxpZGF0ZSh2ZXJzaW9uVXBkYXRlVHlwZSk7XG4gICAgICBhd2FpdCBjaGVja0dpdEluc3RhbGxlZCgpO1xuICAgICAgYXdhaXQgY2hlY2tHaXRSZXBvQ2xlYW4oKTtcbiAgICAgIGF3YWl0IGNoZWNrR2l0SHViQ2xpSW5zdGFsbGVkKCk7XG4gICAgfSxcbiAgICAoKTogUHJvbWlzZTxUYXNrUmVzdWx0PiA9PiBzcGVsbGNoZWNrKCksXG4gICAgYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgZXhlY0Zyb21Sb290KFwibnBtIHJ1biBidWlsZFwiKTtcbiAgICB9LFxuICAgICgpOiBQcm9taXNlPFRhc2tSZXN1bHQ+ID0+IGxpbnQoKSxcbiAgICBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBuZXdWZXJzaW9uID0gYXdhaXQgZ2V0TmV3VmVyc2lvbih2ZXJzaW9uVXBkYXRlVHlwZSk7XG4gICAgICBhd2FpdCB1cGRhdGVWZXJzaW9uSW5GaWxlcyhuZXdWZXJzaW9uLCBpc09ic2lkaWFuUGx1Z2luKTtcbiAgICAgIGF3YWl0IHVwZGF0ZUNoYW5nZWxvZyhuZXdWZXJzaW9uKTtcbiAgICAgIGF3YWl0IGFkZFVwZGF0ZWRGaWxlc1RvR2l0KG5ld1ZlcnNpb24pO1xuICAgICAgYXdhaXQgYWRkR2l0VGFnKG5ld1ZlcnNpb24pO1xuICAgICAgYXdhaXQgZ2l0UHVzaCgpO1xuICAgICAgaWYgKGlzT2JzaWRpYW5QbHVnaW4pIHtcbiAgICAgICAgYXdhaXQgY29weVVwZGF0ZWRNYW5pZmVzdCgpO1xuICAgICAgfVxuICAgICAgYXdhaXQgcHVibGlzaEdpdEh1YlJlbGVhc2UobmV3VmVyc2lvbiwgaXNPYnNpZGlhblBsdWdpbik7XG4gICAgfVxuICBdKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHZlcnNpb24gdXBkYXRlIHR5cGUgdG8gZW5zdXJlIGl0IGlzIGVpdGhlciBhIHJlY29nbml6ZWQgdHlwZVxuICogb3IgYSB2YWxpZCBtYW51YWwgdmVyc2lvbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZlcnNpb25VcGRhdGVUeXBlIC0gVGhlIHZlcnNpb24gdXBkYXRlIHR5cGUgdG8gdmFsaWRhdGUuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSB2ZXJzaW9uIHVwZGF0ZSB0eXBlIGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZSh2ZXJzaW9uVXBkYXRlVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChnZXRWZXJzaW9uVXBkYXRlVHlwZSh2ZXJzaW9uVXBkYXRlVHlwZSkgPT09IFZlcnNpb25VcGRhdGVUeXBlLkludmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZlcnNpb24gdXBkYXRlIHR5cGUuIFBsZWFzZSB1c2UgJ21ham9yJywgJ21pbm9yJywgJ3BhdGNoJywgb3IgJ3gueS56Wy1zdWZmaXhdJyBmb3JtYXQuXCIpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIEdpdCBpcyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS5cbiAqXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgR2l0IGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHRocm93cyBFcnJvciBpZiBHaXQgaXMgbm90IGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrR2l0SW5zdGFsbGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNGcm9tUm9vdChcImdpdCAtLXZlcnNpb25cIiwgeyBxdWlldDogdHJ1ZSB9KTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR2l0IGlzIG5vdCBpbnN0YWxsZWQuIFBsZWFzZSBpbnN0YWxsIGl0IGZyb20gaHR0cHM6Ly9naXQtc2NtLmNvbS9cIik7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIEdpdEh1YiBDTEkgaXMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uXG4gKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBHaXRIdWIgQ0xJIGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgR2l0SHViIENMSSBpcyBub3QgaW5zdGFsbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tHaXRIdWJDbGlJbnN0YWxsZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY0Zyb21Sb290KFwiZ2ggLS12ZXJzaW9uXCIsIHsgcXVpZXQ6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdpdEh1YiBDTEkgaXMgbm90IGluc3RhbGxlZC4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSBodHRwczovL2NsaS5naXRodWIuY29tL1wiKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgY2xlYW4sIG1lYW5pbmcgdGhlcmUgYXJlIG5vIHVuY29tbWl0dGVkIGNoYW5nZXMuXG4gKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBHaXQgcmVwb3NpdG9yeSBpcyBub3QgY2xlYW4uXG4gKlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgbm90IGNsZWFuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tHaXRSZXBvQ2xlYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlY0Zyb21Sb290KFwiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLXVudHJhY2tlZC1maWxlcz1hbGxcIiwgeyBxdWlldDogdHJ1ZSB9KTtcbiAgICBpZiAoc3Rkb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdpdCByZXBvc2l0b3J5IGlzIG5vdCBjbGVhbi4gUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYmVmb3JlIHJlbGVhc2luZyBhIG5ldyB2ZXJzaW9uLlwiKTtcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIHR5cGUgb2YgdmVyc2lvbiB1cGRhdGUgYmFzZWQgb24gdGhlIGlucHV0IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvblVwZGF0ZVR5cGUgLSBUaGUgaW5wdXQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbiB1cGRhdGUgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGBWZXJzaW9uVXBkYXRlVHlwZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzaW9uVXBkYXRlVHlwZSh2ZXJzaW9uVXBkYXRlVHlwZTogc3RyaW5nKTogVmVyc2lvblVwZGF0ZVR5cGUge1xuICBjb25zdCB2ZXJzaW9uVXBkYXRlVHlwZUVudW0gPSB2ZXJzaW9uVXBkYXRlVHlwZSBhcyBWZXJzaW9uVXBkYXRlVHlwZTtcbiAgc3dpdGNoICh2ZXJzaW9uVXBkYXRlVHlwZUVudW0pIHtcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLk1ham9yOlxuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuTWlub3I6XG4gICAgY2FzZSBWZXJzaW9uVXBkYXRlVHlwZS5QYXRjaDpcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLkJldGE6XG4gICAgICByZXR1cm4gdmVyc2lvblVwZGF0ZVR5cGVFbnVtO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICgvXlxcZCtcXC5cXGQrXFwuXFxkKygtW1xcd1xcZC4tXSspPyQvLnRlc3QodmVyc2lvblVwZGF0ZVR5cGUpKSB7XG4gICAgICAgIHJldHVybiBWZXJzaW9uVXBkYXRlVHlwZS5NYW51YWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBWZXJzaW9uVXBkYXRlVHlwZS5JbnZhbGlkO1xuICB9XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdmVyc2lvbiBpbiB2YXJpb3VzIGZpbGVzLCBpbmNsdWRpbmcgYHBhY2thZ2UuanNvbmAsIGBwYWNrYWdlLWxvY2suanNvbmAsXG4gKiBhbmQgT2JzaWRpYW4gcGx1Z2luIG1hbmlmZXN0cyBpZiBhcHBsaWNhYmxlLlxuICpcbiAqIEBwYXJhbSBuZXdWZXJzaW9uIC0gVGhlIG5ldyB2ZXJzaW9uIHN0cmluZyB0byB1cGRhdGUgaW4gdGhlIGZpbGVzLlxuICogQHBhcmFtIGlzT2JzaWRpYW5QbHVnaW4gLSBXaGV0aGVyIHRoZSBwcm9qZWN0IGlzIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqIEByZXR1cm5zIEEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlVmVyc2lvbkluRmlsZXMobmV3VmVyc2lvbjogc3RyaW5nLCBpc09ic2lkaWFuUGx1Z2luOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGVkaXROcG1QYWNrYWdlKChucG1QYWNrYWdlKSA9PiB7XG4gICAgbnBtUGFja2FnZS52ZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgfSk7XG5cbiAgYXdhaXQgZWRpdE5wbVBhY2thZ2VMb2NrKChucG1QYWNrYWdlTG9jaykgPT4ge1xuICAgIG5wbVBhY2thZ2VMb2NrLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgIGNvbnN0IGRlZmF1bHRQYWNrYWdlID0gbnBtUGFja2FnZUxvY2sucGFja2FnZXM/LltcIlwiXTtcbiAgICBpZiAoZGVmYXVsdFBhY2thZ2UpIHtcbiAgICAgIGRlZmF1bHRQYWNrYWdlLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgIH1cbiAgfSwgeyBza2lwSWZNaXNzaW5nOiB0cnVlIH0pO1xuXG4gIGlmIChpc09ic2lkaWFuUGx1Z2luKSB7XG4gICAgY29uc3QgbGF0ZXN0T2JzaWRpYW5WZXJzaW9uID0gYXdhaXQgZ2V0TGF0ZXN0T2JzaWRpYW5WZXJzaW9uKCk7XG5cbiAgICBhd2FpdCBlZGl0SnNvbjxNYW5pZmVzdD4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFuaWZlc3RKc29uLCAobWFuaWZlc3QpID0+IHtcbiAgICAgIG1hbmlmZXN0Lm1pbkFwcFZlcnNpb24gPSBsYXRlc3RPYnNpZGlhblZlcnNpb247XG4gICAgICBtYW5pZmVzdC52ZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgICB9KTtcblxuICAgIGF3YWl0IGVkaXRKc29uPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLlZlcnNpb25zSnNvbiwgKHZlcnNpb25zKSA9PiB7XG4gICAgICB2ZXJzaW9uc1tuZXdWZXJzaW9uXSA9IGxhdGVzdE9ic2lkaWFuVmVyc2lvbjtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG5ldyB2ZXJzaW9uIHN0cmluZyBiYXNlZCBvbiB0aGUgY3VycmVudCB2ZXJzaW9uIGFuZCB0aGUgc3BlY2lmaWVkIHVwZGF0ZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uVXBkYXRlVHlwZSAtIFRoZSB0eXBlIG9mIHZlcnNpb24gdXBkYXRlIChtYWpvciwgbWlub3IsIHBhdGNoLCBiZXRhLCBvciBtYW51YWwpLlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byB0aGUgbmV3IHZlcnNpb24gc3RyaW5nLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgY3VycmVudCB2ZXJzaW9uIGZvcm1hdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TmV3VmVyc2lvbih2ZXJzaW9uVXBkYXRlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgdmVyc2lvblR5cGUgPSBnZXRWZXJzaW9uVXBkYXRlVHlwZSh2ZXJzaW9uVXBkYXRlVHlwZSk7XG4gIGlmICh2ZXJzaW9uVHlwZSA9PT0gVmVyc2lvblVwZGF0ZVR5cGUuTWFudWFsKSB7XG4gICAgcmV0dXJuIHZlcnNpb25VcGRhdGVUeXBlO1xuICB9XG5cbiAgY29uc3QgbnBtUGFja2FnZSA9IGF3YWl0IHJlYWROcG1QYWNrYWdlKCk7XG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gbnBtUGFja2FnZS52ZXJzaW9uO1xuXG4gIGNvbnN0IG1hdGNoID0gY3VycmVudFZlcnNpb24ubWF0Y2goL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLWJldGEuKFxcZCspKT8vKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjdXJyZW50IHZlcnNpb24gZm9ybWF0OiAke2N1cnJlbnRWZXJzaW9ufWApO1xuICB9XG5cbiAgbGV0IG1ham9yID0gTnVtYmVyKG1hdGNoWzFdKTtcbiAgbGV0IG1pbm9yID0gTnVtYmVyKG1hdGNoWzJdKTtcbiAgbGV0IHBhdGNoID0gTnVtYmVyKG1hdGNoWzNdKTtcbiAgbGV0IGJldGEgPSBtYXRjaFs1XSA/IE51bWJlcihtYXRjaFs1XSkgOiAwO1xuXG4gIHN3aXRjaCAodmVyc2lvblR5cGUpIHtcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLk1ham9yOlxuICAgICAgbWFqb3IrKztcbiAgICAgIG1pbm9yID0gMDtcbiAgICAgIHBhdGNoID0gMDtcbiAgICAgIGJldGEgPSAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWZXJzaW9uVXBkYXRlVHlwZS5NaW5vcjpcbiAgICAgIG1pbm9yKys7XG4gICAgICBwYXRjaCA9IDA7XG4gICAgICBiZXRhID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmVyc2lvblVwZGF0ZVR5cGUuUGF0Y2g6XG4gICAgICBwYXRjaCsrO1xuICAgICAgYmV0YSA9IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFZlcnNpb25VcGRhdGVUeXBlLkJldGE6XG4gICAgICBiZXRhKys7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0ke2JldGEgPiAwID8gYC1iZXRhLiR7YmV0YX1gIDogXCJcIn1gO1xufVxuXG4vKipcbiAqIEZldGNoZXMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE9ic2lkaWFuIGZyb20gdGhlIEdpdEh1YiByZWxlYXNlcyBBUEkuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE9ic2lkaWFuLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RPYnNpZGlhblZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9yZWxlYXNlcy9sYXRlc3RcIik7XG4gIGNvbnN0IG9ic2lkaWFuUmVsZWFzZXNKc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIE9ic2lkaWFuUmVsZWFzZXNKc29uO1xuICByZXR1cm4gb2JzaWRpYW5SZWxlYXNlc0pzb24ubmFtZTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBjaGFuZ2Vsb2cgZmlsZSB3aXRoIG5ldyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBjb21taXQgbWVzc2FnZXMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgY3VycmVudCBjaGFuZ2Vsb2csIGFwcGVuZHMgbmV3IGVudHJpZXMgZm9yIHRoZSBsYXRlc3QgdmVyc2lvbixcbiAqIGFuZCBwcm9tcHRzIHRoZSB1c2VyIHRvIHJldmlldyB0aGUgY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gbmV3VmVyc2lvbiAtIFRoZSBuZXcgdmVyc2lvbiBudW1iZXIgdG8gYmUgYWRkZWQgdG8gdGhlIGNoYW5nZWxvZy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNoYW5nZWxvZyB1cGRhdGUgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVDaGFuZ2Vsb2cobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNoYW5nZWxvZ1BhdGggPSByZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkNoYW5nZWxvZ01kKTtcbiAgbGV0IHByZXZpb3VzQ2hhbmdlbG9nTGluZXM6IHN0cmluZ1tdO1xuICBpZiAoIWV4aXN0c1N5bmMoY2hhbmdlbG9nUGF0aCkpIHtcbiAgICBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzID0gW107XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGNoYW5nZWxvZ1BhdGgsIFwidXRmLThcIik7XG4gICAgcHJldmlvdXNDaGFuZ2Vsb2dMaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIikuc2xpY2UoMik7XG4gICAgaWYgKHByZXZpb3VzQ2hhbmdlbG9nTGluZXMuYXQoLTEpID09PSBcIlwiKSB7XG4gICAgICBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxhc3RUYWcgPSBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzWzBdPy5yZXBsYWNlKFwiIyMgXCIsIFwiXCIpO1xuICBjb25zdCBjb21taXRSYW5nZSA9IGxhc3RUYWcgPyBgJHtsYXN0VGFnfS4uSEVBRGAgOiBcIkhFQURcIjtcbiAgY29uc3QgY29tbWl0TWVzc2FnZXMgPSAoYXdhaXQgZXhlY0Zyb21Sb290KGBnaXQgbG9nICR7Y29tbWl0UmFuZ2V9IC0tZm9ybWF0PSVzIC0tZmlyc3QtcGFyZW50YCwgeyBxdWlldDogdHJ1ZSB9KSkuc3BsaXQoL1xccj9cXG4vKTtcblxuICBsZXQgbmV3Q2hhbmdlTG9nID0gYCMgQ0hBTkdFTE9HXFxuXFxuIyMgJHtuZXdWZXJzaW9ufVxcblxcbmA7XG5cbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIGNvbW1pdE1lc3NhZ2VzKSB7XG4gICAgbmV3Q2hhbmdlTG9nICs9IGAtICR7bWVzc2FnZX1cXG5gO1xuICB9XG5cbiAgaWYgKHByZXZpb3VzQ2hhbmdlbG9nTGluZXMubGVuZ3RoID4gMCkge1xuICAgIG5ld0NoYW5nZUxvZyArPSBcIlxcblwiO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBwcmV2aW91c0NoYW5nZWxvZ0xpbmVzKSB7XG4gICAgICBuZXdDaGFuZ2VMb2cgKz0gYCR7bGluZX1cXG5gO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IHdyaXRlRmlsZShjaGFuZ2Vsb2dQYXRoLCBuZXdDaGFuZ2VMb2csIFwidXRmLThcIik7XG5cbiAgYXdhaXQgY3JlYXRlSW50ZXJmYWNlKHByb2Nlc3Muc3RkaW4sIHByb2Nlc3Muc3Rkb3V0KS5xdWVzdGlvbihgUGxlYXNlIHVwZGF0ZSB0aGUgJHtPYnNpZGlhblBsdWdpblJlcG9QYXRocy5DaGFuZ2Vsb2dNZH0gZmlsZS4gUHJlc3MgRW50ZXIgd2hlbiB5b3UgYXJlIGRvbmUuLi5gKTtcbn1cblxuLyoqXG4gKiBBZGRzIHVwZGF0ZWQgZmlsZXMgdG8gdGhlIEdpdCBzdGFnaW5nIGFyZWEgYW5kIGNvbW1pdHMgdGhlbSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBuZXdWZXJzaW9uIC0gVGhlIG5ldyB2ZXJzaW9uIG51bWJlciB1c2VkIGFzIHRoZSBjb21taXQgbWVzc2FnZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGVzIGhhdmUgYmVlbiBhZGRlZCBhbmQgY29tbWl0dGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVXBkYXRlZEZpbGVzVG9HaXQobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGVzID0gW1xuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QYWNrYWdlSnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5QYWNrYWdlTG9ja0pzb24sXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuVmVyc2lvbnNKc29uLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkNoYW5nZWxvZ01kXG4gIF0uZmlsdGVyKGZpbGUgPT4gZXhpc3RzU3luYyhyZXNvbHZlUGF0aEZyb21Sb290KGZpbGUpKSk7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXCJnaXRcIiwgXCJhZGRcIiwgLi4uZmlsZXNdLCB7IHF1aWV0OiB0cnVlIH0pO1xuICBhd2FpdCBleGVjRnJvbVJvb3QoYGdpdCBjb21taXQgLW0gJHtuZXdWZXJzaW9ufWAsIHsgcXVpZXQ6IHRydWUgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIEdpdCB0YWcgZm9yIHRoZSBuZXcgdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gbmV3VmVyc2lvbiAtIFRoZSBuZXcgdmVyc2lvbiBudW1iZXIgdG8gdXNlIGZvciB0aGUgdGFnLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGFnIGhhcyBiZWVuIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRHaXRUYWcobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChgZ2l0IHRhZyAtYSAke25ld1ZlcnNpb259IC1tICR7bmV3VmVyc2lvbn1gLCB7IHF1aWV0OiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIFB1c2hlcyBjb21taXRzIGFuZCB0YWdzIHRvIHRoZSByZW1vdGUgR2l0IHJlcG9zaXRvcnkuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcHVzaCBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaXRQdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjRnJvbVJvb3QoXCJnaXQgcHVzaCAtLWZvbGxvdy10YWdzXCIsIHsgcXVpZXQ6IHRydWUgfSk7XG59XG5cbi8qKlxuICogQ29waWVzIHRoZSB1cGRhdGVkIG1hbmlmZXN0IGZpbGUgdG8gdGhlIGRpc3RyaWJ1dGlvbiBidWlsZCBkaXJlY3RvcnkuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29weSBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5VXBkYXRlZE1hbmlmZXN0KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBjcChyZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbiksIHJlc29sdmVQYXRoRnJvbVJvb3Qoam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EaXN0QnVpbGQsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbikpLCB7IGZvcmNlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgYSBzcGVjaWZpYyB2ZXJzaW9uIGZyb20gdGhlIGNoYW5nZWxvZy5cbiAqXG4gKiBAcGFyYW0gbmV3VmVyc2lvbiAtIFRoZSBuZXcgdmVyc2lvbiBudW1iZXIgZm9yIHdoaWNoIHRvIGdldCB0aGUgcmVsZWFzZSBub3Rlcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgc3BlY2lmaWVkIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZWxlYXNlTm90ZXMobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgY2hhbmdlbG9nUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3QoT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ2hhbmdlbG9nTWQpO1xuICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoY2hhbmdlbG9nUGF0aCwgXCJ1dGYtOFwiKTtcbiAgY29uc3QgbmV3VmVyc2lvbkVzY2FwZWQgPSBuZXdWZXJzaW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiXFxcXC5cIik7XG4gIGNvbnN0IG1hdGNoID0gY29udGVudC5tYXRjaChuZXcgUmVnRXhwKGBcXG4jIyAke25ld1ZlcnNpb25Fc2NhcGVkfVxcblxcbigoLnxcXG4pKz8pXFxuXFxuIyNgKSk7XG4gIGxldCByZWxlYXNlTm90ZXMgPSBtYXRjaCA/IG1hdGNoWzFdICsgXCJcXG5cXG5cIiA6IFwiXCI7XG5cbiAgY29uc3QgdGFncyA9IChhd2FpdCBleGVjRnJvbVJvb3QoXCJnaXQgdGFnIC0tc29ydD0tY3JlYXRvcmRhdGVcIiwgeyBxdWlldDogdHJ1ZSB9KSkuc3BsaXQoL1xccj9cXG4vKTtcbiAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gdGFnc1sxXTtcbiAgbGV0IGNoYW5nZXNVcmwgPSBcIlwiO1xuXG4gIGNvbnN0IHJlcG9VcmwgPSBhd2FpdCBleGVjRnJvbVJvb3QoXCJnaCByZXBvIHZpZXcgLS1qc29uIHVybCAtcSAudXJsXCIsIHsgcXVpZXQ6IHRydWUgfSk7XG5cbiAgaWYgKHByZXZpb3VzVmVyc2lvbikge1xuICAgIGNoYW5nZXNVcmwgPSBgJHtyZXBvVXJsfS9jb21wYXJlLyR7cHJldmlvdXNWZXJzaW9ufS4uLiR7bmV3VmVyc2lvbn1gO1xuICB9IGVsc2Uge1xuICAgIGNoYW5nZXNVcmwgPSBgJHtyZXBvVXJsfS9jb21taXRzLyR7bmV3VmVyc2lvbn1gO1xuICB9XG5cbiAgcmVsZWFzZU5vdGVzICs9IGAqKkZ1bGwgQ2hhbmdlbG9nKio6ICR7Y2hhbmdlc1VybH1gO1xuICByZXR1cm4gcmVsZWFzZU5vdGVzO1xufVxuXG4vKipcbiAqIFB1Ymxpc2hlcyBhIEdpdEh1YiByZWxlYXNlIGZvciB0aGUgbmV3IHZlcnNpb24uXG4gKlxuICogSGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgYSByZWxlYXNlIGFuZCB1cGxvYWRpbmcgZmlsZXMgZm9yIGVpdGhlciBhbiBPYnNpZGlhbiBwbHVnaW4gb3IgYW5vdGhlciBwcm9qZWN0LlxuICpcbiAqIEBwYXJhbSBuZXdWZXJzaW9uIC0gVGhlIG5ldyB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIHJlbGVhc2UuXG4gKiBAcGFyYW0gaXNPYnNpZGlhblBsdWdpbiAtIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBwcm9qZWN0IGlzIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlbGVhc2UgaGFzIGJlZW4gcHVibGlzaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaEdpdEh1YlJlbGVhc2UobmV3VmVyc2lvbjogc3RyaW5nLCBpc09ic2lkaWFuUGx1Z2luOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBmaWxlUGF0aHM6IHN0cmluZ1tdO1xuXG4gIGlmIChpc09ic2lkaWFuUGx1Z2luKSB7XG4gICAgY29uc3QgYnVpbGREaXIgPSByZXNvbHZlUGF0aEZyb21Sb290KE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCk7XG4gICAgY29uc3QgZmlsZU5hbWVzID0gYXdhaXQgcmVhZGRpclBvc2l4KGJ1aWxkRGlyKTtcbiAgICBmaWxlUGF0aHMgPSBmaWxlTmFtZXMubWFwKGZpbGVOYW1lID0+IGpvaW4oYnVpbGREaXIsIGZpbGVOYW1lKSk7XG4gIH0gZWxzZSB7XG5cbiAgICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKCk7XG4gICAgemlwLmFkZExvY2FsRm9sZGVyKHJlc29sdmVQYXRoRnJvbVJvb3QoT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0KSwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0LCAoZmlsZW5hbWUpID0+ICFmaWxlbmFtZS5lbmRzV2l0aChcIi56aXBcIikpO1xuXG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkNoYW5nZWxvZ01kLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5MaWNlbnNlLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5SZWFkbWVNZCxcbiAgICAgIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUpzb25cbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICB6aXAuYWRkTG9jYWxGaWxlKHJlc29sdmVQYXRoRnJvbVJvb3QoZmlsZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5wbVBhY2thZ2UgPSBhd2FpdCByZWFkTnBtUGFja2FnZSgpO1xuICAgIGNvbnN0IGRpc3RaaXBQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdChqb2luKE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdCwgYCR7bnBtUGFja2FnZS5uYW1lfS0ke25ld1ZlcnNpb259LnppcGApKTtcbiAgICB6aXAud3JpdGVaaXAoZGlzdFppcFBhdGgpO1xuICAgIGZpbGVQYXRocyA9IFtkaXN0WmlwUGF0aF07XG4gIH1cblxuICBhd2FpdCBleGVjRnJvbVJvb3QoW1wiZ2hcIiwgXCJyZWxlYXNlXCIsIFwiY3JlYXRlXCIsIG5ld1ZlcnNpb24sIC4uLmZpbGVQYXRocywgXCItLXRpdGxlXCIsIGB2JHtuZXdWZXJzaW9ufWAsIFwiLS1ub3Rlcy1maWxlXCIsIFwiLVwiXSwge1xuICAgIHF1aWV0OiB0cnVlLFxuICAgIHN0ZGluOiBhd2FpdCBnZXRSZWxlYXNlTm90ZXMobmV3VmVyc2lvbilcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSx3QkFBMkI7QUFDM0Isa0JBR087QUFDUCx3QkFBMkI7QUFDM0Isb0JBQXFCO0FBQ3JC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QUFBQSxNQUMxQiwyREFBMEI7QUFBQSxNQUMxQiwyREFBMEI7QUFBQSxNQUMxQiwyREFBMEI7QUFBQSxJQUM1QjtBQUVBLGVBQVcsUUFBUSxPQUFPO0FBQ3hCLFVBQUksaUJBQWEsaUNBQW9CLElBQUksQ0FBQztBQUFBLElBQzVDO0FBRUEsVUFBTSxhQUFhLFVBQU0sMkJBQWU7QUFDeEMsVUFBTSxrQkFBYyxxQ0FBb0Isa0JBQUssMkRBQTBCLE1BQU0sR0FBRyxXQUFXLElBQUksSUFBSSxVQUFVLE1BQU0sQ0FBQztBQUNwSCxRQUFJLFNBQVMsV0FBVztBQUN4QixnQkFBWSxDQUFDLFdBQVc7QUFBQSxFQUMxQjtBQUVBLFlBQU0sMEJBQWEsQ0FBQyxNQUFNLFdBQVcsVUFBVSxZQUFZLEdBQUcsV0FBVyxXQUFXLElBQUksVUFBVSxJQUFJLGdCQUFnQixHQUFHLEdBQUc7QUFBQSxJQUMxSCxPQUFPO0FBQUEsSUFDUCxPQUFPLE1BQU0sZ0JBQWdCLFVBQVU7QUFBQSxFQUN6QyxDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbImltcG9ydF9wcm9taXNlcyIsICJBZG1aaXAiXQp9Cg==
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { QuerySettings } from "../settings.d.ts";
|
|
2
|
+
/** A function which maps an array element to some value. */
|
|
3
|
+
export type ArrayFunc<T, O> = (elem: T, index: number, arr: T[]) => O;
|
|
4
|
+
/** A function which compares two types. */
|
|
5
|
+
export type ArrayComparator<T> = (a: T, b: T) => number;
|
|
6
|
+
/** Finds the value of the lowest value type in a grouping. */
|
|
7
|
+
export type LowestKey<T> = T extends {
|
|
8
|
+
key: any;
|
|
9
|
+
rows: any;
|
|
10
|
+
} ? LowestKey<T["rows"][0]> : T;
|
|
11
|
+
/** A ridiculous type which properly types the result of the 'groupIn' command. */
|
|
12
|
+
export type Ingrouped<U, T> = T extends {
|
|
13
|
+
key: any;
|
|
14
|
+
rows: any;
|
|
15
|
+
} ? {
|
|
16
|
+
key: T["key"];
|
|
17
|
+
rows: Ingrouped<U, T["rows"][0]>;
|
|
18
|
+
} : {
|
|
19
|
+
key: U;
|
|
20
|
+
rows: T[];
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Proxied interface which allows manipulating array-based data. All functions on a data array produce a NEW array
|
|
24
|
+
* (i.e., the arrays are immutable).
|
|
25
|
+
*/
|
|
26
|
+
export interface DataArray<T> {
|
|
27
|
+
/** The total number of elements in the array. */
|
|
28
|
+
length: number;
|
|
29
|
+
/** Filter the data array down to just elements which match the given predicate. */
|
|
30
|
+
where(predicate: ArrayFunc<T, boolean>): DataArray<T>;
|
|
31
|
+
/** Alias for 'where' for people who want array semantics. */
|
|
32
|
+
filter(predicate: ArrayFunc<T, boolean>): DataArray<T>;
|
|
33
|
+
/** Map elements in the data array by applying a function to each. */
|
|
34
|
+
map<U>(f: ArrayFunc<T, U>): DataArray<U>;
|
|
35
|
+
/** Map elements in the data array by applying a function to each, then flatten the results to produce a new array. */
|
|
36
|
+
flatMap<U>(f: ArrayFunc<T, U[]>): DataArray<U>;
|
|
37
|
+
/** Mutably change each value in the array, returning the same array which you can further chain off of. */
|
|
38
|
+
mutate(f: ArrayFunc<T, void>): DataArray<T>;
|
|
39
|
+
/** Limit the total number of entries in the array to the given value. */
|
|
40
|
+
limit(count: number): DataArray<T>;
|
|
41
|
+
/**
|
|
42
|
+
* Take a slice of the array. If `start` is undefined, it is assumed to be 0; if `end` is undefined, it is assumed
|
|
43
|
+
* to be the end of the array.
|
|
44
|
+
*/
|
|
45
|
+
slice(start?: number, end?: number): DataArray<T>;
|
|
46
|
+
/** Concatenate the values in this data array with those of another iterable / data array / array. */
|
|
47
|
+
concat(other: Iterable<T>): DataArray<T>;
|
|
48
|
+
/** Return the first index of the given (optionally starting the search) */
|
|
49
|
+
indexOf(element: T, fromIndex?: number): number;
|
|
50
|
+
/** Return the first element that satisfies the given predicate. */
|
|
51
|
+
find(pred: ArrayFunc<T, boolean>): T | undefined;
|
|
52
|
+
/** Find the index of the first element that satisfies the given predicate. Returns -1 if nothing was found. */
|
|
53
|
+
findIndex(pred: ArrayFunc<T, boolean>, fromIndex?: number): number;
|
|
54
|
+
/** Returns true if the array contains the given element, and false otherwise. */
|
|
55
|
+
includes(element: T): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Return a string obtained by converting each element in the array to a string, and joining it with the
|
|
58
|
+
* given separator (which defaults to ', ').
|
|
59
|
+
*/
|
|
60
|
+
join(sep?: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Return a sorted array sorted by the given key; an optional comparator can be provided, which will
|
|
63
|
+
* be used to compare the keys in lieu of the default dataview comparator.
|
|
64
|
+
*/
|
|
65
|
+
sort<U>(key: ArrayFunc<T, U>, direction?: "asc" | "desc", comparator?: ArrayComparator<U>): DataArray<T>;
|
|
66
|
+
/**
|
|
67
|
+
* Mutably modify the current array with an in place sort; this is less flexible than a regular sort in exchange
|
|
68
|
+
* for being a little more performant. Only use this is performance is a serious consideration.
|
|
69
|
+
*/
|
|
70
|
+
sortInPlace<U>(key: (v: T) => U, direction?: "asc" | "desc", comparator?: ArrayComparator<U>): DataArray<T>;
|
|
71
|
+
/**
|
|
72
|
+
* Return an array where elements are grouped by the given key; the resulting array will have objects of the form
|
|
73
|
+
* { key: <key value>, rows: DataArray }.
|
|
74
|
+
*/
|
|
75
|
+
groupBy<U>(key: ArrayFunc<T, U>, comparator?: ArrayComparator<U>): DataArray<{
|
|
76
|
+
key: U;
|
|
77
|
+
rows: DataArray<T>;
|
|
78
|
+
}>;
|
|
79
|
+
/**
|
|
80
|
+
* If the array is not grouped, groups it as `groupBy` does; otherwise, groups the elements inside each current
|
|
81
|
+
* group. This allows for top-down recursive grouping which may be easier than bottom-up grouping.
|
|
82
|
+
*/
|
|
83
|
+
groupIn<U>(key: ArrayFunc<LowestKey<T>, U>, comparator?: ArrayComparator<U>): DataArray<Ingrouped<U, T>>;
|
|
84
|
+
/**
|
|
85
|
+
* Return distinct entries. If a key is provided, then rows with distinct keys are returned.
|
|
86
|
+
*/
|
|
87
|
+
distinct<U>(key?: ArrayFunc<T, U>, comparator?: ArrayComparator<U>): DataArray<T>;
|
|
88
|
+
/** Return true if the predicate is true for all values. */
|
|
89
|
+
every(f: ArrayFunc<T, boolean>): boolean;
|
|
90
|
+
/** Return true if the predicate is true for at least one value. */
|
|
91
|
+
some(f: ArrayFunc<T, boolean>): boolean;
|
|
92
|
+
/** Return true if the predicate is FALSE for all values. */
|
|
93
|
+
none(f: ArrayFunc<T, boolean>): boolean;
|
|
94
|
+
/** Return the first element in the data array. Returns undefined if the array is empty. */
|
|
95
|
+
first(): T;
|
|
96
|
+
/** Return the last element in the data array. Returns undefined if the array is empty. */
|
|
97
|
+
last(): T;
|
|
98
|
+
/** Map every element in this data array to the given key, and then flatten it.*/
|
|
99
|
+
to(key: string): DataArray<any>;
|
|
100
|
+
/** Map every element in this data array to the given key; unlike to(), does not flatten the result. */
|
|
101
|
+
into(key: string): DataArray<any>;
|
|
102
|
+
/**
|
|
103
|
+
* Recursively expand the given key, flattening a tree structure based on the key into a flat array. Useful for handling
|
|
104
|
+
* hierarchical data like tasks with 'subtasks'.
|
|
105
|
+
*/
|
|
106
|
+
expand(key: string): DataArray<any>;
|
|
107
|
+
/** Run a lambda on each element in the array. */
|
|
108
|
+
forEach(f: ArrayFunc<T, void>): void;
|
|
109
|
+
/** Calculate the sum of the elements in the array. */
|
|
110
|
+
sum(): number;
|
|
111
|
+
/** Calculate the average of the elements in the array. */
|
|
112
|
+
avg(): number;
|
|
113
|
+
/** Calculate the minimum of the elements in the array. */
|
|
114
|
+
min(): number;
|
|
115
|
+
/** Calculate the maximum of the elements in the array. */
|
|
116
|
+
max(): number;
|
|
117
|
+
/** Convert this to a plain javascript array. */
|
|
118
|
+
array(): T[];
|
|
119
|
+
/** Allow iterating directly over the array. */
|
|
120
|
+
[Symbol.iterator](): Iterator<T>;
|
|
121
|
+
/** Map indexes to values. */
|
|
122
|
+
[index: number]: any;
|
|
123
|
+
/** Automatic flattening of fields. Equivalent to implicitly calling `array.to("field")` */
|
|
124
|
+
[field: string]: any;
|
|
125
|
+
}
|
|
126
|
+
/** Provides utility functions for generating data arrays. */
|
|
127
|
+
export declare namespace DataArray {
|
|
128
|
+
/** Create a new Dataview data array. */
|
|
129
|
+
function wrap<T>(raw: T[] | DataArray<T>, settings: QuerySettings): DataArray<T>;
|
|
130
|
+
/** Create a new DataArray from an iterable object. */
|
|
131
|
+
function from<T>(raw: Iterable<T>, settings: QuerySettings): DataArray<T>;
|
|
132
|
+
/** Return true if the given object is a data array. */
|
|
133
|
+
function isDataArray(obj: any): obj is DataArray<any>;
|
|
134
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { STask } from "../data-model/serialized/markdown.d.ts";
|
|
2
|
+
/** A general function for deciding how to check a task given it's current state. */
|
|
3
|
+
export type TaskStatusSelector = (task: STask) => Promise<string>;
|
|
4
|
+
/**
|
|
5
|
+
* A dataview extension; allows for registering new functions, altering views, and altering some more
|
|
6
|
+
* advanced dataview behavior.
|
|
7
|
+
**/
|
|
8
|
+
export declare class Extension {
|
|
9
|
+
plugin: string;
|
|
10
|
+
/** All registered task status selectors for this extension. */
|
|
11
|
+
taskStatusSelectors: Record<string, TaskStatusSelector>;
|
|
12
|
+
constructor(plugin: string);
|
|
13
|
+
/** Register a task status selector under the given name. */
|
|
14
|
+
taskStatusSelector(name: string, selector: TaskStatusSelector): Extension;
|
|
15
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/** Fancy wrappers for the JavaScript API, used both by external plugins AND by the dataview javascript view. */
|
|
2
|
+
import type { App, Component } from "obsidian";
|
|
3
|
+
import type { FullIndex } from "../data-index/index.d.ts";
|
|
4
|
+
import type { DataviewApi, DataviewIOApi, QueryApiSettings, QueryResult } from "../api/plugin-api.d.ts";
|
|
5
|
+
import type { DataviewSettings, ExportSettings } from "../settings.d.ts";
|
|
6
|
+
import type { DataObject, Grouping, Link, Literal, Values, Widgets } from "../data-model/value.d.ts";
|
|
7
|
+
import type { BoundFunctionImpl } from "../expression/functions.d.ts";
|
|
8
|
+
import type { Context } from "../expression/context.d.ts";
|
|
9
|
+
import type { DateTime, Duration } from "luxon";
|
|
10
|
+
import * as Luxon from "luxon";
|
|
11
|
+
import type { DataArray } from "./data-array.d.ts";
|
|
12
|
+
import type { SListItem } from "../data-model/serialized/markdown.d.ts";
|
|
13
|
+
import type { Result } from "../api/result.d.ts";
|
|
14
|
+
/** Asynchronous API calls related to file / system IO. */
|
|
15
|
+
export declare class DataviewInlineIOApi {
|
|
16
|
+
api: DataviewIOApi;
|
|
17
|
+
currentFile: string;
|
|
18
|
+
constructor(api: DataviewIOApi, currentFile: string);
|
|
19
|
+
/** Load the contents of a CSV asynchronously, returning a data array of rows (or undefined if it does not exist). */
|
|
20
|
+
csv(path: string, originFile?: string): Promise<DataArray<DataObject> | undefined>;
|
|
21
|
+
/** Asynchronously load the contents of any link or path in an Obsidian vault. */
|
|
22
|
+
load(path: Link | string, originFile?: string): Promise<string | undefined>;
|
|
23
|
+
/** Normalize a link or path relative to an optional origin file. Returns a textual fully-qualified-path. */
|
|
24
|
+
normalize(path: Link | string, originFile?: string): string;
|
|
25
|
+
}
|
|
26
|
+
export declare class DataviewInlineApi {
|
|
27
|
+
/**
|
|
28
|
+
* The raw dataview indices, which track file <-> metadata relations. Use these if the intuitive API does not support
|
|
29
|
+
* your use case.
|
|
30
|
+
*/
|
|
31
|
+
index: FullIndex;
|
|
32
|
+
/** The component that handles the lifetime of this view. Use it if you are adding custom event handlers/components. */
|
|
33
|
+
component: Component;
|
|
34
|
+
/** The path to the current file this script is running in. */
|
|
35
|
+
currentFilePath: string;
|
|
36
|
+
/**
|
|
37
|
+
* The container which holds the output of this view. You can directly append fields to this, if you wish, though
|
|
38
|
+
* the rendering API is likely to be easier for straight-forward purposes.
|
|
39
|
+
*/
|
|
40
|
+
container: HTMLElement;
|
|
41
|
+
/** Directly access the Obsidian app object, such as for reaching out to other plugins. */
|
|
42
|
+
app: App;
|
|
43
|
+
/** The general plugin API which much of this inline API delegates to. */
|
|
44
|
+
api: DataviewApi;
|
|
45
|
+
/** Settings which determine defaults, incl. many rendering options. */
|
|
46
|
+
settings: DataviewSettings;
|
|
47
|
+
/** Evaluation context which expressions can be evaluated in. */
|
|
48
|
+
evaluationContext: Context;
|
|
49
|
+
/** Value utilities which allow for type-checking and comparisons. */
|
|
50
|
+
value: typeof Values;
|
|
51
|
+
/** Widget utility functions for creating built-in widgets. */
|
|
52
|
+
widget: typeof Widgets;
|
|
53
|
+
/** IO utilities which are largely asynchronous. */
|
|
54
|
+
io: DataviewInlineIOApi;
|
|
55
|
+
/** Re-exporting of luxon for people who can't easily require it. Sorry! */
|
|
56
|
+
luxon: typeof Luxon;
|
|
57
|
+
/** Dataview functions which can be called from DataviewJS. */
|
|
58
|
+
func: Record<string, BoundFunctionImpl>;
|
|
59
|
+
constructor(api: DataviewApi, component: Component, container: HTMLElement, currentFilePath: string);
|
|
60
|
+
/** Return an array of paths (as strings) corresponding to pages which match the query. */
|
|
61
|
+
pagePaths(query?: string): DataArray<string>;
|
|
62
|
+
/** Map a page path to the actual data contained within that page. */
|
|
63
|
+
page(path: string | Link): DataObject | undefined;
|
|
64
|
+
/** Return an array of page objects corresponding to pages which match the query. */
|
|
65
|
+
pages(query?: string): DataArray<any>;
|
|
66
|
+
/** Return the information about the current page. */
|
|
67
|
+
current(): Record<string, any> | undefined;
|
|
68
|
+
/** Execute a Dataview query, returning the results in programmatic form. */
|
|
69
|
+
query(source: string, originFile?: string, settings?: QueryApiSettings): Promise<Result<QueryResult, string>>;
|
|
70
|
+
/** Error-throwing version of {@link query}. */
|
|
71
|
+
tryQuery(source: string, originFile?: string, settings?: QueryApiSettings): Promise<QueryResult>;
|
|
72
|
+
/** Execute a Dataview query, returning the results in Markdown. */
|
|
73
|
+
queryMarkdown(source: string, originFile?: string, settings?: QueryApiSettings): Promise<Result<string, string>>;
|
|
74
|
+
/** Error-throwing version of {@link queryMarkdown}. */
|
|
75
|
+
tryQueryMarkdown(source: string, originFile?: string, settings?: QueryApiSettings): Promise<string>;
|
|
76
|
+
/**
|
|
77
|
+
* Evaluate a dataview expression (like '2 + 2' or 'link("hello")'), returning the evaluated result.
|
|
78
|
+
* This takes an optional second argument which provides definitions for variables, such as:
|
|
79
|
+
*
|
|
80
|
+
* ```
|
|
81
|
+
* dv.evaluate("x + 6", { x: 2 }) = 8
|
|
82
|
+
* dv.evaluate('link(target)', { target: "Okay" }) = [[Okay]]
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* Note that `this` is implicitly available and refers to the current file.
|
|
86
|
+
*
|
|
87
|
+
* This method returns a Result type instead of throwing an error; you can check the result of the
|
|
88
|
+
* execution via `result.successful` and obtain `result.value` or `result.error` accordingly. If
|
|
89
|
+
* you'd rather this method throw on an error, use `dv.tryEvaluate`.
|
|
90
|
+
*/
|
|
91
|
+
evaluate(expression: string, context?: DataObject): Result<Literal, string>;
|
|
92
|
+
/** Error-throwing version of `dv.evaluate`. */
|
|
93
|
+
tryEvaluate(expression: string, context?: DataObject): Literal;
|
|
94
|
+
/** Execute a Dataview query and embed it into the current view. */
|
|
95
|
+
execute(source: string): Promise<void>;
|
|
96
|
+
/** Execute a DataviewJS query and embed it into the current view. */
|
|
97
|
+
executeJs(code: string): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Convert an input element or array into a Dataview data-array. If the input is already a data array,
|
|
100
|
+
* it is returned unchanged.
|
|
101
|
+
*/
|
|
102
|
+
array(raw: any): DataArray<any>;
|
|
103
|
+
/** Return true if the given value is a javascript array OR a dataview data array. */
|
|
104
|
+
isArray(raw: any): raw is DataArray<any> | Array<any>;
|
|
105
|
+
/** Return true if the given value is a dataview data array; this returns FALSE for plain JS arrays. */
|
|
106
|
+
isDataArray(raw: unknown): raw is DataArray<any>;
|
|
107
|
+
/** Create a dataview file link to the given path. */
|
|
108
|
+
fileLink(path: string, embed?: boolean, display?: string): Link;
|
|
109
|
+
/** Create a dataview section link to the given path. */
|
|
110
|
+
sectionLink(path: string, section: string, embed?: boolean, display?: string): Link;
|
|
111
|
+
/** Create a dataview block link to the given path. */
|
|
112
|
+
blockLink(path: string, blockId: string, embed?: boolean, display?: string): Link;
|
|
113
|
+
/** Attempt to extract a date from a string, link or date. */
|
|
114
|
+
date(pathlike: string | Link | DateTime): DateTime | null;
|
|
115
|
+
/** Attempt to extract a duration from a string or duration. */
|
|
116
|
+
duration(dur: string | Duration): Duration | null;
|
|
117
|
+
/** Parse a raw textual value into a complex Dataview type, if possible. */
|
|
118
|
+
parse(value: string): Literal;
|
|
119
|
+
/** Convert a basic JS type into a Dataview type by parsing dates, links, durations, and so on. */
|
|
120
|
+
literal(value: any): Literal;
|
|
121
|
+
/** Deep clone the given literal, returning a new literal which is independent of the original. */
|
|
122
|
+
clone(value: Literal): Literal;
|
|
123
|
+
/**
|
|
124
|
+
* Compare two arbitrary JavaScript values using Dataview's default comparison rules. Returns a negative value if
|
|
125
|
+
* a < b, 0 if a = b, and a positive value if a > b.
|
|
126
|
+
*/
|
|
127
|
+
compare(a: any, b: any): number;
|
|
128
|
+
/** Return true if the two given JavaScript values are equal using Dataview's default comparison rules. */
|
|
129
|
+
equal(a: any, b: any): boolean;
|
|
130
|
+
/** Render an HTML element, containing arbitrary text. */
|
|
131
|
+
el<K extends keyof HTMLElementTagNameMap>(el: K, text: any, { container, ...options }?: DomElementInfo & {
|
|
132
|
+
container?: HTMLElement;
|
|
133
|
+
}): HTMLElementTagNameMap[K];
|
|
134
|
+
/** Render an HTML header; the level can be anything from 1 - 6. */
|
|
135
|
+
header(level: number, text: any, options?: DomElementInfo): HTMLHeadingElement;
|
|
136
|
+
/** Render an HTML paragraph, containing arbitrary text. */
|
|
137
|
+
paragraph(text: any, options?: DomElementInfo): HTMLParagraphElement;
|
|
138
|
+
/** Render an inline span, containing arbitrary text. */
|
|
139
|
+
span(text: any, options?: DomElementInfo): HTMLSpanElement;
|
|
140
|
+
/**
|
|
141
|
+
* Render HTML from the output of a template "view" saved as a file in the vault.
|
|
142
|
+
* Takes a filename and arbitrary input data.
|
|
143
|
+
*/
|
|
144
|
+
view(viewName: string, input: any): Promise<void>;
|
|
145
|
+
/** Render a dataview list of the given values. */
|
|
146
|
+
list(values?: any[] | DataArray<any>): Promise<void>;
|
|
147
|
+
/** Render a dataview table with the given headers, and the 2D array of values. */
|
|
148
|
+
table(headers: string[], values?: any[][] | DataArray<any>): Promise<void>;
|
|
149
|
+
/** Render a dataview task view with the given tasks. */
|
|
150
|
+
taskList(tasks: Grouping<SListItem>, groupByFile?: boolean): Promise<void>;
|
|
151
|
+
/** Render a table directly to markdown, returning the markdown. */
|
|
152
|
+
markdownTable(headers: string[], values?: any[][] | DataArray<any>, settings?: Partial<ExportSettings>): string;
|
|
153
|
+
/** Render a list directly to markdown, returning the markdown. */
|
|
154
|
+
markdownList(values?: any[] | DataArray<any> | undefined, settings?: Partial<ExportSettings>): string;
|
|
155
|
+
/** Render at ask list directly to markdown, returning the markdown. */
|
|
156
|
+
markdownTaskList(values: Grouping<SListItem>, settings?: Partial<ExportSettings>): string;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Evaluate a script where 'this' for the script is set to the given context. Allows you to define global variables.
|
|
160
|
+
*/
|
|
161
|
+
export declare function evalInContext(script: string, context: any): any;
|
|
162
|
+
/**
|
|
163
|
+
* Evaluate a script possibly asynchronously, if the script contains `async/await` blocks.
|
|
164
|
+
*/
|
|
165
|
+
export declare function asyncEvalInContext(script: string, context: any): Promise<any>;
|