@mnaoumov/obsidian-dev-toolkit 0.0.0 → 1.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 (252) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -1
  3. package/bundlers/esbuild/package.json +6 -0
  4. package/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin/package.json +6 -0
  5. package/bundlers/esbuild-impl/dependency/package.json +6 -0
  6. package/bundlers/esbuild-impl/fix-source-maps-plugin/package.json +6 -0
  7. package/bundlers/esbuild-impl/index/package.json +6 -0
  8. package/bundlers/esbuild-impl/obsidian-plugin-builder/package.json +6 -0
  9. package/bundlers/esbuild-impl/package.json +6 -0
  10. package/bundlers/esbuild-impl/preprocess-plugin/package.json +6 -0
  11. package/bundlers/esbuild-impl/rename-css-plugin/package.json +6 -0
  12. package/bundlers/index/package.json +6 -0
  13. package/bundlers/package.json +6 -0
  14. package/dist/demo-vault-helper/main.js +782 -0
  15. package/dist/demo-vault-helper/manifest.json +9 -0
  16. package/dist/integration-test-plugin/main.js +45388 -0
  17. package/dist/integration-test-plugin/manifest.json +8 -0
  18. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +335 -0
  19. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +38 -0
  20. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.cjs +253 -0
  21. package/dist/lib/cjs/bundlers/esbuild-impl/dependency.d.cts +20 -0
  22. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +226 -0
  23. package/dist/lib/cjs/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +34 -0
  24. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +192 -0
  25. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +7 -0
  26. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +375 -0
  27. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +98 -0
  28. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +247 -0
  29. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +30 -0
  30. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.cjs +184 -0
  31. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.d.cts +14 -0
  32. package/dist/lib/cjs/bundlers/esbuild.cjs +177 -0
  33. package/dist/lib/cjs/bundlers/esbuild.d.cts +11 -0
  34. package/dist/lib/cjs/bundlers/index.cjs +180 -0
  35. package/dist/lib/cjs/bundlers/index.d.cts +3 -0
  36. package/dist/lib/cjs/demo-vault-app-json.cjs +199 -0
  37. package/dist/lib/cjs/demo-vault-app-json.d.cts +93 -0
  38. package/dist/lib/cjs/demo-vault-buttons.cjs +580 -0
  39. package/dist/lib/cjs/demo-vault-buttons.d.cts +259 -0
  40. package/dist/lib/cjs/demo-vault-coverage.cjs +725 -0
  41. package/dist/lib/cjs/demo-vault-coverage.d.cts +533 -0
  42. package/dist/lib/cjs/demo-vault.cjs +309 -0
  43. package/dist/lib/cjs/demo-vault.d.cts +33 -0
  44. package/dist/lib/cjs/formatters/dprint.cjs +173 -0
  45. package/dist/lib/cjs/formatters/dprint.d.cts +15 -0
  46. package/dist/lib/cjs/formatters/index.cjs +177 -0
  47. package/dist/lib/cjs/formatters/index.d.cts +2 -0
  48. package/dist/lib/cjs/index.cjs +207 -0
  49. package/dist/lib/cjs/index.d.cts +16 -0
  50. package/dist/lib/cjs/integration-test-setup.cjs +142 -0
  51. package/dist/lib/cjs/integration-test-setup.d.cts +33 -0
  52. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +176 -0
  53. package/dist/lib/cjs/integration-test-vitest-global-setup.d.cts +39 -0
  54. package/dist/lib/cjs/jest-setup.cjs +147 -0
  55. package/dist/lib/cjs/jest-setup.d.cts +13 -0
  56. package/dist/lib/cjs/linters/eslint-config.cjs +365 -0
  57. package/dist/lib/cjs/linters/eslint-config.d.cts +25 -0
  58. package/dist/lib/cjs/linters/eslint-rules/index.cjs +201 -0
  59. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +10 -0
  60. package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +268 -0
  61. package/dist/lib/cjs/linters/eslint-rules/manifest-description.d.cts +54 -0
  62. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.cjs +231 -0
  63. package/dist/lib/cjs/linters/eslint-rules/manifest-helpers.d.cts +141 -0
  64. package/dist/lib/cjs/linters/eslint-rules/manifest-id.cjs +228 -0
  65. package/dist/lib/cjs/linters/eslint-rules/manifest-id.d.cts +32 -0
  66. package/dist/lib/cjs/linters/eslint-rules/manifest-name.cjs +229 -0
  67. package/dist/lib/cjs/linters/eslint-rules/manifest-name.d.cts +30 -0
  68. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.cjs +329 -0
  69. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.d.cts +45 -0
  70. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +670 -0
  71. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts +10 -0
  72. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +260 -0
  73. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.d.cts +10 -0
  74. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +186 -0
  75. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +13 -0
  76. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +291 -0
  77. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.d.cts +18 -0
  78. package/dist/lib/cjs/linters/eslint.cjs +173 -0
  79. package/dist/lib/cjs/linters/eslint.d.cts +15 -0
  80. package/dist/lib/cjs/linters/index.cjs +189 -0
  81. package/dist/lib/cjs/linters/index.d.cts +6 -0
  82. package/dist/lib/cjs/linters/markdownlint.cjs +173 -0
  83. package/dist/lib/cjs/linters/markdownlint.d.cts +15 -0
  84. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +189 -0
  85. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.d.cts +40 -0
  86. package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +229 -0
  87. package/dist/lib/cjs/obsidian-plugin-repo-paths.d.cts +253 -0
  88. package/dist/lib/cjs/setup.cjs +176 -0
  89. package/dist/lib/cjs/setup.d.cts +21 -0
  90. package/dist/lib/cjs/templates.cjs +185 -0
  91. package/dist/lib/cjs/templates.d.cts +13 -0
  92. package/dist/lib/cjs/test-runners/index.cjs +183 -0
  93. package/dist/lib/cjs/test-runners/index.d.cts +4 -0
  94. package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +224 -0
  95. package/dist/lib/cjs/test-runners/integration-test-plugin.d.cts +44 -0
  96. package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +170 -0
  97. package/dist/lib/cjs/test-runners/performance-eval-cap.d.cts +27 -0
  98. package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +230 -0
  99. package/dist/lib/cjs/test-runners/stale-build-global-setup.d.cts +86 -0
  100. package/dist/lib/cjs/test-runners/vitest-config.cjs +497 -0
  101. package/dist/lib/cjs/test-runners/vitest-config.d.cts +200 -0
  102. package/dist/lib/cjs/version.cjs +275 -0
  103. package/dist/lib/cjs/version.d.cts +92 -0
  104. package/dist/lib/cjs/vitest-setup.cjs +147 -0
  105. package/dist/lib/cjs/vitest-setup.d.cts +11 -0
  106. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +38 -0
  107. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +226 -0
  108. package/dist/lib/esm/bundlers/esbuild-impl/dependency.d.mts +20 -0
  109. package/dist/lib/esm/bundlers/esbuild-impl/dependency.mjs +138 -0
  110. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +34 -0
  111. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +116 -0
  112. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +7 -0
  113. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +64 -0
  114. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +98 -0
  115. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +255 -0
  116. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +30 -0
  117. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +134 -0
  118. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.d.mts +14 -0
  119. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.mjs +71 -0
  120. package/dist/lib/esm/bundlers/esbuild.d.mts +11 -0
  121. package/dist/lib/esm/bundlers/esbuild.mjs +66 -0
  122. package/dist/lib/esm/bundlers/index.d.mts +3 -0
  123. package/dist/lib/esm/bundlers/index.mjs +56 -0
  124. package/dist/lib/esm/demo-vault-app-json.d.mts +93 -0
  125. package/dist/lib/esm/demo-vault-app-json.mjs +83 -0
  126. package/dist/lib/esm/demo-vault-buttons.d.mts +259 -0
  127. package/dist/lib/esm/demo-vault-buttons.mjs +460 -0
  128. package/dist/lib/esm/demo-vault-coverage.d.mts +533 -0
  129. package/dist/lib/esm/demo-vault-coverage.mjs +626 -0
  130. package/dist/lib/esm/demo-vault.d.mts +33 -0
  131. package/dist/lib/esm/demo-vault.mjs +205 -0
  132. package/dist/lib/esm/formatters/dprint.d.mts +15 -0
  133. package/dist/lib/esm/formatters/dprint.mjs +60 -0
  134. package/dist/lib/esm/formatters/index.d.mts +2 -0
  135. package/dist/lib/esm/formatters/index.mjs +54 -0
  136. package/dist/lib/esm/index.d.mts +16 -0
  137. package/dist/lib/esm/index.mjs +74 -0
  138. package/dist/lib/esm/integration-test-setup.d.mts +33 -0
  139. package/dist/lib/esm/integration-test-setup.mjs +52 -0
  140. package/dist/lib/esm/integration-test-vitest-global-setup.d.mts +39 -0
  141. package/dist/lib/esm/integration-test-vitest-global-setup.mjs +65 -0
  142. package/dist/lib/esm/jest-setup.d.mts +13 -0
  143. package/dist/lib/esm/jest-setup.mjs +61 -0
  144. package/dist/lib/esm/linters/eslint-config.d.mts +25 -0
  145. package/dist/lib/esm/linters/eslint-config.mjs +247 -0
  146. package/dist/lib/esm/linters/eslint-rules/index.d.mts +10 -0
  147. package/dist/lib/esm/linters/eslint-rules/index.mjs +70 -0
  148. package/dist/lib/esm/linters/eslint-rules/manifest-description.d.mts +54 -0
  149. package/dist/lib/esm/linters/eslint-rules/manifest-description.mjs +154 -0
  150. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.d.mts +141 -0
  151. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.mjs +98 -0
  152. package/dist/lib/esm/linters/eslint-rules/manifest-id.d.mts +32 -0
  153. package/dist/lib/esm/linters/eslint-rules/manifest-id.mjs +117 -0
  154. package/dist/lib/esm/linters/eslint-rules/manifest-name.d.mts +30 -0
  155. package/dist/lib/esm/linters/eslint-rules/manifest-name.mjs +118 -0
  156. package/dist/lib/esm/linters/eslint-rules/manifest-schema.d.mts +45 -0
  157. package/dist/lib/esm/linters/eslint-rules/manifest-schema.mjs +220 -0
  158. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.mts +10 -0
  159. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +559 -0
  160. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.d.mts +10 -0
  161. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.mjs +146 -0
  162. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +13 -0
  163. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +73 -0
  164. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.d.mts +18 -0
  165. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.mjs +175 -0
  166. package/dist/lib/esm/linters/eslint.d.mts +15 -0
  167. package/dist/lib/esm/linters/eslint.mjs +60 -0
  168. package/dist/lib/esm/linters/index.d.mts +6 -0
  169. package/dist/lib/esm/linters/index.mjs +62 -0
  170. package/dist/lib/esm/linters/markdownlint.d.mts +15 -0
  171. package/dist/lib/esm/linters/markdownlint.mjs +60 -0
  172. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.d.mts +40 -0
  173. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.mjs +75 -0
  174. package/dist/lib/esm/obsidian-plugin-repo-paths.d.mts +253 -0
  175. package/dist/lib/esm/obsidian-plugin-repo-paths.mjs +116 -0
  176. package/dist/lib/esm/setup.d.mts +21 -0
  177. package/dist/lib/esm/setup.mjs +63 -0
  178. package/dist/lib/esm/templates.d.mts +13 -0
  179. package/dist/lib/esm/templates.mjs +65 -0
  180. package/dist/lib/esm/test-runners/index.d.mts +4 -0
  181. package/dist/lib/esm/test-runners/index.mjs +58 -0
  182. package/dist/lib/esm/test-runners/integration-test-plugin.d.mts +44 -0
  183. package/dist/lib/esm/test-runners/integration-test-plugin.mjs +102 -0
  184. package/dist/lib/esm/test-runners/performance-eval-cap.d.mts +27 -0
  185. package/dist/lib/esm/test-runners/performance-eval-cap.mjs +56 -0
  186. package/dist/lib/esm/test-runners/stale-build-global-setup.d.mts +86 -0
  187. package/dist/lib/esm/test-runners/stale-build-global-setup.mjs +123 -0
  188. package/dist/lib/esm/test-runners/vitest-config.d.mts +200 -0
  189. package/dist/lib/esm/test-runners/vitest-config.mjs +377 -0
  190. package/dist/lib/esm/version.d.mts +92 -0
  191. package/dist/lib/esm/version.mjs +168 -0
  192. package/dist/lib/esm/vitest-setup.d.mts +11 -0
  193. package/dist/lib/esm/vitest-setup.mjs +61 -0
  194. package/dist/templates/.markdownlint-cli2.mjs +4 -0
  195. package/dist/templates/.nano-staged.mjs +4 -0
  196. package/dist/templates/commitlint.config.ts +3 -0
  197. package/dist/templates/dprint.json +26 -0
  198. package/dist/templates/eslint.config.mts +3 -0
  199. package/dist/templates/scripts/build/build-clean.ts +4 -0
  200. package/dist/templates/scripts/build/build-compile-svelte.ts +4 -0
  201. package/dist/templates/scripts/build/build-compile-typescript.ts +4 -0
  202. package/dist/templates/scripts/build/build-compile.ts +4 -0
  203. package/dist/templates/scripts/build/build-templates.ts +4 -0
  204. package/dist/templates/scripts/bundlers/esbuild/build.ts +4 -0
  205. package/dist/templates/scripts/bundlers/esbuild/dev.ts +4 -0
  206. package/dist/templates/scripts/commitlint-config.ts +3 -0
  207. package/dist/templates/scripts/eslint-config.ts +10 -0
  208. package/dist/templates/scripts/formatters/dprint/format-check.ts +8 -0
  209. package/dist/templates/scripts/formatters/dprint/format.ts +8 -0
  210. package/dist/templates/scripts/gate/gate.ts +10 -0
  211. package/dist/templates/scripts/linters/cspell/spellcheck.ts +8 -0
  212. package/dist/templates/scripts/linters/eslint/lint-fix.ts +8 -0
  213. package/dist/templates/scripts/linters/eslint/lint.ts +8 -0
  214. package/dist/templates/scripts/linters/markdownlint/lint-md-fix.ts +8 -0
  215. package/dist/templates/scripts/linters/markdownlint/lint-md.ts +8 -0
  216. package/dist/templates/scripts/linters/over-exposure/find-overexposed-fix.ts +25 -0
  217. package/dist/templates/scripts/linters/over-exposure/find-overexposed.ts +15 -0
  218. package/dist/templates/scripts/markdownlint-cli2-config.ts +3 -0
  219. package/dist/templates/scripts/nano-staged-config.ts +3 -0
  220. package/dist/templates/scripts/test-runners/vitest/test-coverage.ts +4 -0
  221. package/dist/templates/scripts/test-runners/vitest/test-watch.ts +4 -0
  222. package/dist/templates/scripts/test-runners/vitest/test.ts +4 -0
  223. package/dist/templates/scripts/version/version.ts +10 -0
  224. package/dist/templates/scripts/vitest-config.ts +3 -0
  225. package/dist/templates/vitest.config.ts +3 -0
  226. package/formatters/dprint/package.json +6 -0
  227. package/formatters/index/package.json +6 -0
  228. package/formatters/package.json +6 -0
  229. package/linters/eslint/package.json +6 -0
  230. package/linters/eslint-config/package.json +6 -0
  231. package/linters/eslint-rules/index/package.json +6 -0
  232. package/linters/eslint-rules/manifest-description/package.json +6 -0
  233. package/linters/eslint-rules/manifest-helpers/package.json +6 -0
  234. package/linters/eslint-rules/manifest-id/package.json +6 -0
  235. package/linters/eslint-rules/manifest-name/package.json +6 -0
  236. package/linters/eslint-rules/manifest-schema/package.json +6 -0
  237. package/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian/package.json +6 -0
  238. package/linters/eslint-rules/no-untrusted-input-events/package.json +6 -0
  239. package/linters/eslint-rules/obsidian-dev-utils-plugin/package.json +6 -0
  240. package/linters/eslint-rules/package.json +6 -0
  241. package/linters/eslint-rules/require-component-suffix/package.json +6 -0
  242. package/linters/index/package.json +6 -0
  243. package/linters/markdownlint/package.json +6 -0
  244. package/linters/obsidianmd-rule-custom-message/package.json +6 -0
  245. package/linters/package.json +6 -0
  246. package/package.json +241 -13
  247. package/test-runners/index/package.json +6 -0
  248. package/test-runners/integration-test-plugin/package.json +6 -0
  249. package/test-runners/package.json +6 -0
  250. package/test-runners/performance-eval-cap/package.json +6 -0
  251. package/test-runners/stale-build-global-setup/package.json +6 -0
  252. package/test-runners/vitest-config/package.json +6 -0
