@mnaoumov/obsidian-dev-toolkit 0.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 (293) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -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 +1264 -0
  15. package/dist/demo-vault-helper/manifest.json +9 -0
  16. package/dist/integration-test-plugin/main.js +54167 -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 +322 -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 +240 -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 +213 -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 +179 -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 +362 -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 +234 -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 +171 -0
  31. package/dist/lib/cjs/bundlers/esbuild-impl/rename-css-plugin.d.cts +14 -0
  32. package/dist/lib/cjs/bundlers/esbuild.cjs +164 -0
  33. package/dist/lib/cjs/bundlers/esbuild.d.cts +11 -0
  34. package/dist/lib/cjs/bundlers/index.cjs +167 -0
  35. package/dist/lib/cjs/bundlers/index.d.cts +3 -0
  36. package/dist/lib/cjs/demo-vault-app-json.cjs +186 -0
  37. package/dist/lib/cjs/demo-vault-app-json.d.cts +93 -0
  38. package/dist/lib/cjs/demo-vault-buttons.cjs +567 -0
  39. package/dist/lib/cjs/demo-vault-buttons.d.cts +259 -0
  40. package/dist/lib/cjs/demo-vault-coverage.cjs +713 -0
  41. package/dist/lib/cjs/demo-vault-coverage.d.cts +533 -0
  42. package/dist/lib/cjs/demo-vault.cjs +296 -0
  43. package/dist/lib/cjs/demo-vault.d.cts +33 -0
  44. package/dist/lib/cjs/formatters/dprint.cjs +160 -0
  45. package/dist/lib/cjs/formatters/dprint.d.cts +15 -0
  46. package/dist/lib/cjs/formatters/index.cjs +164 -0
  47. package/dist/lib/cjs/formatters/index.d.cts +2 -0
  48. package/dist/lib/cjs/index.cjs +194 -0
  49. package/dist/lib/cjs/index.d.cts +16 -0
  50. package/dist/lib/cjs/integration-test-setup.cjs +129 -0
  51. package/dist/lib/cjs/integration-test-setup.d.cts +33 -0
  52. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +163 -0
  53. package/dist/lib/cjs/integration-test-vitest-global-setup.d.cts +39 -0
  54. package/dist/lib/cjs/jest-setup.cjs +134 -0
  55. package/dist/lib/cjs/jest-setup.d.cts +13 -0
  56. package/dist/lib/cjs/linters/eslint-config.cjs +403 -0
  57. package/dist/lib/cjs/linters/eslint-config.d.cts +25 -0
  58. package/dist/lib/cjs/linters/eslint-rules/index.cjs +200 -0
  59. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +14 -0
  60. package/dist/lib/cjs/linters/eslint-rules/manifest-description.cjs +255 -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 +218 -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 +215 -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 +216 -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 +316 -0
  69. package/dist/lib/cjs/linters/eslint-rules/manifest-schema.d.cts +45 -0
  70. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.cjs +259 -0
  71. package/dist/lib/cjs/linters/eslint-rules/no-local-obsidian-internals.d.cts +10 -0
  72. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.cjs +657 -0
  73. package/dist/lib/cjs/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.cts +10 -0
  74. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.cjs +247 -0
  75. package/dist/lib/cjs/linters/eslint-rules/no-untrusted-input-events.d.cts +10 -0
  76. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +181 -0
  77. package/dist/lib/cjs/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +13 -0
  78. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.cjs +263 -0
  79. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code-in-ui.d.cts +30 -0
  80. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.cjs +215 -0
  81. package/dist/lib/cjs/linters/eslint-rules/plugin-name-as-code.d.cts +29 -0
  82. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.cjs +278 -0
  83. package/dist/lib/cjs/linters/eslint-rules/require-component-suffix.d.cts +18 -0
  84. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.cjs +306 -0
  85. package/dist/lib/cjs/linters/eslint-rules/require-plugin-api-contract-schemas.d.cts +10 -0
  86. package/dist/lib/cjs/linters/eslint.cjs +160 -0
  87. package/dist/lib/cjs/linters/eslint.d.cts +15 -0
  88. package/dist/lib/cjs/linters/index.cjs +185 -0
  89. package/dist/lib/cjs/linters/index.d.cts +9 -0
  90. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +171 -0
  91. package/dist/lib/cjs/linters/markdownlint-cli2-config.d.cts +12 -0
  92. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +164 -0
  93. package/dist/lib/cjs/linters/markdownlint-rules/index.d.cts +2 -0
  94. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.cjs +246 -0
  95. package/dist/lib/cjs/linters/markdownlint-rules/plugin-name-as-code.d.cts +32 -0
  96. package/dist/lib/cjs/linters/markdownlint.cjs +160 -0
  97. package/dist/lib/cjs/linters/markdownlint.d.cts +15 -0
  98. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.cjs +176 -0
  99. package/dist/lib/cjs/linters/obsidianmd-rule-custom-message.d.cts +40 -0
  100. package/dist/lib/cjs/linters/plugin-names.cjs +249 -0
  101. package/dist/lib/cjs/linters/plugin-names.d.cts +81 -0
  102. package/dist/lib/cjs/obsidian-plugin-repo-paths.cjs +216 -0
  103. package/dist/lib/cjs/obsidian-plugin-repo-paths.d.cts +253 -0
  104. package/dist/lib/cjs/setup.cjs +163 -0
  105. package/dist/lib/cjs/setup.d.cts +21 -0
  106. package/dist/lib/cjs/templates.cjs +172 -0
  107. package/dist/lib/cjs/templates.d.cts +13 -0
  108. package/dist/lib/cjs/test-runners/index.cjs +170 -0
  109. package/dist/lib/cjs/test-runners/index.d.cts +4 -0
  110. package/dist/lib/cjs/test-runners/integration-test-plugin.cjs +211 -0
  111. package/dist/lib/cjs/test-runners/integration-test-plugin.d.cts +44 -0
  112. package/dist/lib/cjs/test-runners/performance-eval-cap.cjs +157 -0
  113. package/dist/lib/cjs/test-runners/performance-eval-cap.d.cts +27 -0
  114. package/dist/lib/cjs/test-runners/stale-build-global-setup.cjs +217 -0
  115. package/dist/lib/cjs/test-runners/stale-build-global-setup.d.cts +86 -0
  116. package/dist/lib/cjs/test-runners/vitest-config.cjs +484 -0
  117. package/dist/lib/cjs/test-runners/vitest-config.d.cts +200 -0
  118. package/dist/lib/cjs/version.cjs +262 -0
  119. package/dist/lib/cjs/version.d.cts +92 -0
  120. package/dist/lib/cjs/vitest-setup.cjs +134 -0
  121. package/dist/lib/cjs/vitest-setup.d.cts +11 -0
  122. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +38 -0
  123. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +218 -0
  124. package/dist/lib/esm/bundlers/esbuild-impl/dependency.d.mts +20 -0
  125. package/dist/lib/esm/bundlers/esbuild-impl/dependency.mjs +130 -0
  126. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +34 -0
  127. package/dist/lib/esm/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +108 -0
  128. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +7 -0
  129. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +56 -0
  130. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +98 -0
  131. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +247 -0
  132. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +30 -0
  133. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +126 -0
  134. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.d.mts +14 -0
  135. package/dist/lib/esm/bundlers/esbuild-impl/rename-css-plugin.mjs +63 -0
  136. package/dist/lib/esm/bundlers/esbuild.d.mts +11 -0
  137. package/dist/lib/esm/bundlers/esbuild.mjs +58 -0
  138. package/dist/lib/esm/bundlers/index.d.mts +3 -0
  139. package/dist/lib/esm/bundlers/index.mjs +48 -0
  140. package/dist/lib/esm/demo-vault-app-json.d.mts +93 -0
  141. package/dist/lib/esm/demo-vault-app-json.mjs +75 -0
  142. package/dist/lib/esm/demo-vault-buttons.d.mts +259 -0
  143. package/dist/lib/esm/demo-vault-buttons.mjs +452 -0
  144. package/dist/lib/esm/demo-vault-coverage.d.mts +533 -0
  145. package/dist/lib/esm/demo-vault-coverage.mjs +619 -0
  146. package/dist/lib/esm/demo-vault.d.mts +33 -0
  147. package/dist/lib/esm/demo-vault.mjs +197 -0
  148. package/dist/lib/esm/formatters/dprint.d.mts +15 -0
  149. package/dist/lib/esm/formatters/dprint.mjs +52 -0
  150. package/dist/lib/esm/formatters/index.d.mts +2 -0
  151. package/dist/lib/esm/formatters/index.mjs +46 -0
  152. package/dist/lib/esm/index.d.mts +16 -0
  153. package/dist/lib/esm/index.mjs +66 -0
  154. package/dist/lib/esm/integration-test-setup.d.mts +33 -0
  155. package/dist/lib/esm/integration-test-setup.mjs +44 -0
  156. package/dist/lib/esm/integration-test-vitest-global-setup.d.mts +39 -0
  157. package/dist/lib/esm/integration-test-vitest-global-setup.mjs +57 -0
  158. package/dist/lib/esm/jest-setup.d.mts +13 -0
  159. package/dist/lib/esm/jest-setup.mjs +53 -0
  160. package/dist/lib/esm/linters/eslint-config.d.mts +25 -0
  161. package/dist/lib/esm/linters/eslint-config.mjs +290 -0
  162. package/dist/lib/esm/linters/eslint-rules/index.d.mts +14 -0
  163. package/dist/lib/esm/linters/eslint-rules/index.mjs +70 -0
  164. package/dist/lib/esm/linters/eslint-rules/manifest-description.d.mts +54 -0
  165. package/dist/lib/esm/linters/eslint-rules/manifest-description.mjs +146 -0
  166. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.d.mts +141 -0
  167. package/dist/lib/esm/linters/eslint-rules/manifest-helpers.mjs +90 -0
  168. package/dist/lib/esm/linters/eslint-rules/manifest-id.d.mts +32 -0
  169. package/dist/lib/esm/linters/eslint-rules/manifest-id.mjs +109 -0
  170. package/dist/lib/esm/linters/eslint-rules/manifest-name.d.mts +30 -0
  171. package/dist/lib/esm/linters/eslint-rules/manifest-name.mjs +110 -0
  172. package/dist/lib/esm/linters/eslint-rules/manifest-schema.d.mts +45 -0
  173. package/dist/lib/esm/linters/eslint-rules/manifest-schema.mjs +212 -0
  174. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.d.mts +10 -0
  175. package/dist/lib/esm/linters/eslint-rules/no-local-obsidian-internals.mjs +150 -0
  176. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.d.mts +10 -0
  177. package/dist/lib/esm/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian.mjs +551 -0
  178. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.d.mts +10 -0
  179. package/dist/lib/esm/linters/eslint-rules/no-untrusted-input-events.mjs +138 -0
  180. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +13 -0
  181. package/dist/lib/esm/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +73 -0
  182. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.d.mts +30 -0
  183. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code-in-ui.mjs +157 -0
  184. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.d.mts +29 -0
  185. package/dist/lib/esm/linters/eslint-rules/plugin-name-as-code.mjs +108 -0
  186. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.d.mts +18 -0
  187. package/dist/lib/esm/linters/eslint-rules/require-component-suffix.mjs +167 -0
  188. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.d.mts +10 -0
  189. package/dist/lib/esm/linters/eslint-rules/require-plugin-api-contract-schemas.mjs +197 -0
  190. package/dist/lib/esm/linters/eslint.d.mts +15 -0
  191. package/dist/lib/esm/linters/eslint.mjs +52 -0
  192. package/dist/lib/esm/linters/index.d.mts +9 -0
  193. package/dist/lib/esm/linters/index.mjs +60 -0
  194. package/dist/lib/esm/linters/markdownlint-cli2-config.d.mts +12 -0
  195. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +66 -0
  196. package/dist/lib/esm/linters/markdownlint-rules/index.d.mts +2 -0
  197. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +46 -0
  198. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.d.mts +32 -0
  199. package/dist/lib/esm/linters/markdownlint-rules/plugin-name-as-code.mjs +130 -0
  200. package/dist/lib/esm/linters/markdownlint.d.mts +15 -0
  201. package/dist/lib/esm/linters/markdownlint.mjs +52 -0
  202. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.d.mts +40 -0
  203. package/dist/lib/esm/linters/obsidianmd-rule-custom-message.mjs +67 -0
  204. package/dist/lib/esm/linters/plugin-names.d.mts +81 -0
  205. package/dist/lib/esm/linters/plugin-names.mjs +141 -0
  206. package/dist/lib/esm/obsidian-plugin-repo-paths.d.mts +253 -0
  207. package/dist/lib/esm/obsidian-plugin-repo-paths.mjs +108 -0
  208. package/dist/lib/esm/setup.d.mts +21 -0
  209. package/dist/lib/esm/setup.mjs +55 -0
  210. package/dist/lib/esm/templates.d.mts +13 -0
  211. package/dist/lib/esm/templates.mjs +57 -0
  212. package/dist/lib/esm/test-runners/index.d.mts +4 -0
  213. package/dist/lib/esm/test-runners/index.mjs +50 -0
  214. package/dist/lib/esm/test-runners/integration-test-plugin.d.mts +44 -0
  215. package/dist/lib/esm/test-runners/integration-test-plugin.mjs +94 -0
  216. package/dist/lib/esm/test-runners/performance-eval-cap.d.mts +27 -0
  217. package/dist/lib/esm/test-runners/performance-eval-cap.mjs +48 -0
  218. package/dist/lib/esm/test-runners/stale-build-global-setup.d.mts +86 -0
  219. package/dist/lib/esm/test-runners/stale-build-global-setup.mjs +115 -0
  220. package/dist/lib/esm/test-runners/vitest-config.d.mts +200 -0
  221. package/dist/lib/esm/test-runners/vitest-config.mjs +369 -0
  222. package/dist/lib/esm/version.d.mts +92 -0
  223. package/dist/lib/esm/version.mjs +160 -0
  224. package/dist/lib/esm/vitest-setup.d.mts +11 -0
  225. package/dist/lib/esm/vitest-setup.mjs +53 -0
  226. package/dist/templates/.markdownlint-cli2.mjs +4 -0
  227. package/dist/templates/.nano-staged.mjs +4 -0
  228. package/dist/templates/commitlint.config.ts +3 -0
  229. package/dist/templates/dprint.json +26 -0
  230. package/dist/templates/eslint.config.mts +3 -0
  231. package/dist/templates/scripts/build/build-clean.ts +4 -0
  232. package/dist/templates/scripts/build/build-compile-svelte.ts +4 -0
  233. package/dist/templates/scripts/build/build-compile-typescript.ts +4 -0
  234. package/dist/templates/scripts/build/build-compile.ts +4 -0
  235. package/dist/templates/scripts/build/build-templates.ts +4 -0
  236. package/dist/templates/scripts/bundlers/esbuild/build.ts +4 -0
  237. package/dist/templates/scripts/bundlers/esbuild/dev.ts +4 -0
  238. package/dist/templates/scripts/commitlint-config.ts +3 -0
  239. package/dist/templates/scripts/eslint-config.ts +10 -0
  240. package/dist/templates/scripts/formatters/dprint/format-check.ts +8 -0
  241. package/dist/templates/scripts/formatters/dprint/format.ts +8 -0
  242. package/dist/templates/scripts/gate/gate.ts +10 -0
  243. package/dist/templates/scripts/linters/cspell/spellcheck.ts +8 -0
  244. package/dist/templates/scripts/linters/eslint/lint-fix.ts +8 -0
  245. package/dist/templates/scripts/linters/eslint/lint.ts +8 -0
  246. package/dist/templates/scripts/linters/markdownlint/lint-md-fix.ts +8 -0
  247. package/dist/templates/scripts/linters/markdownlint/lint-md.ts +8 -0
  248. package/dist/templates/scripts/linters/over-exposure/find-overexposed-fix.ts +25 -0
  249. package/dist/templates/scripts/linters/over-exposure/find-overexposed.ts +15 -0
  250. package/dist/templates/scripts/markdownlint-cli2-config.ts +3 -0
  251. package/dist/templates/scripts/nano-staged-config.ts +3 -0
  252. package/dist/templates/scripts/test-runners/vitest/test-coverage.ts +4 -0
  253. package/dist/templates/scripts/test-runners/vitest/test-watch.ts +4 -0
  254. package/dist/templates/scripts/test-runners/vitest/test.ts +4 -0
  255. package/dist/templates/scripts/version/version.ts +10 -0
  256. package/dist/templates/scripts/vitest-config.ts +3 -0
  257. package/dist/templates/vitest.config.ts +3 -0
  258. package/formatters/dprint/package.json +6 -0
  259. package/formatters/index/package.json +6 -0
  260. package/formatters/package.json +6 -0
  261. package/linters/eslint/package.json +6 -0
  262. package/linters/eslint-config/package.json +6 -0
  263. package/linters/eslint-rules/index/package.json +6 -0
  264. package/linters/eslint-rules/manifest-description/package.json +6 -0
  265. package/linters/eslint-rules/manifest-helpers/package.json +6 -0
  266. package/linters/eslint-rules/manifest-id/package.json +6 -0
  267. package/linters/eslint-rules/manifest-name/package.json +6 -0
  268. package/linters/eslint-rules/manifest-schema/package.json +6 -0
  269. package/linters/eslint-rules/no-local-obsidian-internals/package.json +6 -0
  270. package/linters/eslint-rules/no-over-cap-wait-in-eval-in-obsidian/package.json +6 -0
  271. package/linters/eslint-rules/no-untrusted-input-events/package.json +6 -0
  272. package/linters/eslint-rules/obsidian-dev-utils-plugin/package.json +6 -0
  273. package/linters/eslint-rules/package.json +6 -0
  274. package/linters/eslint-rules/plugin-name-as-code/package.json +6 -0
  275. package/linters/eslint-rules/plugin-name-as-code-in-ui/package.json +6 -0
  276. package/linters/eslint-rules/require-component-suffix/package.json +6 -0
  277. package/linters/eslint-rules/require-plugin-api-contract-schemas/package.json +6 -0
  278. package/linters/index/package.json +6 -0
  279. package/linters/markdownlint/package.json +6 -0
  280. package/linters/markdownlint-cli2-config/package.json +6 -0
  281. package/linters/markdownlint-rules/index/package.json +6 -0
  282. package/linters/markdownlint-rules/package.json +6 -0
  283. package/linters/markdownlint-rules/plugin-name-as-code/package.json +6 -0
  284. package/linters/obsidianmd-rule-custom-message/package.json +6 -0
  285. package/linters/package.json +6 -0
  286. package/linters/plugin-names/package.json +6 -0
  287. package/package.json +302 -13
  288. package/test-runners/index/package.json +6 -0
  289. package/test-runners/integration-test-plugin/package.json +6 -0
  290. package/test-runners/package.json +6 -0
  291. package/test-runners/performance-eval-cap/package.json +6 -0
  292. package/test-runners/stale-build-global-setup/package.json +6 -0
  293. package/test-runners/vitest-config/package.json +6 -0
