@mnaoumov/create-obsidian-plugin 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 (470) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +341 -2
  3. package/dist/main.js +4184 -0
  4. package/package.json +78 -4
  5. package/src/main.ts +650 -0
  6. package/templates/default/.depcheckrc.json.ejs +19 -0
  7. package/templates/default/.editorconfig.ejs +11 -0
  8. package/templates/default/.env.ejs +1 -0
  9. package/templates/default/.env@vault_has-vault-false.ejs +2 -0
  10. package/templates/default/.env@vault_has-vault-true.ejs +1 -0
  11. package/templates/default/.gitattributes.ejs +7 -0
  12. package/templates/default/.github/FUNDING.yml.ejs +3 -0
  13. package/templates/default/.github/ISSUE_TEMPLATE/bug_report.yml.ejs +71 -0
  14. package/templates/default/.github/ISSUE_TEMPLATE/config.yml.ejs +1 -0
  15. package/templates/default/.github/ISSUE_TEMPLATE/feature_request.yml.ejs +61 -0
  16. package/templates/default/.github/workflows/attest-release-assets.yml.ejs +24 -0
  17. package/templates/default/.github/workflows/ci.yml.ejs +20 -0
  18. package/templates/default/.github/workflows/ci.yml@steps_biome-linter.ejs +1 -0
  19. package/templates/default/.github/workflows/ci.yml@steps_cspell.ejs +1 -0
  20. package/templates/default/.github/workflows/ci.yml@steps_dprint.ejs +1 -0
  21. package/templates/default/.github/workflows/ci.yml@steps_eslint.ejs +1 -0
  22. package/templates/default/.github/workflows/ci.yml@steps_jest.ejs +1 -0
  23. package/templates/default/.github/workflows/ci.yml@steps_markdownlint.ejs +1 -0
  24. package/templates/default/.github/workflows/ci.yml@steps_prettier.ejs +1 -0
  25. package/templates/default/.github/workflows/ci.yml@steps_vitest.ejs +1 -0
  26. package/templates/default/.github/workflows/release.yml.ejs +27 -0
  27. package/templates/default/.github/workflows/update-license-year.yml.ejs +38 -0
  28. package/templates/default/.gitignore_common.ejs +27 -0
  29. package/templates/default/.gitignore_scss.ejs +1 -0
  30. package/templates/default/.gitignore_tailwind.ejs +3 -0
  31. package/templates/default/.husky/commit-msg.ejs +1 -0
  32. package/templates/default/.husky/pre-commit.ejs +1 -0
  33. package/templates/default/.markdownlint-cli2.mjs.ejs +4 -0
  34. package/templates/default/.nano-staged.mjs.ejs +5 -0
  35. package/templates/default/.npmrc.ejs +1 -0
  36. package/templates/default/.parcelrc.ejs +9 -0
  37. package/templates/default/.parcelrc@transformers_svelte.ejs +1 -0
  38. package/templates/default/.prettierignore.ejs +10 -0
  39. package/templates/default/.typesafe-i18n.json.ejs +5 -0
  40. package/templates/default/CONTRIBUTING.md.ejs +49 -0
  41. package/templates/default/CONTRIBUTING.md@demo-vault_dev-utils.ejs +15 -0
  42. package/templates/default/CONTRIBUTING.md@scripts_biome-formatter.ejs +1 -0
  43. package/templates/default/CONTRIBUTING.md@scripts_biome-linter.ejs +1 -0
  44. package/templates/default/CONTRIBUTING.md@scripts_conventional-commits.ejs +1 -0
  45. package/templates/default/CONTRIBUTING.md@scripts_cspell.ejs +1 -0
  46. package/templates/default/CONTRIBUTING.md@scripts_dev-utils.ejs +1 -0
  47. package/templates/default/CONTRIBUTING.md@scripts_dprint.ejs +1 -0
  48. package/templates/default/CONTRIBUTING.md@scripts_eslint.ejs +1 -0
  49. package/templates/default/CONTRIBUTING.md@scripts_jest.ejs +1 -0
  50. package/templates/default/CONTRIBUTING.md@scripts_markdownlint.ejs +1 -0
  51. package/templates/default/CONTRIBUTING.md@scripts_prettier.ejs +1 -0
  52. package/templates/default/CONTRIBUTING.md@scripts_vitest.ejs +1 -0
  53. package/templates/default/LICENSE.ejs +21 -0
  54. package/templates/default/README.md.ejs +28 -0
  55. package/templates/default/README.md@demo-vault_dev-utils.ejs +12 -0
  56. package/templates/default/README.md@preset_dev-utils.ejs +12 -0
  57. package/templates/default/README.md@support_has-funding.ejs +8 -0
  58. package/templates/default/babel.config.json.ejs +8 -0
  59. package/templates/default/babel.config.mjs.ejs +5 -0
  60. package/templates/default/biome.jsonc.ejs +47 -0
  61. package/templates/default/commitlint.config.ts.ejs +1 -0
  62. package/templates/default/cspell.json.ejs +67 -0
  63. package/templates/default/demo-vault/.gitignore.ejs +15 -0
  64. package/templates/default/demo-vault/.obsidian/app.json.ejs +4 -0
  65. package/templates/default/demo-vault/.obsidian/community-plugins.json.ejs +4 -0
  66. package/templates/default/demo-vault/00 Start.md.ejs +32 -0
  67. package/templates/default/demo-vault/00 Start.md@features_wasm.ejs +1 -0
  68. package/templates/default/demo-vault/01 Sample commands.md.ejs +38 -0
  69. package/templates/default/demo-vault/01 Sample commands.md@commands_wasm.ejs +4 -0
  70. package/templates/default/demo-vault/02 Settings.md.ejs +40 -0
  71. package/templates/default/demo-vault/03 WebAssembly.md.ejs +34 -0
  72. package/templates/default/demo-vault/Materials/01 Sample commands/Scratch note.md.ejs +5 -0
  73. package/templates/default/demo-vault/README.md.ejs +10 -0
  74. package/templates/default/demo-vault/_assets/CodeScriptToolkit/demoSetup.ts.ejs +88 -0
  75. package/templates/default/demo-vault/_assets/CodeScriptToolkit/demoSetup.ts@commands_wasm.ejs +10 -0
  76. package/templates/default/demo-vault/_assets/CodeScriptToolkit/startup.ts.ejs +17 -0
  77. package/templates/default/dprint.json_dev-utils.ejs +10 -0
  78. package/templates/default/dprint.json_standalone.ejs +26 -0
  79. package/templates/default/e2e/sample.spec.ts_obsidian-test.ejs +16 -0
  80. package/templates/default/e2e/sample.spec.ts_obsidian-test@lint-no-void-disable_dev-utils.ejs +3 -0
  81. package/templates/default/e2e/sample.spec.ts_obsidian-test@lint-no-void-enable_dev-utils.ejs +1 -0
  82. package/templates/default/e2e/sample.spec.ts_obsidian-test@unofficial_with-unofficial.ejs +13 -0
  83. package/templates/default/e2e/sample.spec.ts_wdio-obsidian.ejs +7 -0
  84. package/templates/default/e2e/sample.spec.ts_wdio-obsidian@unofficial_with-unofficial.ejs +15 -0
  85. package/templates/default/eslint.config.mts_dev-utils.ejs +1 -0
  86. package/templates/default/eslint.config.mts_standalone.ejs +119 -0
  87. package/templates/default/eslint.config.mts_standalone@extra-files_has-e2e.ejs +2 -0
  88. package/templates/default/jest.config.ts.ejs +57 -0
  89. package/templates/default/jest.config.ts@lint-root-dir_dev-utils.ejs +1 -0
  90. package/templates/default/jest.config.ts@ts-jest-tsconfig_solid.ejs +8 -0
  91. package/templates/default/linkinator.config.json.ejs +11 -0
  92. package/templates/default/manifest.json.ejs +11 -0
  93. package/templates/default/manifest.json@funding_has-funding.ejs +1 -0
  94. package/templates/default/manifest.json@platform_desktop-and-mobile.ejs +1 -0
  95. package/templates/default/manifest.json@platform_desktop-only.ejs +1 -0
  96. package/templates/default/package.json.ejs +32 -0
  97. package/templates/default/package.json@targets_parcel.ejs +36 -0
  98. package/templates/default/parcel-namer-obsidian.cjs.ejs +26 -0
  99. package/templates/default/parcel-resolver-obsidian.cjs.ejs +37 -0
  100. package/templates/default/parcel-transformer-inline-imports.cjs.ejs +39 -0
  101. package/templates/default/parcel-transformer-svelte.cjs.ejs +67 -0
  102. package/templates/default/pinned-versions.json.ejs +1 -0
  103. package/templates/default/pnpm-workspace.yaml.ejs +19 -0
  104. package/templates/default/postcss.config.cjs.ejs +12 -0
  105. package/templates/default/prettier.config.mjs.ejs +5 -0
  106. package/templates/default/rollup.config.mjs.ejs +7 -0
  107. package/templates/default/scripts/babel.config.ts_rollup.ejs +16 -0
  108. package/templates/default/scripts/babel.config.ts_rollup@babel-plugin_preact.ejs +1 -0
  109. package/templates/default/scripts/babel.config.ts_rollup@babel-preset_react.ejs +1 -0
  110. package/templates/default/scripts/babel.config.ts_rollup@babel-preset_solid.ejs +1 -0
  111. package/templates/default/scripts/build-clean.ts.ejs +4 -0
  112. package/templates/default/scripts/build-compile.ts.ejs +4 -0
  113. package/templates/default/scripts/build-styles.ts.ejs +12 -0
  114. package/templates/default/scripts/build.ts.ejs +6 -0
  115. package/templates/default/scripts/build.ts@bundler_cli-bundler.ejs +63 -0
  116. package/templates/default/scripts/build.ts@bundler_cli-bundler@compile_svelte.ejs +4 -0
  117. package/templates/default/scripts/build.ts@bundler_cli-bundler@fs-import_hot-reload-plugin.ejs +2 -0
  118. package/templates/default/scripts/build.ts@bundler_cli-bundler@hot-reload_hot-reload-plugin.ejs +3 -0
  119. package/templates/default/scripts/build.ts@bundler_cli-bundler@import_tailwind.ejs +2 -0
  120. package/templates/default/scripts/build.ts@bundler_cli-bundler@lint-build-styles_dev-utils.ejs +1 -0
  121. package/templates/default/scripts/build.ts@bundler_cli-bundler@reload_obsidian-cli.ejs +5 -0
  122. package/templates/default/scripts/build.ts@bundler_cli-bundler@run_parcel.ejs +1 -0
  123. package/templates/default/scripts/build.ts@bundler_cli-bundler@run_rollup.ejs +1 -0
  124. package/templates/default/scripts/build.ts@bundler_cli-bundler@run_vite.ejs +1 -0
  125. package/templates/default/scripts/build.ts@bundler_cli-bundler@run_webpack.ejs +1 -0
  126. package/templates/default/scripts/build.ts@bundler_esbuild.ejs +3 -0
  127. package/templates/default/scripts/build.ts@bundler_esbuild@compile_svelte.ejs +4 -0
  128. package/templates/default/scripts/build.ts@bundler_esbuild@dev-utils-pre-build_tailwind.ejs +2 -0
  129. package/templates/default/scripts/build.ts@bundler_esbuild@fs-import_hot-reload-plugin.ejs +2 -0
  130. package/templates/default/scripts/build.ts@bundler_esbuild@hot-reload_hot-reload-plugin.ejs +4 -0
  131. package/templates/default/scripts/build.ts@bundler_esbuild@import_postcss.ejs +1 -0
  132. package/templates/default/scripts/build.ts@bundler_esbuild@import_scss.ejs +1 -0
  133. package/templates/default/scripts/build.ts@bundler_esbuild@import_solid.ejs +1 -0
  134. package/templates/default/scripts/build.ts@bundler_esbuild@import_svelte.ejs +10 -0
  135. package/templates/default/scripts/build.ts@bundler_esbuild@import_tailwind.ejs +1 -0
  136. package/templates/default/scripts/build.ts@bundler_esbuild@import_vue.ejs +1 -0
  137. package/templates/default/scripts/build.ts@bundler_esbuild@lint-build-styles_dev-utils.ejs +1 -0
  138. package/templates/default/scripts/build.ts@bundler_esbuild@options_preact.ejs +2 -0
  139. package/templates/default/scripts/build.ts@bundler_esbuild@options_react.ejs +1 -0
  140. package/templates/default/scripts/build.ts@bundler_esbuild@options_wasm.ejs +5 -0
  141. package/templates/default/scripts/build.ts@bundler_esbuild@plugin_postcss.ejs +1 -0
  142. package/templates/default/scripts/build.ts@bundler_esbuild@plugin_scss.ejs +1 -0
  143. package/templates/default/scripts/build.ts@bundler_esbuild@plugin_solid.ejs +1 -0
  144. package/templates/default/scripts/build.ts@bundler_esbuild@plugin_svelte.ejs +5 -0
  145. package/templates/default/scripts/build.ts@bundler_esbuild@plugin_vue.ejs +1 -0
  146. package/templates/default/scripts/build.ts@bundler_esbuild@preset_dev-utils.ejs +7 -0
  147. package/templates/default/scripts/build.ts@bundler_esbuild@preset_standalone.ejs +138 -0
  148. package/templates/default/scripts/build.ts@bundler_esbuild@reload_obsidian-cli.ejs +6 -0
  149. package/templates/default/scripts/commit.ts_dev-utils.ejs +3 -0
  150. package/templates/default/scripts/commit.ts_standalone.ejs +3 -0
  151. package/templates/default/scripts/commitlint-config.ts.ejs +5 -0
  152. package/templates/default/scripts/demo-vault-global-setup.ts.ejs +43 -0
  153. package/templates/default/scripts/dev.ts.ejs +6 -0
  154. package/templates/default/scripts/dev.ts@bundler_cli-bundler.ejs +8 -0
  155. package/templates/default/scripts/dev.ts@bundler_esbuild.ejs +3 -0
  156. package/templates/default/scripts/dev.ts@bundler_esbuild@dev-utils-pre-build_tailwind.ejs +2 -0
  157. package/templates/default/scripts/dev.ts@bundler_esbuild@lint-build-styles_dev-utils.ejs +1 -0
  158. package/templates/default/scripts/dev.ts@bundler_esbuild@preset_dev-utils.ejs +7 -0
  159. package/templates/default/scripts/dev.ts@bundler_esbuild@preset_standalone.ejs +3 -0
  160. package/templates/default/scripts/esbuild-plugins.ts.ejs +20 -0
  161. package/templates/default/scripts/esbuild-plugins.ts@dev-utils-import_vue.ejs +2 -0
  162. package/templates/default/scripts/esbuild-plugins.ts@dev-utils-plugin_vue.ejs +1 -0
  163. package/templates/default/scripts/esbuild-plugins.ts@dev-utils-plugin_wasm.ejs +13 -0
  164. package/templates/default/scripts/eslint-config.ts.ejs +113 -0
  165. package/templates/default/scripts/eslint-config.ts@extra-files_has-e2e.ejs +7 -0
  166. package/templates/default/scripts/find-overexposed-fix.ts.ejs +26 -0
  167. package/templates/default/scripts/find-overexposed.ts.ejs +15 -0
  168. package/templates/default/scripts/format-check.ts.ejs +4 -0
  169. package/templates/default/scripts/format-check.ts@tool_biome-formatter.ejs +8 -0
  170. package/templates/default/scripts/format-check.ts@tool_dprint.ejs +3 -0
  171. package/templates/default/scripts/format-check.ts@tool_dprint@preset_dev-utils.ejs +7 -0
  172. package/templates/default/scripts/format-check.ts@tool_dprint@preset_standalone.ejs +8 -0
  173. package/templates/default/scripts/format-check.ts@tool_prettier.ejs +8 -0
  174. package/templates/default/scripts/format.ts.ejs +4 -0
  175. package/templates/default/scripts/format.ts@tool_biome-formatter.ejs +8 -0
  176. package/templates/default/scripts/format.ts@tool_dprint.ejs +3 -0
  177. package/templates/default/scripts/format.ts@tool_dprint@preset_dev-utils.ejs +7 -0
  178. package/templates/default/scripts/format.ts@tool_dprint@preset_standalone.ejs +8 -0
  179. package/templates/default/scripts/format.ts@tool_prettier.ejs +8 -0
  180. package/templates/default/scripts/framework-component-stub.ts.ejs +46 -0
  181. package/templates/default/scripts/gate.ts.ejs +10 -0
  182. package/templates/default/scripts/lint-fix.ts.ejs +6 -0
  183. package/templates/default/scripts/lint-fix.ts@tool_biome-linter.ejs +8 -0
  184. package/templates/default/scripts/lint-fix.ts@tool_eslint.ejs +3 -0
  185. package/templates/default/scripts/lint-fix.ts@tool_eslint@preset_dev-utils.ejs +7 -0
  186. package/templates/default/scripts/lint-fix.ts@tool_eslint@preset_standalone.ejs +8 -0
  187. package/templates/default/scripts/lint-md-fix.ts_dev-utils.ejs +7 -0
  188. package/templates/default/scripts/lint-md-fix.ts_standalone.ejs +37 -0
  189. package/templates/default/scripts/lint-md.ts_dev-utils.ejs +7 -0
  190. package/templates/default/scripts/lint-md.ts_standalone.ejs +37 -0
  191. package/templates/default/scripts/lint.ts.ejs +6 -0
  192. package/templates/default/scripts/lint.ts@tool_biome-linter.ejs +8 -0
  193. package/templates/default/scripts/lint.ts@tool_eslint.ejs +3 -0
  194. package/templates/default/scripts/lint.ts@tool_eslint@preset_dev-utils.ejs +7 -0
  195. package/templates/default/scripts/lint.ts@tool_eslint@preset_standalone.ejs +8 -0
  196. package/templates/default/scripts/markdownlint-cli2-config.ts_dev-utils.ejs +14 -0
  197. package/templates/default/scripts/markdownlint-cli2-config.ts_standalone.ejs +36 -0
  198. package/templates/default/scripts/nano-staged-config.ts.ejs +9 -0
  199. package/templates/default/scripts/postcss.config.ts.ejs +1 -0
  200. package/templates/default/scripts/postcss.config.ts@plugins_postcss.ejs +7 -0
  201. package/templates/default/scripts/prepare.ts_dev-utils.ejs +3 -0
  202. package/templates/default/scripts/prepare.ts_standalone.ejs +3 -0
  203. package/templates/default/scripts/prettier.config.ts.ejs +12 -0
  204. package/templates/default/scripts/rollup.config.ts.ejs +129 -0
  205. package/templates/default/scripts/rollup.config.ts@import_rollup-babel.ejs +5 -0
  206. package/templates/default/scripts/rollup.config.ts@import_rollup-json.ejs +1 -0
  207. package/templates/default/scripts/rollup.config.ts@import_rollup-postcss.ejs +4 -0
  208. package/templates/default/scripts/rollup.config.ts@import_scss.ejs +1 -0
  209. package/templates/default/scripts/rollup.config.ts@import_svelte.ejs +2 -0
  210. package/templates/default/scripts/rollup.config.ts@import_vue.ejs +1 -0
  211. package/templates/default/scripts/rollup.config.ts@import_wasm.ejs +1 -0
  212. package/templates/default/scripts/rollup.config.ts@lint-out-dir_dev-utils.ejs +1 -0
  213. package/templates/default/scripts/rollup.config.ts@post-plugin_preact.ejs +4 -0
  214. package/templates/default/scripts/rollup.config.ts@post-plugin_react.ejs +5 -0
  215. package/templates/default/scripts/rollup.config.ts@post-plugin_rollup-json.ejs +1 -0
  216. package/templates/default/scripts/rollup.config.ts@post-plugin_rollup-postcss.ejs +4 -0
  217. package/templates/default/scripts/rollup.config.ts@post-plugin_scss.ejs +4 -0
  218. package/templates/default/scripts/rollup.config.ts@post-plugin_solid.ejs +4 -0
  219. package/templates/default/scripts/rollup.config.ts@post-plugin_wasm.ejs +4 -0
  220. package/templates/default/scripts/rollup.config.ts@pre-plugin_svelte.ejs +4 -0
  221. package/templates/default/scripts/rollup.config.ts@pre-plugin_vue.ejs +13 -0
  222. package/templates/default/scripts/rollup.config.ts@unwrap_rollup-babel.ejs +1 -0
  223. package/templates/default/scripts/rollup.config.ts@unwrap_rollup-json.ejs +1 -0
  224. package/templates/default/scripts/rollup.config.ts@unwrap_rollup-postcss.ejs +1 -0
  225. package/templates/default/scripts/rollup.config.ts@unwrap_scss.ejs +1 -0
  226. package/templates/default/scripts/rollup.config.ts@unwrap_svelte.ejs +1 -0
  227. package/templates/default/scripts/rollup.config.ts@unwrap_vue.ejs +1 -0
  228. package/templates/default/scripts/rollup.config.ts@unwrap_wasm.ejs +1 -0
  229. package/templates/default/scripts/spellcheck.ts_dev-utils.ejs +7 -0
  230. package/templates/default/scripts/spellcheck.ts_standalone.ejs +8 -0
  231. package/templates/default/scripts/stylesheet-stub.ts.ejs +17 -0
  232. package/templates/default/scripts/test-coverage.ts.ejs +8 -0
  233. package/templates/default/scripts/test-e2e.ts.ejs +1 -0
  234. package/templates/default/scripts/test-e2e.ts@tool_obsidian-test.ejs +8 -0
  235. package/templates/default/scripts/test-e2e.ts@tool_wdio-obsidian.ejs +8 -0
  236. package/templates/default/scripts/test-integration-android.ts.ejs +8 -0
  237. package/templates/default/scripts/test-integration-demo-vault.ts.ejs +8 -0
  238. package/templates/default/scripts/test-integration-desktop-performance.ts.ejs +8 -0
  239. package/templates/default/scripts/test-integration-desktop.ts.ejs +8 -0
  240. package/templates/default/scripts/test-integration-no-app.ts.ejs +8 -0
  241. package/templates/default/scripts/test-integration.ts.ejs +22 -0
  242. package/templates/default/scripts/test-watch.ts_dev-utils.ejs +1 -0
  243. package/templates/default/scripts/test-watch.ts_dev-utils@tool_jest.ejs +13 -0
  244. package/templates/default/scripts/test-watch.ts_dev-utils@tool_vitest.ejs +8 -0
  245. package/templates/default/scripts/test-watch.ts_standalone.ejs +1 -0
  246. package/templates/default/scripts/test-watch.ts_standalone@tool_jest.ejs +13 -0
  247. package/templates/default/scripts/test-watch.ts_standalone@tool_vitest.ejs +8 -0
  248. package/templates/default/scripts/test.ts_dev-utils.ejs +1 -0
  249. package/templates/default/scripts/test.ts_dev-utils@tool_jest.ejs +13 -0
  250. package/templates/default/scripts/test.ts_dev-utils@tool_vitest.ejs +8 -0
  251. package/templates/default/scripts/test.ts_standalone.ejs +1 -0
  252. package/templates/default/scripts/test.ts_standalone@tool_jest.ejs +13 -0
  253. package/templates/default/scripts/test.ts_standalone@tool_vitest.ejs +8 -0
  254. package/templates/default/scripts/version.ts_dev-utils.ejs +10 -0
  255. package/templates/default/scripts/version.ts_standalone.ejs +317 -0
  256. package/templates/default/scripts/vite.config.ts.ejs +76 -0
  257. package/templates/default/scripts/vite.config.ts@import_preact.ejs +1 -0
  258. package/templates/default/scripts/vite.config.ts@import_react.ejs +1 -0
  259. package/templates/default/scripts/vite.config.ts@import_solid.ejs +1 -0
  260. package/templates/default/scripts/vite.config.ts@import_svelte.ejs +1 -0
  261. package/templates/default/scripts/vite.config.ts@import_vue.ejs +1 -0
  262. package/templates/default/scripts/vite.config.ts@lint-empty-out-dir_dev-utils.ejs +1 -0
  263. package/templates/default/scripts/vite.config.ts@lint-out-dir_dev-utils.ejs +1 -0
  264. package/templates/default/scripts/vite.config.ts@plugin_preact.ejs +1 -0
  265. package/templates/default/scripts/vite.config.ts@plugin_react.ejs +1 -0
  266. package/templates/default/scripts/vite.config.ts@plugin_solid.ejs +1 -0
  267. package/templates/default/scripts/vite.config.ts@plugin_svelte.ejs +1 -0
  268. package/templates/default/scripts/vite.config.ts@plugin_vue.ejs +1 -0
  269. package/templates/default/scripts/vitest-config.ts.ejs +75 -0
  270. package/templates/default/scripts/vitest-config.ts@post-config_solid.ejs +67 -0
  271. package/templates/default/scripts/wasm-module-stub.ts.ejs +21 -0
  272. package/templates/default/scripts/webpack.config.ts.ejs +124 -0
  273. package/templates/default/scripts/webpack.config.ts@import_svelte.ejs +1 -0
  274. package/templates/default/scripts/webpack.config.ts@import_vue.ejs +1 -0
  275. package/templates/default/scripts/webpack.config.ts@import_webpack-css-extract.ejs +4 -0
  276. package/templates/default/scripts/webpack.config.ts@lint-webpack-default_dev-utils.ejs +1 -0
  277. package/templates/default/scripts/webpack.config.ts@plugin_vue.ejs +1 -0
  278. package/templates/default/scripts/webpack.config.ts@plugin_webpack-css-extract.ejs +4 -0
  279. package/templates/default/scripts/webpack.config.ts@rule_css-modules.ejs +7 -0
  280. package/templates/default/scripts/webpack.config.ts@rule_css.ejs +4 -0
  281. package/templates/default/scripts/webpack.config.ts@rule_postcss.ejs +4 -0
  282. package/templates/default/scripts/webpack.config.ts@rule_scss.ejs +4 -0
  283. package/templates/default/scripts/webpack.config.ts@rule_solid.ejs +17 -0
  284. package/templates/default/scripts/webpack.config.ts@rule_svelte.ejs +7 -0
  285. package/templates/default/scripts/webpack.config.ts@rule_tailwind.ejs +4 -0
  286. package/templates/default/scripts/webpack.config.ts@rule_vue.ejs +4 -0
  287. package/templates/default/scripts/webpack.config.ts@rule_wasm.ejs +8 -0
  288. package/templates/default/scripts/webpack.config.ts@ts-loader-compiler-options_vue.ejs +5 -0
  289. package/templates/default/scripts/webpack.config.ts@ts-loader-options_vue.ejs +5 -0
  290. package/templates/default/src/demo-vault-buttons.demo-vault.integration.test.ts.ejs +12 -0
  291. package/templates/default/src/demo-vault.no-app.integration.test.ts.ejs +18 -0
  292. package/templates/default/src/editor-extensions/sample-state-field.ts_dev-utils.ejs +56 -0
  293. package/templates/default/src/editor-extensions/sample-state-field.ts_standalone.ejs +60 -0
  294. package/templates/default/src/editor-extensions/sample-view-plugin.ts.ejs +66 -0
  295. package/templates/default/src/editor-extensions/sample-widget.ts.ejs +22 -0
  296. package/templates/default/src/editor-suggests/sample-editor-suggest.ts.ejs +42 -0
  297. package/templates/default/src/i18n/en/index.ts.ejs +10 -0
  298. package/templates/default/src/i18n/index.ts_i18next.ejs +21 -0
  299. package/templates/default/src/i18n/index.ts_typesafe-i18n.ejs +14 -0
  300. package/templates/default/src/i18n/locales/en.json.ejs +3 -0
  301. package/templates/default/src/lit-elements/sample-lit-element.ts.ejs +54 -0
  302. package/templates/default/src/main.test.ts.ejs +11 -0
  303. package/templates/default/src/main.test.ts@test-imports_vitest.ejs +6 -0
  304. package/templates/default/src/main.ts.ejs +4 -0
  305. package/templates/default/src/main.ts@import_css-modules.ejs +1 -0
  306. package/templates/default/src/main.ts@import_css.ejs +1 -0
  307. package/templates/default/src/main.ts@import_postcss.ejs +1 -0
  308. package/templates/default/src/main.ts@import_scss.ejs +1 -0
  309. package/templates/default/src/main.ts@import_tailwind.ejs +1 -0
  310. package/templates/default/src/modals/sample-form-modal.ts.ejs +35 -0
  311. package/templates/default/src/modals/sample-suggest-modal.ts.ejs +37 -0
  312. package/templates/default/src/plugin-settings-component.test.ts_demo.ejs +49 -0
  313. package/templates/default/src/plugin-settings-component.test.ts_demo@test-imports_vitest.ejs +5 -0
  314. package/templates/default/src/plugin-settings-component.test.ts_enhanced.ejs +41 -0
  315. package/templates/default/src/plugin-settings-component.test.ts_enhanced@test-imports_vitest.ejs +5 -0
  316. package/templates/default/src/plugin-settings-component.ts_demo.ejs +87 -0
  317. package/templates/default/src/plugin-settings-component.ts_enhanced.ejs +27 -0
  318. package/templates/default/src/plugin-settings-tab.ts_demo.ejs +286 -0
  319. package/templates/default/src/plugin-settings-tab.ts_enhanced.ejs +26 -0
  320. package/templates/default/src/plugin-settings.test.ts_demo.ejs +14 -0
  321. package/templates/default/src/plugin-settings.test.ts_demo@test-imports_vitest.ejs +6 -0
  322. package/templates/default/src/plugin-settings.ts_demo.ejs +64 -0
  323. package/templates/default/src/plugin-settings.ts_enhanced.ejs +3 -0
  324. package/templates/default/src/plugin.test.ts_jest.ejs +9 -0
  325. package/templates/default/src/plugin.test.ts_vitest.ejs +14 -0
  326. package/templates/default/src/plugin.ts_demo.ejs +316 -0
  327. package/templates/default/src/plugin.ts_demo@import_i18next.ejs +1 -0
  328. package/templates/default/src/plugin.ts_demo@import_lit.ejs +4 -0
  329. package/templates/default/src/plugin.ts_demo@import_preact.ejs +4 -0
  330. package/templates/default/src/plugin.ts_demo@import_react.ejs +4 -0
  331. package/templates/default/src/plugin.ts_demo@import_solid.ejs +4 -0
  332. package/templates/default/src/plugin.ts_demo@import_svelte.ejs +4 -0
  333. package/templates/default/src/plugin.ts_demo@import_typesafe-i18n.ejs +1 -0
  334. package/templates/default/src/plugin.ts_demo@import_vue.ejs +4 -0
  335. package/templates/default/src/plugin.ts_demo@import_wasm.ejs +1 -0
  336. package/templates/default/src/plugin.ts_demo@method_ui-view.ejs +7 -0
  337. package/templates/default/src/plugin.ts_demo@onload_i18next.ejs +2 -0
  338. package/templates/default/src/plugin.ts_demo@onload_lit.ejs +4 -0
  339. package/templates/default/src/plugin.ts_demo@onload_preact.ejs +4 -0
  340. package/templates/default/src/plugin.ts_demo@onload_react.ejs +4 -0
  341. package/templates/default/src/plugin.ts_demo@onload_solid.ejs +4 -0
  342. package/templates/default/src/plugin.ts_demo@onload_svelte.ejs +4 -0
  343. package/templates/default/src/plugin.ts_demo@onload_typesafe-i18n.ejs +8 -0
  344. package/templates/default/src/plugin.ts_demo@onload_vue.ejs +4 -0
  345. package/templates/default/src/plugin.ts_demo@onload_wasm.ejs +2 -0
  346. package/templates/default/src/plugin.ts_enhanced.ejs +72 -0
  347. package/templates/default/src/plugin.ts_enhanced@import2_codemirror.ejs +3 -0
  348. package/templates/default/src/plugin.ts_enhanced@import2_i18next.ejs +2 -0
  349. package/templates/default/src/plugin.ts_enhanced@import2_lit.ejs +4 -0
  350. package/templates/default/src/plugin.ts_enhanced@import2_preact.ejs +4 -0
  351. package/templates/default/src/plugin.ts_enhanced@import2_react.ejs +4 -0
  352. package/templates/default/src/plugin.ts_enhanced@import2_solid.ejs +4 -0
  353. package/templates/default/src/plugin.ts_enhanced@import2_svelte.ejs +4 -0
  354. package/templates/default/src/plugin.ts_enhanced@import2_typesafe-i18n.ejs +2 -0
  355. package/templates/default/src/plugin.ts_enhanced@import2_vue.ejs +4 -0
  356. package/templates/default/src/plugin.ts_enhanced@import2_wasm.ejs +1 -0
  357. package/templates/default/src/plugin.ts_enhanced@method_ui-view.ejs +7 -0
  358. package/templates/default/src/plugin.ts_enhanced@onload_codemirror.ejs +4 -0
  359. package/templates/default/src/plugin.ts_enhanced@onload_i18next.ejs +2 -0
  360. package/templates/default/src/plugin.ts_enhanced@onload_lit.ejs +4 -0
  361. package/templates/default/src/plugin.ts_enhanced@onload_preact.ejs +4 -0
  362. package/templates/default/src/plugin.ts_enhanced@onload_react.ejs +4 -0
  363. package/templates/default/src/plugin.ts_enhanced@onload_solid.ejs +4 -0
  364. package/templates/default/src/plugin.ts_enhanced@onload_svelte.ejs +4 -0
  365. package/templates/default/src/plugin.ts_enhanced@onload_typesafe-i18n.ejs +8 -0
  366. package/templates/default/src/plugin.ts_enhanced@onload_vue.ejs +4 -0
  367. package/templates/default/src/plugin.ts_enhanced@onload_wasm.ejs +2 -0
  368. package/templates/default/src/plugin.ts_standalone.ejs +56 -0
  369. package/templates/default/src/plugin.ts_standalone@import_codemirror.ejs +3 -0
  370. package/templates/default/src/plugin.ts_standalone@import_i18next.ejs +1 -0
  371. package/templates/default/src/plugin.ts_standalone@import_lit.ejs +4 -0
  372. package/templates/default/src/plugin.ts_standalone@import_preact.ejs +4 -0
  373. package/templates/default/src/plugin.ts_standalone@import_react.ejs +4 -0
  374. package/templates/default/src/plugin.ts_standalone@import_solid.ejs +4 -0
  375. package/templates/default/src/plugin.ts_standalone@import_svelte.ejs +4 -0
  376. package/templates/default/src/plugin.ts_standalone@import_typesafe-i18n.ejs +1 -0
  377. package/templates/default/src/plugin.ts_standalone@import_vue.ejs +4 -0
  378. package/templates/default/src/plugin.ts_standalone@import_wasm.ejs +1 -0
  379. package/templates/default/src/plugin.ts_standalone@method_ui-view.ejs +7 -0
  380. package/templates/default/src/plugin.ts_standalone@onload_codemirror.ejs +4 -0
  381. package/templates/default/src/plugin.ts_standalone@onload_i18next.ejs +2 -0
  382. package/templates/default/src/plugin.ts_standalone@onload_lit.ejs +4 -0
  383. package/templates/default/src/plugin.ts_standalone@onload_preact.ejs +4 -0
  384. package/templates/default/src/plugin.ts_standalone@onload_react.ejs +4 -0
  385. package/templates/default/src/plugin.ts_standalone@onload_solid.ejs +4 -0
  386. package/templates/default/src/plugin.ts_standalone@onload_svelte.ejs +4 -0
  387. package/templates/default/src/plugin.ts_standalone@onload_typesafe-i18n.ejs +8 -0
  388. package/templates/default/src/plugin.ts_standalone@onload_vue.ejs +4 -0
  389. package/templates/default/src/plugin.ts_standalone@onload_wasm.ejs +2 -0
  390. package/templates/default/src/preact-components/sample-preact-component.tsx_dev-utils.ejs +47 -0
  391. package/templates/default/src/preact-components/sample-preact-component.tsx_standalone.ejs +47 -0
  392. package/templates/default/src/react-components/sample-react-component.tsx_dev-utils.ejs +35 -0
  393. package/templates/default/src/react-components/sample-react-component.tsx_standalone.ejs +47 -0
  394. package/templates/default/src/settings.ts.ejs +32 -0
  395. package/templates/default/src/solid-components/sample-solid-component.tsx_dev-utils.ejs +47 -0
  396. package/templates/default/src/solid-components/sample-solid-component.tsx_standalone.ejs +47 -0
  397. package/templates/default/src/styles/css-modules.d.ts.ejs +4 -0
  398. package/templates/default/src/styles/main.css_dev-utils.ejs +17 -0
  399. package/templates/default/src/styles/main.css_dev-utils@content_tailwind.ejs +1 -0
  400. package/templates/default/src/styles/main.css_standalone.ejs +11 -0
  401. package/templates/default/src/styles/main.css_standalone@content_tailwind.ejs +1 -0
  402. package/templates/default/src/styles/main.module.css.ejs +3 -0
  403. package/templates/default/src/styles/main.scss_dev-utils.ejs +16 -0
  404. package/templates/default/src/styles/main.scss_standalone.ejs +10 -0
  405. package/templates/default/src/styles/styles.d.ts.ejs +4 -0
  406. package/templates/default/src/svelte-components/sample-svelte-component.d.ts.ejs +7 -0
  407. package/templates/default/src/svelte-components/sample-svelte-component.svelte.ejs +24 -0
  408. package/templates/default/src/views/sample-lit-view.ts.ejs +30 -0
  409. package/templates/default/src/views/sample-lit-view.ts@lint-register-element_dev-utils.ejs +1 -0
  410. package/templates/default/src/views/sample-preact-view.tsx_dev-utils.ejs +45 -0
  411. package/templates/default/src/views/sample-preact-view.tsx_standalone.ejs +42 -0
  412. package/templates/default/src/views/sample-react-view.tsx_dev-utils.ejs +47 -0
  413. package/templates/default/src/views/sample-react-view.tsx_standalone.ejs +49 -0
  414. package/templates/default/src/views/sample-solid-view.tsx_dev-utils.ejs +46 -0
  415. package/templates/default/src/views/sample-solid-view.tsx_standalone.ejs +46 -0
  416. package/templates/default/src/views/sample-svelte-view.ts.ejs +47 -0
  417. package/templates/default/src/views/sample-view.ts.ejs +37 -0
  418. package/templates/default/src/views/sample-vue-view.ts.ejs +34 -0
  419. package/templates/default/src/vue-components/sample-vue-component.d.ts.ejs +6 -0
  420. package/templates/default/src/vue-components/sample-vue-component.vue.ejs +25 -0
  421. package/templates/default/src/wasm/README.md.ejs +29 -0
  422. package/templates/default/src/wasm/answer.ts_esbuild.ejs +23 -0
  423. package/templates/default/src/wasm/answer.ts_parcel.ejs +29 -0
  424. package/templates/default/src/wasm/answer.ts_rollup.ejs +19 -0
  425. package/templates/default/src/wasm/answer.ts_vite.ejs +29 -0
  426. package/templates/default/src/wasm/answer.ts_webpack.ejs +29 -0
  427. package/templates/default/src/wasm/module.wasm +0 -0
  428. package/templates/default/src/wasm/module.wat.ejs +12 -0
  429. package/templates/default/src/wasm/sample-command.ts.ejs +33 -0
  430. package/templates/default/src/wasm.d.ts_esbuild.ejs +12 -0
  431. package/templates/default/src/wasm.d.ts_parcel.ejs +7 -0
  432. package/templates/default/src/wasm.d.ts_rollup.ejs +8 -0
  433. package/templates/default/src/wasm.d.ts_vite.ejs +8 -0
  434. package/templates/default/src/wasm.d.ts_webpack.ejs +7 -0
  435. package/templates/default/tsconfig.json_dev-utils.ejs +34 -0
  436. package/templates/default/tsconfig.json_dev-utils@compiler-options_i18next.ejs +1 -0
  437. package/templates/default/tsconfig.json_dev-utils@compiler-options_lit.ejs +2 -0
  438. package/templates/default/tsconfig.json_dev-utils@compiler-options_preact.ejs +2 -0
  439. package/templates/default/tsconfig.json_dev-utils@compiler-options_react.ejs +1 -0
  440. package/templates/default/tsconfig.json_dev-utils@compiler-options_solid.ejs +2 -0
  441. package/templates/default/tsconfig.json_dev-utils@include_has-e2e.ejs +1 -0
  442. package/templates/default/tsconfig.json_dev-utils@include_svelte.ejs +1 -0
  443. package/templates/default/tsconfig.json_dev-utils@include_vue.ejs +1 -0
  444. package/templates/default/tsconfig.json_dev-utils@types_jest.ejs +2 -0
  445. package/templates/default/tsconfig.json_dev-utils@types_svelte.ejs +2 -0
  446. package/templates/default/tsconfig.json_dev-utils@types_wdio-obsidian.ejs +5 -0
  447. package/templates/default/tsconfig.json_dev-utils@types_with-unofficial.ejs +2 -0
  448. package/templates/default/tsconfig.json_standalone.ejs +47 -0
  449. package/templates/default/tsconfig.json_standalone@compiler-options_i18next.ejs +1 -0
  450. package/templates/default/tsconfig.json_standalone@compiler-options_lit.ejs +2 -0
  451. package/templates/default/tsconfig.json_standalone@compiler-options_preact.ejs +2 -0
  452. package/templates/default/tsconfig.json_standalone@compiler-options_react.ejs +1 -0
  453. package/templates/default/tsconfig.json_standalone@compiler-options_solid.ejs +2 -0
  454. package/templates/default/tsconfig.json_standalone@include-extra_preact.ejs +2 -0
  455. package/templates/default/tsconfig.json_standalone@include-extra_react.ejs +2 -0
  456. package/templates/default/tsconfig.json_standalone@include-extra_solid.ejs +2 -0
  457. package/templates/default/tsconfig.json_standalone@include_has-e2e.ejs +1 -0
  458. package/templates/default/tsconfig.json_standalone@include_svelte.ejs +1 -0
  459. package/templates/default/tsconfig.json_standalone@include_vue.ejs +1 -0
  460. package/templates/default/tsconfig.json_standalone@types_jest.ejs +2 -0
  461. package/templates/default/tsconfig.json_standalone@types_svelte.ejs +2 -0
  462. package/templates/default/tsconfig.json_standalone@types_wdio-obsidian.ejs +5 -0
  463. package/templates/default/tsconfig.json_standalone@types_with-unofficial.ejs +2 -0
  464. package/templates/default/versions.json.ejs +3 -0
  465. package/templates/default/vite.config.ts.ejs +3 -0
  466. package/templates/default/vitest.config.ts_dev-utils.ejs +1 -0
  467. package/templates/default/vitest.config.ts_standalone.ejs +55 -0
  468. package/templates/default/vitest.config.ts_standalone@jsx_solid.ejs +11 -0
  469. package/templates/default/wdio.conf.ts.ejs +21 -0
  470. package/templates/default/webpack.config.ts.ejs +3 -0
