@mnaoumov/create-obsidian-plugin 1.1.0 → 1.3.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.
- package/README.md +16 -334
- package/dist/main.js +903 -803
- package/package.json +16 -5
- package/src/main.ts +17 -15
- package/templates/default/{CONTRIBUTING.md.ejs → (contributing)/CONTRIBUTING.md.ejs} +1 -0
- package/templates/default/(contributing)/CONTRIBUTING.md@filing_bug-and-feature.ejs +6 -0
- package/templates/default/{cspell.json.ejs → (lint)/cspell.json.ejs} +1 -0
- package/templates/default/(readme)/README.md.ejs +38 -0
- package/templates/default/(readme)/README.md@preset_framework.ejs +6 -0
- package/templates/default/(readme)/README.md@support_bug-and-feature.ejs +11 -0
- package/templates/default/(readme)/README.md@support_bug-and-feature@bug-report_has-bug-report-command.ejs +2 -0
- package/templates/default/.github/ISSUE_TEMPLATE/bug_report.yml.ejs +62 -24
- package/templates/default/scripts/{markdownlint-cli2-config.ts_standalone.ejs → (lint)/(markdown)/markdownlint-cli2-config.ts_standalone.ejs} +3 -3
- package/templates/default/scripts/{vitest-config.ts@post-config_solid.ejs → (test)/vitest-config.ts@post-config_solid.ejs} +6 -8
- package/templates/default/scripts/version.ts_standalone.ejs +4 -4
- package/templates/default/src/{plugin.ts_all-in-one.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one.ejs} +2 -0
- package/templates/default/src/(plugin)/(all-in-one)/plugin.ts_all-in-one@bug-report-handler_has-bug-report-command.ejs +7 -0
- package/templates/default/src/(plugin)/(all-in-one)/plugin.ts_all-in-one@bug-report-import_has-bug-report-command.ejs +1 -0
- package/templates/default/src/{plugin.ts_demo.ejs → (plugin)/(demo)/plugin.ts_demo.ejs} +2 -0
- package/templates/default/src/(plugin)/(demo)/plugin.ts_demo@bug-report-handler_has-bug-report-command.ejs +7 -0
- package/templates/default/src/(plugin)/(demo)/plugin.ts_demo@bug-report-import_has-bug-report-command.ejs +1 -0
- package/templates/default/src/{plugin-settings-component.ts_demo.ejs → (settings)/plugin-settings-component.ts_demo.ejs} +2 -0
- package/templates/default/src/{plugin-settings-tab.ts_demo.ejs → (settings)/plugin-settings-tab.ts_demo.ejs} +2 -2
- package/templates/default/src/lit-elements/sample-lit-element.ts.ejs +1 -1
- package/templates/default/src/modals/sample-suggest-modal.ts.ejs +2 -2
- package/templates/default/src/plugin.test.ts_jest.ejs +3 -0
- package/templates/default/src/plugin.test.ts_jest@bug-report-import_has-bug-report-command.ejs +4 -0
- package/templates/default/src/plugin.test.ts_jest@bug-report-test_has-bug-report-command.ejs +16 -0
- package/templates/default/src/plugin.test.ts_jest@bug-report-type-import_has-bug-report-command.ejs +2 -0
- package/templates/default/src/plugin.test.ts_vitest.ejs +3 -0
- package/templates/default/src/plugin.test.ts_vitest@bug-report-import_has-bug-report-command.ejs +4 -0
- package/templates/default/src/plugin.test.ts_vitest@bug-report-test_has-bug-report-command.ejs +16 -0
- package/templates/default/src/plugin.test.ts_vitest@bug-report-type-import_has-bug-report-command.ejs +2 -0
- package/templates/default/src/preact-components/sample-preact-component.tsx_framework.ejs +1 -1
- package/templates/default/src/preact-components/sample-preact-component.tsx_standalone.ejs +1 -1
- package/templates/default/src/react-components/sample-react-component.tsx_framework.ejs +1 -1
- package/templates/default/src/react-components/sample-react-component.tsx_standalone.ejs +1 -1
- package/templates/default/src/solid-components/sample-solid-component.tsx_framework.ejs +1 -1
- package/templates/default/src/solid-components/sample-solid-component.tsx_standalone.ejs +1 -1
- package/templates/default/src/styles/main.css_framework.ejs +1 -1
- package/templates/default/src/styles/main.scss_framework.ejs +1 -1
- package/templates/default/src/svelte-components/sample-svelte-component.d.ts.ejs +2 -2
- package/templates/default/src/views/sample-view.ts.ejs +2 -1
- package/templates/docs-showcase/files/src/docs/host.ts +2 -2
- package/templates/docs-showcase/host/host.ts +2 -2
- package/templates/default/README.md.ejs +0 -28
- package/templates/default/README.md@preset_framework.ejs +0 -12
- package/templates/default/demo-vault/Materials/01 Sample commands/Scratch note.md.ejs +0 -5
- /package/templates/default/{.parcelrc.ejs → (bundlers)/.parcelrc.ejs} +0 -0
- /package/templates/default/{.parcelrc@transformers_svelte.ejs → (bundlers)/.parcelrc@transformers_svelte.ejs} +0 -0
- /package/templates/default/{babel.config.json.ejs → (bundlers)/babel.config.json.ejs} +0 -0
- /package/templates/default/{babel.config.mjs.ejs → (bundlers)/babel.config.mjs.ejs} +0 -0
- /package/templates/default/{parcel-namer-obsidian.cjs.ejs → (bundlers)/parcel-namer-obsidian.cjs.ejs} +0 -0
- /package/templates/default/{parcel-resolver-obsidian.cjs.ejs → (bundlers)/parcel-resolver-obsidian.cjs.ejs} +0 -0
- /package/templates/default/{parcel-transformer-inline-imports.cjs.ejs → (bundlers)/parcel-transformer-inline-imports.cjs.ejs} +0 -0
- /package/templates/default/{parcel-transformer-svelte.cjs.ejs → (bundlers)/parcel-transformer-svelte.cjs.ejs} +0 -0
- /package/templates/default/{postcss.config.cjs.ejs → (bundlers)/postcss.config.cjs.ejs} +0 -0
- /package/templates/default/{rollup.config.mjs.ejs → (bundlers)/rollup.config.mjs.ejs} +0 -0
- /package/templates/default/{vite.config.ts.ejs → (bundlers)/vite.config.ts.ejs} +0 -0
- /package/templates/default/{webpack.config.ts.ejs → (bundlers)/webpack.config.ts.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@demo-vault_framework.ejs → (contributing)/CONTRIBUTING.md@demo-vault_framework.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_biome-formatter.ejs → (contributing)/CONTRIBUTING.md@scripts_biome-formatter.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_biome-linter.ejs → (contributing)/CONTRIBUTING.md@scripts_biome-linter.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_conventional-commits.ejs → (contributing)/CONTRIBUTING.md@scripts_conventional-commits.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_cspell.ejs → (contributing)/CONTRIBUTING.md@scripts_cspell.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_dprint.ejs → (contributing)/CONTRIBUTING.md@scripts_dprint.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_eslint.ejs → (contributing)/CONTRIBUTING.md@scripts_eslint.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_framework.ejs → (contributing)/CONTRIBUTING.md@scripts_framework.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_jest.ejs → (contributing)/CONTRIBUTING.md@scripts_jest.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_markdownlint.ejs → (contributing)/CONTRIBUTING.md@scripts_markdownlint.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_prettier.ejs → (contributing)/CONTRIBUTING.md@scripts_prettier.ejs} +0 -0
- /package/templates/default/{CONTRIBUTING.md@scripts_vitest.ejs → (contributing)/CONTRIBUTING.md@scripts_vitest.ejs} +0 -0
- /package/templates/default/{.prettierignore.ejs → (format)/.prettierignore.ejs} +0 -0
- /package/templates/default/{.prettierignore@ignores_docs-showcase.ejs → (format)/.prettierignore@ignores_docs-showcase.ejs} +0 -0
- /package/templates/default/{biome.jsonc_framework.ejs → (format)/biome.jsonc_framework.ejs} +0 -0
- /package/templates/default/{biome.jsonc_framework@excludes_docs-showcase.ejs → (format)/biome.jsonc_framework@excludes_docs-showcase.ejs} +0 -0
- /package/templates/default/{biome.jsonc_standalone.ejs → (format)/biome.jsonc_standalone.ejs} +0 -0
- /package/templates/default/{dprint.json_framework.ejs → (format)/dprint.json_framework.ejs} +0 -0
- /package/templates/default/{dprint.json_framework@excludes_docs-showcase.ejs → (format)/dprint.json_framework@excludes_docs-showcase.ejs} +0 -0
- /package/templates/default/{dprint.json_standalone.ejs → (format)/dprint.json_standalone.ejs} +0 -0
- /package/templates/default/{prettier.config.mjs_framework.ejs → (format)/prettier.config.mjs_framework.ejs} +0 -0
- /package/templates/default/{prettier.config.mjs_standalone.ejs → (format)/prettier.config.mjs_standalone.ejs} +0 -0
- /package/templates/default/{.depcheckrc.json.ejs → (lint)/.depcheckrc.json.ejs} +0 -0
- /package/templates/default/{.markdownlint-cli2.mjs.ejs → (lint)/.markdownlint-cli2.mjs.ejs} +0 -0
- /package/templates/default/{cspell.json@ignore-paths_docs-showcase.ejs → (lint)/cspell.json@ignore-paths_docs-showcase.ejs} +0 -0
- /package/templates/default/{eslint.config.mts_framework.ejs → (lint)/eslint.config.mts_framework.ejs} +0 -0
- /package/templates/default/{eslint.config.mts_standalone.ejs → (lint)/eslint.config.mts_standalone.ejs} +0 -0
- /package/templates/default/{eslint.config.mts_standalone@extra-files_has-e2e.ejs → (lint)/eslint.config.mts_standalone@extra-files_has-e2e.ejs} +0 -0
- /package/templates/default/{linkinator.config.json.ejs → (lint)/linkinator.config.json.ejs} +0 -0
- /package/templates/default/{.npmrc.ejs → (package)/.npmrc.ejs} +0 -0
- /package/templates/default/{package.json.ejs → (package)/package.json.ejs} +0 -0
- /package/templates/default/{package.json@targets_parcel-targets.ejs → (package)/package.json@targets_parcel-targets.ejs} +0 -0
- /package/templates/default/{package.json@targets_parcel.ejs → (package)/package.json@targets_parcel.ejs} +0 -0
- /package/templates/default/{pinned-versions.json.ejs → (package)/pinned-versions.json.ejs} +0 -0
- /package/templates/default/{pnpm-workspace.yaml.ejs → (package)/pnpm-workspace.yaml.ejs} +0 -0
- /package/templates/default/{README.md@demo-vault_framework.ejs → (readme)/README.md@demo-vault_framework.ejs} +0 -0
- /package/templates/default/{README.md@preset_docs-showcase.ejs → (readme)/README.md@preset_docs-showcase.ejs} +0 -0
- /package/templates/default/{README.md@support_has-funding.ejs → (readme)/README.md@support_has-funding.ejs} +0 -0
- /package/templates/default/{jest.config.ts_framework.ejs → (test)/jest.config.ts_framework.ejs} +0 -0
- /package/templates/default/{jest.config.ts_framework@lint-root-dir_framework.ejs → (test)/jest.config.ts_framework@lint-root-dir_framework.ejs} +0 -0
- /package/templates/default/{jest.config.ts_framework@ts-jest-tsconfig_solid.ejs → (test)/jest.config.ts_framework@ts-jest-tsconfig_solid.ejs} +0 -0
- /package/templates/default/{jest.config.ts_standalone.ejs → (test)/jest.config.ts_standalone.ejs} +0 -0
- /package/templates/default/{jest.config.ts_standalone@ts-jest-tsconfig_solid.ejs → (test)/jest.config.ts_standalone@ts-jest-tsconfig_solid.ejs} +0 -0
- /package/templates/default/{vitest.config.ts_framework.ejs → (test)/vitest.config.ts_framework.ejs} +0 -0
- /package/templates/default/{vitest.config.ts_standalone.ejs → (test)/vitest.config.ts_standalone.ejs} +0 -0
- /package/templates/default/{vitest.config.ts_standalone@jsx_solid.ejs → (test)/vitest.config.ts_standalone@jsx_solid.ejs} +0 -0
- /package/templates/default/{wdio.conf.mts.ejs → (test)/wdio.conf.mts.ejs} +0 -0
- /package/templates/default/{wdio.conf.ts.ejs → (test)/wdio.conf.ts.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework.ejs → (tsconfig)/(framework)/tsconfig.json_framework.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@compiler-options_i18next.ejs → (tsconfig)/(framework)/tsconfig.json_framework@compiler-options_i18next.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@compiler-options_lit.ejs → (tsconfig)/(framework)/tsconfig.json_framework@compiler-options_lit.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@exclude_docs-showcase.ejs → (tsconfig)/(framework)/tsconfig.json_framework@exclude_docs-showcase.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@include_has-e2e.ejs → (tsconfig)/(framework)/tsconfig.json_framework@include_has-e2e.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@include_svelte.ejs → (tsconfig)/(framework)/tsconfig.json_framework@include_svelte.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@include_vue.ejs → (tsconfig)/(framework)/tsconfig.json_framework@include_vue.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@include_wdio-obsidian.ejs → (tsconfig)/(framework)/tsconfig.json_framework@include_wdio-obsidian.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@types_jest.ejs → (tsconfig)/(framework)/tsconfig.json_framework@types_jest.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@types_svelte.ejs → (tsconfig)/(framework)/tsconfig.json_framework@types_svelte.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@types_toolkit-styles.ejs → (tsconfig)/(framework)/tsconfig.json_framework@types_toolkit-styles.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@types_wasm.ejs → (tsconfig)/(framework)/tsconfig.json_framework@types_wasm.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@types_wdio-obsidian.ejs → (tsconfig)/(framework)/tsconfig.json_framework@types_wdio-obsidian.ejs} +0 -0
- /package/templates/default/{tsconfig.json_framework@types_with-unofficial.ejs → (tsconfig)/(framework)/tsconfig.json_framework@types_with-unofficial.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@compiler-options_i18next.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@compiler-options_i18next.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@compiler-options_lit.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@compiler-options_lit.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@compiler-options_preact.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@compiler-options_preact.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@compiler-options_react.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@compiler-options_react.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@compiler-options_solid.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@compiler-options_solid.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@include-extra_preact.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@include-extra_preact.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@include-extra_react.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@include-extra_react.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@include-extra_solid.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@include-extra_solid.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@include_has-e2e.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@include_has-e2e.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@include_svelte.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@include_svelte.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@include_vue.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@include_vue.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@types_jest.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@types_jest.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@types_svelte.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@types_svelte.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@types_wdio-obsidian.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@types_wdio-obsidian.ejs} +0 -0
- /package/templates/default/{tsconfig.json_standalone@types_with-unofficial.ejs → (tsconfig)/(standalone)/tsconfig.json_standalone@types_with-unofficial.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler@compile_svelte.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler@compile_svelte.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler@fs-import_hot-reload-plugin.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler@fs-import_hot-reload-plugin.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler@hot-reload_hot-reload-plugin.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler@hot-reload_hot-reload-plugin.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler@import_tailwind.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler@import_tailwind.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler@reload_obsidian-cli.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler@reload_obsidian-cli.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler@run_parcel.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler@run_parcel.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler@run_rollup.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler@run_rollup.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler@run_vite.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler@run_vite.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_cli-bundler@run_webpack.ejs → (build)/(cli-bundler)/build.ts@bundler_cli-bundler@run_webpack.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts.ejs → (build)/(dev)/dev.ts.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts@bundler_adapter-cli.ejs → (build)/(dev)/dev.ts@bundler_adapter-cli.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts@bundler_adapter-cli@run_rollup.ejs → (build)/(dev)/dev.ts@bundler_adapter-cli@run_rollup.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts@bundler_adapter-cli@run_vite.ejs → (build)/(dev)/dev.ts@bundler_adapter-cli@run_vite.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts@bundler_adapter-cli@run_webpack.ejs → (build)/(dev)/dev.ts@bundler_adapter-cli@run_webpack.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts@bundler_cli-bundler.ejs → (build)/(dev)/dev.ts@bundler_cli-bundler.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts@bundler_esbuild.ejs → (build)/(dev)/dev.ts@bundler_esbuild.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts@bundler_esbuild@preset_framework.ejs → (build)/(dev)/dev.ts@bundler_esbuild@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts@bundler_esbuild@preset_standalone.ejs → (build)/(dev)/dev.ts@bundler_esbuild@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{dev.ts@bundler_parcel-adapter.ejs → (build)/(dev)/dev.ts@bundler_parcel-adapter.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild.ejs → (build)/(esbuild)/build.ts@bundler_esbuild.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@compile_svelte.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@compile_svelte.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@fs-import_hot-reload-plugin.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@fs-import_hot-reload-plugin.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@hot-reload_hot-reload-plugin.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@hot-reload_hot-reload-plugin.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@import_postcss.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@import_postcss.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@import_scss.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@import_scss.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@import_solid.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@import_solid.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@import_svelte.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@import_svelte.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@import_tailwind.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@import_tailwind.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@import_vue.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@import_vue.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@options_preact.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@options_preact.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@options_react.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@options_react.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@options_wasm.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@options_wasm.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@plugin_postcss.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@plugin_postcss.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@plugin_scss.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@plugin_scss.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@plugin_solid.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@plugin_solid.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@plugin_svelte.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@plugin_svelte.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@plugin_vue.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@plugin_vue.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@preset_framework.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@preset_standalone.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_esbuild@reload_obsidian-cli.ejs → (build)/(esbuild)/build.ts@bundler_esbuild@reload_obsidian-cli.ejs} +0 -0
- /package/templates/default/scripts/{build-clean.ts.ejs → (build)/build-clean.ts.ejs} +0 -0
- /package/templates/default/scripts/{build-compile-typescript.ts.ejs → (build)/build-compile-typescript.ts.ejs} +0 -0
- /package/templates/default/scripts/{build-compile.ts.ejs → (build)/build-compile.ts.ejs} +0 -0
- /package/templates/default/scripts/{build-options.ts.ejs → (build)/build-options.ts.ejs} +0 -0
- /package/templates/default/scripts/{build-styles.ts.ejs → (build)/build-styles.ts.ejs} +0 -0
- /package/templates/default/scripts/{build.ts.ejs → (build)/build.ts.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_adapter-cli.ejs → (build)/build.ts@bundler_adapter-cli.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_adapter-cli@run_rollup.ejs → (build)/build.ts@bundler_adapter-cli@run_rollup.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_adapter-cli@run_vite.ejs → (build)/build.ts@bundler_adapter-cli@run_vite.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_adapter-cli@run_webpack.ejs → (build)/build.ts@bundler_adapter-cli@run_webpack.ejs} +0 -0
- /package/templates/default/scripts/{build.ts@bundler_parcel-adapter.ejs → (build)/build.ts@bundler_parcel-adapter.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts.ejs → (format)/format-check.ts.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts@tool_biome-formatter.ejs → (format)/format-check.ts@tool_biome-formatter.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts@tool_biome-formatter@preset_framework.ejs → (format)/format-check.ts@tool_biome-formatter@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts@tool_biome-formatter@preset_standalone.ejs → (format)/format-check.ts@tool_biome-formatter@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts@tool_dprint.ejs → (format)/format-check.ts@tool_dprint.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts@tool_dprint@preset_framework.ejs → (format)/format-check.ts@tool_dprint@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts@tool_dprint@preset_standalone.ejs → (format)/format-check.ts@tool_dprint@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts@tool_prettier.ejs → (format)/format-check.ts@tool_prettier.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts@tool_prettier@preset_framework.ejs → (format)/format-check.ts@tool_prettier@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{format-check.ts@tool_prettier@preset_standalone.ejs → (format)/format-check.ts@tool_prettier@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{format.ts.ejs → (format)/format.ts.ejs} +0 -0
- /package/templates/default/scripts/{format.ts@tool_biome-formatter.ejs → (format)/format.ts@tool_biome-formatter.ejs} +0 -0
- /package/templates/default/scripts/{format.ts@tool_biome-formatter@preset_framework.ejs → (format)/format.ts@tool_biome-formatter@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{format.ts@tool_biome-formatter@preset_standalone.ejs → (format)/format.ts@tool_biome-formatter@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{format.ts@tool_dprint.ejs → (format)/format.ts@tool_dprint.ejs} +0 -0
- /package/templates/default/scripts/{format.ts@tool_dprint@preset_framework.ejs → (format)/format.ts@tool_dprint@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{format.ts@tool_dprint@preset_standalone.ejs → (format)/format.ts@tool_dprint@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{format.ts@tool_prettier.ejs → (format)/format.ts@tool_prettier.ejs} +0 -0
- /package/templates/default/scripts/{format.ts@tool_prettier@preset_framework.ejs → (format)/format.ts@tool_prettier@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{format.ts@tool_prettier@preset_standalone.ejs → (format)/format.ts@tool_prettier@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{prettier.config.ts.ejs → (format)/prettier.config.ts.ejs} +0 -0
- /package/templates/default/scripts/{lint-md-fix.ts_framework.ejs → (lint)/(markdown)/lint-md-fix.ts_framework.ejs} +0 -0
- /package/templates/default/scripts/{lint-md-fix.ts_standalone.ejs → (lint)/(markdown)/lint-md-fix.ts_standalone.ejs} +0 -0
- /package/templates/default/scripts/{lint-md.ts_framework.ejs → (lint)/(markdown)/lint-md.ts_framework.ejs} +0 -0
- /package/templates/default/scripts/{lint-md.ts_standalone.ejs → (lint)/(markdown)/lint-md.ts_standalone.ejs} +0 -0
- /package/templates/default/scripts/{markdownlint-cli2-config.ts_framework.ejs → (lint)/(markdown)/markdownlint-cli2-config.ts_framework.ejs} +0 -0
- /package/templates/default/scripts/{eslint-config.ts.ejs → (lint)/eslint-config.ts.ejs} +0 -0
- /package/templates/default/scripts/{eslint-config.ts@extra-files_has-e2e.ejs → (lint)/eslint-config.ts@extra-files_has-e2e.ejs} +0 -0
- /package/templates/default/scripts/{eslint-config.ts@ignores_docs-showcase.ejs → (lint)/eslint-config.ts@ignores_docs-showcase.ejs} +0 -0
- /package/templates/default/scripts/{find-overexposed-fix.ts.ejs → (lint)/find-overexposed-fix.ts.ejs} +0 -0
- /package/templates/default/scripts/{find-overexposed.ts.ejs → (lint)/find-overexposed.ts.ejs} +0 -0
- /package/templates/default/scripts/{lint-fix.ts.ejs → (lint)/lint-fix.ts.ejs} +0 -0
- /package/templates/default/scripts/{lint-fix.ts@tool_biome-linter.ejs → (lint)/lint-fix.ts@tool_biome-linter.ejs} +0 -0
- /package/templates/default/scripts/{lint-fix.ts@tool_biome-linter@preset_framework.ejs → (lint)/lint-fix.ts@tool_biome-linter@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{lint-fix.ts@tool_biome-linter@preset_standalone.ejs → (lint)/lint-fix.ts@tool_biome-linter@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{lint-fix.ts@tool_eslint.ejs → (lint)/lint-fix.ts@tool_eslint.ejs} +0 -0
- /package/templates/default/scripts/{lint-fix.ts@tool_eslint@preset_framework.ejs → (lint)/lint-fix.ts@tool_eslint@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{lint-fix.ts@tool_eslint@preset_standalone.ejs → (lint)/lint-fix.ts@tool_eslint@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{lint.ts.ejs → (lint)/lint.ts.ejs} +0 -0
- /package/templates/default/scripts/{lint.ts@tool_biome-linter.ejs → (lint)/lint.ts@tool_biome-linter.ejs} +0 -0
- /package/templates/default/scripts/{lint.ts@tool_biome-linter@preset_framework.ejs → (lint)/lint.ts@tool_biome-linter@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{lint.ts@tool_biome-linter@preset_standalone.ejs → (lint)/lint.ts@tool_biome-linter@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{lint.ts@tool_eslint.ejs → (lint)/lint.ts@tool_eslint.ejs} +0 -0
- /package/templates/default/scripts/{lint.ts@tool_eslint@preset_framework.ejs → (lint)/lint.ts@tool_eslint@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{lint.ts@tool_eslint@preset_standalone.ejs → (lint)/lint.ts@tool_eslint@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone.ejs → (rollup)/(standalone)/rollup.config.ts_standalone.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@import_rollup-babel.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@import_rollup-babel.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@import_rollup-json.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@import_rollup-json.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@import_rollup-postcss.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@import_rollup-postcss.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@import_scss.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@import_scss.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@import_svelte.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@import_svelte.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@import_vue.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@import_vue.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@import_wasm.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@import_wasm.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@post-plugin_preact.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@post-plugin_preact.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@post-plugin_react.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@post-plugin_react.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@post-plugin_rollup-json.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@post-plugin_rollup-json.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@post-plugin_rollup-postcss.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@post-plugin_rollup-postcss.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@post-plugin_scss.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@post-plugin_scss.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@post-plugin_solid.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@post-plugin_solid.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@post-plugin_wasm.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@post-plugin_wasm.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@pre-plugin_svelte.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@pre-plugin_svelte.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@pre-plugin_vue.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@pre-plugin_vue.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@unwrap_rollup-babel.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@unwrap_rollup-babel.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@unwrap_rollup-json.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@unwrap_rollup-json.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@unwrap_rollup-postcss.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@unwrap_rollup-postcss.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@unwrap_scss.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@unwrap_scss.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@unwrap_svelte.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@unwrap_svelte.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@unwrap_vue.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@unwrap_vue.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_standalone@unwrap_wasm.ejs → (rollup)/(standalone)/rollup.config.ts_standalone@unwrap_wasm.ejs} +0 -0
- /package/templates/default/scripts/{babel.config.ts_rollup.ejs → (rollup)/babel.config.ts_rollup.ejs} +0 -0
- /package/templates/default/scripts/{babel.config.ts_rollup@babel-plugin_preact.ejs → (rollup)/babel.config.ts_rollup@babel-plugin_preact.ejs} +0 -0
- /package/templates/default/scripts/{babel.config.ts_rollup@babel-preset_react.ejs → (rollup)/babel.config.ts_rollup@babel-preset_react.ejs} +0 -0
- /package/templates/default/scripts/{babel.config.ts_rollup@babel-preset_solid.ejs → (rollup)/babel.config.ts_rollup@babel-preset_solid.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_framework.ejs → (rollup)/rollup.config.ts_framework.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_framework@import_rollup-json.ejs → (rollup)/rollup.config.ts_framework@import_rollup-json.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_framework@import_scss.ejs → (rollup)/rollup.config.ts_framework@import_scss.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_framework@plugin_rollup-json.ejs → (rollup)/rollup.config.ts_framework@plugin_rollup-json.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_framework@plugin_scss.ejs → (rollup)/rollup.config.ts_framework@plugin_scss.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_framework@unwrap_rollup-json.ejs → (rollup)/rollup.config.ts_framework@unwrap_rollup-json.ejs} +0 -0
- /package/templates/default/scripts/{rollup.config.ts_framework@unwrap_scss.ejs → (rollup)/rollup.config.ts_framework@unwrap_scss.ejs} +0 -0
- /package/templates/default/scripts/{test-e2e.ts.ejs → (test)/(e2e)/test-e2e.ts.ejs} +0 -0
- /package/templates/default/scripts/{test-e2e.ts@tool_obsidian-test.ejs → (test)/(e2e)/test-e2e.ts@tool_obsidian-test.ejs} +0 -0
- /package/templates/default/scripts/{test-e2e.ts@tool_obsidian-test@preset_framework.ejs → (test)/(e2e)/test-e2e.ts@tool_obsidian-test@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{test-e2e.ts@tool_obsidian-test@preset_standalone.ejs → (test)/(e2e)/test-e2e.ts@tool_obsidian-test@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{test-e2e.ts@tool_wdio-obsidian.ejs → (test)/(e2e)/test-e2e.ts@tool_wdio-obsidian.ejs} +0 -0
- /package/templates/default/scripts/{test-e2e.ts@tool_wdio-obsidian@preset_framework.ejs → (test)/(e2e)/test-e2e.ts@tool_wdio-obsidian@preset_framework.ejs} +0 -0
- /package/templates/default/scripts/{test-e2e.ts@tool_wdio-obsidian@preset_standalone.ejs → (test)/(e2e)/test-e2e.ts@tool_wdio-obsidian@preset_standalone.ejs} +0 -0
- /package/templates/default/scripts/{demo-vault-global-setup.ts.ejs → (test)/(integration)/demo-vault-global-setup.ts.ejs} +0 -0
- /package/templates/default/scripts/{test-integration-android.ts.ejs → (test)/(integration)/test-integration-android.ts.ejs} +0 -0
- /package/templates/default/scripts/{test-integration-demo-vault.ts.ejs → (test)/(integration)/test-integration-demo-vault.ts.ejs} +0 -0
- /package/templates/default/scripts/{test-integration-desktop-performance.ts.ejs → (test)/(integration)/test-integration-desktop-performance.ts.ejs} +0 -0
- /package/templates/default/scripts/{test-integration-desktop.ts.ejs → (test)/(integration)/test-integration-desktop.ts.ejs} +0 -0
- /package/templates/default/scripts/{test-integration-no-app.ts.ejs → (test)/(integration)/test-integration-no-app.ts.ejs} +0 -0
- /package/templates/default/scripts/{test-integration.ts.ejs → (test)/(integration)/test-integration.ts.ejs} +0 -0
- /package/templates/default/scripts/{framework-component-stub.ts.ejs → (test)/framework-component-stub.ts.ejs} +0 -0
- /package/templates/default/scripts/{stylesheet-stub.ts.ejs → (test)/stylesheet-stub.ts.ejs} +0 -0
- /package/templates/default/scripts/{test-coverage.ts.ejs → (test)/test-coverage.ts.ejs} +0 -0
- /package/templates/default/scripts/{test-coverage.ts@tool_jest.ejs → (test)/test-coverage.ts@tool_jest.ejs} +0 -0
- /package/templates/default/scripts/{test-coverage.ts@tool_vitest.ejs → (test)/test-coverage.ts@tool_vitest.ejs} +0 -0
- /package/templates/default/scripts/{test-watch.ts_framework.ejs → (test)/test-watch.ts_framework.ejs} +0 -0
- /package/templates/default/scripts/{test-watch.ts_framework@tool_jest.ejs → (test)/test-watch.ts_framework@tool_jest.ejs} +0 -0
- /package/templates/default/scripts/{test-watch.ts_framework@tool_vitest.ejs → (test)/test-watch.ts_framework@tool_vitest.ejs} +0 -0
- /package/templates/default/scripts/{test-watch.ts_standalone.ejs → (test)/test-watch.ts_standalone.ejs} +0 -0
- /package/templates/default/scripts/{test-watch.ts_standalone@tool_jest.ejs → (test)/test-watch.ts_standalone@tool_jest.ejs} +0 -0
- /package/templates/default/scripts/{test-watch.ts_standalone@tool_vitest.ejs → (test)/test-watch.ts_standalone@tool_vitest.ejs} +0 -0
- /package/templates/default/scripts/{test.ts_framework.ejs → (test)/test.ts_framework.ejs} +0 -0
- /package/templates/default/scripts/{test.ts_framework@tool_jest.ejs → (test)/test.ts_framework@tool_jest.ejs} +0 -0
- /package/templates/default/scripts/{test.ts_framework@tool_vitest.ejs → (test)/test.ts_framework@tool_vitest.ejs} +0 -0
- /package/templates/default/scripts/{test.ts_standalone.ejs → (test)/test.ts_standalone.ejs} +0 -0
- /package/templates/default/scripts/{test.ts_standalone@tool_jest.ejs → (test)/test.ts_standalone@tool_jest.ejs} +0 -0
- /package/templates/default/scripts/{test.ts_standalone@tool_vitest.ejs → (test)/test.ts_standalone@tool_vitest.ejs} +0 -0
- /package/templates/default/scripts/{vitest-config.ts.ejs → (test)/vitest-config.ts.ejs} +0 -0
- /package/templates/default/scripts/{vitest-config.ts@edit-context_docs-showcase.ejs → (test)/vitest-config.ts@edit-context_docs-showcase.ejs} +0 -0
- /package/templates/default/scripts/{wasm-module-stub.ts.ejs → (test)/wasm-module-stub.ts.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_framework.ejs → (vite)/vite.config.ts_framework.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone.ejs → (vite)/vite.config.ts_standalone.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@import_preact.ejs → (vite)/vite.config.ts_standalone@import_preact.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@import_react.ejs → (vite)/vite.config.ts_standalone@import_react.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@import_solid.ejs → (vite)/vite.config.ts_standalone@import_solid.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@import_svelte.ejs → (vite)/vite.config.ts_standalone@import_svelte.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@import_vue.ejs → (vite)/vite.config.ts_standalone@import_vue.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@plugin_preact.ejs → (vite)/vite.config.ts_standalone@plugin_preact.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@plugin_react.ejs → (vite)/vite.config.ts_standalone@plugin_react.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@plugin_solid.ejs → (vite)/vite.config.ts_standalone@plugin_solid.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@plugin_svelte.ejs → (vite)/vite.config.ts_standalone@plugin_svelte.ejs} +0 -0
- /package/templates/default/scripts/{vite.config.ts_standalone@plugin_vue.ejs → (vite)/vite.config.ts_standalone@plugin_vue.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_framework.ejs → (webpack)/webpack.config.ts_framework.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_framework@import_scss.ejs → (webpack)/webpack.config.ts_framework@import_scss.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_framework@plugin_scss.ejs → (webpack)/webpack.config.ts_framework@plugin_scss.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_framework@rule_scss.ejs → (webpack)/webpack.config.ts_framework@rule_scss.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone.ejs → (webpack)/webpack.config.ts_standalone.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@import_svelte.ejs → (webpack)/webpack.config.ts_standalone@import_svelte.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@import_vue.ejs → (webpack)/webpack.config.ts_standalone@import_vue.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@import_webpack-css-extract.ejs → (webpack)/webpack.config.ts_standalone@import_webpack-css-extract.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@plugin_vue.ejs → (webpack)/webpack.config.ts_standalone@plugin_vue.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@plugin_webpack-css-extract.ejs → (webpack)/webpack.config.ts_standalone@plugin_webpack-css-extract.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@rule_css-modules.ejs → (webpack)/webpack.config.ts_standalone@rule_css-modules.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@rule_css.ejs → (webpack)/webpack.config.ts_standalone@rule_css.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@rule_postcss.ejs → (webpack)/webpack.config.ts_standalone@rule_postcss.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@rule_scss.ejs → (webpack)/webpack.config.ts_standalone@rule_scss.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@rule_solid.ejs → (webpack)/webpack.config.ts_standalone@rule_solid.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@rule_svelte.ejs → (webpack)/webpack.config.ts_standalone@rule_svelte.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@rule_tailwind.ejs → (webpack)/webpack.config.ts_standalone@rule_tailwind.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@rule_vue.ejs → (webpack)/webpack.config.ts_standalone@rule_vue.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@rule_wasm.ejs → (webpack)/webpack.config.ts_standalone@rule_wasm.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@ts-loader-compiler-options_vue.ejs → (webpack)/webpack.config.ts_standalone@ts-loader-compiler-options_vue.ejs} +0 -0
- /package/templates/default/scripts/{webpack.config.ts_standalone@ts-loader-options_vue.ejs → (webpack)/webpack.config.ts_standalone@ts-loader-options_vue.ejs} +0 -0
- /package/templates/default/src/{main.test.ts.ejs → (main)/main.test.ts.ejs} +0 -0
- /package/templates/default/src/{main.test.ts@test-imports_vitest.ejs → (main)/main.test.ts@test-imports_vitest.ejs} +0 -0
- /package/templates/default/src/{main.ts.ejs → (main)/main.ts.ejs} +0 -0
- /package/templates/default/src/{main.ts@import_css.ejs → (main)/main.ts@import_css.ejs} +0 -0
- /package/templates/default/src/{main.ts@import_postcss.ejs → (main)/main.ts@import_postcss.ejs} +0 -0
- /package/templates/default/src/{main.ts@import_scss.ejs → (main)/main.ts@import_scss.ejs} +0 -0
- /package/templates/default/src/{main.ts@import_tailwind.ejs → (main)/main.ts@import_tailwind.ejs} +0 -0
- /package/templates/default/src/{main.ts@import_tailwind@preset_framework.ejs → (main)/main.ts@import_tailwind@preset_framework.ejs} +0 -0
- /package/templates/default/src/{main.ts@import_tailwind@preset_standalone.ejs → (main)/main.ts@import_tailwind@preset_standalone.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_codemirror.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_codemirror.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_css-modules.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_css-modules.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_docs-showcase.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_docs-showcase.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_i18next.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_i18next.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_lit.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_lit.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_preact.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_preact.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_react.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_react.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_solid.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_solid.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_svelte.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_svelte.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_typesafe-i18n.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_typesafe-i18n.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_vue.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_vue.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@import2_wasm.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@import2_wasm.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@method_ui-view.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@method_ui-view.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_codemirror.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_codemirror.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_css-modules.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_css-modules.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_docs-showcase.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_docs-showcase.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_i18next.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_i18next.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_lit.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_lit.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_preact.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_preact.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_react.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_react.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_solid.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_solid.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_svelte.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_svelte.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_typesafe-i18n.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_typesafe-i18n.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_vue.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_vue.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_all-in-one@onload_wasm.ejs → (plugin)/(all-in-one)/plugin.ts_all-in-one@onload_wasm.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_css-modules.ejs → (plugin)/(demo)/plugin.ts_demo@import_css-modules.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_i18next.ejs → (plugin)/(demo)/plugin.ts_demo@import_i18next.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_lit.ejs → (plugin)/(demo)/plugin.ts_demo@import_lit.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_preact.ejs → (plugin)/(demo)/plugin.ts_demo@import_preact.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_react.ejs → (plugin)/(demo)/plugin.ts_demo@import_react.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_solid.ejs → (plugin)/(demo)/plugin.ts_demo@import_solid.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_svelte.ejs → (plugin)/(demo)/plugin.ts_demo@import_svelte.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_typesafe-i18n.ejs → (plugin)/(demo)/plugin.ts_demo@import_typesafe-i18n.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_vue.ejs → (plugin)/(demo)/plugin.ts_demo@import_vue.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@import_wasm.ejs → (plugin)/(demo)/plugin.ts_demo@import_wasm.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@method_ui-view.ejs → (plugin)/(demo)/plugin.ts_demo@method_ui-view.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_css-modules.ejs → (plugin)/(demo)/plugin.ts_demo@onload_css-modules.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_i18next.ejs → (plugin)/(demo)/plugin.ts_demo@onload_i18next.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_lit.ejs → (plugin)/(demo)/plugin.ts_demo@onload_lit.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_preact.ejs → (plugin)/(demo)/plugin.ts_demo@onload_preact.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_react.ejs → (plugin)/(demo)/plugin.ts_demo@onload_react.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_solid.ejs → (plugin)/(demo)/plugin.ts_demo@onload_solid.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_svelte.ejs → (plugin)/(demo)/plugin.ts_demo@onload_svelte.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_typesafe-i18n.ejs → (plugin)/(demo)/plugin.ts_demo@onload_typesafe-i18n.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_vue.ejs → (plugin)/(demo)/plugin.ts_demo@onload_vue.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_demo@onload_wasm.ejs → (plugin)/(demo)/plugin.ts_demo@onload_wasm.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone.ejs → (plugin)/(standalone)/plugin.ts_standalone.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_codemirror.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_codemirror.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_css-modules.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_css-modules.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_i18next.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_i18next.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_lit.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_lit.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_preact.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_preact.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_react.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_react.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_solid.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_solid.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_svelte.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_svelte.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_typesafe-i18n.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_typesafe-i18n.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_vue.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_vue.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@import_wasm.ejs → (plugin)/(standalone)/plugin.ts_standalone@import_wasm.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@method_ui-view.ejs → (plugin)/(standalone)/plugin.ts_standalone@method_ui-view.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_codemirror.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_codemirror.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_css-modules.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_css-modules.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_i18next.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_i18next.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_lit.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_lit.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_preact.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_preact.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_react.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_react.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_solid.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_solid.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_svelte.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_svelte.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_typesafe-i18n.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_typesafe-i18n.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_vue.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_vue.ejs} +0 -0
- /package/templates/default/src/{plugin.ts_standalone@onload_wasm.ejs → (plugin)/(standalone)/plugin.ts_standalone@onload_wasm.ejs} +0 -0
- /package/templates/default/src/{plugin-settings-component.test.ts_all-in-one.ejs → (settings)/plugin-settings-component.test.ts_all-in-one.ejs} +0 -0
- /package/templates/default/src/{plugin-settings-component.test.ts_all-in-one@test-imports_vitest.ejs → (settings)/plugin-settings-component.test.ts_all-in-one@test-imports_vitest.ejs} +0 -0
- /package/templates/default/src/{plugin-settings-component.test.ts_demo.ejs → (settings)/plugin-settings-component.test.ts_demo.ejs} +0 -0
- /package/templates/default/src/{plugin-settings-component.test.ts_demo@test-imports_vitest.ejs → (settings)/plugin-settings-component.test.ts_demo@test-imports_vitest.ejs} +0 -0
- /package/templates/default/src/{plugin-settings-component.ts_all-in-one.ejs → (settings)/plugin-settings-component.ts_all-in-one.ejs} +0 -0
- /package/templates/default/src/{plugin-settings-tab.ts_all-in-one.ejs → (settings)/plugin-settings-tab.ts_all-in-one.ejs} +0 -0
- /package/templates/default/src/{plugin-settings.test.ts_demo.ejs → (settings)/plugin-settings.test.ts_demo.ejs} +0 -0
- /package/templates/default/src/{plugin-settings.test.ts_demo@test-imports_vitest.ejs → (settings)/plugin-settings.test.ts_demo@test-imports_vitest.ejs} +0 -0
- /package/templates/default/src/{plugin-settings.ts_all-in-one.ejs → (settings)/plugin-settings.ts_all-in-one.ejs} +0 -0
- /package/templates/default/src/{plugin-settings.ts_demo.ejs → (settings)/plugin-settings.ts_demo.ejs} +0 -0
- /package/templates/default/src/{settings.ts.ejs → (settings)/settings.ts.ejs} +0 -0
package/dist/main.js
CHANGED
|
@@ -20,18 +20,12 @@ import {
|
|
|
20
20
|
writeFileSync as writeFileSync2
|
|
21
21
|
} from "node:fs";
|
|
22
22
|
import {
|
|
23
|
-
join as
|
|
23
|
+
join as join9,
|
|
24
24
|
resolve as resolvePath
|
|
25
25
|
} from "node:path";
|
|
26
26
|
import { compare } from "semver";
|
|
27
27
|
|
|
28
|
-
// src/
|
|
29
|
-
import {
|
|
30
|
-
existsSync,
|
|
31
|
-
readFileSync
|
|
32
|
-
} from "node:fs";
|
|
33
|
-
|
|
34
|
-
// src/clack-select.ts
|
|
28
|
+
// src/prompts/clack-select.ts
|
|
35
29
|
import {
|
|
36
30
|
SelectPrompt,
|
|
37
31
|
settings
|
|
@@ -41,11 +35,11 @@ import {
|
|
|
41
35
|
S_BAR_END,
|
|
42
36
|
S_RADIO_ACTIVE,
|
|
43
37
|
S_RADIO_INACTIVE,
|
|
44
|
-
symbol
|
|
38
|
+
symbol as $symbol
|
|
45
39
|
} from "@clack/prompts";
|
|
46
40
|
import { styleText } from "node:util";
|
|
47
41
|
|
|
48
|
-
// src/clack-utils.ts
|
|
42
|
+
// src/prompts/clack-utils.ts
|
|
49
43
|
import {
|
|
50
44
|
cancel,
|
|
51
45
|
isCancel
|
|
@@ -80,14 +74,14 @@ function throwGoBackOnCancel(value) {
|
|
|
80
74
|
return value;
|
|
81
75
|
}
|
|
82
76
|
|
|
83
|
-
// src/clack-select.ts
|
|
77
|
+
// src/prompts/clack-select.ts
|
|
84
78
|
async function select(opts) {
|
|
85
79
|
const selectOpts = {
|
|
86
80
|
options: opts.options,
|
|
87
81
|
render() {
|
|
88
82
|
const withGuide = settings.withGuide;
|
|
89
83
|
const header = `${withGuide ? `${styleText("gray", S_BAR)}
|
|
90
|
-
` : ""}${symbol(this.state)} ${opts.message}
|
|
84
|
+
` : ""}${$symbol(this.state)} ${opts.message}
|
|
91
85
|
`;
|
|
92
86
|
const selected = this.options[this.cursor];
|
|
93
87
|
switch (this.state) {
|
|
@@ -160,13 +154,444 @@ async function promptFeature(params) {
|
|
|
160
154
|
});
|
|
161
155
|
return result;
|
|
162
156
|
}
|
|
163
|
-
function resolveFeature(options, value) {
|
|
164
|
-
const option = options.find((o) => o.settingValue === value);
|
|
165
|
-
if (!option) {
|
|
166
|
-
throw new Error(`Unknown feature value: ${value}`);
|
|
157
|
+
function resolveFeature(options, value) {
|
|
158
|
+
const option = options.find((o) => o.settingValue === value);
|
|
159
|
+
if (!option) {
|
|
160
|
+
throw new Error(`Unknown feature value: ${value}`);
|
|
161
|
+
}
|
|
162
|
+
return option;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// src/features/preset/official-sample.ts
|
|
166
|
+
var OFFICIAL_SAMPLE_PRESET = "official-sample";
|
|
167
|
+
var OFFICIAL_SAMPLE_ANSWER_KEYS = [
|
|
168
|
+
"authorGitHubName",
|
|
169
|
+
"authorName",
|
|
170
|
+
"defaultBranch",
|
|
171
|
+
"fundingPlatform",
|
|
172
|
+
"fundingUrl",
|
|
173
|
+
"fundingUsername",
|
|
174
|
+
"pluginDescription",
|
|
175
|
+
"pluginId",
|
|
176
|
+
"pluginName",
|
|
177
|
+
"preset"
|
|
178
|
+
];
|
|
179
|
+
var OfficialSample = class extends FeatureOption {
|
|
180
|
+
constructor() {
|
|
181
|
+
super({
|
|
182
|
+
promptHint: "Exactly obsidianmd/obsidian-sample-plugin, with your plugin's id, name, author and description filled in",
|
|
183
|
+
promptLabel: "Official sample plugin",
|
|
184
|
+
settingValue: OFFICIAL_SAMPLE_PRESET
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
function isOfficialSamplePreset(preset) {
|
|
189
|
+
return preset === OFFICIAL_SAMPLE_PRESET;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// src/answers/cli-args.ts
|
|
193
|
+
import {
|
|
194
|
+
existsSync,
|
|
195
|
+
readFileSync
|
|
196
|
+
} from "node:fs";
|
|
197
|
+
|
|
198
|
+
// src/directory/directory-constraints.ts
|
|
199
|
+
var CORE_FEATURE_NAMES = [
|
|
200
|
+
"Audio recorder",
|
|
201
|
+
"Backlinks",
|
|
202
|
+
"Bases",
|
|
203
|
+
"Bookmarks",
|
|
204
|
+
"Canvas",
|
|
205
|
+
"Command palette",
|
|
206
|
+
"Daily notes",
|
|
207
|
+
"File recovery",
|
|
208
|
+
"Files",
|
|
209
|
+
"Footnotes",
|
|
210
|
+
"Format converter",
|
|
211
|
+
"Graph view",
|
|
212
|
+
"Live Preview",
|
|
213
|
+
"Note composer",
|
|
214
|
+
"Outgoing links",
|
|
215
|
+
"Outline",
|
|
216
|
+
"Page preview",
|
|
217
|
+
"Properties view",
|
|
218
|
+
"Publish",
|
|
219
|
+
"Quick Switcher",
|
|
220
|
+
"Random note",
|
|
221
|
+
"Reading view",
|
|
222
|
+
"Search",
|
|
223
|
+
"Slash commands",
|
|
224
|
+
"Slides",
|
|
225
|
+
"Source mode",
|
|
226
|
+
"Sync",
|
|
227
|
+
"Tags view",
|
|
228
|
+
"Templates",
|
|
229
|
+
"Unique note creator",
|
|
230
|
+
"Web viewer",
|
|
231
|
+
"Word count",
|
|
232
|
+
"Workspaces"
|
|
233
|
+
];
|
|
234
|
+
var MAX_DESCRIPTION_LENGTH = 250;
|
|
235
|
+
var MIN_DESCRIPTION_LENGTH = 10;
|
|
236
|
+
var ALLOWED_ID_CHARACTERS = /^[a-z0-9-]+$/;
|
|
237
|
+
var ALLOWED_NAME_CHARACTERS = /^[A-Za-z0-9 \-+()]+$/;
|
|
238
|
+
var EMOJI = /\p{Extended_Pictographic}/u;
|
|
239
|
+
var OBSIDIAN_WORD = /\bobsidian\b/i;
|
|
240
|
+
var OBSIDIAN_NAME_VARIANTS = /obsi|sidian/i;
|
|
241
|
+
var SELF_REFERENCE_PATTERNS = [
|
|
242
|
+
/\bthis plugin\b/i,
|
|
243
|
+
/\bthis is a plugin\b/i,
|
|
244
|
+
/\ba plugin (?:that|which)\b/i,
|
|
245
|
+
/^the plugin\b/i,
|
|
246
|
+
/^plugin\b/i
|
|
247
|
+
];
|
|
248
|
+
function findUnlistableManifestAnswers(answers) {
|
|
249
|
+
const checked = [
|
|
250
|
+
{ key: "pluginId", message: validatePluginId(answers.pluginId), value: answers.pluginId },
|
|
251
|
+
{ key: "pluginName", message: validatePluginName(answers.pluginName), value: answers.pluginName },
|
|
252
|
+
{ key: "pluginDescription", message: validatePluginDescription(answers.pluginDescription), value: answers.pluginDescription }
|
|
253
|
+
];
|
|
254
|
+
const problems = [];
|
|
255
|
+
for (const { key, message, value } of checked) {
|
|
256
|
+
if (message !== void 0) {
|
|
257
|
+
problems.push({ key, message, value });
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return problems;
|
|
261
|
+
}
|
|
262
|
+
function validatePluginDescription(input) {
|
|
263
|
+
if (!input) {
|
|
264
|
+
return "Should not be empty";
|
|
265
|
+
}
|
|
266
|
+
if (EMOJI.test(input)) {
|
|
267
|
+
return "Should not contain emoji -- the Community directory rejects them, though it does accept ordinary punctuation such as backticks, em dashes and parentheses";
|
|
268
|
+
}
|
|
269
|
+
if (OBSIDIAN_WORD.test(input)) {
|
|
270
|
+
return 'Should not contain the word "Obsidian" -- the Community directory rejects it as implied by the plugin directory, even though no Obsidian document says so';
|
|
271
|
+
}
|
|
272
|
+
if (SELF_REFERENCE_PATTERNS.some((pattern) => pattern.test(input))) {
|
|
273
|
+
return 'Should say what the plugin does rather than refer to itself -- the Community directory rejects "This plugin..." and "a plugin that...". Naming another plugin is fine';
|
|
274
|
+
}
|
|
275
|
+
if (input.length < MIN_DESCRIPTION_LENGTH) {
|
|
276
|
+
return `Should be at least ${String(MIN_DESCRIPTION_LENGTH)} characters, so it says what the plugin does`;
|
|
277
|
+
}
|
|
278
|
+
if (input.length > MAX_DESCRIPTION_LENGTH) {
|
|
279
|
+
return `Should be at most ${String(MAX_DESCRIPTION_LENGTH)} characters -- the Community directory rejects a longer one`;
|
|
280
|
+
}
|
|
281
|
+
if (!/^[A-Z]/.test(input)) {
|
|
282
|
+
return 'Should start with a capital letter, ideally on an action verb: "Translates selected text...", "Imports notes from..."';
|
|
283
|
+
}
|
|
284
|
+
if (!input.endsWith(".")) {
|
|
285
|
+
return "Should end with a dot";
|
|
286
|
+
}
|
|
287
|
+
return void 0;
|
|
288
|
+
}
|
|
289
|
+
function validatePluginId(input) {
|
|
290
|
+
if (!input) {
|
|
291
|
+
return "Should not be empty";
|
|
292
|
+
}
|
|
293
|
+
if (!ALLOWED_ID_CHARACTERS.test(input)) {
|
|
294
|
+
return "Should contain only lowercase English letters, digits and hyphens";
|
|
295
|
+
}
|
|
296
|
+
if (!/^[a-z]/.test(input)) {
|
|
297
|
+
return "Should start with a letter";
|
|
298
|
+
}
|
|
299
|
+
if (!/[a-z0-9]$/.test(input)) {
|
|
300
|
+
return "Should end with a letter or digit";
|
|
301
|
+
}
|
|
302
|
+
if (input.includes("obsidian")) {
|
|
303
|
+
return 'Should not contain "obsidian" anywhere -- the Community directory rejects it as implied by the plugin directory, and an id can never be changed once the plugin is published';
|
|
304
|
+
}
|
|
305
|
+
if (input.endsWith("plugin")) {
|
|
306
|
+
return 'Should not end with "plugin" -- the Community directory rejects it as implied, and an id can never be changed once the plugin is published';
|
|
307
|
+
}
|
|
308
|
+
return void 0;
|
|
309
|
+
}
|
|
310
|
+
function validatePluginName(input) {
|
|
311
|
+
if (!input) {
|
|
312
|
+
return "Should not be empty";
|
|
313
|
+
}
|
|
314
|
+
if (OBSIDIAN_NAME_VARIANTS.test(input)) {
|
|
315
|
+
return 'Should not contain "Obsidian" or an abbreviation of it ("Obsi", "sidian") -- the Community directory rejects it as implied by the plugin directory';
|
|
316
|
+
}
|
|
317
|
+
if (input.toLowerCase().includes("plugin")) {
|
|
318
|
+
return 'Should not contain "Plugin" -- the Community directory rejects it as implied by the plugin directory';
|
|
319
|
+
}
|
|
320
|
+
const coreName = findCoreFeatureName(input);
|
|
321
|
+
if (coreName !== void 0) {
|
|
322
|
+
return `Should not be the name of an Obsidian core plugin or core feature -- "${coreName}" is one, and the Community directory rejects a name that takes it`;
|
|
323
|
+
}
|
|
324
|
+
if (!ALLOWED_NAME_CHARACTERS.test(input)) {
|
|
325
|
+
return "Should use Basic Latin letters and digits only, with hyphens, plus signs and parentheses the only punctuation the Community directory accepts";
|
|
326
|
+
}
|
|
327
|
+
return void 0;
|
|
328
|
+
}
|
|
329
|
+
function findCoreFeatureName(name) {
|
|
330
|
+
const normalized = name.trim().toLowerCase();
|
|
331
|
+
return CORE_FEATURE_NAMES.find((candidate) => candidate.toLowerCase() === normalized);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// src/features/funding-platform/funding-platform-option.ts
|
|
335
|
+
var FundingPlatformOption = class extends FeatureOption {
|
|
336
|
+
badgeColor;
|
|
337
|
+
badgeLabel;
|
|
338
|
+
badgeLogo;
|
|
339
|
+
badgeLogoColor;
|
|
340
|
+
fundingYmlKey;
|
|
341
|
+
constructor(config) {
|
|
342
|
+
super({ promptHint: config.promptHint, promptLabel: config.promptLabel, settingValue: config.settingValue });
|
|
343
|
+
this.badgeColor = config.badgeColor;
|
|
344
|
+
this.badgeLabel = config.badgeLabel;
|
|
345
|
+
this.badgeLogo = config.badgeLogo;
|
|
346
|
+
this.badgeLogoColor = config.badgeLogoColor;
|
|
347
|
+
this.fundingYmlKey = config.fundingYmlKey;
|
|
348
|
+
}
|
|
349
|
+
/** The shields.io badge, as one markdown image link to {@link getUrl}. */
|
|
350
|
+
getBadge(answers) {
|
|
351
|
+
const label = encodeURIComponent(this.badgeLabel.replaceAll("-", "--").replaceAll("_", "__"));
|
|
352
|
+
let query = "";
|
|
353
|
+
if (this.badgeLogo !== void 0) {
|
|
354
|
+
query = `?logo=${this.badgeLogo}`;
|
|
355
|
+
if (this.badgeLogoColor !== void 0) {
|
|
356
|
+
query += `&logoColor=${this.badgeLogoColor}`;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return `[](${this.getUrl(answers)})`;
|
|
360
|
+
}
|
|
361
|
+
/** The value written after `<fundingYmlKey>: ` in `FUNDING.yml`. */
|
|
362
|
+
getFundingYmlValue(answers) {
|
|
363
|
+
return answers.fundingUsername;
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
// src/features/funding-platform/buy-me-a-coffee.ts
|
|
368
|
+
var BuyMeACoffee = class extends FundingPlatformOption {
|
|
369
|
+
constructor() {
|
|
370
|
+
super({
|
|
371
|
+
badgeColor: "ffdd00",
|
|
372
|
+
badgeLabel: "Buy Me a Coffee",
|
|
373
|
+
badgeLogo: "buy-me-a-coffee",
|
|
374
|
+
badgeLogoColor: "black",
|
|
375
|
+
fundingYmlKey: "buy_me_a_coffee",
|
|
376
|
+
promptHint: "buymeacoffee.com/<username>",
|
|
377
|
+
promptLabel: "Buy Me a Coffee",
|
|
378
|
+
settingValue: "buy-me-a-coffee"
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
getUrl(answers) {
|
|
382
|
+
return `https://www.buymeacoffee.com/${answers.fundingUsername}`;
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
// src/features/funding-platform/custom.ts
|
|
387
|
+
var Custom = class extends FundingPlatformOption {
|
|
388
|
+
constructor() {
|
|
389
|
+
super({
|
|
390
|
+
badgeColor: "ff69b4",
|
|
391
|
+
badgeLabel: "Support",
|
|
392
|
+
fundingYmlKey: "custom",
|
|
393
|
+
promptHint: "Any other URL",
|
|
394
|
+
promptLabel: "Custom URL",
|
|
395
|
+
settingValue: "custom"
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
/** A one-element flow sequence, single-quoted so a URL's `#` or `: ` cannot end the scalar early. */
|
|
399
|
+
getFundingYmlValue(answers) {
|
|
400
|
+
return `['${answers.fundingUrl.replaceAll("'", "''")}']`;
|
|
401
|
+
}
|
|
402
|
+
getUrl(answers) {
|
|
403
|
+
return answers.fundingUrl;
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
|
|
407
|
+
// src/features/funding-platform/github-sponsors.ts
|
|
408
|
+
var GitHubSponsors = class extends FundingPlatformOption {
|
|
409
|
+
constructor() {
|
|
410
|
+
super({
|
|
411
|
+
badgeColor: "ea4aaa",
|
|
412
|
+
badgeLabel: "GitHub Sponsors",
|
|
413
|
+
badgeLogo: "githubsponsors",
|
|
414
|
+
badgeLogoColor: "white",
|
|
415
|
+
fundingYmlKey: "github",
|
|
416
|
+
promptHint: "github.com/sponsors/<username>",
|
|
417
|
+
promptLabel: "GitHub Sponsors",
|
|
418
|
+
settingValue: "github-sponsors"
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
getUrl(answers) {
|
|
422
|
+
return `https://github.com/sponsors/${answers.fundingUsername}`;
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
// src/features/funding-platform/ko-fi.ts
|
|
427
|
+
var KoFi = class extends FundingPlatformOption {
|
|
428
|
+
constructor() {
|
|
429
|
+
super({
|
|
430
|
+
badgeColor: "ff5e5b",
|
|
431
|
+
badgeLabel: "Ko-fi",
|
|
432
|
+
badgeLogo: "kofi",
|
|
433
|
+
badgeLogoColor: "white",
|
|
434
|
+
fundingYmlKey: "ko_fi",
|
|
435
|
+
promptHint: "ko-fi.com/<username>",
|
|
436
|
+
promptLabel: "Ko-fi",
|
|
437
|
+
settingValue: "ko-fi"
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
getUrl(answers) {
|
|
441
|
+
return `https://ko-fi.com/${answers.fundingUsername}`;
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
// src/features/funding-platform/liberapay.ts
|
|
446
|
+
var Liberapay = class extends FundingPlatformOption {
|
|
447
|
+
constructor() {
|
|
448
|
+
super({
|
|
449
|
+
badgeColor: "f6c915",
|
|
450
|
+
badgeLabel: "Liberapay",
|
|
451
|
+
badgeLogo: "liberapay",
|
|
452
|
+
badgeLogoColor: "black",
|
|
453
|
+
fundingYmlKey: "liberapay",
|
|
454
|
+
promptHint: "liberapay.com/<username>",
|
|
455
|
+
promptLabel: "Liberapay",
|
|
456
|
+
settingValue: "liberapay"
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
getUrl(answers) {
|
|
460
|
+
return `https://liberapay.com/${answers.fundingUsername}`;
|
|
461
|
+
}
|
|
462
|
+
};
|
|
463
|
+
|
|
464
|
+
// src/features/funding-platform/none.ts
|
|
465
|
+
var None = class extends FundingPlatformOption {
|
|
466
|
+
constructor() {
|
|
467
|
+
super({
|
|
468
|
+
badgeColor: "",
|
|
469
|
+
badgeLabel: "",
|
|
470
|
+
fundingYmlKey: "",
|
|
471
|
+
promptHint: "No funding link, FUNDING.yml or badge",
|
|
472
|
+
promptLabel: "(none)",
|
|
473
|
+
settingValue: "none"
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
getUrl() {
|
|
477
|
+
return "";
|
|
478
|
+
}
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
// src/features/funding-platform/open-collective.ts
|
|
482
|
+
var OpenCollective = class extends FundingPlatformOption {
|
|
483
|
+
constructor() {
|
|
484
|
+
super({
|
|
485
|
+
badgeColor: "7fadf2",
|
|
486
|
+
badgeLabel: "Open Collective",
|
|
487
|
+
badgeLogo: "opencollective",
|
|
488
|
+
badgeLogoColor: "white",
|
|
489
|
+
fundingYmlKey: "open_collective",
|
|
490
|
+
promptHint: "opencollective.com/<username>",
|
|
491
|
+
promptLabel: "Open Collective",
|
|
492
|
+
settingValue: "open-collective"
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
getUrl(answers) {
|
|
496
|
+
return `https://opencollective.com/${answers.fundingUsername}`;
|
|
497
|
+
}
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
// src/features/funding-platform/patreon.ts
|
|
501
|
+
var Patreon = class extends FundingPlatformOption {
|
|
502
|
+
constructor() {
|
|
503
|
+
super({
|
|
504
|
+
badgeColor: "f96854",
|
|
505
|
+
badgeLabel: "Patreon",
|
|
506
|
+
badgeLogo: "patreon",
|
|
507
|
+
badgeLogoColor: "white",
|
|
508
|
+
fundingYmlKey: "patreon",
|
|
509
|
+
promptHint: "patreon.com/<username>",
|
|
510
|
+
promptLabel: "Patreon",
|
|
511
|
+
settingValue: "patreon"
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
getUrl(answers) {
|
|
515
|
+
return `https://www.patreon.com/${answers.fundingUsername}`;
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
|
|
519
|
+
// src/features/funding-platform/polar.ts
|
|
520
|
+
var Polar = class extends FundingPlatformOption {
|
|
521
|
+
constructor() {
|
|
522
|
+
super({
|
|
523
|
+
badgeColor: "0062ff",
|
|
524
|
+
badgeLabel: "Polar",
|
|
525
|
+
fundingYmlKey: "polar",
|
|
526
|
+
promptHint: "polar.sh/<username>",
|
|
527
|
+
promptLabel: "Polar",
|
|
528
|
+
settingValue: "polar"
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
getUrl(answers) {
|
|
532
|
+
return `https://polar.sh/${answers.fundingUsername}`;
|
|
533
|
+
}
|
|
534
|
+
};
|
|
535
|
+
|
|
536
|
+
// src/features/funding-platform/thanks-dev.ts
|
|
537
|
+
var ThanksDev = class extends FundingPlatformOption {
|
|
538
|
+
constructor() {
|
|
539
|
+
super({
|
|
540
|
+
badgeColor: "000000",
|
|
541
|
+
badgeLabel: "thanks.dev",
|
|
542
|
+
fundingYmlKey: "thanks_dev",
|
|
543
|
+
promptHint: "thanks.dev/<username>, e.g. u/gh/<GitHub username>",
|
|
544
|
+
promptLabel: "thanks.dev",
|
|
545
|
+
settingValue: "thanks-dev"
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
getUrl(answers) {
|
|
549
|
+
return `https://thanks.dev/${answers.fundingUsername}`;
|
|
550
|
+
}
|
|
551
|
+
};
|
|
552
|
+
|
|
553
|
+
// src/features/funding-platform/index.ts
|
|
554
|
+
var FUNDING_PLATFORM_OPTIONS = [
|
|
555
|
+
new None(),
|
|
556
|
+
new BuyMeACoffee(),
|
|
557
|
+
new GitHubSponsors(),
|
|
558
|
+
new KoFi(),
|
|
559
|
+
new Liberapay(),
|
|
560
|
+
new OpenCollective(),
|
|
561
|
+
new Patreon(),
|
|
562
|
+
new Polar(),
|
|
563
|
+
new ThanksDev(),
|
|
564
|
+
new Custom()
|
|
565
|
+
];
|
|
566
|
+
function asksFundingUsername(platform) {
|
|
567
|
+
return platform !== void 0 && platform !== "none" && platform !== "custom";
|
|
568
|
+
}
|
|
569
|
+
async function promptFundingPlatform(savedValue) {
|
|
570
|
+
return promptFeature({ defaultOption: new BuyMeACoffee(), message: "Funding platform", options: FUNDING_PLATFORM_OPTIONS, savedValue });
|
|
571
|
+
}
|
|
572
|
+
function resolveFunding(answers) {
|
|
573
|
+
const option = FUNDING_PLATFORM_OPTIONS.find((candidate) => candidate.settingValue === answers.fundingPlatform);
|
|
574
|
+
if (!option?.getUrl(answers)) {
|
|
575
|
+
return null;
|
|
167
576
|
}
|
|
168
577
|
return option;
|
|
169
578
|
}
|
|
579
|
+
function validateFundingUsername(value) {
|
|
580
|
+
if (!value) {
|
|
581
|
+
return "Should not be empty";
|
|
582
|
+
}
|
|
583
|
+
if (!/^[\w./-]+$/.test(value)) {
|
|
584
|
+
return "Use only letters, digits, `.`, `_`, `-` and `/`";
|
|
585
|
+
}
|
|
586
|
+
return void 0;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
// src/prompts/prompts.ts
|
|
590
|
+
import {
|
|
591
|
+
cancel as cancel2,
|
|
592
|
+
log
|
|
593
|
+
} from "@clack/prompts";
|
|
594
|
+
import { styleText as styleText3 } from "node:util";
|
|
170
595
|
|
|
171
596
|
// src/features/api-subset/official.ts
|
|
172
597
|
var Official = class extends FeatureOption {
|
|
@@ -191,22 +616,25 @@ async function promptApiSubset(savedValue) {
|
|
|
191
616
|
return promptFeature({ defaultOption: new Official(), message: "Obsidian API subset", options: API_SUBSET_OPTIONS, savedValue });
|
|
192
617
|
}
|
|
193
618
|
|
|
619
|
+
// src/features/preset/is-framework-preset.ts
|
|
620
|
+
var FRAMEWORK_PRESETS = /* @__PURE__ */ new Set(["all-in-one", "demo", "docs-showcase"]);
|
|
621
|
+
function isFrameworkPreset(preset) {
|
|
622
|
+
return FRAMEWORK_PRESETS.has(preset);
|
|
623
|
+
}
|
|
624
|
+
|
|
194
625
|
// src/features/bundler/esbuild.ts
|
|
195
626
|
var Esbuild = class extends FeatureOption {
|
|
196
627
|
constructor() {
|
|
197
628
|
super({ promptHint: "Fast and simple (recommended)", promptLabel: "esbuild", settingValue: "esbuild" });
|
|
198
629
|
}
|
|
199
|
-
configure(builder) {
|
|
630
|
+
configure(builder, answers) {
|
|
631
|
+
if (isFrameworkPreset(answers.preset)) {
|
|
632
|
+
return;
|
|
633
|
+
}
|
|
200
634
|
builder.addPackage("esbuild");
|
|
201
635
|
}
|
|
202
636
|
};
|
|
203
637
|
|
|
204
|
-
// src/features/preset/is-framework-preset.ts
|
|
205
|
-
var FRAMEWORK_PRESETS = /* @__PURE__ */ new Set(["all-in-one", "demo", "docs-showcase"]);
|
|
206
|
-
function isFrameworkPreset(preset) {
|
|
207
|
-
return FRAMEWORK_PRESETS.has(preset);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
638
|
// src/features/bundler/parcel.ts
|
|
211
639
|
var Parcel = class extends FeatureOption {
|
|
212
640
|
constructor() {
|
|
@@ -321,14 +749,14 @@ var ConventionalCommits = class extends FeatureOption {
|
|
|
321
749
|
};
|
|
322
750
|
|
|
323
751
|
// src/features/commit-linting/none.ts
|
|
324
|
-
var
|
|
752
|
+
var None2 = class extends FeatureOption {
|
|
325
753
|
constructor() {
|
|
326
754
|
super({ promptHint: "No commit linting", promptLabel: "(none)", settingValue: "none" });
|
|
327
755
|
}
|
|
328
756
|
};
|
|
329
757
|
|
|
330
758
|
// src/features/commit-linting/index.ts
|
|
331
|
-
var COMMIT_LINTING_OPTIONS = [new
|
|
759
|
+
var COMMIT_LINTING_OPTIONS = [new None2(), new ConventionalCommits()];
|
|
332
760
|
async function promptCommitLinting(savedValue) {
|
|
333
761
|
return promptFeature({ defaultOption: new ConventionalCommits(), message: "Commit linting", options: COMMIT_LINTING_OPTIONS, savedValue });
|
|
334
762
|
}
|
|
@@ -356,409 +784,154 @@ function isMeasured(answers) {
|
|
|
356
784
|
}
|
|
357
785
|
|
|
358
786
|
// src/features/coverage-badge/none.ts
|
|
359
|
-
var
|
|
787
|
+
var None3 = class extends FeatureOption {
|
|
360
788
|
constructor() {
|
|
361
789
|
super({ promptHint: "No coverage badge", promptLabel: "(none)", settingValue: "none" });
|
|
362
790
|
}
|
|
363
791
|
};
|
|
364
792
|
|
|
365
793
|
// src/features/coverage-badge/index.ts
|
|
366
|
-
var COVERAGE_BADGE_OPTIONS = [new
|
|
794
|
+
var COVERAGE_BADGE_OPTIONS = [new None3(), new CoverageBadge()];
|
|
367
795
|
async function promptCoverageBadge(savedValue) {
|
|
368
|
-
return promptFeature({ defaultOption: new
|
|
796
|
+
return promptFeature({ defaultOption: new None3(), message: "Coverage badge", options: COVERAGE_BADGE_OPTIONS, savedValue });
|
|
369
797
|
}
|
|
370
798
|
|
|
371
799
|
// src/features/e2e-test-runner/none.ts
|
|
372
|
-
var None3 = class extends FeatureOption {
|
|
373
|
-
constructor() {
|
|
374
|
-
super({ promptHint: "No E2E testing", promptLabel: "(none)", settingValue: "none" });
|
|
375
|
-
}
|
|
376
|
-
};
|
|
377
|
-
|
|
378
|
-
// src/features/e2e-test-runner/obsidian-test.ts
|
|
379
|
-
var ObsidianTest = class extends FeatureOption {
|
|
380
|
-
constructor() {
|
|
381
|
-
super({ promptHint: "Tests run inside Obsidian with real app APIs", promptLabel: "obsidian-test", settingValue: "obsidian-test" });
|
|
382
|
-
}
|
|
383
|
-
configure(builder) {
|
|
384
|
-
builder.addPackage("obsidian-test").addScript("test:e2e").addFiles([
|
|
385
|
-
"e2e/sample.spec.ts",
|
|
386
|
-
"scripts/test-e2e.ts"
|
|
387
|
-
]).addPartial("has-e2e");
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
|
|
391
|
-
// src/features/e2e-test-runner/wdio-obsidian.ts
|
|
392
|
-
var WdioObsidian = class extends FeatureOption {
|
|
393
|
-
constructor() {
|
|
394
|
-
super({ promptHint: "WebdriverIO service for Obsidian, multi-version & CI/CD", promptLabel: "wdio-obsidian", settingValue: "wdio-obsidian" });
|
|
395
|
-
}
|
|
396
|
-
configure(builder, answers) {
|
|
397
|
-
builder.addPackage("@wdio/cli").addDepcheckIgnore("@wdio/cli", "run as the `wdio` CLI by `scripts/test-e2e.ts`.").addPackage("@wdio/globals").addPackage("@wdio/local-runner").addDepcheckIgnore("@wdio/local-runner", "loaded by name by wdio for the config's `runner: 'local'`.").addPackage("@wdio/mocha-framework").addPackage("expect-webdriverio").addPackage("wdio-obsidian-service").addScript("test:e2e").addFiles([
|
|
398
|
-
"e2e/sample.spec.ts",
|
|
399
|
-
"scripts/test-e2e.ts"
|
|
400
|
-
]).addPartial("has-e2e");
|
|
401
|
-
if (isFrameworkPreset(answers.preset)) {
|
|
402
|
-
builder.addPackage("wdio-obsidian-reporter").addDepcheckIgnore("wdio-obsidian-reporter", "loaded by name by wdio for the `obsidian` reporter `defineWdioObsidianConfig` names.").addFiles(["wdio.conf.mts"]);
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
|
-
builder.addFiles(["wdio.conf.ts"]);
|
|
406
|
-
}
|
|
407
|
-
};
|
|
408
|
-
|
|
409
|
-
// src/features/e2e-test-runner/index.ts
|
|
410
|
-
var E2E_TEST_RUNNER_OPTIONS = [new None3(), new ObsidianTest(), new WdioObsidian()];
|
|
411
|
-
async function promptE2eTestRunner(savedValue) {
|
|
412
|
-
return promptFeature({ defaultOption: new None3(), message: "E2E testing", options: E2E_TEST_RUNNER_OPTIONS, savedValue });
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
// src/features/editor-extensions/code-mirror.ts
|
|
416
|
-
var CodeMirror = class extends FeatureOption {
|
|
417
|
-
constructor() {
|
|
418
|
-
super({ promptHint: "CodeMirror 6 state fields, view plugins, decorations", promptLabel: "CodeMirror", settingValue: "codemirror" });
|
|
419
|
-
}
|
|
420
|
-
configure(builder) {
|
|
421
|
-
builder.addPackage("@codemirror/state").addPackage("@codemirror/view").addFiles([
|
|
422
|
-
"src/editor-extensions/sample-state-field.ts",
|
|
423
|
-
"src/editor-extensions/sample-view-plugin.ts",
|
|
424
|
-
"src/editor-extensions/sample-widget.ts",
|
|
425
|
-
"src/editor-suggests/sample-editor-suggest.ts"
|
|
426
|
-
]);
|
|
427
|
-
}
|
|
428
|
-
};
|
|
429
|
-
|
|
430
|
-
// src/features/editor-extensions/none.ts
|
|
431
800
|
var None4 = class extends FeatureOption {
|
|
432
801
|
constructor() {
|
|
433
|
-
super({ promptHint: "No
|
|
434
|
-
}
|
|
435
|
-
};
|
|
436
|
-
|
|
437
|
-
// src/features/editor-extensions/index.ts
|
|
438
|
-
var EDITOR_EXTENSIONS_OPTIONS = [new None4(), new CodeMirror()];
|
|
439
|
-
async function promptEditorExtensions(savedValue) {
|
|
440
|
-
return promptFeature({ defaultOption: new None4(), message: "Editor extensions", options: EDITOR_EXTENSIONS_OPTIONS, savedValue });
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
// src/features/formatter/biome.ts
|
|
444
|
-
var Biome = class extends FeatureOption {
|
|
445
|
-
constructor() {
|
|
446
|
-
super({ partialName: "biome-formatter", promptHint: "Fast formatter (pairs with Biome linter)", promptLabel: "Biome", settingValue: "biome" });
|
|
447
|
-
}
|
|
448
|
-
configure(builder, answers) {
|
|
449
|
-
if (answers.linter !== "biome") {
|
|
450
|
-
builder.addLintStagedCommand("*.{ts,tsx,mts}", "biome format --write --no-errors-on-unmatched");
|
|
451
|
-
}
|
|
452
|
-
builder.addPackage("@biomejs/biome").addDepcheckIgnore("@biomejs/biome", "run as the `biome` CLI by the format and lint scripts, configured by `biome.jsonc`.").addScript("format").addScript("format:check").addFiles([
|
|
453
|
-
"biome.jsonc",
|
|
454
|
-
"scripts/format.ts",
|
|
455
|
-
"scripts/format-check.ts"
|
|
456
|
-
]);
|
|
457
|
-
}
|
|
458
|
-
};
|
|
459
|
-
|
|
460
|
-
// src/features/formatter/dprint.ts
|
|
461
|
-
var Dprint = class extends FeatureOption {
|
|
462
|
-
constructor() {
|
|
463
|
-
super({ promptHint: "Fast, pluggable, written in Rust", promptLabel: "dprint", settingValue: "dprint" });
|
|
464
|
-
}
|
|
465
|
-
configure(builder) {
|
|
466
|
-
builder.addLintStagedCommand("*.{ts,tsx,mts}", "dprint fmt").addPackage("dprint").addDepcheckIgnore("dprint", "run as a CLI by the format scripts, configured by `dprint.json`.").addScript("format").addScript("format:check").addFiles([
|
|
467
|
-
"dprint.json",
|
|
468
|
-
"scripts/format.ts",
|
|
469
|
-
"scripts/format-check.ts"
|
|
470
|
-
]);
|
|
471
|
-
}
|
|
472
|
-
};
|
|
473
|
-
|
|
474
|
-
// src/features/formatter/none.ts
|
|
475
|
-
var None5 = class extends FeatureOption {
|
|
476
|
-
constructor() {
|
|
477
|
-
super({ promptHint: "No formatting", promptLabel: "(none)", settingValue: "none" });
|
|
478
|
-
}
|
|
479
|
-
};
|
|
480
|
-
|
|
481
|
-
// src/features/formatter/prettier.ts
|
|
482
|
-
var Prettier = class extends FeatureOption {
|
|
483
|
-
constructor() {
|
|
484
|
-
super({ promptHint: "Opinionated, widely adopted", promptLabel: "Prettier", settingValue: "prettier" });
|
|
485
|
-
}
|
|
486
|
-
configure(builder, answers) {
|
|
487
|
-
builder.addLintStagedCommand("*.{ts,tsx,mts}", "prettier --write").addPackage("prettier").addScript("format").addScript("format:check").addFiles([
|
|
488
|
-
".prettierignore",
|
|
489
|
-
"prettier.config.mjs",
|
|
490
|
-
"scripts/format.ts",
|
|
491
|
-
"scripts/format-check.ts"
|
|
492
|
-
]);
|
|
493
|
-
if (!isFrameworkPreset(answers.preset)) {
|
|
494
|
-
builder.addFiles(["scripts/prettier.config.ts"]);
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
};
|
|
498
|
-
|
|
499
|
-
// src/features/formatter/index.ts
|
|
500
|
-
var FORMATTER_OPTIONS = [new None5(), new Biome(), new Dprint(), new Prettier()];
|
|
501
|
-
var FORMATTERS_NEEDING_INITIAL_FORMAT = /* @__PURE__ */ new Set(["biome", "prettier"]);
|
|
502
|
-
function needsInitialFormat(formatter) {
|
|
503
|
-
return FORMATTERS_NEEDING_INITIAL_FORMAT.has(formatter);
|
|
504
|
-
}
|
|
505
|
-
async function promptFormatter(savedValue) {
|
|
506
|
-
return promptFeature({ defaultOption: new Dprint(), message: "Formatter", options: FORMATTER_OPTIONS, savedValue });
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
// src/features/funding-platform/funding-platform-option.ts
|
|
510
|
-
var FundingPlatformOption = class extends FeatureOption {
|
|
511
|
-
badgeColor;
|
|
512
|
-
badgeLabel;
|
|
513
|
-
badgeLogo;
|
|
514
|
-
badgeLogoColor;
|
|
515
|
-
fundingYmlKey;
|
|
516
|
-
constructor(config) {
|
|
517
|
-
super({ promptHint: config.promptHint, promptLabel: config.promptLabel, settingValue: config.settingValue });
|
|
518
|
-
this.badgeColor = config.badgeColor;
|
|
519
|
-
this.badgeLabel = config.badgeLabel;
|
|
520
|
-
this.badgeLogo = config.badgeLogo;
|
|
521
|
-
this.badgeLogoColor = config.badgeLogoColor;
|
|
522
|
-
this.fundingYmlKey = config.fundingYmlKey;
|
|
523
|
-
}
|
|
524
|
-
/** The shields.io badge, as one markdown image link to {@link getUrl}. */
|
|
525
|
-
getBadge(answers) {
|
|
526
|
-
const label = encodeURIComponent(this.badgeLabel.replaceAll("-", "--").replaceAll("_", "__"));
|
|
527
|
-
let query = "";
|
|
528
|
-
if (this.badgeLogo !== void 0) {
|
|
529
|
-
query = `?logo=${this.badgeLogo}`;
|
|
530
|
-
if (this.badgeLogoColor !== void 0) {
|
|
531
|
-
query += `&logoColor=${this.badgeLogoColor}`;
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
return `[](${this.getUrl(answers)})`;
|
|
535
|
-
}
|
|
536
|
-
/** The value written after `<fundingYmlKey>: ` in `FUNDING.yml`. */
|
|
537
|
-
getFundingYmlValue(answers) {
|
|
538
|
-
return answers.fundingUsername;
|
|
539
|
-
}
|
|
540
|
-
};
|
|
541
|
-
|
|
542
|
-
// src/features/funding-platform/buy-me-a-coffee.ts
|
|
543
|
-
var BuyMeACoffee = class extends FundingPlatformOption {
|
|
544
|
-
constructor() {
|
|
545
|
-
super({
|
|
546
|
-
badgeColor: "ffdd00",
|
|
547
|
-
badgeLabel: "Buy Me a Coffee",
|
|
548
|
-
badgeLogo: "buy-me-a-coffee",
|
|
549
|
-
badgeLogoColor: "black",
|
|
550
|
-
fundingYmlKey: "buy_me_a_coffee",
|
|
551
|
-
promptHint: "buymeacoffee.com/<username>",
|
|
552
|
-
promptLabel: "Buy Me a Coffee",
|
|
553
|
-
settingValue: "buy-me-a-coffee"
|
|
554
|
-
});
|
|
555
|
-
}
|
|
556
|
-
getUrl(answers) {
|
|
557
|
-
return `https://www.buymeacoffee.com/${answers.fundingUsername}`;
|
|
558
|
-
}
|
|
559
|
-
};
|
|
560
|
-
|
|
561
|
-
// src/features/funding-platform/custom.ts
|
|
562
|
-
var Custom = class extends FundingPlatformOption {
|
|
563
|
-
constructor() {
|
|
564
|
-
super({
|
|
565
|
-
badgeColor: "ff69b4",
|
|
566
|
-
badgeLabel: "Support",
|
|
567
|
-
fundingYmlKey: "custom",
|
|
568
|
-
promptHint: "Any other URL",
|
|
569
|
-
promptLabel: "Custom URL",
|
|
570
|
-
settingValue: "custom"
|
|
571
|
-
});
|
|
572
|
-
}
|
|
573
|
-
/** A one-element flow sequence, single-quoted so a URL's `#` or `: ` cannot end the scalar early. */
|
|
574
|
-
getFundingYmlValue(answers) {
|
|
575
|
-
return `['${answers.fundingUrl.replaceAll("'", "''")}']`;
|
|
576
|
-
}
|
|
577
|
-
getUrl(answers) {
|
|
578
|
-
return answers.fundingUrl;
|
|
802
|
+
super({ promptHint: "No E2E testing", promptLabel: "(none)", settingValue: "none" });
|
|
579
803
|
}
|
|
580
804
|
};
|
|
581
805
|
|
|
582
|
-
// src/features/
|
|
583
|
-
var
|
|
806
|
+
// src/features/e2e-test-runner/obsidian-test.ts
|
|
807
|
+
var ObsidianTest = class extends FeatureOption {
|
|
584
808
|
constructor() {
|
|
585
|
-
super({
|
|
586
|
-
badgeColor: "ea4aaa",
|
|
587
|
-
badgeLabel: "GitHub Sponsors",
|
|
588
|
-
badgeLogo: "githubsponsors",
|
|
589
|
-
badgeLogoColor: "white",
|
|
590
|
-
fundingYmlKey: "github",
|
|
591
|
-
promptHint: "github.com/sponsors/<username>",
|
|
592
|
-
promptLabel: "GitHub Sponsors",
|
|
593
|
-
settingValue: "github-sponsors"
|
|
594
|
-
});
|
|
809
|
+
super({ promptHint: "Tests run inside Obsidian with real app APIs", promptLabel: "obsidian-test", settingValue: "obsidian-test" });
|
|
595
810
|
}
|
|
596
|
-
|
|
597
|
-
|
|
811
|
+
configure(builder) {
|
|
812
|
+
builder.addPackage("obsidian-test").addScript("test:e2e").addFiles([
|
|
813
|
+
"e2e/sample.spec.ts",
|
|
814
|
+
"scripts/test-e2e.ts"
|
|
815
|
+
]).addPartial("has-e2e");
|
|
598
816
|
}
|
|
599
817
|
};
|
|
600
818
|
|
|
601
|
-
// src/features/
|
|
602
|
-
var
|
|
819
|
+
// src/features/e2e-test-runner/wdio-obsidian.ts
|
|
820
|
+
var WdioObsidian = class extends FeatureOption {
|
|
603
821
|
constructor() {
|
|
604
|
-
super({
|
|
605
|
-
badgeColor: "ff5e5b",
|
|
606
|
-
badgeLabel: "Ko-fi",
|
|
607
|
-
badgeLogo: "kofi",
|
|
608
|
-
badgeLogoColor: "white",
|
|
609
|
-
fundingYmlKey: "ko_fi",
|
|
610
|
-
promptHint: "ko-fi.com/<username>",
|
|
611
|
-
promptLabel: "Ko-fi",
|
|
612
|
-
settingValue: "ko-fi"
|
|
613
|
-
});
|
|
822
|
+
super({ promptHint: "WebdriverIO service for Obsidian, multi-version & CI/CD", promptLabel: "wdio-obsidian", settingValue: "wdio-obsidian" });
|
|
614
823
|
}
|
|
615
|
-
|
|
616
|
-
|
|
824
|
+
configure(builder, answers) {
|
|
825
|
+
builder.addPackage("@wdio/cli").addDepcheckIgnore("@wdio/cli", "run as the `wdio` CLI by `scripts/test-e2e.ts`.").addPackage("@wdio/globals").addPackage("@wdio/local-runner").addDepcheckIgnore("@wdio/local-runner", "loaded by name by wdio for the config's `runner: 'local'`.").addPackage("@wdio/mocha-framework").addPackage("expect-webdriverio").addPackage("wdio-obsidian-service").addScript("test:e2e").addFiles([
|
|
826
|
+
"e2e/sample.spec.ts",
|
|
827
|
+
"scripts/test-e2e.ts"
|
|
828
|
+
]).addPartial("has-e2e");
|
|
829
|
+
if (isFrameworkPreset(answers.preset)) {
|
|
830
|
+
builder.addPackage("wdio-obsidian-reporter").addDepcheckIgnore("wdio-obsidian-reporter", "loaded by name by wdio for the `obsidian` reporter `defineWdioObsidianConfig` names.").addFiles(["wdio.conf.mts"]);
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
833
|
+
builder.addFiles(["wdio.conf.ts"]);
|
|
617
834
|
}
|
|
618
835
|
};
|
|
619
836
|
|
|
620
|
-
// src/features/
|
|
621
|
-
var
|
|
837
|
+
// src/features/e2e-test-runner/index.ts
|
|
838
|
+
var E2E_TEST_RUNNER_OPTIONS = [new None4(), new ObsidianTest(), new WdioObsidian()];
|
|
839
|
+
async function promptE2eTestRunner(savedValue) {
|
|
840
|
+
return promptFeature({ defaultOption: new None4(), message: "E2E testing", options: E2E_TEST_RUNNER_OPTIONS, savedValue });
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
// src/features/editor-extensions/code-mirror.ts
|
|
844
|
+
var CodeMirror = class extends FeatureOption {
|
|
622
845
|
constructor() {
|
|
623
|
-
super({
|
|
624
|
-
badgeColor: "f6c915",
|
|
625
|
-
badgeLabel: "Liberapay",
|
|
626
|
-
badgeLogo: "liberapay",
|
|
627
|
-
badgeLogoColor: "black",
|
|
628
|
-
fundingYmlKey: "liberapay",
|
|
629
|
-
promptHint: "liberapay.com/<username>",
|
|
630
|
-
promptLabel: "Liberapay",
|
|
631
|
-
settingValue: "liberapay"
|
|
632
|
-
});
|
|
846
|
+
super({ promptHint: "CodeMirror 6 state fields, view plugins, decorations", promptLabel: "CodeMirror", settingValue: "codemirror" });
|
|
633
847
|
}
|
|
634
|
-
|
|
635
|
-
|
|
848
|
+
configure(builder) {
|
|
849
|
+
builder.addPackage("@codemirror/state").addPackage("@codemirror/view").addFiles([
|
|
850
|
+
"src/editor-extensions/sample-state-field.ts",
|
|
851
|
+
"src/editor-extensions/sample-view-plugin.ts",
|
|
852
|
+
"src/editor-extensions/sample-widget.ts",
|
|
853
|
+
"src/editor-suggests/sample-editor-suggest.ts"
|
|
854
|
+
]);
|
|
636
855
|
}
|
|
637
856
|
};
|
|
638
857
|
|
|
639
|
-
// src/features/
|
|
640
|
-
var
|
|
858
|
+
// src/features/editor-extensions/none.ts
|
|
859
|
+
var None5 = class extends FeatureOption {
|
|
641
860
|
constructor() {
|
|
642
|
-
super({
|
|
643
|
-
badgeColor: "",
|
|
644
|
-
badgeLabel: "",
|
|
645
|
-
fundingYmlKey: "",
|
|
646
|
-
promptHint: "No funding link, FUNDING.yml or badge",
|
|
647
|
-
promptLabel: "(none)",
|
|
648
|
-
settingValue: "none"
|
|
649
|
-
});
|
|
650
|
-
}
|
|
651
|
-
getUrl() {
|
|
652
|
-
return "";
|
|
861
|
+
super({ promptHint: "No editor extensions", promptLabel: "(none)", settingValue: "none" });
|
|
653
862
|
}
|
|
654
863
|
};
|
|
655
864
|
|
|
656
|
-
// src/features/
|
|
657
|
-
var
|
|
865
|
+
// src/features/editor-extensions/index.ts
|
|
866
|
+
var EDITOR_EXTENSIONS_OPTIONS = [new None5(), new CodeMirror()];
|
|
867
|
+
async function promptEditorExtensions(savedValue) {
|
|
868
|
+
return promptFeature({ defaultOption: new None5(), message: "Editor extensions", options: EDITOR_EXTENSIONS_OPTIONS, savedValue });
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
// src/features/formatter/biome.ts
|
|
872
|
+
var Biome = class extends FeatureOption {
|
|
658
873
|
constructor() {
|
|
659
|
-
super({
|
|
660
|
-
badgeColor: "7fadf2",
|
|
661
|
-
badgeLabel: "Open Collective",
|
|
662
|
-
badgeLogo: "opencollective",
|
|
663
|
-
badgeLogoColor: "white",
|
|
664
|
-
fundingYmlKey: "open_collective",
|
|
665
|
-
promptHint: "opencollective.com/<username>",
|
|
666
|
-
promptLabel: "Open Collective",
|
|
667
|
-
settingValue: "open-collective"
|
|
668
|
-
});
|
|
874
|
+
super({ partialName: "biome-formatter", promptHint: "Fast formatter (pairs with Biome linter)", promptLabel: "Biome", settingValue: "biome" });
|
|
669
875
|
}
|
|
670
|
-
|
|
671
|
-
|
|
876
|
+
configure(builder, answers) {
|
|
877
|
+
if (answers.linter !== "biome") {
|
|
878
|
+
builder.addLintStagedCommand("*.{ts,tsx,mts}", "biome format --write --no-errors-on-unmatched");
|
|
879
|
+
}
|
|
880
|
+
builder.addPackage("@biomejs/biome").addDepcheckIgnore("@biomejs/biome", "run as the `biome` CLI by the format and lint scripts, configured by `biome.jsonc`.").addScript("format").addScript("format:check").addFiles([
|
|
881
|
+
"biome.jsonc",
|
|
882
|
+
"scripts/format.ts",
|
|
883
|
+
"scripts/format-check.ts"
|
|
884
|
+
]);
|
|
672
885
|
}
|
|
673
886
|
};
|
|
674
887
|
|
|
675
|
-
// src/features/
|
|
676
|
-
var
|
|
888
|
+
// src/features/formatter/dprint.ts
|
|
889
|
+
var Dprint = class extends FeatureOption {
|
|
677
890
|
constructor() {
|
|
678
|
-
super({
|
|
679
|
-
badgeColor: "f96854",
|
|
680
|
-
badgeLabel: "Patreon",
|
|
681
|
-
badgeLogo: "patreon",
|
|
682
|
-
badgeLogoColor: "white",
|
|
683
|
-
fundingYmlKey: "patreon",
|
|
684
|
-
promptHint: "patreon.com/<username>",
|
|
685
|
-
promptLabel: "Patreon",
|
|
686
|
-
settingValue: "patreon"
|
|
687
|
-
});
|
|
891
|
+
super({ promptHint: "Fast, pluggable, written in Rust", promptLabel: "dprint", settingValue: "dprint" });
|
|
688
892
|
}
|
|
689
|
-
|
|
690
|
-
|
|
893
|
+
configure(builder) {
|
|
894
|
+
builder.addLintStagedCommand("*.{ts,tsx,mts}", "dprint fmt").addPackage("dprint").addDepcheckIgnore("dprint", "run as a CLI by the format scripts, configured by `dprint.json`.").addScript("format").addScript("format:check").addFiles([
|
|
895
|
+
"dprint.json",
|
|
896
|
+
"scripts/format.ts",
|
|
897
|
+
"scripts/format-check.ts"
|
|
898
|
+
]);
|
|
691
899
|
}
|
|
692
900
|
};
|
|
693
901
|
|
|
694
|
-
// src/features/
|
|
695
|
-
var
|
|
902
|
+
// src/features/formatter/none.ts
|
|
903
|
+
var None6 = class extends FeatureOption {
|
|
696
904
|
constructor() {
|
|
697
|
-
super({
|
|
698
|
-
badgeColor: "0062ff",
|
|
699
|
-
badgeLabel: "Polar",
|
|
700
|
-
fundingYmlKey: "polar",
|
|
701
|
-
promptHint: "polar.sh/<username>",
|
|
702
|
-
promptLabel: "Polar",
|
|
703
|
-
settingValue: "polar"
|
|
704
|
-
});
|
|
705
|
-
}
|
|
706
|
-
getUrl(answers) {
|
|
707
|
-
return `https://polar.sh/${answers.fundingUsername}`;
|
|
905
|
+
super({ promptHint: "No formatting", promptLabel: "(none)", settingValue: "none" });
|
|
708
906
|
}
|
|
709
907
|
};
|
|
710
908
|
|
|
711
|
-
// src/features/
|
|
712
|
-
var
|
|
909
|
+
// src/features/formatter/prettier.ts
|
|
910
|
+
var Prettier = class extends FeatureOption {
|
|
713
911
|
constructor() {
|
|
714
|
-
super({
|
|
715
|
-
badgeColor: "000000",
|
|
716
|
-
badgeLabel: "thanks.dev",
|
|
717
|
-
fundingYmlKey: "thanks_dev",
|
|
718
|
-
promptHint: "thanks.dev/<username>, e.g. u/gh/<GitHub username>",
|
|
719
|
-
promptLabel: "thanks.dev",
|
|
720
|
-
settingValue: "thanks-dev"
|
|
721
|
-
});
|
|
912
|
+
super({ promptHint: "Opinionated, widely adopted", promptLabel: "Prettier", settingValue: "prettier" });
|
|
722
913
|
}
|
|
723
|
-
|
|
724
|
-
|
|
914
|
+
configure(builder, answers) {
|
|
915
|
+
builder.addLintStagedCommand("*.{ts,tsx,mts}", "prettier --write").addPackage("prettier").addScript("format").addScript("format:check").addFiles([
|
|
916
|
+
".prettierignore",
|
|
917
|
+
"prettier.config.mjs",
|
|
918
|
+
"scripts/format.ts",
|
|
919
|
+
"scripts/format-check.ts"
|
|
920
|
+
]);
|
|
921
|
+
if (!isFrameworkPreset(answers.preset)) {
|
|
922
|
+
builder.addFiles(["scripts/prettier.config.ts"]);
|
|
923
|
+
}
|
|
725
924
|
}
|
|
726
925
|
};
|
|
727
926
|
|
|
728
|
-
// src/features/
|
|
729
|
-
var
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
new KoFi(),
|
|
734
|
-
new Liberapay(),
|
|
735
|
-
new OpenCollective(),
|
|
736
|
-
new Patreon(),
|
|
737
|
-
new Polar(),
|
|
738
|
-
new ThanksDev(),
|
|
739
|
-
new Custom()
|
|
740
|
-
];
|
|
741
|
-
function asksFundingUsername(platform) {
|
|
742
|
-
return platform !== void 0 && platform !== "none" && platform !== "custom";
|
|
743
|
-
}
|
|
744
|
-
async function promptFundingPlatform(savedValue) {
|
|
745
|
-
return promptFeature({ defaultOption: new BuyMeACoffee(), message: "Funding platform", options: FUNDING_PLATFORM_OPTIONS, savedValue });
|
|
746
|
-
}
|
|
747
|
-
function resolveFunding(answers) {
|
|
748
|
-
const option = FUNDING_PLATFORM_OPTIONS.find((candidate) => candidate.settingValue === answers.fundingPlatform);
|
|
749
|
-
if (!option?.getUrl(answers)) {
|
|
750
|
-
return null;
|
|
751
|
-
}
|
|
752
|
-
return option;
|
|
927
|
+
// src/features/formatter/index.ts
|
|
928
|
+
var FORMATTER_OPTIONS = [new None6(), new Biome(), new Dprint(), new Prettier()];
|
|
929
|
+
var FORMATTERS_NEEDING_INITIAL_FORMAT = /* @__PURE__ */ new Set(["biome", "prettier"]);
|
|
930
|
+
function needsInitialFormat(formatter) {
|
|
931
|
+
return FORMATTERS_NEEDING_INITIAL_FORMAT.has(formatter);
|
|
753
932
|
}
|
|
754
|
-
function
|
|
755
|
-
|
|
756
|
-
return "Should not be empty";
|
|
757
|
-
}
|
|
758
|
-
if (!/^[\w./-]+$/.test(value)) {
|
|
759
|
-
return "Use only letters, digits, `.`, `_`, `-` and `/`";
|
|
760
|
-
}
|
|
761
|
-
return void 0;
|
|
933
|
+
async function promptFormatter(savedValue) {
|
|
934
|
+
return promptFeature({ defaultOption: new Dprint(), message: "Formatter", options: FORMATTER_OPTIONS, savedValue });
|
|
762
935
|
}
|
|
763
936
|
|
|
764
937
|
// src/features/git-hub-actions/ci-and-release.ts
|
|
@@ -805,12 +978,15 @@ var BugAndFeature = class extends FeatureOption {
|
|
|
805
978
|
// The real plugins' names, underscores and all. They used to be emitted as `bug-report.yml` and
|
|
806
979
|
// `feature-request.yml`, because any `_` in a basename was read as the partial marker and the render
|
|
807
980
|
// Loop silently skipped both forms; `isPartialTemplatePath` now reads only a kebab-case tail as one.
|
|
808
|
-
configure(builder) {
|
|
981
|
+
configure(builder, answers) {
|
|
809
982
|
builder.addFiles([
|
|
810
983
|
".github/ISSUE_TEMPLATE/bug_report.yml",
|
|
811
984
|
".github/ISSUE_TEMPLATE/config.yml",
|
|
812
985
|
".github/ISSUE_TEMPLATE/feature_request.yml"
|
|
813
986
|
]);
|
|
987
|
+
if (isFrameworkPreset(answers.preset)) {
|
|
988
|
+
builder.addPartial("has-bug-report-command");
|
|
989
|
+
}
|
|
814
990
|
}
|
|
815
991
|
};
|
|
816
992
|
|
|
@@ -1069,7 +1245,6 @@ var DEMO_VAULT_TEMPLATE_FILES = [
|
|
|
1069
1245
|
"demo-vault/00 Start.md",
|
|
1070
1246
|
"demo-vault/01 Sample commands.md",
|
|
1071
1247
|
"demo-vault/02 Settings.md",
|
|
1072
|
-
"demo-vault/Materials/01 Sample commands/Scratch note.md",
|
|
1073
1248
|
"demo-vault/README.md",
|
|
1074
1249
|
"demo-vault/_assets/CodeScriptToolkit/demoSetup.ts",
|
|
1075
1250
|
"demo-vault/_assets/CodeScriptToolkit/startup.ts"
|
|
@@ -1156,35 +1331,8 @@ var DocsShowcase = class extends FeatureOption {
|
|
|
1156
1331
|
if (answers.testRunner === "vitest") {
|
|
1157
1332
|
builder.addFiles(["src/docs-showcase.desktop.integration.test.ts"]);
|
|
1158
1333
|
}
|
|
1159
|
-
}
|
|
1160
|
-
};
|
|
1161
|
-
|
|
1162
|
-
// src/features/preset/official-sample.ts
|
|
1163
|
-
var OFFICIAL_SAMPLE_PRESET = "official-sample";
|
|
1164
|
-
var OFFICIAL_SAMPLE_ANSWER_KEYS = [
|
|
1165
|
-
"authorGitHubName",
|
|
1166
|
-
"authorName",
|
|
1167
|
-
"defaultBranch",
|
|
1168
|
-
"fundingPlatform",
|
|
1169
|
-
"fundingUrl",
|
|
1170
|
-
"fundingUsername",
|
|
1171
|
-
"pluginDescription",
|
|
1172
|
-
"pluginId",
|
|
1173
|
-
"pluginName",
|
|
1174
|
-
"preset"
|
|
1175
|
-
];
|
|
1176
|
-
var OfficialSample = class extends FeatureOption {
|
|
1177
|
-
constructor() {
|
|
1178
|
-
super({
|
|
1179
|
-
promptHint: "Exactly obsidianmd/obsidian-sample-plugin, with your plugin's id, name, author and description filled in",
|
|
1180
|
-
promptLabel: "Official sample plugin",
|
|
1181
|
-
settingValue: OFFICIAL_SAMPLE_PRESET
|
|
1182
|
-
});
|
|
1183
|
-
}
|
|
1184
|
-
};
|
|
1185
|
-
function isOfficialSamplePreset(preset) {
|
|
1186
|
-
return preset === OFFICIAL_SAMPLE_PRESET;
|
|
1187
|
-
}
|
|
1334
|
+
}
|
|
1335
|
+
};
|
|
1188
1336
|
|
|
1189
1337
|
// src/features/preset/standalone.ts
|
|
1190
1338
|
var Standalone = class extends FeatureOption {
|
|
@@ -1671,304 +1819,98 @@ var Vue = class extends FeatureOption {
|
|
|
1671
1819
|
"src/vue-components/sample-vue-component.d.ts",
|
|
1672
1820
|
"src/vue-components/sample-vue-component.vue",
|
|
1673
1821
|
"src/views/sample-vue-view.ts"
|
|
1674
|
-
]);
|
|
1675
|
-
if (isFrameworkPreset(answers.preset)) {
|
|
1676
|
-
builder.addBuildFramework("vue").addPackage("unplugin-vue").addDepcheckIgnore("unplugin-vue", "loaded by obsidian-dev-toolkit to compile `.vue` components.");
|
|
1677
|
-
if (answers.bundler === "parcel") {
|
|
1678
|
-
builder.addPackage("@parcel/transformer-vue").addDepcheckIgnore("@parcel/transformer-vue", "resolved by name by `@parcel/config-default` for `.vue`; nothing imports it.");
|
|
1679
|
-
}
|
|
1680
|
-
return;
|
|
1681
|
-
}
|
|
1682
|
-
builder.addPackage(getBuildPlugin2(answers.bundler));
|
|
1683
|
-
if (answers.bundler === "rollup") {
|
|
1684
|
-
builder.addPackage("@babel/core").addPackage("@babel/preset-typescript").addPackage("@rollup/plugin-babel").addDepcheckIgnore("@babel/preset-typescript", "named as a string in `scripts/rollup.config.ts`, never imported.").addPartial("rollup-babel");
|
|
1685
|
-
}
|
|
1686
|
-
if (answers.bundler === "parcel") {
|
|
1687
|
-
builder.addDepcheckIgnore("@parcel/transformer-vue", "resolved by name by `@parcel/config-default` for `.vue`; nothing imports it.");
|
|
1688
|
-
}
|
|
1689
|
-
}
|
|
1690
|
-
};
|
|
1691
|
-
function getBuildPlugin2(bundler) {
|
|
1692
|
-
const plugin = BUILD_PLUGINS5[bundler];
|
|
1693
|
-
if (!plugin) {
|
|
1694
|
-
throw new Error(`Unsupported bundler for Vue: ${bundler}`);
|
|
1695
|
-
}
|
|
1696
|
-
return plugin;
|
|
1697
|
-
}
|
|
1698
|
-
|
|
1699
|
-
// src/features/ui-framework/index.ts
|
|
1700
|
-
var UI_FRAMEWORK_OPTIONS = [new None16(), new Lit(), new Preact(), new React(), new Solid(), new Svelte(), new Vue()];
|
|
1701
|
-
async function promptUiFramework(savedValue) {
|
|
1702
|
-
return promptFeature({ defaultOption: new None16(), message: "UI framework", options: UI_FRAMEWORK_OPTIONS, savedValue });
|
|
1703
|
-
}
|
|
1704
|
-
|
|
1705
|
-
// src/features/wasm-support/none.ts
|
|
1706
|
-
var None17 = class extends FeatureOption {
|
|
1707
|
-
constructor() {
|
|
1708
|
-
super({ promptHint: "No WASM", promptLabel: "(none)", settingValue: "none" });
|
|
1709
|
-
}
|
|
1710
|
-
};
|
|
1711
|
-
|
|
1712
|
-
// src/features/wasm-support/wasm.ts
|
|
1713
|
-
var WASM_PLUGINS = {
|
|
1714
|
-
esbuild: null,
|
|
1715
|
-
parcel: null,
|
|
1716
|
-
rollup: "@rollup/plugin-wasm",
|
|
1717
|
-
vite: null,
|
|
1718
|
-
webpack: null
|
|
1719
|
-
};
|
|
1720
|
-
var Wasm = class extends FeatureOption {
|
|
1721
|
-
constructor() {
|
|
1722
|
-
super({ promptHint: "Import and use .wasm modules", promptLabel: "WASM", settingValue: "wasm" });
|
|
1723
|
-
}
|
|
1724
|
-
configure(builder, answers) {
|
|
1725
|
-
const isFramework = isFrameworkPreset(answers.preset);
|
|
1726
|
-
if (isFramework) {
|
|
1727
|
-
builder.addBuildOption("wasm", "true").addPartial("wasm-adapter");
|
|
1728
|
-
} else {
|
|
1729
|
-
const plugin = getWasmPlugin(answers.bundler);
|
|
1730
|
-
if (plugin !== null) {
|
|
1731
|
-
builder.addPackage(plugin);
|
|
1732
|
-
}
|
|
1733
|
-
builder.addFiles(["src/wasm.d.ts"]).addPartial(`wasm-${answers.bundler}`);
|
|
1734
|
-
}
|
|
1735
|
-
builder.addSentenceCaseBrand("WASM");
|
|
1736
|
-
builder.addFiles([
|
|
1737
|
-
// The one binary in the template tree, copied verbatim (see `ASSET_EXTENSIONS`). 39 bytes, one
|
|
1738
|
-
// Export, `answer()`, returning 42 -- the sample module from `CodeScript Toolkit`'s demo vault.
|
|
1739
|
-
"src/wasm/module.wasm",
|
|
1740
|
-
// Its source in WebAssembly text format. Documentation only: nothing in the build reads it, and it
|
|
1741
|
-
// Is here so the binary beside it is not opaque.
|
|
1742
|
-
"src/wasm/module.wat",
|
|
1743
|
-
"src/wasm/answer.ts",
|
|
1744
|
-
"src/wasm/sample-command.ts",
|
|
1745
|
-
"src/wasm/README.md"
|
|
1746
|
-
]);
|
|
1747
|
-
if (isFramework) {
|
|
1748
|
-
builder.addFiles(["demo-vault/03 WebAssembly.md"]);
|
|
1749
|
-
}
|
|
1750
|
-
}
|
|
1751
|
-
};
|
|
1752
|
-
function getWasmPlugin(bundler) {
|
|
1753
|
-
if (!Object.hasOwn(WASM_PLUGINS, bundler)) {
|
|
1754
|
-
throw new Error(`Unsupported bundler for WASM: ${bundler}`);
|
|
1755
|
-
}
|
|
1756
|
-
return WASM_PLUGINS[bundler] ?? null;
|
|
1757
|
-
}
|
|
1758
|
-
|
|
1759
|
-
// src/features/wasm-support/index.ts
|
|
1760
|
-
var WASM_SUPPORT_OPTIONS = [new None17(), new Wasm()];
|
|
1761
|
-
async function promptWasmSupport(savedValue) {
|
|
1762
|
-
return promptFeature({ defaultOption: new None17(), message: "WebAssembly support", options: WASM_SUPPORT_OPTIONS, savedValue });
|
|
1763
|
-
}
|
|
1764
|
-
|
|
1765
|
-
// src/answer-space.ts
|
|
1766
|
-
var SAMPLE_FUNDING_URL = "https://example.com/support-testuser";
|
|
1767
|
-
var SAMPLE_OBSIDIAN_CONFIG_FOLDER = "demo-vault/.obsidian";
|
|
1768
|
-
var ANSWER_SPACE = [
|
|
1769
|
-
toDimension("apiSubset", API_SUBSET_OPTIONS),
|
|
1770
|
-
toDimension("bundler", BUNDLER_OPTIONS),
|
|
1771
|
-
toDimension("commitLinting", COMMIT_LINTING_OPTIONS),
|
|
1772
|
-
toDimension("coverageBadge", COVERAGE_BADGE_OPTIONS),
|
|
1773
|
-
toDimension("e2eTestRunner", E2E_TEST_RUNNER_OPTIONS),
|
|
1774
|
-
toDimension("editorExtensions", EDITOR_EXTENSIONS_OPTIONS),
|
|
1775
|
-
toDimension("formatter", FORMATTER_OPTIONS),
|
|
1776
|
-
toDimension("fundingPlatform", FUNDING_PLATFORM_OPTIONS),
|
|
1777
|
-
toValueDimension("fundingUrl", ["", SAMPLE_FUNDING_URL]),
|
|
1778
|
-
toDimension("gitHubActions", GITHUB_ACTIONS_OPTIONS),
|
|
1779
|
-
toDimension("gitHubIssueTemplates", GITHUB_ISSUE_TEMPLATES_OPTIONS),
|
|
1780
|
-
toDimension("hotReload", HOT_RELOAD_OPTIONS),
|
|
1781
|
-
toDimension("internationalization", INTERNATIONALIZATION_OPTIONS),
|
|
1782
|
-
toDimension("linter", LINTER_OPTIONS),
|
|
1783
|
-
toDimension("markdownLinter", MARKDOWN_LINTER_OPTIONS),
|
|
1784
|
-
toValueDimension("obsidianConfigFolder", ["", SAMPLE_OBSIDIAN_CONFIG_FOLDER]),
|
|
1785
|
-
toDimension("packageManager", PACKAGE_MANAGER_OPTIONS),
|
|
1786
|
-
toDimension("platformSupport", PLATFORM_SUPPORT_OPTIONS),
|
|
1787
|
-
toDimension("preset", PRESET_OPTIONS),
|
|
1788
|
-
toDimension("spellChecker", SPELL_CHECKER_OPTIONS),
|
|
1789
|
-
toDimension("styling", STYLING_OPTIONS),
|
|
1790
|
-
toDimension("testRunner", TEST_RUNNER_OPTIONS),
|
|
1791
|
-
toDimension("uiFramework", UI_FRAMEWORK_OPTIONS),
|
|
1792
|
-
toDimension("wasmSupport", WASM_SUPPORT_OPTIONS)
|
|
1793
|
-
];
|
|
1794
|
-
var ANSWER_SPACE_SIZE = ANSWER_SPACE.reduce((size, dimension) => size * dimension.values.length, 1);
|
|
1795
|
-
var ANSWER_SPACE_DIMENSION_SIZES = ANSWER_SPACE.map((dimension) => dimension.values.length);
|
|
1796
|
-
function toDimension(answerKey, options) {
|
|
1797
|
-
return {
|
|
1798
|
-
answerKey,
|
|
1799
|
-
values: options.map((option) => option.settingValue)
|
|
1800
|
-
};
|
|
1801
|
-
}
|
|
1802
|
-
function toValueDimension(answerKey, values) {
|
|
1803
|
-
return { answerKey, values };
|
|
1804
|
-
}
|
|
1805
|
-
|
|
1806
|
-
// src/answers.ts
|
|
1807
|
-
var CONFIG_FILE_NAME = ".create-obsidian-plugin.json";
|
|
1808
|
-
function getPluginShortName(pluginId) {
|
|
1809
|
-
return pluginId.split("-").map((word) => (word[0] ?? "").toUpperCase() + word.slice(1)).join("");
|
|
1810
|
-
}
|
|
1811
|
-
|
|
1812
|
-
// src/deprecated-answers.ts
|
|
1813
|
-
import { log } from "@clack/prompts";
|
|
1814
|
-
var DEPRECATED_ANSWER_VALUES = {
|
|
1815
|
-
preset: {
|
|
1816
|
-
enhanced: "all-in-one"
|
|
1817
|
-
}
|
|
1818
|
-
};
|
|
1819
|
-
function resolveDeprecatedAnswer(key, value, source) {
|
|
1820
|
-
const replacement = DEPRECATED_ANSWER_VALUES[key]?.[value];
|
|
1821
|
-
if (replacement === void 0) {
|
|
1822
|
-
return value;
|
|
1823
|
-
}
|
|
1824
|
-
log.warn(`${key} "${value}" in ${source} is deprecated and was read as "${replacement}". Use "${replacement}" instead.`);
|
|
1825
|
-
return replacement;
|
|
1826
|
-
}
|
|
1827
|
-
|
|
1828
|
-
// src/directory-constraints.ts
|
|
1829
|
-
var CORE_FEATURE_NAMES = [
|
|
1830
|
-
"Audio recorder",
|
|
1831
|
-
"Backlinks",
|
|
1832
|
-
"Bases",
|
|
1833
|
-
"Bookmarks",
|
|
1834
|
-
"Canvas",
|
|
1835
|
-
"Command palette",
|
|
1836
|
-
"Daily notes",
|
|
1837
|
-
"File recovery",
|
|
1838
|
-
"Files",
|
|
1839
|
-
"Footnotes",
|
|
1840
|
-
"Format converter",
|
|
1841
|
-
"Graph view",
|
|
1842
|
-
"Live Preview",
|
|
1843
|
-
"Note composer",
|
|
1844
|
-
"Outgoing links",
|
|
1845
|
-
"Outline",
|
|
1846
|
-
"Page preview",
|
|
1847
|
-
"Properties view",
|
|
1848
|
-
"Publish",
|
|
1849
|
-
"Quick Switcher",
|
|
1850
|
-
"Random note",
|
|
1851
|
-
"Reading view",
|
|
1852
|
-
"Search",
|
|
1853
|
-
"Slash commands",
|
|
1854
|
-
"Slides",
|
|
1855
|
-
"Source mode",
|
|
1856
|
-
"Sync",
|
|
1857
|
-
"Tags view",
|
|
1858
|
-
"Templates",
|
|
1859
|
-
"Unique note creator",
|
|
1860
|
-
"Web viewer",
|
|
1861
|
-
"Word count",
|
|
1862
|
-
"Workspaces"
|
|
1863
|
-
];
|
|
1864
|
-
var MAX_DESCRIPTION_LENGTH = 250;
|
|
1865
|
-
var MIN_DESCRIPTION_LENGTH = 10;
|
|
1866
|
-
var ALLOWED_ID_CHARACTERS = /^[a-z0-9-]+$/;
|
|
1867
|
-
var ALLOWED_NAME_CHARACTERS = /^[A-Za-z0-9 \-+()]+$/;
|
|
1868
|
-
var EMOJI = /\p{Extended_Pictographic}/u;
|
|
1869
|
-
var OBSIDIAN_WORD = /\bobsidian\b/i;
|
|
1870
|
-
var OBSIDIAN_NAME_VARIANTS = /obsi|sidian/i;
|
|
1871
|
-
var SELF_REFERENCE_PATTERNS = [
|
|
1872
|
-
/\bthis plugin\b/i,
|
|
1873
|
-
/\bthis is a plugin\b/i,
|
|
1874
|
-
/\ba plugin (?:that|which)\b/i,
|
|
1875
|
-
/^the plugin\b/i,
|
|
1876
|
-
/^plugin\b/i
|
|
1877
|
-
];
|
|
1878
|
-
function findUnlistableManifestAnswers(answers) {
|
|
1879
|
-
const checked = [
|
|
1880
|
-
{ key: "pluginId", message: validatePluginId(answers.pluginId), value: answers.pluginId },
|
|
1881
|
-
{ key: "pluginName", message: validatePluginName(answers.pluginName), value: answers.pluginName },
|
|
1882
|
-
{ key: "pluginDescription", message: validatePluginDescription(answers.pluginDescription), value: answers.pluginDescription }
|
|
1883
|
-
];
|
|
1884
|
-
const problems = [];
|
|
1885
|
-
for (const { key, message, value } of checked) {
|
|
1886
|
-
if (message !== void 0) {
|
|
1887
|
-
problems.push({ key, message, value });
|
|
1888
|
-
}
|
|
1889
|
-
}
|
|
1890
|
-
return problems;
|
|
1891
|
-
}
|
|
1892
|
-
function validatePluginDescription(input) {
|
|
1893
|
-
if (!input) {
|
|
1894
|
-
return "Should not be empty";
|
|
1895
|
-
}
|
|
1896
|
-
if (EMOJI.test(input)) {
|
|
1897
|
-
return "Should not contain emoji -- the Community directory rejects them, though it does accept ordinary punctuation such as backticks, em dashes and parentheses";
|
|
1898
|
-
}
|
|
1899
|
-
if (OBSIDIAN_WORD.test(input)) {
|
|
1900
|
-
return 'Should not contain the word "Obsidian" -- the Community directory rejects it as implied by the plugin directory, even though no Obsidian document says so';
|
|
1901
|
-
}
|
|
1902
|
-
if (SELF_REFERENCE_PATTERNS.some((pattern) => pattern.test(input))) {
|
|
1903
|
-
return 'Should say what the plugin does rather than refer to itself -- the Community directory rejects "This plugin..." and "a plugin that...". Naming another plugin is fine';
|
|
1904
|
-
}
|
|
1905
|
-
if (input.length < MIN_DESCRIPTION_LENGTH) {
|
|
1906
|
-
return `Should be at least ${String(MIN_DESCRIPTION_LENGTH)} characters, so it says what the plugin does`;
|
|
1907
|
-
}
|
|
1908
|
-
if (input.length > MAX_DESCRIPTION_LENGTH) {
|
|
1909
|
-
return `Should be at most ${String(MAX_DESCRIPTION_LENGTH)} characters -- the Community directory rejects a longer one`;
|
|
1910
|
-
}
|
|
1911
|
-
if (!/^[A-Z]/.test(input)) {
|
|
1912
|
-
return 'Should start with a capital letter, ideally on an action verb: "Translates selected text...", "Imports notes from..."';
|
|
1913
|
-
}
|
|
1914
|
-
if (!input.endsWith(".")) {
|
|
1915
|
-
return "Should end with a dot";
|
|
1916
|
-
}
|
|
1917
|
-
return void 0;
|
|
1918
|
-
}
|
|
1919
|
-
function validatePluginId(input) {
|
|
1920
|
-
if (!input) {
|
|
1921
|
-
return "Should not be empty";
|
|
1922
|
-
}
|
|
1923
|
-
if (!ALLOWED_ID_CHARACTERS.test(input)) {
|
|
1924
|
-
return "Should contain only lowercase English letters, digits and hyphens";
|
|
1925
|
-
}
|
|
1926
|
-
if (!/^[a-z]/.test(input)) {
|
|
1927
|
-
return "Should start with a letter";
|
|
1928
|
-
}
|
|
1929
|
-
if (!/[a-z0-9]$/.test(input)) {
|
|
1930
|
-
return "Should end with a letter or digit";
|
|
1931
|
-
}
|
|
1932
|
-
if (input.includes("obsidian")) {
|
|
1933
|
-
return 'Should not contain "obsidian" anywhere -- the Community directory rejects it as implied by the plugin directory, and an id can never be changed once the plugin is published';
|
|
1822
|
+
]);
|
|
1823
|
+
if (isFrameworkPreset(answers.preset)) {
|
|
1824
|
+
builder.addBuildFramework("vue").addPackage("unplugin-vue").addDepcheckIgnore("unplugin-vue", "loaded by obsidian-dev-toolkit to compile `.vue` components.");
|
|
1825
|
+
if (answers.bundler === "parcel") {
|
|
1826
|
+
builder.addPackage("@parcel/transformer-vue").addDepcheckIgnore("@parcel/transformer-vue", "resolved by name by `@parcel/config-default` for `.vue`; nothing imports it.");
|
|
1827
|
+
}
|
|
1828
|
+
return;
|
|
1829
|
+
}
|
|
1830
|
+
builder.addPackage(getBuildPlugin2(answers.bundler));
|
|
1831
|
+
if (answers.bundler === "rollup") {
|
|
1832
|
+
builder.addPackage("@babel/core").addPackage("@babel/preset-typescript").addPackage("@rollup/plugin-babel").addDepcheckIgnore("@babel/preset-typescript", "named as a string in `scripts/rollup.config.ts`, never imported.").addPartial("rollup-babel");
|
|
1833
|
+
}
|
|
1834
|
+
if (answers.bundler === "parcel") {
|
|
1835
|
+
builder.addDepcheckIgnore("@parcel/transformer-vue", "resolved by name by `@parcel/config-default` for `.vue`; nothing imports it.");
|
|
1836
|
+
}
|
|
1934
1837
|
}
|
|
1935
|
-
|
|
1936
|
-
|
|
1838
|
+
};
|
|
1839
|
+
function getBuildPlugin2(bundler) {
|
|
1840
|
+
const plugin = BUILD_PLUGINS5[bundler];
|
|
1841
|
+
if (!plugin) {
|
|
1842
|
+
throw new Error(`Unsupported bundler for Vue: ${bundler}`);
|
|
1937
1843
|
}
|
|
1938
|
-
return
|
|
1844
|
+
return plugin;
|
|
1939
1845
|
}
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1846
|
+
|
|
1847
|
+
// src/features/ui-framework/index.ts
|
|
1848
|
+
var UI_FRAMEWORK_OPTIONS = [new None16(), new Lit(), new Preact(), new React(), new Solid(), new Svelte(), new Vue()];
|
|
1849
|
+
async function promptUiFramework(savedValue) {
|
|
1850
|
+
return promptFeature({ defaultOption: new None16(), message: "UI framework", options: UI_FRAMEWORK_OPTIONS, savedValue });
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1853
|
+
// src/features/wasm-support/none.ts
|
|
1854
|
+
var None17 = class extends FeatureOption {
|
|
1855
|
+
constructor() {
|
|
1856
|
+
super({ promptHint: "No WASM", promptLabel: "(none)", settingValue: "none" });
|
|
1946
1857
|
}
|
|
1947
|
-
|
|
1948
|
-
|
|
1858
|
+
};
|
|
1859
|
+
|
|
1860
|
+
// src/features/wasm-support/wasm.ts
|
|
1861
|
+
var WASM_PLUGINS = {
|
|
1862
|
+
esbuild: null,
|
|
1863
|
+
parcel: null,
|
|
1864
|
+
rollup: "@rollup/plugin-wasm",
|
|
1865
|
+
vite: null,
|
|
1866
|
+
webpack: null
|
|
1867
|
+
};
|
|
1868
|
+
var Wasm = class extends FeatureOption {
|
|
1869
|
+
constructor() {
|
|
1870
|
+
super({ promptHint: "Import and use .wasm modules", promptLabel: "WASM", settingValue: "wasm" });
|
|
1949
1871
|
}
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1872
|
+
configure(builder, answers) {
|
|
1873
|
+
const isFramework = isFrameworkPreset(answers.preset);
|
|
1874
|
+
if (isFramework) {
|
|
1875
|
+
builder.addBuildOption("wasm", "true").addPartial("wasm-adapter");
|
|
1876
|
+
} else {
|
|
1877
|
+
const plugin = getWasmPlugin(answers.bundler);
|
|
1878
|
+
if (plugin !== null) {
|
|
1879
|
+
builder.addPackage(plugin);
|
|
1880
|
+
}
|
|
1881
|
+
builder.addFiles(["src/wasm.d.ts"]).addPartial(`wasm-${answers.bundler}`);
|
|
1882
|
+
}
|
|
1883
|
+
builder.addSentenceCaseBrand("WASM");
|
|
1884
|
+
builder.addFiles([
|
|
1885
|
+
// The one binary in the template tree, copied verbatim (see `ASSET_EXTENSIONS`). 39 bytes, one
|
|
1886
|
+
// Export, `answer()`, returning 42 -- the sample module from `CodeScript Toolkit`'s demo vault.
|
|
1887
|
+
"src/wasm/module.wasm",
|
|
1888
|
+
// Its source in WebAssembly text format. Documentation only: nothing in the build reads it, and it
|
|
1889
|
+
// Is here so the binary beside it is not opaque.
|
|
1890
|
+
"src/wasm/module.wat",
|
|
1891
|
+
"src/wasm/answer.ts",
|
|
1892
|
+
"src/wasm/sample-command.ts",
|
|
1893
|
+
"src/wasm/README.md"
|
|
1894
|
+
]);
|
|
1895
|
+
if (isFramework) {
|
|
1896
|
+
builder.addFiles(["demo-vault/03 WebAssembly.md"]);
|
|
1897
|
+
}
|
|
1953
1898
|
}
|
|
1954
|
-
|
|
1955
|
-
|
|
1899
|
+
};
|
|
1900
|
+
function getWasmPlugin(bundler) {
|
|
1901
|
+
if (!Object.hasOwn(WASM_PLUGINS, bundler)) {
|
|
1902
|
+
throw new Error(`Unsupported bundler for WASM: ${bundler}`);
|
|
1956
1903
|
}
|
|
1957
|
-
return
|
|
1958
|
-
}
|
|
1959
|
-
function findCoreFeatureName(name) {
|
|
1960
|
-
const normalized = name.trim().toLowerCase();
|
|
1961
|
-
return CORE_FEATURE_NAMES.find((candidate) => candidate.toLowerCase() === normalized);
|
|
1904
|
+
return WASM_PLUGINS[bundler] ?? null;
|
|
1962
1905
|
}
|
|
1963
1906
|
|
|
1964
|
-
// src/
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
}
|
|
1969
|
-
import { styleText as styleText3 } from "node:util";
|
|
1907
|
+
// src/features/wasm-support/index.ts
|
|
1908
|
+
var WASM_SUPPORT_OPTIONS = [new None17(), new Wasm()];
|
|
1909
|
+
async function promptWasmSupport(savedValue) {
|
|
1910
|
+
return promptFeature({ defaultOption: new None17(), message: "WebAssembly support", options: WASM_SUPPORT_OPTIONS, savedValue });
|
|
1911
|
+
}
|
|
1970
1912
|
|
|
1971
|
-
// src/clack-text.ts
|
|
1913
|
+
// src/prompts/clack-text.ts
|
|
1972
1914
|
import {
|
|
1973
1915
|
settings as settings2,
|
|
1974
1916
|
TextPrompt
|
|
@@ -1976,7 +1918,7 @@ import {
|
|
|
1976
1918
|
import {
|
|
1977
1919
|
S_BAR as S_BAR2,
|
|
1978
1920
|
S_BAR_END as S_BAR_END2,
|
|
1979
|
-
symbol as symbol2
|
|
1921
|
+
symbol as $symbol2
|
|
1980
1922
|
} from "@clack/prompts";
|
|
1981
1923
|
import { styleText as styleText2 } from "node:util";
|
|
1982
1924
|
var TextPromptWithCompletion = class extends TextPrompt {
|
|
@@ -2005,7 +1947,7 @@ async function text(opts) {
|
|
|
2005
1947
|
render() {
|
|
2006
1948
|
const withGuide = settings2.withGuide;
|
|
2007
1949
|
const header = `${withGuide ? `${styleText2("gray", S_BAR2)}
|
|
2008
|
-
` : ""}${symbol2(this.state)} ${opts.message}
|
|
1950
|
+
` : ""}${$symbol2(this.state)} ${opts.message}
|
|
2009
1951
|
`;
|
|
2010
1952
|
const placeholderDisplay = opts.placeholder ? styleText2("inverse", opts.placeholder[0] ?? "") + styleText2("dim", opts.placeholder.slice(1)) : styleText2(["inverse", "hidden"], "_");
|
|
2011
1953
|
const input = this.userInput ? this.userInputWithCursor : placeholderDisplay;
|
|
@@ -2059,7 +2001,7 @@ ${barEnd}
|
|
|
2059
2001
|
return throwGoBackOnCancel(result) ?? "";
|
|
2060
2002
|
}
|
|
2061
2003
|
|
|
2062
|
-
// src/prompts.ts
|
|
2004
|
+
// src/prompts/prompts.ts
|
|
2063
2005
|
var MAX_HINTED_CHANGES = 3;
|
|
2064
2006
|
var TOOLING_QUESTIONS = {
|
|
2065
2007
|
bundler: { message: "Bundler", options: BUNDLER_OPTIONS },
|
|
@@ -2554,7 +2496,7 @@ function showHotkeyHints() {
|
|
|
2554
2496
|
function key(s) {
|
|
2555
2497
|
return styleText3("cyan", s);
|
|
2556
2498
|
}
|
|
2557
|
-
|
|
2499
|
+
log.info([
|
|
2558
2500
|
`${key("\u2191\u2193")} Navigate ${key("Enter")} Confirm ${key("Esc")} Go back`,
|
|
2559
2501
|
`${dim("Text inputs:")} ${key("Tab")}/${key("\u2192")}/${key("End")} Accept suggestion`
|
|
2560
2502
|
].join("\n"));
|
|
@@ -2566,7 +2508,70 @@ function skipSuppliedAnswers(steps, supplied) {
|
|
|
2566
2508
|
}));
|
|
2567
2509
|
}
|
|
2568
2510
|
|
|
2569
|
-
// src/
|
|
2511
|
+
// src/answers/answer-space.ts
|
|
2512
|
+
var SAMPLE_FUNDING_URL = "https://example.com/support-testuser";
|
|
2513
|
+
var SAMPLE_OBSIDIAN_CONFIG_FOLDER = "demo-vault/.obsidian";
|
|
2514
|
+
var ANSWER_SPACE = [
|
|
2515
|
+
toDimension("apiSubset", API_SUBSET_OPTIONS),
|
|
2516
|
+
toDimension("bundler", BUNDLER_OPTIONS),
|
|
2517
|
+
toDimension("commitLinting", COMMIT_LINTING_OPTIONS),
|
|
2518
|
+
toDimension("coverageBadge", COVERAGE_BADGE_OPTIONS),
|
|
2519
|
+
toDimension("e2eTestRunner", E2E_TEST_RUNNER_OPTIONS),
|
|
2520
|
+
toDimension("editorExtensions", EDITOR_EXTENSIONS_OPTIONS),
|
|
2521
|
+
toDimension("formatter", FORMATTER_OPTIONS),
|
|
2522
|
+
toDimension("fundingPlatform", FUNDING_PLATFORM_OPTIONS),
|
|
2523
|
+
toValueDimension("fundingUrl", ["", SAMPLE_FUNDING_URL]),
|
|
2524
|
+
toDimension("gitHubActions", GITHUB_ACTIONS_OPTIONS),
|
|
2525
|
+
toDimension("gitHubIssueTemplates", GITHUB_ISSUE_TEMPLATES_OPTIONS),
|
|
2526
|
+
toDimension("hotReload", HOT_RELOAD_OPTIONS),
|
|
2527
|
+
toDimension("internationalization", INTERNATIONALIZATION_OPTIONS),
|
|
2528
|
+
toDimension("linter", LINTER_OPTIONS),
|
|
2529
|
+
toDimension("markdownLinter", MARKDOWN_LINTER_OPTIONS),
|
|
2530
|
+
toValueDimension("obsidianConfigFolder", ["", SAMPLE_OBSIDIAN_CONFIG_FOLDER]),
|
|
2531
|
+
toDimension("packageManager", PACKAGE_MANAGER_OPTIONS),
|
|
2532
|
+
toDimension("platformSupport", PLATFORM_SUPPORT_OPTIONS),
|
|
2533
|
+
toDimension("preset", PRESET_OPTIONS),
|
|
2534
|
+
toDimension("spellChecker", SPELL_CHECKER_OPTIONS),
|
|
2535
|
+
toDimension("styling", STYLING_OPTIONS),
|
|
2536
|
+
toDimension("testRunner", TEST_RUNNER_OPTIONS),
|
|
2537
|
+
toDimension("uiFramework", UI_FRAMEWORK_OPTIONS),
|
|
2538
|
+
toDimension("wasmSupport", WASM_SUPPORT_OPTIONS)
|
|
2539
|
+
];
|
|
2540
|
+
var ANSWER_SPACE_SIZE = ANSWER_SPACE.reduce((size, dimension) => size * dimension.values.length, 1);
|
|
2541
|
+
var ANSWER_SPACE_DIMENSION_SIZES = ANSWER_SPACE.map((dimension) => dimension.values.length);
|
|
2542
|
+
function toDimension(answerKey, options) {
|
|
2543
|
+
return {
|
|
2544
|
+
answerKey,
|
|
2545
|
+
values: options.map((option) => option.settingValue)
|
|
2546
|
+
};
|
|
2547
|
+
}
|
|
2548
|
+
function toValueDimension(answerKey, values) {
|
|
2549
|
+
return { answerKey, values };
|
|
2550
|
+
}
|
|
2551
|
+
|
|
2552
|
+
// src/answers/answers.ts
|
|
2553
|
+
var CONFIG_FILE_NAME = ".create-obsidian-plugin.json";
|
|
2554
|
+
function getPluginShortName(pluginId) {
|
|
2555
|
+
return pluginId.split("-").map((word) => (word[0] ?? "").toUpperCase() + word.slice(1)).join("");
|
|
2556
|
+
}
|
|
2557
|
+
|
|
2558
|
+
// src/answers/deprecated-answers.ts
|
|
2559
|
+
import { log as log2 } from "@clack/prompts";
|
|
2560
|
+
var DEPRECATED_ANSWER_VALUES = {
|
|
2561
|
+
preset: {
|
|
2562
|
+
enhanced: "all-in-one"
|
|
2563
|
+
}
|
|
2564
|
+
};
|
|
2565
|
+
function resolveDeprecatedAnswer(key, value, source) {
|
|
2566
|
+
const replacement = DEPRECATED_ANSWER_VALUES[key]?.[value];
|
|
2567
|
+
if (replacement === void 0) {
|
|
2568
|
+
return value;
|
|
2569
|
+
}
|
|
2570
|
+
log2.warn(`${key} "${value}" in ${source} is deprecated and was read as "${replacement}". Use "${replacement}" instead.`);
|
|
2571
|
+
return replacement;
|
|
2572
|
+
}
|
|
2573
|
+
|
|
2574
|
+
// src/answers/cli-args.ts
|
|
2570
2575
|
var COMPUTED_ANSWER_KEYS = ["currentYear"];
|
|
2571
2576
|
var DERIVED_TEMPLATE_KEYS = ["pluginShortName"];
|
|
2572
2577
|
var REFUSED_KEYS = [...COMPUTED_ANSWER_KEYS, ...DERIVED_TEMPLATE_KEYS];
|
|
@@ -2607,7 +2612,11 @@ function getAnswerableKeys() {
|
|
|
2607
2612
|
}
|
|
2608
2613
|
function getHelpText() {
|
|
2609
2614
|
const lines = [
|
|
2610
|
-
|
|
2615
|
+
'Usage: npm create @mnaoumov/obsidian-plugin ["--" <options>]',
|
|
2616
|
+
"",
|
|
2617
|
+
'npm needs the "--" before the options; pnpm, yarn and bun do not. Keep its quotes: PowerShell',
|
|
2618
|
+
"swallows a bare --. See https://mnaoumov.dev/create-obsidian-plugin/guides/powershell-separator/",
|
|
2619
|
+
"Full documentation: https://mnaoumov.dev/create-obsidian-plugin/",
|
|
2611
2620
|
"",
|
|
2612
2621
|
"Options:",
|
|
2613
2622
|
" -y, --yes Take every default and skip the post-scaffold prompts. Never asks:",
|
|
@@ -2781,7 +2790,7 @@ function toMode(value) {
|
|
|
2781
2790
|
return mode;
|
|
2782
2791
|
}
|
|
2783
2792
|
|
|
2784
|
-
// src/answers-export.ts
|
|
2793
|
+
// src/answers/answers-export.ts
|
|
2785
2794
|
var CREATE_COMMANDS = {
|
|
2786
2795
|
bun: { prefix: "bun create @mnaoumov/obsidian-plugin", separator: "" },
|
|
2787
2796
|
npm: { prefix: "npm create @mnaoumov/obsidian-plugin", separator: " --" },
|
|
@@ -2839,7 +2848,7 @@ function quote(value, shell) {
|
|
|
2839
2848
|
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
2840
2849
|
}
|
|
2841
2850
|
|
|
2842
|
-
// src/directory-registry.ts
|
|
2851
|
+
// src/directory/directory-registry.ts
|
|
2843
2852
|
var COMMUNITY_PLUGINS_JSON_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/community-plugins.json";
|
|
2844
2853
|
async function fetchCommunityPluginIds() {
|
|
2845
2854
|
try {
|
|
@@ -2875,14 +2884,14 @@ function validatePluginIdIsUnlisted(pluginId, listedIds) {
|
|
|
2875
2884
|
}
|
|
2876
2885
|
|
|
2877
2886
|
// src/official-sample.ts
|
|
2878
|
-
import { join as
|
|
2887
|
+
import { join as join5 } from "node:path";
|
|
2879
2888
|
|
|
2880
2889
|
// src/templates.ts
|
|
2881
2890
|
import { log as log4 } from "@clack/prompts";
|
|
2882
2891
|
import ejs from "ejs";
|
|
2883
2892
|
import { createHash } from "node:crypto";
|
|
2884
2893
|
import {
|
|
2885
|
-
existsSync as
|
|
2894
|
+
existsSync as existsSync4,
|
|
2886
2895
|
mkdirSync,
|
|
2887
2896
|
readFileSync as readFileSync3,
|
|
2888
2897
|
writeFileSync
|
|
@@ -2890,7 +2899,7 @@ import {
|
|
|
2890
2899
|
import {
|
|
2891
2900
|
dirname,
|
|
2892
2901
|
extname,
|
|
2893
|
-
join as
|
|
2902
|
+
join as join3
|
|
2894
2903
|
} from "node:path";
|
|
2895
2904
|
import { fileURLToPath } from "node:url";
|
|
2896
2905
|
|
|
@@ -3119,8 +3128,54 @@ var TemplateBuilder = class {
|
|
|
3119
3128
|
}
|
|
3120
3129
|
};
|
|
3121
3130
|
|
|
3131
|
+
// src/template-index.ts
|
|
3132
|
+
import {
|
|
3133
|
+
existsSync as existsSync3,
|
|
3134
|
+
readdirSync as readdirSync2,
|
|
3135
|
+
statSync
|
|
3136
|
+
} from "node:fs";
|
|
3137
|
+
import { join as join2 } from "node:path";
|
|
3138
|
+
var GROUP_FOLDER_PATTERN = /^\(.+\)$/;
|
|
3139
|
+
function getLogicalTemplatePath(physicalPath) {
|
|
3140
|
+
return physicalPath.split("/").filter((segment) => !GROUP_FOLDER_PATTERN.test(segment)).join("/");
|
|
3141
|
+
}
|
|
3142
|
+
function indexTemplateDir(root) {
|
|
3143
|
+
const index = /* @__PURE__ */ new Map();
|
|
3144
|
+
for (const physicalPath of walkFiles(root, "")) {
|
|
3145
|
+
const logicalPath = getLogicalTemplatePath(physicalPath);
|
|
3146
|
+
const existing = index.get(logicalPath);
|
|
3147
|
+
if (existing !== void 0) {
|
|
3148
|
+
throw new Error(`Two templates in ${root} resolve to ${logicalPath}: ${existing} and ${physicalPath}.`);
|
|
3149
|
+
}
|
|
3150
|
+
index.set(logicalPath, physicalPath);
|
|
3151
|
+
}
|
|
3152
|
+
return index;
|
|
3153
|
+
}
|
|
3154
|
+
function walkFiles(root, relativeDir) {
|
|
3155
|
+
const absoluteDir = join2(root, relativeDir);
|
|
3156
|
+
if (!existsSync3(absoluteDir)) {
|
|
3157
|
+
return [];
|
|
3158
|
+
}
|
|
3159
|
+
const found = [];
|
|
3160
|
+
for (const entry of readdirSync2(absoluteDir)) {
|
|
3161
|
+
const relativePath = relativeDir === "" ? entry : `${relativeDir}/${entry}`;
|
|
3162
|
+
if (statSync(join2(root, relativePath)).isDirectory()) {
|
|
3163
|
+
found.push(...walkFiles(root, relativePath));
|
|
3164
|
+
} else {
|
|
3165
|
+
found.push(relativePath);
|
|
3166
|
+
}
|
|
3167
|
+
}
|
|
3168
|
+
return found;
|
|
3169
|
+
}
|
|
3170
|
+
|
|
3122
3171
|
// src/versions.ts
|
|
3123
3172
|
import { log as log3 } from "@clack/prompts";
|
|
3173
|
+
import {
|
|
3174
|
+
maxSatisfying,
|
|
3175
|
+
minVersion,
|
|
3176
|
+
subset,
|
|
3177
|
+
validRange
|
|
3178
|
+
} from "semver";
|
|
3124
3179
|
var PINNED_VERSIONS = {
|
|
3125
3180
|
"@babel/core": {
|
|
3126
3181
|
check: `node -e "const fs=require('node:fs');process.stdout.write(JSON.parse(fs.readFileSync('node_modules/@rollup/plugin-babel/package.json','utf8')).peerDependencies['@babel/core'])"`,
|
|
@@ -3280,6 +3335,14 @@ var ADVISORY_OVERRIDES = {
|
|
|
3280
3335
|
spec: "^8.0.2",
|
|
3281
3336
|
why: "Clears GHSA-ggr8-5vv4-36mx (stack exhaustion merging recursive object graphs), patched in 8.0.0. @wdio/utils declares ^7.0.3 up to 9.30, and obsidian-integration-testing pins webdriverio 9.27.0, so no direct bump reaches it and `npm audit fix --force` only offers a downgrade of obsidian-integration-testing to 1.1.2. The forced major is safe for these consumers: 8.0.0 breaks by renaming the mergeInfo system and aligning the customization shorthand, and both surfaces were measured to behave identically on 7.1.6 and 8.0.1 in the exact shapes the tree uses -- @wdio/config's `deepmergeCustom` with a `mergeArrays` handler reading `meta.key` and returning `utils.actions.defaultMerge`, and webdriver's `deepmergeCustom({ mergeArrays: false })`. A scan of the whole installed tree found no other binding than `deepmerge` and `deepmergeCustom`."
|
|
3282
3337
|
},
|
|
3338
|
+
"re2js": {
|
|
3339
|
+
check: `node -e "const fs=require('node:fs');process.stdout.write(JSON.parse(fs.readFileSync('node_modules/markdownlint/package.json','utf8')).dependencies.re2js)"`,
|
|
3340
|
+
expect: "2.8.6",
|
|
3341
|
+
manualCheck: "The check reads the exact re2js pin of the installed markdownlint, which moves only when a markdownlint-cli2 release pins a newer markdownlint. When it reads 2.8.7 or later, drop the override and this entry and re-run `npm audit`.",
|
|
3342
|
+
requires: ["markdownlint", "markdownlint-cli2", "@mnaoumov/typescript-dev-toolkit", "@mnaoumov/obsidian-dev-toolkit"],
|
|
3343
|
+
spec: "^2.9.1",
|
|
3344
|
+
why: "Clears GHSA-gg6h-894w-4m9c (RE2JS quadratic-time denial of service in lookbehind matching, >=2.2.0 <2.8.7). Reached only through markdownlint, whose newest release 0.42.0 pins re2js at the exact 2.8.6, and markdownlint-cli2 0.24.0 pins that markdownlint exactly in turn, so no bump reaches the fix. The toolkits reach it through their own markdownlint-cli2. 2.9.1 is the version markdownlint itself moved to upstream, so the forced minor is the one it is tested against. Never take the `npm audit fix --force` remedy: it downgrades the toolkit packages."
|
|
3345
|
+
},
|
|
3283
3346
|
"serialize-javascript": {
|
|
3284
3347
|
check: `node -e "const fs=require('node:fs');process.stdout.write(JSON.parse(fs.readFileSync('node_modules/mocha/package.json','utf8')).dependencies['serialize-javascript'])"`,
|
|
3285
3348
|
expect: "^6.0.2",
|
|
@@ -3287,14 +3350,6 @@ var ADVISORY_OVERRIDES = {
|
|
|
3287
3350
|
requires: ["@wdio/mocha-framework"],
|
|
3288
3351
|
spec: "^7.1.1",
|
|
3289
3352
|
why: "Clears GHSA-5c6j-r48x-rmvq (RCE via RegExp.flags and Date.prototype.toISOString) and GHSA-qj8w-gfj5-8c6v (CPU-exhaustion denial of service via crafted array-likes), both fixed in 7.0.5. No direct bump reaches it: mocha declares `serialize-javascript@^6.0.2` at every published version including 11.8.0, and the only consumer here is @wdio/mocha-framework -> mocha. `npm audit fix --force` offers a DOWNGRADE to @wdio/mocha-framework@7.7.3 instead. The forced major is safe for the one call site that exists: mocha's `buffered-worker-pool.js` calls `serializeJavascript(opts, { unsafe: true, ignoreFunction: true })`, and 6.0.2 and 7.1.1 were measured to return byte-identical output for that exact option pair across RegExp, Date, Map, Set, undefined, BigInt, functions and a script-tag string. Note the call is on mocha's parallel-run path, which wdio does not take."
|
|
3290
|
-
},
|
|
3291
|
-
"smol-toml": {
|
|
3292
|
-
check: `node -e "const fs=require('node:fs');const path=['node_modules/@mnaoumov/typescript-dev-toolkit/node_modules/markdownlint-cli2/package.json','node_modules/markdownlint-cli2/package.json'].find((candidate)=>fs.existsSync(candidate));process.stdout.write(JSON.parse(fs.readFileSync(path,'utf8')).dependencies['smol-toml'])"`,
|
|
3293
|
-
expect: "1.8.0",
|
|
3294
|
-
manualCheck: "The check reads the exact version pinned by the markdownlint-cli2 that @mnaoumov/typescript-dev-toolkit reaches, nested under it when the project also declares a newer markdownlint-cli2, which is what makes the override necessary. When the toolkit moves to markdownlint-cli2 ^0.24.0 or later, that copy pins 1.9.1 and the override and this entry can go.",
|
|
3295
|
-
requires: ["@mnaoumov/obsidian-dev-toolkit", "@mnaoumov/typescript-dev-toolkit"],
|
|
3296
|
-
spec: "^1.9.1",
|
|
3297
|
-
why: "Clears GHSA-r4xh-jqrq-34v2 (quadratic-time parse() from parseKey rescanning to the end of the document), patched in 1.9.0. markdownlint-cli2 pinned `smol-toml` to exactly 1.8.0 up to 0.23.3, and @mnaoumov/typescript-dev-toolkit declares markdownlint-cli2 `^0.23.2`, which on a 0.x package stops below 0.24.0, the first release pinning 1.9.1. So the toolkit presets still reach 1.8.0 through the toolkit, and `npm audit fix --force` offers only a DOWNGRADE of markdownlint-cli2 to 0.21.0. The markdownlint answer's own markdownlint-cli2 resolves to 0.24.0 or later, so `standalone` needs no override. The spec stays inside the 1.x major, and markdownlint-cli2 imports only `parse`, to read a `.markdownlint-cli2.toml` config."
|
|
3298
3353
|
}
|
|
3299
3354
|
};
|
|
3300
3355
|
var DESKTOP_RELEASES_JSON_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/desktop-releases.json";
|
|
@@ -3302,6 +3357,8 @@ var FALLBACK_MIN_APP_VERSION = "1.13.0";
|
|
|
3302
3357
|
var FALLBACK_VERSION = "latest";
|
|
3303
3358
|
var JSON_INDENT_SPACES2 = 2;
|
|
3304
3359
|
var REGISTRY_URL = "https://registry.npmjs.org";
|
|
3360
|
+
var ABBREVIATED_PACKUMENT_MEDIA_TYPE = "application/vnd.npm.install-v1+json";
|
|
3361
|
+
var CONSTRAINING_PACKAGES = ["@mnaoumov/obsidian-dev-toolkit", "@mnaoumov/typescript-dev-toolkit"];
|
|
3305
3362
|
function buildOverrides(dependencies) {
|
|
3306
3363
|
const overrides = {};
|
|
3307
3364
|
for (const packageName of getPinnedPackageNames(dependencies)) {
|
|
@@ -3405,22 +3462,68 @@ async function resolveVersions(dependencies) {
|
|
|
3405
3462
|
}
|
|
3406
3463
|
unresolved.push(dependency.packageName);
|
|
3407
3464
|
}
|
|
3408
|
-
const fetched = await Promise.all(unresolved.map(fetchLatestVersion));
|
|
3409
3465
|
const failed = [];
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
if (
|
|
3466
|
+
const constraints = /* @__PURE__ */ new Map();
|
|
3467
|
+
function record(packageName, resolution) {
|
|
3468
|
+
if (resolution === null) {
|
|
3413
3469
|
failed.push(packageName);
|
|
3414
3470
|
resolved.set(packageName, FALLBACK_VERSION);
|
|
3471
|
+
return;
|
|
3472
|
+
}
|
|
3473
|
+
resolved.set(packageName, resolution.spec);
|
|
3474
|
+
if (resolution.heldBelow !== null) {
|
|
3475
|
+
log3.info(`Holding ${packageName} on ${resolution.spec}, the range ${resolution.heldBy ?? ""} declares, rather than the latest ${resolution.heldBelow}.`);
|
|
3476
|
+
}
|
|
3477
|
+
}
|
|
3478
|
+
for (const constrainer of CONSTRAINING_PACKAGES) {
|
|
3479
|
+
if (!unresolved.includes(constrainer)) {
|
|
3415
3480
|
continue;
|
|
3416
3481
|
}
|
|
3417
|
-
|
|
3482
|
+
const resolution = await resolveWithin(constrainer, constraints.get(constrainer));
|
|
3483
|
+
record(constrainer, resolution);
|
|
3484
|
+
if (resolution === null) {
|
|
3485
|
+
continue;
|
|
3486
|
+
}
|
|
3487
|
+
const manifest = await fetchManifest(constrainer, resolution.version);
|
|
3488
|
+
for (const [packageName, range] of Object.entries({ ...manifest?.peerDependencies, ...manifest?.dependencies })) {
|
|
3489
|
+
if (!constraints.has(packageName)) {
|
|
3490
|
+
constraints.set(packageName, { by: constrainer, range });
|
|
3491
|
+
}
|
|
3492
|
+
}
|
|
3493
|
+
}
|
|
3494
|
+
const rest = unresolved.filter((packageName) => !CONSTRAINING_PACKAGES.includes(packageName));
|
|
3495
|
+
const resolutions = await Promise.all(rest.map((packageName) => resolveWithin(packageName, constraints.get(packageName))));
|
|
3496
|
+
for (const [index, resolution] of resolutions.entries()) {
|
|
3497
|
+
record(rest[index] ?? "", resolution);
|
|
3418
3498
|
}
|
|
3419
3499
|
if (failed.length > 0) {
|
|
3420
3500
|
log3.warn(`Could not look up the latest version of ${failed.join(", ")}. Falling back to "${FALLBACK_VERSION}".`);
|
|
3421
3501
|
}
|
|
3422
3502
|
return resolved;
|
|
3423
3503
|
}
|
|
3504
|
+
async function fetchManifest(packageName, version) {
|
|
3505
|
+
try {
|
|
3506
|
+
const response = await fetch(`${REGISTRY_URL}/${packageName}/${version}`);
|
|
3507
|
+
if (!response.ok) {
|
|
3508
|
+
return null;
|
|
3509
|
+
}
|
|
3510
|
+
return await response.json();
|
|
3511
|
+
} catch {
|
|
3512
|
+
return null;
|
|
3513
|
+
}
|
|
3514
|
+
}
|
|
3515
|
+
async function fetchPublishedVersions(packageName) {
|
|
3516
|
+
try {
|
|
3517
|
+
const response = await fetch(`${REGISTRY_URL}/${packageName}`, { headers: { accept: ABBREVIATED_PACKUMENT_MEDIA_TYPE } });
|
|
3518
|
+
if (!response.ok) {
|
|
3519
|
+
return null;
|
|
3520
|
+
}
|
|
3521
|
+
const packument = await response.json();
|
|
3522
|
+
return Object.keys(packument.versions ?? {});
|
|
3523
|
+
} catch {
|
|
3524
|
+
return null;
|
|
3525
|
+
}
|
|
3526
|
+
}
|
|
3424
3527
|
function getAdvisoryOverrides(dependencies) {
|
|
3425
3528
|
return Object.entries(ADVISORY_OVERRIDES).filter(([, advisoryOverride]) => advisoryOverride.requires.some((packageName) => hasPackage(dependencies, packageName))).sort(([a], [b]) => a.localeCompare(b));
|
|
3426
3529
|
}
|
|
@@ -3430,6 +3533,25 @@ function getPinnedPackageNames(dependencies) {
|
|
|
3430
3533
|
function hasPackage(dependencies, packageName) {
|
|
3431
3534
|
return dependencies.some((dependency) => dependency.packageName === packageName);
|
|
3432
3535
|
}
|
|
3536
|
+
function isCaretWithin(version, range) {
|
|
3537
|
+
if (version === null || validRange(range) === null) {
|
|
3538
|
+
return false;
|
|
3539
|
+
}
|
|
3540
|
+
return subset(`^${version}`, range);
|
|
3541
|
+
}
|
|
3542
|
+
async function resolveWithin(packageName, constraint) {
|
|
3543
|
+
const latest = await fetchLatestVersion(packageName);
|
|
3544
|
+
if (constraint === void 0 || isCaretWithin(latest, constraint.range)) {
|
|
3545
|
+
return latest === null ? null : { heldBelow: null, heldBy: null, spec: `^${latest}`, version: latest };
|
|
3546
|
+
}
|
|
3547
|
+
const versions = await fetchPublishedVersions(packageName);
|
|
3548
|
+
const newest = versions === null ? null : maxSatisfying(versions, constraint.range);
|
|
3549
|
+
if (newest === null) {
|
|
3550
|
+
return { heldBelow: latest, heldBy: constraint.by, spec: constraint.range, version: minVersion(constraint.range)?.version ?? constraint.range };
|
|
3551
|
+
}
|
|
3552
|
+
const spec = isCaretWithin(newest, constraint.range) ? `^${newest}` : constraint.range;
|
|
3553
|
+
return { heldBelow: latest, heldBy: constraint.by, spec, version: newest };
|
|
3554
|
+
}
|
|
3433
3555
|
|
|
3434
3556
|
// src/templates.ts
|
|
3435
3557
|
var ASSET_EXTENSIONS = /* @__PURE__ */ new Set([".wasm"]);
|
|
@@ -3553,16 +3675,16 @@ function buildTemplate(givenAnswers, overlay = null) {
|
|
|
3553
3675
|
}
|
|
3554
3676
|
function copyTemplates(givenAnswers, targetDir, currentVersion, existingConfig, resolvedVersions = /* @__PURE__ */ new Map(), minAppVersion = FALLBACK_MIN_APP_VERSION, overlay = null, projectFormatter) {
|
|
3555
3677
|
const answers = pinPresetAnswers(givenAnswers);
|
|
3556
|
-
const templatesDir =
|
|
3678
|
+
const templatesDir = join3(getScriptDir(), "..", "templates", "default");
|
|
3679
|
+
const overlayIndex = overlay ? indexTemplateDir(overlay.dir) : null;
|
|
3680
|
+
const builtInIndex = getBuiltInTemplateIndex(templatesDir);
|
|
3557
3681
|
function findTemplate(relativePath) {
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
return overlayPath;
|
|
3562
|
-
}
|
|
3682
|
+
const overlayPath = overlayIndex?.get(relativePath);
|
|
3683
|
+
if (overlay && overlayPath !== void 0) {
|
|
3684
|
+
return join3(overlay.dir, overlayPath);
|
|
3563
3685
|
}
|
|
3564
|
-
const builtInPath =
|
|
3565
|
-
return
|
|
3686
|
+
const builtInPath = builtInIndex.get(relativePath);
|
|
3687
|
+
return builtInPath === void 0 ? null : join3(templatesDir, builtInPath);
|
|
3566
3688
|
}
|
|
3567
3689
|
const builder = buildTemplate(answers, overlay);
|
|
3568
3690
|
const templateFiles = builder.templateFiles;
|
|
@@ -3584,6 +3706,9 @@ function copyTemplates(givenAnswers, targetDir, currentVersion, existingConfig,
|
|
|
3584
3706
|
packageName: dependency.packageName,
|
|
3585
3707
|
version: dependency.version ?? resolvedVersions.get(dependency.packageName) ?? PINNED_VERSIONS[dependency.packageName]?.version ?? UNRESOLVED_VERSION
|
|
3586
3708
|
})),
|
|
3709
|
+
// The README's `support` seam opens `## Support` in the funding partial, so the issue-filing partial
|
|
3710
|
+
// After it opens the section itself only when there is no funding.
|
|
3711
|
+
_hasFunding: partials.has("has-funding"),
|
|
3587
3712
|
_lintStagedPatterns: builder.lintStagedPatterns,
|
|
3588
3713
|
_minAppVersion: minAppVersion,
|
|
3589
3714
|
_overrides: Object.entries(buildOverrides(dependencies)).map(([packageName, spec]) => ({ packageName, spec })),
|
|
@@ -3642,7 +3767,7 @@ function copyTemplates(givenAnswers, targetDir, currentVersion, existingConfig,
|
|
|
3642
3767
|
let rendered;
|
|
3643
3768
|
if (isAsset) {
|
|
3644
3769
|
currentTemplatePath = registeredPath;
|
|
3645
|
-
rendered = readFileSync3(findTemplate(registeredPath) ??
|
|
3770
|
+
rendered = readFileSync3(findTemplate(registeredPath) ?? join3(templatesDir, registeredPath));
|
|
3646
3771
|
} else if (ejsPath === null) {
|
|
3647
3772
|
currentTemplatePath = `${registeredPath}.ejs`;
|
|
3648
3773
|
rendered = templateContext["render"]();
|
|
@@ -3660,13 +3785,14 @@ function copyTemplates(givenAnswers, targetDir, currentVersion, existingConfig,
|
|
|
3660
3785
|
renderedFiles.push({ content: rendered, destinationPath });
|
|
3661
3786
|
}
|
|
3662
3787
|
if (answers.preset === DOCS_SHOWCASE_PRESET) {
|
|
3663
|
-
renderedFiles.push(...readDocsShowcaseFiles(
|
|
3788
|
+
renderedFiles.push(...readDocsShowcaseFiles(join3(getScriptDir(), "..")));
|
|
3664
3789
|
}
|
|
3665
3790
|
return writeGeneratedFiles(renderedFiles, targetDir, currentVersion, existingConfig, projectFormatter);
|
|
3666
3791
|
}
|
|
3667
3792
|
function getDestinationPath(templatePath, answers) {
|
|
3668
3793
|
return templatePath.replace(/%= (?<AnswerKey>.+?) %/g, (_match, ...args) => String(answers[String(args[0])]));
|
|
3669
3794
|
}
|
|
3795
|
+
var builtInTemplateIndexes = /* @__PURE__ */ new Map();
|
|
3670
3796
|
function getScriptDir() {
|
|
3671
3797
|
return dirname(fileURLToPath(import.meta.url));
|
|
3672
3798
|
}
|
|
@@ -3676,8 +3802,8 @@ function isPartialTemplatePath(templatePath) {
|
|
|
3676
3802
|
return markerIndex > 0 && PARTIAL_NAME_PATTERN.test(fileName.slice(markerIndex + 1));
|
|
3677
3803
|
}
|
|
3678
3804
|
function loadConfig(dir) {
|
|
3679
|
-
const configPath =
|
|
3680
|
-
if (!
|
|
3805
|
+
const configPath = join3(dir, CONFIG_FILE_NAME);
|
|
3806
|
+
if (!existsSync4(configPath)) {
|
|
3681
3807
|
return null;
|
|
3682
3808
|
}
|
|
3683
3809
|
const parsed = JSON.parse(readFileSync3(configPath, "utf-8"));
|
|
@@ -3691,8 +3817,8 @@ function pinPresetAnswers(answers) {
|
|
|
3691
3817
|
function recordHashesOnDisk(targetDir, config) {
|
|
3692
3818
|
const fileHashes = {};
|
|
3693
3819
|
for (const [destinationPath, hash] of Object.entries(config.fileHashes)) {
|
|
3694
|
-
const fullPath =
|
|
3695
|
-
fileHashes[destinationPath] =
|
|
3820
|
+
const fullPath = join3(targetDir, destinationPath);
|
|
3821
|
+
fileHashes[destinationPath] = existsSync4(fullPath) ? sha256(readFileSync3(fullPath)) : hash;
|
|
3696
3822
|
}
|
|
3697
3823
|
return { ...config, fileHashes };
|
|
3698
3824
|
}
|
|
@@ -3731,9 +3857,9 @@ function writeGeneratedFiles(files, targetDir, currentVersion, existingConfig, p
|
|
|
3731
3857
|
const created = [];
|
|
3732
3858
|
const written = [];
|
|
3733
3859
|
for (const { content: rendered, destinationPath } of files) {
|
|
3734
|
-
const fullDestinationPath =
|
|
3860
|
+
const fullDestinationPath = join3(targetDir, destinationPath);
|
|
3735
3861
|
const newHash = sha256(rendered);
|
|
3736
|
-
if (existingConfig &&
|
|
3862
|
+
if (existingConfig && existsSync4(fullDestinationPath)) {
|
|
3737
3863
|
const currentContent = Buffer.isBuffer(rendered) ? readFileSync3(fullDestinationPath) : readFileSync3(fullDestinationPath, "utf-8");
|
|
3738
3864
|
const currentHash = sha256(currentContent);
|
|
3739
3865
|
const originalHash = existingConfig.fileHashes[destinationPath];
|
|
@@ -3756,14 +3882,14 @@ function writeGeneratedFiles(files, targetDir, currentVersion, existingConfig, p
|
|
|
3756
3882
|
}
|
|
3757
3883
|
newConfig.fileHashes[destinationPath] = newHash;
|
|
3758
3884
|
const destDir = dirname(fullDestinationPath);
|
|
3759
|
-
if (!
|
|
3885
|
+
if (!existsSync4(destDir)) {
|
|
3760
3886
|
mkdirSync(destDir, { recursive: true });
|
|
3761
3887
|
}
|
|
3762
3888
|
writeFileSync(fullDestinationPath, rendered);
|
|
3763
3889
|
written.push(destinationPath);
|
|
3764
3890
|
}
|
|
3765
3891
|
formatWrittenFiles(projectFormatter, targetDir, written, newConfig);
|
|
3766
|
-
const configPath =
|
|
3892
|
+
const configPath = join3(targetDir, CONFIG_FILE_NAME);
|
|
3767
3893
|
writeFileSync(configPath, `${JSON.stringify(newConfig, null, JSON_INDENT_SPACES3)}
|
|
3768
3894
|
`);
|
|
3769
3895
|
if (existingConfig) {
|
|
@@ -3793,8 +3919,16 @@ function formatWrittenFiles(projectFormatter, targetDir, written, config) {
|
|
|
3793
3919
|
}
|
|
3794
3920
|
projectFormatter.formatFiles(textFiles);
|
|
3795
3921
|
for (const destinationPath of textFiles) {
|
|
3796
|
-
config.fileHashes[destinationPath] = sha256(readFileSync3(
|
|
3922
|
+
config.fileHashes[destinationPath] = sha256(readFileSync3(join3(targetDir, destinationPath)));
|
|
3923
|
+
}
|
|
3924
|
+
}
|
|
3925
|
+
function getBuiltInTemplateIndex(templatesDir) {
|
|
3926
|
+
let index = builtInTemplateIndexes.get(templatesDir);
|
|
3927
|
+
if (index === void 0) {
|
|
3928
|
+
index = indexTemplateDir(templatesDir);
|
|
3929
|
+
builtInTemplateIndexes.set(templatesDir, index);
|
|
3797
3930
|
}
|
|
3931
|
+
return index;
|
|
3798
3932
|
}
|
|
3799
3933
|
function getCspellIdentityWords(answers) {
|
|
3800
3934
|
const words = [answers.authorGitHubName, "mnaoumov"];
|
|
@@ -3923,12 +4057,12 @@ ${[base, ...extraConfigs.map((config) => JSON.stringify(config))].map((config) =
|
|
|
3923
4057
|
|
|
3924
4058
|
// src/upstream-snapshot.ts
|
|
3925
4059
|
import {
|
|
3926
|
-
existsSync as
|
|
3927
|
-
readdirSync as
|
|
4060
|
+
existsSync as existsSync5,
|
|
4061
|
+
readdirSync as readdirSync3,
|
|
3928
4062
|
readFileSync as readFileSync4
|
|
3929
4063
|
} from "node:fs";
|
|
3930
4064
|
import {
|
|
3931
|
-
join as
|
|
4065
|
+
join as join4,
|
|
3932
4066
|
relative as relative2
|
|
3933
4067
|
} from "node:path";
|
|
3934
4068
|
var VENDORED_SUFFIX = ".vendored";
|
|
@@ -3967,10 +4101,10 @@ function readUpstream(upstreamsPath, name) {
|
|
|
3967
4101
|
}
|
|
3968
4102
|
function readVendoredFiles(dir) {
|
|
3969
4103
|
const files = /* @__PURE__ */ new Map();
|
|
3970
|
-
if (!
|
|
4104
|
+
if (!existsSync5(dir)) {
|
|
3971
4105
|
return files;
|
|
3972
4106
|
}
|
|
3973
|
-
const paths =
|
|
4107
|
+
const paths = readdirSync3(dir, { recursive: true, withFileTypes: true }).filter((entry) => entry.isFile() && entry.name.endsWith(VENDORED_SUFFIX)).map((entry) => join4(entry.parentPath, entry.name)).sort();
|
|
3974
4108
|
for (const fullPath of paths) {
|
|
3975
4109
|
const upstreamPath = relative2(dir, fullPath).replaceAll("\\", "/").slice(0, -VENDORED_SUFFIX.length);
|
|
3976
4110
|
files.set(upstreamPath, readFileSync4(fullPath));
|
|
@@ -3987,7 +4121,7 @@ async function fetchJson(url, headers) {
|
|
|
3987
4121
|
|
|
3988
4122
|
// src/official-sample.ts
|
|
3989
4123
|
var OFFICIAL_SAMPLE_UPSTREAM_NAME = "obsidian-sample-plugin";
|
|
3990
|
-
var OFFICIAL_SAMPLE_FILES_DIR =
|
|
4124
|
+
var OFFICIAL_SAMPLE_FILES_DIR = join5("templates", "official-sample", "files");
|
|
3991
4125
|
var OFFICIAL_SAMPLE_PINNED_ANSWERS = {
|
|
3992
4126
|
formatter: "none",
|
|
3993
4127
|
packageManager: "npm"
|
|
@@ -4046,14 +4180,14 @@ function copyOfficialSample(answers, targetDir, currentVersion, existingConfig,
|
|
|
4046
4180
|
return { ...config, upstreamCommit: snapshot.commit };
|
|
4047
4181
|
}
|
|
4048
4182
|
function getPackageRoot() {
|
|
4049
|
-
return
|
|
4183
|
+
return join5(getScriptDir(), "..");
|
|
4050
4184
|
}
|
|
4051
4185
|
function getUpstreamsPath() {
|
|
4052
|
-
return
|
|
4186
|
+
return join5(getPackageRoot(), "upstreams.json");
|
|
4053
4187
|
}
|
|
4054
4188
|
function loadOfficialSampleSnapshot() {
|
|
4055
4189
|
const upstream = readUpstream(getUpstreamsPath(), OFFICIAL_SAMPLE_UPSTREAM_NAME);
|
|
4056
|
-
const files = readVendoredFiles(
|
|
4190
|
+
const files = readVendoredFiles(join5(getPackageRoot(), OFFICIAL_SAMPLE_FILES_DIR));
|
|
4057
4191
|
if (files.size === 0) {
|
|
4058
4192
|
throw new Error(`The vendored snapshot of ${upstream.repo} is missing from ${OFFICIAL_SAMPLE_FILES_DIR}.`);
|
|
4059
4193
|
}
|
|
@@ -4096,27 +4230,21 @@ function renamePackageInLock(lock, upstreamName, packageName) {
|
|
|
4096
4230
|
// src/overlay.ts
|
|
4097
4231
|
import {
|
|
4098
4232
|
existsSync as existsSync6,
|
|
4099
|
-
readdirSync as readdirSync4,
|
|
4100
4233
|
readFileSync as readFileSync6,
|
|
4101
4234
|
statSync as statSync2
|
|
4102
4235
|
} from "node:fs";
|
|
4103
4236
|
import {
|
|
4104
4237
|
isAbsolute,
|
|
4105
|
-
join as
|
|
4238
|
+
join as join7,
|
|
4106
4239
|
relative as relative3,
|
|
4107
4240
|
resolve
|
|
4108
4241
|
} from "node:path";
|
|
4109
4242
|
|
|
4110
|
-
// src/plan-checks.ts
|
|
4111
|
-
import {
|
|
4112
|
-
existsSync as existsSync5,
|
|
4113
|
-
readdirSync as readdirSync3,
|
|
4114
|
-
readFileSync as readFileSync5,
|
|
4115
|
-
statSync
|
|
4116
|
-
} from "node:fs";
|
|
4243
|
+
// src/verification/plan-checks.ts
|
|
4244
|
+
import { readFileSync as readFileSync5 } from "node:fs";
|
|
4117
4245
|
import {
|
|
4118
4246
|
extname as extname2,
|
|
4119
|
-
join as
|
|
4247
|
+
join as join6
|
|
4120
4248
|
} from "node:path";
|
|
4121
4249
|
var EJS_SUFFIX = ".ejs";
|
|
4122
4250
|
var RENDER_SITE_PATTERN = /(?:<%[-=]?|\$\{)\s*render\(\s*(?:'(?<Section>[^']*)'|\{(?<Options>[^}]*)\})/g;
|
|
@@ -4142,7 +4270,7 @@ function loadTemplateInventory(templatesDir = defaultTemplatesDir()) {
|
|
|
4142
4270
|
const emptyTemplates = /* @__PURE__ */ new Set();
|
|
4143
4271
|
const partials = [];
|
|
4144
4272
|
const renderSites = [];
|
|
4145
|
-
for (const relativePath of
|
|
4273
|
+
for (const [relativePath, physicalPath] of indexTemplateDir(templatesDir)) {
|
|
4146
4274
|
if (ASSET_EXTENSIONS.has(extname2(relativePath))) {
|
|
4147
4275
|
assetTemplates.add(relativePath);
|
|
4148
4276
|
continue;
|
|
@@ -4151,7 +4279,7 @@ function loadTemplateInventory(templatesDir = defaultTemplatesDir()) {
|
|
|
4151
4279
|
continue;
|
|
4152
4280
|
}
|
|
4153
4281
|
const withoutSuffix = relativePath.slice(0, -EJS_SUFFIX.length);
|
|
4154
|
-
const body = readFileSync5(
|
|
4282
|
+
const body = readFileSync5(join6(templatesDir, physicalPath), "utf-8");
|
|
4155
4283
|
if (isPartialTemplatePath(relativePath)) {
|
|
4156
4284
|
partials.push(parsePartialPath(relativePath));
|
|
4157
4285
|
} else {
|
|
@@ -4204,7 +4332,7 @@ function parsePartialPath(relativePath) {
|
|
|
4204
4332
|
};
|
|
4205
4333
|
}
|
|
4206
4334
|
function defaultTemplatesDir() {
|
|
4207
|
-
return
|
|
4335
|
+
return join6(getScriptDir(), "..", "templates", "default");
|
|
4208
4336
|
}
|
|
4209
4337
|
function getRenderBase(templatePath) {
|
|
4210
4338
|
if (!isPartialTemplatePath(templatePath)) {
|
|
@@ -4213,22 +4341,6 @@ function getRenderBase(templatePath) {
|
|
|
4213
4341
|
const { basePath } = parsePartialPath(`${templatePath}${EJS_SUFFIX}`);
|
|
4214
4342
|
return isPartialTemplatePath(basePath) ? getRenderBase(basePath) : templatePath;
|
|
4215
4343
|
}
|
|
4216
|
-
function walkTemplates(templatesDir, relativeDir) {
|
|
4217
|
-
const absoluteDir = join5(templatesDir, relativeDir);
|
|
4218
|
-
if (!existsSync5(absoluteDir)) {
|
|
4219
|
-
return [];
|
|
4220
|
-
}
|
|
4221
|
-
const found = [];
|
|
4222
|
-
for (const entry of readdirSync3(absoluteDir)) {
|
|
4223
|
-
const relativePath = relativeDir === "" ? entry : `${relativeDir}/${entry}`;
|
|
4224
|
-
if (statSync(join5(templatesDir, relativePath)).isDirectory()) {
|
|
4225
|
-
found.push(...walkTemplates(templatesDir, relativePath));
|
|
4226
|
-
} else {
|
|
4227
|
-
found.push(relativePath);
|
|
4228
|
-
}
|
|
4229
|
-
}
|
|
4230
|
-
return found;
|
|
4231
|
-
}
|
|
4232
4344
|
|
|
4233
4345
|
// src/overlay.ts
|
|
4234
4346
|
var OVERLAY_MANIFEST_FILE_NAME = "overlay.json";
|
|
@@ -4241,7 +4353,7 @@ function loadOverlay(dir, builtIn = loadTemplateInventory()) {
|
|
|
4241
4353
|
if (!existsSync6(absoluteDir) || !statSync2(absoluteDir).isDirectory()) {
|
|
4242
4354
|
throw new Error(`Custom template directory not found: ${absoluteDir}`);
|
|
4243
4355
|
}
|
|
4244
|
-
const manifestPath =
|
|
4356
|
+
const manifestPath = join7(absoluteDir, OVERLAY_MANIFEST_FILE_NAME);
|
|
4245
4357
|
if (!existsSync6(manifestPath)) {
|
|
4246
4358
|
throw new Error(`Custom template directory has no ${OVERLAY_MANIFEST_FILE_NAME}: ${absoluteDir}`);
|
|
4247
4359
|
}
|
|
@@ -4349,7 +4461,7 @@ function listStrayFiles(dir, own) {
|
|
|
4349
4461
|
OVERLAY_MANIFEST_FILE_NAME,
|
|
4350
4462
|
OVERLAY_README_FILE_NAME
|
|
4351
4463
|
]);
|
|
4352
|
-
return
|
|
4464
|
+
return [...indexTemplateDir(dir)].filter(([logicalPath]) => !accounted.has(logicalPath)).map(([, physicalPath]) => physicalPath);
|
|
4353
4465
|
}
|
|
4354
4466
|
function readManifest(manifestPath) {
|
|
4355
4467
|
let parsed;
|
|
@@ -4381,18 +4493,6 @@ function readManifest(manifestPath) {
|
|
|
4381
4493
|
partials: readList("partials")
|
|
4382
4494
|
};
|
|
4383
4495
|
}
|
|
4384
|
-
function walkFiles(root, relativeDir) {
|
|
4385
|
-
const found = [];
|
|
4386
|
-
for (const entry of readdirSync4(join6(root, relativeDir))) {
|
|
4387
|
-
const relativePath = relativeDir === "" ? entry : `${relativeDir}/${entry}`;
|
|
4388
|
-
if (statSync2(join6(root, relativePath)).isDirectory()) {
|
|
4389
|
-
found.push(...walkFiles(root, relativePath));
|
|
4390
|
-
} else {
|
|
4391
|
-
found.push(relativePath);
|
|
4392
|
-
}
|
|
4393
|
-
}
|
|
4394
|
-
return found;
|
|
4395
|
-
}
|
|
4396
4496
|
|
|
4397
4497
|
// src/project-formatter.ts
|
|
4398
4498
|
import { spawnSync } from "node:child_process";
|
|
@@ -4400,7 +4500,7 @@ import {
|
|
|
4400
4500
|
existsSync as existsSync7,
|
|
4401
4501
|
readFileSync as readFileSync7
|
|
4402
4502
|
} from "node:fs";
|
|
4403
|
-
import { join as
|
|
4503
|
+
import { join as join8 } from "node:path";
|
|
4404
4504
|
import process2 from "node:process";
|
|
4405
4505
|
var FORMATTER_COMMANDS = {
|
|
4406
4506
|
biome: {
|
|
@@ -4435,14 +4535,14 @@ function createProjectFormatter(targetDir, formatter) {
|
|
|
4435
4535
|
};
|
|
4436
4536
|
}
|
|
4437
4537
|
function resolveBin(targetDir, packageName) {
|
|
4438
|
-
const packageDir =
|
|
4439
|
-
const packageJsonPath =
|
|
4538
|
+
const packageDir = join8(targetDir, "node_modules", packageName);
|
|
4539
|
+
const packageJsonPath = join8(packageDir, "package.json");
|
|
4440
4540
|
if (!existsSync7(packageJsonPath)) {
|
|
4441
4541
|
return null;
|
|
4442
4542
|
}
|
|
4443
4543
|
const { bin } = JSON.parse(readFileSync7(packageJsonPath, "utf-8"));
|
|
4444
4544
|
const relativeBin = typeof bin === "string" ? bin : Object.values(bin ?? {})[0];
|
|
4445
|
-
return relativeBin === void 0 ? null :
|
|
4545
|
+
return relativeBin === void 0 ? null : join8(packageDir, relativeBin);
|
|
4446
4546
|
}
|
|
4447
4547
|
function runCli(binPath, targetDir, args, input) {
|
|
4448
4548
|
const result = spawnSync(process2.execPath, [binPath, ...args], { cwd: targetDir, encoding: "utf-8", input });
|
|
@@ -4491,7 +4591,7 @@ async function detectMode(cliArgs) {
|
|
|
4491
4591
|
if (cliArgs.mode) {
|
|
4492
4592
|
return cliArgs.mode;
|
|
4493
4593
|
}
|
|
4494
|
-
const configPath =
|
|
4594
|
+
const configPath = join9(process.cwd(), CONFIG_FILE_NAME);
|
|
4495
4595
|
if (existsSync8(configPath)) {
|
|
4496
4596
|
if (cliArgs.useDefaults) {
|
|
4497
4597
|
exitWithUsageError(`Existing project detected (${CONFIG_FILE_NAME}), and --yes cannot ask whether to update it.
|
|
@@ -4583,7 +4683,7 @@ function exitWithUsageError(message) {
|
|
|
4583
4683
|
process.exit(1);
|
|
4584
4684
|
}
|
|
4585
4685
|
function hasPrepareScript(targetDir) {
|
|
4586
|
-
const packageJson = JSON.parse(readFileSync8(
|
|
4686
|
+
const packageJson = JSON.parse(readFileSync8(join9(targetDir, "package.json"), "utf-8"));
|
|
4587
4687
|
return Object.hasOwn(packageJson.scripts ?? {}, "prepare");
|
|
4588
4688
|
}
|
|
4589
4689
|
function loadOverlayOrExit(dir, hint = "") {
|
|
@@ -4594,7 +4694,7 @@ function loadOverlayOrExit(dir, hint = "") {
|
|
|
4594
4694
|
}
|
|
4595
4695
|
}
|
|
4596
4696
|
async function main() {
|
|
4597
|
-
const packageJsonPath =
|
|
4697
|
+
const packageJsonPath = join9(getScriptDir(), "..", "package.json");
|
|
4598
4698
|
const packageJson = JSON.parse(readFileSync8(packageJsonPath, "utf-8"));
|
|
4599
4699
|
const currentVersion = packageJson.version ?? "0.0.0";
|
|
4600
4700
|
const m = "\x1B[38;5;135m";
|
|
@@ -4650,7 +4750,7 @@ async function offerAnswersExport(answers, customTemplate) {
|
|
|
4650
4750
|
let choice = await ask();
|
|
4651
4751
|
while (choice !== "generate") {
|
|
4652
4752
|
if (choice === "script") {
|
|
4653
|
-
const scriptPath =
|
|
4753
|
+
const scriptPath = join9(process.cwd(), scriptName);
|
|
4654
4754
|
writeFileSync2(scriptPath, formatCreateScript(answers, shell, customTemplate));
|
|
4655
4755
|
if (shell === "sh") {
|
|
4656
4756
|
chmodSync(scriptPath, SCRIPT_MODE);
|
|
@@ -4658,10 +4758,10 @@ async function offerAnswersExport(answers, customTemplate) {
|
|
|
4658
4758
|
log5.success(`Wrote ${scriptName}`);
|
|
4659
4759
|
note(formatCreateCommand(answers, shell, customTemplate), "Non-interactive command");
|
|
4660
4760
|
} else {
|
|
4661
|
-
writeFileSync2(
|
|
4761
|
+
writeFileSync2(join9(process.cwd(), answersFileName), formatAnswersJson(answers));
|
|
4662
4762
|
log5.success(`Wrote ${answersFileName}`);
|
|
4663
4763
|
const overlayFlag = customTemplate ? ` --customTemplate=${customTemplate}` : "";
|
|
4664
|
-
note(`npm create @mnaoumov/obsidian-plugin -- --yes --mode=create --answersFile=${answersFileName}${overlayFlag}`, "Non-interactive command");
|
|
4764
|
+
note(`npm create @mnaoumov/obsidian-plugin "--" --yes --mode=create --answersFile=${answersFileName}${overlayFlag}`, "Non-interactive command");
|
|
4665
4765
|
}
|
|
4666
4766
|
choice = await ask();
|
|
4667
4767
|
}
|
|
@@ -4709,7 +4809,7 @@ async function runCreate(currentVersion, cliArgs) {
|
|
|
4709
4809
|
if (!useDefaults) {
|
|
4710
4810
|
await offerAnswersExport(answers, customTemplate);
|
|
4711
4811
|
}
|
|
4712
|
-
const targetDir =
|
|
4812
|
+
const targetDir = join9(process.cwd(), `obsidian-${answers.pluginId}`);
|
|
4713
4813
|
if (existsSync8(targetDir) && !cliArgs.force) {
|
|
4714
4814
|
if (useDefaults) {
|
|
4715
4815
|
exitWithUsageError(`Directory obsidian-${answers.pluginId} already exists, and --yes cannot ask whether to scaffold into it.
|
|
@@ -4739,14 +4839,14 @@ Pass --force to scaffold into it anyway.`);
|
|
|
4739
4839
|
newConfig = copyTemplates(answers, targetDir, currentVersion, null, resolvedVersions, minAppVersion, overlay);
|
|
4740
4840
|
s.stop("Plugin scaffolded.");
|
|
4741
4841
|
}
|
|
4742
|
-
const configPath =
|
|
4842
|
+
const configPath = join9(targetDir, CONFIG_FILE_NAME);
|
|
4743
4843
|
const configWithAnswers = buildSavedConfig(newConfig, answers, overlay, targetDir);
|
|
4744
4844
|
writeFileSync2(configPath, `${JSON.stringify(configWithAnswers, null, JSON_INDENT_SPACES4)}
|
|
4745
4845
|
`);
|
|
4746
4846
|
const isFormatted = useDefaults ? false : await runPostScaffold(targetDir, answers);
|
|
4747
4847
|
const pm = answers.packageManager;
|
|
4748
4848
|
const dirName = `obsidian-${answers.pluginId}`;
|
|
4749
|
-
const needsInstall = !existsSync8(
|
|
4849
|
+
const needsInstall = !existsSync8(join9(targetDir, "node_modules"));
|
|
4750
4850
|
const needsFormat = needsInitialFormat(answers.formatter) && !isFormatted;
|
|
4751
4851
|
const steps = [
|
|
4752
4852
|
...needsInstall ? [getInstallCommand(pm)] : [],
|
|
@@ -4764,7 +4864,7 @@ async function runInitialFormat(targetDir, answers, isInstalled) {
|
|
|
4764
4864
|
s.start("Formatting...");
|
|
4765
4865
|
try {
|
|
4766
4866
|
await execAsync(getRunCommand(answers.packageManager, "format"), targetDir);
|
|
4767
|
-
const configPath =
|
|
4867
|
+
const configPath = join9(targetDir, CONFIG_FILE_NAME);
|
|
4768
4868
|
const config = JSON.parse(readFileSync8(configPath, "utf-8"));
|
|
4769
4869
|
writeFileSync2(configPath, `${JSON.stringify(recordHashesOnDisk(targetDir, config), null, JSON_INDENT_SPACES4)}
|
|
4770
4870
|
`);
|
|
@@ -4859,7 +4959,7 @@ This project records it in ${CONFIG_FILE_NAME}. Pass --customTemplate=<dir> to p
|
|
|
4859
4959
|
);
|
|
4860
4960
|
log5.info(`Applying the custom template recorded for this project: ${existingConfig.customTemplate}`);
|
|
4861
4961
|
}
|
|
4862
|
-
const configPath =
|
|
4962
|
+
const configPath = join9(targetDir, CONFIG_FILE_NAME);
|
|
4863
4963
|
const savedConfig = JSON.parse(readFileSync8(configPath, "utf-8"));
|
|
4864
4964
|
let answers;
|
|
4865
4965
|
if (savedConfig.answers) {
|