diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..258ca4e --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx --no -- nano-staged diff --git a/.markdownlint-cli2.mjs b/.markdownlint-cli2.mjs index 54768cb..ce084bc 100644 --- a/.markdownlint-cli2.mjs +++ b/.markdownlint-cli2.mjs @@ -1,5 +1,4 @@ import { createJiti } from 'jiti'; const jiti = createJiti(import.meta.url); -const { config } = await jiti.import('./.markdownlint-cli2.mts'); -// eslint-disable-next-line import-x/no-default-export -- markdownlint-cli2 infrastructure requires a default export. +const { config } = await jiti.import('./scripts/markdownlint-cli2-config.ts'); export default config; diff --git a/.markdownlint-cli2.mts b/.markdownlint-cli2.mts deleted file mode 100644 index f282c5b..0000000 --- a/.markdownlint-cli2.mts +++ /dev/null @@ -1,7 +0,0 @@ -import type { MarkdownlintCli2ConfigurationSchema } from 'obsidian-dev-utils/ScriptUtils/markdownlint/@types/markdownlint-cli2-config-schema'; - -import { obsidianDevUtilsConfig } from 'obsidian-dev-utils/ScriptUtils/markdownlint/markdownlint-cli2-config'; - -export const config: MarkdownlintCli2ConfigurationSchema = { - ...obsidianDevUtilsConfig -}; diff --git a/.nano-staged.mjs b/.nano-staged.mjs new file mode 100644 index 0000000..bc23676 --- /dev/null +++ b/.nano-staged.mjs @@ -0,0 +1,5 @@ +import { createJiti } from 'jiti'; + +const jiti = createJiti(import.meta.url); +const { config } = await jiti.import('./scripts/nano-staged-config.ts'); +export default config; diff --git a/commitlint.config.ts b/commitlint.config.ts index 8adaec2..9019a59 100644 --- a/commitlint.config.ts +++ b/commitlint.config.ts @@ -1,8 +1,3 @@ -import type { UserConfig } from '@commitlint/types'; +import { config } from './scripts/commitlint-config.ts'; -const config: UserConfig = { - extends: ['@commitlint/config-conventional'] -}; - -// eslint-disable-next-line import-x/no-default-export -- Commitlint infrastructure requires a default export. export default config; diff --git a/eslint.config.mts b/eslint.config.mts index 8744583..42692ff 100644 --- a/eslint.config.mts +++ b/eslint.config.mts @@ -1,20 +1,3 @@ -import type { Linter } from 'eslint'; +import { configs } from './scripts/eslint-config.ts'; -import { obsidianDevUtilsConfigs } from 'obsidian-dev-utils/ScriptUtils/ESLint/eslint.config'; - -const configs: Linter.Config[] = [ - ...obsidianDevUtilsConfigs, - { - rules: { - 'obsidianmd/ui/sentence-case': [ - 'error', - { - brands: ['Filename Heading Sync'] - } - ] - } - } -]; - -// eslint-disable-next-line import-x/no-default-export -- ESLint infrastructure requires a default export. export default configs; diff --git a/package-lock.json b/package-lock.json index d274e87..a99dd43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,10 @@ "better-typescript-lib": "latest", "commitizen": "latest", "cz-conventional-changelog": "latest", + "eslint": "latest", "husky": "latest", "jiti": "latest", + "nano-staged": "latest", "obsidian": "latest", "obsidian-dev-utils": "latest", "obsidian-typings": "obsidian-public-latest" @@ -13803,6 +13805,19 @@ "dev": true, "license": "ISC" }, + "node_modules/nano-staged": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nano-staged/-/nano-staged-1.0.2.tgz", + "integrity": "sha512-Fytar3zHLY99nlMfqPPbraxZodqQAHPpdPRyYaplL+lB9DCR6pUrafxbG+Btz4+7fO5Rm/+DO4ZeDO/nLSUMhw==", + "dev": true, + "license": "MIT", + "bin": { + "nano-staged": "lib/bin.js" + }, + "engines": { + "node": "^22 || >= 24" + } + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", diff --git a/package.json b/package.json index 69640e9..f141fcb 100644 --- a/package.json +++ b/package.json @@ -3,22 +3,21 @@ "version": "2.2.1", "description": "Renames notes keeping previous title in existing links", "scripts": { - "build": "obsidian-dev-utils build", - "build:clean": "obsidian-dev-utils build:clean", - "build:compile": "obsidian-dev-utils build:compile", - "build:compile:svelte": "obsidian-dev-utils build:compile:svelte", - "build:compile:typescript": "obsidian-dev-utils build:compile:typescript", - "commit": "cz", - "dev": "obsidian-dev-utils dev", - "format": "obsidian-dev-utils format", - "format:check": "obsidian-dev-utils format:check", - "lint": "obsidian-dev-utils lint", - "lint:fix": "obsidian-dev-utils lint:fix", - "lint:md": "obsidian-dev-utils lint:md", - "lint:md:fix": "obsidian-dev-utils lint:md:fix", - "prepare": "husky", - "spellcheck": "obsidian-dev-utils spellcheck", - "version": "obsidian-dev-utils version" + "build": "jiti scripts/build.ts", + "build:clean": "jiti scripts/build-clean.ts", + "build:compile": "jiti scripts/build-compile.ts", + "build:compile:typescript": "jiti scripts/build-compile-typescript.ts", + "commit": "jiti scripts/commit.ts", + "dev": "jiti scripts/dev.ts", + "format": "jiti scripts/format.ts", + "format:check": "jiti scripts/format-check.ts", + "lint": "jiti scripts/lint.ts", + "lint:fix": "jiti scripts/lint-fix.ts", + "lint:md": "jiti scripts/lint-md.ts", + "lint:md:fix": "jiti scripts/lint-md-fix.ts", + "prepare": "jiti scripts/prepare.ts", + "spellcheck": "jiti scripts/spellcheck.ts", + "version": "jiti scripts/version.ts" }, "keywords": [], "author": "mnaoumov", @@ -33,8 +32,10 @@ "better-typescript-lib": "latest", "commitizen": "latest", "cz-conventional-changelog": "latest", + "eslint": "latest", "husky": "latest", "jiti": "latest", + "nano-staged": "latest", "obsidian": "latest", "obsidian-dev-utils": "latest", "obsidian-typings": "obsidian-public-latest" @@ -43,7 +44,9 @@ "@antfu/utils": "9.2.0", "boolean": "npm:dry-uninstall", "dompurify": "3.0.1", - "type-fest": "latest" + "eslint": "latest", + "type-fest": "latest", + "typescript": "latest" }, "type": "module" } diff --git a/scripts/build-clean.ts b/scripts/build-clean.ts new file mode 100644 index 0000000..4243366 --- /dev/null +++ b/scripts/build-clean.ts @@ -0,0 +1,4 @@ +import { buildClean } from 'obsidian-dev-utils/script-utils/build'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; + +await wrapCliTask(() => buildClean()); diff --git a/scripts/build-compile-typescript.ts b/scripts/build-compile-typescript.ts new file mode 100644 index 0000000..76862d3 --- /dev/null +++ b/scripts/build-compile-typescript.ts @@ -0,0 +1,4 @@ +import { buildCompileTypeScript } from 'obsidian-dev-utils/script-utils/build'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; + +await wrapCliTask(() => buildCompileTypeScript()); diff --git a/scripts/build-compile.ts b/scripts/build-compile.ts new file mode 100644 index 0000000..76862d3 --- /dev/null +++ b/scripts/build-compile.ts @@ -0,0 +1,4 @@ +import { buildCompileTypeScript } from 'obsidian-dev-utils/script-utils/build'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; + +await wrapCliTask(() => buildCompileTypeScript()); diff --git a/scripts/build.ts b/scripts/build.ts new file mode 100644 index 0000000..8a32817 --- /dev/null +++ b/scripts/build.ts @@ -0,0 +1,4 @@ +import { build } from 'obsidian-dev-utils/script-utils/bundlers/esbuild'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; + +await wrapCliTask(() => build()); diff --git a/scripts/commit.ts b/scripts/commit.ts new file mode 100644 index 0000000..9f711fb --- /dev/null +++ b/scripts/commit.ts @@ -0,0 +1,3 @@ +import { exec } from 'obsidian-dev-utils/script-utils/exec'; + +await exec('cz'); diff --git a/scripts/commitlint-config.ts b/scripts/commitlint-config.ts new file mode 100644 index 0000000..844ae98 --- /dev/null +++ b/scripts/commitlint-config.ts @@ -0,0 +1,3 @@ +import { obsidianDevUtilsConfig } from 'obsidian-dev-utils/script-utils/commitlint-config'; + +export const config = obsidianDevUtilsConfig; diff --git a/scripts/dev.ts b/scripts/dev.ts new file mode 100644 index 0000000..10b217f --- /dev/null +++ b/scripts/dev.ts @@ -0,0 +1,4 @@ +import { dev } from 'obsidian-dev-utils/script-utils/bundlers/esbuild'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; + +await wrapCliTask(() => dev()); diff --git a/scripts/eslint-config.ts b/scripts/eslint-config.ts new file mode 100644 index 0000000..03e5523 --- /dev/null +++ b/scripts/eslint-config.ts @@ -0,0 +1,19 @@ +import type { Linter } from 'eslint'; + +import { defineConfig } from 'eslint/config'; +import { defineEslintConfigs } from 'obsidian-dev-utils/script-utils/linters/eslint-config'; + +export const configs: Linter.Config[] = defineEslintConfigs({ + customConfigs() { + return defineConfig({ + rules: { + 'obsidianmd/ui/sentence-case': [ + 'error', + { + brands: ['Filename Heading Sync'] + } + ] + } + }); + } +}); diff --git a/scripts/format-check.ts b/scripts/format-check.ts new file mode 100644 index 0000000..51a7d7f --- /dev/null +++ b/scripts/format-check.ts @@ -0,0 +1,7 @@ +import process from 'node:process'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; +import { format } from 'obsidian-dev-utils/script-utils/formatters/dprint'; + +const [, , ...paths] = process.argv; + +await wrapCliTask(() => format({ paths, rewrite: false })); diff --git a/scripts/format.ts b/scripts/format.ts new file mode 100644 index 0000000..15b2ef6 --- /dev/null +++ b/scripts/format.ts @@ -0,0 +1,7 @@ +import process from 'node:process'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; +import { format } from 'obsidian-dev-utils/script-utils/formatters/dprint'; + +const [, , ...paths] = process.argv; + +await wrapCliTask(() => format({ paths })); diff --git a/scripts/lint-fix.ts b/scripts/lint-fix.ts new file mode 100644 index 0000000..b104208 --- /dev/null +++ b/scripts/lint-fix.ts @@ -0,0 +1,7 @@ +import process from 'node:process'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; +import { lint } from 'obsidian-dev-utils/script-utils/linters/eslint'; + +const [, , ...paths] = process.argv; + +await wrapCliTask(() => lint({ paths, shouldFix: true })); diff --git a/scripts/lint-md-fix.ts b/scripts/lint-md-fix.ts new file mode 100644 index 0000000..c0128a5 --- /dev/null +++ b/scripts/lint-md-fix.ts @@ -0,0 +1,7 @@ +import process from 'node:process'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; +import { lint } from 'obsidian-dev-utils/script-utils/linters/markdownlint'; + +const [, , ...paths] = process.argv; + +await wrapCliTask(() => lint({ paths, shouldFix: true })); diff --git a/scripts/lint-md.ts b/scripts/lint-md.ts new file mode 100644 index 0000000..66fe05b --- /dev/null +++ b/scripts/lint-md.ts @@ -0,0 +1,7 @@ +import process from 'node:process'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; +import { lint } from 'obsidian-dev-utils/script-utils/linters/markdownlint'; + +const [, , ...paths] = process.argv; + +await wrapCliTask(() => lint({ paths })); diff --git a/scripts/lint.ts b/scripts/lint.ts new file mode 100644 index 0000000..5bd4341 --- /dev/null +++ b/scripts/lint.ts @@ -0,0 +1,7 @@ +import process from 'node:process'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; +import { lint } from 'obsidian-dev-utils/script-utils/linters/eslint'; + +const [, , ...paths] = process.argv; + +await wrapCliTask(() => lint({ paths })); diff --git a/scripts/markdownlint-cli2-config.ts b/scripts/markdownlint-cli2-config.ts new file mode 100644 index 0000000..79fa90e --- /dev/null +++ b/scripts/markdownlint-cli2-config.ts @@ -0,0 +1,3 @@ +import { obsidianDevUtilsConfig } from 'obsidian-dev-utils/script-utils/linters/markdownlint-cli2-config'; + +export const config = obsidianDevUtilsConfig; diff --git a/scripts/nano-staged-config.ts b/scripts/nano-staged-config.ts new file mode 100644 index 0000000..6eb87e0 --- /dev/null +++ b/scripts/nano-staged-config.ts @@ -0,0 +1,3 @@ +import { obsidianDevUtilsConfig } from 'obsidian-dev-utils/script-utils/nano-staged-config'; + +export const config = obsidianDevUtilsConfig; diff --git a/scripts/prepare.ts b/scripts/prepare.ts new file mode 100644 index 0000000..1a151b5 --- /dev/null +++ b/scripts/prepare.ts @@ -0,0 +1,3 @@ +import { execFromRoot } from 'obsidian-dev-utils/script-utils/root'; + +await execFromRoot('husky'); diff --git a/scripts/spellcheck.ts b/scripts/spellcheck.ts new file mode 100644 index 0000000..e37bad7 --- /dev/null +++ b/scripts/spellcheck.ts @@ -0,0 +1,7 @@ +import process from 'node:process'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; +import { spellcheck } from 'obsidian-dev-utils/script-utils/linters/cspell'; + +const [, , ...paths] = process.argv; + +await wrapCliTask(() => spellcheck({ paths })); diff --git a/scripts/version.ts b/scripts/version.ts new file mode 100644 index 0000000..a2658c4 --- /dev/null +++ b/scripts/version.ts @@ -0,0 +1,6 @@ +import process from 'node:process'; +import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils'; +import { updateVersion } from 'obsidian-dev-utils/script-utils/version'; + +const [, , versionUpdateType] = process.argv; +await wrapCliTask(() => updateVersion(versionUpdateType)); diff --git a/src/Plugin.ts b/src/Plugin.ts index 170e1a5..495472a 100644 --- a/src/Plugin.ts +++ b/src/Plugin.ts @@ -9,7 +9,7 @@ import { import { normalizeOptionalProperties, toJson -} from 'obsidian-dev-utils/ObjectUtils'; +} from 'obsidian-dev-utils/object-utils'; import { addAlias, processFrontmatter @@ -28,8 +28,8 @@ import { getCacheSafe } from 'obsidian-dev-utils/obsidian/MetadataCache'; import { prompt } from 'obsidian-dev-utils/obsidian/Modals/Prompt'; -import { PluginBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginBase'; -import { addToQueue } from 'obsidian-dev-utils/obsidian/Queue'; +import { PluginBase } from 'obsidian-dev-utils/obsidian/plugin/plugin-base'; +import { addToQueue } from 'obsidian-dev-utils/obsidian/queue'; import { getOsAndObsidianUnsafePathCharsRegExp } from 'obsidian-dev-utils/obsidian/Validation'; import { process } from 'obsidian-dev-utils/obsidian/Vault'; import { @@ -37,8 +37,8 @@ import { extname, join, makeFileName -} from 'obsidian-dev-utils/Path'; -import { insertAt } from 'obsidian-dev-utils/String'; +} from 'obsidian-dev-utils/path'; +import { insertAt } from 'obsidian-dev-utils/string'; import { isFrontmatterLinkCache, isReferenceCache diff --git a/src/PluginSettingsManager.ts b/src/PluginSettingsManager.ts index 9d5eb57..1c0c824 100644 --- a/src/PluginSettingsManager.ts +++ b/src/PluginSettingsManager.ts @@ -1,6 +1,6 @@ -import type { MaybeReturn } from 'obsidian-dev-utils/Type'; +import type { MaybeReturn } from 'obsidian-dev-utils/type'; -import { PluginSettingsManagerBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginSettingsManagerBase'; +import { PluginSettingsManagerBase } from 'obsidian-dev-utils/obsidian/plugin/plugin-settings-manager-base'; import type { PluginTypes } from './PluginTypes.ts'; diff --git a/src/PluginSettingsTab.ts b/src/PluginSettingsTab.ts index 0665fbb..3c393dc 100644 --- a/src/PluginSettingsTab.ts +++ b/src/PluginSettingsTab.ts @@ -1,5 +1,5 @@ -import { appendCodeBlock } from 'obsidian-dev-utils/HTMLElement'; -import { PluginSettingsTabBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginSettingsTabBase'; +import { appendCodeBlock } from 'obsidian-dev-utils/html-element'; +import { PluginSettingsTabBase } from 'obsidian-dev-utils/obsidian/plugin/plugin-settings-tab-base'; import { SettingGroupEx } from 'obsidian-dev-utils/obsidian/SettingGroupEx'; import type { PluginTypes } from './PluginTypes.ts'; diff --git a/src/PluginTypes.ts b/src/PluginTypes.ts index 94daee5..4c2db0e 100644 --- a/src/PluginTypes.ts +++ b/src/PluginTypes.ts @@ -1,4 +1,4 @@ -import type { PluginTypesBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginTypesBase'; +import type { PluginTypesBase } from 'obsidian-dev-utils/obsidian/plugin/plugin-types-base'; import type { Plugin } from './Plugin.ts'; import type { PluginSettings } from './PluginSettings.ts';