@@ -0,0 +1,108 @@
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 initEsm() {
37
+ ensureDisposeSymbols();
38
+ ensureBrowserProcess();
39
+ })();
40
+ })();
41
+
42
+ import { toPosixPath } from "@mnaoumov/typescript-lib/path";
43
+ import { replaceAll } from "@mnaoumov/typescript-lib/string";
44
+ import { existsSync } from "node:fs";
45
+ import {
46
+ readFile,
47
+ writeFile
48
+ } from "node:fs/promises";
49
+ function fixSourceMapsPlugin(params) {
50
+ const {
51
+ distPaths,
52
+ isProductionBuild,
53
+ pluginName
54
+ } = params;
55
+ return {
56
+ name: "fix-source-maps",
57
+ setup(build) {
58
+ build.onEnd(async () => {
59
+ if (isProductionBuild) {
60
+ return;
61
+ }
62
+ for (const distPath of distPaths) {
63
+ if (!existsSync(distPath)) {
64
+ continue;
65
+ }
66
+ const content = await readFile(distPath, "utf-8");
67
+ const newContent = replaceAll({
68
+ $string: content,
69
+ replacer: ({ capturedGroupArguments: [prefix = "", sourceMapBase64 = "", suffix = ""] }) => `${prefix + fixSourceMap({
70
+ pluginName,
71
+ sourceMapBase64
72
+ }) + suffix.trim()}
73
+ /* nosourcemap */`,
74
+ searchValue: /(?<Prefix>\n(?:\/\/|\/\*)# sourceMappingURL=data:application\/json;base64,)(?<SourceMapBase64>.+?)(?<Suffix>$|\n| \*\/)(?:.|\n)*/g
75
+ });
76
+ if (content !== newContent) {
77
+ await writeFile(distPath, newContent);
78
+ }
79
+ }
80
+ });
81
+ }
82
+ };
83
+ }
84
+ function convertPathToObsidianUrl(params) {
85
+ const { path, pluginName } = params;
86
+ const convertedPath = replaceAll({
87
+ $string: toPosixPath(path),
88
+ replacer: "",
89
+ searchValue: /^(?:\.\.\/)+/g
90
+ });
91
+ return `app://obsidian.md/plugin:${pluginName}/${convertedPath}`;
92
+ }
93
+ function fixSourceMap(params) {
94
+ const { pluginName, sourceMapBase64 } = params;
95
+ const sourceMapJson = Buffer.from(sourceMapBase64, "base64").toString("utf-8");
96
+ const sourceMap = JSON.parse(sourceMapJson);
97
+ sourceMap.sources = (sourceMap.sources ?? []).map(
98
+ (path) => convertPathToObsidianUrl({
99
+ path,
100
+ pluginName
101
+ })
102
+ );
103
+ return Buffer.from(JSON.stringify(sourceMap)).toString("base64");
104
+ }
105
+ export {
106
+ fixSourceMapsPlugin
107
+ };
108
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9maXgtc291cmNlLW1hcHMtcGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGZpeGVzIHNvdXJjZSBtYXBzIGdlbmVyYXRlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gKiBJdCBhZGp1c3RzIHRoZSBwYXRocyBpbiB0aGUgc291cmNlIG1hcHMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIE9ic2lkaWFuJ3MgaW50ZXJuYWwgVVJMIHNjaGVtZS5cbiAqIEEgcGx1Z2luIGlzIG9ubHkgYWN0aXZlIGR1cmluZyBkZXZlbG9wbWVudCBidWlsZHMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIGVzYnVpbGQgcGx1Z2luIHRoYXQgcmV3cml0ZXMgc291cmNlIG1hcHMgZm9yIE9ic2lkaWFuIFVSTCBzY2hlbWU7IHJlcXVpcmVzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnZXNidWlsZCc7XG5cbmltcG9ydCB7IHRvUG9zaXhQYXRoIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgcmVhZEZpbGUsXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZml4U291cmNlTWFwc1BsdWdpbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRml4U291cmNlTWFwc1BsdWdpblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgdG8gdGhlIG91dHB1dCBmaWxlcyBjb250YWluaW5nIHRoZSBzb3VyY2UgbWFwcy5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RQYXRoczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJ1aWxkIGlzIGEgcHJvZHVjdGlvbiBidWlsZC4gVGhlIHBsdWdpbiBvbmx5IHJ1bnMgaW4gbm9uLXByb2R1Y3Rpb24gYnVpbGRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNQcm9kdWN0aW9uQnVpbGQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBPYnNpZGlhbiBwbHVnaW4sIHVzZWQgdG8gY29uc3RydWN0IHRoZSBPYnNpZGlhbi1zcGVjaWZpYyBVUkxzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb252ZXJ0UGF0aFRvT2JzaWRpYW5Vcmx9LlxuICovXG5pbnRlcmZhY2UgQ29udmVydFBhdGhUb09ic2lkaWFuVXJsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBmaWxlIHBhdGguXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBPYnNpZGlhbiBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpeFNvdXJjZU1hcH0uXG4gKi9cbmludGVyZmFjZSBGaXhTb3VyY2VNYXBQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIE9ic2lkaWFuIHBsdWdpbiwgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIE9ic2lkaWFuLXNwZWNpZmljIFVSTHMuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlNjQtZW5jb2RlZCBzb3VyY2UgbWFwIGNvbnRlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VNYXBCYXNlNjQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNvdXJjZU1hcCB7XG4gIHNvdXJjZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXNidWlsZCBwbHVnaW4gdGhhdCBmaXhlcyBzb3VyY2UgbWFwcyBieSBhZGp1c3RpbmcgdGhlIHBhdGhzIHRvIGJlIGNvbXBhdGlibGVcbiAqIHdpdGggT2JzaWRpYW4ncyBpbnRlcm5hbCBVUkwgc2NoZW1lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQW4gZXNidWlsZCBgUGx1Z2luYCBvYmplY3QgdGhhdCBmaXhlcyBzb3VyY2UgbWFwcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpeFNvdXJjZU1hcHNQbHVnaW4ocGFyYW1zOiBGaXhTb3VyY2VNYXBzUGx1Z2luUGFyYW1zKTogUGx1Z2luIHtcbiAgY29uc3Qge1xuICAgIGRpc3RQYXRocyxcbiAgICBpc1Byb2R1Y3Rpb25CdWlsZCxcbiAgICBwbHVnaW5OYW1lXG4gIH0gPSBwYXJhbXM7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZpeC1zb3VyY2UtbWFwcycsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLm9uRW5kKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKGlzUHJvZHVjdGlvbkJ1aWxkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBkaXN0UGF0aCBvZiBkaXN0UGF0aHMpIHtcbiAgICAgICAgICBpZiAoIWV4aXN0c1N5bmMoZGlzdFBhdGgpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZGlzdFBhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSByZXBsYWNlQWxsKHtcbiAgICAgICAgICAgICRzdHJpbmc6IGNvbnRlbnQsXG4gICAgICAgICAgICByZXBsYWNlcjogKHsgY2FwdHVyZWRHcm91cEFyZ3VtZW50czogW3ByZWZpeCA9ICcnLCBzb3VyY2VNYXBCYXNlNjQgPSAnJywgc3VmZml4ID0gJyddIH0pID0+XG4gICAgICAgICAgICAgIGAke1xuICAgICAgICAgICAgICAgIHByZWZpeCArIGZpeFNvdXJjZU1hcCh7XG4gICAgICAgICAgICAgICAgICBwbHVnaW5OYW1lLFxuICAgICAgICAgICAgICAgICAgc291cmNlTWFwQmFzZTY0XG4gICAgICAgICAgICAgICAgfSkgKyBzdWZmaXgudHJpbSgpXG4gICAgICAgICAgICAgIH1cXG4vKiBub3NvdXJjZW1hcCAqL2AsXG4gICAgICAgICAgICBzZWFyY2hWYWx1ZTogLyg/PFByZWZpeD5cXG4oPzpcXC9cXC98XFwvXFwqKSMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uXFwvanNvbjtiYXNlNjQsKSg/PFNvdXJjZU1hcEJhc2U2ND4uKz8pKD88U3VmZml4PiR8XFxufCBcXCpcXC8pKD86LnxcXG4pKi9nXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoY29udGVudCAhPT0gbmV3Q29udGVudCkge1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGRpc3RQYXRoLCBuZXdDb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGdpdmVuIGZpbGUgcGF0aCB0byBhbiBPYnNpZGlhbi1zcGVjaWZpYyBVUkwuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY29udmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgcGF0aCBhcyBhbiBPYnNpZGlhbi1zcGVjaWZpYyBVUkwuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQYXRoVG9PYnNpZGlhblVybChwYXJhbXM6IENvbnZlcnRQYXRoVG9PYnNpZGlhblVybFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcGF0aCwgcGx1Z2luTmFtZSB9ID0gcGFyYW1zO1xuICBjb25zdCBjb252ZXJ0ZWRQYXRoID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogdG9Qb3NpeFBhdGgocGF0aCksXG4gICAgcmVwbGFjZXI6ICcnLFxuICAgIHNlYXJjaFZhbHVlOiAvXig/OlxcLlxcLlxcLykrL2dcbiAgfSk7XG4gIHJldHVybiBgYXBwOi8vb2JzaWRpYW4ubWQvcGx1Z2luOiR7cGx1Z2luTmFtZX0vJHtjb252ZXJ0ZWRQYXRofWA7XG59XG5cbi8qKlxuICogQWRqdXN0cyB0aGUgcGF0aHMgaW4gdGhlIGJhc2U2NC1lbmNvZGVkIHNvdXJjZSBtYXAgdG8gYmUgY29tcGF0aWJsZSB3aXRoIE9ic2lkaWFuJ3MgVVJMIHNjaGVtZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGFkanVzdGluZyB0aGUgc291cmNlIG1hcC5cbiAqIEByZXR1cm5zIEEgYmFzZTY0LWVuY29kZWQgc3RyaW5nIHdpdGggdGhlIGFkanVzdGVkIHNvdXJjZSBtYXAuXG4gKi9cbmZ1bmN0aW9uIGZpeFNvdXJjZU1hcChwYXJhbXM6IEZpeFNvdXJjZU1hcFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcGx1Z2luTmFtZSwgc291cmNlTWFwQmFzZTY0IH0gPSBwYXJhbXM7XG4gIGNvbnN0IHNvdXJjZU1hcEpzb24gPSBCdWZmZXIuZnJvbShzb3VyY2VNYXBCYXNlNjQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgY29uc3Qgc291cmNlTWFwID0gSlNPTi5wYXJzZShzb3VyY2VNYXBKc29uKSBhcyBQYXJ0aWFsPFNvdXJjZU1hcD47XG4gIHNvdXJjZU1hcC5zb3VyY2VzID0gKHNvdXJjZU1hcC5zb3VyY2VzID8/IFtdKS5tYXAoKHBhdGgpID0+XG4gICAgY29udmVydFBhdGhUb09ic2lkaWFuVXJsKHtcbiAgICAgIHBhdGgsXG4gICAgICBwbHVnaW5OYW1lXG4gICAgfSlcbiAgKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWUEsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUErREEsU0FBUyxvQkFBb0IsUUFBMkM7QUFDN0UsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU0sT0FBYTtBQUNqQixZQUFNLE1BQU0sWUFBWTtBQUN0QixZQUFJLG1CQUFtQjtBQUNyQjtBQUFBLFFBQ0Y7QUFFQSxtQkFBVyxZQUFZLFdBQVc7QUFDaEMsY0FBSSxDQUFDLFdBQVcsUUFBUSxHQUFHO0FBQ3pCO0FBQUEsVUFDRjtBQUVBLGdCQUFNLFVBQVUsTUFBTSxTQUFTLFVBQVUsT0FBTztBQUNoRCxnQkFBTSxhQUFhLFdBQVc7QUFBQSxZQUM1QixTQUFTO0FBQUEsWUFDVCxVQUFVLENBQUMsRUFBRSx3QkFBd0IsQ0FBQyxTQUFTLElBQUksa0JBQWtCLElBQUksU0FBUyxFQUFFLEVBQUUsTUFDcEYsR0FDRSxTQUFTLGFBQWE7QUFBQSxjQUNwQjtBQUFBLGNBQ0E7QUFBQSxZQUNGLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FDbkI7QUFBQTtBQUFBLFlBQ0YsYUFBYTtBQUFBLFVBQ2YsQ0FBQztBQUVELGNBQUksWUFBWSxZQUFZO0FBQzFCLGtCQUFNLFVBQVUsVUFBVSxVQUFVO0FBQUEsVUFDdEM7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjtBQVFBLFNBQVMseUJBQXlCLFFBQWdEO0FBQ2hGLFFBQU0sRUFBRSxNQUFNLFdBQVcsSUFBSTtBQUM3QixRQUFNLGdCQUFnQixXQUFXO0FBQUEsSUFDL0IsU0FBUyxZQUFZLElBQUk7QUFBQSxJQUN6QixVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0QsU0FBTyw0QkFBNEIsVUFBVSxJQUFJLGFBQWE7QUFDaEU7QUFRQSxTQUFTLGFBQWEsUUFBb0M7QUFDeEQsUUFBTSxFQUFFLFlBQVksZ0JBQWdCLElBQUk7QUFDeEMsUUFBTSxnQkFBZ0IsT0FBTyxLQUFLLGlCQUFpQixRQUFRLEVBQUUsU0FBUyxPQUFPO0FBQzdFLFFBQU0sWUFBWSxLQUFLLE1BQU0sYUFBYTtBQUMxQyxZQUFVLFdBQVcsVUFBVSxXQUFXLENBQUMsR0FBRztBQUFBLElBQUksQ0FBQyxTQUNqRCx5QkFBeUI7QUFBQSxNQUN2QjtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBQ0EsU0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLFNBQVMsQ0FBQyxFQUFFLFNBQVMsUUFBUTtBQUNqRTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,7 @@
1
+ /// <reference path="../../index.d.mts" />
2
+ export * as 'copy-to-obsidian-plugins-folder-plugin' from './copy-to-obsidian-plugins-folder-plugin.mjs';
3
+ export * as 'dependency' from './dependency.mjs';
4
+ export * as 'fix-source-maps-plugin' from './fix-source-maps-plugin.mjs';
5
+ export * as 'obsidian-plugin-builder' from './obsidian-plugin-builder.mjs';
6
+ export * as 'preprocess-plugin' from './preprocess-plugin.mjs';
7
+ export * as 'rename-css-plugin' from './rename-css-plugin.mjs';
@@ -0,0 +1,56 @@
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 initEsm() {
37
+ ensureDisposeSymbols();
38
+ ensureBrowserProcess();
39
+ })();
40
+ })();
41
+
42
+ import * as copy_to_obsidian_plugins_folder_plugin from "./copy-to-obsidian-plugins-folder-plugin.mjs";
43
+ import * as dependency from "./dependency.mjs";
44
+ import * as fix_source_maps_plugin from "./fix-source-maps-plugin.mjs";
45
+ import * as obsidian_plugin_builder from "./obsidian-plugin-builder.mjs";
46
+ import * as preprocess_plugin from "./preprocess-plugin.mjs";
47
+ import * as rename_css_plugin from "./rename-css-plugin.mjs";
48
+ export {
49
+ copy_to_obsidian_plugins_folder_plugin as "copy-to-obsidian-plugins-folder-plugin",
50
+ dependency,
51
+ fix_source_maps_plugin as "fix-source-maps-plugin",
52
+ obsidian_plugin_builder as "obsidian-plugin-builder",
53
+ preprocess_plugin as "preprocess-plugin",
54
+ rename_css_plugin as "rename-css-plugin"
55
+ };
56
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdjb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbicgZnJvbSAnLi9jb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAnZGVwZW5kZW5jeScgZnJvbSAnLi9kZXBlbmRlbmN5LnRzJztcbmV4cG9ydCAqIGFzICdmaXgtc291cmNlLW1hcHMtcGx1Z2luJyBmcm9tICcuL2ZpeC1zb3VyY2UtbWFwcy1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLXBsdWdpbi1idWlsZGVyJyBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1idWlsZGVyLnRzJztcbmV4cG9ydCAqIGFzICdwcmVwcm9jZXNzLXBsdWdpbicgZnJvbSAnLi9wcmVwcm9jZXNzLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAncmVuYW1lLWNzcy1wbHVnaW4nIGZyb20gJy4vcmVuYW1lLWNzcy1wbHVnaW4udHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxZQUFZQSw0Q0FBOEM7QUFDMUQsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWUMsNEJBQThCO0FBQzFDLFlBQVlDLDZCQUErQjtBQUMzQyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWUMsdUJBQXlCOyIsCiAgIm5hbWVzIjogWyJjb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbiIsICJmaXgtc291cmNlLW1hcHMtcGx1Z2luIiwgIm9ic2lkaWFuLXBsdWdpbi1idWlsZGVyIiwgInByZXByb2Nlc3MtcGx1Z2luIiwgInJlbmFtZS1jc3MtcGx1Z2luIl0KfQo=
@@ -0,0 +1,98 @@
1
+ /// <reference path="../../index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * This module provides functionality to build and bundle an Obsidian plugin using esbuild.
6
+ * It includes functions to handle the build process based on different build modes (development or production),
7
+ * and it sets up various esbuild plugins to preprocess, lint, fix source maps, and copy files to the Obsidian plugins folder.
8
+ */
9
+ import type { BuildContext, BuildOptions as EsbuildOptions, Plugin } from 'esbuild';
10
+ import { CliTaskResult } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
11
+ /**
12
+ * Enumeration representing the build modes.
13
+ */
14
+ export declare enum BuildMode {
15
+ /**
16
+ Development mode for building the plugin
17
+ */
18
+ Development = 0,
19
+ /**
20
+ Production mode for building the plugin
21
+ */
22
+ Production = 1
23
+ }
24
+ /**
25
+ * Banner text to be included at the top of the generated files.
26
+ */
27
+ export declare const banner = "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source, please visit the github repository of this plugin\n*/\n";
28
+ /**
29
+ * Options for {@link buildObsidianPlugin}.
30
+ */
31
+ export interface BuildObsidianPluginParams {
32
+ /**
33
+ * Custom esbuild plugins to be used during the build process.
34
+ */
35
+ readonly customEsbuildPlugins?: Plugin[];
36
+ /**
37
+ * Customizes the `esbuild` options.
38
+ */
39
+ readonly customizeEsbuildOptions?: (options: EsbuildOptions) => void;
40
+ /**
41
+ * A build mode, either `Development` or `Production`
42
+ */
43
+ readonly mode: BuildMode;
44
+ /**
45
+ * A folder for Obsidian configuration. Defaults to the `OBSIDIAN_CONFIG_FOLDER` environment variable.
46
+ */
47
+ readonly obsidianConfigFolder?: string;
48
+ }
49
+ /**
50
+ * Build parameters without the mode field, for use with {@link build} and {@link dev}.
51
+ */
52
+ export interface BuildOptions {
53
+ /**
54
+ * Custom esbuild plugins to be used during the build process.
55
+ */
56
+ readonly customEsbuildPlugins?: Plugin[];
57
+ /**
58
+ * Customizes the `esbuild` options.
59
+ */
60
+ readonly customizeEsbuildOptions?: (options: EsbuildOptions) => void;
61
+ /**
62
+ * A folder for Obsidian configuration. Defaults to the `OBSIDIAN_CONFIG_FOLDER` environment variable.
63
+ */
64
+ readonly obsidianConfigFolder?: string;
65
+ }
66
+ /**
67
+ * Builds the Obsidian plugin in production mode using esbuild.
68
+ *
69
+ * @param options - Optional build parameters (mode is set to Production automatically).
70
+ * @returns A {@link Promise} that resolves when the build is complete.
71
+ */
72
+ export declare function build(options?: BuildOptions): Promise<void>;
73
+ /**
74
+ * Builds the Obsidian plugin based on the specified mode and configuration folder.
75
+ *
76
+ * @param params - The parameters for building the plugin.
77
+ * @returns A {@link Promise} that resolves to a {@link CliTaskResult} indicating the success or failure of the build.
78
+ */
79
+ export declare function buildObsidianPlugin(params: BuildObsidianPluginParams): Promise<CliTaskResult>;
80
+ /**
81
+ * Builds the Obsidian plugin in development mode using esbuild with watch.
82
+ *
83
+ * In addition to esbuild's own source-graph watch, the development build also watches the plugin's
84
+ * `node_modules` folder and restarts the whole build (including the type-check) when it changes, so a
85
+ * dependency reinstall or rebuild is picked up.
86
+ *
87
+ * @param options - Optional build parameters (mode is set to Development automatically).
88
+ * @returns A {@link Promise} that resolves to a {@link CliTaskResult} indicating the build result.
89
+ */
90
+ export declare function dev(options?: BuildOptions): Promise<CliTaskResult>;
91
+ /**
92
+ * Invokes the build process with the provided build context.
93
+ *
94
+ * @param buildContext - The build context generated by esbuild.
95
+ * @param isProductionBuild - A boolean indicating whether the build is a production build.
96
+ * @returns A {@link Promise} that resolves to a {@link CliTaskResult} indicating the success or failure of the build.
97
+ */
98
+ export declare function invokeEsbuild(buildContext: BuildContext, isProductionBuild: boolean): Promise<CliTaskResult>;
@@ -0,0 +1,247 @@
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 initEsm() {
37
+ ensureDisposeSymbols();
38
+ ensureBrowserProcess();
39
+ })();
40
+ })();
41
+
42
+ import { customEsbuildOptionsPlugin } from "@mnaoumov/typescript-dev-toolkit/bundlers/esbuild-impl/custom-esbuild-options-plugin";
43
+ import { fixEsmPlugin } from "@mnaoumov/typescript-dev-toolkit/bundlers/esbuild-impl/fix-esm-plugin";
44
+ import { svelteWrapperPlugin } from "@mnaoumov/typescript-dev-toolkit/bundlers/esbuild-impl/svelte-wrapper-plugin";
45
+ import { CliTaskResult } from "@mnaoumov/typescript-dev-toolkit/cli-utils";
46
+ import { readPackageJson } from "@mnaoumov/typescript-dev-toolkit/npm";
47
+ import { npmRun } from "@mnaoumov/typescript-dev-toolkit/npm-run";
48
+ import { resolvePathFromRoot } from "@mnaoumov/typescript-dev-toolkit/root";
49
+ import { invokeAsyncSafely } from "@mnaoumov/typescript-lib/async";
50
+ import { extractDefaultExportInterop } from "@mnaoumov/typescript-lib/object-utils";
51
+ import { join } from "@mnaoumov/typescript-lib/path";
52
+ import { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
53
+ import { context } from "esbuild";
54
+ import sassPlugin_ from "esbuild-sass-plugin";
55
+ import {
56
+ existsSync,
57
+ watch
58
+ } from "node:fs";
59
+ import {
60
+ cp,
61
+ mkdir,
62
+ rm,
63
+ writeFile
64
+ } from "node:fs/promises";
65
+ import { builtinModules } from "node:module";
66
+ import process, { loadEnvFile } from "node:process";
67
+ import { ObsidianPluginRepoPaths } from "../../obsidian-plugin-repo-paths.mjs";
68
+ import { copyToObsidianPluginsFolderPlugin } from "./copy-to-obsidian-plugins-folder-plugin.mjs";
69
+ import { fixSourceMapsPlugin } from "./fix-source-maps-plugin.mjs";
70
+ import { preprocessPlugin } from "./preprocess-plugin.mjs";
71
+ import { renameCssPlugin } from "./rename-css-plugin.mjs";
72
+ const sassPlugin = extractDefaultExportInterop(sassPlugin_);
73
+ const NODE_MODULES_RESTART_DEBOUNCE_IN_MILLISECONDS = 1e3;
74
+ var BuildMode = /* @__PURE__ */ ((BuildMode2) => {
75
+ BuildMode2[BuildMode2["Development"] = 0] = "Development";
76
+ BuildMode2[BuildMode2["Production"] = 1] = "Production";
77
+ return BuildMode2;
78
+ })(BuildMode || {});
79
+ const banner = `/*
80
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
81
+ if you want to view the source, please visit the github repository of this plugin
82
+ */
83
+ `;
84
+ async function build(options) {
85
+ const result = await buildObsidianPlugin({ ...options, mode: 1 /* Production */ });
86
+ result.throwOnFailure();
87
+ }
88
+ async function buildObsidianPlugin(params) {
89
+ await npmRun("build:compile");
90
+ const envPath = resolvePathFromRoot({ path: ".env" });
91
+ if (envPath && existsSync(envPath)) {
92
+ loadEnvFile(envPath);
93
+ }
94
+ const obsidianPluginBuilderEnv = process.env;
95
+ const obsidianConfigFolder = params.obsidianConfigFolder ?? obsidianPluginBuilderEnv.OBSIDIAN_CONFIG_FOLDER ?? "";
96
+ const isProductionBuild = params.mode === 1 /* Production */;
97
+ const distFolder = ensureNonNullable(
98
+ resolvePathFromRoot({ path: isProductionBuild ? ObsidianPluginRepoPaths.DistBuild : ObsidianPluginRepoPaths.DistDev }),
99
+ "Could not determine the dist folder"
100
+ );
101
+ if (existsSync(distFolder)) {
102
+ await rm(distFolder, { recursive: true });
103
+ }
104
+ await mkdir(distFolder, { recursive: true });
105
+ const distFileNames = [
106
+ ObsidianPluginRepoPaths.ManifestJson
107
+ ];
108
+ if (!isProductionBuild) {
109
+ await writeFile(join(distFolder, ObsidianPluginRepoPaths.HotReload), "", "utf-8");
110
+ }
111
+ for (const fileName of distFileNames) {
112
+ const localFile = ensureNonNullable(resolvePathFromRoot({ path: fileName }), `Could not determine the local file for ${fileName}`);
113
+ const distFile = join(distFolder, fileName);
114
+ if (existsSync(localFile)) {
115
+ await cp(localFile, distFile);
116
+ }
117
+ }
118
+ const distPath = join(distFolder, ObsidianPluginRepoPaths.MainJs);
119
+ const cssPath = join(distFolder, ObsidianPluginRepoPaths.StylesCss);
120
+ const packageJson = await readPackageJson();
121
+ const pluginName = packageJson.name ?? "(unknown)";
122
+ const buildOptions = {
123
+ banner: {
124
+ js: banner
125
+ },
126
+ bundle: true,
127
+ /*
128
+ * `conditions`, `mainFields` and `platform` are one decision, read together.
129
+ *
130
+ * The bundle is ONE `main.js` loaded both in Electron on desktop and in a bare WebView on a phone, so a
131
+ * dependency must resolve to its browser build. esbuild ADDS a condition of its own for `platform: 'node'`
132
+ * (`node`) and for `platform: 'browser'` (`browser`), and a `conditions` list cannot take one away. With
133
+ * `platform: 'node'` the effective set was `{ browser, node, import/require, default }`, so a package whose
134
+ * `exports` map lists `node` before `browser` shipped its Node build to phones — `fflate`'s `esm/index.mjs`
135
+ * opens with `createRequire` from `module`, which threw at load on mobile.
136
+ *
137
+ * `platform: 'neutral'` adds no platform condition, leaving exactly `browser` from the list below. It is
138
+ * chosen over `platform: 'browser'` because that one also changes what this bundle has always relied on:
139
+ * it defines `process.env.NODE_ENV` and applies a package's `browser` field remapping (which can stub a
140
+ * Node builtin to an empty object, breaking a dependency's desktop-only path). `mainFields` restates the
141
+ * `node` platform's default, because `neutral` has none of its own. Node builtins are marked external by name
142
+ * below — `node:*` included, since only `platform: 'node'` marks that prefix external by itself.
143
+ *
144
+ * Measured over 31 plugins built on this library, 2026-09-23, against `platform: 'node'`: the only modules
145
+ * that change are `vfile`, `unist-util-visit-parents` and `yaml` (each now takes its browser build instead
146
+ * of one importing `node:process` / `node:path` / `node:url`) and `esm-env`'s Node flag, which now reads
147
+ * false. Everything else in every bundle is identical up to identifier renaming.
148
+ */
149
+ conditions: ["browser"],
150
+ entryPoints: [
151
+ ensureNonNullable(
152
+ resolvePathFromRoot({ path: join(ObsidianPluginRepoPaths.Src, ObsidianPluginRepoPaths.MainTs) }),
153
+ "Could not determine the entry point for the plugin"
154
+ )
155
+ ],
156
+ external: [
157
+ "obsidian",
158
+ "electron",
159
+ "@codemirror/autocomplete",
160
+ "@codemirror/collab",
161
+ "@codemirror/commands",
162
+ "@codemirror/language",
163
+ "@codemirror/lint",
164
+ "@codemirror/search",
165
+ "@codemirror/state",
166
+ "@codemirror/view",
167
+ "@lezer/common",
168
+ "@lezer/highlight",
169
+ "@lezer/lr",
170
+ "esbuild",
171
+ "eslint",
172
+ ...builtinModules,
173
+ "node:*"
174
+ ],
175
+ format: "cjs",
176
+ keepNames: true,
177
+ logLevel: "info",
178
+ mainFields: ["main", "module"],
179
+ minify: isProductionBuild,
180
+ outfile: distPath,
181
+ platform: "neutral",
182
+ plugins: [
183
+ customEsbuildOptionsPlugin(params.customizeEsbuildOptions?.bind(params)),
184
+ svelteWrapperPlugin(isProductionBuild),
185
+ sassPlugin({
186
+ sourceMap: !isProductionBuild
187
+ }),
188
+ renameCssPlugin(distFolder),
189
+ preprocessPlugin(),
190
+ fixEsmPlugin(),
191
+ fixSourceMapsPlugin({ distPaths: [distPath, cssPath], isProductionBuild, pluginName }),
192
+ ...params.customEsbuildPlugins ?? [],
193
+ copyToObsidianPluginsFolderPlugin({ distFolder, isProductionBuild, obsidianConfigFolder, pluginName })
194
+ ],
195
+ sourcemap: !isProductionBuild && "inline",
196
+ target: "ES2022",
197
+ treeShaking: true
198
+ };
199
+ const buildContext = await context(buildOptions);
200
+ const result = await invokeEsbuild(buildContext, isProductionBuild);
201
+ if (!isProductionBuild) {
202
+ watchNodeModulesAndRestart(params, buildContext);
203
+ }
204
+ return result;
205
+ }
206
+ async function dev(options) {
207
+ return await buildObsidianPlugin({ ...options, mode: 0 /* Development */ });
208
+ }
209
+ async function invokeEsbuild(buildContext, isProductionBuild) {
210
+ if (isProductionBuild) {
211
+ const result = await buildContext.rebuild();
212
+ const isSuccess = result.errors.length === 0 && result.warnings.length === 0;
213
+ return CliTaskResult.Success(isSuccess);
214
+ }
215
+ await buildContext.watch();
216
+ return CliTaskResult.DoNotExit();
217
+ }
218
+ function watchNodeModulesAndRestart(params, buildContext) {
219
+ const nodeModulesPath = resolvePathFromRoot({ path: ObsidianPluginRepoPaths.NodeModules });
220
+ if (!nodeModulesPath || !existsSync(nodeModulesPath)) {
221
+ return;
222
+ }
223
+ let restartTimeout;
224
+ const watcher = watch(nodeModulesPath, { recursive: true }, () => {
225
+ if (restartTimeout) {
226
+ clearTimeout(restartTimeout);
227
+ }
228
+ restartTimeout = setTimeout(() => {
229
+ invokeAsyncSafely(restart);
230
+ }, NODE_MODULES_RESTART_DEBOUNCE_IN_MILLISECONDS);
231
+ });
232
+ async function restart() {
233
+ console.warn("Detected changes in node_modules. Restarting the build...");
234
+ watcher.close();
235
+ await buildContext.dispose();
236
+ await buildObsidianPlugin(params);
237
+ }
238
+ }
239
+ export {
240
+ BuildMode,
241
+ banner,
242
+ build,
243
+ buildObsidianPlugin,
244
+ dev,
245
+ invokeEsbuild
246
+ };
247
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9vYnNpZGlhbi1wbHVnaW4tYnVpbGRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gYnVpbGQgYW5kIGJ1bmRsZSBhbiBPYnNpZGlhbiBwbHVnaW4gdXNpbmcgZXNidWlsZC5cbiAqIEl0IGluY2x1ZGVzIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGJ1aWxkIHByb2Nlc3MgYmFzZWQgb24gZGlmZmVyZW50IGJ1aWxkIG1vZGVzIChkZXZlbG9wbWVudCBvciBwcm9kdWN0aW9uKSxcbiAqIGFuZCBpdCBzZXRzIHVwIHZhcmlvdXMgZXNidWlsZCBwbHVnaW5zIHRvIHByZXByb2Nlc3MsIGxpbnQsIGZpeCBzb3VyY2UgbWFwcywgYW5kIGNvcHkgZmlsZXMgdG8gdGhlIE9ic2lkaWFuIHBsdWdpbnMgZm9sZGVyLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBlc2J1aWxkLWJhc2VkIGJ1aWxkIHBpcGVsaW5lIHdpdGggc2Fzcy9zdmVsdGUgcGx1Z2lucyBhbmQgZmlsZSB3YXRjaGVyczsgcmVxdWlyZXMgYSBsaXZlIGVzYnVpbGQgY29udGV4dC4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCdWlsZENvbnRleHQsXG4gIEJ1aWxkT3B0aW9ucyBhcyBFc2J1aWxkT3B0aW9ucyxcbiAgUGx1Z2luXG59IGZyb20gJ2VzYnVpbGQnO1xuXG5pbXBvcnQgeyBjdXN0b21Fc2J1aWxkT3B0aW9uc1BsdWdpbiB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9jdXN0b20tZXNidWlsZC1vcHRpb25zLXBsdWdpbic7XG5pbXBvcnQgeyBmaXhFc21QbHVnaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9idW5kbGVycy9lc2J1aWxkLWltcGwvZml4LWVzbS1wbHVnaW4nO1xuaW1wb3J0IHsgc3ZlbHRlV3JhcHBlclBsdWdpbiB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9zdmVsdGUtd3JhcHBlci1wbHVnaW4nO1xuaW1wb3J0IHsgQ2xpVGFza1Jlc3VsdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L2NsaS11dGlscyc7XG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9ucG0nO1xuaW1wb3J0IHsgbnBtUnVuIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbnBtLXJ1bic7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcm9vdCc7XG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3AgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBjb250ZXh0IH0gZnJvbSAnZXNidWlsZCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gV2UgbmVlZCBhIHRlbXAgdmFyaWFibGUgdG8gYXBwbHkgYGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcCgpYCBmaXggYmVsb3cuXG5pbXBvcnQgc2Fzc1BsdWdpbl8gZnJvbSAnZXNidWlsZC1zYXNzLXBsdWdpbic7XG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICB3YXRjaFxufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGNwLFxuICBta2RpcixcbiAgcm0sXG4gIHdyaXRlRmlsZVxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGJ1aWx0aW5Nb2R1bGVzIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHByb2Nlc3MsIHsgbG9hZEVudkZpbGUgfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uLy4uL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGNvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpbiB9IGZyb20gJy4vY29weS10by1vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1wbHVnaW4udHMnO1xuaW1wb3J0IHsgZml4U291cmNlTWFwc1BsdWdpbiB9IGZyb20gJy4vZml4LXNvdXJjZS1tYXBzLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBwcmVwcm9jZXNzUGx1Z2luIH0gZnJvbSAnLi9wcmVwcm9jZXNzLXBsdWdpbi50cyc7XG5pbXBvcnQgeyByZW5hbWVDc3NQbHVnaW4gfSBmcm9tICcuL3JlbmFtZS1jc3MtcGx1Z2luLnRzJztcblxuY29uc3Qgc2Fzc1BsdWdpbiA9IGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcChzYXNzUGx1Z2luXyk7XG5cbi8qKlxuICogRGVib3VuY2Ugd2luZG93IGZvciByZXN0YXJ0aW5nIGEgZGV2ZWxvcG1lbnQgYnVpbGQgYWZ0ZXIgYG5vZGVfbW9kdWxlc2AgY2hhbmdlcy4gQSByZWluc3RhbGwgb3IgYVxuICogZGVwZW5kZW5jeSByZWJ1aWxkIHRvdWNoZXMgbWFueSBmaWxlcyBpbiBxdWljayBzdWNjZXNzaW9uLCBzbyB3ZSB3YWl0IGZvciB0aGUgY2h1cm4gdG8gc2V0dGxlXG4gKiBiZWZvcmUgcmVzdGFydGluZyBvbmNlLlxuICovXG5jb25zdCBOT0RFX01PRFVMRVNfUkVTVEFSVF9ERUJPVU5DRV9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwO1xuXG4vKipcbiAqIEVudW1lcmF0aW9uIHJlcHJlc2VudGluZyB0aGUgYnVpbGQgbW9kZXMuXG4gKi9cbmV4cG9ydCBlbnVtIEJ1aWxkTW9kZSB7XG4gIC8qKlxuICBEZXZlbG9wbWVudCBtb2RlIGZvciBidWlsZGluZyB0aGUgcGx1Z2luXG4gICAqL1xuICBEZXZlbG9wbWVudCxcbiAgLyoqXG4gIFByb2R1Y3Rpb24gbW9kZSBmb3IgYnVpbGRpbmcgdGhlIHBsdWdpblxuICAgKi9cbiAgUHJvZHVjdGlvblxufVxuXG4vKipcbiAqIEJhbm5lciB0ZXh0IHRvIGJlIGluY2x1ZGVkIGF0IHRoZSB0b3Agb2YgdGhlIGdlbmVyYXRlZCBmaWxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGJhbm5lciA9IGAvKlxuVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgRVNCVUlMRFxuaWYgeW91IHdhbnQgdG8gdmlldyB0aGUgc291cmNlLCBwbGVhc2UgdmlzaXQgdGhlIGdpdGh1YiByZXBvc2l0b3J5IG9mIHRoaXMgcGx1Z2luXG4qL1xuYDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgYnVpbGRPYnNpZGlhblBsdWdpbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRPYnNpZGlhblBsdWdpblBhcmFtcyB7XG4gIC8qKlxuICAgKiBDdXN0b20gZXNidWlsZCBwbHVnaW5zIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tRXNidWlsZFBsdWdpbnM/OiBQbHVnaW5bXTtcblxuICAvKipcbiAgICogQ3VzdG9taXplcyB0aGUgYGVzYnVpbGRgIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21pemVFc2J1aWxkT3B0aW9ucz86IChvcHRpb25zOiBFc2J1aWxkT3B0aW9ucykgPT4gdm9pZDtcblxuICAvKipcbiAgICogQSBidWlsZCBtb2RlLCBlaXRoZXIgYERldmVsb3BtZW50YCBvciBgUHJvZHVjdGlvbmBcbiAgICovXG4gIHJlYWRvbmx5IG1vZGU6IEJ1aWxkTW9kZTtcblxuICAvKipcbiAgICogQSBmb2xkZXIgZm9yIE9ic2lkaWFuIGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIHRoZSBgT0JTSURJQU5fQ09ORklHX0ZPTERFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkNvbmZpZ0ZvbGRlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZCBwYXJhbWV0ZXJzIHdpdGhvdXQgdGhlIG1vZGUgZmllbGQsIGZvciB1c2Ugd2l0aCB7QGxpbmsgYnVpbGR9IGFuZCB7QGxpbmsgZGV2fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICAvKipcbiAgICogQ3VzdG9tIGVzYnVpbGQgcGx1Z2lucyB0byBiZSB1c2VkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUVzYnVpbGRQbHVnaW5zPzogUGx1Z2luW107XG5cbiAgLyoqXG4gICAqIEN1c3RvbWl6ZXMgdGhlIGBlc2J1aWxkYCBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9taXplRXNidWlsZE9wdGlvbnM/OiAob3B0aW9uczogRXNidWlsZE9wdGlvbnMpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEEgZm9sZGVyIGZvciBPYnNpZGlhbiBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byB0aGUgYE9CU0lESUFOX0NPTkZJR19GT0xERVJgIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db25maWdGb2xkZXI/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBPYnNpZGlhblBsdWdpbkJ1aWxkZXJFbnYge1xuICBPQlNJRElBTl9DT05GSUdfRk9MREVSOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBPYnNpZGlhbiBwbHVnaW4gaW4gcHJvZHVjdGlvbiBtb2RlIHVzaW5nIGVzYnVpbGQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBidWlsZCBwYXJhbWV0ZXJzIChtb2RlIGlzIHNldCB0byBQcm9kdWN0aW9uIGF1dG9tYXRpY2FsbHkpLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBidWlsZCBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkKG9wdGlvbnM/OiBCdWlsZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYnVpbGRPYnNpZGlhblBsdWdpbih7IC4uLm9wdGlvbnMsIG1vZGU6IEJ1aWxkTW9kZS5Qcm9kdWN0aW9uIH0pO1xuICByZXN1bHQudGhyb3dPbkZhaWx1cmUoKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIE9ic2lkaWFuIHBsdWdpbiBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIG1vZGUgYW5kIGNvbmZpZ3VyYXRpb24gZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgYnVpbGRpbmcgdGhlIHBsdWdpbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gaW5kaWNhdGluZyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBidWlsZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkT2JzaWRpYW5QbHVnaW4ocGFyYW1zOiBCdWlsZE9ic2lkaWFuUGx1Z2luUGFyYW1zKTogUHJvbWlzZTxDbGlUYXNrUmVzdWx0PiB7XG4gIGF3YWl0IG5wbVJ1bignYnVpbGQ6Y29tcGlsZScpO1xuICBjb25zdCBlbnZQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdCh7IHBhdGg6ICcuZW52JyB9KTtcbiAgaWYgKGVudlBhdGggJiYgZXhpc3RzU3luYyhlbnZQYXRoKSkge1xuICAgIGxvYWRFbnZGaWxlKGVudlBhdGgpO1xuICB9XG4gIGNvbnN0IG9ic2lkaWFuUGx1Z2luQnVpbGRlckVudiA9IHByb2Nlc3MuZW52IGFzIFBhcnRpYWw8T2JzaWRpYW5QbHVnaW5CdWlsZGVyRW52PjtcblxuICBjb25zdCBvYnNpZGlhbkNvbmZpZ0ZvbGRlciA9IHBhcmFtcy5vYnNpZGlhbkNvbmZpZ0ZvbGRlciA/PyBvYnNpZGlhblBsdWdpbkJ1aWxkZXJFbnYuT0JTSURJQU5fQ09ORklHX0ZPTERFUiA/PyAnJztcbiAgY29uc3QgaXNQcm9kdWN0aW9uQnVpbGQgPSBwYXJhbXMubW9kZSA9PT0gQnVpbGRNb2RlLlByb2R1Y3Rpb247XG5cbiAgY29uc3QgZGlzdEZvbGRlciA9IGVuc3VyZU5vbk51bGxhYmxlKFxuICAgIHJlc29sdmVQYXRoRnJvbVJvb3QoeyBwYXRoOiBpc1Byb2R1Y3Rpb25CdWlsZCA/IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCA6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3REZXYgfSksXG4gICAgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGRpc3QgZm9sZGVyJ1xuICApO1xuXG4gIGlmIChleGlzdHNTeW5jKGRpc3RGb2xkZXIpKSB7XG4gICAgYXdhaXQgcm0oZGlzdEZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH1cbiAgYXdhaXQgbWtkaXIoZGlzdEZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3QgZGlzdEZpbGVOYW1lcyA9IFtcbiAgICBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb25cbiAgXTtcbiAgaWYgKCFpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKGRpc3RGb2xkZXIsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkhvdFJlbG9hZCksICcnLCAndXRmLTgnKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZGlzdEZpbGVOYW1lcykge1xuICAgIGNvbnN0IGxvY2FsRmlsZSA9IGVuc3VyZU5vbk51bGxhYmxlKHJlc29sdmVQYXRoRnJvbVJvb3QoeyBwYXRoOiBmaWxlTmFtZSB9KSwgYENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGxvY2FsIGZpbGUgZm9yICR7ZmlsZU5hbWV9YCk7XG4gICAgY29uc3QgZGlzdEZpbGUgPSBqb2luKGRpc3RGb2xkZXIsIGZpbGVOYW1lKTtcblxuICAgIGlmIChleGlzdHNTeW5jKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGNwKGxvY2FsRmlsZSwgZGlzdEZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRpc3RQYXRoID0gam9pbihkaXN0Rm9sZGVyLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYWluSnMpO1xuICBjb25zdCBjc3NQYXRoID0gam9pbihkaXN0Rm9sZGVyLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TdHlsZXNDc3MpO1xuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gIGNvbnN0IHBsdWdpbk5hbWUgPSBwYWNrYWdlSnNvbi5uYW1lID8/ICcodW5rbm93biknO1xuXG4gIGNvbnN0IGJ1aWxkT3B0aW9uczogRXNidWlsZE9wdGlvbnMgPSB7XG4gICAgYmFubmVyOiB7XG4gICAgICBqczogYmFubmVyXG4gICAgfSxcbiAgICBidW5kbGU6IHRydWUsXG4gICAgLypcbiAgICAgKiBgY29uZGl0aW9uc2AsIGBtYWluRmllbGRzYCBhbmQgYHBsYXRmb3JtYCBhcmUgb25lIGRlY2lzaW9uLCByZWFkIHRvZ2V0aGVyLlxuICAgICAqXG4gICAgICogVGhlIGJ1bmRsZSBpcyBPTkUgYG1haW4uanNgIGxvYWRlZCBib3RoIGluIEVsZWN0cm9uIG9uIGRlc2t0b3AgYW5kIGluIGEgYmFyZSBXZWJWaWV3IG9uIGEgcGhvbmUsIHNvIGFcbiAgICAgKiBkZXBlbmRlbmN5IG11c3QgcmVzb2x2ZSB0byBpdHMgYnJvd3NlciBidWlsZC4gZXNidWlsZCBBRERTIGEgY29uZGl0aW9uIG9mIGl0cyBvd24gZm9yIGBwbGF0Zm9ybTogJ25vZGUnYFxuICAgICAqIChgbm9kZWApIGFuZCBmb3IgYHBsYXRmb3JtOiAnYnJvd3NlcidgIChgYnJvd3NlcmApLCBhbmQgYSBgY29uZGl0aW9uc2AgbGlzdCBjYW5ub3QgdGFrZSBvbmUgYXdheS4gV2l0aFxuICAgICAqIGBwbGF0Zm9ybTogJ25vZGUnYCB0aGUgZWZmZWN0aXZlIHNldCB3YXMgYHsgYnJvd3Nlciwgbm9kZSwgaW1wb3J0L3JlcXVpcmUsIGRlZmF1bHQgfWAsIHNvIGEgcGFja2FnZSB3aG9zZVxuICAgICAqIGBleHBvcnRzYCBtYXAgbGlzdHMgYG5vZGVgIGJlZm9yZSBgYnJvd3NlcmAgc2hpcHBlZCBpdHMgTm9kZSBidWlsZCB0byBwaG9uZXMgXHUyMDE0IGBmZmxhdGVgJ3MgYGVzbS9pbmRleC5tanNgXG4gICAgICogb3BlbnMgd2l0aCBgY3JlYXRlUmVxdWlyZWAgZnJvbSBgbW9kdWxlYCwgd2hpY2ggdGhyZXcgYXQgbG9hZCBvbiBtb2JpbGUuXG4gICAgICpcbiAgICAgKiBgcGxhdGZvcm06ICduZXV0cmFsJ2AgYWRkcyBubyBwbGF0Zm9ybSBjb25kaXRpb24sIGxlYXZpbmcgZXhhY3RseSBgYnJvd3NlcmAgZnJvbSB0aGUgbGlzdCBiZWxvdy4gSXQgaXNcbiAgICAgKiBjaG9zZW4gb3ZlciBgcGxhdGZvcm06ICdicm93c2VyJ2AgYmVjYXVzZSB0aGF0IG9uZSBhbHNvIGNoYW5nZXMgd2hhdCB0aGlzIGJ1bmRsZSBoYXMgYWx3YXlzIHJlbGllZCBvbjpcbiAgICAgKiBpdCBkZWZpbmVzIGBwcm9jZXNzLmVudi5OT0RFX0VOVmAgYW5kIGFwcGxpZXMgYSBwYWNrYWdlJ3MgYGJyb3dzZXJgIGZpZWxkIHJlbWFwcGluZyAod2hpY2ggY2FuIHN0dWIgYVxuICAgICAqIE5vZGUgYnVpbHRpbiB0byBhbiBlbXB0eSBvYmplY3QsIGJyZWFraW5nIGEgZGVwZW5kZW5jeSdzIGRlc2t0b3Atb25seSBwYXRoKS4gYG1haW5GaWVsZHNgIHJlc3RhdGVzIHRoZVxuICAgICAqIGBub2RlYCBwbGF0Zm9ybSdzIGRlZmF1bHQsIGJlY2F1c2UgYG5ldXRyYWxgIGhhcyBub25lIG9mIGl0cyBvd24uIE5vZGUgYnVpbHRpbnMgYXJlIG1hcmtlZCBleHRlcm5hbCBieSBuYW1lXG4gICAgICogYmVsb3cgXHUyMDE0IGBub2RlOipgIGluY2x1ZGVkLCBzaW5jZSBvbmx5IGBwbGF0Zm9ybTogJ25vZGUnYCBtYXJrcyB0aGF0IHByZWZpeCBleHRlcm5hbCBieSBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBNZWFzdXJlZCBvdmVyIDMxIHBsdWdpbnMgYnVpbHQgb24gdGhpcyBsaWJyYXJ5LCAyMDI2LTA5LTIzLCBhZ2FpbnN0IGBwbGF0Zm9ybTogJ25vZGUnYDogdGhlIG9ubHkgbW9kdWxlc1xuICAgICAqIHRoYXQgY2hhbmdlIGFyZSBgdmZpbGVgLCBgdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzYCBhbmQgYHlhbWxgIChlYWNoIG5vdyB0YWtlcyBpdHMgYnJvd3NlciBidWlsZCBpbnN0ZWFkXG4gICAgICogb2Ygb25lIGltcG9ydGluZyBgbm9kZTpwcm9jZXNzYCAvIGBub2RlOnBhdGhgIC8gYG5vZGU6dXJsYCkgYW5kIGBlc20tZW52YCdzIE5vZGUgZmxhZywgd2hpY2ggbm93IHJlYWRzXG4gICAgICogZmFsc2UuIEV2ZXJ5dGhpbmcgZWxzZSBpbiBldmVyeSBidW5kbGUgaXMgaWRlbnRpY2FsIHVwIHRvIGlkZW50aWZpZXIgcmVuYW1pbmcuXG4gICAgICovXG4gICAgY29uZGl0aW9uczogWydicm93c2VyJ10sXG4gICAgZW50cnlQb2ludHM6IFtcbiAgICAgIGVuc3VyZU5vbk51bGxhYmxlKFxuICAgICAgICByZXNvbHZlUGF0aEZyb21Sb290KHsgcGF0aDogam9pbihPYnNpZGlhblBsdWdpblJlcG9QYXRocy5TcmMsIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1haW5UcykgfSksXG4gICAgICAgICdDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHBsdWdpbidcbiAgICAgIClcbiAgICBdLFxuICAgIGV4dGVybmFsOiBbXG4gICAgICAnb2JzaWRpYW4nLFxuICAgICAgJ2VsZWN0cm9uJyxcbiAgICAgICdAY29kZW1pcnJvci9hdXRvY29tcGxldGUnLFxuICAgICAgJ0Bjb2RlbWlycm9yL2NvbGxhYicsXG4gICAgICAnQGNvZGVtaXJyb3IvY29tbWFuZHMnLFxuICAgICAgJ0Bjb2RlbWlycm9yL2xhbmd1YWdlJyxcbiAgICAgICdAY29kZW1pcnJvci9saW50JyxcbiAgICAgICdAY29kZW1pcnJvci9zZWFyY2gnLFxuICAgICAgJ0Bjb2RlbWlycm9yL3N0YXRlJyxcbiAgICAgICdAY29kZW1pcnJvci92aWV3JyxcbiAgICAgICdAbGV6ZXIvY29tbW9uJyxcbiAgICAgICdAbGV6ZXIvaGlnaGxpZ2h0JyxcbiAgICAgICdAbGV6ZXIvbHInLFxuICAgICAgJ2VzYnVpbGQnLFxuICAgICAgJ2VzbGludCcsXG4gICAgICAuLi5idWlsdGluTW9kdWxlcyxcbiAgICAgICdub2RlOionXG4gICAgXSxcbiAgICBmb3JtYXQ6ICdjanMnLFxuICAgIGtlZXBOYW1lczogdHJ1ZSxcbiAgICBsb2dMZXZlbDogJ2luZm8nLFxuICAgIG1haW5GaWVsZHM6IFsnbWFpbicsICdtb2R1bGUnXSxcbiAgICBtaW5pZnk6IGlzUHJvZHVjdGlvbkJ1aWxkLFxuICAgIG91dGZpbGU6IGRpc3RQYXRoLFxuICAgIHBsYXRmb3JtOiAnbmV1dHJhbCcsXG4gICAgcGx1Z2luczogW1xuICAgICAgY3VzdG9tRXNidWlsZE9wdGlvbnNQbHVnaW4ocGFyYW1zLmN1c3RvbWl6ZUVzYnVpbGRPcHRpb25zPy5iaW5kKHBhcmFtcykpLFxuICAgICAgc3ZlbHRlV3JhcHBlclBsdWdpbihpc1Byb2R1Y3Rpb25CdWlsZCksXG4gICAgICBzYXNzUGx1Z2luKHtcbiAgICAgICAgc291cmNlTWFwOiAhaXNQcm9kdWN0aW9uQnVpbGRcbiAgICAgIH0pLFxuICAgICAgcmVuYW1lQ3NzUGx1Z2luKGRpc3RGb2xkZXIpLFxuICAgICAgcHJlcHJvY2Vzc1BsdWdpbigpLFxuICAgICAgZml4RXNtUGx1Z2luKCksXG4gICAgICBmaXhTb3VyY2VNYXBzUGx1Z2luKHsgZGlzdFBhdGhzOiBbZGlzdFBhdGgsIGNzc1BhdGhdLCBpc1Byb2R1Y3Rpb25CdWlsZCwgcGx1Z2luTmFtZSB9KSxcbiAgICAgIC4uLnBhcmFtcy5jdXN0b21Fc2J1aWxkUGx1Z2lucyA/PyBbXSxcbiAgICAgIGNvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpbih7IGRpc3RGb2xkZXIsIGlzUHJvZHVjdGlvbkJ1aWxkLCBvYnNpZGlhbkNvbmZpZ0ZvbGRlciwgcGx1Z2luTmFtZSB9KVxuICAgIF0sXG4gICAgc291cmNlbWFwOiAhaXNQcm9kdWN0aW9uQnVpbGQgJiYgJ2lubGluZScsXG4gICAgdGFyZ2V0OiAnRVMyMDIyJyxcbiAgICB0cmVlU2hha2luZzogdHJ1ZVxuICB9O1xuXG4gIGNvbnN0IGJ1aWxkQ29udGV4dCA9IGF3YWl0IGNvbnRleHQoYnVpbGRPcHRpb25zKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW52b2tlRXNidWlsZChidWlsZENvbnRleHQsIGlzUHJvZHVjdGlvbkJ1aWxkKTtcbiAgaWYgKCFpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgIHdhdGNoTm9kZU1vZHVsZXNBbmRSZXN0YXJ0KHBhcmFtcywgYnVpbGRDb250ZXh0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgT2JzaWRpYW4gcGx1Z2luIGluIGRldmVsb3BtZW50IG1vZGUgdXNpbmcgZXNidWlsZCB3aXRoIHdhdGNoLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGVzYnVpbGQncyBvd24gc291cmNlLWdyYXBoIHdhdGNoLCB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQgYWxzbyB3YXRjaGVzIHRoZSBwbHVnaW4nc1xuICogYG5vZGVfbW9kdWxlc2AgZm9sZGVyIGFuZCByZXN0YXJ0cyB0aGUgd2hvbGUgYnVpbGQgKGluY2x1ZGluZyB0aGUgdHlwZS1jaGVjaykgd2hlbiBpdCBjaGFuZ2VzLCBzbyBhXG4gKiBkZXBlbmRlbmN5IHJlaW5zdGFsbCBvciByZWJ1aWxkIGlzIHBpY2tlZCB1cC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGJ1aWxkIHBhcmFtZXRlcnMgKG1vZGUgaXMgc2V0IHRvIERldmVsb3BtZW50IGF1dG9tYXRpY2FsbHkpLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBpbmRpY2F0aW5nIHRoZSBidWlsZCByZXN1bHQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCAtLSBJbnRlbnRpb25hbGx5IHNoYXJlcyBCdWlsZE9wdGlvbnMgd2l0aCBidWlsZCgpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldihvcHRpb25zPzogQnVpbGRPcHRpb25zKTogUHJvbWlzZTxDbGlUYXNrUmVzdWx0PiB7XG4gIHJldHVybiBhd2FpdCBidWlsZE9ic2lkaWFuUGx1Z2luKHsgLi4ub3B0aW9ucywgbW9kZTogQnVpbGRNb2RlLkRldmVsb3BtZW50IH0pO1xufVxuXG4vKipcbiAqIEludm9rZXMgdGhlIGJ1aWxkIHByb2Nlc3Mgd2l0aCB0aGUgcHJvdmlkZWQgYnVpbGQgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gYnVpbGRDb250ZXh0IC0gVGhlIGJ1aWxkIGNvbnRleHQgZ2VuZXJhdGVkIGJ5IGVzYnVpbGQuXG4gKiBAcGFyYW0gaXNQcm9kdWN0aW9uQnVpbGQgLSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBidWlsZCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IGluZGljYXRpbmcgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgYnVpbGQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnZva2VFc2J1aWxkKGJ1aWxkQ29udGV4dDogQnVpbGRDb250ZXh0LCBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbik6IFByb21pc2U8Q2xpVGFza1Jlc3VsdD4ge1xuICBpZiAoaXNQcm9kdWN0aW9uQnVpbGQpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZENvbnRleHQucmVidWlsZCgpO1xuICAgIGNvbnN0IGlzU3VjY2VzcyA9IHJlc3VsdC5lcnJvcnMubGVuZ3RoID09PSAwICYmIHJlc3VsdC53YXJuaW5ncy5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIENsaVRhc2tSZXN1bHQuU3VjY2Vzcyhpc1N1Y2Nlc3MpO1xuICB9XG4gIGF3YWl0IGJ1aWxkQ29udGV4dC53YXRjaCgpO1xuICByZXR1cm4gQ2xpVGFza1Jlc3VsdC5Eb05vdEV4aXQoKTtcbn1cblxuLyoqXG4gKiBXYXRjaGVzIHRoZSBwbHVnaW4ncyBgbm9kZV9tb2R1bGVzYCBmb2xkZXIgYW5kIHJlc3RhcnRzIHRoZSBkZXZlbG9wbWVudCBidWlsZCB3aGVuIGl0IGNoYW5nZXMuXG4gKlxuICogVGhlIGVzYnVpbGQgd2F0Y2hlciBvbmx5IHRyYWNrcyBmaWxlcyBpbiBpdHMgYnVpbGQgZ3JhcGggYW5kIG9ubHkgZXZlciByZS1idW5kbGVzIFx1MjAxNCBpdCBuZXZlclxuICogcmUtcnVucyB0aGUgYGJ1aWxkOmNvbXBpbGVgIHR5cGUtY2hlY2ssIGFuZCBpdCBpZ25vcmVzIGBub2RlX21vZHVsZXNgIGNoYW5nZXMgb3V0c2lkZSB0aGUgZ3JhcGhcbiAqIChhIHJlaW5zdGFsbCwgb3IgYSBkZXBlbmRlbmN5IGZpbGUgbm90IGN1cnJlbnRseSBpbXBvcnRlZCkuIE9uIGFueSAoZGVib3VuY2VkKSBjaGFuZ2UgYW55d2hlcmUgaW5cbiAqIHRoZSBgbm9kZV9tb2R1bGVzYCB0cmVlLCB0aGUgY3VycmVudCBidWlsZCBjb250ZXh0IGlzIGRpc3Bvc2VkIGFuZCB0aGUgd2hvbGUgZGV2ZWxvcG1lbnQgYnVpbGQgaXNcbiAqIHJlc3RhcnRlZCwgcmUtcnVubmluZyB0aGUgZnVsbCBwaXBlbGluZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdGhlIGJ1aWxkIHdhcyBzdGFydGVkIHdpdGgsIHVzZWQgdG8gcmVzdGFydCBpdC5cbiAqIEBwYXJhbSBidWlsZENvbnRleHQgLSBUaGUgZXNidWlsZCBjb250ZXh0IHRvIGRpc3Bvc2UgYmVmb3JlIHJlc3RhcnRpbmcuXG4gKi9cbmZ1bmN0aW9uIHdhdGNoTm9kZU1vZHVsZXNBbmRSZXN0YXJ0KHBhcmFtczogQnVpbGRPYnNpZGlhblBsdWdpblBhcmFtcywgYnVpbGRDb250ZXh0OiBCdWlsZENvbnRleHQpOiB2b2lkIHtcbiAgY29uc3Qgbm9kZU1vZHVsZXNQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdCh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk5vZGVNb2R1bGVzIH0pO1xuICBpZiAoIW5vZGVNb2R1bGVzUGF0aCB8fCAhZXhpc3RzU3luYyhub2RlTW9kdWxlc1BhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHJlc3RhcnRUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgd2F0Y2hlciA9IHdhdGNoKG5vZGVNb2R1bGVzUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSwgKCkgPT4ge1xuICAgIGlmIChyZXN0YXJ0VGltZW91dCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLXdpbmRvdy10aW1lcnMgLS0gTm9kZSBidWlsZC10b29sIGNvbnRleHQ7IGB3aW5kb3dgIGlzIG5vdCBhdmFpbGFibGUuXG4gICAgICBjbGVhclRpbWVvdXQocmVzdGFydFRpbWVvdXQpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9wcmVmZXItd2luZG93LXRpbWVycyAtLSBOb2RlIGJ1aWxkLXRvb2wgY29udGV4dDsgYHdpbmRvd2AgaXMgbm90IGF2YWlsYWJsZS5cbiAgICByZXN0YXJ0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkocmVzdGFydCk7XG4gICAgfSwgTk9ERV9NT0RVTEVTX1JFU1RBUlRfREVCT1VOQ0VfSU5fTUlMTElTRUNPTkRTKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLndhcm4oJ0RldGVjdGVkIGNoYW5nZXMgaW4gbm9kZV9tb2R1bGVzLiBSZXN0YXJ0aW5nIHRoZSBidWlsZC4uLicpO1xuICAgIHdhdGNoZXIuY2xvc2UoKTtcbiAgICBhd2FpdCBidWlsZENvbnRleHQuZGlzcG9zZSgpO1xuICAgIGF3YWl0IGJ1aWxkT2JzaWRpYW5QbHVnaW4ocGFyYW1zKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsU0FBUyxrQ0FBa0M7QUFDM0MsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsWUFBWTtBQUNyQixTQUFTLHlCQUF5QjtB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
@@ -0,0 +1,30 @@
1
+ /// <reference path="../../index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * This module defines a custom esbuild plugin that preprocesses JavaScript and TypeScript files for Obsidian.
6
+ *
7
+ * @remarks
8
+ * We cannot use `.` instead of `(dot)` in the above description because the file itself is preprocessed with the same rule.
9
+ *
10
+ * It is the generic `@mnaoumov/typescript-dev-toolkit` preprocess plugin plus two Obsidian-only parts: a CommonJS
11
+ * `import(dot)meta(dot)url` fallback that reads `activeWindow`, and a `require` patch that resolves Obsidian's
12
+ * built-in modules and stubs the rest on mobile. Both are serialized into the emitted bundle with `String(fn)`, so
13
+ * each is self-contained: it reads only globals and what it declares itself. Calling a function imported from
14
+ * another module would compile to `(0, import_module.fn)(…)` in the CommonJS build of this package, naming a binding
15
+ * the emitted bundle does not have.
16
+ */
17
+ import type { Plugin } from 'esbuild';
18
+ /**
19
+ * Creates an esbuild plugin that preprocesses JavaScript and TypeScript files for an Obsidian plugin.
20
+ *
21
+ * This plugin performs the following tasks:
22
+ * - Everything the generic preprocess plugin does (the `process` and `Symbol.dispose` shims, the
23
+ * `sourceMappingURL` fix, and the CommonJS `import(dot)meta(dot)url` replacement).
24
+ * - Falls back to `activeWindow.location.href` for `import(dot)meta(dot)url` where there is no `__filename`.
25
+ * - In a CommonJS build, patches `require()` so Obsidian's built-in modules resolve and the rest degrade on mobile.
26
+ *
27
+ * @param isEsm - Whether the build is for an ESM format.
28
+ * @returns An esbuild `Plugin` object that handles the preprocessing.
29
+ */
30
+ export declare function preprocessPlugin(isEsm?: boolean): Plugin;