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
@@ -0,0 +1,112 @@
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 {
45
+ findManifestMember,
46
+ getManifestObject,
47
+ getStringValue,
48
+ toReportNode
49
+ } from "./manifest-helpers.mjs";
50
+ const MESSAGE_ID_CONTAINS_OBSIDIAN = "nameContainsObsidian";
51
+ const MESSAGE_ID_CONTAINS_PLUGIN = "nameContainsPlugin";
52
+ const MESSAGE_ID_INVALID_CHARACTERS = "nameInvalidCharacters";
53
+ const ALLOWED_NAME_CHARACTERS = /^[A-Za-z0-9 \-+()]+$/;
54
+ const OBSIDIAN_VARIANTS = /obsi|sidian/i;
55
+ const manifestName = {
56
+ create(context) {
57
+ return {
58
+ Document(node) {
59
+ const manifestObject = getManifestObject(node);
60
+ if (!manifestObject) {
61
+ return;
62
+ }
63
+ const member = findManifestMember(manifestObject, "name");
64
+ if (!member) {
65
+ return;
66
+ }
67
+ const name = getStringValue(member.value);
68
+ if (name === null) {
69
+ return;
70
+ }
71
+ const reportNode = toReportNode(member.value);
72
+ if (OBSIDIAN_VARIANTS.test(name)) {
73
+ context.report({
74
+ messageId: MESSAGE_ID_CONTAINS_OBSIDIAN,
75
+ node: reportNode
76
+ });
77
+ }
78
+ if (name.toLowerCase().includes("plugin")) {
79
+ context.report({
80
+ messageId: MESSAGE_ID_CONTAINS_PLUGIN,
81
+ node: reportNode
82
+ });
83
+ }
84
+ if (!ALLOWED_NAME_CHARACTERS.test(name)) {
85
+ context.report({
86
+ messageId: MESSAGE_ID_INVALID_CHARACTERS,
87
+ node: reportNode
88
+ });
89
+ }
90
+ }
91
+ };
92
+ },
93
+ meta: {
94
+ docs: {
95
+ description: "Enforce the Community directory's constraints on a plugin's `manifest.json` `name`"
96
+ },
97
+ messages: {
98
+ [MESSAGE_ID_CONTAINS_OBSIDIAN]: "The `name` must not contain `Obsidian` or a variant of it. It is implied by the context of the plugin directory.",
99
+ [MESSAGE_ID_CONTAINS_PLUGIN]: "The `name` must not contain `Plugin`.",
100
+ [MESSAGE_ID_INVALID_CHARACTERS]: "The `name` must use Basic Latin only, with hyphens, plus signs and parentheses the only permitted punctuation."
101
+ },
102
+ schema: [],
103
+ type: "problem"
104
+ }
105
+ };
106
+ export {
107
+ MESSAGE_ID_CONTAINS_OBSIDIAN,
108
+ MESSAGE_ID_CONTAINS_PLUGIN,
109
+ MESSAGE_ID_INVALID_CHARACTERS,
110
+ manifestName
111
+ };
112
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9tYW5pZmVzdC1uYW1lLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IG1hbmlmZXN0LW5hbWVcbiAqXG4gKiBFbmZvcmNlcyB0aGUgQ29tbXVuaXR5IGRpcmVjdG9yeSdzIGNvbnN0cmFpbnRzIG9uIGEgcGx1Z2luJ3MgYG1hbmlmZXN0Lmpzb25gIGBuYW1lYDogbm8gYE9ic2lkaWFuYCBvclxuICogaXRzIHZhcmlhbnRzLCBubyBgUGx1Z2luYCwgYW5kIEJhc2ljIExhdGluIG9ubHkgd2l0aCBoeXBoZW5zLCBwbHVzIHNpZ25zIGFuZCBwYXJlbnRoZXNlcyB0aGUgc29sZVxuICogcGVybWl0dGVkIHB1bmN0dWF0aW9uLlxuICpcbiAqIFJ1bnMgb24gdGhlIGBAZXNsaW50L2pzb25gIGBqc29uL2pzb25gIGxhbmd1YWdlOyBzZWUgYG1hbmlmZXN0LWhlbHBlcnMudHNgIGZvciB3aHkgdGhlIEFTVCBpcyBNb21vYVxuICogcmF0aGVyIHRoYW4gRVNUcmVlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7XG4gIGZpbmRNYW5pZmVzdE1lbWJlcixcbiAgZ2V0TWFuaWZlc3RPYmplY3QsXG4gIGdldFN0cmluZ1ZhbHVlLFxuICB0b1JlcG9ydE5vZGVcbn0gZnJvbSAnLi9tYW5pZmVzdC1oZWxwZXJzLnRzJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gdGhlIG5hbWUgY29udGFpbnMgYE9ic2lkaWFuYCBvciBvbmUgb2YgaXRzIHZhcmlhbnRzLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9DT05UQUlOU19PQlNJRElBTiA9ICduYW1lQ29udGFpbnNPYnNpZGlhbic7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIHRoZSBuYW1lIGNvbnRhaW5zIGBQbHVnaW5gLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9DT05UQUlOU19QTFVHSU4gPSAnbmFtZUNvbnRhaW5zUGx1Z2luJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gdGhlIG5hbWUgaG9sZHMgYSBjaGFyYWN0ZXIgb3V0c2lkZSBCYXNpYyBMYXRpbiwgb3IgcHVuY3R1YXRpb24gdGhlIGRpcmVjdG9yeSByZWplY3RzLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9JTlZBTElEX0NIQVJBQ1RFUlMgPSAnbmFtZUludmFsaWRDaGFyYWN0ZXJzJztcblxuLyoqXG5UaGUgb25seSBjaGFyYWN0ZXJzIGEgcGx1Z2luIG5hbWUgbWF5IGhvbGQ6IEJhc2ljIExhdGluIGxldHRlcnMgYW5kIGRpZ2l0cywgc3BhY2VzLCBhbmQgdGhlIHRocmVlXG5wZXJtaXR0ZWQgcHVuY3R1YXRpb24gbWFya3MuXG4gKi9cbmNvbnN0IEFMTE9XRURfTkFNRV9DSEFSQUNURVJTID0gL15bQS1aYS16MC05IFxcLSsoKV0rJC87XG5cbi8qKlxuYE9ic2lkaWFuYCBhbmQgdGhlIHR3byB2YXJpYW50cyB0aGUgZGlyZWN0b3J5IGFsc28gcmVqZWN0cy5cbiAqL1xuY29uc3QgT0JTSURJQU5fVkFSSUFOVFMgPSAvb2JzaXxzaWRpYW4vaTtcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBlbmZvcmNpbmcgdGhlIENvbW11bml0eSBkaXJlY3RvcnkncyBjb25zdHJhaW50cyBvbiBhIHBsdWdpbidzIGBtYW5pZmVzdC5qc29uYCBgbmFtZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5pZmVzdE5hbWU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgRG9jdW1lbnQobm9kZTogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBjb25zdCBtYW5pZmVzdE9iamVjdCA9IGdldE1hbmlmZXN0T2JqZWN0KG5vZGUpO1xuXG4gICAgICAgIGlmICghbWFuaWZlc3RPYmplY3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZW1iZXIgPSBmaW5kTWFuaWZlc3RNZW1iZXIobWFuaWZlc3RPYmplY3QsICduYW1lJyk7XG5cbiAgICAgICAgaWYgKCFtZW1iZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYW1lID0gZ2V0U3RyaW5nVmFsdWUobWVtYmVyLnZhbHVlKTtcblxuICAgICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcG9ydE5vZGUgPSB0b1JlcG9ydE5vZGUobWVtYmVyLnZhbHVlKTtcblxuICAgICAgICBpZiAoT0JTSURJQU5fVkFSSUFOVFMudGVzdChuYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9DT05UQUlOU19PQlNJRElBTixcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3BsdWdpbicpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0NPTlRBSU5TX1BMVUdJTixcbiAgICAgICAgICAgIG5vZGU6IHJlcG9ydE5vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQUxMT1dFRF9OQU1FX0NIQVJBQ1RFUlMudGVzdChuYW1lKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9JTlZBTElEX0NIQVJBQ1RFUlMsXG4gICAgICAgICAgICBub2RlOiByZXBvcnROb2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdFbmZvcmNlIHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5XFwncyBjb25zdHJhaW50cyBvbiBhIHBsdWdpblxcJ3MgYG1hbmlmZXN0Lmpzb25gIGBuYW1lYCdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF9DT05UQUlOU19PQlNJRElBTl06ICdUaGUgYG5hbWVgIG11c3Qgbm90IGNvbnRhaW4gYE9ic2lkaWFuYCBvciBhIHZhcmlhbnQgb2YgaXQuIEl0IGlzIGltcGxpZWQgYnkgdGhlIGNvbnRleHQgb2YgdGhlIHBsdWdpbiBkaXJlY3RvcnkuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0NPTlRBSU5TX1BMVUdJTl06ICdUaGUgYG5hbWVgIG11c3Qgbm90IGNvbnRhaW4gYFBsdWdpbmAuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0lOVkFMSURfQ0hBUkFDVEVSU106ICdUaGUgYG5hbWVgIG11c3QgdXNlIEJhc2ljIExhdGluIG9ubHksIHdpdGggaHlwaGVucywgcGx1cyBzaWducyBhbmQgcGFyZW50aGVzZXMgdGhlIG9ubHkgcGVybWl0dGVkIHB1bmN0dWF0aW9uLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUtBLE1BQU0sK0JBQStCO0FBS3JDLE1BQU0sNkJBQTZCO0FBS25DLE1BQU0sZ0NBQWdDO0FBTTdDLE1BQU0sMEJBQTBCO0FBS2hDLE1BQU0sb0JBQW9CO0FBS25CLE1BQU0sZUFBZ0M7QUFBQSxFQUMzQyxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxTQUFTLE1BQXFCO0FBQzVCLGNBQU0saUJBQWlCLGtCQUFrQixJQUFJO0FBRTdDLFlBQUksQ0FBQyxnQkFBZ0I7QUFDbkI7QUFBQSxRQUNGO0FBRUEsY0FBTSxTQUFTLG1CQUFtQixnQkFBZ0IsTUFBTTtBQUV4RCxZQUFJLENBQUMsUUFBUTtBQUNYO0FBQUEsUUFDRjtBQUVBLGNBQU0sT0FBTyxlQUFlLE9BQU8sS0FBSztBQUV4QyxZQUFJLFNBQVMsTUFBTTtBQUNqQjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLGFBQWEsYUFBYSxPQUFPLEtBQUs7QUFFNUMsWUFBSSxrQkFBa0IsS0FBSyxJQUFJLEdBQUc7QUFDaEMsa0JBQVEsT0FBTztBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFFQSxZQUFJLEtBQUssWUFBWSxFQUFFLFNBQVMsUUFBUSxHQUFHO0FBQ3pDLGtCQUFRLE9BQU87QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBRUEsWUFBSSxDQUFDLHdCQUF3QixLQUFLLElBQUksR0FBRztBQUN2QyxrQkFBUSxPQUFPO0FBQUEsWUFDYixXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsNEJBQTRCLEdBQUc7QUFBQSxNQUNoQyxDQUFDLDBCQUEwQixHQUFHO0FBQUEsTUFDOUIsQ0FBQyw2QkFBNkIsR0FBRztBQUFBLElBQ25DO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,45 @@
1
+ /// <reference path="../../../library.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint rule: manifest-schema
6
+ *
7
+ * Validates the structure of a plugin's root `manifest.json` - the required keys, the keys the Community
8
+ * directory does not allow, duplicate keys, each value's type, and the shape of `fundingUrl`.
9
+ *
10
+ * Runs on the `@eslint/json` `json/json` language; see `manifest-helpers.ts` for why the AST is Momoa
11
+ * rather than ESTree.
12
+ */
13
+ import type { Rule } from 'eslint';
14
+ /**
15
+ Message ID reported when a key the Community directory does not allow is present.
16
+ */
17
+ export declare const MESSAGE_ID_DISALLOWED_KEY = "disallowedKey";
18
+ /**
19
+ Message ID reported when the same key appears more than once.
20
+ */
21
+ export declare const MESSAGE_ID_DUPLICATE_KEY = "duplicateKey";
22
+ /**
23
+ Message ID reported when `fundingUrl` is an empty string, an empty object, or an object with an empty value.
24
+ */
25
+ export declare const MESSAGE_ID_EMPTY_FUNDING_URL = "emptyFundingUrl";
26
+ /**
27
+ Message ID reported when a value has the wrong type.
28
+ */
29
+ export declare const MESSAGE_ID_INVALID_TYPE = "invalidType";
30
+ /**
31
+ Message ID reported when a `fundingUrl` object holds a non-string value.
32
+ */
33
+ export declare const MESSAGE_ID_INVALID_FUNDING_URL = "invalidFundingUrl";
34
+ /**
35
+ Message ID reported when a required key is missing.
36
+ */
37
+ export declare const MESSAGE_ID_MISSING_KEY = "missingKey";
38
+ /**
39
+ Message ID reported when the manifest's top-level value is not an object.
40
+ */
41
+ export declare const MESSAGE_ID_MUST_BE_ROOT_OBJECT = "mustBeRootObject";
42
+ /**
43
+ * ESLint rule validating the structure of a plugin's root `manifest.json`.
44
+ */
45
+ export declare const manifestSchema: Rule.RuleModule;
@@ -0,0 +1,217 @@
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 {
45
+ findManifestMember,
46
+ getManifestObject,
47
+ getManifestStringValue,
48
+ getMemberKey,
49
+ getStringValue,
50
+ JSON_NODE_TYPE_BOOLEAN,
51
+ JSON_NODE_TYPE_OBJECT,
52
+ JSON_NODE_TYPE_STRING,
53
+ toReportNode,
54
+ UNRELEASED_VERSION
55
+ } from "./manifest-helpers.mjs";
56
+ const MESSAGE_ID_DISALLOWED_KEY = "disallowedKey";
57
+ const MESSAGE_ID_DUPLICATE_KEY = "duplicateKey";
58
+ const MESSAGE_ID_EMPTY_FUNDING_URL = "emptyFundingUrl";
59
+ const MESSAGE_ID_INVALID_TYPE = "invalidType";
60
+ const MESSAGE_ID_INVALID_FUNDING_URL = "invalidFundingUrl";
61
+ const MESSAGE_ID_MISSING_KEY = "missingKey";
62
+ const MESSAGE_ID_MUST_BE_ROOT_OBJECT = "mustBeRootObject";
63
+ const ALWAYS_REQUIRED_KEYS = ["author", "description", "id", "isDesktopOnly", "name", "version"];
64
+ const KEY_NODE_TYPES = /* @__PURE__ */ new Map([
65
+ ["author", [JSON_NODE_TYPE_STRING]],
66
+ ["authorUrl", [JSON_NODE_TYPE_STRING]],
67
+ ["description", [JSON_NODE_TYPE_STRING]],
68
+ ["fundingUrl", [JSON_NODE_TYPE_OBJECT, JSON_NODE_TYPE_STRING]],
69
+ ["id", [JSON_NODE_TYPE_STRING]],
70
+ ["isDesktopOnly", [JSON_NODE_TYPE_BOOLEAN]],
71
+ ["minAppVersion", [JSON_NODE_TYPE_STRING]],
72
+ ["name", [JSON_NODE_TYPE_STRING]],
73
+ ["version", [JSON_NODE_TYPE_STRING]]
74
+ ]);
75
+ const manifestSchema = {
76
+ create(context) {
77
+ return {
78
+ Document(node) {
79
+ const manifestObject = getManifestObject(node);
80
+ if (!manifestObject) {
81
+ context.report({
82
+ messageId: MESSAGE_ID_MUST_BE_ROOT_OBJECT,
83
+ node: toReportNode(node)
84
+ });
85
+ return;
86
+ }
87
+ reportDuplicateKeys({ context, manifestObject });
88
+ reportMissingKeys({ context, manifestObject });
89
+ reportKeyValues({ context, manifestObject });
90
+ }
91
+ };
92
+ },
93
+ meta: {
94
+ docs: {
95
+ description: "Validate the structure of a plugin's root `manifest.json`"
96
+ },
97
+ messages: {
98
+ [MESSAGE_ID_DISALLOWED_KEY]: "The `{{ key }}` property is not allowed in the manifest.",
99
+ [MESSAGE_ID_DUPLICATE_KEY]: "The `{{ key }}` property is defined more than once.",
100
+ [MESSAGE_ID_EMPTY_FUNDING_URL]: "The `fundingUrl` property cannot be empty. Remove it instead when no donations are accepted.",
101
+ [MESSAGE_ID_INVALID_FUNDING_URL]: "The `fundingUrl` object must only contain string values.",
102
+ [MESSAGE_ID_INVALID_TYPE]: "The `{{ key }}` property must be of type `{{ expectedType }}`, but was `{{ actualType }}`.",
103
+ [MESSAGE_ID_MISSING_KEY]: "The manifest is missing the required `{{ key }}` property.",
104
+ [MESSAGE_ID_MUST_BE_ROOT_OBJECT]: "The manifest must be a single JSON object."
105
+ },
106
+ schema: [],
107
+ type: "problem"
108
+ }
109
+ };
110
+ function reportDuplicateKeys(params) {
111
+ const { context, manifestObject } = params;
112
+ const seenKeys = /* @__PURE__ */ new Set();
113
+ for (const member of manifestObject.members) {
114
+ const key = getMemberKey(member);
115
+ if (seenKeys.has(key)) {
116
+ context.report({
117
+ data: { key },
118
+ messageId: MESSAGE_ID_DUPLICATE_KEY,
119
+ node: toReportNode(member.name)
120
+ });
121
+ } else {
122
+ seenKeys.add(key);
123
+ }
124
+ }
125
+ }
126
+ function reportFundingUrl(params) {
127
+ const { context, member } = params;
128
+ const stringValue = getStringValue(member.value);
129
+ if (stringValue !== null) {
130
+ if (stringValue === "") {
131
+ context.report({
132
+ messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
133
+ node: toReportNode(member.value)
134
+ });
135
+ }
136
+ return;
137
+ }
138
+ const fundingObject = member.value;
139
+ if (fundingObject.members.length === 0) {
140
+ context.report({
141
+ messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
142
+ node: toReportNode(fundingObject)
143
+ });
144
+ return;
145
+ }
146
+ for (const fundingMember of fundingObject.members) {
147
+ const fundingValue = getStringValue(fundingMember.value);
148
+ if (fundingValue === null) {
149
+ context.report({
150
+ messageId: MESSAGE_ID_INVALID_FUNDING_URL,
151
+ node: toReportNode(fundingMember.value)
152
+ });
153
+ } else if (fundingValue === "") {
154
+ context.report({
155
+ messageId: MESSAGE_ID_EMPTY_FUNDING_URL,
156
+ node: toReportNode(fundingMember.value)
157
+ });
158
+ }
159
+ }
160
+ }
161
+ function reportKeyValues(params) {
162
+ const { context, manifestObject } = params;
163
+ for (const member of manifestObject.members) {
164
+ const key = getMemberKey(member);
165
+ const expectedNodeTypes = KEY_NODE_TYPES.get(key);
166
+ if (!expectedNodeTypes) {
167
+ context.report({
168
+ data: { key },
169
+ messageId: MESSAGE_ID_DISALLOWED_KEY,
170
+ node: toReportNode(member.name)
171
+ });
172
+ continue;
173
+ }
174
+ if (!expectedNodeTypes.includes(member.value.type)) {
175
+ context.report({
176
+ data: {
177
+ actualType: member.value.type,
178
+ expectedType: expectedNodeTypes.join(" or "),
179
+ key
180
+ },
181
+ messageId: MESSAGE_ID_INVALID_TYPE,
182
+ node: toReportNode(member.value)
183
+ });
184
+ continue;
185
+ }
186
+ if (key === "fundingUrl") {
187
+ reportFundingUrl({ context, member });
188
+ }
189
+ }
190
+ }
191
+ function reportMissingKeys(params) {
192
+ const { context, manifestObject } = params;
193
+ const requiredKeys = [...ALWAYS_REQUIRED_KEYS];
194
+ if (getManifestStringValue(manifestObject, "version") !== UNRELEASED_VERSION) {
195
+ requiredKeys.push("minAppVersion");
196
+ }
197
+ for (const key of requiredKeys) {
198
+ if (!findManifestMember(manifestObject, key)) {
199
+ context.report({
200
+ data: { key },
201
+ messageId: MESSAGE_ID_MISSING_KEY,
202
+ node: toReportNode(manifestObject)
203
+ });
204
+ }
205
+ }
206
+ }
207
+ export {
208
+ MESSAGE_ID_DISALLOWED_KEY,
209
+ MESSAGE_ID_DUPLICATE_KEY,
210
+ MESSAGE_ID_EMPTY_FUNDING_URL,
211
+ MESSAGE_ID_INVALID_FUNDING_URL,
212
+ MESSAGE_ID_INVALID_TYPE,
213
+ MESSAGE_ID_MISSING_KEY,
214
+ MESSAGE_ID_MUST_BE_ROOT_OBJECT,
215
+ manifestSchema
216
+ };
217
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9tYW5pZmVzdC1zY2hlbWEudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbWFuaWZlc3Qtc2NoZW1hXG4gKlxuICogVmFsaWRhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgYSBwbHVnaW4ncyByb290IGBtYW5pZmVzdC5qc29uYCAtIHRoZSByZXF1aXJlZCBrZXlzLCB0aGUga2V5cyB0aGUgQ29tbXVuaXR5XG4gKiBkaXJlY3RvcnkgZG9lcyBub3QgYWxsb3csIGR1cGxpY2F0ZSBrZXlzLCBlYWNoIHZhbHVlJ3MgdHlwZSwgYW5kIHRoZSBzaGFwZSBvZiBgZnVuZGluZ1VybGAuXG4gKlxuICogUnVucyBvbiB0aGUgYEBlc2xpbnQvanNvbmAgYGpzb24vanNvbmAgbGFuZ3VhZ2U7IHNlZSBgbWFuaWZlc3QtaGVscGVycy50c2AgZm9yIHdoeSB0aGUgQVNUIGlzIE1vbW9hXG4gKiByYXRoZXIgdGhhbiBFU1RyZWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHR5cGUge1xuICBKc29uTWVtYmVyTm9kZSxcbiAgSnNvbk9iamVjdE5vZGVcbn0gZnJvbSAnLi9tYW5pZmVzdC1oZWxwZXJzLnRzJztcblxuaW1wb3J0IHtcbiAgZmluZE1hbmlmZXN0TWVtYmVyLFxuICBnZXRNYW5pZmVzdE9iamVjdCxcbiAgZ2V0TWFuaWZlc3RTdHJpbmdWYWx1ZSxcbiAgZ2V0TWVtYmVyS2V5LFxuICBnZXRTdHJpbmdWYWx1ZSxcbiAgSlNPTl9OT0RFX1RZUEVfQk9PTEVBTixcbiAgSlNPTl9OT0RFX1RZUEVfT0JKRUNULFxuICBKU09OX05PREVfVFlQRV9TVFJJTkcsXG4gIHRvUmVwb3J0Tm9kZSxcbiAgVU5SRUxFQVNFRF9WRVJTSU9OXG59IGZyb20gJy4vbWFuaWZlc3QtaGVscGVycy50cyc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEga2V5IHRoZSBDb21tdW5pdHkgZGlyZWN0b3J5IGRvZXMgbm90IGFsbG93IGlzIHByZXNlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX0RJU0FMTE9XRURfS0VZID0gJ2Rpc2FsbG93ZWRLZXknO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgc2FtZSBrZXkgYXBwZWFycyBtb3JlIHRoYW4gb25jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfRFVQTElDQVRFX0tFWSA9ICdkdXBsaWNhdGVLZXknO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBgZnVuZGluZ1VybGAgaXMgYW4gZW1wdHkgc3RyaW5nLCBhbiBlbXB0eSBvYmplY3QsIG9yIGFuIG9iamVjdCB3aXRoIGFuIGVtcHR5IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9FTVBUWV9GVU5ESU5HX1VSTCA9ICdlbXB0eUZ1bmRpbmdVcmwnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIHZhbHVlIGhhcyB0aGUgd3JvbmcgdHlwZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfSU5WQUxJRF9UWVBFID0gJ2ludmFsaWRUeXBlJztcblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSBgZnVuZGluZ1VybGAgb2JqZWN0IGhvbGRzIGEgbm9uLXN0cmluZyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfSU5WQUxJRF9GVU5ESU5HX1VSTCA9ICdpbnZhbGlkRnVuZGluZ1VybCc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgcmVxdWlyZWQga2V5IGlzIG1pc3NpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEX01JU1NJTkdfS0VZID0gJ21pc3NpbmdLZXknO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiB0aGUgbWFuaWZlc3QncyB0b3AtbGV2ZWwgdmFsdWUgaXMgbm90IGFuIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfTVVTVF9CRV9ST09UX09CSkVDVCA9ICdtdXN0QmVSb290T2JqZWN0JztcblxuLyoqXG5UaGUga2V5cyBldmVyeSBtYW5pZmVzdCBtdXN0IGNhcnJ5LCB3aGV0aGVyIG9yIG5vdCB0aGUgcGx1Z2luIGhhcyBiZWVuIHJlbGVhc2VkLlxuICovXG5jb25zdCBBTFdBWVNfUkVRVUlSRURfS0VZUyA9IFsnYXV0aG9yJywgJ2Rlc2NyaXB0aW9uJywgJ2lkJywgJ2lzRGVza3RvcE9ubHknLCAnbmFtZScsICd2ZXJzaW9uJ107XG5cbi8qKlxuVGhlIE1vbW9hIG5vZGUgdHlwZSBlYWNoIGFsbG93ZWQga2V5J3MgdmFsdWUgbWF5IGhhdmUuIEEga2V5IGFic2VudCBmcm9tIHRoaXMgbWFwIGlzIG5vdCBhbGxvd2VkIGF0IGFsbC5cbiAqL1xuY29uc3QgS0VZX05PREVfVFlQRVMgPSBuZXcgTWFwPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+KFtcbiAgWydhdXRob3InLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsnYXV0aG9yVXJsJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ2Rlc2NyaXB0aW9uJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ2Z1bmRpbmdVcmwnLCBbSlNPTl9OT0RFX1RZUEVfT0JKRUNULCBKU09OX05PREVfVFlQRV9TVFJJTkddXSxcbiAgWydpZCcsIFtKU09OX05PREVfVFlQRV9TVFJJTkddXSxcbiAgWydpc0Rlc2t0b3BPbmx5JywgW0pTT05fTk9ERV9UWVBFX0JPT0xFQU5dXSxcbiAgWydtaW5BcHBWZXJzaW9uJywgW0pTT05fTk9ERV9UWVBFX1NUUklOR11dLFxuICBbJ25hbWUnLCBbSlNPTl9OT0RFX1RZUEVfU1RSSU5HXV0sXG4gIFsndmVyc2lvbicsIFtKU09OX05PREVfVFlQRV9TVFJJTkddXVxuXSk7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgdmFsaWRhdGluZyB0aGUgc3RydWN0dXJlIG9mIGEgcGx1Z2luJ3Mgcm9vdCBgbWFuaWZlc3QuanNvbmAuXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5pZmVzdFNjaGVtYTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICBEb2N1bWVudChub2RlOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0T2JqZWN0ID0gZ2V0TWFuaWZlc3RPYmplY3Qobm9kZSk7XG5cbiAgICAgICAgaWYgKCFtYW5pZmVzdE9iamVjdCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NVVNUX0JFX1JPT1RfT0JKRUNULFxuICAgICAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKG5vZGUpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwb3J0RHVwbGljYXRlS2V5cyh7IGNvbnRleHQsIG1hbmlmZXN0T2JqZWN0IH0pO1xuICAgICAgICByZXBvcnRNaXNzaW5nS2V5cyh7IGNvbnRleHQsIG1hbmlmZXN0T2JqZWN0IH0pO1xuICAgICAgICByZXBvcnRLZXlWYWx1ZXMoeyBjb250ZXh0LCBtYW5pZmVzdE9iamVjdCB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdWYWxpZGF0ZSB0aGUgc3RydWN0dXJlIG9mIGEgcGx1Z2luXFwncyByb290IGBtYW5pZmVzdC5qc29uYCdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF9ESVNBTExPV0VEX0tFWV06ICdUaGUgYHt7IGtleSB9fWAgcHJvcGVydHkgaXMgbm90IGFsbG93ZWQgaW4gdGhlIG1hbmlmZXN0LicsXG4gICAgICBbTUVTU0FHRV9JRF9EVVBMSUNBVEVfS0VZXTogJ1RoZSBge3sga2V5IH19YCBwcm9wZXJ0eSBpcyBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlLicsXG4gICAgICBbTUVTU0FHRV9JRF9FTVBUWV9GVU5ESU5HX1VSTF06ICdUaGUgYGZ1bmRpbmdVcmxgIHByb3BlcnR5IGNhbm5vdCBiZSBlbXB0eS4gUmVtb3ZlIGl0IGluc3RlYWQgd2hlbiBubyBkb25hdGlvbnMgYXJlIGFjY2VwdGVkLicsXG4gICAgICBbTUVTU0FHRV9JRF9JTlZBTElEX0ZVTkRJTkdfVVJMXTogJ1RoZSBgZnVuZGluZ1VybGAgb2JqZWN0IG11c3Qgb25seSBjb250YWluIHN0cmluZyB2YWx1ZXMuJyxcbiAgICAgIFtNRVNTQUdFX0lEX0lOVkFMSURfVFlQRV06ICdUaGUgYHt7IGtleSB9fWAgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGB7eyBleHBlY3RlZFR5cGUgfX1gLCBidXQgd2FzIGB7eyBhY3R1YWxUeXBlIH19YC4nLFxuICAgICAgW01FU1NBR0VfSURfTUlTU0lOR19LRVldOiAnVGhlIG1hbmlmZXN0IGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIGB7eyBrZXkgfX1gIHByb3BlcnR5LicsXG4gICAgICBbTUVTU0FHRV9JRF9NVVNUX0JFX1JPT1RfT0JKRUNUXTogJ1RoZSBtYW5pZmVzdCBtdXN0IGJlIGEgc2luZ2xlIEpTT04gb2JqZWN0LidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlcG9ydEZ1bmRpbmdVcmx9LlxuICovXG5pbnRlcmZhY2UgUmVwb3J0RnVuZGluZ1VybFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBgZnVuZGluZ1VybGAgbWVtYmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtYmVyOiBKc29uTWVtYmVyTm9kZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUgbWFuaWZlc3QgcmVwb3J0aW5nIGhlbHBlcnMuXG4gKi9cbmludGVyZmFjZSBSZXBvcnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIEVTTGludCBydWxlIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgbWFuaWZlc3QncyByb290IG9iamVjdCBub2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3RPYmplY3Q6IEpzb25PYmplY3ROb2RlO1xufVxuXG4vKipcbiAqIFJlcG9ydHMgZXZlcnkga2V5IHRoYXQgYXBwZWFycyBtb3JlIHRoYW4gb25jZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXBvcnRQYXJhbXN9LlxuICovXG5mdW5jdGlvbiByZXBvcnREdXBsaWNhdGVLZXlzKHBhcmFtczogUmVwb3J0UGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgY29udGV4dCwgbWFuaWZlc3RPYmplY3QgfSA9IHBhcmFtcztcbiAgY29uc3Qgc2VlbktleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBtYW5pZmVzdE9iamVjdC5tZW1iZXJzKSB7XG4gICAgY29uc3Qga2V5ID0gZ2V0TWVtYmVyS2V5KG1lbWJlcik7XG5cbiAgICBpZiAoc2VlbktleXMuaGFzKGtleSkpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YTogeyBrZXkgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0RVUExJQ0FURV9LRVksXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShtZW1iZXIubmFtZSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWVuS2V5cy5hZGQoa2V5KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXBvcnRzIHRoZSB3YXlzIGEgYGZ1bmRpbmdVcmxgIGNhbiBiZSBlbXB0eSBvciBob2xkIGEgbm9uLXN0cmluZyB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXBvcnRGdW5kaW5nVXJsUGFyYW1zfS5cbiAqL1xuZnVuY3Rpb24gcmVwb3J0RnVuZGluZ1VybChwYXJhbXM6IFJlcG9ydEZ1bmRpbmdVcmxQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjb250ZXh0LCBtZW1iZXIgfSA9IHBhcmFtcztcblxuICBjb25zdCBzdHJpbmdWYWx1ZSA9IGdldFN0cmluZ1ZhbHVlKG1lbWJlci52YWx1ZSk7XG5cbiAgaWYgKHN0cmluZ1ZhbHVlICE9PSBudWxsKSB7XG4gICAgaWYgKHN0cmluZ1ZhbHVlID09PSAnJykge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfRU1QVFlfRlVORElOR19VUkwsXG4gICAgICAgIG5vZGU6IHRvUmVwb3J0Tm9kZShtZW1iZXIudmFsdWUpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmdW5kaW5nT2JqZWN0ID0gbWVtYmVyLnZhbHVlIGFzIEpzb25PYmplY3ROb2RlO1xuXG4gIGlmIChmdW5kaW5nT2JqZWN0Lm1lbWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0VNUFRZX0ZVTkRJTkdfVVJMLFxuICAgICAgbm9kZTogdG9SZXBvcnROb2RlKGZ1bmRpbmdPYmplY3QpXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCBmdW5kaW5nTWVtYmVyIG9mIGZ1bmRpbmdPYmplY3QubWVtYmVycykge1xuICAgIGNvbnN0IGZ1bmRpbmdWYWx1ZSA9IGdldFN0cmluZ1ZhbHVlKGZ1bmRpbmdNZW1iZXIudmFsdWUpO1xuXG4gICAgaWYgKGZ1bmRpbmdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURfSU5WQUxJRF9GVU5ESU5HX1VSTCxcbiAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKGZ1bmRpbmdNZW1iZXIudmFsdWUpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGZ1bmRpbmdWYWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0VNUFRZX0ZVTkRJTkdfVVJMLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUoZnVuZGluZ01lbWJlci52YWx1ZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgZXZlcnkga2V5IHRoYXQgaXMgbm90IGFsbG93ZWQsIGFuZCBldmVyeSBhbGxvd2VkIGtleSB3aG9zZSB2YWx1ZSBoYXMgdGhlIHdyb25nIHR5cGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgUmVwb3J0UGFyYW1zfS5cbiAqL1xuZnVuY3Rpb24gcmVwb3J0S2V5VmFsdWVzKHBhcmFtczogUmVwb3J0UGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgY29udGV4dCwgbWFuaWZlc3RPYmplY3QgfSA9IHBhcmFtcztcblxuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBtYW5pZmVzdE9iamVjdC5tZW1iZXJzKSB7XG4gICAgY29uc3Qga2V5ID0gZ2V0TWVtYmVyS2V5KG1lbWJlcik7XG4gICAgY29uc3QgZXhwZWN0ZWROb2RlVHlwZXMgPSBLRVlfTk9ERV9UWVBFUy5nZXQoa2V5KTtcblxuICAgIGlmICghZXhwZWN0ZWROb2RlVHlwZXMpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YTogeyBrZXkgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0RJU0FMTE9XRURfS0VZLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUobWVtYmVyLm5hbWUpXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghZXhwZWN0ZWROb2RlVHlwZXMuaW5jbHVkZXMobWVtYmVyLnZhbHVlLnR5cGUpKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBhY3R1YWxUeXBlOiBtZW1iZXIudmFsdWUudHlwZSxcbiAgICAgICAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkTm9kZVR5cGVzLmpvaW4oJyBvciAnKSxcbiAgICAgICAgICBrZXlcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX0lOVkFMSURfVFlQRSxcbiAgICAgICAgbm9kZTogdG9SZXBvcnROb2RlKG1lbWJlci52YWx1ZSlcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2Z1bmRpbmdVcmwnKSB7XG4gICAgICByZXBvcnRGdW5kaW5nVXJsKHsgY29udGV4dCwgbWVtYmVyIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgZXZlcnkgcmVxdWlyZWQga2V5IHRoZSBtYW5pZmVzdCBpcyBtaXNzaW5nLlxuICpcbiAqIGBtaW5BcHBWZXJzaW9uYCBpcyByZXF1aXJlZCBvbmx5IG9uY2UgdGhlIHBsdWdpbiBoYXMgYmVlbiByZWxlYXNlZC4gYHVwZGF0ZVZlcnNpb25JbkZpbGVzRm9yUGx1Z2luYFxuICogd3JpdGVzIGl0IGF0IHJlbGVhc2UgdGltZSwgc28gYSByZXBvIHN0aWxsIGF0IHZlcnNpb24gYDAuMC4wYCBsZWdpdGltYXRlbHkgaGFzIG5vbmUgYW5kIG11c3Qgbm90IGJlXG4gKiByZXBvcnRlZCBmb3IgaXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgUmVwb3J0UGFyYW1zfS5cbiAqL1xuZnVuY3Rpb24gcmVwb3J0TWlzc2luZ0tleXMocGFyYW1zOiBSZXBvcnRQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBjb250ZXh0LCBtYW5pZmVzdE9iamVjdCB9ID0gcGFyYW1zO1xuICBjb25zdCByZXF1aXJlZEtleXMgPSBbLi4uQUxXQVlTX1JFUVVJUkVEX0tFWVNdO1xuXG4gIGlmIChnZXRNYW5pZmVzdFN0cmluZ1ZhbHVlKG1hbmlmZXN0T2JqZWN0LCAndmVyc2lvbicpICE9PSBVTlJFTEVBU0VEX1ZFUlNJT04pIHtcbiAgICByZXF1aXJlZEtleXMucHVzaCgnbWluQXBwVmVyc2lvbicpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgcmVxdWlyZWRLZXlzKSB7XG4gICAgaWYgKCFmaW5kTWFuaWZlc3RNZW1iZXIobWFuaWZlc3RPYmplY3QsIGtleSkpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YTogeyBrZXkgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lEX01JU1NJTkdfS0VZLFxuICAgICAgICBub2RlOiB0b1JlcG9ydE5vZGUobWFuaWZlc3RPYmplY3QpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUtBLE1BQU0sNEJBQTRCO0FBS2xDLE1BQU0sMkJBQTJCO0FBS2pDLE1BQU0sK0JBQStCO0FBS3JDLE1BQU0sMEJBQTBCO0FBS2hDLE1BQU0saUNBQWlDO0FBS3ZDLE1BQU0seUJBQXlCO0FBSy9CLE1BQU0saUNBQWlDO0FBSzlDLE1BQU0sdUJBQXVCLENBQUMsVUFBVSxlQUFlLE1BQU0saUJBQWlCLFFBQVEsU0FBUztBQUsvRixN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
@@ -41,6 +41,10 @@ function ensureBrowserProcess() {
41
41
  })();
