@mnaoumov/obsidian-dev-toolkit 1.0.0 → 1.1.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 (140) hide show
  1. package/README.md +9 -1
  2. package/dist/demo-vault-helper/main.js +499 -17
  3. package/dist/integration-test-plugin/main.js +11251 -2472
  4. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +9 -22
  5. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.cjs +9 -22
  6. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +9 -22
  7. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +9 -22
  8. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +9 -22
  9. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +9 -22
  10. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.cjs +9 -22
  11. package/dist/lib/cjs/bundlers/esbuild.cjs +9 -22
  12. package/dist/lib/cjs/bundlers/index.cjs +9 -22
  13. package/dist/lib/cjs/demo-vault-app-json.cjs +9 -22
  14. package/dist/lib/cjs/demo-vault-buttons.cjs +9 -22
  15. package/dist/lib/cjs/demo-vault-buttons.d.cts +7 -7
  16. package/dist/lib/cjs/demo-vault-coverage.cjs +11 -23
  17. package/dist/lib/cjs/demo-vault.cjs +9 -22
  18. package/dist/lib/cjs/formatters/dprint.cjs +9 -22
  19. package/dist/lib/cjs/formatters/index.cjs +9 -22
  20. package/dist/lib/cjs/index.cjs +9 -22
  21. package/dist/lib/cjs/integration-test-setup.cjs +9 -22
  22. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +9 -22
  23. package/dist/lib/cjs/jest-setup.cjs +9 -22
  24. package/dist/lib/cjs/linters/eslint-config.cjs +60 -22
  25. package/dist/lib/cjs/linters/eslint-rules/index.cjs +23 -24
  26. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +4 -0
  27. package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +9 -22
  28. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.cjs +9 -22
  29. package/dist/lib/cjs/linters/eslint-rules/manifest-id.cjs +9 -22
  30. package/dist/lib/cjs/linters/eslint-rules/manifest-name.cjs +9 -22
  31. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.cjs +9 -22
  32. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.cjs +259 -0
  33. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.d.cts +10 -0
  34. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +9 -22
  35. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +9 -22
  36. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +18 -23
  37. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.cjs +263 -0
  38. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.d.cts +30 -0
  39. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.cjs +215 -0
  40. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.d.cts +29 -0
  41. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +9 -22
  42. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.cjs +306 -0
  43. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.d.cts +10 -0
  44. package/dist/lib/cjs/linters/eslint.cjs +9 -22
  45. package/dist/lib/cjs/linters/index.cjs +20 -24
  46. package/dist/lib/cjs/linters/index.d.cts +3 -0
  47. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +171 -0
  48. package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +12 -0
  49. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +164 -0
  50. package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
  51. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.cjs +246 -0
  52. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.d.cts +32 -0
  53. package/dist/lib/cjs/linters/markdownlint.cjs +9 -22
  54. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +9 -22
  55. package/dist/lib/cjs/linters/plugin-names.cjs +249 -0
  56. package/dist/lib/cjs/linters/plugin-names.d.cts +81 -0
  57. package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +9 -22
  58. package/dist/lib/cjs/setup.cjs +9 -22
  59. package/dist/lib/cjs/templates.cjs +9 -22
  60. package/dist/lib/cjs/test-runners/index.cjs +9 -22
  61. package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +9 -22
  62. package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +9 -22
  63. package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +9 -22
  64. package/dist/lib/cjs/test-runners/vitest-config.cjs +9 -22
  65. package/dist/lib/cjs/version.cjs +9 -22
  66. package/dist/lib/cjs/vitest-setup.cjs +9 -22
  67. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +6 -14
  68. package/dist/lib/esm/bundlers/esbuild-impl/dependency.mjs +6 -14
  69. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +6 -14
  70. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +6 -14
  71. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +6 -14
  72. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +6 -14
  73. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.mjs +6 -14
  74. package/dist/lib/esm/bundlers/esbuild.mjs +6 -14
  75. package/dist/lib/esm/bundlers/index.mjs +6 -14
  76. package/dist/lib/esm/demo-vault-app-json.mjs +6 -14
  77. package/dist/lib/esm/demo-vault-buttons.d.mts +7 -7
  78. package/dist/lib/esm/demo-vault-buttons.mjs +6 -14
  79. package/dist/lib/esm/demo-vault-coverage.mjs +8 -15
  80. package/dist/lib/esm/demo-vault.mjs +6 -14
  81. package/dist/lib/esm/formatters/dprint.mjs +6 -14
  82. package/dist/lib/esm/formatters/index.mjs +6 -14
  83. package/dist/lib/esm/index.mjs +6 -14
  84. package/dist/lib/esm/integration-test-setup.mjs +6 -14
  85. package/dist/lib/esm/integration-test-vitest-global-setup.mjs +6 -14
  86. package/dist/lib/esm/jest-setup.mjs +6 -14
  87. package/dist/lib/esm/linters/eslint-config.mjs +57 -14
  88. package/dist/lib/esm/linters/eslint-rules/index.d.mts +4 -0
  89. package/dist/lib/esm/linters/eslint-rules/index.mjs +15 -15
  90. package/dist/lib/esm/linters/eslint-rules/manifest-description.mjs +6 -14
  91. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.mjs +6 -14
  92. package/dist/lib/esm/linters/eslint-rules/manifest-id.mjs +6 -14
  93. package/dist/lib/esm/linters/eslint-rules/manifest-name.mjs +6 -14
  94. package/dist/lib/esm/linters/eslint-rules/manifest-schema.mjs +6 -14
  95. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.d.mts +10 -0
  96. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.mjs +150 -0
  97. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +6 -14
  98. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.mjs +6 -14
  99. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +15 -15
  100. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.d.mts +30 -0
  101. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.mjs +157 -0
  102. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.d.mts +29 -0
  103. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.mjs +108 -0
  104. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.mjs +6 -14
  105. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.d.mts +10 -0
  106. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.mjs +197 -0
  107. package/dist/lib/esm/linters/eslint.mjs +6 -14
  108. package/dist/lib/esm/linters/index.d.mts +3 -0
  109. package/dist/lib/esm/linters/index.mjs +13 -15
  110. package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +12 -0
  111. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +66 -0
  112. package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
  113. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +46 -0
  114. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.d.mts +32 -0
  115. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.mjs +130 -0
  116. package/dist/lib/esm/linters/markdownlint.mjs +6 -14
  117. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.mjs +6 -14
  118. package/dist/lib/esm/linters/plugin-names.d.mts +81 -0
  119. package/dist/lib/esm/linters/plugin-names.mjs +141 -0
  120. package/dist/lib/esm/obsidian-plugin-repo-paths.mjs +6 -14
  121. package/dist/lib/esm/setup.mjs +6 -14
  122. package/dist/lib/esm/templates.mjs +6 -14
  123. package/dist/lib/esm/test-runners/index.mjs +6 -14
  124. package/dist/lib/esm/test-runners/integration-test-plugin.mjs +6 -14
  125. package/dist/lib/esm/test-runners/performance-eval-cap.mjs +6 -14
  126. package/dist/lib/esm/test-runners/stale-build-global-setup.mjs +6 -14
  127. package/dist/lib/esm/test-runners/vitest-config.mjs +6 -14
  128. package/dist/lib/esm/version.mjs +6 -14
  129. package/dist/lib/esm/vitest-setup.mjs +6 -14
  130. package/dist/templates/scripts/markdownlint-cli2-config.ts +2 -2
  131. package/linters/eslint-rules/no-local-obsidian-internals/package.json +6 -0
  132. package/linters/eslint-rules/plugin-name-as-code/package.json +6 -0
  133. package/linters/eslint-rules/plugin-name-as-code-in-ui/package.json +6 -0
  134. package/linters/eslint-rules/require-plugin-api-contract-schemas/package.json +6 -0
  135. package/linters/markdownlint-cli2-config/package.json +6 -0
  136. package/linters/markdownlint-rules/index/package.json +6 -0
  137. package/linters/markdownlint-rules/package.json +6 -0
  138. package/linters/markdownlint-rules/plugin-name-as-code/package.json +6 -0
  139. package/linters/plugin-names/package.json +6 -0
  140. package/package.json +84 -23
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // 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.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -66,7 +54,6 @@ function keepName($unknown) {
66
54
  return;
67
55
  }
68
56
 
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
57
  require = Object.assign(
71
58
  (id) => requirePatched(id),
72
59
  originalRequire,
@@ -257,4 +244,4 @@ function resolveEventName(argument, node, context) {
257
244
  MESSAGE_ID,
258
245
  noUntrustedInputEvents
259
246
  });
