obsidian-dev-utils 97.0.0 → 99.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 (143) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +1 -1
  3. package/dist/integration-test-plugin/main.js +686 -439
  4. package/dist/lib/cjs/__merged.cjs +22 -9
  5. package/dist/lib/cjs/__merged.d.cts +4 -3
  6. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  7. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +36 -1
  8. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +21 -0
  9. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.cjs +20 -6
  10. package/dist/lib/cjs/obsidian/components/plugin-suggestion-component.d.cts +26 -4
  11. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +38 -38
  12. package/dist/lib/cjs/obsidian/demo-vault-naming.cjs +167 -0
  13. package/dist/lib/cjs/obsidian/demo-vault-naming.d.cts +54 -0
  14. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +11 -5
  15. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +10 -8
  16. package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +9 -9
  17. package/dist/lib/cjs/obsidian/desktop-trusted-input.d.cts +23 -4
  18. package/dist/lib/cjs/obsidian/file-change.cjs +6 -6
  19. package/dist/lib/cjs/obsidian/index.cjs +10 -1
  20. package/dist/lib/cjs/obsidian/index.d.cts +3 -0
  21. package/dist/lib/cjs/obsidian/link.cjs +33 -6
  22. package/dist/lib/cjs/obsidian/link.d.cts +35 -0
  23. package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +195 -0
  24. package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +93 -0
  25. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
  26. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +4 -0
  27. package/dist/lib/cjs/obsidian/reference.cjs +9 -1
  28. package/dist/lib/cjs/obsidian/reference.d.cts +33 -0
  29. package/dist/lib/cjs/obsidian/resource-lock.cjs +122 -122
  30. package/dist/lib/cjs/obsidian/trusted-input.cjs +206 -0
  31. package/dist/lib/cjs/obsidian/trusted-input.d.cts +126 -0
  32. package/dist/lib/cjs/obsidian/validation.cjs +22 -3
  33. package/dist/lib/cjs/obsidian/validation.d.cts +37 -0
  34. package/dist/lib/cjs/obsidian/vault.cjs +4 -1
  35. package/dist/lib/cjs/obsidian/vault.d.cts +8 -1
  36. package/dist/lib/cjs/script-utils/build.cjs +30 -6
  37. package/dist/lib/cjs/script-utils/build.d.cts +5 -0
  38. package/dist/lib/cjs/script-utils/demo-vault.cjs +26 -6
  39. package/dist/lib/cjs/script-utils/demo-vault.d.cts +12 -8
  40. package/dist/lib/cjs/script-utils/exec.cjs +1 -1
  41. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -2
  42. package/dist/lib/cjs/script-utils/index.cjs +4 -1
  43. package/dist/lib/cjs/script-utils/index.d.cts +1 -0
  44. package/dist/lib/cjs/script-utils/linters/cspell.cjs +3 -3
  45. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +39 -1
  46. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +16 -1
  47. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +5 -0
  48. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.cjs +254 -0
  49. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.d.cts +54 -0
  50. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.cjs +217 -0
  51. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.d.cts +141 -0
  52. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.cjs +214 -0
  53. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.d.cts +32 -0
  54. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.cjs +215 -0
  55. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.d.cts +30 -0
  56. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.cjs +318 -0
  57. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.d.cts +45 -0
  58. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +9 -1
  59. package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -2
  60. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +4 -4
  61. package/dist/lib/cjs/script-utils/nano-staged-config.cjs +7 -5
  62. package/dist/lib/cjs/script-utils/nano-staged-config.d.cts +5 -2
  63. package/dist/lib/cjs/script-utils/npm-run.cjs +4 -3
  64. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +10 -1
  65. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +37 -1
  66. package/dist/lib/cjs/script-utils/package-manager.cjs +370 -0
  67. package/dist/lib/cjs/script-utils/package-manager.d.cts +93 -0
  68. package/dist/lib/cjs/script-utils/version.cjs +21 -9
  69. package/dist/lib/esm/__merged.d.mts +4 -3
  70. package/dist/lib/esm/__merged.mjs +24 -10
  71. package/dist/lib/esm/generated-during-build.mjs +1 -1
  72. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +21 -0
  73. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +36 -1
  74. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.d.mts +26 -4
  75. package/dist/lib/esm/obsidian/components/plugin-suggestion-component.mjs +20 -6
  76. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +38 -38
  77. package/dist/lib/esm/obsidian/demo-vault-naming.d.mts +54 -0
  78. package/dist/lib/esm/obsidian/demo-vault-naming.mjs +61 -0
  79. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.d.mts +10 -8
  80. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +14 -5
  81. package/dist/lib/esm/obsidian/desktop-trusted-input.d.mts +23 -4
  82. package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +9 -9
  83. package/dist/lib/esm/obsidian/file-change.mjs +6 -6
  84. package/dist/lib/esm/obsidian/index.d.mts +3 -0
  85. package/dist/lib/esm/obsidian/index.mjs +7 -1
  86. package/dist/lib/esm/obsidian/link.d.mts +35 -0
  87. package/dist/lib/esm/obsidian/link.mjs +38 -7
  88. package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +93 -0
  89. package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +84 -0
  90. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +4 -0
  91. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
  92. package/dist/lib/esm/obsidian/reference.d.mts +33 -0
  93. package/dist/lib/esm/obsidian/reference.mjs +8 -1
  94. package/dist/lib/esm/obsidian/resource-lock.mjs +122 -122
  95. package/dist/lib/esm/obsidian/trusted-input.d.mts +126 -0
  96. package/dist/lib/esm/obsidian/trusted-input.mjs +85 -0
  97. package/dist/lib/esm/obsidian/validation.d.mts +37 -0
  98. package/dist/lib/esm/obsidian/validation.mjs +21 -2
  99. package/dist/lib/esm/obsidian/vault.d.mts +8 -1
  100. package/dist/lib/esm/obsidian/vault.mjs +4 -1
  101. package/dist/lib/esm/script-utils/build.d.mts +5 -0
  102. package/dist/lib/esm/script-utils/build.mjs +30 -6
  103. package/dist/lib/esm/script-utils/demo-vault.d.mts +12 -8
  104. package/dist/lib/esm/script-utils/demo-vault.mjs +29 -6
  105. package/dist/lib/esm/script-utils/exec.mjs +1 -1
  106. package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -2
  107. package/dist/lib/esm/script-utils/index.d.mts +1 -0
  108. package/dist/lib/esm/script-utils/index.mjs +3 -1
  109. package/dist/lib/esm/script-utils/linters/cspell.mjs +3 -3
  110. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +39 -1
  111. package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +5 -0
  112. package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +11 -1
  113. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.d.mts +54 -0
  114. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.mjs +148 -0
  115. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.d.mts +141 -0
  116. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.mjs +92 -0
  117. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.d.mts +32 -0
  118. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.mjs +111 -0
  119. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.d.mts +30 -0
  120. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.mjs +112 -0
  121. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.d.mts +45 -0
  122. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.mjs +217 -0
  123. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +9 -1
  124. package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -2
  125. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +4 -4
  126. package/dist/lib/esm/script-utils/nano-staged-config.d.mts +5 -2
  127. package/dist/lib/esm/script-utils/nano-staged-config.mjs +7 -5
  128. package/dist/lib/esm/script-utils/npm-run.mjs +4 -3
  129. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +37 -1
  130. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +10 -1
  131. package/dist/lib/esm/script-utils/package-manager.d.mts +93 -0
  132. package/dist/lib/esm/script-utils/package-manager.mjs +256 -0
  133. package/dist/lib/esm/script-utils/version.mjs +21 -9
  134. package/obsidian/demo-vault-naming/package.json +6 -0
  135. package/obsidian/mobile-trusted-input/package.json +6 -0
  136. package/obsidian/trusted-input/package.json +6 -0
  137. package/package.json +19 -17
  138. package/script-utils/linters/eslint-rules/manifest-description/package.json +6 -0
  139. package/script-utils/linters/eslint-rules/manifest-helpers/package.json +6 -0
  140. package/script-utils/linters/eslint-rules/manifest-id/package.json +6 -0
  141. package/script-utils/linters/eslint-rules/manifest-name/package.json +6 -0
  142. package/script-utils/linters/eslint-rules/manifest-schema/package.json +6 -0
  143. package/script-utils/package-manager/package.json +6 -0
