obsidian-dev-utils 97.0.0 → 98.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 (113) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +1 -1
  3. package/dist/integration-test-plugin/main.js +624 -483
  4. package/dist/lib/cjs/__merged.cjs +14 -9
  5. package/dist/lib/cjs/__merged.d.cts +2 -1
  6. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  7. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +38 -38
  8. package/dist/lib/cjs/obsidian/demo-vault-naming.cjs +167 -0
  9. package/dist/lib/cjs/obsidian/demo-vault-naming.d.cts +54 -0
  10. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +11 -5
  11. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +10 -8
  12. package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +9 -9
  13. package/dist/lib/cjs/obsidian/desktop-trusted-input.d.cts +23 -4
  14. package/dist/lib/cjs/obsidian/index.cjs +10 -1
  15. package/dist/lib/cjs/obsidian/index.d.cts +3 -0
  16. package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +195 -0
  17. package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +93 -0
  18. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
  19. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +4 -0
  20. package/dist/lib/cjs/obsidian/resource-lock.cjs +122 -122
  21. package/dist/lib/cjs/obsidian/trusted-input.cjs +206 -0
  22. package/dist/lib/cjs/obsidian/trusted-input.d.cts +126 -0
  23. package/dist/lib/cjs/script-utils/build.cjs +30 -6
  24. package/dist/lib/cjs/script-utils/build.d.cts +5 -0
  25. package/dist/lib/cjs/script-utils/demo-vault.cjs +26 -6
  26. package/dist/lib/cjs/script-utils/demo-vault.d.cts +12 -8
  27. package/dist/lib/cjs/script-utils/exec.cjs +1 -1
  28. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -2
  29. package/dist/lib/cjs/script-utils/index.cjs +4 -1
  30. package/dist/lib/cjs/script-utils/index.d.cts +1 -0
  31. package/dist/lib/cjs/script-utils/linters/cspell.cjs +3 -3
  32. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +39 -1
  33. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +16 -1
  34. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +5 -0
  35. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.cjs +254 -0
  36. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.d.cts +54 -0
  37. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.cjs +217 -0
  38. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.d.cts +141 -0
  39. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.cjs +214 -0
  40. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.d.cts +32 -0
  41. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.cjs +215 -0
  42. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.d.cts +30 -0
  43. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.cjs +318 -0
  44. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.d.cts +45 -0
  45. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +9 -1
  46. package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -2
  47. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +4 -4
  48. package/dist/lib/cjs/script-utils/npm-run.cjs +4 -3
  49. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +10 -1
  50. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +37 -1
  51. package/dist/lib/cjs/script-utils/package-manager.cjs +287 -0
  52. package/dist/lib/cjs/script-utils/package-manager.d.cts +77 -0
  53. package/dist/lib/cjs/script-utils/version.cjs +21 -9
  54. package/dist/lib/esm/__merged.d.mts +2 -1
  55. package/dist/lib/esm/__merged.mjs +16 -10
  56. package/dist/lib/esm/generated-during-build.mjs +1 -1
  57. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +38 -38
  58. package/dist/lib/esm/obsidian/demo-vault-naming.d.mts +54 -0
  59. package/dist/lib/esm/obsidian/demo-vault-naming.mjs +61 -0
  60. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.d.mts +10 -8
  61. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +14 -5
  62. package/dist/lib/esm/obsidian/desktop-trusted-input.d.mts +23 -4
  63. package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +9 -9
  64. package/dist/lib/esm/obsidian/index.d.mts +3 -0
  65. package/dist/lib/esm/obsidian/index.mjs +7 -1
  66. package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +93 -0
  67. package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +84 -0
  68. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +4 -0
  69. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
  70. package/dist/lib/esm/obsidian/resource-lock.mjs +122 -122
  71. package/dist/lib/esm/obsidian/trusted-input.d.mts +126 -0
  72. package/dist/lib/esm/obsidian/trusted-input.mjs +85 -0
  73. package/dist/lib/esm/script-utils/build.d.mts +5 -0
  74. package/dist/lib/esm/script-utils/build.mjs +30 -6
  75. package/dist/lib/esm/script-utils/demo-vault.d.mts +12 -8
  76. package/dist/lib/esm/script-utils/demo-vault.mjs +29 -6
  77. package/dist/lib/esm/script-utils/exec.mjs +1 -1
  78. package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -2
  79. package/dist/lib/esm/script-utils/index.d.mts +1 -0
  80. package/dist/lib/esm/script-utils/index.mjs +3 -1
  81. package/dist/lib/esm/script-utils/linters/cspell.mjs +3 -3
  82. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +39 -1
  83. package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +5 -0
  84. package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +11 -1
  85. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.d.mts +54 -0
  86. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.mjs +148 -0
  87. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.d.mts +141 -0
  88. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.mjs +92 -0
  89. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.d.mts +32 -0
  90. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.mjs +111 -0
  91. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.d.mts +30 -0
  92. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.mjs +112 -0
  93. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.d.mts +45 -0
  94. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.mjs +217 -0
  95. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +9 -1
  96. package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -2
  97. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +4 -4
  98. package/dist/lib/esm/script-utils/npm-run.mjs +4 -3
  99. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +37 -1
  100. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +10 -1
  101. package/dist/lib/esm/script-utils/package-manager.d.mts +77 -0
  102. package/dist/lib/esm/script-utils/package-manager.mjs +173 -0
  103. package/dist/lib/esm/script-utils/version.mjs +21 -9
  104. package/obsidian/demo-vault-naming/package.json +6 -0
  105. package/obsidian/mobile-trusted-input/package.json +6 -0
  106. package/obsidian/trusted-input/package.json +6 -0
  107. package/package.json +19 -17
  108. package/script-utils/linters/eslint-rules/manifest-description/package.json +6 -0
  109. package/script-utils/linters/eslint-rules/manifest-helpers/package.json +6 -0
  110. package/script-utils/linters/eslint-rules/manifest-id/package.json +6 -0
  111. package/script-utils/linters/eslint-rules/manifest-name/package.json +6 -0
  112. package/script-utils/linters/eslint-rules/manifest-schema/package.json +6 -0
  113. package/script-utils/package-manager/package.json +6 -0
