diff --git a/eslint.config.mts b/eslint.config.mts index 1e761e3..e0f50cd 100644 --- a/eslint.config.mts +++ b/eslint.config.mts @@ -1,2 +1,4 @@ import { configs } from 'obsidian-dev-utils/ScriptUtils/ESLint/eslint.config'; + +// eslint-disable-next-line import-x/no-default-export export default configs; diff --git a/package-lock.json b/package-lock.json index 713746c..a9e1438 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@types/node": "^22.14.0", "jiti": "^2.4.2", "obsidian": "^1.8.7", - "obsidian-dev-utils": "^22.1.1-beta.15", + "obsidian-dev-utils": "^22.1.1-beta.28", "obsidian-typings": "^2.41.4" } }, @@ -922,6 +922,21 @@ "tslib": "^2.4.0" } }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz", + "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.1.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", @@ -3603,6 +3618,16 @@ "node": ">=4" } }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -4074,6 +4099,16 @@ "node": ">= 6" } }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/compare-versions": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", @@ -4801,6 +4836,13 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT" + }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -5118,6 +5160,56 @@ "node": ">=10" } }, + "node_modules/eslint-plugin-jsdoc": { + "version": "50.6.9", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.9.tgz", + "integrity": "sha512-7/nHu3FWD4QRG8tCVqcv+BfFtctUtEDWc29oeDXB4bwmDM2/r1ndl14AG/2DUntdqH7qmpvdemJKwb3R97/QEw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@es-joy/jsdoccomment": "~0.49.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.3.6", + "escape-string-regexp": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.6.0", + "parse-imports": "^2.1.1", + "semver": "^7.6.3", + "spdx-expression-parse": "^4.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/eslint-plugin-modules-newlines": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/eslint-plugin-modules-newlines/-/eslint-plugin-modules-newlines-0.0.7.tgz", @@ -5160,76 +5252,6 @@ "@microsoft/tsdoc-config": "0.17.1" } }, - "node_modules/eslint-plugin-verify-tsdoc": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/eslint-plugin-verify-tsdoc/-/eslint-plugin-verify-tsdoc-1.0.20.tgz", - "integrity": "sha512-IZ02Qi2sVXxtAVLCfTl8v7ajZ6ppVwiOWW0b2ukLyiee8XJRJO+fV9SfWPCu2C/ZZm/T5Imf8zQsIG4z61wSgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "^0.14.2", - "@microsoft/tsdoc-config": "^0.16.2", - "@types/eslint": "^8.56.2", - "eslint-plugin-tsdoc": "^0.2.17", - "minimatch": "^9.0.4" - } - }, - "node_modules/eslint-plugin-verify-tsdoc/node_modules/@microsoft/tsdoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", - "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-verify-tsdoc/node_modules/@microsoft/tsdoc-config": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", - "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" - } - }, - "node_modules/eslint-plugin-verify-tsdoc/node_modules/@types/eslint": { - "version": "8.56.12", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", - "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/eslint-plugin-verify-tsdoc/node_modules/eslint-plugin-tsdoc": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz", - "integrity": "sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "0.16.2" - } - }, - "node_modules/eslint-plugin-verify-tsdoc/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/eslint-scope": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", @@ -6925,6 +6947,16 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -8204,9 +8236,9 @@ } }, "node_modules/obsidian-dev-utils": { - "version": "22.1.1-beta.15", - "resolved": "https://registry.npmjs.org/obsidian-dev-utils/-/obsidian-dev-utils-22.1.1-beta.15.tgz", - "integrity": "sha512-LU08waTIJJpqlxQ+ctJj5JyOWZKXtYS3Q1nlAYHIKH3I3lTgkgebivzgRhMb8x6bQzrHhRn0lVIxOGPBGBLUGQ==", + "version": "22.1.1-beta.28", + "resolved": "https://registry.npmjs.org/obsidian-dev-utils/-/obsidian-dev-utils-22.1.1-beta.28.tgz", + "integrity": "sha512-dLKfOBwk801Fr4m7w7o1lYE5sFdJDOaN3j/qn/zvJUXaP6nciUaPHFvol55fHW10uhZMzniiBPieen2lHAYxfw==", "dev": true, "license": "MIT", "dependencies": { @@ -8243,11 +8275,10 @@ "eslint": "^9.24.0", "eslint-import-resolver-typescript": "^4.3.1", "eslint-plugin-import-x": "^4.10.0", + "eslint-plugin-jsdoc": "^50.6.9", "eslint-plugin-modules-newlines": "^0.0.7", "eslint-plugin-perfectionist": "^4.11.0", "eslint-plugin-tsdoc": "^0.4.0", - "eslint-plugin-verify-tsdoc": "^1.0.20", - "eventemitter3": "^5.0.1", "glob": "^11.0.1", "jiti": "^2.4.2", "localforage": "^1.10.0", @@ -8278,13 +8309,6 @@ "obsidian-dev-utils": "dist/bin/cli.cjs" } }, - "node_modules/obsidian-dev-utils/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, - "license": "MIT" - }, "node_modules/obsidian-typings": { "version": "2.41.4", "resolved": "https://registry.npmjs.org/obsidian-typings/-/obsidian-typings-2.41.4.tgz", @@ -8460,6 +8484,20 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/parse-imports": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", + "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", + "dev": true, + "license": "Apache-2.0 AND MIT", + "dependencies": { + "es-module-lexer": "^1.5.3", + "slashes": "^3.0.12" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -9922,6 +9960,13 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/slashes": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", + "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", + "dev": true, + "license": "ISC" + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -10380,6 +10425,36 @@ "node": ">=16.0.0" } }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/synckit/node_modules/@pkgr/core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz", + "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", diff --git a/package.json b/package.json index cf0524f..2d7c9a6 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "@types/node": "^22.14.0", "jiti": "^2.4.2", "obsidian": "^1.8.7", - "obsidian-dev-utils": "^22.1.1-beta.15", + "obsidian-dev-utils": "^22.1.1-beta.28", "obsidian-typings": "^2.41.4" }, "overrides": { diff --git a/src/Plugin.ts b/src/Plugin.ts index 80ae070..adec59b 100644 --- a/src/Plugin.ts +++ b/src/Plugin.ts @@ -1,8 +1,4 @@ -import type { - PluginSettingTab, - TFile -} from 'obsidian'; -import type { PluginSettingsManagerBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginSettingsManagerBase'; +import type { TFile } from 'obsidian'; import type { BacklinkPlugin, BacklinkView, @@ -24,22 +20,23 @@ import { ViewType } from 'obsidian-typings/implementations'; -import { PluginSettings } from './PluginSettings.ts'; +import type { PluginTypes } from './PluginTypes.ts'; + import { PluginSettingsManager } from './PluginSettingsManager.ts'; import { PluginSettingsTab } from './PluginSettingsTab.ts'; type AddResultFn = TreeDom['addResult']; -export class Plugin extends PluginBase { +export class Plugin extends PluginBase { public override async onSaveSettings(): Promise { await this.refreshBacklinkPanels(); } - protected override createPluginSettingsTab(): null | PluginSettingTab { + protected override createPluginSettingsTab(): null | PluginSettingsTab { return new PluginSettingsTab(this); } - protected override createSettingsManager(): PluginSettingsManagerBase { + protected override createSettingsManager(): PluginSettingsManager { return new PluginSettingsManager(this); } diff --git a/src/PluginSettingsManager.ts b/src/PluginSettingsManager.ts index f3decb2..d06d0d7 100644 --- a/src/PluginSettingsManager.ts +++ b/src/PluginSettingsManager.ts @@ -1,8 +1,10 @@ import { PluginSettingsManagerBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginSettingsManagerBase'; +import type { PluginTypes } from './PluginTypes.ts'; + import { PluginSettings } from './PluginSettings.ts'; -export class PluginSettingsManager extends PluginSettingsManagerBase { +export class PluginSettingsManager extends PluginSettingsManagerBase { protected override createDefaultSettings(): PluginSettings { return new PluginSettings(); } diff --git a/src/PluginSettingsTab.ts b/src/PluginSettingsTab.ts index f744620..82ec1fa 100644 --- a/src/PluginSettingsTab.ts +++ b/src/PluginSettingsTab.ts @@ -3,9 +3,9 @@ import { appendCodeBlock } from 'obsidian-dev-utils/HTMLElement'; import { PluginSettingsTabBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginSettingsTabBase'; import { SettingEx } from 'obsidian-dev-utils/obsidian/SettingEx'; -import type { Plugin } from './Plugin.ts'; +import type { PluginTypes } from './PluginTypes.ts'; -export class PluginSettingsTab extends PluginSettingsTabBase { +export class PluginSettingsTab extends PluginSettingsTabBase { public override display(): void { this.containerEl.empty(); @@ -43,9 +43,7 @@ export class PluginSettingsTab extends PluginSettingsTabBase { })) .addNumber((numberComponent) => { this.bind(numberComponent, 'pathDepth') - .setMin(0) - .setPlaceholder('0'); - numberComponent.inputEl.required = true; + .setMin(0); }); new Setting(this.containerEl) diff --git a/src/PluginTypes.ts b/src/PluginTypes.ts new file mode 100644 index 0000000..94daee5 --- /dev/null +++ b/src/PluginTypes.ts @@ -0,0 +1,13 @@ +import type { PluginTypesBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginTypesBase'; + +import type { Plugin } from './Plugin.ts'; +import type { PluginSettings } from './PluginSettings.ts'; +import type { PluginSettingsManager } from './PluginSettingsManager.ts'; +import type { PluginSettingsTab } from './PluginSettingsTab.ts'; + +export interface PluginTypes extends PluginTypesBase { + plugin: Plugin; + pluginSettings: PluginSettings; + pluginSettingsManager: PluginSettingsManager; + pluginSettingsTab: PluginSettingsTab; +} diff --git a/tsconfig.json b/tsconfig.json index 8a33edf..ded06f7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,8 +26,10 @@ "verbatimModuleSyntax": true }, "include": [ + "./eslint.config.*ts", "./src/**/*.svelte", "./src/**/*.ts", + "./src/**/*.tsx", "./scripts/**/*.ts" ] }