@@ -149,6 +149,7 @@ __export(npm_run_exports, {
149
149
  module.exports = __toCommonJS(npm_run_exports);
150
150
  var import_debug = require('../debug.cjs');
151
151
  var import_npm = require('./npm.cjs');
152
+ var import_package_manager = require('./package-manager.cjs');
152
153
  var import_root = require('./root.cjs');
153
154
  var NpmRunOptionalResult = /* @__PURE__ */ ((NpmRunOptionalResult2) => {
154
155
  NpmRunOptionalResult2["Skipped"] = "skipped";
@@ -159,7 +160,7 @@ async function npmRun(command) {
159
160
  const packageJson = await (0, import_npm.readPackageJson)();
160
161
  const isKnownCommand = Object.keys(packageJson.scripts ?? {}).includes(command);
161
162
  if (isKnownCommand) {
162
- await (0, import_root.execFromRoot)(["npm", "run", command]);
163
+ await (0, import_root.execFromRoot)([...(0, import_package_manager.getPackageManagerRunCommand)(), command]);
163
164
  } else {
164
165
  throw new Error(`Command ${command} is not defined in the package.json`);
165
166
  }
@@ -168,7 +169,7 @@ async function npmRunOptional(command) {
168
169
  const packageJson = await (0, import_npm.readPackageJson)();
169
170
  const isKnownCommand = Object.keys(packageJson.scripts ?? {}).includes(command);
170
171
  if (isKnownCommand) {
171
- await (0, import_root.execFromRoot)(["npm", "run", command]);
172
+ await (0, import_root.execFromRoot)([...(0, import_package_manager.getPackageManagerRunCommand)(), command]);
172
173
  return "success" /* Success */;
173
174
  }
174
175
  (0, import_debug.getLibDebugger)("npmRunOptional")(`Command ${command} is not defined in the package.json, skipping`);
@@ -180,4 +181,4 @@ async function npmRunOptional(command) {
180
181
  npmRun,
181
182
  npmRunOptional
182
183
  });
183
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9ucG0tcnVuLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTlBNIHJ1biB1dGlsaXRpZXMuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICcuL25wbS50cyc7XG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICcuL3Jvb3QudHMnO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcnVubmluZyBhbiBvcHRpb25hbCBucG0gY29tbWFuZC5cbiAqL1xuZXhwb3J0IGVudW0gTnBtUnVuT3B0aW9uYWxSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgd2FzIHNraXBwZWQgYmVjYXVzZSBpdCB3YXMgbm90IGRlZmluZWQgaW4gdGhlIHBhY2thZ2UuanNvbiBzY3JpcHRzLlxuICAgKi9cbiAgU2tpcHBlZCA9ICdza2lwcGVkJyxcblxuICAvKipcbiAgICogVGhlIGNvbW1hbmQgd2FzIGZvdW5kIGFuZCBydW4gc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgU3VjY2VzcyA9ICdzdWNjZXNzJ1xufVxuXG4vKipcbiAqIFJ1bnMgYSBjb21tYW5kIHVzaW5nIG5wbSBjaGVja2luZyBpZiB0aGUgY29tbWFuZCBpcyBvdmVycmlkZGVuIGluIHRoZSBwYWNrYWdlLmpzb24uXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBydW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBucG1SdW4oY29tbWFuZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gIGNvbnN0IGlzS25vd25Db21tYW5kID0gT2JqZWN0LmtleXMocGFja2FnZUpzb24uc2NyaXB0cyA/PyB7fSkuaW5jbHVkZXMoY29tbWFuZCk7XG4gIGlmIChpc0tub3duQ29tbWFuZCkge1xuICAgIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ25wbScsICdydW4nLCBjb21tYW5kXSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb21tYW5kICR7Y29tbWFuZH0gaXMgbm90IGRlZmluZWQgaW4gdGhlIHBhY2thZ2UuanNvbmApO1xuICB9XG59XG5cbi8qKlxuICogUnVucyBhIGNvbW1hbmQgdXNpbmcgbnBtIG9ubHkgaWYgdGhlIGNvbW1hbmQgaXMgZGVmaW5lZCBpbiB0aGUgcGFja2FnZS5qc29uIHNjcmlwdHMuXG4gKiBJZiB0aGUgY29tbWFuZCBpcyBub3QgZGVmaW5lZCwgaXQgaXMgc2lsZW50bHkgc2tpcHBlZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIHJ1bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8ge0BsaW5rIE5wbVJ1bk9wdGlvbmFsUmVzdWx0LlN1Y2Nlc3N9IGlmIHRoZSBjb21tYW5kIHdhc1xuICogZm91bmQgYW5kIHJ1biwgb3Ige0BsaW5rIE5wbVJ1bk9wdGlvbmFsUmVzdWx0LlNraXBwZWR9IG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5wbVJ1bk9wdGlvbmFsKGNvbW1hbmQ6IHN0cmluZyk6IFByb21pc2U8TnBtUnVuT3B0aW9uYWxSZXN1bHQ+IHtcbiAgY29uc3QgcGFja2FnZUpzb24gPSBhd2FpdCByZWFkUGFja2FnZUpzb24oKTtcbiAgY29uc3QgaXNLbm93bkNvbW1hbmQgPSBPYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5zY3JpcHRzID8/IHt9KS5pbmNsdWRlcyhjb21tYW5kKTtcbiAgaWYgKGlzS25vd25Db21tYW5kKSB7XG4gICAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnBtJywgJ3J1bicsIGNvbW1hbmRdKTtcbiAgICByZXR1cm4gTnBtUnVuT3B0aW9uYWxSZXN1bHQuU3VjY2VzcztcbiAgfVxuICBnZXRMaWJEZWJ1Z2dlcignbnBtUnVuT3B0aW9uYWwnKShgQ29tbWFuZCAke2NvbW1hbmR9IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBwYWNrYWdlLmpzb24sIHNraXBwaW5nYCk7XG4gIHJldHVybiBOcG1SdW5PcHRpb25hbFJlc3VsdC5Ta2lwcGVkO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsbUJBQStCO0FBQy9CLGlCQUFnQztBQUNoQyxrQkFBNkI7QUFLdEIsSUFBSyx1QkFBTCxrQkFBS0EsMEJBQUw7QUFJTCxFQUFBQSxzQkFBQSxhQUFVO0FBS1YsRUFBQUEsc0JBQUEsYUFBVTtBQVRBLFNBQUFBO0FBQUEsR0FBQTtBQWlCWixlQUFzQixPQUFPLFNBQWdDO0FBQzNELFFBQU0sY0FBYyxVQUFNLDRCQUFnQjtBQUMxQyxRQUFNLGlCQUFpQixPQUFPLEtBQUssWUFBWSxXQUFXLENBQUMsQ0FBQyxFQUFFLFNBQVMsT0FBTztBQUM5RSxNQUFJLGdCQUFnQjtBQUNsQixjQUFNLDBCQUFhLENBQUMsT0FBTyxPQUFPLE9BQU8sQ0FBQztBQUFBLEVBQzVDLE9BQU87QUFDTCxVQUFNLElBQUksTUFBTSxXQUFXLE9BQU8scUNBQXFDO0FBQUEsRUFDekU7QUFDRjtBQVVBLGVBQXNCLGVBQWUsU0FBZ0Q7QUFDbkYsUUFBTSxjQUFjLFVBQU0sNEJBQWdCO0FBQzFDLFFBQU0saUJBQWlCLE9BQU8sS0FBSyxZQUFZLFdBQVcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxPQUFPO0FBQzlFLE1BQUksZ0JBQWdCO0FBQ2xCLGNBQU0sMEJBQWEsQ0FBQyxPQUFPLE9BQU8sT0FBTyxDQUFDO0FBQzFDLFdBQU87QUFBQSxFQUNUO0FBQ0EsbUNBQWUsZ0JBQWdCLEVBQUUsV0FBVyxPQUFPLCtDQUErQztBQUNsRyxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbIk5wbVJ1bk9wdGlvbmFsUmVzdWx0Il0KfQo=
184
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9ucG0tcnVuLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTlBNIHJ1biB1dGlsaXRpZXMuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICcuL25wbS50cyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQgfSBmcm9tICcuL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICcuL3Jvb3QudHMnO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgcnVubmluZyBhbiBvcHRpb25hbCBucG0gY29tbWFuZC5cbiAqL1xuZXhwb3J0IGVudW0gTnBtUnVuT3B0aW9uYWxSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgd2FzIHNraXBwZWQgYmVjYXVzZSBpdCB3YXMgbm90IGRlZmluZWQgaW4gdGhlIHBhY2thZ2UuanNvbiBzY3JpcHRzLlxuICAgKi9cbiAgU2tpcHBlZCA9ICdza2lwcGVkJyxcblxuICAvKipcbiAgICogVGhlIGNvbW1hbmQgd2FzIGZvdW5kIGFuZCBydW4gc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgU3VjY2VzcyA9ICdzdWNjZXNzJ1xufVxuXG4vKipcbiAqIFJ1bnMgYSBjb21tYW5kIHVzaW5nIG5wbSBjaGVja2luZyBpZiB0aGUgY29tbWFuZCBpcyBvdmVycmlkZGVuIGluIHRoZSBwYWNrYWdlLmpzb24uXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBydW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBucG1SdW4oY29tbWFuZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gIGNvbnN0IGlzS25vd25Db21tYW5kID0gT2JqZWN0LmtleXMocGFja2FnZUpzb24uc2NyaXB0cyA/PyB7fSkuaW5jbHVkZXMoY29tbWFuZCk7XG4gIGlmIChpc0tub3duQ29tbWFuZCkge1xuICAgIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4uZ2V0UGFja2FnZU1hbmFnZXJSdW5Db21tYW5kKCksIGNvbW1hbmRdKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgJHtjb21tYW5kfSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgcGFja2FnZS5qc29uYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCB1c2luZyBucG0gb25seSBpZiB0aGUgY29tbWFuZCBpcyBkZWZpbmVkIGluIHRoZSBwYWNrYWdlLmpzb24gc2NyaXB0cy5cbiAqIElmIHRoZSBjb21tYW5kIGlzIG5vdCBkZWZpbmVkLCBpdCBpcyBzaWxlbnRseSBza2lwcGVkLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gcnVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB7QGxpbmsgTnBtUnVuT3B0aW9uYWxSZXN1bHQuU3VjY2Vzc30gaWYgdGhlIGNvbW1hbmQgd2FzXG4gKiBmb3VuZCBhbmQgcnVuLCBvciB7QGxpbmsgTnBtUnVuT3B0aW9uYWxSZXN1bHQuU2tpcHBlZH0gb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbnBtUnVuT3B0aW9uYWwoY29tbWFuZDogc3RyaW5nKTogUHJvbWlzZTxOcG1SdW5PcHRpb25hbFJlc3VsdD4ge1xuICBjb25zdCBwYWNrYWdlSnNvbiA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbigpO1xuICBjb25zdCBpc0tub3duQ29tbWFuZCA9IE9iamVjdC5rZXlzKHBhY2thZ2VKc29uLnNjcmlwdHMgPz8ge30pLmluY2x1ZGVzKGNvbW1hbmQpO1xuICBpZiAoaXNLbm93bkNvbW1hbmQpIHtcbiAgICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLmdldFBhY2thZ2VNYW5hZ2VyUnVuQ29tbWFuZCgpLCBjb21tYW5kXSk7XG4gICAgcmV0dXJuIE5wbVJ1bk9wdGlvbmFsUmVzdWx0LlN1Y2Nlc3M7XG4gIH1cbiAgZ2V0TGliRGVidWdnZXIoJ25wbVJ1bk9wdGlvbmFsJykoYENvbW1hbmQgJHtjb21tYW5kfSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgcGFja2FnZS5qc29uLCBza2lwcGluZ2ApO1xuICByZXR1cm4gTnBtUnVuT3B0aW9uYWxSZXN1bHQuU2tpcHBlZDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLG1CQUErQjtBQUMvQixpQkFBZ0M7QUFDaEMsNkJBQTRDO0FBQzVDLGtCQUE2QjtBQUt0QixJQUFLLHVCQUFMLGtCQUFLQSwwQkFBTDtBQUlMLEVBQUFBLHNCQUFBLGFBQVU7QUFLVixFQUFBQSxzQkFBQSxhQUFVO0FBVEEsU0FBQUE7QUFBQSxHQUFBO0FBaUJaLGVBQXNCLE9BQU8sU0FBZ0M7QUFDM0QsUUFBTSxjQUFjLFVBQU0sNEJBQWdCO0FBQzFDLFFBQU0saUJBQWlCLE9BQU8sS0FBSyxZQUFZLFdBQVcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxPQUFPO0FBQzlFLE1BQUksZ0JBQWdCO0FBQ2xCLGNBQU0sMEJBQWEsQ0FBQyxPQUFHLG9EQUE0QixHQUFHLE9BQU8sQ0FBQztBQUFBLEVBQ2hFLE9BQU87QUFDTCxVQUFNLElBQUksTUFBTSxXQUFXLE9BQU8scUNBQXFDO0FBQUEsRUFDekU7QUFDRjtBQVVBLGVBQXNCLGVBQWUsU0FBZ0Q7QUFDbkYsUUFBTSxjQUFjLFVBQU0sNEJBQWdCO0FBQzFDLFFBQU0saUJBQWlCLE9BQU8sS0FBSyxZQUFZLFdBQVcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxPQUFPO0FBQzlFLE1BQUksZ0JBQWdCO0FBQ2xCLGNBQU0sMEJBQWEsQ0FBQyxPQUFHLG9EQUE0QixHQUFHLE9BQU8sQ0FBQztBQUM5RCxXQUFPO0FBQUEsRUFDVDtBQUNBLG1DQUFlLGdCQUFnQixFQUFFLFdBQVcsT0FBTywrQ0FBK0M7QUFDbEcsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJOcG1SdW5PcHRpb25hbFJlc3VsdCJdCn0K
@@ -155,8 +155,13 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
155
155
  ObsidianDevUtilsRepoPaths2["AnyPath"] = "**";
156
156
  ObsidianDevUtilsRepoPaths2["AnyTs"] = "*.ts";
157
157
  ObsidianDevUtilsRepoPaths2["AstroConfigTs"] = "astro.config.ts";
158
+ ObsidianDevUtilsRepoPaths2["BatExtension"] = ".bat";
159
+ ObsidianDevUtilsRepoPaths2["Bin"] = ".bin";
160
+ ObsidianDevUtilsRepoPaths2["BunLock"] = "bun.lock";
161
+ ObsidianDevUtilsRepoPaths2["BunLockb"] = "bun.lockb";
158
162
  ObsidianDevUtilsRepoPaths2["Cjs"] = "cjs";
159
163
  ObsidianDevUtilsRepoPaths2["CjsExtension"] = ".cjs";
164
+ ObsidianDevUtilsRepoPaths2["CommandExtension"] = ".cmd";
160
165
  ObsidianDevUtilsRepoPaths2["CurrentFolder"] = ".";
161
166
  ObsidianDevUtilsRepoPaths2["DataviewTypes"] = "src/obsidian/@types/dataview/**";
162
167
  ObsidianDevUtilsRepoPaths2["DctsExtension"] = ".d.cts";
@@ -175,6 +180,7 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
175
180
  ObsidianDevUtilsRepoPaths2["DtsExtension"] = ".d.ts";
176
181
  ObsidianDevUtilsRepoPaths2["EslintConfigMts"] = "eslint.config.mts";
177
182
  ObsidianDevUtilsRepoPaths2["Esm"] = "esm";
183
+ ObsidianDevUtilsRepoPaths2["ExeExtension"] = ".exe";
178
184
  ObsidianDevUtilsRepoPaths2["GeneratedDuringBuildCjs"] = "generated-during-build.cjs";
179
185
  ObsidianDevUtilsRepoPaths2["GeneratedDuringBuildMjs"] = "generated-during-build.mjs";
180
186
  ObsidianDevUtilsRepoPaths2["IndexCjs"] = "index.cjs";
@@ -191,7 +197,9 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
191
197
  ObsidianDevUtilsRepoPaths2["MjsExtension"] = ".mjs";
192
198
  ObsidianDevUtilsRepoPaths2["NodeModules"] = "node_modules";
193
199
  ObsidianDevUtilsRepoPaths2["PackageJson"] = "package.json";
200
+ ObsidianDevUtilsRepoPaths2["PackageLockJson"] = "package-lock.json";
194
201
  ObsidianDevUtilsRepoPaths2["Patches"] = "patches";
202
+ ObsidianDevUtilsRepoPaths2["PnpmLockYaml"] = "pnpm-lock.yaml";
195
203
  ObsidianDevUtilsRepoPaths2["RootFolder"] = "/";
196
204
  ObsidianDevUtilsRepoPaths2["Scripts"] = "scripts";
197
205
  ObsidianDevUtilsRepoPaths2["ScriptUtils"] = "script-utils";
@@ -205,10 +213,11 @@ var ObsidianDevUtilsRepoPaths = /* @__PURE__ */ ((ObsidianDevUtilsRepoPaths2) =>
205
213
  ObsidianDevUtilsRepoPaths2["TsConfigValidateDeclarationsJson"] = "tsconfig.validate-declarations.json";
206
214
  ObsidianDevUtilsRepoPaths2["TsExtension"] = ".ts";
207
215
  ObsidianDevUtilsRepoPaths2["Types"] = "@types";
216
+ ObsidianDevUtilsRepoPaths2["YarnLock"] = "yarn.lock";
208
217
  return ObsidianDevUtilsRepoPaths2;
209
218
  })(ObsidianDevUtilsRepoPaths || {});
210
219
  // Annotate the CommonJS export names for ESM import in node:
211
220
  0 && (module.exports = {
212
221
  ObsidianDevUtilsRepoPaths
213
222
  });
214
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYW4gZW51bWVyYXRpb24gb2YgY29tbW9uIGZpbGUgcGF0aHMgYW5kIHBhdHRlcm5zIHVzZWQgaW4gdGhlIE9ic2lkaWFuIGRldmVsb3BtZW50IHV0aWxpdGllcyByZXBvc2l0b3J5LlxuICogVGhlc2UgcGF0aHMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgb3RoZXIgdXRpbGl0aWVzLCBlbnN1cmluZyBjb25zaXN0ZW5jeSBhbmQgcmVkdWNpbmcgdGhlIGxpa2VsaWhvb2RcbiAqIG9mIGVycm9ycyBkdWUgdG8gaGFyZGNvZGVkIHN0cmluZ3MuXG4gKi9cblxuLyoqXG4gKiBFbnVtZXJhdGlvbiBvZiBjb21tb24gZmlsZSBwYXRocyBhbmQgcGF0dGVybnMgdXNlZCBpbiB0aGUgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBlbnVtIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMge1xuICAvKipcbiAgQW55IGZpbGUgb3IgZm9sZGVyLlxuICAgKi9cbiAgQW55ID0gJyonLFxuXG4gIC8qKlxuICBDb21tb25KUyBmaWxlLlxuICAgKi9cbiAgQW55Q2pzID0gJyouY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgQW55RGN0cyA9ICcqLmQuY3RzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueURtdHMgPSAnKi5kLm10cycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueUR0cyA9ICcqLmQudHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55TWpzID0gJyoubWpzJyxcblxuICAvKipcbiAgQW55IHBhdGggcmVjdXJzaXZlbHkuXG4gICAqL1xuICBBbnlQYXRoID0gJyoqJyxcblxuICAvKipcbiAgQW55IFR5cGVTY3JpcHQgZmlsZS5cbiAgICovXG4gIEFueVRzID0gJyoudHMnLFxuXG4gIC8qKlxuICBBc3RybyBjb25maWd1cmF0aW9uIGZpbGUgKGRvY3VtZW50YXRpb24gc2l0ZSkgYXQgdGhlIHJlcG8gcm9vdC5cbiAgICovXG4gIEFzdHJvQ29uZmlnVHMgPSAnYXN0cm8uY29uZmlnLnRzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgZm9sZGVyLlxuICAgKi9cbiAgQ2pzID0gJ2NqcycsXG5cbiAgLyoqXG4gIENvbW1vbkpTIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgQ2pzRXh0ZW5zaW9uID0gJy5janMnLFxuXG4gIC8qKlxuICBDdXJyZW50IGZvbGRlci5cbiAgICovXG4gIEN1cnJlbnRGb2xkZXIgPSAnLicsXG5cbiAgLyoqXG4gIERhdGF2aWV3IHR5cGVzLlxuICAgKi9cbiAgRGF0YXZpZXdUeXBlcyA9ICdzcmMvb2JzaWRpYW4vQHR5cGVzL2RhdGF2aWV3LyoqJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERjdHNFeHRlbnNpb24gPSAnLmQuY3RzJyxcblxuICAvKipcbiAgRGlzdHJpYnV0aW9uIGZvbGRlci5cbiAgICovXG4gIERpc3QgPSAnZGlzdCcsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYnVpbHQgYGRlbW8tdmF1bHQtaGVscGVyYCBwbHVnaW4gd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLCBpbmplY3RlZCBpbnRvIGRlbW8gdmF1bHRzIGF0IHJlbGVhc2UgdGltZS5cbiAgICovXG4gIERpc3REZW1vVmF1bHRIZWxwZXIgPSAnZGlzdC9kZW1vLXZhdWx0LWhlbHBlcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYnVpbHQgaW50ZWdyYXRpb24tdGVzdCBoYXJuZXNzIHBsdWdpbiB3aXRoaW4gdGhlIHtAbGluayBEaXN0fSBmb2xkZXIsIHNlZWRlZCBpbnRvIGEgY29uc3VtZXIncyBpbnRlZ3JhdGlvbi10ZXN0IHZhdWx0IHNvIGl0cyBgZXZhbEluT2JzaWRpYW5gIGNsb3N1cmVzIHJlYWNoIHRoZSBsaWJyYXJ5IHZpYSBgbGliYC5cbiAgICovXG4gIERpc3RJbnRlZ3JhdGlvblRlc3RQbHVnaW4gPSAnZGlzdC9pbnRlZ3JhdGlvbi10ZXN0LXBsdWdpbicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYGxpYmAgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci5cbiAgICovXG4gIERpc3RMaWIgPSAnZGlzdC9saWInLFxuXG4gIC8qKlxuICBBIHBhdGggdG8gdGhlIGJ1aWx0IHBsdWdpbi1BUEkgaW50ZWdyYXRpb24tdGVzdCBDT05TVU1FUiBwbHVnaW4gd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLiBUZXN0LW9ubHkgYW5kIG5ldmVyIHNoaXBwZWQ7IGJ1aWx0IHNlcGFyYXRlbHkgZnJvbSBpdHMgcHJvdmlkZXIgc28gdGhlIHR3byBjYXJyeSBkaXN0aW5jdCBgb2JzaWRpYW4tZGV2LXV0aWxzYCBjb3BpZXMuXG4gICAqL1xuICBEaXN0UGx1Z2luQXBpVGVzdENvbnN1bWVyID0gJ2Rpc3QvcGx1Z2luLWFwaS10ZXN0LWNvbnN1bWVyJyxcblxuICAvKipcbiAgQSBwYXRoIHRvIHRoZSBidWlsdCBwbHVnaW4tQVBJIGludGVncmF0aW9uLXRlc3QgUFJPVklERVIgcGx1Z2luIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci4gVGVzdC1vbmx5IGFuZCBuZXZlciBzaGlwcGVkOyBidWlsdCBzZXBhcmF0ZWx5IGZyb20gaXRzIGNvbnN1bWVyIHNvIHRoZSB0d28gY2FycnkgZGlzdGluY3QgYG9ic2lkaWFuLWRldi11dGlsc2AgY29waWVzLlxuICAgKi9cbiAgRGlzdFBsdWdpbkFwaVRlc3RQcm92aWRlciA9ICdkaXN0L3BsdWdpbi1hcGktdGVzdC1wcm92aWRlcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYHRlbXBsYXRlc2AgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlciwgaG9sZGluZyB0aGUgY29uc3VtZXItZmFjaW5nIHRlbXBsYXRlcy5cbiAgICovXG4gIERpc3RUZW1wbGF0ZXMgPSAnZGlzdC90ZW1wbGF0ZXMnLFxuXG4gIC8qKlxuICBUcmFuc3BpbGVkIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBEanNFeHRlbnNpb24gPSAnLmQuanMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERtdHNFeHRlbnNpb24gPSAnLmQubXRzJyxcblxuICAvKipcbiAgRG9jdW1lbnRhdGlvbiBzaXRlIGZvbGRlciAoQXN0cm8gKyBTdGFybGlnaHQgQVBJLWRvY3Mgc3ViLXByb2plY3QpLlxuICAgKi9cbiAgRG9jcyA9ICdkb2NzJyxcblxuICAvKipcbiAgQnVpbGQgb3V0cHV0IGZvbGRlciBvZiB0aGUgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICAgKi9cbiAgRG9jc0Rpc3QgPSAnZG9jcy9kaXN0JyxcblxuICAvKipcbiAgRHByaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIERwcmludEpzb24gPSAnZHByaW50Lmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRHRzRXh0ZW5zaW9uID0gJy5kLnRzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ010cyA9ICdlc2xpbnQuY29uZmlnLm10cycsXG5cbiAgLyoqXG4gIEVTTSBKYXZhU2NyaXB0IGZvbGRlci5cbiAgICovXG4gIEVzbSA9ICdlc20nLFxuXG4gIC8qKlxuICBHZW5lcmF0ZWQtZHVyaW5nLWJ1aWxkIENvbW1vbkpTIGZpbGUuXG4gICAqL1xuICBHZW5lcmF0ZWREdXJpbmdCdWlsZENqcyA9ICdnZW5lcmF0ZWQtZHVyaW5nLWJ1aWxkLmNqcycsXG5cbiAgLyoqXG4gIEdlbmVyYXRlZC1kdXJpbmctYnVpbGQgRVNNIEphdmFTY3JpcHQgZmlsZS5cbiAgICovXG4gIEdlbmVyYXRlZER1cmluZ0J1aWxkTWpzID0gJ2dlbmVyYXRlZC1kdXJpbmctYnVpbGQubWpzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhDanMgPSAnaW5kZXguY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERjdHMgPSAnaW5kZXguZC5jdHMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERtdHMgPSAnaW5kZXguZC5tdHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhNanMgPSAnaW5kZXgubWpzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhUcyA9ICdpbmRleC50cycsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgc291cmNlcyBvZiB0aGUgcGx1Z2luLUFQSSBpbnRlZ3JhdGlvbi10ZXN0IENPTlNVTUVSIHBsdWdpbi5cbiAgICovXG4gIEludGVncmF0aW9uVGVzdFBsdWdpbkFwaUNvbnN1bWVyID0gJ2ludGVncmF0aW9uLXRlc3QtcGx1Z2luLWFwaS9jb25zdW1lcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgc291cmNlcyBvZiB0aGUgcGx1Z2luLUFQSSBpbnRlZ3JhdGlvbi10ZXN0IFBST1ZJREVSIHBsdWdpbi5cbiAgICovXG4gIEludGVncmF0aW9uVGVzdFBsdWdpbkFwaVByb3ZpZGVyID0gJ2ludGVncmF0aW9uLXRlc3QtcGx1Z2luLWFwaS9wcm92aWRlcicsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBKc0V4dGVuc2lvbiA9ICcuanMnLFxuXG4gIC8qKlxuICBFU00gTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyA9ICcubWFya2Rvd25saW50LWNsaTIubWpzJyxcblxuICAvKipcbiAgTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBzY2hlbWEgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50VHlwZXNNYXJrZG93bmxpbnRDbGkyQ29uZmlnU2NoZW1hRHRzID0gJ3NyYy9zY3JpcHQtdXRpbHMvbGludGVycy9tYXJrZG93bmxpbnQtdHlwZXMvQHR5cGVzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy1zY2hlbWEuZC50cycsXG5cbiAgLyoqXG4gIEdlbmVyYXRlZCBmbGF0IHJlLWV4cG9ydCBiYXJyZWwgZmlsZS5cbiAgICovXG4gIE1lcmdlZFRzID0gJ19fbWVyZ2VkLnRzJyxcblxuICAvKipcbiAgRVNNIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBNanNFeHRlbnNpb24gPSAnLm1qcycsXG5cbiAgLyoqXG4gIE5vZGUgbW9kdWxlcyBmb2xkZXIuXG4gICAqL1xuICBOb2RlTW9kdWxlcyA9ICdub2RlX21vZHVsZXMnLFxuXG4gIC8qKlxuICBQYWNrYWdlIEpTT04gZmlsZS5cbiAgICovXG4gIFBhY2thZ2VKc29uID0gJ3BhY2thZ2UuanNvbicsXG5cbiAgLyoqXG4gIEZvbGRlciBob2xkaW5nIGhhbmQtd3JpdHRlbiBwYXRjaGVkIGNvcGllcyBvZiB0aGlyZC1wYXJ0eSBwYWNrYWdlcy5cbiAgICovXG4gIFBhdGNoZXMgPSAncGF0Y2hlcycsXG5cbiAgLyoqXG4gIFJvb3QgZm9sZGVyLlxuICAgKi9cbiAgUm9vdEZvbGRlciA9ICcvJyxcblxuICAvKipcbiAgU2NyaXB0cyBmb2xkZXIuXG4gICAqL1xuICBTY3JpcHRzID0gJ3NjcmlwdHMnLFxuXG4gIC8qKlxuICBTY3JpcHRVdGlscyBmb2xkZXIuXG4gICAqL1xuICBTY3JpcHRVdGlscyA9ICdzY3JpcHQtdXRpbHMnLFxuXG4gIC8qKlxuICBTb3VyY2UgZm9sZGVyLlxuICAgKi9cbiAgU3JjID0gJ3NyYycsXG5cbiAgLyoqXG4gIFN0eWxlcyBmb2xkZXIuXG4gICAqL1xuICBTdHlsZXMgPSAnc3R5bGVzJyxcblxuICAvKipcbiAgU3R5bGVzIENTUyBmaWxlLlxuICAgKi9cbiAgU3R5bGVzQ3NzID0gJ3N0eWxlcy5jc3MnLFxuXG4gIC8qKlxuICBUZW1wbGF0ZXMgZm9sZGVyLlxuICAgKi9cbiAgVGVtcGxhdGVzID0gJ3RlbXBsYXRlcycsXG5cbiAgLyoqXG4gIFRlc3QgaGVscGVycyBmb2xkZXIuXG4gICAqL1xuICBUZXN0SGVscGVycyA9ICd0ZXN0LWhlbHBlcnMnLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIFRzQ29uZmlnSnNvbiA9ICd0c2NvbmZpZy5qc29uJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCB2YWxpZGF0ZXMgdGhlIGdlbmVyYXRlZCBDb21tb25KUyBkZWNsYXJhdGlvbnMuXG4gICAqL1xuICBUc0NvbmZpZ1ZhbGlkYXRlRGVjbGFyYXRpb25zQ2pzSnNvbiA9ICd0c2NvbmZpZy52YWxpZGF0ZS1kZWNsYXJhdGlvbnMtY2pzLmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHZhbGlkYXRlcyB0aGUgZ2VuZXJhdGVkIEVTTSBkZWNsYXJhdGlvbnMuXG4gICAqL1xuICBUc0NvbmZpZ1ZhbGlkYXRlRGVjbGFyYXRpb25zSnNvbiA9ICd0c2NvbmZpZy52YWxpZGF0ZS1kZWNsYXJhdGlvbnMuanNvbicsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBUc0V4dGVuc2lvbiA9ICcudHMnLFxuXG4gIC8qKlxuICBUeXBlcyBmb2xkZXIuXG4gICAqL1xuICBUeXBlcyA9ICdAdHlwZXMnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdPLElBQUssNEJBQUwsa0JBQUtBLCtCQUFMO0FBSUwsRUFBQUEsMkJBQUEsU0FBTTtBQUtOLEVBQUFBLDJCQUFBLFlBQVM7QUFLVCxFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsYUFBVTtBQUtWLEVBQUFBLDJCQUFBLFlBQVM7QUFLVCxFQUFBQSwyQkFBQSxZQUFTO0FBS1QsRUFBQUEsMkJBQUEsYUFBVTtBQUtWLEVBQUFBLDJCQUFBLFdBQVE7QUFLUixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsMkJBQUEsU0FBTTtBQUtOLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUtoQixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsMkJBQUEsVUFBTztBQUtQLEVBQUFBLDJCQUFBLHlCQUFzQjtBQUt0QixFQUFBQSwyQkFBQSwrQkFBNEI7QUFLNUIsRUFBQUEsMkJBQUEsYUFBVTtBQUtWLEVBQUFBLDJCQUFBLCtCQUE0QjtBQUs1QixFQUFBQSwyQkFBQSwrQkFBNEI7QUFLNUIsRUFBQUEsMkJBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLDJCQUFBLFVBQU87QUFLUCxFQUFBQSwyQkFBQSxjQUFXO0FBS1gsRUFBQUEsMkJBQUEsZ0JBQWE7QUFLYixFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLHFCQUFrQjtBQUtsQixFQUFBQSwyQkFBQSxTQUFNO0FBS04sRUFBQUEsMkJBQUEsNkJBQTBCO0FBSzFCLEVBQUFBLDJCQUFBLDZCQUEwQjtBQUsxQixFQUFBQSwyQkFBQSxjQUFXO0FBS1gsRUFBQUEsMkJBQUEsZUFBWTtBQUtaLEVBQUFBLDJCQUFBLGVBQVk7QUFLWixFQUFBQSwyQkFBQSxjQUFXO0FBS1gsRUFBQUEsMkJBQUEsYUFBVTtBQUtWLEVBQUFBLDJCQUFBLHNDQUFtQztBQUtuQyxFQUFBQSwyQkFBQSxzQ0FBbUM7QUFLbkMsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSwrQkFBNEI7QUFLNUIsRUFBQUEsMkJBQUEsc0RBQW1EO0FBS25ELEVBQUFBLDJCQUFBLGNBQVc7QUFLWCxFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLGlCQUFjO0FBS2QsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsZ0JBQWE7QUFLYixFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxTQUFNO0FBS04sRUFBQUEsMkJBQUEsWUFBUztBQUtULEVBQUFBLDJCQUFBLGVBQVk7QUFLWixFQUFBQSwyQkFBQSxlQUFZO0FBS1osRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLHlDQUFzQztBQUt0QyxFQUFBQSwyQkFBQSxzQ0FBbUM7QUFLbkMsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxXQUFRO0FBdFNFLFNBQUFBO0FBQUEsR0FBQTsiLAogICJuYW1lcyI6IFsiT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyJdCn0K
223
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9vYnNpZGlhbi1kZXYtdXRpbHMtcmVwby1wYXRocy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYW4gZW51bWVyYXRpb24gb2YgY29tbW9uIGZpbGUgcGF0aHMgYW5kIHBhdHRlcm5zIHVzZWQgaW4gdGhlIE9ic2lkaWFuIGRldmVsb3BtZW50IHV0aWxpdGllcyByZXBvc2l0b3J5LlxuICogVGhlc2UgcGF0aHMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgb3RoZXIgdXRpbGl0aWVzLCBlbnN1cmluZyBjb25zaXN0ZW5jeSBhbmQgcmVkdWNpbmcgdGhlIGxpa2VsaWhvb2RcbiAqIG9mIGVycm9ycyBkdWUgdG8gaGFyZGNvZGVkIHN0cmluZ3MuXG4gKi9cblxuLyoqXG4gKiBFbnVtZXJhdGlvbiBvZiBjb21tb24gZmlsZSBwYXRocyBhbmQgcGF0dGVybnMgdXNlZCBpbiB0aGUgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBlbnVtIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMge1xuICAvKipcbiAgQW55IGZpbGUgb3IgZm9sZGVyLlxuICAgKi9cbiAgQW55ID0gJyonLFxuXG4gIC8qKlxuICBDb21tb25KUyBmaWxlLlxuICAgKi9cbiAgQW55Q2pzID0gJyouY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgQW55RGN0cyA9ICcqLmQuY3RzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueURtdHMgPSAnKi5kLm10cycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZS5cbiAgICovXG4gIEFueUR0cyA9ICcqLmQudHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55TWpzID0gJyoubWpzJyxcblxuICAvKipcbiAgQW55IHBhdGggcmVjdXJzaXZlbHkuXG4gICAqL1xuICBBbnlQYXRoID0gJyoqJyxcblxuICAvKipcbiAgQW55IFR5cGVTY3JpcHQgZmlsZS5cbiAgICovXG4gIEFueVRzID0gJyoudHMnLFxuXG4gIC8qKlxuICBBc3RybyBjb25maWd1cmF0aW9uIGZpbGUgKGRvY3VtZW50YXRpb24gc2l0ZSkgYXQgdGhlIHJlcG8gcm9vdC5cbiAgICovXG4gIEFzdHJvQ29uZmlnVHMgPSAnYXN0cm8uY29uZmlnLnRzJyxcblxuICAvKipcbiAgV2luZG93cyBiYXRjaCBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIEJhdEV4dGVuc2lvbiA9ICcuYmF0JyxcblxuICAvKipcbiAgRm9sZGVyIGhvbGRpbmcgdGhlIGV4ZWN1dGFibGUgc2hpbXMgb2YgbG9jYWxseS1pbnN0YWxsZWQgcGFja2FnZXMuXG4gICAqL1xuICBCaW4gPSAnLmJpbicsXG5cbiAgLyoqXG4gIEJ1biBsb2NrZmlsZS5cbiAgICovXG4gIEJ1bkxvY2sgPSAnYnVuLmxvY2snLFxuXG4gIC8qKlxuICBCaW5hcnkgYnVuIGxvY2tmaWxlLCB3cml0dGVuIGJ5IGJ1biBiZWZvcmUgdjEuMi5cbiAgICovXG4gIEJ1bkxvY2tiID0gJ2J1bi5sb2NrYicsXG5cbiAgLyoqXG4gIENvbW1vbkpTIGZvbGRlci5cbiAgICovXG4gIENqcyA9ICdjanMnLFxuXG4gIC8qKlxuICBDb21tb25KUyBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIENqc0V4dGVuc2lvbiA9ICcuY2pzJyxcblxuICAvKipcbiAgV2luZG93cyBjb21tYW5kIHNjcmlwdCBleHRlbnNpb24uXG4gICAqL1xuICBDb21tYW5kRXh0ZW5zaW9uID0gJy5jbWQnLFxuXG4gIC8qKlxuICBDdXJyZW50IGZvbGRlci5cbiAgICovXG4gIEN1cnJlbnRGb2xkZXIgPSAnLicsXG5cbiAgLyoqXG4gIERhdGF2aWV3IHR5cGVzLlxuICAgKi9cbiAgRGF0YXZpZXdUeXBlcyA9ICdzcmMvb2JzaWRpYW4vQHR5cGVzL2RhdGF2aWV3LyoqJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERjdHNFeHRlbnNpb24gPSAnLmQuY3RzJyxcblxuICAvKipcbiAgRGlzdHJpYnV0aW9uIGZvbGRlci5cbiAgICovXG4gIERpc3QgPSAnZGlzdCcsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYnVpbHQgYGRlbW8tdmF1bHQtaGVscGVyYCBwbHVnaW4gd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLCBpbmplY3RlZCBpbnRvIGRlbW8gdmF1bHRzIGF0IHJlbGVhc2UgdGltZS5cbiAgICovXG4gIERpc3REZW1vVmF1bHRIZWxwZXIgPSAnZGlzdC9kZW1vLXZhdWx0LWhlbHBlcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYnVpbHQgaW50ZWdyYXRpb24tdGVzdCBoYXJuZXNzIHBsdWdpbiB3aXRoaW4gdGhlIHtAbGluayBEaXN0fSBmb2xkZXIsIHNlZWRlZCBpbnRvIGEgY29uc3VtZXIncyBpbnRlZ3JhdGlvbi10ZXN0IHZhdWx0IHNvIGl0cyBgZXZhbEluT2JzaWRpYW5gIGNsb3N1cmVzIHJlYWNoIHRoZSBsaWJyYXJ5IHZpYSBgbGliYC5cbiAgICovXG4gIERpc3RJbnRlZ3JhdGlvblRlc3RQbHVnaW4gPSAnZGlzdC9pbnRlZ3JhdGlvbi10ZXN0LXBsdWdpbicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYGxpYmAgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci5cbiAgICovXG4gIERpc3RMaWIgPSAnZGlzdC9saWInLFxuXG4gIC8qKlxuICBBIHBhdGggdG8gdGhlIGJ1aWx0IHBsdWdpbi1BUEkgaW50ZWdyYXRpb24tdGVzdCBDT05TVU1FUiBwbHVnaW4gd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLiBUZXN0LW9ubHkgYW5kIG5ldmVyIHNoaXBwZWQ7IGJ1aWx0IHNlcGFyYXRlbHkgZnJvbSBpdHMgcHJvdmlkZXIgc28gdGhlIHR3byBjYXJyeSBkaXN0aW5jdCBgb2JzaWRpYW4tZGV2LXV0aWxzYCBjb3BpZXMuXG4gICAqL1xuICBEaXN0UGx1Z2luQXBpVGVzdENvbnN1bWVyID0gJ2Rpc3QvcGx1Z2luLWFwaS10ZXN0LWNvbnN1bWVyJyxcblxuICAvKipcbiAgQSBwYXRoIHRvIHRoZSBidWlsdCBwbHVnaW4tQVBJIGludGVncmF0aW9uLXRlc3QgUFJPVklERVIgcGx1Z2luIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlci4gVGVzdC1vbmx5IGFuZCBuZXZlciBzaGlwcGVkOyBidWlsdCBzZXBhcmF0ZWx5IGZyb20gaXRzIGNvbnN1bWVyIHNvIHRoZSB0d28gY2FycnkgZGlzdGluY3QgYG9ic2lkaWFuLWRldi11dGlsc2AgY29waWVzLlxuICAgKi9cbiAgRGlzdFBsdWdpbkFwaVRlc3RQcm92aWRlciA9ICdkaXN0L3BsdWdpbi1hcGktdGVzdC1wcm92aWRlcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgYHRlbXBsYXRlc2AgZm9sZGVyIHdpdGhpbiB0aGUge0BsaW5rIERpc3R9IGZvbGRlciwgaG9sZGluZyB0aGUgY29uc3VtZXItZmFjaW5nIHRlbXBsYXRlcy5cbiAgICovXG4gIERpc3RUZW1wbGF0ZXMgPSAnZGlzdC90ZW1wbGF0ZXMnLFxuXG4gIC8qKlxuICBUcmFuc3BpbGVkIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBEanNFeHRlbnNpb24gPSAnLmQuanMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIERtdHNFeHRlbnNpb24gPSAnLmQubXRzJyxcblxuICAvKipcbiAgRG9jdW1lbnRhdGlvbiBzaXRlIGZvbGRlciAoQXN0cm8gKyBTdGFybGlnaHQgQVBJLWRvY3Mgc3ViLXByb2plY3QpLlxuICAgKi9cbiAgRG9jcyA9ICdkb2NzJyxcblxuICAvKipcbiAgQnVpbGQgb3V0cHV0IGZvbGRlciBvZiB0aGUgZG9jdW1lbnRhdGlvbiBzaXRlLlxuICAgKi9cbiAgRG9jc0Rpc3QgPSAnZG9jcy9kaXN0JyxcblxuICAvKipcbiAgRHByaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIERwcmludEpzb24gPSAnZHByaW50Lmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRHRzRXh0ZW5zaW9uID0gJy5kLnRzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ010cyA9ICdlc2xpbnQuY29uZmlnLm10cycsXG5cbiAgLyoqXG4gIEVTTSBKYXZhU2NyaXB0IGZvbGRlci5cbiAgICovXG4gIEVzbSA9ICdlc20nLFxuXG4gIC8qKlxuICBXaW5kb3dzIGV4ZWN1dGFibGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgRXhlRXh0ZW5zaW9uID0gJy5leGUnLFxuXG4gIC8qKlxuICBHZW5lcmF0ZWQtZHVyaW5nLWJ1aWxkIENvbW1vbkpTIGZpbGUuXG4gICAqL1xuICBHZW5lcmF0ZWREdXJpbmdCdWlsZENqcyA9ICdnZW5lcmF0ZWQtZHVyaW5nLWJ1aWxkLmNqcycsXG5cbiAgLyoqXG4gIEdlbmVyYXRlZC1kdXJpbmctYnVpbGQgRVNNIEphdmFTY3JpcHQgZmlsZS5cbiAgICovXG4gIEdlbmVyYXRlZER1cmluZ0J1aWxkTWpzID0gJ2dlbmVyYXRlZC1kdXJpbmctYnVpbGQubWpzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhDanMgPSAnaW5kZXguY2pzJyxcblxuICAvKipcbiAgQ29tbW9uSlMgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERjdHMgPSAnaW5kZXguZC5jdHMnLFxuXG4gIC8qKlxuICBFU00gVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlIGluZGV4IGZpbGUuXG4gICAqL1xuICBJbmRleERtdHMgPSAnaW5kZXguZC5tdHMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhNanMgPSAnaW5kZXgubWpzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBpbmRleCBmaWxlLlxuICAgKi9cbiAgSW5kZXhUcyA9ICdpbmRleC50cycsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgc291cmNlcyBvZiB0aGUgcGx1Z2luLUFQSSBpbnRlZ3JhdGlvbi10ZXN0IENPTlNVTUVSIHBsdWdpbi5cbiAgICovXG4gIEludGVncmF0aW9uVGVzdFBsdWdpbkFwaUNvbnN1bWVyID0gJ2ludGVncmF0aW9uLXRlc3QtcGx1Z2luLWFwaS9jb25zdW1lcicsXG5cbiAgLyoqXG4gIEEgcGF0aCB0byB0aGUgc291cmNlcyBvZiB0aGUgcGx1Z2luLUFQSSBpbnRlZ3JhdGlvbi10ZXN0IFBST1ZJREVSIHBsdWdpbi5cbiAgICovXG4gIEludGVncmF0aW9uVGVzdFBsdWdpbkFwaVByb3ZpZGVyID0gJ2ludGVncmF0aW9uLXRlc3QtcGx1Z2luLWFwaS9wcm92aWRlcicsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBKc0V4dGVuc2lvbiA9ICcuanMnLFxuXG4gIC8qKlxuICBFU00gTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyA9ICcubWFya2Rvd25saW50LWNsaTIubWpzJyxcblxuICAvKipcbiAgTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBzY2hlbWEgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50VHlwZXNNYXJrZG93bmxpbnRDbGkyQ29uZmlnU2NoZW1hRHRzID0gJ3NyYy9zY3JpcHQtdXRpbHMvbGludGVycy9tYXJrZG93bmxpbnQtdHlwZXMvQHR5cGVzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy1zY2hlbWEuZC50cycsXG5cbiAgLyoqXG4gIEdlbmVyYXRlZCBmbGF0IHJlLWV4cG9ydCBiYXJyZWwgZmlsZS5cbiAgICovXG4gIE1lcmdlZFRzID0gJ19fbWVyZ2VkLnRzJyxcblxuICAvKipcbiAgRVNNIEphdmFTY3JpcHQgZmlsZSBleHRlbnNpb24uXG4gICAqL1xuICBNanNFeHRlbnNpb24gPSAnLm1qcycsXG5cbiAgLyoqXG4gIE5vZGUgbW9kdWxlcyBmb2xkZXIuXG4gICAqL1xuICBOb2RlTW9kdWxlcyA9ICdub2RlX21vZHVsZXMnLFxuXG4gIC8qKlxuICBQYWNrYWdlIEpTT04gZmlsZS5cbiAgICovXG4gIFBhY2thZ2VKc29uID0gJ3BhY2thZ2UuanNvbicsXG5cbiAgLyoqXG4gIE5QTSBsb2NrZmlsZS5cbiAgICovXG4gIFBhY2thZ2VMb2NrSnNvbiA9ICdwYWNrYWdlLWxvY2suanNvbicsXG5cbiAgLyoqXG4gIEZvbGRlciBob2xkaW5nIGhhbmQtd3JpdHRlbiBwYXRjaGVkIGNvcGllcyBvZiB0aGlyZC1wYXJ0eSBwYWNrYWdlcy5cbiAgICovXG4gIFBhdGNoZXMgPSAncGF0Y2hlcycsXG5cbiAgLyoqXG4gIFBucG0gbG9ja2ZpbGUuXG4gICAqL1xuICBQbnBtTG9ja1lhbWwgPSAncG5wbS1sb2NrLnlhbWwnLFxuXG4gIC8qKlxuICBSb290IGZvbGRlci5cbiAgICovXG4gIFJvb3RGb2xkZXIgPSAnLycsXG5cbiAgLyoqXG4gIFNjcmlwdHMgZm9sZGVyLlxuICAgKi9cbiAgU2NyaXB0cyA9ICdzY3JpcHRzJyxcblxuICAvKipcbiAgU2NyaXB0VXRpbHMgZm9sZGVyLlxuICAgKi9cbiAgU2NyaXB0VXRpbHMgPSAnc2NyaXB0LXV0aWxzJyxcblxuICAvKipcbiAgU291cmNlIGZvbGRlci5cbiAgICovXG4gIFNyYyA9ICdzcmMnLFxuXG4gIC8qKlxuICBTdHlsZXMgZm9sZGVyLlxuICAgKi9cbiAgU3R5bGVzID0gJ3N0eWxlcycsXG5cbiAgLyoqXG4gIFN0eWxlcyBDU1MgZmlsZS5cbiAgICovXG4gIFN0eWxlc0NzcyA9ICdzdHlsZXMuY3NzJyxcblxuICAvKipcbiAgVGVtcGxhdGVzIGZvbGRlci5cbiAgICovXG4gIFRlbXBsYXRlcyA9ICd0ZW1wbGF0ZXMnLFxuXG4gIC8qKlxuICBUZXN0IGhlbHBlcnMgZm9sZGVyLlxuICAgKi9cbiAgVGVzdEhlbHBlcnMgPSAndGVzdC1oZWxwZXJzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBUc0NvbmZpZ0pzb24gPSAndHNjb25maWcuanNvbicsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgdmFsaWRhdGVzIHRoZSBnZW5lcmF0ZWQgQ29tbW9uSlMgZGVjbGFyYXRpb25zLlxuICAgKi9cbiAgVHNDb25maWdWYWxpZGF0ZURlY2xhcmF0aW9uc0Nqc0pzb24gPSAndHNjb25maWcudmFsaWRhdGUtZGVjbGFyYXRpb25zLWNqcy5qc29uJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCB2YWxpZGF0ZXMgdGhlIGdlbmVyYXRlZCBFU00gZGVjbGFyYXRpb25zLlxuICAgKi9cbiAgVHNDb25maWdWYWxpZGF0ZURlY2xhcmF0aW9uc0pzb24gPSAndHNjb25maWcudmFsaWRhdGUtZGVjbGFyYXRpb25zLmpzb24nLFxuXG4gIC8qKlxuICBUeXBlU2NyaXB0IGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgVHNFeHRlbnNpb24gPSAnLnRzJyxcblxuICAvKipcbiAgVHlwZXMgZm9sZGVyLlxuICAgKi9cbiAgVHlwZXMgPSAnQHR5cGVzJyxcblxuICAvKipcbiAgWWFybiBsb2NrZmlsZS5cbiAgICovXG4gIFlhcm5Mb2NrID0gJ3lhcm4ubG9jaydcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV08sSUFBSyw0QkFBTCxrQkFBS0EsK0JBQUw7QUFJTCxFQUFBQSwyQkFBQSxTQUFNO0FBS04sRUFBQUEsMkJBQUEsWUFBUztBQUtULEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsWUFBUztBQUtULEVBQUFBLDJCQUFBLFlBQVM7QUFLVCxFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsV0FBUTtBQUtSLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUtoQixFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLFNBQU07QUFLTixFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsY0FBVztBQUtYLEVBQUFBLDJCQUFBLFNBQU07QUFLTixFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLHNCQUFtQjtBQUtuQixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsMkJBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLDJCQUFBLG1CQUFnQjtBQUtoQixFQUFBQSwyQkFBQSxVQUFPO0FBS1AsRUFBQUEsMkJBQUEseUJBQXNCO0FBS3RCLEVBQUFBLDJCQUFBLCtCQUE0QjtBQUs1QixFQUFBQSwyQkFBQSxhQUFVO0FBS1YsRUFBQUEsMkJBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLDJCQUFBLCtCQUE0QjtBQUs1QixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsMkJBQUEsa0JBQWU7QUFLZixFQUFBQSwyQkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEsMkJBQUEsVUFBTztBQUtQLEVBQUFBLDJCQUFBLGNBQVc7QUFLWCxFQUFBQSwyQkFBQSxnQkFBYTtBQUtiLEVBQUFBLDJCQUFBLGtCQUFlO0FBS2YsRUFBQUEsMkJBQUEscUJBQWtCO0FBS2xCLEVBQUFBLDJCQUFBLFNBQU07QUFLTixFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLDZCQUEwQjtBQUsxQixFQUFBQSwyQkFBQSw2QkFBMEI7QUFLMUIsRUFBQUEsMkJBQUEsY0FBVztBQUtYLEVBQUFBLDJCQUFBLGVBQVk7QUFLWixFQUFBQSwyQkFBQSxlQUFZO0FBS1osRUFBQUEsMkJBQUEsY0FBVztBQUtYLEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSxzQ0FBbUM7QUFLbkMsRUFBQUEsMkJBQUEsc0NBQW1DO0FBS25DLEVBQUFBLDJCQUFBLGlCQUFjO0FBS2QsRUFBQUEsMkJBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLDJCQUFBLHNEQUFtRDtBQUtuRCxFQUFBQSwyQkFBQSxjQUFXO0FBS1gsRUFBQUEsMkJBQUEsa0JBQWU7QUFLZixFQUFBQSwyQkFBQSxpQkFBYztBQUtkLEVBQUFBLDJCQUFBLGlCQUFjO0FBS2QsRUFBQUEsMkJBQUEscUJBQWtCO0FBS2xCLEVBQUFBLDJCQUFBLGFBQVU7QUFLVixFQUFBQSwyQkFBQSxrQkFBZTtBQUtmLEVBQUFBLDJCQUFBLGdCQUFhO0FBS2IsRUFBQUEsMkJBQUEsYUFBVTtBQUtWLEVBQUFBLDJCQUFBLGlCQUFjO0FBS2QsRUFBQUEsMkJBQUEsU0FBTTtBQUtOLEVBQUFBLDJCQUFBLFlBQVM7QUFLVCxFQUFBQSwyQkFBQSxlQUFZO0FBS1osRUFBQUEsMkJBQUEsZUFBWTtBQUtaLEVBQUFBLDJCQUFBLGlCQUFjO0FBS2QsRUFBQUEsMkJBQUEsa0JBQWU7QUFLZixFQUFBQSwyQkFBQSx5Q0FBc0M7QUFLdEMsRUFBQUEsMkJBQUEsc0NBQW1DO0FBS25DLEVBQUFBLDJCQUFBLGlCQUFjO0FBS2QsRUFBQUEsMkJBQUEsV0FBUTtBQUtSLEVBQUFBLDJCQUFBLGNBQVc7QUFuVkQsU0FBQUE7QUFBQSxHQUFBOyIsCiAgIm5hbWVzIjogWyJPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIl0KfQo=
@@ -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
  }
@@ -0,0 +1,370 @@
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 keepName($unknown) {
40
+ return $unknown;
41
+ }
42
+
43
+ (function initCjs() {
44
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
45
+ const globalThisRecord = globalThis;
46
+ globalThisRecord['__name'] ??= keepName;
47
+ const originalRequire = require;
48
+ if (originalRequire && !originalRequire.__isPatched) {
49
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
50
+ require = Object.assign(
51
+ (id) => requirePatched(id),
52
+ originalRequire,
53
+ {
54
+ __isPatched: true
55
+ }
56
+ );
57
+ }
58
+
59
+ globalThisRecord['__extractDefault'] ??= extractDefault;
60
+
61
+ ensureBrowserProcess();
62
+
63
+ function extractDefault(module) {
64
+ return module && module.__esModule && 'default' in module ? module.default : module;
65
+ }
66
+
67
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
+ '@codemirror/autocomplete',
69
+ '@codemirror/collab',
70
+ '@codemirror/commands',
71
+ '@codemirror/language',
72
+ '@codemirror/lint',
73
+ '@codemirror/search',
74
+ '@codemirror/state',
75
+ '@codemirror/text',
76
+ '@codemirror/view',
77
+ '@lezer/common',
78
+ '@lezer/highlight',
79
+ '@lezer/lr',
80
+ 'obsidian']
81
+ );
82
+
83
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
84
+ '@codemirror/closebrackets',
85
+ '@codemirror/comment',
86
+ '@codemirror/fold',
87
+ '@codemirror/gutter',
88
+ '@codemirror/highlight',
89
+ '@codemirror/history',
90
+ '@codemirror/matchbrackets',
91
+ '@codemirror/panel',
92
+ '@codemirror/rangeset',
93
+ '@codemirror/rectangular-selection',
94
+ '@codemirror/stream-parser',
95
+ '@codemirror/tooltip']
96
+ );
97
+
98
+ function requirePatched(id) {
99
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
100
+ return originalRequire?.(id);
101
+ }
102
+
103
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
104
+ if (globalThis.app.isMobile) {
105
+ if (id === 'process' || id === 'node:process') {
106
+ // eslint-disable-next-line no-console -- Valid usage.
107
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
108
+
109
+ return process;
110
+ }
111
+ } else {
112
+ const module = originalRequire?.(id);
113
+ if (module) {
114
+ return extractDefault(module);
115
+ }
116
+ }
117
+
118
+ // eslint-disable-next-line no-console -- Valid usage.
119
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
120
+ return {};
121
+ }
122
+ })();
123
+ })();
124
+
125
+ "use strict";
126
+ var __create = Object.create;
127
+ var __defProp = Object.defineProperty;
128
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
129
+ var __getOwnPropNames = Object.getOwnPropertyNames;
130
+ var __getProtoOf = Object.getPrototypeOf;
131
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
132
+ var __export = (target, all) => {
133
+ for (var name in all)
134
+ __defProp(target, name, { get: all[name], enumerable: true });
135
+ };
136
+ var __copyProps = (to, from, except, desc) => {
137
+ if (from && typeof from === "object" || typeof from === "function") {
138
+ for (let key of __getOwnPropNames(from))
139
+ if (!__hasOwnProp.call(to, key) && key !== except)
140
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
141
+ }
142
+ return to;
143
+ };
144
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
145
+ // If the importer is in node compatibility mode or this is not an ESM
146
+ // file that has been converted to a CommonJS file using a Babel-
147
+ // compatible transform (i.e. "__esModule" has not been set), then set
148
+ // "default" to the CommonJS "module.exports" for node compatibility.
149
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
150
+ mod
151
+ ));
152
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
153
+ var package_manager_exports = {};
154
+ __export(package_manager_exports, {
155
+ PackageManager: () => PackageManager,
156
+ getPackageManager: () => getPackageManager,
157
+ getPackageManagerRunCommand: () => getPackageManagerRunCommand,
158
+ resolveToolCommand: () => resolveToolCommand
159
+ });
160
+ module.exports = __toCommonJS(package_manager_exports);
161
+ var import_node_fs = require('node:fs');
162
+ var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
163
+ var import_path = require('../path.cjs');
164
+ var import_reg_exp = require('../reg-exp.cjs');
165
+ var import_type_guards = require('../type-guards.cjs');
166
+ var import_json = require('./json.cjs');
167
+ var import_obsidian_dev_utils_repo_paths = require('./obsidian-dev-utils-repo-paths.cjs');
168
+ var import_root = require('./root.cjs');
169
+ var PackageManager = /* @__PURE__ */ ((PackageManager2) => {
170
+ PackageManager2["Bun"] = "bun";
171
+ PackageManager2["Npm"] = "npm";
172
+ PackageManager2["Pnpm"] = "pnpm";
173
+ PackageManager2["Yarn"] = "yarn";
174
+ return PackageManager2;
175
+ })(PackageManager || {});
176
+ function getPackageManager(cwd) {
177
+ const root = getStartFolder(cwd);
178
+ const declaredPackageManager = detectPackageManagerFromPackageJson(root);
179
+ const lockfiles = LOCKFILES.filter((lockfile) => (0, import_node_fs.existsSync)((0, import_path.join)(root, lockfile.fileName)));
180
+ const claimants = new Set(lockfiles.map((lockfile) => lockfile.packageManager));
181
+ if (declaredPackageManager !== null) {
182
+ claimants.add(declaredPackageManager);
183
+ }
184
+ const packageManager = resolvePackageManager({
185
+ claimants,
186
+ declaredPackageManager
187
+ });
188
+ if (claimants.size > 1) {
189
+ warnAboutSeveralClaimants({
190
+ declaredPackageManager,
191
+ lockfiles,
192
+ packageManager,
193
+ root
194
+ });
195
+ }
196
+ return packageManager;
197
+ }
198
+ function getPackageManagerRunCommand(cwd) {
199
+ return [getPackageManager(cwd), "run"];
200
+ }
201
+ function resolveToolCommand(params) {
202
+ const { cwd, tool } = params;
203
+ const shimPath = findBinShim({ cwd, tool });
204
+ if (shimPath !== null) {
205
+ return [shimPath];
206
+ }
207
+ return [...getPackageManagerExecCommand(cwd), tool];
208
+ }
209
+ const DECLARATION_NAME_REG_EXP = /^(?<name>[^@\s]+)@/;
210
+ const LOCKFILES = [
211
+ { fileName: import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.BunLock, packageManager: "bun" /* Bun */ },
212
+ { fileName: import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.BunLockb, packageManager: "bun" /* Bun */ },
213
+ { fileName: import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.PnpmLockYaml, packageManager: "pnpm" /* Pnpm */ },
214
+ { fileName: import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.YarnLock, packageManager: "yarn" /* Yarn */ },
215
+ { fileName: import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.PackageLockJson, packageManager: "npm" /* Npm */ }
216
+ ];
217
+ const USER_AGENT_NAME_REG_EXP = /^(?<name>[^/\s]+)\//;
218
+ const reportedDisagreements = /* @__PURE__ */ new Set();
219
+ function detectPackageManagerFromPackageJson(root) {
220
+ const packageJsonPath = (0, import_path.join)(root, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.PackageJson);
221
+ if (!(0, import_node_fs.existsSync)(packageJsonPath)) {
222
+ return null;
223
+ }
224
+ let packageJson;
225
+ try {
226
+ packageJson = (0, import_json.readJsonSync)(packageJsonPath);
227
+ } catch {
228
+ return null;
229
+ }
230
+ const declaration = packageJson.packageManager;
231
+ if (!declaration) {
232
+ return null;
233
+ }
234
+ const match = DECLARATION_NAME_REG_EXP.exec(declaration);
235
+ if (!match) {
236
+ return null;
237
+ }
238
+ return parsePackageManagerName((0, import_reg_exp.getMandatoryNamedGroup)(match, "name"));
239
+ }
240
+ function detectPackageManagerFromUserAgent() {
241
+ const userAgent = import_node_process.default.env["npm_config_user_agent"];
242
+ if (!userAgent) {
243
+ return null;
244
+ }
245
+ const match = USER_AGENT_NAME_REG_EXP.exec(userAgent);
246
+ if (!match) {
247
+ return null;
248
+ }
249
+ return parsePackageManagerName((0, import_reg_exp.getMandatoryNamedGroup)(match, "name"));
250
+ }
251
+ function findBinShim(params) {
252
+ const { cwd, tool } = params;
253
+ const candidates = getShimCandidates(tool);
254
+ let currentFolder = getStartFolder(cwd);
255
+ while (currentFolder !== import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.CurrentFolder && currentFolder !== import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.RootFolder) {
256
+ for (const candidate of candidates) {
257
+ const shimPath = (0, import_path.join)(currentFolder, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.NodeModules, import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.Bin, candidate);
258
+ if ((0, import_node_fs.existsSync)(shimPath)) {
259
+ return shimPath;
260
+ }
261
+ }
262
+ currentFolder = (0, import_path.dirname)(currentFolder);
263
+ }
264
+ return null;
265
+ }
266
+ function getPackageManagerExecCommand(cwd) {
267
+ const packageManager = getPackageManager(cwd);
268
+ switch (packageManager) {
269
+ case "bun" /* Bun */: {
270
+ return ["bun", "x"];
271
+ }
272
+ case "npm" /* Npm */: {
273
+ return ["npx"];
274
+ }
275
+ case "pnpm" /* Pnpm */: {
276
+ return ["pnpm", "exec"];
277
+ }
278
+ case "yarn" /* Yarn */: {
279
+ return ["yarn", "exec"];
280
+ }
281
+ /* v8 ignore start -- Exhaustive switch guard; default branch is unreachable. */
282
+ default: {
283
+ return (0, import_type_guards.assertNever)(packageManager);
284
+ }
285
+ }
286
+ }
287
+ function getShimCandidates(tool) {
288
+ if (import_node_process.default.platform !== "win32") {
289
+ return [tool];
290
+ }
291
+ return [
292
+ `${tool}${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.CommandExtension}`,
293
+ `${tool}${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.ExeExtension}`,
294
+ `${tool}${import_obsidian_dev_utils_repo_paths.ObsidianDevUtilsRepoPaths.BatExtension}`
295
+ ];
296
+ }
297
+ function getStartFolder(cwd) {
298
+ return (0, import_root.getRootFolder)(cwd) ?? (0, import_path.toPosixPath)(cwd ?? import_node_process.default.cwd());
299
+ }
300
+ function parsePackageManagerName(name) {
301
+ switch (name) {
302
+ case "bun" /* Bun */: {
303
+ return "bun" /* Bun */;
304
+ }
305
+ case "npm" /* Npm */: {
306
+ return "npm" /* Npm */;
307
+ }
308
+ case "pnpm" /* Pnpm */: {
309
+ return "pnpm" /* Pnpm */;
310
+ }
311
+ case "yarn" /* Yarn */: {
312
+ return "yarn" /* Yarn */;
313
+ }
314
+ default: {
315
+ return null;
316
+ }
317
+ }
318
+ }
319
+ function resolvePackageManager(params) {
320
+ const {
321
+ claimants,
322
+ declaredPackageManager
323
+ } = params;
324
+ if (declaredPackageManager !== null) {
325
+ return declaredPackageManager;
326
+ }
327
+ const lockfileOwners = [...claimants];
328
+ const [firstLockfileOwner] = lockfileOwners;
329
+ if (firstLockfileOwner === void 0) {
330
+ return detectPackageManagerFromUserAgent() ?? "npm" /* Npm */;
331
+ }
332
+ if (lockfileOwners.length === 1) {
333
+ return firstLockfileOwner;
334
+ }
335
+ const launchedBy = detectPackageManagerFromUserAgent();
336
+ if (launchedBy !== null && claimants.has(launchedBy)) {
337
+ return launchedBy;
338
+ }
339
+ return firstLockfileOwner;
340
+ }
341
+ function warnAboutSeveralClaimants(params) {
342
+ const {
343
+ declaredPackageManager,
344
+ lockfiles,
345
+ packageManager,
346
+ root
347
+ } = params;
348
+ const lockfileNames = lockfiles.map((lockfile) => lockfile.fileName).join(", ");
349
+ const advice = declaredPackageManager === null ? 'Delete the stale lockfile, or declare "packageManager" in package.json, to settle it.' : "Delete the stale lockfile to settle it.";
350
+ const message = [
351
+ `obsidian-dev-utils: more than one package manager claims ${root}.`,
352
+ `Lockfiles: ${lockfileNames}.`,
353
+ `package.json "packageManager": ${declaredPackageManager ?? "not set"}.`,
354
+ `Using ${packageManager}.`,
355
+ advice
356
+ ].join(" ");
357
+ if (reportedDisagreements.has(message)) {
358
+ return;
359
+ }
360
+ reportedDisagreements.add(message);
361
+ console.warn(message);
362
+ }
363
+ // Annotate the CommonJS export names for ESM import in node:
364
+ 0 && (module.exports = {
365
+ PackageManager,
366
+ getPackageManager,
367
+ getPackageManagerRunCommand,
368
+ resolveToolCommand
369
+ });
370
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9wYWNrYWdlLW1hbmFnZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyBsb2NhbGx5LWluc3RhbGxlZCB0b29sIGJpbmFyaWVzIGFuZCBwYWNrYWdlLXNjcmlwdCBydW5uZXJzIHdpdGhvdXQgYXNzdW1pbmcgYG5wbWAuXG4gKlxuICogRGVsZWdhdGluZyB0byBgbnB4YCBzaWxlbnRseSBhc3N1bWVzIGFuIG5wbS1pbnN0YWxsZWQgdHJlZS4gT24gV2luZG93cyB0aGF0IGFzc3VtcHRpb24gaXMgZmF0YWwgdW5kZXJcbiAqIGBidW5gOiBgYnVuIGluc3RhbGxgIHdyaXRlcyBgbm9kZV9tb2R1bGVzLy5iaW4vPHRvb2w+LmV4ZWAsIG5vdCB0aGUgYDx0b29sPi5jbWRgIHRoYXQgbnBtJ3MgYG5weGAgbG9va3NcbiAqIGZvciwgc28gYG5weGAgbWlzc2VzIHRoZSBsb2NhbCBpbnN0YWxsIGVudGlyZWx5IGFuZCBkb3dubG9hZHMgdGhlIHRvb2wgZnJvbSB0aGUgcmVnaXN0cnkgaW5zdGVhZCBcdTIwMTQgd2hpY2hcbiAqIGZvciBgdHNjYCBpcyB0aGUgd2VsbC1rbm93biBkZWNveSBwYWNrYWdlLCBub3QgVHlwZVNjcmlwdC4gUmVzb2x2aW5nIHRoZSBzaGltIGZyb20gYG5vZGVfbW9kdWxlcy8uYmluYFxuICogb3Vyc2VsdmVzIHNpZGVzdGVwcyB0aGUgd2hvbGUgc2hpbS1mb3JtYXQgcXVlc3Rpb24sIGJlY2F1c2UgZXZlcnkgcGFja2FnZSBtYW5hZ2VyIHdyaXRlcyBvbmUgdGhlcmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHRvUG9zaXhQYXRoXG59IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJy4uL3JlZy1leHAudHMnO1xuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQgeyByZWFkSnNvblN5bmMgfSBmcm9tICcuL2pzb24udHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogQSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBjYW4gb3duIGEgcHJvamVjdCdzIGRlcGVuZGVuY3kgdHJlZS5cbiAqL1xuZXhwb3J0IGVudW0gUGFja2FnZU1hbmFnZXIge1xuICAvKipcbiAgICogVGhlIGBidW5gIHBhY2thZ2UgbWFuYWdlci5cbiAgICovXG4gIEJ1biA9ICdidW4nLFxuXG4gIC8qKlxuICAgKiBUaGUgYG5wbWAgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgTnBtID0gJ25wbScsXG5cbiAgLyoqXG4gICAqIFRoZSBgcG5wbWAgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgUG5wbSA9ICdwbnBtJyxcblxuICAvKipcbiAgICogVGhlIGB5YXJuYCBwYWNrYWdlIG1hbmFnZXIuXG4gICAqL1xuICBZYXJuID0gJ3lhcm4nXG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVUb29sQ29tbWFuZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVRvb2xDb21tYW5kUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wsIGFzIGl0IGFwcGVhcnMgaW4gYG5vZGVfbW9kdWxlcy8uYmluYC5cbiAgICovXG4gIHJlYWRvbmx5IHRvb2w6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIHBhY2thZ2UgbWFuYWdlciBvd25zIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jeSB0cmVlLlxuICpcbiAqIEV2ZXJ5IHNpZ25hbCBpcyBjb2xsZWN0ZWQgYmVmb3JlIGFueSBvZiB0aGVtIGlzIGJlbGlldmVkLCBiZWNhdXNlIGEgcmVwbyBjYXJyeWluZyB0d28gbG9ja2ZpbGVzIHVzZWQgdG9cbiAqIHJlc29sdmUgdG8gd2hpY2hldmVyIHNhdCBlYXJsaWVyIGluIGEgZml4ZWQgbGlzdCBcdTIwMTQgc2lsZW50bHkgcmVhc3NpZ25pbmcgZXZlcnkgcGFja2FnZSBzY3JpcHQgYW5kIGV2ZXJ5XG4gKiB0b29sIGludm9jYXRpb24gdG8gYSBtYW5hZ2VyIHRoYXQgbmV2ZXIgaW5zdGFsbGVkIHRoZSB0cmVlLlxuICpcbiAqIFRoZSBvcmRlciBpczpcbiAqXG4gKiAxLiBUaGUgYHBhY2thZ2VNYW5hZ2VyYCBmaWVsZCBvZiBgcGFja2FnZS5qc29uYC4gSXQgaXMgYSBkZWxpYmVyYXRlIGRlY2xhcmF0aW9uIGJ5IHRoZSByZXBvJ3MgYXV0aG9yXG4gKiAgICByYXRoZXIgdGhhbiBhbiBhcnRpZmFjdCBsZWZ0IGJlaGluZCBieSB3aGF0ZXZlciByYW4gbGFzdCwgc28gaXQgb3V0cmFua3MgZXZlcnkgbG9ja2ZpbGUgXHUyMDE0IGFuZCBpdCBpc1xuICogICAgdGhlIG9ubHkgc2lnbmFsIHRoYXQgaGVscHMgYXQgYWxsIGJlZm9yZSB0aGUgZmlyc3QgaW5zdGFsbCwgd2hlbiBubyBsb2NrZmlsZSBleGlzdHMgeWV0LlxuICogMi4gVGhlIHNvbGUgbG9ja2ZpbGUsIHdoZW4gZXhhY3RseSBvbmUgbWFuYWdlciBjbGFpbXMgdGhlIHRyZWUuXG4gKiAzLiBBbW9uZyBzZXZlcmFsIGxvY2tmaWxlcywgdGhlIG1hbmFnZXIgdGhhdCBsYXVuY2hlZCB1cyAoYG5wbV9jb25maWdfdXNlcl9hZ2VudGApLCB3aGVuIGl0IG93bnMgb25lIG9mXG4gKiAgICB0aGVtIFx1MjAxNCBhIGxpdmUgc2lnbmFsIGJlYXRzIGEgZmlsZSB0aGF0IG1heSBoYXZlIGJlZW4gYWJhbmRvbmVkIG1pZC1taWdyYXRpb24uIE90aGVyd2lzZSB0aGVcbiAqICAgIGRvY3VtZW50ZWQgZmFsbGJhY2sgb3JkZXIgaW4ge0BsaW5rIExPQ0tGSUxFU30gZGVjaWRlcy4gTm90ZSB0aGlzIGlzIGRlbGliZXJhdGVseSBOT1QgXCJ0aGUgbW9zdFxuICogICAgcmVjZW50bHkgbW9kaWZpZWQgbG9ja2ZpbGVcIjogYSBzdHJheSBsb2NrZmlsZSBpcyB0eXBpY2FsbHkgdGhlIG5ld2VzdCBmaWxlLCBzbyBtdGltZSBwaWNrcyBwcmVjaXNlbHlcbiAqICAgIHRoZSB3cm9uZyBvbmUuXG4gKiA0LiBgbnBtX2NvbmZpZ191c2VyX2FnZW50YCBvbiBpdHMgb3duLCB3aGVuIHRoZXJlIGlzIG5vIGxvY2tmaWxlLlxuICogNS4ge0BsaW5rIFBhY2thZ2VNYW5hZ2VyLk5wbX0uXG4gKlxuICogV2hlbmV2ZXIgbW9yZSB0aGFuIG9uZSBtYW5hZ2VyIGNsYWltcyB0aGUgdHJlZSwgdGhlIGRpc2FncmVlbWVudCBpcyByZXBvcnRlZCBvbmNlIHBlciBwcm9qZWN0IHRocm91Z2hcbiAqIHtAbGluayB3YXJuQWJvdXRTZXZlcmFsQ2xhaW1hbnRzfSBcdTIwMTQgdGhlIHJlc29sdXRpb24gc3RheXMgZGV0ZXJtaW5pc3RpYywgYnV0IGl0IHN0b3BzIGJlaW5nIHNpbGVudC5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIHBhY2thZ2UgbWFuYWdlciwgb3Ige0BsaW5rIFBhY2thZ2VNYW5hZ2VyLk5wbX0gd2hlbiBub3RoaW5nIGluZGljYXRlcyBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlcihjd2Q/OiBzdHJpbmcpOiBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0IHJvb3QgPSBnZXRTdGFydEZvbGRlcihjd2QpO1xuICBjb25zdCBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyID0gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tUGFja2FnZUpzb24ocm9vdCk7XG4gIGNvbnN0IGxvY2tmaWxlcyA9IExPQ0tGSUxFUy5maWx0ZXIoKGxvY2tmaWxlKSA9PiBleGlzdHNTeW5jKGpvaW4ocm9vdCwgbG9ja2ZpbGUuZmlsZU5hbWUpKSk7XG4gIGNvbnN0IGNsYWltYW50cyA9IG5ldyBTZXQobG9ja2ZpbGVzLm1hcCgobG9ja2ZpbGUpID0+IGxvY2tmaWxlLnBhY2thZ2VNYW5hZ2VyKSk7XG5cbiAgaWYgKGRlY2xhcmVkUGFja2FnZU1hbmFnZXIgIT09IG51bGwpIHtcbiAgICBjbGFpbWFudHMuYWRkKGRlY2xhcmVkUGFja2FnZU1hbmFnZXIpO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSByZXNvbHZlUGFja2FnZU1hbmFnZXIoe1xuICAgIGNsYWltYW50cyxcbiAgICBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyXG4gIH0pO1xuXG4gIGlmIChjbGFpbWFudHMuc2l6ZSA+IDEpIHtcbiAgICB3YXJuQWJvdXRTZXZlcmFsQ2xhaW1hbnRzKHtcbiAgICAgIGRlY2xhcmVkUGFja2FnZU1hbmFnZXIsXG4gICAgICBsb2NrZmlsZXMsXG4gICAgICBwYWNrYWdlTWFuYWdlcixcbiAgICAgIHJvb3RcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwYWNrYWdlTWFuYWdlcjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBwYWNrYWdlIHNjcmlwdCB0aHJvdWdoIHRoZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY3dkIC0gVGhlIGN1cnJlbnQgd29ya2luZyBmb2xkZXIgdG8gcmVzb2x2ZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQgcGFydHMsIGUuZy4gYFsnYnVuJywgJ3J1biddYC4gVGhlIHNjcmlwdCBuYW1lIGlzIGFwcGVuZGVkIGJ5IHRoZSBjYWxsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoY3dkPzogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW2dldFBhY2thZ2VNYW5hZ2VyKGN3ZCksICdydW4nXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgcGFydHMgdGhhdCBydW4gYSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLCB3aXRoIHRoZSB0b29sIGl0c2VsZiBhbHJlYWR5IGluY2x1ZGVkLlxuICpcbiAqIFByZWZlcnMgdGhlIHNoaW0gaW4gdGhlIG5lYXJlc3QgYG5vZGVfbW9kdWxlcy8uYmluYCwgd2Fsa2luZyB1cCB0aHJvdWdoIGFuY2VzdG9yIGZvbGRlcnMgc28gYSBob2lzdGVkXG4gKiB3b3Jrc3BhY2UgaW5zdGFsbCBpcyBzdGlsbCBmb3VuZC4gRmFsbHMgYmFjayB0byB0aGUgb3duaW5nIG1hbmFnZXIncyBleGVjIGZvcm0gd2hlbiBubyBzaGltIHJlc29sdmVzIFx1MjAxNFxuICogd2hpY2ggaXMgYm90aCB0aGUgcHJldmlvdXMgYmVoYXZpb3IgYW5kIHRoZSBvbmx5IHRoaW5nIHRoYXQgd29ya3MgdW5kZXIgeWFybidzIFBsdWcnbidQbGF5LCB3aGVyZVxuICogYG5vZGVfbW9kdWxlcy8uYmluYCBkb2VzIG5vdCBleGlzdCBhdCBhbGwuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmVzb2x1dGlvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kIHBhcnRzLCBlLmcuIGBbJy9wcm9qZWN0L25vZGVfbW9kdWxlcy8uYmluL3RzYyddYCBvciBgWydidW4nLCAneCcsICd0c2MnXWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVG9vbENvbW1hbmQocGFyYW1zOiBSZXNvbHZlVG9vbENvbW1hbmRQYXJhbXMpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgY3dkLCB0b29sIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHNoaW1QYXRoID0gZmluZEJpblNoaW0oeyBjd2QsIHRvb2wgfSk7XG5cbiAgaWYgKHNoaW1QYXRoICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtzaGltUGF0aF07XG4gIH1cblxuICByZXR1cm4gWy4uLmdldFBhY2thZ2VNYW5hZ2VyRXhlY0NvbW1hbmQoY3dkKSwgdG9vbF07XG59XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgbGVhZGluZyBgPG5hbWU+QGAgdG9rZW4gb2YgYSBgcGFja2FnZS5qc29uYCBgcGFja2FnZU1hbmFnZXJgIHZhbHVlLlxuICpcbiAqIFRoZSBgQGAgaXMgcmVxdWlyZWQsIGJlY2F1c2UgY29yZXBhY2sncyBmb3JtYXQgaXMgYDxuYW1lPkA8dmVyc2lvbj5gIFx1MjAxNCBhIGJhcmUgbmFtZSBpcyBhIG1hbGZvcm1lZFxuICogZGVjbGFyYXRpb24gcmF0aGVyIHRoYW4gYSBzaG9ydGhhbmQsIGFuZCBpcyBpZ25vcmVkIGluc3RlYWQgb2YgZ3Vlc3NlZCBhdC5cbiAqL1xuY29uc3QgREVDTEFSQVRJT05fTkFNRV9SRUdfRVhQID0gL14oPzxuYW1lPlteQFxcc10rKUAvO1xuXG4vKipcbiAqIFRoZSBsb2NrZmlsZXMgdGhhdCBpZGVudGlmeSBhIHBhY2thZ2UgbWFuYWdlciwgaW4gdGhlIG9yZGVyIHRoZXkgZGVjaWRlIGEgdGllIG5vIG90aGVyIHNpZ25hbCBzZXR0bGVzLlxuICpcbiAqIEJvdGggYnVuIGxvY2tmaWxlIGZvcm1hdHMgbWFwIHRvIHRoZSBzYW1lIG1hbmFnZXIsIHNvIGEgcmVwbyBob2xkaW5nIGJvdGggaXMgb25lIGNsYWltYW50LCBub3QgdHdvLlxuICovXG5jb25zdCBMT0NLRklMRVM6IExvY2tmaWxlQ2xhaW1bXSA9IFtcbiAgeyBmaWxlTmFtZTogT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CdW5Mb2NrLCBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXIuQnVuIH0sXG4gIHsgZmlsZU5hbWU6IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuQnVuTG9ja2IsIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlci5CdW4gfSxcbiAgeyBmaWxlTmFtZTogT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5QbnBtTG9ja1lhbWwsIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlci5QbnBtIH0sXG4gIHsgZmlsZU5hbWU6IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuWWFybkxvY2ssIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlci5ZYXJuIH0sXG4gIHsgZmlsZU5hbWU6IE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuUGFja2FnZUxvY2tKc29uLCBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXIuTnBtIH1cbl07XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgbGVhZGluZyBgPG5hbWU+L2AgdG9rZW4gb2YgYW4gYG5wbV9jb25maWdfdXNlcl9hZ2VudGAgdmFsdWUuXG4gKi9cbmNvbnN0IFVTRVJfQUdFTlRfTkFNRV9SRUdfRVhQID0gL14oPzxuYW1lPlteL1xcc10rKVxcLy87XG5cbi8qKlxuICogVGhlIGRpc2FncmVlbWVudHMgYWxyZWFkeSByZXBvcnRlZCwgc28gYSBidWlsZCB0aGF0IHJlc29sdmVzIHRoZSBtYW5hZ2VyIG9uY2UgcGVyIHNjcmlwdCBob3AgYW5kIG9uY2VcbiAqIHBlciB0b29sIGludm9jYXRpb24gc3RpbGwgc2F5cyBpdCBvbmx5IG9uY2UuXG4gKi9cbmNvbnN0IHJlcG9ydGVkRGlzYWdyZWVtZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kQmluU2hpbX0uXG4gKi9cbmludGVyZmFjZSBGaW5kQmluU2hpbVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBsb2NhbGx5LWluc3RhbGxlZCB0b29sLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbG9ja2ZpbGUgYW5kIHRoZSBwYWNrYWdlIG1hbmFnZXIgd2hvc2UgcHJlc2VuY2UgaXQgcHJvdmVzLlxuICovXG5pbnRlcmZhY2UgTG9ja2ZpbGVDbGFpbSB7XG4gIC8qKlxuICAgKiBUaGUgbG9ja2ZpbGUgbmFtZSwgYXMgaXQgYXBwZWFycyBhdCB0aGUgcHJvamVjdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHdyaXRlcyB0aGlzIGxvY2tmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXI6IFBhY2thZ2VNYW5hZ2VyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlUGFja2FnZU1hbmFnZXJ9LlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZVBhY2thZ2VNYW5hZ2VyUGFyYW1zIHtcbiAgLyoqXG4gICAqIEV2ZXJ5IHBhY2thZ2UgbWFuYWdlciBjbGFpbWluZyB0aGUgdHJlZSBcdTIwMTQgdGhlIGxvY2tmaWxlIG93bmVycyBpbiB7QGxpbmsgTE9DS0ZJTEVTfSBvcmRlciwgcGx1cyB0aGVcbiAgICogZGVjbGFyZWQgb25lLiBPbmx5IGNvbnN1bHRlZCB3aGVuIG5vdGhpbmcgaXMgZGVjbGFyZWQsIGluIHdoaWNoIGNhc2UgaXQgaG9sZHMgZXhhY3RseSB0aGUgbG9ja2ZpbGVcbiAgICogb3duZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xhaW1hbnRzOiBSZWFkb25seVNldDxQYWNrYWdlTWFuYWdlcj47XG5cbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIG1hbmFnZXIgZGVjbGFyZWQgaW4gYHBhY2thZ2UuanNvbmAsIG9yIGBudWxsYCB3aGVuIG5vbmUgaXMuXG4gICAqL1xuICByZWFkb25seSBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyOiBudWxsIHwgUGFja2FnZU1hbmFnZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHdhcm5BYm91dFNldmVyYWxDbGFpbWFudHN9LlxuICovXG5pbnRlcmZhY2UgV2FybkFib3V0U2V2ZXJhbENsYWltYW50c1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIGRlY2xhcmVkIGluIGBwYWNrYWdlLmpzb25gLCBvciBgbnVsbGAgd2hlbiBub25lIGlzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVjbGFyZWRQYWNrYWdlTWFuYWdlcjogbnVsbCB8IFBhY2thZ2VNYW5hZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9ja2ZpbGVzIGFjdHVhbGx5IGZvdW5kIGF0IHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBsb2NrZmlsZXM6IHJlYWRvbmx5IExvY2tmaWxlQ2xhaW1bXTtcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0aGF0IHdvbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlcjtcblxuICAvKipcbiAgICogVGhlIHByb2plY3Qgcm9vdCB0aGUgbG9ja2ZpbGVzIHdlcmUgZm91bmQgaW4uXG4gICAqL1xuICByZWFkb25seSByb290OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIHBhY2thZ2UgbWFuYWdlciBvdXQgb2YgdGhlIGBwYWNrYWdlTWFuYWdlcmAgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYCwgd2hpY2ggaXNcbiAqIGNvcmVwYWNrJ3MgYDxuYW1lPkA8dmVyc2lvbj5gIGRlY2xhcmF0aW9uLlxuICpcbiAqIEBwYXJhbSByb290IC0gVGhlIHByb2plY3Qgcm9vdCB0byByZWFkIGBwYWNrYWdlLmpzb25gIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZGVjbGFyZWQgcGFja2FnZSBtYW5hZ2VyLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBubyBgcGFja2FnZS5qc29uYCwgaXQgY2Fubm90IGJlIHBhcnNlZCxcbiAqIHRoZSBmaWVsZCBpcyBhYnNlbnQgb3IgbWFsZm9ybWVkLCBvciBpdCBuYW1lcyBhIG1hbmFnZXIgd2UgZG8gbm90IGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tUGFja2FnZUpzb24ocm9vdDogc3RyaW5nKTogbnVsbCB8IFBhY2thZ2VNYW5hZ2VyIHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gam9pbihyb290LCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLlBhY2thZ2VKc29uKTtcblxuICBpZiAoIWV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbjtcblxuICB0cnkge1xuICAgIHBhY2thZ2VKc29uID0gcmVhZEpzb25TeW5jPFBhY2thZ2VKc29uPihwYWNrYWdlSnNvblBhdGgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gcGFja2FnZUpzb24ucGFja2FnZU1hbmFnZXI7XG5cbiAgaWYgKCFkZWNsYXJhdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBERUNMQVJBVElPTl9OQU1FX1JFR19FWFAuZXhlYyhkZWNsYXJhdGlvbik7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlUGFja2FnZU1hbmFnZXJOYW1lKGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICduYW1lJykpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBwYWNrYWdlIG1hbmFnZXIgb3V0IG9mIGBucG1fY29uZmlnX3VzZXJfYWdlbnRgLCB3aGljaCBldmVyeSBtYW5hZ2VyIHNldHMgZm9yIHRoZSBwcm9jZXNzZXMgaXRcbiAqIGxhdW5jaGVzLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkZXRlY3RlZCBwYWNrYWdlIG1hbmFnZXIsIG9yIGBudWxsYCB3aGVuIHRoZSB2YXJpYWJsZSBpcyBhYnNlbnQsIG1hbGZvcm1lZCwgb3IgbmFtZXMgYVxuICogcnVudGltZSB3ZSBkbyBub3QgaGFuZGxlLlxuICovXG5mdW5jdGlvbiBkZXRlY3RQYWNrYWdlTWFuYWdlckZyb21Vc2VyQWdlbnQoKTogbnVsbCB8IFBhY2thZ2VNYW5hZ2VyIHtcbiAgY29uc3QgdXNlckFnZW50ID0gcHJvY2Vzcy5lbnZbJ25wbV9jb25maWdfdXNlcl9hZ2VudCddO1xuXG4gIGlmICghdXNlckFnZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IFVTRVJfQUdFTlRfTkFNRV9SRUdfRVhQLmV4ZWModXNlckFnZW50KTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gcGFyc2VQYWNrYWdlTWFuYWdlck5hbWUoZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ25hbWUnKSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGBub2RlX21vZHVsZXMvLmJpbmAgc2hpbSBmb3IgYSB0b29sLCB3YWxraW5nIHVwIGZyb20gdGhlIHByb2plY3Qgcm9vdCB0aHJvdWdoIGFuY2VzdG9yIGZvbGRlcnMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbG9va3VwLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHNoaW0sIG9yIGBudWxsYCB3aGVuIG5vbmUgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBmaW5kQmluU2hpbShwYXJhbXM6IEZpbmRCaW5TaGltUGFyYW1zKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHsgY3dkLCB0b29sIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBnZXRTaGltQ2FuZGlkYXRlcyh0b29sKTtcbiAgbGV0IGN1cnJlbnRGb2xkZXIgPSBnZXRTdGFydEZvbGRlcihjd2QpO1xuXG4gIHdoaWxlIChcbiAgICBjdXJyZW50Rm9sZGVyICE9PSBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIgYXMgc3RyaW5nXG4gICAgJiYgY3VycmVudEZvbGRlciAhPT0gT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Sb290Rm9sZGVyIGFzIHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICBjb25zdCBzaGltUGF0aCA9IGpvaW4oY3VycmVudEZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5Ob2RlTW9kdWxlcywgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CaW4sIGNhbmRpZGF0ZSk7XG4gICAgICBpZiAoZXhpc3RzU3luYyhzaGltUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHNoaW1QYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRGb2xkZXIgPSBkaXJuYW1lKGN1cnJlbnRGb2xkZXIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb21tYW5kIHBhcnRzIHRoYXQgcnVuIGEgb25lLW9mZiB0b29sIHRocm91Z2ggdGhlIG1hbmFnZXIgdGhhdCBvd25zIHRoZSB0cmVlLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBUaGUgY3VycmVudCB3b3JraW5nIGZvbGRlciB0byByZXNvbHZlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBwYXJ0cywgZS5nLiBgWydidW4nLCAneCddYC4gVGhlIHRvb2wgbmFtZSBpcyBhcHBlbmRlZCBieSB0aGUgY2FsbGVyLlxuICovXG5mdW5jdGlvbiBnZXRQYWNrYWdlTWFuYWdlckV4ZWNDb21tYW5kKGN3ZD86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSBnZXRQYWNrYWdlTWFuYWdlcihjd2QpO1xuXG4gIHN3aXRjaCAocGFja2FnZU1hbmFnZXIpIHtcbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLkJ1bjoge1xuICAgICAgcmV0dXJuIFsnYnVuJywgJ3gnXTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5OcG06IHtcbiAgICAgIHJldHVybiBbJ25weCddO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLlBucG06IHtcbiAgICAgIHJldHVybiBbJ3BucG0nLCAnZXhlYyddO1xuICAgIH1cbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLllhcm46IHtcbiAgICAgIHJldHVybiBbJ3lhcm4nLCAnZXhlYyddO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhoYXVzdGl2ZSBzd2l0Y2ggZ3VhcmQ7IGRlZmF1bHQgYnJhbmNoIGlzIHVucmVhY2hhYmxlLiAqL1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBhc3NlcnROZXZlcihwYWNrYWdlTWFuYWdlcik7XG4gICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG4vKipcbiAqIExpc3RzIHRoZSBzaGltIGZpbGUgbmFtZXMgdG8gdHJ5IGZvciBhIHRvb2wsIG1vc3Qgc3BlY2lmaWMgZmlyc3QuXG4gKlxuICogT24gV2luZG93cyBvbmx5IHRoZSBleGVjdXRhYmxlIGZvcm1zIGFyZSB2aWFibGU6IG5wbSBhbmQgcG5wbSBhbHNvIHdyaXRlIGEgc2hpbSB3aXRoIG5vIGV4dGVuc2lvbiwgYnV0XG4gKiB0aGF0IG9uZSBpcyBhIGBzaGAgc2NyaXB0IHRoYXQgYGNtZC5leGVgIGNhbm5vdCBydW4sIHNvIGl0IG11c3QgbmV2ZXIgYmUgY2hvc2VuIHRoZXJlLlxuICpcbiAqIEBwYXJhbSB0b29sIC0gVGhlIG5hbWUgb2YgdGhlIGxvY2FsbHktaW5zdGFsbGVkIHRvb2wuXG4gKiBAcmV0dXJucyBUaGUgY2FuZGlkYXRlIGZpbGUgbmFtZXMsIGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCBiZSB0cmllZC5cbiAqL1xuZnVuY3Rpb24gZ2V0U2hpbUNhbmRpZGF0ZXModG9vbDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBbdG9vbF07XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAke3Rvb2x9JHtPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkNvbW1hbmRFeHRlbnNpb259YCxcbiAgICBgJHt0b29sfSR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5FeGVFeHRlbnNpb259YCxcbiAgICBgJHt0b29sfSR7T2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5CYXRFeHRlbnNpb259YFxuICBdO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBmb2xkZXIgdG8gc3RhcnQgYSBsb29rdXAgZnJvbSBcdTIwMTQgdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZXJlIGlzIG9uZSwgdGhlIHdvcmtpbmcgZm9sZGVyXG4gKiBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIGN3ZCAtIFRoZSBjdXJyZW50IHdvcmtpbmcgZm9sZGVyIHRvIHJlc29sdmUgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBmb2xkZXIgdG8gc3RhcnQgZnJvbS5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhcnRGb2xkZXIoY3dkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldFJvb3RGb2xkZXIoY3dkKSA/PyB0b1Bvc2l4UGF0aChjd2QgPz8gcHJvY2Vzcy5jd2QoKSk7XG59XG5cbi8qKlxuICogTWFwcyB0aGUgYmFyZSBuYW1lIGEgbG9ja2ZpbGUgZGVjbGFyYXRpb24gb3IgYSB1c2VyIGFnZW50IHJlcG9ydHMgb250byB0aGUgcGFja2FnZSBtYW5hZ2VyIGl0IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHJlcG9ydGVkIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgbWF0Y2hpbmcgcGFja2FnZSBtYW5hZ2VyLCBvciBgbnVsbGAgZm9yIGEgcnVudGltZSB3ZSBkbyBub3QgaGFuZGxlLlxuICovXG5mdW5jdGlvbiBwYXJzZVBhY2thZ2VNYW5hZ2VyTmFtZShuYW1lOiBzdHJpbmcpOiBudWxsIHwgUGFja2FnZU1hbmFnZXIge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLkJ1biBhcyBzdHJpbmc6IHtcbiAgICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5CdW47XG4gICAgfVxuICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuTnBtIGFzIHN0cmluZzoge1xuICAgICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLk5wbTtcbiAgICB9XG4gICAgY2FzZSBQYWNrYWdlTWFuYWdlci5QbnBtIGFzIHN0cmluZzoge1xuICAgICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLlBucG07XG4gICAgfVxuICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuWWFybiBhcyBzdHJpbmc6IHtcbiAgICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5ZYXJuO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgd2lubmVyIG91dCBvZiB0aGUgY29sbGVjdGVkIHNpZ25hbHMsIHBlciB0aGUgb3JkZXIgZG9jdW1lbnRlZCBvbiB7QGxpbmsgZ2V0UGFja2FnZU1hbmFnZXJ9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHJlc29sdXRpb24uXG4gKiBAcmV0dXJucyBUaGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVBhY2thZ2VNYW5hZ2VyKHBhcmFtczogUmVzb2x2ZVBhY2thZ2VNYW5hZ2VyUGFyYW1zKTogUGFja2FnZU1hbmFnZXIge1xuICBjb25zdCB7XG4gICAgY2xhaW1hbnRzLFxuICAgIGRlY2xhcmVkUGFja2FnZU1hbmFnZXJcbiAgfSA9IHBhcmFtcztcblxuICBpZiAoZGVjbGFyZWRQYWNrYWdlTWFuYWdlciAhPT0gbnVsbCkge1xuICAgIHJldHVybiBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyO1xuICB9XG5cbiAgY29uc3QgbG9ja2ZpbGVPd25lcnMgPSBbLi4uY2xhaW1hbnRzXTtcbiAgY29uc3QgW2ZpcnN0TG9ja2ZpbGVPd25lcl0gPSBsb2NrZmlsZU93bmVycztcblxuICBpZiAoZmlyc3RMb2NrZmlsZU93bmVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tVXNlckFnZW50KCkgPz8gUGFja2FnZU1hbmFnZXIuTnBtO1xuICB9XG5cbiAgaWYgKGxvY2tmaWxlT3duZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBmaXJzdExvY2tmaWxlT3duZXI7XG4gIH1cblxuICBjb25zdCBsYXVuY2hlZEJ5ID0gZGV0ZWN0UGFja2FnZU1hbmFnZXJGcm9tVXNlckFnZW50KCk7XG5cbiAgaWYgKGxhdW5jaGVkQnkgIT09IG51bGwgJiYgY2xhaW1hbnRzLmhhcyhsYXVuY2hlZEJ5KSkge1xuICAgIHJldHVybiBsYXVuY2hlZEJ5O1xuICB9XG5cbiAgcmV0dXJuIGZpcnN0TG9ja2ZpbGVPd25lcjtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHRoYXQgc2V2ZXJhbCBwYWNrYWdlIG1hbmFnZXJzIGNsYWltIHRoZSBzYW1lIHRyZWUsIG5hbWluZyBlYWNoIGxvY2tmaWxlIGZvdW5kLCB3aGF0XG4gKiBgcGFja2FnZS5qc29uYCBkZWNsYXJlcywgYW5kIHdoaWNoIG1hbmFnZXIgd29uLlxuICpcbiAqIGBjb25zb2xlLndhcm5gIHJhdGhlciB0aGFuIGEgZGVidWcgY2hhbm5lbDogdGhpcyBydW5zIGluIHRoZSBidWlsZCdzIG93biB0ZXJtaW5hbCwgYW5kIGEgbWVzc2FnZSBub2JvZHlcbiAqIHNlZXMgdW5sZXNzIHRoZXkgYWxyZWFkeSBzdXNwZWN0IHRoZSBwcm9ibGVtIGxlYXZlcyB0aGUgZmFpbHVyZSBleGFjdGx5IGFzIHNpbGVudCBhcyBpdCB3YXMuIEVhY2hcbiAqIGRpc3RpbmN0IG1lc3NhZ2UgaXMgcHJpbnRlZCBvbmNlLCBiZWNhdXNlIHRoZSBtYW5hZ2VyIGlzIHJlc29sdmVkIG9uY2UgcGVyIHBhY2thZ2Utc2NyaXB0IGhvcCBhbmQgb25jZVxuICogcGVyIHRvb2wgaW52b2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXBvcnQuXG4gKi9cbmZ1bmN0aW9uIHdhcm5BYm91dFNldmVyYWxDbGFpbWFudHMocGFyYW1zOiBXYXJuQWJvdXRTZXZlcmFsQ2xhaW1hbnRzUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBkZWNsYXJlZFBhY2thZ2VNYW5hZ2VyLFxuICAgIGxvY2tmaWxlcyxcbiAgICBwYWNrYWdlTWFuYWdlcixcbiAgICByb290XG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbG9ja2ZpbGVOYW1lcyA9IGxvY2tmaWxlcy5tYXAoKGxvY2tmaWxlKSA9PiBsb2NrZmlsZS5maWxlTmFtZSkuam9pbignLCAnKTtcbiAgY29uc3QgYWR2aWNlID0gZGVjbGFyZWRQYWNrYWdlTWFuYWdlciA9PT0gbnVsbFxuICAgID8gJ0RlbGV0ZSB0aGUgc3RhbGUgbG9ja2ZpbGUsIG9yIGRlY2xhcmUgXCJwYWNrYWdlTWFuYWdlclwiIGluIHBhY2thZ2UuanNvbiwgdG8gc2V0dGxlIGl0LidcbiAgICA6ICdEZWxldGUgdGhlIHN0YWxlIGxvY2tmaWxlIHRvIHNldHRsZSBpdC4nO1xuICBjb25zdCBtZXNzYWdlID0gW1xuICAgIGBvYnNpZGlhbi1kZXYtdXRpbHM6IG1vcmUgdGhhbiBvbmUgcGFja2FnZSBtYW5hZ2VyIGNsYWltcyAke3Jvb3R9LmAsXG4gICAgYExvY2tmaWxlczogJHtsb2NrZmlsZU5hbWVzfS5gLFxuICAgIGBwYWNrYWdlLmpzb24gXCJwYWNrYWdlTWFuYWdlclwiOiAke2RlY2xhcmVkUGFja2FnZU1hbmFnZXIgPz8gJ25vdCBzZXQnfS5gLFxuICAgIGBVc2luZyAke3BhY2thZ2VNYW5hZ2VyfS5gLFxuICAgIGFkdmljZVxuICBdLmpvaW4oJyAnKTtcblxuICBpZiAocmVwb3J0ZWREaXNhZ3JlZW1lbnRzLmhhcyhtZXNzYWdlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJlcG9ydGVkRGlzYWdyZWVtZW50cy5hZGQobWVzc2FnZSk7XG4gIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBLHFCQUEyQjtBQUMzQiwwQkFBb0I7QUFFcEIsa0JBSU87QUFDUCxxQkFBdUM7QUFDdkMseUJBQTRCO0FBQzVCLGtCQUE2QjtBQUM3QiwyQ0FBMEM7QUFDMUMsa0JBQThCO0FBS3ZCLElBQUssaUJBQUwsa0JBQUtBLG9CQUFMO0FBSUwsRUFBQUEsZ0JBQUEsU0FBTTtBQUtOLEVBQUFBLGdCQUFBLFNBQU07QUFLTixFQUFBQSxnQkFBQSxVQUFPO0FBS1AsRUFBQUEsZ0JBQUEsVUFBTztBQW5CRyxTQUFBQTtBQUFBLEdBQUE7QUFnRUwsU0FBUyxrQkFBa0IsS0FBOEI7QUFDOUQsUUFBTSxPQUFPLGVBQWUsR0FBRztB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