@@ -47,6 +47,22 @@ export declare enum ObsidianDevUtilsRepoPaths {
47
47
  */
48
48
  AstroConfigTs = "astro.config.ts",
49
49
  /**
50
+ Windows batch file extension.
51
+ */
52
+ BatExtension = ".bat",
53
+ /**
54
+ Folder holding the executable shims of locally-installed packages.
55
+ */
56
+ Bin = ".bin",
57
+ /**
58
+ Bun lockfile.
59
+ */
60
+ BunLock = "bun.lock",
61
+ /**
62
+ Binary bun lockfile, written by bun before v1.2.
63
+ */
64
+ BunLockb = "bun.lockb",
65
+ /**
50
66
  CommonJS folder.
51
67
  */
52
68
  Cjs = "cjs",
@@ -55,6 +71,10 @@ export declare enum ObsidianDevUtilsRepoPaths {
55
71
  */
56
72
  CjsExtension = ".cjs",
57
73
  /**
74
+ Windows command script extension.
75
+ */
76
+ CommandExtension = ".cmd",
77
+ /**
58
78
  Current folder.
59
79
  */
60
80
  CurrentFolder = ".",
@@ -127,6 +147,10 @@ export declare enum ObsidianDevUtilsRepoPaths {
127
147
  */
128
148
  Esm = "esm",
129
149
  /**
150
+ Windows executable extension.
151
+ */
152
+ ExeExtension = ".exe",
153
+ /**
130
154
  Generated-during-build CommonJS file.
131
155
  */
132
156
  GeneratedDuringBuildCjs = "generated-during-build.cjs",
@@ -191,10 +215,18 @@ export declare enum ObsidianDevUtilsRepoPaths {
191
215
  */
192
216
  PackageJson = "package.json",
193
217
  /**
218
+ NPM lockfile.
219
+ */
220
+ PackageLockJson = "package-lock.json",
221
+ /**
194
222
  Folder holding hand-written patched copies of third-party packages.
195
223
  */
196
224
  Patches = "patches",
197
225
  /**
226
+ Pnpm lockfile.
227
+ */
228
+ PnpmLockYaml = "pnpm-lock.yaml",
229
+ /**
198
230
  Root folder.
199
231
  */
200
232
  RootFolder = "/",
@@ -245,5 +277,9 @@ export declare enum ObsidianDevUtilsRepoPaths {
245
277
  /**
246
278
  Types folder.
247
279
  */
248
- Types = "@types"
280
+ Types = "@types",
281
+ /**
282
+ Yarn lockfile.
283
+ */
284
+ YarnLock = "yarn.lock"
249
285
  }
@@ -51,8 +51,13 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
51
51
  ObsidianDevUtilsRepoPaths2["AnyPath"] = "**";
52
52
  ObsidianDevUtilsRepoPaths2["AnyTs"] = "*.ts";
53
53
  ObsidianDevUtilsRepoPaths2["AstroConfigTs"] = "astro.config.ts";
54
+ ObsidianDevUtilsRepoPaths2["BatExtension"] = ".bat";
55
+ ObsidianDevUtilsRepoPaths2["Bin"] = ".bin";
56
+ ObsidianDevUtilsRepoPaths2["BunLock"] = "bun.lock";
57
+ ObsidianDevUtilsRepoPaths2["BunLockb"] = "bun.lockb";
54
58
  ObsidianDevUtilsRepoPaths2["Cjs"] = "cjs";
55
59
  ObsidianDevUtilsRepoPaths2["CjsExtension"] = ".cjs";
60
+ ObsidianDevUtilsRepoPaths2["CommandExtension"] = ".cmd";
56
61
  ObsidianDevUtilsRepoPaths2["CurrentFolder"] = ".";
57
62
  ObsidianDevUtilsRepoPaths2["DataviewTypes"] = "src/obsidian/@types/dataview/**";
58
63
  ObsidianDevUtilsRepoPaths2["DctsExtension"] = ".d.cts";
@@ -71,6 +76,7 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
71
76
  ObsidianDevUtilsRepoPaths2["DtsExtension"] = ".d.ts";
72
77
  ObsidianDevUtilsRepoPaths2["EslintConfigMts"] = "eslint.config.mts";
73
78
  ObsidianDevUtilsRepoPaths2["Esm"] = "esm";
79
+ ObsidianDevUtilsRepoPaths2["ExeExtension"] = ".exe";
74
80
  ObsidianDevUtilsRepoPaths2["GeneratedDuringBuildCjs"] = "generated-during-build.cjs";
75
81
  ObsidianDevUtilsRepoPaths2["GeneratedDuringBuildMjs"] = "generated-during-build.mjs";
76
82
  ObsidianDevUtilsRepoPaths2["IndexCjs"] = "index.cjs";
@@ -87,7 +93,9 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
87
93
  ObsidianDevUtilsRepoPaths2["MjsExtension"] = ".mjs";
88
94
  ObsidianDevUtilsRepoPaths2["NodeModules"] = "node_modules";
89
95
  ObsidianDevUtilsRepoPaths2["PackageJson"] = "package.json";
96
+ ObsidianDevUtilsRepoPaths2["PackageLockJson"] = "package-lock.json";
90
97
  ObsidianDevUtilsRepoPaths2["Patches"] = "patches";
98
+ ObsidianDevUtilsRepoPaths2["PnpmLockYaml"] = "pnpm-lock.yaml";
91
99
  ObsidianDevUtilsRepoPaths2["RootFolder"] = "/";
92
100
  ObsidianDevUtilsRepoPaths2["Scripts"] = "scripts";
93
101
  ObsidianDevUtilsRepoPaths2["ScriptUtils"] = "script-utils";
@@ -101,9 +109,10 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
101
109
  ObsidianDevUtilsRepoPaths2["TsConfigValidateDeclarationsJson"] = "tsconfig.validate-declarations.json";
102
110
  ObsidianDevUtilsRepoPaths2["TsExtension"] = ".ts";
103
111
  ObsidianDevUtilsRepoPaths2["Types"] = "@types";
112
+ ObsidianDevUtilsRepoPaths2["YarnLock"] = "yarn.lock";
104
113
  return ObsidianDevUtilsRepoPaths2;
105
114
  })(ObsidianDevUtilsRepoPaths || {});
106
115
  export {
107
116
  ObsidianDevUtilsRepoPaths
108
117
  };
109
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYW4gZW51bWVyYXRpb24gb2YgY29tbW9uIGZpbGUgcGF0aHMgYW5kIHBhdHRlcm5zIHVzZWQgaW4gdGhlIE9ic2lkaWFuIGRldmVsb3BtZW50IHV0aWxpdGllcyByZXBvc2l0b3J5LlxuICogVGhlc2UgcGF0aHMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgb3RoZXIgdXRpbGl0aWVzLCBlbnN1cmluZyBjb25zaXN0ZW5jeSBhbmQgcmVkdWNpbmcgdGhlIGxpa2VsaWhvb2RcbiAqIG9mIGVycm9ycyBkdWUgdG8gaGFyZGNvZGVkIHN0cmluZ3MuXG4gKi9cblxuLyoqXG4gKiBFbnVtZXJhdGlvbiBvZiBjb21tb24gZmlsZSBwYXRocyBhbmQgcGF0dGVybnMgdXNlZCBpbiB0aGUgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBlbnVtIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMge1xuICAvKipcbiAgQW55IGZpbGUgb3IgZm9sZGVyLlxuICAgKi9cbiAgQW55ID0gJyonLFxuXG4gIC8qKlxuICBDb21tb25KUyBmaWxlLlxuICAgKi9cbiAgQW55Q2pzID0gJyouY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgQW55RGN0cyA9ICcqLmQuY3RzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueURtdHMgPSAnKi5kLm10cycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueUR0cyA9ICcqLmQudHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55TWpzID0gJyoubWpzJyxcblxuICAvKipcbiAgQW55IHBhdGggcmVjdXJzaXZlbHkuXG4gICAqL1xuICBBbnlQYXRoID0gJyoqJyxcblxuICAvKipcbiAgQW55IFR5cGVTY3JpcHQgZmlsZS5cbiAgICovXG4gIEFueVRzID0gJyoudHMnLFxuXG4gIC8qKlxuICBBc3RybyBjb25maWd1cmF0aW9uIGZpbGUgKGRvY3VtZW50YXRpb24gc2l0ZSkgYXQgdGhlIHJlcG8gcm9vdC5cbiAgICovXG4gIEFzdHJvQ29uZmlnVHMgPSAnYXN0cm8uY29uZmlnLnRzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgZm9sZGVyLlxuICAgKi9cbiAgQ2pzID0gJ2NqcycsXG5cbiAgLyoqXG4gIENvbW1vbkpTIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgQ2pzRXh0ZW5zaW9uID0gJy5janMnLFxuXG4gIC8qKlxuICBDdXJyZW50IGZvbGRlci5cbiAgICovXG4gIEN1cnJlbnRGb2xkZXIgPSAnLicsXG5cbiAgLyoqXG4gIERhdGF2aWV3IHR5cGVzLlxuICAgKi9cbiAgRGF0YXZpZXdUeXBlcyA9ICdzcmMvb2JzaWRpYW4vQHR5cGVzL2RhdGF2aWV3LyoqJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERjdHNFeHRlbnNpb24gPSAnLmQuY3RzJyxcblxuICAvKipcbiAgRGlzdHJpYnV0aW9uIGZvbGRlci5cbiAgICovXG4gIERpc3QgPSAnZGlzdCcsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYnVpbHQgYGRlbW8tdmF1bHQtaGVscGVyYCBwbHVnaW4gd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLCBpbmplY3RlZCBpbnRvIGRlbW8gdmF1bHRzIGF0IHJlbGVhc2UgdGltZS5cbiAgICovXG4gIERpc3REZW1vVmF1bHRIZWxwZXIgPSAnZGlzdC9kZW1vLXZhdWx0LWhlbHBlcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYnVpbHQgaW50ZWdyYXRpb24tdGVzdCBoYXJuZXNzIHBsdWdpbiB3aXRoaW4gdGhlIHtAbGluayBEaXN0fSBmb2xkZXIsIHNlZWRlZCBpbnRvIGEgY29uc3VtZXIncyBpbnRlZ3JhdGlvbi10ZXN0IHZhdWx0IHNvIGl0cyBgZXZhbEluT2JzaWRpYW5gIGNsb3N1cmVzIHJlYWNoIHRoZSBsaWJyYXJ5IHZpYSBgbGliYC5cbiAgICovXG4gIERpc3RJbnRlZ3JhdGlvblRlc3RQbHVnaW4gPSAnZGlzdC9pbnRlZ3JhdGlvbi10ZXN0LXBsdWdpbicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYGxpYmAgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci5cbiAgICovXG4gIERpc3RMaWIgPSAnZGlzdC9saWInLFxuXG4gIC8qKlxuICBBIHBhdGggdG8gdGhlIGJ1aWx0IHBsdWdpbi1BUEkgaW50ZWdyYXRpb24tdGVzdCBDT05TVU1FUiBwbHVnaW4gd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLiBUZXN0LW9ubHkgYW5kIG5ldmVyIHNoaXBwZWQ7IGJ1aWx0IHNlcGFyYXRlbHkgZnJvbSBpdHMgcHJvdmlkZXIgc28gdGhlIHR3byBjYXJyeSBkaXN0aW5jdCBgb2JzaWRpYW4tZGV2LXV0aWxzYCBjb3BpZXMuXG4gICAqL1xuICBEaXN0UGx1Z2luQXBpVGVzdENvbnN1bWVyID0gJ2Rpc3QvcGx1Z2luLWFwaS10ZXN0LWNvbnN1bWVyJyxcblxuICAvKipcbiAgQSBwYXRoIHRvIHRoZSBidWlsdCBwbHVnaW4tQVBJIGludGVncmF0aW9uLXRlc3QgUFJPVklERVIgcGx1Z2luIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci4gVGVzdC1vbmx5IGFuZCBuZXZlciBzaGlwcGVkOyBidWlsdCBzZXBhcmF0ZWx5IGZyb20gaXRzIGNvbnN1bWVyIHNvIHRoZSB0d28gY2FycnkgZGlzdGluY3QgYG9ic2lkaWFuLWRldi11dGlsc2AgY29waWVzLlxuICAgKi9cbiAgRGlzdFBsdWdpbkFwaVRlc3RQcm92aWRlciA9ICdkaXN0L3BsdWdpbi1hcGktdGVzdC1wcm92aWRlcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYHRlbXBsYXRlc2AgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlciwgaG9sZGluZyB0aGUgY29uc3VtZXItZmFjaW5nIHRlbXBsYXRlcy5cbiAgICovXG4gIERpc3RUZW1wbGF0ZXMgPSAnZGlzdC90ZW1wbGF0ZXMnLFxuXG4gIC8qKlxuICBUcmFuc3BpbGVkIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBEanNFeHRlbnNpb24gPSAnLmQuanMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERtdHNFeHRlbnNpb24gPSAnLmQubXRzJyxcblxuICAvKipcbiAgRG9jdW1lbnRhdGlvbiBzaXRlIGZvbGRlciAoQXN0cm8gKyBTdGFybGlnaHQgQVBJLWRvY3Mgc3ViLXByb2plY3QpLlxuICAgKi9cbiAgRG9jcyA9ICdkb2NzJyxcblxuICAvKipcbiAgQnVpbGQgb3V0cHV0IGZvbGRlciBvZiB0aGUgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICAgKi9cbiAgRG9jc0Rpc3QgPSAnZG9jcy9kaXN0JyxcblxuICAvKipcbiAgRHByaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIERwcmludEpzb24gPSAnZHByaW50Lmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRHRzRXh0ZW5zaW9uID0gJy5kLnRzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ010cyA9ICdlc2xpbnQuY29uZmlnLm10cycsXG5cbiAgLyoqXG4gIEVTTSBKYXZhU2NyaXB0IGZvbGRlci5cbiAgICovXG4gIEVzbSA9ICdlc20nLFxuXG4gIC8qKlxuICBHZW5lcmF0ZWQtZHVyaW5nLWJ1aWxkIENvbW1vbkpTIGZpbGUuXG4gICAqL1xuICBHZW5lcmF0ZWREdXJpbmdCdWlsZENqcyA9ICdnZW5lcmF0ZWQtZHVyaW5nLWJ1aWxkLmNqcycsXG5cbiAgLyoqXG4gIEdlbmVyYXRlZC1kdXJpbmctYnVpbGQgRVNNIEphdmFTY3JpcHQgZmlsZS5cbiAgICovXG4gIEdlbmVyYXRlZER1cmluZ0J1aWxkTWpzID0gJ2dlbmVyYXRlZC1kdXJpbmctYnVpbGQubWpzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhDanMgPSAnaW5kZXguY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERjdHMgPSAnaW5kZXguZC5jdHMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERtdHMgPSAnaW5kZXguZC5tdHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhNanMgPSAnaW5kZXgubWpzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhUcyA9ICdpbmRleC50cycsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgc291cmNlcyBvZiB0aGUgcGx1Z2luLUFQSSBpbnRlZ3JhdGlvbi10ZXN0IENPTlNVTUVSIHBsdWdpbi5cbiAgICovXG4gIEludGVncmF0aW9uVGVzdFBsdWdpbkFwaUNvbnN1bWVyID0gJ2ludGVncmF0aW9uLXRlc3QtcGx1Z2luLWFwaS9jb25zdW1lcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgc291cmNlcyBvZiB0aGUgcGx1Z2luLUFQSSBpbnRlZ3JhdGlvbi10ZXN0IFBST1ZJREVSIHBsdWdpbi5cbiAgICovXG4gIEludGVncmF0aW9uVGVzdFBsdWdpbkFwaVByb3ZpZGVyID0gJ2ludGVncmF0aW9uLXRlc3QtcGx1Z2luLWFwaS9wcm92aWRlcicsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBKc0V4dGVuc2lvbiA9ICcuanMnLFxuXG4gIC8qKlxuICBFU00gTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyA9ICcubWFya2Rvd25saW50LWNsaTIubWpzJyxcblxuICAvKipcbiAgTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBzY2hlbWEgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50VHlwZXNNYXJrZG93bmxpbnRDbGkyQ29uZmlnU2NoZW1hRHRzID0gJ3NyYy9zY3JpcHQtdXRpbHMvbGludGVycy9tYXJrZG93bmxpbnQtdHlwZXMvQHR5cGVzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy1zY2hlbWEuZC50cycsXG5cbiAgLyoqXG4gIEdlbmVyYXRlZCBmbGF0IHJlLWV4cG9ydCBiYXJyZWwgZmlsZS5cbiAgICovXG4gIE1lcmdlZFRzID0gJ19fbWVyZ2VkLnRzJyxcblxuICAvKipcbiAgRVNNIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBNanNFeHRlbnNpb24gPSAnLm1qcycsXG5cbiAgLyoqXG4gIE5vZGUgbW9kdWxlcyBmb2xkZXIuXG4gICAqL1xuICBOb2RlTW9kdWxlcyA9ICdub2RlX21vZHVsZXMnLFxuXG4gIC8qKlxuICBQYWNrYWdlIEpTT04gZmlsZS5cbiAgICovXG4gIFBhY2thZ2VKc29uID0gJ3BhY2thZ2UuanNvbicsXG5cbiAgLyoqXG4gIEZvbGRlciBob2xkaW5nIGhhbmQtd3JpdHRlbiBwYXRjaGVkIGNvcGllcyBvZiB0aGlyZC1wYXJ0eSBwYWNrYWdlcy5cbiAgICovXG4gIFBhdGNoZXMgPSAncGF0Y2hlcycsXG5cbiAgLyoqXG4gIFJvb3QgZm9sZGVyLlxuICAgKi9cbiAgUm9vdEZvbGRlciA9ICcvJyxcblxuICAvKipcbiAgU2NyaXB0cyBmb2xkZXIuXG4gICAqL1xuICBTY3JpcHRzID0gJ3NjcmlwdHMnLFxuXG4gIC8qKlxuICBTY3JpcHRVdGlscyBmb2xkZXIuXG4gICAqL1xuICBTY3JpcHRVdGlscyA9ICdzY3JpcHQtdXRpbHMnLFxuXG4gIC8qKlxuICBTb3VyY2UgZm9sZGVyLlxuICAgKi9cbiAgU3JjID0gJ3NyYycsXG5cbiAgLyoqXG4gIFN0eWxlcyBmb2xkZXIuXG4gICAqL1xuICBTdHlsZXMgPSAnc3R5bGVzJyxcblxuICAvKipcbiAgU3R5bGVzIENTUyBmaWxlLlxuICAgKi9cbiAgU3R5bGVzQ3NzID0gJ3N0eWxlcy5jc3MnLFxuXG4gIC8qKlxuICBUZW1wbGF0ZXMgZm9sZGVyLlxuICAgKi9cbiAgVGVtcGxhdGVzID0gJ3RlbXBsYXRlcycsXG5cbiAgLyoqXG4gIFRlc3QgaGVscGVycyBmb2xkZXIuXG4gICAqL1xuICBUZXN0SGVscGVycyA9ICd0ZXN0LWhlbHBlcnMnLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIFRzQ29uZmlnSnNvbiA9ICd0c2NvbmZpZy5qc29uJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCB2YWxpZGF0ZXMgdGhlIGdlbmVyYXRlZCBDb21tb25KUyBkZWNsYXJhdGlvbnMuXG4gICAqL1xuICBUc0NvbmZpZ1ZhbGlkYXRlRGVjbGFyYXRpb25zQ2pzSnNvbiA9ICd0c2NvbmZpZy52YWxpZGF0ZS1kZWNsYXJhdGlvbnMtY2pzLmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHZhbGlkYXRlcyB0aGUgZ2VuZXJhdGVkIEVTTSBkZWNsYXJhdGlvbnMuXG4gICAqL1xuICBUc0NvbmZpZ1ZhbGlkYXRlRGVjbGFyYXRpb25zSnNvbiA9ICd0c2NvbmZpZy52YWxpZGF0ZS1kZWNsYXJhdGlvbnMuanNvbicsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBUc0V4dGVuc2lvbiA9ICcudHMnLFxuXG4gIC8qKlxuICBUeXBlcyBmb2xkZXIuXG4gICAqL1xuICBUeXBlcyA9ICdAdHlwZXMnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV08sSUFBSyw0QkFBTCxrQkFBS0EsK0JBQUw7QUFJTCxFQUFBQSwyQkFBQSxTQUFNO0FBS04sRUFBQUEsMkJBQUEsWUFBUztBQUtULEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsWUFBUztBQUtULEVBQUFBLDJCQUFBLFlBQVM7QUFLVCxFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsV0FBUTtBQUtSLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUtoQixFQUFBQSwyQkFBQSxTQUFNO0FBS04sRUFBQUEsMkJBQUEsa0JBQWU7QUFLZixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsMkJBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUtoQixFQUFBQSwyQkFBQSxVQUFPO0FBS1AsRUFBQUEsMkJBQUEseUJBQXNCO0FBS3RCLEVBQUFBLDJCQUFBLCtCQUE0QjtBQUs1QixFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLDJCQUFBLCtCQUE0QjtBQUs1QixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsMkJBQUEsa0JBQWU7QUFLZixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsMkJBQUEsVUFBTztBQUtQLEVBQUFBLDJCQUFBLGNBQVc7QUFLWCxFQUFBQSwyQkFBQSxnQkFBYTtBQUtiLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEscUJBQWtCO0FBS2xCLEVBQUFBLDJCQUFBLFNBQU07QUFLTixFQUFBQSwyQkFBQSw2QkFBMEI7QUFLMUIsRUFBQUEsMkJBQUEsNkJBQTBCO0FBSzFCLEVBQUFBLDJCQUFBLGNBQVc7QUFLWCxFQUFBQSwyQkFBQSxlQUFZO0FBS1osRUFBQUEsMkJBQUEsZUFBWTtBQUtaLEVBQUFBLDJCQUFBLGNBQVc7QUFLWCxFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsc0NBQW1DO0FBS25DLEVBQUFBLDJCQUFBLHNDQUFtQztBQUtuQyxFQUFBQSwyQkFBQSxpQkFBYztBQUtkLEVBQUFBLDJCQUFBLCtCQUE0QjtBQUs1QixFQUFBQSwyQkFBQSxzREFBbUQ7QUFLbkQsRUFBQUEsMkJBQUEsY0FBVztBQUtYLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxpQkFBYztBQUtkLEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSxnQkFBYTtBQUtiLEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSxpQkFBYztBQUtkLEVBQUFBLDJCQUFBLFNBQU07QUFLTixFQUFBQSwyQkFBQSxZQUFTO0FBS1QsRUFBQUEsMkJBQUEsZUFBWTtBQUtaLEVBQUFBLDJCQUFBLGVBQVk7QUFLWixFQUFBQSwyQkFBQSxpQkFBYztBQUtkLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEseUNBQXNDO0FBS3RDLEVBQUFBLDJCQUFBLHNDQUFtQztBQUtuQyxFQUFBQSwyQkFBQSxpQkFBYztBQUtkLEVBQUFBLDJCQUFBLFdBQVE7QUF0U0UsU0FBQUE7QUFBQSxHQUFBOyIsCiAgIm5hbWVzIjogWyJPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIl0KfQo=
118
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYW4gZW51bWVyYXRpb24gb2YgY29tbW9uIGZpbGUgcGF0aHMgYW5kIHBhdHRlcm5zIHVzZWQgaW4gdGhlIE9ic2lkaWFuIGRldmVsb3BtZW50IHV0aWxpdGllcyByZXBvc2l0b3J5LlxuICogVGhlc2UgcGF0aHMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgb3RoZXIgdXRpbGl0aWVzLCBlbnN1cmluZyBjb25zaXN0ZW5jeSBhbmQgcmVkdWNpbmcgdGhlIGxpa2VsaWhvb2RcbiAqIG9mIGVycm9ycyBkdWUgdG8gaGFyZGNvZGVkIHN0cmluZ3MuXG4gKi9cblxuLyoqXG4gKiBFbnVtZXJhdGlvbiBvZiBjb21tb24gZmlsZSBwYXRocyBhbmQgcGF0dGVybnMgdXNlZCBpbiB0aGUgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBlbnVtIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMge1xuICAvKipcbiAgQW55IGZpbGUgb3IgZm9sZGVyLlxuICAgKi9cbiAgQW55ID0gJyonLFxuXG4gIC8qKlxuICBDb21tb25KUyBmaWxlLlxuICAgKi9cbiAgQW55Q2pzID0gJyouY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgQW55RGN0cyA9ICcqLmQuY3RzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueURtdHMgPSAnKi5kLm10cycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueUR0cyA9ICcqLmQudHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55TWpzID0gJyoubWpzJyxcblxuICAvKipcbiAgQW55IHBhdGggcmVjdXJzaXZlbHkuXG4gICAqL1xuICBBbnlQYXRoID0gJyoqJyxcblxuICAvKipcbiAgQW55IFR5cGVTY3JpcHQgZmlsZS5cbiAgICovXG4gIEFueVRzID0gJyoudHMnLFxuXG4gIC8qKlxuICBBc3RybyBjb25maWd1cmF0aW9uIGZpbGUgKGRvY3VtZW50YXRpb24gc2l0ZSkgYXQgdGhlIHJlcG8gcm9vdC5cbiAgICovXG4gIEFzdHJvQ29uZmlnVHMgPSAnYXN0cm8uY29uZmlnLnRzJyxcblxuICAvKipcbiAgV2luZG93cyBiYXRjaCBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIEJhdEV4dGVuc2lvbiA9ICcuYmF0JyxcblxuICAvKipcbiAgRm9sZGVyIGhvbGRpbmcgdGhlIGV4ZWN1dGFibGUgc2hpbXMgb2YgbG9jYWxseS1pbnN0YWxsZWQgcGFja2FnZXMuXG4gICAqL1xuICBCaW4gPSAnLmJpbicsXG5cbiAgLyoqXG4gIEJ1biBsb2NrZmlsZS5cbiAgICovXG4gIEJ1bkxvY2sgPSAnYnVuLmxvY2snLFxuXG4gIC8qKlxuICBCaW5hcnkgYnVuIGxvY2tmaWxlLCB3cml0dGVuIGJ5IGJ1biBiZWZvcmUgdjEuMi5cbiAgICovXG4gIEJ1bkxvY2tiID0gJ2J1bi5sb2NrYicsXG5cbiAgLyoqXG4gIENvbW1vbkpTIGZvbGRlci5cbiAgICovXG4gIENqcyA9ICdjanMnLFxuXG4gIC8qKlxuICBDb21tb25KUyBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIENqc0V4dGVuc2lvbiA9ICcuY2pzJyxcblxuICAvKipcbiAgV2luZG93cyBjb21tYW5kIHNjcmlwdCBleHRlbnNpb24uXG4gICAqL1xuICBDb21tYW5kRXh0ZW5zaW9uID0gJy5jbWQnLFxuXG4gIC8qKlxuICBDdXJyZW50IGZvbGRlci5cbiAgICovXG4gIEN1cnJlbnRGb2xkZXIgPSAnLicsXG5cbiAgLyoqXG4gIERhdGF2aWV3IHR5cGVzLlxuICAgKi9cbiAgRGF0YXZpZXdUeXBlcyA9ICdzcmMvb2JzaWRpYW4vQHR5cGVzL2RhdGF2aWV3LyoqJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERjdHNFeHRlbnNpb24gPSAnLmQuY3RzJyxcblxuICAvKipcbiAgRGlzdHJpYnV0aW9uIGZvbGRlci5cbiAgICovXG4gIERpc3QgPSAnZGlzdCcsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYnVpbHQgYGRlbW8tdmF1bHQtaGVscGVyYCBwbHVnaW4gd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLCBpbmplY3RlZCBpbnRvIGRlbW8gdmF1bHRzIGF0IHJlbGVhc2UgdGltZS5cbiAgICovXG4gIERpc3REZW1vVmF1bHRIZWxwZXIgPSAnZGlzdC9kZW1vLXZhdWx0LWhlbHBlcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYnVpbHQgaW50ZWdyYXRpb24tdGVzdCBoYXJuZXNzIHBsdWdpbiB3aXRoaW4gdGhlIHtAbGluayBEaXN0fSBmb2xkZXIsIHNlZWRlZCBpbnRvIGEgY29uc3VtZXIncyBpbnRlZ3JhdGlvbi10ZXN0IHZhdWx0IHNvIGl0cyBgZXZhbEluT2JzaWRpYW5gIGNsb3N1cmVzIHJlYWNoIHRoZSBsaWJyYXJ5IHZpYSBgbGliYC5cbiAgICovXG4gIERpc3RJbnRlZ3JhdGlvblRlc3RQbHVnaW4gPSAnZGlzdC9pbnRlZ3JhdGlvbi10ZXN0LXBsdWdpbicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYGxpYmAgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci5cbiAgICovXG4gIERpc3RMaWIgPSAnZGlzdC9saWInLFxuXG4gIC8qKlxuICBBIHBhdGggdG8gdGhlIGJ1aWx0IHBsdWdpbi1BUEkgaW50ZWdyYXRpb24tdGVzdCBDT05TVU1FUiBwbHVnaW4gd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLiBUZXN0LW9ubHkgYW5kIG5ldmVyIHNoaXBwZWQ7IGJ1aWx0IHNlcGFyYXRlbHkgZnJvbSBpdHMgcHJvdmlkZXIgc28gdGhlIHR3byBjYXJyeSBkaXN0aW5jdCBgb2JzaWRpYW4tZGV2LXV0aWxzYCBjb3BpZXMuXG4gICAqL1xuICBEaXN0UGx1Z2luQXBpVGVzdENvbnN1bWVyID0gJ2Rpc3QvcGx1Z2luLWFwaS10ZXN0LWNvbnN1bWVyJyxcblxuICAvKipcbiAgQSBwYXRoIHRvIHRoZSBidWlsdCBwbHVnaW4tQVBJIGludGVncmF0aW9uLXRlc3QgUFJPVklERVIgcGx1Z2luIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci4gVGVzdC1vbmx5IGFuZCBuZXZlciBzaGlwcGVkOyBidWlsdCBzZXBhcmF0ZWx5IGZyb20gaXRzIGNvbnN1bWVyIHNvIHRoZSB0d28gY2FycnkgZGlzdGluY3QgYG9ic2lkaWFuLWRldi11dGlsc2AgY29waWVzLlxuICAgKi9cbiAgRGlzdFBsdWdpbkFwaVRlc3RQcm92aWRlciA9ICdkaXN0L3BsdWdpbi1hcGktdGVzdC1wcm92aWRlcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYHRlbXBsYXRlc2AgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlciwgaG9sZGluZyB0aGUgY29uc3VtZXItZmFjaW5nIHRlbXBsYXRlcy5cbiAgICovXG4gIERpc3RUZW1wbGF0ZXMgPSAnZGlzdC90ZW1wbGF0ZXMnLFxuXG4gIC8qKlxuICBUcmFuc3BpbGVkIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBEanNFeHRlbnNpb24gPSAnLmQuanMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERtdHNFeHRlbnNpb24gPSAnLmQubXRzJyxcblxuICAvKipcbiAgRG9jdW1lbnRhdGlvbiBzaXRlIGZvbGRlciAoQXN0cm8gKyBTdGFybGlnaHQgQVBJLWRvY3Mgc3ViLXByb2plY3QpLlxuICAgKi9cbiAgRG9jcyA9ICdkb2NzJyxcblxuICAvKipcbiAgQnVpbGQgb3V0cHV0IGZvbGRlciBvZiB0aGUgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICAgKi9cbiAgRG9jc0Rpc3QgPSAnZG9jcy9kaXN0JyxcblxuICAvKipcbiAgRHByaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIERwcmludEpzb24gPSAnZHByaW50Lmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRHRzRXh0ZW5zaW9uID0gJy5kLnRzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ010cyA9ICdlc2xpbnQuY29uZmlnLm10cycsXG5cbiAgLyoqXG4gIEVTTSBKYXZhU2NyaXB0IGZvbGRlci5cbiAgICovXG4gIEVzbSA9ICdlc20nLFxuXG4gIC8qKlxuICBXaW5kb3dzIGV4ZWN1dGFibGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRXhlRXh0ZW5zaW9uID0gJy5leGUnLFxuXG4gIC8qKlxuICBHZW5lcmF0ZWQtZHVyaW5nLWJ1aWxkIENvbW1vbkpTIGZpbGUuXG4gICAqL1xuICBHZW5lcmF0ZWREdXJpbmdCdWlsZENqcyA9ICdnZW5lcmF0ZWQtZHVyaW5nLWJ1aWxkLmNqcycsXG5cbiAgLyoqXG4gIEdlbmVyYXRlZC1kdXJpbmctYnVpbGQgRVNNIEphdmFTY3JpcHQgZmlsZS5cbiAgICovXG4gIEdlbmVyYXRlZER1cmluZ0J1aWxkTWpzID0gJ2dlbmVyYXRlZC1kdXJpbmctYnVpbGQubWpzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhDanMgPSAnaW5kZXguY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERjdHMgPSAnaW5kZXguZC5jdHMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERtdHMgPSAnaW5kZXguZC5tdHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhNanMgPSAnaW5kZXgubWpzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhUcyA9ICdpbmRleC50cycsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgc291cmNlcyBvZiB0aGUgcGx1Z2luLUFQSSBpbnRlZ3JhdGlvbi10ZXN0IENPTlNVTUVSIHBsdWdpbi5cbiAgICovXG4gIEludGVncmF0aW9uVGVzdFBsdWdpbkFwaUNvbnN1bWVyID0gJ2ludGVncmF0aW9uLXRlc3QtcGx1Z2luLWFwaS9jb25zdW1lcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgc291cmNlcyBvZiB0aGUgcGx1Z2luLUFQSSBpbnRlZ3JhdGlvbi10ZXN0IFBST1ZJREVSIHBsdWdpbi5cbiAgICovXG4gIEludGVncmF0aW9uVGVzdFBsdWdpbkFwaVByb3ZpZGVyID0gJ2ludGVncmF0aW9uLXRlc3QtcGx1Z2luLWFwaS9wcm92aWRlcicsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBKc0V4dGVuc2lvbiA9ICcuanMnLFxuXG4gIC8qKlxuICBFU00gTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyA9ICcubWFya2Rvd25saW50LWNsaTIubWpzJyxcblxuICAvKipcbiAgTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBzY2hlbWEgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50VHlwZXNNYXJrZG93bmxpbnRDbGkyQ29uZmlnU2NoZW1hRHRzID0gJ3NyYy9zY3JpcHQtdXRpbHMvbGludGVycy9tYXJrZG93bmxpbnQtdHlwZXMvQHR5cGVzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy1zY2hlbWEuZC50cycsXG5cbiAgLyoqXG4gIEdlbmVyYXRlZCBmbGF0IHJlLWV4cG9ydCBiYXJyZWwgZmlsZS5cbiAgICovXG4gIE1lcmdlZFRzID0gJ19fbWVyZ2VkLnRzJyxcblxuICAvKipcbiAgRVNNIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBNanNFeHRlbnNpb24gPSAnLm1qcycsXG5cbiAgLyoqXG4gIE5vZGUgbW9kdWxlcyBmb2xkZXIuXG4gICAqL1xuICBOb2RlTW9kdWxlcyA9ICdub2RlX21vZHVsZXMnLFxuXG4gIC8qKlxuICBQYWNrYWdlIEpTT04gZmlsZS5cbiAgICovXG4gIFBhY2thZ2VKc29uID0gJ3BhY2thZ2UuanNvbicsXG5cbiAgLyoqXG4gIE5QTSBsb2NrZmlsZS5cbiAgICovXG4gIFBhY2thZ2VMb2NrSnNvbiA9ICdwYWNrYWdlLWxvY2suanNvbicsXG5cbiAgLyoqXG4gIEZvbGRlciBob2xkaW5nIGhhbmQtd3JpdHRlbiBwYXRjaGVkIGNvcGllcyBvZiB0aGlyZC1wYXJ0eSBwYWNrYWdlcy5cbiAgICovXG4gIFBhdGNoZXMgPSAncGF0Y2hlcycsXG5cbiAgLyoqXG4gIFBucG0gbG9ja2ZpbGUuXG4gICAqL1xuICBQbnBtTG9ja1lhbWwgPSAncG5wbS1sb2NrLnlhbWwnLFxuXG4gIC8qKlxuICBSb290IGZvbGRlci5cbiAgICovXG4gIFJvb3RGb2xkZXIgPSAnLycsXG5cbiAgLyoqXG4gIFNjcmlwdHMgZm9sZGVyLlxuICAgKi9cbiAgU2NyaXB0cyA9ICdzY3JpcHRzJyxcblxuICAvKipcbiAgU2NyaXB0VXRpbHMgZm9sZGVyLlxuICAgKi9cbiAgU2NyaXB0VXRpbHMgPSAnc2NyaXB0LXV0aWxzJyxcblxuICAvKipcbiAgU291cmNlIGZvbGRlci5cbiAgICovXG4gIFNyYyA9ICdzcmMnLFxuXG4gIC8qKlxuICBTdHlsZXMgZm9sZGVyLlxuICAgKi9cbiAgU3R5bGVzID0gJ3N0eWxlcycsXG5cbiAgLyoqXG4gIFN0eWxlcyBDU1MgZmlsZS5cbiAgICovXG4gIFN0eWxlc0NzcyA9ICdzdHlsZXMuY3NzJyxcblxuICAvKipcbiAgVGVtcGxhdGVzIGZvbGRlci5cbiAgICovXG4gIFRlbXBsYXRlcyA9ICd0ZW1wbGF0ZXMnLFxuXG4gIC8qKlxuICBUZXN0IGhlbHBlcnMgZm9sZGVyLlxuICAgKi9cbiAgVGVzdEhlbHBlcnMgPSAndGVzdC1oZWxwZXJzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBUc0NvbmZpZ0pzb24gPSAndHNjb25maWcuanNvbicsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgdmFsaWRhdGVzIHRoZSBnZW5lcmF0ZWQgQ29tbW9uSlMgZGVjbGFyYXRpb25zLlxuICAgKi9cbiAgVHNDb25maWdWYWxpZGF0ZURlY2xhcmF0aW9uc0Nqc0pzb24gPSAndHNjb25maWcudmFsaWRhdGUtZGVjbGFyYXRpb25zLWNqcy5qc29uJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCB2YWxpZGF0ZXMgdGhlIGdlbmVyYXRlZCBFU00gZGVjbGFyYXRpb25zLlxuICAgKi9cbiAgVHNDb25maWdWYWxpZGF0ZURlY2xhcmF0aW9uc0pzb24gPSAndHNjb25maWcudmFsaWRhdGUtZGVjbGFyYXRpb25zLmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgVHNFeHRlbnNpb24gPSAnLnRzJyxcblxuICAvKipcbiAgVHlwZXMgZm9sZGVyLlxuICAgKi9cbiAgVHlwZXMgPSAnQHR5cGVzJyxcblxuICAvKipcbiAgWWFybiBsb2NrZmlsZS5cbiAgICovXG4gIFlhcm5Mb2NrID0gJ3lhcm4ubG9jaydcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXTyxJQUFLLDRCQUFMLGtCQUFLQSwrQkFBTDtBQUlMLEVBQUFBLDJCQUFBLFNBQU07QUFLTixFQUFBQSwyQkFBQSxZQUFTO0FBS1QsRUFBQUEsMkJBQUEsYUFBVTtBQUtWLEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSxZQUFTO0FBS1QsRUFBQUEsMkJBQUEsWUFBUztBQUtULEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSxXQUFRO0FBS1IsRUFBQUEsMkJBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEsU0FBTTtBQUtOLEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSxjQUFXO0FBS1gsRUFBQUEsMkJBQUEsU0FBTTtBQUtOLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEsc0JBQW1CO0FBS25CLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUtoQixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsMkJBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLDJCQUFBLFVBQU87QUFLUCxFQUFBQSwyQkFBQSx5QkFBc0I7QUFLdEIsRUFBQUEsMkJBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSwrQkFBNEI7QUFLNUIsRUFBQUEsMkJBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUtoQixFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUtoQixFQUFBQSwyQkFBQSxVQUFPO0FBS1AsRUFBQUEsMkJBQUEsY0FBVztBQUtYLEVBQUFBLDJCQUFBLGdCQUFhO0FBS2IsRUFBQUEsMkJBQUEsa0JBQWU7QUFLZixFQUFBQSwyQkFBQSxxQkFBa0I7QUFLbEIsRUFBQUEsMkJBQUEsU0FBTTtBQUtOLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEsNkJBQTBCO0FBSzFCLEVBQUFBLDJCQUFBLDZCQUEwQjtBQUsxQixFQUFBQSwyQkFBQSxjQUFXO0FBS1gsRUFBQUEsMkJBQUEsZUFBWTtBQUtaLEVBQUFBLDJCQUFBLGVBQVk7QUFLWixFQUFBQSwyQkFBQSxjQUFXO0FBS1gsRUFBQUEsMkJBQUEsYUFBVTtBQUtWLEVBQUFBLDJCQUFBLHNDQUFtQztBQUtuQyxFQUFBQSwyQkFBQSxzQ0FBbUM7QUFLbkMsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSwrQkFBNEI7QUFLNUIsRUFBQUEsMkJBQUEsc0RBQW1EO0FBS25ELEVBQUFBLDJCQUFBLGNBQVc7QUFLWCxFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLGlCQUFjO0FBS2QsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxxQkFBa0I7QUFLbEIsRUFBQUEsMkJBQUEsYUFBVTtBQUtWLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEsZ0JBQWE7QUFLYixFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxTQUFNO0FBS04sRUFBQUEsMkJBQUEsWUFBUztBQUtULEVBQUFBLDJCQUFBLGVBQVk7QUFLWixFQUFBQSwyQkFBQSxlQUFZO0FBS1osRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLHlDQUFzQztBQUt0QyxFQUFBQSwyQkFBQSxzQ0FBbUM7QUFLbkMsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxXQUFRO0FBS1IsRUFBQUEsMkJBQUEsY0FBVztBQW5WRCxTQUFBQTtBQUFBLEdBQUE7IiwKICAibmFtZXMiOiBbIk9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMiXQp9Cg==
@@ -0,0 +1,77 @@
1
+ /// <reference path="../library.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Resolves locally-installed tool binaries and package-script runners without assuming `npm`.
6
+ *
7
+ * Delegating to `npx` silently assumes an npm-installed tree. On Windows that assumption is fatal under
8
+ * `bun`: `bun install` writes `node_modules/.bin/<tool>.exe`, not the `<tool>.cmd` that npm's `npx` looks
9
+ * for, so `npx` misses the local install entirely and downloads the tool from the registry instead — which
10
+ * for `tsc` is the well-known decoy package, not TypeScript. Resolving the shim from `node_modules/.bin`
11
+ * ourselves sidesteps the whole shim-format question, because every package manager writes one there.
12
+ */
13
+ /**
14
+ * A package manager that can own a project's dependency tree.
15
+ */
16
+ export declare enum PackageManager {
17
+ /**
18
+ * The `bun` package manager.
19
+ */
20
+ Bun = "bun",
21
+ /**
22
+ * The `npm` package manager.
23
+ */
24
+ Npm = "npm",
25
+ /**
26
+ * The `pnpm` package manager.
27
+ */
28
+ Pnpm = "pnpm",
29
+ /**
30
+ * The `yarn` package manager.
31
+ */
32
+ Yarn = "yarn"
33
+ }
34
+ /**
35
+ * Parameters for {@link resolveToolCommand}.
36
+ */
37
+ export interface ResolveToolCommandParams {
38
+ /**
39
+ * The current working folder to resolve from.
40
+ */
41
+ readonly cwd?: string;
42
+ /**
43
+ * The name of the locally-installed tool, as it appears in `node_modules/.bin`.
44
+ */
45
+ readonly tool: string;
46
+ }
47
+ /**
48
+ * Determines which package manager owns the project's dependency tree.
49
+ *
50
+ * The lockfile is the primary signal, because it describes the tree itself rather than whichever manager
51
+ * happens to have launched the current process. When no lockfile is present, the manager that launched us
52
+ * is the next best answer, and every manager reports itself in `npm_config_user_agent` as a leading
53
+ * `<name>/<version>` token.
54
+ *
55
+ * @param cwd - The current working folder to resolve from.
56
+ * @returns The detected package manager, or {@link PackageManager.Npm} when nothing indicates otherwise.
57
+ */
58
+ export declare function getPackageManager(cwd?: string): PackageManager;
59
+ /**
60
+ * Builds the command parts that run a package script through the manager that owns the tree.
61
+ *
62
+ * @param cwd - The current working folder to resolve from.
63
+ * @returns The command parts, e.g. `['bun', 'run']`. The script name is appended by the caller.
64
+ */
65
+ export declare function getPackageManagerRunCommand(cwd?: string): string[];
66
+ /**
67
+ * Builds the command parts that run a locally-installed tool, with the tool itself already included.
68
+ *
69
+ * Prefers the shim in the nearest `node_modules/.bin`, walking up through ancestor folders so a hoisted
70
+ * workspace install is still found. Falls back to the owning manager's exec form when no shim resolves —
71
+ * which is both the previous behavior and the only thing that works under yarn's Plug'n'Play, where
72
+ * `node_modules/.bin` does not exist at all.
73
+ *
74
+ * @param params - The parameters for the resolution.
75
+ * @returns The command parts, e.g. `['/project/node_modules/.bin/tsc']` or `['bun', 'x', 'tsc']`.
76
+ */
77
+ export declare function resolveToolCommand(params: ResolveToolCommandParams): string[];
@@ -0,0 +1,173 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureBrowserProcess() {
8
+ const browserProcess = {
9
+ browser: true,
10
+ cwd() {
11
+ return '/';
12
+ },
13
+ env: {},
14
+ platform: 'android'
15
+ };
16
+
17
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
18
+ const existingProcess = globalThis.process;
19
+
20
+ if (!existingProcess) {
21
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
22
+ globalThis.process = browserProcess;
23
+ return;
24
+ }
25
+
26
+ if (existingProcess.versions?.node) {
27
+ return;
28
+ }
29
+
30
+ const existingProcessRecord = existingProcess;
31
+
32
+ for (const [key, value] of Object.entries(browserProcess)) {
33
+ existingProcessRecord[key] ??= value;
34
+ }
35
+
36
+ existingProcessRecord['browser'] = true;
37
+ }
38
+
39
+ (function initEsm() {
40
+ ensureBrowserProcess();
41
+ })();
42
+ })();
43
+
44
+ import { existsSync } from "node:fs";
45
+ import process from "node:process";
46
+ import {
47
+ dirname,
48
+ join,
49
+ toPosixPath
50
+ } from "../path.mjs";
51
+ import { getMandatoryNamedGroup } from "../reg-exp.mjs";
52
+ import { assertNever } from "../type-guards.mjs";
53
+ import { ObsidianDevUtilsRepoPaths } from "./obsidian-dev-utils-repo-paths.mjs";
54
+ import { getRootFolder } from "./root.mjs";
55
+ var PackageManager = /* @__PURE__ */ ((PackageManager2) => {
56
+ PackageManager2["Bun"] = "bun";
57
+ PackageManager2["Npm"] = "npm";
58
+ PackageManager2["Pnpm"] = "pnpm";
59
+ PackageManager2["Yarn"] = "yarn";
60
+ return PackageManager2;
61
+ })(PackageManager || {});
62
+ function getPackageManager(cwd) {
63
+ const root = getStartFolder(cwd);
64
+ if (existsSync(join(root, ObsidianDevUtilsRepoPaths.BunLock)) || existsSync(join(root, ObsidianDevUtilsRepoPaths.BunLockb))) {
65
+ return "bun" /* Bun */;
66
+ }
67
+ if (existsSync(join(root, ObsidianDevUtilsRepoPaths.PnpmLockYaml))) {
68
+ return "pnpm" /* Pnpm */;
69
+ }
70
+ if (existsSync(join(root, ObsidianDevUtilsRepoPaths.YarnLock))) {
71
+ return "yarn" /* Yarn */;
72
+ }
73
+ if (existsSync(join(root, ObsidianDevUtilsRepoPaths.PackageLockJson))) {
74
+ return "npm" /* Npm */;
75
+ }
76
+ return detectPackageManagerFromUserAgent() ?? "npm" /* Npm */;
77
+ }
78
+ function getPackageManagerRunCommand(cwd) {
79
+ return [getPackageManager(cwd), "run"];
80
+ }
81
+ function resolveToolCommand(params) {
82
+ const { cwd, tool } = params;
83
+ const shimPath = findBinShim({ cwd, tool });
84
+ if (shimPath !== null) {
85
+ return [shimPath];
86
+ }
87
+ return [...getPackageManagerExecCommand(cwd), tool];
88
+ }
89
+ const USER_AGENT_NAME_REG_EXP = /^(?<name>[^/\s]+)\//;
90
+ function detectPackageManagerFromUserAgent() {
91
+ const userAgent = process.env["npm_config_user_agent"];
92
+ if (!userAgent) {
93
+ return null;
94
+ }
95
+ const match = USER_AGENT_NAME_REG_EXP.exec(userAgent);
96
+ if (!match) {
97
+ return null;
98
+ }
99
+ const name = getMandatoryNamedGroup(match, "name");
100
+ switch (name) {
101
+ case "bun" /* Bun */: {
102
+ return "bun" /* Bun */;
103
+ }
104
+ case "npm" /* Npm */: {
105
+ return "npm" /* Npm */;
106
+ }
107
+ case "pnpm" /* Pnpm */: {
108
+ return "pnpm" /* Pnpm */;
109
+ }
110
+ case "yarn" /* Yarn */: {
111
+ return "yarn" /* Yarn */;
112
+ }
113
+ default: {
114
+ return null;
115
+ }
116
+ }
117
+ }
118
+ function findBinShim(params) {
119
+ const { cwd, tool } = params;
120
+ const candidates = getShimCandidates(tool);
121
+ let currentFolder = getStartFolder(cwd);
122
+ while (currentFolder !== ObsidianDevUtilsRepoPaths.CurrentFolder && currentFolder !== ObsidianDevUtilsRepoPaths.RootFolder) {
123
+ for (const candidate of candidates) {
124
+ const shimPath = join(currentFolder, ObsidianDevUtilsRepoPaths.NodeModules, ObsidianDevUtilsRepoPaths.Bin, candidate);
125
+ if (existsSync(shimPath)) {
126
+ return shimPath;
127
+ }
128
+ }
129
+ currentFolder = dirname(currentFolder);
130
+ }
131
+ return null;
132
+ }
133
+ function getPackageManagerExecCommand(cwd) {
134
+ const packageManager = getPackageManager(cwd);
135
+ switch (packageManager) {
136
+ case "bun" /* Bun */: {
137
+ return ["bun", "x"];
138
+ }
139
+ case "npm" /* Npm */: {
140
+ return ["npx"];
141
+ }
142
+ case "pnpm" /* Pnpm */: {
143
+ return ["pnpm", "exec"];
144
+ }
145
+ case "yarn" /* Yarn */: {
146
+ return ["yarn", "exec"];
147
+ }
148
+ /* v8 ignore start -- Exhaustive switch guard; default branch is unreachable. */
149
+ default: {
150
+ return assertNever(packageManager);
151
+ }
152
+ }
153
+ }
154
+ function getShimCandidates(tool) {
155
+ if (process.platform !== "win32") {
156
+ return [tool];
157
+ }
158
+ return [
159
+ `${tool}${ObsidianDevUtilsRepoPaths.CommandExtension}`,
160
+ `${tool}${ObsidianDevUtilsRepoPaths.ExeExtension}`,
161
+ `${tool}${ObsidianDevUtilsRepoPaths.BatExtension}`
162
+ ];
163
+ }
164
+ function getStartFolder(cwd) {
165
+ return getRootFolder(cwd) ?? toPosixPath(cwd ?? process.cwd());
166
+ }
167
+ export {
168
+ PackageManager,
169
+ getPackageManager,
170
+ getPackageManagerRunCommand,
171
+ resolveToolCommand
172
+ };
173
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9wYWNrYWdlLW1hbmFnZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyBsb2NhbGx5LWluc3RhbGxlZCB0b29sIGJpbmFyaWVzIGFuZCBwYWNrYWdlLXNjcmlwdCBydW5uZXJzIHdpdGhvdXQgYXNzdW1pbmcgYG5wbWAuXG4gKlxuICogRGVsZWdhdGluZyB0byBgbnB4YCBzaWxlbnRseSBhc3N1bWVzIGFuIG5wbS1pbnN0YWxsZWQgdHJlZS4gT24gV2luZG93cyB0aGF0IGFzc3VtcHRpb24gaXMgZmF0YWwgdW5kZXJcbiAqIGBidW5gOiBgYnVuIGluc3RhbGxgIHdyaXRlcyBgbm9kZV9tb2R1bGVzLy5iaW4vPHRvb2w+LmV4ZWAsIG5vdCB0aGUgYDx0b29sPi5jbWRgIHRoYXQgbnBtJ3MgYG5weGAgbG9va3NcbiAqIGZvciwgc28gYG5weGAgbWlzc2VzIHRoZSBsb2NhbCBpbnN0YWxsIGVudGlyZWx5IGFuZCBkb3dubG9hZHMgdGhlIHRvb2wgZnJvbSB0aGUgcmVnaXN0cnkgaW5zdGVhZCBcdTIwMTQgd2hpY2hcbiAqIGZvciBgdHNjYCBpcyB0aGUgd2VsbC1rbm93biBkZWNveSBwYWNrYWdlLCBub3QgVHlwZVNjcmlwdC4gUmVzb2x2aW5nIHRoZSBzaGltIGZyb20gYG5vZGVfbW9kdWxlcy8uYmluYFxuICogb3Vyc2VsdmVzIHNpZGVzdGVwcyB0aGUgd2hvbGUgc2hpbS1mb3JtYXQgcXVlc3Rpb24sIGJlY2F1c2UgZXZlcnkgcGFja2FnZSBtYW5hZ2VyIHdyaXRlcyBvbmUgdGhlcmUuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pbixcbiAgdG9Qb3NpeFBhdGhcbn0gZnJvbSAnLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwIH0gZnJvbSAnLi4vcmVnLWV4cC50cyc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGdldFJvb3RGb2xkZXIgfSBmcm9tICcuL3Jvb3QudHMnO1xuXG4vKipcbiAqIEEgcGFja2FnZSBtYW5hZ2VyIHRoYXQgY2FuIG93biBhIHByb2plY3QncyBkZXBlbmRlbmN5IHRyZWUuXG4gKi9cbmV4cG9ydCBlbnVtIFBhY2thZ2VNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIFRoZSBgYnVuYCBwYWNrYWdlIG1hbmFnZXIuXG4gICAqL1xuICBCdW4gPSAnYnVuJyxcblxuICAvKipcbiAgICogVGhlIGBucG1gIHBhY2thZ2UgbWFuYWdlci5cbiAgICovXG4gIE5wbSA9ICducG0nLFxuXG4gIC8qKlxuICAgKiBUaGUgYHBucG1gIHBhY2thZ2UgbWFuYWdlci5cbiAgICovXG4gIFBucG0gPSAncG5wbScsXG5cbiAgLyoqXG4gICAqIFRoZSBgeWFybmAgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgWWFybiA9ICd5YXJuJ1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlVG9vbENvbW1hbmR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVUb29sQ29tbWFuZFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLCBhcyBpdCBhcHBlYXJzIGluIGBub2RlX21vZHVsZXMvLmJpbmAuXG4gICAqL1xuICByZWFkb25seSB0b29sOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGljaCBwYWNrYWdlIG1hbmFnZXIgb3ducyB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY3kgdHJlZS5cbiAqXG4gKiBUaGUgbG9ja2ZpbGUgaXMgdGhlIHByaW1hcnkgc2lnbmFsLCBiZWNhdXNlIGl0IGRlc2NyaWJlcyB0aGUgdHJlZSBpdHNlbGYgcmF0aGVyIHRoYW4gd2hpY2hldmVyIG1hbmFnZXJcbiAqIGhhcHBlbnMgdG8gaGF2ZSBsYXVuY2hlZCB0aGUgY3VycmVudCBwcm9jZXNzLiBXaGVuIG5vIGxvY2tmaWxlIGlzIHByZXNlbnQsIHRoZSBtYW5hZ2VyIHRoYXQgbGF1bmNoZWQgdXNcbiAqIGlzIHRoZSBuZXh0IGJlc3QgYW5zd2VyLCBhbmQgZXZlcnkgbWFuYWdlciByZXBvcnRzIGl0c2VsZiBpbiBgbnBtX2NvbmZpZ191c2VyX2FnZW50YCBhcyBhIGxlYWRpbmdcbiAqIGA8bmFtZT4vPHZlcnNpb24+YCB0b2tlbi5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIHBhY2thZ2UgbWFuYWdlciwgb3Ige0BsaW5rIFBhY2thZ2VNYW5hZ2VyLk5wbX0gd2hlbiBub3RoaW5nIGluZGljYXRlcyBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlcihjd2Q/OiBzdHJpbmcpOiBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0IHJvb3QgPSBnZXRTdGFydEZvbGRlcihjd2QpO1xuXG4gIGlmIChcbiAgICBleGlzdHNTeW5jKGpvaW4ocm9vdCwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CdW5Mb2NrKSlcbiAgICB8fCBleGlzdHNTeW5jKGpvaW4ocm9vdCwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CdW5Mb2NrYikpXG4gICkge1xuICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5CdW47XG4gIH1cblxuICBpZiAoZXhpc3RzU3luYyhqb2luKHJvb3QsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUG5wbUxvY2tZYW1sKSkpIHtcbiAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuUG5wbTtcbiAgfVxuXG4gIGlmIChleGlzdHNTeW5jKGpvaW4ocm9vdCwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5ZYXJuTG9jaykpKSB7XG4gICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLllhcm47XG4gIH1cblxuICBpZiAoZXhpc3RzU3luYyhqb2luKHJvb3QsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUxvY2tKc29uKSkpIHtcbiAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuTnBtO1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdFBhY2thZ2VNYW5hZ2VyRnJvbVVzZXJBZ2VudCgpID8/IFBhY2thZ2VNYW5hZ2VyLk5wbTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBwYWNrYWdlIHNjcmlwdCB0aHJvdWdoIHRoZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcGFydHMsIGUuZy4gYFsnYnVuJywgJ3J1biddYC4gVGhlIHNjcmlwdCBuYW1lIGlzIGFwcGVuZGVkIGJ5IHRoZSBjYWxsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoY3dkPzogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW2dldFBhY2thZ2VNYW5hZ2VyKGN3ZCksICdydW4nXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLCB3aXRoIHRoZSB0b29sIGl0c2VsZiBhbHJlYWR5IGluY2x1ZGVkLlxuICpcbiAqIFByZWZlcnMgdGhlIHNoaW0gaW4gdGhlIG5lYXJlc3QgYG5vZGVfbW9kdWxlcy8uYmluYCwgd2Fsa2luZyB1cCB0aHJvdWdoIGFuY2VzdG9yIGZvbGRlcnMgc28gYSBob2lzdGVkXG4gKiB3b3Jrc3BhY2UgaW5zdGFsbCBpcyBzdGlsbCBmb3VuZC4gRmFsbHMgYmFjayB0byB0aGUgb3duaW5nIG1hbmFnZXIncyBleGVjIGZvcm0gd2hlbiBubyBzaGltIHJlc29sdmVzIFx1MjAxNFxuICogd2hpY2ggaXMgYm90aCB0aGUgcHJldmlvdXMgYmVoYXZpb3IgYW5kIHRoZSBvbmx5IHRoaW5nIHRoYXQgd29ya3MgdW5kZXIgeWFybidzIFBsdWcnbidQbGF5LCB3aGVyZVxuICogYG5vZGVfbW9kdWxlcy8uYmluYCBkb2VzIG5vdCBleGlzdCBhdCBhbGwuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmVzb2x1dGlvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kIHBhcnRzLCBlLmcuIGBbJy9wcm9qZWN0L25vZGVfbW9kdWxlcy8uYmluL3RzYyddYCBvciBgWydidW4nLCAneCcsICd0c2MnXWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVG9vbENvbW1hbmQocGFyYW1zOiBSZXNvbHZlVG9vbENvbW1hbmRQYXJhbXMpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgY3dkLCB0b29sIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHNoaW1QYXRoID0gZmluZEJpblNoaW0oeyBjd2QsIHRvb2wgfSk7XG5cbiAgaWYgKHNoaW1QYXRoICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtzaGltUGF0aF07XG4gIH1cblxuICByZXR1cm4gWy4uLmdldFBhY2thZ2VNYW5hZ2VyRXhlY0NvbW1hbmQoY3dkKSwgdG9vbF07XG59XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgbGVhZGluZyBgPG5hbWU+L2AgdG9rZW4gb2YgYW4gYG5wbV9jb25maWdfdXNlcl9hZ2VudGAgdmFsdWUuXG4gKi9cbmNvbnN0IFVTRVJfQUdFTlRfTkFNRV9SRUdfRVhQID0gL14oPzxuYW1lPlteL1xcc10rKVxcLy87XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpbmRCaW5TaGltfS5cbiAqL1xuaW50ZXJmYWNlIEZpbmRCaW5TaGltUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wuXG4gICAqL1xuICByZWFkb25seSB0b29sOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIHBhY2thZ2UgbWFuYWdlciBvdXQgb2YgYG5wbV9jb25maWdfdXNlcl9hZ2VudGAsIHdoaWNoIGV2ZXJ5IG1hbmFnZXIgc2V0cyBmb3IgdGhlIHByb2Nlc3NlcyBpdFxuICogbGF1bmNoZXMuXG4gKlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIHBhY2thZ2UgbWFuYWdlciwgb3IgYG51bGxgIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFic2VudCwgbWFsZm9ybWVkLCBvciBuYW1lcyBhXG4gKiBydW50aW1lIHdlIGRvIG5vdCBoYW5kbGUuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFBhY2thZ2VNYW5hZ2VyRnJvbVVzZXJBZ2VudCgpOiBudWxsIHwgUGFja2FnZU1hbmFnZXIge1xuICBjb25zdCB1c2VyQWdlbnQgPSBwcm9jZXNzLmVudlsnbnBtX2NvbmZpZ191c2VyX2FnZW50J107XG5cbiAgaWYgKCF1c2VyQWdlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gVVNFUl9BR0VOVF9OQU1FX1JFR19FWFAuZXhlYyh1c2VyQWdlbnQpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5hbWUgPSBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnbmFtZScpO1xuXG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuQnVuIGFzIHN0cmluZzoge1xuICAgICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLkJ1bjtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5OcG0gYXMgc3RyaW5nOiB7XG4gICAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuTnBtO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLlBucG0gYXMgc3RyaW5nOiB7XG4gICAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuUG5wbTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5ZYXJuIGFzIHN0cmluZzoge1xuICAgICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLllhcm47XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBgbm9kZV9tb2R1bGVzLy5iaW5gIHNoaW0gZm9yIGEgdG9vbCwgd2Fsa2luZyB1cCBmcm9tIHRoZSBwcm9qZWN0IHJvb3QgdGhyb3VnaCBhbmNlc3RvciBmb2xkZXJzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGxvb2t1cC5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBzaGltLCBvciBgbnVsbGAgd2hlbiBub25lIGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gZmluZEJpblNoaW0ocGFyYW1zOiBGaW5kQmluU2hpbVBhcmFtcyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCB7IGN3ZCwgdG9vbCB9ID0gcGFyYW1zO1xuICBjb25zdCBjYW5kaWRhdGVzID0gZ2V0U2hpbUNhbmRpZGF0ZXModG9vbCk7XG4gIGxldCBjdXJyZW50Rm9sZGVyID0gZ2V0U3RhcnRGb2xkZXIoY3dkKTtcblxuICB3aGlsZSAoXG4gICAgY3VycmVudEZvbGRlciAhPT0gT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5DdXJyZW50Rm9sZGVyIGFzIHN0cmluZ1xuICAgICYmIGN1cnJlbnRGb2xkZXIgIT09IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUm9vdEZvbGRlciBhcyBzdHJpbmdcbiAgKSB7XG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgICAgY29uc3Qgc2hpbVBhdGggPSBqb2luKGN1cnJlbnRGb2xkZXIsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuTm9kZU1vZHVsZXMsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuQmluLCBjYW5kaWRhdGUpO1xuICAgICAgaWYgKGV4aXN0c1N5bmMoc2hpbVBhdGgpKSB7XG4gICAgICAgIHJldHVybiBzaGltUGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50Rm9sZGVyID0gZGlybmFtZShjdXJyZW50Rm9sZGVyKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZCBwYXJ0cyB0aGF0IHJ1biBhIG9uZS1vZmYgdG9vbCB0aHJvdWdoIHRoZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcGFydHMsIGUuZy4gYFsnYnVuJywgJ3gnXWAuIFRoZSB0b29sIG5hbWUgaXMgYXBwZW5kZWQgYnkgdGhlIGNhbGxlci5cbiAqL1xuZnVuY3Rpb24gZ2V0UGFja2FnZU1hbmFnZXJFeGVjQ29tbWFuZChjd2Q/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhY2thZ2VNYW5hZ2VyID0gZ2V0UGFja2FnZU1hbmFnZXIoY3dkKTtcblxuICBzd2l0Y2ggKHBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5CdW46IHtcbiAgICAgIHJldHVybiBbJ2J1bicsICd4J107XG4gICAgfVxuICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuTnBtOiB7XG4gICAgICByZXR1cm4gWyducHgnXTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5QbnBtOiB7XG4gICAgICByZXR1cm4gWydwbnBtJywgJ2V4ZWMnXTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5ZYXJuOiB7XG4gICAgICByZXR1cm4gWyd5YXJuJywgJ2V4ZWMnXTtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkOyBkZWZhdWx0IGJyYW5jaCBpcyB1bnJlYWNoYWJsZS4gKi9cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gYXNzZXJ0TmV2ZXIocGFja2FnZU1hbmFnZXIpO1xuICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0cyB0aGUgc2hpbSBmaWxlIG5hbWVzIHRvIHRyeSBmb3IgYSB0b29sLCBtb3N0IHNwZWNpZmljIGZpcnN0LlxuICpcbiAqIE9uIFdpbmRvd3Mgb25seSB0aGUgZXhlY3V0YWJsZSBmb3JtcyBhcmUgdmlhYmxlOiBucG0gYW5kIHBucG0gYWxzbyB3cml0ZSBhIHNoaW0gd2l0aCBubyBleHRlbnNpb24sIGJ1dFxuICogdGhhdCBvbmUgaXMgYSBgc2hgIHNjcmlwdCB0aGF0IGBjbWQuZXhlYCBjYW5ub3QgcnVuLCBzbyBpdCBtdXN0IG5ldmVyIGJlIGNob3NlbiB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gdG9vbCAtIFRoZSBuYW1lIG9mIHRoZSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLlxuICogQHJldHVybnMgVGhlIGNhbmRpZGF0ZSBmaWxlIG5hbWVzLCBpbiB0aGUgb3JkZXIgdGhleSBzaG91bGQgYmUgdHJpZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFNoaW1DYW5kaWRhdGVzKHRvb2w6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gW3Rvb2xdO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBgJHt0b29sfSR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Db21tYW5kRXh0ZW5zaW9ufWAsXG4gICAgYCR7dG9vbH0ke09ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRXhlRXh0ZW5zaW9ufWAsXG4gICAgYCR7dG9vbH0ke09ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuQmF0RXh0ZW5zaW9ufWBcbiAgXTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgZm9sZGVyIHRvIHN0YXJ0IGEgbG9va3VwIGZyb20gXHUyMDE0IHRoZSBwcm9qZWN0IHJvb3Qgd2hlbiB0aGVyZSBpcyBvbmUsIHRoZSB3b3JraW5nIGZvbGRlclxuICogb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgZm9sZGVyIHRvIHN0YXJ0IGZyb20uXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXJ0Rm9sZGVyKGN3ZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRSb290Rm9sZGVyKGN3ZCkgPz8gdG9Qb3NpeFBhdGgoY3dkID8/IHByb2Nlc3MuY3dkKCkpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLFNBQVMsa0JBQWtCO0FBQzNCLE9BQU8sYUFBYTtBQUVwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLGlDQUFpQztBQUMx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