260
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50c1xuICpcbiAqIFJlcG9ydHMgYW4gaW50ZWdyYXRpb24gdGVzdCB0aGF0IGRyaXZlcyB0aGUgVUkgYnkgZGlzcGF0Y2hpbmcgYW4gSU5QVVQgZXZlbnQgXHUyMDE0XG4gKiBgZWwuZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCguLi4pKWAsIGBuZXcgTW91c2VFdmVudCguLi4pYCwgYW5kIGZyaWVuZHMuXG4gKlxuICogU3VjaCBhbiBldmVudCBpcyB1bnRydXN0ZWQgKGBpc1RydXN0ZWQgPT09IGZhbHNlYCksIGFuZCBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvclxuICogcm91dGluZWx5IGdhdGUgb24gZXhhY3RseSB0aGF0OiBPYnNpZGlhbiAxLjEzJ3MgbWFya2Rvd24gdmlld3BvcnQgbWVudSBvcGVucyBmcm9tXG4gKiBhIGxpc3RlbmVyIGd1YXJkZWQgYnkgYGUuaXNUcnVzdGVkYCwgc28gYSBkaXNwYXRjaGVkIGBjb250ZXh0bWVudWAgcmVhY2hlcyBub3RoaW5nLlxuICogVGhlIHRlc3QgdGhlbiBleGVyY2lzZXMgTk9USElORyB3aGlsZSBzdGlsbCBwYXNzaW5nIHdoYXRldmVyIHdlYWtlciBhc3NlcnRpb24gaXRcbiAqIG1ha2VzIFx1MjAxNCBhIGZhbHNlLWNvbmZpZGVuY2UgZmFpbHVyZSwgbm90IGEgZmxha2UuXG4gKlxuICogVGhlIHRydXN0ZWQgYWx0ZXJuYXRpdmVzIFx1MjAxNCBgcHJlc3NLZXlgLCBgY2xpY2tFbGVtZW50YCwgYGNsaWNrTW91c2VgLCBgaG92ZXJFbGVtZW50YCxcbiAqIGB0eXBlSW50b0VkaXRvcmAgXHUyMDE0IGFyZSBzZWVkZWQgaW50byB0aGUgYGV2YWxJbk9ic2lkaWFuYCBjYWxsYmFjaydzIGBsaWJgIGJhZywgYW5kIGFyZVxuICogYWxzbyBpbXBvcnRhYmxlIGZyb20gYG9ic2lkaWFuLWRldi11dGlscy9vYnNpZGlhbi90cnVzdGVkLWlucHV0YCwgd2hpY2ggcGlja3MgdGhlXG4gKiBkZXNrdG9wIG9yIG1vYmlsZSBpbmplY3RvciBpdHNlbGYuIEFsbCBvZiB0aGVtIHdvcmsgb24gQW5kcm9pZCBleGNlcHQgdGhlIGhvdmVyXG4gKiBoZWxwZXJzLCB3aGljaCB0aHJvdyB0aGVyZSBiZWNhdXNlIGA6aG92ZXJgIGhhcyBubyB0b3VjaCBlcXVpdmFsZW50LlxuICpcbiAqIE5PVElGSUNBVElPTiBldmVudHMgYXJlIGRlbGliZXJhdGVseSBOT1QgcmVwb3J0ZWQuIGBuZXcgRXZlbnQoJ2lucHV0JylgIGFmdGVyIHNldHRpbmdcbiAqIGFuIGVsZW1lbnQncyBgLnZhbHVlYCBpcyB0ZWxsaW5nIHRoZSBhcHAgYWJvdXQgYSBjaGFuZ2UgcmF0aGVyIHRoYW4gcHJldGVuZGluZyB0byBiZSBhXG4gKiB1c2VyLCBhbmQgbm90aGluZyBnYXRlcyBpdCBvbiBgaXNUcnVzdGVkYC5cbiAqXG4gKiBOb3QgZXZlcnkgZGlzcGF0Y2ggaXMgd3JvbmcsIHNvIHRoZSBydWxlIGlzIG1lYW50IHRvIGJlIGRpc2FibGVkIFx1MjAxNCB3aXRoIGEgcmVhc29uIFx1MjAxNCBhdFxuICogdGhlIHNpdGVzIHRoYXQgaGF2ZSBvbmU6IGEgZHJhZyBzZXF1ZW5jZSwgd2hpY2ggYHNlbmRJbnB1dEV2ZW50YCBjYW5ub3QgZXhwcmVzcyBhdCBhbGw7XG4gKiB0aGUgbW9iaWxlIGFybSBvZiBhIGhvdmVyIGdlc3R1cmUsIHdoaWNoIGhhcyBubyB0b3VjaCBlcXVpdmFsZW50OyBhbmQgYSBsaXN0ZW5lciB0aGF0XG4gKiBpcyB0aGUgcGx1Z2luJ3Mgb3duIGFuZCBjaGVja3Mgbm90aGluZyBidXQgdGhlIGtleS4gYHJlcXVpcmUtZGVzY3JpcHRpb25gXG4gKiBtYWtlcyB0aGF0IHJlYXNvbiBtYW5kYXRvcnksIHdoaWNoIGlzIHRoZSBwb2ludDogdGhlIHJ1bGUgdHVybnMgYW4gaW52aXNpYmxlIGFzc3VtcHRpb25cbiAqIGludG8gYSB3cml0dGVuIG9uZS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBUU0VTVHJlZSB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJ1bGUsXG4gIFNjb3BlXG59IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IHRvVFNFU1RyZWVOb2RlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbGludGVycy9lc2xpbnQtcnVsZXMvdHMtZXN0cmVlLW5vZGUnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhbiBpbnRlZ3JhdGlvbiB0ZXN0IGRyaXZlcyB0aGUgVUkgd2l0aCBhIGRpc3BhdGNoZWQgaW5wdXQgZXZlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW50cnVzdGVkSW5wdXRFdmVudHMnO1xuXG4vKipcbiAqIFdoYXQgdG8gZG8gaW5zdGVhZCwgcGVyIGV2ZW50IGNvbnN0cnVjdG9yLiBBbiBldmVudCBhYnNlbnQgZnJvbSB0aGlzIG1hcCBpcyBhXG4gKiBub3RpZmljYXRpb24gcmF0aGVyIHRoYW4gc2ltdWxhdGVkIGlucHV0LCBhbmQgaXMgbGVmdCBhbG9uZS5cbiAqL1xuY29uc3QgQURWSUNFX0JZX0VWRU5UX05BTUUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsnRHJhZ0V2ZW50JywgJ3RoZXJlIGlzIG5vIHRydXN0ZWQgZXF1aXZhbGVudCwgYmVjYXVzZSBgc2VuZElucHV0RXZlbnRgIGNhbm5vdCBleHByZXNzIGEgZHJhZywgc28ga2VlcCB0aGUgZGlzcGF0Y2ggYW5kIGRpc2FibGUgdGhpcyBydWxlIHdpdGggdGhlIHJlYXNvbiddLFxuICBbJ0tleWJvYXJkRXZlbnQnLCAndXNlIGBwcmVzc0tleWAsIGZvY3VzaW5nIHRoZSB0YXJnZXQgZmlyc3QsIHNpbmNlIGEgdHJ1c3RlZCBrZXkgcHJlc3MgZ29lcyB0byB3aGF0ZXZlciBob2xkcyBET00gZm9jdXMnXSxcbiAgWydNb3VzZUV2ZW50JywgJ3VzZSBgY2xpY2tFbGVtZW50YCwgb3IgYGNsaWNrTW91c2VgIHdoZW4gdGhlIHBvaW50IHRvIGNsaWNrIGlzIG5vdCBhbiBlbGVtZW50IGNlbnRyZSddLFxuICBbJ1BvaW50ZXJFdmVudCcsICd1c2UgYGNsaWNrRWxlbWVudGAsIG9yIGBjbGlja01vdXNlYCB3aGVuIHRoZSBwb2ludCB0byBjbGljayBpcyBub3QgYW4gZWxlbWVudCBjZW50cmUnXSxcbiAgWydUb3VjaEV2ZW50JywgJ3RoZXJlIGlzIG5vIHRydXN0ZWQgZXF1aXZhbGVudCwgc28ga2VlcCB0aGUgZGlzcGF0Y2ggYW5kIGRpc2FibGUgdGhpcyBydWxlIHdpdGggdGhlIHJlYXNvbiddLFxuICBbJ1doZWVsRXZlbnQnLCAndGhlcmUgaXMgbm8gdHJ1c3RlZCBlcXVpdmFsZW50LCBzbyBrZWVwIHRoZSBkaXNwYXRjaCBhbmQgZGlzYWJsZSB0aGlzIHJ1bGUgd2l0aCB0aGUgcmVhc29uJ11cbl0pO1xuXG4vKipcbiAqIEVTTGludCBydWxlIGRpc2FsbG93aW5nIHVudHJ1c3RlZCBpbnB1dCBldmVudHMgaW4gaW50ZWdyYXRpb24gdGVzdHMsIHdoZXJlIHRoZXkgY2FuIHNpbGVudGx5IGV4ZXJjaXNlIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBub1VudHJ1c3RlZElucHV0RXZlbnRzOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdDYWxsRXhwcmVzc2lvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNhbGxOb2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb247XG5cbiAgICAgICAgaWYgKCFpc0Rpc3BhdGNoRXZlbnRDYWxsKGNhbGxOb2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3VtZW50ID0gY2FsbE5vZGUuYXJndW1lbnRzWzBdO1xuICAgICAgICBpZiAoIWFyZ3VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnROYW1lID0gcmVzb2x2ZUV2ZW50TmFtZShhcmd1bWVudCwgbm9kZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZHZpY2UgPSBBRFZJQ0VfQllfRVZFTlRfTkFNRS5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKGFkdmljZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFkdmljZSxcbiAgICAgICAgICAgIGV2ZW50TmFtZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlzYWxsb3cgZHJpdmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyB3aXRoIGRpc3BhdGNoZWQgKHVudHJ1c3RlZCkgaW5wdXQgZXZlbnRzJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ0EgZGlzcGF0Y2hlZCB7eyBldmVudE5hbWUgfX0gaXMgdW50cnVzdGVkIChgaXNUcnVzdGVkID09PSBmYWxzZWApIGFuZCBPYnNpZGlhbiBtYXkgaWdub3JlIGl0LCBzbyB0aGlzIGNhbiBleGVyY2lzZSBub3RoaW5nIHdoaWxlIHN0aWxsIHBhc3Npbmc6IHt7IGFkdmljZSB9fS4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuXG4vKipcbiAqIEZpbmRzIGEgdmFyaWFibGUgYnkgbmFtZSwgd2Fsa2luZyBvdXR3YXJkcyBmcm9tIHRoZSBnaXZlbiBzY29wZS5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgdG8gc3RhcnQgZnJvbS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHZhcmlhYmxlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSB2YXJpYWJsZSwgb3IgYG51bGxgIHdoZW4gbm90aGluZyBpbiBzY29wZSBkZWNsYXJlcyB0aGF0IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRWYXJpYWJsZShzY29wZTogU2NvcGUuU2NvcGUsIG5hbWU6IHN0cmluZyk6IG51bGwgfCBTY29wZS5WYXJpYWJsZSB7XG4gIGxldCBjdXJyZW50U2NvcGU6IG51bGwgfCBTY29wZS5TY29wZSA9IHNjb3BlO1xuXG4gIHdoaWxlIChjdXJyZW50U2NvcGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IGN1cnJlbnRTY29wZS52YXJpYWJsZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gdmFyaWFibGU7XG4gICAgfVxuICAgIGN1cnJlbnRTY29wZSA9IGN1cnJlbnRTY29wZS51cHBlcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCBleHByZXNzaW9uIGlzIGEgYC5kaXNwYXRjaEV2ZW50KC4uLilgIGNhbGwuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgY2FsbCBleHByZXNzaW9uIG5vZGUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNhbGwgaXMgYDxzb21ldGhpbmc+LmRpc3BhdGNoRXZlbnQoLi4uKWAuXG4gKi9cbmZ1bmN0aW9uIGlzRGlzcGF0Y2hFdmVudENhbGwobm9kZTogVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy5cbiAgcmV0dXJuIGNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiBjYWxsZWUucHJvcGVydHkubmFtZSA9PT0gJ2Rpc3BhdGNoRXZlbnQnO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBpZGVudGlmaWVyIGEgYG5ldyAuLi4oKWAgZXhwcmVzc2lvbiBjb25zdHJ1Y3RzLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIGBOZXdFeHByZXNzaW9uYCBub2RlLlxuICogQHJldHVybnMgVGhlIGNvbnN0cnVjdG9yJ3MgbmFtZSwgb3IgYG51bGxgIHdoZW4gdGhlIGNhbGxlZSBpcyBub3QgYSBiYXJlIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIHJlYWRDb25zdHJ1Y3Rvck5hbWUobm9kZTogVFNFU1RyZWUuTmV3RXhwcmVzc2lvbik6IG51bGwgfCBzdHJpbmcge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICByZXR1cm4gbm9kZS5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInID8gbm9kZS5jYWxsZWUubmFtZSA6IG51bGw7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNvbnN0cnVjdG9yIG5hbWUgb2YgdGhlIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQuXG4gKlxuICogSGFuZGxlcyB0aGUgYXJndW1lbnQgd3JpdHRlbiBpbmxpbmUgKGBkaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KC4uLikpYCkgYW5kIHRoZVxuICogYXJndW1lbnQgaGVsZCBpbiBhIHZhcmlhYmxlIChgY29uc3QgZSA9IG5ldyBEcmFnRXZlbnQoLi4uKTsgZWwuZGlzcGF0Y2hFdmVudChlKWApLFxuICogd2hpY2ggaXMgaG93IGEgc2VxdWVuY2Ugc2hhcmluZyBvbmUgYERhdGFUcmFuc2ZlcmAgaXMgdXN1YWxseSB3cml0dGVuLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudCAtIFRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwuXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBjYWxsIG5vZGUsIHVzZWQgdG8gcmVzb2x2ZSB0aGUgZW5jbG9zaW5nIHNjb3BlLlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcnVsZSBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGNvbnN0cnVjdG9yIG5hbWUsIG9yIGBudWxsYCB3aGVuIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5mdW5jdGlvbiByZXNvbHZlRXZlbnROYW1lKGFyZ3VtZW50OiBUU0VTVHJlZS5Ob2RlLCBub2RlOiBSdWxlLk5vZGUsIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBudWxsIHwgc3RyaW5nIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy5cbiAgaWYgKGFyZ3VtZW50LnR5cGUgPT09ICdOZXdFeHByZXNzaW9uJykge1xuICAgIHJldHVybiByZWFkQ29uc3RydWN0b3JOYW1lKGFyZ3VtZW50KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gIGlmIChhcmd1bWVudC50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHZhcmlhYmxlID0gZmluZFZhcmlhYmxlKGNvbnRleHQuc291cmNlQ29kZS5nZXRTY29wZShub2RlKSwgYXJndW1lbnQubmFtZSk7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiB2YXJpYWJsZS5kZWZzKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbk5vZGUgPSB0b1RTRVNUcmVlTm9kZShkZWZpbml0aW9uLm5vZGUpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gICAgaWYgKGRlZmluaXRpb25Ob2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0b3InIHx8ICFkZWZpbml0aW9uTm9kZS5pbml0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICAgIGlmIChkZWZpbml0aW9uTm9kZS5pbml0LnR5cGUgPT09ICdOZXdFeHByZXNzaW9uJykge1xuICAgICAgcmV0dXJuIHJlYWRDb25zdHJ1Y3Rvck5hbWUoZGVmaW5pdGlvbk5vZGUuaW5pdCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQ0EsNEJBQStCO0FBS3hCLE1BQU0sYUFBYTtBQU0xQixNQUFNLHVCQUF1QixvQkFBSSxJQUFvQjtBQUFBLEVBQ25ELENBQUMsYUFBYSw0SUFBNEk7QUFBQSxFQUMxSixDQUFDLGlCQUFpQix1R0FBdUc7QUFBQSxFQUN6SCxDQUFDLGNBQWMsc0ZBQXNGO0FBQUEsRUFDckcsQ0FBQyxnQkFBZ0Isc0ZBQXNGO0FBQUEsRUFDdkcsQ0FBQyxjQUFjLDRGQUE0RjtBQUFBLEVBQzNHLENBQUMsY0FBYyw0RkFBNEY7QUFDN0csQ0FBQztBQUtNLE1BQU0seUJBQTBDO0FBQUEsRUFDckQsT0FBTyxTQUFTO0FBQ2QsV0FBTztBQUFBLE1BQ0wsaUJBQWlCLE1BQXVCO0FBQ3RDLGNBQU0sZUFBVyxzQ0FBZSxJQUFJO0FBRXBDLFlBQUksQ0FBQyxvQkFBb0IsUUFBUSxHQUFHO0FBQ2xDO0FBQUEsUUFDRjtBQUVBLGNBQU0sV0FBVyxTQUFTLFVBQVUsQ0FBQztBQUNyQyxZQUFJLENBQUMsVUFBVTtBQUNiO0FBQUEsUUFDRjtBQUVBLGNBQU0sWUFBWSxpQkFBaUIsVUFBVSxNQUFNLE9BQU87QUFDMUQsWUFBSSxjQUFjLE1BQU07QUFDdEI7QUFBQSxRQUNGO0FBRUEsY0FBTSxTQUFTLHFCQUFxQixJQUFJLFNBQVM7QUFDakQsWUFBSSxXQUFXLFFBQVc7QUFDeEI7QUFBQSxRQUNGO0FBRUEsZ0JBQVEsT0FBTztBQUFBLFVBQ2IsTUFBTTtBQUFBLFlBQ0o7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1g7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixDQUFDLFVBQVUsR0FBRztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7QUFTQSxTQUFTLGFBQWEsT0FBb0IsTUFBcUM7QUFDN0UsTUFBSSxlQUFtQztBQUV2QyxTQUFPLGNBQWM7QUFDbkIsVUFBTSxXQUFXLGFBQWEsVUFBVSxLQUFLLENBQUMsY0FBYyxVQUFVLFNBQVMsSUFBSTtBQUNuRixRQUFJLFVBQVU7QUFDWixhQUFPO0FBQUEsSUFDVDtBQUNBLG1CQUFlLGFBQWE7QUFBQSxFQUM5QjtBQUVBLFNBQU87QUFDVDtBQVFBLFNBQVMsb0JBQW9CLE1BQXdDO0FBQ25FLFFBQU0sU0FBUyxLQUFLO0FBR3BCLFNBQU8sT0FBTyxTQUFTLHNCQUFzQixPQUFPLFNBQVMsU0FBUyxnQkFBZ0IsT0FBTyxTQUFTLFNBQVM7QUFDakg7QUFRQSxTQUFTLG9CQUFvQixNQUE2QztBQUV4RSxTQUFPLEtBQUssT0FBTyxTQUFTLGVBQWUsS0FBSyxPQUFPLE9BQU87QUFDaEU7QUFjQSxTQUFTLGlCQUFpQixVQUF5QixNQUFpQixTQUEwQztBQUU1RyxNQUFJLFNBQVMsU0FBUyxpQkFBaUI7QUFDckMsV0FBTyxvQkFBb0IsUUFBUTtBQUFBLEVBQ3JDO0FBR0EsTUFBSSxTQUFTLFNBQVMsY0FBYztBQUNsQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sV0FBVyxhQUFhLFFBQVEsV0FBVyxTQUFTLElBQUksR0FBRyxTQUFTLElBQUk7QUFDOUUsTUFBSSxDQUFDLFVBQVU7QUFDYixXQUFPO0FBQUEsRUFDVDtBQUVBLGFBQVcsY0FBYyxTQUFTLE1BQU07QUFDdEMsVUFBTSxxQkFBaUIsc0NBQWUsV0FBVyxJQUFJO0FBRXJELFFBQUksZUFBZSxTQUFTLHdCQUF3QixDQUFDLGVBQWUsTUFBTTtBQUN4RTtBQUFBLElBQ0Y7QUFHQSxRQUFJLGVBQWUsS0FBSyxTQUFTLGlCQUFpQjtBQUNoRCxhQUFPLG9CQUFvQixlQUFlLElBQUk7QUFBQSxJQUNoRDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
247
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL25vLXVudHJ1c3RlZC1pbnB1dC1ldmVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50c1xuICpcbiAqIFJlcG9ydHMgYW4gaW50ZWdyYXRpb24gdGVzdCB0aGF0IGRyaXZlcyB0aGUgVUkgYnkgZGlzcGF0Y2hpbmcgYW4gSU5QVVQgZXZlbnQgXHUyMDE0XG4gKiBgZWwuZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCguLi4pKWAsIGBuZXcgTW91c2VFdmVudCguLi4pYCwgYW5kIGZyaWVuZHMuXG4gKlxuICogU3VjaCBhbiBldmVudCBpcyB1bnRydXN0ZWQgKGBpc1RydXN0ZWQgPT09IGZhbHNlYCksIGFuZCBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvclxuICogcm91dGluZWx5IGdhdGUgb24gZXhhY3RseSB0aGF0OiBPYnNpZGlhbiAxLjEzJ3MgbWFya2Rvd24gdmlld3BvcnQgbWVudSBvcGVucyBmcm9tXG4gKiBhIGxpc3RlbmVyIGd1YXJkZWQgYnkgYGUuaXNUcnVzdGVkYCwgc28gYSBkaXNwYXRjaGVkIGBjb250ZXh0bWVudWAgcmVhY2hlcyBub3RoaW5nLlxuICogVGhlIHRlc3QgdGhlbiBleGVyY2lzZXMgTk9USElORyB3aGlsZSBzdGlsbCBwYXNzaW5nIHdoYXRldmVyIHdlYWtlciBhc3NlcnRpb24gaXRcbiAqIG1ha2VzIFx1MjAxNCBhIGZhbHNlLWNvbmZpZGVuY2UgZmFpbHVyZSwgbm90IGEgZmxha2UuXG4gKlxuICogVGhlIHRydXN0ZWQgYWx0ZXJuYXRpdmVzIFx1MjAxNCBgcHJlc3NLZXlgLCBgY2xpY2tFbGVtZW50YCwgYGNsaWNrTW91c2VgLCBgaG92ZXJFbGVtZW50YCxcbiAqIGB0eXBlSW50b0VkaXRvcmAgXHUyMDE0IGFyZSBzZWVkZWQgaW50byB0aGUgYGV2YWxJbk9ic2lkaWFuYCBjYWxsYmFjaydzIGBsaWJgIGJhZywgYW5kIGFyZVxuICogYWxzbyBpbXBvcnRhYmxlIGZyb20gYG9ic2lkaWFuLWRldi11dGlscy9vYnNpZGlhbi90cnVzdGVkLWlucHV0YCwgd2hpY2ggcGlja3MgdGhlXG4gKiBkZXNrdG9wIG9yIG1vYmlsZSBpbmplY3RvciBpdHNlbGYuIEFsbCBvZiB0aGVtIHdvcmsgb24gQW5kcm9pZCBleGNlcHQgdGhlIGhvdmVyXG4gKiBoZWxwZXJzLCB3aGljaCB0aHJvdyB0aGVyZSBiZWNhdXNlIGA6aG92ZXJgIGhhcyBubyB0b3VjaCBlcXVpdmFsZW50LlxuICpcbiAqIE5PVElGSUNBVElPTiBldmVudHMgYXJlIGRlbGliZXJhdGVseSBOT1QgcmVwb3J0ZWQuIGBuZXcgRXZlbnQoJ2lucHV0JylgIGFmdGVyIHNldHRpbmdcbiAqIGFuIGVsZW1lbnQncyBgLnZhbHVlYCBpcyB0ZWxsaW5nIHRoZSBhcHAgYWJvdXQgYSBjaGFuZ2UgcmF0aGVyIHRoYW4gcHJldGVuZGluZyB0byBiZSBhXG4gKiB1c2VyLCBhbmQgbm90aGluZyBnYXRlcyBpdCBvbiBgaXNUcnVzdGVkYC5cbiAqXG4gKiBOb3QgZXZlcnkgZGlzcGF0Y2ggaXMgd3JvbmcsIHNvIHRoZSBydWxlIGlzIG1lYW50IHRvIGJlIGRpc2FibGVkIFx1MjAxNCB3aXRoIGEgcmVhc29uIFx1MjAxNCBhdFxuICogdGhlIHNpdGVzIHRoYXQgaGF2ZSBvbmU6IGEgZHJhZyBzZXF1ZW5jZSwgd2hpY2ggYHNlbmRJbnB1dEV2ZW50YCBjYW5ub3QgZXhwcmVzcyBhdCBhbGw7XG4gKiB0aGUgbW9iaWxlIGFybSBvZiBhIGhvdmVyIGdlc3R1cmUsIHdoaWNoIGhhcyBubyB0b3VjaCBlcXVpdmFsZW50OyBhbmQgYSBsaXN0ZW5lciB0aGF0XG4gKiBpcyB0aGUgcGx1Z2luJ3Mgb3duIGFuZCBjaGVja3Mgbm90aGluZyBidXQgdGhlIGtleS4gYHJlcXVpcmUtZGVzY3JpcHRpb25gXG4gKiBtYWtlcyB0aGF0IHJlYXNvbiBtYW5kYXRvcnksIHdoaWNoIGlzIHRoZSBwb2ludDogdGhlIHJ1bGUgdHVybnMgYW4gaW52aXNpYmxlIGFzc3VtcHRpb25cbiAqIGludG8gYSB3cml0dGVuIG9uZS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBUU0VTVHJlZSB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJ1bGUsXG4gIFNjb3BlXG59IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IHRvVFNFU1RyZWVOb2RlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbGludGVycy9lc2xpbnQtcnVsZXMvdHMtZXN0cmVlLW5vZGUnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhbiBpbnRlZ3JhdGlvbiB0ZXN0IGRyaXZlcyB0aGUgVUkgd2l0aCBhIGRpc3BhdGNoZWQgaW5wdXQgZXZlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW50cnVzdGVkSW5wdXRFdmVudHMnO1xuXG4vKipcbiAqIFdoYXQgdG8gZG8gaW5zdGVhZCwgcGVyIGV2ZW50IGNvbnN0cnVjdG9yLiBBbiBldmVudCBhYnNlbnQgZnJvbSB0aGlzIG1hcCBpcyBhXG4gKiBub3RpZmljYXRpb24gcmF0aGVyIHRoYW4gc2ltdWxhdGVkIGlucHV0LCBhbmQgaXMgbGVmdCBhbG9uZS5cbiAqL1xuY29uc3QgQURWSUNFX0JZX0VWRU5UX05BTUUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsnRHJhZ0V2ZW50JywgJ3RoZXJlIGlzIG5vIHRydXN0ZWQgZXF1aXZhbGVudCwgYmVjYXVzZSBgc2VuZElucHV0RXZlbnRgIGNhbm5vdCBleHByZXNzIGEgZHJhZywgc28ga2VlcCB0aGUgZGlzcGF0Y2ggYW5kIGRpc2FibGUgdGhpcyBydWxlIHdpdGggdGhlIHJlYXNvbiddLFxuICBbJ0tleWJvYXJkRXZlbnQnLCAndXNlIGBwcmVzc0tleWAsIGZvY3VzaW5nIHRoZSB0YXJnZXQgZmlyc3QsIHNpbmNlIGEgdHJ1c3RlZCBrZXkgcHJlc3MgZ29lcyB0byB3aGF0ZXZlciBob2xkcyBET00gZm9jdXMnXSxcbiAgWydNb3VzZUV2ZW50JywgJ3VzZSBgY2xpY2tFbGVtZW50YCwgb3IgYGNsaWNrTW91c2VgIHdoZW4gdGhlIHBvaW50IHRvIGNsaWNrIGlzIG5vdCBhbiBlbGVtZW50IGNlbnRyZSddLFxuICBbJ1BvaW50ZXJFdmVudCcsICd1c2UgYGNsaWNrRWxlbWVudGAsIG9yIGBjbGlja01vdXNlYCB3aGVuIHRoZSBwb2ludCB0byBjbGljayBpcyBub3QgYW4gZWxlbWVudCBjZW50cmUnXSxcbiAgWydUb3VjaEV2ZW50JywgJ3RoZXJlIGlzIG5vIHRydXN0ZWQgZXF1aXZhbGVudCwgc28ga2VlcCB0aGUgZGlzcGF0Y2ggYW5kIGRpc2FibGUgdGhpcyBydWxlIHdpdGggdGhlIHJlYXNvbiddLFxuICBbJ1doZWVsRXZlbnQnLCAndGhlcmUgaXMgbm8gdHJ1c3RlZCBlcXVpdmFsZW50LCBzbyBrZWVwIHRoZSBkaXNwYXRjaCBhbmQgZGlzYWJsZSB0aGlzIHJ1bGUgd2l0aCB0aGUgcmVhc29uJ11cbl0pO1xuXG4vKipcbiAqIEVTTGludCBydWxlIGRpc2FsbG93aW5nIHVudHJ1c3RlZCBpbnB1dCBldmVudHMgaW4gaW50ZWdyYXRpb24gdGVzdHMsIHdoZXJlIHRoZXkgY2FuIHNpbGVudGx5IGV4ZXJjaXNlIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBub1VudHJ1c3RlZElucHV0RXZlbnRzOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdDYWxsRXhwcmVzc2lvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNhbGxOb2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb247XG5cbiAgICAgICAgaWYgKCFpc0Rpc3BhdGNoRXZlbnRDYWxsKGNhbGxOb2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3VtZW50ID0gY2FsbE5vZGUuYXJndW1lbnRzWzBdO1xuICAgICAgICBpZiAoIWFyZ3VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnROYW1lID0gcmVzb2x2ZUV2ZW50TmFtZShhcmd1bWVudCwgbm9kZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZHZpY2UgPSBBRFZJQ0VfQllfRVZFTlRfTkFNRS5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKGFkdmljZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFkdmljZSxcbiAgICAgICAgICAgIGV2ZW50TmFtZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlzYWxsb3cgZHJpdmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyB3aXRoIGRpc3BhdGNoZWQgKHVudHJ1c3RlZCkgaW5wdXQgZXZlbnRzJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ0EgZGlzcGF0Y2hlZCB7eyBldmVudE5hbWUgfX0gaXMgdW50cnVzdGVkIChgaXNUcnVzdGVkID09PSBmYWxzZWApIGFuZCBPYnNpZGlhbiBtYXkgaWdub3JlIGl0LCBzbyB0aGlzIGNhbiBleGVyY2lzZSBub3RoaW5nIHdoaWxlIHN0aWxsIHBhc3Npbmc6IHt7IGFkdmljZSB9fS4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdwcm9ibGVtJ1xuICB9XG59O1xuXG4vKipcbiAqIEZpbmRzIGEgdmFyaWFibGUgYnkgbmFtZSwgd2Fsa2luZyBvdXR3YXJkcyBmcm9tIHRoZSBnaXZlbiBzY29wZS5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgdG8gc3RhcnQgZnJvbS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHZhcmlhYmxlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSB2YXJpYWJsZSwgb3IgYG51bGxgIHdoZW4gbm90aGluZyBpbiBzY29wZSBkZWNsYXJlcyB0aGF0IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRWYXJpYWJsZShzY29wZTogU2NvcGUuU2NvcGUsIG5hbWU6IHN0cmluZyk6IG51bGwgfCBTY29wZS5WYXJpYWJsZSB7XG4gIGxldCBjdXJyZW50U2NvcGU6IG51bGwgfCBTY29wZS5TY29wZSA9IHNjb3BlO1xuXG4gIHdoaWxlIChjdXJyZW50U2NvcGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IGN1cnJlbnRTY29wZS52YXJpYWJsZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gdmFyaWFibGU7XG4gICAgfVxuICAgIGN1cnJlbnRTY29wZSA9IGN1cnJlbnRTY29wZS51cHBlcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCBleHByZXNzaW9uIGlzIGEgYC5kaXNwYXRjaEV2ZW50KC4uLilgIGNhbGwuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgY2FsbCBleHByZXNzaW9uIG5vZGUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNhbGwgaXMgYDxzb21ldGhpbmc+LmRpc3BhdGNoRXZlbnQoLi4uKWAuXG4gKi9cbmZ1bmN0aW9uIGlzRGlzcGF0Y2hFdmVudENhbGwobm9kZTogVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy5cbiAgcmV0dXJuIGNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiBjYWxsZWUucHJvcGVydHkubmFtZSA9PT0gJ2Rpc3BhdGNoRXZlbnQnO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBpZGVudGlmaWVyIGEgYG5ldyAuLi4oKWAgZXhwcmVzc2lvbiBjb25zdHJ1Y3RzLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIGBOZXdFeHByZXNzaW9uYCBub2RlLlxuICogQHJldHVybnMgVGhlIGNvbnN0cnVjdG9yJ3MgbmFtZSwgb3IgYG51bGxgIHdoZW4gdGhlIGNhbGxlZSBpcyBub3QgYSBiYXJlIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIHJlYWRDb25zdHJ1Y3Rvck5hbWUobm9kZTogVFNFU1RyZWUuTmV3RXhwcmVzc2lvbik6IG51bGwgfCBzdHJpbmcge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICByZXR1cm4gbm9kZS5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInID8gbm9kZS5jYWxsZWUubmFtZSA6IG51bGw7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNvbnN0cnVjdG9yIG5hbWUgb2YgdGhlIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQuXG4gKlxuICogSGFuZGxlcyB0aGUgYXJndW1lbnQgd3JpdHRlbiBpbmxpbmUgKGBkaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KC4uLikpYCkgYW5kIHRoZVxuICogYXJndW1lbnQgaGVsZCBpbiBhIHZhcmlhYmxlIChgY29uc3QgZSA9IG5ldyBEcmFnRXZlbnQoLi4uKTsgZWwuZGlzcGF0Y2hFdmVudChlKWApLFxuICogd2hpY2ggaXMgaG93IGEgc2VxdWVuY2Ugc2hhcmluZyBvbmUgYERhdGFUcmFuc2ZlcmAgaXMgdXN1YWxseSB3cml0dGVuLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudCAtIFRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwuXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBjYWxsIG5vZGUsIHVzZWQgdG8gcmVzb2x2ZSB0aGUgZW5jbG9zaW5nIHNjb3BlLlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcnVsZSBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGNvbnN0cnVjdG9yIG5hbWUsIG9yIGBudWxsYCB3aGVuIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5mdW5jdGlvbiByZXNvbHZlRXZlbnROYW1lKGFyZ3VtZW50OiBUU0VTVHJlZS5Ob2RlLCBub2RlOiBSdWxlLk5vZGUsIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBudWxsIHwgc3RyaW5nIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy5cbiAgaWYgKGFyZ3VtZW50LnR5cGUgPT09ICdOZXdFeHByZXNzaW9uJykge1xuICAgIHJldHVybiByZWFkQ29uc3RydWN0b3JOYW1lKGFyZ3VtZW50KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gIGlmIChhcmd1bWVudC50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHZhcmlhYmxlID0gZmluZFZhcmlhYmxlKGNvbnRleHQuc291cmNlQ29kZS5nZXRTY29wZShub2RlKSwgYXJndW1lbnQubmFtZSk7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiB2YXJpYWJsZS5kZWZzKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbk5vZGUgPSB0b1RTRVNUcmVlTm9kZShkZWZpbml0aW9uLm5vZGUpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuXG4gICAgaWYgKGRlZmluaXRpb25Ob2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0b3InIHx8ICFkZWZpbml0aW9uTm9kZS5pbml0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLlxuICAgIGlmIChkZWZpbml0aW9uTm9kZS5pbml0LnR5cGUgPT09ICdOZXdFeHByZXNzaW9uJykge1xuICAgICAgcmV0dXJuIHJlYWRDb25zdHJ1Y3Rvck5hbWUoZGVmaW5pdGlvbk5vZGUuaW5pdCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFDQSw0QkFBK0I7QUFLeEIsTUFBTSxhQUFhO0FBTTFCLE1BQU0sdUJBQXVCLG9CQUFJLElBQW9CO0FBQUEsRUFDbkQsQ0FBQyxhQUFhLDRJQUE0STtBQUFBLEVBQzFKLENBQUMsaUJBQWlCLHVHQUF1RztBQUFBLEVBQ3pILENBQUMsY0FBYyxzRkFBc0Y7QUFBQSxFQUNyRyxDQUFDLGdCQUFnQixzRkFBc0Y7QUFBQSxFQUN2RyxDQUFDLGNBQWMsNEZBQTRGO0FBQUEsRUFDM0csQ0FBQyxjQUFjLDRGQUE0RjtBQUM3RyxDQUFDO0FBS00sTUFBTSx5QkFBMEM7QUFBQSxFQUNyRCxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxpQkFBaUIsTUFBdUI7QUFDdEMsY0FBTSxlQUFXLHNDQUFlLElBQUk7QUFFcEMsWUFBSSxDQUFDLG9CQUFvQixRQUFRLEdBQUc7QUFDbEM7QUFBQSxRQUNGO0FBRUEsY0FBTSxXQUFXLFNBQVMsVUFBVSxDQUFDO0FBQ3JDLFlBQUksQ0FBQyxVQUFVO0FBQ2I7QUFBQSxRQUNGO0FBRUEsY0FBTSxZQUFZLGlCQUFpQixVQUFVLE1BQU0sT0FBTztBQUMxRCxZQUFJLGNBQWMsTUFBTTtBQUN0QjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLFNBQVMscUJBQXFCLElBQUksU0FBUztBQUNqRCxZQUFJLFdBQVcsUUFBVztBQUN4QjtBQUFBLFFBQ0Y7QUFFQSxnQkFBUSxPQUFPO0FBQUEsVUFDYixNQUFNO0FBQUEsWUFDSjtBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsVUFBVSxHQUFHO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1I7QUFDRjtBQVNBLFNBQVMsYUFBYSxPQUFvQixNQUFxQztBQUM3RSxNQUFJLGVBQW1DO0FBRXZDLFNBQU8sY0FBYztBQUNuQixVQUFNLFdBQVcsYUFBYSxVQUFVLEtBQUssQ0FBQyxjQUFjLFVBQVUsU0FBUyxJQUFJO0FBQ25GLFFBQUksVUFBVTtBQUNaLGFBQU87QUFBQSxJQUNUO0FBQ0EsbUJBQWUsYUFBYTtBQUFBLEVBQzlCO0FBRUEsU0FBTztBQUNUO0FBUUEsU0FBUyxvQkFBb0IsTUFBd0M7QUFDbkUsUUFBTSxTQUFTLEtBQUs7QUFHcEIsU0FBTyxPQUFPLFNBQVMsc0JBQXNCLE9BQU8sU0FBUyxTQUFTLGdCQUFnQixPQUFPLFNBQVMsU0FBUztBQUNqSDtBQVFBLFNBQVMsb0JBQW9CLE1BQTZDO0FBRXhFLFNBQU8sS0FBSyxPQUFPLFNBQVMsZUFBZSxLQUFLLE9BQU8sT0FBTztBQUNoRTtBQWNBLFNBQVMsaUJBQWlCLFVBQXlCLE1BQWlCLFNBQTBDO0FBRTVHLE1BQUksU0FBUyxTQUFTLGlCQUFpQjtBQUNyQyxXQUFPLG9CQUFvQixRQUFRO0FBQUEsRUFDckM7QUFHQSxNQUFJLFNBQVMsU0FBUyxjQUFjO0FBQ2xDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxXQUFXLGFBQWEsUUFBUSxXQUFXLFNBQVMsSUFBSSxHQUFHLFNBQVMsSUFBSTtBQUM5RSxNQUFJLENBQUMsVUFBVTtBQUNiLFdBQU87QUFBQSxFQUNUO0FBRUEsYUFBVyxjQUFjLFNBQVMsTUFBTTtBQUN0QyxVQUFNLHFCQUFpQixzQ0FBZSxXQUFXLElBQUk7QUFFckQsUUFBSSxlQUFlLFNBQVMsd0JBQXdCLENBQUMsZUFBZSxNQUFNO0FBQ3hFO0FBQUEsSUFDRjtBQUdBLFFBQUksZUFBZSxLQUFLLFNBQVMsaUJBQWlCO0FBQ2hELGFBQU8sb0JBQW9CLGVBQWUsSUFBSTtBQUFBLElBQ2hEO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // 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.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  function keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -66,7 +54,6 @@ function keepName($unknown) {
66
54
  return;
