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.
Files changed (82) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/lib/@types/compare-versions.d.ts +37 -0
  3. package/dist/lib/JSON.cjs +2 -5
  4. package/dist/lib/Npm.cjs +1 -1
  5. package/dist/lib/Npm.d.ts +1 -0
  6. package/dist/lib/Root.cjs +4 -13
  7. package/dist/lib/Root.d.ts +0 -9
  8. package/dist/lib/_dependencies.cjs +49643 -0
  9. package/dist/lib/_dependencies.d.ts +6 -0
  10. package/dist/lib/bin/ESLint/@types/@stylistic__eslint-plugin.d.ts +16 -0
  11. package/dist/lib/bin/ESLint/@types/@typescript-eslint__eslint-plugin.d.ts +27 -0
  12. package/dist/lib/bin/ESLint/@types/@typescript-eslint__parser.d.ts +16 -0
  13. package/dist/lib/bin/ESLint/@types/eslint-plugin-deprecation.d.ts +17 -0
  14. package/dist/lib/bin/ESLint/@types/eslint-plugin-import.d.ts +15 -0
  15. package/dist/lib/bin/ESLint/@types/eslint-plugin-modules-newlines.d.ts +15 -0
  16. package/dist/lib/bin/ESLint/@types/globals.d.ts +22 -0
  17. package/dist/lib/bin/ESLint/ESLint.cjs +5 -6
  18. package/dist/lib/bin/ESLint/eslint.config.cjs +4 -2
  19. package/dist/lib/bin/ObsidianDevUtilsRepoPaths.cjs +2 -1
  20. package/dist/lib/bin/ObsidianDevUtilsRepoPaths.d.ts +2 -0
  21. package/dist/lib/bin/cli.cjs +2 -2
  22. package/dist/lib/bin/esbuild/Dependency.cjs +125 -0
  23. package/dist/lib/bin/esbuild/Dependency.d.ts +18 -0
  24. package/dist/lib/bin/esbuild/ObsidianPluginBuilder.cjs +1 -1
  25. package/dist/lib/bin/esbuild/index.cjs +4 -1
  26. package/dist/lib/bin/esbuild/index.d.ts +1 -0
  27. package/dist/lib/bin/esbuild/renameToCjsPlugin.cjs +15 -3
  28. package/dist/lib/bin/esbuild/renameToCjsPlugin.d.ts +2 -1
  29. package/dist/lib/bin/spellcheck.cjs +3 -4
  30. package/dist/lib/bin/version.cjs +13 -1
  31. package/dist/lib/obsidian/@types/Dataview/api/data-array.d.ts +134 -0
  32. package/dist/lib/obsidian/@types/Dataview/api/extensions.d.ts +15 -0
  33. package/dist/lib/obsidian/@types/Dataview/api/inline-api.d.ts +165 -0
  34. package/dist/lib/obsidian/@types/Dataview/api/plugin-api.d.ts +192 -0
  35. package/dist/lib/obsidian/@types/Dataview/api/result.d.ts +38 -0
  36. package/dist/lib/obsidian/@types/Dataview/data-import/common.d.ts +3 -0
  37. package/dist/lib/obsidian/@types/Dataview/data-import/csv.d.ts +3 -0
  38. package/dist/lib/obsidian/@types/Dataview/data-import/inline-field.d.ts +42 -0
  39. package/dist/lib/obsidian/@types/Dataview/data-import/markdown-file.d.ts +36 -0
  40. package/dist/lib/obsidian/@types/Dataview/data-import/persister.d.ts +32 -0
  41. package/dist/lib/obsidian/@types/Dataview/data-import/web-worker/import-entry.d.ts +1 -0
  42. package/dist/lib/obsidian/@types/Dataview/data-import/web-worker/import-impl.d.ts +3 -0
  43. package/dist/lib/obsidian/@types/Dataview/data-import/web-worker/import-manager.d.ts +32 -0
  44. package/dist/lib/obsidian/@types/Dataview/data-index/index.d.ts +179 -0
  45. package/dist/lib/obsidian/@types/Dataview/data-index/resolver.d.ts +20 -0
  46. package/dist/lib/obsidian/@types/Dataview/data-index/source.d.ts +71 -0
  47. package/dist/lib/obsidian/@types/Dataview/data-model/markdown.d.ts +109 -0
  48. package/dist/lib/obsidian/@types/Dataview/data-model/serialized/markdown.d.ts +103 -0
  49. package/dist/lib/obsidian/@types/Dataview/data-model/transferable.d.ts +7 -0
  50. package/dist/lib/obsidian/@types/Dataview/data-model/value.d.ts +148 -0
  51. package/dist/lib/obsidian/@types/Dataview/expression/binaryop.d.ts +29 -0
  52. package/dist/lib/obsidian/@types/Dataview/expression/context.d.ts +43 -0
  53. package/dist/lib/obsidian/@types/Dataview/expression/field.d.ts +82 -0
  54. package/dist/lib/obsidian/@types/Dataview/expression/functions.d.ts +137 -0
  55. package/dist/lib/obsidian/@types/Dataview/expression/parse.d.ts +143 -0
  56. package/dist/lib/obsidian/@types/Dataview/index.d.ts +21 -0
  57. package/dist/lib/obsidian/@types/Dataview/main.d.ts +44 -0
  58. package/dist/lib/obsidian/@types/Dataview/query/engine.d.ts +87 -0
  59. package/dist/lib/obsidian/@types/Dataview/query/parse.d.ts +31 -0
  60. package/dist/lib/obsidian/@types/Dataview/query/query.d.ts +95 -0
  61. package/dist/lib/obsidian/@types/Dataview/settings.d.ts +60 -0
  62. package/dist/lib/obsidian/@types/Dataview/typings/obsidian-ex.d.ts +28 -0
  63. package/dist/lib/obsidian/@types/Dataview/typings/workers.d.ts +4 -0
  64. package/dist/lib/obsidian/@types/Dataview/ui/export/markdown.d.ts +9 -0
  65. package/dist/lib/obsidian/@types/Dataview/ui/lp-render.d.ts +24 -0
  66. package/dist/lib/obsidian/@types/Dataview/ui/markdown.d.ts +73 -0
  67. package/dist/lib/obsidian/@types/Dataview/ui/refreshable-view.d.ts +15 -0
  68. package/dist/lib/obsidian/@types/Dataview/ui/render.d.ts +12 -0
  69. package/dist/lib/obsidian/@types/Dataview/ui/views/calendar-view.d.ts +17 -0
  70. package/dist/lib/obsidian/@types/Dataview/ui/views/inline-field-live-preview.d.ts +29 -0
  71. package/dist/lib/obsidian/@types/Dataview/ui/views/inline-view.d.ts +19 -0
  72. package/dist/lib/obsidian/@types/Dataview/ui/views/js-view.d.ts +23 -0
  73. package/dist/lib/obsidian/@types/Dataview/ui/views/list-view.d.ts +25 -0
  74. package/dist/lib/obsidian/@types/Dataview/ui/views/table-view.d.ts +28 -0
  75. package/dist/lib/obsidian/@types/Dataview/ui/views/task-view.d.ts +39 -0
  76. package/dist/lib/obsidian/@types/Dataview/util/hash.d.ts +1 -0
  77. package/dist/lib/obsidian/@types/Dataview/util/locale.d.ts +2 -0
  78. package/dist/lib/obsidian/@types/Dataview/util/media.d.ts +6 -0
  79. package/dist/lib/obsidian/@types/Dataview/util/normalize.d.ts +41 -0
  80. package/dist/lib/obsidian/Dataview.cjs +1 -1
  81. package/dist/lib/obsidian/Dataview.d.ts +2 -2
  82. 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("${cjsImportPath}")`;
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+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAZmlsZVxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IHJlbmFtZXMgSmF2YVNjcmlwdCBmaWxlcyB0byBDb21tb25KUyAoYC5janNgKSBmaWxlcyBhZnRlciB0aGUgYnVpbGQgcHJvY2Vzcy5cbiAqIEl0IGFsc28gYWRqdXN0cyB0aGUgYHJlcXVpcmVgIHN0YXRlbWVudHMgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgQ29tbW9uSlMgZm9ybWF0LCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nXG4gKiB3aXRoIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgdG8gYmUgc2tpcHBlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gXCJlc2J1aWxkXCI7XG5pbXBvcnQgeyB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXNidWlsZCBwbHVnaW4gdGhhdCByZW5hbWVzIEphdmFTY3JpcHQgZmlsZXMgdG8gQ29tbW9uSlMgKGAuY2pzYCkgZmlsZXNcbiAqIGFuZCBtb2RpZmllcyBgcmVxdWlyZWAgc3RhdGVtZW50cyB0byBlbnN1cmUgcHJvcGVyIG1vZHVsZSByZXNvbHV0aW9uLlxuICpcbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgaGFuZGxlcyB0aGUgcmVuYW1pbmcgYW5kIG1vZGlmaWNhdGlvbiBvZiBvdXRwdXQgZmlsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVUb0Nqc1BsdWdpbigpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwicmVuYW1lLXRvLWNqc1wiLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vbkVuZChhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiByZXN1bHQub3V0cHV0RmlsZXMgPz8gW10pIHtcbiAgICAgICAgICBpZiAoIWZpbGUucGF0aC5lbmRzV2l0aChcIi5qc1wiKSB8fCBmaWxlLnBhdGguZW5kc1dpdGgoXCIuZC5qc1wiKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbmV3UGF0aCA9IGZpbGUucGF0aC5yZXBsYWNlQWxsKC9cXC5qcyQvZywgXCIuY2pzXCIpO1xuXG4gICAgICAgICAgY29uc3QgbmV3VGV4dCA9IGZpbGUudGV4dC5yZXBsYWNlQWxsKC9yZXF1aXJlXFwoXCIoLis/KVwiXFwpL2csIChfLCBpbXBvcnRQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNqc0ltcG9ydFBhdGggPSBpbXBvcnRQYXRoLnJlcGxhY2VBbGwoL1xcLnRzJC9nLCBcIi5janNcIik7XG4gICAgICAgICAgICByZXR1cm4gYHJlcXVpcmUoXCIke2Nqc0ltcG9ydFBhdGh9XCIpYDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShuZXdQYXRoLCBuZXdUZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0Esc0JBQTBCO0FBZDFCLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBSSxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVUsR0FBRztBQUM3RyxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBaUJPLFNBQVMsb0JBQTRCO0FBQzFDLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU0sT0FBYTtBQUNqQixZQUFNLE1BQU0sT0FBTyxXQUFXO0FBQzVCLG1CQUFXLFFBQVEsT0FBTyxlQUFlLENBQUMsR0FBRztBQUMzQyxjQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsS0FBSyxLQUFLLEtBQUssS0FBSyxTQUFTLE9BQU8sR0FBRztBQUM3RDtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxVQUFVLEtBQUssS0FBSyxXQUFXLFVBQVUsTUFBTTtBQUVyRCxnQkFBTSxVQUFVLEtBQUssS0FBSyxXQUFXLHVCQUF1QixDQUFDLEdBQUcsZUFBdUI7QUFDckYsa0JBQU0sZ0JBQWdCLFdBQVcsV0FBVyxVQUFVLE1BQU07QUFDNUQsbUJBQU8sWUFBWSxhQUFhO0FBQUEsVUFDbEMsQ0FBQztBQUVELG9CQUFNLDJCQUFVLFNBQVMsT0FBTztBQUFBLFFBQ2xDO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
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
- (0, import_Error.printError)(new Error(`${relativePath}:${issue.row}:${issue.col} - ${issue.text}`));
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+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAZmlsZVxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiBmb3IgcnVubmluZyBhIHNwZWxsY2hlY2sgb24gdGhlIGNvZGViYXNlIHVzaW5nIHRoZSBgY3NwZWxsYCBsaWJyYXJ5LlxuICogSXQgcmVwb3J0cyBhbnkgc3BlbGxpbmcgaXNzdWVzIGZvdW5kIGluIHRoZSBjb2RlIGFuZCByZXR1cm5zIGEgYFRhc2tSZXN1bHRgIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3BlbGxjaGVjayB3YXMgc3VjY2Vzc2Z1bC5cbiAqL1xuXG5pbXBvcnQgeyBsaW50IH0gZnJvbSBcImNzcGVsbFwiO1xuaW1wb3J0IHsgdG9SZWxhdGl2ZUZyb21Sb290IH0gZnJvbSBcIi4uL1Jvb3QudHNcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IFRhc2tSZXN1bHQgfSBmcm9tIFwiLi4vVGFza1Jlc3VsdC50c1wiO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gXCIuLi9FcnJvci50c1wiO1xuXG4vKipcbiAqIFJ1bnMgYSBzcGVsbGNoZWNrIG9uIHRoZSBlbnRpcmUgY29kZWJhc2UgdXNpbmcgYGNzcGVsbGAuXG4gKlxuICogVGhlIGZ1bmN0aW9uIGNoZWNrcyBhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMgZm9yIHNwZWxsaW5nIGlzc3Vlcy5cbiAqIElmIGlzc3VlcyBhcmUgZm91bmQsIHRoZXkgYXJlIGxvZ2dlZCB0byB0aGUgY29uc29sZSB3aXRoIHRoZWlyIGZpbGUgcGF0aCwgbGluZSwgYW5kIGNvbHVtbiBudW1iZXIuXG4gKlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIGBUYXNrUmVzdWx0YCwgaW5kaWNhdGluZyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBzcGVsbGNoZWNrLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3BlbGxjaGVjaygpOiBQcm9taXNlPFRhc2tSZXN1bHQ+IHtcbiAgbGV0IGlzU3VjY2VzcyA9IHRydWU7XG5cbiAgYXdhaXQgbGludChbXCIuXCJdLCB7fSwge1xuICAgIGlzc3VlOiAoaXNzdWUpID0+IHtcbiAgICAgIGlmICghaXNzdWUudXJpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0aCA9IGZpbGVVUkxUb1BhdGgoaXNzdWUudXJpKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHRvUmVsYXRpdmVGcm9tUm9vdChwYXRoKTtcbiAgICAgIHByaW50RXJyb3IobmV3IEVycm9yKGAke3JlbGF0aXZlUGF0aH06JHtpc3N1ZS5yb3d9OiR7aXNzdWUuY29sfSAtICR7aXNzdWUudGV4dH1gKSk7XG4gICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBUYXNrUmVzdWx0LkNyZWF0ZVN1Y2Nlc3NSZXN1bHQoaXNTdWNjZXNzKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLG9CQUFxQjtBQUNyQixrQkFBbUM7QUFDbkMsc0JBQThCO0FBQzlCLHdCQUEyQjtBQUMzQixtQkFBMkI7QUFoQjNCLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBSSxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVUsR0FBRztBQUM3RyxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBcUJBLGVBQXNCLGFBQWtDO0FBQ3RELE1BQUksWUFBWTtBQUVoQixZQUFNLG9CQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRztBQUFBLElBQ3BCLE9BQU8sQ0FBQyxVQUFVO0FBQ2hCLFVBQUksQ0FBQyxNQUFNLEtBQUs7QUFDZDtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFdBQU8sK0JBQWMsTUFBTSxHQUFHO0FBQ3BDLFlBQU0sbUJBQWUsZ0NBQW1CLElBQUk7QUFDNUMsbUNBQVcsSUFBSSxNQUFNLEdBQUcsWUFBWSxJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sR0FBRyxNQUFNLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDakYsa0JBQVk7QUFBQSxJQUNkO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTyw2QkFBVyxvQkFBb0IsU0FBUztBQUNqRDsiLAogICJuYW1lcyI6IFtdCn0K
58
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Jpbi9zcGVsbGNoZWNrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzW1wiaW1wb3J0Lm1ldGEudXJsXCJdID8/ICgoKT0+cmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkpKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl0gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAZmlsZVxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiBmb3IgcnVubmluZyBhIHNwZWxsY2hlY2sgb24gdGhlIGNvZGViYXNlIHVzaW5nIHRoZSBgY3NwZWxsYCBsaWJyYXJ5LlxuICogSXQgcmVwb3J0cyBhbnkgc3BlbGxpbmcgaXNzdWVzIGZvdW5kIGluIHRoZSBjb2RlIGFuZCByZXR1cm5zIGEgYFRhc2tSZXN1bHRgIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3BlbGxjaGVjayB3YXMgc3VjY2Vzc2Z1bC5cbiAqL1xuXG5pbXBvcnQgeyBsaW50IH0gZnJvbSBcImNzcGVsbFwiO1xuaW1wb3J0IHsgdG9SZWxhdGl2ZUZyb21Sb290IH0gZnJvbSBcIi4uL1Jvb3QudHNcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IFRhc2tSZXN1bHQgfSBmcm9tIFwiLi4vVGFza1Jlc3VsdC50c1wiO1xuXG4vKipcbiAqIFJ1bnMgYSBzcGVsbGNoZWNrIG9uIHRoZSBlbnRpcmUgY29kZWJhc2UgdXNpbmcgYGNzcGVsbGAuXG4gKlxuICogVGhlIGZ1bmN0aW9uIGNoZWNrcyBhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMgZm9yIHNwZWxsaW5nIGlzc3Vlcy5cbiAqIElmIGlzc3VlcyBhcmUgZm91bmQsIHRoZXkgYXJlIGxvZ2dlZCB0byB0aGUgY29uc29sZSB3aXRoIHRoZWlyIGZpbGUgcGF0aCwgbGluZSwgYW5kIGNvbHVtbiBudW1iZXIuXG4gKlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIGBUYXNrUmVzdWx0YCwgaW5kaWNhdGluZyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBzcGVsbGNoZWNrLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3BlbGxjaGVjaygpOiBQcm9taXNlPFRhc2tSZXN1bHQ+IHtcbiAgbGV0IGlzU3VjY2VzcyA9IHRydWU7XG5cbiAgYXdhaXQgbGludChbXCIuXCJdLCB7fSwge1xuICAgIGlzc3VlOiAoaXNzdWUpID0+IHtcbiAgICAgIGlmICghaXNzdWUudXJpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0aCA9IGZpbGVVUkxUb1BhdGgoaXNzdWUudXJpKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHRvUmVsYXRpdmVGcm9tUm9vdChwYXRoKTtcbiAgICAgIGNvbnNvbGUubG9nKGAke3JlbGF0aXZlUGF0aH06JHtpc3N1ZS5yb3d9OiR7aXNzdWUuY29sfSAtICR7aXNzdWUudGV4dH1gKTtcbiAgICAgIGlzU3VjY2VzcyA9IGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIFRhc2tSZXN1bHQuQ3JlYXRlU3VjY2Vzc1Jlc3VsdChpc1N1Y2Nlc3MpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsb0JBQXFCO0FBQ3JCLGtCQUFtQztBQUNuQyxzQkFBOEI7QUFDOUIsd0JBQTJCO0FBZjNCLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBSSxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVUsR0FBRztBQUM3RyxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBb0JBLGVBQXNCLGFBQWtDO0FBQ3RELE1BQUksWUFBWTtBQUVoQixZQUFNLG9CQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRztBQUFBLElBQ3BCLE9BQU8sQ0FBQyxVQUFVO0FBQ2hCLFVBQUksQ0FBQyxNQUFNLEtBQUs7QUFDZDtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFdBQU8sK0JBQWMsTUFBTSxHQUFHO0FBQ3BDLFlBQU0sbUJBQWUsZ0NBQW1CLElBQUk7QUFDNUMsY0FBUSxJQUFJLEdBQUcsWUFBWSxJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sR0FBRyxNQUFNLE1BQU0sSUFBSSxFQUFFO0FBQ3ZFLGtCQUFZO0FBQUEsSUFDZDtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU8sNkJBQVcsb0JBQW9CLFNBQVM7QUFDakQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -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+ICFmaWxlbmFtZS5lbmRzV2l0aChcIi56aXBcIikpO1xuXG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkNoYW5nZWxvZ01kLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5MaWNlbnNlLFxuICAgICAgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5SZWFkbWVNZCxcbiAgICAgIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUpzb25cbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICB6aXAuYWRkTG9jYWxGaWxlKHJlc29sdmVQYXRoRnJvbVJvb3QoZmlsZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5wbVBhY2thZ2UgPSBhd2FpdCByZWFkTnBtUGFja2FnZSgpO1xuICAgIGNvbnN0IGRpc3RaaXBQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdChqb2luKE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdCwgYCR7bnBtUGFja2FnZS5uYW1lfS0ke25ld1ZlcnNpb259LnppcGApKTtcbiAgICB6aXAud3JpdGVaaXAoZGlzdFppcFBhdGgpO1xuICAgIGZpbGVQYXRocyA9IFtkaXN0WmlwUGF0aF07XG4gIH1cblxuICBhd2FpdCBleGVjRnJvbVJvb3QoW1wiZ2hcIiwgXCJyZWxlYXNlXCIsIFwiY3JlYXRlXCIsIG5ld1ZlcnNpb24sIC4uLmZpbGVQYXRocywgXCItLXRpdGxlXCIsIGB2JHtuZXdWZXJzaW9ufWAsIFwiLS1ub3Rlcy1maWxlXCIsIFwiLVwiXSwge1xuICAgIHF1aWV0OiB0cnVlLFxuICAgIHN0ZGluOiBhd2FpdCBnZXRSZWxlYXNlTm90ZXMobmV3VmVyc2lvbilcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSx3QkFBMkI7QUFDM0Isa0JBR087QUFDUCx3QkFBMkI7QUFDM0Isb0JBQXFCO0FBQ3JCLGlCQUlPO0FBQ1Asa0JBQXlCO0FBQ3pCLHFCQUEyQjtBQUMzQixzQkFJTztBQUNQLElBQUFBLG1CQUFnQztBQUNoQyxnQkFBNkI7QUFDN0Isa0JBQXFCO0FBQ3JCLHFDQUF3QztBQUN4Qyx1Q0FBMEM7QUFDMUMscUJBQW1CO0FBM0NuQixJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUksUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVLEdBQUc7QUFDN0csSUFBSSxZQUFZLFdBQVcsU0FBUyxLQUFLO0FBQUEsRUFDdkMsT0FBTyxNQUFJO0FBQUEsRUFDWCxPQUFPLENBQUM7QUFBQSxFQUNSLFlBQVk7QUFDZDtBQW1GQSxlQUFzQixjQUFjLG1CQUF1RDtBQUN6RixRQUFNLHVCQUFtQiwrQkFBVyxpQ0FBb0IsdURBQXdCLFlBQVksQ0FBQztBQUM3RixTQUFPLE1BQU0sNkJBQVcsTUFBTTtBQUFBLElBQzVCLFlBQTJCO0FBQ3pCLGVBQVMsaUJBQWlCO0FBQzFCLFlBQU0sa0JBQWtCO0FBQ3hCLFlB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
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>;