@mnaoumov/create-obsidian-plugin 1.1.0 → 1.2.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 +8 -1
- package/dist/main.js +897 -801
- package/package.json +4 -2
- package/src/main.ts +15 -14
- 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"
|
|
@@ -1157,34 +1332,7 @@ var DocsShowcase = class extends FeatureOption {
|
|
|
1157
1332
|
builder.addFiles(["src/docs-showcase.desktop.integration.test.ts"]);
|
|
1158
1333
|
}
|
|
1159
1334
|
}
|
|
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
|
-
}
|
|
1335
|
+
};
|
|
1188
1336
|
|
|
1189
1337
|
// src/features/preset/standalone.ts
|
|
1190
1338
|
var Standalone = class extends FeatureOption {
|
|
@@ -1670,305 +1818,99 @@ var Vue = class extends FeatureOption {
|
|
|
1670
1818
|
builder.addPackage("vue").addPartial("ui-view").addSentenceCaseBrand("Vue").addFiles([
|
|
1671
1819
|
"src/vue-components/sample-vue-component.d.ts",
|
|
1672
1820
|
"src/vue-components/sample-vue-component.vue",
|
|
1673
|
-
"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';
|
|
1821
|
+
"src/views/sample-vue-view.ts"
|
|
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];
|
|
@@ -2781,7 +2786,7 @@ function toMode(value) {
|
|
|
2781
2786
|
return mode;
|
|
2782
2787
|
}
|
|
2783
2788
|
|
|
2784
|
-
// src/answers-export.ts
|
|
2789
|
+
// src/answers/answers-export.ts
|
|
2785
2790
|
var CREATE_COMMANDS = {
|
|
2786
2791
|
bun: { prefix: "bun create @mnaoumov/obsidian-plugin", separator: "" },
|
|
2787
2792
|
npm: { prefix: "npm create @mnaoumov/obsidian-plugin", separator: " --" },
|
|
@@ -2839,7 +2844,7 @@ function quote(value, shell) {
|
|
|
2839
2844
|
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
2840
2845
|
}
|
|
2841
2846
|
|
|
2842
|
-
// src/directory-registry.ts
|
|
2847
|
+
// src/directory/directory-registry.ts
|
|
2843
2848
|
var COMMUNITY_PLUGINS_JSON_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/community-plugins.json";
|
|
2844
2849
|
async function fetchCommunityPluginIds() {
|
|
2845
2850
|
try {
|
|
@@ -2875,14 +2880,14 @@ function validatePluginIdIsUnlisted(pluginId, listedIds) {
|
|
|
2875
2880
|
}
|
|
2876
2881
|
|
|
2877
2882
|
// src/official-sample.ts
|
|
2878
|
-
import { join as
|
|
2883
|
+
import { join as join5 } from "node:path";
|
|
2879
2884
|
|
|
2880
2885
|
// src/templates.ts
|
|
2881
2886
|
import { log as log4 } from "@clack/prompts";
|
|
2882
2887
|
import ejs from "ejs";
|
|
2883
2888
|
import { createHash } from "node:crypto";
|
|
2884
2889
|
import {
|
|
2885
|
-
existsSync as
|
|
2890
|
+
existsSync as existsSync4,
|
|
2886
2891
|
mkdirSync,
|
|
2887
2892
|
readFileSync as readFileSync3,
|
|
2888
2893
|
writeFileSync
|
|
@@ -2890,7 +2895,7 @@ import {
|
|
|
2890
2895
|
import {
|
|
2891
2896
|
dirname,
|
|
2892
2897
|
extname,
|
|
2893
|
-
join as
|
|
2898
|
+
join as join3
|
|
2894
2899
|
} from "node:path";
|
|
2895
2900
|
import { fileURLToPath } from "node:url";
|
|
2896
2901
|
|
|
@@ -3119,8 +3124,54 @@ var TemplateBuilder = class {
|
|
|
3119
3124
|
}
|
|
3120
3125
|
};
|
|
3121
3126
|
|
|
3127
|
+
// src/template-index.ts
|
|
3128
|
+
import {
|
|
3129
|
+
existsSync as existsSync3,
|
|
3130
|
+
readdirSync as readdirSync2,
|
|
3131
|
+
statSync
|
|
3132
|
+
} from "node:fs";
|
|
3133
|
+
import { join as join2 } from "node:path";
|
|
3134
|
+
var GROUP_FOLDER_PATTERN = /^\(.+\)$/;
|
|
3135
|
+
function getLogicalTemplatePath(physicalPath) {
|
|
3136
|
+
return physicalPath.split("/").filter((segment) => !GROUP_FOLDER_PATTERN.test(segment)).join("/");
|
|
3137
|
+
}
|
|
3138
|
+
function indexTemplateDir(root) {
|
|
3139
|
+
const index = /* @__PURE__ */ new Map();
|
|
3140
|
+
for (const physicalPath of walkFiles(root, "")) {
|
|
3141
|
+
const logicalPath = getLogicalTemplatePath(physicalPath);
|
|
3142
|
+
const existing = index.get(logicalPath);
|
|
3143
|
+
if (existing !== void 0) {
|
|
3144
|
+
throw new Error(`Two templates in ${root} resolve to ${logicalPath}: ${existing} and ${physicalPath}.`);
|
|
3145
|
+
}
|
|
3146
|
+
index.set(logicalPath, physicalPath);
|
|
3147
|
+
}
|
|
3148
|
+
return index;
|
|
3149
|
+
}
|
|
3150
|
+
function walkFiles(root, relativeDir) {
|
|
3151
|
+
const absoluteDir = join2(root, relativeDir);
|
|
3152
|
+
if (!existsSync3(absoluteDir)) {
|
|
3153
|
+
return [];
|
|
3154
|
+
}
|
|
3155
|
+
const found = [];
|
|
3156
|
+
for (const entry of readdirSync2(absoluteDir)) {
|
|
3157
|
+
const relativePath = relativeDir === "" ? entry : `${relativeDir}/${entry}`;
|
|
3158
|
+
if (statSync(join2(root, relativePath)).isDirectory()) {
|
|
3159
|
+
found.push(...walkFiles(root, relativePath));
|
|
3160
|
+
} else {
|
|
3161
|
+
found.push(relativePath);
|
|
3162
|
+
}
|
|
3163
|
+
}
|
|
3164
|
+
return found;
|
|
3165
|
+
}
|
|
3166
|
+
|
|
3122
3167
|
// src/versions.ts
|
|
3123
3168
|
import { log as log3 } from "@clack/prompts";
|
|
3169
|
+
import {
|
|
3170
|
+
maxSatisfying,
|
|
3171
|
+
minVersion,
|
|
3172
|
+
subset,
|
|
3173
|
+
validRange
|
|
3174
|
+
} from "semver";
|
|
3124
3175
|
var PINNED_VERSIONS = {
|
|
3125
3176
|
"@babel/core": {
|
|
3126
3177
|
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 +3331,14 @@ var ADVISORY_OVERRIDES = {
|
|
|
3280
3331
|
spec: "^8.0.2",
|
|
3281
3332
|
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
3333
|
},
|
|
3334
|
+
"re2js": {
|
|
3335
|
+
check: `node -e "const fs=require('node:fs');process.stdout.write(JSON.parse(fs.readFileSync('node_modules/markdownlint/package.json','utf8')).dependencies.re2js)"`,
|
|
3336
|
+
expect: "2.8.6",
|
|
3337
|
+
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`.",
|
|
3338
|
+
requires: ["markdownlint", "markdownlint-cli2", "@mnaoumov/typescript-dev-toolkit", "@mnaoumov/obsidian-dev-toolkit"],
|
|
3339
|
+
spec: "^2.9.1",
|
|
3340
|
+
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."
|
|
3341
|
+
},
|
|
3283
3342
|
"serialize-javascript": {
|
|
3284
3343
|
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
3344
|
expect: "^6.0.2",
|
|
@@ -3287,14 +3346,6 @@ var ADVISORY_OVERRIDES = {
|
|
|
3287
3346
|
requires: ["@wdio/mocha-framework"],
|
|
3288
3347
|
spec: "^7.1.1",
|
|
3289
3348
|
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
3349
|
}
|
|
3299
3350
|
};
|
|
3300
3351
|
var DESKTOP_RELEASES_JSON_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/desktop-releases.json";
|
|
@@ -3302,6 +3353,8 @@ var FALLBACK_MIN_APP_VERSION = "1.13.0";
|
|
|
3302
3353
|
var FALLBACK_VERSION = "latest";
|
|
3303
3354
|
var JSON_INDENT_SPACES2 = 2;
|
|
3304
3355
|
var REGISTRY_URL = "https://registry.npmjs.org";
|
|
3356
|
+
var ABBREVIATED_PACKUMENT_MEDIA_TYPE = "application/vnd.npm.install-v1+json";
|
|
3357
|
+
var CONSTRAINING_PACKAGES = ["@mnaoumov/obsidian-dev-toolkit", "@mnaoumov/typescript-dev-toolkit"];
|
|
3305
3358
|
function buildOverrides(dependencies) {
|
|
3306
3359
|
const overrides = {};
|
|
3307
3360
|
for (const packageName of getPinnedPackageNames(dependencies)) {
|
|
@@ -3405,22 +3458,68 @@ async function resolveVersions(dependencies) {
|
|
|
3405
3458
|
}
|
|
3406
3459
|
unresolved.push(dependency.packageName);
|
|
3407
3460
|
}
|
|
3408
|
-
const fetched = await Promise.all(unresolved.map(fetchLatestVersion));
|
|
3409
3461
|
const failed = [];
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
if (
|
|
3462
|
+
const constraints = /* @__PURE__ */ new Map();
|
|
3463
|
+
function record(packageName, resolution) {
|
|
3464
|
+
if (resolution === null) {
|
|
3413
3465
|
failed.push(packageName);
|
|
3414
3466
|
resolved.set(packageName, FALLBACK_VERSION);
|
|
3467
|
+
return;
|
|
3468
|
+
}
|
|
3469
|
+
resolved.set(packageName, resolution.spec);
|
|
3470
|
+
if (resolution.heldBelow !== null) {
|
|
3471
|
+
log3.info(`Holding ${packageName} on ${resolution.spec}, the range ${resolution.heldBy ?? ""} declares, rather than the latest ${resolution.heldBelow}.`);
|
|
3472
|
+
}
|
|
3473
|
+
}
|
|
3474
|
+
for (const constrainer of CONSTRAINING_PACKAGES) {
|
|
3475
|
+
if (!unresolved.includes(constrainer)) {
|
|
3415
3476
|
continue;
|
|
3416
3477
|
}
|
|
3417
|
-
|
|
3478
|
+
const resolution = await resolveWithin(constrainer, constraints.get(constrainer));
|
|
3479
|
+
record(constrainer, resolution);
|
|
3480
|
+
if (resolution === null) {
|
|
3481
|
+
continue;
|
|
3482
|
+
}
|
|
3483
|
+
const manifest = await fetchManifest(constrainer, resolution.version);
|
|
3484
|
+
for (const [packageName, range] of Object.entries({ ...manifest?.peerDependencies, ...manifest?.dependencies })) {
|
|
3485
|
+
if (!constraints.has(packageName)) {
|
|
3486
|
+
constraints.set(packageName, { by: constrainer, range });
|
|
3487
|
+
}
|
|
3488
|
+
}
|
|
3489
|
+
}
|
|
3490
|
+
const rest = unresolved.filter((packageName) => !CONSTRAINING_PACKAGES.includes(packageName));
|
|
3491
|
+
const resolutions = await Promise.all(rest.map((packageName) => resolveWithin(packageName, constraints.get(packageName))));
|
|
3492
|
+
for (const [index, resolution] of resolutions.entries()) {
|
|
3493
|
+
record(rest[index] ?? "", resolution);
|
|
3418
3494
|
}
|
|
3419
3495
|
if (failed.length > 0) {
|
|
3420
3496
|
log3.warn(`Could not look up the latest version of ${failed.join(", ")}. Falling back to "${FALLBACK_VERSION}".`);
|
|
3421
3497
|
}
|
|
3422
3498
|
return resolved;
|
|
3423
3499
|
}
|
|
3500
|
+
async function fetchManifest(packageName, version) {
|
|
3501
|
+
try {
|
|
3502
|
+
const response = await fetch(`${REGISTRY_URL}/${packageName}/${version}`);
|
|
3503
|
+
if (!response.ok) {
|
|
3504
|
+
return null;
|
|
3505
|
+
}
|
|
3506
|
+
return await response.json();
|
|
3507
|
+
} catch {
|
|
3508
|
+
return null;
|
|
3509
|
+
}
|
|
3510
|
+
}
|
|
3511
|
+
async function fetchPublishedVersions(packageName) {
|
|
3512
|
+
try {
|
|
3513
|
+
const response = await fetch(`${REGISTRY_URL}/${packageName}`, { headers: { accept: ABBREVIATED_PACKUMENT_MEDIA_TYPE } });
|
|
3514
|
+
if (!response.ok) {
|
|
3515
|
+
return null;
|
|
3516
|
+
}
|
|
3517
|
+
const packument = await response.json();
|
|
3518
|
+
return Object.keys(packument.versions ?? {});
|
|
3519
|
+
} catch {
|
|
3520
|
+
return null;
|
|
3521
|
+
}
|
|
3522
|
+
}
|
|
3424
3523
|
function getAdvisoryOverrides(dependencies) {
|
|
3425
3524
|
return Object.entries(ADVISORY_OVERRIDES).filter(([, advisoryOverride]) => advisoryOverride.requires.some((packageName) => hasPackage(dependencies, packageName))).sort(([a], [b]) => a.localeCompare(b));
|
|
3426
3525
|
}
|
|
@@ -3430,6 +3529,25 @@ function getPinnedPackageNames(dependencies) {
|
|
|
3430
3529
|
function hasPackage(dependencies, packageName) {
|
|
3431
3530
|
return dependencies.some((dependency) => dependency.packageName === packageName);
|
|
3432
3531
|
}
|
|
3532
|
+
function isCaretWithin(version, range) {
|
|
3533
|
+
if (version === null || validRange(range) === null) {
|
|
3534
|
+
return false;
|
|
3535
|
+
}
|
|
3536
|
+
return subset(`^${version}`, range);
|
|
3537
|
+
}
|
|
3538
|
+
async function resolveWithin(packageName, constraint) {
|
|
3539
|
+
const latest = await fetchLatestVersion(packageName);
|
|
3540
|
+
if (constraint === void 0 || isCaretWithin(latest, constraint.range)) {
|
|
3541
|
+
return latest === null ? null : { heldBelow: null, heldBy: null, spec: `^${latest}`, version: latest };
|
|
3542
|
+
}
|
|
3543
|
+
const versions = await fetchPublishedVersions(packageName);
|
|
3544
|
+
const newest = versions === null ? null : maxSatisfying(versions, constraint.range);
|
|
3545
|
+
if (newest === null) {
|
|
3546
|
+
return { heldBelow: latest, heldBy: constraint.by, spec: constraint.range, version: minVersion(constraint.range)?.version ?? constraint.range };
|
|
3547
|
+
}
|
|
3548
|
+
const spec = isCaretWithin(newest, constraint.range) ? `^${newest}` : constraint.range;
|
|
3549
|
+
return { heldBelow: latest, heldBy: constraint.by, spec, version: newest };
|
|
3550
|
+
}
|
|
3433
3551
|
|
|
3434
3552
|
// src/templates.ts
|
|
3435
3553
|
var ASSET_EXTENSIONS = /* @__PURE__ */ new Set([".wasm"]);
|
|
@@ -3553,16 +3671,16 @@ function buildTemplate(givenAnswers, overlay = null) {
|
|
|
3553
3671
|
}
|
|
3554
3672
|
function copyTemplates(givenAnswers, targetDir, currentVersion, existingConfig, resolvedVersions = /* @__PURE__ */ new Map(), minAppVersion = FALLBACK_MIN_APP_VERSION, overlay = null, projectFormatter) {
|
|
3555
3673
|
const answers = pinPresetAnswers(givenAnswers);
|
|
3556
|
-
const templatesDir =
|
|
3674
|
+
const templatesDir = join3(getScriptDir(), "..", "templates", "default");
|
|
3675
|
+
const overlayIndex = overlay ? indexTemplateDir(overlay.dir) : null;
|
|
3676
|
+
const builtInIndex = getBuiltInTemplateIndex(templatesDir);
|
|
3557
3677
|
function findTemplate(relativePath) {
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
return overlayPath;
|
|
3562
|
-
}
|
|
3678
|
+
const overlayPath = overlayIndex?.get(relativePath);
|
|
3679
|
+
if (overlay && overlayPath !== void 0) {
|
|
3680
|
+
return join3(overlay.dir, overlayPath);
|
|
3563
3681
|
}
|
|
3564
|
-
const builtInPath =
|
|
3565
|
-
return
|
|
3682
|
+
const builtInPath = builtInIndex.get(relativePath);
|
|
3683
|
+
return builtInPath === void 0 ? null : join3(templatesDir, builtInPath);
|
|
3566
3684
|
}
|
|
3567
3685
|
const builder = buildTemplate(answers, overlay);
|
|
3568
3686
|
const templateFiles = builder.templateFiles;
|
|
@@ -3584,6 +3702,9 @@ function copyTemplates(givenAnswers, targetDir, currentVersion, existingConfig,
|
|
|
3584
3702
|
packageName: dependency.packageName,
|
|
3585
3703
|
version: dependency.version ?? resolvedVersions.get(dependency.packageName) ?? PINNED_VERSIONS[dependency.packageName]?.version ?? UNRESOLVED_VERSION
|
|
3586
3704
|
})),
|
|
3705
|
+
// The README's `support` seam opens `## Support` in the funding partial, so the issue-filing partial
|
|
3706
|
+
// After it opens the section itself only when there is no funding.
|
|
3707
|
+
_hasFunding: partials.has("has-funding"),
|
|
3587
3708
|
_lintStagedPatterns: builder.lintStagedPatterns,
|
|
3588
3709
|
_minAppVersion: minAppVersion,
|
|
3589
3710
|
_overrides: Object.entries(buildOverrides(dependencies)).map(([packageName, spec]) => ({ packageName, spec })),
|
|
@@ -3642,7 +3763,7 @@ function copyTemplates(givenAnswers, targetDir, currentVersion, existingConfig,
|
|
|
3642
3763
|
let rendered;
|
|
3643
3764
|
if (isAsset) {
|
|
3644
3765
|
currentTemplatePath = registeredPath;
|
|
3645
|
-
rendered = readFileSync3(findTemplate(registeredPath) ??
|
|
3766
|
+
rendered = readFileSync3(findTemplate(registeredPath) ?? join3(templatesDir, registeredPath));
|
|
3646
3767
|
} else if (ejsPath === null) {
|
|
3647
3768
|
currentTemplatePath = `${registeredPath}.ejs`;
|
|
3648
3769
|
rendered = templateContext["render"]();
|
|
@@ -3660,13 +3781,14 @@ function copyTemplates(givenAnswers, targetDir, currentVersion, existingConfig,
|
|
|
3660
3781
|
renderedFiles.push({ content: rendered, destinationPath });
|
|
3661
3782
|
}
|
|
3662
3783
|
if (answers.preset === DOCS_SHOWCASE_PRESET) {
|
|
3663
|
-
renderedFiles.push(...readDocsShowcaseFiles(
|
|
3784
|
+
renderedFiles.push(...readDocsShowcaseFiles(join3(getScriptDir(), "..")));
|
|
3664
3785
|
}
|
|
3665
3786
|
return writeGeneratedFiles(renderedFiles, targetDir, currentVersion, existingConfig, projectFormatter);
|
|
3666
3787
|
}
|
|
3667
3788
|
function getDestinationPath(templatePath, answers) {
|
|
3668
3789
|
return templatePath.replace(/%= (?<AnswerKey>.+?) %/g, (_match, ...args) => String(answers[String(args[0])]));
|
|
3669
3790
|
}
|
|
3791
|
+
var builtInTemplateIndexes = /* @__PURE__ */ new Map();
|
|
3670
3792
|
function getScriptDir() {
|
|
3671
3793
|
return dirname(fileURLToPath(import.meta.url));
|
|
3672
3794
|
}
|
|
@@ -3676,8 +3798,8 @@ function isPartialTemplatePath(templatePath) {
|
|
|
3676
3798
|
return markerIndex > 0 && PARTIAL_NAME_PATTERN.test(fileName.slice(markerIndex + 1));
|
|
3677
3799
|
}
|
|
3678
3800
|
function loadConfig(dir) {
|
|
3679
|
-
const configPath =
|
|
3680
|
-
if (!
|
|
3801
|
+
const configPath = join3(dir, CONFIG_FILE_NAME);
|
|
3802
|
+
if (!existsSync4(configPath)) {
|
|
3681
3803
|
return null;
|
|
3682
3804
|
}
|
|
3683
3805
|
const parsed = JSON.parse(readFileSync3(configPath, "utf-8"));
|
|
@@ -3691,8 +3813,8 @@ function pinPresetAnswers(answers) {
|
|
|
3691
3813
|
function recordHashesOnDisk(targetDir, config) {
|
|
3692
3814
|
const fileHashes = {};
|
|
3693
3815
|
for (const [destinationPath, hash] of Object.entries(config.fileHashes)) {
|
|
3694
|
-
const fullPath =
|
|
3695
|
-
fileHashes[destinationPath] =
|
|
3816
|
+
const fullPath = join3(targetDir, destinationPath);
|
|
3817
|
+
fileHashes[destinationPath] = existsSync4(fullPath) ? sha256(readFileSync3(fullPath)) : hash;
|
|
3696
3818
|
}
|
|
3697
3819
|
return { ...config, fileHashes };
|
|
3698
3820
|
}
|
|
@@ -3731,9 +3853,9 @@ function writeGeneratedFiles(files, targetDir, currentVersion, existingConfig, p
|
|
|
3731
3853
|
const created = [];
|
|
3732
3854
|
const written = [];
|
|
3733
3855
|
for (const { content: rendered, destinationPath } of files) {
|
|
3734
|
-
const fullDestinationPath =
|
|
3856
|
+
const fullDestinationPath = join3(targetDir, destinationPath);
|
|
3735
3857
|
const newHash = sha256(rendered);
|
|
3736
|
-
if (existingConfig &&
|
|
3858
|
+
if (existingConfig && existsSync4(fullDestinationPath)) {
|
|
3737
3859
|
const currentContent = Buffer.isBuffer(rendered) ? readFileSync3(fullDestinationPath) : readFileSync3(fullDestinationPath, "utf-8");
|
|
3738
3860
|
const currentHash = sha256(currentContent);
|
|
3739
3861
|
const originalHash = existingConfig.fileHashes[destinationPath];
|
|
@@ -3756,14 +3878,14 @@ function writeGeneratedFiles(files, targetDir, currentVersion, existingConfig, p
|
|
|
3756
3878
|
}
|
|
3757
3879
|
newConfig.fileHashes[destinationPath] = newHash;
|
|
3758
3880
|
const destDir = dirname(fullDestinationPath);
|
|
3759
|
-
if (!
|
|
3881
|
+
if (!existsSync4(destDir)) {
|
|
3760
3882
|
mkdirSync(destDir, { recursive: true });
|
|
3761
3883
|
}
|
|
3762
3884
|
writeFileSync(fullDestinationPath, rendered);
|
|
3763
3885
|
written.push(destinationPath);
|
|
3764
3886
|
}
|
|
3765
3887
|
formatWrittenFiles(projectFormatter, targetDir, written, newConfig);
|
|
3766
|
-
const configPath =
|
|
3888
|
+
const configPath = join3(targetDir, CONFIG_FILE_NAME);
|
|
3767
3889
|
writeFileSync(configPath, `${JSON.stringify(newConfig, null, JSON_INDENT_SPACES3)}
|
|
3768
3890
|
`);
|
|
3769
3891
|
if (existingConfig) {
|
|
@@ -3793,8 +3915,16 @@ function formatWrittenFiles(projectFormatter, targetDir, written, config) {
|
|
|
3793
3915
|
}
|
|
3794
3916
|
projectFormatter.formatFiles(textFiles);
|
|
3795
3917
|
for (const destinationPath of textFiles) {
|
|
3796
|
-
config.fileHashes[destinationPath] = sha256(readFileSync3(
|
|
3918
|
+
config.fileHashes[destinationPath] = sha256(readFileSync3(join3(targetDir, destinationPath)));
|
|
3919
|
+
}
|
|
3920
|
+
}
|
|
3921
|
+
function getBuiltInTemplateIndex(templatesDir) {
|
|
3922
|
+
let index = builtInTemplateIndexes.get(templatesDir);
|
|
3923
|
+
if (index === void 0) {
|
|
3924
|
+
index = indexTemplateDir(templatesDir);
|
|
3925
|
+
builtInTemplateIndexes.set(templatesDir, index);
|
|
3797
3926
|
}
|
|
3927
|
+
return index;
|
|
3798
3928
|
}
|
|
3799
3929
|
function getCspellIdentityWords(answers) {
|
|
3800
3930
|
const words = [answers.authorGitHubName, "mnaoumov"];
|
|
@@ -3923,12 +4053,12 @@ ${[base, ...extraConfigs.map((config) => JSON.stringify(config))].map((config) =
|
|
|
3923
4053
|
|
|
3924
4054
|
// src/upstream-snapshot.ts
|
|
3925
4055
|
import {
|
|
3926
|
-
existsSync as
|
|
3927
|
-
readdirSync as
|
|
4056
|
+
existsSync as existsSync5,
|
|
4057
|
+
readdirSync as readdirSync3,
|
|
3928
4058
|
readFileSync as readFileSync4
|
|
3929
4059
|
} from "node:fs";
|
|
3930
4060
|
import {
|
|
3931
|
-
join as
|
|
4061
|
+
join as join4,
|
|
3932
4062
|
relative as relative2
|
|
3933
4063
|
} from "node:path";
|
|
3934
4064
|
var VENDORED_SUFFIX = ".vendored";
|
|
@@ -3967,10 +4097,10 @@ function readUpstream(upstreamsPath, name) {
|
|
|
3967
4097
|
}
|
|
3968
4098
|
function readVendoredFiles(dir) {
|
|
3969
4099
|
const files = /* @__PURE__ */ new Map();
|
|
3970
|
-
if (!
|
|
4100
|
+
if (!existsSync5(dir)) {
|
|
3971
4101
|
return files;
|
|
3972
4102
|
}
|
|
3973
|
-
const paths =
|
|
4103
|
+
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
4104
|
for (const fullPath of paths) {
|
|
3975
4105
|
const upstreamPath = relative2(dir, fullPath).replaceAll("\\", "/").slice(0, -VENDORED_SUFFIX.length);
|
|
3976
4106
|
files.set(upstreamPath, readFileSync4(fullPath));
|
|
@@ -3987,7 +4117,7 @@ async function fetchJson(url, headers) {
|
|
|
3987
4117
|
|
|
3988
4118
|
// src/official-sample.ts
|
|
3989
4119
|
var OFFICIAL_SAMPLE_UPSTREAM_NAME = "obsidian-sample-plugin";
|
|
3990
|
-
var OFFICIAL_SAMPLE_FILES_DIR =
|
|
4120
|
+
var OFFICIAL_SAMPLE_FILES_DIR = join5("templates", "official-sample", "files");
|
|
3991
4121
|
var OFFICIAL_SAMPLE_PINNED_ANSWERS = {
|
|
3992
4122
|
formatter: "none",
|
|
3993
4123
|
packageManager: "npm"
|
|
@@ -4046,14 +4176,14 @@ function copyOfficialSample(answers, targetDir, currentVersion, existingConfig,
|
|
|
4046
4176
|
return { ...config, upstreamCommit: snapshot.commit };
|
|
4047
4177
|
}
|
|
4048
4178
|
function getPackageRoot() {
|
|
4049
|
-
return
|
|
4179
|
+
return join5(getScriptDir(), "..");
|
|
4050
4180
|
}
|
|
4051
4181
|
function getUpstreamsPath() {
|
|
4052
|
-
return
|
|
4182
|
+
return join5(getPackageRoot(), "upstreams.json");
|
|
4053
4183
|
}
|
|
4054
4184
|
function loadOfficialSampleSnapshot() {
|
|
4055
4185
|
const upstream = readUpstream(getUpstreamsPath(), OFFICIAL_SAMPLE_UPSTREAM_NAME);
|
|
4056
|
-
const files = readVendoredFiles(
|
|
4186
|
+
const files = readVendoredFiles(join5(getPackageRoot(), OFFICIAL_SAMPLE_FILES_DIR));
|
|
4057
4187
|
if (files.size === 0) {
|
|
4058
4188
|
throw new Error(`The vendored snapshot of ${upstream.repo} is missing from ${OFFICIAL_SAMPLE_FILES_DIR}.`);
|
|
4059
4189
|
}
|
|
@@ -4096,27 +4226,21 @@ function renamePackageInLock(lock, upstreamName, packageName) {
|
|
|
4096
4226
|
// src/overlay.ts
|
|
4097
4227
|
import {
|
|
4098
4228
|
existsSync as existsSync6,
|
|
4099
|
-
readdirSync as readdirSync4,
|
|
4100
4229
|
readFileSync as readFileSync6,
|
|
4101
4230
|
statSync as statSync2
|
|
4102
4231
|
} from "node:fs";
|
|
4103
4232
|
import {
|
|
4104
4233
|
isAbsolute,
|
|
4105
|
-
join as
|
|
4234
|
+
join as join7,
|
|
4106
4235
|
relative as relative3,
|
|
4107
4236
|
resolve
|
|
4108
4237
|
} from "node:path";
|
|
4109
4238
|
|
|
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";
|
|
4239
|
+
// src/verification/plan-checks.ts
|
|
4240
|
+
import { readFileSync as readFileSync5 } from "node:fs";
|
|
4117
4241
|
import {
|
|
4118
4242
|
extname as extname2,
|
|
4119
|
-
join as
|
|
4243
|
+
join as join6
|
|
4120
4244
|
} from "node:path";
|
|
4121
4245
|
var EJS_SUFFIX = ".ejs";
|
|
4122
4246
|
var RENDER_SITE_PATTERN = /(?:<%[-=]?|\$\{)\s*render\(\s*(?:'(?<Section>[^']*)'|\{(?<Options>[^}]*)\})/g;
|
|
@@ -4142,7 +4266,7 @@ function loadTemplateInventory(templatesDir = defaultTemplatesDir()) {
|
|
|
4142
4266
|
const emptyTemplates = /* @__PURE__ */ new Set();
|
|
4143
4267
|
const partials = [];
|
|
4144
4268
|
const renderSites = [];
|
|
4145
|
-
for (const relativePath of
|
|
4269
|
+
for (const [relativePath, physicalPath] of indexTemplateDir(templatesDir)) {
|
|
4146
4270
|
if (ASSET_EXTENSIONS.has(extname2(relativePath))) {
|
|
4147
4271
|
assetTemplates.add(relativePath);
|
|
4148
4272
|
continue;
|
|
@@ -4151,7 +4275,7 @@ function loadTemplateInventory(templatesDir = defaultTemplatesDir()) {
|
|
|
4151
4275
|
continue;
|
|
4152
4276
|
}
|
|
4153
4277
|
const withoutSuffix = relativePath.slice(0, -EJS_SUFFIX.length);
|
|
4154
|
-
const body = readFileSync5(
|
|
4278
|
+
const body = readFileSync5(join6(templatesDir, physicalPath), "utf-8");
|
|
4155
4279
|
if (isPartialTemplatePath(relativePath)) {
|
|
4156
4280
|
partials.push(parsePartialPath(relativePath));
|
|
4157
4281
|
} else {
|
|
@@ -4204,7 +4328,7 @@ function parsePartialPath(relativePath) {
|
|
|
4204
4328
|
};
|
|
4205
4329
|
}
|
|
4206
4330
|
function defaultTemplatesDir() {
|
|
4207
|
-
return
|
|
4331
|
+
return join6(getScriptDir(), "..", "templates", "default");
|
|
4208
4332
|
}
|
|
4209
4333
|
function getRenderBase(templatePath) {
|
|
4210
4334
|
if (!isPartialTemplatePath(templatePath)) {
|
|
@@ -4213,22 +4337,6 @@ function getRenderBase(templatePath) {
|
|
|
4213
4337
|
const { basePath } = parsePartialPath(`${templatePath}${EJS_SUFFIX}`);
|
|
4214
4338
|
return isPartialTemplatePath(basePath) ? getRenderBase(basePath) : templatePath;
|
|
4215
4339
|
}
|
|
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
4340
|
|
|
4233
4341
|
// src/overlay.ts
|
|
4234
4342
|
var OVERLAY_MANIFEST_FILE_NAME = "overlay.json";
|
|
@@ -4241,7 +4349,7 @@ function loadOverlay(dir, builtIn = loadTemplateInventory()) {
|
|
|
4241
4349
|
if (!existsSync6(absoluteDir) || !statSync2(absoluteDir).isDirectory()) {
|
|
4242
4350
|
throw new Error(`Custom template directory not found: ${absoluteDir}`);
|
|
4243
4351
|
}
|
|
4244
|
-
const manifestPath =
|
|
4352
|
+
const manifestPath = join7(absoluteDir, OVERLAY_MANIFEST_FILE_NAME);
|
|
4245
4353
|
if (!existsSync6(manifestPath)) {
|
|
4246
4354
|
throw new Error(`Custom template directory has no ${OVERLAY_MANIFEST_FILE_NAME}: ${absoluteDir}`);
|
|
4247
4355
|
}
|
|
@@ -4349,7 +4457,7 @@ function listStrayFiles(dir, own) {
|
|
|
4349
4457
|
OVERLAY_MANIFEST_FILE_NAME,
|
|
4350
4458
|
OVERLAY_README_FILE_NAME
|
|
4351
4459
|
]);
|
|
4352
|
-
return
|
|
4460
|
+
return [...indexTemplateDir(dir)].filter(([logicalPath]) => !accounted.has(logicalPath)).map(([, physicalPath]) => physicalPath);
|
|
4353
4461
|
}
|
|
4354
4462
|
function readManifest(manifestPath) {
|
|
4355
4463
|
let parsed;
|
|
@@ -4381,18 +4489,6 @@ function readManifest(manifestPath) {
|
|
|
4381
4489
|
partials: readList("partials")
|
|
4382
4490
|
};
|
|
4383
4491
|
}
|
|
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
4492
|
|
|
4397
4493
|
// src/project-formatter.ts
|
|
4398
4494
|
import { spawnSync } from "node:child_process";
|
|
@@ -4400,7 +4496,7 @@ import {
|
|
|
4400
4496
|
existsSync as existsSync7,
|
|
4401
4497
|
readFileSync as readFileSync7
|
|
4402
4498
|
} from "node:fs";
|
|
4403
|
-
import { join as
|
|
4499
|
+
import { join as join8 } from "node:path";
|
|
4404
4500
|
import process2 from "node:process";
|
|
4405
4501
|
var FORMATTER_COMMANDS = {
|
|
4406
4502
|
biome: {
|
|
@@ -4435,14 +4531,14 @@ function createProjectFormatter(targetDir, formatter) {
|
|
|
4435
4531
|
};
|
|
4436
4532
|
}
|
|
4437
4533
|
function resolveBin(targetDir, packageName) {
|
|
4438
|
-
const packageDir =
|
|
4439
|
-
const packageJsonPath =
|
|
4534
|
+
const packageDir = join8(targetDir, "node_modules", packageName);
|
|
4535
|
+
const packageJsonPath = join8(packageDir, "package.json");
|
|
4440
4536
|
if (!existsSync7(packageJsonPath)) {
|
|
4441
4537
|
return null;
|
|
4442
4538
|
}
|
|
4443
4539
|
const { bin } = JSON.parse(readFileSync7(packageJsonPath, "utf-8"));
|
|
4444
4540
|
const relativeBin = typeof bin === "string" ? bin : Object.values(bin ?? {})[0];
|
|
4445
|
-
return relativeBin === void 0 ? null :
|
|
4541
|
+
return relativeBin === void 0 ? null : join8(packageDir, relativeBin);
|
|
4446
4542
|
}
|
|
4447
4543
|
function runCli(binPath, targetDir, args, input) {
|
|
4448
4544
|
const result = spawnSync(process2.execPath, [binPath, ...args], { cwd: targetDir, encoding: "utf-8", input });
|
|
@@ -4491,7 +4587,7 @@ async function detectMode(cliArgs) {
|
|
|
4491
4587
|
if (cliArgs.mode) {
|
|
4492
4588
|
return cliArgs.mode;
|
|
4493
4589
|
}
|
|
4494
|
-
const configPath =
|
|
4590
|
+
const configPath = join9(process.cwd(), CONFIG_FILE_NAME);
|
|
4495
4591
|
if (existsSync8(configPath)) {
|
|
4496
4592
|
if (cliArgs.useDefaults) {
|
|
4497
4593
|
exitWithUsageError(`Existing project detected (${CONFIG_FILE_NAME}), and --yes cannot ask whether to update it.
|
|
@@ -4583,7 +4679,7 @@ function exitWithUsageError(message) {
|
|
|
4583
4679
|
process.exit(1);
|
|
4584
4680
|
}
|
|
4585
4681
|
function hasPrepareScript(targetDir) {
|
|
4586
|
-
const packageJson = JSON.parse(readFileSync8(
|
|
4682
|
+
const packageJson = JSON.parse(readFileSync8(join9(targetDir, "package.json"), "utf-8"));
|
|
4587
4683
|
return Object.hasOwn(packageJson.scripts ?? {}, "prepare");
|
|
4588
4684
|
}
|
|
4589
4685
|
function loadOverlayOrExit(dir, hint = "") {
|
|
@@ -4594,7 +4690,7 @@ function loadOverlayOrExit(dir, hint = "") {
|
|
|
4594
4690
|
}
|
|
4595
4691
|
}
|
|
4596
4692
|
async function main() {
|
|
4597
|
-
const packageJsonPath =
|
|
4693
|
+
const packageJsonPath = join9(getScriptDir(), "..", "package.json");
|
|
4598
4694
|
const packageJson = JSON.parse(readFileSync8(packageJsonPath, "utf-8"));
|
|
4599
4695
|
const currentVersion = packageJson.version ?? "0.0.0";
|
|
4600
4696
|
const m = "\x1B[38;5;135m";
|
|
@@ -4650,7 +4746,7 @@ async function offerAnswersExport(answers, customTemplate) {
|
|
|
4650
4746
|
let choice = await ask();
|
|
4651
4747
|
while (choice !== "generate") {
|
|
4652
4748
|
if (choice === "script") {
|
|
4653
|
-
const scriptPath =
|
|
4749
|
+
const scriptPath = join9(process.cwd(), scriptName);
|
|
4654
4750
|
writeFileSync2(scriptPath, formatCreateScript(answers, shell, customTemplate));
|
|
4655
4751
|
if (shell === "sh") {
|
|
4656
4752
|
chmodSync(scriptPath, SCRIPT_MODE);
|
|
@@ -4658,7 +4754,7 @@ async function offerAnswersExport(answers, customTemplate) {
|
|
|
4658
4754
|
log5.success(`Wrote ${scriptName}`);
|
|
4659
4755
|
note(formatCreateCommand(answers, shell, customTemplate), "Non-interactive command");
|
|
4660
4756
|
} else {
|
|
4661
|
-
writeFileSync2(
|
|
4757
|
+
writeFileSync2(join9(process.cwd(), answersFileName), formatAnswersJson(answers));
|
|
4662
4758
|
log5.success(`Wrote ${answersFileName}`);
|
|
4663
4759
|
const overlayFlag = customTemplate ? ` --customTemplate=${customTemplate}` : "";
|
|
4664
4760
|
note(`npm create @mnaoumov/obsidian-plugin -- --yes --mode=create --answersFile=${answersFileName}${overlayFlag}`, "Non-interactive command");
|
|
@@ -4709,7 +4805,7 @@ async function runCreate(currentVersion, cliArgs) {
|
|
|
4709
4805
|
if (!useDefaults) {
|
|
4710
4806
|
await offerAnswersExport(answers, customTemplate);
|
|
4711
4807
|
}
|
|
4712
|
-
const targetDir =
|
|
4808
|
+
const targetDir = join9(process.cwd(), `obsidian-${answers.pluginId}`);
|
|
4713
4809
|
if (existsSync8(targetDir) && !cliArgs.force) {
|
|
4714
4810
|
if (useDefaults) {
|
|
4715
4811
|
exitWithUsageError(`Directory obsidian-${answers.pluginId} already exists, and --yes cannot ask whether to scaffold into it.
|
|
@@ -4739,14 +4835,14 @@ Pass --force to scaffold into it anyway.`);
|
|
|
4739
4835
|
newConfig = copyTemplates(answers, targetDir, currentVersion, null, resolvedVersions, minAppVersion, overlay);
|
|
4740
4836
|
s.stop("Plugin scaffolded.");
|
|
4741
4837
|
}
|
|
4742
|
-
const configPath =
|
|
4838
|
+
const configPath = join9(targetDir, CONFIG_FILE_NAME);
|
|
4743
4839
|
const configWithAnswers = buildSavedConfig(newConfig, answers, overlay, targetDir);
|
|
4744
4840
|
writeFileSync2(configPath, `${JSON.stringify(configWithAnswers, null, JSON_INDENT_SPACES4)}
|
|
4745
4841
|
`);
|
|
4746
4842
|
const isFormatted = useDefaults ? false : await runPostScaffold(targetDir, answers);
|
|
4747
4843
|
const pm = answers.packageManager;
|
|
4748
4844
|
const dirName = `obsidian-${answers.pluginId}`;
|
|
4749
|
-
const needsInstall = !existsSync8(
|
|
4845
|
+
const needsInstall = !existsSync8(join9(targetDir, "node_modules"));
|
|
4750
4846
|
const needsFormat = needsInitialFormat(answers.formatter) && !isFormatted;
|
|
4751
4847
|
const steps = [
|
|
4752
4848
|
...needsInstall ? [getInstallCommand(pm)] : [],
|
|
@@ -4764,7 +4860,7 @@ async function runInitialFormat(targetDir, answers, isInstalled) {
|
|
|
4764
4860
|
s.start("Formatting...");
|
|
4765
4861
|
try {
|
|
4766
4862
|
await execAsync(getRunCommand(answers.packageManager, "format"), targetDir);
|
|
4767
|
-
const configPath =
|
|
4863
|
+
const configPath = join9(targetDir, CONFIG_FILE_NAME);
|
|
4768
4864
|
const config = JSON.parse(readFileSync8(configPath, "utf-8"));
|
|
4769
4865
|
writeFileSync2(configPath, `${JSON.stringify(recordHashesOnDisk(targetDir, config), null, JSON_INDENT_SPACES4)}
|
|
4770
4866
|
`);
|
|
@@ -4859,7 +4955,7 @@ This project records it in ${CONFIG_FILE_NAME}. Pass --customTemplate=<dir> to p
|
|
|
4859
4955
|
);
|
|
4860
4956
|
log5.info(`Applying the custom template recorded for this project: ${existingConfig.customTemplate}`);
|
|
4861
4957
|
}
|
|
4862
|
-
const configPath =
|
|
4958
|
+
const configPath = join9(targetDir, CONFIG_FILE_NAME);
|
|
4863
4959
|
const savedConfig = JSON.parse(readFileSync8(configPath, "utf-8"));
|
|
4864
4960
|
let answers;
|
|
4865
4961
|
if (savedConfig.answers) {
|