New template

This commit is contained in:
Michael Naumov 2025-04-07 00:03:37 -06:00
parent 03476a0ccc
commit 3e0f9072fe
8 changed files with 186 additions and 94 deletions

View file

@ -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;

241
package-lock.json generated
View file

@ -14,7 +14,7 @@
"eruda": "^3.4.1",
"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",
"type-fest": "^4.39.1"
}
@ -924,6 +924,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",
@ -3605,6 +3620,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",
@ -4076,6 +4101,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",
@ -4810,6 +4845,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",
@ -5127,6 +5169,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",
@ -5169,76 +5261,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",
@ -6934,6 +6956,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",
@ -8213,9 +8245,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": {
@ -8252,11 +8284,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",
@ -8287,13 +8318,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",
@ -8469,6 +8493,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",
@ -9931,6 +9969,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",
@ -10389,6 +10434,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",

View file

@ -26,7 +26,7 @@
"eruda": "^3.4.1",
"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",
"type-fest": "^4.39.1"
},

View file

@ -1,9 +1,6 @@
import type { PluginSettingTab } from 'obsidian';
import type { PluginSettingsManagerBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginSettingsManagerBase';
import { PluginBase } from 'obsidian-dev-utils/obsidian/Plugin/PluginBase';
import type { PluginSettings } from './PluginSettings.ts';
import type { PluginTypes } from './PluginTypes.ts';
import { DevToolsComponent } from './Components/DevToolsComponent.ts';
import { LongRunningTasksComponent } from './Components/LongRunningTasksComponent.ts';
@ -12,7 +9,7 @@ import { getPlatformDependencies } from './PlatformDependencies.ts';
import { PluginSettingsManager } from './PluginSettingsManager.ts';
import { PluginSettingsTab } from './PluginSettingsTab.ts';
export class Plugin extends PluginBase<PluginSettings> {
export class Plugin extends PluginBase<PluginTypes> {
private longRunningTasksComponent!: LongRunningTasksComponent;
private longStackTracesComponent!: LongStackTracesComponent;
@ -38,15 +35,16 @@ export class Plugin extends PluginBase<PluginSettings> {
Error.stackTraceLimit = this.settings.stackTraceLimit || Infinity;
}
protected override createPluginSettingsTab(): null | PluginSettingTab {
protected override createPluginSettingsTab(): null | PluginSettingsTab {
return new PluginSettingsTab(this);
}
protected override createSettingsManager(): PluginSettingsManagerBase<PluginSettings> {
protected override createSettingsManager(): PluginSettingsManager {
return new PluginSettingsManager(this);
}
protected override async onloadComplete(): Promise<void> {
protected override async onloadImpl(): Promise<void> {
await super.onloadImpl();
const originalStackTraceLimit = Error.stackTraceLimit;
this.register(() => {
Error.stackTraceLimit = originalStackTraceLimit;

View file

@ -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<PluginSettings> {
export class PluginSettingsManager extends PluginSettingsManagerBase<PluginTypes> {
protected override createDefaultSettings(): PluginSettings {
return new PluginSettings();
}

View file

@ -8,8 +8,9 @@ import { PluginSettingsTabBase } from 'obsidian-dev-utils/obsidian/Plugin/Plugin
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<Plugin> {
export class PluginSettingsTab extends PluginSettingsTabBase<PluginTypes> {
public constructor(plugin: Plugin) {
super(plugin);
}

13
src/PluginTypes.ts Normal file
View file

@ -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;
}

View file

@ -26,6 +26,7 @@
"verbatimModuleSyntax": true
},
"include": [
"./eslint.config.*ts",
"./src/**/*.svelte",
"./src/**/*.ts",
"./src/**/*.tsx",