@@ -0,0 +1,8 @@
1
+ import { execSync } from 'node:child_process';
2
+ import process from 'node:process';
3
+
4
+ try {
5
+ execSync('obsidian-test', { stdio: 'inherit' });
6
+ } catch {
7
+ process.exit(1);
8
+ }
@@ -0,0 +1,8 @@
1
+ import { execSync } from 'node:child_process';
2
+ import process from 'node:process';
3
+
4
+ try {
5
+ execSync('wdio run wdio.conf.ts', { stdio: 'inherit' });
6
+ } catch {
7
+ process.exit(1);
8
+ }
@@ -0,0 +1,8 @@
1
+ import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
2
+ import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
3
+
4
+ await wrapCliTask(() =>
5
+ test({
6
+ projects: ['integration-tests:android']
7
+ })
8
+ );
@@ -0,0 +1,8 @@
1
+ import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
2
+ import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
3
+
4
+ await wrapCliTask(() =>
5
+ test({
6
+ projects: ['integration-tests:demo-vault']
7
+ })
8
+ );
@@ -0,0 +1,8 @@
1
+ import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
2
+ import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
3
+
4
+ await wrapCliTask(() =>
5
+ test({
6
+ projects: ['integration-tests:desktop-performance']
7
+ })
8
+ );
@@ -0,0 +1,8 @@
1
+ import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
2
+ import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
3
+
4
+ await wrapCliTask(() =>
5
+ test({
6
+ projects: ['integration-tests:desktop']
7
+ })
8
+ );
@@ -0,0 +1,8 @@
1
+ import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
2
+ import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
3
+
4
+ await wrapCliTask(() =>
5
+ test({
6
+ projects: ['integration-tests:no-app']
7
+ })
8
+ );
@@ -0,0 +1,22 @@
1
+ import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
2
+ import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
3
+
4
+ // `integration-tests:desktop` and `integration-tests:android` are declared by
5
+ // `defineObsidianPluginVitestConfig` too, but they are deliberately not run here: the first drives a real
6
+ // Obsidian install and the second needs a provisioned Android emulator, so a freshly generated project
7
+ // Would fail its own `test:integration` on any machine that has neither. Add them once you have set those
8
+ // Up. Run them one at a time — the integration projects share a single Obsidian and a single device.
9
+ //
10
+ // `integration-tests:desktop-performance` is declared for every plugin as well, but it is left out for a different reason, and it stays out even once you have a desktop Obsidian set up.
11
+ // The reason is the fixture rather than the cost: a perf suite needs its own generated, populated vault, sized through env vars, and this aggregate's small temporary vault is the wrong one.
12
+ // The 600 s in their config is a timeout, not a duration — measured end to end, most perf suites finish in seconds, and only one that generates tens of thousands of notes takes minutes.
13
+ // No routine command runs them, so something else has to: run the dedicated `test:integration:desktop:performance` script on a periodic sweep, weekly for example, which is also how to reach them by hand.
14
+ // Adding them to this aggregate is drift, not a gap to close.
15
+ await wrapCliTask(async () => {
16
+ await test({
17
+ projects: ['integration-tests:no-app']
18
+ });
19
+ await test({
20
+ projects: ['integration-tests:demo-vault']
21
+ });
22
+ });
@@ -0,0 +1 @@
1
+ <%- render('tool') -%>
@@ -0,0 +1,13 @@
1
+ import { execSync } from 'node:child_process';
2
+ import process from 'node:process';
3
+
4
+ // Jest runs the suite as ESM (see `jest.config.ts`), and its ESM loader is built on `vm.SyntheticModule`,
5
+ // which Node only exposes under `--experimental-vm-modules`. Without the flag every suite fails to load
6
+ // with "Must use import to load ES Module". Appended so an inherited NODE_OPTIONS survives.
7
+ const nodeOptions = `${process.env['NODE_OPTIONS'] ?? ''} --experimental-vm-modules`.trim();
8
+
9
+ try {
10
+ execSync('jest --watch', { env: { ...process.env, NODE_OPTIONS: nodeOptions }, stdio: 'inherit' });
11
+ } catch {
12
+ process.exit(1);
13
+ }
@@ -0,0 +1,8 @@
1
+ import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
2
+ import { testWatch } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
3
+
4
+ await wrapCliTask(() =>
5
+ testWatch({
6
+ projects: ['unit-tests']
7
+ })
8
+ );
@@ -0,0 +1 @@
1
+ <%- render('tool') -%>
@@ -0,0 +1,13 @@
1
+ import { execSync } from 'node:child_process';
2
+ import process from 'node:process';
3
+
4
+ // Jest runs the suite as ESM (see `jest.config.ts`), and its ESM loader is built on `vm.SyntheticModule`,
5
+ // which Node only exposes under `--experimental-vm-modules`. Without the flag every suite fails to load
6
+ // with "Must use import to load ES Module". Appended so an inherited NODE_OPTIONS survives.
7
+ const nodeOptions = `${process.env['NODE_OPTIONS'] ?? ''} --experimental-vm-modules`.trim();
8
+
9
+ try {
10
+ execSync('jest --watch', { env: { ...process.env, NODE_OPTIONS: nodeOptions }, stdio: 'inherit' });
11
+ } catch {
12
+ process.exit(1);
13
+ }
@@ -0,0 +1,8 @@
1
+ import { execSync } from 'node:child_process';
2
+ import process from 'node:process';
3
+
4
+ try {
5
+ execSync('vitest', { stdio: 'inherit' });
6
+ } catch {
7
+ process.exit(1);
8
+ }
@@ -0,0 +1 @@
1
+ <%- render('tool') -%>
@@ -0,0 +1,13 @@
1
+ import { execSync } from 'node:child_process';
2
+ import process from 'node:process';
3
+
4
+ // Jest runs the suite as ESM (see `jest.config.ts`), and its ESM loader is built on `vm.SyntheticModule`,
5
+ // which Node only exposes under `--experimental-vm-modules`. Without the flag every suite fails to load
6
+ // with "Must use import to load ES Module". Appended so an inherited NODE_OPTIONS survives.
7
+ const nodeOptions = `${process.env['NODE_OPTIONS'] ?? ''} --experimental-vm-modules`.trim();
8
+
9
+ try {
10
+ execSync('jest', { env: { ...process.env, NODE_OPTIONS: nodeOptions }, stdio: 'inherit' });
11
+ } catch {
12
+ process.exit(1);
13
+ }
@@ -0,0 +1,8 @@
1
+ import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
2
+ import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
3
+
4
+ await wrapCliTask(() =>
5
+ test({
6
+ projects: ['unit-tests']
7
+ })
8
+ );
@@ -0,0 +1 @@
1
+ <%- render('tool') -%>
@@ -0,0 +1,13 @@
1
+ import { execSync } from 'node:child_process';
2
+ import process from 'node:process';
3
+
4
+ // Jest runs the suite as ESM (see `jest.config.ts`), and its ESM loader is built on `vm.SyntheticModule`,
5
+ // which Node only exposes under `--experimental-vm-modules`. Without the flag every suite fails to load
6
+ // with "Must use import to load ES Module". Appended so an inherited NODE_OPTIONS survives.
7
+ const nodeOptions = `${process.env['NODE_OPTIONS'] ?? ''} --experimental-vm-modules`.trim();
8
+
9
+ try {
10
+ execSync('jest', { env: { ...process.env, NODE_OPTIONS: nodeOptions }, stdio: 'inherit' });
11
+ } catch {
12
+ process.exit(1);
13
+ }
@@ -0,0 +1,8 @@
1
+ import { execSync } from 'node:child_process';
2
+ import process from 'node:process';
3
+
4
+ try {
5
+ execSync('vitest run', { stdio: 'inherit' });
6
+ } catch {
7
+ process.exit(1);
8
+ }
@@ -0,0 +1,10 @@
1
+ import process from 'node:process';
2
+ import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
3
+ import {
4
+ parseVersionArguments,
5
+ updateVersion
6
+ } from 'obsidian-dev-utils/script-utils/version';
7
+
8
+ const [, , ...$arguments] = process.argv;
9
+ const { options, versionUpdateType } = parseVersionArguments($arguments);
10
+ await wrapCliTask(() => updateVersion(versionUpdateType, options));
@@ -0,0 +1,317 @@
1
+ import { execSync } from 'node:child_process';
2
+ import {
3
+ copyFileSync,
4
+ existsSync,
5
+ mkdirSync,
6
+ readFileSync,
7
+ rmSync,
8
+ writeFileSync
9
+ } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ import process from 'node:process';
12
+ import { createInterface } from 'node:readline/promises';
13
+
14
+ interface Manifest {
15
+ minAppVersion: string;
16
+ version: string;
17
+ }
18
+
19
+ interface PackageJson {
20
+ version?: string;
21
+ }
22
+
23
+ interface PackageLockJson {
24
+ packages?: Record<string, { version?: string }>;
25
+ version?: string;
26
+ }
27
+
28
+ const versionUpdateType = process.argv[2];
29
+
30
+ if (!versionUpdateType) {
31
+ throw new Error('Usage: jiti scripts/version.ts <major|minor|patch|beta|x.y.z>');
32
+ }
33
+
34
+ validate(versionUpdateType);
35
+ checkInstalled('git --version', 'Git is not installed. Please install it from https://git-scm.com/');
36
+ checkRepoClean();
37
+ checkInstalled('gh --version', 'GitHub CLI is not installed. Please install it from https://cli.github.com/');
38
+
39
+ runScript('format:check');
40
+ runScript('spellcheck');
41
+ runScript('lint:md');
42
+ runScript('build');
43
+ runScript('lint');
44
+ runScriptOptional('test');
45
+
46
+ const newVersion = getNewVersion(versionUpdateType);
47
+ updateVersionInFiles(newVersion);
48
+ updateVersionInFilesForPlugin(newVersion);
49
+ await updateChangelog(newVersion);
50
+ addUpdatedFilesToGit(newVersion);
51
+ addGitTag(newVersion);
52
+ gitPush();
53
+ await publishGitHubRelease(newVersion);
54
+
55
+ function validate(type: string): void {
56
+ if (!['major', 'minor', 'patch', 'beta'].includes(type) && !/^\d+\.\d+\.\d+(?:-[\w\d.-]+)?$/.test(type)) {
57
+ throw new Error('Invalid version update type. Please use \'major\', \'minor\', \'patch\', \'beta\', or \'x.y.z[-suffix]\' format.');
58
+ }
59
+ }
60
+
61
+ function checkInstalled(command: string, errorMessage: string): void {
62
+ try {
63
+ execSync(command, { stdio: 'pipe' });
64
+ } catch {
65
+ throw new Error(errorMessage);
66
+ }
67
+ }
68
+
69
+ function checkRepoClean(): void {
70
+ const stdout = execSync('git status --porcelain --untracked-files=all', { encoding: 'utf-8' });
71
+ if (stdout.trim()) {
72
+ throw new Error('Git repository is not clean. Please commit or stash your changes before releasing.');
73
+ }
74
+ }
75
+
76
+ function runScript(name: string): void {
77
+ const pkg = JSON.parse(readFileSync('package.json', 'utf-8')) as { scripts?: Record<string, string> };
78
+ if (pkg.scripts?.[name]) {
79
+ execSync(`npm run ${name}`, { stdio: 'inherit' });
80
+ }
81
+ }
82
+
83
+ function runScriptOptional(name: string): void {
84
+ const pkg = JSON.parse(readFileSync('package.json', 'utf-8')) as { scripts?: Record<string, string> };
85
+ if (pkg.scripts?.[name]) {
86
+ execSync(`npm run ${name}`, { stdio: 'inherit' });
87
+ }
88
+ }
89
+
90
+ function getNewVersion(type: string): string {
91
+ if (/^\d+\.\d+\.\d+(?:-[\w\d.-]+)?$/.test(type)) {
92
+ return type;
93
+ }
94
+
95
+ const pkg = JSON.parse(readFileSync('package.json', 'utf-8')) as PackageJson;
96
+ const currentVersion = pkg.version ?? '0.0.0';
97
+ const match = /^(?<Major>\d+)\.(?<Minor>\d+)\.(?<Patch>\d+)(?:-beta\.(?<Beta>\d+))?$/.exec(currentVersion);
98
+ if (!match?.groups) {
99
+ throw new Error(`Invalid current version format: ${currentVersion}`);
100
+ }
101
+
102
+ let major = Number(match.groups.Major);
103
+ let minor = Number(match.groups.Minor);
104
+ let patch = Number(match.groups.Patch);
105
+ let beta = Number(match.groups.Beta ?? '');
106
+
107
+ switch (type) {
108
+ case 'beta':
109
+ if (beta === 0) {
110
+ patch++;
111
+ }
112
+ beta++;
113
+ break;
114
+ case 'major':
115
+ major++;
116
+ minor = 0;
117
+ patch = 0;
118
+ beta = 0;
119
+ break;
120
+ case 'minor':
121
+ minor++;
122
+ patch = 0;
123
+ beta = 0;
124
+ break;
125
+ case 'patch':
126
+ if (beta === 0) {
127
+ patch++;
128
+ } else {
129
+ beta = 0;
130
+ }
131
+ break;
132
+ }
133
+
134
+ return `${String(major)}.${String(minor)}.${String(patch)}${beta > 0 ? `-beta.${String(beta)}` : ''}`;
135
+ }
136
+
137
+ function updateVersionInFiles(version: string): void {
138
+ editJson<PackageJson>('package.json', (pkg) => {
139
+ pkg.version = version;
140
+ });
141
+ editJsonIfExists<PackageLockJson>('package-lock.json', (lock) => {
142
+ lock.version = version;
143
+ const defaultPkg = lock.packages?.[''];
144
+ if (defaultPkg) {
145
+ defaultPkg.version = version;
146
+ }
147
+ });
148
+ editJsonIfExists<PackageLockJson>('npm-shrinkwrap.json', (lock) => {
149
+ lock.version = version;
150
+ const defaultPkg = lock.packages?.[''];
151
+ if (defaultPkg) {
152
+ defaultPkg.version = version;
153
+ }
154
+ });
155
+ }
156
+
157
+ function updateVersionInFilesForPlugin(version: string): void {
158
+ if (version.includes('beta')) {
159
+ copyFileSync('manifest.json', 'manifest-beta.json');
160
+ editJson<Manifest>('manifest-beta.json', (m) => {
161
+ m.version = version;
162
+ });
163
+ } else {
164
+ const response = fetchSync('https://api.github.com/repos/obsidianmd/obsidian-releases/releases/latest');
165
+ const latestObsidianVersion = (JSON.parse(response) as { name?: string }).name;
166
+
167
+ editJson<Manifest>('manifest.json', (m) => {
168
+ if (latestObsidianVersion) {
169
+ m.minAppVersion = latestObsidianVersion;
170
+ }
171
+ m.version = version;
172
+ });
173
+
174
+ editJson<Record<string, string>>('versions.json', (v) => {
175
+ const manifest = JSON.parse(readFileSync('manifest.json', 'utf-8')) as Manifest;
176
+ v[version] = manifest.minAppVersion;
177
+ });
178
+
179
+ if (existsSync('manifest-beta.json')) {
180
+ rmSync('manifest-beta.json');
181
+ }
182
+ }
183
+
184
+ const distBuild = 'dist/build';
185
+ if (!existsSync(distBuild)) {
186
+ mkdirSync(distBuild, { recursive: true });
187
+ }
188
+ copyFileSync('manifest.json', join(distBuild, 'manifest.json'));
189
+ }
190
+
191
+ async function updateChangelog(version: string): Promise<void> {
192
+ const changelogPath = 'CHANGELOG.md';
193
+ let previousLines: string[] = [];
194
+ if (existsSync(changelogPath)) {
195
+ const content = readFileSync(changelogPath, 'utf-8');
196
+ previousLines = content.split('\n').slice(2);
197
+ if (previousLines.at(-1) === '') {
198
+ previousLines.pop();
199
+ }
200
+ }
201
+
202
+ const lastTag = (previousLines[0] ?? '').replace('## ', '');
203
+ const commitRange = lastTag ? `${lastTag}..HEAD` : 'HEAD';
204
+ const commitMessagesStr = execSync(`git log ${commitRange} --format=%B --first-parent -z`, { encoding: 'utf-8' });
205
+ const commitMessages = commitMessagesStr.split('\0').filter(Boolean).map((s) => s.split(/\r?\n/).filter(Boolean).join(' '));
206
+
207
+ let changelog = `# CHANGELOG\n\n## ${version}\n\n`;
208
+ for (const msg of commitMessages) {
209
+ changelog += `- ${msg}\n`;
210
+ }
211
+ if (previousLines.length > 0) {
212
+ changelog += '\n';
213
+ for (const line of previousLines) {
214
+ changelog += `${line}\n`;
215
+ }
216
+ }
217
+ writeFileSync(changelogPath, changelog, 'utf-8');
218
+
219
+ try {
220
+ execSync('code --version', { stdio: 'pipe' });
221
+ console.log(`Please update ${changelogPath}. Close Visual Studio Code when done...`);
222
+ execSync(`code -w ${changelogPath}`, { stdio: 'inherit' });
223
+ } catch {
224
+ const rl = createInterface(process.stdin, process.stdout);
225
+ await rl.question(`Please update ${changelogPath}. Press Enter when done...`);
226
+ rl.close();
227
+ }
228
+ }
229
+
230
+ function addUpdatedFilesToGit(version: string): void {
231
+ execSync('git add --all', { stdio: 'pipe' });
232
+ execSync(`git commit -m "chore: release ${version}" --allow-empty`, { stdio: 'pipe' });
233
+ }
234
+
235
+ function addGitTag(version: string): void {
236
+ execSync(`git tag -a ${version} -m ${version} --force`, { stdio: 'pipe' });
237
+ }
238
+
239
+ function gitPush(): void {
240
+ execSync('git push --follow-tags --force', { stdio: 'pipe' });
241
+ }
242
+
243
+ async function publishGitHubRelease(version: string): Promise<void> {
244
+ const buildFolder = 'dist/build';
245
+ const files: string[] = [];
246
+ if (existsSync(buildFolder)) {
247
+ const { readdirSync } = await import('node:fs');
248
+ for (const f of readdirSync(buildFolder)) {
249
+ files.push(join(buildFolder, f));
250
+ }
251
+ }
252
+
253
+ const releaseNotes = getReleaseNotes(version);
254
+
255
+ execSync(
256
+ [
257
+ 'gh',
258
+ 'release',
259
+ 'create',
260
+ version,
261
+ ...files,
262
+ '--title',
263
+ `v${version}`,
264
+ ...(version.includes('beta') ? ['--prerelease'] : []),
265
+ '--notes-file',
266
+ '-'
267
+ ].join(' '),
268
+ {
269
+ input: releaseNotes,
270
+ stdio: ['pipe', 'inherit', 'inherit']
271
+ }
272
+ );
273
+ }
274
+
275
+ function getReleaseNotes(version: string): string {
276
+ const changelogPath = 'CHANGELOG.md';
277
+ let releaseNotes = '';
278
+ if (existsSync(changelogPath)) {
279
+ const content = readFileSync(changelogPath, 'utf-8');
280
+ const escaped = version.replaceAll('.', '\\.');
281
+ const match = new RegExp(`\n## ${escaped}\n\n((.|\n)+?)\n\n##`).exec(content);
282
+ if (match?.[1]) {
283
+ releaseNotes = `${match[1]}\n\n`;
284
+ }
285
+ }
286
+
287
+ const tags = execSync('git tag --sort=-creatordate', { encoding: 'utf-8' }).split(/\r?\n/);
288
+ const previousVersion = tags[1];
289
+ const repoUrl = execSync('gh repo view --json url -q .url', { encoding: 'utf-8' }).trim();
290
+ const changesUrl = previousVersion
291
+ ? `${repoUrl}/compare/${previousVersion}...${version}`
292
+ : `${repoUrl}/commits/${version}`;
293
+
294
+ releaseNotes += `**Full Changelog**: ${changesUrl}`;
295
+ return releaseNotes;
296
+ }
297
+
298
+ // The type parameter appears once in the signature but is not useless: every call site pins it
299
+ // (`editJson<PackageJson>(...)`) and it is what types the callback's `data`. Dropping it would push an
300
+ // `any` into all of them.
301
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- Load-bearing at the call sites, which name it explicitly.
302
+ function editJson<T>(filePath: string, editFn: (data: T) => void): void {
303
+ const data = JSON.parse(readFileSync(filePath, 'utf-8')) as T;
304
+ editFn(data);
305
+ writeFileSync(filePath, `${JSON.stringify(data, null, '\t')}\n`);
306
+ }
307
+
308
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- Load-bearing at the call sites, which name it explicitly.
309
+ function editJsonIfExists<T>(filePath: string, editFn: (data: T) => void): void {
310
+ if (existsSync(filePath)) {
311
+ editJson(filePath, editFn);
312
+ }
313
+ }
314
+
315
+ function fetchSync(url: string): string {
316
+ return execSync(`node -e "fetch('${url}').then(r=>r.text()).then(t=>process.stdout.write(t))"`, { encoding: 'utf-8' });
317
+ }
@@ -0,0 +1,76 @@
1
+ <%# Sorted as one group: the per-answer partials contribute imports in question-registration order, -%>
2
+ <%# which is not the order an import-sorting lint rule wants. See `sortImports` in `src/templates.ts`. -%>
3
+ <%- sortImports(`import { builtinModules } from 'node:module';
4
+ import process from 'node:process';
5
+ import { defineConfig } from 'vite';
6
+ ${render('import')}`) -%>
7
+
8
+ const isProduction = process.env['BUILD'] === 'production';
9
+ const distFolder = process.env['DIST_FOLDER'] ?? (isProduction ? 'dist/build' : 'dist/dev');
10
+
11
+ const EXTERNAL = [
12
+ 'obsidian',
13
+ 'electron',
14
+ '@codemirror/autocomplete',
15
+ '@codemirror/collab',
16
+ '@codemirror/commands',
17
+ '@codemirror/language',
18
+ '@codemirror/lint',
19
+ '@codemirror/search',
20
+ '@codemirror/state',
21
+ '@codemirror/view',
22
+ '@lezer/common',
23
+ '@lezer/highlight',
24
+ '@lezer/lr',
25
+ 'esbuild',
26
+ 'eslint',
27
+ ...builtinModules
28
+ ];
29
+
30
+ <%# Each per-answer plugin partial ends its entry with a comma so two of them concatenate into a valid -%>
31
+ <%# list; the last entry of the array must not carry one. Stripped here rather than by making every -%>
32
+ <%# partial know whether it is last. -%>
33
+ <% const plugins = render('plugin'); -%>
34
+ export const config = defineConfig({
35
+ build: {
36
+ // An Obsidian release ships `main.js` and `styles.css` and nothing else, so ANY asset vite emits
37
+ // Beside the bundle is a file the plugin will look for and not find once it is installed. Inlining
38
+ // Every one of them is the only shape that survives that: unconditional rather than tied to any
39
+ // Answer, because which assets a `src/` comes to import is not a property of the answers.
40
+ assetsInlineLimit: Number.MAX_SAFE_INTEGER,
41
+ <%- render('lint-empty-out-dir') -%>
42
+ emptyOutDir: false,
43
+ lib: {
44
+ // Obsidian loads a plugin's stylesheet from `styles.css` and nothing else. Vite's lib mode names
45
+ // The CSS asset after the package by default, so without this the emitted file is
46
+ // `<pluginId>.css` -- shipped, and never read. Vite appends the extension, so the value is the
47
+ // Stem alone.
48
+ cssFileName: 'styles',
49
+ entry: 'src/main.ts',
50
+ fileName: () => 'main.js',
51
+ formats: ['cjs']
52
+ },
53
+ minify: isProduction,
54
+ <%- render('lint-out-dir') -%>
55
+ outDir: distFolder,
56
+ rollupOptions: {
57
+ external: EXTERNAL,
58
+ output: {
59
+ banner: `/*
60
+ THIS IS A GENERATED/BUNDLED FILE BY VITE
61
+ if you want to view the source, please visit the github repository of this plugin
62
+ */
63
+ `,
64
+ exports: 'default',
65
+ // An Obsidian release ships `main.js` and nothing beside it, and lib mode inlines dynamic imports
66
+ // Only for the `umd` and `iife` formats -- under `cjs` each one becomes a sibling chunk that
67
+ // `main.js` then loads by name at runtime.
68
+ inlineDynamicImports: true
69
+ }
70
+ },
71
+ sourcemap: isProduction ? false : 'inline'
72
+ },
73
+ plugins: [
74
+ <%- plugins.replace(/,(?<Trailing>\s*)$/, '$<Trailing>') -%>
75
+ ]
76
+ });
@@ -0,0 +1 @@
1
+ import preact from '@preact/preset-vite';
@@ -0,0 +1 @@
1
+ import react from '@vitejs/plugin-react';
@@ -0,0 +1 @@
1
+ import solid from 'vite-plugin-solid';
@@ -0,0 +1 @@
1
+ import { svelte } from '@sveltejs/vite-plugin-svelte';
@@ -0,0 +1 @@
1
+ import vue from '@vitejs/plugin-vue';
@@ -0,0 +1 @@
1
+ // eslint-disable-next-line unicorn/name-replacements -- `emptyOutDir` is vite's own option name.
@@ -0,0 +1 @@
1
+ // eslint-disable-next-line unicorn/name-replacements -- `outDir` is vite's own option name.