@mnaoumov/obsidian-dev-toolkit 0.0.0-stage → 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 +8 -2
  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 +240 -4
  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,92 @@
1
+ /// <reference path="./index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Releases an Obsidian plugin: the generic release from `@mnaoumov/typescript-dev-toolkit/version`, plus what only a
6
+ * plugin has — `manifest.json` (and `manifest-beta.json` for a pre-release) and `versions.json` bumped with the
7
+ * plugin's `minAppVersion`, the updated manifest copied into `dist/build`, the demo vault archived as a release
8
+ * asset, and the files in `dist/build` attached to the GitHub release instead of an `npm pack` tarball.
9
+ */
10
+ import type { ParsedVersionArguments as GenericParsedVersionArguments, UpdateVersionOptions as GenericUpdateVersionOptions } from '@mnaoumov/typescript-dev-toolkit/version';
11
+ /**
12
+ * Type representing the structure of Obsidian's `desktop-releases.json` feed.
13
+ *
14
+ * This is the feed the desktop app itself updates from, so it is the only source that states a version
15
+ * desktop users can actually run.
16
+ */
17
+ export interface DesktopReleasesJson {
18
+ /**
19
+ * The latest Obsidian version available for desktop.
20
+ */
21
+ latestVersion: string;
22
+ }
23
+ /**
24
+ * Type representing the manifest file format for Obsidian plugins.
25
+ */
26
+ export interface Manifest {
27
+ /**
28
+ * A minimum Obsidian version required for the plugin.
29
+ */
30
+ minAppVersion: string;
31
+ /**
32
+ * A version of the plugin.
33
+ */
34
+ version: string;
35
+ }
36
+ /**
37
+ * The result of parsing the command-line arguments for a plugin release.
38
+ */
39
+ export interface ParsedVersionArguments extends GenericParsedVersionArguments {
40
+ /**
41
+ * The {@link UpdateVersionOptions} parsed from the flags.
42
+ */
43
+ readonly options: UpdateVersionOptions;
44
+ }
45
+ /**
46
+ * Options for {@link updateVersion}: the generic release options plus the plugin's own.
47
+ */
48
+ export interface UpdateVersionOptions extends GenericUpdateVersionOptions {
49
+ /**
50
+ * An explicit `minAppVersion` to write into the plugin's `manifest.json` and its new `versions.json`
51
+ * entry. When set, it is used verbatim and the latest Obsidian desktop version is not fetched at all.
52
+ *
53
+ * Set this when the plugin has a known minimum it actually requires, rather than tracking whatever
54
+ * Obsidian released most recently. Only applies to non-pre-release versions (a pre-release copies the
55
+ * existing `manifest.json` and never writes `minAppVersion`).
56
+ *
57
+ * @default the latest Obsidian desktop version
58
+ */
59
+ readonly minAppVersion?: string | undefined;
60
+ /**
61
+ * Whether to archive the plugin's demo vault (`demo-vault/` in the repo root) as a release artifact. Ignored
62
+ * when the repo has no `demo-vault/` folder.
63
+ *
64
+ * @default `true`
65
+ */
66
+ readonly shouldArchiveDemoVault?: boolean;
67
+ }
68
+ /**
69
+ * Copies the updated manifest file to the distribution build folder.
70
+ *
71
+ * @returns A {@link Promise} that resolves when the copy operation is complete.
72
+ */
73
+ export declare function copyUpdatedManifest(): Promise<void>;
74
+ /**
75
+ * Parses the command-line arguments for a plugin release: every flag the generic `parseVersionArguments`
76
+ * recognizes, plus two of the plugin's own:
77
+ * - `--min-app-version=<x.y.z>` — write this `minAppVersion` into the plugin's `manifest.json` and its new
78
+ * `versions.json` entry instead of tracking the latest Obsidian desktop version.
79
+ * - `--no-demo-vault` — skip archiving the plugin's demo vault (`demo-vault/`) as a release artifact.
80
+ *
81
+ * @param $arguments - The command-line arguments to parse (typically `process.argv.slice(2)`).
82
+ * @returns The {@link ParsedVersionArguments} containing the version update type and the options.
83
+ */
84
+ export declare function parseVersionArguments($arguments: string[]): ParsedVersionArguments;
85
+ /**
86
+ * Releases the plugin. See the `@file` overview for what it adds to the generic release.
87
+ *
88
+ * @param versionUpdateType - The type of version update to perform (major, minor, patch, premajor, preminor, prepatch, prerelease, or x.y.z[-suffix]).
89
+ * @param options - The {@link UpdateVersionOptions} controlling the release behavior.
90
+ * @returns A {@link Promise} that resolves when the release is complete.
91
+ */
92
+ export declare function updateVersion(versionUpdateType?: string, options?: UpdateVersionOptions): Promise<void>;
@@ -0,0 +1,168 @@
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 initEsm() {
45
+ ensureDisposeSymbols();
46
+ ensureBrowserProcess();
47
+ })();
48
+ })();
49
+
50
+ import { readdirPosix } from "@mnaoumov/typescript-dev-toolkit/fs";
51
+ import { editJson } from "@mnaoumov/typescript-dev-toolkit/json";
52
+ import { resolvePathFromRootSafe } from "@mnaoumov/typescript-dev-toolkit/root";
53
+ import {
54
+ isPreRelease,
55
+ toUpdateVersionOptions,
56
+ updateVersion as updateVersionGeneric,
57
+ VERSION_ARGUMENT_OPTIONS
58
+ } from "@mnaoumov/typescript-dev-toolkit/version";
59
+ import { join } from "@mnaoumov/typescript-lib/path";
60
+ import { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
61
+ import { existsSync } from "node:fs";
62
+ import {
63
+ cp,
64
+ rm
65
+ } from "node:fs/promises";
66
+ import { parseArgs } from "node:util";
67
+ import { archivePluginDemoVault } from "./demo-vault.mjs";
68
+ import { ObsidianPluginRepoPaths } from "./obsidian-plugin-repo-paths.mjs";
69
+ const DESKTOP_RELEASES_JSON_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/desktop-releases.json";
70
+ async function copyUpdatedManifest() {
71
+ await cp(
72
+ resolvePathFromRootSafe({ path: ObsidianPluginRepoPaths.ManifestJson }),
73
+ resolvePathFromRootSafe({ path: join(ObsidianPluginRepoPaths.DistBuild, ObsidianPluginRepoPaths.ManifestJson) }),
74
+ { force: true }
75
+ );
76
+ }
77
+ function parseVersionArguments($arguments) {
78
+ const { positionals, values } = parseArgs({
79
+ allowPositionals: true,
80
+ // eslint-disable-next-line unicorn/name-replacements -- `args` is the option name Node's `parseArgs` reads.
81
+ args: $arguments,
82
+ options: {
83
+ ...VERSION_ARGUMENT_OPTIONS,
84
+ "min-app-version": { type: "string" },
85
+ "no-demo-vault": { type: "boolean" }
86
+ }
87
+ });
88
+ return {
89
+ options: {
90
+ ...toUpdateVersionOptions(values),
91
+ minAppVersion: values["min-app-version"],
92
+ shouldArchiveDemoVault: !(values["no-demo-vault"] ?? false)
93
+ },
94
+ versionUpdateType: positionals[0]
95
+ };
96
+ }
97
+ async function updateVersion(versionUpdateType, options = {}) {
98
+ const {
99
+ minAppVersion,
100
+ prepareGitHubRelease,
101
+ shouldArchiveDemoVault = true,
102
+ ...genericOptions
103
+ } = options;
104
+ await updateVersionGeneric(versionUpdateType, {
105
+ ...genericOptions,
106
+ getReleaseAssetPaths: getPluginReleaseAssetPaths,
107
+ async prepareGitHubRelease(newVersion) {
108
+ await prepareGitHubRelease?.(newVersion);
109
+ if (shouldArchiveDemoVault) {
110
+ await archivePluginDemoVault();
111
+ }
112
+ },
113
+ async updateVersionInExtraFiles(newVersion) {
114
+ await updateVersionInFilesForPlugin(newVersion, minAppVersion);
115
+ }
116
+ });
117
+ }
118
+ async function getLatestObsidianVersion() {
119
+ const response = await fetch(DESKTOP_RELEASES_JSON_URL);
120
+ const desktopReleasesJson = await response.json();
121
+ return ensureNonNullable(desktopReleasesJson.latestVersion, "Could not find the latest desktop Obsidian version");
122
+ }
123
+ async function getPluginReleaseAssetPaths() {
124
+ const buildFolder = resolvePathFromRootSafe({ path: ObsidianPluginRepoPaths.DistBuild });
125
+ const fileNames = await readdirPosix(buildFolder);
126
+ return fileNames.map((fileName) => join(buildFolder, fileName));
127
+ }
128
+ async function updateVersionInFilesForPlugin(newVersion, minAppVersion) {
129
+ const manifestBetaJsonPath = resolvePathFromRootSafe({ path: ObsidianPluginRepoPaths.ManifestBetaJson });
130
+ if (isPreRelease(newVersion)) {
131
+ await cp(
132
+ resolvePathFromRootSafe({ path: ObsidianPluginRepoPaths.ManifestJson }),
133
+ manifestBetaJsonPath,
134
+ { force: true }
135
+ );
136
+ await editJson({
137
+ editFunction: (manifest) => {
138
+ manifest.version = newVersion;
139
+ },
140
+ path: ObsidianPluginRepoPaths.ManifestBetaJson
141
+ });
142
+ } else {
143
+ const resolvedMinAppVersion = minAppVersion ?? await getLatestObsidianVersion();
144
+ await editJson({
145
+ editFunction: (manifest) => {
146
+ manifest.minAppVersion = resolvedMinAppVersion;
147
+ manifest.version = newVersion;
148
+ },
149
+ path: ObsidianPluginRepoPaths.ManifestJson
150
+ });
151
+ await editJson({
152
+ editFunction: (versions) => {
153
+ versions[newVersion] = resolvedMinAppVersion;
154
+ },
155
+ path: ObsidianPluginRepoPaths.VersionsJson
156
+ });
157
+ if (existsSync(manifestBetaJsonPath)) {
158
+ await rm(manifestBetaJsonPath);
159
+ }
160
+ }
161
+ await copyUpdatedManifest();
162
+ }
163
+ export {
164
+ copyUpdatedManifest,
165
+ parseVersionArguments,
166
+ updateVersion
167
+ };
168
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZlcnNpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZWxlYXNlcyBhbiBPYnNpZGlhbiBwbHVnaW46IHRoZSBnZW5lcmljIHJlbGVhc2UgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvdmVyc2lvbmAsIHBsdXMgd2hhdCBvbmx5IGFcbiAqIHBsdWdpbiBoYXMgXHUyMDE0IGBtYW5pZmVzdC5qc29uYCAoYW5kIGBtYW5pZmVzdC1iZXRhLmpzb25gIGZvciBhIHByZS1yZWxlYXNlKSBhbmQgYHZlcnNpb25zLmpzb25gIGJ1bXBlZCB3aXRoIHRoZVxuICogcGx1Z2luJ3MgYG1pbkFwcFZlcnNpb25gLCB0aGUgdXBkYXRlZCBtYW5pZmVzdCBjb3BpZWQgaW50byBgZGlzdC9idWlsZGAsIHRoZSBkZW1vIHZhdWx0IGFyY2hpdmVkIGFzIGEgcmVsZWFzZVxuICogYXNzZXQsIGFuZCB0aGUgZmlsZXMgaW4gYGRpc3QvYnVpbGRgIGF0dGFjaGVkIHRvIHRoZSBHaXRIdWIgcmVsZWFzZSBpbnN0ZWFkIG9mIGFuIGBucG0gcGFja2AgdGFyYmFsbC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlZFZlcnNpb25Bcmd1bWVudHMgYXMgR2VuZXJpY1BhcnNlZFZlcnNpb25Bcmd1bWVudHMsXG4gIFVwZGF0ZVZlcnNpb25PcHRpb25zIGFzIEdlbmVyaWNVcGRhdGVWZXJzaW9uT3B0aW9uc1xufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC92ZXJzaW9uJztcblxuaW1wb3J0IHsgcmVhZGRpclBvc2l4IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvZnMnO1xuaW1wb3J0IHsgZWRpdEpzb24gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9qc29uJztcbmltcG9ydCB7IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcm9vdCc7XG5pbXBvcnQge1xuICBpc1ByZVJlbGVhc2UsXG4gIHRvVXBkYXRlVmVyc2lvbk9wdGlvbnMsXG4gIHVwZGF0ZVZlcnNpb24gYXMgdXBkYXRlVmVyc2lvbkdlbmVyaWMsXG4gIFZFUlNJT05fQVJHVU1FTlRfT1BUSU9OU1xufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC92ZXJzaW9uJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgcm1cbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBwYXJzZUFyZ3MgfSBmcm9tICdub2RlOnV0aWwnO1xuXG5pbXBvcnQgeyBhcmNoaXZlUGx1Z2luRGVtb1ZhdWx0IH0gZnJvbSAnLi9kZW1vLXZhdWx0LnRzJztcbmltcG9ydCB7IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIH0gZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5cbi8qKlxuICogVHlwZSByZXByZXNlbnRpbmcgdGhlIHN0cnVjdHVyZSBvZiBPYnNpZGlhbidzIGBkZXNrdG9wLXJlbGVhc2VzLmpzb25gIGZlZWQuXG4gKlxuICogVGhpcyBpcyB0aGUgZmVlZCB0aGUgZGVza3RvcCBhcHAgaXRzZWxmIHVwZGF0ZXMgZnJvbSwgc28gaXQgaXMgdGhlIG9ubHkgc291cmNlIHRoYXQgc3RhdGVzIGEgdmVyc2lvblxuICogZGVza3RvcCB1c2VycyBjYW4gYWN0dWFsbHkgcnVuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlc2t0b3BSZWxlYXNlc0pzb24ge1xuICAvKipcbiAgICogVGhlIGxhdGVzdCBPYnNpZGlhbiB2ZXJzaW9uIGF2YWlsYWJsZSBmb3IgZGVza3RvcC5cbiAgICovXG4gIGxhdGVzdFZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBUeXBlIHJlcHJlc2VudGluZyB0aGUgbWFuaWZlc3QgZmlsZSBmb3JtYXQgZm9yIE9ic2lkaWFuIHBsdWdpbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuaWZlc3Qge1xuICAvKipcbiAgICogQSBtaW5pbXVtIE9ic2lkaWFuIHZlcnNpb24gcmVxdWlyZWQgZm9yIHRoZSBwbHVnaW4uXG4gICAqL1xuICBtaW5BcHBWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgdmVyc2lvbiBvZiB0aGUgcGx1Z2luLlxuICAgKi9cbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZm9yIGEgcGx1Z2luIHJlbGVhc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkVmVyc2lvbkFyZ3VtZW50cyBleHRlbmRzIEdlbmVyaWNQYXJzZWRWZXJzaW9uQXJndW1lbnRzIHtcbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgVXBkYXRlVmVyc2lvbk9wdGlvbnN9IHBhcnNlZCBmcm9tIHRoZSBmbGFncy5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IFVwZGF0ZVZlcnNpb25PcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB1cGRhdGVWZXJzaW9ufTogdGhlIGdlbmVyaWMgcmVsZWFzZSBvcHRpb25zIHBsdXMgdGhlIHBsdWdpbidzIG93bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVWZXJzaW9uT3B0aW9ucyBleHRlbmRzIEdlbmVyaWNVcGRhdGVWZXJzaW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBleHBsaWNpdCBgbWluQXBwVmVyc2lvbmAgdG8gd3JpdGUgaW50byB0aGUgcGx1Z2luJ3MgYG1hbmlmZXN0Lmpzb25gIGFuZCBpdHMgbmV3IGB2ZXJzaW9ucy5qc29uYFxuICAgKiBlbnRyeS4gV2hlbiBzZXQsIGl0IGlzIHVzZWQgdmVyYmF0aW0gYW5kIHRoZSBsYXRlc3QgT2JzaWRpYW4gZGVza3RvcCB2ZXJzaW9uIGlzIG5vdCBmZXRjaGVkIGF0IGFsbC5cbiAgICpcbiAgICogU2V0IHRoaXMgd2hlbiB0aGUgcGx1Z2luIGhhcyBhIGtub3duIG1pbmltdW0gaXQgYWN0dWFsbHkgcmVxdWlyZXMsIHJhdGhlciB0aGFuIHRyYWNraW5nIHdoYXRldmVyXG4gICAqIE9ic2lkaWFuIHJlbGVhc2VkIG1vc3QgcmVjZW50bHkuIE9ubHkgYXBwbGllcyB0byBub24tcHJlLXJlbGVhc2UgdmVyc2lvbnMgKGEgcHJlLXJlbGVhc2UgY29waWVzIHRoZVxuICAgKiBleGlzdGluZyBgbWFuaWZlc3QuanNvbmAgYW5kIG5ldmVyIHdyaXRlcyBgbWluQXBwVmVyc2lvbmApLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgbGF0ZXN0IE9ic2lkaWFuIGRlc2t0b3AgdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgbWluQXBwVmVyc2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhcmNoaXZlIHRoZSBwbHVnaW4ncyBkZW1vIHZhdWx0IChgZGVtby12YXVsdC9gIGluIHRoZSByZXBvIHJvb3QpIGFzIGEgcmVsZWFzZSBhcnRpZmFjdC4gSWdub3JlZFxuICAgKiB3aGVuIHRoZSByZXBvIGhhcyBubyBgZGVtby12YXVsdC9gIGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRBcmNoaXZlRGVtb1ZhdWx0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZmVlZCB0aGUgT2JzaWRpYW4gZGVza3RvcCBhcHAgdXBkYXRlcyBmcm9tLlxuICpcbiAqIERlbGliZXJhdGVseSBOT1QgdGhlIEdpdEh1YiBgcmVsZWFzZXMvbGF0ZXN0YCBBUEk6IHRoYXQgZW5kcG9pbnQgcmV0dXJucyB0aGUgbmV3ZXN0IHJlbGVhc2Ugb2YgYW55IGtpbmRcbiAqIGluIGBvYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzYCwgaW5jbHVkaW5nIG9uZSB3aG9zZSBvbmx5IGFzc2V0IGlzIHRoZSBBbmRyb2lkIEFQSywgd2hpY2ggbm8gZGVza3RvcFxuICogdXNlciBjYW4gaW5zdGFsbC4gU2VlIHtAbGluayBnZXRMYXRlc3RPYnNpZGlhblZlcnNpb259LlxuICovXG5jb25zdCBERVNLVE9QX1JFTEVBU0VTX0pTT05fVVJMID0gJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL21hc3Rlci9kZXNrdG9wLXJlbGVhc2VzLmpzb24nO1xuXG4vKipcbiAqIENvcGllcyB0aGUgdXBkYXRlZCBtYW5pZmVzdCBmaWxlIHRvIHRoZSBkaXN0cmlidXRpb24gYnVpbGQgZm9sZGVyLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29weSBvcGVyYXRpb24gaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5VXBkYXRlZE1hbmlmZXN0KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBjcChcbiAgICByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvbiB9KSxcbiAgICByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGpvaW4oT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGlzdEJ1aWxkLCBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24pIH0pLFxuICAgIHsgZm9yY2U6IHRydWUgfVxuICApO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBmb3IgYSBwbHVnaW4gcmVsZWFzZTogZXZlcnkgZmxhZyB0aGUgZ2VuZXJpYyBgcGFyc2VWZXJzaW9uQXJndW1lbnRzYFxuICogcmVjb2duaXplcywgcGx1cyB0d28gb2YgdGhlIHBsdWdpbidzIG93bjpcbiAqIC0gYC0tbWluLWFwcC12ZXJzaW9uPTx4Lnkuej5gIFx1MjAxNCB3cml0ZSB0aGlzIGBtaW5BcHBWZXJzaW9uYCBpbnRvIHRoZSBwbHVnaW4ncyBgbWFuaWZlc3QuanNvbmAgYW5kIGl0cyBuZXdcbiAqICAgYHZlcnNpb25zLmpzb25gIGVudHJ5IGluc3RlYWQgb2YgdHJhY2tpbmcgdGhlIGxhdGVzdCBPYnNpZGlhbiBkZXNrdG9wIHZlcnNpb24uXG4gKiAtIGAtLW5vLWRlbW8tdmF1bHRgIFx1MjAxNCBza2lwIGFyY2hpdmluZyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdCAoYGRlbW8tdmF1bHQvYCkgYXMgYSByZWxlYXNlIGFydGlmYWN0LlxuICpcbiAqIEBwYXJhbSAkYXJndW1lbnRzIC0gVGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdG8gcGFyc2UgKHR5cGljYWxseSBgcHJvY2Vzcy5hcmd2LnNsaWNlKDIpYCkuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFBhcnNlZFZlcnNpb25Bcmd1bWVudHN9IGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gdXBkYXRlIHR5cGUgYW5kIHRoZSBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWZXJzaW9uQXJndW1lbnRzKCRhcmd1bWVudHM6IHN0cmluZ1tdKTogUGFyc2VkVmVyc2lvbkFyZ3VtZW50cyB7XG4gIGNvbnN0IHsgcG9zaXRpb25hbHMsIHZhbHVlcyB9ID0gcGFyc2VBcmdzKHtcbiAgICBhbGxvd1Bvc2l0aW9uYWxzOiB0cnVlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGBhcmdzYCBpcyB0aGUgb3B0aW9uIG5hbWUgTm9kZSdzIGBwYXJzZUFyZ3NgIHJlYWRzLlxuICAgIGFyZ3M6ICRhcmd1bWVudHMsXG4gICAgb3B0aW9uczoge1xuICAgICAgLi4uVkVSU0lPTl9BUkdVTUVOVF9PUFRJT05TLFxuICAgICAgJ21pbi1hcHAtdmVyc2lvbic6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICduby1kZW1vLXZhdWx0JzogeyB0eXBlOiAnYm9vbGVhbicgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zOiB7XG4gICAgICAuLi50b1VwZGF0ZVZlcnNpb25PcHRpb25zKHZhbHVlcyksXG4gICAgICBtaW5BcHBWZXJzaW9uOiB2YWx1ZXNbJ21pbi1hcHAtdmVyc2lvbiddLFxuICAgICAgc2hvdWxkQXJjaGl2ZURlbW9WYXVsdDogISh2YWx1ZXNbJ25vLWRlbW8tdmF1bHQnXSA/PyBmYWxzZSlcbiAgICB9LFxuICAgIHZlcnNpb25VcGRhdGVUeXBlOiBwb3NpdGlvbmFsc1swXVxuICB9O1xufVxuXG4vKipcbiAqIFJlbGVhc2VzIHRoZSBwbHVnaW4uIFNlZSB0aGUgYEBmaWxlYCBvdmVydmlldyBmb3Igd2hhdCBpdCBhZGRzIHRvIHRoZSBnZW5lcmljIHJlbGVhc2UuXG4gKlxuICogQHBhcmFtIHZlcnNpb25VcGRhdGVUeXBlIC0gVGhlIHR5cGUgb2YgdmVyc2lvbiB1cGRhdGUgdG8gcGVyZm9ybSAobWFqb3IsIG1pbm9yLCBwYXRjaCwgcHJlbWFqb3IsIHByZW1pbm9yLCBwcmVwYXRjaCwgcHJlcmVsZWFzZSwgb3IgeC55LnpbLXN1ZmZpeF0pLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFVwZGF0ZVZlcnNpb25PcHRpb25zfSBjb250cm9sbGluZyB0aGUgcmVsZWFzZSBiZWhhdmlvci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcmVsZWFzZSBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVZlcnNpb24odmVyc2lvblVwZGF0ZVR5cGU/OiBzdHJpbmcsIG9wdGlvbnM6IFVwZGF0ZVZlcnNpb25PcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIG1pbkFwcFZlcnNpb24sXG4gICAgcHJlcGFyZUdpdEh1YlJlbGVhc2UsXG4gICAgc2hvdWxkQXJjaGl2ZURlbW9WYXVsdCA9IHRydWUsXG4gICAgLi4uZ2VuZXJpY09wdGlvbnNcbiAgfSA9IG9wdGlvbnM7XG5cbiAgYXdhaXQgdXBkYXRlVmVyc2lvbkdlbmVyaWModmVyc2lvblVwZGF0ZVR5cGUsIHtcbiAgICAuLi5nZW5lcmljT3B0aW9ucyxcbiAgICBnZXRSZWxlYXNlQXNzZXRQYXRoczogZ2V0UGx1Z2luUmVsZWFzZUFzc2V0UGF0aHMsXG4gICAgYXN5bmMgcHJlcGFyZUdpdEh1YlJlbGVhc2UobmV3VmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCBwcmVwYXJlR2l0SHViUmVsZWFzZT8uKG5ld1ZlcnNpb24pO1xuICAgICAgaWYgKHNob3VsZEFyY2hpdmVEZW1vVmF1bHQpIHtcbiAgICAgICAgYXdhaXQgYXJjaGl2ZVBsdWdpbkRlbW9WYXVsdCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgdXBkYXRlVmVyc2lvbkluRXh0cmFGaWxlcyhuZXdWZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IHVwZGF0ZVZlcnNpb25JbkZpbGVzRm9yUGx1Z2luKG5ld1ZlcnNpb24sIG1pbkFwcFZlcnNpb24pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgT2JzaWRpYW4gdGhhdCB0aGUgZGVza3RvcCBhcHAgY2FuIGFjdHVhbGx5IHJ1bi5cbiAqXG4gKiBSZWFkcyB7QGxpbmsgREVTS1RPUF9SRUxFQVNFU19KU09OX1VSTH0sIG5vdCB0aGUgR2l0SHViIGByZWxlYXNlcy9sYXRlc3RgIEFQSS4gVGhlIEFQSSByZXR1cm5zIHRoZSBuZXdlc3RcbiAqIHJlbGVhc2Ugb2YgQU5ZIGtpbmQsIHNvIHdoZW5ldmVyIGEgbW9iaWxlLW9ubHkgcmVsZWFzZSAoYW4gQVBLLW9ubHkgYXNzZXQpIGlzIG5ld2VyIHRoYW4gdGhlIGRlc2t0b3Agb25lLFxuICogaXQgcmVwb3J0cyBhIHZlcnNpb24gdGhhdCBkb2VzIG5vdCBleGlzdCBmb3IgZGVza3RvcC4gQSBwbHVnaW4gcmVsZWFzZWQgaW4gdGhhdCB3aW5kb3cgZ2V0cyBhXG4gKiBgbWluQXBwVmVyc2lvbmAgbm8gZGVza3RvcCB1c2VyIGNhbiBzYXRpc2Z5LCBhbmQgT2JzaWRpYW4gc2lsZW50bHkga2VlcHMgb2ZmZXJpbmcgdGhlbSB0aGUgcHJldmlvdXNcbiAqIHJlbGVhc2UgaW5zdGVhZCBcdTIwMTQgdGhlIHJlbGVhc2Ugc3VjY2VlZHMgYW5kIHJlYWNoZXMgbm9ib2R5LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxhdGVzdCBPYnNpZGlhbiB2ZXJzaW9uIGF2YWlsYWJsZSBmb3IgZGVza3RvcC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0T2JzaWRpYW5WZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gV2UgcnVuIHRoaXMgb3V0c2lkZSBvZiBPYnNpZGlhbiwgc28gd2UgZG9uJ3QgaGF2ZSBgcmVxdWVzdFVybCgpYC5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChERVNLVE9QX1JFTEVBU0VTX0pTT05fVVJMKTtcbiAgY29uc3QgZGVza3RvcFJlbGVhc2VzSnNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBQYXJ0aWFsPERlc2t0b3BSZWxlYXNlc0pzb24+O1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUoZGVza3RvcFJlbGVhc2VzSnNvbi5sYXRlc3RWZXJzaW9uLCAnQ291bGQgbm90IGZpbmQgdGhlIGxhdGVzdCBkZXNrdG9wIE9ic2lkaWFuIHZlcnNpb24nKTtcbn1cbi8qKlxuICogVGhlIHBsdWdpbidzIHJlbGVhc2UgYXNzZXRzOiBldmVyeSBmaWxlIGluIGBkaXN0L2J1aWxkYC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYXNzZXQgcGF0aHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBsdWdpblJlbGVhc2VBc3NldFBhdGhzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgYnVpbGRGb2xkZXIgPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLkRpc3RCdWlsZCB9KTtcbiAgY29uc3QgZmlsZU5hbWVzID0gYXdhaXQgcmVhZGRpclBvc2l4KGJ1aWxkRm9sZGVyKTtcbiAgcmV0dXJuIGZpbGVOYW1lcy5tYXAoKGZpbGVOYW1lKSA9PiBqb2luKGJ1aWxkRm9sZGVyLCBmaWxlTmFtZSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVWZXJzaW9uSW5GaWxlc0ZvclBsdWdpbihuZXdWZXJzaW9uOiBzdHJpbmcsIG1pbkFwcFZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBtYW5pZmVzdEJldGFKc29uUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuTWFuaWZlc3RCZXRhSnNvbiB9KTtcbiAgaWYgKGlzUHJlUmVsZWFzZShuZXdWZXJzaW9uKSkge1xuICAgIGF3YWl0IGNwKFxuICAgICAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5NYW5pZmVzdEpzb24gfSksXG4gICAgICBtYW5pZmVzdEJldGFKc29uUGF0aCxcbiAgICAgIHsgZm9yY2U6IHRydWUgfVxuICAgICk7XG4gICAgYXdhaXQgZWRpdEpzb248TWFuaWZlc3Q+KHtcbiAgICAgIGVkaXRGdW5jdGlvbjogKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgIG1hbmlmZXN0LnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgICAgfSxcbiAgICAgIHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0QmV0YUpzb25cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXNvbHZlZE1pbkFwcFZlcnNpb24gPSBtaW5BcHBWZXJzaW9uID8/IGF3YWl0IGdldExhdGVzdE9ic2lkaWFuVmVyc2lvbigpO1xuXG4gICAgYXdhaXQgZWRpdEpzb248TWFuaWZlc3Q+KHtcbiAgICAgIGVkaXRGdW5jdGlvbjogKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgIG1hbmlmZXN0Lm1pbkFwcFZlcnNpb24gPSByZXNvbHZlZE1pbkFwcFZlcnNpb247XG4gICAgICAgIG1hbmlmZXN0LnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgICAgfSxcbiAgICAgIHBhdGg6IE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzLk1hbmlmZXN0SnNvblxuICAgIH0pO1xuXG4gICAgYXdhaXQgZWRpdEpzb248UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe1xuICAgICAgZWRpdEZ1bmN0aW9uOiAodmVyc2lvbnMpID0+IHtcbiAgICAgICAgdmVyc2lvbnNbbmV3VmVyc2lvbl0gPSByZXNvbHZlZE1pbkFwcFZlcnNpb247XG4gICAgICB9LFxuICAgICAgcGF0aDogT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuVmVyc2lvbnNKc29uXG4gICAgfSk7XG5cbiAgICBpZiAoZXhpc3RzU3luYyhtYW5pZmVzdEJldGFKc29uUGF0aCkpIHtcbiAgICAgIGF3YWl0IHJtKG1hbmlmZXN0QmV0YUpzb25QYXRoKTtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBjb3B5VXBkYXRlZE1hbmlmZXN0KCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY0EsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUywrQkFBK0I7QUFDeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0EsaUJBQWlCO0FBQUEsRUFDakI7QUFBQSxPQUNLO0FBQ1AsU0FBUyxZQUFZO0FBQ3JCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsa0JBQWtCO0FBQzNCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxpQkFBaUI7QUFFMUIsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUywrQkFBK0I7QUF1RXhDLE1BQU0sNEJBQTRCO0FBT2xDLGVBQXNCLHNCQUFxQztBQUN6RCxRQUFNO0FBQUEsSUFDSix3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixhQUFhLENBQUM7QUFBQSxJQUN0RSx3QkFBd0IsRUFBRSxNQUFNLEtBQUssd0JBQXdCLFdBQVcsd0JBQXdCLFlBQVksRUFBRSxDQUFDO0FBQUEsSUFDL0csRUFBRSxPQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUNGO0FBWU8sU0FBUyxzQkFBc0IsWUFBOEM7QUFDbEYsUUFBTSxFQUFFLGFBQWEsT0FBTyxJQUFJLFVBQVU7QUFBQSxJQUN4QyxrQkFBa0I7QUFBQTtBQUFBLElBRWxCLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxNQUNQLEdBQUc7QUFBQSxNQUNILG1CQUFtQixFQUFFLE1BQU0sU0FBUztBQUFBLE1BQ3BDLGlCQUFpQixFQUFFLE1BQU0sVUFBVTtBQUFBLElBQ3JDO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1AsR0FBRyx1QkFBdUIsTUFBTTtBQUFBLE1BQ2hDLGVBQWUsT0FBTyxpQkFBaUI7QUFBQSxNQUN2Qyx3QkFBd0IsRUFBRSxPQUFPLGVBQWUsS0FBSztBQUFBLElBQ3ZEO0FBQUEsSUFDQSxtQkFBbUIsWUFBWSxDQUFDO0FBQUEsRUFDbEM7QUFDRjtBQVNBLGVBQXNCLGNBQWMsbUJBQTRCLFVBQWdDLENBQUMsR0FBa0I7QUFDakgsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQSx5QkFBeUI7QUFBQSxJQUN6QixHQUFHO0FBQUEsRUFDTCxJQUFJO0FBRUosUUFBTSxxQkFBcUIsbUJBQW1CO0FBQUEsSUFDNUMsR0FBRztBQUFBLElBQ0gsc0JBQXNCO0FBQUEsSUFDdEIsTUFBTSxxQkFBcUIsWUFBbUM7QUFDNUQsWUFBTSx1QkFBdUIsVUFBVTtBQUN2QyxVQUFJLHdCQUF3QjtBQUMxQixjQUFNLHVCQUF1QjtBQUFBLE1BQy9CO0FBQUEsSUFDRjtBQUFBLElBQ0EsTUFBTSwwQkFBMEIsWUFBbUM7QUFDakUsWUFBTSw4QkFBOEIsWUFBWSxhQUFhO0FBQUEsSUFDL0Q7QUFBQSxFQUNGLENBQUM7QUFDSDtBQWFBLGVBQWUsMkJBQTRDO0FBRXpELFFBQU0sV0FBVyxNQUFNLE1BQU0seUJBQXlCO0FBQ3RELFFBQU0sc0JBQXNCLE1BQU0sU0FBUyxLQUFLO0FBQ2hELFNBQU8sa0JBQWtCLG9CQUFvQixlQUFlLG9EQUFvRDtBQUNsSDtBQU1BLGVBQWUsNkJBQWdEO0FBQzdELFFBQU0sY0FBYyx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixVQUFVLENBQUM7QUFDdkYsUUFBTSxZQUFZLE1BQU0sYUFBYSxXQUFXO0FBQ2hELFNBQU8sVUFBVSxJQUFJLENBQUMsYUFBYSxLQUFLLGFBQWEsUUFBUSxDQUFDO0FBQ2hFO0FBRUEsZUFBZSw4QkFBOEIsWUFBb0IsZUFBa0Q7QUFDakgsUUFBTSx1QkFBdUIsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsaUJBQWlCLENBQUM7QUFDdkcsTUFBSSxhQUFhLFVBQVUsR0FBRztBQUM1QixVQUFNO0FBQUEsTUFDSix3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixhQUFhLENBQUM7QUFBQSxNQUN0RTtBQUFBLE1BQ0EsRUFBRSxPQUFPLEtBQUs7QUFBQSxJQUNoQjtBQUNBLFVBQU0sU0FBbUI7QUFBQSxNQUN2QixjQUFjLENBQUMsYUFBYTtBQUMxQixpQkFBUyxVQUFVO0FBQUEsTUFDckI7QUFBQSxNQUNBLE1BQU0sd0JBQXdCO0FBQUEsSUFDaEMsQ0FBQztBQUFBLEVBQ0gsT0FBTztBQUNMLFVBQU0sd0JBQXdCLGlCQUFpQixNQUFNLHlCQUF5QjtBQUU5RSxVQUFNLFNBQW1CO0FBQUEsTUFDdkIsY0FBYyxDQUFDLGFBQWE7QUFDMUIsaUJBQVMsZ0JBQWdCO0FBQ3pCLGlCQUFTLFVBQVU7QUFBQSxNQUNyQjtBQUFBLE1BQ0EsTUFBTSx3QkFBd0I7QUFBQSxJQUNoQyxDQUFDO0FBRUQsVUFBTSxTQUFpQztBQUFBLE1BQ3JDLGNBQWMsQ0FBQyxhQUFhO0FBQzFCLGlCQUFTLFVBQVUsSUFBSTtBQUFBLE1BQ3pCO0FBQUEsTUFDQSxNQUFNLHdCQUF3QjtBQUFBLElBQ2hDLENBQUM7QUFFRCxRQUFJLFdBQVcsb0JBQW9CLEdBQUc7QUFDcEMsWUFBTSxHQUFHLG9CQUFvQjtBQUFBLElBQy9CO0FBQUEsRUFDRjtBQUVBLFFBQU0sb0JBQW9CO0FBQzVCOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,11 @@
1
+ /// <reference path="./index.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Vitest setup file for Obsidian plugins built on `@mnaoumov/obsidian-lib`.
6
+ *
7
+ * Add it to your Vitest config's `setupFiles` (or import it from another setup file). Before each
8
+ * test it resets the generic shared-state slot, the `__obsidianDevUtils` bag and the library contexts, and enables async-operation tracking; after each test it
9
+ * disables tracking, so tests can `await waitForAllAsyncOperations()` against isolated state.
10
+ */
11
+ export {};
@@ -0,0 +1,61 @@
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 initEsm() {
45
+ ensureDisposeSymbols();
46
+ ensureBrowserProcess();
47
+ })();
48
+ })();
49
+
50
+ import {
51
+ afterAll,
52
+ afterEach,
53
+ beforeEach
54
+ } from "vitest";
55
+ import { setup } from "./setup.mjs";
56
+ setup({
57
+ afterAll,
58
+ afterEach,
59
+ beforeEach
60
+ });
61
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZpdGVzdC1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFZpdGVzdCBzZXR1cCBmaWxlIGZvciBPYnNpZGlhbiBwbHVnaW5zIGJ1aWx0IG9uIGBAbW5hb3Vtb3Yvb2JzaWRpYW4tbGliYC5cbiAqXG4gKiBBZGQgaXQgdG8geW91ciBWaXRlc3QgY29uZmlnJ3MgYHNldHVwRmlsZXNgIChvciBpbXBvcnQgaXQgZnJvbSBhbm90aGVyIHNldHVwIGZpbGUpLiBCZWZvcmUgZWFjaFxuICogdGVzdCBpdCByZXNldHMgdGhlIGdlbmVyaWMgc2hhcmVkLXN0YXRlIHNsb3QsIHRoZSBgX19vYnNpZGlhbkRldlV0aWxzYCBiYWcgYW5kIHRoZSBsaWJyYXJ5IGNvbnRleHRzLCBhbmQgZW5hYmxlcyBhc3luYy1vcGVyYXRpb24gdHJhY2tpbmc7IGFmdGVyIGVhY2ggdGVzdCBpdFxuICogZGlzYWJsZXMgdHJhY2tpbmcsIHNvIHRlc3RzIGNhbiBgYXdhaXQgd2FpdEZvckFsbEFzeW5jT3BlcmF0aW9ucygpYCBhZ2FpbnN0IGlzb2xhdGVkIHN0YXRlLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGluIFZpdGVzdCBzZXR1cC1maWxlIGdsdWU7IHNldHVwIGlzIHVuaXQtdGVzdGVkIHNlcGFyYXRlbHkuICovXG5pbXBvcnQge1xuICBhZnRlckFsbCxcbiAgYWZ0ZXJFYWNoLFxuICBiZWZvcmVFYWNoXG59IGZyb20gJ3ZpdGVzdCc7XG5cbmltcG9ydCB7IHNldHVwIH0gZnJvbSAnLi9zZXR1cC50cyc7XG5cbnNldHVwKHtcbiAgYWZ0ZXJBbGwsXG4gIGFmdGVyRWFjaCxcbiAgYmVmb3JlRWFjaFxufSk7XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsYUFBYTtBQUV0QixNQUFNO0FBQUEsRUFDSjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,4 @@
1
+ import { createJiti } from 'jiti';
2
+ const jiti = createJiti(import.meta.url);
3
+ const { config } = await jiti.import('./scripts/markdownlint-cli2-config.ts');
4
+ export default config;
@@ -0,0 +1,4 @@
1
+ import { createJiti } from 'jiti';
2
+ const jiti = createJiti(import.meta.url);
3
+ const { config } = await jiti.import('./scripts/nano-staged-config.ts');
4
+ export default config;
@@ -0,0 +1,3 @@
1
+ import { config } from './scripts/commitlint-config.ts';
2
+
3
+ export default config;
@@ -0,0 +1,26 @@
1
+ {
2
+ "typescript": {
3
+ "bracePosition": "sameLine",
4
+ "constructSignature.spaceAfterNewKeyword": true,
5
+ "constructorType.spaceAfterNewKeyword": true,
6
+ "exportDeclaration.forceMultiLine": "whenMultiple",
7
+ "functionExpression.spaceAfterFunctionKeyword": true,
8
+ "importDeclaration.forceMultiLine": "whenMultiple",
9
+ "lineWidth": 1000,
10
+ "quoteStyle": "alwaysSingle",
11
+ "trailingCommas": "never"
12
+ },
13
+ "json": {},
14
+ "markdown": {},
15
+ // dprint respects .gitignore by default (--no-gitignore opts out), so dist and node_modules need no
16
+ // Entry here. Only paths git does NOT ignore belong below.
17
+ "excludes": [
18
+ "**/*-lock.json",
19
+ "**/*.md"
20
+ ],
21
+ "plugins": [
22
+ "https://plugins.dprint.dev/typescript-0.93.3.wasm",
23
+ "https://plugins.dprint.dev/json-0.19.4.wasm",
24
+ "https://plugins.dprint.dev/markdown-0.17.8.wasm"
25
+ ]
26
+ }
@@ -0,0 +1,3 @@
1
+ import { configs } from './scripts/eslint-config.ts';
2
+
3
+ export default configs;
@@ -0,0 +1,4 @@
1
+ import { buildClean } from '@mnaoumov/typescript-dev-toolkit/build';
2
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
3
+
4
+ await wrapCliTask(() => buildClean());
@@ -0,0 +1,4 @@
1
+ import { buildCompileSvelte } from '@mnaoumov/typescript-dev-toolkit/build';
2
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
3
+
4
+ await wrapCliTask(() => buildCompileSvelte());
@@ -0,0 +1,4 @@
1
+ import { buildCompileTypeScript } from '@mnaoumov/typescript-dev-toolkit/build';
2
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
3
+
4
+ await wrapCliTask(() => buildCompileTypeScript());
@@ -0,0 +1,4 @@
1
+ import { buildCompile } from '@mnaoumov/typescript-dev-toolkit/build';
2
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
3
+
4
+ await wrapCliTask(() => buildCompile());
@@ -0,0 +1,4 @@
1
+ import { buildTemplates } from '@mnaoumov/typescript-dev-toolkit/build';
2
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
3
+
4
+ await wrapCliTask(() => buildTemplates());
@@ -0,0 +1,4 @@
1
+ import { build } from '@mnaoumov/obsidian-dev-toolkit/bundlers/esbuild';
2
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
3
+
4
+ await wrapCliTask(() => build());
@@ -0,0 +1,4 @@
1
+ import { dev } from '@mnaoumov/obsidian-dev-toolkit/bundlers/esbuild';
2
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
3
+
4
+ await wrapCliTask(() => dev());
@@ -0,0 +1,3 @@
1
+ import { obsidianDevUtilsConfig } from '@mnaoumov/typescript-dev-toolkit/commitlint-config';
2
+
3
+ export const config = obsidianDevUtilsConfig;
@@ -0,0 +1,10 @@
1
+ import type { Linter } from 'eslint';
2
+
3
+ import { defineEslintConfigs } from '@mnaoumov/obsidian-dev-toolkit/linters/eslint-config';
4
+
5
+ export const configs: Linter.Config[] = defineEslintConfigs({
6
+ // Pass `customConfigs()` to add plugin-specific rules, e.g. brand names for `obsidianmd/ui/sentence-case`:
7
+ // customConfigs() {
8
+ // return defineConfig({ rules: { 'obsidianmd/ui/sentence-case': ['error', { brands: ['My Plugin'] }] } });
9
+ // }
10
+ });
@@ -0,0 +1,8 @@
1
+ import process from 'node:process';
2
+
3
+ import { format } from '@mnaoumov/obsidian-dev-toolkit/formatters/dprint';
4
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
5
+
6
+ const [, , ...paths] = process.argv;
7
+
8
+ await wrapCliTask(() => format({ paths, rewrite: false }));
@@ -0,0 +1,8 @@
1
+ import process from 'node:process';
2
+
3
+ import { format } from '@mnaoumov/obsidian-dev-toolkit/formatters/dprint';
4
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
5
+
6
+ const [, , ...paths] = process.argv;
7
+
8
+ await wrapCliTask(() => format({ paths }));
@@ -0,0 +1,10 @@
1
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
2
+ import {
3
+ gate,
4
+ parseGateArguments
5
+ } from '@mnaoumov/typescript-dev-toolkit/gate';
6
+ import process from 'node:process';
7
+
8
+ const [, , ...$arguments] = process.argv;
9
+ const options = parseGateArguments($arguments);
10
+ await wrapCliTask(() => gate(options));
@@ -0,0 +1,8 @@
1
+ import process from 'node:process';
2
+
3
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
4
+ import { spellcheck } from '@mnaoumov/typescript-dev-toolkit/linters/cspell';
5
+
6
+ const [, , ...paths] = process.argv;
7
+
8
+ await wrapCliTask(() => spellcheck({ paths }));
@@ -0,0 +1,8 @@
1
+ import process from 'node:process';
2
+
3
+ import { lint } from '@mnaoumov/obsidian-dev-toolkit/linters/eslint';
4
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
5
+
6
+ const [, , ...paths] = process.argv;
7
+
8
+ await wrapCliTask(() => lint({ paths, shouldFix: true }));
@@ -0,0 +1,8 @@
1
+ import process from 'node:process';
2
+
3
+ import { lint } from '@mnaoumov/obsidian-dev-toolkit/linters/eslint';
4
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
5
+
6
+ const [, , ...paths] = process.argv;
7
+
8
+ await wrapCliTask(() => lint({ paths }));
@@ -0,0 +1,8 @@
1
+ import process from 'node:process';
2
+
3
+ import { lint } from '@mnaoumov/obsidian-dev-toolkit/linters/markdownlint';
4
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
5
+
6
+ const [, , ...paths] = process.argv;
7
+
8
+ await wrapCliTask(() => lint({ paths, shouldFix: true }));
@@ -0,0 +1,8 @@
1
+ import process from 'node:process';
2
+
3
+ import { lint } from '@mnaoumov/obsidian-dev-toolkit/linters/markdownlint';
4
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
5
+
6
+ const [, , ...paths] = process.argv;
7
+
8
+ await wrapCliTask(() => lint({ paths }));
@@ -0,0 +1,25 @@
1
+ import {
2
+ CliTaskResult,
3
+ wrapCliTask
4
+ } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
5
+ import {
6
+ findOverExposure,
7
+ formatOverExposureFindings
8
+ } from '@mnaoumov/typescript-dev-toolkit/linters/over-exposure';
9
+ import process from 'node:process';
10
+ import { parseArgs } from 'node:util';
11
+
12
+ const [, , ...args] = process.argv;
13
+
14
+ const { values } = parseArgs({
15
+ args,
16
+ options: {
17
+ force: { type: 'boolean' }
18
+ }
19
+ });
20
+
21
+ await wrapCliTask(() => {
22
+ const findings = findOverExposure({ projectFolder: process.cwd(), shouldFix: true, shouldForce: values.force ?? false });
23
+ process.stdout.write(formatOverExposureFindings(findings, { baseFolder: process.cwd() }));
24
+ return CliTaskResult.Success(findings.every((finding) => finding.wasFixed));
25
+ });
@@ -0,0 +1,15 @@
1
+ import {
2
+ CliTaskResult,
3
+ wrapCliTask
4
+ } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
5
+ import {
6
+ findOverExposure,
7
+ formatOverExposureFindings
8
+ } from '@mnaoumov/typescript-dev-toolkit/linters/over-exposure';
9
+ import process from 'node:process';
10
+
11
+ await wrapCliTask(() => {
12
+ const findings = findOverExposure({ projectFolder: process.cwd() });
13
+ process.stdout.write(formatOverExposureFindings(findings, { baseFolder: process.cwd() }));
14
+ return CliTaskResult.Success(findings.length === 0);
15
+ });
@@ -0,0 +1,3 @@
1
+ import { obsidianDevUtilsConfig } from '@mnaoumov/typescript-dev-toolkit/linters/markdownlint-cli2-config';
2
+
3
+ export const config = obsidianDevUtilsConfig;
@@ -0,0 +1,3 @@
1
+ import { getNanoStagedConfig } from '@mnaoumov/typescript-dev-toolkit/nano-staged-config';
2
+
3
+ export const config = getNanoStagedConfig();
@@ -0,0 +1,4 @@
1
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
2
+ import { testCoverage } from '@mnaoumov/typescript-dev-toolkit/test-runners/vitest';
3
+
4
+ await wrapCliTask(() => testCoverage());
@@ -0,0 +1,4 @@
1
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
2
+ import { testWatch } from '@mnaoumov/typescript-dev-toolkit/test-runners/vitest';
3
+
4
+ await wrapCliTask(() => testWatch());
@@ -0,0 +1,4 @@
1
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
2
+ import { test } from '@mnaoumov/typescript-dev-toolkit/test-runners/vitest';
3
+
4
+ await wrapCliTask(() => test());
@@ -0,0 +1,10 @@
1
+ import {
2
+ parseVersionArguments,
3
+ updateVersion
4
+ } from '@mnaoumov/obsidian-dev-toolkit/version';
5
+ import { wrapCliTask } from '@mnaoumov/typescript-dev-toolkit/cli-utils';
6
+ import process from 'node:process';
7
+
8
+ const [, , ...$arguments] = process.argv;
9
+ const { options, versionUpdateType } = parseVersionArguments($arguments);
10
+ await wrapCliTask(() => updateVersion(versionUpdateType, options));
@@ -0,0 +1,3 @@
1
+ import { defineObsidianPluginVitestConfig } from '@mnaoumov/obsidian-dev-toolkit/test-runners/vitest-config';
2
+
3
+ export const config = defineObsidianPluginVitestConfig();