67
55
  }
68
56
 
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
57
  require = Object.assign(
71
58
  (id) => requirePatched(id),
72
59
  originalRequire,
@@ -164,9 +151,13 @@ var import_manifest_description = require('./manifest-description.cjs');
164
151
  var import_manifest_id = require('./manifest-id.cjs');
165
152
  var import_manifest_name = require('./manifest-name.cjs');
166
153
  var import_manifest_schema = require('./manifest-schema.cjs');
154
+ var import_no_local_obsidian_internals = require('./no-local-obsidian-internals.cjs');
167
155
  var import_no_over_cap_wait_in_eval_in_obsidian = require('./no-over-cap-wait-in-eval-in-obsidian.cjs');
168
156
  var import_no_untrusted_input_events = require('./no-untrusted-input-events.cjs');
157
+ var import_plugin_name_as_code_in_ui = require('./plugin-name-as-code-in-ui.cjs');
158
+ var import_plugin_name_as_code = require('./plugin-name-as-code.cjs');
169
159
  var import_require_component_suffix = require('./require-component-suffix.cjs');
160
+ var import_require_plugin_api_contract_schemas = require('./require-plugin-api-contract-schemas.cjs');
170
161
  const obsidianDevUtilsPlugin = {
171
162
  rules: {
172
163
  ...import_in_house_plugin.genericInHouseEslintRules,
@@ -174,13 +165,17 @@ const obsidianDevUtilsPlugin = {
174
165
  "manifest-id": import_manifest_id.manifestId,
175
166
  "manifest-name": import_manifest_name.manifestName,
176
167
  "manifest-schema": import_manifest_schema.manifestSchema,
168
+ "no-local-obsidian-internals": import_no_local_obsidian_internals.noLocalObsidianInternals,
177
169
  "no-over-cap-wait-in-eval-in-obsidian": import_no_over_cap_wait_in_eval_in_obsidian.noOverCapWaitInEvalInObsidian,
178
170
  "no-untrusted-input-events": import_no_untrusted_input_events.noUntrustedInputEvents,
179
- "require-component-suffix": import_require_component_suffix.requireComponentSuffix
171
+ "plugin-name-as-code": import_plugin_name_as_code.pluginNameAsCode,
172
+ "plugin-name-as-code-in-ui": import_plugin_name_as_code_in_ui.pluginNameAsCodeInUi,
173
+ "require-component-suffix": import_require_component_suffix.requireComponentSuffix,
174
+ "require-plugin-api-contract-schemas": import_require_plugin_api_contract_schemas.requirePluginApiContractSchemas
180
175
  }
181
176
  };
182
177
  // Annotate the CommonJS export names for ESM import in node:
183
178
  0 && (module.exports = {
184
179
  obsidianDevUtilsPlugin
185
180
  });
186
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL29ic2lkaWFuLWRldi11dGlscy1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcGx1Z2luIGZvciBPYnNpZGlhbiBkZXZlbG9wbWVudCB1dGlsaXRpZXMuXG4gKi9cbmltcG9ydCB0eXBlIHsgRVNMaW50IH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgZ2VuZXJpY0luSG91c2VFc2xpbnRSdWxlcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luLWhvdXNlLXBsdWdpbic7XG5cbmltcG9ydCB7IG1hbmlmZXN0RGVzY3JpcHRpb24gfSBmcm9tICcuL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0SWQgfSBmcm9tICcuL21hbmlmZXN0LWlkLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0TmFtZSB9IGZyb20gJy4vbWFuaWZlc3QtbmFtZS50cyc7XG5pbXBvcnQgeyBtYW5pZmVzdFNjaGVtYSB9IGZyb20gJy4vbWFuaWZlc3Qtc2NoZW1hLnRzJztcbmltcG9ydCB7IG5vT3ZlckNhcFdhaXRJbkV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9uby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4udHMnO1xuaW1wb3J0IHsgbm9VbnRydXN0ZWRJbnB1dEV2ZW50cyB9IGZyb20gJy4vbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cy50cyc7XG5pbXBvcnQgeyByZXF1aXJlQ29tcG9uZW50U3VmZml4IH0gZnJvbSAnLi9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgudHMnO1xuXG4vKipcbiAqIEVTTGludCBwbHVnaW4gYnVuZGxpbmcgZXZlcnkgYG9ic2lkaWFuLWRldi11dGlsc2AgY3VzdG9tIHJ1bGUsIHJlZ2lzdGVyZWQgdW5kZXIgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIG5hbWVzcGFjZTpcbiAqIHRoZSBnZW5lcmljIHJ1bGVzIG9mIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdGAgYW5kIHRoZSBPYnNpZGlhbiBvbmVzLiBJdCBpcyBPTkUgcGx1Z2luIGNhcnJ5aW5nIGJvdGgsXG4gKiBiZWNhdXNlIEVTTGludCByZWZ1c2VzIHR3byBkaWZmZXJlbnQgcGx1Z2lucyB1bmRlciBvbmUgbmFtZXNwYWNlLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc1BsdWdpbjogRVNMaW50LlBsdWdpbiA9IHtcbiAgcnVsZXM6IHtcbiAgICAuLi5nZW5lcmljSW5Ib3VzZUVzbGludFJ1bGVzLFxuICAgICdtYW5pZmVzdC1kZXNjcmlwdGlvbic6IG1hbmlmZXN0RGVzY3JpcHRpb24sXG4gICAgJ21hbmlmZXN0LWlkJzogbWFuaWZlc3RJZCxcbiAgICAnbWFuaWZlc3QtbmFtZSc6IG1hbmlmZXN0TmFtZSxcbiAgICAnbWFuaWZlc3Qtc2NoZW1hJzogbWFuaWZlc3RTY2hlbWEsXG4gICAgJ25vLW92ZXItY2FwLXdhaXQtaW4tZXZhbC1pbi1vYnNpZGlhbic6IG5vT3ZlckNhcFdhaXRJbkV2YWxJbk9ic2lkaWFuLFxuICAgICduby11bnRydXN0ZWQtaW5wdXQtZXZlbnRzJzogbm9VbnRydXN0ZWRJbnB1dEV2ZW50cyxcbiAgICAncmVxdWlyZS1jb21wb25lbnQtc3VmZml4JzogcmVxdWlyZUNvbXBvbmVudFN1ZmZpeFxuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLDZCQUEwQztBQUUxQyxrQ0FBb0M7QUFDcEMseUJBQTJCO0FBQzNCLDJCQUE2QjtBQUM3Qiw2QkFBK0I7QUFDL0Isa0RBQThDO0FBQzlDLHVDQUF1QztBQUN2QyxzQ0FBdUM7QUFPaEMsTUFBTSx5QkFBd0M7QUFBQSxFQUNuRCxPQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsSUFDSCx3QkFBd0I7QUFBQSxJQUN4QixlQUFlO0FBQUEsSUFDZixpQkFBaUI7QUFBQSxJQUNqQixtQkFBbUI7QUFBQSxJQUNuQix3Q0FBd0M7QUFBQSxJQUN4Qyw2QkFBNkI7QUFBQSxJQUM3Qiw0QkFBNEI7QUFBQSxFQUM5QjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
181
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL29ic2lkaWFuLWRldi11dGlscy1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcGx1Z2luIGZvciBPYnNpZGlhbiBkZXZlbG9wbWVudCB1dGlsaXRpZXMuXG4gKi9cbmltcG9ydCB0eXBlIHsgRVNMaW50IH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgZ2VuZXJpY0luSG91c2VFc2xpbnRSdWxlcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luLWhvdXNlLXBsdWdpbic7XG5cbmltcG9ydCB7IG1hbmlmZXN0RGVzY3JpcHRpb24gfSBmcm9tICcuL21hbmlmZXN0LWRlc2NyaXB0aW9uLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0SWQgfSBmcm9tICcuL21hbmlmZXN0LWlkLnRzJztcbmltcG9ydCB7IG1hbmlmZXN0TmFtZSB9IGZyb20gJy4vbWFuaWZlc3QtbmFtZS50cyc7XG5pbXBvcnQgeyBtYW5pZmVzdFNjaGVtYSB9IGZyb20gJy4vbWFuaWZlc3Qtc2NoZW1hLnRzJztcbmltcG9ydCB7IG5vTG9jYWxPYnNpZGlhbkludGVybmFscyB9IGZyb20gJy4vbm8tbG9jYWwtb2JzaWRpYW4taW50ZXJuYWxzLnRzJztcbmltcG9ydCB7IG5vT3ZlckNhcFdhaXRJbkV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9uby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4udHMnO1xuaW1wb3J0IHsgbm9VbnRydXN0ZWRJbnB1dEV2ZW50cyB9IGZyb20gJy4vbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cy50cyc7XG5pbXBvcnQgeyBwbHVnaW5OYW1lQXNDb2RlSW5VaSB9IGZyb20gJy4vcGx1Z2luLW5hbWUtYXMtY29kZS1pbi11aS50cyc7XG5pbXBvcnQgeyBwbHVnaW5OYW1lQXNDb2RlIH0gZnJvbSAnLi9wbHVnaW4tbmFtZS1hcy1jb2RlLnRzJztcbmltcG9ydCB7IHJlcXVpcmVDb21wb25lbnRTdWZmaXggfSBmcm9tICcuL3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeC50cyc7XG5pbXBvcnQgeyByZXF1aXJlUGx1Z2luQXBpQ29udHJhY3RTY2hlbWFzIH0gZnJvbSAnLi9yZXF1aXJlLXBsdWdpbi1hcGktY29udHJhY3Qtc2NoZW1hcy50cyc7XG5cbi8qKlxuICogRVNMaW50IHBsdWdpbiBidW5kbGluZyBldmVyeSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBjdXN0b20gcnVsZSwgcmVnaXN0ZXJlZCB1bmRlciB0aGUgYG9ic2lkaWFuLWRldi11dGlsc2AgbmFtZXNwYWNlOlxuICogdGhlIGdlbmVyaWMgcnVsZXMgb2YgYEBtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0YCBhbmQgdGhlIE9ic2lkaWFuIG9uZXMuIEl0IGlzIE9ORSBwbHVnaW4gY2FycnlpbmcgYm90aCxcbiAqIGJlY2F1c2UgRVNMaW50IHJlZnVzZXMgdHdvIGRpZmZlcmVudCBwbHVnaW5zIHVuZGVyIG9uZSBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlV0aWxzUGx1Z2luOiBFU0xpbnQuUGx1Z2luID0ge1xuICBydWxlczoge1xuICAgIC4uLmdlbmVyaWNJbkhvdXNlRXNsaW50UnVsZXMsXG4gICAgJ21hbmlmZXN0LWRlc2NyaXB0aW9uJzogbWFuaWZlc3REZXNjcmlwdGlvbixcbiAgICAnbWFuaWZlc3QtaWQnOiBtYW5pZmVzdElkLFxuICAgICdtYW5pZmVzdC1uYW1lJzogbWFuaWZlc3ROYW1lLFxuICAgICdtYW5pZmVzdC1zY2hlbWEnOiBtYW5pZmVzdFNjaGVtYSxcbiAgICAnbm8tbG9jYWwtb2JzaWRpYW4taW50ZXJuYWxzJzogbm9Mb2NhbE9ic2lkaWFuSW50ZXJuYWxzLFxuICAgICduby1vdmVyLWNhcC13YWl0LWluLWV2YWwtaW4tb2JzaWRpYW4nOiBub092ZXJDYXBXYWl0SW5FdmFsSW5PYnNpZGlhbixcbiAgICAnbm8tdW50cnVzdGVkLWlucHV0LWV2ZW50cyc6IG5vVW50cnVzdGVkSW5wdXRFdmVudHMsXG4gICAgJ3BsdWdpbi1uYW1lLWFzLWNvZGUnOiBwbHVnaW5OYW1lQXNDb2RlLFxuICAgICdwbHVnaW4tbmFtZS1hcy1jb2RlLWluLXVpJzogcGx1Z2luTmFtZUFzQ29kZUluVWksXG4gICAgJ3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeCc6IHJlcXVpcmVDb21wb25lbnRTdWZmaXgsXG4gICAgJ3JlcXVpcmUtcGx1Z2luLWFwaS1jb250cmFjdC1zY2hlbWFzJzogcmVxdWlyZVBsdWdpbkFwaUNvbnRyYWN0U2NoZW1hc1xuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0EsNkJBQTBDO0FBRTFDLGtDQUFvQztBQUNwQyx5QkFBMkI7QUFDM0IsMkJBQTZCO0FBQzdCLDZCQUErQjtBQUMvQix5Q0FBeUM7QUFDekMsa0RBQThDO0FBQzlDLHVDQUF1QztBQUN2Qyx1Q0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLHNDQUF1QztBQUN2QyxpREFBZ0Q7QUFPekMsTUFBTSx5QkFBd0M7QUFBQSxFQUNuRCxPQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsSUFDSCx3QkFBd0I7QUFBQSxJQUN4QixlQUFlO0FBQUEsSUFDZixpQkFBaUI7QUFBQSxJQUNqQixtQkFBbUI7QUFBQSxJQUNuQiwrQkFBK0I7QUFBQSxJQUMvQix3Q0FBd0M7QUFBQSxJQUN4Qyw2QkFBNkI7QUFBQSxJQUM3Qix1QkFBdUI7QUFBQSxJQUN2Qiw2QkFBNkI7QUFBQSxJQUM3Qiw0QkFBNEI7QUFBQSxJQUM1Qix1Q0FBdUM7QUFBQSxFQUN6QztBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,263 @@
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 ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return "/";
17
+ },
18
+ env: {},
19
+ platform: "android"
20
+ };
21
+ const existingProcess = globalThis.process;
22
+ if (!existingProcess) {
23
+ globalThis.process = browserProcess;
24
+ return;
25
+ }
26
+ if (existingProcess.versions?.node) {
27
+ return;
28
+ }
29
+ const existingProcessRecord = existingProcess;
30
+ for (const [key, value] of Object.entries(browserProcess)) {
31
+ existingProcessRecord[key] ??= value;
32
+ }
33
+ existingProcessRecord["browser"] = true;
34
+ }
35
+
36
+ function keepName($unknown) {
37
+ return $unknown;
38
+ }
39
+
40
+ (function initCjs() {
41
+ const globalThisRecord = globalThis;
42
+ ensureDisposeSymbols();
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
45
+ ensureBrowserProcess();
46
+ function extractDefault(module) {
47
+ return module && module.__esModule && "default" in module ? module.default : module;
48
+ }
49
+ })();
50
+ })();
51
+ (function patchObsidianRequire() {
52
+ const originalRequire = require;
53
+ if (!originalRequire || originalRequire.__isPatched) {
54
+ return;
55
+ }
56
+
57
+ require = Object.assign(
58
+ (id) => requirePatched(id),
59
+ originalRequire,
60
+ {
61
+ __isPatched: true
62
+ }
63
+ );
64
+
65
+ function extractDefault(module) {
66
+ return module && module.__esModule && 'default' in module ? module.default : module;
67
+ }
68
+
69
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
70
+ '@codemirror/autocomplete',
71
+ '@codemirror/collab',
72
+ '@codemirror/commands',
73
+ '@codemirror/language',
74
+ '@codemirror/lint',
75
+ '@codemirror/search',
76
+ '@codemirror/state',
77
+ '@codemirror/text',
78
+ '@codemirror/view',
79
+ '@lezer/common',
80
+ '@lezer/highlight',
81
+ '@lezer/lr',
82
+ 'obsidian']
83
+ );
84
+
85
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
86
+ '@codemirror/closebrackets',
87
+ '@codemirror/comment',
88
+ '@codemirror/fold',
89
+ '@codemirror/gutter',
90
+ '@codemirror/highlight',
91
+ '@codemirror/history',
92
+ '@codemirror/matchbrackets',
93
+ '@codemirror/panel',
94
+ '@codemirror/rangeset',
95
+ '@codemirror/rectangular-selection',
96
+ '@codemirror/stream-parser',
97
+ '@codemirror/tooltip']
98
+ );
99
+
100
+ function requirePatched(id) {
101
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
102
+ return originalRequire?.(id);
103
+ }
104
+
105
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
106
+ if (globalThis.app.isMobile) {
107
+ if (id === 'process' || id === 'node:process') {
108
+ // eslint-disable-next-line no-console -- Valid usage.
109
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
110
+
111
+ return process;
112
+ }
113
+ } else {
114
+ const module = originalRequire?.(id);
115
+ if (module) {
116
+ return extractDefault(module);
117
+ }
118
+ }
119
+
120
+ // eslint-disable-next-line no-console -- Valid usage.
121
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
122
+ return {};
123
+ }
124
+ })();
125
+
126
+ "use strict";
127
+ var __defProp = Object.defineProperty;
128
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
129
+ var __getOwnPropNames = Object.getOwnPropertyNames;
130
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
131
+ var __export = (target, all) => {
132
+ for (var name in all)
133
+ __defProp(target, name, { get: all[name], enumerable: true });
134
+ };
135
+ var __copyProps = (to, from, except, desc) => {
136
+ if (from && typeof from === "object" || typeof from === "function") {
137
+ for (let key of __getOwnPropNames(from))
138
+ if (!__hasOwnProp.call(to, key) && key !== except)
139
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
140
+ }
141
+ return to;
142
+ };
143
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
144
+ var plugin_name_as_code_in_ui_exports = {};
145
+ __export(plugin_name_as_code_in_ui_exports, {
146
+ MESSAGE_ID: () => MESSAGE_ID,
147
+ pluginNameAsCodeInUi: () => pluginNameAsCodeInUi
148
+ });
149
+ module.exports = __toCommonJS(plugin_name_as_code_in_ui_exports);
150
+ var import_plugin_names = require('../plugin-names.cjs');
151
+ var import_plugin_name_as_code = require('./plugin-name-as-code.cjs');
152
+ const MESSAGE_ID = "pluginNameAsCodeInUi";
153
+ const UI_TEXT_METHOD_NAMES = /* @__PURE__ */ new Set(["appendText", "setDesc", "setName", "setText", "setTitle"]);
154
+ const ELEMENT_FACTORY_NAMES = /* @__PURE__ */ new Set(["createDiv", "createEl", "createSpan"]);
155
+ const pluginNameAsCodeInUi = {
156
+ create(context) {
157
+ const options = context.options[0];
158
+ const pluginNames = (0, import_plugin_names.getPluginNames)({ additionalPluginNames: options?.additionalPluginNames, cwd: context.cwd });
159
+ return {
160
+ CallExpression(node) {
161
+ const calleeName = getCalleeName(node);
162
+ if (calleeName === null) {
163
+ return;
164
+ }
165
+ if (UI_TEXT_METHOD_NAMES.has(calleeName) && node.callee.type === "MemberExpression") {
166
+ inspectArgument(node.arguments[0]);
167
+ return;
168
+ }
169
+ if (!ELEMENT_FACTORY_NAMES.has(calleeName)) {
170
+ return;
171
+ }
172
+ for (const argument of node.arguments) {
173
+ if (argument.type !== "ObjectExpression") {
174
+ continue;
175
+ }
176
+ for (const property of argument.properties) {
177
+ if (property.type === "Property" && !property.computed && getKeyName(property.key) === "text") {
178
+ inspectExpression(property.value);
179
+ }
180
+ }
181
+ }
182
+ },
183
+ NewExpression(node) {
184
+ if (node.callee.type === "Identifier" && node.callee.name === "Notice") {
185
+ inspectArgument(node.arguments[0]);
186
+ }
187
+ }
188
+ };
189
+ function inspectArgument(argument) {
190
+ if (argument && argument.type !== "SpreadElement") {
191
+ inspectExpression(argument);
192
+ }
193
+ }
194
+ function inspectExpression(node) {
195
+ switch (node.type) {
196
+ case "BinaryExpression": {
197
+ if (node.operator === "+") {
198
+ inspectExpression(node.left);
199
+ inspectExpression(node.right);
200
+ }
201
+ break;
202
+ }
203
+ case "ConditionalExpression": {
204
+ inspectExpression(node.consequent);
205
+ inspectExpression(node.alternate);
206
+ break;
207
+ }
208
+ case "Literal": {
209
+ if (typeof node.value === "string") {
210
+ reportText(node, node.value);
211
+ }
212
+ break;
213
+ }
214
+ case "TemplateLiteral": {
215
+ for (const templateElement of node.quasis) {
216
+ reportText(templateElement, templateElement.value.raw);
217
+ }
218
+ break;
219
+ }
220
+ default: {
221
+ break;
222
+ }
223
+ }
224
+ }
225
+ function reportText(node, text) {
226
+ for (const match of (0, import_plugin_names.findPluginNameMatches)(text, pluginNames)) {
227
+ context.report({
228
+ data: { name: match.name },
229
+ messageId: MESSAGE_ID,
230
+ node
231
+ });
232
+ }
233
+ }
234
+ },
235
+ meta: {
236
+ docs: {
237
+ description: "Require a plugin name shown in UI to be built as a `<code>` element"
238
+ },
239
+ messages: {
240
+ [MESSAGE_ID]: "The plugin name `{{ name }}` is shown in UI as plain text. Build it as a `<code>` element instead: `appendCodeBlock()` into a `DocumentFragment`, or `createFragmentWithCodeBlocks()` with `asCodeBlock()`, from `@mnaoumov/obsidian-lib`'s `html-element.ts`."
241
+ },
242
+ schema: import_plugin_name_as_code.PLUGIN_NAME_RULE_SCHEMA,
243
+ type: "suggestion"
244
+ }
245
+ };
246
+ function getCalleeName(node) {
247
+ if (node.callee.type === "Identifier") {
248
+ return node.callee.name;
249
+ }
250
+ return node.callee.type === "MemberExpression" && !node.callee.computed && node.callee.property.type === "Identifier" ? node.callee.property.name : null;
251
+ }
252
+ function getKeyName(key) {
253
+ if (key.type === "Identifier") {
254
+ return key.name;
255
+ }
256
+ return key.type === "Literal" && typeof key.value === "string" ? key.value : null;
257
+ }
258
+ // Annotate the CommonJS export names for ESM import in node:
259
+ 0 && (module.exports = {
260
+ MESSAGE_ID,
261
+ pluginNameAsCodeInUi
262
+ });
263
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3BsdWdpbi1uYW1lLWFzLWNvZGUtaW4tdWkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcGx1Z2luLW5hbWUtYXMtY29kZS1pbi11aVxuICpcbiAqIFJlcG9ydHMgYW4gT2JzaWRpYW4gcGx1Z2luJ3MgZGlzcGxheSBuYW1lIGluc2lkZSBhIHN0cmluZyB0aGF0IGlzIHNob3duIGluIFVJIGFzIHBsYWluIHRleHQuIEluIFVJIHRoZSBuYW1lIGlzXG4gKiBidWlsdCBhcyBhIGA8Y29kZT5gIGVsZW1lbnQgaW5zdGVhZDogYGFwcGVuZENvZGVCbG9jaygpYCBpbnRvIGEgYERvY3VtZW50RnJhZ21lbnRgLCBvciBgY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2NrcygpYFxuICogd2l0aCBgYXNDb2RlQmxvY2soKWAsIGZyb20gYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgJ3MgYGh0bWwtZWxlbWVudC50c2AsIGFuZCB0aGUgZnJhZ21lbnQgaXMgd2hhdCBpcyBwYXNzZWQgb24uXG4gKlxuICogRGV0ZWN0aW9uIGlzIGJlc3QgZWZmb3J0LCBieSBjYWxsIHNoYXBlLCB3aXRob3V0IHR5cGUgaW5mb3JtYXRpb24uIEEgc3RyaW5nIGxpdGVyYWwgb3IgdGVtcGxhdGUgbGl0ZXJhbCAob3IgYVxuICogYCtgIGNvbmNhdGVuYXRpb24gb3IgYD8gOmAgYnJhbmNoIG1hZGUgb2YgdGhlbSkgaXMgcmVhZCB3aGVuIGl0IGlzOlxuICpcbiAqIC0gdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGBuZXcgTm90aWNlKC4uLilgO1xuICogLSB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYHNldE5hbWVgLCBgc2V0RGVzY2AsIGBzZXRUZXh0YCwgYGFwcGVuZFRleHRgIG9yIGBzZXRUaXRsZWAgY2FsbGVkIG9uIGFueXRoaW5nO1xuICogLSB0aGUgYHRleHRgIHByb3BlcnR5IG9mIGFuIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byBgY3JlYXRlRWxgLCBgY3JlYXRlRGl2YCBvciBgY3JlYXRlU3BhbmAuXG4gKlxuICogVGhlcmUgaXMgbm8gYXV0b2ZpeDogc3BsaXR0aW5nIGEgc3RyaW5nIGFyb3VuZCB0aGUgbmFtZSBhbmQgYnVpbGRpbmcgYSBmcmFnbWVudCBpcyBhIHJld3JpdGUgb2YgdGhlIGNhbGwsIGFuZFxuICogb2Z0ZW4gb2YgYSB0cmFuc2xhdGlvbiBrZXksIHdoaWNoIG5lZWRzIGp1ZGdlbWVudC4gQSBjb21tYW5kIG5hbWUsIGEgcmliYm9uIHRvb2x0aXAgYW5kIGEgd2luZG93IHRpdGxlIGNhbm5vdCBob2xkXG4gKiBtYXJrdXAsIHNvIHRoZSBjYWxscyB0aGF0IHNldCB0aGVtIChgYWRkQ29tbWFuZGAsIGBhZGRSaWJib25JY29uYCwgYGRvY3VtZW50LnRpdGxlYCkgYXJlIG5vdCByZWFkIGF0IGFsbC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuaW1wb3J0IHR5cGUge1xuICBDYWxsRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbixcbiAgTmV3RXhwcmVzc2lvbixcbiAgTm9kZSxcbiAgU3ByZWFkRWxlbWVudFxufSBmcm9tICdlc3RyZWUnO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5hbWVSdWxlT3B0aW9ucyB9IGZyb20gJy4uL3BsdWdpbi1uYW1lcy50cyc7XG5cbmltcG9ydCB7XG4gIGZpbmRQbHVnaW5OYW1lTWF0Y2hlcyxcbiAgZ2V0UGx1Z2luTmFtZXNcbn0gZnJvbSAnLi4vcGx1Z2luLW5hbWVzLnRzJztcbmltcG9ydCB7IFBMVUdJTl9OQU1FX1JVTEVfU0NIRU1BIH0gZnJvbSAnLi9wbHVnaW4tbmFtZS1hcy1jb2RlLnRzJztcblxuLyoqXG4gKiBNZXNzYWdlIElEIHJlcG9ydGVkIGZvciBhIHBsdWdpbiBuYW1lIGluc2lkZSBhIFVJIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAncGx1Z2luTmFtZUFzQ29kZUluVWknO1xuXG4vKipcbiAqIFRoZSBtZXRob2RzIHdob3NlIGZpcnN0IGFyZ3VtZW50IGlzIHNob3duIGluIFVJIGFuZCBtYXkgYmUgYSBgRG9jdW1lbnRGcmFnbWVudGAuXG4gKi9cbmNvbnN0IFVJX1RFWFRfTUVUSE9EX05BTUVTID0gbmV3IFNldChbJ2FwcGVuZFRleHQnLCAnc2V0RGVzYycsICdzZXROYW1lJywgJ3NldFRleHQnLCAnc2V0VGl0bGUnXSk7XG5cbi8qKlxuICogVGhlIGVsZW1lbnQgZmFjdG9yaWVzIHdob3NlIG9wdGlvbnMgb2JqZWN0IGNhcnJpZXMgVUkgdGV4dCBpbiBgdGV4dGAuXG4gKi9cbmNvbnN0IEVMRU1FTlRfRkFDVE9SWV9OQU1FUyA9IG5ldyBTZXQoWydjcmVhdGVEaXYnLCAnY3JlYXRlRWwnLCAnY3JlYXRlU3BhbiddKTtcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgYSBwbHVnaW4gbmFtZSBzaG93biBpbiBVSSB0byBiZSBidWlsdCBhcyBhIGA8Y29kZT5gIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBwbHVnaW5OYW1lQXNDb2RlSW5VaTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gYXMgUGx1Z2luTmFtZVJ1bGVPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gZ2V0UGx1Z2luTmFtZXMoeyBhZGRpdGlvbmFsUGx1Z2luTmFtZXM6IG9wdGlvbnM/LmFkZGl0aW9uYWxQbHVnaW5OYW1lcywgY3dkOiBjb250ZXh0LmN3ZCB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBDYWxsRXhwcmVzc2lvbihub2RlOiBDYWxsRXhwcmVzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxsZWVOYW1lID0gZ2V0Q2FsbGVlTmFtZShub2RlKTtcbiAgICAgICAgaWYgKGNhbGxlZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoVUlfVEVYVF9NRVRIT0RfTkFNRVMuaGFzKGNhbGxlZU5hbWUpICYmIG5vZGUuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgIGluc3BlY3RBcmd1bWVudChub2RlLmFyZ3VtZW50c1swXSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFFTEVNRU5UX0ZBQ1RPUllfTkFNRVMuaGFzKGNhbGxlZU5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBub2RlLmFyZ3VtZW50cykge1xuICAgICAgICAgIGlmIChhcmd1bWVudC50eXBlICE9PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGFyZ3VtZW50LnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS50eXBlID09PSAnUHJvcGVydHknICYmICFwcm9wZXJ0eS5jb21wdXRlZCAmJiBnZXRLZXlOYW1lKHByb3BlcnR5LmtleSkgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICBpbnNwZWN0RXhwcmVzc2lvbihwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgTmV3RXhwcmVzc2lvbihub2RlOiBOZXdFeHByZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ05vdGljZScpIHtcbiAgICAgICAgICBpbnNwZWN0QXJndW1lbnQobm9kZS5hcmd1bWVudHNbMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGluc3BlY3RBcmd1bWVudChhcmd1bWVudDogRXhwcmVzc2lvbiB8IFNwcmVhZEVsZW1lbnQgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgIGlmIChhcmd1bWVudCAmJiBhcmd1bWVudC50eXBlICE9PSAnU3ByZWFkRWxlbWVudCcpIHtcbiAgICAgICAgaW5zcGVjdEV4cHJlc3Npb24oYXJndW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3BlY3RFeHByZXNzaW9uKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0JpbmFyeUV4cHJlc3Npb24nOiB7XG4gICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICcrJykge1xuICAgICAgICAgICAgaW5zcGVjdEV4cHJlc3Npb24obm9kZS5sZWZ0KTtcbiAgICAgICAgICAgIGluc3BlY3RFeHByZXNzaW9uKG5vZGUucmlnaHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdDb25kaXRpb25hbEV4cHJlc3Npb24nOiB7XG4gICAgICAgICAgaW5zcGVjdEV4cHJlc3Npb24obm9kZS5jb25zZXF1ZW50KTtcbiAgICAgICAgICBpbnNwZWN0RXhwcmVzc2lvbihub2RlLmFsdGVybmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTGl0ZXJhbCc6IHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXBvcnRUZXh0KG5vZGUsIG5vZGUudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdUZW1wbGF0ZUxpdGVyYWwnOiB7XG4gICAgICAgICAgZm9yIChjb25zdCB0ZW1wbGF0ZUVsZW1lbnQgb2Ygbm9kZS5xdWFzaXMpIHtcbiAgICAgICAgICAgIHJlcG9ydFRleHQodGVtcGxhdGVFbGVtZW50LCB0ZW1wbGF0ZUVsZW1lbnQudmFsdWUucmF3KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0VGV4dChub2RlOiBOb2RlLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgZmluZFBsdWdpbk5hbWVNYXRjaGVzKHRleHQsIHBsdWdpbk5hbWVzKSkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgZGF0YTogeyBuYW1lOiBtYXRjaC5uYW1lIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlIGEgcGx1Z2luIG5hbWUgc2hvd24gaW4gVUkgdG8gYmUgYnVpbHQgYXMgYSBgPGNvZGU+YCBlbGVtZW50J1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ1RoZSBwbHVnaW4gbmFtZSBge3sgbmFtZSB9fWAgaXMgc2hvd24gaW4gVUkgYXMgcGxhaW4gdGV4dC4gQnVpbGQgaXQgYXMgYSBgPGNvZGU+YCBlbGVtZW50IGluc3RlYWQ6IGBhcHBlbmRDb2RlQmxvY2soKWAgaW50byBhIGBEb2N1bWVudEZyYWdtZW50YCwgb3IgYGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3MoKWAgd2l0aCBgYXNDb2RlQmxvY2soKWAsIGZyb20gYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgXFwncyBgaHRtbC1lbGVtZW50LnRzYC4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFBMVUdJTl9OQU1FX1JVTEVfU0NIRU1BLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG4vKipcbiAqIFJlYWRzIHRoZSBuYW1lIGEgY2FsbCBpcyBtYWRlIGJ5OiB0aGUgZnVuY3Rpb24ncyBuYW1lLCBvciB0aGUgbWV0aG9kJ3MgZm9yIGEgbWVtYmVyIGNhbGwuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBUaGUgY2FsbC5cbiAqIEByZXR1cm5zIFRoZSBuYW1lLCBvciBgbnVsbGAgZm9yIGEgY29tcHV0ZWQgb3Igb3RoZXJ3aXNlIHVubmFtZWQgY2FsbGVlLlxuICovXG5mdW5jdGlvbiBnZXRDYWxsZWVOYW1lKG5vZGU6IENhbGxFeHByZXNzaW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4gbm9kZS5jYWxsZWUubmFtZTtcbiAgfVxuXG4gIHJldHVybiBub2RlLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgIW5vZGUuY2FsbGVlLmNvbXB1dGVkICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgID8gbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgbmFtZSBvZiBhbiBvYmplY3QgcHJvcGVydHkga2V5IHdyaXR0ZW4gYXMgYW4gaWRlbnRpZmllciBvciBhIHN0cmluZyBsaXRlcmFsLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5LlxuICogQHJldHVybnMgVGhlIG5hbWUsIG9yIGBudWxsYCBmb3IgYW55IG90aGVyIGtleS5cbiAqL1xuZnVuY3Rpb24gZ2V0S2V5TmFtZShrZXk6IE5vZGUpOiBudWxsIHwgc3RyaW5nIHtcbiAgaWYgKGtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4ga2V5Lm5hbWU7XG4gIH1cblxuICByZXR1cm4ga2V5LnR5cGUgPT09ICdMaXRlcmFsJyAmJiB0eXBlb2Yga2V5LnZhbHVlID09PSAnc3RyaW5nJyA/IGtleS52YWx1ZSA6IG51bGw7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdDQSwwQkFHTztBQUNQLGlDQUF3QztBQUtqQyxNQUFNLGFBQWE7QUFLMUIsTUFBTSx1QkFBdUIsb0JBQUksSUFBSSxDQUFDLGNBQWMsV0FBVyxXQUFXLFdBQVcsVUFBVSxDQUFDO0FBS2hHLE1BQU0sd0JBQXdCLG9CQUFJLElBQUksQ0FBQyxhQUFhLFlBQVksWUFBWSxDQUFDO0FBS3RFLE1BQU0sdUJBQXdDO0FBQUEsRUFDbkQsT0FBTyxTQUFTO0FBQ2QsVUFBTSxVQUFVLFFBQVEsUUFBUSxDQUFDO0FBQ2pDLFVBQU0sa0JBQWMsb0NBQWUsRUFBRSx1QkFBdUIsU0FBUyx1QkFBdUIsS0FBSyxRQUFRLElBQUksQ0FBQztBQUU5RyxXQUFPO0FBQUEsTUFDTCxlQUFlLE1BQTRCO0FBQ3pDLGNBQU0sYUFBYSxjQUFjLElBQUk7QUFDckMsWUFBSSxlQUFlLE1BQU07QUFDdkI7QUFBQSxRQUNGO0FBRUEsWUFBSSxxQkFBcUIsSUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFNBQVMsb0JBQW9CO0FBQ25GLDBCQUFnQixLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQ2pDO0FBQUEsUUFDRjtBQUVBLFlBQUksQ0FBQyxzQkFBc0IsSUFBSSxVQUFVLEdBQUc7QUFDMUM7QUFBQSxRQUNGO0FBRUEsbUJBQVcsWUFBWSxLQUFLLFdBQVc7QUFDckMsY0FBSSxTQUFTLFNBQVMsb0JBQW9CO0FBQ3hDO0FBQUEsVUFDRjtBQUNBLHFCQUFXLFlBQVksU0FBUyxZQUFZO0FBQzFDLGdCQUFJLFNBQVMsU0FBUyxjQUFjLENBQUMsU0FBUyxZQUFZLFdBQVcsU0FBUyxHQUFHLE1BQU0sUUFBUTtBQUM3RixnQ0FBa0IsU0FBUyxLQUFLO0FBQUEsWUFDbEM7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGNBQWMsTUFBMkI7QUFDdkMsWUFBSSxLQUFLLE9BQU8sU0FBUyxnQkFBZ0IsS0FBSyxPQUFPLFNBQVMsVUFBVTtBQUN0RSwwQkFBZ0IsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUFBLFFBQ25DO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLGdCQUFnQixVQUF3RDtBQUMvRSxVQUFJLFlBQVksU0FBUyxTQUFTLGlCQUFpQjtBQUNqRCwwQkFBa0IsUUFBUTtBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUVBLGFBQVMsa0JBQWtCLE1BQWtCO0FBQzNDLGNBQVEsS0FBSyxNQUFNO0FBQUEsUUFDakIsS0FBSyxvQkFBb0I7QUFDdkIsY0FBSSxLQUFLLGFBQWEsS0FBSztBQUN6Qiw4QkFBa0IsS0FBSyxJQUFJO0FBQzNCLDhCQUFrQixLQUFLLEtBQUs7QUFBQSxVQUM5QjtBQUNBO0FBQUEsUUFDRjtBQUFBLFFBQ0EsS0FBSyx5QkFBeUI7QUFDNUIsNEJBQWtCLEtBQUssVUFBVTtBQUNqQyw0QkFBa0IsS0FBSyxTQUFTO0FBQ2hDO0FBQUEsUUFDRjtBQUFBLFFBQ0EsS0FBSyxXQUFXO0FBQ2QsY0FBSSxPQUFPLEtBQUssVUFBVSxVQUFVO0FBQ2xDLHVCQUFXLE1BQU0sS0FBSyxLQUFLO0FBQUEsVUFDN0I7QUFDQTtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUssbUJBQW1CO0FBQ3RCLHFCQUFXLG1CQUFtQixLQUFLLFFBQVE7QUFDekMsdUJBQVcsaUJBQWlCLGdCQUFnQixNQUFNLEdBQUc7QUFBQSxVQUN2RDtBQUNBO0FBQUEsUUFDRjtBQUFBLFFBQ0EsU0FBUztBQUNQO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsYUFBUyxXQUFXLE1BQVksTUFBb0I7QUFDbEQsaUJBQVcsYUFBUywyQ0FBc0IsTUFBTSxXQUFXLEdBQUc7QUFDNUQsZ0JBQVEsT0FBTztBQUFBLFVBQ2IsTUFBTSxFQUFFLE1BQU0sTUFBTSxLQUFLO0FBQUEsVUFDekIsV0FBVztBQUFBLFVBQ1g7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixDQUFDLFVBQVUsR0FBRztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUjtBQUNGO0FBUUEsU0FBUyxjQUFjLE1BQXFDO0FBQzFELE1BQUksS0FBSyxPQUFPLFNBQVMsY0FBYztBQUNyQyxXQUFPLEtBQUssT0FBTztBQUFBLEVBQ3JCO0FBRUEsU0FBTyxLQUFLLE9BQU8sU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLE9BQU8sWUFBWSxLQUFLLE9BQU8sU0FBUyxTQUFTLGVBQ3JHLEtBQUssT0FBTyxTQUFTLE9BQ3JCO0FBQ047QUFRQSxTQUFTLFdBQVcsS0FBMEI7QUFDNUMsTUFBSSxJQUFJLFNBQVMsY0FBYztBQUM3QixXQUFPLElBQUk7QUFBQSxFQUNiO0FBRUEsU0FBTyxJQUFJLFNBQVMsYUFBYSxPQUFPLElBQUksVUFBVSxXQUFXLElBQUksUUFBUTtBQUMvRTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,30 @@
1
+ /// <reference path="../../index.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint rule: plugin-name-as-code-in-ui
6
+ *
7
+ * Reports an Obsidian plugin's display name inside a string that is shown in UI as plain text. In UI the name is
8
+ * built as a `<code>` element instead: `appendCodeBlock()` into a `DocumentFragment`, or `createFragmentWithCodeBlocks()`
9
+ * with `asCodeBlock()`, from `@mnaoumov/obsidian-lib`'s `html-element.ts`, and the fragment is what is passed on.
10
+ *
11
+ * Detection is best effort, by call shape, without type information. A string literal or template literal (or a
12
+ * `+` concatenation or `? :` branch made of them) is read when it is:
13
+ *
14
+ * - the first argument of `new Notice(...)`;
15
+ * - the first argument of `setName`, `setDesc`, `setText`, `appendText` or `setTitle` called on anything;
16
+ * - the `text` property of an options object passed to `createEl`, `createDiv` or `createSpan`.
17
+ *
18
+ * There is no autofix: splitting a string around the name and building a fragment is a rewrite of the call, and
19
+ * often of a translation key, which needs judgement. A command name, a ribbon tooltip and a window title cannot hold
20
+ * markup, so the calls that set them (`addCommand`, `addRibbonIcon`, `document.title`) are not read at all.
21
+ */
22
+ import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
23
+ /**
24
+ * Message ID reported for a plugin name inside a UI string.
25
+ */
26
+ export declare const MESSAGE_ID = "pluginNameAsCodeInUi";
27
+ /**
28
+ * ESLint rule requiring a plugin name shown in UI to be built as a `<code>` element.
29
+ */
30
+ export declare const pluginNameAsCodeInUi: Rule.RuleModule;