@@ -0,0 +1,192 @@
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
+
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
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ function keepName($unknown) {
45
+ return $unknown;
46
+ }
47
+
48
+ (function initCjs() {
49
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
+ const globalThisRecord = globalThis;
51
+ ensureDisposeSymbols();
52
+ globalThisRecord['__name'] ??= keepName;
53
+ globalThisRecord['__extractDefault'] ??= extractDefault;
54
+
55
+ 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
+ function extractDefault(module) {
59
+ return module && module.__esModule && 'default' in module ? module.default : module;
60
+ }
61
+ })();
62
+ })();
63
+ (function patchObsidianRequire() {
64
+ const originalRequire = require;
65
+ if (!originalRequire || originalRequire.__isPatched) {
66
+ return;
67
+ }
68
+
69
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
+ require = Object.assign(
71
+ (id) => requirePatched(id),
72
+ originalRequire,
73
+ {
74
+ __isPatched: true
75
+ }
76
+ );
77
+
78
+ function extractDefault(module) {
79
+ return module && module.__esModule && 'default' in module ? module.default : module;
80
+ }
81
+
82
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
83
+ '@codemirror/autocomplete',
84
+ '@codemirror/collab',
85
+ '@codemirror/commands',
86
+ '@codemirror/language',
87
+ '@codemirror/lint',
88
+ '@codemirror/search',
89
+ '@codemirror/state',
90
+ '@codemirror/text',
91
+ '@codemirror/view',
92
+ '@lezer/common',
93
+ '@lezer/highlight',
94
+ '@lezer/lr',
95
+ 'obsidian']
96
+ );
97
+
98
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
99
+ '@codemirror/closebrackets',
100
+ '@codemirror/comment',
101
+ '@codemirror/fold',
102
+ '@codemirror/gutter',
103
+ '@codemirror/highlight',
104
+ '@codemirror/history',
105
+ '@codemirror/matchbrackets',
106
+ '@codemirror/panel',
107
+ '@codemirror/rangeset',
108
+ '@codemirror/rectangular-selection',
109
+ '@codemirror/stream-parser',
110
+ '@codemirror/tooltip']
111
+ );
112
+
113
+ function requirePatched(id) {
114
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
115
+ return originalRequire?.(id);
116
+ }
117
+
118
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
119
+ if (globalThis.app.isMobile) {
120
+ if (id === 'process' || id === 'node:process') {
121
+ // eslint-disable-next-line no-console -- Valid usage.
122
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
123
+
124
+ return process;
125
+ }
126
+ } else {
127
+ const module = originalRequire?.(id);
128
+ if (module) {
129
+ return extractDefault(module);
130
+ }
131
+ }
132
+
133
+ // eslint-disable-next-line no-console -- Valid usage.
134
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
135
+ return {};
136
+ }
137
+ })();
138
+
139
+ "use strict";
140
+ var __create = Object.create;
141
+ var __defProp = Object.defineProperty;
142
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
143
+ var __getOwnPropNames = Object.getOwnPropertyNames;
144
+ var __getProtoOf = Object.getPrototypeOf;
145
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
146
+ var __export = (target, all) => {
147
+ for (var name in all)
148
+ __defProp(target, name, { get: all[name], enumerable: true });
149
+ };
150
+ var __copyProps = (to, from, except, desc) => {
151
+ if (from && typeof from === "object" || typeof from === "function") {
152
+ for (let key of __getOwnPropNames(from))
153
+ if (!__hasOwnProp.call(to, key) && key !== except)
154
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
155
+ }
156
+ return to;
157
+ };
158
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
159
+ // If the importer is in node compatibility mode or this is not an ESM
160
+ // file that has been converted to a CommonJS file using a Babel-
161
+ // compatible transform (i.e. "__esModule" has not been set), then set
162
+ // "default" to the CommonJS "module.exports" for node compatibility.
163
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
164
+ mod
165
+ ));
166
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
167
+ var esbuild_impl_exports = {};
168
+ __export(esbuild_impl_exports, {
169
+ "copy-to-obsidian-plugins-folder-plugin": () => copy_to_obsidian_plugins_folder_plugin,
170
+ dependency: () => dependency,
171
+ "fix-source-maps-plugin": () => fix_source_maps_plugin,
172
+ "obsidian-plugin-builder": () => obsidian_plugin_builder,
173
+ "preprocess-plugin": () => preprocess_plugin,
174
+ "rename-css-plugin": () => rename_css_plugin
175
+ });
176
+ module.exports = __toCommonJS(esbuild_impl_exports);
177
+ var copy_to_obsidian_plugins_folder_plugin = __toESM(__extractDefault(require('./copy-to-obsidian-plugins-folder-plugin.cjs')), 1);
178
+ var dependency = __toESM(__extractDefault(require('./dependency.cjs')), 1);
179
+ var fix_source_maps_plugin = __toESM(__extractDefault(require('./fix-source-maps-plugin.cjs')), 1);
180
+ var obsidian_plugin_builder = __toESM(__extractDefault(require('./obsidian-plugin-builder.cjs')), 1);
181
+ var preprocess_plugin = __toESM(__extractDefault(require('./preprocess-plugin.cjs')), 1);
182
+ var rename_css_plugin = __toESM(__extractDefault(require('./rename-css-plugin.cjs')), 1);
183
+ // Annotate the CommonJS export names for ESM import in node:
184
+ 0 && (module.exports = {
185
+ "copy-to-obsidian-plugins-folder-plugin": null,
186
+ dependency,
187
+ "fix-source-maps-plugin": null,
188
+ "obsidian-plugin-builder": null,
189
+ "preprocess-plugin": null,
190
+ "rename-css-plugin": null
191
+ });
192
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdjb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbicgZnJvbSAnLi9jb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAnZGVwZW5kZW5jeScgZnJvbSAnLi9kZXBlbmRlbmN5LnRzJztcbmV4cG9ydCAqIGFzICdmaXgtc291cmNlLW1hcHMtcGx1Z2luJyBmcm9tICcuL2ZpeC1zb3VyY2UtbWFwcy1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLXBsdWdpbi1idWlsZGVyJyBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1idWlsZGVyLnRzJztcbmV4cG9ydCAqIGFzICdwcmVwcm9jZXNzLXBsdWdpbicgZnJvbSAnLi9wcmVwcm9jZXNzLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAncmVuYW1lLWNzcy1wbHVnaW4nIGZyb20gJy4vcmVuYW1lLWNzcy1wbHVnaW4udHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSxrREFBQUE7QUFBQSxFQUFBO0FBQUEsa0NBQUFDO0FBQUEsRUFBQSxpQ0FBQUM7QUFBQSxFQUFBLDJCQUFBQztBQUFBLEVBQUEsMkJBQUFDO0FBQUE7QUFBQTtBQUVBLElBQUFKLHlDQUEwRDtBQUMxRCxpQkFBOEI7QUFDOUIsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLDBCQUEyQztBQUMzQyxJQUFBQyxvQkFBcUM7QUFDckMsSUFBQUMsb0JBQXFDOyIsCiAgIm5hbWVzIjogWyJjb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbiIsICJmaXgtc291cmNlLW1hcHMtcGx1Z2luIiwgIm9ic2lkaWFuLXBsdWdpbi1idWlsZGVyIiwgInByZXByb2Nlc3MtcGx1Z2luIiwgInJlbmFtZS1jc3MtcGx1Z2luIl0KfQo=
@@ -0,0 +1,7 @@
1
+ /// <reference path="../../index.d.cts" />
2
+ export * as 'copy-to-obsidian-plugins-folder-plugin' from './copy-to-obsidian-plugins-folder-plugin.cjs';
3
+ export * as 'dependency' from './dependency.cjs';
4
+ export * as 'fix-source-maps-plugin' from './fix-source-maps-plugin.cjs';
5
+ export * as 'obsidian-plugin-builder' from './obsidian-plugin-builder.cjs';
6
+ export * as 'preprocess-plugin' from './preprocess-plugin.cjs';
7
+ export * as 'rename-css-plugin' from './rename-css-plugin.cjs';
@@ -0,0 +1,375 @@
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
+
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
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ function keepName($unknown) {
45
+ return $unknown;
46
+ }
47
+
48
+ (function initCjs() {
49
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
+ const globalThisRecord = globalThis;
51
+ ensureDisposeSymbols();
52
+ globalThisRecord['__name'] ??= keepName;
53
+ globalThisRecord['__extractDefault'] ??= extractDefault;
54
+
55
+ 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
+ function extractDefault(module) {
59
+ return module && module.__esModule && 'default' in module ? module.default : module;
60
+ }
61
+ })();
62
+ })();
63
+ (function patchObsidianRequire() {
64
+ const originalRequire = require;
65
+ if (!originalRequire || originalRequire.__isPatched) {
66
+ return;
67
+ }
68
+
69
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
+ require = Object.assign(
71
+ (id) => requirePatched(id),
72
+ originalRequire,
73
+ {
74
+ __isPatched: true
75
+ }
76
+ );
77
+
78
+ function extractDefault(module) {
79
+ return module && module.__esModule && 'default' in module ? module.default : module;
80
+ }
81
+
82
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
83
+ '@codemirror/autocomplete',
84
+ '@codemirror/collab',
85
+ '@codemirror/commands',
86
+ '@codemirror/language',
87
+ '@codemirror/lint',
88
+ '@codemirror/search',
89
+ '@codemirror/state',
90
+ '@codemirror/text',
91
+ '@codemirror/view',
92
+ '@lezer/common',
93
+ '@lezer/highlight',
94
+ '@lezer/lr',
95
+ 'obsidian']
96
+ );
97
+
98
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
99
+ '@codemirror/closebrackets',
100
+ '@codemirror/comment',
101
+ '@codemirror/fold',
102
+ '@codemirror/gutter',
103
+ '@codemirror/highlight',
104
+ '@codemirror/history',
105
+ '@codemirror/matchbrackets',
106
+ '@codemirror/panel',
107
+ '@codemirror/rangeset',
108
+ '@codemirror/rectangular-selection',
109
+ '@codemirror/stream-parser',
110
+ '@codemirror/tooltip']
111
+ );
112
+
113
+ function requirePatched(id) {
114
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
115
+ return originalRequire?.(id);
116
+ }
117
+
118
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
119
+ if (globalThis.app.isMobile) {
120
+ if (id === 'process' || id === 'node:process') {
121
+ // eslint-disable-next-line no-console -- Valid usage.
122
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
123
+
124
+ return process;
125
+ }
126
+ } else {
127
+ const module = originalRequire?.(id);
128
+ if (module) {
129
+ return extractDefault(module);
130
+ }
131
+ }
132
+
133
+ // eslint-disable-next-line no-console -- Valid usage.
134
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
135
+ return {};
136
+ }
137
+ })();
138
+
139
+ "use strict";
140
+ var __create = Object.create;
141
+ var __defProp = Object.defineProperty;
142
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
143
+ var __getOwnPropNames = Object.getOwnPropertyNames;
144
+ var __getProtoOf = Object.getPrototypeOf;
145
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
146
+ var __export = (target, all) => {
147
+ for (var name in all)
148
+ __defProp(target, name, { get: all[name], enumerable: true });
149
+ };
150
+ var __copyProps = (to, from, except, desc) => {
151
+ if (from && typeof from === "object" || typeof from === "function") {
152
+ for (let key of __getOwnPropNames(from))
153
+ if (!__hasOwnProp.call(to, key) && key !== except)
154
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
155
+ }
156
+ return to;
157
+ };
158
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
159
+ // If the importer is in node compatibility mode or this is not an ESM
160
+ // file that has been converted to a CommonJS file using a Babel-
161
+ // compatible transform (i.e. "__esModule" has not been set), then set
162
+ // "default" to the CommonJS "module.exports" for node compatibility.
163
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
164
+ mod
165
+ ));
166
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
167
+ var obsidian_plugin_builder_exports = {};
168
+ __export(obsidian_plugin_builder_exports, {
169
+ BuildMode: () => BuildMode,
170
+ banner: () => banner,
171
+ build: () => build,
172
+ buildObsidianPlugin: () => buildObsidianPlugin,
173
+ dev: () => dev,
174
+ invokeEsbuild: () => invokeEsbuild
175
+ });
176
+ module.exports = __toCommonJS(obsidian_plugin_builder_exports);
177
+ var import_custom_esbuild_options_plugin = require('@mnaoumov/typescript-dev-toolkit/bundlers/esbuild-impl/custom-esbuild-options-plugin');
178
+ var import_fix_esm_plugin = require('@mnaoumov/typescript-dev-toolkit/bundlers/esbuild-impl/fix-esm-plugin');
179
+ var import_svelte_wrapper_plugin = require('@mnaoumov/typescript-dev-toolkit/bundlers/esbuild-impl/svelte-wrapper-plugin');
180
+ var import_cli_utils = require('@mnaoumov/typescript-dev-toolkit/cli-utils');
181
+ var import_npm = require('@mnaoumov/typescript-dev-toolkit/npm');
182
+ var import_npm_run = require('@mnaoumov/typescript-dev-toolkit/npm-run');
183
+ var import_root = require('@mnaoumov/typescript-dev-toolkit/root');
184
+ var import_async = require('@mnaoumov/typescript-lib/async');
185
+ var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
186
+ var import_path = require('@mnaoumov/typescript-lib/path');
187
+ var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
188
+ var import_esbuild = require('esbuild');
189
+ var import_esbuild_sass_plugin = __toESM(__extractDefault(require('esbuild-sass-plugin')), 1);
190
+ var import_node_fs = require('node:fs');
191
+ var import_promises = require('node:fs/promises');
192
+ var import_node_module = require('node:module');
193
+ var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
194
+ var import_obsidian_plugin_repo_paths = require('../../obsidian-plugin-repo-paths.cjs');
195
+ var import_copy_to_obsidian_plugins_folder_plugin = require('./copy-to-obsidian-plugins-folder-plugin.cjs');
196
+ var import_fix_source_maps_plugin = require('./fix-source-maps-plugin.cjs');
197
+ var import_preprocess_plugin = require('./preprocess-plugin.cjs');
198
+ var import_rename_css_plugin = require('./rename-css-plugin.cjs');
199
+ const sassPlugin = (0, import_object_utils.extractDefaultExportInterop)(import_esbuild_sass_plugin.default);
200
+ const NODE_MODULES_RESTART_DEBOUNCE_IN_MILLISECONDS = 1e3;
201
+ var BuildMode = /* @__PURE__ */ ((BuildMode2) => {
202
+ BuildMode2[BuildMode2["Development"] = 0] = "Development";
203
+ BuildMode2[BuildMode2["Production"] = 1] = "Production";
204
+ return BuildMode2;
205
+ })(BuildMode || {});
206
+ const banner = `/*
207
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
208
+ if you want to view the source, please visit the github repository of this plugin
209
+ */
210
+ `;
211
+ async function build(options) {
212
+ const result = await buildObsidianPlugin({ ...options, mode: 1 /* Production */ });
213
+ result.throwOnFailure();
214
+ }
215
+ async function buildObsidianPlugin(params) {
216
+ await (0, import_npm_run.npmRun)("build:compile");
217
+ const envPath = (0, import_root.resolvePathFromRoot)({ path: ".env" });
218
+ if (envPath && (0, import_node_fs.existsSync)(envPath)) {
219
+ (0, import_node_process.loadEnvFile)(envPath);
220
+ }
221
+ const obsidianPluginBuilderEnv = import_node_process.default.env;
222
+ const obsidianConfigFolder = params.obsidianConfigFolder ?? obsidianPluginBuilderEnv.OBSIDIAN_CONFIG_FOLDER ?? "";
223
+ const isProductionBuild = params.mode === 1 /* Production */;
224
+ const distFolder = (0, import_type_guards.ensureNonNullable)(
225
+ (0, import_root.resolvePathFromRoot)({ path: isProductionBuild ? import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.DistBuild : import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.DistDev }),
226
+ "Could not determine the dist folder"
227
+ );
228
+ if ((0, import_node_fs.existsSync)(distFolder)) {
229
+ await (0, import_promises.rm)(distFolder, { recursive: true });
230
+ }
231
+ await (0, import_promises.mkdir)(distFolder, { recursive: true });
232
+ const distFileNames = [
233
+ import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.ManifestJson
234
+ ];
235
+ if (!isProductionBuild) {
236
+ await (0, import_promises.writeFile)((0, import_path.join)(distFolder, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.HotReload), "", "utf-8");
237
+ }
238
+ for (const fileName of distFileNames) {
239
+ const localFile = (0, import_type_guards.ensureNonNullable)((0, import_root.resolvePathFromRoot)({ path: fileName }), `Could not determine the local file for ${fileName}`);
240
+ const distFile = (0, import_path.join)(distFolder, fileName);
241
+ if ((0, import_node_fs.existsSync)(localFile)) {
242
+ await (0, import_promises.cp)(localFile, distFile);
243
+ }
244
+ }
245
+ const distPath = (0, import_path.join)(distFolder, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.MainJs);
246
+ const cssPath = (0, import_path.join)(distFolder, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.StylesCss);
247
+ const packageJson = await (0, import_npm.readPackageJson)();
248
+ const pluginName = packageJson.name ?? "(unknown)";
249
+ const buildOptions = {
250
+ banner: {
251
+ js: banner
252
+ },
253
+ bundle: true,
254
+ /*
255
+ * `conditions`, `mainFields` and `platform` are one decision, read together.
256
+ *
257
+ * The bundle is ONE `main.js` loaded both in Electron on desktop and in a bare WebView on a phone, so a
258
+ * dependency must resolve to its browser build. esbuild ADDS a condition of its own for `platform: 'node'`
259
+ * (`node`) and for `platform: 'browser'` (`browser`), and a `conditions` list cannot take one away. With
260
+ * `platform: 'node'` the effective set was `{ browser, node, import/require, default }`, so a package whose
261
+ * `exports` map lists `node` before `browser` shipped its Node build to phones — `fflate`'s `esm/index.mjs`
262
+ * opens with `createRequire` from `module`, which threw at load on mobile.
263
+ *
264
+ * `platform: 'neutral'` adds no platform condition, leaving exactly `browser` from the list below. It is
265
+ * chosen over `platform: 'browser'` because that one also changes what this bundle has always relied on:
266
+ * it defines `process.env.NODE_ENV` and applies a package's `browser` field remapping (which can stub a
267
+ * Node builtin to an empty object, breaking a dependency's desktop-only path). `mainFields` restates the
268
+ * `node` platform's default, because `neutral` has none of its own. Node builtins are marked external by name
269
+ * below — `node:*` included, since only `platform: 'node'` marks that prefix external by itself.
270
+ *
271
+ * Measured over 31 plugins built on this library, 2026-09-23, against `platform: 'node'`: the only modules
272
+ * that change are `vfile`, `unist-util-visit-parents` and `yaml` (each now takes its browser build instead
273
+ * of one importing `node:process` / `node:path` / `node:url`) and `esm-env`'s Node flag, which now reads
274
+ * false. Everything else in every bundle is identical up to identifier renaming.
275
+ */
276
+ conditions: ["browser"],
277
+ entryPoints: [
278
+ (0, import_type_guards.ensureNonNullable)(
279
+ (0, import_root.resolvePathFromRoot)({ path: (0, import_path.join)(import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.Src, import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.MainTs) }),
280
+ "Could not determine the entry point for the plugin"
281
+ )
282
+ ],
283
+ external: [
284
+ "obsidian",
285
+ "electron",
286
+ "@codemirror/autocomplete",
287
+ "@codemirror/collab",
288
+ "@codemirror/commands",
289
+ "@codemirror/language",
290
+ "@codemirror/lint",
291
+ "@codemirror/search",
292
+ "@codemirror/state",
293
+ "@codemirror/view",
294
+ "@lezer/common",
295
+ "@lezer/highlight",
296
+ "@lezer/lr",
297
+ "esbuild",
298
+ "eslint",
299
+ ...import_node_module.builtinModules,
300
+ "node:*"
301
+ ],
302
+ format: "cjs",
303
+ keepNames: true,
304
+ logLevel: "info",
305
+ mainFields: ["main", "module"],
306
+ minify: isProductionBuild,
307
+ outfile: distPath,
308
+ platform: "neutral",
309
+ plugins: [
310
+ (0, import_custom_esbuild_options_plugin.customEsbuildOptionsPlugin)(params.customizeEsbuildOptions?.bind(params)),
311
+ (0, import_svelte_wrapper_plugin.svelteWrapperPlugin)(isProductionBuild),
312
+ sassPlugin({
313
+ sourceMap: !isProductionBuild
314
+ }),
315
+ (0, import_rename_css_plugin.renameCssPlugin)(distFolder),
316
+ (0, import_preprocess_plugin.preprocessPlugin)(),
317
+ (0, import_fix_esm_plugin.fixEsmPlugin)(),
318
+ (0, import_fix_source_maps_plugin.fixSourceMapsPlugin)({ distPaths: [distPath, cssPath], isProductionBuild, pluginName }),
319
+ ...params.customEsbuildPlugins ?? [],
320
+ (0, import_copy_to_obsidian_plugins_folder_plugin.copyToObsidianPluginsFolderPlugin)({ distFolder, isProductionBuild, obsidianConfigFolder, pluginName })
321
+ ],
322
+ sourcemap: !isProductionBuild && "inline",
323
+ target: "ES2022",
324
+ treeShaking: true
325
+ };
326
+ const buildContext = await (0, import_esbuild.context)(buildOptions);
327
+ const result = await invokeEsbuild(buildContext, isProductionBuild);
328
+ if (!isProductionBuild) {
329
+ watchNodeModulesAndRestart(params, buildContext);
330
+ }
331
+ return result;
332
+ }
333
+ async function dev(options) {
334
+ return await buildObsidianPlugin({ ...options, mode: 0 /* Development */ });
335
+ }
336
+ async function invokeEsbuild(buildContext, isProductionBuild) {
337
+ if (isProductionBuild) {
338
+ const result = await buildContext.rebuild();
339
+ const isSuccess = result.errors.length === 0 && result.warnings.length === 0;
340
+ return import_cli_utils.CliTaskResult.Success(isSuccess);
341
+ }
342
+ await buildContext.watch();
343
+ return import_cli_utils.CliTaskResult.DoNotExit();
344
+ }
345
+ function watchNodeModulesAndRestart(params, buildContext) {
346
+ const nodeModulesPath = (0, import_root.resolvePathFromRoot)({ path: import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.NodeModules });
347
+ if (!nodeModulesPath || !(0, import_node_fs.existsSync)(nodeModulesPath)) {
348
+ return;
349
+ }
350
+ let restartTimeout;
351
+ const watcher = (0, import_node_fs.watch)(nodeModulesPath, { recursive: true }, () => {
352
+ if (restartTimeout) {
353
+ clearTimeout(restartTimeout);
354
+ }
355
+ restartTimeout = setTimeout(() => {
356
+ (0, import_async.invokeAsyncSafely)(restart);
357
+ }, NODE_MODULES_RESTART_DEBOUNCE_IN_MILLISECONDS);
358
+ });
359
+ async function restart() {
360
+ console.warn("Detected changes in node_modules. Restarting the build...");
361
+ watcher.close();
362
+ await buildContext.dispose();
363
+ await buildObsidianPlugin(params);
364
+ }
365
+ }
366
+ // Annotate the CommonJS export names for ESM import in node:
367
+ 0 && (module.exports = {
368
+ BuildMode,
369
+ banner,
370
+ build,
371
+ buildObsidianPlugin,
372
+ dev,
373
+ invokeEsbuild
374
+ });
375
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9vYnNpZGlhbi1wbHVnaW4tYnVpbGRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gYnVpbGQgYW5kIGJ1bmRsZSBhbiBPYnNpZGlhbiBwbHVnaW4gdXNpbmcgZXNidWlsZC5cbiAqIEl0IGluY2x1ZGVzIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGJ1aWxkIHByb2Nlc3MgYmFzZWQgb24gZGlmZmVyZW50IGJ1aWxkIG1vZGVzIChkZXZlbG9wbWVudCBvciBwcm9kdWN0aW9uKSxcbiAqIGFuZCBpdCBzZXRzIHVwIHZhcmlvdXMgZXNidWlsZCBwbHVnaW5zIHRvIHByZXByb2Nlc3MsIGxpbnQsIGZpeCBzb3VyY2UgbWFwcywgYW5kIGNvcHkgZmlsZXMgdG8gdGhlIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBlc2J1aWxkLWJhc2VkIGJ1aWxkIHBpcGVsaW5lIHdpdGggc2Fzcy9zdmVsdGUgcGx1Z2lucyBhbmQgZmlsZSB3YXRjaGVyczsgcmVxdWlyZXMgYSBsaXZlIGVzYnVpbGQgY29udGV4dC4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCdWlsZENvbnRleHQsXG4gIEJ1aWxkT3B0aW9ucyBhcyBFc2J1aWxkT3B0aW9ucyxcbiAgUGx1Z2luXG59IGZyb20gJ2VzYnVpbGQnO1xuXG5pbXBvcnQgeyBjdXN0b21Fc2J1aWxkT3B0aW9uc1BsdWdpbiB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9jdXN0b20tZXNidWlsZC1vcHRpb25zLXBsdWdpbic7XG5pbXBvcnQgeyBmaXhFc21QbHVnaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9idW5kbGVycy9lc2J1aWxkLWltcGwvZml4LWVzbS1wbHVnaW4nO1xuaW1wb3J0IHsgc3ZlbHRlV3JhcHBlclBsdWdpbiB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9zdmVsdGUtd3JhcHBlci1wbHVnaW4nO1xuaW1wb3J0IHsgQ2xpVGFza1Jlc3VsdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2NsaS11dGlscyc7XG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9ucG0nO1xuaW1wb3J0IHsgbnBtUnVuIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbnBtLXJ1bic7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcm9vdCc7XG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3AgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBjb250ZXh0IH0gZnJvbSAnZXNidWlsZCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gV2UgbmVlZCBhIHRlbXAgdmFyaWFibGUgdG8gYXBwbHkgYGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcCgpYCBmaXggYmVsb3cuXG5pbXBvcnQgc2Fzc1BsdWdpbl8gZnJvbSAnZXNidWlsZC1zYXNzLXBsdWdpbic7XG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICB3YXRjaFxufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGNwLFxuICBta2RpcixcbiAgcm0sXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGJ1aWx0aW5Nb2R1bGVzIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHByb2Nlc3MsIHsgbG9hZEVudkZpbGUgfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uLy4uL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGNvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpbiB9IGZyb20gJy4vY29weS10by1vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1wbHVnaW4udHMnO1xuaW1wb3J0IHsgZml4U291cmNlTWFwc1BsdWdpbiB9IGZyb20gJy4vZml4LXNvdXJjZS1tYXBzLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBwcmVwcm9jZXNzUGx1Z2luIH0gZnJvbSAnLi9wcmVwcm9jZXNzLXBsdWdpbi50cyc7XG5pbXBvcnQgeyByZW5hbWVDc3NQbHVnaW4gfSBmcm9tICcuL3JlbmFtZS1jc3MtcGx1Z2luLnRzJztcblxuY29uc3Qgc2Fzc1BsdWdpbiA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChzYXNzUGx1Z2luXyk7XG5cbi8qKlxuICogRGVib3VuY2Ugd2luZG93IGZvciByZXN0YXJ0aW5nIGEgZGV2ZWxvcG1lbnQgYnVpbGQgYWZ0ZXIgYG5vZGVfbW9kdWxlc2AgY2hhbmdlcy4gQSByZWluc3RhbGwgb3IgYVxuICogZGVwZW5kZW5jeSByZWJ1aWxkIHRvdWNoZXMgbWFueSBmaWxlcyBpbiBxdWljayBzdWNjZXNzaW9uLCBzbyB3ZSB3YWl0IGZvciB0aGUgY2h1cm4gdG8gc2V0dGxlXG4gKiBiZWZvcmUgcmVzdGFydGluZyBvbmNlLlxuICovXG5jb25zdCBOT0RFX01PRFVMRVNfUkVTVEFSVF9ERUJPVU5DRV9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwO1xuXG4vKipcbiAqIEVudW1lcmF0aW9uIHJlcHJlc2VudGluZyB0aGUgYnVpbGQgbW9kZXMuXG4gKi9cbmV4cG9ydCBlbnVtIEJ1aWxkTW9kZSB7XG4gIC8qKlxuICBEZXZlbG9wbWVudCBtb2RlIGZvciBidWlsZGluZyB0aGUgcGx1Z2luXG4gICAqL1xuICBEZXZlbG9wbWVudCxcbiAgLyoqXG4gIFByb2R1Y3Rpb24gbW9kZSBmb3IgYnVpbGRpbmcgdGhlIHBsdWdpblxuICAgKi9cbiAgUHJvZHVjdGlvblxufVxuXG4vKipcbiAqIEJhbm5lciB0ZXh0IHRvIGJlIGluY2x1ZGVkIGF0IHRoZSB0b3Agb2YgdGhlIGdlbmVyYXRlZCBmaWxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGJhbm5lciA9IGAvKlxuVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgRVNCVUlMRFxuaWYgeW91IHdhbnQgdG8gdmlldyB0aGUgc291cmNlLCBwbGVhc2UgdmlzaXQgdGhlIGdpdGh1YiByZXBvc2l0b3J5IG9mIHRoaXMgcGx1Z2luXG4qL1xuYDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgYnVpbGRPYnNpZGlhblBsdWdpbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRPYnNpZGlhblBsdWdpblBhcmFtcyB7XG4gIC8qKlxuICAgKiBDdXN0b20gZXNidWlsZCBwbHVnaW5zIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tRXNidWlsZFBsdWdpbnM/OiBQbHVnaW5bXTtcblxuICAvKipcbiAgICogQ3VzdG9taXplcyB0aGUgYGVzYnVpbGRgIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21pemVFc2J1aWxkT3B0aW9ucz86IChvcHRpb25zOiBFc2J1aWxkT3B0aW9ucykgPT4gdm9pZDtcblxuICAvKipcbiAgICogQSBidWlsZCBtb2RlLCBlaXRoZXIgYERldmVsb3BtZW50YCBvciBgUHJvZHVjdGlvbmBcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU6IEJ1aWxkTW9kZTtcblxuICAvKipcbiAgICogQSBmb2xkZXIgZm9yIE9ic2lkaWFuIGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIHRoZSBgT0JTSURJQU5fQ09ORklHX0ZPTERFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkNvbmZpZ0ZvbGRlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZCBwYXJhbWV0ZXJzIHdpdGhvdXQgdGhlIG1vZGUgZmllbGQsIGZvciB1c2Ugd2l0aCB7QGxpbmsgYnVpbGR9IGFuZCB7QGxpbmsgZGV2fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICAvKipcbiAgICogQ3VzdG9tIGVzYnVpbGQgcGx1Z2lucyB0byBiZSB1c2VkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUVzYnVpbGRQbHVnaW5zPzogUGx1Z2luW107XG5cbiAgLyoqXG4gICAqIEN1c3RvbWl6ZXMgdGhlIGBlc2J1aWxkYCBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9taXplRXNidWlsZE9wdGlvbnM/OiAob3B0aW9uczogRXNidWlsZE9wdGlvbnMpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEEgZm9sZGVyIGZvciBPYnNpZGlhbiBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byB0aGUgYE9CU0lESUFOX0NPTkZJR19GT0xERVJgIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db25maWdGb2xkZXI/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBPYnNpZGlhblBsdWdpbkJ1aWxkZXJFbnYge1xuICBPQlNJRElBTl9DT05GSUdfRk9MREVSOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBPYnNpZGlhbiBwbHVnaW4gaW4gcHJvZHVjdGlvbiBtb2RlIHVzaW5nIGVzYnVpbGQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBidWlsZCBwYXJhbWV0ZXJzIChtb2RlIGlzIHNldCB0byBQcm9kdWN0aW9uIGF1dG9tYXRpY2FsbHkpLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBidWlsZCBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkKG9wdGlvbnM/OiBCdWlsZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYnVpbGRPYnNpZGlhblBsdWdpbih7IC4uLm9wdGlvbnMsIG1vZGU6IEJ1aWxkTW9kZS5Qcm9kdWN0aW9uIH0pO1xuICByZXN1bHQudGhyb3dPbkZhaWx1cmUoKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIE9ic2lkaWFuIHBsdWdpbiBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIG1vZGUgYW5kIGNvbmZpZ3VyYXRpb24gZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgYnVpbGRpbmcgdGhlIHBsdWdpbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gaW5kaWNhdGluZyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBidWlsZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkT2JzaWRpYW5QbHVnaW4ocGFyYW1zOiBCdWlsZE9ic2lkaWFuUGx1Z2luUGFyYW1zKTogUHJvbWlzZTxDbGlUYXNrUmVzdWx0PiB7XG4gIGF3YWl0IG5wbVJ1bignYnVpbGQ6Y29tcGlsZScpO1xuICBjb25zdCBlbnZQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdCh7IHBhdGg6ICcuZW52JyB9KTtcbiAgaWYgKGVudlBhdGggJiYgZXhpc3RzU3luYyhlbnZQYXRoKSkge1xuICAgIGxvYWRFbnZGaWxlKGVudlBhdGgpO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuUGx1Z2luQnVpbGRlckVudiA9IHByb2Nlc3MuZW52IGFzIFBhcnRpYWw8T2JzaWRpYW5QbHVnaW5CdWlsZGVyRW52PjtcblxuICBjb25zdCBvYnNpZGlhbkNvbmZpZ0ZvbGRlciA9IHBhcmFtcy5vYnNpZGlhbkNvbmZpZ0ZvbGRlciA/PyBvYnNpZGlhblBsdWdpbkJ1aWxkZXJFbnYuT0JTSURJQU5fQ09ORklHX0ZPTERFUiA/PyAnJztcbiAgY29uc3QgaXNQcm9kdWN0aW9uQnVpbGQgPSBwYXJhbXMubW9kZSA9PT0gQnVpbGRNb2RlLlByb2R1Y3Rpb247XG5cbiAgY29uc3QgZGlzdEZvbGRlciA9IGVuc3VyZU5vbk51bGxhYmxlKFxuICAgIHJlc29sdmVQYXRoRnJvbVJvb3QoeyBwYXRoOiBpc1Byb2R1Y3Rpb25CdWlsZCA/IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCA6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3REZXYgfSksXG4gICAgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGRpc3QgZm9sZGVyJ1xuICApO1xuXG4gIGlmIChleGlzdHNTeW5jKGRpc3RGb2xkZXIpKSB7XG4gICAgYXdhaXQgcm0oZGlzdEZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH1cbiAgYXdhaXQgbWtkaXIoZGlzdEZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3QgZGlzdEZpbGVOYW1lcyA9IFtcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb25cbiAgXTtcbiAgaWYgKCFpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGRpc3RGb2xkZXIsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkhvdFJlbG9hZCksICcnLCAndXRmLTgnKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZGlzdEZpbGVOYW1lcykge1xuICAgIGNvbnN0IGxvY2FsRmlsZSA9IGVuc3VyZU5vbk51bGxhYmxlKHJlc29sdmVQYXRoRnJvbVJvb3QoeyBwYXRoOiBmaWxlTmFtZSB9KSwgYENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGxvY2FsIGZpbGUgZm9yICR7ZmlsZU5hbWV9YCk7XG4gICAgY29uc3QgZGlzdEZpbGUgPSBqb2luKGRpc3RGb2xkZXIsIGZpbGVOYW1lKTtcblxuICAgIGlmIChleGlzdHNTeW5jKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGNwKGxvY2FsRmlsZSwgZGlzdEZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRpc3RQYXRoID0gam9pbihkaXN0Rm9sZGVyLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYWluSnMpO1xuICBjb25zdCBjc3NQYXRoID0gam9pbihkaXN0Rm9sZGVyLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TdHlsZXNDc3MpO1xuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gIGNvbnN0IHBsdWdpbk5hbWUgPSBwYWNrYWdlSnNvbi5uYW1lID8/ICcodW5rbm93biknO1xuXG4gIGNvbnN0IGJ1aWxkT3B0aW9uczogRXNidWlsZE9wdGlvbnMgPSB7XG4gICAgYmFubmVyOiB7XG4gICAgICBqczogYmFubmVyXG4gICAgfSxcbiAgICBidW5kbGU6IHRydWUsXG4gICAgLypcbiAgICAgKiBgY29uZGl0aW9uc2AsIGBtYWluRmllbGRzYCBhbmQgYHBsYXRmb3JtYCBhcmUgb25lIGRlY2lzaW9uLCByZWFkIHRvZ2V0aGVyLlxuICAgICAqXG4gICAgICogVGhlIGJ1bmRsZSBpcyBPTkUgYG1haW4uanNgIGxvYWRlZCBib3RoIGluIEVsZWN0cm9uIG9uIGRlc2t0b3AgYW5kIGluIGEgYmFyZSBXZWJWaWV3IG9uIGEgcGhvbmUsIHNvIGFcbiAgICAgKiBkZXBlbmRlbmN5IG11c3QgcmVzb2x2ZSB0byBpdHMgYnJvd3NlciBidWlsZC4gZXNidWlsZCBBRERTIGEgY29uZGl0aW9uIG9mIGl0cyBvd24gZm9yIGBwbGF0Zm9ybTogJ25vZGUnYFxuICAgICAqIChgbm9kZWApIGFuZCBmb3IgYHBsYXRmb3JtOiAnYnJvd3NlcidgIChgYnJvd3NlcmApLCBhbmQgYSBgY29uZGl0aW9uc2AgbGlzdCBjYW5ub3QgdGFrZSBvbmUgYXdheS4gV2l0aFxuICAgICAqIGBwbGF0Zm9ybTogJ25vZGUnYCB0aGUgZWZmZWN0aXZlIHNldCB3YXMgYHsgYnJvd3Nlciwgbm9kZSwgaW1wb3J0L3JlcXVpcmUsIGRlZmF1bHQgfWAsIHNvIGEgcGFja2FnZSB3aG9zZVxuICAgICAqIGBleHBvcnRzYCBtYXAgbGlzdHMgYG5vZGVgIGJlZm9yZSBgYnJvd3NlcmAgc2hpcHBlZCBpdHMgTm9kZSBidWlsZCB0byBwaG9uZXMgXHUyMDE0IGBmZmxhdGVgJ3MgYGVzbS9pbmRleC5tanNgXG4gICAgICogb3BlbnMgd2l0aCBgY3JlYXRlUmVxdWlyZWAgZnJvbSBgbW9kdWxlYCwgd2hpY2ggdGhyZXcgYXQgbG9hZCBvbiBtb2JpbGUuXG4gICAgICpcbiAgICAgKiBgcGxhdGZvcm06ICduZXV0cmFsJ2AgYWRkcyBubyBwbGF0Zm9ybSBjb25kaXRpb24sIGxlYXZpbmcgZXhhY3RseSBgYnJvd3NlcmAgZnJvbSB0aGUgbGlzdCBiZWxvdy4gSXQgaXNcbiAgICAgKiBjaG9zZW4gb3ZlciBgcGxhdGZvcm06ICdicm93c2VyJ2AgYmVjYXVzZSB0aGF0IG9uZSBhbHNvIGNoYW5nZXMgd2hhdCB0aGlzIGJ1bmRsZSBoYXMgYWx3YXlzIHJlbGllZCBvbjpcbiAgICAgKiBpdCBkZWZpbmVzIGBwcm9jZXNzLmVudi5OT0RFX0VOVmAgYW5kIGFwcGxpZXMgYSBwYWNrYWdlJ3MgYGJyb3dzZXJgIGZpZWxkIHJlbWFwcGluZyAod2hpY2ggY2FuIHN0dWIgYVxuICAgICAqIE5vZGUgYnVpbHRpbiB0byBhbiBlbXB0eSBvYmplY3QsIGJyZWFraW5nIGEgZGVwZW5kZW5jeSdzIGRlc2t0b3Atb25seSBwYXRoKS4gYG1haW5GaWVsZHNgIHJlc3RhdGVzIHRoZVxuICAgICAqIGBub2RlYCBwbGF0Zm9ybSdzIGRlZmF1bHQsIGJlY2F1c2UgYG5ldXRyYWxgIGhhcyBub25lIG9mIGl0cyBvd24uIE5vZGUgYnVpbHRpbnMgYXJlIG1hcmtlZCBleHRlcm5hbCBieSBuYW1lXG4gICAgICogYmVsb3cgXHUyMDE0IGBub2RlOipgIGluY2x1ZGVkLCBzaW5jZSBvbmx5IGBwbGF0Zm9ybTogJ25vZGUnYCBtYXJrcyB0aGF0IHByZWZpeCBleHRlcm5hbCBieSBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBNZWFzdXJlZCBvdmVyIDMxIHBsdWdpbnMgYnVpbHQgb24gdGhpcyBsaWJyYXJ5LCAyMDI2LTA5LTIzLCBhZ2FpbnN0IGBwbGF0Zm9ybTogJ25vZGUnYDogdGhlIG9ubHkgbW9kdWxlc1xuICAgICAqIHRoYXQgY2hhbmdlIGFyZSBgdmZpbGVgLCBgdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzYCBhbmQgYHlhbWxgIChlYWNoIG5vdyB0YWtlcyBpdHMgYnJvd3NlciBidWlsZCBpbnN0ZWFkXG4gICAgICogb2Ygb25lIGltcG9ydGluZyBgbm9kZTpwcm9jZXNzYCAvIGBub2RlOnBhdGhgIC8gYG5vZGU6dXJsYCkgYW5kIGBlc20tZW52YCdzIE5vZGUgZmxhZywgd2hpY2ggbm93IHJlYWRzXG4gICAgICogZmFsc2UuIEV2ZXJ5dGhpbmcgZWxzZSBpbiBldmVyeSBidW5kbGUgaXMgaWRlbnRpY2FsIHVwIHRvIGlkZW50aWZpZXIgcmVuYW1pbmcuXG4gICAgICovXG4gICAgY29uZGl0aW9uczogWydicm93c2VyJ10sXG4gICAgZW50cnlQb2ludHM6IFtcbiAgICAgIGVuc3VyZU5vbk51bGxhYmxlKFxuICAgICAgICByZXNvbHZlUGF0aEZyb21Sb290KHsgcGF0aDogam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1haW5UcykgfSksXG4gICAgICAgICdDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHBsdWdpbidcbiAgICAgIClcbiAgICBdLFxuICAgIGV4dGVybmFsOiBbXG4gICAgICAnb2JzaWRpYW4nLFxuICAgICAgJ2VsZWN0cm9uJyxcbiAgICAgICdAY29kZW1pcnJvci9hdXRvY29tcGxldGUnLFxuICAgICAgJ0Bjb2RlbWlycm9yL2NvbGxhYicsXG4gICAgICAnQGNvZGVtaXJyb3IvY29tbWFuZHMnLFxuICAgICAgJ0Bjb2RlbWlycm9yL2xhbmd1YWdlJyxcbiAgICAgICdAY29kZW1pcnJvci9saW50JyxcbiAgICAgICdAY29kZW1pcnJvci9zZWFyY2gnLFxuICAgICAgJ0Bjb2RlbWlycm9yL3N0YXRlJyxcbiAgICAgICdAY29kZW1pcnJvci92aWV3JyxcbiAgICAgICdAbGV6ZXIvY29tbW9uJyxcbiAgICAgICdAbGV6ZXIvaGlnaGxpZ2h0JyxcbiAgICAgICdAbGV6ZXIvbHInLFxuICAgICAgJ2VzYnVpbGQnLFxuICAgICAgJ2VzbGludCcsXG4gICAgICAuLi5idWlsdGluTW9kdWxlcyxcbiAgICAgICdub2RlOionXG4gICAgXSxcbiAgICBmb3JtYXQ6ICdjanMnLFxuICAgIGtlZXBOYW1lczogdHJ1ZSxcbiAgICBsb2dMZXZlbDogJ2luZm8nLFxuICAgIG1haW5GaWVsZHM6IFsnbWFpbicsICdtb2R1bGUnXSxcbiAgICBtaW5pZnk6IGlzUHJvZHVjdGlvbkJ1aWxkLFxuICAgIG91dGZpbGU6IGRpc3RQYXRoLFxuICAgIHBsYXRmb3JtOiAnbmV1dHJhbCcsXG4gICAgcGx1Z2luczogW1xuICAgICAgY3VzdG9tRXNidWlsZE9wdGlvbnNQbHVnaW4ocGFyYW1zLmN1c3RvbWl6ZUVzYnVpbGRPcHRpb25zPy5iaW5kKHBhcmFtcykpLFxuICAgICAgc3ZlbHRlV3JhcHBlclBsdWdpbihpc1Byb2R1Y3Rpb25CdWlsZCksXG4gICAgICBzYXNzUGx1Z2luKHtcbiAgICAgICAgc291cmNlTWFwOiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICAgIH0pLFxuICAgICAgcmVuYW1lQ3NzUGx1Z2luKGRpc3RGb2xkZXIpLFxuICAgICAgcHJlcHJvY2Vzc1BsdWdpbigpLFxuICAgICAgZml4RXNtUGx1Z2luKCksXG4gICAgICBmaXhTb3VyY2VNYXBzUGx1Z2luKHsgZGlzdFBhdGhzOiBbZGlzdFBhdGgsIGNzc1BhdGhdLCBpc1Byb2R1Y3Rpb25CdWlsZCwgcGx1Z2luTmFtZSB9KSxcbiAgICAgIC4uLnBhcmFtcy5jdXN0b21Fc2J1aWxkUGx1Z2lucyA/PyBbXSxcbiAgICAgIGNvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpbih7IGRpc3RGb2xkZXIsIGlzUHJvZHVjdGlvbkJ1aWxkLCBvYnNpZGlhbkNvbmZpZ0ZvbGRlciwgcGx1Z2luTmFtZSB9KVxuICAgIF0sXG4gICAgc291cmNlbWFwOiAhaXNQcm9kdWN0aW9uQnVpbGQgJiYgJ2lubGluZScsXG4gICAgdGFyZ2V0OiAnRVMyMDIyJyxcbiAgICB0cmVlU2hha2luZzogdHJ1ZVxuICB9O1xuXG4gIGNvbnN0IGJ1aWxkQ29udGV4dCA9IGF3YWl0IGNvbnRleHQoYnVpbGRPcHRpb25zKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW52b2tlRXNidWlsZChidWlsZENvbnRleHQsIGlzUHJvZHVjdGlvbkJ1aWxkKTtcbiAgaWYgKCFpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgIHdhdGNoTm9kZU1vZHVsZXNBbmRSZXN0YXJ0KHBhcmFtcywgYnVpbGRDb250ZXh0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgT2JzaWRpYW4gcGx1Z2luIGluIGRldmVsb3BtZW50IG1vZGUgdXNpbmcgZXNidWlsZCB3aXRoIHdhdGNoLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGVzYnVpbGQncyBvd24gc291cmNlLWdyYXBoIHdhdGNoLCB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQgYWxzbyB3YXRjaGVzIHRoZSBwbHVnaW4nc1xuICogYG5vZGVfbW9kdWxlc2AgZm9sZGVyIGFuZCByZXN0YXJ0cyB0aGUgd2hvbGUgYnVpbGQgKGluY2x1ZGluZyB0aGUgdHlwZS1jaGVjaykgd2hlbiBpdCBjaGFuZ2VzLCBzbyBhXG4gKiBkZXBlbmRlbmN5IHJlaW5zdGFsbCBvciByZWJ1aWxkIGlzIHBpY2tlZCB1cC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGJ1aWxkIHBhcmFtZXRlcnMgKG1vZGUgaXMgc2V0IHRvIERldmVsb3BtZW50IGF1dG9tYXRpY2FsbHkpLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBpbmRpY2F0aW5nIHRoZSBidWlsZCByZXN1bHQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCAtLSBJbnRlbnRpb25hbGx5IHNoYXJlcyBCdWlsZE9wdGlvbnMgd2l0aCBidWlsZCgpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldihvcHRpb25zPzogQnVpbGRPcHRpb25zKTogUHJvbWlzZTxDbGlUYXNrUmVzdWx0PiB7XG4gIHJldHVybiBhd2FpdCBidWlsZE9ic2lkaWFuUGx1Z2luKHsgLi4ub3B0aW9ucywgbW9kZTogQnVpbGRNb2RlLkRldmVsb3BtZW50IH0pO1xufVxuXG4vKipcbiAqIEludm9rZXMgdGhlIGJ1aWxkIHByb2Nlc3Mgd2l0aCB0aGUgcHJvdmlkZWQgYnVpbGQgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gYnVpbGRDb250ZXh0IC0gVGhlIGJ1aWxkIGNvbnRleHQgZ2VuZXJhdGVkIGJ5IGVzYnVpbGQuXG4gKiBAcGFyYW0gaXNQcm9kdWN0aW9uQnVpbGQgLSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBidWlsZCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IGluZGljYXRpbmcgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgYnVpbGQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnZva2VFc2J1aWxkKGJ1aWxkQ29udGV4dDogQnVpbGRDb250ZXh0LCBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbik6IFByb21pc2U8Q2xpVGFza1Jlc3VsdD4ge1xuICBpZiAoaXNQcm9kdWN0aW9uQnVpbGQpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZENvbnRleHQucmVidWlsZCgpO1xuICAgIGNvbnN0IGlzU3VjY2VzcyA9IHJlc3VsdC5lcnJvcnMubGVuZ3RoID09PSAwICYmIHJlc3VsdC53YXJuaW5ncy5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIENsaVRhc2tSZXN1bHQuU3VjY2Vzcyhpc1N1Y2Nlc3MpO1xuICB9XG4gIGF3YWl0IGJ1aWxkQ29udGV4dC53YXRjaCgpO1xuICByZXR1cm4gQ2xpVGFza1Jlc3VsdC5Eb05vdEV4aXQoKTtcbn1cblxuLyoqXG4gKiBXYXRjaGVzIHRoZSBwbHVnaW4ncyBgbm9kZV9tb2R1bGVzYCBmb2xkZXIgYW5kIHJlc3RhcnRzIHRoZSBkZXZlbG9wbWVudCBidWlsZCB3aGVuIGl0IGNoYW5nZXMuXG4gKlxuICogVGhlIGVzYnVpbGQgd2F0Y2hlciBvbmx5IHRyYWNrcyBmaWxlcyBpbiBpdHMgYnVpbGQgZ3JhcGggYW5kIG9ubHkgZXZlciByZS1idW5kbGVzIFx1MjAxNCBpdCBuZXZlclxuICogcmUtcnVucyB0aGUgYGJ1aWxkOmNvbXBpbGVgIHR5cGUtY2hlY2ssIGFuZCBpdCBpZ25vcmVzIGBub2RlX21vZHVsZXNgIGNoYW5nZXMgb3V0c2lkZSB0aGUgZ3JhcGhcbiAqIChhIHJlaW5zdGFsbCwgb3IgYSBkZXBlbmRlbmN5IGZpbGUgbm90IGN1cnJlbnRseSBpbXBvcnRlZCkuIE9uIGFueSAoZGVib3VuY2VkKSBjaGFuZ2UgYW55d2hlcmUgaW5cbiAqIHRoZSBgbm9kZV9tb2R1bGVzYCB0cmVlLCB0aGUgY3VycmVudCBidWlsZCBjb250ZXh0IGlzIGRpc3Bvc2VkIGFuZCB0aGUgd2hvbGUgZGV2ZWxvcG1lbnQgYnVpbGQgaXNcbiAqIHJlc3RhcnRlZCwgcmUtcnVubmluZyB0aGUgZnVsbCBwaXBlbGluZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdGhlIGJ1aWxkIHdhcyBzdGFydGVkIHdpdGgsIHVzZWQgdG8gcmVzdGFydCBpdC5cbiAqIEBwYXJhbSBidWlsZENvbnRleHQgLSBUaGUgZXNidWlsZCBjb250ZXh0IHRvIGRpc3Bvc2UgYmVmb3JlIHJlc3RhcnRpbmcuXG4gKi9cbmZ1bmN0aW9uIHdhdGNoTm9kZU1vZHVsZXNBbmRSZXN0YXJ0KHBhcmFtczogQnVpbGRPYnNpZGlhblBsdWdpblBhcmFtcywgYnVpbGRDb250ZXh0OiBCdWlsZENvbnRleHQpOiB2b2lkIHtcbiAgY29uc3Qgbm9kZU1vZHVsZXNQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdCh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk5vZGVNb2R1bGVzIH0pO1xuICBpZiAoIW5vZGVNb2R1bGVzUGF0aCB8fCAhZXhpc3RzU3luYyhub2RlTW9kdWxlc1BhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHJlc3RhcnRUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgd2F0Y2hlciA9IHdhdGNoKG5vZGVNb2R1bGVzUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSwgKCkgPT4ge1xuICAgIGlmIChyZXN0YXJ0VGltZW91dCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLXdpbmRvdy10aW1lcnMgLS0gTm9kZSBidWlsZC10b29sIGNvbnRleHQ7IGB3aW5kb3dgIGlzIG5vdCBhdmFpbGFibGUuXG4gICAgICBjbGVhclRpbWVvdXQocmVzdGFydFRpbWVvdXQpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9wcmVmZXItd2luZG93LXRpbWVycyAtLSBOb2RlIGJ1aWxkLXRvb2wgY29udGV4dDsgYHdpbmRvd2AgaXMgbm90IGF2YWlsYWJsZS5cbiAgICByZXN0YXJ0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkocmVzdGFydCk7XG4gICAgfSwgTk9ERV9NT0RVTEVTX1JFU1RBUlRfREVCT1VOQ0VfSU5fTUlMTElTRUNPTkRTKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLndhcm4oJ0RldGVjdGVkIGNoYW5nZXMgaW4gbm9kZV9tb2R1bGVzLiBSZXN0YXJ0aW5nIHRoZSBidWlsZC4uLicpO1xuICAgIHdhdGNoZXIuY2xvc2UoKTtcbiAgICBhd2FpdCBidWlsZENvbnRleHQuZGlzcG9zZSgpO1xuICAgIGF3YWl0IGJ1aWxkT2JzaWRpYW5QbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBLDJDQUEyQztBQUMzQyw0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