42
42
  })();
43
43
 
44
+ import { manifestDescription } from "./manifest-description.mjs";
45
+ import { manifestId } from "./manifest-id.mjs";
46
+ import { manifestName } from "./manifest-name.mjs";
47
+ import { manifestSchema } from "./manifest-schema.mjs";
44
48
  import { noAsyncCallbackToUnsafeReturn } from "./no-async-callback-to-unsafe-return.mjs";
45
49
  import { noUntrustedInputEvents } from "./no-untrusted-input-events.mjs";
46
50
  import { noUnusedParamsMembers } from "./no-unused-params-members.mjs";
@@ -53,6 +57,10 @@ import { requireMethodTemplate } from "./require-method-template.mjs";
53
57
  import { requireSuperCall } from "./require-super-call.mjs";
54
58
  const obsidianDevUtilsPlugin = {
55
59
  rules: {
60
+ "manifest-description": manifestDescription,
61
+ "manifest-id": manifestId,
62
+ "manifest-name": manifestName,
63
+ "manifest-schema": manifestSchema,
56
64
  "no-async-callback-to-unsafe-return": noAsyncCallbackToUnsafeReturn,
57
65
  "no-untrusted-input-events": noUntrustedInputEvents,
58
66
  "no-unused-params-members": noUnusedParamsMembers,
@@ -68,4 +76,4 @@ const obsidianDevUtilsPlugin = {
68
76
  export {
69
77
  obsidianDevUtilsPlugin
70
78
  };
71
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHBsdWdpbiBmb3IgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzLlxuICovXG5pbXBvcnQgdHlwZSB7IEVTTGludCB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IG5vQXN5bmNDYWxsYmFja1RvVW5zYWZlUmV0dXJuIH0gZnJvbSAnLi9uby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuLnRzJztcbmltcG9ydCB7IG5vVW50cnVzdGVkSW5wdXRFdmVudHMgfSBmcm9tICcuL25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMudHMnO1xuaW1wb3J0IHsgbm9VbnVzZWRQYXJhbXNNZW1iZXJzIH0gZnJvbSAnLi9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMnO1xuaW1wb3J0IHsgbm9Vc2VkVW5kZXJzY29yZVZhcmlhYmxlcyB9IGZyb20gJy4vbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcy50cyc7XG5pbXBvcnQgeyBwYXJhbXNPcHRpb25zTmFtZU1hdGNoIH0gZnJvbSAnLi9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoLnRzJztcbmltcG9ydCB7IHByZWZlck5vb3BBc3luYyB9IGZyb20gJy4vcHJlZmVyLW5vb3AtYXN5bmMudHMnO1xuaW1wb3J0IHsgcmVhZG9ubHlQYXJhbXNPcHRpb25zUmVzdWx0TWVtYmVycyB9IGZyb20gJy4vcmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMudHMnO1xuaW1wb3J0IHsgcmVxdWlyZUNvbXBvbmVudFN1ZmZpeCB9IGZyb20gJy4vcmVxdWlyZS1jb21wb25lbnQtc3VmZml4LnRzJztcbmltcG9ydCB7IHJlcXVpcmVNZXRob2RUZW1wbGF0ZSB9IGZyb20gJy4vcmVxdWlyZS1tZXRob2QtdGVtcGxhdGUudHMnO1xuaW1wb3J0IHsgcmVxdWlyZVN1cGVyQ2FsbCB9IGZyb20gJy4vcmVxdWlyZS1zdXBlci1jYWxsLnRzJztcblxuLyoqXG4gKiBFU0xpbnQgcGx1Z2luIGJ1bmRsaW5nIGV2ZXJ5IGBvYnNpZGlhbi1kZXYtdXRpbHNgIGN1c3RvbSBydWxlLCByZWdpc3RlcmVkIHVuZGVyIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlV0aWxzUGx1Z2luOiBFU0xpbnQuUGx1Z2luID0ge1xuICBydWxlczoge1xuICAgICduby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuJzogbm9Bc3luY0NhbGxiYWNrVG9VbnNhZmVSZXR1cm4sXG4gICAgJ25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMnOiBub1VudHJ1c3RlZElucHV0RXZlbnRzLFxuICAgICduby11bnVzZWQtcGFyYW1zLW1lbWJlcnMnOiBub1VudXNlZFBhcmFtc01lbWJlcnMsXG4gICAgJ25vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMnOiBub1VzZWRVbmRlcnNjb3JlVmFyaWFibGVzLFxuICAgICdwYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoJzogcGFyYW1zT3B0aW9uc05hbWVNYXRjaCxcbiAgICAncHJlZmVyLW5vb3AtYXN5bmMnOiBwcmVmZXJOb29wQXN5bmMsXG4gICAgJ3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJzogcmVhZG9ubHlQYXJhbXNPcHRpb25zUmVzdWx0TWVtYmVycyxcbiAgICAncmVxdWlyZS1jb21wb25lbnQtc3VmZml4JzogcmVxdWlyZUNvbXBvbmVudFN1ZmZpeCxcbiAgICAncmVxdWlyZS1tZXRob2QtdGVtcGxhdGUnOiByZXF1aXJlTWV0aG9kVGVtcGxhdGUsXG4gICAgJ3JlcXVpcmUtc3VwZXItY2FsbCc6IHJlcXVpcmVTdXBlckNhbGxcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxTQUFTLHFDQUFxQztBQUM5QyxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDBDQUEwQztBQUNuRCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLHdCQUF3QjtBQUsxQixNQUFNLHlCQUF3QztBQUFBLEVBQ25ELE9BQU87QUFBQSxJQUNMLHNDQUFzQztBQUFBLElBQ3RDLDZCQUE2QjtBQUFBLElBQzdCLDRCQUE0QjtBQUFBLElBQzVCLGdDQUFnQztBQUFBLElBQ2hDLDZCQUE2QjtBQUFBLElBQzdCLHFCQUFxQjtBQUFBLElBQ3JCLDBDQUEwQztBQUFBLElBQzFDLDRCQUE0QjtBQUFBLElBQzVCLDJCQUEyQjtBQUFBLElBQzNCLHNCQUFzQjtBQUFBLEVBQ3hCO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
79
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHBsdWdpbiBmb3IgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzLlxuICovXG5pbXBvcnQgdHlwZSB7IEVTTGludCB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IG1hbmlmZXN0RGVzY3JpcHRpb24gfSBmcm9tICcuL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0SWQgfSBmcm9tICcuL21hbmlmZXN0LWlkLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0TmFtZSB9IGZyb20gJy4vbWFuaWZlc3QtbmFtZS50cyc7XG5pbXBvcnQgeyBtYW5pZmVzdFNjaGVtYSB9IGZyb20gJy4vbWFuaWZlc3Qtc2NoZW1hLnRzJztcbmltcG9ydCB7IG5vQXN5bmNDYWxsYmFja1RvVW5zYWZlUmV0dXJuIH0gZnJvbSAnLi9uby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuLnRzJztcbmltcG9ydCB7IG5vVW50cnVzdGVkSW5wdXRFdmVudHMgfSBmcm9tICcuL25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMudHMnO1xuaW1wb3J0IHsgbm9VbnVzZWRQYXJhbXNNZW1iZXJzIH0gZnJvbSAnLi9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMnO1xuaW1wb3J0IHsgbm9Vc2VkVW5kZXJzY29yZVZhcmlhYmxlcyB9IGZyb20gJy4vbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcy50cyc7XG5pbXBvcnQgeyBwYXJhbXNPcHRpb25zTmFtZU1hdGNoIH0gZnJvbSAnLi9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoLnRzJztcbmltcG9ydCB7IHByZWZlck5vb3BBc3luYyB9IGZyb20gJy4vcHJlZmVyLW5vb3AtYXN5bmMudHMnO1xuaW1wb3J0IHsgcmVhZG9ubHlQYXJhbXNPcHRpb25zUmVzdWx0TWVtYmVycyB9IGZyb20gJy4vcmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMudHMnO1xuaW1wb3J0IHsgcmVxdWlyZUNvbXBvbmVudFN1ZmZpeCB9IGZyb20gJy4vcmVxdWlyZS1jb21wb25lbnQtc3VmZml4LnRzJztcbmltcG9ydCB7IHJlcXVpcmVNZXRob2RUZW1wbGF0ZSB9IGZyb20gJy4vcmVxdWlyZS1tZXRob2QtdGVtcGxhdGUudHMnO1xuaW1wb3J0IHsgcmVxdWlyZVN1cGVyQ2FsbCB9IGZyb20gJy4vcmVxdWlyZS1zdXBlci1jYWxsLnRzJztcblxuLyoqXG4gKiBFU0xpbnQgcGx1Z2luIGJ1bmRsaW5nIGV2ZXJ5IGBvYnNpZGlhbi1kZXYtdXRpbHNgIGN1c3RvbSBydWxlLCByZWdpc3RlcmVkIHVuZGVyIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlV0aWxzUGx1Z2luOiBFU0xpbnQuUGx1Z2luID0ge1xuICBydWxlczoge1xuICAgICdtYW5pZmVzdC1kZXNjcmlwdGlvbic6IG1hbmlmZXN0RGVzY3JpcHRpb24sXG4gICAgJ21hbmlmZXN0LWlkJzogbWFuaWZlc3RJZCxcbiAgICAnbWFuaWZlc3QtbmFtZSc6IG1hbmlmZXN0TmFtZSxcbiAgICAnbWFuaWZlc3Qtc2NoZW1hJzogbWFuaWZlc3RTY2hlbWEsXG4gICAgJ25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4nOiBub0FzeW5jQ2FsbGJhY2tUb1Vuc2FmZVJldHVybixcbiAgICAnbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyc6IG5vVW50cnVzdGVkSW5wdXRFdmVudHMsXG4gICAgJ25vLXVudXNlZC1wYXJhbXMtbWVtYmVycyc6IG5vVW51c2VkUGFyYW1zTWVtYmVycyxcbiAgICAnbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXMsXG4gICAgJ3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiBwYXJhbXNPcHRpb25zTmFtZU1hdGNoLFxuICAgICdwcmVmZXItbm9vcC1hc3luYyc6IHByZWZlck5vb3BBc3luYyxcbiAgICAncmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMnOiByZWFkb25seVBhcmFtc09wdGlvbnNSZXN1bHRNZW1iZXJzLFxuICAgICdyZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnOiByZXF1aXJlQ29tcG9uZW50U3VmZml4LFxuICAgICdyZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZSc6IHJlcXVpcmVNZXRob2RUZW1wbGF0ZSxcbiAgICAncmVxdWlyZS1zdXBlci1jYWxsJzogcmVxdWlyZVN1cGVyQ2FsbFxuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMscUNBQXFDO0FBQzlDLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsaUNBQWlDO0FBQzFDLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsdUJBQXVCO0FBQ2hDLFNBQVMsMENBQTBDO0FBQ25ELFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsd0JBQXdCO0FBSzFCLE1BQU0seUJBQXdDO0FBQUEsRUFDbkQsT0FBTztBQUFBLElBQ0wsd0JBQXdCO0FBQUEsSUFDeEIsZUFBZTtBQUFBLElBQ2YsaUJBQWlCO0FBQUEsSUFDakIsbUJBQW1CO0FBQUEsSUFDbkIsc0NBQXNDO0FBQUEsSUFDdEMsNkJBQTZCO0FBQUEsSUFDN0IsNEJBQTRCO0FBQUEsSUFDNUIsZ0NBQWdDO0FBQUEsSUFDaEMsNkJBQTZCO0FBQUEsSUFDN0IscUJBQXFCO0FBQUEsSUFDckIsMENBQTBDO0FBQUEsSUFDMUMsNEJBQTRCO0FBQUEsSUFDNUIsMkJBQTJCO0FBQUEsSUFDM0Isc0JBQXNCO0FBQUEsRUFDeEI7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -51,6 +51,7 @@ import {
51
51
  } from "../../path.mjs";
52
52
  import { assertNonNullable } from "../../type-guards.mjs";
53
53
  import { ObsidianDevUtilsRepoPaths } from "../obsidian-dev-utils-repo-paths.mjs";
54
+ import { resolveToolCommand } from "../package-manager.mjs";
54
55
  import {
55
56
  execFromRoot,
56
57
  getRootFolder,
@@ -80,9 +81,9 @@ async function lint(options) {
80
81
  );
81
82
  }
82
83
  const targets = paths?.length ? paths : [ObsidianPluginRepoPaths.CurrentFolder];
83
- await execFromRoot(["npx", "eslint", ...shouldFix ? ["--fix"] : [], { batchedArguments: targets }]);
84
+ await execFromRoot([...resolveToolCommand({ tool: "eslint" }), ...shouldFix ? ["--fix"] : [], { batchedArguments: targets }]);
84
85
  }
85
86
  export {
86
87
  lint
87
88
  };
88
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbnRpbmcgdXRpbGl0eSBmb3IgRVNMaW50IGNvbmZpZ3VyYXRpb24gd2l0aCBzdXBwb3J0IGZvciBhdXRvbWF0aWMgZml4aW5nLlxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gdG8gbGludCBmaWxlcyBiYXNlZCBvbiB0aGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gZGVmaW5lZCBpbiBgZXNsaW50LmNvbmZpZy50c2AuXG4gKiBJdCBjYW4gYXV0b21hdGljYWxseSBmaXggbGludGluZyBpc3N1ZXMgaWYgc3BlY2lmaWVkLCBhbmQgbG9ncyByZXN1bHRzIHRvIHRoZSBjb25zb2xlLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNwIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi9wbHVnaW4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0Rm9sZGVyTmFtZSxcbiAgam9pblxufSBmcm9tICcuLi8uLi9wYXRoLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBsaW50fSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCB0aGUgcHJvamVjdCB3aXRoIEVTTGludC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBwYXRocywgc2hvdWxkRml4IH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCBjb25maWdGaWxlcyA9IFtcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Fc2xpbnRDb25maWdKcyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Fc2xpbnRDb25maWdNanMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRXNsaW50Q29uZmlnQ2pzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ1RzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Fc2xpbnRDb25maWdDdHNcbiAgXTtcblxuICBjb25zdCBkb2VzQ29uZmlnRmlsZUV4aXN0ID0gY29uZmlnRmlsZXMuc29tZSgoY29uZmlnRmlsZSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBjb25maWdGaWxlIH0pO1xuICAgIHJldHVybiBleGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKTtcbiAgfSk7XG5cbiAgaWYgKCFkb2VzQ29uZmlnRmlsZUV4aXN0KSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ0VTTGludDpsaW50JykoJ0VTTGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGNvbnN0IHBhY2thZ2VGb2xkZXIgPSBnZXRSb290Rm9sZGVyKGdldEZvbGRlck5hbWUoaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUocGFja2FnZUZvbGRlciwgJ1BhY2thZ2UgZm9sZGVyIG5vdCBmb3VuZCcpO1xuICAgIGF3YWl0IGNwKFxuICAgICAgam9pbihwYWNrYWdlRm9sZGVyLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3RUZW1wbGF0ZXMsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRXNsaW50Q29uZmlnTXRzKSxcbiAgICAgIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRXNsaW50Q29uZmlnTXRzIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoIGlzIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtPYnNpZGlhblBsdWdpblJlcG9QYXRocy5DdXJyZW50Rm9sZGVyXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnB4JywgJ2VzbGludCcsIC4uLihzaG91bGRGaXggPyBbJy0tZml4J10gOiBbXSksIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU0EsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxVQUFVO0FBRW5CLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsK0JBQStCO0FBQ3hDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxpQ0FBaUM7QUFDMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBd0JQLGVBQXNCLEtBQUssU0FBc0M7QUFDL0QsUUFBTSxFQUFFLE9BQU8sVUFBVSxJQUFJLFdBQVcsQ0FBQztBQUN6QyxRQUFNLGNBQWM7QUFBQSxJQUNsQix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxFQUMxQjtBQUVBLFFBQU0sc0JBQXNCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDM0QsVUFBTSxpQkFBaUIsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsV0FBTyxXQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLHFCQUFxQjtBQUN4QixtQkFBZSxhQUFhLEVBQUUsaUVBQWlFO0FBQy9GLFVBQU0sZ0JBQWdCLGNBQWMsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQUNsRSxzQkFBa0IsZUFBZSwwQkFBMEI7QUFDM0QsVUFBTTtBQUFBLE1BQ0osS0FBSyxlQUFlLDBCQUEwQixlQUFlLDBCQUEwQixlQUFlO0FBQUEsTUFDdEcsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsZ0JBQWdCLENBQUM7QUFBQSxJQUMzRTtBQUFBLEVBQ0Y7QUFHQSxRQUFNLFVBQVUsT0FBTyxTQUFTLFFBQVEsQ0FBQyx3QkFBd0IsYUFBYTtBQUU5RSxRQUFNLGFBQWEsQ0FBQyxPQUFPLFVBQVUsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBSSxFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUN0RzsiLAogICJuYW1lcyI6IFtdCn0K
89
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbnRpbmcgdXRpbGl0eSBmb3IgRVNMaW50IGNvbmZpZ3VyYXRpb24gd2l0aCBzdXBwb3J0IGZvciBhdXRvbWF0aWMgZml4aW5nLlxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gdG8gbGludCBmaWxlcyBiYXNlZCBvbiB0aGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gZGVmaW5lZCBpbiBgZXNsaW50LmNvbmZpZy50c2AuXG4gKiBJdCBjYW4gYXV0b21hdGljYWxseSBmaXggbGludGluZyBpc3N1ZXMgaWYgc3BlY2lmaWVkLCBhbmQgbG9ncyByZXN1bHRzIHRvIHRoZSBjb25zb2xlLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNwIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi9wbHVnaW4vb2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0Rm9sZGVyTmFtZSxcbiAgam9pblxufSBmcm9tICcuLi8uLi9wYXRoLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIGdldFJvb3RGb2xkZXIsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJy4uL3Jvb3QudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBsaW50LiBJZiBvbWl0dGVkLCBsaW50cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBsaW50aW5nIGlzc3VlcyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaXg/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIExpbnQgdGhlIHByb2plY3Qgd2l0aCBFU0xpbnQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIExpbnRPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnQob3B0aW9ucz86IExpbnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGF0aHMsIHNob3VsZEZpeCB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3QgY29uZmlnRmlsZXMgPSBbXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRXNsaW50Q29uZmlnSnMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRXNsaW50Q29uZmlnTWpzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ0NqcyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Fc2xpbnRDb25maWdUcyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5Fc2xpbnRDb25maWdNdHMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRXNsaW50Q29uZmlnQ3RzXG4gIF07XG5cbiAgY29uc3QgZG9lc0NvbmZpZ0ZpbGVFeGlzdCA9IGNvbmZpZ0ZpbGVzLnNvbWUoKGNvbmZpZ0ZpbGUpID0+IHtcbiAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogY29uZmlnRmlsZSB9KTtcbiAgICByZXR1cm4gZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCk7XG4gIH0pO1xuXG4gIGlmICghZG9lc0NvbmZpZ0ZpbGVFeGlzdCkge1xuICAgIGdldExpYkRlYnVnZ2VyKCdFU0xpbnQ6bGludCcpKCdFU0xpbnQgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZC4gQ3JlYXRpbmcgZGVmYXVsdCBjb25maWcuLi4nKTtcbiAgICBjb25zdCBwYWNrYWdlRm9sZGVyID0gZ2V0Um9vdEZvbGRlcihnZXRGb2xkZXJOYW1lKGltcG9ydC5tZXRhLnVybCkpO1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHBhY2thZ2VGb2xkZXIsICdQYWNrYWdlIGZvbGRlciBub3QgZm91bmQnKTtcbiAgICBhd2FpdCBjcChcbiAgICAgIGpvaW4ocGFja2FnZUZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0VGVtcGxhdGVzLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyksXG4gICAgICByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkVzbGludENvbmZpZ010cyB9KVxuICAgICk7XG4gIH1cblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2VzbGludCcgfSksIC4uLihzaG91bGRGaXggPyBbJy0tZml4J10gOiBbXSksIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU0EsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxVQUFVO0FBRW5CLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsK0JBQStCO0FBQ3hDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxpQ0FBaUM7QUFDMUMsU0FBUywwQkFBMEI7QUFDbkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBd0JQLGVBQXNCLEtBQUssU0FBc0M7QUFDL0QsUUFBTSxFQUFFLE9BQU8sVUFBVSxJQUFJLFdBQVcsQ0FBQztBQUN6QyxRQUFNLGNBQWM7QUFBQSxJQUNsQix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxFQUMxQjtBQUVBLFFBQU0sc0JBQXNCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDM0QsVUFBTSxpQkFBaUIsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsV0FBTyxXQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLHFCQUFxQjtBQUN4QixtQkFBZSxhQUFhLEVBQUUsaUVBQWlFO0FBQy9GLFVBQU0sZ0JBQWdCLGNBQWMsY0FBYyxZQUFZLEdBQUcsQ0FBQztBQUNsRSxzQkFBa0IsZUFBZSwwQkFBMEI7QUFDM0QsVUFBTTtBQUFBLE1BQ0osS0FBSyxlQUFlLDBCQUEwQixlQUFlLDBCQUEwQixlQUFlO0FBQUEsTUFDdEcsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsZ0JBQWdCLENBQUM7QUFBQSxJQUMzRTtBQUFBLEVBQ0Y7QUFHQSxRQUFNLFVBQVUsT0FBTyxTQUFTLFFBQVEsQ0FBQyx3QkFBd0IsYUFBYTtBQUU5RSxRQUFNLGFBQWEsQ0FBQyxHQUFHLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDLEdBQUcsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBSSxFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUNoSTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -57,6 +57,7 @@ import {
57
57
  import { assertNonNullable } from "../../type-guards.mjs";
58
58
  import { getNonIgnoredFiles } from "../git.mjs";
59
59
  import { ObsidianDevUtilsRepoPaths } from "../obsidian-dev-utils-repo-paths.mjs";
60
+ import { resolveToolCommand } from "../package-manager.mjs";
60
61
  import {
61
62
  execFromRoot,
62
63
  getRootFolder,
@@ -94,12 +95,11 @@ async function lint(options) {
94
95
  );
95
96
  }
96
97
  const targets = paths?.length ? paths : [ObsidianPluginRepoPaths.CurrentFolder];
97
- await execFromRoot(["npx", "markdownlint-cli2", ...shouldFix ? ["--fix"] : [], { batchedArguments: targets }]);
98
+ await execFromRoot([...resolveToolCommand({ tool: "markdownlint-cli2" }), ...shouldFix ? ["--fix"] : [], { batchedArguments: targets }]);
98
99
  const rootFolder = getRootFolder() ?? process.cwd();
99
100
  const mdFiles = paths?.length ? paths.map((p) => relative(rootFolder, p).replaceAll("\\", "/") || p) : await getMarkdownFiles();
100
101
  await execFromRoot([
101
- "npx",
102
- "linkinator",
102
+ ...resolveToolCommand({ tool: "linkinator" }),
103
103
  "--retry",
104
104
  "--retry-errors",
105
105
  "--retry-errors-count",
@@ -130,4 +130,4 @@ async function getMarkdownFiles() {
130
130
  export {
131
131
  lint
132
132
  };
133
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbnQgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiB1c2luZyBgbWFya2Rvd25saW50LWNsaTJgIGFuZCBgbGlua2luYXRvcmAuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2Jcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uLy4uL2RlYnVnLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGdldEZvbGRlck5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IGdldE5vbklnbm9yZWRGaWxlcyB9IGZyb20gJy4uL2dpdC50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGNoZWNrSXNJbk5vZGVNb2R1bGVzLFxuICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0Jcbn0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBsaW50fSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBwYXRocywgc2hvdWxkRml4ID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdKc29uYyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnWWFtbCxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdNanMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbmMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdZYW1sLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ1ltbCxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnTWpzXG4gIF07XG5cbiAgY29uc3QgZG9lc0NvbmZpZ0ZpbGVFeGlzdCA9IGNvbmZpZ0ZpbGVzLnNvbWUoKGNvbmZpZ0ZpbGUpID0+IHtcbiAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogY29uZmlnRmlsZSB9KTtcbiAgICByZXR1cm4gZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCk7XG4gIH0pO1xuXG4gIGlmICghZG9lc0NvbmZpZ0ZpbGVFeGlzdCkge1xuICAgIGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludCcpKCdtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZC4gQ3JlYXRpbmcgZGVmYXVsdCBjb25maWcuLi4nKTtcbiAgICBjb25zdCBwYWNrYWdlRm9sZGVyID0gZ2V0Um9vdEZvbGRlcihnZXRGb2xkZXJOYW1lKGltcG9ydC5tZXRhLnVybCkpO1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHBhY2thZ2VGb2xkZXIsICdQYWNrYWdlIGZvbGRlciBub3QgZm91bmQnKTtcbiAgICBhd2FpdCBjcChcbiAgICAgIGpvaW4ocGFja2FnZUZvbGRlciwgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EaXN0VGVtcGxhdGVzLCBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdNanMpLFxuICAgICAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoZXMgYXJlIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtPYnNpZGlhblBsdWdpblJlcG9QYXRocy5DdXJyZW50Rm9sZGVyXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnB4JywgJ21hcmtkb3dubGludC1jbGkyJywgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAnbnB4JyxcbiAgICAnbGlua2luYXRvcicsXG4gICAgJy0tcmV0cnknLFxuICAgICctLXJldHJ5LWVycm9ycycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWNvdW50JyxcbiAgICAnMycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWppdHRlcicsXG4gICAgJzUnLFxuICAgICctLXVybC1yZXdyaXRlLXNlYXJjaCcsXG4gICAgU3RyaW5nLnJhd2BodHRwczovL3d3d1xcLm5wbWpzXFwuY29tL3BhY2thZ2UvYCxcbiAgICAnLS11cmwtcmV3cml0ZS1yZXBsYWNlJyxcbiAgICAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJyxcbiAgICB7IGJhdGNoZWRBcmd1bWVudHM6IG1kRmlsZXMgfVxuICBdKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2l0IHBhdGhzcGVjIG1hdGNoaW5nIGV2ZXJ5IG1hcmtkb3duIGZpbGUgaW4gdGhlIHJlcG9zaXRvcnksIGF0IGFueSBkZXB0aC5cbiAqL1xuY29uc3QgTUFSS0RPV05fUEFUSFNQRUMgPSAnKi5tZCc7XG5cbi8qKlxuICogTGlzdHMgdGhlIG1hcmtkb3duIGZpbGVzIHRvIGhhbmQgdG8gYGxpbmtpbmF0b3JgLlxuICpcbiAqIGBsaW5raW5hdG9yYCB0YWtlcyBhIGZpbGUgbGlzdCByYXRoZXIgdGhhbiBhbiBpZ25vcmUgY29uZmlndXJhdGlvbiwgc28gdGhlIGdpdGlnbm9yZWQgZmlsZXMgaGF2ZSB0byBiZVxuICogZHJvcHBlZCBiZWZvcmUgaXQgaXMgaW52b2tlZC4gR2l0IGl0c2VsZiBhbnN3ZXJzIHRoYXQgKG5lc3RlZCBpZ25vcmUgZmlsZXMsIGAhYCBuZWdhdGlvbnMgYW5kIGFsbCk7IHRoZVxuICogaGFuZC1tYWludGFpbmVkIGdsb2IgZXhjbHVzaW9ucyBiZWxvdyBhcmUgb25seSB0aGUgZmFsbGJhY2sgZm9yIGEgY2hlY2tvdXQgd2l0aG91dCBnaXQsIGFuZCB0aGV5IGFyZSB0aGVcbiAqIHZlcnkgbGlzdHMgdGhpcyBpbmRpcmVjdGlvbiBleGlzdHMgdG8gc3RvcCBmcm9tIGRyaWZ0aW5nLlxuICpcbiAqIFRoZSBgbm9kZV9tb2R1bGVzYCBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgZ2l0LWRlcml2ZWQgbGlzdCB0b28sIGFuZCBkZWxpYmVyYXRlbHkgc286IGdpdCBvbmx5IHNraXBzXG4gKiB3aGF0IHRoZSByZXBvc2l0b3J5IGFza2VkIGl0IHRvIHNraXAsIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhIHZlbmRvcmVkIGBub2RlX21vZHVsZXNgXG4gKiB0cmVlLiBUaGF0IGlzIHRoZSBvbmUgZXhjbHVzaW9uIGAuZ2l0aWdub3JlYCBjYW5ub3QgYW5zd2VyIFx1MjAxNCBzZWUgYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC4gQXBwbHlpbmcgaXRcbiAqIGhlcmUga2VlcHMgYGxpbmtpbmF0b3JgIGluIHN0ZXAgd2l0aCB0aGUgbWFya2Rvd25saW50IGhhbGYsIHdoaWNoIGlnbm9yZXMgdGhlIHNhbWUgcGF0aHMgYnkgZ2xvYi5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hcmtkb3duIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vbklnbm9yZWRGaWxlcyA9IGF3YWl0IGdldE5vbklnbm9yZWRGaWxlcyh7IHBhdHRlcm5zOiBbTUFSS0RPV05fUEFUSFNQRUNdIH0pO1xuICBpZiAobm9uSWdub3JlZEZpbGVzKSB7XG4gICAgcmV0dXJuIG5vbklnbm9yZWRGaWxlcy5maWx0ZXIoKHBhdGgpID0+ICFjaGVja0lzSW5Ob2RlTW9kdWxlcyhwYXRoKSk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdG9BcnJheShnbG9iKFsnKiovKi5tZCddLCB7XG4gICAgZXhjbHVkZTogW1xuICAgICAgJy5naXQvKionLFxuICAgICAgJ2Rpc3QvKionLFxuICAgICAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG4gICAgXVxuICB9KSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGdCQUFnQjtBQUV6QixTQUFTLGVBQWU7QUFDeEIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLGlDQUFpQztBQUMxQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXdCUCxlQUFzQixLQUFLLFNBQXNDO0FBQy9ELFFBQU0sRUFBRSxPQUFPLFlBQVksTUFBTSxJQUFJLFdBQVcsQ0FBQztBQUNqRCxRQUFNLGNBQWM7QUFBQSxJQUNsQix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxFQUMxQjtBQUVBLFFBQU0sc0JBQXNCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDM0QsVUFBTSxpQkFBaUIsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsV0FBTyxXQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLHFCQUFxQjtBQUN4QixtQkFBZSxtQkFBbUIsRUFBRSx1RUFBdUU7QUFDM0csVUFBTSxnQkFBZ0IsY0FBYyxjQUFjLFlBQVksR0FBRyxDQUFDO0FBQ2xFLHNCQUFrQixlQUFlLDBCQUEwQjtBQUMzRCxVQUFNO0FBQUEsTUFDSixLQUFLLGVBQWUsMEJBQTBCLGVBQWUsMEJBQTBCLHlCQUF5QjtBQUFBLE1BQ2hILHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLDBCQUEwQixDQUFDO0FBQUEsSUFDckY7QUFBQSxFQUNGO0FBR0EsUUFBTSxVQUFVLE9BQU8sU0FBUyxRQUFRLENBQUMsd0JBQXdCLGFBQWE7QUFFOUUsUUFBTSxhQUFhLENBQUMsT0FBTyxxQkFBcUIsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBSSxFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUcvRyxRQUFNLGFBQWEsY0FBYyxLQUFLLFFBQVEsSUFBSTtBQUNsRCxRQUFNLFVBQVUsT0FBTyxTQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLFNBQVMsWUFBWSxDQUFDLEVBQUUsV0FBVyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQ25FLE1BQU0saUJBQWlCO0FBRTNCLFFBQU0sYUFBYTtBQUFBLElBQ2pCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLE9BQU87QUFBQSxJQUNQO0FBQUEsSUFDQTtBQUFBLElBQ0EsRUFBRSxrQkFBa0IsUUFBUTtBQUFBLEVBQzlCLENBQUM7QUFDSDtBQUtBLE1BQU0sb0JBQW9CO0FBaUIxQixlQUFlLG1CQUFzQztBQUNuRCxRQUFNLGtCQUFrQixNQUFNLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ2xGLE1BQUksaUJBQWlCO0FBQ25CLFdBQU8sZ0JBQWdCLE9BQU8sQ0FBQyxTQUFTLENBQUMscUJBQXFCLElBQUksQ0FBQztBQUFBLEVBQ3JFO0FBRUEsU0FBTyxNQUFNLFFBQVEsS0FBSyxDQUFDLFNBQVMsR0FBRztBQUFBLElBQ3JDLFNBQVM7QUFBQSxNQUNQO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDLENBQUM7QUFDSjsiLAogICJuYW1lcyI6IFtdCn0K
133
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExpbnQgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiB1c2luZyBgbWFya2Rvd25saW50LWNsaTJgIGFuZCBgbGlua2luYXRvcmAuXG4gKi9cblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2Jcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uLy4uL2RlYnVnLnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4vcGx1Z2luL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGdldEZvbGRlck5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vLi4vcGF0aC50cyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IGdldE5vbklnbm9yZWRGaWxlcyB9IGZyb20gJy4uL2dpdC50cyc7XG5pbXBvcnQgeyBPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXJlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQge1xuICBjaGVja0lzSW5Ob2RlTW9kdWxlcyxcbiAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG59IGZyb20gJy4vbWFya2Rvd25saW50LWlnbm9yZXMudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBsaW50LiBJZiBvbWl0dGVkLCBsaW50cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBsaW50aW5nIGlzc3VlcyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaXg/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIExpbnQgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiB1c2luZyBgbWFya2Rvd25saW50LWNsaTJgIGFuZCBgbGlua2luYXRvcmAuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIExpbnRPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnQob3B0aW9ucz86IExpbnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGF0aHMsIHNob3VsZEZpeCA9IGZhbHNlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCBjb25maWdGaWxlcyA9IFtcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ1lhbWwsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ0NqcyxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ0pzb25jLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ0pzb24sXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdZbWwsXG4gICAgT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnQ2pzLFxuICAgIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QpIHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignbWFya2Rvd25saW50OmxpbnQnKSgnbWFya2Rvd25saW50IGNvbmZpZ3VyYXRpb24gZmlsZSBub3QgZm91bmQuIENyZWF0aW5nIGRlZmF1bHQgY29uZmlnLi4uJyk7XG4gICAgY29uc3QgcGFja2FnZUZvbGRlciA9IGdldFJvb3RGb2xkZXIoZ2V0Rm9sZGVyTmFtZShpbXBvcnQubWV0YS51cmwpKTtcbiAgICBhc3NlcnROb25OdWxsYWJsZShwYWNrYWdlRm9sZGVyLCAnUGFja2FnZSBmb2xkZXIgbm90IGZvdW5kJyk7XG4gICAgYXdhaXQgY3AoXG4gICAgICBqb2luKHBhY2thZ2VGb2xkZXIsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRGlzdFRlbXBsYXRlcywgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzKSxcbiAgICAgIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyB9KVxuICAgICk7XG4gIH1cblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaGVzIGFyZSBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ21hcmtkb3dubGludC1jbGkyJyB9KSwgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnbGlua2luYXRvcicgfSksXG4gICAgJy0tcmV0cnknLFxuICAgICctLXJldHJ5LWVycm9ycycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWNvdW50JyxcbiAgICAnMycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWppdHRlcicsXG4gICAgJzUnLFxuICAgICctLXVybC1yZXdyaXRlLXNlYXJjaCcsXG4gICAgU3RyaW5nLnJhd2BodHRwczovL3d3d1xcLm5wbWpzXFwuY29tL3BhY2thZ2UvYCxcbiAgICAnLS11cmwtcmV3cml0ZS1yZXBsYWNlJyxcbiAgICAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJyxcbiAgICB7IGJhdGNoZWRBcmd1bWVudHM6IG1kRmlsZXMgfVxuICBdKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2l0IHBhdGhzcGVjIG1hdGNoaW5nIGV2ZXJ5IG1hcmtkb3duIGZpbGUgaW4gdGhlIHJlcG9zaXRvcnksIGF0IGFueSBkZXB0aC5cbiAqL1xuY29uc3QgTUFSS0RPV05fUEFUSFNQRUMgPSAnKi5tZCc7XG5cbi8qKlxuICogTGlzdHMgdGhlIG1hcmtkb3duIGZpbGVzIHRvIGhhbmQgdG8gYGxpbmtpbmF0b3JgLlxuICpcbiAqIGBsaW5raW5hdG9yYCB0YWtlcyBhIGZpbGUgbGlzdCByYXRoZXIgdGhhbiBhbiBpZ25vcmUgY29uZmlndXJhdGlvbiwgc28gdGhlIGdpdGlnbm9yZWQgZmlsZXMgaGF2ZSB0byBiZVxuICogZHJvcHBlZCBiZWZvcmUgaXQgaXMgaW52b2tlZC4gR2l0IGl0c2VsZiBhbnN3ZXJzIHRoYXQgKG5lc3RlZCBpZ25vcmUgZmlsZXMsIGAhYCBuZWdhdGlvbnMgYW5kIGFsbCk7IHRoZVxuICogaGFuZC1tYWludGFpbmVkIGdsb2IgZXhjbHVzaW9ucyBiZWxvdyBhcmUgb25seSB0aGUgZmFsbGJhY2sgZm9yIGEgY2hlY2tvdXQgd2l0aG91dCBnaXQsIGFuZCB0aGV5IGFyZSB0aGVcbiAqIHZlcnkgbGlzdHMgdGhpcyBpbmRpcmVjdGlvbiBleGlzdHMgdG8gc3RvcCBmcm9tIGRyaWZ0aW5nLlxuICpcbiAqIFRoZSBgbm9kZV9tb2R1bGVzYCBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgZ2l0LWRlcml2ZWQgbGlzdCB0b28sIGFuZCBkZWxpYmVyYXRlbHkgc286IGdpdCBvbmx5IHNraXBzXG4gKiB3aGF0IHRoZSByZXBvc2l0b3J5IGFza2VkIGl0IHRvIHNraXAsIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhIHZlbmRvcmVkIGBub2RlX21vZHVsZXNgXG4gKiB0cmVlLiBUaGF0IGlzIHRoZSBvbmUgZXhjbHVzaW9uIGAuZ2l0aWdub3JlYCBjYW5ub3QgYW5zd2VyIFx1MjAxNCBzZWUgYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC4gQXBwbHlpbmcgaXRcbiAqIGhlcmUga2VlcHMgYGxpbmtpbmF0b3JgIGluIHN0ZXAgd2l0aCB0aGUgbWFya2Rvd25saW50IGhhbGYsIHdoaWNoIGlnbm9yZXMgdGhlIHNhbWUgcGF0aHMgYnkgZ2xvYi5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hcmtkb3duIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vbklnbm9yZWRGaWxlcyA9IGF3YWl0IGdldE5vbklnbm9yZWRGaWxlcyh7IHBhdHRlcm5zOiBbTUFSS0RPV05fUEFUSFNQRUNdIH0pO1xuICBpZiAobm9uSWdub3JlZEZpbGVzKSB7XG4gICAgcmV0dXJuIG5vbklnbm9yZWRGaWxlcy5maWx0ZXIoKHBhdGgpID0+ICFjaGVja0lzSW5Ob2RlTW9kdWxlcyhwYXRoKSk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdG9BcnJheShnbG9iKFsnKiovKi5tZCddLCB7XG4gICAgZXhjbHVkZTogW1xuICAgICAgJy5naXQvKionLFxuICAgICAgJ2Rpc3QvKionLFxuICAgICAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG4gICAgXVxuICB9KSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGdCQUFnQjtBQUV6QixTQUFTLGVBQWU7QUFDeEIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXdCUCxlQUFzQixLQUFLLFNBQXNDO0FBQy9ELFFBQU0sRUFBRSxPQUFPLFlBQVksTUFBTSxJQUFJLFdBQVcsQ0FBQztBQUNqRCxRQUFNLGNBQWM7QUFBQSxJQUNsQix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxJQUN4Qix3QkFBd0I7QUFBQSxFQUMxQjtBQUVBLFFBQU0sc0JBQXNCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDM0QsVUFBTSxpQkFBaUIsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsV0FBTyxXQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLHFCQUFxQjtBQUN4QixtQkFBZSxtQkFBbUIsRUFBRSx1RUFBdUU7QUFDM0csVUFBTSxnQkFBZ0IsY0FBYyxjQUFjLFlBQVksR0FBRyxDQUFDO0FBQ2xFLHNCQUFrQixlQUFlLDBCQUEwQjtBQUMzRCxVQUFNO0FBQUEsTUFDSixLQUFLLGVBQWUsMEJBQTBCLGVBQWUsMEJBQTBCLHlCQUF5QjtBQUFBLE1BQ2hILHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLDBCQUEwQixDQUFDO0FBQUEsSUFDckY7QUFBQSxFQUNGO0FBR0EsUUFBTSxVQUFVLE9BQU8sU0FBUyxRQUFRLENBQUMsd0JBQXdCLGFBQWE7QUFFOUUsUUFBTSxhQUFhLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDLEdBQUcsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBSSxFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUd6SSxRQUFNLGFBQWEsY0FBYyxLQUFLLFFBQVEsSUFBSTtBQUNsRCxRQUFNLFVBQVUsT0FBTyxTQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLFNBQVMsWUFBWSxDQUFDLEVBQUUsV0FBVyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQ25FLE1BQU0saUJBQWlCO0FBRTNCLFFBQU0sYUFBYTtBQUFBLElBQ2pCLEdBQUcsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFBQSxJQUM1QztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFDQSxFQUFFLGtCQUFrQixRQUFRO0FBQUEsRUFDOUIsQ0FBQztBQUNIO0FBS0EsTUFBTSxvQkFBb0I7QUFpQjFCLGVBQWUsbUJBQXNDO0FBQ25ELFFBQU0sa0JBQWtCLE1BQU0sbUJBQW1CLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDbEYsTUFBSSxpQkFBaUI7QUFDbkIsV0FBTyxnQkFBZ0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDO0FBQUEsRUFDckU7QUFFQSxTQUFPLE1BQU0sUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHO0FBQUEsSUFDckMsU0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUNKOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -10,7 +10,8 @@
10
10
  * Only includes tools that can operate on individual files. Whole-project checks
11
11
  * (TypeScript compilation, unit tests) are left to CI.
12
12
  *
13
- * Commands use `npm run ... --` so nano-staged file paths are forwarded as CLI arguments.
13
+ * Commands run through the package manager that owns the tree — `npm run ... --`, `bun run ... --`, and
14
+ * so on — so nano-staged file paths are forwarded as CLI arguments.
14
15
  */
15
16
  export declare const obsidianDevUtilsConfig: Record<string, string[]>;
16
17
  /**
@@ -25,7 +26,9 @@ export declare const obsidianDevUtilsConfig: Record<string, string[]>;
25
26
  * every npm script gets — but both share the same notion of an off value, via {@link isEnvVariableOff}.
26
27
  *
27
28
  * This is a function rather than module-level code so importing the package barrel never triggers the
28
- * `.env` read or the process exit; call it from the thin `scripts/nano-staged-config.ts` entry.
29
+ * `.env` read or the process exit; call it from the thin `scripts/nano-staged-config.ts` entry. Resolving the
30
+ * package manager is the one thing that does run at module scope, and it does neither of those two
31
+ * things — it only probes for a lockfile.
29
32
  *
30
33
  * @returns The nano-staged task configuration. Does not return when the opt-out is active.
31
34
  */